From 06c173e077f1aa647cc704234c1150c253ad7e72 Mon Sep 17 00:00:00 2001 From: KazeEspada Date: Tue, 5 Apr 2016 13:46:01 -0700 Subject: [PATCH 001/228] Lava Proofs some mechs. The firefighter ripley and the maurader mecha family are now lava proof. Firefighters now have a better niche as the only mech available to the crew that can cross lava. The only version of the Maurader available to players is the Mauler, and on average, nuke ops and lava will never come in contact. --- code/game/mecha/combat/marauder.dm | 1 + code/game/mecha/working/ripley.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index f77983a53f8..246ec7b18d9 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -7,6 +7,7 @@ deflect_chance = 25 damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7) max_temperature = 60000 + burn_state = LAVA_PROOF infra_luminosity = 3 operation_req_access = list(access_cent_specops) wreckage = /obj/structure/mecha_wreckage/marauder diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index a1260748a42..2ab2af927af 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -61,6 +61,7 @@ icon_state = "firefighter" max_temperature = 65000 health = 250 + burn_state = LAVA_PROOF lights_power = 7 damage_absorption = list("brute"=0.6,"fire"=0.5,"bullet"=0.7,"laser"=0.7,"energy"=1,"bomb"=0.4) max_equip = 5 // More armor, less tools From 2d9d65e5503f24a6960d2e6ed011e08d7fe8edae Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Thu, 7 Apr 2016 19:20:42 -0700 Subject: [PATCH 002/228] Fluorosulfuric SACid :cl: Iamgoofball & Super Aggro Crag tweak: Fluorosulfuric Acid now has doubled acid power. experimental: Fluorosulfuric Acid now does BONUS burn damage scaling on the time it's been inside the consumer. /:cl: --- code/modules/reagents/chemistry/reagents/toxin_reagents.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index a216e2ecdd2..a9dce456941 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -695,4 +695,7 @@ description = "Fluorosulfuric acid is a an extremely corrosive chemical substance." color = "#8E18A9" // rgb: 142, 24, 169 toxpwr = 2 - acidpwr = 20 + acidpwr = 42//0 +/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/M) + M.adjustBurnLoss(current_cycle/10) // MY INSIDES ARE MELTING HELP + ..() From 57cf5927d6abbab9289fa662af8cbb4419c8fbd3 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Fri, 8 Apr 2016 23:54:23 -0700 Subject: [PATCH 003/228] Update toxin_reagents.dm --- code/modules/reagents/chemistry/reagents/toxin_reagents.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index a9dce456941..f3ea013dd23 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -695,7 +695,7 @@ description = "Fluorosulfuric acid is a an extremely corrosive chemical substance." color = "#8E18A9" // rgb: 142, 24, 169 toxpwr = 2 - acidpwr = 42//0 + acidpwr = 42.0 /datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/M) - M.adjustBurnLoss(current_cycle/10) // MY INSIDES ARE MELTING HELP + M.adjustFireLoss(current_cycle/10) // MY INSIDES ARE MELTING HELP ..() From 3ed7f0ee19684c6b0f6df152ffae3e7b37e91543 Mon Sep 17 00:00:00 2001 From: topham1 Date: Thu, 14 Apr 2016 03:27:03 -0500 Subject: [PATCH 004/228] adds two showers and a mirror to boxstation's medbay --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 90408ea16ac..00d9caa71f9 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -37497,14 +37497,9 @@ icon_state = "alarm0"; pixel_x = -22 }, -/obj/machinery/camera{ - c_tag = "Medbay Treatment Center"; - dir = 4; - network = list("SS13"); - pixel_x = 0; - pixel_y = 0 +/obj/machinery/shower{ + dir = 4 }, -/obj/machinery/iv_drip, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -38106,17 +38101,25 @@ /turf/open/floor/plating, /area/security/checkpoint/supply) "bAp" = ( -/obj/machinery/iv_drip, +/obj/structure/closet/secure_closet/medical1, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, /turf/open/floor/plasteel{ icon_state = "white" }, /area/medical/sleeper) "bAq" = ( -/obj/machinery/light, /obj/machinery/sleeper{ icon_state = "sleeper-open"; dir = 8 }, +/obj/machinery/camera{ + c_tag = "Arrivals Bay 2"; + dir = 8; + network = list("SS13") + }, /turf/open/floor/plasteel, /area/medical/sleeper) "bAr" = ( @@ -38490,9 +38493,6 @@ }, /obj/item/clothing/suit/straight_jacket, /obj/item/clothing/mask/muzzle, -/obj/machinery/light/small{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38846,6 +38846,7 @@ dir = 2; pixel_y = 24 }, +/obj/machinery/iv_drip, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -39323,7 +39324,6 @@ /obj/item/weapon/folder/white, /obj/item/weapon/gun/syringe, /obj/item/weapon/reagent_containers/dropper, -/obj/item/weapon/soap/nanotrasen, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -39431,6 +39431,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/bed, +/obj/item/weapon/bedsheet/medical, /turf/open/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" @@ -39808,11 +39810,10 @@ }, /area/medical/sleeper) "bDD" = ( -/obj/structure/bed, -/obj/item/weapon/bedsheet/medical, /obj/structure/sign/nosmoking_2{ pixel_x = -28 }, +/obj/machinery/door/window/southright, /turf/open/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -39829,6 +39830,7 @@ network = list("SS13") }, /obj/structure/closet/wardrobe/pjs, +/obj/structure/window/reinforced, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -40788,6 +40790,7 @@ on = 1; pressure_checks = 1 }, +/obj/structure/window/reinforced, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -40871,7 +40874,8 @@ }, /area/medical/cmo) "bFF" = ( -/obj/machinery/light/small, +/obj/machinery/light, +/obj/item/weapon/soap/nanotrasen, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -40908,14 +40912,17 @@ }, /area/toxins/storage) "bFJ" = ( -/obj/structure/bed, -/obj/item/weapon/bedsheet/medical, +/obj/machinery/shower{ + dir = 4 + }, /turf/open/floor/plasteel{ icon_state = "white" }, /area/medical/sleeper) "bFK" = ( -/obj/structure/closet/secure_closet/medical1, +/obj/structure/mirror{ + pixel_x = 28 + }, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -58422,6 +58429,12 @@ }, /turf/open/space, /area/space) +"coT" = ( +/obj/machinery/iv_drip, +/turf/open/floor/plasteel{ + icon_state = "white" + }, +/area/medical/medbay) "coU" = ( /obj/structure/table, /obj/item/weapon/surgicaldrill, @@ -103490,7 +103503,7 @@ bua bua bua bua -bhh +coT bhh btV bof From 1980610d0da41a81c8cb110849d8edd80cce9686 Mon Sep 17 00:00:00 2001 From: topham1 Date: Thu, 14 Apr 2016 03:36:54 -0500 Subject: [PATCH 005/228] properly edits c_tag of repositioned security camera --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 130 ++++-------------- 1 file changed, 23 insertions(+), 107 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 00d9caa71f9..e05688d785b 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -2812,15 +2812,6 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/pod_3) "afq" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/status_display{ - density = 0; - layer = 3; - pixel_x = 0; - pixel_y = 32 - }, /obj/machinery/computer/shuttle/pod{ pixel_y = -32; possible_destinations = "pod_asteroid3"; @@ -2829,9 +2820,6 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/pod_3) "afr" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/item/device/radio/intercom{ pixel_y = 25 }, @@ -3098,9 +3086,6 @@ /obj/effect/landmark/start{ name = "Security Officer" }, -/obj/structure/chair{ - dir = 4 - }, /turf/open/floor/plasteel{ icon_state = "red"; dir = 8 @@ -3385,9 +3370,6 @@ /obj/effect/landmark/start{ name = "Security Officer" }, -/obj/structure/chair{ - dir = 4 - }, /turf/open/floor/plasteel{ icon_state = "redcorner"; dir = 1 @@ -3657,9 +3639,6 @@ /obj/effect/landmark/start{ name = "Security Officer" }, -/obj/structure/chair{ - dir = 4 - }, /turf/open/floor/plasteel, /area/security/main) "ahc" = ( @@ -4980,12 +4959,6 @@ /obj/structure/chair{ name = "Judge" }, -/obj/machinery/status_display{ - density = 0; - layer = 3; - pixel_x = 0; - pixel_y = 32 - }, /obj/machinery/light{ dir = 1 }, @@ -9133,9 +9106,6 @@ /turf/open/floor/wood, /area/lawoffice) "arY" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -10595,12 +10565,6 @@ }, /area/crew_quarters/sleep) "avm" = ( -/obj/machinery/status_display{ - density = 0; - layer = 3; - pixel_x = 0; - pixel_y = 32 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -11198,9 +11162,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness) "awB" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/effect/landmark/start{ name = "Assistant" }, @@ -21659,12 +21620,6 @@ name = "Library Desk Door"; req_access_txt = "37" }, -/obj/machinery/status_display{ - density = 0; - layer = 3; - pixel_x = 0; - pixel_y = 32 - }, /turf/open/floor/wood, /area/library) "aTd" = ( @@ -24561,12 +24516,6 @@ }, /area/crew_quarters/locker) "aZy" = ( -/obj/machinery/status_display{ - density = 0; - layer = 3; - pixel_x = 0; - pixel_y = 32 - }, /obj/machinery/camera{ c_tag = "Conference Room"; dir = 2 @@ -27024,9 +26973,6 @@ }, /area/quartermaster/office) "beW" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/effect/landmark/start{ name = "Cargo Technician" }, @@ -38116,7 +38062,7 @@ dir = 8 }, /obj/machinery/camera{ - c_tag = "Arrivals Bay 2"; + c_tag = "Medbay Treatment Center"; dir = 8; network = list("SS13") }, @@ -41805,9 +41751,6 @@ /turf/open/floor/plasteel, /area/toxins/mixing) "bHv" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/machinery/computer/security/telescreen{ desc = "Used for watching the test chamber."; dir = 8; @@ -42745,9 +42688,6 @@ /turf/open/floor/plasteel, /area/toxins/mixing) "bIW" = ( -/obj/structure/chair{ - dir = 4 - }, /turf/open/floor/plasteel{ dir = 6; icon_state = "warning" @@ -43408,9 +43348,6 @@ /turf/open/floor/plating/airless, /area/toxins/test_area) "bKh" = ( -/obj/structure/chair{ - dir = 4 - }, /turf/open/floor/plating/airless{ dir = 9; icon_state = "warnplate" @@ -44629,9 +44566,6 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "bMD" = ( -/obj/structure/chair{ - dir = 4 - }, /turf/open/floor/plating/airless{ dir = 10; icon_state = "warnplate" @@ -62771,9 +62705,6 @@ }, /area/shuttle/escape) "cxr" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/structure/window/reinforced{ dir = 8 }, @@ -63411,9 +63342,6 @@ }, /area/shuttle/abandoned) "czb" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/effect/decal/remains/human, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor3" @@ -63668,15 +63596,6 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/pod_2) "czL" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/status_display{ - density = 0; - layer = 3; - pixel_x = 0; - pixel_y = 32 - }, /obj/machinery/computer/shuttle/pod{ pixel_y = -32; possible_destinations = "pod_asteroid4"; @@ -63685,9 +63604,6 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/pod_4) "czM" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/item/device/radio/intercom{ pixel_y = 25 }, @@ -73925,7 +73841,7 @@ awW awW arB cxu -cxA +cxC cxC cxH cxu @@ -75652,10 +75568,10 @@ aTp aTp aac cmH -cml -cml -cml -cml +aTp +aTp +aTp +aTp coh aTp aTp @@ -87002,7 +86918,7 @@ akC alj alY amI -anq +amI anM aop aoY @@ -91104,8 +91020,8 @@ aeO afF agj agJ -ahr -ahr +ahs +ahs aiD agj ajz @@ -92404,7 +92320,7 @@ anz aov aph aoc -arc +ata arY ata auh @@ -100632,7 +100548,7 @@ arj arj asZ aua -avB +aua awB axY azh @@ -112463,10 +112379,10 @@ asB aCR aEm aCR -aHp -aIF -aHp -aIF +aPl +aQv +aPl +aQv aCR aNY aCR @@ -115814,11 +115730,11 @@ cxd cxe cwU cwL -cxk -cxk -cxk -cxk -cxk +cxa +cxa +cxa +cxa +cxa cwL cwU cxQ @@ -117096,7 +117012,7 @@ cwL cwX cwL cwL -cxk +cxa cxj cwL cxq @@ -117348,8 +117264,8 @@ aaa aaa crx cwG -cwM -cwM +cwL +cwL cwW cxa cwL From ef289c6b34172ddffa24f5b528dababe98d744b7 Mon Sep 17 00:00:00 2001 From: topham1 Date: Thu, 14 Apr 2016 12:41:14 -0500 Subject: [PATCH 006/228] reverts medbay change to almost perfectly reflect older design without ruining erp hut --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index e05688d785b..2d9cdf56cf0 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -36779,9 +36779,8 @@ pixel_x = -12; pixel_y = 2 }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/structure/mirror{ + pixel_x = -28 }, /turf/open/floor/plasteel{ icon_state = "white" @@ -38052,6 +38051,10 @@ icon_state = "tube1"; dir = 8 }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -38792,7 +38795,6 @@ dir = 2; pixel_y = 24 }, -/obj/machinery/iv_drip, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -39270,6 +39272,7 @@ /obj/item/weapon/folder/white, /obj/item/weapon/gun/syringe, /obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/soap/nanotrasen, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -39377,8 +39380,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/bed, -/obj/item/weapon/bedsheet/medical, +/obj/machinery/iv_drip, /turf/open/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" @@ -39759,7 +39761,8 @@ /obj/structure/sign/nosmoking_2{ pixel_x = -28 }, -/obj/machinery/door/window/southright, +/obj/structure/bed, +/obj/item/weapon/bedsheet/medical, /turf/open/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -39775,8 +39778,7 @@ dir = 8; network = list("SS13") }, -/obj/structure/closet/wardrobe/pjs, -/obj/structure/window/reinforced, +/obj/machinery/iv_drip, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -40736,7 +40738,6 @@ on = 1; pressure_checks = 1 }, -/obj/structure/window/reinforced, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -40821,7 +40822,6 @@ /area/medical/cmo) "bFF" = ( /obj/machinery/light, -/obj/item/weapon/soap/nanotrasen, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -40858,17 +40858,14 @@ }, /area/toxins/storage) "bFJ" = ( -/obj/machinery/shower{ - dir = 4 - }, +/obj/structure/bed, +/obj/item/weapon/bedsheet/medical, /turf/open/floor/plasteel{ icon_state = "white" }, /area/medical/sleeper) "bFK" = ( -/obj/structure/mirror{ - pixel_x = 28 - }, +/obj/structure/closet/wardrobe/pjs, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -58363,12 +58360,6 @@ }, /turf/open/space, /area/space) -"coT" = ( -/obj/machinery/iv_drip, -/turf/open/floor/plasteel{ - icon_state = "white" - }, -/area/medical/medbay) "coU" = ( /obj/structure/table, /obj/item/weapon/surgicaldrill, @@ -103419,7 +103410,7 @@ bua bua bua bua -coT +bhh bhh btV bof From 859714bfe66f45fa36d9031f0955e1d6421e0a06 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Sat, 16 Apr 2016 07:56:41 -0700 Subject: [PATCH 007/228] Adds a config for client versions --- code/controllers/configuration.dm | 14 ++++++++++++++ code/modules/client/client procs.dm | 21 +++++++++++++++++---- config/config.txt | 11 ++++++++++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 9d5364feac5..743d1328a13 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -197,6 +197,11 @@ // The object used for the clickable stat() button. var/obj/effect/statclick/statclick + var/client_warn_version = 0 + var/client_warn_message = "Your version of byond may have issues or be blocked from accessing this server in the future." + var/client_error_version = 0 + var/client_error_message = "Your version of byond is too old, may have issues, and is blocked from accessing this server." + /datum/configuration/New() var/list/L = subtypesof(/datum/game_mode) @@ -401,6 +406,15 @@ protected_config.autoadmin_rank = ckeyEx(value) if("generate_minimaps") config.generate_minimaps = 1 + if("client_warn_version") + config.client_warn_version = text2num(value) + if("client_warn_message") + config.client_warn_message = value + if("client_error_version") + config.client_error_version = text2num(value) + if("client_error_message") + config.client_error_message = value + else diary << "Unknown setting in configuration: '[name]'" diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 6c4d4bb2fce..9b2151039a4 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -2,8 +2,7 @@ //SECURITY// //////////// #define UPLOAD_LIMIT 1048576 //Restricts client uploads to the server to 1MB //Could probably do with being lower. -#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing. - //I would just like the code ready should it ever need to be used. + /* When somebody clicks a link in game, this Topic is called first. It does the stuff in this proc and then is redirected to the Topic() proc for the src=[0xWhatever] @@ -103,8 +102,6 @@ var/next_external_rsc = 0 if(connection != "seeker" && connection != "web")//Invalid connection type. return null - if(byond_version < MIN_CLIENT_VERSION) //Out of date client. - return null #if (PRELOAD_RSC == 0) if(external_rsc_urls && external_rsc_urls.len) @@ -143,6 +140,22 @@ var/next_external_rsc = 0 . = ..() //calls mob.Login() + if (byond_version < config.client_error_version) //Out of date client. + src << "Your version of byond is too old:" + src << config.client_error_message + src << "Your version: [byond_version]" + src << "Required version: [config.client_error_version] or later" + if (holder) + src << "Because you are an admin, you are being allowed to walk past this limitation, But it is still STRONGLY suggested you upgrade" + else + del(src) + return 0 + else if (byond_version < config.client_warn_version) //We have words for this client. + src << "Your version of byond may be getting out of date:" + src << config.client_warn_message + src << "Your version: [byond_version]" + src << "Required version to remove this message: [config.client_warn_version] or later" + if (connection == "web") if (!config.allowwebclient) src << "Web client is disabled" diff --git a/config/config.txt b/config/config.txt index 955ab657256..2bab69b8652 100644 --- a/config/config.txt +++ b/config/config.txt @@ -235,4 +235,13 @@ ANNOUNCE_ADMIN_LOGOUT ## GENERATE_MINIMAPS ## Generating minimaps(For crew monitor) is slow and bogs down testing, so its disabled by default and must be enabled by uncommenting this config if you are running a production server. -#GENERATE_MINIMAPS \ No newline at end of file +#GENERATE_MINIMAPS + +## CLIENT VERSION CONTROL +## This allows you to configure the minimum required client version, as well as a warning version, and message for both. +## These trigger for any version below (non-inclusive) the given version, so 510 triggers on 509 or lower. +## These messages will be followed by one stating the clients current version and the required version for clarity. +#CLIENT_WARN_VERSION 510 +#CLIENT_WARN_MESSAGE Byond is really close to releasing 510 beta as the stable release, please take this time to try it out. Reports are that the client preforms better then the version you are using, and also handles network lag better. Shortly after it's release we will end up using 510 client features and you will be forced to update. +#CLIENT_ERROR_VERSION 509 +#CLIENT_ERROR_MESSAGE Your version of byond is not supported. Please upgrade. \ No newline at end of file From a761c900b21c5854b3da85c50358cc7e39a74576 Mon Sep 17 00:00:00 2001 From: Leo Date: Sat, 16 Apr 2016 19:32:16 -0300 Subject: [PATCH 008/228] The return of queued midis --- code/modules/admin/verbs/playsound.dm | 32 +++++++++++++-------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index f2166945d65..7bb51127514 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -7,29 +7,27 @@ var/sound/admin_sound if(!check_rights(R_SOUNDS)) return - - var/sound/admin_sound = new() - admin_sound.file = S - admin_sound.priority = 250 - admin_sound.channel = SOUND_CHANNEL_ADMIN - admin_sound.wait = 1 - admin_sound.repeat = 0 - admin_sound.status = SOUND_UPDATE|SOUND_STREAM - log_admin("[key_name(src)] played sound [S]") message_admins("[key_name_admin(src)] played sound [S]") - + var/freq = 1 if(SSevent.holidays && SSevent.holidays[APRIL_FOOLS]) - admin_sound.frequency = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5) + freq = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5) src << "You feel the Honkmother messing with your song..." - + for(var/mob/M in player_list) if(M.client.prefs.toggles & SOUND_MIDI) var/vol = M.client.prefs.adminmusicvolume - M << sound(admin_sound,channel = SOUND_CHANNEL_ADMIN,volume=vol) - - admin_sound.frequency = 1 //Remove this line when the AFD stuff above is gone - admin_sound.wait = 0 + var/sound/admin_sound = new() + admin_sound.file = S + admin_sound.priority = 250 + admin_sound.channel = SOUND_CHANNEL_ADMIN + admin_sound.frequency = freq + admin_sound.wait = 1 + admin_sound.repeat = 0 + admin_sound.status = SOUND_STREAM + admin_sound.volume = vol + M << admin_sound + feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -72,4 +70,4 @@ var/sound/admin_sound M << sound(null) feedback_add_details("admin_verb","SS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -#undef SOUND_CHANNEL_ADMIN \ No newline at end of file +#undef SOUND_CHANNEL_ADMIN From b9e1f98531a9f995e5de777d57843aa98a55ae78 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 17 Apr 2016 21:18:03 +0100 Subject: [PATCH 009/228] Restructure demon consumption --- code/modules/mob/living/bloodcrawl.dm | 134 +++++++++++++++++--------- 1 file changed, 86 insertions(+), 48 deletions(-) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 43d343dcbf9..03dc55b5dc0 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -28,6 +28,9 @@ if(iscarbon(src)) var/mob/living/carbon/C = src if(C.l_hand || C.r_hand) + //TODO make it toggleable to either forcedrop the items, or deny + //entry when holding them + // literally only an option for carbons though C << "You may not hold items while blood crawling!" return 0 var/obj/item/weapon/bloodcrawl/B1 = new(C) @@ -37,58 +40,93 @@ C.put_in_hands(B1) C.put_in_hands(B2) C.regenerate_icons() - var/mob/living/kidnapped = null - var/turf/mobloc = get_turf(src.loc) src.notransform = TRUE spawn(0) - src.visible_message("[src] sinks into the pool of blood!") - playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1) - var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc) - src.ExtinguishMob() - if(buckled) - buckled.unbuckle_mob(src,force=1) - if(buckled_mobs.len) - unbuckle_all_mobs(force=1) - if(pulledby) - pulledby.stop_pulling() - if(src.pulling && src.bloodcrawl == BLOODCRAWL_EAT) - if(istype(src.pulling, /mob/living)) - var/mob/living/victim = src.pulling - if(victim.stat == CONSCIOUS) - src.visible_message("[victim] kicks free of the blood pool just before entering it!") - else if(victim.reagents && victim.reagents.has_reagent("demonsblood")) - visible_message("Something prevents [victim] from entering the pool!", "A strange force is blocking [victim] from entering!") - else - victim.loc = holder - victim.emote("scream") - src.visible_message("[src] drags [victim] into the pool of blood!") - kidnapped = victim - src.loc = holder - src.holder = holder - if(kidnapped) - src << "You begin to feast on [kidnapped]. You can not move while you are doing this." - for(var/i = 3; i > 0; i--) - playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1) - sleep(30) - if(kidnapped) - if(kidnapped.reagents && kidnapped.reagents.has_reagent("devilskiss")) - src << "AAH! THEIR FLESH! IT BURNS!" - adjustBruteLoss(25) //I can't use adjustHealth() here because bloodcrawl affects /mob/living and adjustHealth() only affects simple mobs - kidnapped.loc = get_turf(B) - kidnapped.visible_message("[B] violently expels [kidnapped]!") - else - src << "You devour [kidnapped]. Your health is fully restored." - src.adjustBruteLoss(-1000) - src.adjustFireLoss(-1000) - src.adjustOxyLoss(-1000) - src.adjustToxLoss(-1000) - kidnapped.ghostize() - qdel(kidnapped) - else - src << "You happily devour... nothing? Your meal vanished at some point!" - src.notransform = 0 + bloodpool_sink(B) + src.notransform = FALSE return 1 +/mob/living/proc/bloodpool_sink(obj/effect/decal/cleanable/B) + var/turf/mobloc = get_turf(src.loc) + + src.visible_message("[src] sinks into the pool of blood!") + playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1) + // Extinguish, unbuckle, stop being pulled, set our location into the + // dummy object + var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc) + src.ExtinguishMob() + if(buckled) + buckled.unbuckle_mob(src,force=1) + if(buckled_mobs.len) + unbuckle_all_mobs(force=1) + if(pulledby) + pulledby.stop_pulling() + src.loc = holder + src.holder = holder + + // if we're not pulling anyone, or we can't eat anyone + if(!src.pulling || src.bloodcrawl != BLOODCRAWL_EAT) + return + + // if the thing we're pulling isn't alive + if (!(istype(src.pulling, /mob/living))) + return + + var/mob/living/victim = src.pulling + var/kidnapped = FALSE + + if(victim.stat == CONSCIOUS) + src.visible_message("[victim] kicks free of the blood pool just before entering it!", null, "You hear splashing and struggling.") + else if(victim.reagents && victim.reagents.has_reagent("demonsblood")) + visible_message("Something prevents [victim] from entering the pool!", "A strange force is blocking [victim] from entering!", "You hear a splash and a thud.") + else + victim.loc = holder + victim.emote("scream") + src.visible_message("[src] drags [victim] into the pool of blood!", null, "You hear a splash.") + kidnapped = TRUE + + if(kidnapped) + var/success = bloodcrawl_consume(B, victim) + if(!success) + src << "You happily devour... nothing? Your meal vanished at some point!" + return 1 + +/mob/living/proc/bloodcrawl_consume(obj/effect/decal/cleanable/B, mob/living/victim) + src << "You begin to feast on [victim]. You can not move while you are doing this." + + for(var/i = 3; i > 0; i--) + playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1) + sleep(30) + + if(!victim) + return FALSE + + if(victim.reagents && victim.reagents.has_reagent("devilskiss")) + src << "AAH! THEIR FLESH! IT BURNS!" + adjustBruteLoss(25) //I can't use adjustHealth() here because bloodcrawl affects /mob/living and adjustHealth() only affects simple mobs + victim.loc = get_turf(B) + victim.visible_message("[B] violently expels [victim]!") + return TRUE + + src << "You devour [victim]. Your health is fully restored." + src.adjustBruteLoss(-1000) + src.adjustFireLoss(-1000) + src.adjustOxyLoss(-1000) + src.adjustToxLoss(-1000) + + // No defib possible after laughter + victim.adjustBruteLoss(1000) + victim.death() + + // Keep their corpse so rescue is possible + var/mob/living/simple_animal/slaughter/SD + if(istype(src, /mob/living/simple_animal/slaughter)) + SD = src + SD.consumed_mobs += victim + world << "DEBUG: [victim] added to [SD] consumed mobs" + + return TRUE + /obj/item/weapon/bloodcrawl name = "blood crawl" desc = "You are unable to hold anything while in this form." From bf4778dba5c20b626d6273bed8daa8fcc3f15355 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 17 Apr 2016 23:08:24 +0100 Subject: [PATCH 010/228] Fixes victim mobs being deleted when eaten This single line fix prevents the consumed mob from being deleted because of REASONS. Now rejoyce as you recover the eaten bodies of your friends when you finally kill the demon. --- code/modules/mob/living/bloodcrawl.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 03dc55b5dc0..08a081f834c 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -80,7 +80,7 @@ else if(victim.reagents && victim.reagents.has_reagent("demonsblood")) visible_message("Something prevents [victim] from entering the pool!", "A strange force is blocking [victim] from entering!", "You hear a splash and a thud.") else - victim.loc = holder + victim.loc = src victim.emote("scream") src.visible_message("[src] drags [victim] into the pool of blood!", null, "You hear a splash.") kidnapped = TRUE From 90ae21b7e50ffd05ceecc288be37ba93ac5ba45a Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 17 Apr 2016 23:48:22 +0100 Subject: [PATCH 011/228] Removed debug statement --- code/modules/mob/living/bloodcrawl.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 08a081f834c..24fe9c4a6f7 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -123,7 +123,6 @@ if(istype(src, /mob/living/simple_animal/slaughter)) SD = src SD.consumed_mobs += victim - world << "DEBUG: [victim] added to [SD] consumed mobs" return TRUE From 20d7ed7a48e1a8747f0353e450f64db90626034c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 11:18:04 +0100 Subject: [PATCH 012/228] Disabled keeping the bodies by default But you can turn it back on if you want. --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 9 ++++++--- code/modules/mob/living/bloodcrawl.dm | 11 +++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index cdbe0bffaa7..bb1ec1e815c 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -32,7 +32,9 @@ var/boost = 0 bloodcrawl = BLOODCRAWL_EAT see_invisible = SEE_INVISIBLE_MINIMUM - var/list/consumed_mobs = list() + // Set consumed_mobs to a list() to keep the corpses in the demon + // for later retrieval on demon death + var/list/consumed_mobs = null var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and dissaapearing from the station at will. \ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ @@ -63,8 +65,9 @@ new /obj/item/organ/internal/heart/demon (src.loc) playsound(get_turf(src),'sound/magic/demon_dies.ogg', 200, 1) visible_message("[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.") - for(var/mob/living/M in consumed_mobs) - M.loc = get_turf(src) + if(consumed_mobs) + for(var/mob/living/M in consumed_mobs) + M.loc = get_turf(src) ghostize() qdel(src) return diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 24fe9c4a6f7..51f6afeb7dd 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -118,11 +118,18 @@ victim.adjustBruteLoss(1000) victim.death() - // Keep their corpse so rescue is possible + var/del_corpse = TRUE var/mob/living/simple_animal/slaughter/SD if(istype(src, /mob/living/simple_animal/slaughter)) SD = src - SD.consumed_mobs += victim + // `consumed_mobs` can be set to null to gib the corpse + if(SD.consumed_mobs) + // Keep their corpse so rescue is possible + SD.consumed_mobs += victim + del_corpse = FALSE + + if(del_corpse) + qdel(victim) return TRUE From b3984c7c6ea9480c8e0b4ef92efe502bc2cb603e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 16:03:22 +0100 Subject: [PATCH 013/228] Laughter demons and bug fixes --- .../miniantags/slaughter/slaughter.dm | 95 +++++++++++++++--- code/modules/mob/living/bloodcrawl.dm | 11 +- icons/mob/mob.dmi | Bin 247323 -> 247731 bytes 3 files changed, 92 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index bb1ec1e815c..438d0f63b6e 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -17,6 +17,8 @@ stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/magic/demon_attack1.ogg' + var/feast_sound = 'sound/magic/Demon_consume.ogg' + var/death_sound = 'sound/magic/demon_dies.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = INFINITY @@ -56,22 +58,42 @@ /mob/living/simple_animal/slaughter/death() ..(1) - new /obj/effect/decal/cleanable/blood (get_turf(src)) - var/obj/effect/decal/cleanable/blood/innards = new (get_turf(src)) - innards.icon = 'icons/obj/surgery.dmi' - innards.icon_state = "innards" - innards.name = "pile of viscera" - innards.desc = "A repulsive pile of guts and gore." - new /obj/item/organ/internal/heart/demon (src.loc) - playsound(get_turf(src),'sound/magic/demon_dies.ogg', 200, 1) - visible_message("[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.") + death_gibs() + + death_mealspill() + + playsound(get_turf(src),death_sound, 200, 1) + death_message() + + ghostize() + qdel(src) + + return + +/mob/living/simple_animal/slaughter/proc/death_gibs() + + new /obj/effect/decal/cleanable/blood(get_turf(src)) + new /obj/effect/decal/cleanable/blood/innards(get_turf(src)) + new /obj/item/organ/internal/heart/demon(src.loc) + +/mob/living/simple_animal/slaughter/proc/death_mealspill() if(consumed_mobs) for(var/mob/living/M in consumed_mobs) M.loc = get_turf(src) - ghostize() - qdel(src) - return +/obj/effect/decal/cleanable/blood/innards + icon = 'icons/obj/surgery.dmi' + name = "pile of viscera" + desc = "A repulsive pile of guts and gore." + +// This function is required because cleanable decals start with a random +// icon_state, and it'll be overriden if just defined above. +/obj/effect/decal/cleanable/blood/innards/New() + ..() + icon_state = "innards" + +/mob/living/simple_animal/slaughter/proc/death_message() + visible_message("[src] screams in anger as it collapses into a puddle of viscera.") /mob/living/simple_animal/slaughter/phasein() . = ..() @@ -118,3 +140,52 @@ /obj/item/organ/internal/heart/demon/Stop() return 0 // Always beating. + +/mob/living/simple_animal/slaughter/laughter + // The laughter demon! It's everyone's best friend! It just wants to hug + // them so much, it wants to hug everyone at once! + name = "laughter demon" + real_name = "laughter demon" + desc = "A large, adorable creature covered in armored pink scales." + speak_emote = list("giggles","titters","chuckles") + emote_hear = list("gaffaws","laughs") + response_help = "hugs" + attacktext = "wildly tickles" + + attack_sound = 'sound/items/bikehorn.ogg' + feast_sound = 'sound/spookoween/scary_horn2.ogg' + death_sound = 'sound/misc/sadtrombone.ogg' + + // Keep the people we hug! + consumed_mobs = list() + + // HOT. PINK. + color = "#FF69B4" + +/mob/living/simple_animal/slaughter/laughter/death_gibs() + // Laughter demons are powered not by demonic energy, but by the laughter + // of kittens + var/mob/living/simple_animal/pet/cat/kitten/K = new(get_turf(src)) + K.name = "Laughter" + return + +/mob/living/simple_animal/slaughter/laughter/death_message() + visible_message("[src] fades out, as all of its friends are released from its prison of hugs.", null, "You hear a sigh and a giggle.") + + +/mob/living/simple_animal/slaughter/laughter/death_mealspill() + if(!consumed_mobs) + return + + for(var/mob/living/M in consumed_mobs) + M.loc = get_turf(src) + if(M.revive(full_heal = 1)) + // Feel there should be a better way of FORCING a mob's ghost + // back into the body + if(!M.ckey) + for(var/mob/dead/observer/ghost in player_list) + if(M.real_name == ghost.real_name) + ghost.reenter_corpse() + break + M << "You leave the [src]'s warm embrace, and feel ready to take on the world." + diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 51f6afeb7dd..915597a7c75 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -94,8 +94,15 @@ /mob/living/proc/bloodcrawl_consume(obj/effect/decal/cleanable/B, mob/living/victim) src << "You begin to feast on [victim]. You can not move while you are doing this." - for(var/i = 3; i > 0; i--) - playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1) + var/sound + if(istype(/mob/living/simple_animal/slaughter, src)) + var/mob/living/simple_animal/slaughter/SD = src + sound = SD.feast_sound + else + sound = 'sound/magic/Demon_consume.ogg' + + for(var/i = 1; i <= 0; i++) + playsound(get_turf(src),sound, 100, 1) sleep(30) if(!victim) diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 3a74a701ed063e1c8a21e57e566ee83f622ded52..05e64297c3c4f5c814b3a2b19a4093b451e8c31c 100644 GIT binary patch delta 57949 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 delta 57537 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 XoGvEH?4}LA4n$q~ky7acv%voY#@Y2n From bf5b2233837262e14e57607740cd538987ac64ff Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 16:05:12 +0100 Subject: [PATCH 014/228] Laughter demons have bows now --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 438d0f63b6e..a6ef79001a5 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -156,11 +156,14 @@ feast_sound = 'sound/spookoween/scary_horn2.ogg' death_sound = 'sound/misc/sadtrombone.ogg' + icon_state = "bowmon" + icon_living = "bowmon" + // Keep the people we hug! consumed_mobs = list() // HOT. PINK. - color = "#FF69B4" + //color = "#FF69B4" /mob/living/simple_animal/slaughter/laughter/death_gibs() // Laughter demons are powered not by demonic energy, but by the laughter From c429ca3b486cdc9dcafccc7d63ca0f4464779d70 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 16:47:31 +0100 Subject: [PATCH 015/228] Fixes some sound related bugs --- code/modules/mob/living/bloodcrawl.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 915597a7c75..23d81ab2967 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -95,13 +95,13 @@ src << "You begin to feast on [victim]. You can not move while you are doing this." var/sound - if(istype(/mob/living/simple_animal/slaughter, src)) + if(istype(src, /mob/living/simple_animal/slaughter)) var/mob/living/simple_animal/slaughter/SD = src sound = SD.feast_sound else sound = 'sound/magic/Demon_consume.ogg' - for(var/i = 1; i <= 0; i++) + for(var/i in 1 to 3) playsound(get_turf(src),sound, 100, 1) sleep(30) From f1ca391da4c67cc6a6de08b15dd1cbde5c69ceb6 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 17:35:53 +0100 Subject: [PATCH 016/228] Phasing and comments --- code/modules/mob/living/bloodcrawl.dm | 5 +++++ code/modules/spells/spell.dm | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 23d81ab2967..d804a6bbb15 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -112,6 +112,11 @@ src << "AAH! THEIR FLESH! IT BURNS!" adjustBruteLoss(25) //I can't use adjustHealth() here because bloodcrawl affects /mob/living and adjustHealth() only affects simple mobs victim.loc = get_turf(B) + // This whole thing here is the ONLY reason we keep passing B down + // this proc chain, so we know where to spit the person out who's + // been drinking. TODO would be a lot better if it just picked the + // nearest bloodspot and used that, then it'd be a lot cleaner + // from a code perspective victim.visible_message("[B] violently expels [victim]!") return TRUE diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 79916907994..47ada587d81 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -32,6 +32,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/human_req = 0 //spell can only be cast by humans var/nonabstract_req = 0 //spell can only be cast by mobs that are physical entities var/stat_allowed = 0 //see if it requires being conscious/alive, need to set to 1 for ghostpells + var/phase_allowed = 0 // If true, the spell can be cast while phased, eg. blood crawling, ethereal jaunting var/invocation = "HURP DURP" //what is uttered when the wizard casts the spell var/invocation_emote_self = null var/invocation_type = "none" //can be none, whisper, emote and shout @@ -91,6 +92,11 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin user << "Not when you're incapacitated." return 0 + var/loc = user.loc + if(!phase_allowed && (istype(loc, /obj/effect/dummy/spell_jaunt) || istype(loc, /obj/effect/dummy/slaughter))) + user << "[name] cannot be cast unless you are completely manifested in the material plane." + return 0 + if(ishuman(user)) var/mob/living/carbon/human/H = user From 6cdbb1743d0a11cec4698e95c349c8277140bcd2 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 17:43:34 +0100 Subject: [PATCH 017/228] Removed etheral mute, bloodcrawl while phased --- code/modules/spells/spell_types/bloodcrawl.dm | 2 ++ .../spells/spell_types/ethereal_jaunt.dm | 27 +++---------------- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/code/modules/spells/spell_types/bloodcrawl.dm b/code/modules/spells/spell_types/bloodcrawl.dm index 495a2335baa..fc33166531a 100644 --- a/code/modules/spells/spell_types/bloodcrawl.dm +++ b/code/modules/spells/spell_types/bloodcrawl.dm @@ -3,6 +3,8 @@ desc = "Use pools of blood to phase out of existence." charge_max = 0 clothes_req = 0 + //If you couldn't cast this while phased, you'd have a problem + phase_allowed = 1 selection_type = "range" range = 1 cooldown_min = 0 diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index a274ac0ef83..8b76ed72a45 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -43,9 +43,10 @@ target.notransform=0 //mob is safely inside holder now, no need for protection. jaunt_steam(mobloc) - mute(target) + // Used to mute the wizard here, but adding the phased_allowed + // check in spell.dm means muting is no longer needed. + sleep(jaunt_duration) - unmute(target) if(target.loc != holder) //mob warped out of the warp qdel(holder) @@ -72,27 +73,7 @@ target.canmove = 1 //Silence wizard during jaunt so they cannot spell cast while invisible -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/mute(target) - if(!istype(target, /mob/living/carbon)) - return FALSE - - var/mob/living/carbon/mob_to_mute = target - if(!mob_to_mute.dna) - return FALSE - - mob_to_mute.dna.add_mutation(MUT_MUTE) - return TRUE - -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/unmute(target) - if(!istype(target, /mob/living/carbon)) - return FALSE - - var/mob/living/carbon/mob_to_mute = target - if(!mob_to_mute.dna) - return FALSE - - mob_to_mute.dna.remove_mutation(MUT_MUTE) - return TRUE +// /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/jaunt_disappear(atom/movable/overlay/animation, mob/living/target) animation.icon_state = "liquify" From 6e20f272403774388fedaa4390187053ecb77a98 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 18:44:09 +0100 Subject: [PATCH 018/228] Coding review fixes - Removes trailing returns - Removes mentioning code history in comments - Uses built in features for cleanable decals - Uses /obj/effect/dummy class to detect for incorporeal nature --- .../game/gamemodes/miniantags/slaughter/slaughter.dm | 12 ++---------- code/modules/spells/spell.dm | 2 +- code/modules/spells/spell_types/ethereal_jaunt.dm | 3 --- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index a6ef79001a5..2b559a8fbd7 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -68,8 +68,6 @@ ghostize() qdel(src) - return - /mob/living/simple_animal/slaughter/proc/death_gibs() new /obj/effect/decal/cleanable/blood(get_turf(src)) @@ -79,18 +77,13 @@ /mob/living/simple_animal/slaughter/proc/death_mealspill() if(consumed_mobs) for(var/mob/living/M in consumed_mobs) - M.loc = get_turf(src) + M.forceMove(get_turf(src)) /obj/effect/decal/cleanable/blood/innards icon = 'icons/obj/surgery.dmi' name = "pile of viscera" desc = "A repulsive pile of guts and gore." - -// This function is required because cleanable decals start with a random -// icon_state, and it'll be overriden if just defined above. -/obj/effect/decal/cleanable/blood/innards/New() - ..() - icon_state = "innards" + random_icon_states = list("innards") /mob/living/simple_animal/slaughter/proc/death_message() visible_message("[src] screams in anger as it collapses into a puddle of viscera.") @@ -170,7 +163,6 @@ // of kittens var/mob/living/simple_animal/pet/cat/kitten/K = new(get_turf(src)) K.name = "Laughter" - return /mob/living/simple_animal/slaughter/laughter/death_message() visible_message("[src] fades out, as all of its friends are released from its prison of hugs.", null, "You hear a sigh and a giggle.") diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 47ada587d81..3494f38659c 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -93,7 +93,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin return 0 var/loc = user.loc - if(!phase_allowed && (istype(loc, /obj/effect/dummy/spell_jaunt) || istype(loc, /obj/effect/dummy/slaughter))) + if(!phase_allowed && istype(loc, /obj/effect/dummy)) user << "[name] cannot be cast unless you are completely manifested in the material plane." return 0 diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index 8b76ed72a45..904160a6fe2 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -43,9 +43,6 @@ target.notransform=0 //mob is safely inside holder now, no need for protection. jaunt_steam(mobloc) - // Used to mute the wizard here, but adding the phased_allowed - // check in spell.dm means muting is no longer needed. - sleep(jaunt_duration) if(target.loc != holder) //mob warped out of the warp From a1fac08dfd9fa503b852580d4465c2d6466c14b6 Mon Sep 17 00:00:00 2001 From: YotaXP Date: Wed, 2 Mar 2016 18:57:14 -0500 Subject: [PATCH 019/228] Modified map loader to be able to read TGM format maps, and cache stuff for SPEED! --- code/__HELPERS/lists.dm | 10 + .../awaymissions/maploader/dmm_suite.dm | 3 +- code/modules/awaymissions/maploader/reader.dm | 226 ++++++++++-------- 3 files changed, 136 insertions(+), 103 deletions(-) diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 06c7a7e6ec0..cb4e8c8163b 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -344,3 +344,13 @@ while(L.Remove(null)) continue return L + +//Copies a list, and all lists inside it recusively +//Does not copy any other reference type +/proc/deepCopyList(list/l) + if(!islist(l)) + return l + . = l.Copy() + for(var/i = 1 to length(.)) + if(islist(.[i])) + .[i] = .(.[i]) diff --git a/code/modules/awaymissions/maploader/dmm_suite.dm b/code/modules/awaymissions/maploader/dmm_suite.dm index 71c9e6e788f..ba4664fa4aa 100644 --- a/code/modules/awaymissions/maploader/dmm_suite.dm +++ b/code/modules/awaymissions/maploader/dmm_suite.dm @@ -53,9 +53,10 @@ dmm_suite{ */ - verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num){ + verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num){ // dmm_file: A .dmm file to load (Required). // z_offset: A number representing the z-level on which to start loading the map (Optional). + // cropMap: When true, the map will be cropped to fit the existing world dimensions (Optional). } verb/write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){ // t1: A turf representing one corner of a three dimensional grid (Required). diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 5b5f8c1fd75..e153ad961d0 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -6,6 +6,14 @@ var/global/use_preloader = FALSE var/global/dmm_suite/preloader/_preloader = new +/dmm_suite + // /"([a-zA-Z]+)" = \(((?:.|\n)*?)\)\n(?!\t)|\((\d+),(\d+),(\d+)\) = \{"([a-zA-Z\n]*)"\}/g + var/static/regex/dmmRegex = new/regex({""(\[a-zA-Z]+)" = \\(((?:.|\n)*?)\\)\n(?!\t)|\\((\\d+),(\\d+),(\\d+)\\) = \\{"(\[a-zA-Z\n]*)"\\}"}, "g") + // /^[\s\n]+"?|"?[\s\n]+$|^"|"$/g + var/static/regex/trimQuotesRegex = new/regex({"^\[\\s\n]+"?|"?\[\\s\n]+$|^"|"$"}, "g") + // /^[\s\n]+|[\s\n]+$/ + var/static/regex/trimRegex = new/regex("^\[\\s\n]+|\[\\s\n]+$", "g") + var/static/list/modelCache = list() /** * Construct the model map and control the loading process @@ -17,92 +25,94 @@ var/global/dmm_suite/preloader/_preloader = new * 2) Read the map line by line, parsing the result (using parse_grid) * */ -/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num) - if(!z_offset)//what z_level we are creating the map on - z_offset = world.maxz+1 +/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num) + var/tfile = dmm_file//the map file we're creating + if(isfile(tfile)) + tfile = file2text(tfile) if(!x_offset) - x_offset = 0 - + x_offset = 1 if(!y_offset) - y_offset = 0 - var/quote = ascii2text(34) - var/tfile = file2text(dmm_file)//the map file we're creating - var/tfile_len = length(tfile) - var/lpos = 1 // the models definition index + y_offset = 1 + if(!z_offset) + z_offset = world.maxz + 1 - /////////////////////////////////////////////////////////////////////////////////////// - //first let's map model keys (e.g "aa") to their contents (e.g /turf/open/space{variables}) - /////////////////////////////////////////////////////////////////////////////////////// var/list/grid_models = list() - var/key_len = length(copytext(tfile,2,findtext(tfile,quote,2,0)))//the length of the model key (e.g "aa" or "aba") + var/key_len = 0 - //proceed line by line - for(lpos=1; lpos world.maxz) + if(cropMap) + continue + else + world.maxz = zcrd //create a new z_level if needed - var/zgrid = copytext(tfile,findtext(tfile,quote+"\n",zpos,0)+2,findtext(tfile,"\n"+quote,zpos,0)+1) //copy the whole map grid - var/z_depth = length(zgrid) + var/list/gridLines = splittext(dmmRegex.group[6], "\n") - //if exceeding the world max x or y, increase it - var/x_depth = length(copytext(zgrid,1,findtext(zgrid,"\n",2,0))) - var/x_tilecount = x_depth/key_len - if(world.maxx 1) + gridLines.Cut(1, leadingBlanks) // Remove all leading blank lines. - var/y_depth = z_depth / (x_depth+1)//x_depth + 1 because we're counting the '\n' characters in z_depth - if(world.maxy world.maxy) + world.maxy = ycrd // Expand Y here. X is expanded in the loop below + for(var/line in gridLines) + if(ycrd <= world.maxy && ycrd >= 1) + xcrd = xcrdStart + for(var/tpos = 1 to length(line) - key_len + 1 step key_len) + if(xcrd > world.maxx) + if(cropMap) + break + else + world.maxx = xcrd - for(var/mpos in 1 to x_depth step key_len) - xcrd++ - var/model_key = copytext(grid_line,mpos,mpos+key_len) - parse_grid(grid_models[model_key],xcrd+x_offset,ycrd+y_offset,zcrd+z_offset) + if(xcrd >= 1) + var/model_key = copytext(line, tpos, tpos + key_len) + if(!grid_models[model_key]) + throw EXCEPTION("Undefined model key in DMM.") + parse_grid(grid_models[model_key], xcrd, ycrd, zcrd) + sleep(-1) - //reached end of current map - if(gpos+x_depth+1>z_depth) - break - - ycrd-- - CHECK_TICK - - - //reached End Of File - if(findtext(tfile,quote+"}",zpos,0)+2==tfile_len) - break + ++xcrd + --ycrd CHECK_TICK + return 1 /** * Fill a given tile with its area/turf/objects/mobs @@ -127,41 +137,56 @@ var/global/dmm_suite/preloader/_preloader = new same construction as those contained in a .dmm file, and instantiates them. */ - var/list/members = list()//will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored) - var/list/members_attributes = list()//will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list()) + var/list/members //will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored) + var/list/members_attributes //will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list()) + var/list/cached = modelCache[model] + var/index + if(cached) + members = cached[1] + members_attributes = cached[2] + else - ///////////////////////////////////////////////////////// - //Constructing members and corresponding variables lists - //////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////// + //Constructing members and corresponding variables lists + //////////////////////////////////////////////////////// - var/index=1 - var/old_position = 1 - var/dpos + members = list() + members_attributes = list() + index = 1 - do - //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) - dpos= find_next_delimiter_position(model,old_position,",","{","}")//find next delimiter (comma here) that's not within {...} + var/old_position = 1 + var/dpos + //var/model_sl = replacetext(model, "\n", "") - var/full_def = copytext(model,old_position,dpos)//full definition, e.g : /obj/foo/bar{variables=derp} - var/atom_def = text2path(copytext(full_def,1,findtext(full_def,"{")))//path definition, e.g /obj/foo/bar - members.Add(atom_def) - old_position = dpos + 1 + do + //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) + dpos = find_next_delimiter_position(model, old_position, ",", "{", "}") //find next delimiter (comma here) that's not within {...} - //transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7)) - var/list/fields = list() + var/full_def = trim_text(copytext(model, old_position, dpos)) //full definition, e.g : /obj/foo/bar{variables=derp} + var/variables_start = findtext(full_def, "{") + var/atom_def = text2path(trim_text(copytext(full_def, 1, variables_start))) //path definition, e.g /obj/foo/bar + old_position = dpos + 1 - var/variables_start = findtext(full_def,"{") - if(variables_start)//if there's any variable - full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}' - fields = readlist(full_def, ";") + if(!atom_def) // Skip the item if the path does not exist. Fix your crap, mappers! + continue + members.Add(atom_def) - //then fill the members_attributes list with the corresponding variables - members_attributes.len++ - members_attributes[index++] = fields - CHECK_TICK + //transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7)) + var/list/fields = list() - while(dpos != 0) + if(variables_start)//if there's any variable + full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}' + fields = readlist(full_def, ";") + + //then fill the members_attributes list with the corresponding variables + members_attributes.len++ + members_attributes[index++] = fields + + CHECK_TICK + while(dpos != 0) + + modelCache[model] = list(members, members_attributes) //////////////// @@ -187,7 +212,6 @@ var/global/dmm_suite/preloader/_preloader = new if(use_preloader && instance) _preloader.load(instance) - members.Remove(members[index]) //then instance the /turf and, if multiple tiles are presents, simulates the DMM underlays piling effect @@ -203,7 +227,7 @@ var/global/dmm_suite/preloader/_preloader = new if(T) //if others /turf are presents, simulates the underlays piling effect index = first_turf_index + 1 - while(index <= members.len) + while(index <= members.len - 1) // Last item is an /area turfs_underlays.Insert(1,image(T.icon,null,T.icon_state,T.layer,T.dir))//add the current turf image to the underlays list var/turf/UT = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf add_underlying_turf(UT,T,turfs_underlays)//simulates the DMM piling effect @@ -236,16 +260,11 @@ var/global/dmm_suite/preloader/_preloader = new //text trimming (both directions) helper proc //optionally removes quotes before and after the text (for variable name) /dmm_suite/proc/trim_text(what as text,trim_quotes=0) - while(length(what) && (findtext(what," ",1,2))) - what=copytext(what,2,0) - while(length(what) && (findtext(what," ",length(what),0))) - what=copytext(what,1,length(what)) if(trim_quotes) - while(length(what) && (findtext(what,quote,1,2))) - what=copytext(what,2,0) - while(length(what) && (findtext(what,quote,length(what),0))) - what=copytext(what,1,length(what)) - return what + return trimQuotesRegex.Replace(what, "") + else + return trimRegex.Replace(what, "") + //find the position of the next delimiter,skipping whatever is comprised between opening_escape and closing_escape //returns 0 if reached the last delimiter @@ -353,7 +372,10 @@ var/global/dmm_suite/preloader/_preloader = new /dmm_suite/preloader/proc/load(atom/what) for(var/attribute in attributes) - what.vars[attribute] = attributes[attribute] + var/value = attributes[attribute] + if(islist(value)) + value = deepCopyList(value) + what.vars[attribute] = value use_preloader = FALSE /area/template_noop From 03d38bf895a5a0932dffd75a22700fd08957ad2b Mon Sep 17 00:00:00 2001 From: YotaXP Date: Thu, 31 Mar 2016 13:44:04 -0400 Subject: [PATCH 020/228] Adds a 'measureOnly' mode to the maploader code for templates. --- code/datums/helper_datums/map_template.dm | 19 ++---- .../admin/verbs/map_template_loadverb.dm | 15 +++-- .../awaymissions/maploader/dmm_suite.dm | 3 +- code/modules/awaymissions/maploader/reader.dm | 64 +++++++++++++------ 4 files changed, 62 insertions(+), 39 deletions(-) diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index 860ce32d94e..156f896e187 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -16,16 +16,10 @@ name = rename /datum/map_template/proc/preload_size(path) - var/quote = ascii2text(34) - var/map_file = file2text(path) - var/key_len = length(copytext(map_file,2,findtext(map_file,quote,2,0))) - //assuming one map per file since more makes no sense for templates anyway - var/mapstart = findtext(map_file,"\n(1,1,") //todo replace with something saner - var/content = copytext(map_file,findtext(map_file,quote+"\n",mapstart,0)+2,findtext(map_file,"\n"+quote,mapstart,0)+1) - var/line_len = length(copytext(content,1,findtext(content,"\n",2,0))) - - width = line_len/key_len - height = length(content)/(line_len+1) + var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE) + . = bounds[1] != 0 // 0 if the map failed to be measured + width = bounds[4] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 + height = bounds[5] /datum/map_template/proc/load(turf/T, centered = FALSE) if(centered) @@ -37,14 +31,14 @@ if(T.y+height > world.maxy) return - maploader.load_map(get_file(), T.x-1, T.y-1, T.z) + var/list/bounds = maploader.load_map(get_file(), T.x, T.y, T.z, cropMap=TRUE) //initialize things that are normally initialized after map load var/list/obj/machinery/atmospherics/atmos_machines = list() var/list/obj/structure/cable/cables = list() var/list/atom/atoms = list() - for(var/L in block(T,locate(T.x+width-1, T.y+height-1, T.z))) + for(var/L in block(locate(bounds[1], bounds[2], bounds[3]), locate(bounds[4], bounds[5], bounds[6]))) var/turf/B = L for(var/A in B) atoms += A @@ -60,6 +54,7 @@ SSair.setup_template_machinery(atmos_machines) log_game("[name] loaded at at [T.x],[T.y],[T.z]") + return 1 /datum/map_template/proc/get_file() if(mapfile) diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 781ab735832..b1a524986dc 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -18,8 +18,10 @@ preview += image('icons/turf/overlays.dmi',S,"greenOverlay") usr.client.images += preview if(alert(usr,"Confirm location.","Template Confirm","Yes","No") == "Yes") - template.load(T, centered = TRUE) - message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) at (JMP)") + if(template.load(T, centered = TRUE)) + message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) at (JMP)") + else + usr << "Failed to place map" usr.client.images -= preview /client/proc/map_template_upload() @@ -34,6 +36,9 @@ return var/datum/map_template/M = new(map=map, rename="[map]") - M.preload_size(map) - map_templates[M.name] = M - message_admins("[key_name_admin(usr)] has uploaded a map template ([map])") + if(M.preload_size(map)) + usr << "Map template '[map]' ready to place ([M.width]x[M.height])" + map_templates[M.name] = M + message_admins("[key_name_admin(usr)] has uploaded a map template ([map])") + else + usr << "Map template '[map]' failed to load properly" diff --git a/code/modules/awaymissions/maploader/dmm_suite.dm b/code/modules/awaymissions/maploader/dmm_suite.dm index ba4664fa4aa..01f7a08a1c9 100644 --- a/code/modules/awaymissions/maploader/dmm_suite.dm +++ b/code/modules/awaymissions/maploader/dmm_suite.dm @@ -53,10 +53,11 @@ dmm_suite{ */ - verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num){ + verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num, var/measureOnly as num){ // dmm_file: A .dmm file to load (Required). // z_offset: A number representing the z-level on which to start loading the map (Optional). // cropMap: When true, the map will be cropped to fit the existing world dimensions (Optional). + // measureOnly: When true, no changes will be made to the world (Optional). } verb/write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){ // t1: A turf representing one corner of a three dimensional grid (Required). diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index e153ad961d0..f765cda07e0 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -25,7 +25,7 @@ var/global/dmm_suite/preloader/_preloader = new * 2) Read the map line by line, parsing the result (using parse_grid) * */ -/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num) +/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num, measureOnly as num) var/tfile = dmm_file//the map file we're creating if(isfile(tfile)) tfile = file2text(tfile) @@ -37,6 +37,7 @@ var/global/dmm_suite/preloader/_preloader = new if(!z_offset) z_offset = world.maxz + 1 + var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) var/list/grid_models = list() var/key_len = 0 @@ -53,7 +54,8 @@ var/global/dmm_suite/preloader/_preloader = new key_len = length(key) else throw EXCEPTION("Inconsistant key length in DMM") - grid_models[key] = dmmRegex.group[2] + if(!measureOnly) + grid_models[key] = dmmRegex.group[2] // (1,1,1) = {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"} else if(dmmRegex.group[3]) // Coords @@ -72,6 +74,10 @@ var/global/dmm_suite/preloader/_preloader = new else world.maxz = zcrd //create a new z_level if needed + bounds[1] = min(bounds[1], xcrdStart) // Update the min-x + bounds[3] = min(bounds[3], zcrd) // Update the min-z + bounds[6] = max(bounds[6], zcrd) // Update the max-z + var/list/gridLines = splittext(dmmRegex.group[6], "\n") var/leadingBlanks = 0 @@ -85,34 +91,50 @@ var/global/dmm_suite/preloader/_preloader = new if(gridLines.len && gridLines[gridLines.len] == "") gridLines.Cut(gridLines.len) // Remove only one blank line at the end. + bounds[2] = min(bounds[2], ycrd) // Update the min-y ycrd += gridLines.len - 1 // Start at the top and work down if(!cropMap && ycrd > world.maxy) - world.maxy = ycrd // Expand Y here. X is expanded in the loop below + if(!measureOnly) + world.maxy = ycrd // Expand Y here. X is expanded in the loop below + bounds[5] = max(bounds[5], ycrd) // Update the max-y + else + bounds[5] = max(bounds[5], min(ycrd, world.maxy)) // Update the max-y - for(var/line in gridLines) - if(ycrd <= world.maxy && ycrd >= 1) - xcrd = xcrdStart - for(var/tpos = 1 to length(line) - key_len + 1 step key_len) - if(xcrd > world.maxx) - if(cropMap) - break - else - world.maxx = xcrd + var/maxx = xcrdStart + if(measureOnly) + for(var/line in gridLines) + maxx = max(maxx, xcrdStart + length(line) / key_len - 1) + else + for(var/line in gridLines) + if(ycrd <= world.maxy && ycrd >= 1) + xcrd = xcrdStart + for(var/tpos = 1 to length(line) - key_len + 1 step key_len) + if(xcrd > world.maxx) + if(cropMap) + break + else + world.maxx = xcrd - if(xcrd >= 1) - var/model_key = copytext(line, tpos, tpos + key_len) - if(!grid_models[model_key]) - throw EXCEPTION("Undefined model key in DMM.") - parse_grid(grid_models[model_key], xcrd, ycrd, zcrd) - sleep(-1) + if(xcrd >= 1) + var/model_key = copytext(line, tpos, tpos + key_len) + if(!grid_models[model_key]) + throw EXCEPTION("Undefined model key in DMM.") + parse_grid(grid_models[model_key], xcrd, ycrd, zcrd) + CHECK_TICK - ++xcrd - --ycrd + maxx = max(maxx, xcrd) + ++xcrd + --ycrd + + bounds[4] = max(bounds[4], cropMap ? min(maxx, world.maxx) : maxx) // Update the max-x CHECK_TICK - return 1 + if(bounds[1] == 1.#INF) + return list(0, 0, 0, 0, 0, 0) + else + return bounds /** * Fill a given tile with its area/turf/objects/mobs From 0d8cc8aee7c65d493509b2287adf93bb96b4462b Mon Sep 17 00:00:00 2001 From: YotaXP Date: Mon, 18 Apr 2016 17:41:05 -0400 Subject: [PATCH 021/228] Make the loader use ChangeTurf() for turfs. --- code/datums/helper_datums/map_template.dm | 9 ++++--- code/game/turfs/turf.dm | 2 +- code/modules/awaymissions/maploader/reader.dm | 27 +++++++------------ code/modules/lighting/lighting_system.dm | 2 +- 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index 156f896e187..5f778cb5806 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -17,9 +17,10 @@ /datum/map_template/proc/preload_size(path) var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE) - . = bounds[1] != 0 // 0 if the map failed to be measured - width = bounds[4] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 - height = bounds[5] + if(bounds) + width = bounds[4] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 + height = bounds[5] + return bounds /datum/map_template/proc/load(turf/T, centered = FALSE) if(centered) @@ -32,6 +33,8 @@ return var/list/bounds = maploader.load_map(get_file(), T.x, T.y, T.z, cropMap=TRUE) + if(!bounds) + return 0 //initialize things that are normally initialized after map load var/list/obj/machinery/atmospherics/atmos_machines = list() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 7ab1efb6c7b..31f6e6ef0c2 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -132,7 +132,7 @@ /turf/proc/ChangeTurf(path) if(!path) return - if(path == type) + if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed return src var/old_blueprint_data = blueprint_data diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index f765cda07e0..6f09a3e53d8 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -132,7 +132,7 @@ var/global/dmm_suite/preloader/_preloader = new CHECK_TICK if(bounds[1] == 1.#INF) - return list(0, 0, 0, 0, 0, 0) + return null else return bounds @@ -217,10 +217,6 @@ var/global/dmm_suite/preloader/_preloader = new //The next part of the code assumes there's ALWAYS an /area AND a /turf on a given tile - //in case of multiples turfs on one tile, - //will contains the images of all underlying turfs, to simulate the DMM multiple tiles piling - var/list/turfs_underlays = list() - //first instance the /area and remove it from the members list index = members.len if(members[index] != /area/template_noop) @@ -250,10 +246,9 @@ var/global/dmm_suite/preloader/_preloader = new //if others /turf are presents, simulates the underlays piling effect index = first_turf_index + 1 while(index <= members.len - 1) // Last item is an /area - turfs_underlays.Insert(1,image(T.icon,null,T.icon_state,T.layer,T.dir))//add the current turf image to the underlays list - var/turf/UT = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf - add_underlying_turf(UT,T,turfs_underlays)//simulates the DMM piling effect - T = UT + var/underlay = T.appearance + T = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf + T.underlays += underlay index++ //finally instance all remainings objects/mobs @@ -272,7 +267,11 @@ var/global/dmm_suite/preloader/_preloader = new var/turf/T = locate(x,y,z) if(T) - instance = new path (T)//first preloader pass + if(ispath(path, /turf)) + T.ChangeTurf(path) + instance = T + else + instance = new path (T)//first preloader pass if(use_preloader && instance)//second preloader pass, for those atoms that don't ..() in New() _preloader.load(instance) @@ -358,14 +357,6 @@ var/global/dmm_suite/preloader/_preloader = new return to_return -//simulates the DM multiple turfs on one tile underlaying -/dmm_suite/proc/add_underlying_turf(turf/placed,turf/underturf, list/turfs_underlays) - if(underturf.density) - placed.density = 1 - if(underturf.opacity) - placed.opacity = 1 - placed.underlays += turfs_underlays - //atom creation method that preloads variables at creation /atom/New() if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() diff --git a/code/modules/lighting/lighting_system.dm b/code/modules/lighting/lighting_system.dm index cce8b0a8aef..e797c182abc 100644 --- a/code/modules/lighting/lighting_system.dm +++ b/code/modules/lighting/lighting_system.dm @@ -258,7 +258,7 @@ var/list/affecting_lights //not initialised until used (even empty lists reserve a fair bit of memory) /turf/ChangeTurf(path) - if(!path || path == type) //Sucks this is here but it would cause problems otherwise. + if(!path || (!use_preloader && path == type)) //Sucks this is here but it would cause problems otherwise. return ..() for(var/obj/effect/decal/cleanable/decal in src.contents) From 2072670afd13484d14258123fa0d21bf2ecc1b17 Mon Sep 17 00:00:00 2001 From: YotaXP Date: Mon, 18 Apr 2016 18:12:07 -0400 Subject: [PATCH 022/228] Clean up magic numbers. --- code/__DEFINES/misc.dm | 8 ++++++++ code/datums/helper_datums/map_template.dm | 7 ++++--- code/modules/awaymissions/maploader/reader.dm | 17 ++++++++--------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 3e92c53795c..928ce91fe3d 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -410,3 +410,11 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define PLANT_WEED 1 #define PLANT_MUSHROOM 2 #define PLANT_ALIEN 3 + +// Maploader bounds indices +#define MAP_MINX 1 +#define MAP_MINY 2 +#define MAP_MINZ 3 +#define MAP_MAXX 4 +#define MAP_MAXY 5 +#define MAP_MAXZ 6 diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index 5f778cb5806..3a947256fcb 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -18,8 +18,8 @@ /datum/map_template/proc/preload_size(path) var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE) if(bounds) - width = bounds[4] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 - height = bounds[5] + width = bounds[MAP_MAXX] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 + height = bounds[MAP_MAXY] return bounds /datum/map_template/proc/load(turf/T, centered = FALSE) @@ -41,7 +41,8 @@ var/list/obj/structure/cable/cables = list() var/list/atom/atoms = list() - for(var/L in block(locate(bounds[1], bounds[2], bounds[3]), locate(bounds[4], bounds[5], bounds[6]))) + for(var/L in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), + locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))) var/turf/B = L for(var/A in B) atoms += A diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 6f09a3e53d8..e716f3e8fc0 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -74,9 +74,9 @@ var/global/dmm_suite/preloader/_preloader = new else world.maxz = zcrd //create a new z_level if needed - bounds[1] = min(bounds[1], xcrdStart) // Update the min-x - bounds[3] = min(bounds[3], zcrd) // Update the min-z - bounds[6] = max(bounds[6], zcrd) // Update the max-z + bounds[MAP_MINX] = min(bounds[MAP_MINX], xcrdStart) + bounds[MAP_MINZ] = min(bounds[MAP_MINZ], zcrd) + bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], zcrd) var/list/gridLines = splittext(dmmRegex.group[6], "\n") @@ -91,15 +91,15 @@ var/global/dmm_suite/preloader/_preloader = new if(gridLines.len && gridLines[gridLines.len] == "") gridLines.Cut(gridLines.len) // Remove only one blank line at the end. - bounds[2] = min(bounds[2], ycrd) // Update the min-y + bounds[MAP_MINY] = min(bounds[MAP_MINY], ycrd) ycrd += gridLines.len - 1 // Start at the top and work down if(!cropMap && ycrd > world.maxy) if(!measureOnly) world.maxy = ycrd // Expand Y here. X is expanded in the loop below - bounds[5] = max(bounds[5], ycrd) // Update the max-y + bounds[MAP_MAXY] = max(bounds[MAP_MAXY], ycrd) else - bounds[5] = max(bounds[5], min(ycrd, world.maxy)) // Update the max-y + bounds[MAP_MAXY] = max(bounds[MAP_MAXY], min(ycrd, world.maxy)) var/maxx = xcrdStart if(measureOnly) @@ -127,11 +127,11 @@ var/global/dmm_suite/preloader/_preloader = new ++xcrd --ycrd - bounds[4] = max(bounds[4], cropMap ? min(maxx, world.maxx) : maxx) // Update the max-x + bounds[MAP_MAXX] = max(bounds[MAP_MAXX], cropMap ? min(maxx, world.maxx) : maxx) CHECK_TICK - if(bounds[1] == 1.#INF) + if(bounds[1] == 1.#INF) // Shouldn't need to check every item return null else return bounds @@ -179,7 +179,6 @@ var/global/dmm_suite/preloader/_preloader = new var/old_position = 1 var/dpos - //var/model_sl = replacetext(model, "\n", "") do //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) From 7f7f1dd374889a01d0d7c54c6e91d29265a4f45e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Tue, 19 Apr 2016 00:18:33 +0100 Subject: [PATCH 023/228] Corrected description of laughter demon --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 2b559a8fbd7..1553af20d1e 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -139,7 +139,7 @@ // them so much, it wants to hug everyone at once! name = "laughter demon" real_name = "laughter demon" - desc = "A large, adorable creature covered in armored pink scales." + desc = "A large, adorable creature covered in armor with pink bows." speak_emote = list("giggles","titters","chuckles") emote_hear = list("gaffaws","laughs") response_help = "hugs" @@ -182,5 +182,5 @@ if(M.real_name == ghost.real_name) ghost.reenter_corpse() break - M << "You leave the [src]'s warm embrace, and feel ready to take on the world." - + M << "You leave the [src]'s warm embrace, and feel ready to take on the world." + From 352734716002045bbfb86326038b61f4670ad078 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 18 Apr 2016 21:29:43 -0500 Subject: [PATCH 024/228] Shock Revolver --- .../objects/items/weapons/storage/boxes.dm | 2 +- .../closets/secure/scientist.dm | 1 + code/modules/projectiles/guns/energy/stun.dm | 34 +++++++++++++++++-- .../research/designs/weapon_designs.dm | 19 ++++++----- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 7f265f1ce4e..bb95dbf2d7f 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -378,7 +378,7 @@ /obj/item/weapon/storage/box/firingpins/New() ..() - for(var/i in 1 to 7) + for(var/i in 1 to 5) new /obj/item/device/firing_pin(src) /obj/item/weapon/storage/box/handcuffs diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index b8384d4b394..299375a66d4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -22,3 +22,4 @@ new /obj/item/device/assembly/flash/handheld(src) new /obj/item/device/laser_pointer(src) new /obj/item/weapon/door_remote/research_director(src) + new /obj/item/weapon/storage/box/firingpins(src) diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 469896b42ac..79b159beb96 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -6,16 +6,44 @@ ammo_type = list(/obj/item/ammo_casing/energy/electrode) ammo_x_offset = 3 -/obj/item/weapon/gun/energy/stunrevolver - name = "stun revolver" +/obj/item/weapon/gun/energy/shock_revolver + name = "shock revolver" desc = "A high-tech revolver that fires internal, reusable taser cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." icon_state = "stunrevolver" item_state = "gun" - ammo_type = list(/obj/item/ammo_casing/energy/electrode/gun) + ammo_type = list(/obj/item/ammo_casing/energy/shock_revolver) can_flashlight = 0 pin = null ammo_x_offset = 1 + +/obj/item/ammo_casing/energy/shock_revolver + fire_sound = 'sound/weapons/gunshot.ogg' + e_cost = 200 + select_name = "stun" + projectile_type = /obj/item/projectile/shock_revolver + + +/obj/item/projectile/shock_revolver + name = "shock bolt" + icon_state = "purple_laser" + var/chain + +/obj/item/ammo_casing/energy/shock_revolver/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") + ..() + var/obj/item/projectile/hook/P = BB + spawn(1) + P.chain = P.Beam(user,icon_state="purple_lightning",icon = 'icons/effects/effects.dmi',time=1000, maxdistance = 30) + +/obj/item/projectile/shock_revolver/on_hit(atom/target) + . = ..() + if(isliving(target)) + for(var/mob/living/carbon/human/M in view(3, src)) + target.Beam(M,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5) + M.electrocute_act(15, "[name]", safety=1) + qdel(chain) + + /obj/item/weapon/gun/energy/gun/advtaser name = "hybrid taser" desc = "A dual-mode taser designed to fire both short-range high-power electrodes and long-range disabler beams." diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 60ab85b1519..22af257ad82 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -23,13 +23,14 @@ category = list("Firing Pins") /datum/design/stunrevolver - name = "Stun Revolver" + name = "Shock Revolver" desc = "A high-tech revolver that fires internal, reusable taser cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." id = "stunrevolver" - req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) + req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 5) build_type = PROTOLATHE - materials = list(MAT_METAL = 4000, MAT_GLASS = 1000) - build_path = /obj/item/weapon/gun/energy/stunrevolver + materials = list(MAT_METAL = 10000, MAT_GLASS = 10000, MAT_SILVER = 10000) + build_path = /obj/item/weapon/gun/energy/shock_revolver + category = list("Weapons") /datum/design/nuclear_gun @@ -38,7 +39,7 @@ id = "nuclear_gun" req_tech = list("combat" = 4, "materials" = 5, "powerstorage" = 3) build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 2000) + materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 6000) reliability = 76 build_path = /obj/item/weapon/gun/energy/gun/nuclear category = list("Weapons") @@ -162,7 +163,7 @@ reliability = 79 build_path = /obj/item/weapon/grenade/chem_grenade/adv_release category = list("Weapons") - +/* /datum/design/smg name = "NanoTrasen Saber SMG" desc = "A prototype advancment over the WT-550 auto rifle made using lightweight materials on a traditional frame, designed to fire standard 9mm rounds." @@ -172,7 +173,7 @@ materials = list(MAT_METAL = 8000, MAT_SILVER = 2000, MAT_DIAMOND = 1000) build_path = /obj/item/weapon/gun/projectile/automatic/proto category = list("Weapons") - +*/ /datum/design/xray name = "Xray Laser Gun" desc = "Not quite as menacing as it sounds" @@ -247,7 +248,7 @@ build_path = /obj/item/ammo_box/magazine/wt550m9/wttx //SABR Mags - +/* /datum/design/mag_smg name = "SABR SMG Magazine (9mm)" desc = "A 30-round magazine for the prototype submachine gun." @@ -278,7 +279,7 @@ id = "mag_smg_tx" materials = list(MAT_METAL = 3000, MAT_GLASS = 200, MAT_URANIUM = 1000) build_path = /obj/item/ammo_box/magazine/smgm9mm/toxin - +*/ /datum/design/stunshell name = "Stun Shell" desc = "A stunning shell for a shotgun." From 12a7c871fb68fb80acacefb90187c892cd426c8b Mon Sep 17 00:00:00 2001 From: Robustin Date: Tue, 19 Apr 2016 15:17:44 -0400 Subject: [PATCH 025/228] DblEsword block buff --- code/game/objects/items/weapons/twohanded.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index acfe1e6cd77..ae7c0d3cd5c 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -215,7 +215,7 @@ origin_tech = "magnets=3;syndicate=4" item_color = "green" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 50 + block_chance = 75 var/hacked = 0 /obj/item/weapon/twohanded/dualsaber/New() From 3e51b9673b94ff31e405ade92741c4f75d8a97e2 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Tue, 19 Apr 2016 18:44:04 -0700 Subject: [PATCH 026/228] Makes syndicate bombs scarier. --- code/game/machinery/syndicatebomb.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index a625b89489d..ab2d9397084 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -19,7 +19,7 @@ /obj/machinery/syndicatebomb/process() if(active && !defused && (timer > 0)) //Tick Tock - var/volume = (timer <= 10 ? 40 : 10) // Tick louder when the bomb is closer to being detonated. + var/volume = (timer <= 5 ? 50 : 2) // Tick louder when the bomb is closer to being detonated. playsound(loc, beepsound, volume, 0) timer-- if(active && !defused && (timer <= 0)) //Boom From 7b89890bd7068a49f9c394e1fd4d8b9e7bc46d8a Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Wed, 20 Apr 2016 11:40:01 -0400 Subject: [PATCH 027/228] EMP range is no longer capped --- code/game/objects/empulse.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index 04df8194e9d..f0143008db9 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -14,7 +14,7 @@ if(heavy_range > light_range) light_range = heavy_range - for(var/atom/T in range(light_range, epicenter)) + for(var/atom/T in spiral_range(light_range, epicenter)) var/distance = get_dist(epicenter, T) if(distance < 0) distance = 0 From 50c63428e497e6ec0ff9b760b1dd96dbf442c03a Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Wed, 20 Apr 2016 16:38:55 -0400 Subject: [PATCH 028/228] t&a --- code/game/objects/empulse.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index f0143008db9..39db0c0ff93 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -14,7 +14,8 @@ if(heavy_range > light_range) light_range = heavy_range - for(var/atom/T in spiral_range(light_range, epicenter)) + for(var/A in spiral_range(light_range, epicenter)) + var/atom/T = A var/distance = get_dist(epicenter, T) if(distance < 0) distance = 0 From c74ad4b70881d25f96a10e3676e713531001b290 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Wed, 20 Apr 2016 23:16:26 +0100 Subject: [PATCH 029/228] Code review --- .../miniantags/slaughter/slaughter.dm | 37 ++++++------------- .../spells/spell_types/ethereal_jaunt.dm | 3 -- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 1553af20d1e..21bd67e860e 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -42,8 +42,15 @@ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. " + loot = list(/obj/effect/decal/cleanable/blood, \ + /obj/effect/decal/cleanable/blood/innards, \ + /obj/item/organ/internal/heart/demon) + del_on_death = 1 + var/death_message = "The generic slaughter demon screams in anger because this is the default death message!" + /mob/living/simple_animal/slaughter/New() ..() + death_message = "[src] screams in anger as it collapses into a puddle of viscera." var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new AddSpell(bloodspell) if(istype(loc, /obj/effect/dummy/slaughter)) @@ -57,22 +64,12 @@ speed = 0 /mob/living/simple_animal/slaughter/death() - ..(1) - death_gibs() + ..() death_mealspill() + visible_message(deathmessage) playsound(get_turf(src),death_sound, 200, 1) - death_message() - - ghostize() - qdel(src) - -/mob/living/simple_animal/slaughter/proc/death_gibs() - - new /obj/effect/decal/cleanable/blood(get_turf(src)) - new /obj/effect/decal/cleanable/blood/innards(get_turf(src)) - new /obj/item/organ/internal/heart/demon(src.loc) /mob/living/simple_animal/slaughter/proc/death_mealspill() if(consumed_mobs) @@ -85,9 +82,6 @@ desc = "A repulsive pile of guts and gore." random_icon_states = list("innards") -/mob/living/simple_animal/slaughter/proc/death_message() - visible_message("[src] screams in anger as it collapses into a puddle of viscera.") - /mob/living/simple_animal/slaughter/phasein() . = ..() speed = 0 @@ -148,26 +142,19 @@ attack_sound = 'sound/items/bikehorn.ogg' feast_sound = 'sound/spookoween/scary_horn2.ogg' death_sound = 'sound/misc/sadtrombone.ogg' + death_message = "[src] fades out, as all of its friends are released from its prison of hugs." icon_state = "bowmon" icon_living = "bowmon" + loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) + // Keep the people we hug! consumed_mobs = list() // HOT. PINK. //color = "#FF69B4" -/mob/living/simple_animal/slaughter/laughter/death_gibs() - // Laughter demons are powered not by demonic energy, but by the laughter - // of kittens - var/mob/living/simple_animal/pet/cat/kitten/K = new(get_turf(src)) - K.name = "Laughter" - -/mob/living/simple_animal/slaughter/laughter/death_message() - visible_message("[src] fades out, as all of its friends are released from its prison of hugs.", null, "You hear a sigh and a giggle.") - - /mob/living/simple_animal/slaughter/laughter/death_mealspill() if(!consumed_mobs) return diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index 904160a6fe2..07623aad297 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -69,9 +69,6 @@ break target.canmove = 1 -//Silence wizard during jaunt so they cannot spell cast while invisible -// - /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/jaunt_disappear(atom/movable/overlay/animation, mob/living/target) animation.icon_state = "liquify" flick("liquify",animation) From 86f7fbc455bb05c989b828bfbaeed08a23fa8e95 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Wed, 20 Apr 2016 23:18:13 +0100 Subject: [PATCH 030/228] Death message --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 21bd67e860e..c66d087de8f 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -142,7 +142,6 @@ attack_sound = 'sound/items/bikehorn.ogg' feast_sound = 'sound/spookoween/scary_horn2.ogg' death_sound = 'sound/misc/sadtrombone.ogg' - death_message = "[src] fades out, as all of its friends are released from its prison of hugs." icon_state = "bowmon" icon_living = "bowmon" @@ -155,6 +154,11 @@ // HOT. PINK. //color = "#FF69B4" +/mob/living/simple_animal/slaughter/laughter/New() + ..() + + death_message = "[src] fades out, as all of its friends are released from its prison of hugs." + /mob/living/simple_animal/slaughter/laughter/death_mealspill() if(!consumed_mobs) return From 4bae3212b1cf6af3e1e8be1e0ba0bdcaae2c44ad Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Wed, 20 Apr 2016 23:22:05 +0100 Subject: [PATCH 031/228] Deathmessage changes --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index c66d087de8f..f065d53038c 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -46,11 +46,11 @@ /obj/effect/decal/cleanable/blood/innards, \ /obj/item/organ/internal/heart/demon) del_on_death = 1 - var/death_message = "The generic slaughter demon screams in anger because this is the default death message!" + deathmessage = "The generic slaughter demon screams in anger because this is the default death message!" /mob/living/simple_animal/slaughter/New() ..() - death_message = "[src] screams in anger as it collapses into a puddle of viscera." + deathmessage = "[src] screams in anger as it collapses into a puddle of viscera." var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new AddSpell(bloodspell) if(istype(loc, /obj/effect/dummy/slaughter)) @@ -68,7 +68,6 @@ death_mealspill() - visible_message(deathmessage) playsound(get_turf(src),death_sound, 200, 1) /mob/living/simple_animal/slaughter/proc/death_mealspill() @@ -157,7 +156,7 @@ /mob/living/simple_animal/slaughter/laughter/New() ..() - death_message = "[src] fades out, as all of its friends are released from its prison of hugs." + deathmessage = "[src] fades out, as all of its friends are released from its prison of hugs." /mob/living/simple_animal/slaughter/laughter/death_mealspill() if(!consumed_mobs) From d0670ad14127c4cb98a00b22dda2809a96bc1620 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Wed, 20 Apr 2016 20:12:38 -0700 Subject: [PATCH 032/228] Removes brains dropping from admin caused gibs and c4 suicide --- code/game/objects/items/weapons/explosives.dm | 2 +- code/modules/admin/verbs/bluespacearty.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 12 +++++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 219a6ca3e94..23a80ba1da8 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -48,7 +48,7 @@ message_admins("[key_name(user)] suicided with [src.name] at ([x],[y],[z])") sleep(10) explode(get_turf(user)) - user.gib() + user.gib(no_brain = 1) /obj/item/weapon/c4/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/modules/admin/verbs/bluespacearty.dm b/code/modules/admin/verbs/bluespacearty.dm index c97d3ee6e00..30b2130f543 100644 --- a/code/modules/admin/verbs/bluespacearty.dm +++ b/code/modules/admin/verbs/bluespacearty.dm @@ -28,7 +28,7 @@ message_admins("[target.name] has been hit by Bluespace Artillery fired by [usr]") if(target.health <= 1) - target.gib() + target.gib(no_brain = 1) else target.adjustBruteLoss(min(99,(target.health - 1))) target.Stun(20) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index c05867d2cc7..b8824da0bbd 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -583,8 +583,8 @@ Traitors and the like can also be revived with the previous role mostly intact. src << "Only administrators may use this command." return - var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") - if(confirm != "Yes") + var/confirm = alert(src, "Drop a brain?", "Confirm", "Yes", "No","Cancel") + if(confirm == "Cancel") return //Due to the delay here its easy for something to have happened to the mob if(!M) @@ -596,8 +596,10 @@ Traitors and the like can also be revived with the previous role mostly intact. if(istype(M, /mob/dead/observer)) gibs(M.loc, M.viruses) return - - M.gib() + if(confirm == "Yes") + M.gib() + else + M.gib(no_brain = 1) feedback_add_details("admin_verb","GIB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_gib_self() @@ -609,7 +611,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere return else - mob.gib() + mob.gib(no_brain = 1) log_admin("[key_name(usr)] used gibself.") message_admins("[key_name_admin(usr)] used gibself.") From b5dba745f5b9b4acd995a39fda2072f0684917d1 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 20 Apr 2016 23:08:41 -0500 Subject: [PATCH 033/228] Lava Engine --- .../atmospherics/machinery/pipes/heat_exchange/he_pipes.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm index 3a264631e92..6ecb554eab7 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm @@ -7,6 +7,7 @@ color = "#404040" buckle_lying = 1 var/icon_temperature = T20C //stop small changes in temperature causing icon refresh + burn_state = LAVA_PROOF /obj/machinery/atmospherics/pipe/heat_exchanging/New() ..() @@ -30,7 +31,9 @@ var/turf/T = loc if(istype(T)) - if(T.blocks_air) + if(istype(T, /turf/open/floor/plating/lava)) + environment_temperature = 5000 + else if(T.blocks_air) environment_temperature = T.temperature else var/datum/gas_mixture/environment = T.return_air() From 417902badc701d7b3cdea1b66f563f65a4d81e59 Mon Sep 17 00:00:00 2001 From: c0 Date: Thu, 21 Apr 2016 08:06:42 +0300 Subject: [PATCH 034/228] Replaces fake Insulated Gloves with cheap Insulated Gloves in maint drop --- code/game/objects/effects/spawners/lootdrop.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 621c0d6b665..8b0d709de7e 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -61,7 +61,7 @@ /obj/item/bodybag = 1, /obj/item/clothing/glasses/meson = 2, /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/clothing/gloves/color/yellow/fake = 1, + /obj/item/clothing/gloves/color/fyellow = 1, /obj/item/clothing/head/hardhat = 1, /obj/item/clothing/head/hardhat/red = 1, /obj/item/clothing/head/that{throwforce = 1; throwing = 1} = 1, From 546ae0383d896ed472b3fbe062983c46b26b72ea Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 21 Apr 2016 01:46:02 -0500 Subject: [PATCH 035/228] Typo fix and notification for ash walker eggs --- code/modules/ruins/lavaland_ruin_code.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index 33aa011e256..7d0f1331540 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -209,7 +209,7 @@ death = FALSE anchored = 0 density = 0 - flavour_text = {"You are an Ash Walker. Your tribe worships the necropolis. The wastes are sacred ground, it's monsters a blessed bounty. You have seen lights in the distance though, the arrival of outsiders seeking to destroy the land. Fresh sacrifices."} + flavour_text = {"You are an Ash Walker. Your tribe worships the necropolis. The wastes are sacred ground, its monsters a blessed bounty. You have seen lights in the distance though, the arrival of outsiders seeking to destroy the land. Fresh sacrifices."} /obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn) new_spawn.real_name = random_unique_lizard_name(gender) @@ -219,7 +219,11 @@ H.dna.species.specflags |= NOBREATH H.dna.species.specflags |= NOGUNS - +/obj/effect/mob_spawn/human/ash_walker/New() + ..() + var/area/A = get_area(src) + if(A) + notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, attack_not_jump = 1) //Wishgranter Exile From 3f9124133f2a3ffb24565656e5be41b80feaea80 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 21 Apr 2016 03:10:50 -0500 Subject: [PATCH 036/228] Removes ash walker underwear --- code/modules/ruins/lavaland_ruin_code.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index 7d0f1331540..dfccd3e31dd 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -218,6 +218,8 @@ var/mob/living/carbon/human/H = new_spawn H.dna.species.specflags |= NOBREATH H.dna.species.specflags |= NOGUNS + H.underwear = "Nude" + H.update_body() /obj/effect/mob_spawn/human/ash_walker/New() ..() From f5d28527c5eac8f7ba1cd8b6f674b6cf38ed0e3d Mon Sep 17 00:00:00 2001 From: oranges Date: Thu, 21 Apr 2016 20:33:16 +1200 Subject: [PATCH 037/228] Properly revert the container drop code --- code/game/objects/items/weapons/storage/storage.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9764781e8fc..0c5d6de57df 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -472,8 +472,8 @@ /obj/item/weapon/storage/Destroy() - var/turf = get_turf(src) - empty_object_contents(0, turf) + for(var/obj/O in contents) + O.mouse_opacity = initial(O.mouse_opacity) close_all() qdel(boxes) From fb87a435d1f201cfe18c784362afd953a7009394 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Thu, 21 Apr 2016 08:59:47 -0400 Subject: [PATCH 038/228] Aliens and monkeys can now climb structures --- code/game/objects/structures.dm | 12 +++++++++--- .../objects/structures/crates_lockers/closets.dm | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index f8a20b9f64f..98cc4ea13ce 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -60,7 +60,7 @@ . = ..() if(!climbable) return - if(ismob(O) && user == O && ishuman(user)) + if(ismob(O) && user == O && iscarbon(user)) if(user.canmove) climb_structure(user) return @@ -81,6 +81,8 @@ var/adjusted_climb_time = climb_time if(user.restrained()) //climbing takes twice as long when restrained. adjusted_climb_time *= 2 + if(istype(user, /mob/living/carbon/alien)) + adjusted_climb_time *= 0.25 //aliens are terrifyingly fast structureclimber = user if(do_mob(user, user, adjusted_climb_time)) if(src.loc) //Checking if structure has been destroyed @@ -92,8 +94,12 @@ user.Stun(climb_stun) else user << "You fail to climb onto [src]." + density = 1 + structureclimber = null + return 0 density = 1 structureclimber = null return 1 - structureclimber = null - return ..() + else + structureclimber = null + return 0 diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index dc219c46a74..12d2ca3e65e 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -307,6 +307,9 @@ togglelock(user) return +/obj/structure/closet/attack_alien(mob/living/user) + return attack_hand(user) + // tk grab then use on self /obj/structure/closet/attack_self_tk(mob/user) return attack_hand(user) From 0ffeaa46fa6957fbd2c52fd1be8f508f8a663b00 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 21 Apr 2016 17:54:17 +0100 Subject: [PATCH 039/228] Removes ishuman() check for beekeeping --- code/modules/hydroponics/beekeeping/beebox.dm | 103 +++++++++--------- .../simple_animal/friendly/drone/_drone.dm | 4 +- 2 files changed, 54 insertions(+), 53 deletions(-) diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index fdd4151302d..dfefa1a10a9 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -190,58 +190,57 @@ /obj/structure/beebox/attack_hand(mob/user) - if(ishuman(user)) - if(!user.bee_friendly()) - //Time to get stung! - var/bees = FALSE - for(var/b in bees) //everyone who's ever lived here now instantly hates you, suck it assistant! - var/mob/living/simple_animal/hostile/poison/bees/B = b - if(B.isqueen) - continue - if(B.loc == src) - B.loc = get_turf(src) - B.target = user - bees = TRUE - if(bees) - visible_message("[user] disturbs the bees!") - else - var/option = alert(user, "What Action do you wish to perform?","Apiary","Remove a Honey Frame","Remove the Queen Bee") - if(!Adjacent(user)) - return - switch(option) - if("Remove a Honey Frame") - if(!honey_frames.len) - user << "There are no honey frames to remove!" - return + if(!user.bee_friendly()) + //Time to get stung! + var/bees = FALSE + for(var/b in bees) //everyone who's ever lived here now instantly hates you, suck it assistant! + var/mob/living/simple_animal/hostile/poison/bees/B = b + if(B.isqueen) + continue + if(B.loc == src) + B.loc = get_turf(src) + B.target = user + bees = TRUE + if(bees) + visible_message("[user] disturbs the bees!") + else + var/option = alert(user, "What Action do you wish to perform?","Apiary","Remove a Honey Frame","Remove the Queen Bee") + if(!Adjacent(user)) + return + switch(option) + if("Remove a Honey Frame") + if(!honey_frames.len) + user << "There are no honey frames to remove!" + return - var/obj/item/honey_frame/HF = pick_n_take(honey_frames) - if(HF) - if(!user.put_in_active_hand(HF)) - HF.loc = get_turf(src) - visible_message("[user] removes a frame from the apiary.") + var/obj/item/honey_frame/HF = pick_n_take(honey_frames) + if(HF) + if(!user.put_in_active_hand(HF)) + HF.loc = get_turf(src) + visible_message("[user] removes a frame from the apiary.") - var/amtH = HF.honeycomb_capacity - var/fallen = 0 - while(honeycombs.len && amtH) //let's pretend you always grab the frame with the most honeycomb on it - var/obj/item/weapon/reagent_containers/honeycomb/HC = pick_n_take(honeycombs) - if(HC) - HC.loc = get_turf(user) - amtH-- - fallen++ - if(fallen) - var/multiple = fallen > 1 - visible_message("[user] scrapes [multiple ? "[fallen]" : "a"] honeycomb[multiple ? "s" : ""] off of the frame.") + var/amtH = HF.honeycomb_capacity + var/fallen = 0 + while(honeycombs.len && amtH) //let's pretend you always grab the frame with the most honeycomb on it + var/obj/item/weapon/reagent_containers/honeycomb/HC = pick_n_take(honeycombs) + if(HC) + HC.loc = get_turf(user) + amtH-- + fallen++ + if(fallen) + var/multiple = fallen > 1 + visible_message("[user] scrapes [multiple ? "[fallen]" : "a"] honeycomb[multiple ? "s" : ""] off of the frame.") - if("Remove the Queen Bee") - if(!queen_bee || queen_bee.loc != src) - user << "There is no queen bee to remove!" - return - var/obj/item/queen_bee/QB = new() - queen_bee.loc = QB - bees -= queen_bee - QB.queen = queen_bee - QB.name = queen_bee.name - if(!user.put_in_active_hand(QB)) - QB.loc = get_turf(src) - visible_message("[user] removes the queen from the apiary.") - queen_bee = null + if("Remove the Queen Bee") + if(!queen_bee || queen_bee.loc != src) + user << "There is no queen bee to remove!" + return + var/obj/item/queen_bee/QB = new() + queen_bee.loc = QB + bees -= queen_bee + QB.queen = queen_bee + QB.name = queen_bee.name + if(!user.put_in_active_hand(QB)) + QB.loc = get_turf(src) + visible_message("[user] removes the queen from the apiary.") + queen_bee = null diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index d258370cfc3..ef1fa6cea17 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -242,4 +242,6 @@ /mob/living/simple_animal/drone/fully_heal(admin_revive = 0) adjustBruteLoss(-getBruteLoss()) //Heal all brute damage - +/mob/living/simple_animal/drone/bee_friendly() + // Why would bees pay attention to drones? + return 1 From dedf15c2c5cf2e6a3034ec66d62f3500d1ede827 Mon Sep 17 00:00:00 2001 From: Akke Date: Thu, 21 Apr 2016 19:30:28 +0100 Subject: [PATCH 040/228] Reworks sensory.dm --- .../diseases/advance/symptoms/sensory.dm | 22 +++++++++---------- .../chemistry/reagents/medicine_reagents.dm | 18 +++++++++++++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index 99635dd5fea..10e4f5cb7b3 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -10,7 +10,7 @@ Bonus The body generates Sensory restorational chemicals. inacusiate for ears antihol for removal of alcohol - synaptizine to purge sensory hallucigens + synaphydramine to purge sensory hallucigens and histamine based impairment mannitol to kickstart the mind ////////////////////////////////////// @@ -21,7 +21,7 @@ Bonus resistance = -4 stage_speed = -4 transmittable = -3 - level = 6 + level = 5 severity = 0 /datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A) @@ -38,13 +38,12 @@ Bonus M.reagents.add_reagent_list(list("antihol"=10, "inacusiate"=10)) M << "You feel sober." if(4) - if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("inacusiate") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10) - M.reagents.add_reagent_list(list("antihol"=10, "inacusiate"=10, "synaptizine"=5)) + if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("inacusiate") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10) + M.reagents.add_reagent_list(list("antihol"=10, "inacusiate"=10, "synaphydramine"=5)) M << "You feel focused." if(5) - if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("inacusiate") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10) - M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "inacusiate"=10, "synaptizine"=10)) - M << "Your mind feels relaxed." + if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("inacusiate") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10) + M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "inacusiate"=10, "synaphydramine"=10)) return /* @@ -80,24 +79,23 @@ Bonus var/mob/living/M = A.affected_mob switch(A.stage) if(1) - M << "You can't taste a thing." - if(2) M << "You can't feel anything." + if(2) + M << "You feel absolutely hammered." if(prob(10)) M.reagents.add_reagent("morphine",rand(5,7)) if(3) M.reagents.add_reagent("ethanol",rand(5,7)) - M << "You feel absolutely hammered." + M << "You try to focus on not dying." if(prob(15)) M.reagents.add_reagent("morphine",rand(5,7)) if(4) M.reagents.add_reagent_list(list("ethanol",rand(7,15),"mindbreaker",rand(5,10))) - M << "You try to focus on not dying." + M << "u can count 2 potato!" if(prob(20)) M.reagents.add_reagent("morphine",rand(5,7)) if(5) M.reagents.add_reagent_list(list("impedrezene",rand(5,15),"ethanol",rand(7,20),"mindbreaker",rand(5,15))) - M << "u can count 2 potato!" if(prob(25)) M.reagents.add_reagent("morphine",rand(5,7)) return \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index e65f633be04..5676d135a2c 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -89,6 +89,24 @@ ..() . = 1 +/datum/reagent/medicine/synaphydramine + name = "Diphen-Synaptizine" + id = "synaphydramine" + description = "Reducing drowsiness and hallucinations, purges Histamine from body." + color = "#EC536D" // rgb: 236, 83, 109 + +/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M) + M.drowsyness = max(M.drowsyness-5, 0) + if(holder.has_reagent("mindbreaker")) + holder.remove_reagent("mindbreaker", 5) + if(holder.has_reagent("histamine")) + holder.remove_reagent("histamine", 5) + M.hallucination = max(0, M.hallucination - 10) + if(prob(30)) + M.adjustToxLoss(1, 0) + ..() + . = 1 + /datum/reagent/medicine/inacusiate name = "Inacusiate" id = "inacusiate" From 3079539182437dfc5bd6892cd3a6d3be1269e832 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Thu, 21 Apr 2016 14:53:52 -0400 Subject: [PATCH 041/228] text --- code/game/objects/structures.dm | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 98cc4ea13ce..c980fcf4c5d 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -92,14 +92,8 @@ "You climb onto [src].") add_logs(user, src, "climbed onto") user.Stun(climb_stun) + . = 1 else user << "You fail to climb onto [src]." - density = 1 - structureclimber = null - return 0 density = 1 - structureclimber = null - return 1 - else - structureclimber = null - return 0 + structureclimber = null From e61fba82ea82c0f52571d29c7b3fa255fa0668fd Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Thu, 21 Apr 2016 12:58:15 -0700 Subject: [PATCH 042/228] Adds Bones and sinew to butchering results. Adds bone armor. --- .../objects/items/stacks/sheets/leather.dm | 7 +++++++ .../objects/items/stacks/sheets/mineral.dm | 18 ++++++++++++++++++ code/modules/clothing/suits/armor.dm | 11 +++++++++++ code/modules/crafting/recipes.dm | 7 +++++++ .../simple_animal/hostile/mining_mobs.dm | 7 +++++-- config/admins.txt | 1 + icons/mob/suit.dmi | Bin 291070 -> 291711 bytes icons/obj/clothing/suits.dmi | Bin 95179 -> 95473 bytes icons/obj/mining.dmi | Bin 52271 -> 52809 bytes 9 files changed, 49 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 264a710f3e0..feb0266390d 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -127,6 +127,13 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \ icon_state = "sheet-leather" origin_tech = "materials=2" +/obj/item/stack/sheet/sinew + name = "watcher sinew" + icon = 'icons/obj/mining.dmi' + desc = "Long stringy filaments which presumably came from a watcher's wings." + singular_name = "watcher sinew" + icon_state = "sinew" + origin_tech = "bio=4" //Step one - dehairing. diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index e48f7237cbe..6a0389c843d 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -14,6 +14,7 @@ Mineral Sheets - Adamantine - Mythril - Enriched Uranium + - Bones */ /obj/item/stack/sheet/mineral @@ -372,3 +373,20 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \ /obj/item/stack/sheet/mineral/abductor/New(var/loc, var/amount=null) recipes = abductor_recipes ..() + + +/* + * Bones + */ +/obj/item/stack/sheet/mineral/bone + name = "bones" + icon = 'icons/obj/mining.dmi' + icon_state = "bone" + singular_name = "bone" + desc = "Someone's been drinking their milk." + force = 7 + throwforce = 5 + w_class = 3 + throw_speed = 1 + throw_range = 3 + origin_tech = "materials=2;bio=2" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 23d15234731..b1ba866af7d 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -89,6 +89,15 @@ strip_delay = 80 put_on_delay = 60 +/obj/item/clothing/suit/armor/bone + name = "bone armor" + desc = "A tribal armor plate, crafted from animal bone." + icon_state = "bonearmor" + item_state = "bonearmor" + blood_overlay_type = "armor" + armor = list(melee = 35, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) + body_parts_covered = CHEST + /obj/item/clothing/suit/armor/bulletproof name = "bulletproof armor" desc = "A bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." @@ -319,3 +328,5 @@ desc = "God wills it!" icon_state = "knight_templar" item_state = "knight_templar" + + diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 33fd8889965..942bc4dd40c 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -351,3 +351,10 @@ parts = list(/obj/item/weapon/grenade/chem_grenade = 2) time = 50 category = CAT_WEAPON + +/datum/table_recipe/bonearmor + name = "Bone Armor" + result = /obj/item/clothing/suit/armor/bone + time = 30 + reqs = list(/obj/item/stack/sheet/mineral/bone = 6) + category = CAT_MISC diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index d1123203cae..f24005dd75c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -479,6 +479,7 @@ user << "You can't improve [D] any further!" return + /mob/living/simple_animal/hostile/asteroid/handle_temperature_damage() if(bodytemperature < minbodytemp) adjustBruteLoss(2) @@ -634,7 +635,7 @@ stat_attack = 1 robust_searching = 1 loot = list() - butcher_results = list(/obj/item/weapon/ore/diamond = 2) + butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1) //Goliath @@ -648,11 +649,13 @@ icon_dead = "goliath_dead" throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath2" - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/asteroid/goliath_hide = 1) + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/asteroid/goliath_hide = 1, /obj/item/stack/sheet/mineral/bone = 2) loot = list() stat_attack = 1 robust_searching = 1 + + //Legion /mob/living/simple_animal/hostile/asteroid/hivelord/legion diff --git a/config/admins.txt b/config/admins.txt index 1d0fab3d8c0..da1dad3217d 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -112,3 +112,4 @@ Lumipharon = Game Master bgobandit = Game Master coiax = Game Master RandomMarine = Game Master +TechnoAlchemist = Game Master diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 82d843b21fb46a81b0f534fd3b990e2a33c751e9..77a3ec6f9edd757b3744e46ee695672b045d0e75 100644 GIT binary patch delta 12670 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 LN-vA04SfC=zn%!| delta 12024 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�-JRA*%LXIYfBTh0$ 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 delta 20057 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 Date: Thu, 21 Apr 2016 17:46:29 -0400 Subject: [PATCH 043/228] Adds a tiny fan to the survival pod --- code/modules/mining/mine_items.dm | 24 +++++++++++++++++++++++- icons/obj/lavaland/survival_pod.dmi | Bin 7490 -> 7962 bytes 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index a412161fb82..eaa2fa7ce45 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -293,13 +293,14 @@ var/turf/threshhold = locate(start_turf.x, start_turf.y-2, start_turf.z) threshhold.ChangeTurf(/turf/open/floor/pod) var/turf/open/floor/pod/doorturf = threshhold - doorturf.blocks_air = 1 //So the air doesn't leak out doorturf.air.parse_gas_string("o2=21;n2=82;TEMP=293.15") var/area/ZZ = get_area(threshhold) if(!is_type_in_list(ZZ, blacklist)) L.contents += threshhold threshhold.overlays.Cut() + new /obj/structure/fans/tiny(threshhold) //a tiny fan, to keep the air in. + var/list/turfs = room["floors"] for(var/turf/open/floor/A in turfs) A.air.parse_gas_string("o2=21;n2=82;TEMP=293.15") @@ -327,8 +328,29 @@ icon = 'icons/obj/lavaland/survival_pod.dmi' icon_state = "fans" name = "environmental regulation system" + desc = "A large machine releasing a constant gust of air. anchored = 1 density = 1 + var/arbitraryatmosblockingvar = TRUE + +/obj/structure/fans/tiny + name = "tiny fan" + desc = "A tiny fan, releasing a thin gust of air." + layer = TURF_LAYER + 0.8 + density = 0 + icon_state = "fan_tiny" + +/obj/structure/fans/New(loc) + ..() + air_update_turf(1) + +/obj/structure/fans/Destroy() + arbitraryatmosblockingvar = FALSE + air_update_turf(1) + return ..() + +/obj/structure/fans/CanAtmosPass(turf/T) + return !arbitraryatmosblockingvar //Sleeper /obj/machinery/sleeper/survival_pod diff --git a/icons/obj/lavaland/survival_pod.dmi b/icons/obj/lavaland/survival_pod.dmi index fa1216f4d65c76363953a64da1cbd11c7ce4eb6b..62aad7854d29c0ab87e3a3c63299965c25d0e4cb 100644 GIT binary patch literal 7962 zcma)hWmKEb6K-&q;>Cg%w;v_Al;TjJlw!r9NQ)C(lHyt@l;ZBi-5naFIK?eUad!yh zrvFd(!~Jm2N%nouo}Jm*XWyB5W;aq>Q<(^#79Rir5UHvt=%AiCs6P}J8`Z{GS<;~% zt-iVjV11z*ukQ{~LoUobeWCfw7ecM6^8UH1<^>2ORlrZ7v zPXPqfRP1DNP2Mi69Wa=X^hc}&sZCa**-HirmS=9)FB?ARRIjiSH{7q@(jm~@fnUzzuB|x7T{damb@9*7V>&>iVFXE z`_Z|{+m3~G@SiErRf(PA)^sDdDE$d^{f!C_HJ<>e%^4f~YmXWLV5C!3c%|!|ab)5L zCZEfE+T!@ZH`K^`$Gij;QUS%2rc+oN%*z=h6vf)xsf#Y?Yt>=ec_9~^ywaV>r&bai z>y`pCUXZqm)77RssN)a3ERaIyBF43I=w+R!qS;JFO!O)Ja6~}ukTh#$lKIc=t<@Pt zro6t6*#)|v_}`2n{;o>ioW-hD=smcJd;-WdwBY_a6u%t}1?i?oyX56k`gWi>HIZYc zhS6`Wb>ZGc^8uhwpZNyO9CAMheLyx)jRoFGC}jjs91sEI#wASx#WQ&G1_U(1DOd&| zYwxrMTd(VqAU{M6X!~yy-@SY1m9|5fv;4h}Rn%s@=MM;HW?y5uML3FxhkH`iH8}xt zOsCbS>jBgu95T4SrQXx~4GNO+c5aP-p92f=qQLTHRZ>>oYbhQ9M!EBP0ET?H*>*}# zOGl_h0znM&t11_3H#6k5m5&a8v$vDff+-+wpFZu6MMk#mdiYI#0v2pJcOdZq6PWc2 znJOc{*EREi-SK7A9imm1{xi|5>H3p@mgO8xMv1gb6I}A)6k*04F5r1P7Nz?YZ|^H3 zZz)EwhX(*qG@>P@9FEONT_Y~xAUGys)xU`iEjdp_G@8})PFieAU$GH=+fYs*;R>^^ zH>)|n4W0Y)Cfv31xm78~vr$<;$ijm_QdsXNf_708G=wTZ+o(j@K9}*&Ulu^lmcv<_ zg(ADa>#xLgU~KZAAQ`O89)&p6LJk3@WkSf8O(8GIpS48OZLM@7=`rWC*d3(0vNM(RZR%p&UIg26Pu5n6zVv zh=`=5q$s@ZQwBhtrA%Yz;$E_p@!}N4QkE>mKYIiA}m`4Y=FCM z5o@``KSAc!)-=#AA~IsgPjtD*w|17 zp!aTzj)~wH8#5=TWQuib+$|u&hXp>z={}*ETbGcdq`b#Cwk(g1JC!c$8KMoI{1(3s zwf^mWNm`8wbbWY0NIy)rj)G1P~qo`jiaoccVi?)nEwl_D?l(a~g3#QwFZ z`)uHa*Ge9OyTRy))#I@d zGcz+0&ggiS=f-;JPG>T{OOj-({d@pG^I z)tWwV4+}1XaMhi}k9kU<>`fUq5pwg)Y3p&aPi!D&dVc_v`GoY+7XxK$038c_{?x-G zyc+eDS2ir3%@4b^20W^;{t$q~+dx+mlsJd9gJc8m{ueD)TZHie25p{vZthpNr+p+f zds>|#WwSimWx{9O7$brb64=m#l$Yt$mSAwqwapE2%m!n^w)G*@!K((tx?jC2WH26HbB~erpfODdR|o6^JR`?c!&@UF7$1!*%EQpYhkBwBI`k!i=%H z!|P$djYC4b?xX0X&(MG_D2>6>R_K7#({~&`L4VA@8}10Mk3ffnaX*h!uo#wyZg?!9X;JSW8p`UN$DkRVFedlGXE$T@z^0?}U;T_>YP=j4Q5a z=exw+WmLrcPWI#;Yj+h&F>IU;Z=v7k z0-SD`P}*d9AD$jh*2~Nu@%!V~gb?%$WTjU zVuyxeiFpjm{=fxL{xX&#qU6SR8#uZ{_Y2H1Nx?-IM;w&HEh;AFip8bA0MCUg)}q(-qY>&jyMwm2o2NvOD!pUaVSx_@n5ID zq7hIqMKdEs#@P2h!w|S(D+kXO7&%g1;PD03+W;ByrD)jdFId|_b>N;+ef_*;5$4NOHS?wmk#mg~m2aJzyk1p_ zp03gw#)~R6Evas5aG18AhgXoOT;6T%pVxSb--FeD%3RXbGz-@RkK4@vZ9 zqyN&=-Ox1n1~)uAc05az1|qiiqfbC1*g&RN)eHYK#dLUCX=zU+S3ol=S!<>pTtM@K z3-_rU296Yf#OjZcaiJilZWI5+()cIpU{hx~lNIKaQA*VQ{bLNMtQ?fpR8)kG9sKQA zS(zl8(YaRg+8+4y@}VgGSQ}9uqpTjyx5XK?4CbjMNy(D2HQI@K*=|a5=!t{~p_s;^ zr$r{$d@R#g&o6QwA^9_MV&*RTK~*o#z;mW&7DK4aSZ>k|HQSf zSDZL_se~ES$O*_bTYZG{#9caA%$CkY+ON)$a#f<;4yGzQXAd_mUp{uMLZd4*0rq0x z&O|2^DRf%-gaa`3hpv$(f5PBjb;*t^5mv-MI%-mA^Uug~6%r0bIcYi*wCm05v==&m zxIcSIFwAH=v5E7Cn;E!$yQtYob!zR~w!I*WlGSacoWuG42_x{Jsxx$}bnGG+hh$?4 zA)62TvEoavC3DB-DN1DN_wlQpKfI>4_Rjla6nWKg_qVh9o?$4F$MajTc(x!T*V#Pi z+sslvePE*_SGbu|>vl%?sCqM^7aaW^Nw4++eD z;Jtu_$mGzYhWGbTb&=OHjVV8cAB13=_{!0gUUTiqlLmns21AE*(W|`Jj_<7WfZ7p% zLb=3@AXo<{0zG`GuDaZm{;wK9VlNvnPt`EayUI6&N&qoFEsfBQ2dfNmcfCvcg4oa8 zfzUAa9p*;B!_35csSDJX#@WPrzqQR@-qnT4A>fs(;o|TQ7)oB)9l*R>5}&o1V7zyM zVZMu9&Wn53_$1OQ5PIo0>2hr&J3=tm7i?x`HD9=HH99l6h1tR?=97Y z29PiTrKP1!&LZec4K~l&OYYmc`bRNf)#evUtsS@d**!L&iwf0Ri=fn6!zepn=?~md z#@m=>9|ynd8fZbQ?09Qt7ANv~cEZZKOSTW%dBK6PF*`Tc*X}AT{US!7KZ=rPa)tuo zNWA`&M!Aop`Jc+kQ#`4P%yvEiuZbA7G)BJm_TTAS+F0TX{MyM?FUjuXE8mSY*>yfK zw|f`i*P5Cju>EpG_;{ANgCpqz2^K+IeORc0OO9y zFAl#@b5?`l#>O4+khkV>UV%e_axz63f@=3*OLNIyw4B0$Uy`d+maqSVJ^~|QT4AwX zF|h(7Y{{9KtoLR=PYBjcyyOE3@B(;)=FwCKI)F zh;FsFnlrf{M!EfI_RYtLld5G@R8-vE+k2(1PQZtD+=Ud%l3u;@0hZff;Tv-CsWLPR z9$}(Nhu2r|u<(wkD!gZ%Xk@$Kg=QCcd%3+;nSNCsD;nwu1v@y4v2Mu^e&w4pxw~7S zl`Cy}XC)65q++_JQnA6tIq+v^V#Ty^$MW^{6)ZIy%GlLU_=l`IP|ygKbb>YdDIT7Y zz9HAU2no$d|GrM5fWJN$ZZ%-9nRyR5n3X;xd9E1HY5-kXRZQln{lMhn`u63Esb4%@ zTj8IMS2O!lg>CI8eNXfRUaU%o`@M^v_PJ)=Ikj(#cwBLB_KJ3HGHBLPW{~n0w6RfG zIx;b6EWz{&TL!mT__XZK_(IEUB4SrKJ^)UME~kM6W3xDGP%|#3th>G`oR}~f9q=$pr$jaCBR|hvM9wiAo;N?B7ps)YXGwlX9Cr9gNM!_NTtmf*~dUZN$o!U?k+t zIaIE{>9g=y-&!2{F+YT!WMD|CEP$A~1hc%8m*WQ+n#$>gJSSATH^+MzCd6i?{~AaW zyF92K7>GtpF9yhT^$CLDM;&1Nk{A6QhBIO@bC=XZ>nP31H?ui)RS7*s!EUAMr8q`G ztB~fTsU!rLC{;iEE%1{_I6VT(F$Kjtb#!!muG_pgTzAHH$*tF{xy6kQQ@$3hy3QY& zOgGl4Xk}jg>J1$SutYroew6iH3s*xlpzB~;GHh}PMx>`!mbn{ao95jt6-IYt7z>MPDn zOng)YdTk$3nT{JVw)6!9hpo?Hwf#AY%Axr&wwzrb`Mo~lzCDv-9g8J-x0F$@Yj=)L z{aG2^lAM|4eJ@tP6lVBtCXTNvct zG-BTJ-4rf*@lVR}vi@rZ2%k6|hf#{CbLWZElvIh^1)OfTI8pw?cxP@iMiC$|K#c0} zCs%F}?zfv-qYCg@jY08$baAnL{6=3x1G}f>r6v4U0MId0xx}Q=uIHk8mN$%Mh&Q0 zIhIK(JeicvciAkx>-yjvrj*}D&ZFk?Hw`0N!wB){l?9VU-r_KivDnu9$ZIgs2$C@8 z3=nIP@RHZi*LMP)d1pQQx4Wx1?8{OQ*jab?`e$ay4j|7c_Dk#lE9>MJfG=gZRxr43 z%bn2sE3yJWhRib5>$_$bGchN940bnp#xrg(zL_ViK>7e7#k)>(F56?((;N z{SvHRy&;D`>enrXb)$JZdSv25GVA=iOU$lxHE2HeD&pzqg*kdgXj;#C#N<_K zu=@Uvnq8x1{AzL;!kF}za#>Hd_$Y=KUmT~Lp;+Rs{53p^BSyWT!xBx|nAp36@!wJb z>uXOJw(XnlMV&OHh~b|K@|-9Bm<3?b{i)ocVSLG_e=1{R2=i-do}qXo>h$3+YgcRQ zYdZ&r{=q>(51p3y3=)-Y&s2cFqgczmOF!QB?l2cx^Z+VLDnqEE*>f1A0;D5o((Z}6 z;m=7X3*xcw8lz`yfgwE9+e`%*WO;UbeFNx+*QUC9dK1~z)aDMBI+scErgv0yg-m5C zf($V+gd_Kd7H<(#6^q# zGEBF&z#u*dBFPwYiBRpj5VDmsyN%jr!>27}9J#->FfC;|Ef~9Smt%(<+qg4TN zpRPg0&D-cI+0nS@ZXwbjgP*>Jzrk#5!oupawm=m~&Obo+Hx~UG|7I>eUYFJWPspNR{qM&&E z?Kd;ji>|&ttFSQ7;Wtvl&+>U?TGW}TFwB*e6;6Kszv8(oPCH3olaeUgX>)38(JLxM z;cjiE6+GzErQbQxrl+O?Mt(>`i;7;98=R4jiHI=k3wOAhbM4?a9fV?yqa{s*M}uS@ zFW-T^9x{~+b>OQVe(hw{rKPE&=aVxtG4=H?xAq?0G1WD`2ng%M?+d&fEhFSP`W6He z9$fOg6zi^xc}KbNMVsbA+$P6XtVk^o|2W8oc}z^TUz zqPe^uV++54(gutl$~I8MFnGUD)k6m3iP$c$O+&3`Bv}A{zO4>uPB`9=CH_Zj{9fkH z9ZXJ4kWNreudKvI;Xf%vp><jH||E!Tl8xIlK+-Rks-?fVDyN4dr>`|y| zl?=Pn@dO*m`~@L76f1dtxVQHucOI$gYul96>FwgV_WhCmrZF`+eA&2h(ERj~336=G=xl#C8*nx$nQV9+{<8D-RwUp1NIj;?UdP+B`Ie zK>rKWC?~MV4Uu8^Adg#it8&t|!oPdv{8((KEDFQRTDUONlME2ZJ3}OVw~n4O+l2w4|A0*23V^u8aVt>Zrs;{Zi6(|DJBW zzTBVYpa9TPEOg(1OC!leMhU5;TdK}gGV`e+@7|l7eDh~HZ!Al`t{QKYPTnxbZ0|3tsN z>2tUsm=>f%WGfDO%IN`#*CB3SesiaOm01Sgh1xS|(l`b}WuujDTcYgFAbQVc9a7HD zgtF&<+v$}{rA_<&g28s{`SdO`JRB9ka7%WcKPOe7x;Pj{b8TOnR-AaixDFG zeaN3@d_^R%z~0XisL}~e9e8a4x-)b#_dG`$Di}D*6)L04L?g~tu{C(rbZE|wp^-zl h|DX8&U!Xq$Cr6^uHmG%ZP?y~RRYgsON_q33{{zdXfN%f+ literal 7490 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 daI*3apVt;HR!k7H1b!3+o~mi9mMg Date: Thu, 21 Apr 2016 17:58:02 -0400 Subject: [PATCH 044/228] " --- code/modules/mining/mine_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index eaa2fa7ce45..02d014342df 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -328,7 +328,7 @@ icon = 'icons/obj/lavaland/survival_pod.dmi' icon_state = "fans" name = "environmental regulation system" - desc = "A large machine releasing a constant gust of air. + desc = "A large machine releasing a constant gust of air." anchored = 1 density = 1 var/arbitraryatmosblockingvar = TRUE From c01d7393906419fcf1aee7bc081c9a3267ac6bf5 Mon Sep 17 00:00:00 2001 From: Lularian Date: Thu, 21 Apr 2016 17:27:47 -0500 Subject: [PATCH 045/228] R&D is shit --- code/game/objects/items/weapons/storage/backpack.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index d1716bc94a2..878c1abedaf 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -35,7 +35,7 @@ desc = "A backpack that opens into a localized pocket of Blue Space." origin_tech = "bluespace=4" icon_state = "holdingpack" - max_w_class = 5 + max_w_class = 10 max_combined_w_class = 35 burn_state = FIRE_PROOF var/pshoom = 'sound/items/PSHOOM.ogg' From 7b79508b17f743be7bbd51f62af2568fd8128673 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Thu, 21 Apr 2016 15:36:27 -0700 Subject: [PATCH 046/228] bone ore and path REFACTOR. --- .../objects/items/stacks/sheets/mineral.dm | 16 +--------------- .../objects/items/stacks/sheets/sheet_types.dm | 18 +++++++++++++++++- code/modules/crafting/recipes.dm | 2 +- .../mining/lavaland/necropolis_chests.dm | 2 +- .../simple_animal/hostile/mining_mobs.dm | 2 +- 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 6a0389c843d..54949b7450b 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -375,18 +375,4 @@ var/global/list/datum/stack_recipe/abductor_recipes = list ( \ ..() -/* - * Bones - */ -/obj/item/stack/sheet/mineral/bone - name = "bones" - icon = 'icons/obj/mining.dmi' - icon_state = "bone" - singular_name = "bone" - desc = "Someone's been drinking their milk." - force = 7 - throwforce = 5 - w_class = 3 - throw_speed = 1 - throw_range = 3 - origin_tech = "materials=2;bio=2" + diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 5cc3ccd6765..d6fc198ceb3 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -249,4 +249,20 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \ desc = "Rare kind of gems which are only gained by blood sacrifice to minor deities. They are needed in crafting powerful objects." singular_name = "greater gem" icon_state = "sheet-greatergem" - origin_tech = "materials=8" \ No newline at end of file + origin_tech = "materials=8" + + /* + * Bones + */ +/obj/item/stack/sheet/bone + name = "bones" + icon = 'icons/obj/mining.dmi' + icon_state = "bone" + singular_name = "bone" + desc = "Someone's been drinking their milk." + force = 7 + throwforce = 5 + w_class = 3 + throw_speed = 1 + throw_range = 3 + origin_tech = "materials=2;bio=2" \ No newline at end of file diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 942bc4dd40c..418ff16968a 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -356,5 +356,5 @@ name = "Bone Armor" result = /obj/item/clothing/suit/armor/bone time = 30 - reqs = list(/obj/item/stack/sheet/mineral/bone = 6) + reqs = list(/obj/item/stack/sheet/bone = 6) category = CAT_MISC diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index d29663a2ff9..87ce12f72d8 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -366,7 +366,7 @@ /datum/table_recipe/oar name = "goliath bone oar" result = /obj/item/weapon/oar - reqs = list(/obj/item/asteroid/goliath_hide = 1) + reqs = list(/obj/item/stack/sheet/bone = 2) time = 15 category = CAT_MISC diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index f24005dd75c..0d41abe1c86 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -649,7 +649,7 @@ icon_dead = "goliath_dead" throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath2" - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/asteroid/goliath_hide = 1, /obj/item/stack/sheet/mineral/bone = 2) + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/asteroid/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) loot = list() stat_attack = 1 robust_searching = 1 From 3a67251ebf99b514e6a67c8cce3b71de3fb4006b Mon Sep 17 00:00:00 2001 From: oranges Date: Tue, 19 Apr 2016 22:59:42 +0000 Subject: [PATCH 047/228] Time filter added to changelog tool You can now use -t to determine how many weeks back the generated html changelog should go. The default is set to 4 Long form of the argument is supported as --time-period --- tools/ss13_genchangelog.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/ss13_genchangelog.py b/tools/ss13_genchangelog.py index ed76aa9c6c6..2238e2925e5 100644 --- a/tools/ss13_genchangelog.py +++ b/tools/ss13_genchangelog.py @@ -27,7 +27,7 @@ THE SOFTWARE. from __future__ import print_function import yaml, os, glob, sys, re, time, argparse -from datetime import datetime, date +from datetime import datetime, date, timedelta from time import time today = date.today() @@ -36,6 +36,7 @@ dateformat = "%d %B %Y" opt = argparse.ArgumentParser() opt.add_argument('-d', '--dry-run', dest='dryRun', default=False, action='store_true', help='Only parse changelogs and, if needed, the targetFile. (A .dry_changelog.yml will be output for debugging purposes.)') +opt.add_argument('-t', '--time-period', dest='timePeriod', default=4, type=int, help='Define how many weeks back the changelog should display') opt.add_argument('targetFile', help='The HTML changelog we wish to update.') opt.add_argument('ymlDir', help='The directory of YAML changelogs we will use.') @@ -172,8 +173,11 @@ with open(args.targetFile.replace('.htm', '.dry.htm') if args.dryRun else args.t with open(os.path.join(targetDir, 'templates', 'header.html'), 'r') as h: for line in h: changelog.write(line) - + + weekstoshow = timedelta(weeks=args.timePeriod) for _date in reversed(sorted(all_changelog_entries.keys())): + if not (today - _date < weekstoshow): + continue entry_htm = '\n' entry_htm += '\t\t\t

{date}

\n'.format(date=_date.strftime(dateformat)) write_entry = False From 72c74194df784d110f4e1e4584d5a8142023d186 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Thu, 21 Apr 2016 16:50:21 -0700 Subject: [PATCH 048/228] Adds Bone Necklace talisman. --- code/modules/clothing/under/ties.dm | 16 +++++++++++++++- code/modules/crafting/recipes.dm | 8 ++++++++ icons/mob/ties.dmi | Bin 3368 -> 3467 bytes icons/obj/clothing/ties.dmi | Bin 12540 -> 12823 bytes 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index e83317bfe78..15c3cecd3a0 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -305,4 +305,18 @@ icon = 'icons/obj/clothing/ties.dmi' icon_state = "bling" item_state = "" //no inhands - item_color = "bling" \ No newline at end of file + item_color = "bling" + +//////////////// +//OONGA BOONGA// +//////////////// + +/obj/item/clothing/tie/talisman + name = "bone talisman" + desc = "A hunter's talisman, some say the old gods smile on those who wear it." + icon = 'icons/obj/clothing/ties.dmi' + icon_state = "talisman" + item_state = "" + item_color = "talisman" + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS|HEAD + armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 50, bio = 65, rad = 5) //Faith is the best armor. //This won't actually work because of accessories kill me with a fucking knife jesus christ I hate code \ No newline at end of file diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 418ff16968a..02b8105d3e0 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -358,3 +358,11 @@ time = 30 reqs = list(/obj/item/stack/sheet/bone = 6) category = CAT_MISC + +/datum/table_recipe/bonetalisman + name = "Bone Talisman" + result = /obj/item/clothing/tie/talisman + time = 20 + reqs = list(/obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 1) + category = CAT_MISC \ No newline at end of file diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 4b4a8ac79c0d6707ad60de6183903c502db4b644..bf66012f5553070b801c1b4494a6fd6fc8495741 100644 GIT binary patch delta 3101 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 Tb!V6Q@4YZGFxAi3z4h=vZUPiP delta 3017 zcmZXUc|4SB8^@nH92${AI>(-@DUu~+7^hR&vNS}NQp%JqyP?6Ov|5VH9D9VREQJPR zACbn=qzs{H8rx*)wVSbyc^~TZ>HWO_-1l|e_x1T)_wW1st|w0VnN*?@%)Lz63YxZY?k9h=L z4D|F5_Vl|70AZQ#E}HsH_}PY3lLTGIftr-Kia^Pb)(n(s~jfR!Qcx9Yr&b?J;ZJhH`Ni zx~ZbxmhlGjbQS+Kd_z z*5V)kLf_`l2UAf?me21@Mg?K-kYRh3^6{j>^aubDGE1iaCIzOAd zgdeOsarQA^wX5dRvc>P0XT?>UR!i(>)a1T^gxjXGGwT|9h*(M=&s`*Yh!P1rRYYXN zy4}{g$G3=Y2Q8Pn(ZH(*$Pnk)C5g*WbQys083Y_zb20D%C}(LrN&d}l-xq(Gtg>|O z-x1Vz_Fzx_my6os_L&5bGQI2+*}}j(BalTMx3+pM z4YiyREo3fR-ofJ7PFXEkcxO%S^83rXG>@m7bYPeT`1?)3LBrs6ROZmAmRqQZLLM*l zw}3~yNXw4JfW3Owp)rbC(H-MpVez^tR6H`L*dd9n!W!Q@Q;pC;c3Q3FEY@u5>0)O*q zXU>_|O8D3`8&81@mQ`L(jLT?giGxuf>+i{ucAsVRbq zTA`sUYw?Tn#&wHrri*gM2n4R?k_4}tA^1QJocl0rDyo=u9g4X|hI2}8Y7$#-t%-XU z+>>5`kL{CW!6f3cqErXo4NA5g0or7n@$*YFSErZ2U?q0V>H|uXTHKRW8>(==oKe9x z6B%1~!I}T0A)+sLA_V;rMkH}HiMY;NRd7t2rHpO6?s9V; zoZ@-3FQ3@r@7H(lxP$ORDu@n5OYl7ZQP8GJmw%7WO1+C z32`F&%``{VmGzP*RYT6d!kC+~8DAx*55;;bmoxmTSEps7P2p*^ymzoLT;h-PcRv3o zx{<)WJ%kT@W-{stawbD&aA^~>d3W3v&vWr&e?fe1!1&{AfBV-1oAZCyE3gp4q32X< z4!7H&F`fp|cpD7Sc-tChghG#ck$i%P6&bh#s#+ZLwDjzB)Fy*)ZN%Zjhmi#kgX|3k z=nLo*n+zmh&nzq~G?nY~*+solG9RpNsXk2LRW5&ZmS`ptiE%{d7^~&u$x5o=Noo;f zj_JCe=Fr)?fvYy>C$7)A8@MzJH*jsx${PEDVT6(0wFv69?CiB@twj>1d0w#^FYxa} z$*d`I5Fn>~X=>e2aNyL@uisM%;l?z`XOL4)h$;l+>t2I6DT6-WO_Lw4ZNaanbpkH1 zecw^|zjQWsg~AsEhz80LqOq?HqLI#BOX+}ygp~pTDcuJFadLKYMy;=LMEzdu)c)Ml zQ_)3WH{#s1%~4CDON-0u>Y32&)C9H9Ta_F3s@|@xtzE4NvVhq&bSi;ua7&F1!NlAj zf+-U!NN^edl1IDAVmWSD!gPc+rx6*F`$J$N1}q%p88c_e+yBoH_wrUFDC?y15};Eo z7JVqEAF7K4GF73`X?luq1Qkqjw3_g zHcOac^`{O_YWU*xUk($z)0p;fr zFDoymr=0802!1Zb_?)C4kY2V&G^ZGE^ATe;-=%>~e&LwsQro3strN^65h{Ve^Ewx#FX#(u6IlIsK}Q?49oi6g_$!O=9BgUEN>_noaO49Qc5t0=Tvu zAsF#W^_NdBHJgF<_=J{-ehlc!Y|M+BZu2H79@bDA)QrAHFhN<3r0(-Y(%j*X2$*CZ(l%X7JM zuihvenD7@jypHj5;ML!3$W7O%;$2_gb#ACb&LsJ41WDdC2FBmVGpZBd+fqsfwX2|g s7Q3Xe1;$y7;fdW;*wOIg|E{ov+~OG`?J=(7xFNy(xb?9YN6+8*FN0Iz&;S4c diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index c8761f7f298c781748a1fcb432aa0fbbc3264196..b3eb878c9a9f3faf17f6b0cf181c46e100355aec 100644 GIT binary patch literal 12823 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 literal 12540 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 From 263f0c7f9cd035749d0f5ced7d2a1c2166d23376 Mon Sep 17 00:00:00 2001 From: PKPenguin321 Date: Thu, 21 Apr 2016 17:12:23 -0700 Subject: [PATCH 049/228] gives krav maga gloves to the warden --- code/modules/jobs/job_types/security.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index e62a8e155a2..7e0bab091c3 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -98,7 +98,7 @@ Warden uniform = /obj/item/clothing/under/rank/warden shoes = /obj/item/clothing/shoes/jackboots suit = /obj/item/clothing/suit/armor/vest/warden - gloves = /obj/item/clothing/gloves/color/black + gloves = /obj/item/clothing/gloves/color/black/krav_maga/sec head = /obj/item/clothing/head/warden glasses = /obj/item/clothing/glasses/hud/security/sunglasses r_pocket = /obj/item/device/assembly/flash/handheld From fe7582a10c33f08d86ad484eb0e0f4ea4e6a7914 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Thu, 21 Apr 2016 18:17:40 -0700 Subject: [PATCH 050/228] no more krav maga probably --- code/datums/martial/krav_maga.dm | 19 ++++++++++-------- .../weapons/implants/implant_krav_maga.dm | 6 ++++-- code/modules/clothing/gloves/color.dm | 3 ++- .../research/xenobiology/xenobio_camera.dm | 2 +- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-16980.yml | 4 ---- icons/mob/actions.dmi | Bin 80362 -> 81631 bytes icons/mob/hands.dmi | Bin 7965 -> 8239 bytes icons/obj/clothing/gloves.dmi | Bin 11178 -> 11753 bytes 10 files changed, 27 insertions(+), 16 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-16980.yml diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 9be175c4c72..8d37e1ee314 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -78,7 +78,7 @@ "[A] leg sweeps you!") playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1) D.apply_damage(5, BRUTE) - D.Weaken(4)//originally was 6, lowered since you could kill somebody in one stun + D.Weaken(2) return 1 /datum/martial_art/krav_maga/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch @@ -146,23 +146,26 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi //Krav Maga Gloves -/obj/item/clothing/gloves/krav_maga - desc = "These gloves can teach you to perform Krav Maga using nanochips." - name = "black gloves" - icon_state = "black" - item_state = "bgloves" +/obj/item/clothing/gloves/color/black/krav_maga + can_be_cut = 0 var/datum/martial_art/krav_maga/style = new -/obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) +/obj/item/clothing/gloves/color/black/krav_maga/equipped(mob/user, slot) if(!ishuman(user)) return if(slot == slot_gloves) var/mob/living/carbon/human/H = user style.teach(H,1) -/obj/item/clothing/gloves/krav_maga/dropped(mob/user) +/obj/item/clothing/gloves/color/black/krav_maga/dropped(mob/user) if(!ishuman(user)) return var/mob/living/carbon/human/H = user if(H.get_item_by_slot(slot_gloves) == src) style.remove(H) + +/obj/item/clothing/gloves/color/black/krav_maga/sec//more obviously named, given to sec + name = "krav maga gloves" + desc = "These gloves can teach you to perform Krav Maga using nanochips." + icon_state = "fightgloves" + item_state = "fightgloves" \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implant_krav_maga.dm b/code/game/objects/items/weapons/implants/implant_krav_maga.dm index 8df5934526f..dbaad408d29 100644 --- a/code/game/objects/items/weapons/implants/implant_krav_maga.dm +++ b/code/game/objects/items/weapons/implants/implant_krav_maga.dm @@ -19,8 +19,10 @@ var/mob/living/carbon/human/H = imp_in if(!ishuman(H)) return - style.teach(H) - qdel(src) + if(istype(H.martial_art, /datum/martial_art/krav_maga)) + style.remove(H) + else + style.teach(H,1) /obj/item/weapon/implanter/krav_maga name = "implanter (krav maga)" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 8802473baee..cb5c30d57f1 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -36,6 +36,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT burn_state = FIRE_PROOF + var/can_be_cut = 1 /obj/item/clothing/gloves/color/black/hos item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way. @@ -45,7 +46,7 @@ /obj/item/clothing/gloves/color/black/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wirecutters)) - if(icon_state == initial(icon_state)) //only if not dyed + if(can_be_cut && icon_state == initial(icon_state))//only if not dyed user << "You snip the fingertips off of [src]." playsound(user.loc,'sound/items/Wirecutter.ogg', rand(10,50), 1) new /obj/item/clothing/gloves/fingerless(user.loc) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 4d85e3c9d5c..e846223a649 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -169,5 +169,5 @@ for(var/mob/living/carbon/monkey/M in remote_eye.loc) if(M.stat) M.visible_message("[M] vanishes as they are reclaimed for recycling!") - X.monkeys += 0.2 + X.monkeys = round(X.monkeys + 0.2,0.1) qdel(M) diff --git a/html/changelog.html b/html/changelog.html index 78ed7087320..989aeb04cc1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->
+

21 April 2016

+

Kor updated:

+
    +
  • Mechas can now toggle strafing mode.
  • +
+

20 April 2016

Erwgd updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 3b11ed64aed..1c94632978f 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4569,3 +4569,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Syndicate R&D scientists have significantly increased the range of their "AI detection multitools", making them turn yellow when an AI's tracking is near, but not on you just yet! +2016-04-21: + Kor: + - rscadd: Mechas can now toggle strafing mode. diff --git a/html/changelogs/AutoChangeLog-pr-16980.yml b/html/changelogs/AutoChangeLog-pr-16980.yml deleted file mode 100644 index a6b28ffbdec..00000000000 --- a/html/changelogs/AutoChangeLog-pr-16980.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Kor -delete-after: True -changes: - - rscadd: "Mechas can now toggle strafing mode." diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index a1a3dcc0f7974bb0f82250a251d76c376f840a6a..7792eeaab82e4d1d45de93a12346e16d0e456371 100644 GIT binary patch delta 4085 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 IM6N<$f)~Dd6951J diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 7ed5ea8a0698f7a7f11c89c328a03d7dfde5afae..f8a6c510b68f54dbaee7423e7bda8798763692f8 100644 GIT binary patch literal 8239 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 Nxo%;My?XcYzX1%1A1D9- literal 7965 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 From 5a813a96a5717e95ef5c504ab72b6d511820b005 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 21 Apr 2016 20:26:13 -0500 Subject: [PATCH 051/228] Gatling Laser --- code/modules/projectiles/ammunition.dm | 1 + code/modules/projectiles/firing.dm | 5 +- .../guns/projectile/rechargable_magazine.dm | 141 +++++++++++++++++- .../research/designs/weapon_designs.dm | 10 ++ icons/mob/inhands/guns_lefthand.dmi | Bin 35511 -> 36128 bytes icons/mob/inhands/guns_righthand.dmi | Bin 38334 -> 39047 bytes icons/obj/guns/minigun.dmi | Bin 0 -> 868 bytes 7 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 icons/obj/guns/minigun.dmi diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index c2e2501ce35..7e486cd76d0 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -14,6 +14,7 @@ var/pellets = 0 //Pellets for spreadshot var/variance = 0 //Variance for inaccuracy fundamental to the casing var/delay = 0 //Delay for energy weapons + var/click_cooldown_override = 0 //Override this to make your gun have a faster fire rate, in tenths of a second. 4 is the default gun cooldown. /obj/item/ammo_casing/New() ..() diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm index 713a67c367b..a56d178cfde 100644 --- a/code/modules/projectiles/firing.dm +++ b/code/modules/projectiles/firing.dm @@ -10,7 +10,10 @@ return 0 if(i > 1) newshot() - user.changeNext_move(CLICK_CD_RANGE) + if(click_cooldown_override) + user.changeNext_move(click_cooldown_override) + else + user.changeNext_move(CLICK_CD_RANGE) user.newtonian_move(get_dir(target, user)) update_icon() return 1 diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index c5b3ecd2bec..05295dff1c5 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -46,4 +46,143 @@ /obj/item/weapon/gun/projectile/automatic/laser/update_icon() ..() icon_state = "oldrifle[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""]" - return \ No newline at end of file + return + + + +//Laser Gatling Gun + + + +//The ammo/gun is stored in a back slot item +/obj/item/weapon/minigunpack + name = "backpack power source" + desc = "The massive external power source for the laser gatling gun" + icon = 'icons/obj/guns/minigun.dmi' + icon_state = "minipack_gun" + item_state = "brokenpack" + slot_flags = SLOT_BACK + w_class = 5 + var/obj/item/weapon/gun/projectile/minigun/gun = null + var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded. + +/obj/item/weapon/minigunpack/New() + gun = new(src) + ..() + +/obj/item/weapon/minigunpack/attack_hand(var/mob/living/carbon/user) + if(src.loc == user) + if(!armed) + if(user.get_item_by_slot(slot_back) == src) + armed = 1 + if(!user.put_in_hands(gun)) + armed = 0 + user << "You need a free hand to hold the gun!" + return + update_icon() + gun.forceMove(user) + else + user << "You are already holding the gun!" + else + ..() + +/obj/item/weapon/minigunpack/attackby(obj/item/weapon/W, mob/user, params) + if(W == gun) //Don't need armed check, because if you have the gun assume its armed. + user.unEquip(gun,1) + else + ..() + +/obj/item/weapon/minigunpack/dropped(mob/user) + if(armed) + attach_gun(user) + ..() + +/obj/item/weapon/minigunpack/MouseDrop(atom/over_object) + if(armed) + return + if(iscarbon(usr)) + var/mob/M = usr + + if(!over_object) + return + + if(!M.restrained() && !M.stat) + + if(istype(over_object, /obj/screen/inventory/hand)) + var/obj/screen/inventory/hand/H = over_object + if(!M.unEquip(src)) + return + switch(H.slot_id) + if(slot_r_hand) + M.put_in_r_hand(src) + if(slot_l_hand) + M.put_in_l_hand(src) + + +/obj/item/weapon/minigunpack/update_icon() + if(armed) + icon_state = "minipack" + else + icon_state = "minipack_gun" + + +/obj/item/weapon/minigunpack/proc/attach_gun(var/mob/user) + if(!gun) + gun = new(src) + gun.forceMove(src) + armed = 0 + if(user) + user << "You attach the [gun.name] to the [name]." + else + src.visible_message("The [gun.name] snaps back onto the [name]!") + update_icon() + + +/obj/item/weapon/gun/projectile/minigun + name = "laser gatling gun" + desc = "An advanced laser cannon with an incredible rate of fire. Requires a bulky backpack power source to use." + icon = 'icons/obj/guns/minigun.dmi' + icon_state = "minigun_spin" + item_state = "minigun" + origin_tech = null + flags = NODROP | CONDUCT | HANDSLOW + slowdown = 1 + slot_flags = null + w_class = 5 + materials = list() + burst_size = 5 + fire_delay = 2 + weapon_weight = WEAPON_HEAVY + fire_sound = 'sound/weapons/Laser.ogg' + mag_type = /obj/item/ammo_box/magazine/internal/minigun + var/obj/item/weapon/minigunpack/ammo_pack + +/obj/item/weapon/gun/projectile/minigun/New() + if(!ammo_pack) + if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one. + ammo_pack = loc + else + qdel(src)//No pack, no gun + ..() + +/obj/item/weapon/gun/projectile/minigun/dropped(mob/living/user) + ammo_pack.attach_gun(user) + return + +/obj/item/weapon/gun/projectile/minigun/process_chamber(eject_casing = 0, empty_chamber = 1) + ..() + + +/obj/item/ammo_box/magazine/internal/minigun + name = "gatling gun fusion core" + ammo_type = /obj/item/ammo_casing/caseless/laser/gatling + caliber = "gatling" + max_ammo = 5000 + +/obj/item/ammo_casing/caseless/laser/gatling + projectile_type = /obj/item/projectile/beam/weak + variance = 0.8 + click_cooldown_override = 2 + +/obj/item/projectile/beam/weak + damage = 10 \ No newline at end of file diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 22af257ad82..b1c091544b3 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -194,6 +194,16 @@ build_path = /obj/item/weapon/gun/energy/ionrifle/carbine category = list("Weapons") +/datum/design/gatling + name = "Laser Gatling Gun" + desc = "A massive weapon with a backpack mounted power source." + id = "gatlinggun" + req_tech = list("combat" = 6, "materials" = 4, "magnets" = 4) + build_type = PROTOLATHE + materials = list(MAT_METAL = 30000, MAT_SILVER = 4000, MAT_DIAMOND = 6000, MAT_URANIUM = 10000) + build_path = /obj/item/weapon/minigunpack + category = list("Weapons") + /datum/design/wormhole_projector name = "Bluespace Wormhole Projector" desc = "A projector that emits high density quantum-coupled bluespace beams." diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi index 1ea653c377cb5a60ba4d7311dce9a3fcfbf13d04..b4b62e8896182aa95436079f467f835f1d1136d9 100644 GIT binary patch delta 16583 zcmcJ$2UJtr);5eDm1E^9D$-S&NE47=ax8#IQ;;r1sZs;dgb?--j-t{e2uO`elN#xr z*yw~v4Lv9!0YXh^AtCv8Jm=i|zW=!6|L*(#;~!&(?5wr++N;d@%(i<7VQRHIHt$&bk#Ib&Zv)P=lq(9wkbuqcH+G*I$w&xcU3k^;^{|8$v>Q<{m)&K_@*xC$!bO#oa zJ|@{9w&~IR2IZDUJ140;<&}HHFjE5OS&p%QT;Z44pwYvD_pA*Bn)@3U_s?B+*xb90 zmWS_Ya7t~qak-lO)t;~HOi9!~1WJE7d=&rqNgL(k!uK0#qmm^j(=Uh+(hI6sI19Uk zwpYV5+Ibr^-To2d?EX3abFqX!+7AcRy9_c+p zrohzbHx0u+iY!IgI+F4d_t4(_SH-&lpRzq4$B<5Pm!(+<)w!7ZPa}1HSWi_X5c%rb zS4It99CqRotppC4b-X@=d>=esic{~YiL^a6p}4{4%dM5~Xoia~#9LH2FKk?1d>y8< zUV3;rV?S+JyT!YQL@(SvyvMTeM?0e|maDRPZ@w`A1m4+ryRwTT8QhY**mmPNa^H#l z#zzhu$cc>pR+jVVw_e`(e>4yShfaU8@{JqXiJB@a&~b1-W%n`Vdeb}VNt~R{ew}2; z)tlRafTMHb(h)UAZ zbhOUt0zgh?E>*4T9Qzo)4MnGI<8HDL;v4h6#`p-H4+HLzONy#6IG(y-i;4H1+AMQL zZ7eQ~jclV^r*H{QwAB8_Y>my9hz@pgwL*p~Ec?00OcHr2AEb!QDM8;z0t5D$h$Eomf*2!86{yDogg$E zPZD+z0c=Clo;UB}PP6W8+Bk+cLaa1trhh<(C0TN~G-Y>B8VM_)>ixQ?xOiiAOQdDm zW*iYEsw}y4RQIVnuwmJx_+1f@R8zB#i;GLw2*}?-!I==oV&%=*&T*ux8!lVUP%~)Z zl~vi@!i5FTEOq~@8MWRuvbKokDpjHxs~n~E3Iq0I+ayaQNDWo{H**<1Psa3amofwM zii741!6^(fySuvI@sxeCK053r=x8*z4Z|!22W)qIpCg;TYB#9IG*^-Ga%t&y%0uB4dqTf($iz9r^h@_6S=3a_ z16m3;8|w&yX^1TQ)nUh)ZAn0?412@HXg2*GN5Q2)!VKt>-(7qU#w}aJlYmSCk*q3C(uEj(3h%l!pdU zmY;vbnXOLxJe=bW_Vo1Jxw)`1_$Y0n1F~BhO?WRg^P=8 z^v4+b3g@Qj+1?{uT)+SJmQ#H8)`gE?*{>%LT>`)MKKVCQ!2e6#e^Rv=kWw<`j}kOW z=^S1=TPbVX{6klY%~kGV%PAa&Rt9Nz$Wpn@@lxa5FQ1J_1&TQb1&zN^RDynuh*)Xf z0&XHp$g*OEW=#CnuTwMTt0>gi%y#dXRA6WvqEbBNgMS!(>#@dwZ`Qk)KCd;q-2Y^D1jjUA)K0-j;V+zu2zA=J z#Y(XTZ;7Z8R+uO2cR?XQ#ivs#zzx9p6MbwLOS|8{L{q-Ky{7qS^^G`;ud%N&HS2N zo5Wg;hNx5HK6Zp3ca#$|q~Ou1ubQPcuRl@i>5IfJ1H4r(Y5OzcJ`0lW0;|=|?eX&? z<<7p#Ek?&kY-TN zYk6{Pq^_@v#0!5XASf8LFer^}*?D$(KH9G7L3z$wImh)s`f^1*H-`*Bl$KUeRn^Cw zuIxor)LR9!3Qu2Yoc1Z)fU!0Sh*~PlR<)p*35QFt@4WbZci#$`xrAZ(5@DF_`SWZ? zB1#w_DrBjLen#d7Sz7LpK1CU(z5&;lhK=H`E-SjYZ{7FGUyimqc+p$b4F( zIHPN=w=V)StCF1~Y;2~+Ku@;L_=A2P>^r>}(zB2%KeLNSEO5UIPdfW~4mW^mLN(K5W71`JKimsv zVKOz&7cv2Q0)CVZuq|IOFP)@^yaoy=PA;)v`Fl8=m)6-GLitUr(DLi zi=h1EB{M1uQ#$MH%n>Nh(MD?^oFZ3RT-5&ykM_6ujiOYdqm#({;(;AO*dS^u%m}`@ zJoFq$k}B!fE;j3VjdJ%r(CI}V$wUU`#g=(UY19Oh#B6p)15` znOD;IS&ML;@1&-Mg+)@oG&4P2pwbtZY?!m*RF%c0s&UhB+xB$Ro-C$tH)IAjs|CuK z6#Fb02K(~#sIsIi@1ZBg7fvp$)?Iu1vJ;C{k(5;qAGt*6DXsLm_2~`sIGL1{kug5s z#5>7s(&ao7aH0n=eM%Z`xkc)OgC1aW3Q`0 z$hbDr5LT(HM+F$1+~rNQ@XFtGtaLMh85T4)2s5Q0GvTGSmHDZ;xK0ci?9>aiw<);_ z9T@UCfXgwdoMTA29z9lws5lMY_#N7R2K;(_bgcfB=H_gUC z>J;B8D3JMy$yi@y!Woy?F-ot26_IQ}L6k&Lh@x+u2Vm0j7kfMJv4-oJ?1jyiZ&Cc* zwYM&~JiK;}Cf0fK^eKL+_ISdJ7cY7e#Q&6yhe6Qiz7nBIo0@-IJ;$rsb~3N-SZk}E zq<8H6gK)I3X^+Wg8W5Q4hm3;io^}2OtU{sjF=TI&dkFHOgQj;b5m9i zoISnmanu5wX3__d!B#T;RHqLacGXKL!PIEA`1XpXEOs*YG4U++%O6fa!0h8+7T`%M zRLouE&SZE}OW-AXsMN(^M3@t+Rj&ohR+z+j}V(Q6+;*e=k0ttkvh%WNYPqA@DN{xK;BcYq&1*{B=wh$&?s z>D1lKLxV(AShMsR?Kc}X&tLdC$nx3VXgW%LR0ad}W|^i=k8F%qhM?CxS;))PZbgZ? z{(05{49xN}FJKQp0;zwucv^=wGE*j0J3yIvum_OGR_>&(>-bfamYPV7kFCQS_nkVe zQE{gAi5@9~n`dFm(o%D1IKQSw)vQ^`mp*b`G&V0Z#ly>M00iMbjQp6)hu7-+#!-Te z=$L3!O}{qf2eO6RRF8&9WLk8w+b(8l4&7%V?rJlul1a9F$?H1bhCxhEk{VxUD9XiH1l}n`zBnAyqjpT_POpht(B}5a(vR;2rI&FF*8N)_-8snaUu3e|3p&&~#PEeqCE6C+xsMfy`-D3DT4Zk#SSEUR|&!wh9+UFDQSXcx~0&usM7bIJxvwG)qW zY^xq5f@o(#341v)akuh8-}!*V23xvo_oK&)$#fR$LPBCz0=Eb zM4!%r4#l)sSEISRo6VZn1AUUQkn7u`d$pCAd>Sm5Bw?l3Z8;E<0NZz37m? z+U~;}&$t1#v>H=c2HlVZgO4_0a{KO{q?n0FK3btm5J9RZ@q7EIHO*o_4({r$! zNFwF$MjZm@4Bn+{+)w-da(v9ahJj%jEDO~aB4E8;Hd z{+Flxm9n3hshvkem(lbfpz7$wGnemueb&(=j3q=O|4QmH z!Q*MQIdp~};^|RAH`42`RFpGQ4HI8;Wq;Je=(uM+<9%d6v?RfyV=*$tn7<0)Dgb;F!MVe8I9h&B>k;kwU#*Y*!}D&u`i5?qNf-A15k2>-s; zE}{k;j%fH;fsRSet*B6v+n$d+hTb2+EN{og3v0bYvC*mQRM&*W$6tbC5ld*D)Tw4T zg&i7LDK84YP#RiSuKUxiN4yJ(Xqqzs6lSmOkcoSbZEUf}*>mxxh4l^%#=Hq`&wX=+fA{$OWio=&15 zGb`Po{#U(ZsvA4{tL>%IF9v7f4fQ~9?i%m3u`c!Uf1ADmVH>an$YueQ=%pQ=$M z-?$Y^{;Vyx?${&N@P~1okY73o0UeM?rt-%bI%M?LN~d#xg(P{`TTk^ zpGx4B5|})r>l4h{@(5Tie()VU$#WTAzjCKbLfyG_w61Pa15u_3cTaz@`p8+eTRa?x zeKFBKltY_tO0vypR>o!xki){_obYeo-Z%W*KKAWHZaWdx)0AWT^^())zAmIQG*uq?>LHW?rjP8hm_98mYzOJE<}0Nev3B1#@pV#3sn zJtBp|AVfPe0v2!lNo=*5B>>$WbbqvTu@XMndcNbkgQphj@d2oc4Ki@MFPssh&}?UYRHQ5m3)4f(trh*r{T=1(@n07vl?H_5agBF@990xgi{}T&@m0I4 zymh-Z|n1pl}PxGE>;3|H@hP#pk&m_x!$OE4`u!0*2~8Q|ZMGXI(C{LeM# z-@FU>dmycAKeei+L&-E@JW;Nqr^7Eue>1tnxGXA_vonne%;spOnEumZET{?D+Nx@< z52wsj2SI%x$7zRp`*snVP--`|fcC?yg*B=^w}}}^1J3PZ=exZ%Y9Z+Q{E{vgPvNGg z%uW;&M;5I*@v1NsR8e4s&Lm?Q5oc+*uT3cL_i8i}f-pd5lR^@aDN8e*xyD#Vs2DAS zkjLH*nLY80Q8hZmVMkU#^>E&V0!@vY|5+dH>j8Zj;uLE z;D@{oflD)=gURdlZfPzTKhI#@I@L8cNdYtRNj;#7X=>JFP`-WpApYIi=YfqA*g!`| zO^uY*Gxib_qDD1?33p%^)oVtq`uexvD7rYxIWh54fr@dCQ#|#3&FzWeK~aEm$T=JZ zT%?)0`7GNw3xUKZ^|5Px2 z7Eu&)Ouv&X3KzwYP>W3iwxBL*vvxPOL)K3`^Xe+S_Nb4%=I8pQp=g%V3;As+$(2_vJY6OdOa7)4K%M9c*4@dLr zgPOs8yld^4Cl(!2xU|hJ5I%IzupiWw>YUK%A?#$MrIn+bQ+v~Pe{s;z^!Kq*rqz0b zpu!DzVWv`hJV%cHseN!Qz~Jx)ptPh(R&#E;_yDE)C|cw6#8T~~?=evgq1}n+PlAk! zDANTR!GAEtI#A4|giZo~1c+f$0K=IY@^rv!=H{N1UWG`(@AVor1Litb5Nx>^XBtF> zL=3boSOC=1>num%@#;U%Ysc9qmHwaB3iuB=(*Hlzkz@b-OSuw`SZ9#qV(n+(mY}_A zO62D++awAkVHh0*cn8GErEUx~7yreaxzh|@>NsC4L$9_HjI0l>g1bq&W1kU0YwS?- zP}}@&nU=mq(rw*&8}8|4(`$N zi2S{~V>i2fFZa6zvAIoBEV!Xf(UQwc*+ z=f4{OqXGgcFEIvcR2b$M==c7quAIWxx7aV;X`)Il&k9RQE?;|k)D>Vu#23y+qlmO7hhYVRlo+!kyVe3gUr#-IN%f0ey1_$LD@~vAU$))0ISV8HeN%c z#li{yJ?#`bC6I+H*;d2HV@>9Jw2qg1U1LpM<7iD2b4eM+*j%a9r4xCNp1Jhfwdf-% z#qQP_MmxaUb5H7D=zQ_A*J&I(BHc4o?u=ScCq{CXy(@nE}_$LfbVhxrRr59HcoqYePFE8J%K}X&JPrH$KdOOT{&VOur(PXb$P2SFwkwn5j8eu=QCQN z$Aj29XI5&m$b<12Z^7>L<)gjm)LAf;M%gr8t!m6q1F3X5Xv-!@fV^yNuWgbO^wzaN-&*TOC{4%9yg)A|Y2# zFR$vb4bLH9c(|yls%oG`|7Y%C0AV~ky*vK4t82xsTR)0Un&WP_m- z;mLdr{bp0rzbWACNjD z!=PJ@POXP5&ED6DdwgQ<&(F=h4#2mT<5H$UiJJfT_?NISyC;jEy;47pymL>T28r>a z_wR4OHy8W1*o-Yi68kes?s98uYacQU+%gIt!wM=0Sh;DSaBQ(34wiIJnW1zM>m4}> zHs%b^6M{BYp#8KYh%V)bcESmJR@6$KSLLKUj14p1b>R z*5E>x1FA(2U#00H!m5~Uz+^Xx?b0GGCkGC4nKYFg?rjcgN1I=oju|@2jgV z6`I$P;$1MMy9yt=2rX+@6?%1@ZgQG) ze#>o@FItMY=VkXqTq1mUKzAn1-lhbii_u4()XIk&phTod*>e%O9WhazNm5>2t=x!m zT}M66@y#PfE)p5ojrR)t@$GT$)J`oLq2oUX{JzQdsDyQ8@dm8;hC^D^SCu%yLci;hg$(g4v7i; z&nZ)`$NgY1k!yWll9Y)m^0G_EKMec(3sUSxwX=;gv^^^Lm0WJLk+Vv7_i{1g_AY*S zL6PaHSsE8YCUk5in5X`uAv2K%WiFCR;oDG0wGKGhQS!cou6<(9=_~ z%|O}nEKKu(e!51zVygEN-&COOMo3Nq%1jV2UEXtz^(n=am6ABmvdZcRRHTI+FR5$! zOe7NLdeW4~Y7iO8fL;rIZp1)Z7`BM`lJliaWMEV*I6LdMW`LPHCT)yBG)yw_UIRIP z2%+NXNgl=EwHFH23EI?W;vVhs!pK}}D8iC68cto3lv#>6=cJB2Er0hyCqtrap{;06 zC_zL=AS*%KBwO2-v9)3y5KuWooAbnMYAW2VyHrde4<=O*vL~+1hNLH9(JqVXOB?lJ zKd$ZE+vPVBgX|>Pg@Q%mrccM8HO(S3cj3Z)W=rCy>AVr9V5|1y9lwUi{C$Ei( zuzd(Fvq|r?Un9;Ul={#!GkbB-V5RsGiT(0q=n3r))Nxzg^HiKTm8T|(B)eV6dY z2TG3@Pc>T2!JR?q71@lx@fj!A)no*Yx_ii!p)c*q}7DMe?5Jx@#_lY1K|a#AcGO7Hns-_LJOBfPD{mZi7M_gL+|5pEt z45su)8v6_HY`Z=yZDy7U3AZ_ofv4G7jK^RkrOu$_$-hvl{ZNjg=Kx<1z6N zLylz+U6ZNxnn*xxF(tS**EnYAqR`z3;vOG=-*YIzwCUHeRIPAorxd5~n6U0i;elqc z5K~aRp6;Ii4ocyY<0JKEQTve8%i3%vO*3r$!8&E_i3*G55GM-f*9#2|UH7g8Qom-; zPnA0x1hTRm_WoFpSW?EOjln8(!~Dyr1#(NQrw7ldhrNhz*{u+B-ni}#(I`pDvk*5# z95~WT?Yk}nzh74N+LVv8IKScZqMrLx0Flk0wmv6J!hTkI``!!qLpe5YnnvgKtYM zb!CC((squ$oTbZ*?=tU!%1VJjE%3G zD|4#Y@+Q_bzz-$D9;}Ed+ASBauCAUpg6^27>Rr;-^wwo8D(`|$REju)MJHDrMx(mW zff2&FUrE_V3ZUX6_`)`f18~LT?xXMc=nD^@4zq^bu~_WVAusz^fUrY7xlqd*K<9`*r`=;+&o zJeqs5*IN+W{PiCb-lF<#L^F8T19#QU#yiw$ekCd{RwiFz=yoDd(DhP;1?K`a=tXu|UH?@YA27g8KCM=7G7soQ1hs zF(Nb(Ca)V-e&CqUdj-V2k!JX|-}(_x=Ie;WxrwCjZ83k0oEWhTU0C!2XCWM~nEU9N zbZP)(U&@1W%3Sao<{?&h>U!G*a1V0|8sQA7IqYGerzKpD|3^q2^r&LF!m+OI?!2!% z;rf>|Wn7OAq}k&Uoz~HW3Jb#8E$h)YV`y}eHiM_r3aQvwBBvyytxB12ma_s%^`NrvfNn8XWzbZ1HwmZsHa_iv%t@zm_Q+QI@^^QrCw4hd8W+m+pRm4nIr>48YmH z#MHh7{(w?B1XFhr#_QpMXje9$)^qRJfuyY6IfR4G+Bw5S?oS{B;HbwF0ZA|s=kF`* zZsUQGOkMeaojP6S5MGGCJyUo2TjGW`w^c;rB)j={rgAhh3foO5LmNgD{lUy7aBm!Y zfi^U&FVTMj=pt0_W%eBo5Ek^Bo|BG`8{*B{C4R6=G3^^QJLb-~^{xW~QraWhY3vvx zO4_l9eI|h&yXM4#BECl$_G1X_dt=V^X&9OP>YJCD5Zjyds&M9RlV2Di##A)IATI!F zH9wJBiMW8w?2cpdf^G|`m5F8qJAmd@xS$vZ9QWV(Wn~ufBZ7*1r7RN84A}_HZ=Zir zj5#3p06jr1&`D1Adc}eDzFO#TUv2Xm*N3A*I(qC^8{KQ*%*JQdP;YmU7%3Mywg+)# z|7aKckO*5kU1?3*!L=F2}~3-iu8pi+EBDb7VvnT ztK$&|#{I#eZD!1yWidL&=`^1E>bZ+j(Z=Jw)m=pNZ;82}17qW(h4%#4sH=^296S#G zz1u9}%{{>vPkuIuMXWVi%STGFd(N}(fp7YG4b}%A7%9BfblTUwVprydT}l`wOpuC` zrQ+nNumq+u5W}pDVUE*`SY^9Le!FF5vB$zWg0B`*&~^n>i+}F(2f74+|CvWOt;hTa z$Ibo!5cT*MbqoAoGxYwF{XDZ89`L1HHw-$zop1)4LI{qZ9us=1e_XBvO z1Z?hc1Gf?~%AwAAOKolQxju3VVDI|k_G(2OP`?x5t}j@r)ILhBtrvSgs3Z-e6-Y8!=v9uBFTKErKNodf`VoZ zR*_4}nBcYQm|83{c~uvFeUC1q^M18#*1JlSQ19m3>xhjfjDP9!p8^!B$WCy~q>R`Q z2`cDWwx}TcOS-!MJ5`^tS3p1K1+^Xnk|vqzx7p=ukZ^w=TE0ofJJH75ky>H*@A1Km zQqpc~eYtbz4(Dv~i7xk#N*L@U0`u0ZtLD$sgh z?t$f%E00My!W$-YuiWyReF|WjIFU^DVlj_iyl~+`h)yZA#ICvP1%?$24r8nqh7wq& zH{`B`oqgiJMD;2LM{!Cf8?UpaT{bqx--jr8*c0!t_x5JewR|6dY?tL7A(4Z&GgZYn zRWIEwew>C7bc=ZeqTVYX{-?k=bL11omUih$D zigW63E)46JRk9nyz(%mC&V^>?bUY{;i9a2YL;wzYFpk}XO;Ey0`SI9GCMG7}@#Vdw zY39i65*`f|mFs!VI-3gmlY@mS7FZZ`$LA((RMwUg?9R^@GJKIu5BhNi{uT0MQI7-Z z@{994HTgm*7Bgon|5S($(Q!QT~_t*Bsa8_sW}3Q_e7Eni-oQr*Yavg#HWHH=SNCt@j+k29dr2lLs$r z-n4UoFI6MQQqR>TF!yk+av%B-1*XlvPoONk>O650+Axf%nL?hFyV4;<<>vY*dRO`* zG<(&RHhU1NI-h;Kas`$^CMp6A-#>AS4q6KcR{PJi#lCv8Be6l6Y0&hUs4JgDjZ0jx z2mKGa8a|G8mj$v%b<)|m?xUlxYx(eFG3~Do5=FnaI(O}(CanHY4Ej2x{81D?6zUXf zJPIm7?v3LQ8OHZ^kztkoGx~_Ua!}#6r}sl4!Hci$8%=EjCe_Vifkf%i4!~{35H}07 z=c3cl&9oQGuh&%!NU(&N!AHIiA5J~@3oFg~jYY&@9>CAiLjEe4F5pC7=QEGS$UTba z8ygeY9l8zrmMj!RZT?^2Yq`}Gr$)ikzIDyj0WY}B> zw;XaO4|pU?Ua`J)>kX_YZ18#;t%hNCMy5GbDhH)Oy%KZCs^#tN9DO6C{?sK^O2Y04 zGj&2uD{tm`GfI?Z7Btmq^N`?;Be4gqtrx)l?0i!S0=3JxXcnweb^{I!BXrvMreuhT zR?QWn%f#7t_)}}>G;#*#)7GX>yVfZS*j9WM4C*<4Q}OLiUt`;y+FKb5+KEiLd*EpwK6wDV6R^Y z`YP&c7>XFhmxDWeioaddet~A{6W3IyT7JKk|0EaJAwEtnLHlM5W7%W@*pBcgH0zw_ z(Ekepq5eLcV39MtS37lZO~*aE+Xm#gv=q)PR^FnKad^;_Zp1*DS7&^iEqNf!Td8;{ zc}M0Sp)(u!jp-;J&w+fCu<)rFTTHg%ZDmjQ*WlV2BHQAH$CthAYkh})3F66B;bZim z5mwBZ14Fxf2q|SHCB~GcRZwyA zD=I3!P{#)ciS<-5hu7@o=;B5!u=Qn#NZ6yrj_*R_siL7@Y?P@_%k#ad&B*fvCUE{q zDQbREv#bMU@M5wgqg%qzHEAU-KDj)~>>3yqehM9apA%%mDsYplhXtq7$IT)fv+b?_ z8t~>Ck^ROP2?njq&FOgGEOEmw_LVd;X*l@~DeDNPBoRdoSrYwxNht+!`UA*RgG`ub z76c0Bf^$;oL$~2PKrQ^8BX|$ykmJcTvVpH)fKJ}u=Ir5L=1hMoAc3WiT>q_qW^A^7 z(?6(M*P;BX*mAuA+s|%lCSV{>75whB`ur z;OCvjAcG!NaRQ0y5g@H8`p%%eJU2YiOt%V92p8 z0up*Kjo@zcc%8%?Lz_j|tNF;`sa?x74ETg2s;Rp&fN~S;6(yV5F2Hz<|^RJeFdN&11>r!-`P-6Y61}$Zvx4|`_l7t@7u&H z4Tx5nCIY~1EYvzR!hQ+{uSh_#oxS}=$P>OGy6Ol=dY4QFYEEKK^WglSHfjYt4DkiD52V%-(%DlaH*n& zGt8OpHx8?+J+n&+m)7)EH zzwHwTqKE`_Yp2e4?IEj-@7{d)@ejCt!Ir--DFevbsbLfRV0s}5OjpYTv{9f5H!(Fe zT@QeinuN0)PECtsVmA8IQ_Ukj&^17Qph;3}zl|m!`Rz1&p9s9BXT_c6cMddZT#ku< zCt`!A)uZ4!XjS0f{iD-eM(Q+JrzArMQV;yb^NIf+*!1tjY~X*BwEge1um5|hx4Pr+ zFn+aGb)9^^tx;hG5erF>V&F@V=Is#Wn&yt@o8HwM4{FZ^(5{OI=i?2b%4t*XA(^_8 za3KY3xiT32yMiMe1eqp;8cOk$n91$?iP9Hksgvcu{3_CZ*pGr)u8a@=_HNd#o}uv5bo6-~+?{4#76J-Hes@w{tc?({wQ_=vgxq^kG{RDYpZNQK!kr`Xzq8 z0b&JwpT3&pohBzItrC4qv|>V2vX)4iEd(QT+&scn7d~-mpN$}az1~)3gF5A0RMkMUC1;P!WG&5a3oqhq zcRHmsAI-g)3HX4M=MlQ}8?q{Nyit1P3lg1j=JzO}=6z1Yqs~}xfzz3yuMCl%wWj@4 zh>BMyqB4#bKR2m3@6{%cskWCgL{foUrzc?zGg^5dfScDhbq9SQ*W^B|FChO7&$rzv zz=sLh6(yi?BsA35!O(T8bG2K*@-Fm#Zih;F>N-VA+WZe5VO^J?5DhRTiLpMW@bmbCiGU;ojW!z$3!$AB)@ufK~2Go4;pN{?j`m#VRa~MPlvp9FIPg-{gSkB za-fPzbLnSmh5n3WY{SBWd8s`EG7we|AUIwZ$3p>^R`W7lIZi;u4&6eHic+4|l4-xAqP{@mcErwnK?P0|z|>NjbGN?m-#c3e zdZ^|^!%NyEt7`D5F>D=8;U4A@qMOoiBovmC6jJ!+&2RRqnB`6>j7?`r6oE8+ikfhi zJxvmYM&|W)Pjh0>9M*h;f;SUn5ss!HG_D`u!7GBRacN~K4A)S$E)XzlX{|?owOpt7 zM9*#d_dS57f7vRDNX)g2kT`VdA1-CP*Uqf8RCap$_#}(BXEUAJ!Mlz1B$QlQ(CYX^ z!_P#i31+Pi!OgJ0H$`W-)1pA!uy%LJhcDCrnF0n$#8YLm6mqoeH*LUU*#MYmpp_X? zap2gQH_Bw);CIZuzpCPU!6QX);}Q&}TmYD%e60i7q+yIAG7u!hH6Er6#`rSE$9n*f z{P%D;q?qrN3({W&rk(5aIa|Ta?xXJM0~)Ge7oWhe?(awDOZKr>@N6}c65h>p#3SOf z;F?AM-0iUoAAj?^{rjG?QJLyu0w;x=@A;kBf96+t5FkG$wcUxmoC?evl{tu92JtU4 w20ZfoDh^KnZrSeXUqN*I81pAB^@=U(TYYk^p>XjkSjuInXL`Nt>b=PS1Bqm=82|tP delta 15966 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 delta 19309 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 diff --git a/icons/obj/guns/minigun.dmi b/icons/obj/guns/minigun.dmi new file mode 100644 index 0000000000000000000000000000000000000000..62f4d898d42c8280a2bcab0f70106a154ca7ef11 GIT binary patch literal 868 zcmV-q1DpJbP)h|CM1aEiHtE zg#G_5^Ijc&eSKM3S(yL;*Z=??4g&xG|4LI@dUlbu00001bW%=J06^y0W&i*Hi+WU8 zbVOxyV{&P5bZKvH004NLQ&w19hgP z<|I~vgmny2brvKhXJgleMPWS99$bo*6uk|NDN3LhQFVE@q-v5JyTOhCzi(s$r8WCDWA*A`=e~BC>!@ zp4}iC3@S=;fRs%IHP0*H_N-jC6>Rdn0`Aff>w`7(PSjoA=OJWicW8O{ZGP(1sUyPU ztPUCQ3*wN0gbo=TUc&JnNcF##pjkVa3;)zWUoK{}pF1SpEWtUg9h+NdY7J^$SK#c( zBC?@GsvR0$88}NskM!gzl=!SiUFDa&nN~CcUdAWfLO(-OZBTI`M|`Mc=70eI=>Pas zqNTs35zsTZe+=YG11^*HE`zD zN4?q$+C`&vMGp%uh*|^x_Rf0q&Nx_#mDcO4b1L)W222PD70maItoc#_W}alAwQ<)FaJ{AqaPsdf zC^=Wqvq9QMbSzsVS1_Unc3ncv`5gAW2s7Yv%w{Tg0Ts;mlhAM>9Z#E?fzI~X#0qq7 zP;()|?6)3+87B>=$CAY}b4fk8Z{r5%Sy2@agNv^V2uIP@ucU@A^KZ8$J%901WDWx! u!FR&;C3k=R{6l^mSC7oB;$VIpouR)Oo-DTJwxQPm0000 Date: Thu, 21 Apr 2016 20:26:58 -0500 Subject: [PATCH 052/228] Bit weaker gatling gun --- .../projectiles/guns/projectile/rechargable_magazine.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index 05295dff1c5..7a4e746fb3b 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -185,4 +185,5 @@ click_cooldown_override = 2 /obj/item/projectile/beam/weak - damage = 10 \ No newline at end of file + damage = 7 + armour_penetration = 50 \ No newline at end of file From 00c5b0bed32a4cd2a7b1c2825787f10dfbb8d68a Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 21 Apr 2016 20:29:00 -0500 Subject: [PATCH 053/228] Nuclear Gun cost revert --- code/modules/research/designs/weapon_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index b1c091544b3..d044abd54e3 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -39,7 +39,7 @@ id = "nuclear_gun" req_tech = list("combat" = 4, "materials" = 5, "powerstorage" = 3) build_type = PROTOLATHE - materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 6000) + materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 2000) reliability = 76 build_path = /obj/item/weapon/gun/energy/gun/nuclear category = list("Weapons") From ba3e64ab51297173cdf49d4064a517d0cc454634 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Thu, 21 Apr 2016 18:49:22 -0700 Subject: [PATCH 054/228] Fixes syringe gun chem reactions --- code/modules/projectiles/projectile/bullets.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 1737d923621..2b081c5f1bd 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -178,6 +178,7 @@ if(blocked != 100) // not completely blocked if(M.can_inject(null,0,hit_zone)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..() + reagents.reaction(M, INJECT) reagents.trans_to(M, reagents.total_volume) return 1 else From 5f393e514319174f22496d1caa8a23813365d3f0 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Thu, 21 Apr 2016 18:51:53 -0700 Subject: [PATCH 055/228] Fixes bee injecting while we're at it --- code/modules/mob/living/simple_animal/hostile/bees.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 5ee56ae2339..51e6e5f0fa1 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -144,7 +144,7 @@ else if(beegent && isliving(target)) var/mob/living/L = target - beegent.reaction_mob(L, TOUCH) + beegent.reaction_mob(L, INJECT) L.reagents.add_reagent(beegent.id, rand(1,5)) target.attack_animal(src) From a78ce8712e086e134524ab04ea5c3c9e5549d620 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 21 Apr 2016 20:59:07 -0500 Subject: [PATCH 056/228] Gatling Gun icon fixes --- code/modules/projectiles/guns/energy/stun.dm | 2 +- .../guns/projectile/rechargable_magazine.dm | 8 ++++---- .../research/designs/weapon_designs.dm | 2 +- icons/mob/back.dmi | Bin 94391 -> 95442 bytes icons/obj/guns/minigun.dmi | Bin 868 -> 874 bytes 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 79b159beb96..b1b25293a3b 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -8,7 +8,7 @@ /obj/item/weapon/gun/energy/shock_revolver name = "shock revolver" - desc = "A high-tech revolver that fires internal, reusable taser cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." + desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." icon_state = "stunrevolver" item_state = "gun" ammo_type = list(/obj/item/ammo_casing/energy/shock_revolver) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index 7a4e746fb3b..2b2ca423ea6 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -59,8 +59,8 @@ name = "backpack power source" desc = "The massive external power source for the laser gatling gun" icon = 'icons/obj/guns/minigun.dmi' - icon_state = "minipack_gun" - item_state = "brokenpack" + icon_state = "brokenpack_gun" + item_state = "backpack" slot_flags = SLOT_BACK w_class = 5 var/obj/item/weapon/gun/projectile/minigun/gun = null @@ -121,9 +121,9 @@ /obj/item/weapon/minigunpack/update_icon() if(armed) - icon_state = "minipack" + icon_state = "brokenpack" else - icon_state = "minipack_gun" + icon_state = "brokenpack_gun" /obj/item/weapon/minigunpack/proc/attach_gun(var/mob/user) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index d044abd54e3..f6ae7a529b6 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -24,7 +24,7 @@ /datum/design/stunrevolver name = "Shock Revolver" - desc = "A high-tech revolver that fires internal, reusable taser cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." + desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." id = "stunrevolver" req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 5) build_type = PROTOLATHE diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index da415c6af0ee165b68c4cc062965bdb334f0e8b1..b2c66174387faebe626e74f50d289bf4f57d9077 100644 GIT binary patch delta 11245 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 a=zE)K%UuogUic93r>^osxk}MI^#1@saY*3+ delta 10186 zcmZ{}cQ{;8+c!FbAUe@o^dvgb4Wa}QK@f!KB~gPY(Ka#(q9u$LEr<|Z)F?B$=)ITG zd+%*#zU_IR?_BRW*LCKfz3;WxthMfb-@i4qfnU9V|CI~q^VK(cuVU+A?f&-N`?szx z5QtA|PLh`Ek_5%){?if)uM#gxS+XiRwpTW~cs|7tkzTi=5v3>mQ!3tw1!HBcis0M!H z0P|07wd6WIzAmj_KTfpTg~i5D$lWGsedQSi+m*T6u!CH1};nmo&f zL@m9Wlz~Ut8ZN&Ie?}l^Z%SYI;L#?mTce+ZOw;y(-n4@w|EK7P_q@)d9*(5EeMqVA!qWBLZ9(6bc-xZ!SytDYAyE03(_ey)y^ebW5 zZnD+deeR&jo)50vi5^e>^!)Y0Re!?OD&Vop!TA_)OfG+NzmB^*^@{zJ%qC_#b@wr` z%IwE!Rg)^4~p43LXd^IS(OqWkvqidr$xQ>%;=g+j^1JqS=IbJ_MvC;hq zXf&1|P>5NVl?aaHT|+C49>t6Q!|iRV$qHxeYA>c?@{h754`v}KB(Z@i&XlK`87}WZ~9MZ?^swB&W)~1n-)c zG>dU-=OYwtZ@UdwgA&Tf_(myuPl~m@3Lu4Q;O{prg$RCQcMY)~w*JcM!ys#^slAdU zkpP|99s4*btq2I&sfBjB1tL~)DV*-icWfSwUu|N#TdvtwQvWpT{ul&4-omTCg@^M{ z18C?lFj&Rj!t$$DMB!zs8=1&O58;1KjTn9ZP`IP8sX_)#;Tfp#T#ro1;?HH;vrw_P zL>U{0r92{`&w@hFfB$=?XOi=qKX_Ggb$&#{CQ*suR!GoSS$ti={tN3PC)$*T$!h!8 zr*o*YtrbmEr}4{T^tOG;T3vd#Ot!;eTN}WTt8vI4_H+>?KuSvboI1+8x+q?yzaf?_ zgWM0VFx<$?hXm{4xk=u-ID^VkKIDZYs3b|bIh5pn#S&U(U8aHQUNl#QS-p}I2 zjrg)UKcJ`Pw*EW&K2Upy82g?six-G#LeLl(>A&a8;^j+>A|Wx7wIFEK7CD|$#9BPN z6UY^V*)o3~C*)#fl=S}Cd@ezQaRwl79i>Ba^sQ7n6Xn+{37lT76OG3F4jsKW8r?K0CzP`W(A>SN z&J#xj85o}?j%W+{{+-c?pZ1uvIK)mgdA|D#tS_n8Zkp=2&&LmwU9CSEw4=1S%OY{{ zX?!hW-)NGs6EU|y>_{TmY6)C1mGYRf|2g@K&m`uvu(P+PrW^q6tFBy_w>#MjbSIE3 zi3h37Oav<$ji#rkZ%hhG#TCAN^^&;_3e?jy(hKvj2aG$b`yG+}Z1^DAuHFEl-@RC3 z-Zs(2A0+2UV4^P#BtgpC?x3g2^w4ucE*;Mug(k*x3q>~8(}Na)a~(DA^sANVV$Ip_ zCxLGDbkB}UmCc3QVPwkQ6+-E7PcN@%^(uHeZX0#l<)v>$b>-q~I*s44bF+x&4z7-> z==n3?M;|t8S(EKgdAVmLUV~{%JX0kZ`+X@BJG0J}HR+E{LHYR){XI7C(pw8NMp;BI zr0C`97#QUI8#uZKuKgbf3c8H2mTqr5t?pd-J;EED9VcQUYoeQab3G-K(Je(?`d;z7 z`JIiiTacjljyOO6)&+GZ20a)z@oQp4(t7y&IW>A!i@;7e3$b5BI}Q|$urx5?$=Ake zM@!eHCRah8WD|M@>$`Rn*sX`cx8ay8ONe2qYa69$?V})NK-+jNs4_$E7ke|kaAQTo z#!h6q^$`tln|_bTaQ}@^#waIO{9*t5MK!M+%%XDE zBO)TWKLSlbzkcyNl90&y{hR3a$EJcc;IHG!=ID#SK*aKPQ#WFSI5FbgyI6umi)q!a zg0D91Q=i7iiD8kreCA}Z*QB6SO7r=*23iqj7S{%U?zNhQ$p?b&TR$pP+Bt3_)Ji4i zrw!*I6^!f=sxL|)&X{NcmKa$SUQ0I@>1?BAhRD* z9u@TN=tS;-YLw~dY8-GdfjIQWdOJ;H-|w?S#xAt^*v?a&ui6_rA%)hbsyvqEF6ZR{ zyzUtF-tfr0>%zTNqCpNfvY+5c!YymLTXw0r#JcG;kei!Zm+F_Wp+_M+=_7YXD4h(G zU0&QhK*ZHz2^;DY$dWx>Bi zu(j3liMA|mUPxY_-C5<1-vZNCdE-mWDr*%wUio>y?~3cLrE)(>-29eKV+6T@y6m@R z_h@ya!?B|K7q;=v?9rNuw?R`IXl90#o+YZ4Ef-1W?cFl%Nj`pMO)Y%#YO5dceE>90 z8PE9B1~qO7$!$!ypYl8-AztERk%2lQs21n@m8^U~Nwe~4w`obvJ}R`2IP;O7Ivq7M zCj#gnjZY4S=V^2a9nVKSZ|dhs^=!$=LH#1l9=e#hlGWU!bqvSV2tpB{o$d)F6U5bW+00ZchL+Sfv#lYWm) z=vN#{dL);Bk~YhbyjQ_%SHgd>2pT8BA2>6ZJ1q9@Y(!{&>vlMA^?@ z<8p%jBnCR=QFSU9JVjaz#3}?SOmZ!lM&jYK;w8-$cOnWTp-b zjhheVoYIjI?{EBm=*k#Jq}oICoSTfJM_Q1j^l{jZp(?NMnKz z^sJrP$>%ta1N!(7PmLU^9F*0yzcq)5onXM3xi z9`_?GxXEobn*sOYD@`yeC7LQieyfX@kU{de{HYA$9N<0OKL6+rEXpPZ2e^VO+Pi;D1B_jSP>%D&z}6Eq`8ai#`9qlTky?D(UZQ z+`hYs4YB$tzf(AceJW3bMD??8higy^REBJXf~z-1=89EVSEjGhve{rPvq&gm2HM3} z)M6&|KpaEgxXGQdp0(CJH$9y(?yODE{&f0P7Sd6ay;z-whDOl5Vm`T&q*S5=h57@` zoj$H+3-Q^@KXI~nN4Th#-9vLUG9&(h#Hq3Nz8ZkqZ^nWCz~}*%8B-$2|XegHcd%-N)hl?|Zz? zttbDT@-P!G@@6XdMW4fq!IvOG$XwnDzu~S69rq-EG@ybcQ6#Ed7Mubm!qpH-iFs;B&s!{@g?Fd(zU$ z0!he_G)J)?U_M)$B9R)m+rK(oTWjin+jLFCFD*Uk+8=&%_Ey7ulE)-OKuj5$g^Km# zr{wXb#3xd&t<`5tPT>)y7EmcfW|7vv1A^PEwvKdFi&Jh(?{;e3AQo4$6#x1+K(f@! zvOs&KpXp!+ecNP_gWrfe8YtH4If#pkONJ+X?mj4YlMa-COkl|H4n1m_6_{RFG2SP- z5oZ`*fahM*%uvp>1n{x?;CE~g%YC_^?Kh@j3NnhTDIg0(gJg5%p-?3K0baZ zlw0+Mt!>T-NIGy^UZ2ZZ#!?N>cOQH>T;`% z*RhYdk{w!UONaT8TV9pA6jZCmpmm)aO0+|-H`SSqR2#88?L+nJcDjG(0ap)GGV%9R zm%Vh+wvx4;?Ws!5&2&-Q5s%}$|DS2pN=s=j8FD$(d)>exd{?*s8@MCD-uewud-iVR znD%m2)q&-UGNLv2oP#-QlGnVrDk9(i3tmM(3@e!4O=${l$?_EttHA^VR+jkGV}z?2ev|HJyg$ls*z{CowKI|pZYzFiTw9(tdo+uGQa!eDst_;|~s)!tfH zn7xgS@YT7`k{?Lk=i|HCwSUb*A|-%WUlq~%bY;(|6plpRpG8Y80oNDwPY>26!Vz3a z&xUrPeiZ;&OAcc>Lp%))>xyi?LYVY!bm*&i<9MpknRkKcwDsXXIhx;qxVY@;eqFF+|F*8$kK80msy@fx zoqOL=(0j1+^mX3sYzZsVonXb7mAyR4j>M&iUEN_$!?k~FQUBKZ*UKpTtQQ)@+uGV< z1C~rMGT+IUSRVpe_BT7`GF`g;`pcFB6m=x82Bx~K(|xzux7NRIAOMHd+E9KlHsuEx zfLWH^fx3#Y!=oSCF*QA{7N9l5LQZ-$tq0b9+o1P_()}UV{PHt4mP(cH!^@Wm&RBo? zG=HhI>$7zC3I+SCsOaeS&!kN6Js*4LUaQHfd9VMzX5pqpz_D*MG=9L5b)7lc?T(;X z44ZIDu(RXXl}}2v@{5a)j-CJdTzv-QU5AVLc{$l=W*CVrLOrWq*L?MJ`&&Xw7#=$K zM#b7Xdk2*@lKwq9ER1j@o$iMfzNDbvpeX`rUzA1*Q;~{+eqCN& zC9C6ETUpu2m%Bx2ec8KEP*6ZQwQ!+MkU=f17NzXRmT*@C45y+O<&9)_(+_|*E6rDX zNVW|BLn5%UN<*y1Y0EdE&ro~2f>66hj5yhpj$Fh5On`gsr*ozOC!;NM!>6ZS71h<#b7vtTx3u^WvMYO=%(Iz^hmwrJp?`O(2TnBu-ch6V|<3ps9i{b)%km=%~3aU|9!DyxGQ_=LB)aU~3)a zzZR?1{%}Fg*UazGV~yV)TBDDI@VAd@?M#$vK&g9OY+z+MPS5|)jSy3*D;V|lzbb!}Fp7e1~SCwum+Yodr z->45Du1?cu{`+mT=MsZuW8>qv^uBDz`)2RtSTU1pWnZQw6<62_S6p2kj-?(|pOH!5#AKGYsglCg)}3~lDdkjYScOd^-2{N z_JiH8*fJh&?gv$_=FfvB6HdrE6RWUwLt(dTw5n= zfGhlG>iH|o=~X!$;f+D>Ormzil{xFdSh(mB*kdQ=vy_5Ok?c_|^ylR@{}(K@`{Tq9 zha~=6eX2@Ph}wz*7kxL1;VPZA(l@YTezSIHCa`Ux|LMW955kQ4WE0?}4lQ=gO$iM| z9CawDfY{Lf(t|SXoCh>VW!4>cCre5gi)YqHu}2SaB0v=F@#A24T%6cqL<~SVJ~Bcw zjj`1DHsYO0Lo8OJjQaFaDy4g=uM9dV_{z$PL&>hMb#l(E@b$!(@`eV&Wa(iUxk1ev z&pkxbu*gYmH!SP{IoWgZsj1ArfBaBqz)tn3FI}IC_T833vh6lUc zUm@xGKDUIw!jI_!)P)m}4NzGL(W^P3;=c`aVALCt1K16ws|9F76$rWxq`dtS;G4l+ zy}h;y$Tc!h{k{{YHNOX?fK1|V3zlKZoV(Wtvdksz0cRyIY(9yXk zE+GNPq#9;>M|YtHr7x*JT%giKS(Y4;jk6DiKfx8Wb(X_5e#9fQJ&r%KGNu>2EK+iF z6Ity^7F#sdK84=mnDIaAC98HkF^iO->ohLR(zzffsyb9y`8l}fREK;3rd&s7PgmH# zS_3}gTBn6??`de+%M|87a`tk&va0H`0-(woYf!vC?{!YQVG|;}Hi-R5Jw)!*U;(n6 zM8P0Z^|U8wQph~YmAKqnJwaB#4yy?ULM zTvX;Ec7E9@N7>+|VujewO5La3lJ{pz{5uO9rAGYp*h}h`KzppKBHK|BbKCrVFA#aG z2+j3NgMlEOFGD8%^*LRg9|Z&J=YRXc+Y@ED5Mg=!39H2xcw%CCzx)*m#7QGVVZJQz zbke>#P8fO?^jiWTD9p*R9YJ|}d*ed5G_KD+mRr|-(SS`%7@1fzm6EC9S~$Y_L`Wi$ zq1RB)Cs9Ym?XkbNx8$$n-6vobBGUU_vbL_y@)08?z_xd_h zh3)RTR8&+go<+I57&mPF-AE4k>Fw?-x$P?L`{a_*6cJE?j>S zT+kSr`Rn1FVGpo`+*cr=Jf6W_B`u*Ut*x!q1=v_viY8P{?K`|^;!5t^xx*FLi3eHV z+WFK5SUuL#A_bB0OW&fUAuXObj_#0@Uc1DW0k}M%9j&?|L>rIva1fW5be?L3Or#&# zVAVRUyXgYycf=j)$%`3LyR9Iv*a63ovg=WJLITeY3dvS(-+vooq9o#X>a-1#2*Jl0 zRoey|`;=SFw6{Ovl$DiDAOQs{YimnDnEq}GitBs!1kU{aH$HWf(|p6dZ*`jA`A+1D z>+9uyuU+G(A|4G^?SMR*%3d%|BTYD6pNwA!W{Sui^@vd^Bp~O@4kuKH9LXmt2B^)@ z3Lw+h*Z!T8?(;z>WIm>*%!fxupXh?h10K5Z`+>U~7#N(djyw=MQ{V1(fR7)0%9c^P299%I4-XHyK9tbyJw6N#MMu+K<%{nsoaupR z{?SsS!T9_UahzN2-`O$XNZiu@{wq$`cC}El?Cos#g^p3*^BhTdn6#{H%E4OjMpS;m zy<2@u^xoM>t;e_oe6wr6xlop_;Em9|2;8E`HO{jsw?pMd2T)4rW*WWpBN|Tb7AS?PNx%4RV ze0{+3{>eQ%$hm#xpZ+9jjo(IcTa7k37J)DJm(?|gj;^e(iXud_V#DbU$Tc)H%(yMP_)%G3kB^Ua6_$$w zwXd1t6%JsNPN%h$&!b$iYAf3CER~_0w*OfGQ0|3wqhjm8Vu=fy=SdN$RA#$Q#IB-w zomrDkrq%uL-;Z{0$d5x_7)6#LJcv^1)++~x{OPFu$Vife@89#^tFtbMyuH}B1hI^l z4}p_&y+RlTM|1cg6tqMnV~9E-d-{BYSj}|G!p7Fwz8F=25N@5j)Uo zXrlSBzSispnF&$;9|#0Su}DbznCqq^1_%CsfDa`i`v1<(gZ)3~i7t_VvUV8L|3x`Q zheq6eV`3L#XBISFJBdLTX4MvkD%K)UIMUVJk&BP!X#7C4jRM6+Y zyHc<~_8^aRbkR>J33ccbNc&d?*RT9;do4Yxg*)MPZszU|t=58e_>s!yrULKg~ z3EU^!fXXXfC(msq&Mkr9glMc9k&*eVUzM!0uZ_!w6^K;)_U%!9(D}lz<*kZ#N_0MB zxeJPEvEl#SwL7$_on+u~=3|vRGB33W*{y2Qf-YKKSA8``HV!V0N=b_tk4Cg+!EH87 zj@(RXs3WwsN4HLIsRH$J6ihs$NxlD&7~djgH+9yG4+mDN@_;^8qcrPM`y_)xNyS4J zXZY&1B4j;8ihMXKW&`@-PIn z`B;4{^f9>DB3U)Ha03b-FX(!!L@jC(D4bN;0J$5=9D*htl-Ipmd+q%Z0mD@e>Ezm( zD_7eRHq94F(KXi1{AUj?=I4`^d&wr1htWfO(~Sa3VRbXl8_!=WHkees|83PGJad4e zqH-H26&sxCppdoZ!RQ`{1P~Df*=ijGk!wQPMX zF3IT4fDW1$=F^O36;}95T;tcz3U=w=XK-YXC)bNx zLrk1J>GV0ldqWW30EBC6k1Z^I+S5I$7A5f?k4{RVax1PQU_k}srkq9igo>bPEj>NO zm1KLquzuXcu7kUH3N0_R^$O{6@2wpno|(+%9J^# z9{7{az)31~ZOdYn%~8t1*FoE2z43Oa+S5F{Av66m$L*k>Ke>vO-@O6vU`>;M&M;F1 zZ6d|8M}hXFk(rsu?nI#_6i^xB+l&SU!>*4ls&bxQt-zr4jgv)j^0skev&UTWeu5sc zAosM9dGIjgXJ`bwt3Udnk(Us=(7z94T)0NnK;#nAc~}${273y=X;io}fI@iM*B`frr!r&0HZmXg0x#EiAa#1ZQ0Fybw#~^DS&C*LD*@C1D&z zma;sr#pviL$KrmSHLh}0NkeE%RLzm?US}%v#`!mG-4iTAM@)rdLZEsE$nqqtRXRa6 zTncG7hheiW6-OfNVqkNd(epL%k8( z(BwEymJ$&?p(M89EtYqXFWSxCFwo^rGDLWA8Y3CR@-SBq^06)W9%$s+rkTkhc&bml z8UF4gdqF7=`Sc(`05`85X!JVdNs^eaXwBP@P-LO9W-fk;=4l;t*Z+^D+$qbo`rrAm ztYd!y(+%l+(K_g}LJYVgkPV)-bR1h;EC^9_aVa)I;fxSJAzbi(+PKU|@z!#!FYSe; zWoEv2+%u+hJMS4eVpOX0S_4~5JjN(g_P`QWQP z>M|xJ$of*URIvK*OKp#)Fm-(_5TB`!&i!iv`$|!SJ5bJ9Qb-rL7Lg*dL@)y3ROx^h zVqp{k(^bw)elXCrRoFo*fW2)Qt_m$2N)%#m`UDO(IfCD-Lit0n`}X=+BKBt8TdRt? zP0vA$N+U{WQSv!_Z%_sn1V-O;rhM$;^2$otbbER=)aLKi(+r@U63pq}^mTPJJxOY< zruHA<&YyS$60&0=ZkCQ1$6khQK!QLeSF`6bC~ulJrnEku8jYL_SFsXO>n zQo-^t)KvA$C&+?=h*%+|u&g(f(T~;4jQg#!I06Fyaj>^y!O+U(6P1U(fcsD?!BwFa z^o(ALQ9{N_A>?3y2>DMir+q^<@xx$)Tv&0&LmoWB$NwB*6L^;;ZK0xhQ+ZokpYpBl5!^zI+Kd>vs3d55|gvB>%*!v9%vUX<;n`KelB27003*{ OJ8rpO^qaFK0Y3uSsu+U+ delta 50 zcmaFG_JnQ1M8@uklZq4rOT|>w(vz>Zx+dCOkc;V>DjM@Q=71anL!6A|v5e@~Ih(Z^ G?U?`p0TVC) From 9edd64d0af18fe8763d8917b3bb1f4f149d0c796 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Thu, 21 Apr 2016 19:30:03 -0700 Subject: [PATCH 057/228] Fixes mech syringe guns --- code/game/mecha/equipment/tools/medical_tools.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index bff20fa3843..81ba3e89b21 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -342,6 +342,7 @@ R += num2text(A.volume) + ")," mechsyringe.icon_state = initial(mechsyringe.icon_state) mechsyringe.icon = initial(mechsyringe.icon) + mechsyringe.reagents.reaction(M, INJECT) mechsyringe.reagents.trans_to(M, mechsyringe.reagents.total_volume) M.take_organ_damage(2) add_logs(originaloccupant, M, "shot", "syringegun") From 84e0fe2b79eafd35a612ca4cfa818883483bf989 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 21 Apr 2016 21:37:58 -0500 Subject: [PATCH 058/228] Hell lets do 10 damage its an endgame weapon that takes all your inventory --- .../projectiles/guns/projectile/rechargable_magazine.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index 2b2ca423ea6..8512f77b7fb 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -185,5 +185,5 @@ click_cooldown_override = 2 /obj/item/projectile/beam/weak - damage = 7 - armour_penetration = 50 \ No newline at end of file + damage = 10 + armour_penetration = 50 From 5009d5eb5da86c3f321e3f06ad0198d03a85a456 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 21 Apr 2016 23:32:56 -0500 Subject: [PATCH 059/228] Faster firing --- .../modules/projectiles/guns/projectile/rechargable_magazine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index 8512f77b7fb..fa1bb98135a 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -182,7 +182,7 @@ /obj/item/ammo_casing/caseless/laser/gatling projectile_type = /obj/item/projectile/beam/weak variance = 0.8 - click_cooldown_override = 2 + click_cooldown_override = 1 /obj/item/projectile/beam/weak damage = 10 From a39e3f3f1f351e3be5ae955c4de3a2e8889e191b Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Fri, 22 Apr 2016 02:16:26 -0500 Subject: [PATCH 060/228] Ausops Sprites --- .../guns/projectile/rechargable_magazine.dm | 9 ++++++--- icons/mob/back.dmi | Bin 95442 -> 96413 bytes icons/mob/inhands/guns_lefthand.dmi | Bin 36128 -> 36101 bytes icons/mob/inhands/guns_righthand.dmi | Bin 39047 -> 38896 bytes icons/obj/guns/minigun.dmi | Bin 874 -> 753 bytes 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index fa1bb98135a..e907fd59726 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -59,7 +59,7 @@ name = "backpack power source" desc = "The massive external power source for the laser gatling gun" icon = 'icons/obj/guns/minigun.dmi' - icon_state = "brokenpack_gun" + icon_state = "holstered" item_state = "backpack" slot_flags = SLOT_BACK w_class = 5 @@ -121,9 +121,9 @@ /obj/item/weapon/minigunpack/update_icon() if(armed) - icon_state = "brokenpack" + icon_state = "notholstered" else - icon_state = "brokenpack_gun" + icon_state = "holstered" /obj/item/weapon/minigunpack/proc/attach_gun(var/mob/user) @@ -157,6 +157,9 @@ mag_type = /obj/item/ammo_box/magazine/internal/minigun var/obj/item/weapon/minigunpack/ammo_pack +/obj/item/weapon/gun/projectile/minigun/attack_self(mob/living/user) + return + /obj/item/weapon/gun/projectile/minigun/New() if(!ammo_pack) if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one. diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index b2c66174387faebe626e74f50d289bf4f57d9077..04204d0eb95f852b31bf2648ce11537805dcf329 100644 GIT binary patch delta 12248 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 delta 11271 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 diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index fa3e1d588c5f4c526dd8b17eac41ea478d4c5ee5..f5a48319cc4395dd77893aaf707b14ea8a3e9bf9 100644 GIT binary patch delta 19198 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 I!y@?q0f$Dt-2eap diff --git a/icons/obj/guns/minigun.dmi b/icons/obj/guns/minigun.dmi index 1ac177c10ce464879c3ccb5cacca73ab283f151c..c0d84547dcedecf84fbc32bbc54601c4e5d90544 100644 GIT binary patch delta 689 zcmV;i0#5zv2Jr=diBL{Q4GJ0x0000DNk~Le0001B0000$1Oos702dl>JpcdzCs0gO zMZmzoOG!~QGCGKcjv*f>ut`y4VQH(WvEF7~VJRtmH8s@I+Mh#Auh*A700001bW%=J z06^y0W&i*HlX_HGbVOxyV{&P5bZKvH004NLQ&w zB#ba6BR{9OB(*3t1-lVQD)aJ72r5=qaP@Nm`vw32iaeg`45bSI00G%aL_t(YiS1Q8 zQo}G1T{J#G;uu#HvSLzE5S&R0C}dlh8cskGk4;aJf}VmSP-lkW3~4Ai7OU9!Cz~i8 znaS&(cK7YBH1mH1aKz!FkI?57$Q5Hls>{g)2ogdyIgr~%!VV6E12KU)RFlJq6ULay z08A|o%pE4lQr7!g9Ecs-_CUA@Ee_y@qtQ^raU29DHm`7hF7Lk{m#ywRZ{|DBD9#c} z9zJ`Xr^dk$LWEH$L^Ms3#|qCAYViaMkh^k5k&RU6RE>W_;JcQEr$N5dF1~Fk49n-5 z98X-~Je@zh>T)pf^-teF?{#_hKG_v(^COP($Hn4}s=?fCZb)xW+32 zP5+lLQPJ#G3rYdS|7CoUdb7p6T|n`FS-{fOYT>jCkf#63GpT3=?E;GbBL*zJ`4ASb z378%K!*+jUl76pKUsMEeq+zy%>i@FW#alF;a9#@FNF?97`5$Zx&emxX_r3}Nr{AZ) z1@-^nQl2=@Eb^yKafktu_dfxL=^C5i=MjISA;4;{OoY-PzFM|HdhtcW39Q`F~_}C$>VPK^?}P`G;M1&R8UM* zMZmzo5D*Y1CMINLWK2vTA0J6cNyo>>tE;P;nwocacVAy$Y;0_gkB|J{6#tcB zEiEmCgoOS7E%RO-eSLjdSy`C?0N4Nk9u5Nk|Nlx;T6%U9k+lE-00DGTPE!Ct=GbNc z005DZWoLf_b*7}|BvyiibqoTkMXcsQ!$_lQ2E?`dp0Bhwt zZnR9J=Wm)mxvAP_|bB{YJSkW6lr%wHWT>g;T5j$KKyp8yZ#|V*?xaEJa!_)u!euzTsw>U0lqE`?{N+E_p zg-fbolPe|Dl?);i4-g`(h%!|HSeQ(t!sDzC8So3@kb#5_85~~1@g7L^zm}j`JDCgr)IeV@X0)F> zB;J24!8xrRn_FmV4QgIj;OxjEvY|w(9U5L4I7>v2^yDd&_^d}=<(IsfRx|=$#wXlD zKSNV(P;ntge5hpRfB^sK|M*m*rN$uRLRx$w^Fad{SI_#mDcO4b1L)W222PD70maI ztoc#_W}alAwQ<)FaJ{AqaPsdfC^=Wqvq9QMbSzsVS1_Unc3ncv`5gAW2s7Yv%w}~e zcL5d5_mj|YAstVfnSsvs*~AKTZcuX}!tA#mgBd3cr^k}TGjmBjxNqYI=UGt|4}*)Z z3kXNi)~}?7FY|A=B|U%fQe+MT9>I6Q_9b_J{`^CJ99NIbtm0sP9G#)R8J;Y*=C+~N P00000NkvXXu0mjf-)&%g From 58a5baff6cc77c3458d329b7c82ee798957eb33b Mon Sep 17 00:00:00 2001 From: Lularian Date: Fri, 22 Apr 2016 05:10:08 -0500 Subject: [PATCH 061/228] sprites --- icons/obj/smooth_structures/sandbags.dmi | Bin 1318 -> 887 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/smooth_structures/sandbags.dmi b/icons/obj/smooth_structures/sandbags.dmi index 139235cedf94e00bd1bde0bc189a713630d705b7..2bb3723044e217997503d61013590ac10b9519e2 100644 GIT binary patch delta 670 zcmV;P0%8583ik$(BpVV?OjJd{z`&b(OVp}#!<%HKhgJXo|HE%q$B{h5e*#`fL_t(& zf$f?>a>6hSMaiQ3y5$1IC-CS5gxvp3wG*b0=&P13575DyVWWv3j{PHj6AlM^41PZQ z2Amr(jDgw${fh$+XHRoW-f*HYwgzr@*}1{(uR=L3a3Gr4ls!%KsRZtIIFNH}Ho-YH zaIeFdAhzw(NZ)Fp-vd1We^Na#>4*U@L`NNu>oD#T@m(&M;a-POnDku)^nWI-!0dpi zGq%QboVBvzKveJOOMM3b=)tCW8_=Rt9%r)YbRS8l2v~p19u$w0zIXs2UHC4?T=g0n z3-Fu8$FnE!uftN`FwjunFi>Cep9GwJeSL%R`nRkFrm`iKvrS&Bf5Ye-N00sFHm}uT z^o=fHKe^3oZ+V@E2YzywR|8`QoIn?3d94m(`=kqQtJ}POm)F(G=CwfmE-QiSN==|o z<9rHu{(Ut+2!MuXy*Ut`e=YUWddz@8%Q52tz^+3xu336SJ{67J{;YJ~0nm9E$)1wk{i2--mPvePTAQzK`or@QK;D z`aWdepij(3u^(Jl0{_s1^4aT}1D!j$^x0o1<%R2RK=rvp2&Pl@xkCu1(>B06ovIIm zLWE@n@5)@kGa@AX3A>kl)qc>6&+u=~Lqu=_zJu=~MZ z;KTf&463wmQocQ~)(=YKHibigigFH- ze4GWaPHYZh(3C?AzHR0ZmI`o~IRu(AcmXc~0jo_}_;9PV!2rbxI8Yr!yZmqrvvZff zT)u$d)EDX%fE5xr0Z5aPrvbW47Sa+`T0w}|xx#@nJgCGkIDhw2mc%tElRgY?KrWY7 z@#v*2X`{;+n3ZS~Q_}VEV*8e%Yn^Gi( zIO%IOM~UIXpPgwVI}%ILluN<54F!ugt65PN84f|~NscRj5UX8w#gHjeAwx;9FI1GB zfbeNvzt~v;su%HUK(qgqlhiLTjs6#cyBsOg{V!XdbALbJuKzs`xa)sE0GV>X+N%5C z)!@XY?EBxXQ@ZqnG_-cCkR1LV0sFHOof_v5>rANpYkg7HnF zQ`vpEf>pML4TB`HNLHJ${vF1M$H?>t;JWU+MStnul(_Xc+3rmiNMH+SYO9lcl)2@3 zd~p(H#iCq<$}webpGv}-vh_G`b$TdsX-gGlVQf6kTb&D+GB;Ggc!HTE zHhdJ008=C>M_bC*3)qx_#qlv^UeGe`rJngp%6aYwELQP2VMDUy-x-62I?C7+!!f-2 z&41&|UuFI@;9C!V*jo?!?X3qNfNwqMw*RjOpR6o+#ZjdPTk|t(CQpo%9&F8*!ykL} zU~9fqCdgK9p4`&Fi?2i5$uzg|)Ee=Xo2 Xr^e7h5wj;j00000NkvXXu0mjfHW?)6 From 880fb89ab4e95cf294bc4b42dd9f5a5341b152d4 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Fri, 22 Apr 2016 11:37:14 +0100 Subject: [PATCH 062/228] Wormhole lifebuoy (chasm protection) :cl: coiax rscadd: As a sign of friendship between the Free Golems and Centcom, they have developed the wormhole lifebuoy, a modified jaunter to be worn around a user's waist, which will save them from falling to their death in a chasm. experiment: The lifebuoy's limited warranty does not cover exposure to powerful electromagnetic fields. tweak: Renamed hivelord stabilizer to legion's heart stabilizer. /:cl: --- code/modules/mining/equipment_locker.dm | 63 +++++++++++++++++-------- code/modules/mining/mine_turfs.dm | 9 ++++ 2 files changed, 53 insertions(+), 19 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 12ec53f1011..0c5f6a8f468 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -291,6 +291,7 @@ new /datum/data/mining_equipment("GAR scanners", /obj/item/clothing/glasses/meson/gar, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 600), + new /datum/data/mining_equipment("Wormhole Lifebuoy", /obj/item/device/wormhole_jaunter/lifebuoy, 1000), new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750), new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 800), new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000), @@ -492,20 +493,43 @@ return else user.visible_message("[user.name] activates the [src.name]!") - var/list/L = list() - for(var/obj/item/device/radio/beacon/B in world) - var/turf/T = get_turf(B) - if(T.z == ZLEVEL_STATION) - L += B - if(!L.len) - user << "The [src.name] failed to create a wormhole." - return - var/chosen_beacon = pick(L) - var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100) - J.target = chosen_beacon - try_move_adjacent(J) - playsound(src,'sound/effects/sparks4.ogg',50,1) - qdel(src) + activate(user) + +/obj/item/device/wormhole_jaunter/proc/activate(mob/user) + var/list/L = list() + for(var/obj/item/device/radio/beacon/B in world) + var/turf/T = get_turf(B) + if(T.z == ZLEVEL_STATION) + L += B + if(!L.len) + user << "The [src.name] failed to create a wormhole." + return + var/chosen_beacon = pick(L) + var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100) + J.target = chosen_beacon + try_move_adjacent(J) + playsound(src,'sound/effects/sparks4.ogg',50,1) + qdel(src) + + +/obj/item/device/wormhole_jaunter/lifebuoy + name = "wormhole lifebuoy" + desc = "A single use device using similar technology to the wormhole jaunter. In addition, this belt has velocity and depth sensors that will trigger the device automatically if the user falls into a chasm, saving them from their trip into the darkness. Must be worn around the users waist in order to function in this way." + slot_flags = SLOT_BELT + +/obj/item/device/wormhole_jaunter/lifebuoy/emp_act(power) + var/triggered = FALSE + if(power == 1) + triggered = TRUE + else if(power == 2 && prob(50)) + triggered = TRUE + if(triggered) + usr.visible_message("The [src] overloads and activates!") + activate(usr) + +/obj/item/device/wormhole_jaunter/lifebuoy/proc/chasm_protect() + usr.visible_message("[usr]'s [src] activates, saving them from the chasm!") + activate(usr) /obj/effect/portal/wormhole/jaunt_tunnel name = "jaunt tunnel" @@ -518,6 +542,7 @@ return if(istype(M, /atom/movable)) if(do_teleport(M, target, 6)) + playsound(M,'sound/weapons/resonator_blast.ogg',50,1) if(iscarbon(M)) var/mob/living/carbon/L = M L.Weaken(3) @@ -1019,20 +1044,20 @@ /*********************Hivelord stabilizer****************/ /obj/item/weapon/hivelordstabilizer - name = "hivelord stabilizer" + name = "legion's heart stabilizer" icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" - desc = "Inject a hivelord core with this stabilizer to preserve its healing powers indefinitely." + desc = "Inject a legion's heart with this stabilizer to preserve its healing powers indefinitely." w_class = 1 origin_tech = "biotech=1" /obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/internal/M, mob/user) var/obj/item/organ/internal/hivelord_core/C = M if(!istype(C, /obj/item/organ/internal/hivelord_core)) - user << "The stabilizer only works on hivelord cores." + user << "The stabilizer only works on legion's hearts." return ..() C.preserved = 1 - user << "You inject the hivelord core with the stabilizer. It will no longer go inert." + user << "You inject the [M] with the stabilizer. It will no longer go inert." qdel(src) @@ -1110,4 +1135,4 @@ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - RefreshParts() \ No newline at end of file + RefreshParts() diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 3d5f72946dd..63124de3a3f 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -563,12 +563,21 @@ /turf/open/chasm/Entered(atom/movable/AM) if(istype(AM, /obj/singularity) || istype(AM, /obj/item/projectile)) return + if(istype(AM, /obj/effect/portal)) + // Portals aren't affected by gravity. Probably. + return // Flies right over the chasm if(istype(AM, /mob/living/simple_animal)) // apparently only simple_animals can fly?? var/mob/living/simple_animal/SA = AM if(SA.flying) return + if(istype(AM, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = AM + if(istype(H.belt, /obj/item/device/wormhole_jaunter/lifebuoy)) + var/obj/item/device/wormhole_jaunter/lifebuoy/L = H.belt + L.chasm_protect() + return drop(AM) From dfc91ae3c965a80d2b7a1c0ff0c6e9a509eda6ea Mon Sep 17 00:00:00 2001 From: bawhoppen Date: Fri, 22 Apr 2016 06:15:12 -0500 Subject: [PATCH 063/228] phix --- code/game/objects/items/weapons/storage/backpack.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 878c1abedaf..46ccead351f 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -35,7 +35,7 @@ desc = "A backpack that opens into a localized pocket of Blue Space." origin_tech = "bluespace=4" icon_state = "holdingpack" - max_w_class = 10 + max_w_class = 6 max_combined_w_class = 35 burn_state = FIRE_PROOF var/pshoom = 'sound/items/PSHOOM.ogg' From cf886fc84d596f26838a5fb01510ba7431cec078 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Fri, 22 Apr 2016 12:22:58 +0100 Subject: [PATCH 064/228] New Processor Overload event An exospheric bubble has occured, making the telecommunications processors overload and shut down (and very occasionally, also explode). But hey, at least telecommunications is still functional? You just gotta shout REALLY LOUDLY to make yourself heard over the static. :cl: coiax rscadd: Centcom regret to inform you that new instabilities with nearby gas giants are causing exospheric bubbles to affect the telecommunications processors. Please contact your supervisor for further instructions. /:cl: --- code/modules/events/processor_overload.dm | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 code/modules/events/processor_overload.dm diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm new file mode 100644 index 00000000000..bae9f03d574 --- /dev/null +++ b/code/modules/events/processor_overload.dm @@ -0,0 +1,38 @@ +/datum/round_event_control/processor_overload + name = "Processor Overload" + typepath = /datum/round_event/processor_overload + weight = 15 + +/datum/round_event/processor_overload + announceWhen = 1 + +/datum/round_event/processor_overload/announce() + var/alert = pick( "Exospheric bubble inbound. Processor overload is likely. Please contact you*%xp25)`6cq-BZZT", \ + "Exospheric bubble inbound. Processor overload is likel*1eta;c5;'1v¬-BZZZT", \ + "Exospheric bubble inbound. Processor ov#MCi46:5.;@63-BZZZZT", \ + "Exospheric bubble inbo'Fz\\k55_@-BZZZZZT", \ + "Exospheri:%£ QCbyj^j" + A << "[alert]" + A << "
    " + + // Announce most of the time, but leave a little gap so people don't know + // whether it's, say, a tesla zapping tcomms, or some selective + // modification of the tcomms bus + if(prob(80)) + priority_announce(alert) + + +/datum/round_event/processor_overload/start() + for(var/obj/machinery/telecomms/T in telecomms_list) + if(istype(T, /obj/machinery/telecomms/processor)) + var/obj/machinery/telecomms/processor/P = T + // Wow, it overloaded so much that it EXPLODED!? + if(prob(10)) + P.ex_act(2) + else + P.emp_act(1) From 02110a84b84664fedee04da3e2162a09237bf992 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Fri, 22 Apr 2016 12:41:37 +0100 Subject: [PATCH 065/228] Added processor_overload.dm to tgstation.dme --- tgstation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/tgstation.dme b/tgstation.dme index a2a4a626d32..5a9e50093d4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1020,6 +1020,7 @@ #include "code\modules\events\operative.dm" #include "code\modules\events\portal_storm.dm" #include "code\modules\events\prison_break.dm" +#include "code\modules\events\processor_overload.dm" #include "code\modules\events\radiation_storm.dm" #include "code\modules\events\shuttle_loan.dm" #include "code\modules\events\spacevine.dm" From 400d8473fac582b5561021bb8c53e779c9824da9 Mon Sep 17 00:00:00 2001 From: Frank A Date: Thu, 21 Apr 2016 21:35:13 -0400 Subject: [PATCH 066/228] Red Wizard Hat enabled on Corgis Allow all corgis to wear red wizard hats --- .../mob/living/simple_animal/friendly/dog.dm | 6 +++++- icons/mob/corgi_head.dmi | Bin 17766 -> 18358 bytes 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 4b0fdb9adfc..c7acb904566 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -235,7 +235,7 @@ /obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard, /obj/item/clothing/head/cardborg, /obj/item/weapon/bedsheet, /obj/item/clothing/head/helmet/space/santahat, /obj/item/clothing/head/soft, /obj/item/clothing/head/hardhat/reindeer, /obj/item/clothing/head/sombrero, - /obj/item/clothing/head/hopcap, /obj/item/clothing/mask/gas/clown_hat) + /obj/item/clothing/head/hopcap, /obj/item/clothing/mask/gas/clown_hat, /obj/item/clothing/head/wizard/red) valid = 1 if(valid) @@ -332,6 +332,10 @@ name = "Grandwizard [real_name]" speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") + if(/obj/item/clothing/head/wizard/red) + name = "Pyromancer [real_name]" + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!") + if(/obj/item/clothing/head/cardborg) name = "Borgi" speak = list("Ping!","Beep!","Woof!") diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi index 51904f2b3cd860cfa7581d0d8c414228ea230a46..5f810bf7cabb084679575316161e1d08797b46af 100644 GIT binary patch literal 18358 zcmc({1ymf{*C$#H0fJj_hY-RgNN|S)O$ZhUt|7Qv;|&QOTmmFWqk-V=&=5i(xNC4t z|=B~V%j12UIDM*-z)+KUgVBvRa@?>4d@b&`X36=}=Y0AVleVu!aD91a! zqiap=Acuz+-rZ;)z6yAFVSBin(^-ywF*L--jE8GE7CFIWrpwyJxOS@L0jYg? z%F~vcLir)UCYCkGcwkeW^E2ZslNCLJu5qq!v_jtx*-6V;V|T1s^QYE63Ei#Cj#9P6 z6ty;wSUy))$@Y*SxomjF#KZx6M{gD#xI7vgt7`i$Rp5<1g_n37tSpjCN3;6X(-XA; zyev2wjd^tg7FU<;yC0c3{Owa=$cuFRt-#r9O~u?Ur8QZoQB0xx8rX?mvZ%z620uC++* z4+i1sK8hu(B#tF2c&t>w_}9dx*+Z_DQZk(S_wF(sa#qB0tBodx>ehyTy`(5xCTssl zW>rSRYf!^QRvwc6JnY{67XkMw30E&}o{F8=O+-xm`8`BYRyOGe@Q|5V=`BD)9LM?;2oLLyC+W`s+#PCW)0tOZ zCHEJelvpkQ2xk@%p<-ueS9BFtTNn!X`t=dNkkCrH$Ncb(L5d-~kpPoXF3Q*3iwvMs*@({LU0=ynGGM>g4ijfM} z;W~Wke0+E-MbO>$TIyNYqqfzJ0=NOs{a;Ts@>ObBqbT2lV=;2_b#VuM1*bd0>sr1Q zP4W=D{!Js_W*%Z;X~|OO_-ts`0bGZDgCA~edOF={iUC?)IoY7+t7fqk(%*h6%&-N` zNP*8Wrct=kUoG$EHtN-yZb+XlE}PyuS90q~gQGz`%IS&E2JK>=%rVMWB=2`eyF59qW8_5Eh~g$hTf` zq2`&yG#JPV zrp7wQp6NZ?mvmlhpR{GmOglCJ@@ZK`LGB`5~+API*4xP6rLyEK`uG#5PSQpcYN?z=rH> )e<29`(Asm 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 Date: Fri, 22 Apr 2016 14:29:00 +0100 Subject: [PATCH 067/228] Removed processor explosion chance --- code/modules/events/processor_overload.dm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index bae9f03d574..200bb87c10c 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -31,8 +31,6 @@ for(var/obj/machinery/telecomms/T in telecomms_list) if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T - // Wow, it overloaded so much that it EXPLODED!? - if(prob(10)) - P.ex_act(2) - else - P.emp_act(1) + // Apparently machines very occasionally blowing up due to + // overload is "boring" and "not fun". So just EMP for now. + P.emp_act(1) From 6ec28fc001fbd6b01b7f3727656922d377daeeb4 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Fri, 22 Apr 2016 11:17:42 -0500 Subject: [PATCH 068/228] Runtime and MC crash fixes --- code/modules/projectiles/firing.dm | 2 +- code/modules/projectiles/gun.dm | 5 +++++ .../projectiles/guns/projectile/rechargable_magazine.dm | 5 +++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm index a56d178cfde..cf008e00ec1 100644 --- a/code/modules/projectiles/firing.dm +++ b/code/modules/projectiles/firing.dm @@ -4,7 +4,7 @@ var/curloc = user.loc var/targloc = get_turf(target) ready_proj(target, user, quiet, zone_override) - if(distro) + if(distro && targloc) targloc = spread(targloc, curloc, distro) if(!throw_proj(target, targloc, user, params)) return 0 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 678dbcc565e..b9ca0ed63ee 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -36,6 +36,7 @@ var/sawn_state = SAWN_INTACT var/burst_size = 1 //how large a burst is var/fire_delay = 0 //rate of fire for burst firing and semi auto + var/firing_burst = 0 //Prevent the weapon from firing again while already firing var/semicd = 0 //cooldown handler var/weapon_weight = WEAPON_LIGHT @@ -135,6 +136,8 @@ /obj/item/weapon/gun/afterattack(atom/target, mob/living/user, flag, params) + if(firing_burst) + return if(flag) //It's adjacent, is the user, or is on the user's person if(target in user.contents) //can't shoot stuff inside us. return @@ -210,6 +213,7 @@ obj/item/weapon/gun/proc/newshot() recoil = initial(recoil) if(burst_size > 1) + firing_burst = 1 for(var/i = 1 to burst_size) if(!user) break @@ -231,6 +235,7 @@ obj/item/weapon/gun/proc/newshot() process_chamber() update_icon() sleep(fire_delay) + firing_burst = 0 else if(chambered) if(!chambered.fire(target, user, params, , suppressed, zone_override)) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index e907fd59726..b8c047ef12a 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -81,6 +81,7 @@ return update_icon() gun.forceMove(user) + user.update_inv_back() else user << "You are already holding the gun!" else @@ -125,7 +126,6 @@ else icon_state = "holstered" - /obj/item/weapon/minigunpack/proc/attach_gun(var/mob/user) if(!gun) gun = new(src) @@ -136,6 +136,7 @@ else src.visible_message("The [gun.name] snaps back onto the [name]!") update_icon() + user.update_inv_back() /obj/item/weapon/gun/projectile/minigun @@ -151,7 +152,7 @@ w_class = 5 materials = list() burst_size = 5 - fire_delay = 2 + fire_delay = 1 weapon_weight = WEAPON_HEAVY fire_sound = 'sound/weapons/Laser.ogg' mag_type = /obj/item/ammo_box/magazine/internal/minigun From 893013ecb72d1c950941351f77d670523e968694 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 22 Apr 2016 15:13:10 -0300 Subject: [PATCH 069/228] No longer a datum for each player --- code/modules/admin/verbs/playsound.dm | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 7bb51127514..77dd2e39eee 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -9,22 +9,24 @@ var/sound/admin_sound log_admin("[key_name(src)] played sound [S]") message_admins("[key_name_admin(src)] played sound [S]") + var/freq = 1 if(SSevent.holidays && SSevent.holidays[APRIL_FOOLS]) freq = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5) src << "You feel the Honkmother messing with your song..." + + var/sound/admin_sound = new() + admin_sound.file = S + admin_sound.priority = 250 + admin_sound.channel = SOUND_CHANNEL_ADMIN + admin_sound.frequency = freq + admin_sound.wait = 1 + admin_sound.repeat = 0 + admin_sound.status = SOUND_STREAM for(var/mob/M in player_list) if(M.client.prefs.toggles & SOUND_MIDI) var/vol = M.client.prefs.adminmusicvolume - var/sound/admin_sound = new() - admin_sound.file = S - admin_sound.priority = 250 - admin_sound.channel = SOUND_CHANNEL_ADMIN - admin_sound.frequency = freq - admin_sound.wait = 1 - admin_sound.repeat = 0 - admin_sound.status = SOUND_STREAM admin_sound.volume = vol M << admin_sound From ba0463de25de0301ab249f6d45190b9943312459 Mon Sep 17 00:00:00 2001 From: Akke Date: Fri, 22 Apr 2016 22:50:31 +0100 Subject: [PATCH 070/228] fixes . = 1 --- code/modules/reagents/chemistry/reagents/medicine_reagents.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 5676d135a2c..7fb5e5ea1ae 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -86,8 +86,8 @@ M.hallucination = max(0, M.hallucination - 10) if(prob(30)) M.adjustToxLoss(1, 0) + . = 1 ..() - . = 1 /datum/reagent/medicine/synaphydramine name = "Diphen-Synaptizine" @@ -104,8 +104,8 @@ M.hallucination = max(0, M.hallucination - 10) if(prob(30)) M.adjustToxLoss(1, 0) + . = 1 ..() - . = 1 /datum/reagent/medicine/inacusiate name = "Inacusiate" From 7f2f1cd8322b0084300696705b89ac7a0bd06a4a Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Fri, 22 Apr 2016 23:08:53 +0000 Subject: [PATCH 071/228] Automatic changelog generation for PR #17036 --- html/changelogs/AutoChangeLog-pr-17036.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17036.yml diff --git a/html/changelogs/AutoChangeLog-pr-17036.yml b/html/changelogs/AutoChangeLog-pr-17036.yml new file mode 100644 index 00000000000..bb803edad18 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17036.yml @@ -0,0 +1,5 @@ +author: TechnoAlchemisto +delete-after: True +changes: + - rscadd: "Goliaths now drop bones, and Watchers drop sinews." + - rscadd: "You can craft primitive gear from bone and sinew." From c5506d19af1fdaafb9e2077301defad8092f2871 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Fri, 22 Apr 2016 19:06:41 -0700 Subject: [PATCH 072/228] Adds craftable bracers, adds watchers dropping bones. --- code/modules/clothing/gloves/miscellaneous.dm | 19 +++++++++++++++++- code/modules/crafting/recipes.dm | 8 ++++++++ .../simple_animal/hostile/mining_mobs.dm | 2 +- icons/mob/hands.dmi | Bin 8239 -> 8608 bytes icons/obj/clothing/gloves.dmi | Bin 11753 -> 12197 bytes 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 894c8b8d3ae..1a261f16d4a 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -35,4 +35,21 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - burn_state = FIRE_PROOF \ No newline at end of file + burn_state = FIRE_PROOF + +/obj/item/clothing/gloves/bracer + name = "bone bracers" + desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms." + icon_state = "bracers" + item_state = "bracers" + item_color = null //So they don't wash. + transfer_prints = TRUE + strip_delay = 40 + put_on_delay = 20 + body_parts_covered = ARMS + cold_protection = ARMS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + burn_state = FIRE_PROOF + armor = list(melee = 60, bullet = 35, laser = 35, energy = 20, bomb = 35, bio = 35, rad = 35) //Not like anything ever hits the arms anyways. + diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 2f0f739bf0d..a2b1e4a81e7 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -363,6 +363,14 @@ name = "Bone Talisman" result = /obj/item/clothing/tie/talisman time = 20 + reqs = list(/obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 1) + category = CAT_MISC + +/datum/table_recipe/bracers + name = "Bone Bracers" + result = /obj/item/clothing/gloves/bracer + time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1) category = CAT_MISC \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 0d41abe1c86..d914bc5943b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -635,7 +635,7 @@ stat_attack = 1 robust_searching = 1 loot = list() - butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1) + butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, obj/item/stack/sheet/bone = 1) //Goliath diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index f8a6c510b68f54dbaee7423e7bda8798763692f8..6a7d0032c7f989a367ee4aa594348d453243cc26 100644 GIT binary patch literal 8608 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 literal 8239 zcmch7cUV)|yKWo{BZ`b;K}BUoM5H4D5fCye79jLM1c68k5Smh@gjhxyx`Om7EtC*s zXc9`W0MdmJBB2C~ln_FUkOUHvoZvaG7LPH?D5IFjD8s_c~eGuKlz|| z?oy75Z+dDaTJXMvc9f-NW2rG*o}l`BQxX)1L{ zProN{QW#T(>r=?*Mig*Q($OV^cbBw&0^I(k&JX}_s`&XX;Psz?Jpi-+rBS|rR_#vn z$_1^cuvK!4SO2(L)YRdrzeD>A@>|1JFKA&&hY=_c@aaf!71?z)d}d!@R^aN2CNz-W zIS@4`1r;%0MrgFTVrMvyHW!8tkbET@@rBv%mh|ixnq2;u1ia>r?v<%Vg5LzL%Z?%L zDogy_6Y|tZ^H&@$FpX3|nAyP%3-_JxOGo(mh1k8WtFu;tVj+Ry&6#?VO{iahPicND z;nzdsQhQ6Q-P3wY?ID?YP{A5Y%QoxXOf91pG%0wJ<)d6jJ8(%~vnYi;Nn`|Fo1UH~ zH~MBG5D55Xr{CA5-O4qewo|UrFb58JX#A1Ng62<(>NuRq0Q|VWHE4TeNj#UQdczwjjdD{FjfWO;t}+5kI-ssY zK%qRF(LBA1Ybw-vN(Qa)2zxXEzn$DVx(jgoDq!bBgU;t z?p|V#b*jvCiMEDqypzfA9gkvvEzzRH+~W1_Q|p8CLzu`XgmED&CH35i8Ul&wN3s>2 zH~eO}SdW#Qk;3RD? z1XHDz9Oo1w%H8|$_@g(^Efv@jPvdW-OUB^)Gn#Y$9(7Zw?k5t6wG_s*p+Cd3|Bm@J z+nPNoC!vT3V?=S_fQaDw+(loynTGehyC1VRHjAPx>Dp#> zzYo_g<@GKH5znco=1iTUe1b%Md0qmp)-dPVtGUBVav9N$xn4T?c}j_b zXGkFu^mvI$x4r3wrp!O0iGhHE!MxcjpdLD_JLf+?wu&Yr^pCX7N$a`9eqSx}uQr{#@*R>i^}8jy4ge{P`24n*8CqseNWt_WLvzd9Xg`J4f2AgG>ef*(fF~N|>k@ zo~oWmM{Rs_757q6T>Os6I&$O)!pCQ1?tScVf|#YoK7IPdQM$SNJ&76PZ1{LdPQO$< zYUu7L9FGVJ`AE_X*pE&zO`VBaQvB~QptZ-w1d;u&L~hk!YS%;?cP2XF=ReRzx~)b^ zSw9YX{!K-pAtBy(?{*UFcJAD{ytH(wmbXY48F^JuQ1FQlMx)VQ&-gmF_zY(PV!MwP9~x0*&!pVEtGh9jI!aT;JuUVLU@9!(+pm1M*v_$p)8+9pZWb7fSyrTg>uB zaLF~DG=cv1M@DDh6~I5Aw0>mDx=N!6%3#8vjFG`j1JLP_Z?hK+Sz8uj@K84Ulx=e` zV^tFhkt~wLdI@Z`Fif0b3Ioc8Pn^BR@XUp-A3W3{Hp)4psYL_BQ3$i8oqB_aGYhNqW@jNdY=ni5T@Yk>^`mp?ig!SH&T#ESozZ zL(lW4@e>!I)9GVx^N&lN1pBg_#q9ngCP8d&U|3@2_9smEX>(uV%CE#ODpqp5i|VM; zYMg(Q5a4xwNem81l#i{q;nWFf%4^P~K_0OfQ4)V^OpKuy6-Vu4*$2FSKnP+FJM{xX zx`_gHArthRy5E~a&0S~6&CDVO-w#hk2MvDl#~Y#f{A}8sR{#exOqBmiAa|fbgR#1= zO(TC?C@pbW%6dt#HX)jO$de9xI^(4;kZ8S1VLmFbmijt{d?fw#Z~afeNO5vo{A0Mn zrv2tsCNLkueDR6XD$)?z%ZZx63oewkMIO(02EpHEuxnW6$DaXrci?yL0A&2q3Anp=$NqoB_~0k4nY|NL*TAaOHPSn4 za?RbrP%w0`he0-1QP*PKHdYwh+O7=zHdBv6zcb+#O6t>*e`pEgK<1H zC_X-PBUXB|K%qq#b0{uTDbvE|o0n)AXR+1Y3hph-R3Y%=&@IzrIwd~Wse8*@HsyAQ z3i<KpwU*wNx{WfFY>+9PX5y{}fG zMvBi-_IJGhf<+L$@I5h*uHz{l^|D1$q+_mXyz=P;Z$?)muUe%V$u9K19K8tnUfWT#Z7ugSe*;Euy_hYeKS#69ajEb5Bk7SRzuBhezdF#x8P_e zoR{x_S8lAuf(HwyE1dMp21Z;geM`zr(lwlmaFh7b4{DU3zvjHebPRe(H=3ooNewFE z_41WtsLrooqG-cZI#ajq8QjE%W7TSEPq|3d+a7jrdXlMXrLEhQBy^(!>(_J_`?66L z1Z3-z6RiHQ;U_ojRy`tn4ihAhFBsSNyr8FW(7CbW%1G@+^9hPAfJs@&v-T6gdyb{& zri5qYL>F@D`y)f8l;u^W0H9OFiw>>9J1HWQ`NTs*YzCJ^b8qFtiZ5IaLj*|BeH~t6Xr7Y-!PN z4Ro03n>3g`N<<@7#S>W$pAS`p<5t%mv6XY6*qr6Rg4*T#qAyh}B{gC>^U-xf9w3X} z^~4JD23{zY*%i7$7)hIxb)d{vp*)aJE>tFhnH8xo^0403dAtW2*O2^J-8@!ZY+;K- zGO%bOC2&;CRveoE(@L;?oF61EtE3KNZC=+}2#7y}(hoSFY8M#yL+hqUZ8{oc z0C^#ostqftkzNC^q_}PrMsD!9La=pBV!E%Z`Gil;2jD?x7w3#{b94Id9duK zI-ZWlRiIijMDL-zi*)eU(QEN`872yzTGmO_z>pI+1OMflgktHiT@`*|L z-e^CO7!)h5G#&E?T$@qby-OZHv3$PZxt6=Bs;~7RgH+uXO7!W;syj%WYKTmg1VV!e zi0nE7b5H*rXypQjo_>4$jAwW0gD)R2K!#l^p>bbn%f5tk*}*=@b?2Jkc;PxX*fpV~ zI6;6k%o@o%z&QS`IZRcNU|7sSDrJvMz3hpUoITa6ksiRYJzE*3X>F zf0s+ULVRi5P=SNUE|4M}qe78arC3?Z^4B9pxB8$WVaScLy*I0U(ZT~6mewCe-c`8` zCS+EGKNx_Dde6Eaw9EVuf;nIEq{mX^cB>~yU+asgRTz?-=UrLO{a zw%kMYjiTdwxkj_Npma5d^1dd~tdBo!NC=N0GSng32dDJn?1}wxirV9#@_{cw| zdB$ep^XqP2&({x!;_ZnNqblK-OCV>f9xcBy4fOxs(B$p`12cRl%r^hquezbJ6M zo@*L9uOB!epTBW#cEIvh`h|AxWF_A~@{2@ka9+6QyRP1pzQ2Ic`vS^!=WRz?Ws_34X)dO33w`{@@>kZl6ayNIe_k8yF z&TffvdFrF8l2Lj*pBcAJEUXN85<86cx!y7|@{p=y&P!XHW!hkUbf}vhyYD1}z20pj zX7}=qFZxI9(kr6~sJ-ivi6DOdCBg>vuc8@1F1W*px@a<*IK(xk20r#Quu2BPdBk(>$%&@&dh;%NCqMc%Ppup?IdMGQC4%?{+cMXmtfZb1?=}h?#=$ac zQ6_QPT4&nV&A6fVwL#$Ew6XBdlT!i9rZ$&P`%V8g)zE!`wjKu(!M$7u_kg?Er|x;! zm5o^0E61I;vBi9DuOB$xg9*Gub-&V2k`H659;#HzFg-JB#SsTqNdI8+W-Pvjh!TV) z**h_4{FkO?Wl`hMC4+FN@B7SCuzC!hcmX9KN;)?;fP40|)g<+lHH~XcBcrkd9I3S; zW0eepg>SA(>8Z+nqV+)2c57%ID8_735N6u5 zr@l{_UM>2ZrG3u{S2{8|-F((lYjnhYG}+JxNnR9tx0b16aan!-Z=28vNMQ>Oyl=tS zvQSUn4r)@ubk@>%UXDJ7WTr+C?Gz*P5O4Di)k89GruP@T;iHg&_fmdKjr$WpU)HW} znIN+2b8_wOK+zs&?z{Yu3iFc$RiXagJyET8n7>Rstxv@rrqw*L;dZX^PmG`@{2S`!H_J!SG`>rl=$Brmi zVF8k(2Yn@6sUOx8Ad!o9qUdwEN|;tkFCw;s(vfUM()+&A;I}mqh(#Hrjbe_WE=Dc) zyn9}2DbDS2V;Q$nwLq&sV?-OdcMaQTWqmkXiY1;K`Qh9TAi%IkzX==CJHSpTTmG5F!dwBO-)IZ2=|Ho>gcWlSj z=d~M?DaQ;sZ6o#k#OnCrRUo=%A2|frl21tKE1|DR9mP=#j z_Qp(4?`X!d?TK_&OkUFIfTx%HQ5_vU1Qx1&C4a37W#r-|Y5Tc;>gadY(;14rbTeG5 ze|^UkX|DEfN@$ZW|Hvp9?-O{rnl4!*n!qxkw}I{VGe}1qMfJ{;8X{n}j|(MgW(mz7 zXz0o3@n}XROhcxBQf8)DdXIkkhN5^;JBxJMZymyKl#m@fBzxjtEBqr1F?fya!BjLk zS78mAA{Mn#R=}s5IlVF0qTPN1WJ&(xYq5WM3Vgg%wlOdi6>k?z>It$iu-p80FZZ$tA;DpxASoSA;6y?jb^U8~(O82_@#46bkrx9V z*T4u0c-+4JO=&8fazng@5z#KZpes?6gfep`Q*le=jpnuit8W5D`kd#F&4ETr#iyHr z<%XwFM(jdNY-aYm!{agd)>oz!e?#T9O*z_bG&Ja-+S)jK*ST^dKEyPJl{l^(|PS8KDIhPjge6abY1uiZNezj^Zg);g-G_-yB zj5YDvUnT@#HVRF8K}vfa&2n0^J2XH+P6`yOVYgsYu0!tpt;to8gJ9o0k0~IZhApC) zBu?HT!9Jshg~56CIP52$t5S(Y?CAl`_{ddfoM(!cU zS+P#v#9w^RE}Uu!6S%uP%WlR(wY*|h{^jttm%*Nw42z4i&==BsJ#;d9^JD~TJ^=`u zb7@jy88#biKWJ{gys|9W*0il#qKuqGv_(BA7Nwc;TLD?c7FH8=h9X%yWjx`eK1SWw zj;|4OgJHtfk2K4ZYyEC*UPWbp6x*{ZWeT+4jjj`DXpSwq(%WoX-s%=IqJy5 zzpHs-vy08epL;Ie348$kwjH~RD*qG3H&E2K>t2V_U!p7-8Rgag5ArZfbo$%(uHdAz zjA@bUl`Y>Y*TMQaqkx%{rwI#hF^jlxg%Y@r&x?-9T#jKHL%4}B9UUD#VC}qo8-;lkj7d<${5xF%aaj_7}oP#)Wpel(a0mAarL&;)%X3sCV67?3(1&X=7 zbiKW{pZUArec_wG@l%)idJ_2Sf@`-ZQ|P`OSlWhRn6?RTR)}I%$CH`3^uk zwc5ZBPg#4WKJaYj+9q^LA|%};-dJr)-koi`0(gHWM*4ra1+XbfRVqs6N|?5b{{a9n Nxo%;My?XcYzX1%1A1D9- diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 244c3c21aaacca335a33749f85187ba8aec971e5..7eeccc9a159aa21ff36229669925f36b0a4115ae 100644 GIT binary patch literal 12197 zcmb`Nby$?$*6;^GQW~TkP(g46L^`CqQ#wSX81Kdo=DT^G z=e*}Ve|+Eh=i|DDJ9h82_TKAWzZI&iD20nni46jQaAl;$Re@{A{SOlz_^-NXjR69o zP`j&ZeG>oZ^uf`>{*#5BEePbA9y!Tx`{VT^^wl}Oz?dPX8=Y1XENuLKQtbI}^mWB1 z%8r|hZT<_^4;y7VFhbx=hX)IPTAOD#8rd~B<(cMxwFwHOew)y0u{jw0ZXpnN_OW^M z!9yD>7cZYRE3?#Co`qk6DW=A-o&!%!6zuZcF!kgIVdd^GtDD|q77gUnkwm|0@(dvn z64}drJg~+al(vY@Yv``1;jLAGo{ST-uP3cJ1WwR;(qBRI8m)1lM)i~IZ*rA!R~@D% z!B>v?R2tqnp}Ass$={`k#Xg;$MdX?P4m9hoX3QH8=n}5d+>Cu2QG`AWLpOL65q5Fw zkDo zuGE@!b8eNDbp5G)AG_Fu*NPO{ps=IJhXllgqr`O%#h5r|^l!a|zFJP;gnVa!(1j*x zXKnZY7;5(3yHiL$y3#-TxTPP)*ww>e?BF>D?&$gL|C7r{LHq+%2SaWZt`YJ0EP7?A zxi#vnI7c0d^;60P5Er4sxt0b8)T}(FLaD4owWrviWYOa$Q}y~LKYcx)I0L%ewK0EW zsP8r$fJ7)g5-8tVS$B2pI!pS>UkisU`C^T>my+i|p|B^fywE>BhjgB~{Klq33(G|d z6{zQtGBGhRcTiAJP+xL#A3_ojiF+UY@sI_(uA(s8-d-MT7(ZZ-9o2Q!dzH>55nf_# zOG8GS910Kh?d={&fYdg`#l<`LP6*=k2XOlG=tPX||7ReBROWK6C zDJVY#eMC(T^+b&5#b#zI>gZ5{L@`?oSb=syA578MV+T*Wx!FNhn7YR zj@p?|$nt5NuFlow7O^9iraR;}tMw2F5KB^cTpW?nemT17)0qM1YllWgCg%qqTsXDf zMMx`AcpllRJY?w>dPYi}#CL9!F*c9IOtX7yFG>Cj)Y#1{szUNjDQl$0VzS0Dx>rn1 zjrh->KO$SF*mO*+tYF7(a;)lU=&COUBO~M3Kz`rFI(`E5M-XnuP9&|a7kez#U}Svy z#e+OS=D`>lnw4>xBW|aVn9z8_jQ>@iGKE z{$F``pemfe{p+_6*Nu&gKstQye{t-bizx|nc0R0S#yxYH?MwN(` zfwF~Wb7!ZiU zfiSoluR6S!nCg*aqE6$s`yE<_31MKAalwYm+7={+*@``8^KQ)LOsB*(Dm z_wOZAT{FhusQ*#(JjBtbnRMQR*2{6{hM~Jy$gFi&!$g}+)XtA?GW%Y-bvy13gEKh; zLovOr2CN1ZNi8ic*>kzddgU;&EmjC5ue4O2)7O@kChUZu-DFFnNCfqdvKFb(BP5d5 zp;50vk7XLI$@dduj~Ki`Z`HAgVGQ?cr1Xg)+ru~C(8CSia1y>z%g)DXg8wMEyb>LL zNU*NzVj+8M#McL^-nw!XaBW@AP86bk68*x&&B=-VNp$ekl=`AAw?W0#L;~%LO{gD9 zJ4vaA9!ru%Z+8CanPk! zdg<8H3%h02Z{m=KojUieNWDPBsTS~6;+mn&Azd&?csHI6az=EupU+EA;QegAv)5?4 z5gfz8Qmoywy(}{3nwTuXv(Ka1^?{{Jk$U<|y*={EnqQZaD(Z^bOw#3fSXQhQ5D{U|NC=uQDNbj@!9FAee;s5z>_y`-pG&oi>OdVW(%>f zrR}Y>dGS+mS&y~t*eujpblqZh>@hVG2DL&*a`?A^%8&3)h{SJBHu{zda4 zu!6f~P2>NX)s=s`dcy?ATLi^BYRuc=6J*%Y0>?Z^|Wa~3lrH_?*WaF_Re zGCzmN`FVps2^MBjaiGWO69YQ<9ARHpConpz@g`OHm(|C|eT?1^NOO-|^Eg_y0pz=| z(6ebdc)J^g(x?*gGR zHU3HF>?h57!uH_?s=EObtBu}eZ4+xVAQFsojO-bFwyKz9?24uwJJ5~CYL`&n&|)Br znP4Y?VW~m*PoOQBR`^`Rk%VJ8Iu2$Sa%oDw6O0fHd63J$dWY+;i8mSenpfX~0#kxR*X8rX8z=D!aPA8+ILVG}pt_LyN&z<4 z6~CM#D6h&B5govAwB=qD*7wi?+<65KGLJ@h}PR$IKSzgXV;mKey!dh z()=(7YZRHUX=Zs1b<_3Vf`7R5^eLa31ex$_Ml776Jbl}q(l^uY(w@xg^zHG?*w||p zhS$W`lNy5(%MqPr8<3IusBo+yaRg9B*xZ*7wGB61?H`FFVAmi{Uw_bZSErh7)K7|K z>o-HS9k93H4q3#FhDUNObQmKMdTq5u-9m4tcbXQemuO~cYS~LkMP*@b4*JKg5&Sr= zcc8V`&#s=Xc_l&#d6o?1>m5;?iMrlfnyN3N3dS=FP!R&JN^d+NYT^A_P@uNpA=80of&ZIrQ0PvurlD%6{jxAkto}EC8uYA+n)%T2Z1CNR{AQ2i zvtWEMx}+W2+-_RvqL%Gu+03+pfTY#Gp1#Sws+t*mI z&X|=?*D+QU7LvzeMqKY{9;|hR+w1pGF6*`?%~e#;#I<`*KQV1@`z(#PdUuq+(YQD` z&I%&qnTS^srjy#Z9CJVAi<2V1P^u2}Ba^e2x{#919YvMn4&2;FMXe#aItC+>7`iFQfUmfs8G0R8w zsA{Tg8n#jU9-o*`8Uzq*Zf&I;V$-~YPCP5{KOLQK587j&vAnn7F83_CrGHl#)&}P( zc%;-qaYI=(A{miA=zgc*7W(LavLVOHu3tgR^ak(85yf?|waV-U9}t>!L|hy#u_iL> zn##<+)2_4D9wUEBt)$6JmZeiW6<1kyTBIT8-$SqlnC8EcQtVhoK0}REbSbfv67sh zZ_aklu!z9g?|G4OzS@97MFU;eM(8vq8rB`JoyrkYTP*&_(LK9%o*Z^*ZHt~qcY>ikiGt)p|3eP@3n}fPvkmvx?jEf#SUot%aMA#d;5k-t0cL5z}?ua zKyBqWzJ*`qD8?~hF9~F3iI;pnicT(WU{hn@EHA zry-|%-78~b!ltICTF?3#Xuf-w_fdegS=g`*+wcMn;H2BSDb?n-_i0j2_)LyHQi*aA zT}c&UIb=|;w5-{=Kkp-HH@t!U;HjCXN#jpO&ug90LO|QUI*i6d+J8(ks~N?>OuBE| z|8xdwW)7_BjU=Q;V86(9`@t!0kr}YElM=vwf13evL%(mRC@Fb7VU>?d$Phy*>_7g; zM7U1__K?$Gd-*!01~51FZvp!MSOI@o2s8E9MSLfj_vQBctHegArq56!Gy|$!1v^4A zm5gSowJ}kews|645baGXRB^~JfBf%$jc+C~Ujxkq4;=zRc7z?jKWFyhG5O~>2HJR( zvSjhrEvVjrRbpjAw`kDZ&%Q6w^Kx^R?mIuiom=C@ve-ZGl_PeqLDjW0SxEROtKZ^U^o(j6G+%r2EwILUkH^xwxJE-voh zXCABO=PeKRli=N6&2+oKvreZw9k1=OGL*i5PR^c(7dGCnhc2uxQc6)ef&p!f%`~L! zWLykw`lIl_uj9+-ra`T5n}G8L`S!nkRR8x=CY6m-xU-Eu*Jy=E&ZB*H){~q(7NrZT z1$b6@_c_SW^Oi@qgUfeV>cJqC;QPa$^AEAz45hzj8?k(>2Tvj>rNY|R?7>;cUC+2L zUrw$)McBBwz>=>hvVjWdB<|9((v5#tn-8P8pFq!U>p{x8x>ji&zn^thqK}0OK_ECj z+gx{w?41YoVARzPU()#}q8^G^47?8*|IA^!;L=z@sn{484bP&QiVl}cdJkN@i!sL^ zenJ_2a3aB&7EYidEI@$aSrXzfSTRMngF>>(u3YG|S5Zi_g2E{|MAHiwy7`t}0FFm# zSX)`U;ej2nkJ0#yfOtrL-i_)Z&QOT1JQbx0QQ=-uO+w9pSxL6SkKM7|&Ik6{+%%b( zn1KDT5PHg=!6+q&It_)-rqHH$49>JX&(`V9ri*CVN%O7IB(+G^{>|TLD}gf=mPh7^8k;c!R>Zeuc^-&g z3==uH`Gm(4>QMe6`zD&__fkY$d|+Ir!g}VY*Cs~Kmen$0LPCP|e2omdA7ZvAk_u(E z>H`MwO3augcsq|VfdXAtK`Rm z_T;Vvn4r0iBVW^OJQ&9@w=#lH@)~+(C+hYwJiC>Gg*u=^+Z;*X;y|N}>SWs0xFUi? z*-`Z8HT2=bAFvt?8U{~*LOldu#5rmbBsfw5^V#MCm5y+t$qu7dAHSt^uW|Ae1Q*6-K-6x&<*{z1W<4z(vq>MkeX0QyaslpuRku+=(4}CGrS3!&zEYFavZ7lIKP+I$* zPCsa1T0O|l--)5-=KbM^m^03XS=0=#Rmj6_$k<*`3S{+wn6VuZWr3i>?}yCRivuzl z621Wc8D)9V(-^h9pK;!LD+UZmv6-&dB@`fPmIEBVjj z?AqdLE7PcUxlyP$J|x*-*yWCp&uIyiaM2a#`3o^xoRLg4D7y(9@{_(}8u{pt#aQ@_ z6D)Xa5|^enhL6g#|2VWlY#7NoOlSh)%~Ml8eyTAS$jE8y{@sOWt1sB?TBkm!iOlV+ z$6v(wW%FHfT!UFqh`})~&vh1PJ|WwDZRO-Au?z{x(AKAwM?_ac1ZzELJ-Y> z>22X-Qm%O_a7(4}6$wqEO8JN$>v)UI)nSLp@4Szbe4mWE}oKGCCc*x+sMzn;$wni$aMd9 zU#Q^dGfn87YP}iD3UY7;DCTcJ6GQAJxOuG#SFPM*Nx-PxH-~QW@EE4}M1cM#T)d`9yg^=3#MyFU;^7#B?%VLw_;8cJyMBP|06ui3BFE zLG}@9^CGXae;O;)9^Kg<{w9Vk75*R*f%>V=zn)^E+Q&R3%5Uh^&ZU?XtKN=Z6lf~G zt7^sPi2QlC?<8udAkQh9yuurWJPO(uHv(PyKQ<+(=IZT2Khwjk)o~IQkm9}k7$*mA z5%*g3j%(B@{fY1fL=6(*81Ula-8?NTLQ;lCiNNdl&OzH@E>Pi9*w#-hlD#h=DZb_vf^HjGI#=A z7!HT>Dizg-i`(Jb02_7`AKlsAIDEu*2N{VWrT&PA`WW2dnfhe8%$dQx_LWx%<{9>uj26o8|5<= z>J{{SyN)U$k(uY_NUD|_@}Gvno?E@&u7igjT-3J={Ar_@8o3n=)vU;_t4oxK7V3y^ z_7aqE!W_X%EH6SSHQ(bc9J~A zo+Lc_0Ytds-5nmSyV<``VEi5yXU-10)>L@e-xrjC4@%^TEjtv%$LEoPy@{G3!H6Mc z;p!lSjTho5{v*&lx zWp<=L&$MG$rob?iRl}g`7iOOV@2zEQ&`eETrz}z_46@#upImm*tOA4DH1Kwh*S7yA z>vfkhtlWy4o12XwpL!D9gl!MYJ|v;`q>%RQ7V`6o7M_1<#S{VQe0ZA}GU>&x^>(xf z>)pso^zXJOcV#5cc!4etq!a`s-_A;e*}L9Vf7hu=nI1x8)FhH6zjcj7-qjysHoeu=G124 zACF6oN80?v7#mhYpo)OUaMt<3!rlj0F0^6jlJP5lyOk6w|3A8wOgTIlyckp3*)?xV z3IUfm1H2+G43b*|zuLS|az%i55HI%~>%1wLM_W$)5|Pa=f;?;2Gg3;wPLFo1s8)nR z7h!l^V366Pp+P^p=Q*AwPsWLrX%cuS>g2(Feu{dhYhBBFCC3GlKP zHf^6LZ*vp7IY`7aCUYmZmo{1G$r~}8f=TF1ch@P&!S~=TMbm)b`Xo?C&#m6-uhfh2 zFWoJo1&=iku(h~4LvW8TWW`;$pa1+(oNr%F;eGb4NoicnMa+_thvs-UD@V!~$?0s} zh6zAD00B%)PSyrHVbTGg{(u7+B_f4zNStMG+bnZ3D#NlRuG*3lsYTHVa5p&RQq@LM z)Q{P}o&?lhO-FIQ%#U|z_Ni*7ymw!jF+W*^R$YqYPqR4dCa*;p&4G}P*le#s2COYd zzC({{FIFybk`vJl5mM3-7~@!)tbWNd_LU?8-i%Gg=Z2!T4pGV^fqy0o*lp%H$`&_H z#-^sk-QC@l8(T!B2L=a&_1Gi<Wc{fw#u0 z#Xdx)&A(w?@aD=I>QLnCQk1rRQTedoHbK}=&fU+i@u6Vbo3BkORuROxxpW_2PPO3} zaLcDXy7GK-gKD2m6fbkEciGqGv$#%uAtWdSRt}^&?Wh z2cgf!xgFlj_cmUw&Jx0YI>PpGD>vFz>UqCQ1GCpRI5@d1M+gafBffa^%fMKGCBSGr zS7P%q&ii~hbv;7*(h&FOi{Epz*8Nqw!mzxR11g{H#@a9ByO$-e-fPugl&;qXxF>ig zUn%Hb4Wtup8D&Mj=`1A8gW7ZJqUeb zsdQd=Pv+<%P_PX|Yi_a)WqQCFBUqXgC(hlcwl@63%vGC1X(CBr zKA)8=AMx;@k-ok$Q+ri4wG;Q&Z|j$?0u4*Hia<2LqOFT^qse@YMd~rYvT8(}7|+*P zOKgq3e>YZ2j@=;L?!wYfVz-F$j<@!dce+=6Ue4PC_$`_whl6~8UUH4w$RNuAzO}^i zrhDR^%dNDYiAapV`W!=504N7kR`K~^pAI$IFU&W#Qif^&_M1f)p}513XXLV`y%4X2 zJmz|bAUWL_nWo@OoP$p_U4h^AKjD2n`9f1053cxKFnZKUktDsu3tLJXtLQjv|Na>l zASd(L@38e0?L;dZ@?m1rDk>^D-M_cC);>3%xC$_az1bXBbU*jkX(c@Gr8jlD`#7yY z0*;t4zUX32P9ppqDJ)btO(g==Gv=CE@!?xd0D#))Bc~^5f1$R&F`P^D?8tzSOOZPJ_cxk4Qz#JN&Bbl^lHma^J$2c+mG8J-a(4Oua5=ZY5x}EY`@(&;{YP+H ze!VJCMGhuE<{{ZGEl&>?)CHAVpp-Iu9QVbD@EbGDE1 z8_C>u0)^>1n)%Y>yUl#rshzXT#ZB8a46YWG7Jgx2*ky_(S)G3)xAMqwG@aJR|3Yg2 zas}d;{D&)0oAy6lfdLulZ(aEZ{1bMK8fu=zG5D8I>*#b);L4q?PTy&e{HEWyfN5Pb zN!!<`xsCLWY$eq{;GNYdni#m(>)%J}81|APB}XOXI;J$vAL}iSGoKQll;q;sjt>^6 zF_z$E?j_xmv=~V9X=@5h>|%pT^yk1$DYjwx{=k*#I{tJt>(OTwMf=jyQ7zk^s5Y*T ztycCvmJA5x4L?gwBk9so)^uOVR{rxBE_85jX_)|~egYcYz?s531Zo!2{B0;b$-HQ? z$X`T^!|!i0_OEMt5gWEk4R>n_8^b~#>q7pB7GK8kHYeEYWI-J7^6Wlv=N8}ipYWak z?rHoh%IE)`4Zv5R?vv`v0!!o7!;pn6!Gmjc=Jsv6qkwJ0CVt&PLwBjjjFqR)Zo*%) z$3mi#9y&e7L;s}#Fs#x;CFp_;=SCcWgDgf1!U6)&n9EB_?u~~_de)^3=JKJTsr3;~ zuBdQKp{Q$SDj>{8$8BE2zgNI4r<{nqxx{zfRlDV8cNMSM^mdZft5{%CciX7DhHQWW) zYmW$(qSX9@r|ga}B<%w3jhIo4Itw>haN2`MwsR*t^+FVHkb~hB=u~@Y;-OeQ?{Itl2Xb8ed3chr~T;)#yc|`V&I8Dpiqa2Mu@GMe|`*_ zu66F%352~LXg{Lboy0pt{K*hIl{=BUzezkzqZB4a)RqhjW!wkP^e@~>nfS$hDu5-t zFj%1db4YxoHNx7BZ?D-yYU#BwAZ7A^2_7F$@=st5!21bPguPGBs(*t5NRml9TS|HL zG}Yvee2j!Kjq|8eLG(cD&xqE7nW2onduM4BMh$Q}GhdS4K|d=^UE(^8a(x<(AWSKl zCbiPVn9(SyZOf1DDpYQ6C(|NAL`>d32~?-SOR0Ksm!8GaGBQ=qtxLXs{fZVz*H!h& zr7k&%Q|k7V9#7)Ea6tJwFjh7^`mZoy(zrJKJCz|YUh8V)I(`zgk5rhrowU>dMZjzt zI$2J6DXR?F0*7w&upFW0)Mb1MtIGg_)?*a=MxI)!rEi`MFKVSvbUSxRJC3eU38<*} z_Y;J@uXAF&teIYW;gCliKH-FV>g`uDp9J%^TW{re^ge}--M6v5pKV@d1W+KEW?9a# zZR=TxZ=J-o3#*TnJ^OU?n{x7(mNYJ$nbXF8>v}8~+ji#s9EQ!!E1#gAOy2D)6`{Yd zO{=OiXJ@sVnwpMp@7`CSoemxyo>&>CW&+Zs)16VSs%~lSRr1t(wM|L&=kO%hCRAwu z`Unsto$l3Oe+31tG~79%*!%~@nrb?EgKjLlpibjYTF(P#Ou*P__NYtb$n5XK z3g``>^7r8+0RaJ(R%kbJO$L}Z8${n54}spO&-}8ex?x2O3=LH}ZN?@Wvitms8`b8i zu{+`|3Da4b2o@;;P|)kXgO(4UG*N8APmc_;VIv#GbSzj)cR|-qEfKn309jOz&F~9WdYTIspX%vDlav`>BrL1r~|9#taE2opEWFdg6+wSAX znb}&lzoI){PQkW-a1IWG`N*d+7dk0n5ntgVR}Vscn@RH(xrI52p@rU_`dcwtWrE>d z+=tP~0kN?TUWFQk=G&s>vd;;rJHeeVilX`vu-$<}Bk#X(l8du5ZfL@VHfdW^HE;6D z{viG|D_-qsQN?K3@l!TrCC+=vHN`0fJMcLI=J>7WZ=f`yPTt-Ckfm3urwa>t3*sD? zEB_IU`G4J}d#rWiqhHF7W87g`3rg=p{sTaHn)HC8Zw@hU_$La!xG2FcJ-EO^f<)-9 zQ!c@MBb1BRIp2O=p?FiKMH7Q>SYk+^ikBRY)dgN-;NIUKdV=Rcs&HU1;B%>}>*UiM z&W^k`{s1wH{H5)W7Yc#<&>!7@QcW!_y&mn)pNT*P(xS1z18n!1#1GS1s(%;jW;RD< z7>}f<)WK|e(g)vkunR>|Emk0{-hOxkIV(KEJDE%SE+eDty1{y++F&C1#O}qBhcU+q zcklBD2OnZb7`iAl$ac!hRMu0#y`gd4+?6-@c2!U582TRNNz}nr;oM7=KJ)Bbk3yJ4 z){zyr^9M}IX>9L*qBmGs#cNT6f9wjibO+*)!G6`ZNh~g-reYn=TiRflJ_F{2fJr6a zWO%qBU(S9K7svb$k@__K?0P)~x15zD-^}Mt(mdwyI_94z=`xUP%!uqR@n1>uJnZ-F4L_ip`{spLfu>|EU}{Hhqy`4^!1qX z1d$61jU_BmLIQ|{&|DIpC@PQ>69WRhM(H8aey|Z z%Ya?cmO8qeZUdAh5#9`VKBn3wT-ym-9d)I>dfc&ZX9oyW%Aj**z_DY|ofjrTqJ3q*N zvG(x=%Y-Lh(td6}^iSm;>Ls7B3Hv&RiF`nzRM*NRmd1c0oNIACi6Jjq;NruGrab6j;P~hQ{^ibkYe|=c{ z!}6u;>TGM!j00A~Q#ei>^5Op8%vMX&S>G4*XC+S~@^_t)9^;X$FNjQ1i zw2F@P&fe3{f63lDJzjifTqe!R{IYY;R~HSxG%xZ^Dtct8&*REQGu-dLOIRpkxf^}M zDP-k$@~D0))w}bR@JU;hx&Eg=HVS4rlU&E$jGb?S))Ckyg3*y@ z*FiWM!k)!+_N*Jd=OVXNA3ikR-#eO3W8!%ZVO4)71O|baK~I(B-*{#2WkG%4jAdOc zcqTlD#9=A~K0rfIs*&D{_kRYJe_K~SR_c+f^T(rZ*sp_U%#q6him)lyx#ljJ)7`68 z$PT-z7TNqVv^-urEsFcz5dIuQ&dNe+&fL?{7q=j5b-eNfYBbQFmC=xx5vR19d9jm3 zEwlkSKn(C_4>oLMO1XVxk9_$kk80w>4LU{S#l5#6ybOkP8+fHyQ zTyr&+ScY}H)Y!fw>C>m@;dr}BCJ9?q_PW?%%g^S>&C#p6`_aML(P}ROI=pTWSPO?V zQupbB+kjR?^z}U#6chxJDlA@H+d4R4(ulE5Mi?cR=~c9KgLQN|OO2cSkDBQ2(yZA# zXu6tPFy4sPp|5y~l#@4bryMZBSB_q4X`x3ii~&znY2cJ)BzaiiXo@VwE{Y^evsD~y z;c0{yTv`_d?P!IymJk>;)NDu_N57>30Q=_+CM?qI5<2I5)#Tc zGGTeJwzk$@O7lg&_UdBJlPM%5M5TeEK_9tv>@?p@OVdPVS>(jwYTuBQZ~`&iRf#J> zX^72r{7zDIl8>AdBm$n)6_UCo|kfxOmP;u4lkiAOTN@lI?59PKlQ*x@A5wgZi_usH~w` zG$AeKPON#I&CQU$?@K!w_sVXwE_QU|wSVDO;e~1hty6B`PvvF&;$aHos#0XUxW2i( zfgGQlC|X6exil=3q`-=cqbn-~=P$qO4NOBdIQ1}L>l-`4WA{{H?;Uzy>Nkt3g$%NvxsZs2VBEuI!qt6cNQ>q+ez zV{BMkn}WyQv`8La{$)!GhSvw2`x|xbMlX82W#{Ju!r9}NQ_5yIJt_(c3cQ{$>J;nA zKYiL0&d%QfeOms-3+;T3k)&8Jmn4!c)l^#`kjD73LcnLD^W&v>y`=H2rzt5Zzv*{@ zp~AYWd7V@V%GruV`w60#zvA!+F}UXwIe@N-q0Kx!bw@&ACG~zXOeSS1ujz|~%O>cx zc<&Yn3lfR+rK6`my1p?ZdP{W+EX_yU+|f3ev=>H>N6#cyFmlcHD$JF`57$#q-KG&ycj>YOsq~OD?z_OFAjh30xI-m<04=s$ZKvyY5ajEDW2B$uR7^#JP1o-%b z0lixqxRiAiu(J^F7L&)1A4g9D4Qw{ylgW-PF6N#&F;yGYVM~ow-(A1*+?)Qj-k%Xe z;N!lyNjUIhjs{pDAUs z|19Oxr*exfVzzN^WR3lVO6y&AdW@;0<7!3P&Rr{oWK+!h+rUkNH0RAfnd`}yVnpjF zvC`GEf1=S)G^Q5R^LcDT-}k?~E|vLqR-+h5U-}Gds`l#xxjaKYr=8G`pifOKLs-%b zi;brhblBe-udBx=C)IRxsDP$?{mQ;7H@R{0>eZ`&h5|7QhUlK6z%k4v^M{oWVF#_( z3elj(!vokYq>sn%fu*qyxl&%^v80Bky@9nSu-mFc9boFGjA6#d@gSya?18CzU)&j< zItTo-J6VC@rhbsmTZG5TVt8D`71VC+`GoPAM>6^Fu+%sER6K_vbCyYrpN@}+0>N?? z84zwZ?Sl)9)3oXATE}mb!osOB5h3DrGOyjglKr4NO@`Xt>q|!~^Hgxcd5{m6lX9Oc z%cd8^jx#0)CLt?It)%wJ;IwvSy4?7VB~|xh2#2RfNs31io@I-sRY38wr>nKt?AXug zH5Z?-$tN|o``b#AU00|Q_P8_2bgatAg`O;9bx09jv`_o!2x8EN_U6ih1wK+t&*H}J ze%{u={_ROw-Q`H)87wMGapR(^&55sVo=SWg%lay(ni8T<@L_vNPPU^%u8!miV^Odr zFwS-eSRvKFK7^`tdo0&Q8si2`>@ZMq?a=qgC2Y7x>CRUXSoqsVaRV1$QeC(P}tsUvdI)2U}AH{Q7ys83?ag7%K0PA zJ9L#($Uw?`#Ug@Dx38>@S_uDWMRVUj01}R7F10k*uc%8rLvQBVIQ)3F=V~}3^Lqup zXJzXtdyFaNzNO!m#=xjvh?G9qN60Z)KUgXr?4y3mna2mJc+KKMcUrCB1NtFbNFaJ( z9sZfycsJ`nVGu@$Cvnu}(@sWS2!3UWIK2(p#M>@u-91mG9ZOlFi0om0E2iL~U7VMs zAQpA&`tnZKY~u+0BWxaFJj$c{zp0=9Qz59xHHOj$l*YlV{py1BMPcIS+ZpYm8012q zl<*cp_WJlf+wGuJky|Eo_8ezZQJrdGA#GX>?R@R4KnG$Z%^^J{CUZ}={VvInNJ}Jr zl^BS;PS!sWS+jF4crkW%ppP0W`{Z_*jKu2!)Pnx!tgLtU?QLvwN=u1pU`4=7-Xf|C z2x2TsI0j$7Dk}>THc`3LHL=+#w)Y7}eZIdNp(bYN!L^uYT2yN{NkBGOT3Kn0cy{x{ z<3n3IE$WdsXnlyLeTk0diO}Q8wQPh$bp25uZ0TEyVjWd`Rx?sCQ%D;u|{s9T-D(r*exQ_)|iP|;B{dcon zF;n!>4}Wt#eys8k-5xdl{)4R#m1DQTpp@8w#k@Uz=vtX^U5aD{{yBt59T#^}}|#I-%^S27U20R|N0*f(!lEVyS0^>1D_ir4Z@ZzwC>uvw9@n;>(*}$-He?G$Ni)7zC>Rw|0DnmuiRtypO`WYe0pOl}8qU z%&8q9lKjp0OZKy{u<+2(&|){H7INk3PLELa=O-)wagj5wo-!ZNHgbp#36T}b9>?N|F{Og$BegC8_3}Wr+G-S0H$b#}agBJp(k1S0A7F-A zb;-7t(&psoXtgt&vx5AqXDXtS&Md91U+e0M-D#Nu(=2mpuAQ`6cNWUC61H@?NHG35 zpkpdOUwWsF)?&4#GcTh+GT9{AgVciGlAD>g`(MkAmg3CfTY}s|W{1 zUt7(yXbfC-yGCeV9=nM5EtkC`AeH44y3-xNb}+IU9m}1f7sAJsK|6v1snVSj8{+DE zcy~6+%H<p>*XWRkv#3f?R2x@H1 z04y+3;3Ur$vexYQfVnPTGKIUoa<8cY6?vrt%;eE<5dvB0c=f-v!$S|Zo0@lMKQx;y zI?_XAo$Qe1C!N)@{%4W=jMo^^c2M-*tPQU$2Dq?_=7vyvg#y z`6s950+1g7+6q*X=l2{4^PKN%08aCMHP8mjE~ zru8(Kcisz9+EKz1rJBY|W5zHmO*mfX{@3i9aUtNbuCw-sf^Uwz_DB|mp~s5$o4zD} z2l5kS_PAH7>9`^5vi)oY7{}0Gzppa!!Sho|gL@rJrA**g3;1WbZZ|4^X9N3a-TxGg zA+Vc4H%;3S+pcQB0qGv1Kz}}i>3;sl`6V2vU7vVXAZCkMtASN|>ya^mFH;lkX z^Z)7C_}7>9|4@il7lUFS%!_})=UIIorQq_A|1pNrJ+CFyT3+!kq3rdvOKp%~z_MS! z3R8yzPQ?;k4DtoXYrXoo%9&VNSZDllnbhnc2dq4Gbo9;i%#5NrMI;xQD)ysUn33A6 z+ilgt)T+nh`~mt%Fk+tvG&(x^i2Tt!b+iqr>XMpU4+MX02(?IEJfDe0b6$kgSrFy6 z6k@(MlCSQ&AAG@`MGs*RVSfa^O>X_R-)hgXD=ljhyoucyz!A{FTK!HroQ9c94b*DT z5xh1rz_N)Yy!fSD0b?-xk5p@rPqdzR00MeQDSrU62|CP$hS8HRPP~wNLE0F&I81sW zdz- zP3#2!F*%$=<~RZ*+Ys?{w9go>a@>94P23JACXSU_C_EA)q+Pxm{MVOJrz* zu&Wj4M2M80F(P%rgS5D%ex4M%D*{$owLESbQH&yZx)j6<8ETR-4su+crKc@MNtY@! zDXQ!HC#NYM&%bCs!0BAuS-6*!l;kkiIL04{m`vs|1WmSl5Cf9h&3VHLBT1zqNjCy+ z(SP_e${Y%p(|0$&F~LEW z=CASM6Y4@!t7k|h(oSJFen7?1j8}7_T3bpd#0y(mvPN#I)OrjRZ)X-b&eQo;BFCsx z?#)-(q)9v%OBu0RT=X6Gb2dGb;5YXJTNSZRQ9UW zFn=JkjXH78S7fSRz?9QRcY_`-%FNIWf)M#Ke8VhN1S>i1yhVa-G{Uz!B85G&4Os+q}vp^F_dS3^rL-zU&IeQS5 z3}FK}II3l6jAXB15khv=%x_K9?2W#c0!8$u(UrjddhWhH*|go;6I!p|R&rT~{PmR3CI4P0sXp zE&dW%pGYS?k@=)CPeC2?w50k{@{9^qB`166lDZxF_D6U@Z4tvDhZ)R~lH)3b26`Gu2$ig(rhmOJ5M;9h(u=J@!B!2)RAXKy2COWEbmVqsZa zzXs!P9B%qnMsJtRR-W{9vUcccfSmnm{qeoFzf*rJE?ymY?HMv!Gk2DHZnMU={Jqe9 zDJ+VX=zWjl*E-CnpYN#}s&i?-yV_`e@Uwq*i?iOUfK2TvGdo9C{k#lg4=l1V(S-5G z=?VT-k{P9i7^sHdzJTBg+s0`>Ozh9E7Too>5Ba4rT(wrVh>7DSWU_u3Hhm{LZ{rJi zoswX`sX{{#<0NlNIhq+ZU-eR-_$H{_8IPOOzgj7kESRQFhRyjpCHE`7$+f^}3r4Rf zs29Fqo6)w3{t(!)#OGwyv*)>`+Ru2#?mDKr$^;v`mzIWGb=6W(@8-kIca4d>Sb<5f zyzBYca~CWZo+}!HA9cq-uQ@EtqXC-)`H{331|t8&A$g2|_RHnivVLq2)lY>FDdz3UuPxN0PpW zPiby$?XEa*G)K?FJ*+hzI%~5^^UC{XGJgd-3lRHU!8vjJcr+VvLr>{g6q~@V$^rz4|o*ejdDp73N&p zWebOsVBU`zY3&t@zO_yVi)RzPdM{fj;}au1#-lvO)uW5#VCa*~l6HE949n}I1go9n zCqp&h#?d|fZqM6m_4@<^s$PQ$^oC65zMK%w$(WSiiUzKU-C-^(dn$e7gHJwcpB^Lh zXkyBNz8T?FMdm>Hi>fThFox!6E#(tTWc=1Cs0N?2n*GQK7?43ni-AyIqThUKp7}}7 zBX3T=@=ZBAXNtHZW(^BB9HE9?Lw#+7N2nmmk82xIQC)C4LQBIulcZ+c)cWW!?T6!U z)U3QtR)&3I!V=-t;-xpUJvRcY82Mpy8w3@yW)Ihs$Lv&`)clSEac`vW$4Vz)v}Ly%YD)9>&bmEMSuZ2UW$ysNFhLB=n;;B#$GPaEc$xK4PcA!&@RI3 z48F@!4OxdR58<>gU`)&TIujzU>2ppw7Kcw^3o;-Ad^0%CdnZNnC)E>jCt-3( zj(ujF{?rA|y1){-KdIVf-!uh-Hq39p9w6UyZuG>I)a@yRki)FDFT!@NXUKXm4{$W8 zbAO==xEyL`%Y1u}7EmfPJ>4YnzLki2XpB6kWPI?}t0`>(Ez8*NIS#&mDQk6*g>Z8{ zH4$}3y?HJt)pCHi&DLgNK^2o-?w5D|rc!TAcJua5ZmMr8vcDwl`Sd~=!lBCKxBQ(* z<&rCJmx>`Bf)2T80w2ko63Xdq77;RoMz}QP@Ilyg_Lji@7Jog>t2ZSPIFOxP8M&#w zuIkxIpYeiB9CtP~N6i-adyUwNZcm$zGSN@KRx4D>oGdw*B_+0u@K}y@Cngo`v^!<1 zHjA9t|73x(`-gB?zRL-XGVZLEtYl?MQ=8g>xp`y{3V$t-WCxzho-59;6{=Ke*GDZZRV<`#d6l;#( zy;Aq-6WpsIYwvY5zqs>1dIqg?v6D~m5K&h6n>aiqg7~LfV5#vSD=sgW(-o&|*^SzPoc4~%F=h-;FK_uN_vn!4A|DBut59u@*s{EpQB7`FIT=wy%@l zRZw#`@5rwcyLp^g(B+-Ge&%5vu2EE%jkEd$HGWAbY&%a|xn;RC-h)YP(y3UF?+kz> zk?Jcg3kx=F&uqpEqz5ZsX*gL(ROoSvwwUG}S3|Y1cHDn$#6WI=E)_3(v@Ddz>=Htz zJHL|l7tFoheN$l*G80~Oj>!PnQ`nbU5AzCf67HGJJ*yugg!veQ3pWFrn58jhdA$%X zhKhdPX3EGg1!r|rAM}u?rKNSQ-&eo|zWifiVn8cam{Re*$G@hiqb&;QtX}JsY%uZt zWpiL_Ne|?(3ytjGE9wEB}bmRW4i;*zijSrUiC%IH}4wH zjXPEcJ^A|PKUf_wUG@M|%Y_u_O=51#=)0J%Z}h(3RWiLu!m~LtLr31+^|7wTyNxds zg{;e3o5bvi6f@mDlODXy7+oLXI6CcJvY1V`1b%5kVXKrIkpRe8X`rb1YTMrN&T;SI z_=*BRFeLI%+Q*urZ*Fj@30*jC$_N-x{UV5ywdVIy45}cLjw@H z?ImIbha@{z6*>H2h=~V@RXK@Gw@29fH(mMKY+`kTRkdac#(KFDkm^M+yQF2HeF0Ja59E&iJ_%qFaju>?qg*)9|rs z+r~)<58!WgZk)t_{`_%b=hwl7YO(6SJS<>^JSuX${|B(x0F-xUeHn$#Yt!}o``R)p z>C=Umif{l0jH3AUuK8POg5-xU_wYhR0&dv7>9`Gl@b&N6+kSx+l6`Og&N(zwc#F05 z^TYOwYR|3{4-K4to}*RXbY)MFWWd5_f6K7Yf#1Ict(@;r;`L4K@;SoStHng~UGZ?U ziIZA`WoI;P=-~-K^W@zCvx~3D(bDBSBwU66>K1_kK(_d`dqw{cx-i~pfUdcaQ09*5 z{|2112{UlEK5|W(vGUjNa3Eu$eg*R1owIXH{c>)WJLha4CHk+d3R**qQ|!gT6qBMl z)Dv0n)+~vt+yVyQ{=Lg|$xVlluP1ZvL{^7i=0rX*m92NZIQW$n*VjOBm@#1{7nFkP zoDzZWoY4gta5_u0;N>nSFO%r1Dl3POWn^c^0{y*ll50C%UXs<9ic@3t50LBqLC+~e zbLW|X>mP9~OQWCs+lOPg^4IMI%ruTRZ&Jx`BJ@9fjm*U+!1F6hWAj-m#rl_65nQbE zZ2Tm4{r>TEZzU7{9!E|G3_xh zCOSMksR7m%3n3UhzRH&DF-})Ce9hKCuy`nK14GrHq=nr)YWH>)D z6qqo(8kU@7FmXtBux$?8B7|Q0 zn|@=4p?=dnD(yMHY0_rl7-4x}FkTgoOql-L?^9_Z{s*~DOxINWHzH?D|6hsRKiT#r z9LvI+KWF~zmyP1I7u3WFQa)K58b;sO(@P`agBkpaM7}|`dW=J85{ww$nAlhkZud4} zNQ`QK7yNx!E2@J(ILMWm>%9-`7S6E%mZ}JDuP3u2`-{f@ch6DcwFTwA9_-YrtDZZy zbsNjCb9gUQwgh?`1tydJcJo(~$VdObk|gzeBsmSA#UMY}u@52}&$fg8N;jjwyEeZY&u+ygT86=XoL4aw$Fb z#tXp+ucG){lZkZ~#FFr2lu>e5R~LO3dH`r{ZVrBFOtdRwssA~Zbdbo}9waVqPX#>K z|HwXOfdr9#n?j9Ne{)?YF(8|V7X1&Oa%#nop2N*BFO1A4-WNXpB=dxb#-MT~1AJ{d zi5%o>q8dv1g?g?+V&C#pU@hgJBj3Qlz`ufCzSgIzs!IPgm<0YO6YKO8yMAcMU*9(% zK;9@_B~yLHW&j=Z!+rqGf_gdW6ZAIaY>s&U>WHEJSp7)-?w^mxGjwoL)S1`}O!9B= zj2M_93GbQU+%k2ml0`s%lV^CK^f;AEjXE%rxM)W7yUGBJb9~0-B z{(<1VPdiS;w2Df3K=jMFBd_U&7&YBnt5=5Jkf|CL=siw|e@zB~icz{z!jXHUn!38% z1Bb%=f`Sl$G*uiI+^?|t>ATXNQZF1MPu3dwMS>vQ&DQJ}PGel3-{yq{N-Y)3i4p)g z?WLg5%dEvy{6(p<+YFbpaNR&a%(`4e#eMgNYM|_3$VB_#-c8$qbbwNptf)i zKVMFi9J6WoINo1Abm`UD)P#qLPF99_+E%oO3B9z_N2PQxfY$1@-h4J32Zdi(y{z zCAs{soC$gfOlh^};dPYggf);bz=%BRK{`H~9~j6+2dF8S#dCXPUd6%z6{(pz%?ro0Y>IxUApAaU#o#E99 zm@u5{#kA8~d>S5aEv@15RzGIaoPq+Zf5W88si~>!ph8-ybiYI#BSPHL^Ab8_wn$<@J(*Ew+6S1{)lkN^^$42`e7e}fMB22 ztFf|#@&kXfKq*gg!vOu<`g=4Ixb;o!F6FQD)fuB<}rl>G8N65N1oGLsOpwpm-!}K7sqj zN17wxlErtbviD~xZIuL2$0H1=XE?9{uerGCKFzJy!WDp5c8Dw1TM1;uFlVd3f|b9M zYjVR;NQZNKoUGuCBu1~8!Wu#p1k!?O;M_V@WUJ91wfg`*n~6XKfEVzTO+@q=vVl)GHC-O8j{HlwTy}!=;hhPR<_=Kj-wV5#Fo&npoDzMtGxS457b%hpA^q|{hV>$$^nHHp VOS4|*KnOSJsj{Y0se) Date: Fri, 22 Apr 2016 19:20:59 -0700 Subject: [PATCH 073/228] ROOKIE MISTAKE --- code/modules/mob/living/simple_animal/hostile/mining_mobs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index d914bc5943b..e3631817bda 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -635,7 +635,7 @@ stat_attack = 1 robust_searching = 1 loot = list() - butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, obj/item/stack/sheet/bone = 1) + butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, /obj/item/stack/sheet/bone = 1) //Goliath From 7ea131059093081dff4cc0778bcfb2df2b0909e6 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Sat, 23 Apr 2016 02:58:01 +0000 Subject: [PATCH 074/228] Automatic changelog compile --- html/changelog.html | 7 +++++++ html/changelogs/.all_changelog.yml | 4 ++++ html/changelogs/AutoChangeLog-pr-17036.yml | 5 ----- 3 files changed, 11 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-17036.yml diff --git a/html/changelog.html b/html/changelog.html index ad244a2d43e..4a19b8def47 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,13 @@ -->

    +

    23 April 2016

    +

    TechnoAlchemisto updated:

    +
      +
    • Goliaths now drop bones, and Watchers drop sinews.
    • +
    • You can craft primitive gear from bone and sinew.
    • +
    +

    22 April 2016

    Bawhoppen updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 28d6b36d9b0..08b9c637065 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4584,3 +4584,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. nullbear: - bugfix: xenobio console is deconstructable again. - tweak: syndibomb recipe calls for any matter bin, scaling effectiveness with tier. +2016-04-23: + TechnoAlchemisto: + - rscadd: Goliaths now drop bones, and Watchers drop sinews. + - rscadd: You can craft primitive gear from bone and sinew. diff --git a/html/changelogs/AutoChangeLog-pr-17036.yml b/html/changelogs/AutoChangeLog-pr-17036.yml deleted file mode 100644 index bb803edad18..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17036.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: TechnoAlchemisto -delete-after: True -changes: - - rscadd: "Goliaths now drop bones, and Watchers drop sinews." - - rscadd: "You can craft primitive gear from bone and sinew." From 865909bad24b0dfefdcad9ecbb2df77dee6b01b2 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 23 Apr 2016 03:06:23 +0000 Subject: [PATCH 075/228] Automatic changelog generation for PR #17033 --- html/changelogs/AutoChangeLog-pr-17033.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17033.yml diff --git a/html/changelogs/AutoChangeLog-pr-17033.yml b/html/changelogs/AutoChangeLog-pr-17033.yml new file mode 100644 index 00000000000..b002c4dd72f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17033.yml @@ -0,0 +1,4 @@ +author: coiax +delete-after: True +changes: + - bugfix: "Non-humans are now able to interact with bee boxes." From 6a2820b12d0ec5b6ffda5869b3ff0499755a1c08 Mon Sep 17 00:00:00 2001 From: c0 Date: Sat, 23 Apr 2016 06:56:58 +0300 Subject: [PATCH 076/228] Names of loaded ruins maps are saved in world log --- code/modules/awaymissions/zlevel.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 29773b77657..17d563703d5 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -114,7 +114,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away break if(valid) - world.log << "Ruins marker placed at ([T.x], [T.y], [T.z])" + world.log << "Ruin \"[template.mappath]\" placed at ([T.x], [T.y], [T.z])" var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T) R.Load(potentialRuins,template) potentialRuins -= template From 6edea041a97829ed56c909352aa272d0064200eb Mon Sep 17 00:00:00 2001 From: Robustin Date: Sat, 23 Apr 2016 01:14:40 -0400 Subject: [PATCH 077/228] Update hardsuit.dm --- code/modules/clothing/spacesuits/hardsuit.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 8117736920a..f72898189a9 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -482,6 +482,10 @@ var/shield_state = "shield-old" var/shield_on = "shield-old" +/obj/item/clothing/suit/space/hardsuit/shielded/New() + jetpack = new /obj/item/weapon/tank/jetpack/suit(src) + ..() + /obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, attack_text) if(current_charges > 0) var/datum/effect_system/spark_spread/s = new From d3149a880d37c6aa272b1e83f64575d0c008555e Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 23 Apr 2016 05:20:27 +0000 Subject: [PATCH 078/228] Automatic changelog generation for PR #17023 --- html/changelogs/AutoChangeLog-pr-17023.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17023.yml diff --git a/html/changelogs/AutoChangeLog-pr-17023.yml b/html/changelogs/AutoChangeLog-pr-17023.yml new file mode 100644 index 00000000000..0802979f45f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17023.yml @@ -0,0 +1,4 @@ +author: Kor +delete-after: True +changes: + - rscadd: "Alt+clicking on your mecha (while inside it) will toggle strafing mode." From d354b5c8d08e5fef9b9f035d0db34e18e5b5f13d Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 23 Apr 2016 00:26:42 -0500 Subject: [PATCH 079/228] Adds missing ruins --- _maps/RandomRuins/LavaRuins/_maplisting.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/_maps/RandomRuins/LavaRuins/_maplisting.txt b/_maps/RandomRuins/LavaRuins/_maplisting.txt index de949fa1e50..175537f9008 100644 --- a/_maps/RandomRuins/LavaRuins/_maplisting.txt +++ b/_maps/RandomRuins/LavaRuins/_maplisting.txt @@ -6,7 +6,7 @@ ##BIODOMES _maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm -_maps/RandomRuins/LavaRuins/lavaland__biodome_beach.dmm +_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm _maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_cube.dmm @@ -15,6 +15,7 @@ _maps/RandomRuins/LavaRuins/lavaland_surface_prisoner_crash.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm +_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm ##SIN _maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm @@ -29,4 +30,5 @@ _maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +_maps/RandomRuins/LavaRuins/lavaland_fountain_hall.dmm _maps/RandomRuins/LavaRuins/lavaland_gym.dmm \ No newline at end of file From fb7e7551207872072f541e4c36ef3cf1d3ffd78e Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 23 Apr 2016 05:29:51 +0000 Subject: [PATCH 080/228] Automatic changelog generation for PR #17030 --- html/changelogs/AutoChangeLog-pr-17030.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17030.yml diff --git a/html/changelogs/AutoChangeLog-pr-17030.yml b/html/changelogs/AutoChangeLog-pr-17030.yml new file mode 100644 index 00000000000..fdb59b511e5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17030.yml @@ -0,0 +1,6 @@ +author: Joan +delete-after: True +changes: + - bugfix: "Aliens can now open crates and lockers." + - bugfix: "Aliens and monkeys can now climb climbable objects, such as crates and sandbags." + - rscadd: "Aliens climb very, very fast." From 230e8d0506a398ce6dcd5ee37c2163da382bb50e Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 23 Apr 2016 06:07:19 +0000 Subject: [PATCH 081/228] Automatic changelog generation for PR #17019 --- html/changelogs/AutoChangeLog-pr-17019.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17019.yml diff --git a/html/changelogs/AutoChangeLog-pr-17019.yml b/html/changelogs/AutoChangeLog-pr-17019.yml new file mode 100644 index 00000000000..2d5c385e5b7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17019.yml @@ -0,0 +1,4 @@ +author: Kor +delete-after: True +changes: + - rscadd: "Running HE pipes over lava will now heat the gas inside." From a304ec0e459badb03ff40d221687bba419e4334b Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 12:51:14 +0100 Subject: [PATCH 082/228] Regular jaunters now save you from chasms --- code/modules/mining/equipment_locker.dm | 68 +++++++++++++++++-------- code/modules/mining/mine_turfs.dm | 11 ++-- 2 files changed, 54 insertions(+), 25 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 0c5f6a8f468..58f3812fb20 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -291,7 +291,6 @@ new /datum/data/mining_equipment("GAR scanners", /obj/item/clothing/glasses/meson/gar, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 600), - new /datum/data/mining_equipment("Wormhole Lifebuoy", /obj/item/device/wormhole_jaunter/lifebuoy, 1000), new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750), new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 800), new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000), @@ -476,7 +475,7 @@ /obj/item/device/wormhole_jaunter name = "wormhole jaunter" - desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least." + desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms." icon = 'icons/obj/mining.dmi' icon_state = "Jaunter" item_state = "electronic" @@ -485,24 +484,46 @@ throw_speed = 3 throw_range = 5 origin_tech = "bluespace=2" + slot_flags = SLOT_BELT /obj/item/device/wormhole_jaunter/attack_self(mob/user) + user.visible_message("[user.name] activates the [src.name]!") + activate(user) + +/obj/item/device/wormhole_jaunter/proc/turf_check(mob/user) var/turf/device_turf = get_turf(user) - if(!device_turf||device_turf.z==2||device_turf.z>=7) - user << "You're having difficulties getting the [src.name] to work." - return + var/status = 0 + // doesn't work if + // - you're in nullspace (HOW?) + if(!device_turf) + status = 182 + // - you're on centcom + if(device_turf.z == 2) + status = 274 + // - you're on a z level higher than you could normally reach + // (we currently have 9 legal z levels, should be a way of determining + // that programatically) + if(device_turf.z >= 10) + status = 1483 + + if(status != 0) + usr << "\icon[src] INVALID LOCATION: ERROR CODE [status]" + // turf_check returns 0 if failure, so it's false if broken + return 0 else - user.visible_message("[user.name] activates the [src.name]!") - activate(user) + return 1 /obj/item/device/wormhole_jaunter/proc/activate(mob/user) + if(!turf_check(user)) + return + var/list/L = list() for(var/obj/item/device/radio/beacon/B in world) var/turf/T = get_turf(B) if(T.z == ZLEVEL_STATION) L += B if(!L.len) - user << "The [src.name] failed to create a wormhole." + user << "The [src.name] found no beacons in the world to anchor a wormhole to." return var/chosen_beacon = pick(L) var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100) @@ -511,25 +532,27 @@ playsound(src,'sound/effects/sparks4.ogg',50,1) qdel(src) - -/obj/item/device/wormhole_jaunter/lifebuoy - name = "wormhole lifebuoy" - desc = "A single use device using similar technology to the wormhole jaunter. In addition, this belt has velocity and depth sensors that will trigger the device automatically if the user falls into a chasm, saving them from their trip into the darkness. Must be worn around the users waist in order to function in this way." - slot_flags = SLOT_BELT - -/obj/item/device/wormhole_jaunter/lifebuoy/emp_act(power) +/obj/item/device/wormhole_jaunter/emp_act(power) var/triggered = FALSE - if(power == 1) - triggered = TRUE - else if(power == 2 && prob(50)) - triggered = TRUE + + if(usr.get_item_by_slot(slot_belt) == src) + if(power == 1) + triggered = TRUE + else if(power == 2 && prob(50)) + triggered = TRUE + if(triggered) usr.visible_message("The [src] overloads and activates!") activate(usr) -/obj/item/device/wormhole_jaunter/lifebuoy/proc/chasm_protect() - usr.visible_message("[usr]'s [src] activates, saving them from the chasm!") - activate(usr) +/obj/item/device/wormhole_jaunter/proc/chasm_react(mob/user) + if(user.get_item_by_slot(slot_belt) == src) + user.visible_message("[user]'s [src] activates, saving them from the chasm!") + activate(user) + else + // TIME TO TAUNT THEM + user.visible_message("The [src] is not attached to [user]'s belt, preventing it from saving them from the chasm. RIP.") + /obj/effect/portal/wormhole/jaunt_tunnel name = "jaunt tunnel" @@ -542,6 +565,7 @@ return if(istype(M, /atom/movable)) if(do_teleport(M, target, 6)) + // KERPLUNK playsound(M,'sound/weapons/resonator_blast.ogg',50,1) if(iscarbon(M)) var/mob/living/carbon/L = M diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 63124de3a3f..d66c6689214 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -574,9 +574,14 @@ return if(istype(AM, /mob/living/carbon/human)) var/mob/living/carbon/human/H = AM - if(istype(H.belt, /obj/item/device/wormhole_jaunter/lifebuoy)) - var/obj/item/device/wormhole_jaunter/lifebuoy/L = H.belt - L.chasm_protect() + // If we have more than one type of chasm reacting item, then + // should change this to some sort of flag on /obj/item and check + // the mob's contents. But for now this will do. + if(istype(H.belt, /obj/item/device/wormhole_jaunter)) + var/obj/item/device/wormhole_jaunter/J = H.belt + // This also does the belt check in case it's ever transformed + // to be more general. + J.chasm_react(H) return drop(AM) From fe17fd395b83984de192b5f6699eb970881446ca Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 12:53:16 +0100 Subject: [PATCH 083/228] Changed stabilizer name to stabilizing serum --- code/modules/mining/equipment_locker.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 58f3812fb20..21d1a0faf87 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -1068,10 +1068,10 @@ /*********************Hivelord stabilizer****************/ /obj/item/weapon/hivelordstabilizer - name = "legion's heart stabilizer" + name = "stabilizing serum" icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" - desc = "Inject a legion's heart with this stabilizer to preserve its healing powers indefinitely." + desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely." w_class = 1 origin_tech = "biotech=1" @@ -1130,7 +1130,7 @@ new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300), new /datum/data/mining_equipment("Monkey Cube", /obj/item/weapon/reagent_containers/food/snacks/monkeycube, 300), new /datum/data/mining_equipment("Toolbelt", /obj/item/weapon/storage/belt/utility, 350), - new /datum/data/mining_equipment("Hivelord Stabilizer", /obj/item/weapon/hivelordstabilizer, 400), + new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/weapon/hivelordstabilizer, 400), new /datum/data/mining_equipment("Shelter Capsule", /obj/item/weapon/survivalcapsule, 400), new /datum/data/mining_equipment("GAR scanners", /obj/item/clothing/glasses/meson/gar, 500), new /datum/data/mining_equipment("Sulphuric Acid", /obj/item/weapon/reagent_containers/glass/beaker/sulphuric, 500), From 573c5f70b8c2867b8c637fd24332c1cc0588aa80 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 13:21:40 +0100 Subject: [PATCH 084/228] Revert "Removed processor explosion chance" This reverts commit 06f34b16342f4b2469ac59befb28aa5a6eb2b3de. --- code/modules/events/processor_overload.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index 200bb87c10c..bae9f03d574 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -31,6 +31,8 @@ for(var/obj/machinery/telecomms/T in telecomms_list) if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T - // Apparently machines very occasionally blowing up due to - // overload is "boring" and "not fun". So just EMP for now. - P.emp_act(1) + // Wow, it overloaded so much that it EXPLODED!? + if(prob(10)) + P.ex_act(2) + else + P.emp_act(1) From c420fd167abb83ec44a4b763ef654e697442d807 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 14:29:27 +0100 Subject: [PATCH 085/228] Buffs light replacer and makes easier to use :cl: coiax rscadd: The Janitor's Union has mandated additional features to station light replacer devices. rscadd: The light replacer now can be used on the floor to replace the bulbs of any lights on that tile. rscadd: The light replacer now eats replaced bulbs, and after a certain number of bulb fragments (four) will recycle them into a new bulb. tweak: The description of the light replacer is now more informative. /:cl: --- .../objects/items/devices/lightreplacer.dm | 101 ++++++++++++------ 1 file changed, 70 insertions(+), 31 deletions(-) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 4b448e2c61d..6ba8b31039d 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -41,7 +41,7 @@ /obj/item/device/lightreplacer name = "light replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs." + desc = "A device to automatically replace lights. Refill with broken or working lightbulbs, or sheets of glass." icon = 'icons/obj/janitor.dmi' icon_state = "lightreplacer0" @@ -61,6 +61,11 @@ var/decrement = 1 var/charge = 1 + // Eating used bulbs gives us bulb shards + var/bulb_shards = 0 + // when we get this many shards, we get a free bulb. + var/shards_required = 4 + /obj/item/device/lightreplacer/New() uses = max_uses / 2 failmsg = "The [name]'s refill light blinks red." @@ -68,7 +73,7 @@ /obj/item/device/lightreplacer/examine(mob/user) ..() - user << "It has [uses] light\s remaining." + user << status_string() /obj/item/device/lightreplacer/attackby(obj/item/W, mob/user, params) @@ -79,51 +84,60 @@ return else if(G.use(decrement)) AddUses(increment) - user << "You insert a piece of glass into the [src.name]. You have [uses] lights remaining." + user << "You insert a piece of glass into the [src.name]. You have [uses] light\s remaining." return else user << "You need one sheet of glass to replace lights!" if(istype(W, /obj/item/weapon/light)) + var/new_bulbs = 0 var/obj/item/weapon/light/L = W if(L.status == 0) // LIGHT OKAY if(uses < max_uses) if(!user.unEquip(W)) return AddUses(1) - user << "You insert the [L.name] into the [src.name]. You have [uses] lights remaining." qdel(L) - return else - user << "You need a working light!" - return + if(!user.unEquip(W)) + return + new_bulbs += AddShards(1) + qdel(L) + if(new_bulbs != 0) + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + user << "You insert the [L.name] into the [src.name]. " + status_string() + "" + return if(istype(W, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W - var/found_good_light = 0 - var/replaced_something = 0 + var/found_lightbulbs = FALSE + var/replaced_something = TRUE for(var/obj/item/I in S.contents) if(istype(I,/obj/item/weapon/light)) var/obj/item/weapon/light/L = I + found_lightbulbs = TRUE + if(src.uses >= max_uses) + break if(L.status == LIGHT_OK) - found_good_light = 1 - if(src.uses < max_uses) - qdel(L) - AddUses(1) - replaced_something = 1 - else - break + replaced_something = TRUE + AddUses(1) + qdel(L) - if(!found_good_light) - user << "\The [S] contains no useable lights!" + else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED) + replaced_something = TRUE + AddShards(1) + qdel(L) + + if(!found_lightbulbs) + user << "\The [S] contains no bulbs." return if(!replaced_something && src.uses == max_uses) user << "\The [src] is full!" return - user << "You fill \the [src] with lights from \the [S]. You have [uses] lights remaining." + user << "You fill \the [src] with lights from \the [S]. " + status_string() + "" /obj/item/device/lightreplacer/emag_act() if(!emagged) @@ -138,11 +152,13 @@ usr << "You shortcircuit the [src]." return */ - usr << "It has [uses] lights remaining." + usr << status_string() /obj/item/device/lightreplacer/update_icon() icon_state = "lightreplacer[emagged]" +/obj/item/device/lightreplacer/proc/status_string() + return "It has [uses] light\s remaining (plus [bulb_shards] fragment\s)." /obj/item/device/lightreplacer/proc/Use(mob/user) @@ -152,7 +168,16 @@ // Negative numbers will subtract /obj/item/device/lightreplacer/proc/AddUses(amount = 1) - uses = min(max(uses + amount, 0), max_uses) + uses = Clamp(uses + amount, 0, max_uses) + +/obj/item/device/lightreplacer/proc/AddShards(amount = 1) + // Returns number of new bulbs made from the shards + bulb_shards += amount + var/new_bulbs = round(bulb_shards / shards_required) + if(new_bulbs > 0) + AddUses(new_bulbs) + bulb_shards = bulb_shards % shards_required + return new_bulbs /obj/item/device/lightreplacer/proc/Charge(var/mob/user) charge += 1 @@ -168,14 +193,10 @@ U << "You replace the [target.fitting] with \the [src]." if(target.status != LIGHT_EMPTY) - - var/obj/item/weapon/light/L1 = new target.light_type(target.loc) - L1.status = target.status - L1.rigged = target.rigged - L1.brightness = target.brightness - L1.switchcount = target.switchcount - target.switchcount = 0 - L1.update() + var/new_bulbs = AddShards(1) + if(new_bulbs != 0) + U << "\The [src] has fabricated a new bulb from the broken bulbs it has stored. It now has [uses] uses." + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) target.status = LIGHT_EMPTY target.update() @@ -220,7 +241,25 @@ else return 0 -/obj/item/device/lightreplacer/cyborg +/obj/item/device/lightreplacer/afterattack(atom/T, mob/U, proximity) + if(!proximity) + return + if(!isturf(T)) + return + + var/used = FALSE + // making special messages if there's more than one light fitting in + // a turf is dumb because it never happens + for(var/atom/A in T) + if(!CanUse(U)) + break + used = TRUE + if(istype(A, /obj/machinery/light)) + ReplaceLight(A, U) + + if(!used) + U << failmsg + return /obj/item/device/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) J.put_in_cart(src, user) @@ -233,4 +272,4 @@ #undef LIGHT_OK #undef LIGHT_EMPTY #undef LIGHT_BROKEN -#undef LIGHT_BURNED \ No newline at end of file +#undef LIGHT_BURNED From 91ef64fbbb0c734393ed742174cdbabe472fcc91 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 23 Apr 2016 15:26:27 +0000 Subject: [PATCH 086/228] Automatic changelog generation for PR #17055 --- html/changelogs/AutoChangeLog-pr-17055.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17055.yml diff --git a/html/changelogs/AutoChangeLog-pr-17055.yml b/html/changelogs/AutoChangeLog-pr-17055.yml new file mode 100644 index 00000000000..fe683f46f51 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17055.yml @@ -0,0 +1,4 @@ +author: Mercenaryblue +delete-after: True +changes: + - rscadd: "Allowed all corgis to wear red wizard hats." From 2ddc27cfd0629e800d948fb4f8670f4b34cb12d4 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Sat, 23 Apr 2016 16:07:43 +0000 Subject: [PATCH 087/228] Automatic changelog compile --- html/changelog.html | 19 +++++++++++++++++++ html/changelogs/.all_changelog.yml | 12 ++++++++++++ html/changelogs/AutoChangeLog-pr-17019.yml | 4 ---- html/changelogs/AutoChangeLog-pr-17023.yml | 4 ---- html/changelogs/AutoChangeLog-pr-17030.yml | 6 ------ html/changelogs/AutoChangeLog-pr-17033.yml | 4 ---- html/changelogs/AutoChangeLog-pr-17055.yml | 4 ---- 7 files changed, 31 insertions(+), 22 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-17019.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17023.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17030.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17033.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17055.yml diff --git a/html/changelog.html b/html/changelog.html index 4a19b8def47..137551269a0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,11 +56,30 @@ -->

      23 April 2016

      +

      Joan updated:

      +
        +
      • Aliens can now open crates and lockers.
      • +
      • Aliens and monkeys can now climb climbable objects, such as crates and sandbags.
      • +
      • Aliens climb very, very fast.
      • +
      +

      Kor updated:

      +
        +
      • Running HE pipes over lava will now heat the gas inside.
      • +
      • Alt+clicking on your mecha (while inside it) will toggle strafing mode.
      • +
      +

      Mercenaryblue updated:

      +
        +
      • Allowed all corgis to wear red wizard hats.
      • +

      TechnoAlchemisto updated:

      • Goliaths now drop bones, and Watchers drop sinews.
      • You can craft primitive gear from bone and sinew.
      +

      coiax updated:

      +
        +
      • Non-humans are now able to interact with bee boxes.
      • +

      22 April 2016

      Bawhoppen updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 08b9c637065..4fd3cb663bb 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4585,6 +4585,18 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: xenobio console is deconstructable again. - tweak: syndibomb recipe calls for any matter bin, scaling effectiveness with tier. 2016-04-23: + Joan: + - bugfix: Aliens can now open crates and lockers. + - bugfix: Aliens and monkeys can now climb climbable objects, such as crates and + sandbags. + - rscadd: Aliens climb very, very fast. + Kor: + - rscadd: Running HE pipes over lava will now heat the gas inside. + - rscadd: Alt+clicking on your mecha (while inside it) will toggle strafing mode. + Mercenaryblue: + - rscadd: Allowed all corgis to wear red wizard hats. TechnoAlchemisto: - rscadd: Goliaths now drop bones, and Watchers drop sinews. - rscadd: You can craft primitive gear from bone and sinew. + coiax: + - bugfix: Non-humans are now able to interact with bee boxes. diff --git a/html/changelogs/AutoChangeLog-pr-17019.yml b/html/changelogs/AutoChangeLog-pr-17019.yml deleted file mode 100644 index 2d5c385e5b7..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17019.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Kor -delete-after: True -changes: - - rscadd: "Running HE pipes over lava will now heat the gas inside." diff --git a/html/changelogs/AutoChangeLog-pr-17023.yml b/html/changelogs/AutoChangeLog-pr-17023.yml deleted file mode 100644 index 0802979f45f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17023.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Kor -delete-after: True -changes: - - rscadd: "Alt+clicking on your mecha (while inside it) will toggle strafing mode." diff --git a/html/changelogs/AutoChangeLog-pr-17030.yml b/html/changelogs/AutoChangeLog-pr-17030.yml deleted file mode 100644 index fdb59b511e5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17030.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Joan -delete-after: True -changes: - - bugfix: "Aliens can now open crates and lockers." - - bugfix: "Aliens and monkeys can now climb climbable objects, such as crates and sandbags." - - rscadd: "Aliens climb very, very fast." diff --git a/html/changelogs/AutoChangeLog-pr-17033.yml b/html/changelogs/AutoChangeLog-pr-17033.yml deleted file mode 100644 index b002c4dd72f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17033.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: coiax -delete-after: True -changes: - - bugfix: "Non-humans are now able to interact with bee boxes." diff --git a/html/changelogs/AutoChangeLog-pr-17055.yml b/html/changelogs/AutoChangeLog-pr-17055.yml deleted file mode 100644 index fe683f46f51..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17055.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Mercenaryblue -delete-after: True -changes: - - rscadd: "Allowed all corgis to wear red wizard hats." From 1329b004f289bb8119b4941b3a906c8cf19cd868 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 17:28:20 +0100 Subject: [PATCH 088/228] Removes trailing return --- code/game/objects/items/devices/lightreplacer.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 6ba8b31039d..356b8a94150 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -259,7 +259,6 @@ if(!used) U << failmsg - return /obj/item/device/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) J.put_in_cart(src, user) From 97b5e3918c3df404edb324a2547e3779d9d3f5e6 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 17:39:05 +0100 Subject: [PATCH 089/228] Removed comments --- code/modules/mining/equipment_locker.dm | 25 ++++--------------------- code/modules/mining/mine_turfs.dm | 5 ----- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 21d1a0faf87..488c768428e 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -492,26 +492,10 @@ /obj/item/device/wormhole_jaunter/proc/turf_check(mob/user) var/turf/device_turf = get_turf(user) - var/status = 0 - // doesn't work if - // - you're in nullspace (HOW?) - if(!device_turf) - status = 182 - // - you're on centcom - if(device_turf.z == 2) - status = 274 - // - you're on a z level higher than you could normally reach - // (we currently have 9 legal z levels, should be a way of determining - // that programatically) - if(device_turf.z >= 10) - status = 1483 - - if(status != 0) - usr << "\icon[src] INVALID LOCATION: ERROR CODE [status]" - // turf_check returns 0 if failure, so it's false if broken - return 0 - else - return 1 + if(!device_turf||device_turf.z==2||device_turf.z>=7) + user << "You're having difficulties getting the [src.name] to work." + return FALSE + return TRUE /obj/item/device/wormhole_jaunter/proc/activate(mob/user) if(!turf_check(user)) @@ -550,7 +534,6 @@ user.visible_message("[user]'s [src] activates, saving them from the chasm!") activate(user) else - // TIME TO TAUNT THEM user.visible_message("The [src] is not attached to [user]'s belt, preventing it from saving them from the chasm. RIP.") diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index d66c6689214..17b9ceaeecb 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -574,13 +574,8 @@ return if(istype(AM, /mob/living/carbon/human)) var/mob/living/carbon/human/H = AM - // If we have more than one type of chasm reacting item, then - // should change this to some sort of flag on /obj/item and check - // the mob's contents. But for now this will do. if(istype(H.belt, /obj/item/device/wormhole_jaunter)) var/obj/item/device/wormhole_jaunter/J = H.belt - // This also does the belt check in case it's ever transformed - // to be more general. J.chasm_react(H) return drop(AM) From d80130b6a79920dfa40d4e7f139bf0f7348e6c05 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 17:41:12 +0100 Subject: [PATCH 090/228] Removed comments --- code/game/objects/items/devices/lightreplacer.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 356b8a94150..08fa1ded58d 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -171,7 +171,6 @@ uses = Clamp(uses + amount, 0, max_uses) /obj/item/device/lightreplacer/proc/AddShards(amount = 1) - // Returns number of new bulbs made from the shards bulb_shards += amount var/new_bulbs = round(bulb_shards / shards_required) if(new_bulbs > 0) @@ -248,8 +247,6 @@ return var/used = FALSE - // making special messages if there's more than one light fitting in - // a turf is dumb because it never happens for(var/atom/A in T) if(!CanUse(U)) break From 68c585c952cf2fe81f1e4caf04be42ece251ee8c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 18:31:39 +0100 Subject: [PATCH 091/228] Changes z2 to TGM format --- _maps/map_files/generic/z2.dmm | 72584 ++++++++++++++++++++++++++++++- 1 file changed, 71407 insertions(+), 1177 deletions(-) diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 85a1324c9ea..a3b5fe4f31f 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -1,1180 +1,71410 @@ -"aa" = (/turf/open/space/transit,/area/space) -"ab" = (/turf/open/space,/area/space) -"ac" = (/turf/open/space/transit/horizontal,/area/space) -"ad" = (/turf/closed/indestructible/riveted,/area/space) -"ae" = (/obj/structure/window/reinforced,/turf/closed/indestructible/riveted,/area/space) -"af" = (/obj/structure/window/reinforced{dir = 4},/turf/closed/indestructible/riveted,/area/space) -"ag" = (/obj/structure/foamedmetal,/obj/structure/window/reinforced/tinted{icon_state = "rwindow"; dir = 4},/obj/structure/window{icon_state = "rwindow"; dir = 8},/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"ah" = (/obj/structure/foamedmetal,/obj/structure/window{icon_state = "rwindow"; dir = 4},/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"ai" = (/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"aj" = (/obj/structure/table,/obj/item/stack/medical/ointment{heal_burn = 10},/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"ak" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/closed/indestructible/riveted,/area/space) -"al" = (/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"am" = (/obj/structure/chair/wood/normal{icon_state = "wooden_chair"; dir = 4},/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"an" = (/obj/structure/table/wood/poker,/obj/effect/holodeck_effect/cards,/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"ao" = (/obj/structure/table/wood/poker,/obj/item/clothing/mask/cigarette/pipe,/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"ap" = (/obj/structure/chair/wood/normal{icon_state = "wooden_chair"; dir = 8},/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aq" = (/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/wildlife) -"ar" = (/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/offline) -"as" = (/turf/open/floor/holofloor{icon_state = "engine"; name = "Burn-Mix Floor"; initial_gas_mix = "o2=2500;plasma=5000;TEMP=370"},/area/holodeck/rec_center/burn) -"at" = (/turf/open/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/court) -"au" = (/turf/open/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/court) -"av" = (/turf/open/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/court) -"aw" = (/obj/structure/window/reinforced{dir = 8},/turf/closed/indestructible/riveted,/area/space) -"ax" = (/obj/structure/foamedmetal,/obj/structure/window{icon_state = "rwindow"; dir = 8},/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"ay" = (/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"az" = (/obj/structure/chair/wood/normal{icon_state = "wooden_chair"; dir = 1},/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aA" = (/obj/effect/holodeck_effect/mobspawner,/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/wildlife) -"aB" = (/obj/effect/holodeck_effect/sparks,/turf/open/floor/holofloor{icon_state = "engine"; name = "Burn-Mix Floor"; initial_gas_mix = "o2=2500;plasma=5000;TEMP=370"},/area/holodeck/rec_center/burn) -"aC" = (/turf/open/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/court) -"aD" = (/turf/open/floor/holofloor,/area/holodeck/rec_center/court) -"aE" = (/turf/open/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/court) -"aF" = (/obj/structure/table,/obj/item/weapon/gun/energy/laser,/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"aG" = (/obj/structure/window/reinforced/tinted{icon_state = "rwindow"; dir = 4},/turf/open/floor/holofloor{icon_state = "wood"; dir = 9},/area/holodeck/rec_center/lounge) -"aH" = (/obj/item/device/instrument/violin,/obj/structure/table/wood,/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aI" = (/obj/structure/chair/comfy/brown{buildstackamount = 0},/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aJ" = (/turf/open/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/court) -"aK" = (/turf/open/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/court) -"aL" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green,/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aM" = (/obj/structure/chair/comfy/brown{buildstackamount = 0; dir = 1},/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aN" = (/obj/docking_port/stationary/transit{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_transit"; width = 35},/turf/open/space/transit/horizontal,/area/space) -"aO" = (/obj/structure/chair/wood/normal,/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aP" = (/obj/docking_port/stationary/transit{dir = 4; dwidth = 1; height = 4; id = "pod3_transit"; turf_type = /turf/open/space/transit/horizontal; width = 3},/turf/open/space/transit/horizontal,/area/space) -"aQ" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack{heal_brute = 10},/turf/open/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"aR" = (/obj/structure/table/wood/poker,/turf/open/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aS" = (/turf/open/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/rec_center/court) -"aT" = (/turf/open/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/court) -"aU" = (/turf/open/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/rec_center/court) -"aV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/closed/indestructible/riveted,/area/space) -"aW" = (/obj/effect/holodeck_effect/mobspawner/pet,/turf/open/floor/holofloor/grass,/area/holodeck/rec_center/pet_lounge) -"aX" = (/turf/open/floor/holofloor/grass,/area/holodeck/rec_center/pet_lounge) -"aY" = (/obj/structure/table/glass,/obj/item/weapon/surgicaldrill,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) -"aZ" = (/obj/structure/table/glass,/obj/item/weapon/hemostat,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) -"ba" = (/obj/structure/table/glass,/obj/item/weapon/scalpel{pixel_y = 10},/obj/item/weapon/circular_saw,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) -"bb" = (/obj/structure/table/glass,/obj/item/weapon/retractor,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) -"bc" = (/obj/structure/table/glass,/obj/item/weapon/cautery,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) -"bd" = (/turf/open/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/basketball) -"be" = (/obj/structure/holohoop,/turf/open/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/basketball) -"bf" = (/turf/open/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/basketball) -"bg" = (/turf/open/floor/holofloor/beach,/area/holodeck/rec_center/beach) -"bh" = (/obj/structure/table,/obj/machinery/readybutton,/turf/open/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"bi" = (/obj/structure/table,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/turf/open/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"bj" = (/obj/structure/table,/turf/open/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"bk" = (/obj/machinery/readybutton,/turf/open/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bl" = (/turf/open/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bm" = (/turf/open/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bn" = (/obj/structure/table/glass,/obj/item/weapon/surgical_drapes,/obj/item/weapon/razor,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 8},/area/holodeck/rec_center/medical) -"bo" = (/turf/open/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) -"bp" = (/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 4},/area/holodeck/rec_center/medical) -"bq" = (/turf/open/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/basketball) -"br" = (/turf/open/floor/holofloor,/area/holodeck/rec_center/basketball) -"bs" = (/turf/open/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/basketball) -"bt" = (/obj/effect/overlay/palmtree_r,/turf/open/floor/holofloor/beach,/area/holodeck/rec_center/beach) -"bu" = (/obj/effect/overlay/palmtree_l,/obj/effect/overlay/coconut,/turf/open/floor/holofloor/beach,/area/holodeck/rec_center/beach) -"bv" = (/turf/open/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"bw" = (/turf/open/floor/holofloor,/area/holodeck/rec_center/thunderdome) -"bx" = (/turf/open/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"by" = (/turf/open/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bz" = (/turf/open/floor/holofloor,/area/holodeck/rec_center/dodgeball) -"bA" = (/turf/open/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bB" = (/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) -"bC" = (/turf/open/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"bD" = (/obj/structure/table/optable,/turf/open/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"bE" = (/obj/machinery/computer/operating,/turf/open/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"bF" = (/obj/structure/table/glass,/obj/item/clothing/gloves/color/latex/nitrile,/obj/item/clothing/suit/apron/surgical,/obj/item/clothing/mask/surgical,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) -"bG" = (/turf/open/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/basketball) -"bH" = (/turf/open/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bI" = (/obj/docking_port/stationary/transit{dir = 4; dwidth = 1; height = 4; id = "pod4_transit"; turf_type = /turf/open/space/transit/horizontal; width = 3},/turf/open/space/transit/horizontal,/area/space) -"bJ" = (/obj/structure/window{dir = 1},/turf/open/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) -"bK" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) -"bL" = (/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 8},/area/holodeck/rec_center/medical) -"bM" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers,/turf/open/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) -"bN" = (/obj/machinery/washing_machine,/turf/open/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) -"bO" = (/turf/open/floor/holofloor{dir = 10; icon_state = "red"},/area/holodeck/rec_center/basketball) -"bP" = (/turf/open/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/rec_center/basketball) -"bQ" = (/turf/open/floor/holofloor{dir = 6; icon_state = "red"},/area/holodeck/rec_center/basketball) -"bR" = (/obj/item/clothing/under/color/rainbow,/obj/item/clothing/glasses/sunglasses,/turf/open/floor/holofloor/beach,/area/holodeck/rec_center/beach) -"bS" = (/obj/structure/window,/turf/open/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"bT" = (/obj/structure/window,/turf/open/floor/holofloor,/area/holodeck/rec_center/thunderdome) -"bU" = (/obj/structure/window,/turf/open/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"bV" = (/obj/structure/window{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/open/floor/holofloor{dir = 10; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bW" = (/obj/structure/window{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/open/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bX" = (/obj/structure/window{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/open/floor/holofloor{dir = 6; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bY" = (/obj/machinery/chem_master,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) -"bZ" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/turf/open/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) -"ca" = (/obj/structure/closet/wardrobe/white,/turf/open/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) -"cb" = (/turf/open/floor/holofloor{dir = 9; icon_state = "green"},/area/holodeck/rec_center/basketball) -"cc" = (/turf/open/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/rec_center/basketball) -"cd" = (/turf/open/floor/holofloor{dir = 5; icon_state = "green"},/area/holodeck/rec_center/basketball) -"ce" = (/obj/item/toy/beach_ball,/turf/open/floor/holofloor/beach,/area/holodeck/rec_center/beach) -"cf" = (/obj/structure/window{dir = 1},/turf/open/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"cg" = (/obj/structure/window{dir = 1},/turf/open/floor/holofloor,/area/holodeck/rec_center/thunderdome) -"ch" = (/obj/structure/window{dir = 1},/turf/open/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"ci" = (/obj/structure/window,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/open/floor/holofloor{dir = 9; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"cj" = (/obj/structure/window,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/open/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"ck" = (/obj/structure/window,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/open/floor/holofloor{dir = 5; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"cl" = (/obj/docking_port/stationary/transit{dir = 4; dwidth = 9; height = 11; id = "emergency_transit"; width = 22},/turf/open/space/transit,/area/space) -"cm" = (/obj/structure/window,/turf/open/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) -"cn" = (/turf/open/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/basketball) -"co" = (/obj/item/toy/beach_ball/holoball,/turf/open/floor/holofloor,/area/holodeck/rec_center/basketball) -"cp" = (/turf/open/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/basketball) -"cq" = (/turf/open/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"cr" = (/turf/open/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"cs" = (/turf/open/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"ct" = (/turf/open/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"cu" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) -"cv" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) -"cw" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/obj/structure/window,/obj/machinery/computer/pandemic,/turf/open/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) -"cx" = (/turf/open/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/basketball) -"cy" = (/turf/open/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"cz" = (/obj/machinery/door/window/westleft,/turf/open/floor/holofloor{icon_state = "warnwhitecorner"; dir = 8},/area/holodeck/rec_center/medical) -"cA" = (/obj/machinery/door/window/westleft,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) -"cB" = (/obj/machinery/door/window/westleft,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) -"cC" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) -"cD" = (/turf/open/floor/holofloor/beach/coast_t,/area/holodeck/rec_center/beach) -"cE" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) -"cF" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/open/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"cG" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 1},/turf/open/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"cH" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 1},/turf/open/floor/holofloor{icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) -"cI" = (/turf/open/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/rec_center/basketball) -"cJ" = (/obj/structure/holohoop{dir = 1},/turf/open/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/basketball) -"cK" = (/turf/open/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/rec_center/basketball) -"cL" = (/turf/open/floor/holofloor/beach/water,/area/holodeck/rec_center/beach) -"cM" = (/obj/structure/table,/turf/open/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"cN" = (/obj/structure/table,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/turf/open/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"cO" = (/obj/structure/table,/obj/machinery/readybutton,/turf/open/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"cP" = (/turf/open/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"cQ" = (/turf/open/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"cR" = (/obj/machinery/readybutton,/turf/open/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"cS" = (/obj/structure/window/reinforced{dir = 1},/turf/closed/indestructible/riveted,/area/space) -"cT" = (/turf/closed/indestructible/riveted,/area/tdome/arena_source) -"cU" = (/obj/machinery/igniter,/turf/open/floor/plasteel,/area/tdome/arena_source) -"cV" = (/turf/open/floor/plasteel,/area/tdome/arena_source) -"cW" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/red,/turf/open/floor/plasteel/black,/area/tdome/arena_source) -"cX" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/open/floor/plasteel/black,/area/tdome/arena_source) -"cY" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/open/floor/plasteel,/area/tdome/arena_source) -"cZ" = (/turf/open/floor/plasteel/red/side{dir = 8},/area/tdome/arena_source) -"da" = (/turf/open/floor/plasteel/green/side{dir = 4},/area/tdome/arena_source) -"db" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/green,/turf/open/floor/plasteel/black,/area/tdome/arena_source) -"dc" = (/turf/open/floor/bluegrid,/area/tdome/arena_source) -"dd" = (/obj/machinery/flasher{id = "tdomeflash"; name = "Thunderdome Flash"},/turf/open/floor/bluegrid,/area/tdome/arena_source) -"de" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 2; height = 5; id = "laborcamp_transit"; width = 9},/turf/open/space/transit,/area/space) -"df" = (/obj/machinery/door/poddoor{id = "thunderdomehea"; name = "Heavy Supply"},/turf/open/floor/plasteel/black,/area/tdome/arena_source) -"dg" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/open/floor/plasteel/black,/area/tdome/arena_source) -"dh" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/open/floor/plasteel/black,/area/tdome/arena_source) -"di" = (/obj/docking_port/stationary/transit{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_transit"; width = 18},/turf/open/space/transit,/area/space) -"dj" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 2; height = 12; id = "ferry_transit"; width = 5},/turf/open/space/transit/horizontal,/area/space) -"dk" = (/obj/docking_port/stationary/transit{dwidth = 1; height = 4; id = "pod1_transit"; width = 3},/turf/open/space/transit,/area/space) -"dl" = (/obj/docking_port/stationary/transit{dwidth = 1; height = 4; id = "pod2_transit"; width = 3},/turf/open/space/transit,/area/space) -"dm" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 5; height = 7; id = "supply_transit"; width = 12},/turf/open/space/transit,/area/space) -"dn" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 3; height = 5; id = "mining_transit"; width = 7},/turf/open/space/transit,/area/space) -"do" = (/obj/docking_port/stationary/transit{dwidth = 3; height = 7; id = "steel_rain_transit"; width = 7},/turf/open/space/transit/horizontal,/area/space) -"dp" = (/turf/closed/indestructible/riveted,/area/start) -"dq" = (/obj/effect/landmark/start,/turf/open/floor/plating,/area/start) -"dr" = (/turf/closed/indestructible/splashscreen,/area/start) -"ds" = (/turf/closed/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/centcom/evac) -"dt" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/open/floor/plating/airless,/area/centcom/evac) -"du" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 1},/turf/open/floor/plating/airless,/area/centcom/evac) -"dv" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 1},/turf/open/floor/plating/airless,/area/centcom/evac) -"dw" = (/turf/closed/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/centcom/evac) -"dx" = (/obj/docking_port/stationary{dir = 1; dwidth = 1; height = 4; id = "pod1_away"; name = "recovery ship"; width = 3},/turf/open/space,/area/space) -"dy" = (/obj/docking_port/stationary{dir = 1; dwidth = 1; height = 4; id = "pod2_away"; name = "recovery ship"; width = 3},/turf/open/space,/area/space) -"dz" = (/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/centcom/evac) -"dA" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 1},/turf/open/floor/plating/airless,/area/centcom/evac) -"dB" = (/turf/closed/wall/shuttle{icon_state = "swall7"; dir = 2},/area/centcom/evac) -"dC" = (/turf/closed/wall/shuttle{icon_state = "swall8"; dir = 2},/area/centcom/evac) -"dD" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/plating,/area/centcom/evac) -"dE" = (/turf/closed/wall/shuttle{icon_state = "swall0"; dir = 2},/area/centcom/evac) -"dF" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/open/floor/plating,/area/centcom/evac) -"dG" = (/turf/closed/wall/shuttle{icon_state = "swall4"; dir = 2},/area/centcom/evac) -"dH" = (/turf/closed/wall/shuttle{icon_state = "swall11"; dir = 2},/area/centcom/evac) -"dI" = (/turf/open/floor/plating,/area/centcom/evac) -"dJ" = (/turf/open/floor/plating,/turf/closed/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/centcom/evac) -"dK" = (/turf/open/floor/plasteel/shuttle,/turf/closed/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/centcom/evac) -"dL" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"dM" = (/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/centcom/evac) -"dN" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"dO" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"dP" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"dQ" = (/turf/open/floor/plasteel/shuttle,/turf/closed/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/centcom/evac) -"dR" = (/turf/open/floor/plating,/turf/closed/wall/shuttle{dir = 2; icon_state = "swall_f10"; layer = 2},/area/centcom/evac) -"dS" = (/turf/closed/wall/shuttle{icon_state = "swall1"; dir = 2},/area/centcom/evac) -"dT" = (/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"dU" = (/turf/closed/wall/shuttle{icon_state = "swall_s5"; dir = 2},/area/centcom/evac) -"dV" = (/turf/closed/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/centcom/evac) -"dW" = (/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/centcom/evac) -"dX" = (/turf/closed/wall/shuttle{icon_state = "swallc1"; dir = 2},/area/centcom/evac) -"dY" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"dZ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"ea" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"eb" = (/obj/structure/table/reinforced,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"ec" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"ed" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"ee" = (/turf/closed/wall/shuttle{icon_state = "swallc2"; dir = 2},/area/centcom/evac) -"ef" = (/obj/machinery/computer/secure_data,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"eg" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"eh" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"ei" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"ej" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"ek" = (/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"el" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"em" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"en" = (/obj/machinery/door/window/northright{base_state = "right"; dir = 4; icon_state = "right"; name = "Security Desk"; req_access_txt = "103"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/centcom/evac) -"eo" = (/obj/docking_port/stationary{dir = 4; dwidth = 1; height = 4; id = "pod3_away"; name = "recovery ship"; width = 3},/turf/open/space,/area/space) -"ep" = (/obj/structure/bed,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eq" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/centcom/evac) -"er" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/centcom/evac) -"es" = (/obj/docking_port/stationary{dir = 4; dwidth = 1; height = 4; id = "pod4_away"; name = "recovery ship"; width = 3},/turf/open/space,/area/space) -"et" = (/turf/closed/wall/shuttle{icon_state = "swall2"; dir = 2},/area/centcom/evac) -"eu" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"ev" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"ew" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"ex" = (/turf/closed/wall/shuttle{icon_state = "swall14"; dir = 2},/area/centcom/evac) -"ey" = (/turf/closed/wall/shuttle{icon_state = "swallc4"; dir = 2},/area/centcom/evac) -"ez" = (/obj/machinery/door/airlock/shuttle{name = "Cockpit"; req_access_txt = "109"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/centcom/evac) -"eA" = (/obj/structure/table,/obj/item/device/radio/off,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eB" = (/obj/structure/chair{dir = 4; name = "Prosecution"},/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eC" = (/obj/structure/filingcabinet,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eD" = (/obj/structure/chair,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eE" = (/obj/structure/table,/obj/item/weapon/storage/lockbox,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eF" = (/obj/structure/table,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eG" = (/obj/machinery/computer/shuttle,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eH" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eI" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/open/floor/plasteel/shuttle,/area/centcom/evac) -"eJ" = (/turf/closed/indestructible/riveted,/area/centcom/ferry) -"eK" = (/turf/closed/indestructible/fakedoor,/area/centcom/ferry) -"eL" = (/obj/machinery/vending/coffee,/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eM" = (/obj/machinery/vending/cigarette{products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/lighter/greyscale = 4, /obj/item/weapon/storage/fancy/rollingpapers = 5)},/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eN" = (/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eO" = (/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eP" = (/obj/structure/flora/kirbyplants,/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eQ" = (/obj/structure/chair/office/dark,/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eR" = (/obj/structure/table/reinforced,/turf/open/floor/vault,/area/centcom/ferry) -"eS" = (/obj/structure/chair/office/dark{dir = 8},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eT" = (/obj/structure/chair/office/dark{dir = 4},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eU" = (/obj/structure/sign/map/left,/turf/open/floor/light,/area/centcom/ferry) -"eV" = (/obj/structure/sign/map/right,/turf/open/floor/light,/area/centcom/ferry) -"eW" = (/obj/structure/extinguisher_cabinet{pixel_x = 28},/turf/open/floor/plasteel/black,/area/centcom/ferry) -"eX" = (/obj/structure/closet/secure_closet/ertCom,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"eY" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"eZ" = (/obj/structure/table/reinforced,/obj/item/weapon/c4,/obj/item/weapon/c4{pixel_x = 7},/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"fa" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/rapidsyringe,/obj/structure/extinguisher_cabinet{pixel_y = 28},/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"fb" = (/obj/structure/closet/secure_closet/ertEngi,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"fc" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = -5},/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey{pixel_x = 5},/turf/open/floor/plasteel/black,/area/centcom/ferry) -"fd" = (/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"fe" = (/obj/machinery/door/poddoor/ert,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"ff" = (/obj/structure/chair/office/dark{dir = 1},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/open/floor/plasteel/black,/area/centcom/ferry) -"fg" = (/obj/structure/table/wood,/obj/item/weapon/storage/box/drinkingglasses,/turf/open/floor/plasteel/black,/area/centcom/ferry) -"fh" = (/turf/closed/indestructible/riveted,/area/centcom/prison) -"fi" = (/turf/open/floor/plasteel/darkgreen/side{dir = 4},/area/centcom/ferry) -"fj" = (/obj/machinery/door/poddoor/shutters/preopen{id = "adminshut"; name = "Administrative Shutters"},/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/centcom/ferry) -"fk" = (/turf/open/floor/wood,/area/centcom/ferry) -"fl" = (/obj/effect/landmark{name = "prisonwarp"},/turf/open/floor/plasteel,/area/centcom/prison) -"fm" = (/obj/structure/closet/secure_closet/ertSec,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"fn" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/emps,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"fo" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/rapidsyringe,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"fp" = (/obj/structure/closet/secure_closet/ertMed,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) -"fq" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/open/floor/vault,/area/centcom/ferry) -"fr" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 5},/obj/item/weapon/pen/blue,/turf/open/floor/vault,/area/centcom/ferry) -"fs" = (/obj/machinery/door/airlock/centcom{name = "Administrative Office"; opacity = 1; req_access_txt = "109"},/turf/open/floor/wood,/area/centcom/ferry) -"ft" = (/obj/structure/chair/office/dark,/turf/open/floor/wood,/area/centcom/ferry) -"fu" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/ferry) -"fv" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/centcom/ferry) -"fw" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 4},/area/centcom/ferry) -"fx" = (/obj/machinery/door/airlock/centcom{name = "briefing room"; opacity = 1; req_access_txt = "101"},/turf/open/floor/plasteel/black,/area/centcom/ferry) -"fy" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin,/turf/open/floor/carpet,/area/centcom/ferry) -"fz" = (/obj/structure/table/wood,/obj/item/weapon/pen,/turf/open/floor/carpet,/area/centcom/ferry) -"fA" = (/turf/open/floor/carpet,/area/centcom/ferry) -"fB" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/ferry) -"fC" = (/obj/machinery/door/poddoor/shutters/preopen{id = "adminshut"; name = "Administrative Shutters"},/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/ferry) -"fD" = (/obj/machinery/button/door{id = "adminshut"; name = "Administrative Shutter-Control"; pixel_y = 26},/turf/open/floor/carpet,/area/centcom/ferry) -"fE" = (/obj/structure/chair/comfy/black{dir = 1},/turf/open/floor/carpet,/area/centcom/ferry) -"fF" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 9},/area/centcom/ferry) -"fG" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 6},/area/centcom/ferry) -"fH" = (/obj/machinery/door/poddoor/shutters/preopen{id = "adminshut"; name = "Administrative Shutters"},/turf/closed/indestructible/fakeglass,/area/centcom/ferry) -"fI" = (/obj/structure/showcase/fakesec,/turf/open/floor/carpet,/area/centcom/ferry) -"fJ" = (/obj/structure/filingcabinet,/turf/open/floor/carpet,/area/centcom/ferry) -"fK" = (/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/carpet,/area/centcom/ferry) -"fL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/ferry) -"fM" = (/obj/machinery/computer/shuttle/ferry,/turf/open/floor/plasteel/darkwarning{dir = 8},/area/centcom/ferry) -"fN" = (/turf/closed/indestructible/riveted,/area/centcom/evac) -"fO" = (/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 12; id = "ferry_away"; name = "unknown"; width = 5},/turf/open/space,/area/space) -"fP" = (/obj/machinery/door/airlock/external{name = "Ferry Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel/delivery,/area/centcom/ferry) -"fQ" = (/turf/open/floor/plasteel/delivery,/area/centcom/ferry) -"fR" = (/turf/open/floor/plasteel/darkwarning{dir = 8},/area/centcom/ferry) -"fS" = (/turf/open/floor/plasteel/darkgreen/corner{dir = 4},/area/centcom/ferry) -"fT" = (/obj/structure/mirror{pixel_y = 32},/obj/structure/dresser,/turf/open/floor/wood,/area/centcom/ferry) -"fU" = (/obj/machinery/vending/autodrobe,/turf/open/floor/wood,/area/centcom/ferry) -"fV" = (/turf/open/floor/plasteel/darkred/side{dir = 9},/area/centcom/evac) -"fW" = (/turf/open/floor/plasteel/darkred/side{dir = 1},/area/centcom/evac) -"fX" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/open/floor/plasteel/darkred/side{dir = 5},/area/centcom/evac) -"fY" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 5},/area/centcom/ferry) -"fZ" = (/obj/machinery/door/airlock/centcom{name = "Dressing Room"; opacity = 1; req_access_txt = "0"},/turf/open/floor/wood,/area/centcom/ferry) -"ga" = (/obj/machinery/vending/clothing,/turf/open/floor/wood,/area/centcom/ferry) -"gb" = (/turf/closed/indestructible/fakedoor{name = "Centcom Security"},/area/centcom/evac) -"gc" = (/turf/open/floor/plasteel/black,/area/centcom/evac) -"gd" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 10},/area/centcom/ferry) -"ge" = (/turf/open/floor/plasteel/darkgreen/corner,/area/centcom/ferry) -"gf" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin{pixel_y = 4},/obj/item/weapon/pen,/turf/open/floor/wood,/area/centcom/ferry) -"gg" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/open/floor/plasteel/darkred/side{dir = 8},/area/centcom/evac) -"gh" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/black,/area/centcom/evac) -"gi" = (/obj/structure/showcase/fakesec,/turf/open/floor/plasteel/black,/area/centcom/evac) -"gj" = (/turf/closed/indestructible/fakeglass,/area/centcom/ferry) -"gk" = (/obj/structure/chair/comfy/black{dir = 4},/turf/open/floor/wood,/area/centcom/ferry) -"gl" = (/obj/structure/table/wood,/turf/open/floor/wood,/area/centcom/ferry) -"gm" = (/obj/machinery/door/window/northleft{dir = 2; name = "Centcom Security"; req_access_txt = "101"},/turf/open/floor/plasteel/black,/area/centcom/evac) -"gn" = (/obj/structure/table/reinforced,/turf/open/floor/plasteel/darkred/side{dir = 10},/area/centcom/evac) -"go" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/open/floor/plasteel/darkred/side{dir = 2},/area/centcom/evac) -"gp" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/open/floor/plasteel/darkred/side{dir = 2},/area/centcom/evac) -"gq" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "101"},/turf/open/floor/plasteel/darkgreen/side{dir = 2},/area/centcom/ferry) -"gr" = (/turf/closed/indestructible/riveted,/area/centcom/control) -"gs" = (/obj/structure/flora/ausbushes/brflowers,/turf/open/floor/grass,/area/centcom/control) -"gt" = (/obj/structure/flora/ausbushes/palebush,/turf/open/floor/grass,/area/centcom/control) -"gu" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/control) -"gv" = (/turf/open/floor/plasteel/green/side{dir = 1},/area/centcom/control) -"gw" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 9},/area/centcom/evac) -"gx" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/centcom/evac) -"gy" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 4},/area/centcom/evac) -"gz" = (/obj/machinery/door/airlock/centcom{name = "Centcom Security"; opacity = 1; req_access_txt = "0"},/turf/open/floor/plasteel/black,/area/centcom/evac) -"gA" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/centcom/evac) -"gB" = (/turf/closed/indestructible/fakeglass,/area/centcom/control) -"gC" = (/turf/open/floor/plasteel,/area/centcom/control) -"gD" = (/obj/structure/flora/kirbyplants,/turf/open/floor/plasteel/red/side{dir = 9},/area/centcom/evac) -"gE" = (/obj/structure/chair,/turf/open/floor/plasteel/red/side{dir = 1},/area/centcom/evac) -"gF" = (/turf/open/floor/plasteel/red/side{dir = 1},/area/centcom/evac) -"gG" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/obj/item/toy/foamblade,/turf/open/floor/plasteel/red/side{dir = 1},/area/centcom/evac) -"gH" = (/obj/structure/rack,/obj/item/weapon/storage/crayons,/obj/item/toy/sword,/turf/open/floor/plasteel/red/side{dir = 1},/area/centcom/evac) -"gI" = (/turf/closed/indestructible/fakeglass,/area/centcom/evac) -"gJ" = (/turf/open/floor/plasteel/yellowsiding{dir = 8},/area/centcom/evac) -"gK" = (/turf/open/floor/plasteel,/area/centcom/evac) -"gL" = (/turf/open/floor/plasteel/warning{dir = 4},/area/centcom/evac) -"gM" = (/obj/machinery/door/poddoor/shuttledock{name = "blast doorend"},/turf/open/floor/engine,/area/centcom/evac) -"gN" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/centcom/control) -"gO" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/red/side{dir = 8},/area/centcom/evac) -"gP" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel,/area/centcom/evac) -"gQ" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/red/side{dir = 4},/area/centcom/evac) -"gR" = (/obj/machinery/door/poddoor/shuttledock,/turf/open/floor/engine,/area/centcom/evac) -"gS" = (/turf/open/floor/grass,/area/centcom/control) -"gT" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/green/side{dir = 8},/area/centcom/control) -"gU" = (/turf/open/floor/plasteel/warning{dir = 4},/area/centcom/control) -"gV" = (/obj/machinery/door/airlock/centcom{name = "Centcom Customs"; opacity = 1; req_access_txt = "109"},/turf/open/floor/plasteel/black,/area/centcom/control) -"gW" = (/turf/open/floor/plasteel/black,/area/centcom/control) -"gX" = (/obj/structure/table,/turf/open/floor/plasteel/black,/area/centcom/control) -"gY" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/open/floor/plasteel/red/side{dir = 2},/area/centcom/evac) -"gZ" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/open/floor/plasteel/red/side{dir = 2},/area/centcom/evac) -"ha" = (/obj/structure/table/reinforced,/obj/item/toy/carpplushie,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/red/side{dir = 6},/area/centcom/evac) -"hb" = (/turf/closed/indestructible/riveted,/area/centcom/supply) -"hc" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/control) -"hd" = (/turf/open/floor/plasteel/green/corner,/area/centcom/control) -"he" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/plasteel/black,/area/centcom/control) -"hf" = (/turf/open/floor/plasteel/yellowsiding{dir = 1},/area/centcom/evac) -"hg" = (/turf/open/floor/plasteel/yellowsiding/corner{dir = 1},/area/centcom/evac) -"hh" = (/obj/docking_port/stationary{dir = 4; dwidth = 9; height = 11; id = "emergency_away"; name = "Centcom"; width = 22},/turf/open/space,/area/space) -"hi" = (/turf/closed/indestructible/riveted,/area/syndicate_mothership) -"hj" = (/obj/structure/closet,/turf/open/floor/plasteel/warning/corner{dir = 1},/area/centcom/supply) -"hk" = (/obj/structure/closet/wardrobe/cargotech,/turf/open/floor/plasteel/loadingarea,/area/centcom/supply) -"hl" = (/obj/structure/closet/secure_closet/quartermaster,/turf/open/floor/plasteel/loadingarea,/area/centcom/supply) -"hm" = (/obj/structure/closet,/turf/open/floor/plasteel,/area/centcom/supply) -"hn" = (/turf/open/floor/plasteel/green/side{dir = 4},/area/centcom/control) -"ho" = (/obj/machinery/button/door{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "CentComPort"; name = "Security Doors"; pixel_y = 28; req_access_txt = "101"},/obj/structure/showcase/fakeid,/turf/open/floor/plasteel/black,/area/centcom/control) -"hp" = (/obj/structure/chair/office/dark{dir = 8},/turf/open/floor/plasteel/black,/area/centcom/control) -"hq" = (/obj/structure/table,/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/obj/item/weapon/paper/centcom,/turf/open/floor/plasteel/black,/area/centcom/control) -"hr" = (/turf/open/floor/plasteel/red/corner{dir = 1},/area/centcom/evac) -"hs" = (/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"ht" = (/obj/structure/flora/grass/brown,/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"hu" = (/obj/structure/flora/tree/pine,/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"hv" = (/obj/structure/flora/grass/both,/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"hw" = (/obj/item/weapon/disk/data,/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"hx" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/centcom/supply) -"hy" = (/turf/open/floor/plasteel/warning{dir = 8},/area/centcom/supply) -"hz" = (/turf/open/floor/plasteel,/area/centcom/supply) -"hA" = (/turf/open/floor/plasteel/green/corner{dir = 1},/area/centcom/control) -"hB" = (/turf/open/floor/plasteel/green/corner{dir = 4},/area/centcom/control) -"hC" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 1; icon_state = "rightsecure"; name = "Centcom Customs"; req_access_txt = "109"},/turf/open/floor/plasteel/black,/area/centcom/control) -"hD" = (/turf/open/floor/plasteel/warning/corner{dir = 1},/area/centcom/evac) -"hE" = (/obj/item/toy/figure/syndie,/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"hF" = (/obj/machinery/door/airlock/external{name = "Supply Shuttle"; req_access_txt = "106"},/turf/open/floor/plasteel/delivery,/area/centcom/supply) -"hG" = (/obj/machinery/door/airlock/centcom{name = "Centcom Supply"; req_access_txt = "106"},/turf/open/floor/plasteel/brown{dir = 4},/area/centcom/supply) -"hH" = (/turf/open/floor/plasteel/brown{dir = 8},/area/centcom/control) -"hI" = (/obj/machinery/door/airlock/centcom{name = "Centcom Docks"; opacity = 1; req_access_txt = "101"},/turf/open/floor/plasteel/black,/area/centcom/control) -"hJ" = (/obj/machinery/door/poddoor/preopen{id = "CentComPort"; name = "security door"},/turf/open/floor/plasteel/loadingarea{dir = 8},/area/centcom/control) -"hK" = (/turf/open/floor/plasteel/warning{dir = 8},/area/centcom/evac) -"hL" = (/obj/structure/cult/talisman{desc = "A altar dedicated to the Wizard's Federation"},/obj/item/weapon/kitchen/knife/ritual,/turf/open/floor/plasteel/cult,/area/wizard_station) -"hM" = (/obj/structure/flora/bush,/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"hN" = (/obj/machinery/computer/cargo,/turf/open/floor/plasteel/warning{dir = 8},/area/centcom/supply) -"hO" = (/turf/open/floor/plasteel/green/corner{dir = 8},/area/centcom/control) -"hP" = (/turf/open/floor/plasteel/warning/corner{dir = 4},/area/centcom/evac) -"hQ" = (/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_away"; name = "Centcom"; width = 12},/turf/open/space,/area/space) -"hR" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/green/side{dir = 4},/area/centcom/control) -"hS" = (/turf/open/floor/plasteel/green/corner{dir = 8},/area/centcom/evac) -"hT" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/supply) -"hU" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/green/side{dir = 8},/area/centcom/evac) -"hV" = (/turf/open/floor/plasteel/yellowsiding,/area/centcom/evac) -"hW" = (/turf/open/floor/plasteel/yellowsiding/corner{dir = 8},/area/centcom/evac) -"hX" = (/turf/open/floor/plating/asteroid/snow,/area/space) -"hY" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/supply) -"hZ" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/green/side{dir = 10},/area/centcom/control) -"ia" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/green/side{dir = 6},/area/centcom/control) -"ib" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/open/floor/plasteel/green/side{dir = 1},/area/centcom/evac) -"ic" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/open/floor/plasteel/green/side{dir = 1},/area/centcom/evac) -"id" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/green/side{dir = 5},/area/centcom/evac) -"ie" = (/obj/machinery/door/poddoor/shuttledock{name = "blast door3"},/turf/open/floor/engine,/area/centcom/evac) -"if" = (/obj/machinery/door/airlock/centcom{aiControlDisabled = 1; name = "Assault Pod"; opacity = 1; req_access_txt = "150"},/turf/open/floor/plating,/area/shuttle/assault_pod) -"ig" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'FOURTH WALL'."; name = "\improper FOURTH WALL"; pixel_x = -32},/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"ih" = (/obj/structure/statue/uranium/nuke,/turf/open/floor/plating/asteroid/snow,/area/syndicate_mothership) -"ii" = (/turf/closed/indestructible/fakeglass,/area/centcom/supply) -"ij" = (/turf/closed/indestructible/riveted,/area/tdome/tdomeobserve) -"ik" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 8},/area/tdome/tdomeobserve) -"il" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 4},/area/tdome/tdomeobserve) -"im" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access_txt = "101"},/turf/open/floor/plasteel,/area/tdome/tdomeobserve) -"in" = (/obj/structure/chair/office/dark{dir = 1},/turf/open/floor/plasteel,/area/centcom/evac) -"io" = (/obj/structure/table/reinforced,/obj/item/toy/AI,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/green/side{dir = 4},/area/centcom/evac) -"ip" = (/obj/machinery/door/poddoor/shuttledock{name = "blast door2"},/turf/open/floor/engine,/area/centcom/evac) -"iq" = (/obj/docking_port/stationary{area_type = /area/syndicate_mothership; dheight = 9; dir = 2; dwidth = 5; height = 24; id = "syndicate_away"; name = "syndicate recon outpost"; turf_type = /turf/open/floor/plating/asteroid/snow; width = 18},/turf/open/floor/plating/asteroid/snow,/area/space) -"ir" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 8},/area/syndicate_mothership) -"is" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership) -"it" = (/obj/machinery/door/airlock/centcom{aiControlDisabled = 1; name = "Assault Pod"; opacity = 1; req_access_txt = "150"},/obj/docking_port/mobile/assault_pod{dwidth = 3; name = "steel rain"},/turf/open/floor/plating,/area/shuttle/assault_pod) -"iu" = (/turf/open/floor/holofloor/beach/coast_b,/area/holodeck/rec_center/beach) -"iv" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/open/floor/plasteel/warning/corner{dir = 4},/area/centcom/supply) -"iw" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/coin/silver,/turf/open/floor/plasteel,/area/centcom/supply) -"ix" = (/obj/structure/table,/obj/item/weapon/pen/blue{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red,/obj/item/weapon/pen{pixel_x = 8; pixel_y = 8},/turf/open/floor/plasteel,/area/centcom/supply) -"iy" = (/obj/structure/table,/turf/open/floor/plasteel/red/side{dir = 9},/area/tdome/tdomeobserve) -"iz" = (/turf/open/floor/plasteel/red/side{dir = 1},/area/tdome/tdomeobserve) -"iA" = (/obj/structure/table,/turf/open/floor/plasteel/red/side{dir = 1},/area/tdome/tdomeobserve) -"iB" = (/obj/structure/chair/stool,/turf/open/floor/plasteel/neutral/side{dir = 8},/area/tdome/tdomeobserve) -"iC" = (/turf/open/floor/plasteel,/area/tdome/tdomeobserve) -"iD" = (/obj/structure/chair/stool,/turf/open/floor/plasteel/neutral/side{dir = 4},/area/tdome/tdomeobserve) -"iE" = (/obj/structure/table,/turf/open/floor/plasteel/green/side{dir = 1},/area/tdome/tdomeobserve) -"iF" = (/turf/open/floor/plasteel/green/side{dir = 1},/area/tdome/tdomeobserve) -"iG" = (/obj/structure/table,/turf/open/floor/plasteel/green/side{dir = 5},/area/tdome/tdomeobserve) -"iH" = (/obj/structure/flora/kirbyplants,/turf/open/floor/plasteel/green/side{dir = 10},/area/centcom/evac) -"iI" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/green/side,/area/centcom/evac) -"iJ" = (/turf/open/floor/plasteel/green/side,/area/centcom/evac) -"iK" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/obj/item/toy/katana,/turf/open/floor/plasteel/green/side,/area/centcom/evac) -"iL" = (/obj/structure/rack,/obj/item/weapon/storage/crayons,/obj/item/toy/sword,/turf/open/floor/plasteel/green/side,/area/centcom/evac) -"iM" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/evac) -"iN" = (/obj/machinery/door/poddoor/shuttledock{name = "blast door1"},/turf/open/floor/engine,/area/centcom/evac) -"iO" = (/turf/open/floor/plating/beach/coastline_b,/area/centcom/holding) -"iP" = (/obj/item/weapon/storage/crayons,/obj/structure/table,/obj/item/weapon/storage/crayons,/turf/open/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"iQ" = (/obj/machinery/washing_machine,/turf/open/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"iR" = (/turf/open/floor/plating/airless,/area/syndicate_mothership) -"iS" = (/turf/open/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/syndicate_mothership) -"iT" = (/obj/machinery/door/airlock/centcom{name = "Crate Storage"; req_access_txt = "106"},/turf/open/floor/plasteel/delivery,/area/centcom/supply) -"iU" = (/obj/structure/closet/secure_closet/bar,/turf/open/floor/plasteel/red/side{dir = 8},/area/tdome/tdomeobserve) -"iV" = (/obj/structure/table,/turf/open/floor/plasteel,/area/tdome/tdomeobserve) -"iW" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/open/floor/plasteel/green/side{dir = 4},/area/tdome/tdomeobserve) -"iX" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 10},/area/centcom/evac) -"iY" = (/obj/machinery/door/airlock/centcom{name = "Centcom"; opacity = 1; req_access_txt = "0"},/turf/open/floor/plasteel/black,/area/centcom/evac) -"iZ" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "small"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/open/floor/plating/airless,/area/wizard_station) -"ja" = (/turf/closed/indestructible/fakeglass{color = "#008000"; dir = 8; icon_state = "fakewindows2"},/area/wizard_station) -"jb" = (/turf/closed/indestructible/fakeglass{color = "#008000"; dir = 4; icon_state = "fakewindows"},/area/wizard_station) -"jc" = (/turf/closed/indestructible/riveted/uranium,/area/wizard_station) -"jd" = (/obj/machinery/computer/shuttle/syndicate/recall,/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"je" = (/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jf" = (/obj/machinery/vending/coffee,/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jg" = (/obj/machinery/vending/cola,/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jh" = (/obj/machinery/vending/cigarette{products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/lighter/greyscale = 4, /obj/item/weapon/storage/fancy/rollingpapers = 5)},/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"ji" = (/obj/structure/urinal{pixel_y = 28},/turf/open/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"jj" = (/obj/item/weapon/soap/syndie,/obj/structure/mopbucket,/turf/open/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"jk" = (/obj/structure/mirror{pixel_x = 28},/obj/item/weapon/mop,/turf/open/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"jl" = (/turf/open/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/syndicate_mothership) -"jm" = (/turf/open/space,/obj/machinery/porta_turret/syndicate/pod,/turf/closed/wall/shuttle{tag = "icon-wall3 (NORTHWEST)"; icon_state = "wall3"; dir = 9},/area/shuttle/assault_pod) -"jn" = (/turf/closed/wall/shuttle{tag = "icon-wall3"; icon_state = "wall3"; dir = 2},/area/shuttle/assault_pod) -"jo" = (/obj/machinery/door/airlock/centcom{name = "Assault Pod"; opacity = 1; req_access_txt = "150"},/turf/open/floor/plating,/area/shuttle/assault_pod) -"jp" = (/turf/open/space,/obj/machinery/porta_turret/syndicate/pod,/turf/closed/wall/shuttle{tag = "icon-wall3 (NORTHEAST)"; icon_state = "wall3"; dir = 5},/area/shuttle/assault_pod) -"jq" = (/turf/open/floor/plating/airless{dir = 10; icon_state = "warnplate"},/area/syndicate_mothership) -"jr" = (/obj/structure/closet/crate,/turf/open/floor/plasteel,/area/centcom/supply) -"js" = (/obj/structure/table,/obj/item/weapon/storage/box/drinkingglasses,/turf/open/floor/plasteel/red/side{dir = 8},/area/tdome/tdomeobserve) -"jt" = (/obj/structure/table,/turf/open/floor/plasteel/green/side{dir = 4},/area/tdome/tdomeobserve) -"ju" = (/obj/structure/lattice,/turf/open/space/transit,/area/wizard_station) -"jv" = (/obj/item/weapon/shard{color = "#008000"},/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage5"},/area/wizard_station) -"jw" = (/obj/machinery/computer/shuttle,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage"},/area/wizard_station) -"jx" = (/turf/open/floor/plasteel/cult/airless,/area/wizard_station) -"jy" = (/obj/item/clothing/head/collectable/paper,/turf/open/floor/plating/beach/coastline_b,/area/centcom/holding) -"jz" = (/obj/item/weapon/paper{info = "GET DAT FUKKEN DISK"; name = "memo"},/obj/structure/noticeboard{pixel_x = -32; pixel_y = 0},/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jA" = (/obj/structure/chair/stool,/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jB" = (/mob/living/simple_animal/hostile/carp/cayenne,/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jC" = (/obj/machinery/door/airlock/centcom{name = "Restroom"; opacity = 1; req_access_txt = "150"},/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jD" = (/turf/open/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"jE" = (/obj/structure/mirror{pixel_x = 28},/turf/open/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"jF" = (/turf/open/floor/plating/airless{dir = 4; icon_state = "warnplate"},/area/syndicate_mothership) -"jG" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/assault_pod) -"jH" = (/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/assault_pod) -"jI" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/assault_pod) -"jJ" = (/turf/open/floor/plating/airless{dir = 8; icon_state = "warnplate"},/area/syndicate_mothership) -"jK" = (/turf/open/floor/plasteel/red/side{dir = 8},/area/tdome/tdomeobserve) -"jL" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/open/floor/plasteel/green/side{dir = 4},/area/tdome/tdomeobserve) -"jM" = (/obj/structure/table/reinforced,/turf/open/floor/plasteel/green/side{dir = 9},/area/centcom/evac) -"jN" = (/obj/structure/lattice,/obj/item/weapon/shard{color = "#008000"; icon_state = "medium"},/turf/open/space/transit,/area/wizard_station) -"jO" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage2"},/area/wizard_station) -"jP" = (/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage3"},/area/wizard_station) -"jQ" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plasteel/cult/airless,/area/wizard_station) -"jR" = (/turf/closed/indestructible/riveted,/area/ctf) -"jS" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHWEST)"; icon_state = "darkblue"; dir = 9},/area/ctf) -"jT" = (/obj/structure/table/wood,/obj/item/device/paicard,/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jU" = (/obj/structure/table/wood,/obj/item/pizzabox,/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jV" = (/obj/structure/chair/stool,/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"jW" = (/obj/machinery/computer/telecrystals/uplinker,/turf/open/floor/plasteel/podhatch{dir = 9},/area/syndicate_mothership) -"jX" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/area/ctf) -"jY" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/obj/structure/window/reinforced/tinted{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window{tag = "icon-right (WEST)"; name = "Tactical Toilet"; icon_state = "right"; dir = 8; opacity = 1},/turf/open/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"jZ" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/assault_pod) -"ka" = (/turf/open/floor/plasteel/red/side{dir = 10},/area/tdome/tdomeobserve) -"kb" = (/turf/open/floor/plasteel/red/side{dir = 2},/area/tdome/tdomeobserve) -"kc" = (/turf/open/floor/plasteel/neutral/side{dir = 8},/area/tdome/tdomeobserve) -"kd" = (/turf/open/floor/plasteel/neutral/side{dir = 4},/area/tdome/tdomeobserve) -"ke" = (/turf/open/floor/plasteel/green/side,/area/tdome/tdomeobserve) -"kf" = (/turf/open/floor/plasteel/green/side{dir = 6},/area/tdome/tdomeobserve) -"kg" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/open/floor/plasteel/green/side{dir = 8},/area/centcom/evac) -"kh" = (/obj/structure/filingcabinet/filingcabinet,/turf/open/floor/plasteel,/area/centcom/evac) -"ki" = (/obj/structure/showcase{desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; icon = 'icons/obj/machines/telecomms.dmi'; icon_state = "processor"; name = "byond random number generator"},/turf/open/floor/plasteel/cult/airless,/area/wizard_station) -"kj" = (/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage"},/area/wizard_station) -"kk" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plasteel/cult/airless,/area/wizard_station) -"kl" = (/obj/structure/showcase{desc = "A historical figure of great importance to the wizard federation. He spent his long life learning magic, stealing artifacts, and harassing idiots with swords. May he rest forever, Rodney."; icon = 'icons/mob/mob.dmi'; icon_state = "nim"; name = "wizard of yendor showcase"},/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage4"},/area/wizard_station) -"km" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership) -"kn" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/syndicate_mothership) -"ko" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroom,/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"kp" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/beer{pixel_x = 5; pixel_y = -2},/obj/item/toy/cards/deck/syndicate{icon_state = "deck_syndicate_full"; pixel_x = -6; pixel_y = 6},/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"kq" = (/obj/machinery/computer/telecrystals/uplinker,/turf/open/floor/plasteel/podhatch{dir = 8},/area/syndicate_mothership) -"kr" = (/obj/machinery/computer/shuttle/syndicate/drop_pod,/turf/closed/wall/shuttle{tag = "icon-wall3"; icon_state = "wall3"; dir = 2},/area/shuttle/assault_pod) -"ks" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/tdome/tdomeobserve) -"kt" = (/turf/closed/indestructible/fakedoor{name = "Centcom"},/area/centcom/evac) -"ku" = (/turf/closed/indestructible/fakeglass{color = "#008000"; dir = 6; icon_state = "fakewindows2"},/area/wizard_station) -"kv" = (/obj/effect/forcefield,/obj/structure/door_assembly/door_assembly_uranium{anchored = 1; name = "Bridge"},/turf/open/floor/plasteel/cult,/area/wizard_station) -"kw" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/syndicate_mothership) -"kx" = (/turf/open/floor/plating,/area/syndicate_mothership) -"ky" = (/obj/machinery/door/poddoor/shutters{id = "nukeop_ready"; name = "shuttle dock"},/turf/open/floor/plating,/area/syndicate_mothership) -"kz" = (/obj/structure/chair,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/assault_pod) -"kA" = (/turf/open/floor/grass,/area/tdome/tdomeobserve) -"kB" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/tdome/tdomeobserve) -"kC" = (/turf/open/floor/plasteel/green/side{dir = 10},/area/centcom/evac) -"kD" = (/turf/open/floor/plasteel/green/side{dir = 6},/area/centcom/evac) -"kE" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/turf/open/floor/plasteel/cult{icon_state = "cultdamage6"},/area/wizard_station) -"kF" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"kG" = (/turf/open/floor/plasteel/cult,/area/wizard_station) -"kH" = (/turf/closed/indestructible/fakeglass,/area/syndicate_mothership) -"kI" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/open/floor/plating,/area/syndicate_mothership) -"kJ" = (/obj/machinery/button/door{id = "nukeop_ready"; name = "mission launch control"; pixel_x = -26; pixel_y = 0; req_access_txt = "151"},/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"kK" = (/obj/machinery/computer/telecrystals/uplinker,/turf/open/floor/plasteel/podhatch{dir = 10},/area/syndicate_mothership) -"kL" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 6},/area/syndicate_mothership) -"kM" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHEAST)"; icon_state = "darkblue"; dir = 5},/area/ctf) -"kN" = (/turf/open/space,/obj/machinery/porta_turret/syndicate/pod,/turf/closed/wall/shuttle{tag = "icon-wall3 (SOUTHWEST)"; icon_state = "wall3"; dir = 10},/area/shuttle/assault_pod) -"kO" = (/turf/open/space,/obj/machinery/porta_turret/syndicate/pod,/turf/closed/wall/shuttle{tag = "icon-wall3 (SOUTHEAST)"; icon_state = "wall3"; dir = 6},/area/shuttle/assault_pod) -"kP" = (/turf/closed/wall/shuttle{icon_state = "swall0"; dir = 2},/area/wizard_station) -"kQ" = (/turf/closed/indestructible/fakedoor{name = "Squad 4 Pod"},/area/wizard_station) -"kR" = (/turf/closed/wall/shuttle{icon_state = "swall4"; dir = 2},/area/wizard_station) -"kS" = (/turf/open/floor/plasteel/cult,/turf/closed/wall/shuttle{icon_state = "swall_f10"; dir = 2},/area/wizard_station) -"kT" = (/obj/effect/forcefield,/turf/open/floor/plasteel/cult,/area/wizard_station) -"kU" = (/turf/open/floor/plasteel/cult{icon_state = "cultdamage7"},/area/wizard_station) -"kV" = (/obj/effect/forcefield,/turf/open/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"kW" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHWEST)"; icon_state = "darkred"; dir = 9},/area/ctf) -"kX" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/ctf) -"kY" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5},/area/ctf) -"kZ" = (/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/structure/table/wood,/turf/open/floor/wood,/area/syndicate_mothership) -"la" = (/obj/structure/table/wood,/turf/open/floor/wood,/area/syndicate_mothership) -"lb" = (/obj/structure/table/wood,/obj/item/device/syndicatedetonator{desc = "This gaudy button can be used to instantly detonate syndicate bombs that have been activated on the station. It is also fun to press."},/turf/open/floor/wood,/area/syndicate_mothership) -"lc" = (/obj/structure/table/wood,/obj/item/toy/nuke,/turf/open/floor/wood,/area/syndicate_mothership) -"ld" = (/turf/open/floor/plating/airless{dir = 5; icon_state = "warnplate"},/area/syndicate_mothership) -"le" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/area/ctf) -"lf" = (/turf/open/floor/plating/airless{dir = 9; icon_state = "warnplate"},/area/syndicate_mothership) -"lg" = (/turf/open/floor/plasteel/redblue,/area/tdome/tdomeobserve) -"lh" = (/obj/structure/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/open/floor/plasteel/redblue,/area/tdome/tdomeobserve) -"li" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/open/space/transit,/area/wizard_station) -"lj" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/open/floor/plating/airless,/area/wizard_station) -"lk" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plasteel/airless,/area/wizard_station) -"ll" = (/turf/open/floor/plasteel/airless,/area/wizard_station) -"lm" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plating/airless,/area/wizard_station) -"ln" = (/turf/open/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"lo" = (/obj/effect/forcefield,/turf/open/floor/plasteel/cult{icon_state = "cultdamage7"},/area/wizard_station) -"lp" = (/obj/effect/forcefield,/turf/open/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) -"lq" = (/turf/open/floor/plasteel/black,/area/ctf) -"lr" = (/turf/open/floor/wood,/area/syndicate_mothership) -"ls" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/open/floor/wood,/area/syndicate_mothership) -"lt" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Uplink Management Control"; req_access_txt = "151"},/turf/open/floor/wood,/area/syndicate_mothership) -"lu" = (/turf/open/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/syndicate_mothership) -"lv" = (/turf/closed/indestructible/fakedoor{name = "Thunderdome"},/area/tdome/tdomeobserve) -"lw" = (/obj/machinery/computer/security/telescreen,/turf/open/floor/plasteel/redblue,/area/tdome/tdomeobserve) -"lx" = (/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/wizard_station) -"ly" = (/turf/open/floor/plasteel/cult,/turf/closed/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/wizard_station) -"lz" = (/turf/open/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) -"lA" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage2"},/area/wizard_station) -"lB" = (/obj/structure/table/wood/poker,/obj/item/toy/cards/cardhand,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage2"},/area/wizard_station) -"lC" = (/obj/machinery/computer/telecrystals/boss,/turf/open/floor/plasteel/podhatch{dir = 5},/area/syndicate_mothership) -"lD" = (/obj/structure/sign/map/left{pixel_y = -32},/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_left"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,/turf/open/floor/wood,/area/syndicate_mothership) -"lE" = (/obj/structure/sign/map/right{pixel_y = -32},/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_right"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,/turf/open/floor/wood,/area/syndicate_mothership) -"lF" = (/obj/machinery/door/airlock/centcom{name = "Equipment Room"; opacity = 1; req_access_txt = "150"},/turf/open/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) -"lG" = (/obj/structure/lattice,/obj/effect/forcefield,/turf/open/space/transit,/area/wizard_station) -"lH" = (/obj/machinery/vending/magivend,/turf/open/floor/plasteel/cult,/area/wizard_station) -"lI" = (/turf/open/floor/plasteel/cult{icon_state = "cultdamage3"},/area/wizard_station) -"lJ" = (/obj/machinery/vending/snack,/turf/open/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"lK" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (EAST)"; icon_state = "darkblue"; dir = 4},/area/ctf) -"lL" = (/turf/open/floor/plasteel/black,/area/syndicate_mothership) -"lM" = (/obj/machinery/mech_bay_recharge_port,/turf/open/floor/plating,/area/syndicate_mothership) -"lN" = (/turf/open/floor/mech_bay_recharge_floor,/area/syndicate_mothership) -"lO" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/plating,/area/syndicate_mothership) -"lP" = (/obj/machinery/vending/tool,/turf/open/floor/plasteel/black,/area/syndicate_mothership) -"lQ" = (/obj/structure/door_assembly/door_assembly_uranium{anchored = 1; name = "Break Room"},/turf/open/floor/plasteel/cult,/area/wizard_station) -"lR" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; name = "Break Room"},/turf/open/floor/plasteel/cult,/area/wizard_station) -"lS" = (/turf/open/floor/plasteel/blue,/area/ctf) -"lT" = (/turf/closed/indestructible/riveted,/area/tdome/arena) -"lU" = (/obj/machinery/igniter,/turf/open/floor/plasteel,/area/tdome/arena) -"lV" = (/turf/open/floor/plasteel,/area/tdome/arena) -"lW" = (/obj/structure/chair/wood/wings,/turf/open/floor/plasteel/cult,/area/wizard_station) -"lX" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/cult,/area/wizard_station) -"lY" = (/obj/structure/table/wood,/obj/item/weapon/retractor,/turf/open/floor/plasteel/cult,/area/wizard_station) -"lZ" = (/obj/structure/table/wood,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/obj/structure/mirror/magic{pixel_y = 28},/turf/open/floor/plasteel/cult,/area/wizard_station) -"ma" = (/obj/structure/table/wood,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/open/floor/plasteel/cult,/area/wizard_station) -"mb" = (/obj/structure/rack,/obj/item/clothing/head/helmet/space/hardsuit/wizard,/turf/open/floor/plasteel/cult/airless,/area/wizard_station) -"mc" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage"},/area/wizard_station) -"md" = (/obj/effect/forcefield,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage"},/area/wizard_station) -"me" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/cult/airless,/area/wizard_station) -"mf" = (/obj/structure/chair/stool,/turf/open/floor/plasteel/black,/area/syndicate_mothership) -"mg" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/red,/turf/open/floor/plasteel/black,/area/tdome/arena) -"mh" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/open/floor/plasteel/black,/area/tdome/arena) -"mi" = (/obj/effect/landmark{name = "tdome2"},/turf/open/floor/plasteel,/area/tdome/tdome2) -"mj" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/open/floor/plasteel,/area/tdome/arena) -"mk" = (/turf/open/floor/plasteel{icon_state = "red"; dir = 8},/area/tdome/arena) -"ml" = (/turf/open/floor/plasteel/green/side{dir = 4},/area/tdome/arena) -"mm" = (/obj/effect/landmark{name = "tdome1"},/turf/open/floor/plasteel,/area/tdome/tdome1) -"mn" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/saber/green,/turf/open/floor/plasteel/black,/area/tdome/arena) -"mo" = (/turf/closed/indestructible/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows"},/area/wizard_station) -"mp" = (/obj/structure/cult/tome,/turf/open/floor/plasteel/cult,/area/wizard_station) -"mq" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/cult,/area/wizard_station) -"mr" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/obj/item/clothing/shoes/sandal,/turf/open/floor/plasteel/cult,/area/wizard_station) -"ms" = (/obj/effect/decal/cleanable/blood/splatter,/obj/structure/rack{health = 9999},/obj/item/clothing/suit/space/hardsuit/wizard,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage"},/area/wizard_station) -"mt" = (/turf/open/floor/plasteel/cult,/turf/closed/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/wizard_station) -"mu" = (/turf/closed/wall/shuttle{icon_state = "swall8"; dir = 2},/area/wizard_station) -"mv" = (/obj/structure/closet/syndicate/personal,/turf/open/floor/plasteel/darkwarning{icon_state = "warndark"; dir = 1},/area/syndicate_mothership) -"mw" = (/obj/structure/table,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/open/floor/plasteel/darkwarning{icon_state = "warndark"; dir = 1},/area/syndicate_mothership) -"mx" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/open/floor/plasteel,/area/tdome/tdome2) -"my" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/open/floor/plasteel,/area/tdome/tdome1) -"mz" = (/turf/closed/indestructible/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station) -"mA" = (/obj/structure/bookcase,/turf/open/floor/plasteel/cult,/area/wizard_station) -"mB" = (/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/open/floor/plating,/area/wizard_station) -"mC" = (/turf/closed/indestructible/rock/snow,/area/syndicate_mothership) -"mD" = (/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/open/floor/plasteel/cult,/area/wizard_station) -"mE" = (/obj/effect/decal/cleanable/blood/splatter,/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/open/floor/plasteel/cult/airless,/area/wizard_station) -"mF" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plating/airless,/area/wizard_station) -"mG" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/airless,/area/wizard_station) -"mH" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plasteel/airless,/area/wizard_station) -"mI" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/open/floor/plating/airless,/area/wizard_station) -"mJ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/open/space/transit,/area/wizard_station) -"mK" = (/obj/machinery/camera{pixel_x = 11; pixel_y = -9; network = list("thunder"); c_tag = "Red Team"},/obj/effect/landmark{name = "tdome2"},/turf/open/floor/plasteel,/area/tdome/tdome2) -"mL" = (/turf/open/floor/bluegrid,/area/tdome/arena) -"mM" = (/obj/machinery/flasher{id = "tdomeflash"; name = "Thunderdome Flash"},/turf/open/floor/bluegrid,/area/tdome/arena) -"mN" = (/obj/machinery/camera{pixel_x = 12; pixel_y = -10; network = list("thunder"); c_tag = "Green Team"},/obj/effect/landmark{name = "tdome1"},/turf/open/floor/plasteel,/area/tdome/tdome1) -"mO" = (/turf/closed/indestructible/fakeglass{color = "#008000"},/area/wizard_station) -"mP" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "medium"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/open/floor/plating,/area/wizard_station) -"mQ" = (/obj/effect/landmark/start{name = "wizard"},/turf/open/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) -"mR" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/cult/airless,/area/wizard_station) -"mS" = (/turf/open/floor/plasteel/cult,/turf/closed/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/wizard_station) -"mT" = (/turf/closed/indestructible/fakedoor{name = "Squad 3 Pod"},/area/wizard_station) -"mU" = (/obj/machinery/camera{pixel_x = 10; network = list("thunder"); c_tag = "Arena"},/turf/open/floor/bluegrid,/area/tdome/arena) -"mV" = (/obj/structure/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 1},/turf/open/floor/plasteel/cult,/area/wizard_station) -"mW" = (/obj/structure/cult/pylon,/turf/open/floor/plasteel/cult,/area/wizard_station) -"mX" = (/obj/effect/decal/cleanable/blood/splatter,/obj/structure/rack,/obj/item/weapon/staff,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage"},/area/wizard_station) -"mY" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage4"},/area/wizard_station) -"mZ" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/forcefield,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage"},/area/wizard_station) -"na" = (/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage4"},/area/wizard_station) -"nb" = (/obj/structure/door_assembly/door_assembly_uranium{anchored = 1; name = "Corridor A"},/turf/open/floor/plasteel/cult,/area/wizard_station) -"nc" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; name = "Corridor A"},/turf/open/floor/plasteel/cult,/area/wizard_station) -"nd" = (/obj/structure/barricade/security,/turf/open/floor/plasteel/circuit,/area/ctf) -"ne" = (/obj/effect/forcefield,/turf/open/floor/plasteel/cult{icon_state = "cultdamage3"},/area/wizard_station) -"nf" = (/turf/open/floor/plasteel/darkblue,/area/ctf) -"ng" = (/obj/machinery/door/poddoor{id = "thunderdomehea"; name = "Heavy Supply"},/turf/open/floor/plasteel/black,/area/tdome/arena) -"nh" = (/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage2"},/area/wizard_station) -"ni" = (/obj/effect/forcefield,/turf/open/space,/area/wizard_station) -"nj" = (/obj/effect/decal/remains/human,/turf/open/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"nk" = (/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage5"},/area/wizard_station) -"nl" = (/obj/structure/table/reinforced,/turf/open/floor/plasteel/bluespace,/area/ctf) -"nm" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/open/floor/plasteel/black,/area/tdome/arena) -"nn" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 8},/area/tdome/tdomeadmin) -"no" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/tdome/tdomeadmin) -"np" = (/turf/closed/indestructible/fakeglass{icon_state = "fakewindows"; dir = 4},/area/tdome/tdomeadmin) -"nq" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/sneakers/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/open/floor/plasteel/black,/area/tdome/arena) -"nr" = (/obj/structure/lattice,/obj/effect/forcefield,/turf/open/space,/area/wizard_station) -"ns" = (/obj/effect/forcefield,/turf/open/space/transit,/area/wizard_station) -"nt" = (/turf/open/floor/plasteel/redyellow,/area/tdome/tdomeadmin) -"nu" = (/obj/structure/chair{dir = 1},/obj/effect/landmark{name = "tdomeadmin"},/turf/open/floor/plasteel/redyellow,/area/tdome/tdomeadmin) -"nv" = (/obj/structure/table,/obj/machinery/computer/security/telescreen{pixel_y = 0},/turf/open/floor/plasteel/redyellow,/area/tdome/tdomeadmin) -"nw" = (/obj/structure/chair/comfy/brown{dir = 1},/turf/open/floor/plasteel/redyellow,/area/tdome/tdomeadmin) -"nx" = (/obj/machinery/button/flasher{id = "tdomeflash"; pixel_x = 0; pixel_y = 0},/obj/structure/table,/turf/open/floor/plasteel/redyellow,/area/tdome/tdomeadmin) -"ny" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; name = "Personal Quarters"},/turf/open/floor/plasteel/cult,/area/wizard_station) -"nz" = (/turf/closed/indestructible/riveted,/area/tdome/tdomeadmin) -"nA" = (/obj/machinery/computer/security/telescreen{pixel_y = -32},/turf/open/floor/plasteel/redyellow,/area/tdome/tdomeadmin) -"nB" = (/turf/open/floor/plasteel,/area/tdome/tdomeadmin) -"nC" = (/obj/structure/table/wood,/obj/effect/landmark{name = "Teleport-Scroll"},/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/open/floor/carpet,/area/wizard_station) -"nD" = (/turf/open/floor/carpet,/area/wizard_station) -"nE" = (/turf/open/floor/plasteel/cult,/turf/closed/wall/shuttle{dir = 2; icon_state = "swall_f10"; layer = 2},/area/wizard_station) -"nF" = (/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage6"},/area/wizard_station) -"nG" = (/turf/closed/indestructible/fakedoor{name = "Thunderdome Admin"},/area/tdome/tdomeadmin) -"nH" = (/obj/structure/table,/obj/machinery/button/door{id = "thunderdomehea"; name = "Heavy Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/open/floor/plasteel,/area/tdome/tdomeadmin) -"nI" = (/obj/structure/table,/obj/machinery/button/door{id = "thunderdome"; name = "Main Blast Doors Control"; pixel_y = 0; req_access_txt = "102"},/turf/open/floor/plasteel,/area/tdome/tdomeadmin) -"nJ" = (/obj/structure/table,/obj/machinery/button/door{id = "thunderdomegen"; name = "General Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/open/floor/plasteel,/area/tdome/tdomeadmin) -"nK" = (/obj/structure/bed,/obj/item/weapon/bedsheet/wiz,/turf/open/floor/carpet,/area/wizard_station) -"nL" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage"},/area/wizard_station) -"nM" = (/turf/closed/wall/shuttle{icon_state = "swall1"; dir = 2},/area/wizard_station) -"nN" = (/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/wizard_station) -"nO" = (/turf/open/floor/plasteel/cult/airless{icon_state = "cultdamage7"},/area/wizard_station) -"nP" = (/obj/structure/dresser,/obj/item/weapon/storage/backpack/satchel,/turf/open/floor/carpet,/area/wizard_station) -"nQ" = (/obj/structure/table/wood,/obj/item/weapon/storage/bag/tray,/obj/item/weapon/reagent_containers/food/snacks/burger/spell,/turf/open/floor/carpet,/area/wizard_station) -"nR" = (/turf/closed/indestructible/fakedoor{name = "Squad 2 Pod"},/area/wizard_station) -"nS" = (/turf/closed/wall/shuttle,/area/wizard_station) -"nT" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/wizard_station) -"nU" = (/turf/closed/indestructible/riveted,/area/centcom/holding) -"nV" = (/obj/structure/table/wood,/turf/open/floor/plasteel/cult,/area/wizard_station) -"nW" = (/obj/structure/table/wood,/obj/item/weapon/gun/magic/wand{desc = "Used in emergencies to reignite magma engines."; max_charges = 0; name = "wand of emergency engine ignition"},/turf/open/floor/plasteel/cult,/area/wizard_station) -"nX" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/open/space,/area/wizard_station) -"nY" = (/obj/structure/table,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"nZ" = (/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"oa" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"ob" = (/obj/structure/reagent_dispensers/beerkeg,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"oc" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"od" = (/obj/structure/rack,/obj/item/device/camera,/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"oe" = (/obj/structure/rack,/obj/item/toy/sword,/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"of" = (/obj/structure/rack,/obj/item/toy/gun,/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"og" = (/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"oh" = (/turf/open/floor/plating/beach/sand,/area/centcom/holding) -"oi" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/open/floor/plating/beach/sand,/area/centcom/holding) -"oj" = (/obj/effect/overlay/palmtree_l,/turf/open/floor/plating/beach/sand,/area/centcom/holding) -"ok" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; name = "Engine Room B"},/turf/open/space,/area/wizard_station) -"ol" = (/obj/structure/table,/obj/item/clothing/head/that,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"om" = (/obj/structure/chair/stool{pixel_y = 8},/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"on" = (/obj/item/device/camera,/turf/open/floor/plating/beach/sand,/area/centcom/holding) -"oo" = (/obj/structure/cult/forge{desc = "A engine used in powering the wizards ship"; name = "magma engine"},/turf/open/floor/plasteel/cult,/area/wizard_station) -"op" = (/obj/structure/table,/obj/item/ammo_box/foambox,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"oq" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"or" = (/obj/structure/table,/obj/item/weapon/lighter,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"os" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"ot" = (/obj/structure/table,/obj/item/weapon/dice/d20,/turf/open/floor/plasteel/freezer{dir = 2},/area/centcom/holding) -"ou" = (/obj/structure/chair/stool{pixel_y = 8},/obj/item/clothing/head/bandana{pixel_y = -10},/obj/item/clothing/glasses/sunglasses,/turf/open/floor/plating/beach/sand,/area/centcom/holding) -"ov" = (/obj/structure/chair/stool{pixel_y = 8},/turf/open/floor/plating/beach/sand,/area/centcom/holding) -"ow" = (/obj/structure/window/reinforced{color = "#008000"; dir = 1},/turf/open/floor/plating/lava/airless,/area/wizard_station) -"ox" = (/obj/structure/rack,/obj/item/clothing/head/that,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/tie/waistcoat,/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"oy" = (/obj/item/toy/beach_ball,/turf/open/floor/plating/beach/sand,/area/centcom/holding) -"oz" = (/obj/structure/shuttle/engine/heater,/turf/open/floor/plating/lava/airless,/area/wizard_station) -"oA" = (/obj/structure/rack,/obj/item/weapon/storage/crayons,/obj/item/weapon/gun/projectile/automatic/toy/pistol,/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"oB" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"oC" = (/obj/structure/shuttle/engine/propulsion,/turf/open/space,/area/space) -"oD" = (/obj/structure/rack,/obj/item/weapon/storage/crayons,/obj/item/weapon/gun/projectile/shotgun/toy/crossbow,/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"oE" = (/obj/structure/barricade/security,/turf/open/floor/plasteel/bluespace,/area/ctf) -"oF" = (/turf/open/floor/plasteel/bluespace,/area/ctf) -"oG" = (/obj/structure/rack,/obj/item/clothing/shoes/laceup,/obj/item/clothing/under/suit_jacket/female{desc = "A black trouser suit for women. Very formal."; name = "black suit"; pixel_x = 3; pixel_y = 1},/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"oH" = (/obj/structure/table,/obj/item/weapon/gun/projectile/automatic/toy/pistol,/turf/open/floor/plasteel/cafeteria,/area/centcom/holding) -"oI" = (/turf/open/floor/plating/beach/water,/area/centcom/holding) -"oJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/centcom/holding) -"oK" = (/turf/open/floor/plasteel/delivery,/area/centcom/holding) -"oL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel,/area/centcom/holding) -"oM" = (/obj/effect/landmark{name = "Holding Facility"},/turf/open/floor/engine,/area/centcom/holding) -"oN" = (/turf/closed/indestructible/abductor{icon_state = "alien20"},/area/abductor_ship) -"oO" = (/turf/closed/indestructible/abductor{icon_state = "alien21"},/area/abductor_ship) -"oP" = (/turf/closed/indestructible/abductor{icon_state = "alien22"},/area/abductor_ship) -"oQ" = (/turf/closed/indestructible/abductor{icon_state = "alien23"},/area/abductor_ship) -"oR" = (/turf/closed/indestructible/abductor{icon_state = "alien24"},/area/abductor_ship) -"oS" = (/turf/closed/indestructible/abductor{icon_state = "alien16"},/area/abductor_ship) -"oT" = (/turf/closed/indestructible/abductor{icon_state = "alien17"},/area/abductor_ship) -"oU" = (/obj/machinery/abductor/experiment{team = 1},/turf/open/floor/plating/abductor,/area/abductor_ship) -"oV" = (/obj/effect/landmark/abductor/console,/turf/open/floor/plating/abductor,/area/abductor_ship) -"oW" = (/obj/machinery/abductor/pad{team = 1},/turf/open/floor/plating/abductor,/area/abductor_ship) -"oX" = (/turf/closed/indestructible/abductor{icon_state = "alien18"},/area/abductor_ship) -"oY" = (/turf/closed/indestructible/abductor{icon_state = "alien19"},/area/abductor_ship) -"oZ" = (/obj/machinery/abductor/experiment{team = 4},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pa" = (/obj/effect/landmark/abductor/console{team = 4},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pb" = (/obj/machinery/abductor/pad{team = 4},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pc" = (/turf/closed/indestructible/abductor{icon_state = "alien14"},/area/abductor_ship) -"pd" = (/obj/machinery/computer/camera_advanced/abductor{team = 1},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pe" = (/turf/open/floor/plating/abductor,/area/abductor_ship) -"pf" = (/obj/structure/closet/abductor,/turf/open/floor/plating/abductor,/area/abductor_ship) -"pg" = (/turf/closed/indestructible/abductor{icon_state = "alien15"},/area/abductor_ship) -"ph" = (/obj/machinery/computer/camera_advanced/abductor{team = 4},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pi" = (/turf/closed/indestructible/abductor{icon_state = "alien12"},/area/abductor_ship) -"pj" = (/obj/item/weapon/retractor/alien,/obj/item/weapon/hemostat/alien,/obj/structure/table/abductor,/turf/open/floor/plating/abductor,/area/abductor_ship) -"pk" = (/obj/effect/landmark/abductor/scientist,/turf/open/floor/plating/abductor,/area/abductor_ship) -"pl" = (/obj/structure/table/optable/abductor,/turf/open/floor/plating/abductor,/area/abductor_ship) -"pm" = (/obj/effect/landmark/abductor/agent,/turf/open/floor/plating/abductor,/area/abductor_ship) -"pn" = (/obj/structure/table/abductor,/obj/item/weapon/storage/box/alienhandcuffs,/turf/open/floor/plating/abductor,/area/abductor_ship) -"po" = (/turf/closed/indestructible/abductor{icon_state = "alien13"},/area/abductor_ship) -"pp" = (/obj/effect/landmark/abductor/scientist{team = 4},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pq" = (/obj/effect/landmark/abductor/agent{team = 4},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pr" = (/turf/closed/indestructible/abductor{icon_state = "alien10"},/area/abductor_ship) -"ps" = (/obj/item/weapon/surgical_drapes,/obj/item/weapon/paper/abductor,/obj/item/weapon/scalpel/alien,/obj/structure/table/abductor,/obj/item/weapon/cautery/alien,/turf/open/floor/plating/abductor,/area/abductor_ship) -"pt" = (/turf/closed/indestructible/abductor{icon_state = "alien11"},/area/abductor_ship) -"pu" = (/turf/closed/indestructible/abductor{icon_state = "alien6"},/area/abductor_ship) -"pv" = (/turf/closed/indestructible/abductor{icon_state = "alien7"},/area/abductor_ship) -"pw" = (/obj/machinery/abductor/gland_dispenser,/turf/open/floor/plating/abductor,/area/abductor_ship) -"px" = (/obj/structure/table/abductor,/obj/item/weapon/surgicaldrill/alien,/obj/item/weapon/circular_saw/alien,/turf/open/floor/plating/abductor,/area/abductor_ship) -"py" = (/obj/structure/bed/abductor,/turf/open/floor/plating/abductor,/area/abductor_ship) -"pz" = (/turf/closed/indestructible/abductor{icon_state = "alien8"},/area/abductor_ship) -"pA" = (/turf/closed/indestructible/abductor{icon_state = "alien9"},/area/abductor_ship) -"pB" = (/turf/closed/indestructible/abductor,/area/abductor_ship) -"pC" = (/turf/closed/indestructible/abductor{icon_state = "alien2"},/area/abductor_ship) -"pD" = (/turf/closed/indestructible/abductor{icon_state = "alien3"},/area/abductor_ship) -"pE" = (/turf/closed/indestructible/abductor{icon_state = "alien4"},/area/abductor_ship) -"pF" = (/turf/closed/indestructible/abductor{icon_state = "alien5"},/area/abductor_ship) -"pG" = (/obj/machinery/abductor/experiment{team = 2},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pH" = (/obj/effect/landmark/abductor/console{team = 2},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pI" = (/obj/machinery/abductor/pad{team = 2},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pJ" = (/obj/machinery/abductor/experiment{team = 3},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pK" = (/obj/effect/landmark/abductor/console{team = 3},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pL" = (/obj/machinery/abductor/pad{team = 3},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pM" = (/obj/machinery/computer/camera_advanced/abductor{team = 2},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pN" = (/obj/machinery/computer/camera_advanced/abductor{team = 3},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pO" = (/obj/effect/landmark/abductor/scientist{team = 2},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pP" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pQ" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pR" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/open/floor/plating/abductor,/area/abductor_ship) -"pS" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (WEST)"; icon_state = "darkred"; dir = 8},/area/ctf) -"pT" = (/obj/structure/barricade/security,/turf/open/floor/plasteel/circuit/rcircuit,/area/ctf) -"pU" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/area/ctf) -"pV" = (/turf/open/floor/plasteel/red,/area/ctf) -"pW" = (/obj/structure/kitchenspike,/turf/open/floor/plasteel/black,/area/ctf) -"pX" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10},/area/ctf) -"pY" = (/turf/open/floor/plasteel/darkblue/side,/area/ctf) -"pZ" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHEAST)"; icon_state = "darkblue"; dir = 6},/area/ctf) -"qa" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/ctf) -"qb" = (/turf/open/floor/plasteel/darkred/side,/area/ctf) -"qc" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/area/ctf) -"qd" = (/obj/structure/window/reinforced/fulltile{health = 1e+007; maxhealth = 1e+007; name = "hardened window"},/turf/open/floor/plating,/area/ctf) -"qe" = (/turf/open/floor/plasteel/black,/turf/open/floor/plasteel/warningline,/area/ctf) -"qf" = (/turf/open/floor/plasteel/darkblue/corner,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/ctf) -"qg" = (/turf/open/floor/plasteel/black,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qh" = (/turf/open/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qi" = (/turf/open/floor/plasteel/darkblue/corner,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qj" = (/turf/open/floor/plasteel/black,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf) -"qk" = (/obj/machinery/power/emitter/energycannon,/turf/open/floor/plating,/area/ctf) -"ql" = (/turf/open/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf) -"qm" = (/turf/open/floor/plasteel/black,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf) -"qn" = (/turf/open/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/area/ctf) -"qo" = (/turf/open/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/area/ctf) -"qp" = (/turf/open/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/ctf) -"qq" = (/turf/open/floor/plasteel/black,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf) -"qr" = (/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/ctf) -"qs" = (/turf/open/floor/plating,/area/ctf) -"qt" = (/turf/open/floor/plating{dir = 4; icon_state = "warnplate"; luminosity = 2; initial_gas_mix = "o2=0.01;n2=0.01;TEMP=2.7"},/area/ctf) -"qu" = (/turf/open/floor/plasteel/darkblue/corner,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf) -"qv" = (/turf/open/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (NORTH)"; icon_state = "darkbluecorners"; dir = 1},/area/ctf) -"qw" = (/turf/open/floor/plasteel/darkblue/corner,/area/ctf) -"qx" = (/turf/open/floor/plating{dir = 1; icon_state = "warnplate"},/area/ctf) -"qy" = (/turf/open/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf) -"qz" = (/turf/open/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (NORTH)"; icon_state = "darkbluecorners"; dir = 1},/turf/open/floor/plasteel/warningline,/area/ctf) -"qA" = (/turf/open/floor/plasteel/darkblue/corner{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/turf/open/floor/plasteel/warningline,/area/ctf) -"qB" = (/turf/open/floor/plasteel/black,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf) -"qC" = (/obj/machinery/power/emitter/energycannon{tag = "icon-emitter (NORTH)"; icon_state = "emitter"; dir = 1},/turf/open/floor/plating,/area/ctf) -"qD" = (/obj/structure/divine/trap/ctf/blue,/turf/open/floor/plasteel/blue,/area/ctf) -"qE" = (/turf/open/floor/plasteel/circuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qF" = (/turf/open/floor/plasteel/circuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/ctf) -"qG" = (/turf/open/floor/plasteel/circuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf) -"qH" = (/turf/open/floor/plasteel/darkred,/area/ctf) -"qI" = (/obj/structure/divine/trap/ctf/red,/turf/open/floor/plasteel/darkred,/area/ctf) -"qJ" = (/turf/open/floor/plasteel/circuit,/area/ctf) -"qK" = (/turf/open/floor/plasteel/circuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf) -"qL" = (/turf/open/floor/plasteel/circuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf) -"qM" = (/turf/open/floor/plasteel/circuit,/turf/open/floor/plasteel/warningline,/area/ctf) -"qN" = (/turf/open/floor/plasteel/circuit,/turf/open/floor/plasteel/warningline,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf) -"qO" = (/turf/open/floor/plasteel/circuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf) -"qP" = (/obj/structure/barricade/security,/turf/open/floor/plasteel/circuit/gcircuit/off,/area/ctf) -"qQ" = (/obj/structure/divine/trap/ctf/red,/turf/open/floor/plasteel/red,/area/ctf) -"qR" = (/obj/structure/barricade/security,/obj/structure/barricade/security,/turf/open/floor/plasteel/circuit/rcircuit,/area/ctf) -"qS" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qT" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHWEST)"; icon_state = "darkblue"; dir = 9},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/ctf) -"qU" = (/turf/open/floor/plasteel/circuit/gcircuit/off,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qV" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTHEAST)"; icon_state = "darkblue"; dir = 5},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qW" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qX" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHWEST)"; icon_state = "darkred"; dir = 9},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"qY" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf) -"qZ" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (WEST)"; icon_state = "darkblue"; dir = 8},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf) -"ra" = (/turf/open/floor/plasteel/circuit/gcircuit/off,/area/ctf) -"rb" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (EAST)"; icon_state = "darkred"; dir = 4},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf) -"rc" = (/turf/open/floor/plasteel/circuit/rcircuit,/area/ctf) -"rd" = (/turf/open/floor/plasteel/circuit/gcircuit/animated,/area/ctf) -"re" = (/obj/machinery/capture_the_flag/blue,/turf/open/floor/plasteel/circuit/gcircuit/animated,/area/ctf) -"rf" = (/obj/item/weapon/twohanded/required/ctf/blue,/turf/open/floor/plasteel/circuit/gcircuit/animated,/area/ctf) -"rg" = (/obj/item/weapon/twohanded/required/ctf/red,/turf/open/floor/plasteel/circuit/gcircuit/animated,/area/ctf) -"rh" = (/obj/machinery/capture_the_flag/red,/turf/open/floor/plasteel/circuit/gcircuit/animated,/area/ctf) -"ri" = (/turf/open/floor/plasteel/darkblue/side,/turf/open/floor/plasteel/warningline,/area/ctf) -"rj" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf) -"rk" = (/turf/open/floor/plasteel/circuit/gcircuit/off,/turf/open/floor/plasteel/warningline,/area/ctf) -"rl" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHEAST)"; icon_state = "darkblue"; dir = 6},/turf/open/floor/plasteel/warningline,/area/ctf) -"rm" = (/turf/open/floor/plasteel/darkred/side,/turf/open/floor/plasteel/warningline,/area/ctf) -"rn" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/turf/open/floor/plasteel/warningline,/area/ctf) -"ro" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf) -"rp" = (/turf/open/floor/plasteel/circuit/rcircuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"rq" = (/turf/open/floor/plasteel/circuit/rcircuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/ctf) -"rr" = (/turf/open/floor/plasteel/circuit/rcircuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf) -"rs" = (/turf/open/floor/plasteel/circuit/rcircuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/area/ctf) -"rt" = (/turf/open/floor/plasteel/circuit/rcircuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf) -"ru" = (/turf/open/floor/plasteel/circuit/rcircuit,/turf/open/floor/plasteel/warningline,/area/ctf) -"rv" = (/turf/open/floor/plasteel/circuit/rcircuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf) -"rw" = (/turf/open/floor/plasteel/circuit/rcircuit,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf) -"rx" = (/turf/open/floor/plasteel/black,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (WEST)"; icon_state = "warningline"; dir = 8},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"ry" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"rz" = (/turf/open/floor/plasteel/darkred/corner,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/ctf) -"rA" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/ctf) -"rB" = (/turf/open/floor/plasteel/darkred/corner,/area/ctf) -"rC" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/area/ctf) -"rD" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf) -"rE" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (EAST)"; icon_state = "darkredcorners"; dir = 4},/area/ctf) -"rF" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/area/ctf) -"rG" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (WEST)"; icon_state = "darkredcorners"; dir = 8},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (EAST)"; icon_state = "warningline"; dir = 4},/area/ctf) -"rH" = (/turf/open/floor/plasteel/black,/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/ctf) -"rI" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/open/floor/plasteel/warningline,/area/ctf) -"rJ" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (EAST)"; icon_state = "darkredcorners"; dir = 4},/turf/open/floor/plasteel/warningline,/area/ctf) -"rK" = (/turf/open/floor/plasteel/darkred/corner{tag = "icon-darkredcorners (NORTH)"; icon_state = "darkredcorners"; dir = 1},/turf/open/floor/plasteel/warningline{tag = "icon-warningline (SOUTHEAST)"; icon_state = "warningline"; dir = 6},/area/ctf) +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/open/space/transit, +/area/space) +"ab" = ( +/turf/open/space, +/area/space) +"ac" = ( +/turf/open/space/transit/horizontal, +/area/space) +"ad" = ( +/turf/closed/indestructible/riveted, +/area/space) +"ae" = ( +/obj/structure/window/reinforced, +/turf/closed/indestructible/riveted, +/area/space) +"af" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/closed/indestructible/riveted, +/area/space) +"ag" = ( +/obj/structure/foamedmetal, +/obj/structure/window/reinforced/tinted{ + icon_state = "rwindow"; + dir = 4 + }, +/obj/structure/window{ + icon_state = "rwindow"; + dir = 8 + }, +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/bunker) +"ah" = ( +/obj/structure/foamedmetal, +/obj/structure/window{ + icon_state = "rwindow"; + dir = 4 + }, +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/bunker) +"ai" = ( +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/bunker) +"aj" = ( +/obj/structure/table, +/obj/item/stack/medical/ointment{ + heal_burn = 10 + }, +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/bunker) +"ak" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/closed/indestructible/riveted, +/area/space) +"al" = ( +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"am" = ( +/obj/structure/chair/wood/normal{ + icon_state = "wooden_chair"; + dir = 4 + }, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"an" = ( +/obj/structure/table/wood/poker, +/obj/effect/holodeck_effect/cards, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"ao" = ( +/obj/structure/table/wood/poker, +/obj/item/clothing/mask/cigarette/pipe, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"ap" = ( +/obj/structure/chair/wood/normal{ + icon_state = "wooden_chair"; + dir = 8 + }, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"aq" = ( +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/wildlife) +"ar" = ( +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/offline) +"as" = ( +/turf/open/floor/holofloor{ + icon_state = "engine"; + name = "Burn-Mix Floor"; + initial_gas_mix = "o2=2500;plasma=5000;TEMP=370" + }, +/area/holodeck/rec_center/burn) +"at" = ( +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "red" + }, +/area/holodeck/rec_center/court) +"au" = ( +/turf/open/floor/holofloor{ + dir = 1; + icon_state = "red" + }, +/area/holodeck/rec_center/court) +"av" = ( +/turf/open/floor/holofloor{ + dir = 5; + icon_state = "red" + }, +/area/holodeck/rec_center/court) +"aw" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/closed/indestructible/riveted, +/area/space) +"ax" = ( +/obj/structure/foamedmetal, +/obj/structure/window{ + icon_state = "rwindow"; + dir = 8 + }, +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/bunker) +"ay" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/bunker) +"az" = ( +/obj/structure/chair/wood/normal{ + icon_state = "wooden_chair"; + dir = 1 + }, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"aA" = ( +/obj/effect/holodeck_effect/mobspawner, +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/wildlife) +"aB" = ( +/obj/effect/holodeck_effect/sparks, +/turf/open/floor/holofloor{ + icon_state = "engine"; + name = "Burn-Mix Floor"; + initial_gas_mix = "o2=2500;plasma=5000;TEMP=370" + }, +/area/holodeck/rec_center/burn) +"aC" = ( +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "red" + }, +/area/holodeck/rec_center/court) +"aD" = ( +/turf/open/floor/holofloor, +/area/holodeck/rec_center/court) +"aE" = ( +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "red" + }, +/area/holodeck/rec_center/court) +"aF" = ( +/obj/structure/table, +/obj/item/weapon/gun/energy/laser, +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/bunker) +"aG" = ( +/obj/structure/window/reinforced/tinted{ + icon_state = "rwindow"; + dir = 4 + }, +/turf/open/floor/holofloor{ + icon_state = "wood"; + dir = 9 + }, +/area/holodeck/rec_center/lounge) +"aH" = ( +/obj/item/device/instrument/violin, +/obj/structure/table/wood, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"aI" = ( +/obj/structure/chair/comfy/brown{ + buildstackamount = 0 + }, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"aJ" = ( +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "green" + }, +/area/holodeck/rec_center/court) +"aK" = ( +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "green" + }, +/area/holodeck/rec_center/court) +"aL" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp/green, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"aM" = ( +/obj/structure/chair/comfy/brown{ + buildstackamount = 0; + dir = 1 + }, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"aN" = ( +/obj/docking_port/stationary/transit{ + dheight = 0; + dir = 2; + dwidth = 11; + height = 22; + id = "whiteship_transit"; + width = 35 + }, +/turf/open/space/transit/horizontal, +/area/space) +"aO" = ( +/obj/structure/chair/wood/normal, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"aP" = ( +/obj/docking_port/stationary/transit{ + dir = 4; + dwidth = 1; + height = 4; + id = "pod3_transit"; + turf_type = /turf/open/space/transit/horizontal; + width = 3 + }, +/turf/open/space/transit/horizontal, +/area/space) +"aQ" = ( +/obj/structure/table, +/obj/item/stack/medical/bruise_pack{ + heal_brute = 10 + }, +/turf/open/floor/holofloor/plating, +/area/holodeck/rec_center/bunker) +"aR" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/holofloor/carpet, +/area/holodeck/rec_center/lounge) +"aS" = ( +/turf/open/floor/holofloor{ + dir = 10; + icon_state = "green" + }, +/area/holodeck/rec_center/court) +"aT" = ( +/turf/open/floor/holofloor{ + dir = 2; + icon_state = "green" + }, +/area/holodeck/rec_center/court) +"aU" = ( +/turf/open/floor/holofloor{ + dir = 6; + icon_state = "green" + }, +/area/holodeck/rec_center/court) +"aV" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/closed/indestructible/riveted, +/area/space) +"aW" = ( +/obj/effect/holodeck_effect/mobspawner/pet, +/turf/open/floor/holofloor/grass, +/area/holodeck/rec_center/pet_lounge) +"aX" = ( +/turf/open/floor/holofloor/grass, +/area/holodeck/rec_center/pet_lounge) +"aY" = ( +/obj/structure/table/glass, +/obj/item/weapon/surgicaldrill, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 9 + }, +/area/holodeck/rec_center/medical) +"aZ" = ( +/obj/structure/table/glass, +/obj/item/weapon/hemostat, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 1 + }, +/area/holodeck/rec_center/medical) +"ba" = ( +/obj/structure/table/glass, +/obj/item/weapon/scalpel{ + pixel_y = 10 + }, +/obj/item/weapon/circular_saw, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 1 + }, +/area/holodeck/rec_center/medical) +"bb" = ( +/obj/structure/table/glass, +/obj/item/weapon/retractor, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 1 + }, +/area/holodeck/rec_center/medical) +"bc" = ( +/obj/structure/table/glass, +/obj/item/weapon/cautery, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 5 + }, +/area/holodeck/rec_center/medical) +"bd" = ( +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"be" = ( +/obj/structure/holohoop, +/turf/open/floor/holofloor{ + dir = 1; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"bf" = ( +/turf/open/floor/holofloor{ + dir = 5; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"bg" = ( +/turf/open/floor/holofloor/beach, +/area/holodeck/rec_center/beach) +"bh" = ( +/obj/structure/table, +/obj/machinery/readybutton, +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "red" + }, +/area/holodeck/rec_center/thunderdome) +"bi" = ( +/obj/structure/table, +/obj/item/clothing/head/helmet/thunderdome, +/obj/item/clothing/suit/armor/tdome/red, +/obj/item/clothing/under/color/red, +/obj/item/weapon/holo/esword/red, +/turf/open/floor/holofloor{ + dir = 1; + icon_state = "red" + }, +/area/holodeck/rec_center/thunderdome) +"bj" = ( +/obj/structure/table, +/turf/open/floor/holofloor{ + dir = 5; + icon_state = "red" + }, +/area/holodeck/rec_center/thunderdome) +"bk" = ( +/obj/machinery/readybutton, +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bl" = ( +/turf/open/floor/holofloor{ + dir = 1; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bm" = ( +/turf/open/floor/holofloor{ + dir = 5; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bn" = ( +/obj/structure/table/glass, +/obj/item/weapon/surgical_drapes, +/obj/item/weapon/razor, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 8 + }, +/area/holodeck/rec_center/medical) +"bo" = ( +/turf/open/floor/holofloor{ + icon_state = "white" + }, +/area/holodeck/rec_center/medical) +"bp" = ( +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 4 + }, +/area/holodeck/rec_center/medical) +"bq" = ( +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"br" = ( +/turf/open/floor/holofloor, +/area/holodeck/rec_center/basketball) +"bs" = ( +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"bt" = ( +/obj/effect/overlay/palmtree_r, +/turf/open/floor/holofloor/beach, +/area/holodeck/rec_center/beach) +"bu" = ( +/obj/effect/overlay/palmtree_l, +/obj/effect/overlay/coconut, +/turf/open/floor/holofloor/beach, +/area/holodeck/rec_center/beach) +"bv" = ( +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "red" + }, +/area/holodeck/rec_center/thunderdome) +"bw" = ( +/turf/open/floor/holofloor, +/area/holodeck/rec_center/thunderdome) +"bx" = ( +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "red" + }, +/area/holodeck/rec_center/thunderdome) +"by" = ( +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bz" = ( +/turf/open/floor/holofloor, +/area/holodeck/rec_center/dodgeball) +"bA" = ( +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bB" = ( +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 10 + }, +/area/holodeck/rec_center/medical) +"bC" = ( +/turf/open/floor/holofloor{ + icon_state = "warnwhite" + }, +/area/holodeck/rec_center/medical) +"bD" = ( +/obj/structure/table/optable, +/turf/open/floor/holofloor{ + icon_state = "warnwhite" + }, +/area/holodeck/rec_center/medical) +"bE" = ( +/obj/machinery/computer/operating, +/turf/open/floor/holofloor{ + icon_state = "warnwhite" + }, +/area/holodeck/rec_center/medical) +"bF" = ( +/obj/structure/table/glass, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/mask/surgical, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 6 + }, +/area/holodeck/rec_center/medical) +"bG" = ( +/turf/open/floor/holofloor{ + dir = 1; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"bH" = ( +/turf/open/floor/holofloor{ + dir = 2; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bI" = ( +/obj/docking_port/stationary/transit{ + dir = 4; + dwidth = 1; + height = 4; + id = "pod4_transit"; + turf_type = /turf/open/space/transit/horizontal; + width = 3 + }, +/turf/open/space/transit/horizontal, +/area/space) +"bJ" = ( +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/holofloor{ + icon_state = "white" + }, +/area/holodeck/rec_center/medical) +"bK" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 9 + }, +/area/holodeck/rec_center/medical) +"bL" = ( +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 8 + }, +/area/holodeck/rec_center/medical) +"bM" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/beakers, +/turf/open/floor/holofloor{ + icon_state = "white" + }, +/area/holodeck/rec_center/medical) +"bN" = ( +/obj/machinery/washing_machine, +/turf/open/floor/holofloor{ + icon_state = "white" + }, +/area/holodeck/rec_center/medical) +"bO" = ( +/turf/open/floor/holofloor{ + dir = 10; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"bP" = ( +/turf/open/floor/holofloor{ + dir = 2; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"bQ" = ( +/turf/open/floor/holofloor{ + dir = 6; + icon_state = "red" + }, +/area/holodeck/rec_center/basketball) +"bR" = ( +/obj/item/clothing/under/color/rainbow, +/obj/item/clothing/glasses/sunglasses, +/turf/open/floor/holofloor/beach, +/area/holodeck/rec_center/beach) +"bS" = ( +/obj/structure/window, +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "red" + }, +/area/holodeck/rec_center/thunderdome) +"bT" = ( +/obj/structure/window, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/thunderdome) +"bU" = ( +/obj/structure/window, +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "red" + }, +/area/holodeck/rec_center/thunderdome) +"bV" = ( +/obj/structure/window{ + dir = 1 + }, +/obj/item/toy/beach_ball/holoball/dodgeball, +/turf/open/floor/holofloor{ + dir = 10; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bW" = ( +/obj/structure/window{ + dir = 1 + }, +/obj/item/toy/beach_ball/holoball/dodgeball, +/turf/open/floor/holofloor{ + dir = 2; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bX" = ( +/obj/structure/window{ + dir = 1 + }, +/obj/item/toy/beach_ball/holoball/dodgeball, +/turf/open/floor/holofloor{ + dir = 6; + icon_state = "red" + }, +/area/holodeck/rec_center/dodgeball) +"bY" = ( +/obj/machinery/chem_master, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 10 + }, +/area/holodeck/rec_center/medical) +"bZ" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/syringes, +/turf/open/floor/holofloor{ + icon_state = "white" + }, +/area/holodeck/rec_center/medical) +"ca" = ( +/obj/structure/closet/wardrobe/white, +/turf/open/floor/holofloor{ + icon_state = "white" + }, +/area/holodeck/rec_center/medical) +"cb" = ( +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"cc" = ( +/turf/open/floor/holofloor{ + dir = 1; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"cd" = ( +/turf/open/floor/holofloor{ + dir = 5; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"ce" = ( +/obj/item/toy/beach_ball, +/turf/open/floor/holofloor/beach, +/area/holodeck/rec_center/beach) +"cf" = ( +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "green" + }, +/area/holodeck/rec_center/thunderdome) +"cg" = ( +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/thunderdome) +"ch" = ( +/obj/structure/window{ + dir = 1 + }, +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "green" + }, +/area/holodeck/rec_center/thunderdome) +"ci" = ( +/obj/structure/window, +/obj/item/toy/beach_ball/holoball/dodgeball, +/turf/open/floor/holofloor{ + dir = 9; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"cj" = ( +/obj/structure/window, +/obj/item/toy/beach_ball/holoball/dodgeball, +/turf/open/floor/holofloor{ + dir = 1; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"ck" = ( +/obj/structure/window, +/obj/item/toy/beach_ball/holoball/dodgeball, +/turf/open/floor/holofloor{ + dir = 5; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"cl" = ( +/obj/docking_port/stationary/transit{ + dir = 4; + dwidth = 9; + height = 11; + id = "emergency_transit"; + width = 22 + }, +/turf/open/space/transit, +/area/space) +"cm" = ( +/obj/structure/window, +/turf/open/floor/holofloor{ + icon_state = "white" + }, +/area/holodeck/rec_center/medical) +"cn" = ( +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"co" = ( +/obj/item/toy/beach_ball/holoball, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/basketball) +"cp" = ( +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"cq" = ( +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "green" + }, +/area/holodeck/rec_center/thunderdome) +"cr" = ( +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "green" + }, +/area/holodeck/rec_center/thunderdome) +"cs" = ( +/turf/open/floor/holofloor{ + dir = 8; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"ct" = ( +/turf/open/floor/holofloor{ + dir = 4; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"cu" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/medical, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 9 + }, +/area/holodeck/rec_center/medical) +"cv" = ( +/obj/structure/window{ + icon_state = "rwindow"; + dir = 8 + }, +/obj/structure/bed, +/obj/item/weapon/bedsheet/medical, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 5 + }, +/area/holodeck/rec_center/medical) +"cw" = ( +/obj/structure/window{ + icon_state = "rwindow"; + dir = 8 + }, +/obj/structure/window, +/obj/machinery/computer/pandemic, +/turf/open/floor/holofloor{ + icon_state = "white" + }, +/area/holodeck/rec_center/medical) +"cx" = ( +/turf/open/floor/holofloor{ + dir = 2; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"cy" = ( +/turf/open/floor/holofloor{ + dir = 1; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"cz" = ( +/obj/machinery/door/window/westleft, +/turf/open/floor/holofloor{ + icon_state = "warnwhitecorner"; + dir = 8 + }, +/area/holodeck/rec_center/medical) +"cA" = ( +/obj/machinery/door/window/westleft, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 5 + }, +/area/holodeck/rec_center/medical) +"cB" = ( +/obj/machinery/door/window/westleft, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 6 + }, +/area/holodeck/rec_center/medical) +"cC" = ( +/obj/structure/window{ + icon_state = "rwindow"; + dir = 8 + }, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 5 + }, +/area/holodeck/rec_center/medical) +"cD" = ( +/turf/open/floor/holofloor/beach/coast_t, +/area/holodeck/rec_center/beach) +"cE" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/medical, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 10 + }, +/area/holodeck/rec_center/medical) +"cF" = ( +/obj/structure/window{ + icon_state = "rwindow"; + dir = 8 + }, +/obj/structure/bed, +/obj/item/weapon/bedsheet/medical, +/turf/open/floor/holofloor{ + icon_state = "warnwhite" + }, +/area/holodeck/rec_center/medical) +"cG" = ( +/obj/structure/window{ + icon_state = "rwindow"; + dir = 8 + }, +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 1 + }, +/turf/open/floor/holofloor{ + icon_state = "warnwhite" + }, +/area/holodeck/rec_center/medical) +"cH" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 1 + }, +/turf/open/floor/holofloor{ + icon_state = "warnwhite"; + dir = 6 + }, +/area/holodeck/rec_center/medical) +"cI" = ( +/turf/open/floor/holofloor{ + dir = 10; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"cJ" = ( +/obj/structure/holohoop{ + dir = 1 + }, +/turf/open/floor/holofloor{ + dir = 2; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"cK" = ( +/turf/open/floor/holofloor{ + dir = 6; + icon_state = "green" + }, +/area/holodeck/rec_center/basketball) +"cL" = ( +/turf/open/floor/holofloor/beach/water, +/area/holodeck/rec_center/beach) +"cM" = ( +/obj/structure/table, +/turf/open/floor/holofloor{ + dir = 10; + icon_state = "green" + }, +/area/holodeck/rec_center/thunderdome) +"cN" = ( +/obj/structure/table, +/obj/item/clothing/head/helmet/thunderdome, +/obj/item/clothing/suit/armor/tdome/green, +/obj/item/clothing/under/color/green, +/obj/item/weapon/holo/esword/green, +/turf/open/floor/holofloor{ + dir = 2; + icon_state = "green" + }, +/area/holodeck/rec_center/thunderdome) +"cO" = ( +/obj/structure/table, +/obj/machinery/readybutton, +/turf/open/floor/holofloor{ + dir = 6; + icon_state = "green" + }, +/area/holodeck/rec_center/thunderdome) +"cP" = ( +/turf/open/floor/holofloor{ + dir = 10; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"cQ" = ( +/turf/open/floor/holofloor{ + dir = 2; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"cR" = ( +/obj/machinery/readybutton, +/turf/open/floor/holofloor{ + dir = 6; + icon_state = "green" + }, +/area/holodeck/rec_center/dodgeball) +"cS" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/closed/indestructible/riveted, +/area/space) +"cT" = ( +/turf/closed/indestructible/riveted, +/area/tdome/arena_source) +"cU" = ( +/obj/machinery/igniter, +/turf/open/floor/plasteel, +/area/tdome/arena_source) +"cV" = ( +/turf/open/floor/plasteel, +/area/tdome/arena_source) +"cW" = ( +/obj/structure/rack, +/obj/item/clothing/under/color/red, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/armor/tdome/red, +/obj/item/clothing/head/helmet/thunderdome, +/obj/item/weapon/melee/baton/loaded, +/obj/item/weapon/melee/energy/sword/saber/red, +/turf/open/floor/plasteel/black, +/area/tdome/arena_source) +"cX" = ( +/obj/machinery/door/poddoor{ + id = "thunderdomegen"; + name = "General Supply" + }, +/turf/open/floor/plasteel/black, +/area/tdome/arena_source) +"cY" = ( +/obj/machinery/door/poddoor{ + id = "thunderdome"; + name = "Thunderdome Blast Door" + }, +/turf/open/floor/plasteel, +/area/tdome/arena_source) +"cZ" = ( +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/tdome/arena_source) +"da" = ( +/turf/open/floor/plasteel/green/side{ + dir = 4 + }, +/area/tdome/arena_source) +"db" = ( +/obj/structure/rack, +/obj/item/clothing/under/color/green, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/armor/tdome/green, +/obj/item/clothing/head/helmet/thunderdome, +/obj/item/weapon/melee/baton/loaded, +/obj/item/weapon/melee/energy/sword/saber/green, +/turf/open/floor/plasteel/black, +/area/tdome/arena_source) +"dc" = ( +/turf/open/floor/bluegrid, +/area/tdome/arena_source) +"dd" = ( +/obj/machinery/flasher{ + id = "tdomeflash"; + name = "Thunderdome Flash" + }, +/turf/open/floor/bluegrid, +/area/tdome/arena_source) +"de" = ( +/obj/docking_port/stationary/transit{ + dir = 8; + dwidth = 2; + height = 5; + id = "laborcamp_transit"; + width = 9 + }, +/turf/open/space/transit, +/area/space) +"df" = ( +/obj/machinery/door/poddoor{ + id = "thunderdomehea"; + name = "Heavy Supply" + }, +/turf/open/floor/plasteel/black, +/area/tdome/arena_source) +"dg" = ( +/obj/structure/rack, +/obj/item/clothing/under/color/red, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/head/helmet/swat, +/obj/item/weapon/gun/energy/laser, +/turf/open/floor/plasteel/black, +/area/tdome/arena_source) +"dh" = ( +/obj/structure/rack, +/obj/item/clothing/under/color/green, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/head/helmet/swat, +/obj/item/weapon/gun/energy/laser, +/turf/open/floor/plasteel/black, +/area/tdome/arena_source) +"di" = ( +/obj/docking_port/stationary/transit{ + dheight = 9; + dir = 2; + dwidth = 5; + height = 22; + id = "syndicate_transit"; + width = 18 + }, +/turf/open/space/transit, +/area/space) +"dj" = ( +/obj/docking_port/stationary/transit{ + dir = 8; + dwidth = 2; + height = 12; + id = "ferry_transit"; + width = 5 + }, +/turf/open/space/transit/horizontal, +/area/space) +"dk" = ( +/obj/docking_port/stationary/transit{ + dwidth = 1; + height = 4; + id = "pod1_transit"; + width = 3 + }, +/turf/open/space/transit, +/area/space) +"dl" = ( +/obj/docking_port/stationary/transit{ + dwidth = 1; + height = 4; + id = "pod2_transit"; + width = 3 + }, +/turf/open/space/transit, +/area/space) +"dm" = ( +/obj/docking_port/stationary/transit{ + dir = 8; + dwidth = 5; + height = 7; + id = "supply_transit"; + width = 12 + }, +/turf/open/space/transit, +/area/space) +"dn" = ( +/obj/docking_port/stationary/transit{ + dir = 8; + dwidth = 3; + height = 5; + id = "mining_transit"; + width = 7 + }, +/turf/open/space/transit, +/area/space) +"do" = ( +/obj/docking_port/stationary/transit{ + dwidth = 3; + height = 7; + id = "steel_rain_transit"; + width = 7 + }, +/turf/open/space/transit/horizontal, +/area/space) +"dp" = ( +/turf/closed/indestructible/riveted, +/area/start) +"dq" = ( +/obj/effect/landmark/start, +/turf/open/floor/plating, +/area/start) +"dr" = ( +/turf/closed/indestructible/splashscreen, +/area/start) +"ds" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall_s6"; + dir = 2 + }, +/area/centcom/evac) +"dt" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_r"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/centcom/evac) +"du" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/centcom/evac) +"dv" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_l"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/centcom/evac) +"dw" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall_s10"; + dir = 2 + }, +/area/centcom/evac) +"dx" = ( +/obj/docking_port/stationary{ + dir = 1; + dwidth = 1; + height = 4; + id = "pod1_away"; + name = "recovery ship"; + width = 3 + }, +/turf/open/space, +/area/space) +"dy" = ( +/obj/docking_port/stationary{ + dir = 1; + dwidth = 1; + height = 4; + id = "pod2_away"; + name = "recovery ship"; + width = 3 + }, +/turf/open/space, +/area/space) +"dz" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall3"; + dir = 2 + }, +/area/centcom/evac) +"dA" = ( +/obj/structure/window/reinforced, +/obj/structure/shuttle/engine/heater{ + icon_state = "heater"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/centcom/evac) +"dB" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall7"; + dir = 2 + }, +/area/centcom/evac) +"dC" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall8"; + dir = 2 + }, +/area/centcom/evac) +"dD" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plating, +/area/centcom/evac) +"dE" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall0"; + dir = 2 + }, +/area/centcom/evac) +"dF" = ( +/obj/structure/window/shuttle, +/obj/structure/grille, +/turf/open/floor/plating, +/area/centcom/evac) +"dG" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall4"; + dir = 2 + }, +/area/centcom/evac) +"dH" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall11"; + dir = 2 + }, +/area/centcom/evac) +"dI" = ( +/turf/open/floor/plating, +/area/centcom/evac) +"dJ" = ( +/turf/open/floor/plating, +/turf/closed/wall/shuttle{ + icon_state = "swall_f6"; + dir = 2 + }, +/area/centcom/evac) +"dK" = ( +/turf/open/floor/plasteel/shuttle, +/turf/closed/wall/shuttle{ + icon_state = "swall_f9"; + dir = 2 + }, +/area/centcom/evac) +"dL" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"dM" = ( +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor2" + }, +/area/centcom/evac) +"dN" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/toxin{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/weapon/storage/firstaid/toxin, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"dO" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/fire{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"dP" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 0 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"dQ" = ( +/turf/open/floor/plasteel/shuttle, +/turf/closed/wall/shuttle{ + icon_state = "swall_f5"; + dir = 2 + }, +/area/centcom/evac) +"dR" = ( +/turf/open/floor/plating, +/turf/closed/wall/shuttle{ + dir = 2; + icon_state = "swall_f10"; + layer = 2 + }, +/area/centcom/evac) +"dS" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall1"; + dir = 2 + }, +/area/centcom/evac) +"dT" = ( +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"dU" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall_s5"; + dir = 2 + }, +/area/centcom/evac) +"dV" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall_s9"; + dir = 2 + }, +/area/centcom/evac) +"dW" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall12"; + dir = 2 + }, +/area/centcom/evac) +"dX" = ( +/turf/closed/wall/shuttle{ + icon_state = "swallc1"; + dir = 2 + }, +/area/centcom/evac) +"dY" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"dZ" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/storage/fancy/donut_box, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"ea" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"eb" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"ec" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 8 + }, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"ed" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"ee" = ( +/turf/closed/wall/shuttle{ + icon_state = "swallc2"; + dir = 2 + }, +/area/centcom/evac) +"ef" = ( +/obj/machinery/computer/secure_data, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"eg" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"eh" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"ei" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/clipboard, +/obj/item/weapon/stamp, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"ej" = ( +/obj/structure/table, +/obj/item/device/assembly/flash/handheld, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"ek" = ( +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"el" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"em" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/handcuffs, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"en" = ( +/obj/machinery/door/window/northright{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Security Desk"; + req_access_txt = "103" + }, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/centcom/evac) +"eo" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 1; + height = 4; + id = "pod3_away"; + name = "recovery ship"; + width = 3 + }, +/turf/open/space, +/area/space) +"ep" = ( +/obj/structure/bed, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eq" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/centcom/evac) +"er" = ( +/obj/machinery/door/airlock/shuttle, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor2" + }, +/area/centcom/evac) +"es" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 1; + height = 4; + id = "pod4_away"; + name = "recovery ship"; + width = 3 + }, +/turf/open/space, +/area/space) +"et" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall2"; + dir = 2 + }, +/area/centcom/evac) +"eu" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"ev" = ( +/obj/structure/table, +/obj/item/weapon/hand_labeler, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"ew" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"ex" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall14"; + dir = 2 + }, +/area/centcom/evac) +"ey" = ( +/turf/closed/wall/shuttle{ + icon_state = "swallc4"; + dir = 2 + }, +/area/centcom/evac) +"ez" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Cockpit"; + req_access_txt = "109" + }, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor2" + }, +/area/centcom/evac) +"eA" = ( +/obj/structure/table, +/obj/item/device/radio/off, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eB" = ( +/obj/structure/chair{ + dir = 4; + name = "Prosecution" + }, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eC" = ( +/obj/structure/filingcabinet, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eD" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eE" = ( +/obj/structure/table, +/obj/item/weapon/storage/lockbox, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eF" = ( +/obj/structure/table, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eG" = ( +/obj/machinery/computer/shuttle, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eH" = ( +/obj/structure/table, +/obj/item/weapon/clipboard, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eI" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/turf/open/floor/plasteel/shuttle, +/area/centcom/evac) +"eJ" = ( +/turf/closed/indestructible/riveted, +/area/centcom/ferry) +"eK" = ( +/turf/closed/indestructible/fakedoor, +/area/centcom/ferry) +"eL" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eM" = ( +/obj/machinery/vending/cigarette{ + products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/lighter/greyscale = 4, /obj/item/weapon/storage/fancy/rollingpapers = 5) + }, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eN" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eO" = ( +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eP" = ( +/obj/structure/flora/kirbyplants, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eQ" = ( +/obj/structure/chair/office/dark, +/obj/effect/landmark{ + name = "Emergencyresponseteam" + }, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eR" = ( +/obj/structure/table/reinforced, +/turf/open/floor/vault, +/area/centcom/ferry) +"eS" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/obj/effect/landmark{ + name = "Emergencyresponseteam" + }, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eT" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/effect/landmark{ + name = "Emergencyresponseteam" + }, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eU" = ( +/obj/structure/sign/map/left, +/turf/open/floor/light, +/area/centcom/ferry) +"eV" = ( +/obj/structure/sign/map/right, +/turf/open/floor/light, +/area/centcom/ferry) +"eW" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"eX" = ( +/obj/structure/closet/secure_closet/ertCom, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"eY" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"eZ" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/c4, +/obj/item/weapon/c4{ + pixel_x = 7 + }, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"fa" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/gun/syringe/rapidsyringe, +/obj/structure/extinguisher_cabinet{ + pixel_y = 28 + }, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"fb" = ( +/obj/structure/closet/secure_closet/ertEngi, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"fc" = ( +/obj/structure/table/wood, +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, +/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila, +/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{ + pixel_x = -5 + }, +/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 5 + }, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"fd" = ( +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"fe" = ( +/obj/machinery/door/poddoor/ert, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"ff" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/obj/effect/landmark{ + name = "Emergencyresponseteam" + }, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"fg" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/box/drinkingglasses, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"fh" = ( +/turf/closed/indestructible/riveted, +/area/centcom/prison) +"fi" = ( +/turf/open/floor/plasteel/darkgreen/side{ + dir = 4 + }, +/area/centcom/ferry) +"fj" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "adminshut"; + name = "Administrative Shutters" + }, +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 6 + }, +/area/centcom/ferry) +"fk" = ( +/turf/open/floor/wood, +/area/centcom/ferry) +"fl" = ( +/obj/effect/landmark{ + name = "prisonwarp" + }, +/turf/open/floor/plasteel, +/area/centcom/prison) +"fm" = ( +/obj/structure/closet/secure_closet/ertSec, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"fn" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/storage/box/emps, +/obj/item/weapon/gun/energy/ionrifle{ + pin = /obj/item/device/firing_pin + }, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"fo" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/gun/syringe/rapidsyringe, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"fp" = ( +/obj/structure/closet/secure_closet/ertMed, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/ferry) +"fq" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/vault, +/area/centcom/ferry) +"fr" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/weapon/pen/blue, +/turf/open/floor/vault, +/area/centcom/ferry) +"fs" = ( +/obj/machinery/door/airlock/centcom{ + name = "Administrative Office"; + opacity = 1; + req_access_txt = "109" + }, +/turf/open/floor/wood, +/area/centcom/ferry) +"ft" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/wood, +/area/centcom/ferry) +"fu" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 8 + }, +/area/centcom/ferry) +"fv" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 8 + }, +/area/centcom/ferry) +"fw" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 4 + }, +/area/centcom/ferry) +"fx" = ( +/obj/machinery/door/airlock/centcom{ + name = "briefing room"; + opacity = 1; + req_access_txt = "101" + }, +/turf/open/floor/plasteel/black, +/area/centcom/ferry) +"fy" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin, +/turf/open/floor/carpet, +/area/centcom/ferry) +"fz" = ( +/obj/structure/table/wood, +/obj/item/weapon/pen, +/turf/open/floor/carpet, +/area/centcom/ferry) +"fA" = ( +/turf/open/floor/carpet, +/area/centcom/ferry) +"fB" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 1 + }, +/area/centcom/ferry) +"fC" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "adminshut"; + name = "Administrative Shutters" + }, +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 1 + }, +/area/centcom/ferry) +"fD" = ( +/obj/machinery/button/door{ + id = "adminshut"; + name = "Administrative Shutter-Control"; + pixel_y = 26 + }, +/turf/open/floor/carpet, +/area/centcom/ferry) +"fE" = ( +/obj/structure/chair/comfy/black{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/centcom/ferry) +"fF" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 9 + }, +/area/centcom/ferry) +"fG" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 6 + }, +/area/centcom/ferry) +"fH" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "adminshut"; + name = "Administrative Shutters" + }, +/turf/closed/indestructible/fakeglass, +/area/centcom/ferry) +"fI" = ( +/obj/structure/showcase/fakesec, +/turf/open/floor/carpet, +/area/centcom/ferry) +"fJ" = ( +/obj/structure/filingcabinet, +/turf/open/floor/carpet, +/area/centcom/ferry) +"fK" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/carpet, +/area/centcom/ferry) +"fL" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_x = 0 + }, +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 8 + }, +/area/centcom/ferry) +"fM" = ( +/obj/machinery/computer/shuttle/ferry, +/turf/open/floor/plasteel/darkwarning{ + dir = 8 + }, +/area/centcom/ferry) +"fN" = ( +/turf/closed/indestructible/riveted, +/area/centcom/evac) +"fO" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 12; + id = "ferry_away"; + name = "unknown"; + width = 5 + }, +/turf/open/space, +/area/space) +"fP" = ( +/obj/machinery/door/airlock/external{ + name = "Ferry Airlock"; + req_access_txt = "0" + }, +/turf/open/floor/plasteel/delivery, +/area/centcom/ferry) +"fQ" = ( +/turf/open/floor/plasteel/delivery, +/area/centcom/ferry) +"fR" = ( +/turf/open/floor/plasteel/darkwarning{ + dir = 8 + }, +/area/centcom/ferry) +"fS" = ( +/turf/open/floor/plasteel/darkgreen/corner{ + dir = 4 + }, +/area/centcom/ferry) +"fT" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/dresser, +/turf/open/floor/wood, +/area/centcom/ferry) +"fU" = ( +/obj/machinery/vending/autodrobe, +/turf/open/floor/wood, +/area/centcom/ferry) +"fV" = ( +/turf/open/floor/plasteel/darkred/side{ + dir = 9 + }, +/area/centcom/evac) +"fW" = ( +/turf/open/floor/plasteel/darkred/side{ + dir = 1 + }, +/area/centcom/evac) +"fX" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/handcuffs, +/turf/open/floor/plasteel/darkred/side{ + dir = 5 + }, +/area/centcom/evac) +"fY" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 5 + }, +/area/centcom/ferry) +"fZ" = ( +/obj/machinery/door/airlock/centcom{ + name = "Dressing Room"; + opacity = 1; + req_access_txt = "0" + }, +/turf/open/floor/wood, +/area/centcom/ferry) +"ga" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/wood, +/area/centcom/ferry) +"gb" = ( +/turf/closed/indestructible/fakedoor{ + name = "Centcom Security" + }, +/area/centcom/evac) +"gc" = ( +/turf/open/floor/plasteel/black, +/area/centcom/evac) +"gd" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 10 + }, +/area/centcom/ferry) +"ge" = ( +/turf/open/floor/plasteel/darkgreen/corner, +/area/centcom/ferry) +"gf" = ( +/obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen, +/turf/open/floor/wood, +/area/centcom/ferry) +"gg" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/clipboard, +/turf/open/floor/plasteel/darkred/side{ + dir = 8 + }, +/area/centcom/evac) +"gh" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/plasteel/black, +/area/centcom/evac) +"gi" = ( +/obj/structure/showcase/fakesec, +/turf/open/floor/plasteel/black, +/area/centcom/evac) +"gj" = ( +/turf/closed/indestructible/fakeglass, +/area/centcom/ferry) +"gk" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/ferry) +"gl" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/centcom/ferry) +"gm" = ( +/obj/machinery/door/window/northleft{ + dir = 2; + name = "Centcom Security"; + req_access_txt = "101" + }, +/turf/open/floor/plasteel/black, +/area/centcom/evac) +"gn" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/darkred/side{ + dir = 10 + }, +/area/centcom/evac) +"go" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/darkred/side{ + dir = 2 + }, +/area/centcom/evac) +"gp" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/turf/open/floor/plasteel/darkred/side{ + dir = 2 + }, +/area/centcom/evac) +"gq" = ( +/obj/machinery/door/airlock/centcom{ + name = "Transport Shuttle"; + opacity = 1; + req_access_txt = "101" + }, +/turf/open/floor/plasteel/darkgreen/side{ + dir = 2 + }, +/area/centcom/ferry) +"gr" = ( +/turf/closed/indestructible/riveted, +/area/centcom/control) +"gs" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/open/floor/grass, +/area/centcom/control) +"gt" = ( +/obj/structure/flora/ausbushes/palebush, +/turf/open/floor/grass, +/area/centcom/control) +"gu" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 1 + }, +/area/centcom/control) +"gv" = ( +/turf/open/floor/plasteel/green/side{ + dir = 1 + }, +/area/centcom/control) +"gw" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 9 + }, +/area/centcom/evac) +"gx" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 8 + }, +/area/centcom/evac) +"gy" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 4 + }, +/area/centcom/evac) +"gz" = ( +/obj/machinery/door/airlock/centcom{ + name = "Centcom Security"; + opacity = 1; + req_access_txt = "0" + }, +/turf/open/floor/plasteel/black, +/area/centcom/evac) +"gA" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 6 + }, +/area/centcom/evac) +"gB" = ( +/turf/closed/indestructible/fakeglass, +/area/centcom/control) +"gC" = ( +/turf/open/floor/plasteel, +/area/centcom/control) +"gD" = ( +/obj/structure/flora/kirbyplants, +/turf/open/floor/plasteel/red/side{ + dir = 9 + }, +/area/centcom/evac) +"gE" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/centcom/evac) +"gF" = ( +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/centcom/evac) +"gG" = ( +/obj/structure/rack, +/obj/item/weapon/gun/projectile/shotgun/toy/crossbow, +/obj/item/toy/foamblade, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/centcom/evac) +"gH" = ( +/obj/structure/rack, +/obj/item/weapon/storage/crayons, +/obj/item/toy/sword, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/centcom/evac) +"gI" = ( +/turf/closed/indestructible/fakeglass, +/area/centcom/evac) +"gJ" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 8 + }, +/area/centcom/evac) +"gK" = ( +/turf/open/floor/plasteel, +/area/centcom/evac) +"gL" = ( +/turf/open/floor/plasteel/warning{ + dir = 4 + }, +/area/centcom/evac) +"gM" = ( +/obj/machinery/door/poddoor/shuttledock{ + name = "blast doorend" + }, +/turf/open/floor/engine, +/area/centcom/evac) +"gN" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 6 + }, +/area/centcom/control) +"gO" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/centcom/evac) +"gP" = ( +/obj/structure/chair/office/dark, +/turf/open/floor/plasteel, +/area/centcom/evac) +"gQ" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + dir = 4 + }, +/area/centcom/evac) +"gR" = ( +/obj/machinery/door/poddoor/shuttledock, +/turf/open/floor/engine, +/area/centcom/evac) +"gS" = ( +/turf/open/floor/grass, +/area/centcom/control) +"gT" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/green/side{ + dir = 8 + }, +/area/centcom/control) +"gU" = ( +/turf/open/floor/plasteel/warning{ + dir = 4 + }, +/area/centcom/control) +"gV" = ( +/obj/machinery/door/airlock/centcom{ + name = "Centcom Customs"; + opacity = 1; + req_access_txt = "109" + }, +/turf/open/floor/plasteel/black, +/area/centcom/control) +"gW" = ( +/turf/open/floor/plasteel/black, +/area/centcom/control) +"gX" = ( +/obj/structure/table, +/turf/open/floor/plasteel/black, +/area/centcom/control) +"gY" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/turf/open/floor/plasteel/red/side{ + dir = 2 + }, +/area/centcom/evac) +"gZ" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/red/side{ + dir = 2 + }, +/area/centcom/evac) +"ha" = ( +/obj/structure/table/reinforced, +/obj/item/toy/carpplushie, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + dir = 6 + }, +/area/centcom/evac) +"hb" = ( +/turf/closed/indestructible/riveted, +/area/centcom/supply) +"hc" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 1 + }, +/area/centcom/control) +"hd" = ( +/turf/open/floor/plasteel/green/corner, +/area/centcom/control) +"he" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/black, +/area/centcom/control) +"hf" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 + }, +/area/centcom/evac) +"hg" = ( +/turf/open/floor/plasteel/yellowsiding/corner{ + dir = 1 + }, +/area/centcom/evac) +"hh" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 9; + height = 11; + id = "emergency_away"; + name = "Centcom"; + width = 22 + }, +/turf/open/space, +/area/space) +"hi" = ( +/turf/closed/indestructible/riveted, +/area/syndicate_mothership) +"hj" = ( +/obj/structure/closet, +/turf/open/floor/plasteel/warning/corner{ + dir = 1 + }, +/area/centcom/supply) +"hk" = ( +/obj/structure/closet/wardrobe/cargotech, +/turf/open/floor/plasteel/loadingarea, +/area/centcom/supply) +"hl" = ( +/obj/structure/closet/secure_closet/quartermaster, +/turf/open/floor/plasteel/loadingarea, +/area/centcom/supply) +"hm" = ( +/obj/structure/closet, +/turf/open/floor/plasteel, +/area/centcom/supply) +"hn" = ( +/turf/open/floor/plasteel/green/side{ + dir = 4 + }, +/area/centcom/control) +"ho" = ( +/obj/machinery/button/door{ + desc = "A remote control switch for port-side blast doors."; + icon_state = "doorctrl0"; + id = "CentComPort"; + name = "Security Doors"; + pixel_y = 28; + req_access_txt = "101" + }, +/obj/structure/showcase/fakeid, +/turf/open/floor/plasteel/black, +/area/centcom/control) +"hp" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/centcom/control) +"hq" = ( +/obj/structure/table, +/obj/item/weapon/stamp{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/weapon/paper/centcom, +/turf/open/floor/plasteel/black, +/area/centcom/control) +"hr" = ( +/turf/open/floor/plasteel/red/corner{ + dir = 1 + }, +/area/centcom/evac) +"hs" = ( +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"ht" = ( +/obj/structure/flora/grass/brown, +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"hu" = ( +/obj/structure/flora/tree/pine, +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"hv" = ( +/obj/structure/flora/grass/both, +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"hw" = ( +/obj/item/weapon/disk/data, +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"hx" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 6 + }, +/area/centcom/supply) +"hy" = ( +/turf/open/floor/plasteel/warning{ + dir = 8 + }, +/area/centcom/supply) +"hz" = ( +/turf/open/floor/plasteel, +/area/centcom/supply) +"hA" = ( +/turf/open/floor/plasteel/green/corner{ + dir = 1 + }, +/area/centcom/control) +"hB" = ( +/turf/open/floor/plasteel/green/corner{ + dir = 4 + }, +/area/centcom/control) +"hC" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor{ + base_state = "rightsecure"; + dir = 1; + icon_state = "rightsecure"; + name = "Centcom Customs"; + req_access_txt = "109" + }, +/turf/open/floor/plasteel/black, +/area/centcom/control) +"hD" = ( +/turf/open/floor/plasteel/warning/corner{ + dir = 1 + }, +/area/centcom/evac) +"hE" = ( +/obj/item/toy/figure/syndie, +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"hF" = ( +/obj/machinery/door/airlock/external{ + name = "Supply Shuttle"; + req_access_txt = "106" + }, +/turf/open/floor/plasteel/delivery, +/area/centcom/supply) +"hG" = ( +/obj/machinery/door/airlock/centcom{ + name = "Centcom Supply"; + req_access_txt = "106" + }, +/turf/open/floor/plasteel/brown{ + dir = 4 + }, +/area/centcom/supply) +"hH" = ( +/turf/open/floor/plasteel/brown{ + dir = 8 + }, +/area/centcom/control) +"hI" = ( +/obj/machinery/door/airlock/centcom{ + name = "Centcom Docks"; + opacity = 1; + req_access_txt = "101" + }, +/turf/open/floor/plasteel/black, +/area/centcom/control) +"hJ" = ( +/obj/machinery/door/poddoor/preopen{ + id = "CentComPort"; + name = "security door" + }, +/turf/open/floor/plasteel/loadingarea{ + dir = 8 + }, +/area/centcom/control) +"hK" = ( +/turf/open/floor/plasteel/warning{ + dir = 8 + }, +/area/centcom/evac) +"hL" = ( +/obj/structure/cult/talisman{ + desc = "A altar dedicated to the Wizard's Federation" + }, +/obj/item/weapon/kitchen/knife/ritual, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"hM" = ( +/obj/structure/flora/bush, +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"hN" = ( +/obj/machinery/computer/cargo, +/turf/open/floor/plasteel/warning{ + dir = 8 + }, +/area/centcom/supply) +"hO" = ( +/turf/open/floor/plasteel/green/corner{ + dir = 8 + }, +/area/centcom/control) +"hP" = ( +/turf/open/floor/plasteel/warning/corner{ + dir = 4 + }, +/area/centcom/evac) +"hQ" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 5; + height = 7; + id = "supply_away"; + name = "Centcom"; + width = 12 + }, +/turf/open/space, +/area/space) +"hR" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/green/side{ + dir = 4 + }, +/area/centcom/control) +"hS" = ( +/turf/open/floor/plasteel/green/corner{ + dir = 8 + }, +/area/centcom/evac) +"hT" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 1 + }, +/area/centcom/supply) +"hU" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/green/side{ + dir = 8 + }, +/area/centcom/evac) +"hV" = ( +/turf/open/floor/plasteel/yellowsiding, +/area/centcom/evac) +"hW" = ( +/turf/open/floor/plasteel/yellowsiding/corner{ + dir = 8 + }, +/area/centcom/evac) +"hX" = ( +/turf/open/floor/plating/asteroid/snow, +/area/space) +"hY" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 1 + }, +/area/centcom/supply) +"hZ" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/green/side{ + dir = 10 + }, +/area/centcom/control) +"ia" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/green/side{ + dir = 6 + }, +/area/centcom/control) +"ib" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/turf/open/floor/plasteel/green/side{ + dir = 1 + }, +/area/centcom/evac) +"ic" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/green/side{ + dir = 1 + }, +/area/centcom/evac) +"id" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/green/side{ + dir = 5 + }, +/area/centcom/evac) +"ie" = ( +/obj/machinery/door/poddoor/shuttledock{ + name = "blast door3" + }, +/turf/open/floor/engine, +/area/centcom/evac) +"if" = ( +/obj/machinery/door/airlock/centcom{ + aiControlDisabled = 1; + name = "Assault Pod"; + opacity = 1; + req_access_txt = "150" + }, +/turf/open/floor/plating, +/area/shuttle/assault_pod) +"ig" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'FOURTH WALL'."; + name = "\improper FOURTH WALL"; + pixel_x = -32 + }, +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"ih" = ( +/obj/structure/statue/uranium/nuke, +/turf/open/floor/plating/asteroid/snow, +/area/syndicate_mothership) +"ii" = ( +/turf/closed/indestructible/fakeglass, +/area/centcom/supply) +"ij" = ( +/turf/closed/indestructible/riveted, +/area/tdome/tdomeobserve) +"ik" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 8 + }, +/area/tdome/tdomeobserve) +"il" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 4 + }, +/area/tdome/tdomeobserve) +"im" = ( +/obj/machinery/door/airlock/centcom{ + name = "Thunderdome"; + opacity = 1; + req_access_txt = "101" + }, +/turf/open/floor/plasteel, +/area/tdome/tdomeobserve) +"in" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/centcom/evac) +"io" = ( +/obj/structure/table/reinforced, +/obj/item/toy/AI, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/green/side{ + dir = 4 + }, +/area/centcom/evac) +"ip" = ( +/obj/machinery/door/poddoor/shuttledock{ + name = "blast door2" + }, +/turf/open/floor/engine, +/area/centcom/evac) +"iq" = ( +/obj/docking_port/stationary{ + area_type = /area/syndicate_mothership; + dheight = 9; + dir = 2; + dwidth = 5; + height = 24; + id = "syndicate_away"; + name = "syndicate recon outpost"; + turf_type = /turf/open/floor/plating/asteroid/snow; + width = 18 + }, +/turf/open/floor/plating/asteroid/snow, +/area/space) +"ir" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 8 + }, +/area/syndicate_mothership) +"is" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 4 + }, +/area/syndicate_mothership) +"it" = ( +/obj/machinery/door/airlock/centcom{ + aiControlDisabled = 1; + name = "Assault Pod"; + opacity = 1; + req_access_txt = "150" + }, +/obj/docking_port/mobile/assault_pod{ + dwidth = 3; + name = "steel rain" + }, +/turf/open/floor/plating, +/area/shuttle/assault_pod) +"iu" = ( +/turf/open/floor/holofloor/beach/coast_b, +/area/holodeck/rec_center/beach) +"iv" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/turf/open/floor/plasteel/warning/corner{ + dir = 4 + }, +/area/centcom/supply) +"iw" = ( +/obj/structure/table, +/obj/item/weapon/clipboard, +/obj/item/weapon/coin/silver, +/turf/open/floor/plasteel, +/area/centcom/supply) +"ix" = ( +/obj/structure/table, +/obj/item/weapon/pen/blue{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/pen/red, +/obj/item/weapon/pen{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/plasteel, +/area/centcom/supply) +"iy" = ( +/obj/structure/table, +/turf/open/floor/plasteel/red/side{ + dir = 9 + }, +/area/tdome/tdomeobserve) +"iz" = ( +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/tdome/tdomeobserve) +"iA" = ( +/obj/structure/table, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/tdome/tdomeobserve) +"iB" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel/neutral/side{ + dir = 8 + }, +/area/tdome/tdomeobserve) +"iC" = ( +/turf/open/floor/plasteel, +/area/tdome/tdomeobserve) +"iD" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel/neutral/side{ + dir = 4 + }, +/area/tdome/tdomeobserve) +"iE" = ( +/obj/structure/table, +/turf/open/floor/plasteel/green/side{ + dir = 1 + }, +/area/tdome/tdomeobserve) +"iF" = ( +/turf/open/floor/plasteel/green/side{ + dir = 1 + }, +/area/tdome/tdomeobserve) +"iG" = ( +/obj/structure/table, +/turf/open/floor/plasteel/green/side{ + dir = 5 + }, +/area/tdome/tdomeobserve) +"iH" = ( +/obj/structure/flora/kirbyplants, +/turf/open/floor/plasteel/green/side{ + dir = 10 + }, +/area/centcom/evac) +"iI" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/green/side, +/area/centcom/evac) +"iJ" = ( +/turf/open/floor/plasteel/green/side, +/area/centcom/evac) +"iK" = ( +/obj/structure/rack, +/obj/item/weapon/gun/projectile/shotgun/toy/crossbow, +/obj/item/toy/katana, +/turf/open/floor/plasteel/green/side, +/area/centcom/evac) +"iL" = ( +/obj/structure/rack, +/obj/item/weapon/storage/crayons, +/obj/item/toy/sword, +/turf/open/floor/plasteel/green/side, +/area/centcom/evac) +"iM" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 1 + }, +/area/centcom/evac) +"iN" = ( +/obj/machinery/door/poddoor/shuttledock{ + name = "blast door1" + }, +/turf/open/floor/engine, +/area/centcom/evac) +"iO" = ( +/turf/open/floor/plating/beach/coastline_b, +/area/centcom/holding) +"iP" = ( +/obj/item/weapon/storage/crayons, +/obj/structure/table, +/obj/item/weapon/storage/crayons, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/syndicate_mothership) +"iQ" = ( +/obj/machinery/washing_machine, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/syndicate_mothership) +"iR" = ( +/turf/open/floor/plating/airless, +/area/syndicate_mothership) +"iS" = ( +/turf/open/floor/plating/airless{ + dir = 2; + icon_state = "warnplate" + }, +/area/syndicate_mothership) +"iT" = ( +/obj/machinery/door/airlock/centcom{ + name = "Crate Storage"; + req_access_txt = "106" + }, +/turf/open/floor/plasteel/delivery, +/area/centcom/supply) +"iU" = ( +/obj/structure/closet/secure_closet/bar, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/tdome/tdomeobserve) +"iV" = ( +/obj/structure/table, +/turf/open/floor/plasteel, +/area/tdome/tdomeobserve) +"iW" = ( +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/open/floor/plasteel/green/side{ + dir = 4 + }, +/area/tdome/tdomeobserve) +"iX" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 10 + }, +/area/centcom/evac) +"iY" = ( +/obj/machinery/door/airlock/centcom{ + name = "Centcom"; + opacity = 1; + req_access_txt = "0" + }, +/turf/open/floor/plasteel/black, +/area/centcom/evac) +"iZ" = ( +/obj/item/weapon/shard{ + color = "#008000"; + icon_state = "small" + }, +/obj/structure/grille{ + color = "#008000"; + density = 0; + icon_state = "brokengrille" + }, +/turf/open/floor/plating/airless, +/area/wizard_station) +"ja" = ( +/turf/closed/indestructible/fakeglass{ + color = "#008000"; + dir = 8; + icon_state = "fakewindows2" + }, +/area/wizard_station) +"jb" = ( +/turf/closed/indestructible/fakeglass{ + color = "#008000"; + dir = 4; + icon_state = "fakewindows" + }, +/area/wizard_station) +"jc" = ( +/turf/closed/indestructible/riveted/uranium, +/area/wizard_station) +"jd" = ( +/obj/machinery/computer/shuttle/syndicate/recall, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"je" = ( +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jf" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jg" = ( +/obj/machinery/vending/cola, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jh" = ( +/obj/machinery/vending/cigarette{ + products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/lighter/greyscale = 4, /obj/item/weapon/storage/fancy/rollingpapers = 5) + }, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"ji" = ( +/obj/structure/urinal{ + pixel_y = 28 + }, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/syndicate_mothership) +"jj" = ( +/obj/item/weapon/soap/syndie, +/obj/structure/mopbucket, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/syndicate_mothership) +"jk" = ( +/obj/structure/mirror{ + pixel_x = 28 + }, +/obj/item/weapon/mop, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/syndicate_mothership) +"jl" = ( +/turf/open/floor/plating/airless{ + dir = 6; + icon_state = "warnplate" + }, +/area/syndicate_mothership) +"jm" = ( +/turf/open/space, +/obj/machinery/porta_turret/syndicate/pod, +/turf/closed/wall/shuttle{ + tag = "icon-wall3 (NORTHWEST)"; + icon_state = "wall3"; + dir = 9 + }, +/area/shuttle/assault_pod) +"jn" = ( +/turf/closed/wall/shuttle{ + tag = "icon-wall3"; + icon_state = "wall3"; + dir = 2 + }, +/area/shuttle/assault_pod) +"jo" = ( +/obj/machinery/door/airlock/centcom{ + name = "Assault Pod"; + opacity = 1; + req_access_txt = "150" + }, +/turf/open/floor/plating, +/area/shuttle/assault_pod) +"jp" = ( +/turf/open/space, +/obj/machinery/porta_turret/syndicate/pod, +/turf/closed/wall/shuttle{ + tag = "icon-wall3 (NORTHEAST)"; + icon_state = "wall3"; + dir = 5 + }, +/area/shuttle/assault_pod) +"jq" = ( +/turf/open/floor/plating/airless{ + dir = 10; + icon_state = "warnplate" + }, +/area/syndicate_mothership) +"jr" = ( +/obj/structure/closet/crate, +/turf/open/floor/plasteel, +/area/centcom/supply) +"js" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/drinkingglasses, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/tdome/tdomeobserve) +"jt" = ( +/obj/structure/table, +/turf/open/floor/plasteel/green/side{ + dir = 4 + }, +/area/tdome/tdomeobserve) +"ju" = ( +/obj/structure/lattice, +/turf/open/space/transit, +/area/wizard_station) +"jv" = ( +/obj/item/weapon/shard{ + color = "#008000" + }, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage5" + }, +/area/wizard_station) +"jw" = ( +/obj/machinery/computer/shuttle, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"jx" = ( +/turf/open/floor/plasteel/cult/airless, +/area/wizard_station) +"jy" = ( +/obj/item/clothing/head/collectable/paper, +/turf/open/floor/plating/beach/coastline_b, +/area/centcom/holding) +"jz" = ( +/obj/item/weapon/paper{ + info = "GET DAT FUKKEN DISK"; + name = "memo" + }, +/obj/structure/noticeboard{ + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jA" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jB" = ( +/mob/living/simple_animal/hostile/carp/cayenne, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jC" = ( +/obj/machinery/door/airlock/centcom{ + name = "Restroom"; + opacity = 1; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jD" = ( +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/syndicate_mothership) +"jE" = ( +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/syndicate_mothership) +"jF" = ( +/turf/open/floor/plating/airless{ + dir = 4; + icon_state = "warnplate" + }, +/area/syndicate_mothership) +"jG" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/shuttle/assault_pod) +"jH" = ( +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/shuttle/assault_pod) +"jI" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/shuttle/assault_pod) +"jJ" = ( +/turf/open/floor/plating/airless{ + dir = 8; + icon_state = "warnplate" + }, +/area/syndicate_mothership) +"jK" = ( +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/tdome/tdomeobserve) +"jL" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/plasteel/green/side{ + dir = 4 + }, +/area/tdome/tdomeobserve) +"jM" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/green/side{ + dir = 9 + }, +/area/centcom/evac) +"jN" = ( +/obj/structure/lattice, +/obj/item/weapon/shard{ + color = "#008000"; + icon_state = "medium" + }, +/turf/open/space/transit, +/area/wizard_station) +"jO" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage2" + }, +/area/wizard_station) +"jP" = ( +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage3" + }, +/area/wizard_station) +"jQ" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/plasteel/cult/airless, +/area/wizard_station) +"jR" = ( +/turf/closed/indestructible/riveted, +/area/ctf) +"jS" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTHWEST)"; + icon_state = "darkblue"; + dir = 9 + }, +/area/ctf) +"jT" = ( +/obj/structure/table/wood, +/obj/item/device/paicard, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jU" = ( +/obj/structure/table/wood, +/obj/item/pizzabox, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jV" = ( +/obj/structure/chair/stool, +/obj/effect/landmark{ + name = "Syndicate-Spawn" + }, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"jW" = ( +/obj/machinery/computer/telecrystals/uplinker, +/turf/open/floor/plasteel/podhatch{ + dir = 9 + }, +/area/syndicate_mothership) +"jX" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1 + }, +/area/ctf) +"jY" = ( +/obj/structure/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + tag = "icon-rwindow (NORTH)"; + icon_state = "rwindow"; + dir = 1 + }, +/obj/machinery/door/window{ + tag = "icon-right (WEST)"; + name = "Tactical Toilet"; + icon_state = "right"; + dir = 8; + opacity = 1 + }, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/syndicate_mothership) +"jZ" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/shuttle/assault_pod) +"ka" = ( +/turf/open/floor/plasteel/red/side{ + dir = 10 + }, +/area/tdome/tdomeobserve) +"kb" = ( +/turf/open/floor/plasteel/red/side{ + dir = 2 + }, +/area/tdome/tdomeobserve) +"kc" = ( +/turf/open/floor/plasteel/neutral/side{ + dir = 8 + }, +/area/tdome/tdomeobserve) +"kd" = ( +/turf/open/floor/plasteel/neutral/side{ + dir = 4 + }, +/area/tdome/tdomeobserve) +"ke" = ( +/turf/open/floor/plasteel/green/side, +/area/tdome/tdomeobserve) +"kf" = ( +/turf/open/floor/plasteel/green/side{ + dir = 6 + }, +/area/tdome/tdomeobserve) +"kg" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/clipboard, +/turf/open/floor/plasteel/green/side{ + dir = 8 + }, +/area/centcom/evac) +"kh" = ( +/obj/structure/filingcabinet/filingcabinet, +/turf/open/floor/plasteel, +/area/centcom/evac) +"ki" = ( +/obj/structure/showcase{ + desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; + icon = 'icons/obj/machines/telecomms.dmi'; + icon_state = "processor"; + name = "byond random number generator" + }, +/turf/open/floor/plasteel/cult/airless, +/area/wizard_station) +"kj" = ( +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"kk" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/cult/airless, +/area/wizard_station) +"kl" = ( +/obj/structure/showcase{ + desc = "A historical figure of great importance to the wizard federation. He spent his long life learning magic, stealing artifacts, and harassing idiots with swords. May he rest forever, Rodney."; + icon = 'icons/mob/mob.dmi'; + icon_state = "nim"; + name = "wizard of yendor showcase" + }, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage4" + }, +/area/wizard_station) +"km" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 9 + }, +/area/syndicate_mothership) +"kn" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 8 + }, +/area/syndicate_mothership) +"ko" = ( +/obj/structure/table/wood, +/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroom, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"kp" = ( +/obj/structure/table/wood, +/obj/item/weapon/reagent_containers/food/drinks/beer{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/item/toy/cards/deck/syndicate{ + icon_state = "deck_syndicate_full"; + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"kq" = ( +/obj/machinery/computer/telecrystals/uplinker, +/turf/open/floor/plasteel/podhatch{ + dir = 8 + }, +/area/syndicate_mothership) +"kr" = ( +/obj/machinery/computer/shuttle/syndicate/drop_pod, +/turf/closed/wall/shuttle{ + tag = "icon-wall3"; + icon_state = "wall3"; + dir = 2 + }, +/area/shuttle/assault_pod) +"ks" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 8 + }, +/area/tdome/tdomeobserve) +"kt" = ( +/turf/closed/indestructible/fakedoor{ + name = "Centcom" + }, +/area/centcom/evac) +"ku" = ( +/turf/closed/indestructible/fakeglass{ + color = "#008000"; + dir = 6; + icon_state = "fakewindows2" + }, +/area/wizard_station) +"kv" = ( +/obj/effect/forcefield, +/obj/structure/door_assembly/door_assembly_uranium{ + anchored = 1; + name = "Bridge" + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"kw" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 1 + }, +/area/syndicate_mothership) +"kx" = ( +/turf/open/floor/plating, +/area/syndicate_mothership) +"ky" = ( +/obj/machinery/door/poddoor/shutters{ + id = "nukeop_ready"; + name = "shuttle dock" + }, +/turf/open/floor/plating, +/area/syndicate_mothership) +"kz" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor4" + }, +/area/shuttle/assault_pod) +"kA" = ( +/turf/open/floor/grass, +/area/tdome/tdomeobserve) +"kB" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 6 + }, +/area/tdome/tdomeobserve) +"kC" = ( +/turf/open/floor/plasteel/green/side{ + dir = 10 + }, +/area/centcom/evac) +"kD" = ( +/turf/open/floor/plasteel/green/side{ + dir = 6 + }, +/area/centcom/evac) +"kE" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage6" + }, +/area/wizard_station) +"kF" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"kG" = ( +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"kH" = ( +/turf/closed/indestructible/fakeglass, +/area/syndicate_mothership) +"kI" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/turf/open/floor/plating, +/area/syndicate_mothership) +"kJ" = ( +/obj/machinery/button/door{ + id = "nukeop_ready"; + name = "mission launch control"; + pixel_x = -26; + pixel_y = 0; + req_access_txt = "151" + }, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"kK" = ( +/obj/machinery/computer/telecrystals/uplinker, +/turf/open/floor/plasteel/podhatch{ + dir = 10 + }, +/area/syndicate_mothership) +"kL" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 6 + }, +/area/syndicate_mothership) +"kM" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTHEAST)"; + icon_state = "darkblue"; + dir = 5 + }, +/area/ctf) +"kN" = ( +/turf/open/space, +/obj/machinery/porta_turret/syndicate/pod, +/turf/closed/wall/shuttle{ + tag = "icon-wall3 (SOUTHWEST)"; + icon_state = "wall3"; + dir = 10 + }, +/area/shuttle/assault_pod) +"kO" = ( +/turf/open/space, +/obj/machinery/porta_turret/syndicate/pod, +/turf/closed/wall/shuttle{ + tag = "icon-wall3 (SOUTHEAST)"; + icon_state = "wall3"; + dir = 6 + }, +/area/shuttle/assault_pod) +"kP" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall0"; + dir = 2 + }, +/area/wizard_station) +"kQ" = ( +/turf/closed/indestructible/fakedoor{ + name = "Squad 4 Pod" + }, +/area/wizard_station) +"kR" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall4"; + dir = 2 + }, +/area/wizard_station) +"kS" = ( +/turf/open/floor/plasteel/cult, +/turf/closed/wall/shuttle{ + icon_state = "swall_f10"; + dir = 2 + }, +/area/wizard_station) +"kT" = ( +/obj/effect/forcefield, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"kU" = ( +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage7" + }, +/area/wizard_station) +"kV" = ( +/obj/effect/forcefield, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"kW" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTHWEST)"; + icon_state = "darkred"; + dir = 9 + }, +/area/ctf) +"kX" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1 + }, +/area/ctf) +"kY" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTHEAST)"; + icon_state = "darkred"; + dir = 5 + }, +/area/ctf) +"kZ" = ( +/obj/item/weapon/storage/box/drinkingglasses, +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum, +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/syndicate_mothership) +"la" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/syndicate_mothership) +"lb" = ( +/obj/structure/table/wood, +/obj/item/device/syndicatedetonator{ + desc = "This gaudy button can be used to instantly detonate syndicate bombs that have been activated on the station. It is also fun to press." + }, +/turf/open/floor/wood, +/area/syndicate_mothership) +"lc" = ( +/obj/structure/table/wood, +/obj/item/toy/nuke, +/turf/open/floor/wood, +/area/syndicate_mothership) +"ld" = ( +/turf/open/floor/plating/airless{ + dir = 5; + icon_state = "warnplate" + }, +/area/syndicate_mothership) +"le" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (WEST)"; + icon_state = "darkblue"; + dir = 8 + }, +/area/ctf) +"lf" = ( +/turf/open/floor/plating/airless{ + dir = 9; + icon_state = "warnplate" + }, +/area/syndicate_mothership) +"lg" = ( +/turf/open/floor/plasteel/redblue, +/area/tdome/tdomeobserve) +"lh" = ( +/obj/structure/chair, +/obj/effect/landmark{ + name = "tdomeobserve" + }, +/turf/open/floor/plasteel/redblue, +/area/tdome/tdomeobserve) +"li" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion"; + dir = 4 + }, +/turf/open/space/transit, +/area/wizard_station) +"lj" = ( +/obj/structure/shuttle/engine/heater{ + icon_state = "heater"; + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/wizard_station) +"lk" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/plasteel/airless, +/area/wizard_station) +"ll" = ( +/turf/open/floor/plasteel/airless, +/area/wizard_station) +"lm" = ( +/obj/machinery/door/poddoor/preopen, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plating/airless, +/area/wizard_station) +"ln" = ( +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"lo" = ( +/obj/effect/forcefield, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage7" + }, +/area/wizard_station) +"lp" = ( +/obj/effect/forcefield, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage5" + }, +/area/wizard_station) +"lq" = ( +/turf/open/floor/plasteel/black, +/area/ctf) +"lr" = ( +/turf/open/floor/wood, +/area/syndicate_mothership) +"ls" = ( +/obj/effect/landmark{ + name = "Syndicate-Spawn" + }, +/turf/open/floor/wood, +/area/syndicate_mothership) +"lt" = ( +/obj/machinery/door/window{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Uplink Management Control"; + req_access_txt = "151" + }, +/turf/open/floor/wood, +/area/syndicate_mothership) +"lu" = ( +/turf/open/floor/plating/airless{ + dir = 1; + icon_state = "warnplate" + }, +/area/syndicate_mothership) +"lv" = ( +/turf/closed/indestructible/fakedoor{ + name = "Thunderdome" + }, +/area/tdome/tdomeobserve) +"lw" = ( +/obj/machinery/computer/security/telescreen, +/turf/open/floor/plasteel/redblue, +/area/tdome/tdomeobserve) +"lx" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall12"; + dir = 2 + }, +/area/wizard_station) +"ly" = ( +/turf/open/floor/plasteel/cult, +/turf/closed/wall/shuttle{ + icon_state = "swall_f9"; + dir = 2 + }, +/area/wizard_station) +"lz" = ( +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage5" + }, +/area/wizard_station) +"lA" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage2" + }, +/area/wizard_station) +"lB" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/cardhand, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage2" + }, +/area/wizard_station) +"lC" = ( +/obj/machinery/computer/telecrystals/boss, +/turf/open/floor/plasteel/podhatch{ + dir = 5 + }, +/area/syndicate_mothership) +"lD" = ( +/obj/structure/sign/map/left{ + pixel_y = -32 + }, +/obj/structure/rack{ + icon = 'icons/obj/stationobjs.dmi'; + icon_state = "minibar_left"; + name = "skeletal minibar" + }, +/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka, +/turf/open/floor/wood, +/area/syndicate_mothership) +"lE" = ( +/obj/structure/sign/map/right{ + pixel_y = -32 + }, +/obj/structure/rack{ + icon = 'icons/obj/stationobjs.dmi'; + icon_state = "minibar_right"; + name = "skeletal minibar" + }, +/obj/item/weapon/reagent_containers/food/drinks/bottle/gin, +/turf/open/floor/wood, +/area/syndicate_mothership) +"lF" = ( +/obj/machinery/door/airlock/centcom{ + name = "Equipment Room"; + opacity = 1; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/bar{ + dir = 2 + }, +/area/syndicate_mothership) +"lG" = ( +/obj/structure/lattice, +/obj/effect/forcefield, +/turf/open/space/transit, +/area/wizard_station) +"lH" = ( +/obj/machinery/vending/magivend, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"lI" = ( +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage3" + }, +/area/wizard_station) +"lJ" = ( +/obj/machinery/vending/snack, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"lK" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (EAST)"; + icon_state = "darkblue"; + dir = 4 + }, +/area/ctf) +"lL" = ( +/turf/open/floor/plasteel/black, +/area/syndicate_mothership) +"lM" = ( +/obj/machinery/mech_bay_recharge_port, +/turf/open/floor/plating, +/area/syndicate_mothership) +"lN" = ( +/turf/open/floor/mech_bay_recharge_floor, +/area/syndicate_mothership) +"lO" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/plating, +/area/syndicate_mothership) +"lP" = ( +/obj/machinery/vending/tool, +/turf/open/floor/plasteel/black, +/area/syndicate_mothership) +"lQ" = ( +/obj/structure/door_assembly/door_assembly_uranium{ + anchored = 1; + name = "Break Room" + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"lR" = ( +/obj/machinery/door/airlock{ + icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; + name = "Break Room" + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"lS" = ( +/turf/open/floor/plasteel/blue, +/area/ctf) +"lT" = ( +/turf/closed/indestructible/riveted, +/area/tdome/arena) +"lU" = ( +/obj/machinery/igniter, +/turf/open/floor/plasteel, +/area/tdome/arena) +"lV" = ( +/turf/open/floor/plasteel, +/area/tdome/arena) +"lW" = ( +/obj/structure/chair/wood/wings, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"lX" = ( +/obj/structure/table/wood, +/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/ointment, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"lY" = ( +/obj/structure/table/wood, +/obj/item/weapon/retractor, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"lZ" = ( +/obj/structure/table/wood, +/obj/item/clothing/suit/wizrobe/magusblue, +/obj/item/clothing/head/wizard/magus, +/obj/item/weapon/staff, +/obj/structure/mirror/magic{ + pixel_y = 28 + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"ma" = ( +/obj/structure/table/wood, +/obj/item/clothing/suit/wizrobe/magusred, +/obj/item/clothing/head/wizard/magus, +/obj/item/weapon/staff, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"mb" = ( +/obj/structure/rack, +/obj/item/clothing/head/helmet/space/hardsuit/wizard, +/turf/open/floor/plasteel/cult/airless, +/area/wizard_station) +"mc" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"md" = ( +/obj/effect/forcefield, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"me" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel/cult/airless, +/area/wizard_station) +"mf" = ( +/obj/structure/chair/stool, +/turf/open/floor/plasteel/black, +/area/syndicate_mothership) +"mg" = ( +/obj/structure/rack, +/obj/item/clothing/under/color/red, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/armor/tdome/red, +/obj/item/clothing/head/helmet/thunderdome, +/obj/item/weapon/melee/baton/loaded, +/obj/item/weapon/melee/energy/sword/saber/red, +/turf/open/floor/plasteel/black, +/area/tdome/arena) +"mh" = ( +/obj/machinery/door/poddoor{ + id = "thunderdomegen"; + name = "General Supply" + }, +/turf/open/floor/plasteel/black, +/area/tdome/arena) +"mi" = ( +/obj/effect/landmark{ + name = "tdome2" + }, +/turf/open/floor/plasteel, +/area/tdome/tdome2) +"mj" = ( +/obj/machinery/door/poddoor{ + id = "thunderdome"; + name = "Thunderdome Blast Door" + }, +/turf/open/floor/plasteel, +/area/tdome/arena) +"mk" = ( +/turf/open/floor/plasteel{ + icon_state = "red"; + dir = 8 + }, +/area/tdome/arena) +"ml" = ( +/turf/open/floor/plasteel/green/side{ + dir = 4 + }, +/area/tdome/arena) +"mm" = ( +/obj/effect/landmark{ + name = "tdome1" + }, +/turf/open/floor/plasteel, +/area/tdome/tdome1) +"mn" = ( +/obj/structure/rack, +/obj/item/clothing/under/color/green, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/armor/tdome/green, +/obj/item/clothing/head/helmet/thunderdome, +/obj/item/weapon/melee/baton/loaded, +/obj/item/weapon/melee/energy/sword/saber/green, +/turf/open/floor/plasteel/black, +/area/tdome/arena) +"mo" = ( +/turf/closed/indestructible/fakeglass{ + color = "#008000"; + dir = 1; + icon_state = "fakewindows" + }, +/area/wizard_station) +"mp" = ( +/obj/structure/cult/tome, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"mq" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"mr" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen"; + opened = 1 + }, +/obj/item/clothing/suit/wizrobe/red, +/obj/item/clothing/head/wizard/red, +/obj/item/weapon/staff, +/obj/item/clothing/shoes/sandal, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"ms" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/structure/rack{ + health = 9999 + }, +/obj/item/clothing/suit/space/hardsuit/wizard, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"mt" = ( +/turf/open/floor/plasteel/cult, +/turf/closed/wall/shuttle{ + icon_state = "swall_f6"; + dir = 2 + }, +/area/wizard_station) +"mu" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall8"; + dir = 2 + }, +/area/wizard_station) +"mv" = ( +/obj/structure/closet/syndicate/personal, +/turf/open/floor/plasteel/darkwarning{ + icon_state = "warndark"; + dir = 1 + }, +/area/syndicate_mothership) +"mw" = ( +/obj/structure/table, +/obj/item/weapon/gun/energy/ionrifle{ + pin = /obj/item/device/firing_pin + }, +/turf/open/floor/plasteel/darkwarning{ + icon_state = "warndark"; + dir = 1 + }, +/area/syndicate_mothership) +"mx" = ( +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/effect/landmark{ + name = "tdome2" + }, +/turf/open/floor/plasteel, +/area/tdome/tdome2) +"my" = ( +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/effect/landmark{ + name = "tdome1" + }, +/turf/open/floor/plasteel, +/area/tdome/tdome1) +"mz" = ( +/turf/closed/indestructible/fakeglass{ + color = "#008000"; + dir = 1; + icon_state = "fakewindows2" + }, +/area/wizard_station) +"mA" = ( +/obj/structure/bookcase, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"mB" = ( +/obj/structure/grille{ + color = "#008000"; + density = 0; + icon_state = "brokengrille" + }, +/turf/open/floor/plating, +/area/wizard_station) +"mC" = ( +/turf/closed/indestructible/rock/snow, +/area/syndicate_mothership) +"mD" = ( +/obj/item/clothing/shoes/sandal/marisa, +/obj/item/clothing/suit/wizrobe/marisa, +/obj/item/clothing/head/wizard/marisa, +/obj/item/weapon/staff/broom, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"mE" = ( +/obj/effect/decal/cleanable/blood/splatter, +/mob/living/simple_animal/hostile/creature{ + name = "Experiment 35b" + }, +/turf/open/floor/plasteel/cult/airless, +/area/wizard_station) +"mF" = ( +/obj/machinery/door/poddoor/preopen, +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/plating/airless, +/area/wizard_station) +"mG" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/remains/human, +/turf/open/floor/plasteel/airless, +/area/wizard_station) +"mH" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/plasteel/airless, +/area/wizard_station) +"mI" = ( +/obj/structure/shuttle/engine/heater{ + icon_state = "heater"; + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/wizard_station) +"mJ" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion"; + dir = 8 + }, +/turf/open/space/transit, +/area/wizard_station) +"mK" = ( +/obj/machinery/camera{ + pixel_x = 11; + pixel_y = -9; + network = list("thunder"); + c_tag = "Red Team" + }, +/obj/effect/landmark{ + name = "tdome2" + }, +/turf/open/floor/plasteel, +/area/tdome/tdome2) +"mL" = ( +/turf/open/floor/bluegrid, +/area/tdome/arena) +"mM" = ( +/obj/machinery/flasher{ + id = "tdomeflash"; + name = "Thunderdome Flash" + }, +/turf/open/floor/bluegrid, +/area/tdome/arena) +"mN" = ( +/obj/machinery/camera{ + pixel_x = 12; + pixel_y = -10; + network = list("thunder"); + c_tag = "Green Team" + }, +/obj/effect/landmark{ + name = "tdome1" + }, +/turf/open/floor/plasteel, +/area/tdome/tdome1) +"mO" = ( +/turf/closed/indestructible/fakeglass{ + color = "#008000" + }, +/area/wizard_station) +"mP" = ( +/obj/item/weapon/shard{ + color = "#008000"; + icon_state = "medium" + }, +/obj/structure/grille{ + color = "#008000"; + density = 0; + icon_state = "brokengrille" + }, +/turf/open/floor/plating, +/area/wizard_station) +"mQ" = ( +/obj/effect/landmark/start{ + name = "wizard" + }, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage5" + }, +/area/wizard_station) +"mR" = ( +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel/cult/airless, +/area/wizard_station) +"mS" = ( +/turf/open/floor/plasteel/cult, +/turf/closed/wall/shuttle{ + icon_state = "swall_f5"; + dir = 2 + }, +/area/wizard_station) +"mT" = ( +/turf/closed/indestructible/fakedoor{ + name = "Squad 3 Pod" + }, +/area/wizard_station) +"mU" = ( +/obj/machinery/camera{ + pixel_x = 10; + network = list("thunder"); + c_tag = "Arena" + }, +/turf/open/floor/bluegrid, +/area/tdome/arena) +"mV" = ( +/obj/structure/chair/wood/wings{ + icon_state = "wooden_chair_wings"; + dir = 1 + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"mW" = ( +/obj/structure/cult/pylon, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"mX" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/structure/rack, +/obj/item/weapon/staff, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"mY" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage4" + }, +/area/wizard_station) +"mZ" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/forcefield, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"na" = ( +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage4" + }, +/area/wizard_station) +"nb" = ( +/obj/structure/door_assembly/door_assembly_uranium{ + anchored = 1; + name = "Corridor A" + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"nc" = ( +/obj/machinery/door/airlock{ + icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; + name = "Corridor A" + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"nd" = ( +/obj/structure/barricade/security, +/turf/open/floor/plasteel/circuit, +/area/ctf) +"ne" = ( +/obj/effect/forcefield, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage3" + }, +/area/wizard_station) +"nf" = ( +/turf/open/floor/plasteel/darkblue, +/area/ctf) +"ng" = ( +/obj/machinery/door/poddoor{ + id = "thunderdomehea"; + name = "Heavy Supply" + }, +/turf/open/floor/plasteel/black, +/area/tdome/arena) +"nh" = ( +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage2" + }, +/area/wizard_station) +"ni" = ( +/obj/effect/forcefield, +/turf/open/space, +/area/wizard_station) +"nj" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/plasteel/cult{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"nk" = ( +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage5" + }, +/area/wizard_station) +"nl" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/bluespace, +/area/ctf) +"nm" = ( +/obj/structure/rack, +/obj/item/clothing/under/color/red, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/head/helmet/swat, +/obj/item/weapon/gun/energy/laser, +/turf/open/floor/plasteel/black, +/area/tdome/arena) +"nn" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 8 + }, +/area/tdome/tdomeadmin) +"no" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows2"; + dir = 8 + }, +/area/tdome/tdomeadmin) +"np" = ( +/turf/closed/indestructible/fakeglass{ + icon_state = "fakewindows"; + dir = 4 + }, +/area/tdome/tdomeadmin) +"nq" = ( +/obj/structure/rack, +/obj/item/clothing/under/color/green, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/head/helmet/swat, +/obj/item/weapon/gun/energy/laser, +/turf/open/floor/plasteel/black, +/area/tdome/arena) +"nr" = ( +/obj/structure/lattice, +/obj/effect/forcefield, +/turf/open/space, +/area/wizard_station) +"ns" = ( +/obj/effect/forcefield, +/turf/open/space/transit, +/area/wizard_station) +"nt" = ( +/turf/open/floor/plasteel/redyellow, +/area/tdome/tdomeadmin) +"nu" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/landmark{ + name = "tdomeadmin" + }, +/turf/open/floor/plasteel/redyellow, +/area/tdome/tdomeadmin) +"nv" = ( +/obj/structure/table, +/obj/machinery/computer/security/telescreen{ + pixel_y = 0 + }, +/turf/open/floor/plasteel/redyellow, +/area/tdome/tdomeadmin) +"nw" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/floor/plasteel/redyellow, +/area/tdome/tdomeadmin) +"nx" = ( +/obj/machinery/button/flasher{ + id = "tdomeflash"; + pixel_x = 0; + pixel_y = 0 + }, +/obj/structure/table, +/turf/open/floor/plasteel/redyellow, +/area/tdome/tdomeadmin) +"ny" = ( +/obj/machinery/door/airlock{ + icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; + name = "Personal Quarters" + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"nz" = ( +/turf/closed/indestructible/riveted, +/area/tdome/tdomeadmin) +"nA" = ( +/obj/machinery/computer/security/telescreen{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/redyellow, +/area/tdome/tdomeadmin) +"nB" = ( +/turf/open/floor/plasteel, +/area/tdome/tdomeadmin) +"nC" = ( +/obj/structure/table/wood, +/obj/effect/landmark{ + name = "Teleport-Scroll" + }, +/obj/item/weapon/dice/d20, +/obj/item/weapon/dice, +/turf/open/floor/carpet, +/area/wizard_station) +"nD" = ( +/turf/open/floor/carpet, +/area/wizard_station) +"nE" = ( +/turf/open/floor/plasteel/cult, +/turf/closed/wall/shuttle{ + dir = 2; + icon_state = "swall_f10"; + layer = 2 + }, +/area/wizard_station) +"nF" = ( +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage6" + }, +/area/wizard_station) +"nG" = ( +/turf/closed/indestructible/fakedoor{ + name = "Thunderdome Admin" + }, +/area/tdome/tdomeadmin) +"nH" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "thunderdomehea"; + name = "Heavy Supply Control"; + pixel_y = 0; + req_access_txt = "102" + }, +/turf/open/floor/plasteel, +/area/tdome/tdomeadmin) +"nI" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "thunderdome"; + name = "Main Blast Doors Control"; + pixel_y = 0; + req_access_txt = "102" + }, +/turf/open/floor/plasteel, +/area/tdome/tdomeadmin) +"nJ" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "thunderdomegen"; + name = "General Supply Control"; + pixel_y = 0; + req_access_txt = "102" + }, +/turf/open/floor/plasteel, +/area/tdome/tdomeadmin) +"nK" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet/wiz, +/turf/open/floor/carpet, +/area/wizard_station) +"nL" = ( +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage" + }, +/area/wizard_station) +"nM" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall1"; + dir = 2 + }, +/area/wizard_station) +"nN" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall3"; + dir = 2 + }, +/area/wizard_station) +"nO" = ( +/turf/open/floor/plasteel/cult/airless{ + icon_state = "cultdamage7" + }, +/area/wizard_station) +"nP" = ( +/obj/structure/dresser, +/obj/item/weapon/storage/backpack/satchel, +/turf/open/floor/carpet, +/area/wizard_station) +"nQ" = ( +/obj/structure/table/wood, +/obj/item/weapon/storage/bag/tray, +/obj/item/weapon/reagent_containers/food/snacks/burger/spell, +/turf/open/floor/carpet, +/area/wizard_station) +"nR" = ( +/turf/closed/indestructible/fakedoor{ + name = "Squad 2 Pod" + }, +/area/wizard_station) +"nS" = ( +/turf/closed/wall/shuttle, +/area/wizard_station) +"nT" = ( +/obj/structure/shuttle/engine/heater, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/wizard_station) +"nU" = ( +/turf/closed/indestructible/riveted, +/area/centcom/holding) +"nV" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"nW" = ( +/obj/structure/table/wood, +/obj/item/weapon/gun/magic/wand{ + desc = "Used in emergencies to reignite magma engines."; + max_charges = 0; + name = "wand of emergency engine ignition" + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"nX" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion_l" + }, +/turf/open/space, +/area/wizard_station) +"nY" = ( +/obj/structure/table, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"nZ" = ( +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"oa" = ( +/obj/structure/closet/secure_closet/bar{ + req_access_txt = "25" + }, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"ob" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"oc" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"od" = ( +/obj/structure/rack, +/obj/item/device/camera, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"oe" = ( +/obj/structure/rack, +/obj/item/toy/sword, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"of" = ( +/obj/structure/rack, +/obj/item/toy/gun, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"og" = ( +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"oh" = ( +/turf/open/floor/plating/beach/sand, +/area/centcom/holding) +"oi" = ( +/obj/effect/overlay/palmtree_r, +/obj/effect/overlay/coconut, +/turf/open/floor/plating/beach/sand, +/area/centcom/holding) +"oj" = ( +/obj/effect/overlay/palmtree_l, +/turf/open/floor/plating/beach/sand, +/area/centcom/holding) +"ok" = ( +/obj/machinery/door/airlock{ + icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; + name = "Engine Room B" + }, +/turf/open/space, +/area/wizard_station) +"ol" = ( +/obj/structure/table, +/obj/item/clothing/head/that, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"om" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"on" = ( +/obj/item/device/camera, +/turf/open/floor/plating/beach/sand, +/area/centcom/holding) +"oo" = ( +/obj/structure/cult/forge{ + desc = "A engine used in powering the wizards ship"; + name = "magma engine" + }, +/turf/open/floor/plasteel/cult, +/area/wizard_station) +"op" = ( +/obj/structure/table, +/obj/item/ammo_box/foambox, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"oq" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"or" = ( +/obj/structure/table, +/obj/item/weapon/lighter, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"os" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"ot" = ( +/obj/structure/table, +/obj/item/weapon/dice/d20, +/turf/open/floor/plasteel/freezer{ + dir = 2 + }, +/area/centcom/holding) +"ou" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/obj/item/clothing/head/bandana{ + pixel_y = -10 + }, +/obj/item/clothing/glasses/sunglasses, +/turf/open/floor/plating/beach/sand, +/area/centcom/holding) +"ov" = ( +/obj/structure/chair/stool{ + pixel_y = 8 + }, +/turf/open/floor/plating/beach/sand, +/area/centcom/holding) +"ow" = ( +/obj/structure/window/reinforced{ + color = "#008000"; + dir = 1 + }, +/turf/open/floor/plating/lava/airless, +/area/wizard_station) +"ox" = ( +/obj/structure/rack, +/obj/item/clothing/head/that, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/tie/waistcoat, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"oy" = ( +/obj/item/toy/beach_ball, +/turf/open/floor/plating/beach/sand, +/area/centcom/holding) +"oz" = ( +/obj/structure/shuttle/engine/heater, +/turf/open/floor/plating/lava/airless, +/area/wizard_station) +"oA" = ( +/obj/structure/rack, +/obj/item/weapon/storage/crayons, +/obj/item/weapon/gun/projectile/automatic/toy/pistol, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"oB" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"oC" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/open/space, +/area/space) +"oD" = ( +/obj/structure/rack, +/obj/item/weapon/storage/crayons, +/obj/item/weapon/gun/projectile/shotgun/toy/crossbow, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"oE" = ( +/obj/structure/barricade/security, +/turf/open/floor/plasteel/bluespace, +/area/ctf) +"oF" = ( +/turf/open/floor/plasteel/bluespace, +/area/ctf) +"oG" = ( +/obj/structure/rack, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/under/suit_jacket/female{ + desc = "A black trouser suit for women. Very formal."; + name = "black suit"; + pixel_x = 3; + pixel_y = 1 + }, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"oH" = ( +/obj/structure/table, +/obj/item/weapon/gun/projectile/automatic/toy/pistol, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"oI" = ( +/turf/open/floor/plating/beach/water, +/area/centcom/holding) +"oJ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/centcom/holding) +"oK" = ( +/turf/open/floor/plasteel/delivery, +/area/centcom/holding) +"oL" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/centcom/holding) +"oM" = ( +/obj/effect/landmark{ + name = "Holding Facility" + }, +/turf/open/floor/engine, +/area/centcom/holding) +"oN" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien20" + }, +/area/abductor_ship) +"oO" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien21" + }, +/area/abductor_ship) +"oP" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien22" + }, +/area/abductor_ship) +"oQ" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien23" + }, +/area/abductor_ship) +"oR" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien24" + }, +/area/abductor_ship) +"oS" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien16" + }, +/area/abductor_ship) +"oT" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien17" + }, +/area/abductor_ship) +"oU" = ( +/obj/machinery/abductor/experiment{ + team = 1 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"oV" = ( +/obj/effect/landmark/abductor/console, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"oW" = ( +/obj/machinery/abductor/pad{ + team = 1 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"oX" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien18" + }, +/area/abductor_ship) +"oY" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien19" + }, +/area/abductor_ship) +"oZ" = ( +/obj/machinery/abductor/experiment{ + team = 4 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pa" = ( +/obj/effect/landmark/abductor/console{ + team = 4 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pb" = ( +/obj/machinery/abductor/pad{ + team = 4 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pc" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien14" + }, +/area/abductor_ship) +"pd" = ( +/obj/machinery/computer/camera_advanced/abductor{ + team = 1 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pe" = ( +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pf" = ( +/obj/structure/closet/abductor, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pg" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien15" + }, +/area/abductor_ship) +"ph" = ( +/obj/machinery/computer/camera_advanced/abductor{ + team = 4 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pi" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien12" + }, +/area/abductor_ship) +"pj" = ( +/obj/item/weapon/retractor/alien, +/obj/item/weapon/hemostat/alien, +/obj/structure/table/abductor, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pk" = ( +/obj/effect/landmark/abductor/scientist, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pl" = ( +/obj/structure/table/optable/abductor, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pm" = ( +/obj/effect/landmark/abductor/agent, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pn" = ( +/obj/structure/table/abductor, +/obj/item/weapon/storage/box/alienhandcuffs, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"po" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien13" + }, +/area/abductor_ship) +"pp" = ( +/obj/effect/landmark/abductor/scientist{ + team = 4 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pq" = ( +/obj/effect/landmark/abductor/agent{ + team = 4 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pr" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien10" + }, +/area/abductor_ship) +"ps" = ( +/obj/item/weapon/surgical_drapes, +/obj/item/weapon/paper/abductor, +/obj/item/weapon/scalpel/alien, +/obj/structure/table/abductor, +/obj/item/weapon/cautery/alien, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pt" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien11" + }, +/area/abductor_ship) +"pu" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien6" + }, +/area/abductor_ship) +"pv" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien7" + }, +/area/abductor_ship) +"pw" = ( +/obj/machinery/abductor/gland_dispenser, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"px" = ( +/obj/structure/table/abductor, +/obj/item/weapon/surgicaldrill/alien, +/obj/item/weapon/circular_saw/alien, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"py" = ( +/obj/structure/bed/abductor, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pz" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien8" + }, +/area/abductor_ship) +"pA" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien9" + }, +/area/abductor_ship) +"pB" = ( +/turf/closed/indestructible/abductor, +/area/abductor_ship) +"pC" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien2" + }, +/area/abductor_ship) +"pD" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien3" + }, +/area/abductor_ship) +"pE" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien4" + }, +/area/abductor_ship) +"pF" = ( +/turf/closed/indestructible/abductor{ + icon_state = "alien5" + }, +/area/abductor_ship) +"pG" = ( +/obj/machinery/abductor/experiment{ + team = 2 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pH" = ( +/obj/effect/landmark/abductor/console{ + team = 2 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pI" = ( +/obj/machinery/abductor/pad{ + team = 2 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pJ" = ( +/obj/machinery/abductor/experiment{ + team = 3 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pK" = ( +/obj/effect/landmark/abductor/console{ + team = 3 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pL" = ( +/obj/machinery/abductor/pad{ + team = 3 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pM" = ( +/obj/machinery/computer/camera_advanced/abductor{ + team = 2 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pN" = ( +/obj/machinery/computer/camera_advanced/abductor{ + team = 3 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pO" = ( +/obj/effect/landmark/abductor/scientist{ + team = 2 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pP" = ( +/obj/effect/landmark/abductor/agent{ + team = 2 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pQ" = ( +/obj/effect/landmark/abductor/scientist{ + team = 3 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pR" = ( +/obj/effect/landmark/abductor/agent{ + team = 3 + }, +/turf/open/floor/plating/abductor, +/area/abductor_ship) +"pS" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (WEST)"; + icon_state = "darkred"; + dir = 8 + }, +/area/ctf) +"pT" = ( +/obj/structure/barricade/security, +/turf/open/floor/plasteel/circuit/rcircuit, +/area/ctf) +"pU" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (EAST)"; + icon_state = "darkred"; + dir = 4 + }, +/area/ctf) +"pV" = ( +/turf/open/floor/plasteel/red, +/area/ctf) +"pW" = ( +/obj/structure/kitchenspike, +/turf/open/floor/plasteel/black, +/area/ctf) +"pX" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (SOUTHWEST)"; + icon_state = "darkblue"; + dir = 10 + }, +/area/ctf) +"pY" = ( +/turf/open/floor/plasteel/darkblue/side, +/area/ctf) +"pZ" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (SOUTHEAST)"; + icon_state = "darkblue"; + dir = 6 + }, +/area/ctf) +"qa" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (SOUTHWEST)"; + icon_state = "darkred"; + dir = 10 + }, +/area/ctf) +"qb" = ( +/turf/open/floor/plasteel/darkred/side, +/area/ctf) +"qc" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (SOUTHEAST)"; + icon_state = "darkred"; + dir = 6 + }, +/area/ctf) +"qd" = ( +/obj/structure/window/reinforced/fulltile{ + health = 1e+007; + maxhealth = 1e+007; + name = "hardened window" + }, +/turf/open/floor/plating, +/area/ctf) +"qe" = ( +/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"qf" = ( +/turf/open/floor/plasteel/darkblue/corner, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHWEST)"; + icon_state = "warningline"; + dir = 9 + }, +/area/ctf) +"qg" = ( +/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qh" = ( +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (WEST)"; + icon_state = "darkbluecorners"; + dir = 8 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qi" = ( +/turf/open/floor/plasteel/darkblue/corner, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qj" = ( +/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHEAST)"; + icon_state = "warningline"; + dir = 5 + }, +/area/ctf) +"qk" = ( +/obj/machinery/power/emitter/energycannon, +/turf/open/floor/plating, +/area/ctf) +"ql" = ( +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (EAST)"; + icon_state = "darkbluecorners"; + dir = 4 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (WEST)"; + icon_state = "warningline"; + dir = 8 + }, +/area/ctf) +"qm" = ( +/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (EAST)"; + icon_state = "warningline"; + dir = 4 + }, +/area/ctf) +"qn" = ( +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (WEST)"; + icon_state = "darkbluecorners"; + dir = 8 + }, +/area/ctf) +"qo" = ( +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (EAST)"; + icon_state = "darkbluecorners"; + dir = 4 + }, +/area/ctf) +"qp" = ( +/turf/open/floor/plating{ + icon_plating = "warnplate"; + icon_state = "warnplate" + }, +/area/ctf) +"qq" = ( +/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (WEST)"; + icon_state = "warningline"; + dir = 8 + }, +/area/ctf) +"qr" = ( +/turf/open/floor/plating{ + icon_state = "warnplate"; + dir = 8 + }, +/area/ctf) +"qs" = ( +/turf/open/floor/plating, +/area/ctf) +"qt" = ( +/turf/open/floor/plating{ + dir = 4; + icon_state = "warnplate"; + luminosity = 2; + initial_gas_mix = "o2=0.01;n2=0.01;TEMP=2.7" + }, +/area/ctf) +"qu" = ( +/turf/open/floor/plasteel/darkblue/corner, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (WEST)"; + icon_state = "warningline"; + dir = 8 + }, +/area/ctf) +"qv" = ( +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (NORTH)"; + icon_state = "darkbluecorners"; + dir = 1 + }, +/area/ctf) +"qw" = ( +/turf/open/floor/plasteel/darkblue/corner, +/area/ctf) +"qx" = ( +/turf/open/floor/plating{ + dir = 1; + icon_state = "warnplate" + }, +/area/ctf) +"qy" = ( +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (EAST)"; + icon_state = "darkbluecorners"; + dir = 4 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHWEST)"; + icon_state = "warningline"; + dir = 10 + }, +/area/ctf) +"qz" = ( +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (NORTH)"; + icon_state = "darkbluecorners"; + dir = 1 + }, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"qA" = ( +/turf/open/floor/plasteel/darkblue/corner{ + tag = "icon-darkbluecorners (EAST)"; + icon_state = "darkbluecorners"; + dir = 4 + }, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"qB" = ( +/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHEAST)"; + icon_state = "warningline"; + dir = 6 + }, +/area/ctf) +"qC" = ( +/obj/machinery/power/emitter/energycannon{ + tag = "icon-emitter (NORTH)"; + icon_state = "emitter"; + dir = 1 + }, +/turf/open/floor/plating, +/area/ctf) +"qD" = ( +/obj/structure/divine/trap/ctf/blue, +/turf/open/floor/plasteel/blue, +/area/ctf) +"qE" = ( +/turf/open/floor/plasteel/circuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qF" = ( +/turf/open/floor/plasteel/circuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHWEST)"; + icon_state = "warningline"; + dir = 9 + }, +/area/ctf) +"qG" = ( +/turf/open/floor/plasteel/circuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHEAST)"; + icon_state = "warningline"; + dir = 5 + }, +/area/ctf) +"qH" = ( +/turf/open/floor/plasteel/darkred, +/area/ctf) +"qI" = ( +/obj/structure/divine/trap/ctf/red, +/turf/open/floor/plasteel/darkred, +/area/ctf) +"qJ" = ( +/turf/open/floor/plasteel/circuit, +/area/ctf) +"qK" = ( +/turf/open/floor/plasteel/circuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (WEST)"; + icon_state = "warningline"; + dir = 8 + }, +/area/ctf) +"qL" = ( +/turf/open/floor/plasteel/circuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (EAST)"; + icon_state = "warningline"; + dir = 4 + }, +/area/ctf) +"qM" = ( +/turf/open/floor/plasteel/circuit, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"qN" = ( +/turf/open/floor/plasteel/circuit, +/turf/open/floor/plasteel/warningline, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHWEST)"; + icon_state = "warningline"; + dir = 10 + }, +/area/ctf) +"qO" = ( +/turf/open/floor/plasteel/circuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHEAST)"; + icon_state = "warningline"; + dir = 6 + }, +/area/ctf) +"qP" = ( +/obj/structure/barricade/security, +/turf/open/floor/plasteel/circuit/gcircuit/off, +/area/ctf) +"qQ" = ( +/obj/structure/divine/trap/ctf/red, +/turf/open/floor/plasteel/red, +/area/ctf) +"qR" = ( +/obj/structure/barricade/security, +/obj/structure/barricade/security, +/turf/open/floor/plasteel/circuit/rcircuit, +/area/ctf) +"qS" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + icon_state = "darkblue"; + dir = 1 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qT" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTHWEST)"; + icon_state = "darkblue"; + dir = 9 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHWEST)"; + icon_state = "warningline"; + dir = 9 + }, +/area/ctf) +"qU" = ( +/turf/open/floor/plasteel/circuit/gcircuit/off, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qV" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTHEAST)"; + icon_state = "darkblue"; + dir = 5 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qW" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qX" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTHWEST)"; + icon_state = "darkred"; + dir = 9 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"qY" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTHEAST)"; + icon_state = "darkred"; + dir = 5 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHEAST)"; + icon_state = "warningline"; + dir = 5 + }, +/area/ctf) +"qZ" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (WEST)"; + icon_state = "darkblue"; + dir = 8 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (WEST)"; + icon_state = "warningline"; + dir = 8 + }, +/area/ctf) +"ra" = ( +/turf/open/floor/plasteel/circuit/gcircuit/off, +/area/ctf) +"rb" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (EAST)"; + icon_state = "darkred"; + dir = 4 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (EAST)"; + icon_state = "warningline"; + dir = 4 + }, +/area/ctf) +"rc" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/area/ctf) +"rd" = ( +/turf/open/floor/plasteel/circuit/gcircuit/animated, +/area/ctf) +"re" = ( +/obj/machinery/capture_the_flag/blue, +/turf/open/floor/plasteel/circuit/gcircuit/animated, +/area/ctf) +"rf" = ( +/obj/item/weapon/twohanded/required/ctf/blue, +/turf/open/floor/plasteel/circuit/gcircuit/animated, +/area/ctf) +"rg" = ( +/obj/item/weapon/twohanded/required/ctf/red, +/turf/open/floor/plasteel/circuit/gcircuit/animated, +/area/ctf) +"rh" = ( +/obj/machinery/capture_the_flag/red, +/turf/open/floor/plasteel/circuit/gcircuit/animated, +/area/ctf) +"ri" = ( +/turf/open/floor/plasteel/darkblue/side, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"rj" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (SOUTHWEST)"; + icon_state = "darkblue"; + dir = 10 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHWEST)"; + icon_state = "warningline"; + dir = 10 + }, +/area/ctf) +"rk" = ( +/turf/open/floor/plasteel/circuit/gcircuit/off, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"rl" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (SOUTHEAST)"; + icon_state = "darkblue"; + dir = 6 + }, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"rm" = ( +/turf/open/floor/plasteel/darkred/side, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"rn" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (SOUTHWEST)"; + icon_state = "darkred"; + dir = 10 + }, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"ro" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (SOUTHEAST)"; + icon_state = "darkred"; + dir = 6 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHEAST)"; + icon_state = "warningline"; + dir = 6 + }, +/area/ctf) +"rp" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"rq" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHWEST)"; + icon_state = "warningline"; + dir = 9 + }, +/area/ctf) +"rr" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHEAST)"; + icon_state = "warningline"; + dir = 5 + }, +/area/ctf) +"rs" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (WEST)"; + icon_state = "warningline"; + dir = 8 + }, +/area/ctf) +"rt" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (EAST)"; + icon_state = "warningline"; + dir = 4 + }, +/area/ctf) +"ru" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"rv" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHWEST)"; + icon_state = "warningline"; + dir = 10 + }, +/area/ctf) +"rw" = ( +/turf/open/floor/plasteel/circuit/rcircuit, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHEAST)"; + icon_state = "warningline"; + dir = 6 + }, +/area/ctf) +"rx" = ( +/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (WEST)"; + icon_state = "warningline"; + dir = 8 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"ry" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (WEST)"; + icon_state = "darkredcorners"; + dir = 8 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"rz" = ( +/turf/open/floor/plasteel/darkred/corner, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/area/ctf) +"rA" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (WEST)"; + icon_state = "darkredcorners"; + dir = 8 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (NORTHEAST)"; + icon_state = "warningline"; + dir = 5 + }, +/area/ctf) +"rB" = ( +/turf/open/floor/plasteel/darkred/corner, +/area/ctf) +"rC" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (NORTH)"; + icon_state = "darkredcorners"; + dir = 1 + }, +/area/ctf) +"rD" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (NORTH)"; + icon_state = "darkredcorners"; + dir = 1 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (EAST)"; + icon_state = "warningline"; + dir = 4 + }, +/area/ctf) +"rE" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (EAST)"; + icon_state = "darkredcorners"; + dir = 4 + }, +/area/ctf) +"rF" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (WEST)"; + icon_state = "darkredcorners"; + dir = 8 + }, +/area/ctf) +"rG" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (WEST)"; + icon_state = "darkredcorners"; + dir = 8 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (EAST)"; + icon_state = "warningline"; + dir = 4 + }, +/area/ctf) +"rH" = ( +/turf/open/floor/plasteel/black, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHWEST)"; + icon_state = "warningline"; + dir = 10 + }, +/area/ctf) +"rI" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (NORTH)"; + icon_state = "darkredcorners"; + dir = 1 + }, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"rJ" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (EAST)"; + icon_state = "darkredcorners"; + dir = 4 + }, +/turf/open/floor/plasteel/warningline, +/area/ctf) +"rK" = ( +/turf/open/floor/plasteel/darkred/corner{ + tag = "icon-darkredcorners (NORTH)"; + icon_state = "darkredcorners"; + dir = 1 + }, +/turf/open/floor/plasteel/warningline{ + tag = "icon-warningline (SOUTHEAST)"; + icon_state = "warningline"; + dir = 6 + }, +/area/ctf) (1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababadaeaeaeaeaeadaeaeaeaeaeadaeaeaeaeaeadaeaeaeaeaeadaeaeaeaeaeadaeaeaeaeaead -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafagahaiaiajakalamanaoapakaqaqaqaqaqakarararararakasasasasasakatauauauavaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiayakalalazazalakaqaAaqaAaqakarararararakasaBasaBasakaCaDaDaDaEaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiaFakaGalalalalakaqaqaqaqaqakarararararakasasasasasakaCaDaDaDaEaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiaiakaGaHaIaIalakaqaqaqaqaqakarararararakasasaBasasakaCaDaDaDaEaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiaFakaGalalalalakaqaqaAaqaqakarararararakasasasasasakaCaDaDaDaEaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiaFakaGalalalalakaqaqaAaqaqakarararararakasasasasasakaJaDaDaDaKaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiaiakaGaLaMaMalakaqaqaqaqaqakarararararakasasaBasasakaJaDaDaDaKaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiaFakaGalalalalakaqaqaqaqaqakarararararakasasasasasakaJaDaDaDaKaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaNacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiayakalalaOaOalakaqaAaqaAaqakarararararakasaBasaBasakaJaDaDaDaKaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacaPacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaxahaiaiaQakalamaRanapakaqaqaqaqaqakarararararakasasasasasakaSaTaTaTaUaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababadaVaVaVaVaVadaVaVaVaVaVadaVaVaVaVaVadaVaVaVaVaVadaVaVaVaVaVadaVaVaVaVaVad -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaWaXaWaXaWakaYaZbabbbcakbdbdbebfbfakbgbgbgbgbgakbhbibibibjakbkblblblbmaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaXaWaXaWaXakbnbobobobpakbqbqbrbsbsakbgbtbgbubgakbvbwbwbwbxakbybzbzbzbAaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaWaXaWaXaWakbBbCbDbEbFakbqbGbGbGbsakbgbgbgbgbgakbvbwbwbwbxakbybHbHbHbAaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacbIacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaXaXaXaXaXakbobobJbJbJakbqbrbrbrbsakbgbgbgbgbgakbvbwbwbwbxakbybzbzbzbAaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaWaXaWaXaWakbKbLbMbobNakbObPbPbPbQakbgbRbgbgbgakbSbTbTbTbUakbVbWbWbWbXaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaWaXaWaXaWakbYbLbZbocaakcbcccccccdakbgbgbgcebgakcfcgcgcgchakcicjcjcjckaw -aaaaaaaaaaaaaaaaclaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaXaXaXaXaXakcmcmboboboakcnbrcobrcpakbgbgbgbgbgakcqbwbwbwcrakcsbzbzbzctaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaWaXaWaXaWakcucvcwboboakcncxcxcxcpakcDcDcDcDcDakcqbwbwbwcrakcscycycyctaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaXaWaXaWaXakbLczcAcBcCakcncnbrcpcpakiuiuiuiuiuakcqbwbwbwcrakcsbzbzbzctaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababafaWaXaWaXaWakcEcFcFcGcHakcIcIcJcKcKakcLcLcLcLcLakcMcNcNcNcOakcPcQcQcQcRaw -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababadcScScScScSadcScScScScSadcScScScScSadcScScScScSadcScScScScSadcScScScScSad -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcTcTcTcTcTcTcTcTcUcVcVcVcVcVcVcVcVcVcVcVcVcVcUcTcTcTcTcTcTcTcTcT -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcWcXadadadadadcYcZcVcVcVcVcVcVcVcVcVcVcVcVcVdacYadadadadadcXdbcT -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcWcXadadadadadcYcZcVcVcVcVcVcVcVcVcVcVcVcVcVdacYadadadadadcXdbcT -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcWcXadadadadadcYcZcVcVcVcVcVdcdddccVcVcVcVcVdacYadadadadadcXdbcT -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcWcXadadadadadcYcZcVcVcVcVcVdcdcdccVcVcVcVcVdacYadadadadadcXdbcT -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcWcXadadadadadcYcZcVcVcVcVcVcVcVcVcVcVcVcVcVdacYadadadadadcXdbcT -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcWcXadadadadadcYcZcVcVcVcVcVcVcVcVcVcVcVcVcVdacYadadadadadcXdbcT -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcTcTdfdfdfdfdfcTcUcVcVcVcVcVcVcVcVcVcVcVcVcVcUcTdfdfdfdfdfcTcTcT -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdgdgdgdgdgcTadadadadadadadadadadadadadadadcTdhdhdhdhdhcTabab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcTcTcTcTcTcTabababababababababababababababcTcTcTcTcTcTcTabab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacdjacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaadkaaaaaaaaaadlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababacacacacacacacacacacacacacacacdoacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdqdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababjRjSjXjXjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkXkXkYjRab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababjRlelqlqlqlqlqlKlSlenfndnflKlSlenfndnflKlSlenfndnflKnlnlnlnlnloEoEnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnloEoEnlnlnlnlnlpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKlSlenfndndlKlSlendndndlKlSlendndnflKnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlpSlqpTpTpUpVpSpTpTpTpUpVpSpTpTlqpUpVpSlqpWpWpWlqpUjRab -dpdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlenfndnflKlSlenfndnflKlSlenfndnflKnlnlnlnlnloEoEnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnloEoEnlnlnlnlnlpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab -drdpdpdpdpdpdpdpdpdpdpdpdpdpdpababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKjRpXpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRlqlqlqjRjRjRjRlqlqlqjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqcjRpSlqpWpWpWlqpUjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKjRjRlSlSlSjRjRjRqdqdqdjRjRjRlSlSlSjRjRqeqeqejRjRjRjRqeqeqejRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRpVpVpVjRjRjRqdqdqdjRjRjRpVpVpVjRjRpSlqlqlqlqlqpUjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKjRjSjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRqfqhqgqgqiqhqgqgqiqhqgqgqiqhqgqgqiqhqgqjjRjRqkjRjRjRqkjRjRjRqkjRjRjRjRqkjRjRjRjRqkjRjRjRqkjRjRjRqkjRjRjRjRjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkYjRpSlqpWpWpWlqpUjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlenfndnflKlSlenfndnflKlSlenfndnflKqmqlnfqnlqqonfqnlqqonfqnlqqonfqnlqqondqnqmjRjRqpjRjRjRqpjRjRjRqpjRjRjRjRqpjRjRjRjRqpjRjRjRqpjRjRjRqpjRjRjRjRjRpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKlSlenfndndlKlSlendndndlKlSlendndnflKqmqqlKnflqlqlKnflqlqlKnflqlqlKnflqlqndnfqmqrqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqtpSlqpTpTpUpVpSpTpTpTpUpVpSpTpTlqpUpVpSlqpWpWpWlqpUjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlenfndnflKlSlenfndnflKlSlenfndnflKqmqunfqvlqqwnfqvlqqwnfqvlqqwnfqvlqqwndqvqmjRjRqxjRqdjRqxjRqdjRqxjRjRqdjRqxjRqdjRjRqxjRqdjRqxjRqdjRqxjRjRqdjRjRpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRpXpYpYpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRqyqzqeqeqAqzqeqeqAqzqeqeqAqzqeqeqAqzqeqBjRjRqCjRqdjRqCjRqdjRqCjRjRqdjRqCjRqdjRjRqCjRqdjRqCjRqdjRqCjRjRqdjRjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqbqbqcjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRqDjRjRjRjRjRqDjRjRlSlSlSjRjRjRnfnfnfjRjRjRjRqsjRjRjRjRqgjRjRjRjRjRndndndjRjRjRjRjRqFqEqEqEqGjRjRqdjRqdjRqdjRqdjRqdjRjRqdjRqdjRqdjRjRqdjRqdjRqdjRqdjRqdjRjRqdjRjRjRjRqsjRjRjRjRqHqHqHjRjRjRpVpVpVjRjRqIjRjRjRjRjRqIjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRjSjXjXjXkMjRnfnfnfnfnfjRjRjRqsjRjRjRjRlqoFoFoFoFoFoFoFoFoFoFoFoFoFqKqJqJqJqLoFoFoFoFoFoFoFoFoFoFoFoFoFlqjRjRjRlqoFoFoFoFoFoFoFoFoFoFoFoFoFlqjRjRjRjRqsjRjRjRqHqHqHqHqHjRkWkXkXkXkYjRqHqHqHqHqHqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndndndndndnfqDlenfndnflKjRnflqlqlqnfjRjRjRqsjRjRjRjRlqjRqdqdqdjRndndndjRqdqdqdjRqNqMqMqMqOjRqdqdqdjRqPqPqPjRqdqdqdjRlqjRjRjRlqjRqdqdqdjRpTpTpTjRqdqdqdjRlqjRjRjRjRqsjRjRjRqHlqlqlqqHjRpSlqpTlqpUqQqHpTpTpTpTqRqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndnfnfnfndnfqDlendndndlKjRnfjRndjRnfjRqsqsqsqsqsqslqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqTqSqSqSqVqUqUqUqUqUqUqUqUqUqUqUqUqUqXqWqWqWqYlqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqsqsqsqsqsqsjRqHjRpTjRqHjRpSpTpTpTpUqQqHpTqHqHqHpTqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndnfnfnfndnfqDlenfndnflKjRnflqlqlqnfjRjRjRqsjRqdjRlqlqlqqJqJqJqJqJqJqJqJqJqJqJlqqZnfnfnflKrararararajRrajRrararararapSqHqHqHrblqrcrcrcrcrcrcrcrcrcrcrclqlqlqjRqdjRqsjRjRjRqHlqlqlqqHjRpSlqpTlqpUqQqHpTqHqHqHpTqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRpXpYpYpYpZjRnfnfnfnfnfjRjRjRqsqdqdqdlqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqZnfndnflKrarararararajRrarararararapSqHpTqHrblqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqdqdqdqsjRjRjRqHqHqHqHqHjRqaqbqbqbqcjRqHqHqHqHqHqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRjRlSlSlSlSlSjRjRjRjRjRjRjRjRjRnfnfnfjRjRjRjRjRjRqdjRlqlqjRnflSnfjRqdqdqdjRnflSnfjRqZnfnfnflKjRraqJndrararararapTrcrajRpSqHqHqHrbjRqHpVqHjRqdqdqdjRqHpVqHjRlqlqjRqdjRjRjRjRjRjRqHqHqHjRjRjRjRjRjRjRjRjRqHqHqHqHqHjRjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRnfnfnfnfnfjRnfnfnfnfnfjRnfnfnfnfnfjRlqlqjRlSnflSndqJqJqJndlSnflSjRqZnfjRnflKjRraraqJndrararapTrcrarajRpSqHjRqHrbjRpVqHpVpTrcrcrcpTpVqHpVjRlqlqjRqHqHqHqHqHjRqHqHqHqHqHjRqHqHqHqHqHjRqHqHqHqHqHqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfrdnfnfnfjRnflqjRlqnfnfnfndrdndnfnfnflqjRlqnfnflqlqqdnflSnfqJqJqJqJqJnflSnfjRqZnfndnflKjRqJraraqJndrapTrcrararcjRpSqHpTqHrbjRqHpVqHrcrcrcrcrcqHpVqHqdlqlqqHqHlqjRlqqHqHqHpTrdpTqHqHqHlqjRlqqHjRqHqHqHrdqHqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfrdrerdnfnfjRnflqndlqnfnfnfrdrfrdnfnfnflqndlqnfnflqlqqdlSnflSqJqJndqJqJlSnflSjRqZnfndnflKjRndqJraraqJrarcrararcpTjRpSqHpTqHrbjRpVqHpVrcrcpTrcrcpVqHpVqdlqlqqHqHlqpTlqqHqHqHrdrgrdqHqHqHlqpTlqqHjRqHqHrdrhrdqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfrdnfnfnfjRnflqjRlqnfnfnfndrdndnfnfnflqjRlqnfnflqlqqdnflSnfqJqJqJqJqJnflSnfjRqZnfndnflKjRqJraraqJndrapTrcrararcjRpSqHpTqHrbjRqHpVqHrcrcrcrcrcqHpVqHqdlqlqqHqHlqjRlqqHqHqHpTrdpTqHqHqHlqjRlqqHjRqHqHqHrdqHqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRnfnfnfnfnfjRnfnfnfnfnfjRnfnfnfnfnfjRlqlqjRlSnflSndqJqJqJndlSnflSjRqZnfjRnflKjRraraqJndrararapTrcrarajRpSqHjRqHrbjRpVqHpVpTrcrcrcpTpVqHpVjRlqlqjRqHqHqHqHqHjRqHqHqHqHqHjRqHqHqHqHqHjRqHqHqHqHqHqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRjRlSlSlSlSlSjRjRjRjRjRjRjRjRjRnfnfnfjRjRjRjRjRjRqdjRlqlqjRnflSnfjRqdqdqdjRnflSnfjRqZnfnfnflKjRraqJndrararararapTrcrajRpSqHqHqHrbjRqHpVqHjRqdqdqdjRqHpVqHjRlqlqjRqdjRjRjRjRjRjRqHqHqHjRjRjRjRjRjRjRjRjRqHqHqHqHqHjRjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRjSjXjXjXkMjRnfnfnfnfnfjRjRjRqsqdqdqdlqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqZnfndnflKrarararararajRrarararararapSqHpTqHrblqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqdqdqdqsjRjRjRqHqHqHqHqHjRkWkXkXkXkYjRqHqHqHqHqHqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndnfnfnfndnfqDlelqndlqlKjRnflqlqlqnfjRjRjRqsjRqdjRlqlqlqqJqJqJqJqJqJqJqJqJqJqJlqqZnfnfnflKrararararajRrajRrararararapSqHqHqHrblqrcrcrcrcrcrcrcrcrcrcrclqlqlqjRqdjRqsjRjRjRqHlqlqlqqHjRpSqHpTqHpUqQqHpTqHqHqHpTqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndnfnfnfndnfqDlendndndlKjRnfjRndjRnfjRqsqsqsqsqsqslqlqlqlqlqlqlqlqlqlqlqlqlqlqlqrjriririrlrkrkrkrkrkrkrkrkrkrkrkrkrkrnrmrmrmrolqlqlqlqlqlqlqlqlqlqlqlqlqlqlqqsqsqsqsqsqsjRqHjRpTjRqHjRpSpTpTpTpUqQqHpTqHqHqHpTqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdtdudvdwabdxabababdyabdsdtdudvdwabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfndndndndndnfqDlelqndlqlKjRnflqlqlqnfjRjRjRqsjRjRjRjRlqjRqdqdqdjRndndndjRqdqdqdjRlqjRjRjRlqjRqdqdqdjRqPqPqPjRqdqdqdjRrqrprprprrjRqdqdqdjRpTpTpTjRqdqdqdjRlqjRjRjRjRqsjRjRjRqHlqlqlqqHjRpSqHpTqHpUqQqHpTpTpTpTpTqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdAdAdAdBdCdDdEdFdEdDdGdHdAdAdAdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRnfnfnfnfnfnfnfjRpXpYpYpYpZjRnfnfnfnfnfjRjRjRqsjRjRjRjRlqoFoFoFoFoFoFoFoFoFoFoFoFoFlqjRjRjRlqoFoFoFoFoFoFoFoFoFoFoFoFoFrsrcrcrcrtoFoFoFoFoFoFoFoFoFoFoFoFoFlqjRjRjRjRqsjRjRjRqHqHqHqHqHjRqaqbqbqbqcjRqHqHqHqHqHqHqHjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdIdIdJdKdLdMdNdOdPdMdLdQdRdIdIdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRqDjRjRjRjRjRqDjRjRlSlSlSjRjRjRnfnfnfjRjRjRjRqsjRjRjRjRqdjRjRqdjRqdjRqdjRqdjRqdjRjRqdjRjRjRqdjRjRqdjRqdjRqdjRqdjRqdjRjRrvrurururwjRjRjRjRjRpTpTpTjRjRjRjRjRqejRjRjRjRqsjRjRjRjRqHqHqHjRjRjRpVpVpVjRjRqIjRjRjRjRjRqIjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzdIdIdSdTdTdMdTdTdTdMdTdTdSdIdIdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRjSjXjXjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjRqdjRjRqkjRqdjRqkjRqdjRqkjRjRqdjRqkjRqdjRjRqkjRqdjRqkjRqdjRqkjRjRrxqgrzryqgqgrzryqgqgrzryqgqgrzryqgqgrzrAjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkXkXkYjRab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUdRdIdDdTdMdMdMdMdMdMdMdTdDdIdJdVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlelqndlqlKlSlelqndlqlKlSlelqndlqlKjRjRqdjRjRqpjRqdjRqpjRqdjRqpjRjRqdjRqpjRqdjRjRqpjRqdjRqpjRqdjRqpjRjRqqrBpTrClqrBqHrClqrBqHrClqrBqHrClqrBqHrDqqpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUdWdXdYdZeaebdMecdTdMedeedWdVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKlSlelqndndlKlSlendndndlKlSlendndlqlKqrqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqsqtqqqHpTlqlqqHpSlqlqqHpSlqlqqHpSlqlqqHpSqmqqpSlqpTpTpUpVpSpTpTpTpUpVpSpTpTlqpUpVpSlqpWpWpWlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzefegeheidMdTdTdMeddzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlelqndlqlKlSlelqndlqlKlSlelqndlqlKjRjRjRjRjRqxjRjRjRqxjRjRjRqxjRjRjRjRqxjRjRjRjRqxjRjRjRqxjRjRjRqxjRjRqqrEpTrFlqrEqHrFlqrEqHrFlqrEqHrFlqrEqHrGqqpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzejekekebdMedeldMeddSababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKjRpXpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRjRjRjRjRqCjRjRjRqCjRjRjRqCjRjRjRjRqCjRjRjRjRqCjRjRjRqCjRjRjRqCjRjRrHqerJrIqeqerJrIqeqerJrIqeqerJrIqeqerJrKjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqcjRpSlqpWpWpWlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzemekekendMedeldMdMdDeoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKjRjRlSlSlSjRjRjRqdqdqdjRjRjRlSlSlSjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRqgqgqgjRjRjRjRqgqgqgjRjRpVpVpVjRjRjRqdqdqdjRjRjRpVpVpVjRjRpSlqlqlqlqlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdBdWdWdWdXdMdTdTdMeddEababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKjRjSjXjXjXkMjRjSjXjXjXkMjRjSjXjXjXkMjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRlqlqlqjRjRjRjRlqlqlqjRkWkXkXkXkYjRkWkXkXkXkYjRkWkXkXkXkYjRpSlqpWpWpWlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdzdMedeldMedeqababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlelqndlqlKlSlelqndlqlKlSlelqndlqlKlqnlnlnlnloEoEnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnloEoEnlnlnlnlnlpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdSdMedeldMeddEababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqpWpWpWlqlKlSlelqndndlKlSlendndndlKlSlendndlqlKlqnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnloEnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlnlpSlqpTpTpUpVpSpTpTpTpUpVpSpTpTlqpUpVpSlqpWpWpWlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMdMerdMdMdMdMdMdDesabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRlelqlqlqlqlqlKlSlelqndlqlKlSlelqndlqlKlSlelqndlqlKlqnlnlnlnloEoEnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnlnloFnlnlnlnlnlnlnlnlnloFnlnlnlnlnlnloEoEnlnlnlnlnlpSlqpTlqpUpVpSlqpTlqpUpVpSlqpTlqpUpVpSlqlqlqlqlqpUjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepetdMdTdTdTdTetababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRpXpYpYpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRpXpYpYpYpZjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqcjRqaqbqbqbqbqbqcjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzepdMepdzdMeuevewdLdzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRjRab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUexexdWeyezdGdWexexdVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUdHeAeddMeBeCdBdVababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzewdTeDdTeAdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdzeEeFeGeHeIdzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdUeqeqeqeqeqdVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJeJeJeJeJeKeJeJeJeJeJababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJeLeMeNeOeOeOeOeOePeJababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJeOeOeOeQeOeQeOeOeOeJababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJeOeOeReReReReSeOeOeJababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJeJeJeJeJeJeJeJeOeTeReUeVeReOeOeWeJababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJeXeYeZfafbfbeJeOeOeReReReReSeOfceJababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJfdfdfdfdfdfdfeeOeOffeOffeOeOeOfgeJeJeJeJeJfhfhfhfhfhfhfhfhfhabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJfdfdfdfdfdfdfeeOeOeOeOeOeOeOeOfifjfkfkfkeJfhflfhflfhflfhflfhabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJfmfmfnfofpfpeJfqfreOeOeOeOeOeOfifsfkftfkeJfhfhfhfhfhfhfhfhfhabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJeJfufvfvfweJeJfufvfvfweJeJeJfxeJeJfyfzfAeJfhflfhflfhflfhflfhabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfBeOeOfifCfDfEfAeJfhfhfhfhfhfhfhfhfhabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfFfGeOeOfifHfIfJfKeJababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfLfGfMeOeOfieJeJeJeJeJfhfhfhfhfhfhfhfhfhabfNfNfNfNfNfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfOfPfQfReOeOfSeJfTfkfUeJfhflfhflfhflfhflfhabfNfVfWfWfXfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababfLfYfReOeOeOfZfkfkgaeJfhfhfhfhfhfhfhfhfhabgbgcgcgcgcfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgdfYeOeOgeeJfkfkgfeJfhflfhflfhflfhflfhabfNgcggghgifNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgjeOeOfieJfkgkgleJfhfhfhfhfhfhfhfhfhabfNgmgngogpfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeJeJeJeJeJgqeJeJeJeJeJeJababababababababababfNgcgcgcgcfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgtgsgugvgugsgtgsgrabababfNfNfNfNfNfNfNfNgwgxgygzgAfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgBgCgBgsgsgsgrabababfNgDgEgEgEgFgGgHgIgJgKgKgLgMababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgNgrgNgrgCgrgNgrgNgrgrgrgrfNgOgKgKgKgKgKgPgQgJgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgSgugTgCgCgCgCgCgUgVgWgWgXfNgOgKgKgKgKgYgZhagJgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababhbhbhbhbhbhbhbgShcgTgCgCgChdgrgNgrgrgWhefNgOgKgKgKgKhfhfhfhggKgKgLgRhhabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCababababababababababababababababababababababababababababababababababababababhbhjhkhlhkhmhbgSgBgTgCgCgChngNgSgrhohphqfNhrgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshshshshshthshshshuhvhshshshshshuhshshshshshwhuhshsmCababababababababababababababababababababababababababababababababababababababhxhyhzhzhzhzhbgNgrhAgCgCgChBgrgNgrgNhCgNfNhDgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshthshshshshshshshshshshshuhshshshshshshshuhshEhshshsmCababababababababababababababababababababababababababababababababababababababhFhyhzhzhzhzhGhHgCgCgCgCgCgCgCgUhIgWgWgWhJhKgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshshshMhshshshshshthshshvhshshuhshshuhshshuhvhshuhsmCababababababababababababababababababababababababababababababababababababababhxhNhzhzhzhzhbgNgrhOgCgCgChdgrgNgrgrgrgrfNhPgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshshshshshshshshshshshshshuhshshthshshuhvhshshuhshvmCabababababababababababababababababababababababababababababababababababababhQhFhyhzhzhzhzhbgSgugTgCgCgChRgugSgrabababfNhSgKgKgKgKgKgKgKgKgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshshshshshshshshshshshthshshshshshshshvhshuhvhshuhsmCababababababababababababababababababababababababababababababababababababababhThyhzhzhzhzhbgShcgTgCgCgChRhcgSgrabababfNhUgKgKgKgKhVhVhVhWgKgKgLgRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshshshshshshshshshshshshshshvhshshshuhshshMhvhshshsmCababababababababababababababababababababababababababababababababababababababhYhyhzhzhzhzhbgSgBhZhOgChdiagBgSgrabababfNhUgKgKgKgKibicidgJgKgKgLieababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshXhXhXhXhXhXhXhXhXhshshshshshshMhshshthshthshuhshumCababababababababababababababababababababababababababababababababababababababiihyhzhzhzhzhbijijikilimikilijijijabababfNhUgKgKgKgKgKiniogJgKgKgLipababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshXhXhXhXhXhXhXhXhXhshshshshshshihiirishihihshvhuhsmCababababababababababababababababababababababababababababababababababababababhbiviwixhzhzhbiyiziAiBiCiDiEiFiGijabababfNiHiIiIiIiJiKiLiMgJgKgKgLiNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshXhXhXhXhXhXhXhXhXhshshshshshihiiPiQiQiPhihihihihihihihiababababababababababababababababababababababababababababababababababababhbhbhbhbiThbhbiUiCiViBiCiDiViCiWijabababfNfNfNfNfNfNfNfNiXgxgyiYgAfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiZjajbjcaaaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshXhXhXhXhXhXhXhXhXhshMhshshshijdjejejejejfjgjhhijijjjkhiababababababababababababababababababababababababababababababababababababababhbjrjrjrhbjsiCiViBiCiDiViCjtijabababababababababababfNgKgKgKgKfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajuaajvjwjxjcjcaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshXhXhXhXhXhXhXhXhXhshshshshthijzjejAjAjBjejejejCjDjDjEhihihihihihihihihihihihiabababababababababababababababababababababababababababhbjrjrjrhbjKiCiViBiCiDiViCjLijabababababababababababfNgKjMicibfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajujNjOjPjxjQjcaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshshXhXhXhXhXhXhXhshshshshshshijejAjTjUjAjejVjWhijDjYhihiiRiRiRiSiSiSiSiSiRiRhiabababababababababababababababababababababababababababhbjrjrjrhbkakbkbkciCkdkekekfijabababababababababababfNgKkginkhfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajckikjjQkkkljcaaaaaaaaaaaaaaaaaaaaababababababmChshshshshshshshXhXhXhXhXkmknknknknknishijejAkokpjAjejVkqhihihihihiiRiRjljmjnjojnjpjqiRhiabababababababababababababababababababababababababababhbhbhbhbhbikksilijiCijikksilijabababababababababababktgKgKgKgKfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajcjckukvkujcjcaaaaaaaaaaaaaaaaaaaaababababababmChshshXhXhXhXhXhXhXhXhXhXkwkxkxkxkxkxkxkyjejejejejejejVkqhihihihihiiRjFjmjnjGjHjIjnjpjJhiabababababababababababababababababababababababababababababababijkAkAkAkBiCkBkAkAkAijabababababababababababfNkCiJiJkDfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajujujckEkFkGjcaaaaaaaaaaaaaaaaaaaaaaababababababmChshshXhXhXhXhXhXhXhXhXhXkHkIirknknknishikJjAjAjAjejejVkKirknknknknknknjnjGjHjZjHjIjnjJhiababababababababababababababababababababababababababababijijijijijijijijimijijijijijijijijababababababababfNfNfNfNfNfNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaakPkQkRkSkTkUkGkVjuaaaaaaaaaaaaaaaaaaaaababababababmChshshXhXhXhXhXhXhXhXhXhXhXiqhXhXhshshshikZlalblalcjejejekIkxkxkxkxkxkIifjHjIkrjGjHifjJhiababababababababababababababababababababababababababababijlglhlhlhlhlhlglglglhlhlhlhlhlgijababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaliljlklllmkTkGlnlolpjujuaaaaaaaaaaaaaaaaababababababmCighshXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshthilrlslrlrltjejejeirknknknknknknjnjGjHkzjHjIjnjJhiabababababababababababababababababababababababababababablvlglglglwlglglglglglglglwlglglglvababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaajuaakRlxlxlykTkGlzlnlpaalAlBaaaaaaaaaaaaaaababababababmChshshXhXhXhXhXhXhXhXhXhXhXhXhXhXhshMhshihijWlClDlEhilFhihihihihihiiRjFkNjnjGjHjIjnkOjJhiababababababababababababababababababababababababababababijlglhlhlhlhlhlglglglhlhlhlhlhlgijababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaakVjuaaaajulGlHlIlJlIkVjujuaaaaaaaaaaaaaaaaababababababmChshshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshihihihihihilLlLlMlNlOlPhiiRiRldkNjnitjnkOlfiRhiababababababababababababababababababababababababababababijikksksksksksksksksksksksksksilijababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaajcjclQjcjcjcjcjcjclRjcjcjcjcjcjcaajuaaaaaaaaaaababababababmChshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshshshMhshilLlLlLlLlLlLhiiRiRiRlululululuiRiRhiabababababababababababababababababababablTlTlTlTlTlTlTlTlTlUlVlVlVlVlVlVlVlVlVlVlVlVlVlUlTlTlTlTlTlTlTlTlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaajclWkGkGlWjclXlYkGkGkGlZmajcmbmcmdmejujuaaaaaaababababababmChshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshthshshvkLlLlLlLlLlLmfhihihihihihihihihihihihiabababababababababababababababababababablTmgmhmimimimimimjmklVlVlVlVlVlVlVlVlVlVlVlVlVmlmjmmmmmmmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaamompkGkGmpmomqmqkGkGkGkGmrmomsmtlxlxmuaaaaaaaaababababababmChshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshMhuhthMhimvmvmvmvmvmwhiababababababababababababababababababababababababababababababablTmgmhmimxmimxmimjmklVlVlVlVlVlVlVlVlVlVlVlVlVmlmjmmmymmmymmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaamzmAkGlnkGmBlzlnkGhLkGkGmDmzmEmFmGmHmImJaaaaaaababababababmChshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshshshuhshihihihihihihihiababababababababababababababababababababababababababababababablTmgmhmimimKmimimjmklVlVlVlVlVmLmMmLlVlVlVlVlVmlmjmmmmmNmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaamOmpkGlIlzmPlIkGkGmQkGkGkGmOmRmSmumTkPaaaaaaaaababababababmChshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshuhshMhsmCabababababababababababababababababababababababababababababababababababababablTmgmhmimimimimimjmklVlVlVlVlVmLmUmLlVlVlVlVlVmlmjmmmmmmmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaajcmVkGkGmVjcmWkGlnlIkGkGmWjcmXmYmZnaaaaaaaaaaaababababababmChshXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhXhshshshshshshsmCabababababababababababababababababababababababababababababababababababababablTmgmhmimxmimxmimjmklVlVlVlVlVlVlVlVlVlVlVlVlVmlmjmmmymmmymmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaajcjcnbjcjcjcjcjckunckujcjcjcjcjcjujujuaaaaaaaaababababababmChshXhXhXhXhXhshXhXhXhXhXhXhXhXhXhXhXhshshshshEhshsmCabababababababababababababababababababababababababababababababababababababablTmgmhmimimimimimjmklVlVlVlVlVlVlVlVlVlVlVlVlVmlmjmmmmmmmmmmmhmnlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaalGkjaajuaajunekUlGaaaajuaaaaaaaajuaaaaaaaaababababababmChshXhXhXhXhXhshXhXhXhXhXhshXhXhXhXhXhshshshEihhEhsmCabababababababababababababababababababababababababababababababababababababablTlTlTngngngngnglTlUlVlVlVlVlVlVlVlVlVlVlVlVlVlUlTngngngngnglTlTlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaajujuaanhkjaaninjlGjuaankaaaaaaaaaaaaaaaaaaababababababmChshXhXhXhXhXhshshshshshshshXhXhXhXhXhshshshshEhshsmCabababababababababababababababababababababababababababababababababababababababablTnmnmnmnmnmlTnnnonononononononononononononplTnqnqnqnqnqlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajujuaanrlnnsaaaaaajuaaaaaaaaaaaaaaaaababababababmChshXhXhXhXhXhshshshshshshshXhXhXhXhXhshshshshshshsmCabababababababababababababababababababababababababababababababababababababababablTlTlTlTlTlTlTntnunununununvnwnxnunununununtlTlTlTlTlTlTlTababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajujcjcnyjcjcjuaajujuaaaaaaaaaaaaaaababababababmChshshshshshshshshshshshshshshshshshshshshshshshshsmCababababababababababababababababababababababababababababababababababababababababababababababnzntntntnAntnBnBnBnBnBntnAntntntnzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaajcnCnDnDjcnhmtlmnEnFjuaaaaaaaaaaababababababmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCmCababababababababababababababababababababababababababababababababababababababababababababababnznznGnznznznznHnInJnznznznznGnznzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaakunDnKnDkunLnMllnNjxjcaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnznznznznzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaanOjujcnPnDnQjcjPnRllnNaajuaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajujcjcjckujcjcjcnSnTnNaajuaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUnUnUnUnUnUnUnUnUnUnUnUnUnUnUnUnUnUnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaajujckGnVnWnVkGjcaanXaaaajuaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUnYnZoaobobnZocodoeofogohoiohohohojnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaajukjokkGkGkGkGkGokaaaaaaaakjaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUnYnZnZnZnZnZologogogomohohohonohohnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaajujunOjxjcookGkGkGoojcaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUopnZoqnYorosotogogogogohohouohovoinUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaajujcjcjcowowowowowjcaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUoxogomomomomomogogogogohohohoyohohnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaajcjcozozozjcjcaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUoAogogogogogogogogogogoBohohohohohnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoCoCoCaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUoDogogogogogogogogomogoBiOiOiOjyiOnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUoGogogogogogogogomoHomoBoIoIoIoIoInUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUnUoJoKoKoLnUnUnUnUnUnUnUnUnUnUnUnUnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUoMoMoMoMnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUoMoMoMoMnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababnUnUnUnUnUnUababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababoNoOoPoQoRabababoNoOoPoQoRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababoSoToUoVoWoXoYaboSoToZpapboXoYabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababpcpdpepepepfpgabpcphpepepepfpgabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababpipjpkplpmpnpoabpipjppplpqpnpoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababprpspepepepfptabprpspepepepfptabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababpupvpwpxpypzpAabpupvpwpxpypzpAabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababpBpCpDpEpFabababpBpCpDpEpFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababoNoOoPoQoRabababoNoOoPoQoRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababoSoTpGpHpIoXoYaboSoTpJpKpLoXoYabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababpcpMpepepepfpgabpcpNpepepepfpgabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababpipjpOplpPpnpoabpipjpQplpRpnpoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababprpspepepepfptabprpspepepepfptabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababpupvpwpxpypzpAabpupvpwpxpypzpAabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababpBpCpDpEpFabababpBpCpDpEpFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dr +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(3,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(4,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(5,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(6,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(7,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(8,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dq +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(9,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +cl +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(10,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(11,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dk +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(12,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(13,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(14,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(15,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +dp +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(16,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(17,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dl +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(18,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +jc +jc +mo +mz +mO +jc +jc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(19,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +jc +lW +mp +mA +mp +mV +jc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(20,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +kV +lQ +kG +kG +kG +kG +kG +nb +lG +ju +aa +aa +aa +aa +aa +aa +aa +aa +ju +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(21,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +li +aa +ju +jc +kG +kG +ln +lI +kG +jc +kj +ju +aa +aa +aa +aa +aa +aa +aa +aa +ju +ju +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(22,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +kP +lj +kR +aa +jc +lW +mp +kG +lz +mV +jc +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +nO +jc +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(23,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +kQ +lk +lx +aa +jc +jc +mo +mB +mP +jc +jc +ju +nh +ju +aa +aa +aa +nO +ju +ju +kj +jx +jc +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(24,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +ju +jc +jc +ju +kR +ll +lx +ju +jc +lX +mq +lz +lI +mW +jc +aa +kj +ju +ju +aa +aa +ju +jc +jc +ok +jc +jc +jc +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +jN +ki +jc +jc +kS +lm +ly +lG +jc +lY +mq +ln +kG +kG +jc +ju +aa +aa +jc +jc +ku +jc +jc +kG +kG +oo +ow +jc +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(26,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +iZ +jv +jO +kj +ku +kE +kT +kT +kT +lH +jc +kG +kG +kG +kG +ln +ku +ne +ni +nr +jc +nC +nD +nP +jc +nV +kG +kG +ow +oz +oC +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(27,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ja +jw +jP +jQ +kv +kF +kU +kG +kG +lI +lR +kG +kG +hL +mQ +lI +nc +kU +nj +ln +ny +nD +nK +nD +ku +nW +kG +kG +ow +oz +oC +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(28,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +jb +jx +jx +kk +ku +kG +kG +ln +lz +lJ +jc +kG +kG +kG +kG +kG +ku +lG +lG +ns +jc +nD +nD +nQ +jc +nV +kG +kG +ow +oz +oC +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(29,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +jc +jc +jQ +kl +jc +jc +kV +lo +ln +lI +jc +lZ +kG +kG +kG +kG +jc +aa +ju +aa +jc +jc +ku +jc +jc +kG +kG +oo +ow +jc +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(30,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +jc +jc +jc +jc +aa +ju +lp +lp +kV +jc +ma +mr +mD +kG +mW +jc +aa +aa +aa +ju +nh +nL +jP +jc +jc +ok +jc +jc +jc +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(31,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +aa +ju +jc +jc +mo +mz +mO +jc +jc +ju +nk +aa +aa +mt +nM +nR +nS +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(32,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +lA +ju +jc +mb +ms +mE +mR +mX +jc +aa +aa +ju +ju +lm +ll +ll +nT +nX +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(33,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +lB +aa +jc +mc +mt +mF +mS +mY +jc +aa +aa +aa +ju +nE +nN +nN +nN +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(34,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +md +lx +mG +mu +mZ +ju +aa +aa +aa +aa +nF +jx +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(35,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +me +lx +mH +mT +na +ju +aa +aa +aa +aa +ju +jc +ju +ju +ju +kj +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(36,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +mu +mI +kP +aa +ju +ju +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(37,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ju +aa +mJ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(38,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(39,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(40,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(41,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(42,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(43,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(44,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(45,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dn +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(46,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +di +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(47,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(48,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +ig +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(49,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(50,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(51,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(52,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +ht +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(53,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(54,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +hs +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(55,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hM +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(56,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(57,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +ht +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(58,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(59,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(60,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hX +hX +hX +hX +hX +hX +km +kw +kH +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(61,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hu +hs +ht +hs +hs +hs +hX +hX +hX +hX +hX +hs +kn +kx +kI +iq +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(62,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hv +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +kn +kx +ir +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(63,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +ht +hs +hs +hs +hs +hM +hs +hs +kn +kx +kn +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(64,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hu +hv +hs +hs +hs +hs +hs +hs +hs +hs +hs +kn +kx +kn +hs +hs +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(65,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hu +hs +hs +hs +hs +hs +hs +hs +hs +kn +kx +kn +hs +hs +hM +hs +hX +hX +hX +hX +hX +hX +hX +hX +hX +hX +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(66,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hv +hs +hs +hs +hs +ht +hs +is +kx +is +hs +ht +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(67,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hu +hs +hs +hs +hs +hs +hi +hi +hi +hi +hi +ky +hi +hi +hi +hi +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(68,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hu +hs +hs +ht +hs +hs +hM +hi +hi +jd +jz +je +je +je +kJ +kZ +lr +hi +hi +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(69,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +de +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hs +hs +hs +hs +hi +iP +je +je +jA +jA +je +jA +la +ls +jW +hi +hs +ht +hM +hs +hu +hs +hs +hE +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(70,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hu +hs +hs +hu +hs +ir +iQ +je +jA +jT +ko +je +jA +lb +lr +lC +hi +hs +hs +hu +hs +hs +hs +hE +ih +hE +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(71,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hu +hv +hs +ht +is +iQ +je +jA +jU +kp +je +jA +la +lr +lD +hi +hM +hs +ht +hu +hM +hs +hs +hE +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(72,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hu +hs +hv +hs +hs +hs +hi +iP +je +jB +jA +jA +je +je +lc +lt +lE +hi +hs +hv +hM +hs +hs +hs +hs +hs +hs +hs +hs +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(73,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hu +hs +hu +hM +ht +hi +hi +jf +je +je +je +je +je +je +je +hi +hi +hi +kL +hi +hi +mC +mC +mC +mC +mC +mC +mC +mC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(74,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ds +dz +dz +dz +dU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hw +hE +hv +hs +hv +hv +hs +hs +hi +jg +je +jV +jV +jV +jV +je +je +lF +lL +lL +lL +mv +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(75,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dt +dA +dI +dI +dR +dU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hu +hs +hs +hu +hs +hs +hu +hv +hi +jh +je +jW +kq +kq +kK +je +je +hi +lL +lL +lL +mv +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oS +pc +pi +pr +pu +ab +ab +ab +oS +pc +pi +pr +pu +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(76,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +du +dA +dI +dI +dI +dW +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hu +hs +hu +hs +hs +hu +hi +hi +jC +hi +hi +hi +ir +kI +ir +hi +lM +lL +lL +mv +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oN +oT +pd +pj +ps +pv +pB +ab +oN +oT +pM +pj +ps +pv +pB +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(77,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +dm +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dv +dA +dJ +dS +dD +dX +dz +dz +dz +dB +dz +dz +dz +dz +dz +dU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +hs +hs +hs +hv +hs +hs +hu +hs +hi +ji +jD +jD +hi +hi +kn +kx +kn +hi +lN +lL +lL +mv +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oO +oU +pe +pk +pe +pw +pC +ab +oO +pG +pe +pO +pe +pw +pC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(78,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dw +dB +dK +dT +dT +dY +ef +ej +em +dW +ep +ep +ep +ep +ep +ex +dU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mC +mC +mC +mC +mC +mC +mC +mC +mC +hi +jj +jD +jY +hi +hi +kn +kx +kn +hi +lO +lL +lL +mv +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oP +oV +pe +pl +pe +px +pD +ab +oP +pH +pe +pl +pe +px +pD +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(79,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dC +dL +dT +dM +dZ +eg +ek +ek +dW +dM +dM +dM +dM +dM +ex +dH +dz +dz +dU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +jk +jE +hi +hi +hi +kn +kx +kn +hi +lP +lL +mf +mw +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oQ +oW +pe +pm +pe +py +pE +ab +oQ +pI +pe +pP +pe +py +pE +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(80,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dx +dD +dM +dM +dM +ea +eh +ek +ek +dW +ep +ep +dM +ep +ep +dW +eA +ew +eE +eq +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +hi +hi +hi +hi +hi +kn +kx +kn +hi +hi +hi +hi +hi +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oR +oX +pf +pn +pf +pz +pF +ab +oR +oX +pf +pn +pf +pz +pF +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(81,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dE +dN +dT +dM +eb +ei +eb +en +dX +dz +dS +er +et +dz +ey +ed +dT +eF +eq +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iR +iR +iR +kn +kx +kn +iR +iR +iR +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oY +pg +po +pt +pA +ab +ab +ab +oY +pg +po +pt +pA +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(82,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dF +dO +dT +dM +dM +dM +dM +dM +dM +dM +dM +dM +dM +dM +ez +dM +eD +eG +eq +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iR +iR +jF +kn +kI +kn +jF +iR +iR +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(83,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dE +dP +dT +dM +ec +dT +ed +ed +dT +ed +ed +dM +dT +eu +dG +eB +dT +eH +eq +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iR +jl +jm +jn +if +jn +kN +ld +iR +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oS +pc +pi +pr +pu +ab +ab +ab +oS +pc +pi +pr +pu +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(84,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +dD +dM +dM +dM +dT +dT +el +el +dT +el +el +dM +dT +ev +dW +eC +eA +eI +eq +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iS +jm +jn +jG +jH +jG +jn +kN +lu +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oN +oT +ph +pj +ps +pv +pB +ab +oN +oT +pN +pj +ps +pv +pB +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(85,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dG +dL +dT +dM +dM +dM +dM +dM +dM +dM +dM +dM +dT +ew +ex +dB +dz +dz +dV +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iS +jn +jG +jH +jI +jH +jG +jn +lu +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oO +oZ +pe +pp +pe +pw +pC +ab +oO +pJ +pe +pQ +pe +pw +pC +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(86,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ds +dH +dQ +dT +dT +ed +ed +ed +dM +ed +ed +ed +dM +dT +dL +ex +dV +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iS +jo +jH +jZ +kr +kz +jH +it +lu +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oP +pa +pe +pl +pe +px +pD +ab +oP +pK +pe +pl +pe +px +pD +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(87,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dt +dA +dR +dS +dD +ee +dz +dS +dD +dE +eq +dE +dD +et +dz +dV +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iS +jn +jI +jH +jG +jH +jI +jn +lu +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oQ +pb +pe +pq +pe +py +pE +ab +oQ +pL +pe +pR +pe +py +pE +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(88,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +du +dA +dI +dI +dI +dW +ab +ab +eo +ab +ab +ab +es +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iS +jp +jn +jI +jH +jI +jn +kO +lu +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oR +oX +pf +pn +pf +pz +pF +ab +oR +oX +pf +pn +pf +pz +pF +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(89,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dv +dA +dI +dI +dJ +dV +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iR +jq +jp +jn +if +jn +kO +lf +iR +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +oY +pg +po +pt +pA +ab +ab +ab +oY +pg +po +pt +pA +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(90,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dw +dz +dz +dz +dV +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +iR +iR +jJ +jJ +jJ +jJ +jJ +iR +iR +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(91,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hi +hi +hi +hi +hi +hi +hi +hi +hi +hi +hi +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(92,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(93,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(94,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(95,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(96,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +aP +ac +ac +ac +ac +bI +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(97,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(98,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(99,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(100,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +nU +nU +nU +nU +nU +nU +nU +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(101,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +nY +nY +op +ox +oA +oD +oG +nU +nU +nU +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(102,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +nZ +nZ +nZ +og +og +og +og +oJ +oM +oM +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(103,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +oa +nZ +oq +om +og +og +og +oK +oM +oM +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(104,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +ob +nZ +nY +om +og +og +og +oK +oM +oM +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(105,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +ob +nZ +or +om +og +og +og +oL +oM +oM +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(106,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +nZ +nZ +os +om +og +og +og +nU +nU +nU +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(107,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +dj +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +oc +ol +ot +om +og +og +og +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(108,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +od +og +og +og +og +og +og +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(109,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +oe +og +og +og +og +og +om +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(110,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +of +og +og +og +og +om +oH +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(111,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +nU +og +om +og +og +og +og +om +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(112,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +lT +lT +lT +lT +lT +lT +lT +ab +ab +ab +ab +ab +ab +nU +oh +oh +oh +oh +oB +oB +oB +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(113,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eJ +eJ +eJ +eJ +eJ +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mg +mg +mg +mg +mg +mg +lT +ab +ab +ab +ab +ab +ab +nU +oi +oh +oh +oh +oh +iO +oI +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(114,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eX +fd +fd +fm +eJ +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mh +mh +mh +mh +mh +mh +lT +lT +lT +ab +ab +ab +ab +nU +oh +oh +ou +oh +oh +iO +oI +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(115,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eY +fd +fd +fm +fu +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mi +mi +mi +mi +mi +mi +ng +nm +lT +ab +ab +ab +ab +nU +oh +on +oh +oy +oh +iO +oI +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(116,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eZ +fd +fd +fn +fv +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hQ +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mi +mx +mi +mi +mx +mi +ng +nm +lT +ab +ab +ab +ab +nU +oh +oh +ov +oh +oh +jy +oI +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(117,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +fa +fd +fd +fo +fv +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hb +hb +hx +hF +hx +hF +hT +hY +ii +hb +hb +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mi +mi +mK +mi +mi +mi +ng +nm +lT +ab +ab +ab +ab +nU +oj +oh +oi +oh +oh +iO +oI +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(118,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +fb +fd +fd +fp +fw +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hb +hj +hy +hy +hN +hy +hy +hy +hy +iv +hb +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mi +mx +mi +mi +mx +mi +ng +nm +lT +ab +ab +ab +ab +nU +nU +nU +nU +nU +nU +nU +nU +nU +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(119,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +do +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +fb +fd +fd +fp +eJ +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hb +hk +hz +hz +hz +hz +hz +hz +hz +iw +hb +hb +hb +hb +hb +ab +ab +ab +ab +ab +ab +lT +mi +mi +mi +mi +mi +mi +ng +nm +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(120,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eJ +eJ +eJ +eJ +eJ +fe +fe +eJ +eJ +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hb +hl +hz +hz +hz +hz +hz +hz +hz +ix +hb +jr +jr +jr +hb +ab +ij +ij +lv +ij +ij +lT +mj +mj +mj +mj +mj +mj +lT +lT +lT +nz +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(121,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eL +eO +eO +eO +eO +eO +eO +fq +fu +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hb +hk +hz +hz +hz +hz +hz +hz +hz +hz +iT +jr +jr +jr +hb +ab +ij +lg +lg +lg +ik +lU +mk +mk +mk +mk +mk +mk +lU +nn +nt +nt +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(122,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eM +eO +eO +eT +eO +eO +eO +fr +fv +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hb +hm +hz +hz +hz +hz +hz +hz +hz +hz +hb +jr +jr +jr +hb +ab +ij +lh +lg +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nt +nG +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(123,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eN +eO +eR +eR +eR +ff +eO +eO +fv +ab +ab +ab +fO +ab +ab +ab +eJ +gr +gr +gr +gr +hb +hb +hb +hG +hb +hb +hb +hb +hb +hb +hb +hb +hb +hb +hb +ij +ij +lh +lg +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nt +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(124,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eO +eQ +eR +eU +eR +eO +eO +eO +fw +ab +ab +fL +fP +fL +ab +ab +eJ +gs +gs +gN +gS +gS +gS +gN +hH +gN +gS +gS +gS +ij +iy +iU +js +jK +ka +ik +kA +ij +lh +lw +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nA +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(125,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eK +eO +eO +eR +eV +eR +ff +eO +eO +eJ +ab +fF +fG +fQ +fY +gd +ab +eJ +gt +gs +gr +gu +hc +gB +gr +gC +gr +gu +hc +gB +ij +iz +iC +iC +iC +kb +ks +kA +ij +lh +lg +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nt +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(126,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eO +eQ +eR +eR +eR +eO +eO +eO +eJ +fB +fG +fM +fR +fR +fY +gj +eJ +gs +gs +gN +gT +gT +gT +hA +gC +hO +gT +gT +hZ +ik +iA +iV +iV +iV +kb +il +kA +ij +lh +lg +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nB +nz +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(127,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eO +eO +eS +eO +eS +eO +eO +eO +eJ +eO +eO +eO +eO +eO +eO +eO +eJ +gu +gB +gr +gC +gC +gC +gC +gC +gC +gC +gC +hO +il +iB +iB +iB +iB +kc +ij +kB +ij +lg +lg +lg +ks +lV +lV +lV +mL +mL +lV +lV +lV +no +nv +nB +nH +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(128,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eO +eO +eO +eO +eO +eO +eO +eO +fx +eO +eO +eO +eO +eO +eO +eO +gq +gv +gC +gC +gC +gC +gC +gC +gC +gC +gC +gC +gC +im +iC +iC +iC +iC +iC +iC +iC +im +lg +lg +lg +ks +lV +lV +lV +mM +mU +lV +lV +lV +no +nw +nB +nI +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(129,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eP +eO +eO +eW +fc +fg +fi +fi +eJ +fi +fi +fi +fS +eO +ge +fi +eJ +gu +gB +gr +gC +gC +gC +gC +gC +gC +gC +gC +hd +ik +iD +iD +iD +iD +kd +ij +kB +ij +lg +lg +lg +ks +lV +lV +lV +mL +mL +lV +lV +lV +no +nx +nB +nJ +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(130,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eJ +eJ +eJ +eJ +eJ +eJ +fj +fs +eJ +fC +fH +eJ +eJ +fZ +eJ +eJ +eJ +gs +gs +gN +gC +hd +hn +hB +gC +hd +hR +hR +ia +il +iE +iV +iV +iV +ke +ik +kA +ij +lh +lg +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nB +nz +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(131,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +fk +fk +fy +fD +fI +eJ +fT +fk +fk +fk +eJ +gt +gs +gr +gC +gr +gN +gr +gC +gr +gu +hc +gB +ij +iF +iC +iC +iC +ke +ks +kA +ij +lh +lg +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nt +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(132,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +fk +ft +fz +fE +fJ +eJ +fk +fk +fk +gk +eJ +gs +gs +gN +gU +gN +gS +gN +gU +gN +gS +gS +gS +ij +iG +iW +jt +jL +kf +il +kA +ij +lh +lw +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nA +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(133,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +fk +fk +fA +fA +fK +eJ +fU +ga +gf +gl +eJ +gr +gr +gr +gV +gr +gr +gr +hI +gr +gr +gr +gr +ij +ij +ij +ij +ij +ij +ij +ij +ij +lh +lg +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nt +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(134,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +eJ +ab +ab +gr +gW +gr +ho +gN +gW +gr +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ij +lh +lg +lh +ks +lV +lV +lV +lV +lV +lV +lV +lV +no +nu +nt +nG +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(135,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fh +fh +fh +fh +ab +fh +fh +fh +fh +fh +ab +ab +ab +gr +gW +gW +hp +hC +gW +gr +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ij +lg +lg +lg +il +lU +ml +ml +ml +ml +ml +ml +lU +np +nt +nt +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(136,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fl +fh +fl +fh +ab +fh +fl +fh +fl +fh +ab +ab +ab +gr +gX +he +hq +gN +gW +gr +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ij +ij +lv +ij +ij +lT +mj +mj +mj +mj +mj +mj +lT +lT +lT +nz +nz +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(137,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fh +fh +fh +fh +ab +fh +fh +fh +fh +fh +ab +fN +fN +fN +fN +fN +fN +fN +hJ +fN +fN +fN +fN +fN +fN +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mm +mm +mm +mm +mm +mm +ng +nq +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(138,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fl +fh +fl +fh +ab +fh +fl +fh +fl +fh +ab +fN +gD +gO +gO +gO +hr +hD +hK +hP +hS +hU +hU +hU +iH +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mm +my +mm +mm +my +mm +ng +nq +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(139,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fh +fh +fh +fh +ab +fh +fh +fh +fh +fh +ab +fN +gE +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +iI +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mm +mm +mN +mm +mm +mm +ng +nq +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(140,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +aN +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fl +fh +fl +fh +ab +fh +fl +fh +fl +fh +ab +fN +gE +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +iI +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mm +my +mm +mm +my +mm +ng +nq +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(141,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fh +fh +fh +fh +ab +fh +fh +fh +fh +fh +ab +fN +gE +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +iI +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mm +mm +mm +mm +mm +mm +ng +nq +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(142,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fl +fh +fl +fh +ab +fh +fl +fh +fl +fh +ab +fN +gF +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +iJ +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mh +mh +mh +mh +mh +mh +lT +lT +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(143,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fh +fh +fh +fh +fh +ab +fh +fh +fh +fh +fh +ab +fN +gG +gK +gY +hf +gK +gK +gK +gK +gK +hV +ib +gK +iK +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +mn +mn +mn +mn +mn +mn +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(144,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fN +gH +gP +gZ +hf +gK +gK +gK +gK +gK +hV +ic +in +iL +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +lT +lT +lT +lT +lT +lT +lT +lT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(145,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fN +fN +gb +fN +fN +fN +gw +gI +gQ +ha +hf +gK +gK +gK +gK +gK +hV +id +io +iM +iX +fN +fN +fN +kt +fN +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(146,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fN +fV +gc +gc +gm +gc +gx +gJ +gJ +gJ +hg +gK +gK +gK +gK +gK +hW +gJ +gJ +gJ +gx +gK +gK +gK +gK +kC +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(147,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fN +fW +gc +gg +gn +gc +gy +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gy +gK +jM +kg +gK +iJ +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(148,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fN +fW +gc +gh +go +gc +gz +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +gK +iY +gK +ic +in +gK +iJ +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(149,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jS +le +le +le +le +le +le +le +le +le +pX +qD +nf +nf +nf +nf +nf +jR +nf +nf +nf +nf +nf +jR +nf +nf +nf +nf +nf +qD +jS +le +le +le +le +le +le +le +le +le +pX +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fN +fX +gc +gi +gp +gc +gA +gL +gL +gL +gL +gL +gL +gL +gL +gL +gL +gL +gL +gL +gA +gK +ib +kh +gK +kD +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(150,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +lq +lq +lq +lq +lq +lq +lq +lq +lq +pY +jR +nf +nd +nd +nd +nf +lS +nf +nf +nf +nf +nf +lS +nf +nd +nd +nd +nf +jR +jX +lq +lq +lq +lq +lq +lq +lq +lq +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fN +fN +fN +fN +fN +fN +fN +gM +gR +gR +gR +gR +gR +gR +gR +gR +gR +ie +ip +iN +fN +fN +fN +fN +fN +fN +fN +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(151,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +lq +pW +lq +pW +lq +pW +lq +pW +lq +pY +jR +nf +nd +nf +nf +nf +lS +nf +nf +rd +nf +nf +lS +nf +nf +nf +nd +nf +jR +jX +lq +pW +lq +pW +lq +pW +lq +pW +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +hh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(152,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +lq +pW +lq +pW +lq +pW +lq +pW +lq +pY +jR +nf +nd +nf +nf +nf +lS +nf +rd +re +rd +nf +lS +nf +nf +nf +nd +nf +jR +jX +lq +pW +lq +pW +lq +pW +lq +pW +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(153,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +lq +pW +lq +pW +lq +pW +lq +pW +lq +pY +jR +nf +nd +nf +nf +nf +lS +nf +nf +rd +nf +nf +lS +nf +nf +nf +nd +nf +jR +jX +lq +pW +lq +pW +lq +pW +lq +pW +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(154,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +lq +lq +lq +lq +lq +lq +lq +lq +lq +pY +jR +nf +nd +nd +nd +nf +lS +nf +nf +nf +nf +nf +lS +nf +nd +nd +nd +nf +jR +jX +lq +lq +lq +lq +lq +lq +lq +lq +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(155,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kM +lK +lK +lK +lK +lK +lK +lK +lK +lK +pZ +qD +nf +nf +nf +nf +nf +jR +nf +nf +nf +nf +nf +jR +nf +nf +nf +nf +nf +qD +kM +lK +lK +lK +lK +lK +lK +lK +lK +lK +pZ +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(156,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +lS +lS +lS +jR +jR +jR +lS +lS +lS +jR +jR +jR +qD +qD +qD +jR +jR +jR +jR +jR +jR +jR +jR +jR +qD +qD +qD +jR +jR +jR +lS +lS +lS +jR +jR +jR +lS +lS +lS +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(157,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jS +le +le +le +pX +jR +jS +le +le +le +pX +jR +jS +le +le +le +pX +jR +nf +nf +nf +nf +nf +jR +jS +le +le +le +pX +jR +jS +le +le +le +pX +jR +jS +le +le +le +pX +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(158,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nf +nf +nf +pY +lS +jX +nf +nf +nf +pY +lS +jX +nf +nd +nf +pY +jR +nf +lq +lq +lq +nf +jR +jX +lq +nd +lq +pY +lS +jX +lq +lq +lq +pY +lS +jX +lq +lq +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(159,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nd +nd +nd +pY +lS +jX +nd +nd +nd +pY +lS +jX +nd +nd +nd +pY +jR +nf +jR +nd +jR +nf +jR +jX +nd +nd +nd +pY +lS +jX +nd +nd +nd +pY +lS +jX +nd +nd +nd +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(160,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nf +nd +nf +pY +lS +jX +nf +nd +nf +pY +lS +jX +nf +nd +nf +pY +jR +nf +lq +lq +lq +nf +jR +jX +lq +nd +lq +pY +lS +jX +lq +nd +lq +pY +lS +jX +lq +nd +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(161,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kM +lK +lK +lK +pZ +jR +kM +lK +lK +lK +pZ +jR +kM +lK +lK +lK +pZ +jR +nf +nf +nf +nf +nf +jR +kM +lK +lK +lK +pZ +jR +kM +lK +lK +lK +pZ +jR +kM +lK +lK +lK +pZ +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(162,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +lS +lS +lS +jR +jR +jR +lS +lS +lS +jR +jR +jR +jR +jR +jR +jR +jR +jR +nf +nf +nf +jR +jR +jR +jR +jR +jR +jR +jR +jR +lS +lS +lS +jR +jR +jR +lS +lS +lS +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(163,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jS +le +le +le +pX +jR +jS +le +le +le +pX +jR +nf +nf +nf +nf +nf +jR +nf +nf +nf +nf +nf +jR +nf +nf +nf +nf +nf +jR +jS +le +le +le +pX +jR +jS +le +le +le +pX +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(164,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nf +nd +nf +pY +qd +jX +nf +nd +nf +pY +nf +nf +lq +jR +lq +nf +nf +nf +nd +rd +nd +nf +nf +nf +lq +jR +lq +nf +nf +jX +lq +nd +lq +pY +qd +jX +lq +nd +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(165,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nd +nd +nd +pY +qd +jX +nd +nd +nd +pY +nf +nf +lq +nd +lq +nf +nf +nf +rd +rf +rd +nf +nf +nf +lq +nd +lq +nf +nf +jX +nd +nd +nd +pY +qd +jX +nd +nd +nd +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(166,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nf +nd +nf +pY +qd +jX +nf +nd +nf +pY +nf +nf +lq +jR +lq +nf +nf +nf +nd +rd +nd +nf +nf +nf +lq +jR +lq +nf +nf +jX +lq +nd +lq +pY +qd +jX +lq +nd +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(167,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kM +lK +lK +lK +pZ +jR +kM +lK +lK +lK +pZ +jR +nf +nf +nf +nf +nf +jR +nf +nf +nf +nf +nf +jR +nf +nf +nf +nf +nf +jR +kM +lK +lK +lK +pZ +jR +kM +lK +lK +lK +pZ +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(168,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +lS +lS +lS +jR +jR +jR +lS +lS +lS +jR +jR +jR +jR +jR +jR +jR +jR +jR +nf +nf +nf +jR +jR +jR +jR +jR +jR +jR +jR +jR +lS +lS +lS +jR +jR +jR +lS +lS +lS +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(169,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jS +le +le +le +pX +jR +jS +le +le +le +pX +jR +jR +jR +qs +jR +jR +jR +nf +nf +nf +nf +nf +jR +jR +jR +qs +jR +jR +jR +jS +le +le +le +pX +jR +jS +le +le +le +pX +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(170,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nf +nd +nf +pY +lS +jX +nf +nd +nf +pY +jR +jR +jR +qs +jR +jR +jR +nf +lq +lq +lq +nf +jR +jR +jR +qs +jR +jR +jR +jX +lq +nd +lq +pY +lS +jX +lq +nd +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(171,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nd +nd +nd +pY +lS +jX +nd +nd +nd +pY +qs +qs +qs +qs +qs +qs +jR +nf +jR +nd +jR +nf +jR +qs +qs +qs +qs +qs +qs +jX +nd +nd +nd +pY +lS +jX +nd +nd +nd +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(172,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jX +nf +nf +nf +pY +lS +jX +nf +nf +nf +pY +jR +jR +jR +qs +jR +qd +jR +nf +lq +lq +lq +nf +jR +qd +jR +qs +jR +jR +jR +jX +lq +lq +lq +pY +lS +jX +lq +lq +lq +pY +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(173,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kM +lK +lK +lK +pZ +jR +kM +lK +lK +lK +pZ +jR +jR +jR +qs +qd +qd +qd +nf +nf +nf +nf +nf +qd +qd +qd +qs +jR +jR +jR +kM +lK +lK +lK +pZ +jR +kM +lK +lK +lK +pZ +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(174,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +qm +qm +qm +jR +jR +jR +jR +qs +jR +qd +jR +jR +nf +nf +nf +jR +jR +qd +jR +qs +jR +jR +jR +jR +jR +qr +jR +jR +jR +jR +lq +lq +lq +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(175,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +lq +qe +qf +ql +qq +qu +qy +jR +jR +jR +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +jR +jR +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(176,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +lq +qe +qh +nf +lK +nf +qz +qg +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +qd +qd +qd +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(177,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +lq +qe +qg +qn +nf +qv +qe +jR +oF +jR +lq +lq +lq +jR +jR +qd +qd +qd +jR +jR +lq +lq +lq +jR +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(178,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qg +lq +lq +lq +qe +jR +oF +qd +lq +qJ +lq +nf +lS +nf +lS +nf +lS +nf +lq +qJ +lq +qd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(179,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +oE +nl +oE +jR +jR +qi +qo +lq +qw +qA +jR +oF +qd +lq +qJ +lq +lS +nf +lS +nf +lS +nf +lS +lq +qJ +lq +qd +oF +qd +qk +qp +qs +qx +qC +jR +jR +oE +nl +oE +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(180,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +oE +nl +oE +jR +jR +qh +nf +lK +nf +qz +jR +oF +qd +lq +qJ +lq +nf +lS +nf +lS +nf +lS +nf +lq +qJ +lq +qd +oF +jR +jR +jR +qs +jR +jR +jR +jR +oE +nl +oE +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(181,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qg +qn +nf +qv +qe +jR +oF +jR +lq +qJ +lq +jR +nd +qJ +qJ +qJ +nd +jR +lq +qJ +lq +jR +oF +qd +qd +qd +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(182,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +lq +qe +qg +lq +lq +lq +qe +nd +oF +nd +lq +qJ +lq +qd +qJ +qJ +qJ +qJ +qJ +qd +lq +qJ +lq +nd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(183,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +lq +qe +qi +qo +lq +qw +qA +nd +oF +nd +lq +qJ +lq +qd +qJ +qJ +nd +qJ +qJ +qd +lq +qJ +lq +nd +oF +qd +qk +qp +qs +qx +qC +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(184,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +lq +qe +qh +nf +lK +nf +qz +nd +oF +nd +lq +qJ +lq +qd +qJ +qJ +qJ +qJ +qJ +qd +lq +qJ +lq +nd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(185,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qg +qn +nf +qv +qe +jR +oF +jR +lq +qJ +lq +jR +nd +qJ +qJ +qJ +nd +jR +lq +qJ +lq +jR +oF +qd +qd +qd +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(186,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qg +lq +lq +lq +qe +jR +oF +qd +lq +qJ +lq +nf +lS +nf +lS +nf +lS +nf +lq +qJ +lq +qd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(187,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +oF +nl +oF +jR +jR +qi +qo +lq +qw +qA +jR +oF +qd +lq +qJ +lq +lS +nf +lS +nf +lS +nf +lS +lq +qJ +lq +qd +oF +qd +qk +qp +qs +qx +qC +jR +jR +oF +nl +oF +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(188,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qh +nf +lK +nf +qz +jR +oF +qd +lq +qJ +lq +nf +lS +nf +lS +nf +lS +nf +lq +qJ +lq +qd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(189,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qg +qn +nf +qv +qe +jR +oF +jR +lq +lq +lq +jR +jR +jR +jR +jR +jR +jR +lq +lq +lq +jR +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(190,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qg +lq +lq +lq +qe +qF +qK +qN +qT +qZ +qZ +qZ +qZ +qZ +qZ +qZ +qZ +qZ +qZ +qZ +rj +lq +lq +qd +qd +qd +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(191,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qi +qo +lq +qw +qA +qE +qJ +qM +qS +nf +nf +nf +nf +nf +nf +nf +nf +nf +nf +nf +ri +jR +jR +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(192,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +oE +nl +jR +jR +qh +nd +nd +nd +qz +qE +qJ +qM +qS +nf +nd +nf +jR +nd +nd +nd +jR +nf +nd +nf +ri +jR +jR +jR +qk +qp +qs +qx +qC +jR +jR +nl +oE +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(193,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qg +qn +nf +qv +qe +qE +qJ +qM +qS +nf +nf +nf +nf +nf +nf +nf +nf +nf +nf +nf +ri +jR +jR +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(194,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qj +qm +qm +qm +qB +qG +qL +qO +qV +lK +lK +lK +lK +lK +lK +lK +lK +lK +lK +lK +rl +lq +lq +qd +qd +qd +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(195,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qr +jR +jR +jR +oF +jR +qU +ra +ra +jR +jR +jR +jR +jR +jR +jR +ra +ra +rk +jR +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(196,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qd +qU +ra +ra +ra +ra +qJ +nd +qJ +ra +ra +ra +ra +rk +qd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(197,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +oF +nl +oF +jR +jR +qk +qp +qs +qx +qC +qd +oF +qd +qU +ra +ra +qJ +ra +ra +qJ +ra +ra +qJ +ra +ra +rk +qd +oF +qd +qk +qp +qs +qx +qC +jR +jR +oF +nl +oF +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(198,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qd +qU +ra +ra +nd +qJ +ra +ra +ra +qJ +nd +ra +ra +rk +qd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(199,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +qd +qd +qd +oF +jR +qU +ra +ra +ra +nd +qJ +ra +qJ +nd +ra +ra +ra +rk +jR +oF +qd +qd +qd +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(200,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qP +qU +jR +ra +ra +ra +nd +qJ +nd +ra +ra +ra +jR +rk +qP +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(201,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +oE +nl +jR +jR +qk +qp +qs +qx +qC +qd +oF +qP +qU +ra +jR +ra +ra +ra +ra +ra +ra +ra +jR +ra +rk +qP +oF +qd +qk +qp +qs +qx +qC +jR +jR +nl +oE +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(202,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qP +qU +jR +ra +ra +ra +pT +rc +pT +ra +ra +ra +jR +rk +qP +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(203,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +qd +qd +qd +oF +jR +qU +ra +ra +ra +pT +rc +ra +rc +pT +ra +ra +ra +rk +jR +oF +qd +qd +qd +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(204,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qd +qU +ra +ra +pT +rc +ra +ra +ra +rc +pT +ra +ra +rk +qd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(205,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +oF +nl +oF +jR +jR +qk +qp +qs +qx +qC +qd +oF +qd +qU +ra +ra +rc +ra +ra +rc +ra +ra +rc +ra +ra +rk +qd +oF +qd +qk +qp +qs +qx +qC +jR +jR +oF +nl +oF +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(206,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qd +qU +ra +ra +ra +ra +rc +pT +rc +ra +ra +ra +ra +rk +qd +oF +jR +jR +jR +qs +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(207,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +jR +qU +ra +ra +jR +jR +jR +jR +jR +jR +jR +ra +ra +rk +jR +oF +jR +jR +jR +qt +jR +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(208,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +qd +qd +qd +lq +lq +qX +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +pS +rn +rq +rs +rv +rx +qq +qq +qq +rH +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(209,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +jR +jR +qW +qH +qH +qH +qH +qH +qH +qH +qH +qH +qH +qH +rm +rp +rc +ru +qg +rB +qH +rE +qe +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(210,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +oE +nl +jR +jR +qk +qp +qs +qx +qC +qd +jR +jR +qW +qH +pT +qH +jR +pT +pT +pT +jR +qH +pT +qH +rm +rp +rc +ru +rz +pT +pT +pT +rJ +jR +jR +nl +oE +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(211,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +jR +jR +qW +qH +qH +qH +qH +qH +qH +qH +qH +qH +qH +qH +rm +rp +rc +ru +ry +rC +lq +rF +rI +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(212,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +qd +qd +qd +lq +lq +qY +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +rb +ro +rr +rt +rw +qg +lq +lq +lq +qe +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(213,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +jR +lq +lq +lq +jR +jR +jR +jR +jR +jR +jR +lq +lq +lq +jR +oF +jR +qg +rB +qH +rE +qe +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(214,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qd +lq +rc +lq +qH +pV +qH +pV +qH +pV +qH +lq +rc +lq +qd +oF +jR +rz +qH +pS +qH +rJ +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(215,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +oF +nl +oF +jR +jR +qk +qp +qs +qx +qC +qd +oF +qd +lq +rc +lq +pV +qH +pV +qH +pV +qH +pV +lq +rc +lq +qd +oF +jR +ry +rC +lq +rF +rI +jR +jR +oF +nl +oF +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(216,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qd +lq +rc +lq +qH +pV +qH +pV +qH +pV +qH +lq +rc +lq +qd +oF +jR +qg +lq +lq +lq +qe +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(217,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +qd +qd +qd +oF +jR +lq +rc +lq +jR +pT +rc +rc +rc +pT +jR +lq +rc +lq +jR +oF +jR +qg +rB +qH +rE +qe +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(218,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +pT +lq +rc +lq +qd +rc +rc +rc +rc +rc +qd +lq +rc +lq +pT +oF +pT +rz +qH +pS +qH +rJ +qg +lq +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(219,1,1) = {" +ad +af +af +af +af +af +af +af +af +af +af +ad +af +af +af +af +af +af +af +af +af +af +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +qk +qp +qs +qx +qC +qd +oF +pT +lq +rc +lq +qd +rc +rc +pT +rc +rc +qd +lq +rc +lq +pT +oF +pT +ry +rC +lq +rF +rI +qg +lq +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(220,1,1) = {" +ae +ag +ax +ax +ax +ax +ax +ax +ax +ax +ax +aV +aW +aX +aW +aX +aW +aW +aX +aW +aX +aW +cS +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +pT +lq +rc +lq +qd +rc +rc +rc +rc +rc +qd +lq +rc +lq +pT +oF +pT +qg +lq +lq +lq +qe +qg +lq +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(221,1,1) = {" +ae +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +aV +aX +aW +aX +aX +aX +aX +aX +aX +aW +aX +cS +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +qd +qd +qd +oF +jR +lq +rc +lq +jR +pT +rc +rc +rc +pT +jR +lq +rc +lq +jR +oF +jR +qg +rB +qH +rE +qe +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(222,1,1) = {" +ae +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +aV +aW +aX +aW +aX +aW +aW +aX +aW +aX +aW +cS +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +oE +nl +oE +jR +jR +jR +jR +qs +jR +jR +jR +oF +qd +lq +rc +lq +qH +pV +qH +pV +qH +pV +qH +lq +rc +lq +qd +oF +jR +rz +qH +pS +qH +rJ +jR +jR +oE +nl +oE +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(223,1,1) = {" +ae +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +aV +aX +aW +aX +aX +aX +aX +aX +aX +aW +aX +cS +cT +cT +cT +cT +cT +cT +cT +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +oE +nl +oE +jR +jR +qk +qp +qs +qx +qC +qd +oF +qd +lq +rc +lq +pV +qH +pV +qH +pV +qH +pV +lq +rc +lq +qd +oF +jR +ry +rC +lq +rF +rI +jR +jR +oE +nl +oE +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(224,1,1) = {" +ae +aj +ay +aF +ai +aF +aF +ai +aF +ay +aQ +aV +aW +aX +aW +aX +aW +aW +aX +aW +aX +aW +cS +cT +cW +cW +cW +cW +cW +cW +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +qd +lq +rc +lq +qH +pV +qH +pV +qH +pV +qH +lq +rc +lq +qd +oF +jR +qg +lq +lq +lq +qe +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(225,1,1) = {" +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +cT +cX +cX +cX +cX +cX +cX +cT +cT +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +oF +jR +lq +lq +lq +jR +jR +qd +qd +qd +jR +jR +lq +lq +lq +jR +oF +jR +qg +rB +qH +rE +qe +qg +lq +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(226,1,1) = {" +ae +al +al +aG +aG +aG +aG +aG +aG +al +al +aV +aY +bn +bB +bo +bK +bY +cm +cu +bL +cE +cS +cT +ad +ad +ad +ad +ad +ad +df +dg +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +qd +qd +qd +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +qe +rz +qH +pS +qH +rJ +qg +lq +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(227,1,1) = {" +ae +am +al +al +aH +al +al +aL +al +al +am +aV +aZ +bo +bC +bo +bL +bL +cm +cv +cz +cF +cS +cT +ad +ad +ad +ad +ad +ad +df +dg +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qs +jR +jR +jR +jR +jR +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +lq +jR +jR +jR +rA +rD +qm +rG +rK +qg +lq +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(228,1,1) = {" +ae +an +az +al +aI +al +al +aM +al +aO +aR +aV +ba +bo +bD +bJ +bM +bZ +bo +cw +cA +cF +cS +cT +ad +ad +ad +ad +ad +ad +df +dg +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +nl +nl +nl +jR +jR +jR +jR +qt +jR +jR +jR +jR +jR +qs +jR +qd +jR +jR +qH +qH +qH +jR +jR +qd +jR +qs +jR +jR +jR +jR +qq +qq +qq +jR +jR +jR +nl +nl +nl +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(229,1,1) = {" +ae +ao +az +al +aI +al +al +aM +al +aO +an +aV +bb +bo +bE +bJ +bo +bo +bo +bo +cB +cG +cS +cT +ad +ad +ad +ad +ad +ad +df +dg +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kW +pS +pS +pS +qa +jR +kW +pS +pS +pS +qa +jR +jR +jR +qs +qd +qd +qd +qH +qH +qH +qH +qH +qd +qd +qd +qs +jR +jR +jR +kW +pS +pS +pS +qa +jR +kW +pS +pS +pS +qa +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(230,1,1) = {" +ae +ap +al +al +al +al +al +al +al +al +ap +aV +bc +bp +bF +bJ +bN +ca +bo +bo +cC +cH +cS +cT +ad +ad +ad +ad +ad +ad +df +dg +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +lq +lq +qb +pV +kX +lq +lq +lq +qb +jR +jR +jR +qs +jR +qd +jR +qH +lq +lq +lq +qH +jR +qd +jR +qs +jR +jR +jR +kX +lq +lq +lq +qb +pV +kX +lq +lq +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(231,1,1) = {" +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +cT +cY +cY +cY +cY +cY +cY +cT +cT +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +pT +pT +pT +qb +pV +kX +pT +pT +pT +qb +qs +qs +qs +qs +qs +qs +jR +qH +jR +pT +jR +qH +jR +qs +qs +qs +qs +qs +qs +kX +pT +pT +pT +qb +pV +kX +pT +pT +pT +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(232,1,1) = {" +ae +aq +aq +aq +aq +aq +aq +aq +aq +aq +aq +aV +bd +bq +bq +bq +bO +cb +cn +cn +cn +cI +cS +cU +cZ +cZ +cZ +cZ +cZ +cZ +cU +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +pT +lq +qb +pV +kX +lq +pT +lq +qb +jR +jR +jR +qs +jR +jR +jR +qH +lq +lq +lq +qH +jR +jR +jR +qs +jR +jR +jR +kX +lq +pT +lq +qb +pV +kX +lq +pT +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(233,1,1) = {" +ae +aq +aA +aq +aq +aq +aq +aq +aq +aA +aq +aV +bd +bq +bG +br +bP +cc +br +cx +cn +cI +cS +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kY +pU +pU +pU +qc +jR +kY +pU +pU +pU +qc +jR +jR +jR +qs +jR +jR +jR +qH +qH +qH +qH +qH +jR +jR +jR +qs +jR +jR +jR +kY +pU +pU +pU +qc +jR +kY +pU +pU +pU +qc +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(234,1,1) = {" +ae +aq +aq +aq +aq +aA +aA +aq +aq +aq +aq +aV +be +br +bG +br +bP +cc +co +cx +br +cJ +cS +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +pV +pV +pV +jR +jR +jR +pV +pV +pV +jR +jR +jR +jR +jR +jR +jR +jR +jR +qH +qH +qH +jR +jR +jR +jR +jR +jR +jR +jR +jR +pV +pV +pV +jR +jR +jR +pV +pV +pV +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(235,1,1) = {" +ae +aq +aA +aq +aq +aq +aq +aq +aq +aA +aq +aV +bf +bs +bG +br +bP +cc +br +cx +cp +cK +cS +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kW +pS +pS +pS +qa +jR +kW +pS +pS +pS +qa +jR +qH +qH +qH +qH +qH +jR +qH +qH +qH +qH +qH +jR +qH +qH +qH +qH +qH +jR +kW +pS +pS +pS +qa +jR +kW +pS +pS +pS +qa +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(236,1,1) = {" +ae +aq +aq +aq +aq +aq +aq +aq +aq +aq +aq +aV +bf +bs +bs +bs +bQ +cd +cp +cp +cp +cK +cS +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +pT +lq +qb +qd +kX +lq +pT +lq +qb +qH +qH +lq +jR +lq +qH +qH +qH +pT +rd +pT +qH +qH +qH +lq +jR +lq +qH +qH +kX +lq +pT +lq +qb +qd +kX +lq +pT +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(237,1,1) = {" +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +pT +pT +pT +qb +qd +kX +pT +pT +pT +qb +qH +qH +lq +pT +lq +qH +qH +qH +rd +rg +rd +qH +qH +qH +lq +pT +lq +qH +qH +kX +pT +pT +pT +qb +qd +kX +pT +pT +pT +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(238,1,1) = {" +ae +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +aV +bg +bg +bg +bg +bg +bg +bg +cD +iu +cL +cS +cV +cV +cV +dc +dc +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +pT +lq +qb +qd +kX +lq +pT +lq +qb +qH +qH +lq +jR +lq +qH +qH +qH +pT +rd +pT +qH +qH +qH +lq +jR +lq +qH +qH +kX +lq +pT +lq +qb +qd +kX +lq +pT +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(239,1,1) = {" +ae +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +aV +bg +bt +bg +bg +bR +bg +bg +cD +iu +cL +cS +cV +cV +cV +dd +dc +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kY +pU +pU +pU +qc +jR +kY +pU +pU +pU +qc +jR +qH +qH +qH +qH +qH +jR +qH +qH +qH +qH +qH +jR +qH +qH +qH +qH +qH +jR +kY +pU +pU +pU +qc +jR +kY +pU +pU +pU +qc +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(240,1,1) = {" +ae +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +aV +bg +bg +bg +bg +bg +bg +bg +cD +iu +cL +cS +cV +cV +cV +dc +dc +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +pV +pV +pV +jR +jR +jR +pV +pV +pV +jR +jR +jR +jR +jR +jR +jR +jR +jR +qH +qH +qH +jR +jR +jR +jR +jR +jR +jR +jR +jR +pV +pV +pV +jR +jR +jR +pV +pV +pV +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(241,1,1) = {" +ae +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +aV +bg +bu +bg +bg +bg +ce +bg +cD +iu +cL +cS +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kW +pS +pS +pS +qa +jR +kW +pS +pS +pS +qa +jR +kW +pS +pS +pS +qa +jR +qH +qH +qH +qH +qH +jR +kW +pS +pS +pS +qa +jR +kW +pS +pS +pS +qa +jR +kW +pS +pS +pS +qa +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(242,1,1) = {" +ae +ar +ar +ar +ar +ar +ar +ar +ar +ar +ar +aV +bg +bg +bg +bg +bg +bg +bg +cD +iu +cL +cS +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +pT +lq +qb +pV +kX +lq +pT +lq +qb +pV +kX +lq +pT +lq +qb +jR +qH +lq +lq +lq +qH +jR +kX +qH +pT +qH +qb +pV +kX +lq +pT +lq +qb +pV +kX +lq +pT +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(243,1,1) = {" +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +pT +pT +pT +qb +pV +kX +pT +pT +pT +qb +pV +kX +pT +pT +pT +qb +jR +qH +jR +pT +jR +qH +jR +kX +pT +pT +pT +qb +pV +kX +pT +pT +pT +qb +pV +kX +pT +pT +pT +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(244,1,1) = {" +ae +as +as +as +as +as +as +as +as +as +as +aV +bh +bv +bv +bv +bS +cf +cq +cq +cq +cM +cS +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +lq +lq +qb +pV +kX +lq +lq +lq +qb +pV +kX +lq +pT +lq +qb +jR +qH +lq +lq +lq +qH +jR +kX +qH +pT +qH +qb +pV +kX +lq +lq +lq +qb +pV +kX +lq +lq +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(245,1,1) = {" +ae +as +aB +as +as +as +as +as +as +aB +as +aV +bi +bw +bw +bw +bT +cg +bw +bw +bw +cN +cS +cV +cV +cV +cV +cV +cV +cV +cV +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kY +pU +pU +pU +qc +jR +kY +pU +pU +pU +qc +jR +kY +pU +pU +pU +qc +jR +qH +qH +qH +qH +qH +jR +kY +pU +pU +pU +qc +jR +kY +pU +pU +pU +qc +jR +kY +pU +pU +pU +qc +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(246,1,1) = {" +ae +as +as +as +aB +as +as +aB +as +as +as +aV +bi +bw +bw +bw +bT +cg +bw +bw +bw +cN +cS +cU +da +da +da +da +da +da +cU +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +pV +pV +pV +jR +jR +jR +pV +pV +pV +jR +jR +jR +qQ +qQ +qQ +jR +jR +jR +jR +jR +jR +jR +jR +jR +qQ +qQ +qQ +jR +jR +jR +pV +pV +pV +jR +jR +jR +pV +pV +pV +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(247,1,1) = {" +ae +as +aB +as +as +as +as +as +as +aB +as +aV +bi +bw +bw +bw +bT +cg +bw +bw +bw +cN +cS +cT +cY +cY +cY +cY +cY +cY +cT +cT +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kW +pS +pS +pS +pS +pS +pS +pS +pS +pS +qa +qI +qH +qH +qH +qH +qH +jR +qH +qH +qH +qH +qH +jR +qH +qH +qH +qH +qH +qI +kW +pS +pS +pS +pS +pS +pS +pS +pS +pS +qa +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(248,1,1) = {" +ae +as +as +as +as +as +as +as +as +as +as +aV +bj +bx +bx +bx +bU +ch +cr +cr +cr +cO +cS +cT +ad +ad +ad +ad +ad +ad +df +dh +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +lq +lq +lq +lq +lq +lq +lq +lq +qb +jR +qH +pT +pT +pT +qH +qH +qH +qH +qH +qH +qH +qH +qH +pT +pT +pT +qH +jR +kX +lq +lq +lq +lq +lq +lq +lq +lq +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(249,1,1) = {" +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +ak +ak +ak +ak +ak +ak +ak +ak +ak +ak +ad +cT +ad +ad +ad +ad +ad +ad +df +dh +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +pW +lq +pW +lq +pW +lq +pW +lq +qb +jR +qH +pT +qH +qH +qH +qH +qH +qH +rd +qH +qH +qH +qH +qH +qH +pT +qH +jR +kX +lq +pW +lq +pW +lq +pW +lq +pW +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(250,1,1) = {" +ae +at +aC +aC +aC +aC +aJ +aJ +aJ +aJ +aS +aV +bk +by +by +by +bV +ci +cs +cs +cs +cP +cS +cT +ad +ad +ad +ad +ad +ad +df +dh +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +pW +lq +pW +lq +pW +lq +pW +lq +qb +jR +qH +pT +qH +qH +qH +qH +qH +rd +rh +rd +qH +qH +qH +qH +qH +pT +qH +jR +kX +lq +pW +lq +pW +lq +pW +lq +pW +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(251,1,1) = {" +ae +au +aD +aD +aD +aD +aD +aD +aD +aD +aT +aV +bl +bz +bH +bz +bW +cj +bz +cy +bz +cQ +cS +cT +ad +ad +ad +ad +ad +ad +df +dh +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +pW +lq +pW +lq +pW +lq +pW +lq +qb +jR +qH +pT +qH +qH +qH +qH +qH +qH +rd +qH +qH +qH +qH +qH +qH +pT +qH +jR +kX +lq +pW +lq +pW +lq +pW +lq +pW +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(252,1,1) = {" +ae +au +aD +aD +aD +aD +aD +aD +aD +aD +aT +aV +bl +bz +bH +bz +bW +cj +bz +cy +bz +cQ +cS +cT +ad +ad +ad +ad +ad +ad +df +dh +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kX +lq +lq +lq +lq +lq +lq +lq +lq +lq +qb +jR +qH +qR +pT +pT +qH +qH +qH +qH +qH +qH +qH +qH +qH +pT +pT +pT +qH +jR +kX +lq +lq +lq +lq +lq +lq +lq +lq +lq +qb +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(253,1,1) = {" +ae +au +aD +aD +aD +aD +aD +aD +aD +aD +aT +aV +bl +bz +bH +bz +bW +cj +bz +cy +bz +cQ +cS +cT +cX +cX +cX +cX +cX +cX +cT +cT +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +kY +pU +pU +pU +pU +pU +pU +pU +pU +pU +qc +qI +qH +qH +qH +qH +qH +jR +qH +qH +qH +qH +qH +jR +qH +qH +qH +qH +qH +qI +kY +pU +pU +pU +pU +pU +pU +pU +pU +pU +qc +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(254,1,1) = {" +ae +av +aE +aE +aE +aE +aK +aK +aK +aK +aU +aV +bm +bA +bA +bA +bX +ck +ct +ct +ct +cR +cS +cT +db +db +db +db +db +db +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +jR +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +"} +(255,1,1) = {" +ad +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +ad +aw +aw +aw +aw +aw +aw +aw +aw +aw +aw +ad +cT +cT +cT +cT +cT +cT +cT +cT +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab "} - From c771988284982b12aea8d10378a6b4dde7abbf81 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 23 Apr 2016 13:47:05 -0500 Subject: [PATCH 092/228] Gatling Autoclick --- code/__HELPERS/unsorted.dm | 14 ++++++-- code/_onclick/autoclick.dm | 32 +++++++++++++++++++ code/_onclick/click.dm | 17 +++++++--- code/modules/client/client procs.dm | 1 + .../guns/projectile/rechargable_magazine.dm | 5 +-- tgstation.dme | 1 + 6 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 code/_onclick/autoclick.dm diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index fdc76cb6818..ce70339a466 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -949,8 +949,7 @@ var/list/WALLITEMS_INVERSE = list( else return "white" - -/proc/screen_loc2turf(scr_loc, turf/origin) +/proc/params2turf(scr_loc, turf/origin) var/tX = splittext(scr_loc, ",") var/tY = splittext(tX[2], ":") var/tZ = origin.z @@ -961,6 +960,17 @@ var/list/WALLITEMS_INVERSE = list( tY = max(1, min(world.maxy, origin.y + (text2num(tY) - (world.view + 1)))) return locate(tX, tY, tZ) +/proc/screen_loc2turf(text, turf/origin) + var/tZ = splittext(text, ",") + var/tX = splittext(tZ[1], "-") + var/tY = text2num(tX[2]) + tX = splittext(tZ[2], "-") + tX = text2num(tX[2]) + tZ = origin.z + tX = max(1, min(origin.x + 7 - tX, world.maxx)) + tY = max(1, min(origin.y + 7 - tY, world.maxy)) + return locate(tX, tY, tZ) + /proc/IsValidSrc(A) if(istype(A, /datum)) var/datum/B = A diff --git a/code/_onclick/autoclick.dm b/code/_onclick/autoclick.dm new file mode 100644 index 00000000000..6413d6642e2 --- /dev/null +++ b/code/_onclick/autoclick.dm @@ -0,0 +1,32 @@ +/client + var/atom/selected_target + +/client/MouseDown(object, location, control, params) + var/delay = mob.CanMobAutoclick(object, location, params) + if(delay) + selected_target = object + while(selected_target) + Click(selected_target, location, control, params) + sleep(delay) + +/client/MouseUp(object, location, control, params) + selected_target = null + +/client/MouseDrag(src_object,over_object,src_location,over_location,src_control,over_control,params) + if(selected_target) + selected_target = over_object + +/mob/proc/CanMobAutoclick(object, location, params) + +/mob/living/CanMobAutoclick(object, location, params) + var/obj/item/h = get_active_hand() + if(h) + . = h.CanItemAutoclick(object, location, params) + +/obj/item/proc/CanItemAutoclick(object, location, params) + +/obj/item/weapon/gun + var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds + +/obj/item/weapon/gun/CanItemAutoclick(object, location, params) + . = automatic \ No newline at end of file diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 0231e7b0bdd..547a9f3ee83 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -323,19 +323,28 @@ dir = WEST /obj/screen/click_catcher - icon = 'icons/mob/screen_full.dmi' - icon_state = "passage0" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "click_catcher" plane = CLICKCATCHER_PLANE mouse_opacity = 2 screen_loc = "CENTER-7,CENTER-7" +/obj/screen/click_catcher/proc/MakeGreed() + var/list/L = list() + for(var/i = 0, i<15, i++) + for(var/j = 0, j<15, j++) + var/obj/screen/click_catcher/CC = new() + CC.screen_loc = "NORTH-[i],EAST-[j]" + L.Add(CC) + return L + /obj/screen/click_catcher/Click(location, control, params) var/list/modifiers = params2list(params) if(modifiers["middle"] && istype(usr, /mob/living/carbon)) var/mob/living/carbon/C = usr C.swap_hand() else - var/turf/T = screen_loc2turf(modifiers["screen-loc"], get_turf(usr)) + var/turf/T = screen_loc2turf(screen_loc, get_turf(usr)) if(T) T.Click(location, control, params) - return 1 + return 1 \ No newline at end of file diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 6c4d4bb2fce..6f5e93ab9b2 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -193,6 +193,7 @@ var/next_external_rsc = 0 if(!void) void = new() + void = void.MakeGreed() screen += void diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index b8c047ef12a..10b07fb7a8c 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -151,7 +151,8 @@ slot_flags = null w_class = 5 materials = list() - burst_size = 5 + burst_size = 3 + automatic = 1 fire_delay = 1 weapon_weight = WEAPON_HEAVY fire_sound = 'sound/weapons/Laser.ogg' @@ -189,5 +190,5 @@ click_cooldown_override = 1 /obj/item/projectile/beam/weak - damage = 10 + damage = 7 armour_penetration = 50 diff --git a/tgstation.dme b/tgstation.dme index a2a4a626d32..be56d6608f7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -87,6 +87,7 @@ #include "code\_onclick\_defines.dm" #include "code\_onclick\adjacent.dm" #include "code\_onclick\ai.dm" +#include "code\_onclick\autoclick.dm" #include "code\_onclick\click.dm" #include "code\_onclick\cyborg.dm" #include "code\_onclick\drag_drop.dm" From ad4782ac413df202db3a528bf44d1b5127617273 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 23 Apr 2016 13:55:03 -0500 Subject: [PATCH 093/228] Tesla Revolver --- code/modules/projectiles/guns/energy/stun.dm | 6 ++---- code/modules/research/designs/weapon_designs.dm | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index b1b25293a3b..8342edc0ce2 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -7,7 +7,7 @@ ammo_x_offset = 3 /obj/item/weapon/gun/energy/shock_revolver - name = "shock revolver" + name = "tesla revolver" desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." icon_state = "stunrevolver" item_state = "gun" @@ -38,9 +38,7 @@ /obj/item/projectile/shock_revolver/on_hit(atom/target) . = ..() if(isliving(target)) - for(var/mob/living/carbon/human/M in view(3, src)) - target.Beam(M,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5) - M.electrocute_act(15, "[name]", safety=1) + tesla_zap(src, 3, 10000) qdel(chain) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index f6ae7a529b6..494edb5f74b 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -23,7 +23,7 @@ category = list("Firing Pins") /datum/design/stunrevolver - name = "Shock Revolver" + name = "Tesla Revolver" desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." id = "stunrevolver" req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 5) From 25875cda18773e6bf87530e0006c0a8118f8eb34 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 23 Apr 2016 14:09:45 -0500 Subject: [PATCH 094/228] Removes commented out recipes --- .../research/designs/weapon_designs.dm | 45 +------------------ 1 file changed, 1 insertion(+), 44 deletions(-) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 494edb5f74b..254c87a22ca 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -163,17 +163,7 @@ reliability = 79 build_path = /obj/item/weapon/grenade/chem_grenade/adv_release category = list("Weapons") -/* -/datum/design/smg - name = "NanoTrasen Saber SMG" - desc = "A prototype advancment over the WT-550 auto rifle made using lightweight materials on a traditional frame, designed to fire standard 9mm rounds." - id = "smg" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 8000, MAT_SILVER = 2000, MAT_DIAMOND = 1000) - build_path = /obj/item/weapon/gun/projectile/automatic/proto - category = list("Weapons") -*/ + /datum/design/xray name = "Xray Laser Gun" desc = "Not quite as menacing as it sounds" @@ -257,39 +247,6 @@ materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_URANIUM = 2000) build_path = /obj/item/ammo_box/magazine/wt550m9/wttx -//SABR Mags -/* -/datum/design/mag_smg - name = "SABR SMG Magazine (9mm)" - desc = "A 30-round magazine for the prototype submachine gun." - id = "mag_smg" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000) - build_path = /obj/item/ammo_box/magazine/smgm9mm - category = list("Ammo") - -/datum/design/mag_smg/ap_mag - name = "SABR SMG Armour Piercing Magazine (9mmAP)" - desc = "A 30-round armour piercing magazine for the prototype submachine gun. Deals slightly less damage by bypasses most armour" - id = "mag_smg_ap" - materials = list(MAT_METAL = 3000, MAT_SILVER = 100) - build_path = /obj/item/ammo_box/magazine/smgm9mm/ap - -/datum/design/mag_smg/incin_mag - name = "SABR SMG Incendiary Magazine (9mmIC)" - desc = "A 30-round incindiary round magazine for the prototype submachine gun. Deals significanlty less damage but sets the target on fire" - id = "mag_smg_ic" - materials = list(MAT_METAL = 3000, MAT_SILVER = 100, MAT_GLASS = 400) - build_path = /obj/item/ammo_box/magazine/smgm9mm/fire - -/datum/design/mag_smg/incin_tox - name = "SABR SMG Urnaium Magazine (9mmTX)" - desc = "A 30-round urnaium tipped round magazine for the prototype submachine gun. Deals toxin damage, but less overall damage." - id = "mag_smg_tx" - materials = list(MAT_METAL = 3000, MAT_GLASS = 200, MAT_URANIUM = 1000) - build_path = /obj/item/ammo_box/magazine/smgm9mm/toxin -*/ /datum/design/stunshell name = "Stun Shell" desc = "A stunning shell for a shotgun." From 3dc15117250c8d8506dec3e19cd73b22a55eb228 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 20:13:54 +0100 Subject: [PATCH 095/228] Merge "
      "s into single call to the AI --- code/modules/events/communications_blackout.dm | 6 ++---- code/modules/events/processor_overload.dm | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index cb55bbbd248..51b4a8096dd 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -15,9 +15,7 @@ "#4nd%;f4y6,>£%-BZZZZZZZT") for(var/mob/living/silicon/ai/A in player_list) //AIs are always aware of communication blackouts. - A << "
      " - A << "[alert]" - A << "
      " + A << "
      [alert]
      " if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts. priority_announce(alert) @@ -25,4 +23,4 @@ /datum/round_event/communications_blackout/start() for(var/obj/machinery/telecomms/T in telecomms_list) - T.emp_act(1) \ No newline at end of file + T.emp_act(1) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index bae9f03d574..782e99b43b7 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -16,9 +16,7 @@ for(var/mob/living/silicon/ai/A in player_list) //AIs are always aware of processor overload - A << "
      " - A << "[alert]" - A << "
      " + A << "
      [alert]
      " // Announce most of the time, but leave a little gap so people don't know // whether it's, say, a tesla zapping tcomms, or some selective From 77f7995b45c9cebc2352910b05a8c103b5bb9caa Mon Sep 17 00:00:00 2001 From: Robustin Date: Sat, 23 Apr 2016 15:23:00 -0400 Subject: [PATCH 096/228] Update twohanded.dm --- code/game/objects/items/weapons/twohanded.dm | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index ae7c0d3cd5c..1f14b247995 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -118,17 +118,6 @@ /obj/item/weapon/twohanded/offhand/wield() qdel(src) -/obj/item/weapon/twohanded/offhand/hit_reaction()//if the actual twohanded weapon is a shield, we count as a shield too! - var/mob/user = loc - if(!istype(user)) - return 0 - var/obj/item/I = user.get_active_hand() - if(I == src) - I = user.get_inactive_hand() - if(!I) - return 0 - return I.hit_reaction() - ///////////Two hand required objects/////////////// //This is for objects that require two hands to even pick up /obj/item/weapon/twohanded/required/ From ef3b79022971c299fc33389e50589a75248058d9 Mon Sep 17 00:00:00 2001 From: Akke Date: Sat, 23 Apr 2016 20:55:44 +0100 Subject: [PATCH 097/228] typos --- code/modules/reagents/chemistry/reagents/medicine_reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 7fb5e5ea1ae..2bed2f7f973 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -92,7 +92,7 @@ /datum/reagent/medicine/synaphydramine name = "Diphen-Synaptizine" id = "synaphydramine" - description = "Reducing drowsiness and hallucinations, purges Histamine from body." + description = "Reduces drowsiness, hallucinations, and Histamine from body." color = "#EC536D" // rgb: 236, 83, 109 /datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/M) From 6d437be6a5e2b57408937fb6f8f4973d3b81053d Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 23 Apr 2016 15:35:43 -0500 Subject: [PATCH 098/228] Improvements --- code/_onclick/click.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 547a9f3ee83..26838de68c3 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -330,13 +330,12 @@ screen_loc = "CENTER-7,CENTER-7" /obj/screen/click_catcher/proc/MakeGreed() - var/list/L = list() + . = list() for(var/i = 0, i<15, i++) for(var/j = 0, j<15, j++) var/obj/screen/click_catcher/CC = new() CC.screen_loc = "NORTH-[i],EAST-[j]" - L.Add(CC) - return L + . += CC /obj/screen/click_catcher/Click(location, control, params) var/list/modifiers = params2list(params) @@ -347,4 +346,4 @@ var/turf/T = screen_loc2turf(screen_loc, get_turf(usr)) if(T) T.Click(location, control, params) - return 1 \ No newline at end of file + . = 1 \ No newline at end of file From c925a6af95e4cfad92f904057725330ba9a2f48d Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 23 Apr 2016 20:48:44 +0000 Subject: [PATCH 099/228] Automatic changelog generation for PR #16974 --- html/changelogs/AutoChangeLog-pr-16974.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-16974.yml diff --git a/html/changelogs/AutoChangeLog-pr-16974.yml b/html/changelogs/AutoChangeLog-pr-16974.yml new file mode 100644 index 00000000000..26c9011ff0e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-16974.yml @@ -0,0 +1,8 @@ +author: Kor Razharas +delete-after: True +changes: + - rscadd: "Adds support for autoclicking." + - rscadd: "The Shock Revolver has been added to RnD." + - rscadd: "The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick to fire as you hold down the mouse." + - rscadd: "The Research Director now starts with a box of firing pins." + - rscadd: "The SABR and Stun Revolver recipes have been removed from RnD" From 888344226631218c5e467fee51db314a225ce187 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sat, 23 Apr 2016 15:05:29 -0700 Subject: [PATCH 100/228] Update toxin_reagents.dm --- code/modules/reagents/chemistry/reagents/toxin_reagents.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index f3ea013dd23..1cd1a222090 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -696,6 +696,8 @@ color = "#8E18A9" // rgb: 142, 24, 169 toxpwr = 2 acidpwr = 42.0 + /datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/M) - M.adjustFireLoss(current_cycle/10) // MY INSIDES ARE MELTING HELP - ..() + M.adjustFireLoss(current_cycle/10, 0) // I rode a tank, held a general's rank + . = 1 // When the blitzkrieg raged and the bodies stank + ..() // Pleased to meet you, hope you guess my name From b88d7d313ba13e4dd00382c53cfe69c969b87b31 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 20:33:58 -0400 Subject: [PATCH 101/228] Blobbernaut tweaks --- code/_onclick/hud/blob_overmind.dm | 4 ++-- code/game/gamemodes/blob/blobs/blob_mobs.dm | 7 +++---- code/game/gamemodes/blob/powers.dm | 7 ++++--- tgstation.dme | 1 + 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 6357d556d40..1e507629436 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -50,8 +50,8 @@ /obj/screen/blob/Blobbernaut icon_state = "ui_blobbernaut" - name = "Produce Blobbernaut (30)" - desc = "Produces a strong, smart blobbernaut from a factory blob for 30 points.
      The factory blob used will become fragile and briefly unable to produce spores." + name = "Produce Blobbernaut (40)" + desc = "Produces a strong, smart blobbernaut from a factory blob for 40 points.
      The factory blob used will become fragile and briefly unable to produce spores." /obj/screen/blob/Blobbernaut/Click() if(isovermind(usr)) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index b364534f729..4da251f5bcf 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -193,9 +193,9 @@ icon_state = "blobbernaut" icon_living = "blobbernaut" icon_dead = "blobbernaut_dead" - health = 200 - maxHealth = 200 - damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + health = 160 + maxHealth = 160 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) next_move_modifier = 1.5 //slow-ass attack speed, 3 times higher than how fast the blob can attack melee_damage_lower = 20 melee_damage_upper = 20 @@ -205,7 +205,6 @@ verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" - force_threshold = 10 pressure_resistance = 40 mob_size = MOB_SIZE_LARGE see_invisible = SEE_INVISIBLE_MINIMUM diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 85434de0bc8..a8df3818ff0 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -137,7 +137,7 @@ /mob/camera/blob/verb/create_blobbernaut() set category = "Blob" - set name = "Create Blobbernaut (30)" + set name = "Create Blobbernaut (40)" set desc = "Create a powerful blobbernaut which is mildly smart and will attack enemies." var/turf/T = get_turf(src) var/obj/effect/blob/factory/B = locate(/obj/effect/blob/factory) in T @@ -150,7 +150,7 @@ if(B.health < B.maxhealth * 0.5) src << "This factory blob is too damaged to sustain a blobbernaut." return - if(!can_buy(30)) + if(!can_buy(40)) return B.maxhealth = initial(B.maxhealth) * 0.25 //factories that produced a blobbernaut have much lower health B.check_health() @@ -163,7 +163,8 @@ blobber.overmind = src blobber.update_icons() blobber.notransform = 1 //stop the naut from moving around - blob_mobs.Add(blobber) + blobber.adjustHealth(blobber.maxHealth * 0.5) + blob_mobs += blobber var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as a [blob_reagent_datum.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly var/client/C = null if(candidates.len) //if we got at least one candidate, they're a blobbernaut now. diff --git a/tgstation.dme b/tgstation.dme index a2a4a626d32..50adc433f20 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -103,6 +103,7 @@ #include "code\_onclick\hud\alien.dm" #include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\blob_overmind.dm" +#include "code\_onclick\hud\blobbernauthud.dm" #include "code\_onclick\hud\drones.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\ghost.dm" From d93d6160cd7e1ecc0ff9269e726bc499aacb8fa3 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 23 Apr 2016 19:54:30 -0500 Subject: [PATCH 102/228] Gatling Buff --- .../modules/projectiles/guns/projectile/rechargable_magazine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index 10b07fb7a8c..fe800092af6 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -190,5 +190,5 @@ click_cooldown_override = 1 /obj/item/projectile/beam/weak - damage = 7 + damage = 15 armour_penetration = 50 From 0a3fd516939dcd9e75d933749d6df77c42e254d0 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:01:35 -0400 Subject: [PATCH 103/228] regen --- code/game/gamemodes/blob/blobs/blob_mobs.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 4da251f5bcf..1f5a893bbde 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -37,7 +37,7 @@ H.color = overmind.blob_reagent_datum.complementary_color else H.color = "#000000" - adjustHealth(-maxHealth*0.025) + adjustHealth(-maxHealth*0.0125) /mob/living/simple_animal/hostile/blob/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() @@ -193,9 +193,9 @@ icon_state = "blobbernaut" icon_living = "blobbernaut" icon_dead = "blobbernaut_dead" - health = 160 - maxHealth = 160 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + health = 200 + maxHealth = 200 + damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) next_move_modifier = 1.5 //slow-ass attack speed, 3 times higher than how fast the blob can attack melee_damage_lower = 20 melee_damage_upper = 20 @@ -205,6 +205,7 @@ verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" + force_threshold = 10 pressure_resistance = 40 mob_size = MOB_SIZE_LARGE see_invisible = SEE_INVISIBLE_MINIMUM From 368329f36b2856ba4f8e338eefd427c2f947a572 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:14:02 -0400 Subject: [PATCH 104/228] less spores --- code/game/gamemodes/blob/blobs/factory.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index a742c20423a..56ed5167f84 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -26,6 +26,8 @@ /obj/effect/blob/factory/Be_Pulsed() . = ..() + if(naut) + return if(spores.len >= max_spores) return if(spore_delay > world.time) From 1c1e05651523ff3429065ad6a41108fde31ba43f Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:45:20 -0400 Subject: [PATCH 105/228] info correction --- code/_onclick/hud/blob_overmind.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 1e507629436..e46b1bebf54 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -51,7 +51,7 @@ /obj/screen/blob/Blobbernaut icon_state = "ui_blobbernaut" name = "Produce Blobbernaut (40)" - desc = "Produces a strong, smart blobbernaut from a factory blob for 40 points.
      The factory blob used will become fragile and briefly unable to produce spores." + desc = "Produces a strong, smart blobbernaut from a factory blob for 40 points.
      The factory blob used will become fragile and unable to produce spores." /obj/screen/blob/Blobbernaut/Click() if(isovermind(usr)) From 9fdfd4a49ed53ede888395bc5af75be71bf9148a Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:53:11 -0400 Subject: [PATCH 106/228] Hitting a closet with an item will try to open it --- code/game/objects/structures/crates_lockers/closets.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index dc219c46a74..afef3198008 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -252,7 +252,8 @@ "You hear welding.") update_icon() else - togglelock(user) + if(!toggle(user) + togglelock(user) /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) if(!istype(O) || O.anchored || istype(O, /obj/screen)) From 6a3f1c843aa194872eb2000f40d034f41e072491 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:55:15 -0400 Subject: [PATCH 107/228] frankly, too fast --- code/game/objects/structures/crates_lockers/closets.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index afef3198008..ad6ccd8ad57 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -252,7 +252,7 @@ "You hear welding.") update_icon() else - if(!toggle(user) + if(!toggle(user)) togglelock(user) /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) From 42a7ef09d330bd968f07fd3cd3842520e353deed Mon Sep 17 00:00:00 2001 From: c0 Date: Sun, 24 Apr 2016 06:07:24 +0300 Subject: [PATCH 108/228] Removes fake insulated gloves completely --- _maps/map_files/BirdStation/BirdStation.dmm | 2 +- code/modules/clothing/gloves/color.dm | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 9d5ec049990..a0912232dcc 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -2504,7 +2504,7 @@ "aWj" = (/obj/item/weapon/circuitboard/security,/turf/open/floor/plating,/area/maintenance/asmaint2) "aWk" = (/obj/structure/window/reinforced,/obj/structure/flora/kirbyplants{icon_state = "plant-17"; layer = 4.1},/turf/open/floor/plasteel/whitebot,/area/maintenance/fore{name = "Security Maintenance"}) "aWl" = (/obj/machinery/vending/assist,/turf/open/floor/plasteel/warning{icon_state = "warning"; dir = 10},/area/maintenance/fore{name = "Security Maintenance"}) -"aWm" = (/obj/structure/table,/obj/item/clothing/gloves/color/yellow/fake,/obj/item/clothing/gloves/color/yellow/fake,/obj/item/clothing/gloves/color/yellow/fake,/turf/open/floor/plasteel/warning,/area/maintenance/fore{name = "Security Maintenance"}) +"aWm" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/clothing/gloves/color/fyellow,/obj/item/clothing/gloves/color/fyellow,/turf/open/floor/plasteel/warning,/area/maintenance/fore{name = "Security Maintenance"}) "aWn" = (/obj/machinery/power/apc{dir = 4; name = "Security Maintenance APC"; pixel_x = 24},/obj/structure/cable/cyan,/obj/machinery/atmospherics/pipe/simple/cyan/hidden,/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) "aWo" = (/obj/structure/table,/obj/item/weapon/cautery,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw{pixel_y = 9},/turf/open/floor/plasteel/white,/area/security/warden) "aWp" = (/obj/structure/bodycontainer/morgue,/obj/effect/landmark{name = "revenantspawn"},/turf/open/floor/plasteel/white,/area/security/warden) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index cb5c30d57f1..cf96d56348f 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -8,10 +8,6 @@ item_color="yellow" burn_state = FIRE_PROOF -/obj/item/clothing/gloves/color/yellow/fake - desc = "These gloves will protect the wearer from electric shock. They don't feel like rubber..." - siemens_coefficient = 1 - /obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap desc = "These gloves are cheap knockoffs of the coveted ones - no way this can end badly." name = "budget insulated gloves" From 543101879c9d58518b7985a279af7abb76b5a158 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 09:08:17 +0100 Subject: [PATCH 109/228] Actually makes the processor blow up --- code/modules/events/processor_overload.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index 782e99b43b7..0be0f058479 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -29,8 +29,9 @@ for(var/obj/machinery/telecomms/T in telecomms_list) if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T - // Wow, it overloaded so much that it EXPLODED!? if(prob(10)) - P.ex_act(2) + // Only a level 1 explosion actually damages the machine + // at all + P.ex_act(1) else P.emp_act(1) From fba1660506bec2927802010d4f4459f954a176c8 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 09:38:26 +0100 Subject: [PATCH 110/228] Refactors dog clothing Fixes #17068. :cl: coiax tweak: The dog clothing code has been moved to make it easier to maintain. /:cl: --- code/modules/clothing/clothing.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index d808eef5e0f..ee35c50da12 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -19,6 +19,15 @@ var/gang //Is this a gang outfit? var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? + // Not all corgi compatible clothing alters their vars + var/dog_valid = FALSE + // Used for changing name/desc of corgis when clothing is equipped + var/dog_name + var/dog_desc + var/dog_emote_see + var/dog_emote_hear + var/dog_speak + //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears name = "ears" From e4203c7ce91b855d3e656ca17548fa5073d25230 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 09:47:10 +0100 Subject: [PATCH 111/228] Dogs can wear certain items that are not clothing RIP. It's going to be a long PR. --- code/__DEFINES/clothing.dm | 4 ++++ code/game/objects/items.dm | 11 ++++++++++- code/modules/clothing/clothing.dm | 9 --------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index fabe22f95c4..ed0f79ea979 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -101,3 +101,7 @@ #define TINT_DARKENED 2 //Threshold of tint level to apply weld mask overlay #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully + +//flags for indicating suitability of items for corgi equipping +#define DOG_BACK 1 +#define DOG_HEAD 2 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f634e1eca8b..90f74c60133 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -119,6 +119,15 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s slot_drone_storage\ ) + // Not all corgi compatible clothing alters their vars + var/dog_valid = 0 + // Used for changing name/desc of corgis when clothing is equipped + var/dog_name + var/dog_desc + var/dog_emote_see + var/dog_emote_hear + var/dog_speak + /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) return 0 @@ -579,4 +588,4 @@ obj/item/proc/item_action_slot_check(slot, mob/user) return heat /obj/item/proc/is_sharp() - return sharpness \ No newline at end of file + return sharpness diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ee35c50da12..d808eef5e0f 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -19,15 +19,6 @@ var/gang //Is this a gang outfit? var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? - // Not all corgi compatible clothing alters their vars - var/dog_valid = FALSE - // Used for changing name/desc of corgis when clothing is equipped - var/dog_name - var/dog_desc - var/dog_emote_see - var/dog_emote_hear - var/dog_speak - //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears name = "ears" From 0fd1f3c7e4de5bbabe24de28225597b792d9ba52 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 13:18:43 +0100 Subject: [PATCH 112/228] Made /datum/dog_fashion --- code/datums/dog_fashion.dm | 168 ++++++++++++++++++ code/game/objects/items.dm | 11 +- code/game/objects/structures/bedsheet_bin.dm | 1 + code/modules/clothing/glasses/glasses.dm | 2 + code/modules/clothing/head/collectable.dm | 22 ++- code/modules/clothing/head/hardhat.dm | 9 +- code/modules/clothing/head/helmet.dm | 12 ++ code/modules/clothing/head/jobs.dm | 16 ++ code/modules/clothing/head/misc.dm | 15 +- code/modules/clothing/head/misc_special.dm | 9 +- code/modules/clothing/head/soft_caps.dm | 15 ++ code/modules/clothing/masks/gasmask.dm | 10 +- .../clothing/spacesuits/miscellaneous.dm | 4 +- code/modules/clothing/suits/wiz_robe.dm | 11 +- code/modules/clothing/under/ties.dm | 3 +- .../mob/living/simple_animal/friendly/dog.dm | 129 ++------------ code/modules/paperwork/paper.dm | 1 + tgstation.dme | 1 + 18 files changed, 306 insertions(+), 133 deletions(-) create mode 100644 code/datums/dog_fashion.dm diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm new file mode 100644 index 00000000000..617920a065f --- /dev/null +++ b/code/datums/dog_fashion.dm @@ -0,0 +1,168 @@ +/datum/dog_fashion + var/name + var/desc + var/emote_see + var/emote_hear + var/speak + var/speak_emote + + // This isn't applied to the dog, but stores the icon_state of the + // sprite that the associated item uses + var/icon_state + +/datum/dog_fashion/New(mob/M) + if(findtext(name, "[]")) + name = text(name, M.truename) + + if(findtext(desc, "[]")) + desc = text(desc, name) + +/datum/dog_fashion/apply(mob/living/simple_animal/pet/dog/D) + if(name) + D.name = name + if(desc) + D.desc = desc + if(emote_see) + D.emote_see = emote_see + if(emote_hear) + D.emote_hear = emote_hear + if(speak) + D.speak = speak + if(speak_emote) + D.speak_emote = speak_emote + +/datum/dog_fashion/head + +/datum/dog_fashion/body + +/datum/dog_fashion/head + +/datum/dog_fashion/head/helmet + name = "Sergeant []" + desc = "The ever-loyal, the ever-vigilant." + +/datum/dog_fashion/head/chef + name = "Sous chef []" + desc = "Your food will be taste-tested. All of it." + + +/datum/dog_fashion/head/captain + name = "Captain []" + desc = "Probably better than the last captain." + +/datum/dog_fashion/head/kitty + name = "Runtime" + emote_see = list("coughs up a furball", "stretches") + emote_hear = list("purrs") + speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") + desc = "It's a cute little kitty-cat! ... wait ... what the hell?" + +/datum/dog_fashion/head/rabbit + name = "Hoppy" + emote_see = list("twitches its nose", "hops around a bit") + desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" + +/datum/dog_fashion/head/beret + name = "Yann" + desc = "Mon dieu! C'est un chien!" + speak = list("le woof!", "le bark!", "JAPPE!!") + emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.") + + +/datum/dog_fashion/head/detective + name = "Detective []" + desc = "[] sees through your lies..." + emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.","takes a candycorn from the hat.") + + +/datum/dog_fashion/head/nurse + name = "Nurse []" + desc = "[] needs 100cc of beef jerky... STAT!" + +/datum/dog_fashion/head/pirate + name = "Pirate-title Pirate-name" + desc = "Yaarghh!! Thar' be a scurvy dog!" + emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!") + emote_hear = list("growls ferociously!", "snarls.") + speak = list("Arrrrgh!!","Grrrrrr!") + +/datum/dog_fashion/head/pirate/New(mob/M) + ..() + name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" + +/datum/dog_fashion/head/ushanka + name = "Communist-title []" + desc = "A follower of Karl Barx." + emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") + +/datum/dog_fashion/head/ushanka/New(mob/M) + ..() + name = "[pick("Comrade","Commissar","Glorious Leader")] [M.real_name]" + +/datum/dog_fashion/head/warden + name = "Officer []" + emote_see = list("drools.","looks for donuts.") + desc = "Stop right there criminal scum!" + +/datum/dog_fashion/head/blue_wizard + name = "Grandwizard []" + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") + +/datum/dog_fashion/head/red_wizard + name = "Pyromancer []" + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!") + +/datum/dog_fashion/head/cardborg + name = "Borgi" + speak = list("Ping!","Beep!","Woof!") + emote_see = list("goes rogue.", "sniffs out non-humans.") + desc = "Result of robotics budget cuts." + +/datum/dog_fashion/head/ghost + name = "\improper Ghost" + speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") + emote_see = list("stumbles around.", "shivers.") + emote_hear = list("howls!","groans.") + desc = "Spooky!" + icon_state = "sheet" + +/datum/dog_fashion/head/santa + name = "Santa's Corgi Helper" + emote_hear = list("barks Christmas songs.", "yaps merrily!") + emote_see = list("looks for presents.", "checks his list.") + desc = "He's very fond of milk and cookies." + +/datum/dog_fashion/head/cargo_tech + name = "Corgi Tech []" + desc = "The reason your yellow gloves have chew-marks." + +/datum/dog_fashion/head/reindeer + name = "[] the red-nosed Corgi" + emote_hear = list("lights the way!", "illuminates.", "yaps!") + desc = "He has a very shiny nose." + +/datum/dog_fashion/head/sombrero + name = "Segnor []" + desc = "You must respect Elder Dogname" + +/datum/dog_fashion/head/sombrero/New(mob/M) + ..() + desc = "You must respect Elder [M.truename]" + +/datum/dog_fashion/head/hop + name = "Lieutenant []" + desc = "Can actually be trusted to not run off on his own." + +/datum/dog_fashion/head/deathsquad + name = "Trooper []" + desc = "That's not red paint. That's real corgi blood." + +/datum/dog_fashion/head/clown + name = "[] the Clown" + desc = "Honkman's best friend." + speak = list("HONK!", "Honk!") + emote_see = list("plays tricks.", "slips.") + +/datum/dog_fashion/body/deathsquad + name = "Trooper []" + desc = "That's not red paint. That's real corgi blood." diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 90f74c60133..13fabfd807a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -119,14 +119,9 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s slot_drone_storage\ ) - // Not all corgi compatible clothing alters their vars - var/dog_valid = 0 - // Used for changing name/desc of corgis when clothing is equipped - var/dog_name - var/dog_desc - var/dog_emote_see - var/dog_emote_hear - var/dog_speak + // Needs to be in /obj/item because corgis can wear a lot of + // non-clothing items + var/datum/dog_fashion/dog_fashion /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index bc4201bcb9c..7587b19fe36 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -19,6 +19,7 @@ LINEN BINS item_color = "white" burn_state = FLAMMABLE + dog_fashion = /datum/dog_fashion/head/ghost /obj/item/weapon/bedsheet/attack(mob/living/M, mob/user) if(!attempt_initiate_surgery(src, M, user)) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index b9f54abd510..7e5b6331a5d 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -133,6 +133,8 @@ flash_protect = 1 tint = 1 + dog_fashion = /datum/dog_fashion/head + /obj/item/clothing/glasses/sunglasses/reagent name = "beer goggles" desc = "A pair of sunglasses outfitted with apparatus to scan reagents." diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 3ba86cf5ad4..54b704195e2 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -26,11 +26,15 @@ icon_state = "chef" item_state = "chef" + dog_fashion = /datum/dog_fashion/head/chef + /obj/item/clothing/head/collectable/paper name = "collectable paper hat" desc = "What looks like an ordinary paper hat is actually a rare and valuable collector's edition paper hat. Keep away from water, fire, and Librarians." icon_state = "paper" + dog_fashion = /datum/dog_fashion/head + /obj/item/clothing/head/collectable/tophat name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." @@ -43,16 +47,22 @@ icon_state = "captain" item_state = "caphat" + dog_fashion = /datum/dog_fashion/head/captain + /obj/item/clothing/head/collectable/police name = "collectable police officer's hat" desc = "A collectable police officer's Hat. This hat emphasizes that you are THE LAW." icon_state = "policehelm" + dog_fashion = /datum/dog_fashion/head/warden + /obj/item/clothing/head/collectable/beret name = "collectable beret" desc = "A collectable red beret. It smells faintly of garlic." icon_state = "beret" + dog_fashion = /datum/dog_fashion/head/beret + /obj/item/clothing/head/collectable/welding name = "collectable welding helmet" desc = "A collectable welding helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this helmet is done so at the owner's own risk!" @@ -78,29 +88,39 @@ icon_state = "pirate" item_state = "pirate" + dog_fashion = /datum/dog_fashion/head/pirate + /obj/item/clothing/head/collectable/kitty name = "collectable kitty ears" desc = "The fur feels... a bit too realistic." icon_state = "kitty" item_state = "kitty" + dog_fashion = /datum/dog_fashion/head/kitty + /obj/item/clothing/head/collectable/rabbitears name = "collectable rabbit ears" desc = "Not as lucky as the feet!" icon_state = "bunny" item_state = "bunny" + dog_fashion = /datum/dog_fashion/head/rabbit + /obj/item/clothing/head/collectable/wizard name = "collectable wizard's hat" desc = "NOTE: Any magical powers gained from wearing this hat are purely coincidental." icon_state = "wizard" + dog_fashion = /datum/dog_fashion/head/blue_wizard + /obj/item/clothing/head/collectable/hardhat name = "collectable hard hat" desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!" icon_state = "hardhat0_yellow" item_state = "hardhat0_yellow" + dog_fashion = /datum/dog_fashion/head + /obj/item/clothing/head/collectable/HoS name = "collectable HoS hat" desc = "Now you too can beat prisoners, set silly sentences, and arrest for no reason!" @@ -118,4 +138,4 @@ desc = "That's not real blood. That's red paint." //Reference to the actual description icon_state = "swat" item_state = "swat" - burn_state = FIRE_PROOF \ No newline at end of file + burn_state = FIRE_PROOF diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 1c0e4b04794..ab225656783 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -11,6 +11,8 @@ actions_types = list(/datum/action/item_action/toggle_helmet_light) burn_state = FIRE_PROOF + dog_fashion = /datum/dog_fashion/head + /obj/item/clothing/head/hardhat/attack_self(mob/user) if(!isturf(user.loc)) user << "You cannot turn the light on while in this [user.loc]!" //To prevent some lighting anomalities. @@ -50,11 +52,13 @@ icon_state = "hardhat0_orange" item_state = "hardhat0_orange" item_color = "orange" + dog_fashion = null /obj/item/clothing/head/hardhat/red icon_state = "hardhat0_red" item_state = "hardhat0_red" item_color = "red" + dog_fashion = null name = "firefighter helmet" flags = STOPSPRESSUREDMAGE heat_protection = HEAD @@ -71,16 +75,19 @@ max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_valid = DOG_HEAD /obj/item/clothing/head/hardhat/dblue icon_state = "hardhat0_dblue" item_state = "hardhat0_dblue" item_color = "dblue" + dog_fashion = null /obj/item/clothing/head/hardhat/atmos icon_state = "hardhat0_atmos" item_state = "hardhat0_atmos" item_color = "atmos" + dog_fashion = null name = "atmospheric technician's firefighting helmet" desc = "A firefighter's helmet, able to keep the user cool in any situation." flags = STOPSPRESSUREDMAGE | THICKMATERIAL @@ -88,4 +95,4 @@ heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT \ No newline at end of file + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 9ec57ccafd0..9a2da325ac4 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -14,6 +14,8 @@ burn_state = FIRE_PROOF flags_cover = HEADCOVERSEYES + dog_fashion = /datum/dog_fashion/head/helmet + /obj/item/clothing/head/helmet/New() ..() @@ -31,6 +33,7 @@ item_state = "helmetalt" armor = list(melee = 15, bullet = 40, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0) can_flashlight = 1 + dog_fashion = null /obj/item/clothing/head/helmet/riot name = "riot helmet" @@ -48,6 +51,7 @@ visor_flags_inv = HIDEMASK|HIDEFACE toggle_cooldown = 0 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + dog_fashion = null /obj/item/clothing/head/helmet/attack_self(mob/user) if(can_toggle && !user.incapacitated()) @@ -80,6 +84,7 @@ can_toggle = 1 toggle_cooldown = 20 active_sound = 'sound/items/WEEOO1.ogg' + dog_fashion = null /obj/item/clothing/head/helmet/justice/escape name = "alarm helmet" @@ -100,6 +105,7 @@ max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT flags = STOPSPRESSUREDMAGE strip_delay = 80 + dog_fashion = null /obj/item/clothing/head/helmet/swat/nanotrasen name = "\improper SWAT helmet" @@ -119,6 +125,7 @@ heat_protection = HEAD max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT strip_delay = 80 + dog_fashion = null /obj/item/clothing/head/helmet/roman name = "roman helmet" @@ -129,6 +136,7 @@ icon_state = "roman" item_state = "roman" strip_delay = 100 + dog_fashion = null /obj/item/clothing/head/helmet/roman/legionaire name = "roman legionaire helmet" @@ -143,6 +151,7 @@ item_state = "gladiator" flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR flags_cover = HEADCOVERSEYES + dog_fashion = null /obj/item/clothing/head/helmet/redtaghelm name = "red laser tag helmet" @@ -152,6 +161,7 @@ item_state = "redtaghelm" armor = list(melee = 15, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0) // Offer about the same protection as a hardhat. + dog_fashion = null /obj/item/clothing/head/helmet/bluetaghelm name = "blue laser tag helmet" @@ -161,6 +171,7 @@ item_state = "bluetaghelm" armor = list(melee = 15, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0) // Offer about the same protection as a hardhat. + dog_fashion = null /obj/item/clothing/head/helmet/knight name = "medieval helmet" @@ -172,6 +183,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH strip_delay = 80 + dog_fashion = null /obj/item/clothing/head/helmet/knight/blue icon_state = "knight_blue" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index dca4fd52164..79ac02bad92 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -9,6 +9,8 @@ strip_delay = 10 put_on_delay = 10 + dog_fashion = /datum/dog_fashion/head/chef + /obj/item/clothing/head/chefhat/suicide_act(mob/user) user.visible_message("[user] is donning [src]! It looks like they're trying to become a chef.") user.say("Bork Bork Bork!") @@ -28,12 +30,16 @@ armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 + dog_fashion = /datum/dog_fashion/head/captain + //Captain: This is no longer space-worthy /obj/item/clothing/head/caphat/parade name = "captain's parade cap" desc = "Worn only by Captains with an abundance of class." icon_state = "capcap" + dog_fashion = null + //Head of Personnel /obj/item/clothing/head/hopcap @@ -42,6 +48,8 @@ desc = "The symbol of true bureaucratic micromanagement." armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) + dog_fashion = /datum/dog_fashion/head/hop + //Chaplain /obj/item/clothing/head/nun_hood name = "nun hood" @@ -57,6 +65,8 @@ armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) var/candy_cooldown = 0 + dog_fashion = /datum/dog_fashion/head/detective + /obj/item/clothing/head/det_hat/AltClick() ..() if(ismob(loc)) @@ -76,6 +86,9 @@ desc = "A beret, a mime's favorite headwear." icon_state = "beret" + dog_fashion = /datum/dog_fashion/head/beret + + //Security /obj/item/clothing/head/HoS @@ -97,12 +110,15 @@ armor = list(melee = 30, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 + dog_fashion = /datum/dog_fashion/head/warden + /obj/item/clothing/head/beret/sec name = "security beret" desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection." icon_state = "beret_badge" armor = list(melee = 30, bullet = 25, laser = 25,energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 + dog_fashion = null /obj/item/clothing/head/beret/sec/navyhos name = "head of security's beret" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 83eed76aeee..8d58dba184c 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -20,6 +20,7 @@ desc = "It's an amish looking hat." icon_state = "tophat" item_state = "that" + dog_valid = DOG_HEAD /obj/item/clothing/head/canada name = "striped red tophat" @@ -55,6 +56,8 @@ desc = "It allows quick identification of trained medical personnel." icon_state = "nursehat" + dog_fashion = /datum/dog_fashion/head/nurse + /obj/item/clothing/head/syndicatefake name = "black space-helmet replica" icon_state = "syndicate-helm-black-red" @@ -99,6 +102,9 @@ desc = "Wearing these makes you look useless, and only good for your sex appeal." icon_state = "bunny" + dog_fashion = /datum/dog_fashion/head/rabbit + + /obj/item/clothing/head/flatcap name = "flat cap" desc = "A working man's cap." @@ -111,6 +117,8 @@ icon_state = "pirate" item_state = "pirate" + dog_fashion = /datum/dog_fashion/head/pirate + /obj/item/clothing/head/hgpiratecap name = "pirate hat" desc = "Yarr." @@ -186,12 +194,15 @@ desc = "You can practically taste the fiesta." flags_inv = HIDEHAIR + dog_fashion = /datum/dog_fashion/head/sombrero + /obj/item/clothing/head/sombrero/green name = "green sombrero" icon_state = "greensombrero" item_state = "greensombrero" desc = "As elegant as a dancing cactus." flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + dog_fashion = null /obj/item/clothing/head/sombrero/shamebrero name = "shamebrero" @@ -199,6 +210,7 @@ item_state = "shamebrero" desc = "Once it's on, it never comes off." flags = NODROP + dog_fashion = null /obj/item/clothing/head/cone desc = "This cone is trying to warn you of something!" @@ -221,6 +233,7 @@ item_state = "that" cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_fashion = /datum/dog_fashion/head/santa /obj/item/clothing/head/jester name = "jester hat" @@ -247,4 +260,4 @@ name = "paper sack hat" desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all." icon_state = "papersack_smile" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS \ No newline at end of file + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index fb35aceb6b6..154cf6a5d71 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -93,6 +93,8 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_fashion = /datum/dog_fashion/head/ushanka + /obj/item/clothing/head/ushanka/attack_self(mob/user) if(earflaps) src.icon_state = "ushankaup" @@ -128,6 +130,8 @@ icon_state = "kitty" color = "#999" + dog_fashion = /datum/dog_fashion/head/kitty + /obj/item/clothing/head/kitty/equipped(mob/user, slot) if(user && slot == slot_head) update_icon(user) @@ -148,6 +152,7 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) brightness_on = 1 //luminosity when on + dog_fashion = /datum/dog_fashion/head/reindeer /obj/item/clothing/head/cardborg name = "cardborg helmet" @@ -157,6 +162,8 @@ flags_cover = HEADCOVERSEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + dog_fashion = /datum/dog_fashion/head/cardborg + /obj/item/clothing/head/cardborg/equipped(mob/living/user, slot) ..() if(ishuman(user) && slot == slot_head) @@ -167,4 +174,4 @@ /obj/item/clothing/head/cardborg/dropped(mob/living/user) ..() - user.remove_alt_appearance("standard_borg_disguise") \ No newline at end of file + user.remove_alt_appearance("standard_borg_disguise") diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 689bd54862e..d66fef73c9b 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -4,6 +4,9 @@ icon_state = "cargosoft" item_state = "helmet" item_color = "cargo" + + dog_fashion = /datum/dog_fashion/head/cargo_tech + var/flipped = 0 /obj/item/clothing/head/soft/dropped() @@ -49,60 +52,70 @@ desc = "It's a baseball hat in a tasteless red colour." icon_state = "redsoft" item_color = "red" + dog_fashion = null /obj/item/clothing/head/soft/blue name = "blue cap" desc = "It's a baseball hat in a tasteless blue colour." icon_state = "bluesoft" item_color = "blue" + dog_fashion = null /obj/item/clothing/head/soft/green name = "green cap" desc = "It's a baseball hat in a tasteless green colour." icon_state = "greensoft" item_color = "green" + dog_fashion = null /obj/item/clothing/head/soft/yellow name = "yellow cap" desc = "It's a baseball hat in a tasteless yellow colour." icon_state = "yellowsoft" item_color = "yellow" + dog_fashion = null /obj/item/clothing/head/soft/grey name = "grey cap" desc = "It's a baseball hat in a tasteful grey colour." icon_state = "greysoft" item_color = "grey" + dog_fashion = null /obj/item/clothing/head/soft/orange name = "orange cap" desc = "It's a baseball hat in a tasteless orange colour." icon_state = "orangesoft" item_color = "orange" + dog_fashion = null /obj/item/clothing/head/soft/mime name = "white cap" desc = "It's a baseball hat in a tasteless white colour." icon_state = "mimesoft" item_color = "mime" + dog_fashion = null /obj/item/clothing/head/soft/purple name = "purple cap" desc = "It's a baseball hat in a tasteless purple colour." icon_state = "purplesoft" item_color = "purple" + dog_fashion = null /obj/item/clothing/head/soft/black name = "black cap" desc = "It's a baseball hat in a tasteless black colour." icon_state = "blacksoft" item_color = "black" + dog_fashion = null /obj/item/clothing/head/soft/rainbow name = "rainbow cap" desc = "It's a baseball hat in a bright rainbow of colors." icon_state = "rainbowsoft" item_color = "rainbow" + dog_fashion = null /obj/item/clothing/head/soft/sec name = "security cap" @@ -111,9 +124,11 @@ item_color = "sec" armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 + dog_fashion = null /obj/item/clothing/head/soft/emt name = "EMT cap" desc = "It's a baseball hat with a dark turquoise color and a reflective cross on the top." icon_state = "emtsoft" item_color = "emt" + dog_fashion = null diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 2e9935288f5..ba61b61699a 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -61,11 +61,17 @@ item_state = "clown_hat" flags_cover = MASKCOVERSEYES burn_state = FLAMMABLE + actions_types = list(/datum/action/item_action/adjust) + + dog_fashion = /datum/dog_fashion/head/clown + +/obj/item/clothing/mask/gas/clown_hat/attack_self(mob/user) + AltClick(user) /obj/item/clothing/mask/gas/clown_hat/AltClick(mob/living/user) if(!istype(user) || user.incapacitated()) return - + var/list/options = list() options["True Form"] = "clown" options["The Feminist"] = "sexyclown" @@ -155,4 +161,4 @@ /obj/item/clothing/mask/gas/carp name = "carp mask" desc = "Gnash gnash." - icon_state = "carp_mask" \ No newline at end of file + icon_state = "carp_mask" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index e89458f6da9..9d6c988c63e 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -121,6 +121,8 @@ Contains: flags = STOPSPRESSUREDMAGE flags_cover = HEADCOVERSEYES + dog_fashion = /datum/dog_fashion/head/santa + /obj/item/clothing/suit/space/santa name = "Santa's suit" desc = "Festive!" @@ -308,4 +310,4 @@ Contains: /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor name = "inquisitor's helmet" icon_state = "hardsuit0-inq" - item_state = "hardsuit0-inq" \ No newline at end of file + item_state = "hardsuit0-inq" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 71d64ce578f..dfc4756043e 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -9,21 +9,26 @@ put_on_delay = 50 unacidable = 1 burn_state = FIRE_PROOF + dog_fashion = /datum/dog_fashion/head/blue_wizard /obj/item/clothing/head/wizard/red name = "red wizard hat" desc = "Strange-looking red hat-wear that most certainly belongs to a real magic user." icon_state = "redwizard" + dog_valid = DOG_HEAD + dog_fashion = /datum/dog_fashion/head/red_wizard /obj/item/clothing/head/wizard/yellow name = "yellow wizard hat" desc = "Strange-looking yellow hat-wear that most certainly belongs to a powerful magic user." icon_state = "yellowwizard" + dog_fashion = null /obj/item/clothing/head/wizard/black name = "black wizard hat" desc = "Strange-looking black hat-wear that most certainly belongs to a real skeleton. Spooky." icon_state = "blackwizard" + dog_fashion = null /obj/item/clothing/head/wizard/fake name = "wizard hat" @@ -32,23 +37,27 @@ gas_transfer_coefficient = 1 permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + dog_fashion = /datum/dog_fashion/head/blue_wizard /obj/item/clothing/head/wizard/marisa name = "witch hat" desc = "Strange-looking hat-wear. Makes you want to cast fireballs." icon_state = "marisa" + dog_fashion = null /obj/item/clothing/head/wizard/magus name = "\improper Magus helm" desc = "A mysterious helmet that hums with an unearthly power." icon_state = "magus" item_state = "magus" + dog_fashion = null /obj/item/clothing/head/wizard/santa name = "Santa's hat" desc = "Ho ho ho. Merrry X-mas!" icon_state = "santahat" flags_inv = HIDEHAIR|HIDEFACIALHAIR + dog_fashion = null /obj/item/clothing/suit/wizrobe name = "wizard robe" @@ -139,4 +148,4 @@ permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) unacidable = 0 - burn_state = FLAMMABLE \ No newline at end of file + burn_state = FLAMMABLE diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 15c3cecd3a0..48f6eb4c3fa 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -210,6 +210,7 @@ /obj/item/clothing/tie/scarf name = "scarf" desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." + dog_fashion = /datum/dog_fashion/head /obj/item/clothing/tie/scarf/red name = "red scarf" @@ -319,4 +320,4 @@ item_state = "" item_color = "talisman" body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS|HEAD - armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 50, bio = 65, rad = 5) //Faith is the best armor. //This won't actually work because of accessories kill me with a fucking knife jesus christ I hate code \ No newline at end of file + armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 50, bio = 65, rad = 5) //Faith is the best armor. //This won't actually work because of accessories kill me with a fucking knife jesus christ I hate code diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index c7acb904566..e34a7c811a1 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -267,122 +267,19 @@ return valid /mob/living/simple_animal/pet/dog/corgi/proc/update_corgi_fluff() - var/special_hat = 0 - if(inventory_head) - special_hat = 1 - switch(inventory_head.type) - if(/obj/item/clothing/head/helmet) - name = "Sergeant [real_name]" - desc = "The ever-loyal, the ever-vigilant." + // First, change back to defaults + name = real_name + desc = initial(desc) + speak = initial(speak) + speak_emote = initial(speak_emote) + emote_hear = initial(emote_hear) + emote_see = initial(emote_see) + desc = initial(desc) + SetLuminosity(0) - if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef) - name = "Sous chef [real_name]" - desc = "Your food will be taste-tested. All of it." - - - if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain) - name = "Captain [real_name]" - desc = "Probably better than the last captain." - - if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty) - name = "Runtime" - emote_see = list("coughs up a furball", "stretches") - emote_hear = list("purrs") - speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") - desc = "It's a cute little kitty-cat! ... wait ... what the hell?" - - if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears) - name = "Hoppy" - emote_see = list("twitches its nose", "hops around a bit") - desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" - - if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret) - name = "Yann" - desc = "Mon dieu! C'est un chien!" - speak = list("le woof!", "le bark!", "JAPPE!!") - emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.") - - if(/obj/item/clothing/head/det_hat) - name = "Detective [real_name]" - desc = "[name] sees through your lies..." - emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.") - - if(/obj/item/clothing/head/nursehat) - name = "Nurse [real_name]" - desc = "[name] needs 100cc of beef jerky... STAT!" - - if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate) - name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" - desc = "Yaarghh!! Thar' be a scurvy dog!" - emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!") - emote_hear = list("growls ferociously!", "snarls.") - speak = list("Arrrrgh!!","Grrrrrr!") - - if(/obj/item/clothing/head/ushanka) - name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]" - desc = "A follower of Karl Barx." - emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") - - if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police) - name = "Officer [real_name]" - emote_see = list("drools.","looks for donuts.") - desc = "Stop right there criminal scum!" - - if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard) - name = "Grandwizard [real_name]" - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") - - if(/obj/item/clothing/head/wizard/red) - name = "Pyromancer [real_name]" - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!") - - if(/obj/item/clothing/head/cardborg) - name = "Borgi" - speak = list("Ping!","Beep!","Woof!") - emote_see = list("goes rogue.", "sniffs out non-humans.") - desc = "Result of robotics budget cuts." - - if(/obj/item/weapon/bedsheet) - name = "\improper Ghost" - speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") - emote_see = list("stumbles around.", "shivers.") - emote_hear = list("howls!","groans.") - desc = "Spooky!" - - if(/obj/item/clothing/head/helmet/space/santahat) - name = "Santa's Corgi Helper" - emote_hear = list("barks Christmas songs.", "yaps merrily!") - emote_see = list("looks for presents.", "checks his list.") - desc = "He's very fond of milk and cookies." - - if(/obj/item/clothing/head/soft) - name = "Corgi Tech [real_name]" - desc = "The reason your yellow gloves have chew-marks." - - if(/obj/item/clothing/head/hardhat/reindeer) - name = "[real_name] the red-nosed Corgi" - emote_hear = list("lights the way!", "illuminates.", "yaps!") - desc = "He has a very shiny nose." - - if(/obj/item/clothing/head/sombrero) - name = "Segnor [real_name]" - desc = "You must respect elder [real_name]" - - if(/obj/item/clothing/head/hopcap) - name = "Lieutenant [real_name]" - desc = "Can actually be trusted to not run off on his own." - - if(/obj/item/clothing/head/helmet/space/hardsuit/deathsquad) - name = "Trooper [real_name]" - desc = "That's not red paint. That's real corgi blood." - - if(/obj/item/clothing/mask/gas/clown_hat) - name = "[real_name] the Clown" - desc = "Honkman's best friend." - speak = list("HONK!", "Honk!") - emote_see = list("plays tricks.", "slips.") - else - special_hat = 0 + if(inventory_head && inventory_head.dog_fashion) + var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src) + DF.apply(src) var/special_back = 0 if(inventory_back) @@ -665,4 +562,4 @@ emote("me", 1, "yaps happily!") else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) - emote("me", 1, "growls!") \ No newline at end of file + emote("me", 1, "growls!") diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c64dca71bef..8e8b742204c 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -20,6 +20,7 @@ body_parts_covered = HEAD burn_state = FLAMMABLE burntime = 5 + dog_valid = DOG_HEAD var/info //What's actually written on the paper. var/info_links //A different version of the paper which includes html links at fields and EOF diff --git a/tgstation.dme b/tgstation.dme index be56d6608f7..15ce06b6a07 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -152,6 +152,7 @@ #include "code\datums\browser.dm" #include "code\datums\datacore.dm" #include "code\datums\datumvars.dm" +#include "code\datums\dog_fashion.dm" #include "code\datums\hud.dm" #include "code\datums\martial.dm" #include "code\datums\material_container.dm" From 8fc75b438d6e675d27520682ebe1fdbed4eb0535 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 13:21:14 +0100 Subject: [PATCH 113/228] Fixed some remaining variables --- code/__DEFINES/clothing.dm | 3 --- code/modules/clothing/head/hardhat.dm | 2 +- code/modules/clothing/head/misc.dm | 2 +- code/modules/clothing/suits/wiz_robe.dm | 1 - code/modules/paperwork/paper.dm | 2 +- 5 files changed, 3 insertions(+), 7 deletions(-) diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index ed0f79ea979..29e35489555 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -102,6 +102,3 @@ #define TINT_DARKENED 2 //Threshold of tint level to apply weld mask overlay #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully -//flags for indicating suitability of items for corgi equipping -#define DOG_BACK 1 -#define DOG_HEAD 2 diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index ab225656783..6f0487f4836 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -75,7 +75,7 @@ max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - dog_valid = DOG_HEAD + dog_fashion = /datum/dog_fashion/head /obj/item/clothing/head/hardhat/dblue icon_state = "hardhat0_dblue" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 8d58dba184c..e96dd88e631 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -20,7 +20,7 @@ desc = "It's an amish looking hat." icon_state = "tophat" item_state = "that" - dog_valid = DOG_HEAD + dog_fashion = /datum/dog_fashion/head /obj/item/clothing/head/canada name = "striped red tophat" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index dfc4756043e..c5677007305 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -15,7 +15,6 @@ name = "red wizard hat" desc = "Strange-looking red hat-wear that most certainly belongs to a real magic user." icon_state = "redwizard" - dog_valid = DOG_HEAD dog_fashion = /datum/dog_fashion/head/red_wizard /obj/item/clothing/head/wizard/yellow diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 8e8b742204c..4f172ff20b5 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -20,7 +20,7 @@ body_parts_covered = HEAD burn_state = FLAMMABLE burntime = 5 - dog_valid = DOG_HEAD + dog_fashion = /datum/dog_fashion/head var/info //What's actually written on the paper. var/info_links //A different version of the paper which includes html links at fields and EOF From 6bc4fbf7004c7dbc2acc1603233d603b07089367 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 13:23:33 +0100 Subject: [PATCH 114/228] More changes --- code/game/objects/items.dm | 2 +- .../mob/living/simple_animal/friendly/dog.dm | 44 +++++++++---------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 13fabfd807a..6abdf31d797 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -121,7 +121,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s // Needs to be in /obj/item because corgis can wear a lot of // non-clothing items - var/datum/dog_fashion/dog_fashion + var/datum/dog_fashion/dog_fashion = null /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index e34a7c811a1..f91bf21f680 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -281,26 +281,9 @@ var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src) DF.apply(src) - var/special_back = 0 - if(inventory_back) - special_back = 1 - switch(inventory_back.type) - if(/obj/item/clothing/suit/space/hardsuit/deathsquad) - name = "Trooper [real_name]" - desc = "That's not red paint. That's real corgi blood." - else - special_back = 0 - - if(!special_hat && !special_back) - name = real_name - desc = initial(desc) - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") - speak_emote = list("barks", "woofs") - emote_hear = list("barks", "woofs", "yaps","pants") - emote_see = list("shakes its head", "shivers") - desc = "It's a corgi." - SetLuminosity(0) - return + if(inventory_back && inventory_back.dog_fashion) + var/datum/dog_fashion/DF = new inventory_head.back_fashion(src) + DF.apply(src) //IAN! SQUEEEEEEEEE~ /mob/living/simple_animal/pet/dog/corgi/Ian @@ -435,21 +418,34 @@ overlays.Cut() if(inventory_head) var/image/head_icon + + var/head_icon_state = inventory_head.icon_state + if(inventory_head.dog_fashion) + var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) + head_icon_state = DF.icon_state + if(health <= 0) - head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state, dir = EAST) + head_icon = image('icons/mob/corgi_head.dmi', icon_state = head_icon_state, dir = EAST) head_icon.pixel_y = -8 head_icon.transform = turn(head_icon.transform, 180) else - head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state) + head_icon = image('icons/mob/corgi_head.dmi', icon_state = head_icon_state) overlays += head_icon + if(inventory_back) var/image/back_icon + + var/back_icon_state = inventory_back.icon_state + if(inventory_back.dog_fashion) + var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src) + back_icon_state = DF.icon_state + if(health <= 0) - back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state, dir = EAST) + back_icon = image('icons/mob/corgi_back.dmi', icon_state = back_icon_state, dir = EAST) back_icon.pixel_y = -11 back_icon.transform = turn(back_icon.transform, 180) else - back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state) + back_icon = image('icons/mob/corgi_back.dmi', icon_state = back_icon_state) overlays += back_icon if(facehugger) if(istype(src, /mob/living/simple_animal/pet/dog/corgi/puppy)) From 8523295806b5618fb9b2e80880ed59b094d1cc47 Mon Sep 17 00:00:00 2001 From: oranges Date: Mon, 25 Apr 2016 00:42:05 +1200 Subject: [PATCH 115/228] Fix a typo in string lists system I have no idea how this didn't cause a bug --- code/__HELPERS/_string_lists.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/_string_lists.dm b/code/__HELPERS/_string_lists.dm index 28cb7232e72..290beb20634 100644 --- a/code/__HELPERS/_string_lists.dm +++ b/code/__HELPERS/_string_lists.dm @@ -3,7 +3,7 @@ #define json_load(FILE) (json_decode(file2text(FILE))) var/global/list/string_cache -var/global/list/string_filename_current_key +var/global/string_filename_current_key /proc/strings_replacement(filename, key) From 2f26b8eabc515fc11d5c5f9a686eb4454282f85f Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 13:54:37 +0100 Subject: [PATCH 116/228] Compilation! --- code/datums/dog_fashion.dm | 47 +++++++++---------- code/game/objects/items.dm | 7 +-- .../mob/living/simple_animal/friendly/dog.dm | 2 +- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 617920a065f..eff0293d3e2 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -11,13 +11,10 @@ var/icon_state /datum/dog_fashion/New(mob/M) - if(findtext(name, "[]")) - name = text(name, M.truename) + name = replacetext(name, "REAL_NAME", M.real_name) + desc = replacetext(desc, "NAME", name) - if(findtext(desc, "[]")) - desc = text(desc, name) - -/datum/dog_fashion/apply(mob/living/simple_animal/pet/dog/D) +/datum/dog_fashion/proc/apply(mob/living/simple_animal/pet/dog/D) if(name) D.name = name if(desc) @@ -38,16 +35,16 @@ /datum/dog_fashion/head /datum/dog_fashion/head/helmet - name = "Sergeant []" + name = "Sergeant REAL_NAME" desc = "The ever-loyal, the ever-vigilant." /datum/dog_fashion/head/chef - name = "Sous chef []" + name = "Sous chef REAL_NAME" desc = "Your food will be taste-tested. All of it." /datum/dog_fashion/head/captain - name = "Captain []" + name = "Captain REAL_NAME" desc = "Probably better than the last captain." /datum/dog_fashion/head/kitty @@ -70,14 +67,14 @@ /datum/dog_fashion/head/detective - name = "Detective []" - desc = "[] sees through your lies..." + name = "Detective REAL_NAME" + desc = "NAME sees through your lies..." emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.","takes a candycorn from the hat.") /datum/dog_fashion/head/nurse - name = "Nurse []" - desc = "[] needs 100cc of beef jerky... STAT!" + name = "Nurse REAL_NAME" + desc = "NAME needs 100cc of beef jerky... STAT!" /datum/dog_fashion/head/pirate name = "Pirate-title Pirate-name" @@ -91,7 +88,7 @@ name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" /datum/dog_fashion/head/ushanka - name = "Communist-title []" + name = "Communist-title Realname" desc = "A follower of Karl Barx." emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") @@ -100,16 +97,16 @@ name = "[pick("Comrade","Commissar","Glorious Leader")] [M.real_name]" /datum/dog_fashion/head/warden - name = "Officer []" + name = "Officer REAL_NAME" emote_see = list("drools.","looks for donuts.") desc = "Stop right there criminal scum!" /datum/dog_fashion/head/blue_wizard - name = "Grandwizard []" + name = "Grandwizard REAL_NAME" speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") /datum/dog_fashion/head/red_wizard - name = "Pyromancer []" + name = "Pyromancer REAL_NAME" speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!") /datum/dog_fashion/head/cardborg @@ -133,36 +130,36 @@ desc = "He's very fond of milk and cookies." /datum/dog_fashion/head/cargo_tech - name = "Corgi Tech []" + name = "Corgi Tech REAL_NAME" desc = "The reason your yellow gloves have chew-marks." /datum/dog_fashion/head/reindeer - name = "[] the red-nosed Corgi" + name = "REAL_NAME the red-nosed Corgi" emote_hear = list("lights the way!", "illuminates.", "yaps!") desc = "He has a very shiny nose." /datum/dog_fashion/head/sombrero - name = "Segnor []" + name = "Segnor REAL_NAME" desc = "You must respect Elder Dogname" /datum/dog_fashion/head/sombrero/New(mob/M) ..() - desc = "You must respect Elder [M.truename]" + desc = "You must respect Elder [M.real_name]" /datum/dog_fashion/head/hop - name = "Lieutenant []" + name = "Lieutenant REAL_NAME" desc = "Can actually be trusted to not run off on his own." /datum/dog_fashion/head/deathsquad - name = "Trooper []" + name = "Trooper REAL_NAME" desc = "That's not red paint. That's real corgi blood." /datum/dog_fashion/head/clown - name = "[] the Clown" + name = "REAL_NAME the Clown" desc = "Honkman's best friend." speak = list("HONK!", "Honk!") emote_see = list("plays tricks.", "slips.") /datum/dog_fashion/body/deathsquad - name = "Trooper []" + name = "Trooper REAL_NAME" desc = "That's not red paint. That's real corgi blood." diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6abdf31d797..409b0a9974f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -119,9 +119,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s slot_drone_storage\ ) - // Needs to be in /obj/item because corgis can wear a lot of - // non-clothing items - var/datum/dog_fashion/dog_fashion = null + // Needs to be in /obj/item because corgis can wear a lot of + // non-clothing items + var/datum/dog_fashion/dog_fashion = null + /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index f91bf21f680..6e66b8b46c2 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -282,7 +282,7 @@ DF.apply(src) if(inventory_back && inventory_back.dog_fashion) - var/datum/dog_fashion/DF = new inventory_head.back_fashion(src) + var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src) DF.apply(src) //IAN! SQUEEEEEEEEE~ From 1927fc73e6a455d33cd520b23c1d3f11c25ae258 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 14:40:08 +0100 Subject: [PATCH 117/228] Dog fashion on the back --- code/datums/dog_fashion.dm | 14 +++-- .../objects/items/devices/radio/beacon.dm | 3 +- .../objects/items/devices/radio/headset.dm | 1 + .../objects/items/devices/radio/intercom.dm | 3 +- .../game/objects/items/devices/radio/radio.dm | 3 ++ .../objects/items/weapons/extinguisher.dm | 2 + .../objects/items/weapons/tanks/tank_types.dm | 5 +- .../clothing/spacesuits/miscellaneous.dm | 1 + code/modules/clothing/suits/armor.dm | 5 ++ code/modules/clothing/suits/miscellaneous.dm | 4 +- .../mob/living/simple_animal/friendly/dog.dm | 53 ++++++------------- 11 files changed, 50 insertions(+), 44 deletions(-) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index eff0293d3e2..a1620abe229 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -8,6 +8,7 @@ // This isn't applied to the dog, but stores the icon_state of the // sprite that the associated item uses + var/icon_file var/icon_state /datum/dog_fashion/New(mob/M) @@ -28,9 +29,16 @@ if(speak_emote) D.speak_emote = speak_emote -/datum/dog_fashion/head +/datum/dog_fashion/proc/get_image(var/dir) + if(icon_file && icon_state) + return image(icon_file, icon_state = icon_state, dir = dir) + -/datum/dog_fashion/body +/datum/dog_fashion/head + icon_file = 'icons/mob/corgi_head.dmi' + +/datum/dog_fashion/back + icon_file = 'icons/mob/corgi_back.dmi' /datum/dog_fashion/head @@ -160,6 +168,6 @@ speak = list("HONK!", "Honk!") emote_see = list("plays tricks.", "slips.") -/datum/dog_fashion/body/deathsquad +/datum/dog_fashion/back/deathsquad name = "Trooper REAL_NAME" desc = "That's not red paint. That's real corgi blood." diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 3c372f71657..30a99c9431e 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -5,6 +5,7 @@ item_state = "beacon" var/code = "electronic" origin_tech = "bluespace=1" + dog_fashion = null /obj/item/device/radio/beacon/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) return @@ -29,4 +30,4 @@ //Probably a better way of doing this, I'm lazy. /obj/item/device/radio/beacon/bacon/proc/digest_delay() spawn(600) - qdel(src)*/ //Bacon beacons are no more rip in peace \ No newline at end of file + qdel(src)*/ //Bacon beacons are no more rip in peace diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index ebf159d30d3..ef15693855e 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -9,6 +9,7 @@ slot_flags = SLOT_EARS var/obj/item/device/encryptionkey/keyslot2 = null + dog_fashion = null /obj/item/device/radio/headset/New() ..() diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index da80ff840ee..8532aeb4ea2 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -9,6 +9,7 @@ var/anyai = 1 var/mob/living/silicon/ai/ai = list() var/last_tick //used to delay the powercheck + dog_fashion = null /obj/item/device/radio/intercom/New() ..() @@ -67,4 +68,4 @@ icon_state = "intercom" /obj/item/device/radio/intercom/rejects_blood() - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index bf69eb8bada..41a630797d1 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -4,6 +4,7 @@ suffix = "\[3\]" icon_state = "walkietalkie" item_state = "walkietalkie" + dog_fashion = /datum/dog_fashion/back var/on = 1 // 0 for off var/last_transmission var/frequency = 1459 //common chat @@ -538,6 +539,7 @@ /obj/item/device/radio/borg name = "cyborg radio" subspace_switchable = 1 + dog_fashion = null /obj/item/device/radio/borg/syndicate syndie = 1 @@ -587,3 +589,4 @@ /obj/item/device/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag. listening = 0 // And it's nice to have a subtype too for future features. + dog_fashion = /datum/dog_fashion/back diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index ebc4bbfbc44..adcfefcd61d 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -13,6 +13,7 @@ force = 10 materials = list(MAT_METAL=90) attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") + dog_fashion = /datum/dog_fashion/back var/max_water = 50 var/last_use = 1 var/safety = 1 @@ -34,6 +35,7 @@ materials = list() max_water = 30 sprite_name = "miniFE" + dog_fashion = null /obj/item/weapon/extinguisher/New() create_reagents(max_water) diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index a8420574e35..c2d341a1978 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -16,6 +16,7 @@ icon_state = "oxygen" distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE force = 10 + dog_fashion = /datum/dog_fashion/back /obj/item/weapon/tank/internals/oxygen/New() @@ -28,10 +29,12 @@ /obj/item/weapon/tank/internals/oxygen/yellow desc = "A tank of oxygen, this one is yellow." icon_state = "oxygen_f" + dog_fashion = null /obj/item/weapon/tank/internals/oxygen/red desc = "A tank of oxygen, this one is red." icon_state = "oxygen_fr" + dog_fashion = null /* @@ -59,7 +62,7 @@ desc = "Mixed anyone?" icon_state = "oxygen" force = 10 - + dog_fashion = /datum/dog_fashion/back /obj/item/weapon/tank/internals/air/New() ..() diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 9d6c988c63e..d03d7e169b5 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -60,6 +60,7 @@ Contains: max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT unacidable = 1 helmettype = /obj/item/clothing/head/helmet/space/hardsuit/deathsquad + dog_fashion = /datum/dog_fashion/back/deathsquad //NEW SWAT suit /obj/item/clothing/suit/space/swat diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index b1ba866af7d..6e15dfebe7a 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -16,6 +16,7 @@ item_state = "armor" blood_overlay_type = "armor" armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) + dog_fashion = /datum/dog_fashion/back /obj/item/clothing/suit/armor/hos name = "armored greatcoat" @@ -47,6 +48,7 @@ heat_protection = CHEST|GROIN|ARMS|HANDS strip_delay = 70 burn_state = FLAMMABLE + dog_fashion = null /obj/item/clothing/suit/armor/vest/warden/alt name = "warden's armored jacket" @@ -61,6 +63,7 @@ body_parts_covered = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS + dog_fashion = null /obj/item/clothing/suit/armor/vest/capcarapace name = "captain's carapace" @@ -69,6 +72,7 @@ item_state = "armor" body_parts_covered = CHEST|GROIN armor = list(melee = 50, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + dog_fashion = null /obj/item/clothing/suit/armor/vest/capcarapace/alt name = "captain's parade jacket" @@ -129,6 +133,7 @@ icon_state = "detective-armor" allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder,/obj/item/weapon/melee/classic_baton/telescopic) burn_state = FLAMMABLE + dog_fashion = null //Reactive armor diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index cd62fb539d3..1842f608827 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -162,6 +162,7 @@ item_state = "cardborg" body_parts_covered = CHEST|GROIN flags_inv = HIDEJUMPSUIT + dog_fashion = /datum/dog_fashion/back /obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot) ..() @@ -257,6 +258,7 @@ allowed = list(,) hooded = 1 hoodtype = /obj/item/clothing/head/ian_hood + dog_fashion = /datum/dog_fashion/back /obj/item/clothing/head/ian_hood name = "corgi hood" @@ -487,4 +489,4 @@ hoodtype = /obj/item/clothing/head/winterhood/miner /obj/item/clothing/head/winterhood/miner - icon_state = "winterhood_miner" \ No newline at end of file + icon_state = "winterhood_miner" diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 6e66b8b46c2..8805f52b08e 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -165,13 +165,6 @@ //The objects that corgis can wear on their backs. var/list/allowed_types = list( - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/space/hardsuit/deathsquad, - /obj/item/device/radio, - /obj/item/device/radio/off, - /obj/item/clothing/suit/cardborg, - /obj/item/weapon/tank/internals/oxygen, - /obj/item/weapon/tank/internals/air, /obj/item/weapon/extinguisher, /obj/item/clothing/suit/hooded/ian_costume, ) @@ -202,6 +195,7 @@ //Corgis are supposed to be simpler, so only a select few objects can actually be put //to be compatible with them. The objects are below. //Many hats added, Some will probably be removed, just want to see which ones are popular. +// > some will probably be removed /mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/user) @@ -217,26 +211,11 @@ user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.") return - var/valid = 0 + var/valid = FALSE + if(istype(item_to_add.dog_fashion, /datum/dog_fashion/head)) + valid = TRUE //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed. - if(istype(item_to_add, /obj/item/clothing/tie/scarf)) - valid = 1 - else - switch(item_to_add.type) - if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat, /obj/item/clothing/head/hardhat/white, - /obj/item/weapon/paper, /obj/item/clothing/head/helmet, /obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain, /obj/item/clothing/head/kitty, - /obj/item/clothing/head/collectable/kitty, /obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret, /obj/item/clothing/head/det_hat, - /obj/item/clothing/head/nursehat, /obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/ushanka, /obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/cardborg, /obj/item/weapon/bedsheet, /obj/item/clothing/head/helmet/space/santahat, - /obj/item/clothing/head/soft, /obj/item/clothing/head/hardhat/reindeer, /obj/item/clothing/head/sombrero, - /obj/item/clothing/head/hopcap, /obj/item/clothing/mask/gas/clown_hat, /obj/item/clothing/head/wizard/red) - valid = 1 if(valid) if(user && !user.drop_item()) @@ -418,35 +397,35 @@ overlays.Cut() if(inventory_head) var/image/head_icon + var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) - var/head_icon_state = inventory_head.icon_state - if(inventory_head.dog_fashion) - var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) - head_icon_state = DF.icon_state + if(!DF.icon_state) + icon_state = inventory_head.icon_state if(health <= 0) - head_icon = image('icons/mob/corgi_head.dmi', icon_state = head_icon_state, dir = EAST) + head_icon = DF.get_image(dir = EAST) head_icon.pixel_y = -8 head_icon.transform = turn(head_icon.transform, 180) else - head_icon = image('icons/mob/corgi_head.dmi', icon_state = head_icon_state) + head_icon = DF.get_image() + overlays += head_icon if(inventory_back) var/image/back_icon + var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src) - var/back_icon_state = inventory_back.icon_state - if(inventory_back.dog_fashion) - var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src) - back_icon_state = DF.icon_state + if(!DF.icon_state) + DF.icon_state = inventory_back.icon_state if(health <= 0) - back_icon = image('icons/mob/corgi_back.dmi', icon_state = back_icon_state, dir = EAST) + back_icon = DF.get_image(dir = EAST) back_icon.pixel_y = -11 back_icon.transform = turn(back_icon.transform, 180) else - back_icon = image('icons/mob/corgi_back.dmi', icon_state = back_icon_state) + back_icon = DF.get_image() overlays += back_icon + if(facehugger) if(istype(src, /mob/living/simple_animal/pet/dog/corgi/puppy)) overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy") From 2bf9caa07b219d8c9eede8f743126b6d93d124a8 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 14:44:55 +0100 Subject: [PATCH 118/228] I'M BRINGING FASHION BACK --- code/modules/mob/living/simple_animal/friendly/dog.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 8805f52b08e..5b2df5f2336 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -164,12 +164,11 @@ return //The objects that corgis can wear on their backs. - var/list/allowed_types = list( - /obj/item/weapon/extinguisher, - /obj/item/clothing/suit/hooded/ian_costume, - ) + var/allowed = FALSE + if(istype(item_to_add.dog_fashion,/datum/dog_fashion/back)) + allowed = TRUE - if( ! ( item_to_add.type in allowed_types ) ) + if(!allowed) usr << "You set [item_to_add] on [src]'s back, but it falls off!" if(!usr.drop_item()) usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!" From 2c48313d4fc84bab775be0698ba098a2994cd49a Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 14:56:56 +0100 Subject: [PATCH 119/228] Istype/ispath memes, and tidying --- .../mob/living/simple_animal/friendly/dog.dm | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 5b2df5f2336..d3f785447b1 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -159,20 +159,22 @@ if(!item_to_add) usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.") return + + if(!usr.drop_item()) + usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!" + return + if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess item_to_add.afterattack(src,usr,1) return //The objects that corgis can wear on their backs. var/allowed = FALSE - if(istype(item_to_add.dog_fashion,/datum/dog_fashion/back)) + if(ispath(item_to_add.dog_fashion,/datum/dog_fashion/back)) allowed = TRUE if(!allowed) usr << "You set [item_to_add] on [src]'s back, but it falls off!" - if(!usr.drop_item()) - usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!" - return item_to_add.loc = loc if(prob(25)) step_rand(item_to_add) @@ -210,16 +212,17 @@ user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.") return + if(user && !user.drop_item()) + user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!" + return 0 + var/valid = FALSE - if(istype(item_to_add.dog_fashion, /datum/dog_fashion/head)) + if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/head)) valid = TRUE //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed. if(valid) - if(user && !user.drop_item()) - user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!" - return 0 if(health <= 0) user << "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him." else if(user) @@ -231,9 +234,6 @@ update_corgi_fluff() regenerate_icons() else - if(user && !user.drop_item()) - user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!" - return 0 user << "You set [item_to_add] on [src]'s head, but it falls off!" item_to_add.loc = loc if(prob(25)) From 4c0a553c1da2500ba7def3da2cc9474532025e12 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 15:06:39 +0100 Subject: [PATCH 120/228] Bug fix --- code/modules/mob/living/simple_animal/friendly/dog.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index d3f785447b1..ab2884a72aa 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -399,7 +399,7 @@ var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) if(!DF.icon_state) - icon_state = inventory_head.icon_state + DF.icon_state = inventory_head.icon_state if(health <= 0) head_icon = DF.get_image(dir = EAST) From de76cecc47a2803146fb2dc40b4c85dfdca51ed7 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 15:23:38 +0100 Subject: [PATCH 121/228] DM initial() doesn't work on lists --- code/modules/mob/living/simple_animal/friendly/dog.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index ab2884a72aa..bd928eb762c 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -248,10 +248,11 @@ // First, change back to defaults name = real_name desc = initial(desc) - speak = initial(speak) - speak_emote = initial(speak_emote) - emote_hear = initial(emote_hear) - emote_see = initial(emote_see) + // BYOND/DM doesn't support the use of initial on lists. + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") + speak_emote = list("barks", "woofs") + emote_hear = list("barks!", "woofs!", "yaps.","pants.") + emote_see = list("shakes its head.", "chases its tail.","shivers.") desc = initial(desc) SetLuminosity(0) From a89d9516691ced800e7feb6169aac0b3268a9b5c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 15:42:20 +0100 Subject: [PATCH 122/228] Removed whitespace --- code/datums/dog_fashion.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index a1620abe229..337501d094d 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -32,7 +32,7 @@ /datum/dog_fashion/proc/get_image(var/dir) if(icon_file && icon_state) return image(icon_file, icon_state = icon_state, dir = dir) - + /datum/dog_fashion/head icon_file = 'icons/mob/corgi_head.dmi' From 1f2c405763337587d117fdd81c1907a63b831df3 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 15:59:57 +0100 Subject: [PATCH 123/228] Changes messages, based on feedback --- code/modules/mining/equipment_locker.dm | 6 +++--- code/modules/mining/mine_turfs.dm | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 488c768428e..6d19f786131 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -531,10 +531,10 @@ /obj/item/device/wormhole_jaunter/proc/chasm_react(mob/user) if(user.get_item_by_slot(slot_belt) == src) - user.visible_message("[user]'s [src] activates, saving them from the chasm!") + user << "Your [src] activates, saving you from the chasm!
      ") activate(user) else - user.visible_message("The [src] is not attached to [user]'s belt, preventing it from saving them from the chasm. RIP.") + user << "The [src] is not attached to your belt, preventing it from saving you from the chasm. RIP.") /obj/effect/portal/wormhole/jaunt_tunnel @@ -1061,7 +1061,7 @@ /obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/internal/M, mob/user) var/obj/item/organ/internal/hivelord_core/C = M if(!istype(C, /obj/item/organ/internal/hivelord_core)) - user << "The stabilizer only works on legion's hearts." + user << "The stabilizer only works on certain types of monster organs, generally regenerative in nature." return ..() C.preserved = 1 user << "You inject the [M] with the stabilizer. It will no longer go inert." diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 17b9ceaeecb..491db033ef7 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -576,6 +576,8 @@ var/mob/living/carbon/human/H = AM if(istype(H.belt, /obj/item/device/wormhole_jaunter)) var/obj/item/device/wormhole_jaunter/J = H.belt + // To freak out any bystanders + visible_message("[H] falls into [src]!") J.chasm_react(H) return drop(AM) From c29f8478d7a66c2363e497c023a2d712fd6dd789 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 16:08:36 +0100 Subject: [PATCH 124/228] Compiles now --- code/modules/mining/equipment_locker.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 6d19f786131..aea31a8d9cf 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -531,10 +531,10 @@ /obj/item/device/wormhole_jaunter/proc/chasm_react(mob/user) if(user.get_item_by_slot(slot_belt) == src) - user << "Your [src] activates, saving you from the chasm!") + user << "Your [src] activates, saving you from the chasm!" activate(user) else - user << "The [src] is not attached to your belt, preventing it from saving you from the chasm. RIP.") + user << "The [src] is not attached to your belt, preventing it from saving you from the chasm. RIP." /obj/effect/portal/wormhole/jaunt_tunnel From 8534e3dbb911bb4742ad33789634baf61aa54d5e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 16:29:17 +0100 Subject: [PATCH 125/228] Code review --- .../miniantags/slaughter/slaughter.dm | 2 +- code/modules/mob/living/bloodcrawl.dm | 21 +++++++++---------- code/modules/spells/spell.dm | 3 +-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index f065d53038c..e1e4e0edbd3 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -64,7 +64,7 @@ speed = 0 /mob/living/simple_animal/slaughter/death() - ..() + ..(1) death_mealspill() diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index d804a6bbb15..19310eb23bf 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -55,24 +55,23 @@ // dummy object var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc) src.ExtinguishMob() - if(buckled) - buckled.unbuckle_mob(src,force=1) - if(buckled_mobs.len) - unbuckle_all_mobs(force=1) - if(pulledby) - pulledby.stop_pulling() - src.loc = holder + + // Keep a reference to whatever we're pulling, because forceMove() + // makes us stop pulling + var/pullee = src.pulling + src.holder = holder + src.forceMove(holder) // if we're not pulling anyone, or we can't eat anyone - if(!src.pulling || src.bloodcrawl != BLOODCRAWL_EAT) + if(!pullee || src.bloodcrawl != BLOODCRAWL_EAT) return // if the thing we're pulling isn't alive - if (!(istype(src.pulling, /mob/living))) + if (!(istype(pullee, /mob/living))) return - var/mob/living/victim = src.pulling + var/mob/living/victim = pullee var/kidnapped = FALSE if(victim.stat == CONSCIOUS) @@ -80,7 +79,7 @@ else if(victim.reagents && victim.reagents.has_reagent("demonsblood")) visible_message("Something prevents [victim] from entering the pool!", "A strange force is blocking [victim] from entering!", "You hear a splash and a thud.") else - victim.loc = src + victim.forceMove(src) victim.emote("scream") src.visible_message("[src] drags [victim] into the pool of blood!", null, "You hear a splash.") kidnapped = TRUE diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 3494f38659c..3adfc081740 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -92,8 +92,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin user << "Not when you're incapacitated." return 0 - var/loc = user.loc - if(!phase_allowed && istype(loc, /obj/effect/dummy)) + if(!phase_allowed && istype(user.loc, /obj/effect/dummy)) user << "[name] cannot be cast unless you are completely manifested in the material plane." return 0 From e2888a285b44b1f05290625781c871643a93177d Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 16:45:35 +0100 Subject: [PATCH 126/228] player_list -> ai_list --- code/modules/events/communications_blackout.dm | 2 +- code/modules/events/processor_overload.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index 51b4a8096dd..5d8b72775cb 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -14,7 +14,7 @@ "Ionospheri:%£ MCayj^j<.3-BZZZZZZT", \ "#4nd%;f4y6,>£%-BZZZZZZZT") - for(var/mob/living/silicon/ai/A in player_list) //AIs are always aware of communication blackouts. + for(var/mob/living/silicon/ai/A in ai_list) //AIs are always aware of communication blackouts. A << "
      [alert]
      " if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts. diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index 0be0f058479..bf8708ac2c6 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -14,7 +14,7 @@ "Exospheri:%£ QCbyj^j[alert]
      " From 5d7db5637ceffb754c9a00d6c177d7000ffd7aae Mon Sep 17 00:00:00 2001 From: coiax Date: Sun, 24 Apr 2016 16:51:16 +0100 Subject: [PATCH 127/228] Added animal overlay to drone filters (#17009) * Added animal overlay to drone filters --- code/__HELPERS/icons.dm | 24 ++++++++++++++++++ code/modules/holiday/easter.dm | 14 +++++----- code/modules/mob/living/carbon/human/human.dm | 4 +++ code/modules/mob/living/living.dm | 6 ++++- .../simple_animal/friendly/drone/_drone.dm | 5 +++- .../friendly/drone/extra_drone_types.dm | 1 + .../friendly/drone/interaction.dm | 6 +++++ .../simple_animal/friendly/farm_animals.dm | 6 ++--- icons/mob/actions.dmi | Bin 81631 -> 81990 bytes 9 files changed, 54 insertions(+), 12 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 4e76b773352..4b531f503c8 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -872,6 +872,30 @@ The _flatIcons list is a cache for generated icon files. del(atom_icon) return text_image +var/global/list/friendly_animal_types = list() + +// Pick a random animal instead of the icon, and use that instead +/proc/getRandomAnimalImage(atom/A) + if(!friendly_animal_types.len) + for(var/T in typesof(/mob/living/simple_animal)) + var/mob/living/simple_animal/SA = T + if(initial(SA.gold_core_spawnable) == 2) + friendly_animal_types += SA + + + var/mob/living/simple_animal/SA = pick(friendly_animal_types) + + var/icon = initial(SA.icon) + var/icon_state = initial(SA.icon_state) + + var/image/final_image = image(icon, icon_state=icon_state, loc = A) + + if(ispath(SA, /mob/living/simple_animal/butterfly)) + final_image.color = rgb(rand(0,255), rand(0,255), rand(0,255)) + + // For debugging + final_image.text = initial(SA.name) + return final_image //Find's the average colour of the icon //By vg's ComicIronic diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 09e31dacd2a..2cb75a65e7c 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -38,9 +38,9 @@ name = "\improper rabbit" desc = "The hippiest hop around." icon = 'icons/mob/Easter.dmi' - icon_state = "rabbit" - icon_living = "rabbit" - icon_dead = "rabbit_dead" + icon_state = "rabbit_white" + icon_living = "rabbit_white" + icon_dead = "rabbit_white_dead" speak = list("Hop into Easter!","Come get your eggs!","Prizes for everyone!") speak_emote = list("sniffles","twitches") emote_hear = list("hops.") @@ -56,13 +56,13 @@ /mob/living/simple_animal/chicken/rabbit/space icon_prefix = "s_rabbit" - icon_state = "s_rabbit" - icon_living = "s_rabbit" - icon_dead = "s_rabbit_dead" + icon_state = "s_rabbit_white" + icon_living = "s_rabbit_white" + icon_dead = "s_rabbit_white_dead" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 1500 - unsuitable_atmos_damage = 0 //This damage is taken when atmos doesn't fit all the requirements above + unsuitable_atmos_damage = 0 //Easter Baskets /obj/item/weapon/storage/bag/easterbasket diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 589b69e52cb..00ecdd0ff92 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -824,6 +824,10 @@ staticOverlay.override = 1 staticOverlays["letter"] = staticOverlay + staticOverlay = getRandomAnimalImage(src) + staticOverlay.override = 1 + staticOverlays["animal"] = staticOverlay + /mob/living/carbon/human/cuff_resist(obj/item/I) if(dna && dna.check_mutation(HULK)) say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index de6de0bd39b..64351823b7c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -41,7 +41,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/generateStaticOverlay() - staticOverlays.Add(list("static", "blank", "letter")) + staticOverlays.Add(list("static", "blank", "letter", "animal")) var/image/staticOverlay = image(getStaticIcon(new/icon(icon,icon_state)), loc = src) staticOverlay.override = 1 staticOverlays["static"] = staticOverlay @@ -54,6 +54,10 @@ Sorry Giacom. Please don't be mad :( staticOverlay.override = 1 staticOverlays["letter"] = staticOverlay + staticOverlay = getRandomAnimalImage(src) + staticOverlay.override = 1 + staticOverlays["animal"] = staticOverlay + //Generic Bump(). Override MobBump() and ObjBump() instead of this. /mob/living/Bump(atom/A, yes) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index ef1fa6cea17..4d6632dec56 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -43,7 +43,7 @@ damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) staticOverlays = list() var/staticChoice = "static" - var/list/staticChoices = list("static", "blank", "letter") + var/list/staticChoices = list("static", "blank", "letter", "animal") var/picked = FALSE //Have we picked our visual appearence (+ colour if applicable) var/list/drone_overlays[DRONE_TOTAL_LAYERS] var/laws = \ @@ -83,6 +83,9 @@ alert_drones(DRONE_NET_CONNECT) + var/datum/action/generic/drone/select_filter/SF = new(src) + SF.Grant(src) + /mob/living/simple_animal/drone/Destroy() qdel(access_card) //Otherwise it ends up on the floor! diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index de35e25ef73..f37da30e127 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -51,6 +51,7 @@ default_hatmask = /obj/item/clothing/head/chameleon/drone /mob/living/simple_animal/drone/snowflake/New() + ..() desc += " This drone appears to have a complex holoprojector built on its 'head'." /obj/item/drone_shell/syndrone diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index a68dcf7516c..cc9b4cb9f84 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -179,3 +179,9 @@ icon_state = icon_dead else icon_state = icon_living + +/datum/action/generic/drone/select_filter + name = "Select Vision Filter" + button_icon_state = "drone_vision" + procname = /mob/living/simple_animal/drone/verb/toggle_statics + diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 2b3760b2dcc..6937b78520c 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -187,9 +187,9 @@ var/global/chicken_count = 0 /mob/living/simple_animal/chicken name = "\improper chicken" desc = "Hopefully the eggs are good this season." - icon_state = "chicken" - icon_living = "chicken" - icon_dead = "chicken_dead" + icon_state = "chicken_brown" + icon_living = "chicken_brown" + icon_dead = "chicken_brown_dead" speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") speak_emote = list("clucks","croons") emote_hear = list("clucks.") diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 7792eeaab82e4d1d45de93a12346e16d0e456371..7dee0928ecb4a067e16ff01f4cc773d802b7c337 100644 GIT binary patch delta 4435 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 Z{{h(ks%&i2-iiPK002ovPDHLkV1n6XkbeLG delta 4073 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 baj)}#b~_RG) Date: Sun, 24 Apr 2016 15:51:18 +0000 Subject: [PATCH 128/228] Automatic changelog generation for PR #17009 --- html/changelogs/AutoChangeLog-pr-17009.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17009.yml diff --git a/html/changelogs/AutoChangeLog-pr-17009.yml b/html/changelogs/AutoChangeLog-pr-17009.yml new file mode 100644 index 00000000000..81dc53b9e65 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17009.yml @@ -0,0 +1,6 @@ +author: coiax +delete-after: True +changes: + - rscadd: "Centcom's \"drone expert\" reports that drones vision filters have +been upgraded to include the option of making all beings appear as harmless animals. +info: As always, all drone filters are togglable." From 0caa59b21ad34d04f5ec328e33ac6da3a116d96a Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 24 Apr 2016 20:26:24 +0200 Subject: [PATCH 129/228] First commit of this big PR These are the files with just tiny tweaks. Mostly modify an object's attackby so it does "return ..()" instead of "..()". If there are other things in this commit, the PR's description will explain them. --- code/datums/wires/airlock.dm | 2 +- code/game/area/areas.dm | 6 +- code/game/gamemodes/blob/theblob.dm | 8 +- .../gamemodes/changeling/powers/mutations.dm | 2 +- code/game/gamemodes/meteor/meteors.dm | 3 +- .../miniantags/abduction/abduction_gear.dm | 5 +- .../miniantags/abduction/machinery/console.dm | 2 +- .../abduction/machinery/dispenser.dm | 2 + .../gamemodes/miniantags/revenant/revenant.dm | 3 +- .../miniantags/revenant/revenant_abilities.dm | 2 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 4 +- .../shadowling/shadowling_abilities.dm | 2 +- code/game/gamemodes/wizard/artefact.dm | 4 +- code/game/gamemodes/wizard/soulstone.dm | 2 + code/game/gamemodes/wizard/spellbook.dm | 2 +- code/game/machinery/Sleeper.dm | 2 + code/game/machinery/ai_slipper.dm | 26 ++-- code/game/machinery/autolathe.dm | 11 +- code/game/machinery/buttons.dm | 10 +- code/game/machinery/camera/camera_assembly.dm | 2 +- code/game/machinery/cell_charger.dm | 14 ++- code/game/machinery/cloning.dm | 17 +-- code/game/machinery/computer/aifixer.dm | 3 +- code/game/machinery/computer/card.dm | 2 +- code/game/machinery/computer/cloning.dm | 7 +- .../game/machinery/computer/communications.dm | 3 +- code/game/machinery/computer/dna_console.dm | 3 +- code/game/machinery/computer/law.dm | 2 +- code/game/machinery/computer/medical.dm | 2 +- code/game/machinery/computer/message.dm | 4 +- code/game/machinery/computer/prisoner.dm | 9 +- code/game/machinery/computer/security.dm | 17 +-- .../machinery/computer/telecrystalconsoles.dm | 27 ++-- code/game/machinery/deployable.dm | 50 ++++---- code/game/machinery/dna_scanner.dm | 5 +- code/game/machinery/doppler_array.dm | 2 +- code/game/machinery/flasher.dm | 7 +- code/game/machinery/igniter.dm | 4 +- code/game/machinery/navbeacon.dm | 3 +- code/game/machinery/pipe/pipe_dispenser.dm | 2 +- .../machinery/porta_turret/portable_turret.dm | 116 +++++++----------- .../porta_turret/portable_turret_construct.dm | 6 +- .../porta_turret/portable_turret_cover.dm | 23 ++-- code/game/machinery/rechargestation.dm | 4 +- code/game/machinery/recycler.dm | 7 +- code/game/machinery/robot_fabricator.dm | 2 + code/game/machinery/slotmachine.dm | 12 +- code/game/machinery/spaceheater.dm | 2 +- code/game/machinery/suit_storage_unit.dm | 7 +- code/game/machinery/syndicatebeacon.dm | 5 +- code/game/machinery/syndicatebomb.dm | 2 +- .../telecomms/computers/logbrowser.dm | 5 +- .../telecomms/computers/telemonitor.dm | 5 +- .../telecomms/machine_interactions.dm | 10 +- code/game/mecha/equipment/mecha_equipment.dm | 8 +- code/game/mecha/equipment/weapons/weapons.dm | 4 +- code/game/mecha/mech_bay.dm | 4 +- code/game/mecha/mecha_parts.dm | 3 +- code/game/mecha/mecha_topic.dm | 3 +- code/game/mecha/mecha_wreckage.dm | 6 +- code/game/objects/effects/decals/cleanable.dm | 6 +- .../effects/effect_system/effects_foam.dm | 16 ++- code/game/objects/effects/glowshroom.dm | 7 +- code/game/objects/items.dm | 15 +-- code/game/objects/items/crayons.dm | 7 +- code/game/objects/items/devices/camera_bug.dm | 1 + .../objects/items/devices/chameleonproj.dm | 2 +- code/game/objects/items/devices/doorCharge.dm | 1 + code/game/objects/items/devices/flashlight.dm | 15 ++- .../objects/items/devices/geiger_counter.dm | 3 +- .../objects/items/devices/lightreplacer.dm | 10 +- .../objects/items/devices/pipe_painter.dm | 5 +- code/game/objects/items/devices/powersink.dm | 2 +- .../items/devices/radio/electropack.dm | 3 +- .../items/devices/radio/encryptionkey.dm | 5 - .../objects/items/devices/radio/headset.dm | 9 +- .../game/objects/items/devices/radio/radio.dm | 10 +- code/game/objects/items/devices/scanners.dm | 10 +- code/game/objects/items/nuke_tools.dm | 4 +- code/game/objects/items/shooting_range.dm | 4 +- code/game/objects/items/stacks/rods.dm | 7 +- .../game/objects/items/stacks/sheets/glass.dm | 6 +- .../objects/items/stacks/sheets/leather.dm | 2 +- .../game/objects/items/stacks/sheets/light.dm | 7 +- .../objects/items/stacks/sheets/mineral.dm | 2 +- code/game/objects/items/stacks/stack.dm | 2 +- code/game/objects/items/stacks/tiles/light.dm | 5 +- .../objects/items/stacks/tiles/tile_types.dm | 3 +- code/game/objects/items/weapons/RCD.dm | 8 +- code/game/objects/items/weapons/RPD.dm | 4 +- .../objects/items/weapons/airlock_painter.dm | 8 +- code/game/objects/items/weapons/cards_ids.dm | 5 +- .../objects/items/weapons/cigs_lighters.dm | 11 +- .../game/objects/items/weapons/clown_items.dm | 1 + code/game/objects/items/weapons/courtroom.dm | 2 +- code/game/objects/items/weapons/defib.dm | 11 +- code/game/objects/items/weapons/explosives.dm | 2 +- .../objects/items/weapons/extinguisher.dm | 7 +- .../objects/items/weapons/flamethrower.dm | 14 +-- .../items/weapons/grenades/chem_grenade.dm | 5 +- .../objects/items/weapons/grenades/grenade.dm | 21 +--- code/game/objects/items/weapons/handcuffs.dm | 2 + .../items/weapons/implants/implantcase.dm | 7 +- .../items/weapons/implants/implantchair.dm | 5 +- .../items/weapons/implants/implanter.dm | 3 +- .../items/weapons/implants/implantpad.dm | 6 +- .../objects/items/weapons/melee/energy.dm | 4 +- code/game/objects/items/weapons/melee/misc.dm | 2 +- code/game/objects/items/weapons/mop.dm | 5 +- code/game/objects/items/weapons/paiwire.dm | 20 ++- code/game/objects/items/weapons/shields.dm | 2 +- code/game/objects/items/weapons/signs.dm | 3 +- .../items/weapons/singularityhammer.dm | 7 +- .../objects/items/weapons/storage/lockbox.dm | 14 +-- .../objects/items/weapons/storage/storage.dm | 11 +- code/game/objects/items/weapons/stunbaton.dm | 5 +- .../objects/items/weapons/tanks/tank_types.dm | 7 +- .../game/objects/items/weapons/tanks/tanks.dm | 9 +- .../objects/items/weapons/tanks/watertank.dm | 9 +- code/game/objects/items/weapons/teleprod.dm | 3 +- code/game/objects/items/weapons/tools.dm | 7 +- code/game/objects/items/weapons/twohanded.dm | 21 ++-- code/game/objects/items/weapons/weaponry.dm | 3 +- code/game/objects/structures.dm | 3 +- code/game/objects/structures/artstuff.dm | 12 +- code/game/objects/structures/barsigns.dm | 13 +- .../objects/structures/beds_chairs/bed.dm | 2 + .../objects/structures/beds_chairs/chair.dm | 2 + code/game/objects/structures/bedsheet_bin.dm | 3 +- .../structures/crates_lockers/crates/bins.dm | 2 +- .../structures/crates_lockers/crates/large.dm | 2 +- code/game/objects/structures/flora.dm | 2 +- code/game/objects/structures/girders.dm | 4 +- code/game/objects/structures/janicart.dm | 2 + code/game/objects/structures/kitchen_spike.dm | 10 +- code/game/objects/structures/mop_bucket.dm | 4 +- code/game/objects/structures/morgue.dm | 6 +- code/game/objects/structures/musician.dm | 2 +- code/game/objects/structures/noticeboard.dm | 2 + code/game/objects/structures/plasticflaps.dm | 4 - code/game/objects/structures/reflector.dm | 6 +- code/game/objects/structures/safe.dm | 7 +- code/game/objects/structures/table_frames.dm | 22 ++-- .../game/objects/structures/tank_dispenser.dm | 4 +- .../structures/transit_tubes/transit_tube.dm | 4 +- .../transit_tube_construction.dm | 5 +- .../transit_tubes/transit_tube_pod.dm | 2 + .../objects/structures/windoor_assembly.dm | 4 +- code/game/turfs/simulated/walls.dm | 2 +- code/modules/admin/verbs/debug.dm | 4 +- .../atmospherics/machinery/other/meter.dm | 2 +- .../atmospherics/machinery/pipes/pipes.dm | 8 +- .../machinery/portable/scrubber.dm | 2 +- .../awaymissions/mission_code/Cabin.dm | 2 +- code/modules/detectivework/evidence.dm | 5 +- .../detectivework/footprints_and_rag.dm | 1 + .../drinks/drinks/drinkingglass.dm | 4 +- .../kitchen machinery/food_cart.dm | 2 +- .../food&drinks/kitchen machinery/gibber.dm | 15 ++- .../kitchen machinery/icecream_vat.dm | 2 +- .../kitchen machinery/monkeyrecycler.dm | 12 +- code/modules/games/cards.dm | 1 + code/modules/holodeck/items.dm | 4 - code/modules/hydroponics/hydroponics.dm | 14 ++- code/modules/library/lib_items.dm | 4 +- code/modules/library/lib_machines.dm | 6 +- code/modules/mining/abandoned_crates.dm | 7 +- code/modules/mining/laborcamp/laborstacker.dm | 7 +- code/modules/mining/satchel_ore_boxdm.dm | 9 +- code/modules/mob/interactive.dm | 4 +- .../mob/living/carbon/carbon_defense.dm | 2 +- .../living/carbon/human/human_attackhand.dm | 3 - .../mob/living/carbon/human/human_defense.dm | 2 +- .../mob/living/carbon/human/species.dm | 12 +- .../modules/mob/living/silicon/robot/robot.dm | 13 +- .../mob/living/simple_animal/bot/medbot.dm | 2 +- .../simple_animal/friendly/farm_animals.dm | 6 +- .../mob/living/simple_animal/simple_animal.dm | 7 -- code/modules/paperwork/filingcabinet.dm | 4 +- code/modules/paperwork/handlabeler.dm | 2 - code/modules/paperwork/photocopier.dm | 2 + code/modules/paperwork/photography.dm | 6 +- code/modules/power/apc.dm | 2 - code/modules/power/gravitygenerator.dm | 14 ++- code/modules/power/port_gen.dm | 8 +- code/modules/power/power.dm | 11 +- code/modules/power/singularity/emitter.dm | 13 +- .../power/singularity/field_generator.dm | 2 +- code/modules/power/singularity/generator.dm | 6 +- .../particle_accelerator.dm | 2 +- code/modules/power/smes.dm | 4 + code/modules/power/terminal.dm | 5 +- code/modules/power/tesla/coil.dm | 10 +- code/modules/power/tracker.dm | 4 +- .../projectiles/guns/grenade_launcher.dm | 9 +- .../projectiles/guns/projectile/saw.dm | 1 + code/modules/projectiles/projectile/energy.dm | 10 +- .../reagents/chemistry/machinery/pandemic.dm | 23 ++-- .../chemistry/machinery/reagentgrinder.dm | 3 +- .../chemistry/reagents/toxin_reagents.dm | 5 +- .../reagents/reagent_containers/glass.dm | 35 ------ .../reagents/reagent_containers/spray.dm | 6 +- code/modules/reagents/reagent_dispenser.dm | 4 +- code/modules/telesci/telesci_computer.dm | 2 +- code/modules/vehicles/vehicle.dm | 3 +- icons/obj/doors/door_fire2.dmi | Bin 41754 -> 0 bytes tgstation.dme | 1 + 207 files changed, 672 insertions(+), 758 deletions(-) delete mode 100644 icons/obj/doors/door_fire2.dmi diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 2644fec3b9c..4a37ef1503a 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -19,7 +19,7 @@ var/obj/machinery/door/airlock/A = holder if(!istype(user, /mob/living/silicon) && A.isElectrified() && A.shock(user, 100)) return FALSE - if(A.p_open) + if(A.panel_open) return TRUE /datum/wires/airlock/get_status() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 2f54af4a901..d556f2a5b2e 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -113,7 +113,7 @@ if (!( RA.fire )) RA.set_fire_alarm_effect() for(var/obj/machinery/door/firedoor/D in RA) - if(!D.blocked) + if(!D.welded) if(D.operating) D.nextstate = CLOSED else if(!D.density) @@ -139,7 +139,7 @@ RA.mouse_opacity = 0 RA.updateicon() for(var/obj/machinery/door/firedoor/D in RA) - if(!D.blocked) + if(!D.welded) if(D.operating) D.nextstate = OPEN else if(D.density) @@ -214,7 +214,7 @@ src.mouse_opacity = 0 src.updateicon() for(var/obj/machinery/door/firedoor/D in src) - if(!D.blocked) + if(!D.welded) if(D.operating) D.nextstate = OPEN else if(D.density) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index c7244e547a6..1bac15b4993 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -213,14 +213,14 @@ take_damage(Proj.damage, Proj.damage_type, Proj) return 0 -/obj/effect/blob/attackby(obj/item/weapon/W, mob/living/user, params) +/obj/effect/blob/attacked_by(obj/item/I, mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) - visible_message("[user] has attacked the [src.name] with \the [W]!") - if(W.damtype == BURN) + visible_message("[user] has attacked the [src.name] with \the [I]!") + if(I.damtype == BURN) playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - take_damage(W.force, W.damtype, user) + take_damage(I.force, I.damtype, user) /obj/effect/blob/attack_animal(mob/living/simple_animal/M) if("blob" in M.faction) //sorry, but you can't kill the blob as a blobbernaut diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index c75faf9cf4b..fddcbfa6d66 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -165,7 +165,7 @@ return if(istype(target, /obj/structure/table)) var/obj/structure/table/T = target - T.table_destroy(1) + T.table_destroy() else if(istype(target, /obj/machinery/computer)) var/obj/machinery/computer/C = target diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 854ab2d19a1..85508dfdaea 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -162,7 +162,8 @@ make_debris() qdel(src) return - ..() + else + return ..() /obj/effect/meteor/proc/make_debris() for(var/throws = dropamt, throws > 0, throws--) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index ba2f6335045..9a4c69e1fbb 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -590,7 +590,10 @@ Congratulations! You are now trained for xenobiology research!"} icon_state = "bed" can_buckle = 1 buckle_lying = 1 - deconstructable = 0 + flags = NODECONSTRUCT + +/obj/structure/table/optable/abductor/table_destroy() + return //can't destroy the abductor's only optable. /obj/structure/bed/abductor name = "resting contraption" diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index d0becf1a888..a2f029725a3 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -195,7 +195,7 @@ user << "You link the vest to the console." vest = V else - ..() + return ..() /obj/machinery/abductor/console/proc/Dispense(item,cost=1) if(experiment && experiment.points >= cost) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm index aacf75770e9..5a8eb481921 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm @@ -66,6 +66,8 @@ for(var/i=1,i<=gland_colors.len,i++) if(gland_types[i] == W.type) amounts[i]++ + else + return ..() /obj/machinery/abductor/gland_dispenser/Topic(href, href_list) if(..()) diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 84664e07815..ac3816d8a0d 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -174,7 +174,8 @@ spawn(30) inhibited = 0 update_action_buttons_icon() - ..() + else + return ..() /mob/living/simple_animal/revenant/adjustHealth(amount) if(!revealed) diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 9e28fb9b116..b311c1e7669 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -260,7 +260,7 @@ for(var/obj/machinery/dna_scannernew/dna in T.contents) dna.open_machine() for(var/obj/structure/window/window in T.contents) - window.hit(rand(30,80)) + window.take_damage(rand(30,80)) if(window && window.fulltile) PoolOrNew(/obj/effect/overlay/temp/revenant/cracks, window.loc) for(var/obj/machinery/light/light in T.contents) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 2dee631f659..fe266c02cbf 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -109,6 +109,7 @@ var/bomb_set deconstruction_state = NUKESTATE_CORE_EXPOSED update_icon() SSobj.processing += core + return if(NUKESTATE_CORE_EXPOSED) if(istype(I, /obj/item/nuke_core_container)) var/obj/item/nuke_core_container/core_box = I @@ -137,8 +138,7 @@ var/bomb_set else user << "You need more metal to do that!" return - else - ..() + return ..() /obj/machinery/nuclearbomb/proc/get_nuke_state() if(timing < 0) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 9123a969bee..cefa07ddb4a 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -460,7 +460,7 @@ sp.start() S.Weaken(6) for(var/obj/structure/window/W in T.contents) - W.hit(rand(80, 100)) + W.take_damage(rand(80, 100)) /obj/effect/proc_holder/spell/aoe_turf/drain_life //Deals stamina and oxygen damage to nearby humans and heals the shadowling. On a short cooldown because of the small range and situational usefulness diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index a3f69181f4a..986f9357519 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -62,7 +62,8 @@ user.visible_message("[user] seals \the [src] with \the [I].") qdel(src) return - ..() + else + return ..() /obj/item/weapon/veilrender/vealrender name = "veal render" @@ -522,7 +523,6 @@ var/global/list/multiverse = list() link = I user << "You attach [I] to the doll." update_targets() - ..() /obj/item/voodoo/check_eye(mob/user) if(loc != user) diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 161e329fa57..09e306ed31a 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -100,6 +100,8 @@ if(istype(O, /obj/item/device/soulstone)) var/obj/item/device/soulstone/SS = O SS.transfer_soul("CONSTRUCT",src,user) + else + return ..() ////////////////////////////Proc for moving soul in and out off stone////////////////////////////////////// diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 393877d947c..d685bd0ea9b 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -514,7 +514,7 @@ if(!isnull(CT.limit)) CT.limit++ qdel(O) - if(istype(O, /obj/item/weapon/antag_spawner/slaughter_demon)) + else if(istype(O, /obj/item/weapon/antag_spawner/slaughter_demon)) user << "On second thought, maybe summoning a demon is a bad idea. You refund your points." uses++ for(var/datum/spellbook_entry/item/bloodbottle/BB in entries) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index f8669e5b8ea..b2d9233a0ec 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -105,6 +105,8 @@ return if(default_deconstruction_crowbar(I)) return + return ..() + /obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 59ee2b315cd..acf294fd25c 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -31,10 +31,10 @@ /obj/machinery/ai_slipper/attackby(obj/item/weapon/W, mob/user, params) if(stat & (NOPOWER|BROKEN)) return - if (istype(user, /mob/living/silicon)) + if (issilicon(user)) return src.attack_hand(user) else // trying to unlock the interface - if (src.allowed(usr)) + if (src.allowed(user)) locked = !locked user << "You [ locked ? "lock" : "unlock"] the device." if (locked) @@ -43,7 +43,7 @@ user << browse(null, "window=ai_slipper") else if (user.machine==src) - src.attack_hand(usr) + src.attack_hand(user) else user << "Access denied." @@ -55,31 +55,23 @@ if(stat & (NOPOWER|BROKEN)) return if ( (get_dist(src, user) > 1 )) - if (!(istype(user, /mob/living/silicon) || IsAdminGhost(user))) + if (!(issilicon(user) || IsAdminGhost(user))) user << text("Too far away.") user.unset_machine() user << browse(null, "window=ai_slipper") return user.set_machine(src) - var/loc = src.loc - if (istype(loc, /turf)) - loc = loc:loc - if (!istype(loc, /area)) - user << text("Turret badly positioned - loc.loc is [].", loc) - return - var/area/area = loc - var/t = "AI Liquid Dispenser ([format_text(area.name)])
      " + var/area/A = get_area(src) + var/t = "AI Liquid Dispenser ([format_text(A.name)])
      " - if(src.locked && (!(istype(user, /mob/living/silicon) || IsAdminGhost(user)))) + if(locked && (!(issilicon(user) || IsAdminGhost(user)))) t += "(Swipe ID card to unlock control panel.)
      " else - t += text("Dispenser [] - []?
      \n", src.disabled?"deactivated":"activated", src, src.disabled?"Enable":"Disable") - t += text("Uses Left: [uses]. Activate the dispenser?
      \n") - + t += "Dispenser [disabled?"deactivated":"activated"] - [disabled?"Enable":"Disable"]?
      \n" + t += "Uses Left: [uses]. Activate the dispenser?
      \n" user << browse(t, "window=computer;size=575x450") onclose(user, "computer") - return /obj/machinery/ai_slipper/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 1f64778f662..5e03d4b9dc3 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -89,7 +89,8 @@ popup.set_content(dat) popup.open() - return +/obj/machinery/autolathe/deconstruction() + materials.retrieve_all() /obj/machinery/autolathe/attackby(obj/item/O, mob/user, params) if (busy) @@ -105,12 +106,15 @@ if(panel_open) if(istype(O, /obj/item/weapon/crowbar)) - materials.retrieve_all() default_deconstruction_crowbar(O) return 1 else if(is_wire_tool(O)) wires.interact(user) return 1 + + if(user.a_intent == "harm") //so we can hit the machine + return ..() + if(stat) return 1 @@ -124,7 +128,7 @@ files.AddDesign2Known(D.blueprint) busy = 0 - return + return 1 var/material_amount = materials.get_item_material_amount(O) if(!material_amount) @@ -153,6 +157,7 @@ qdel(O) busy = 0 src.updateUsrDialog() + return 1 /obj/machinery/autolathe/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 1a62efe579e..3cf587ceb9f 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -25,7 +25,7 @@ panel_open = 1 update_icon() - + if(!built && !device && device_type) device = new device_type(src) @@ -56,9 +56,6 @@ icon_state = skin /obj/machinery/button/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/device/detective_scanner)) - return - if(istype(W, /obj/item/weapon/screwdriver)) if(panel_open || allowed(user)) default_deconstruction_screwdriver(user, "button-open", "[skin]",W) @@ -101,7 +98,10 @@ update_icon() return - return src.attack_hand(user) + if(user.a_intent != "harm" && !(W.flags & NOBLUDGEON)) + return src.attack_hand(user) + else + return ..() /obj/machinery/button/emag_act(mob/user) req_access = list() diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 970c174a025..63296827e2c 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -120,7 +120,7 @@ upgrades -= U return - ..() + return ..() /obj/machinery/camera_assembly/proc/weld(obj/item/weapon/weldingtool/WT, mob/living/user) if(busy) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 13ed9276e25..51cebe67da7 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -33,10 +33,13 @@ user << "Current charge: [round(charging.percent(), 1)]%" /obj/machinery/cell_charger/attackby(obj/item/weapon/W, mob/user, params) - if(stat & BROKEN) - return - - if(istype(W, /obj/item/weapon/stock_parts/cell) && anchored) + if(istype(W, /obj/item/weapon/stock_parts/cell)) + if(stat & BROKEN) + user << "[src] is broken!" + return + if(!anchored) + user << "[src] isn't attached to the ground!" + return if(charging) user << "There is already a cell in the charger!" return @@ -63,6 +66,9 @@ anchored = !anchored user << "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground" playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + else + return ..() + /obj/machinery/cell_charger/proc/removecell() charging.updateicon() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index a6d8287c1db..3efd30fa8b8 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -249,22 +249,23 @@ if(exchange_parts(user, W)) return - default_deconstruction_crowbar(W) + if(default_deconstruction_crowbar(W)) + return - if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (!src.check_access(W)) + if (W.GetID()) + if (!check_access(W)) user << "Access Denied." return - if ((!src.locked) || (isnull(src.occupant))) + if (!locked || !occupant) return - if ((src.occupant.health < -20) && (src.occupant.stat != 2)) - user << "Access Refused." + if (occupant.health < -20 && occupant.stat != DEAD) + user << "Access Refused. Patient status still unstable." return else - src.locked = 0 + locked = 0 user << "System unlocked." else - ..() + return ..() /obj/machinery/clonepod/emag_act(mob/user) if (isnull(src.occupant)) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 0ea426b4aee..69c53cf517b 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -14,9 +14,8 @@ user << "The screws on [name]'s screen won't budge." else user << "The screws on [name]'s screen won't budge and it emits a warning beep." - return else - ..() + return ..() /obj/machinery/computer/aifixer/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index d976f97f7fd..df02f37b5cb 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -65,7 +65,7 @@ var/time_last_changed_position = 0 idcard.loc = src modify = idcard else - ..() + return ..() //Check if you can't open a new position for a certain job /obj/machinery/computer/card/proc/job_blacklisted(jobtitle) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 0d3b220a533..7bd87b7a574 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -74,18 +74,17 @@ return null /obj/machinery/computer/cloning/attackby(obj/item/W, mob/user, params) - if (istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES + if(istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES if (!src.diskette) if(!user.drop_item()) - return ..() + return W.loc = src src.diskette = W user << "You insert [W]." src.updateUsrDialog() return else - ..() - return + return ..() /obj/machinery/computer/cloning/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 7f9d50fd667..e2a77542cee 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -325,8 +325,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if(istype(I, /obj/item/weapon/card/id)) attack_hand(user) else - ..() - return + return ..() /obj/machinery/computer/communications/emag_act(mob/user) if(!emagged) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index c887b428be7..e2a29dfe536 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -49,8 +49,7 @@ src.updateUsrDialog() return else - ..() - return + return ..() /obj/machinery/computer/scan_consolenew/New() ..() diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 58f61a090cd..292fc7163b6 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -23,7 +23,7 @@ return M.install(current.laws, user) else - ..() + return ..() /obj/machinery/computer/upload/proc/can_upload_to(mob/living/silicon/S) if(S.stat == DEAD || S.syndicate) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 2f9bfbbe42d..b3e94a26be5 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -28,7 +28,7 @@ scan = O user << "You insert [O]." else - ..() + return ..() /obj/machinery/computer/med_data/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index a67091a4cad..cab29214d2e 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -34,8 +34,8 @@ if(istype(O, /obj/item/weapon/screwdriver) && emagged) //Stops people from just unscrewing the monitor and putting it back to get the console working again. user << "It is too hot to mess with!" - return - ..() + else + return ..() /obj/machinery/computer/message_monitor/emag_act(mob/user) if(!emagged) diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index f4dc2ace5de..ab5a89b97e9 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -23,7 +23,7 @@ dat += "
      Unlock Console" else if(screen == 1) dat += "

      Prisoner ID Management

      " - if(istype(inserted_id)) + if(inserted_id) dat += text("[inserted_id]
      ") dat += text("Collected Points: [inserted_id.points]. Reset.
      ") dat += text("Card goal: [inserted_id.goal]. Set
      ") @@ -77,7 +77,8 @@ /obj/machinery/computer/prisoner/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/card/id)) return attack_hand(user) - ..() + else + return ..() /obj/machinery/computer/prisoner/process() if(!..()) @@ -92,7 +93,7 @@ usr.set_machine(src) if(href_list["id"]) - if(href_list["id"] =="insert" && !istype(inserted_id)) + if(href_list["id"] =="insert" && !inserted_id) var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand() if(istype(I)) if(!usr.drop_item()) @@ -100,7 +101,7 @@ I.loc = src inserted_id = I else usr << "No valid ID." - else if(istype(inserted_id)) + else if(inserted_id) switch(href_list["id"]) if("eject") inserted_id.loc = get_turf(src) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 194c9b71f69..a1bf31d718e 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -25,14 +25,17 @@ /obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/weapon/card/id) && !scan) - if(!user.drop_item()) - return - O.loc = src - scan = O - user << "You insert [O]." + if(istype(O, /obj/item/weapon/card/id)) + if(!scan) + if(!user.drop_item()) + return + O.loc = src + scan = O + user << "You insert [O]." + else + user << "There's already an ID card in the console." else - ..() + return ..() //Someone needs to break down the dat += into chunks instead of long ass lines. /obj/machinery/computer/secure_data/attack_hand(mob/user) diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index f778b374959..67d4aebd8db 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -29,21 +29,20 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F name = "[name] [rand(1,999)]" /obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item)) - if(uplinkholder) - user << "The [src] already has an uplink in it." + if(uplinkholder) + user << "The [src] already has an uplink in it." + return + if(O.hidden_uplink) + var/obj/item/I = user.get_active_hand() + if(!user.drop_item()) return - if(O.hidden_uplink) - var/obj/item/I = user.get_active_hand() - if(!user.drop_item()) - return - uplinkholder = I - I.loc = src - I.add_fingerprint(user) - update_icon() - updateUsrDialog() - else - user << "The [O] doesn't appear to be an uplink..." + uplinkholder = I + I.loc = src + I.add_fingerprint(user) + update_icon() + updateUsrDialog() + else + user << "The [O] doesn't appear to be an uplink..." /obj/machinery/computer/telecrystals/uplinker/update_icon() ..() diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index b042ffea4ed..10ecad63863 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -21,14 +21,22 @@ var/debris_type -/obj/structure/barricade/proc/take_damage(damage, leave_debris=1, message) +/obj/structure/barricade/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + damage = 0 health -= damage if(health <= 0) - if(message) - visible_message(message) - else - visible_message("\The [src] is smashed apart!") - if(leave_debris && debris_type) + if(debris_type) new debris_type(get_turf(src), 3) qdel(src) @@ -43,7 +51,7 @@ take_damage(M.melee_damage_upper) /obj/structure/barricade/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == "help" && material == METAL) + if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent != "harm" && material == METAL) var/obj/item/weapon/weldingtool/WT = I if(health < maxhealth) if(WT.remove_fuel(0,user)) @@ -51,31 +59,28 @@ playsound(loc, 'sound/items/Welder.ogg', 40, 1) if(do_after(user, 40/I.toolspeed, target = src)) health = Clamp(health + 20, 0, maxhealth) - return - else - user.changeNext_move(CLICK_CD_MELEE) - visible_message("[user] hits [src] with [I]!", "You hit [src] with [I]!") - take_damage(I.force) - user.do_attack_animation(src) + return ..() -/obj/structure/barricade/bullet_act(var/obj/item/projectile/P) - if(P) - ..() - take_damage(P.damage*ranged_damage_modifier) - visible_message("\The [src] is hit by [P]!") + +/obj/structure/barricade/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force) + +/obj/structure/barricade/bullet_act(obj/item/projectile/P) + . = ..() + visible_message("\The [src] is hit by [P]!") + take_damage(P.damage*ranged_damage_modifier) /obj/structure/barricade/ex_act(severity, target) switch(severity) if(1) - visible_message("\The [src] is blown apart!") qdel(src) if(2) - take_damage(25, message = "\The [src] is blown apart!") + take_damage(25, BRUTE, 0) /obj/structure/barricade/blob_act() - take_damage(25, leave_debris = 0, message = "The blob eats through \the [src]!") - + take_damage(25, BRUTE, 0) /obj/structure/barricade/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff. if(height==0) @@ -104,6 +109,7 @@ icon = 'icons/obj/structures.dmi' icon_state = "woodenbarricade" material = WOOD + debris_type = /obj/item/stack/sheet/mineral/wood /obj/structure/barricade/sandbags diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 2651ed274ed..ed656b1a1df 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -159,9 +159,10 @@ return var/mob/M = G.affecting - M.loc = loc - user.stop_pulling() + M.forceMove(loc) qdel(G) + return + return ..() /obj/machinery/dna_scannernew/attack_hand(mob/user) if(..(user,1,0)) //don't set the machine, since there's no dialog diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 5d3d10f28fc..ee6302f4fef 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -34,7 +34,7 @@ var/list/doppler_arrays = list() user << "You unfasten [src]." playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) else - ..() + return ..() /obj/machinery/doppler_array/verb/rotate() set name = "Rotate Tachyon-doppler Dish" diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 0f8ab19d8df..016b330c7d2 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -48,6 +48,7 @@ //Don't want to render prison breaks impossible /obj/machinery/flasher/attackby(obj/item/weapon/W, mob/user, params) + add_fingerprint(user) if (istype(W, /obj/item/weapon/wirecutters)) if (bulb) user.visible_message("[user] begins to disconnect [src]'s flashbulb.", "You begin to disconnect [src]'s flashbulb...") @@ -82,8 +83,8 @@ qdel(src) else user << "Remove a flashbulb from [src] first!" - - add_fingerprint(user) + else + return ..() //Let the AI trigger them directly. /obj/machinery/flasher/attack_ai() @@ -159,7 +160,7 @@ remove_from_proximity_list(src, range) else - ..() + return ..() /obj/item/wallframe/flasher diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 20c5308fe67..36034138b6f 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -79,8 +79,6 @@ // src.sd_SetLuminosity(0) /obj/machinery/sparker/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/device/detective_scanner)) - return if (istype(W, /obj/item/weapon/screwdriver)) add_fingerprint(user) src.disable = !src.disable @@ -93,6 +91,8 @@ icon_state = "[base_state]" else icon_state = "[base_state]-p" + else + return ..() /obj/machinery/sparker/attack_ai() if (anchored) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 824d7e4fd5e..147c97324b7 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -97,7 +97,8 @@ updateDialog() else user << "You must open the cover first!" - return + else + return ..() /obj/machinery/navbeacon/attack_ai(mob/user) interact(user, 1) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 64be7f512b5..713e8580cff 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -175,7 +175,7 @@ Nah return C.add_fingerprint(usr) - C.update() + C.update_icon() wait = 1 spawn(15) wait = 0 diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 768f3cb6792..d015bb1a975 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -301,7 +301,7 @@ invisibility = 0 qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover. - else if(istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda)) + else if(I.GetID()) //Behavior lock/unlock mangement if(allowed(user)) locked = !locked @@ -313,41 +313,12 @@ M.buffer = src user << "You add [src] to multitool buffer." else - //if the turret was attacked with the intention of harming it: - user.changeNext_move(CLICK_CD_MELEE) - take_damage(I.force * 0.5) - if(I.force * 0.5 > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off - if(!attacked && !emagged) - attacked = 1 - spawn() - sleep(60) - attacked = 0 - ..() + return ..() -/obj/machinery/porta_turret/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if(M.melee_damage_upper == 0 || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) - return - if(!(stat & BROKEN)) - visible_message("[M] [M.attacktext] [src]!") - add_logs(M, src, "attacked") - take_damage(M.melee_damage_upper) - else - M << "That object is useless to you." - return - -/obj/machinery/porta_turret/attack_alien(mob/living/carbon/alien/humanoid/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if(!(stat & BROKEN)) - playsound(src.loc, 'sound/weapons/slash.ogg', 25, 1, -1) - visible_message("[M] has slashed at [src]!") - add_logs(M, src, "attacked") - take_damage(15) - else - M << "\green That object is useless to you." - return +/obj/machinery/porta_turret/attacked_by(obj/item/I, mob/user) + if(I.force) + user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") + take_damage(I.force * 0.5, I.damtype) /obj/machinery/porta_turret/emag_act(mob/user) @@ -361,37 +332,20 @@ sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit on = 1 //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here -/obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj) - if(on) - if(!attacked && !emagged) - attacked = 1 - spawn() - sleep(60) - attacked = 0 - - var/damage_dealt = 0 - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - damage_dealt = Proj.damage - - ..() - - if(damage_dealt) - if(prob(45)) - spark_system.start() - take_damage(damage_dealt) - - if(lasercolor == "b" && disabled == 0) - if(istype(Proj, /obj/item/projectile/beam/lasertag/redtag)) - disabled = 1 - qdel(Proj) - sleep(100) - disabled = 0 - if(lasercolor == "r" && disabled == 0) - if(istype(Proj, /obj/item/projectile/beam/lasertag/bluetag)) - disabled = 1 - qdel(Proj) - sleep(100) - disabled = 0 +/obj/machinery/porta_turret/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) + if(!disabled) + if(lasercolor == "b") + if(istype(P, /obj/item/projectile/beam/lasertag/redtag)) + disabled = 1 + spawn(100) + disabled = 0 + else if(lasercolor == "r") + if(istype(P, /obj/item/projectile/beam/lasertag/bluetag)) + disabled = 1 + spawn(100) + disabled = 0 /obj/machinery/porta_turret/emp_act(severity) @@ -417,10 +371,30 @@ qdel(src) -/obj/machinery/porta_turret/proc/take_damage(damage) - health -= damage - if(health <= 0) - die() +/obj/machinery/porta_turret/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + else + return + if(!(stat & BROKEN)) + if(damage > 1) //if the force of impact dealt at least 1 damage, the turret gets pissed off + if(prob(30)) + spark_system.start() + if(on && !attacked && !emagged) + attacked = 1 + spawn(60) + attacked = 0 + health -= damage + if(health <= 0) + die() /obj/machinery/porta_turret/proc/die() //called when the turret dies, ie, health <= 0 health = 0 @@ -606,7 +580,7 @@ if(!(faction in target.faction)) return 0 return 1 - + /obj/machinery/porta_turret/proc/target(atom/movable/target) if(disabled) return diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index 9cc8e06148e..4e92cf434d9 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -73,7 +73,7 @@ playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1) user << "You start to remove the turret's interior metal armor..." if(do_after(user, 20/I.toolspeed, target = src)) - if(!WT.isOn() || !WT.remove_fuel(5, user)) + if(!WT.isOn() || !WT.remove_fuel(5, user)) return build_step = PTURRET_BOLTED user << "You remove the turret's interior metal armor." @@ -136,7 +136,7 @@ if(PTURRET_START_EXTERNAL_ARMOUR) if(istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = I - if(!WT.isOn()) + if(!WT.isOn()) return if(WT.get_fuel() < 5) user << "You need more fuel to complete this task!" @@ -174,7 +174,7 @@ finish_name = t return - ..() + return ..() /obj/machinery/porta_turret_construct/attack_hand(mob/user) diff --git a/code/game/machinery/porta_turret/portable_turret_cover.dm b/code/game/machinery/porta_turret/portable_turret_cover.dm index d96b9dce955..a65694405a7 100644 --- a/code/game/machinery/porta_turret/portable_turret_cover.dm +++ b/code/game/machinery/porta_turret/portable_turret_cover.dm @@ -35,7 +35,7 @@ /obj/machinery/porta_turret_cover/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/wrench) && !parent_turret.on) - if(parent_turret.raised) + if(parent_turret.raised) return if(!parent_turret.anchored) @@ -50,7 +50,7 @@ parent_turret.invisibility = 0 qdel(src) - else if(istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda)) + else if(I.GetID()) if(parent_turret.allowed(user)) parent_turret.locked = !parent_turret.locked user << "Controls are now [parent_turret.locked ? "locked" : "unlocked"]." @@ -62,17 +62,10 @@ M.buffer = parent_turret user << "You add [parent_turret] to multitool buffer." else - user.changeNext_move(CLICK_CD_MELEE) - parent_turret.health -= I.force * 0.5 - if(parent_turret.health <= 0) - parent_turret.die() - if(I.force * 0.5 > 2) - if(!parent_turret.attacked && !parent_turret.emagged) - parent_turret.attacked = 1 - spawn() - sleep(30) - parent_turret.attacked = 0 - ..() + return ..() + +/obj/machinery/porta_turret_cover/attacked_by(obj/item/I, mob/user) + parent_turret.attacked_by(I, user) /obj/machinery/porta_turret_cover/can_be_overridden() . = 0 @@ -83,5 +76,5 @@ visible_message("[parent_turret] hums oddly...") parent_turret.emagged = 1 parent_turret.on = 0 - sleep(40) - parent_turret.on = 1 + spawn(40) + parent_turret.on = 1 diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index f1d43782606..ae9a16c729d 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -79,7 +79,9 @@ if(default_pry_open(P)) return - default_deconstruction_crowbar(P) + if(default_deconstruction_crowbar(P)) + return + return ..() /obj/machinery/recharge_station/attack_hand(mob/user) if(..(user,1,set_machine = 0)) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 9ce80ec1848..542975781f3 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -62,10 +62,9 @@ var/const/SAFETY_COOLDOWN = 100 if(default_unfasten_wrench(user, I)) return - default_deconstruction_crowbar(I) - ..() - add_fingerprint(user) - return + if(default_deconstruction_crowbar(I)) + return + return ..() /obj/machinery/recycler/emag_act(mob/user) if(!emagged) diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index c0571ef5a20..eed9fd73a1f 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -33,6 +33,8 @@ updateDialog() else user << "\The [src] is full." + else + return ..() /obj/machinery/robotic_fabricator/power_change() if (powered()) diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index b5a6944e7d2..6322b95731d 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -49,6 +49,11 @@ coinvalues["[cointype]"] = C.value qdel(C) +/obj/machinery/computer/slot_machine/Destroy() + if(balance) + give_coins(balance) + return ..() + /obj/machinery/computer/slot_machine/process() . = ..() //Sanity checks. if(!.) @@ -91,11 +96,8 @@ user << "You insert a [C.cmineral] coin into [src]'s slot!" balance += C.value qdel(C) - - return - - else if(!balance) //to prevent coins from magically disappearing - ..() + else + return ..() /obj/machinery/computer/slot_machine/emag_act() if(!emagged) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index abb4b814cc3..b164bc08c20 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -164,7 +164,7 @@ else if(exchange_parts(user, I) || default_deconstruction_crowbar(I)) return else - ..() + return ..() /obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = physical_state) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 85b03b73365..0ec0692b688 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -275,7 +275,7 @@ if(!user.drop_item()) return mask = I - else if(istype(I, /obj/item)) + else if(storage) user << "The auxiliary storage compartment is full!" return @@ -285,6 +285,8 @@ I.loc = src visible_message("[user] inserts [I] into [src]", "You load [I] into [src].") + update_icon() + return if(panel_open && is_wire_tool(I)) wires.interact(user) @@ -295,8 +297,7 @@ dump_contents() return - update_icon() - return + return ..() /obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state) diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index d8fce89f1ea..c0658a1fdc5 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -172,9 +172,8 @@ anchored = 1 user << "You screw the beacon to the floor and attach the cable." return - ..() - return - + else + return ..() /obj/machinery/power/singularity_beacon/Destroy() if(active) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index a625b89489d..4f21655ab08 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -121,7 +121,7 @@ qdel(src) return else - ..() + return ..() /obj/machinery/syndicatebomb/attack_hand(mob/user) interact(user) diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm index 6fe32ddae80..0485e45950e 100644 --- a/code/game/machinery/telecomms/computers/logbrowser.dm +++ b/code/game/machinery/telecomms/computers/logbrowser.dm @@ -221,6 +221,5 @@ return /obj/machinery/computer/telecomms/server/attackby() - ..() - src.updateUsrDialog() - return \ No newline at end of file + . = ..() + updateUsrDialog() diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index f76a0ca641b..f7ed78a1315 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -123,6 +123,5 @@ return /obj/machinery/computer/telecomms/monitor/attackby() - ..() - src.updateUsrDialog() - return \ No newline at end of file + . = ..() + updateUsrDialog() \ No newline at end of file diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 64bcd14a150..fcc819ba72a 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -21,17 +21,19 @@ icon_open = "[initial(icon_state)]_o_off" if(default_deconstruction_screwdriver(user, icon_open, icon_closed, P)) - updateUsrDialog() return - if(exchange_parts(user, P)) + else if(exchange_parts(user, P)) return // Using a multitool lets you access the receiver's interface - if(istype(P, /obj/item/device/multitool)) + else if(istype(P, /obj/item/device/multitool)) attack_hand(user) - default_deconstruction_crowbar(P) + else if(default_deconstruction_crowbar(P)) + return + else + return ..() /obj/machinery/telecomms/attack_ai(mob/user) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 7422197d310..7971b6966ea 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -16,10 +16,6 @@ reliability = 1000 var/salvageable = 1 -/obj/item/mecha_parts/mecha_equipment/New() - ..() - return - /obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page() if(chassis) send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) @@ -82,8 +78,8 @@ /obj/item/mecha_parts/mecha_equipment/proc/start_cooldown() set_ready_state(0) chassis.use_power(energy_drain) - sleep(equip_cooldown) - set_ready_state(1) + spawn(equip_cooldown) + set_ready_state(1) /obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target) if(!chassis) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 4aafd8e23eb..c793887e424 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -62,8 +62,8 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown() set_ready_state(0) chassis.use_power(energy_drain*get_shot_amount()) - sleep(equip_cooldown) - set_ready_state(1) + spawn(equip_cooldown) + set_ready_state(1) /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser equip_cooldown = 8 diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 6a329d7dc02..0263310d9b0 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -73,7 +73,9 @@ if(exchange_parts(user, I)) return - default_deconstruction_crowbar(I) + if(default_deconstruction_crowbar(I)) + return + return ..() /obj/machinery/computer/mech_bay_power_console name = "mech bay power control console" diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 3a61c4f108b..c14ddd5470c 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -17,8 +17,7 @@ /obj/item/mecha_parts/chassis/attackby(obj/item/W, mob/user, params) if(!construct || !construct.action(W, user)) - ..() - return + return ..() /obj/item/mecha_parts/chassis/attack_hand() return diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index 73fabdec133..a04693ce20f 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -130,7 +130,8 @@ . += {"
      Equipment
      " diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 96504721e0c..f60b14f7202 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -34,7 +34,7 @@ else return - if(istype(I, /obj/item/weapon/wirecutters)) + else if(istype(I, /obj/item/weapon/wirecutters)) if(salvage_num <= 0) user << "You don't see anything that can be cut with [I]!" return @@ -47,7 +47,7 @@ else user << "You fail to salvage anything valuable from [src]!" - if(istype(I, /obj/item/weapon/crowbar)) + else if(istype(I, /obj/item/weapon/crowbar)) if(crowbar_salvage && crowbar_salvage.len) var/obj/S = pick(crowbar_salvage) if(S) @@ -59,7 +59,7 @@ user << "You don't see anything that can be pried with [I]!" else - ..() + return ..() /obj/structure/mecha_wreckage/gygax diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 1dfd4add2f0..548ade544e2 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -18,9 +18,10 @@ /obj/effect/decal/cleanable/proc/replace_decal(obj/effect/decal/cleanable/C) qdel(C) -/obj/effect/decal/cleanable/attackby(obj/item/weapon/W, mob/user,) +/obj/effect/decal/cleanable/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers/glass) || istype(W, /obj/item/weapon/reagent_containers/food/drinks)) if(src.reagents && W.reagents) + . = 1 //so the containers don't splash their content on the src while scooping. if(!src.reagents.total_volume) user << "[src] isn't thick enough to scoop up!" return @@ -33,7 +34,8 @@ qdel(src) return if(W.is_hot()) //todo: make heating a reagent holder proc - if(istype(W, /obj/item/clothing/mask/cigarette)) return + if(istype(W, /obj/item/clothing/mask/cigarette)) + return else var/hotness = W.is_hot() var/added_heat = (hotness / 100) diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 435a07bdbc8..4441b6fe219 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -226,17 +226,15 @@ /obj/structure/foamedmetal/attack_animal(mob/living/simple_animal/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) + playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) if(user.environment_smash >= 1) user.do_attack_animation(src) user << "You smash apart the foam wall." qdel(src) - return - /obj/structure/foamedmetal/attack_hulk(mob/living/carbon/human/user) ..(user, 1) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) + playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) if(prob(75 - metal*25)) user.visible_message("[user] smashes through the foamed metal!", \ "You smash through the metal foam wall!") @@ -246,6 +244,7 @@ /obj/structure/foamedmetal/attack_alien(mob/living/carbon/alien/humanoid/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) + playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) if(prob(75 - metal*25)) user.visible_message("[user] smashes through the foamed metal!", \ "You smash through the metal foam wall!") @@ -254,6 +253,7 @@ /obj/structure/foamedmetal/attack_slime(mob/living/simple_animal/slime/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) + playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) if(!user.is_adult) attack_hand(user) return @@ -266,12 +266,11 @@ user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) user << "You hit the metal foam but bounce off it!" + playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) -/obj/structure/foamedmetal/attackby(obj/item/I, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - +/obj/structure/foamedmetal/attacked_by(obj/item/I, mob/living/user) + playsound(src.loc, 'sound/weapons/tap.ogg', 100, 1) //the item attack sound is muffled by the foam. if(prob(I.force*20 - metal*25)) user.visible_message("[user] smashes through the foamed metal!", \ "You smash through the foamed metal with \the [I]!") @@ -279,7 +278,6 @@ else user << "You hit the metal foam to no effect!" - /obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5) return !density diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 2496b1eb842..47dabfaf579 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -117,10 +117,11 @@ obj/effect/glowshroom/glowcap floor = 1 return 1 -/obj/effect/glowshroom/attackby(obj/item/weapon/W, mob/user, params) +/obj/effect/glowshroom/attacked_by(obj/item/I, mob/user) ..() - endurance -= W.force - CheckEndurance() + if(I.damtype != STAMINA) + endurance -= I.force + CheckEndurance() /obj/effect/glowshroom/ex_act(severity, target) switch(severity) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f634e1eca8b..c879b65c341 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -80,18 +80,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s var/embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class) var/embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME //A time in ticks, multiplied by the w_class. - var/list/can_be_placed_into = list( - /obj/structure/table, - /obj/structure/rack, - /obj/structure/closet, - /obj/item/weapon/storage, - /obj/structure/safe, - /obj/machinery/disposal, - /obj/machinery/r_n_d/destructive_analyzer, - /obj/machinery/r_n_d/experimentor, - /obj/machinery/autolathe - ) - var/flags_cover = 0 //for flags such as GLASSESCOVERSEYES var/heat = 0 var/sharpness = IS_BLUNT @@ -120,7 +108,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s ) /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) - if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) + if(((src in target) && !target_self) || (!istype(target.loc, /turf) && !istype(target, /turf) && not_inside)) return 0 else return 1 @@ -353,7 +341,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s else if(S.can_be_inserted(src)) S.handle_item_insertion(src) - return // afterattack() and attack() prototypes moved to _onclick/item_attack.dm for consistency diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 169ba35943d..1e22c43a028 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -113,15 +113,16 @@ overlays += image('icons/obj/crayons.dmi',crayon.colourName) /obj/item/weapon/storage/crayons/attackby(obj/item/W, mob/user, params) - if(istype(W,/obj/item/toy/crayon)) - switch(W:colourName) + if(istype(W, /obj/item/toy/crayon)) + var/obj/item/toy/crayon/C = W + switch(C.colourName) if("mime") usr << "This crayon is too sad to be contained in this box." return if("rainbow") usr << "This crayon is too powerful to be contained in this box." return - ..() + return ..() //Spraycan stuff diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 24c0776d2b1..4e9ecaf30e3 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -15,6 +15,7 @@ throw_speed = 4 throw_range = 20 origin_tech = "syndicate=3;engineering=1" + flags = NOBLUDGEON var/obj/machinery/camera/current = null diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 386de841e52..0bb1e20fe62 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -1,7 +1,7 @@ /obj/item/device/chameleon name = "chameleon-projector" icon_state = "shield0" - flags = CONDUCT + flags = CONDUCT | NOBLUDGEON slot_flags = SLOT_BELT item_state = "electronic" throwforce = 5 diff --git a/code/game/objects/items/devices/doorCharge.dm b/code/game/objects/items/devices/doorCharge.dm index 9b0734a61d1..972c33becde 100644 --- a/code/game/objects/items/devices/doorCharge.dm +++ b/code/game/objects/items/devices/doorCharge.dm @@ -6,6 +6,7 @@ w_class = 2 throw_range = 4 throw_speed = 1 + flags = NOBLUDGEON force = 3 attack_verb = list("blown up", "exploded", "detonated") materials = list(MAT_METAL=50, MAT_GLASS=30) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 94a556d9b2e..64daae6779c 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -312,17 +312,20 @@ obj/item/device/flashlight/lamp/bananalamp ..() return -/obj/item/device/flashlight/emp/afterattack(atom/A as mob|obj, mob/user, proximity) - if(!proximity) return - if(istype(A, /obj/item/weapon/storage/) && A.loc == user) +/obj/item/device/flashlight/emp/afterattack(atom/movable/A, mob/user, proximity) + if(!proximity) return - if (emp_cur_charges > 0) + + if(emp_cur_charges > 0) emp_cur_charges -= 1 - A.visible_message("[user] blinks \the [src] at \the [A].", \ - "[user] blinks \the [src] at \the [A].") + if(ismob(A)) var/mob/M = A add_logs(user, M, "attacked", "EMP-light") + M.visible_message("[user] blinks \the [src] at \the [A].", \ + "[user] blinks \the [src] at you.") + else + A.visible_message("[user] blinks \the [src] at \the [A].") user << "\The [src] now has [emp_cur_charges] charge\s." A.emp_act(1) else diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 6a2a1834e50..8529311217c 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -130,7 +130,8 @@ radiation_count = 0 update_icon() return 1 - ..() + else + return ..() /obj/item/device/geiger_counter/AltClick(mob/living/user) if(!istype(user) || user.incapacitated()) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 4b448e2c61d..8fe3d517560 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -130,15 +130,7 @@ Emag() /obj/item/device/lightreplacer/attack_self(mob/user) - /* // This would probably be a bit OP. If you want it though, uncomment the code. - if(isrobot(user)) - var/mob/living/silicon/robot/R = user - if(R.emagged) - src.Emag() - usr << "You shortcircuit the [src]." - return - */ - usr << "It has [uses] lights remaining." + user << "It has [uses] lights remaining." /obj/item/device/lightreplacer/update_icon() icon_state = "lightreplacer[emagged]" diff --git a/code/game/objects/items/devices/pipe_painter.dm b/code/game/objects/items/devices/pipe_painter.dm index a90c1a7d753..02684707e88 100644 --- a/code/game/objects/items/devices/pipe_painter.dm +++ b/code/game/objects/items/devices/pipe_painter.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/bureaucracy.dmi' icon_state = "labeler1" item_state = "flight" + flags = NOBLUDGEON var/list/modes = list( "grey" = rgb(255,255,255), "red" = rgb(255,0,0), @@ -19,10 +20,10 @@ /obj/item/device/pipe_painter/afterattack(atom/A, mob/user, proximity_flag) //Make sure we only paint adjacent items - if(proximity_flag!= 1) + if(!proximity_flag) return - if(!istype(A,/obj/machinery/atmospherics/pipe/simple) && !istype(A,/obj/machinery/atmospherics/pipe/manifold) && !istype(A,/obj/machinery/atmospherics/pipe/manifold4w)) + if(!istype(A,/obj/machinery/atmospherics/pipe)) return var/obj/machinery/atmospherics/pipe/P = A diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 7f947216de2..bf0ccfde494 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -77,7 +77,7 @@ "You detach \the [src] from the cable.", "You hear some wires being disconnected from something.") else - ..() + return ..() /obj/item/device/powersink/attack_paw() return diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index a47e980cc72..caf6e0ba55c 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -35,7 +35,6 @@ ..() /obj/item/device/electropack/attackby(obj/item/weapon/W, mob/user, params) - ..() if(istype(W, /obj/item/clothing/head/helmet)) var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user ) A.icon = 'icons/obj/assemblies.dmi' @@ -56,6 +55,8 @@ A.add_fingerprint(user) if(src.flags & NODROP) A.flags |= NODROP + else + return ..() /obj/item/device/electropack/Topic(href, href_list) //..() diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 922cfc3740c..a1380e000e1 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -11,11 +11,6 @@ var/centcom = 0 var/list/channels = list() - -/obj/item/device/encryptionkey/New() - -/obj/item/device/encryptionkey/attackby(obj/item/weapon/W, mob/user, params) - /obj/item/device/encryptionkey/syndicate icon_state = "cypherkey" channels = list("Syndicate" = 1) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index ebf159d30d3..6aab3afeea2 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -218,10 +218,7 @@ return ..(freq, level, 1) /obj/item/device/radio/headset/attackby(obj/item/weapon/W, mob/user, params) -// ..() user.set_machine(src) - if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ )))) - return if(istype(W, /obj/item/weapon/screwdriver)) if(keyslot || keyslot2) @@ -252,7 +249,7 @@ else user << "This headset doesn't have any unique encryption keys! How useless..." - if(istype(W, /obj/item/device/encryptionkey/)) + else if(istype(W, /obj/item/device/encryptionkey/)) if(keyslot && keyslot2) user << "The headset can't hold another key!" return @@ -271,8 +268,8 @@ recalculateChannels() - - return + else + return ..() /obj/item/device/radio/headset/recalculateChannels() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index bf69eb8bada..e1ee871146f 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -504,14 +504,15 @@ user << "[name] can not be modified or attached." /obj/item/device/radio/attackby(obj/item/weapon/W, mob/user, params) - ..() + add_fingerprint(user) if(istype(W, /obj/item/weapon/screwdriver)) b_stat = !b_stat if(b_stat) user << "The radio can now be attached and modified!" else user << "The radio can no longer be modified or attached!" - add_fingerprint(user) + else + return ..() /obj/item/device/radio/emp_act(severity) emped++ //There's been an EMP; better count it @@ -548,8 +549,6 @@ set_frequency(SYND_FREQ) /obj/item/device/radio/borg/attackby(obj/item/weapon/W, mob/user, params) - if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ )))) - return if(istype(W, /obj/item/weapon/screwdriver)) if(keyslot) @@ -570,7 +569,7 @@ else user << "This radio doesn't have any encryption keys!" - if(istype(W, /obj/item/device/encryptionkey/)) + else if(istype(W, /obj/item/device/encryptionkey/)) if(keyslot) user << "The radio can't hold another key!" return @@ -583,7 +582,6 @@ recalculateChannels() - return /obj/item/device/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag. listening = 0 // And it's nice to have a subtype too for future features. diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 7099ecfa557..90ffa647c49 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -71,7 +71,7 @@ MASS SPECTROMETER icon_state = "health" item_state = "analyzer" desc = "A hand-held body scanner able to distinguish vital signs of the subject." - flags = CONDUCT + flags = CONDUCT | NOBLUDGEON slot_flags = SLOT_BELT throwforce = 3 w_class = 1 @@ -89,7 +89,7 @@ MASS SPECTROMETER else user << "You switch the health analyzer to check physical health." scanchems = 0 - return + /obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/carbon/human/user) // Clumsiness/brain damage check @@ -109,8 +109,8 @@ MASS SPECTROMETER else chemscan(user, M) - src.add_fingerprint(user) - return + add_fingerprint(user) + // Used by the PDA medical scanner too /proc/healthscan(mob/living/user, mob/living/M, mode = 1) @@ -241,7 +241,7 @@ MASS SPECTROMETER icon_state = "atmos" item_state = "analyzer" w_class = 2 - flags = CONDUCT + flags = CONDUCT | NOBLUDGEON slot_flags = SLOT_BELT throwforce = 0 throw_speed = 3 diff --git a/code/game/objects/items/nuke_tools.dm b/code/game/objects/items/nuke_tools.dm index dc36d390d6c..97745bbc9c3 100644 --- a/code/game/objects/items/nuke_tools.dm +++ b/code/game/objects/items/nuke_tools.dm @@ -17,7 +17,7 @@ if(istype(container)) container.load(src, user) else - ..() + return ..() /obj/item/nuke_core/process() if(cooldown < world.time - 60) @@ -57,7 +57,7 @@ else load(core, user) else - ..() + return ..() //snowflake screwdriver, works as a key to start nuke theft, traitor only /obj/item/weapon/screwdriver/nuke diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 25494f1e90a..f335b7420b7 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -30,7 +30,9 @@ var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0, user)) removeOverlays() - usr << "You slice off [src]'s uneven chunks of aluminium and scorch marks." + user << "You slice off [src]'s uneven chunks of aluminium and scorch marks." + else + return ..() /obj/item/target/attack_hand(mob/user) if(pinnedLoc) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index c45e9d5a66c..b88420836fd 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -53,9 +53,8 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \ R.use(2) if (!R && replace) user.put_in_hands(new_item) - return - if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) var/obj/item/weapon/reagent_containers/food/snacks/S = W if(amount != 1) user << "You must use a single rod!" @@ -64,8 +63,8 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \ else var/obj/item/weapon/reagent_containers/food/snacks/customizable/A = new/obj/item/weapon/reagent_containers/food/snacks/customizable/kebab(get_turf(src)) A.initialize_custom_food(src, S, user) - return - ..() + else + return ..() /obj/item/stack/rods/cyborg/ materials = list() diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 51ecb4ad1fc..817cc5b22cf 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -28,7 +28,6 @@ construct_window(user) /obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user, params) - ..() add_fingerprint(user) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CC = W @@ -337,10 +336,11 @@ continue if(G.amount >= G.max_amount) continue - G.attackby(NG, user) + G.attackby(G, user) user << "You add the newly-formed glass to the stack. It now contains [NG.amount] sheet\s." qdel(src) - ..() + else + return ..() /obj/item/weapon/shard/Crossed(mob/AM) if(istype(AM) && has_gravity(loc)) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 264a710f3e0..9c166498eac 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -148,7 +148,7 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \ HS.amount = 1 use(1) else - ..() + return ..() //Step two - washing..... it's actually in washing machine code. diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm index bcb0bae0c72..bddd8c2f251 100644 --- a/code/game/objects/items/stacks/sheets/light.dm +++ b/code/game/objects/items/stacks/sheets/light.dm @@ -13,7 +13,7 @@ max_amount = 60 /obj/item/stack/light_w/attackby(obj/item/O, mob/user, params) - ..() + if(istype(O,/obj/item/weapon/wirecutters)) var/obj/item/stack/cable_coil/CC = new (user.loc) CC.amount = 5 @@ -25,7 +25,7 @@ user.unEquip(src, 1) qdel(src) - if(istype(O, /obj/item/stack/sheet/metal)) + else if(istype(O, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/metal/M = O if (M.use(1)) use(1) @@ -34,4 +34,5 @@ L.add_fingerprint(user) else user << "You need one metal sheet to finish the light tile!" - return + else + return ..() diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index e48f7237cbe..ccdcdef0e23 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -171,7 +171,7 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \ log_game("Plasma sheets ignited by [key_name(user)] in ([x],[y],[z])") fire_act() else - ..() + return ..() /obj/item/stack/sheet/mineral/plasma/fire_act() atmos_spawn_air("plasma=[amount*10];TEMP=1000") diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 5cc88a696bb..b4e7b5dd5ef 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -243,7 +243,7 @@ merge(S) user << "Your [S.name] stack now contains [S.get_amount()] [S.singular_name]\s." else - ..() + return ..() /obj/item/stack/proc/copy_evidences(obj/item/stack/from as obj) src.blood_DNA = from.blood_DNA diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm index 1c8d1f62206..1f585f3eecc 100644 --- a/code/game/objects/items/stacks/tiles/light.dm +++ b/code/game/objects/items/stacks/tiles/light.dm @@ -20,11 +20,12 @@ state = 0 //fine /obj/item/stack/tile/light/attackby(obj/item/O, mob/user, params) - ..() if(istype(O,/obj/item/weapon/crowbar)) new/obj/item/stack/sheet/metal(user.loc) amount-- new/obj/item/stack/light_w(user.loc) if(amount <= 0) user.unEquip(src, 1) - qdel(src) \ No newline at end of file + qdel(src) + else + return ..() \ No newline at end of file diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 184802b3306..ecc374c9e97 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -58,9 +58,8 @@ R.use(4) if (!R && replace) user.put_in_hands(new_item) - return else - ..() + return ..() //Grass /obj/item/stack/tile/grass diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index f936feb025c..e515882d11d 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -12,8 +12,8 @@ RCD opacity = 0 density = 0 anchored = 0 - flags = CONDUCT - force = 10 + flags = CONDUCT | NOBLUDGEON + force = 0 throwforce = 10 throw_speed = 3 throw_range = 5 @@ -225,7 +225,6 @@ RCD return ..() /obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user, params) - ..() if(isrobot(user)) //Make sure cyborgs can't load their RCDs return var/loaded = 0 @@ -247,7 +246,8 @@ RCD if(loaded) user << "The RCD now holds [matter]/[max_matter] matter-units." desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." - return + else + return ..() /obj/item/weapon/rcd/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user) var/maxsheets = round((max_matter-matter)/value) //calculate the max number of sheets that will fit in RCD diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index 65cb7d6984b..f1908a99533 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -125,7 +125,7 @@ var/global/list/RPD_recipes=list( desc = "A device used to rapidly pipe things." icon = 'icons/obj/items.dmi' icon_state = "rpd" - flags = CONDUCT + flags = CONDUCT //phil235 SEMIBLUDGEON? force = 10 throwforce = 10 throw_speed = 1 @@ -605,7 +605,7 @@ var/global/list/RPD_recipes=list( activate() C.add_fingerprint(usr) - C.update() + C.update_icon() return 1 return 0 else diff --git a/code/game/objects/items/weapons/airlock_painter.dm b/code/game/objects/items/weapons/airlock_painter.dm index 6ad8487da98..abdc6c16e78 100644 --- a/code/game/objects/items/weapons/airlock_painter.dm +++ b/code/game/objects/items/weapons/airlock_painter.dm @@ -10,7 +10,7 @@ materials = list(MAT_METAL=50, MAT_GLASS=50) origin_tech = "engineering=1" - flags = CONDUCT + flags = CONDUCT | NOBLUDGEON slot_flags = SLOT_BELT var/obj/item/device/toner/ink = null @@ -82,7 +82,7 @@ user.reagents.add_reagent("colorful_reagent", 1) user.reagents.reaction(user, TOUCH, 1) return TOXLOSS - + else user.visible_message("[user] is trying to inhale toner from \the [name]! It might be a suicide attempt if \the [name] had any toner.") return SHAME @@ -104,7 +104,6 @@ /obj/item/weapon/airlock_painter/attackby(obj/item/weapon/W, mob/user, params) - ..() if(istype(W, /obj/item/device/toner)) if(ink) user << "\the [name] already contains \a [ink]." @@ -115,7 +114,8 @@ user << "You install \the [W] into \the [name]." ink = W playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - + else + return ..() /obj/item/weapon/airlock_painter/attack_self(mob/user) if(ink) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 63275de71a5..c30ba3942a4 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -17,7 +17,7 @@ icon = 'icons/obj/card.dmi' w_class = 1 - var/list/files = list( ) + var/list/files = list() /obj/item/weapon/card/data name = "data disk" @@ -76,11 +76,10 @@ desc = "A card used to provide ID and determine access across the station." icon_state = "id" item_state = "card-id" + slot_flags = SLOT_ID var/mining_points = 0 //For redeeming at mining equipment vendors var/list/access = list() var/registered_name = null // The name registered_name on the card - slot_flags = SLOT_ID - var/assignment = null var/dorm = 0 // determines if this ID has claimed a dorm already diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 644bc612139..d8cd87d804b 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -126,13 +126,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM reagents.add_reagent("nicotine", 15) /obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W, mob/user, params) - ..() if(!lit && smoketime > 0 && W.is_hot()) var/lighting_text = is_lighter(W,user) if(lighting_text) light(lighting_text) - return - return + else + return ..() /obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user, proximity) if(!proximity || lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead) @@ -418,9 +417,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM else user << "There is nothing to smoke!" else - user << "You can't put that in the pipe!" - ..() - + return ..() /obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user) var/turf/location = get_turf(user) @@ -516,8 +513,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM return /obj/item/weapon/lighter/attack(mob/living/carbon/M, mob/living/carbon/user) - if(!isliving(M)) - return if(lit) M.IgniteMob() var/obj/item/clothing/mask/cigarette/cig = help_light_cig(M,user) diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 6b1e73c8c7c..4912b1e5854 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -16,6 +16,7 @@ icon = 'icons/obj/items.dmi' icon_state = "soap" w_class = 1 + flags = NOBLUDGEON throwforce = 0 throw_speed = 3 throw_range = 7 diff --git a/code/game/objects/items/weapons/courtroom.dm b/code/game/objects/items/weapons/courtroom.dm index 38cb97fc2ac..403dfebb49e 100644 --- a/code/game/objects/items/weapons/courtroom.dm +++ b/code/game/objects/items/weapons/courtroom.dm @@ -34,4 +34,4 @@ user.visible_message("[user] strikes \the [src] with \the [I].") user.changeNext_move(CLICK_CD_MELEE) else - return \ No newline at end of file + return ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 41aba0f01c7..bc8aec98766 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -112,7 +112,7 @@ if(W == paddles) paddles.unwield() toggle_paddles() - if(istype(W, /obj/item/weapon/stock_parts/cell)) + else if(istype(W, /obj/item/weapon/stock_parts/cell)) var/obj/item/weapon/stock_parts/cell/C = W if(bcell) user << "[src] already has a cell." @@ -125,16 +125,17 @@ W.loc = src bcell = W user << "You install a cell in [src]." + update_icon() - if(istype(W, /obj/item/weapon/screwdriver)) + else if(istype(W, /obj/item/weapon/screwdriver)) if(bcell) bcell.updateicon() bcell.loc = get_turf(src.loc) bcell = null user << "You remove the cell from [src]." - - update_icon() - return + update_icon() + else + return ..() /obj/item/weapon/defibrillator/emag_act(mob/user) if(safety) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 219a6ca3e94..8dee2b940c6 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -57,7 +57,7 @@ else if(is_wire_tool(I)) wires.interact(user) else - ..() + return ..() /obj/item/weapon/c4/attack_self(mob/user) var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index ebc4bbfbc44..444c26973fe 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -36,6 +36,7 @@ sprite_name = "miniFE" /obj/item/weapon/extinguisher/New() + ..() create_reagents(max_water) reagents.add_reagent("water", max_water) @@ -51,7 +52,7 @@ // If we're in help intent, don't bash anyone with the // extinguisher user.visible_message("[user] targets [M] with \the [src]", "You target [M] with \the [src].") - return 1 + return 0 else return ..() @@ -103,9 +104,9 @@ var/direction = get_dir(src,target) - if(usr.buckled && isobj(usr.buckled) && !usr.buckled.anchored) + if(user.buckled && isobj(user.buckled) && !user.buckled.anchored) spawn(0) - var/obj/B = usr.buckled + var/obj/B = user.buckled var/movementdirection = turn(direction,180) step(B, movementdirection) sleep(1) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index c45029b9804..d9cbf5a9273 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -70,8 +70,6 @@ flame_turf(turflist) /obj/item/weapon/flamethrower/attackby(obj/item/W, mob/user, params) - if(user.stat || user.restrained() || user.lying) - return if(istype(W, /obj/item/weapon/wrench) && !status)//Taking this apart var/turf/T = get_turf(src) if(weldtool) @@ -87,13 +85,13 @@ qdel(src) return - if(istype(W, /obj/item/weapon/screwdriver) && igniter && !lit) + else if(istype(W, /obj/item/weapon/screwdriver) && igniter && !lit) status = !status user << "[igniter] is now [status ? "secured" : "unsecured"]!" update_icon() return - if(isigniter(W)) + else if(isigniter(W)) var/obj/item/device/assembly/igniter/I = W if(I.secured) return @@ -106,7 +104,7 @@ update_icon() return - if(istype(W,/obj/item/weapon/tank/internals/plasma)) + else if(istype(W,/obj/item/weapon/tank/internals/plasma)) if(ptank) user << "There appears to already be a plasma tank loaded in [src]!" return @@ -117,10 +115,10 @@ update_icon() return - if(istype(W, /obj/item/device/analyzer) && ptank) + else if(istype(W, /obj/item/device/analyzer) && ptank) atmosanalyzer_scan(ptank.air_contents, user) - ..() - return + else + return ..() /obj/item/weapon/flamethrower/attack_self(mob/user) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 4e83773c9c1..3f876332c87 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -65,6 +65,7 @@ user << "You need to add an activation mechanism!" else if(stage == WIRED && is_type_in_list(I, allowed_containers)) + . = 1 //no afterattack if(beakers.len == 2) user << "[src] can not hold more containers!" return @@ -79,6 +80,7 @@ user << "[I] is empty!" else if(stage == EMPTY && istype(I, /obj/item/device/assembly_holder)) + . = 1 // no afterattack var/obj/item/device/assembly_holder/A = I if(isigniter(A.a_left) == isigniter(A.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it return @@ -122,7 +124,8 @@ new /obj/item/stack/cable_coil(get_turf(src),1) stage_change(EMPTY) user << "You remove the activation mechanism from the [initial(name)] assembly." - + else + return ..() /obj/item/weapon/grenade/chem_grenade/proc/stage_change(N) if(N) diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index a160f33e502..b1f6e2c7284 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -33,24 +33,6 @@ return 1 -/*/obj/item/weapon/grenade/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container - if (istype(target, /obj/item/weapon/gun/grenadelauncher)) return ..() - if((user.get_active_hand() == src) && (!active) && (clown_check(user)) && target.loc != src.loc) - user << "You prime the [name]! [det_time/10] seconds!" - active = 1 - icon_state = initial(icon_state) + "_active" - playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(det_time) - prime() - return - user.dir = get_dir(user, target) - user.drop_item() - var/t = (isturf(target) ? target : target.loc) - walk_towards(src, t, 3) - return*/ - - /obj/item/weapon/grenade/examine(mob/user) ..() if(display_timer) @@ -103,7 +85,8 @@ det_time = 1 user << "You set the [name] for instant detonation." add_fingerprint(user) - ..() + else + return ..() /obj/item/weapon/grenade/attack_hand() walk(src, null, null) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index e3f44bc86ef..aa0f83182a8 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -160,6 +160,8 @@ if(!remove_item_from_storage(user)) user.unEquip(src) qdel(src) + else + return ..() /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user) if(isrobot(user)) diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 7675b951821..1f0c1395c6e 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -26,7 +26,6 @@ /obj/item/weapon/implantcase/attackby(obj/item/weapon/W, mob/user, params) - ..() if(istype(W, /obj/item/weapon/pen)) var/t = stripped_input(user, "What would you like the label to be?", name, null) if(user.get_active_hand() != W) @@ -57,10 +56,8 @@ update_icon() I.update_icon() - /*else if(istype(W, /obj/item/ammo_casing/shotgun/implanter)) - var/obj/item/ammo_casing/shotgun/implanter/I = W - if(I.implanter) - src.attackby(I.implanter, user, params) */ // COMING SOON -- c0 + else + return ..() /obj/item/weapon/implantcase/New() ..() diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index a7e7452be6a..29c3e7af930 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -84,8 +84,9 @@ return if(put_mob(M)) qdel(G) - src.updateUsrDialog() - return + updateUsrDialog() + else + return ..() /obj/machinery/implantchair/go_out(mob/M) diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 870821e3866..f1747ec1327 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -40,7 +40,6 @@ update_icon() /obj/item/weapon/implanter/attackby(obj/item/weapon/W, mob/user, params) - ..() if(istype(W, /obj/item/weapon/pen)) var/t = stripped_input(user, "What would you like the label to be?", name, null) if(user.get_active_hand() != W) @@ -51,6 +50,8 @@ name = "implanter ([t])" else name = "implanter" + else + return ..() /obj/item/weapon/implanter/New() ..() diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index 416fa8b615d..04287893b4f 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -33,17 +33,15 @@ /obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C, mob/user, params) - ..() if(istype(C, /obj/item/weapon/implantcase)) if(!case) if(!user.unEquip(C)) return C.loc = src case = C + update_icon() else - return - update_icon() - + return ..() /obj/item/weapon/implantpad/attack_self(mob/user) user.set_machine(src) diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 770adc191ed..fd27e6b4e67 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -156,7 +156,6 @@ item_color = "red" /obj/item/weapon/melee/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user, params) - ..() if(istype(W, /obj/item/weapon/melee/energy/sword/saber)) if(W == src) user << "You try to attach the end of the energy sword to... itself. You're not very smart, are you?" @@ -187,9 +186,10 @@ user.update_inv_r_hand(0) else if(user.l_hand == src) user.update_inv_l_hand(0) - else user << "It's already fabulous!" + else + return ..() /obj/item/weapon/melee/energy/sword/pirate name = "energy cutlass" diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 3ffd011d903..b4356035962 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -174,7 +174,7 @@ ..() if(ismob(target)) var/mob/M - if(src.loc == M) //target caught the sword + if(src.loc == M) //target caught the sword //phil235 NO, shit M.drop_item() consume_everything(target) diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 9b6e0f91bfb..7ad6d644047 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -18,6 +18,7 @@ var/mopspeed = 30 /obj/item/weapon/mop/New() + ..() create_reagents(mopcap) @@ -44,7 +45,6 @@ obj/item/weapon/mop/proc/clean(turf/A) var/turf/turf = A if(is_cleanable(A)) turf = A.loc - A = null if(istype(turf)) user.visible_message("[user] begins to clean \the [turf] with [src].", "You begin to clean \the [turf] with [src]...") @@ -57,7 +57,8 @@ obj/item/weapon/mop/proc/clean(turf/A) /obj/effect/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap)) return - ..() + else + return ..() /obj/item/weapon/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) diff --git a/code/game/objects/items/weapons/paiwire.dm b/code/game/objects/items/weapons/paiwire.dm index fa9a626cd15..734c2f6f48b 100644 --- a/code/game/objects/items/weapons/paiwire.dm +++ b/code/game/objects/items/weapons/paiwire.dm @@ -3,18 +3,12 @@ name = "data cable" icon = 'icons/obj/power.dmi' icon_state = "wire1" - + flags = NOBLUDGEON var/obj/machinery/machine -/obj/item/weapon/pai_cable/proc/plugin(obj/machinery/M, mob/user) - if(istype(M, /obj/machinery/door) || istype(M, /obj/machinery/camera)) - if(!user.drop_item()) - return - user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") - src.loc = M - src.machine = M - else - user.visible_message("[user] dumbly fumbles to find a place on [M] to plug in [src].", "There aren't any ports on [M] that match the jack belonging to [src]!") - -/obj/item/weapon/pai_cable/attack(obj/machinery/M, mob/user) - src.plugin(M, user) \ No newline at end of file +/obj/item/weapon/pai_cable/proc/plugin(obj/machinery/M, mob/living/user) + if(!user.drop_item()) + return + user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") + src.loc = M + machine = M \ No newline at end of file diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index d884853d8df..8cb60cbd45d 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -26,7 +26,7 @@ playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1) cooldown = world.time else - ..() + return ..() /obj/item/weapon/shield/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type) if(attack_type == THROWN_PROJECTILE_ATTACK) diff --git a/code/game/objects/items/weapons/signs.dm b/code/game/objects/items/weapons/signs.dm index 925368f0074..4454169fdd3 100644 --- a/code/game/objects/items/weapons/signs.dm +++ b/code/game/objects/items/weapons/signs.dm @@ -17,7 +17,8 @@ label = txt src.name = "[label] sign" desc = "It reads: [label]" - ..() + else + return ..() /obj/item/weapon/picket_sign/attack_self(mob/living/carbon/human/user) if( last_wave + 20 < world.time ) diff --git a/code/game/objects/items/weapons/singularityhammer.dm b/code/game/objects/items/weapons/singularityhammer.dm index e4781e32d2b..dfe7cc04233 100644 --- a/code/game/objects/items/weapons/singularityhammer.dm +++ b/code/game/objects/items/weapons/singularityhammer.dm @@ -97,15 +97,14 @@ return -/obj/item/weapon/twohanded/mjollnir/attack(mob/M, mob/user) +/obj/item/weapon/twohanded/mjollnir/attack(mob/living/M, mob/user) ..() if(wielded) //if(charged == 5) //charged = 0 playsound(src.loc, "sparks", 50, 1) - if(istype(M, /mob/living)) - M.Stun(3) - shock(M) + M.Stun(3) + shock(M) /obj/item/weapon/twohanded/mjollnir/throw_impact(atom/target) . = ..() diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index d5923e7c82f..248f0c7b116 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -18,18 +18,18 @@ /obj/item/weapon/storage/lockbox/attackby(obj/item/weapon/W, mob/user, params) - if (W.GetID()) - if(src.broken) + if(W.GetID()) + if(broken) user << "It appears to be broken." return - if(src.allowed(user)) - src.locked = !( src.locked ) - if(src.locked) - src.icon_state = src.icon_locked + if(allowed(user)) + locked = !locked + if(locked) + icon_state = icon_locked user << "You lock the [src.name]!" return else - src.icon_state = src.icon_closed + icon_state = icon_closed user << "You unlock the [src.name]!" return else diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9764781e8fc..d80c46eadeb 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -309,7 +309,7 @@ add_fingerprint(usr) - if(!prevent_warning && !istype(W, /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow)) + if(!prevent_warning) for(var/mob/M in viewers(usr, null)) if(M == usr) usr << "You put [W] [preposition]to [src]." @@ -366,16 +366,15 @@ //This proc is called when you want to place an item into the storage item. /obj/item/weapon/storage/attackby(obj/item/W, mob/user, params) ..() - + . = 1 //no afterattack if(isrobot(user)) - user << "You're a robot. No." - return 0 //Robots can't interact with storage items. + return //Robots can't interact with storage items. if(!can_be_inserted(W, 0 , user)) - return 0 + return handle_item_insertion(W, 0 , user) - return 1 + /obj/item/weapon/storage/attack_hand(mob/user) if(user.s_active == src && loc == user) //if you're already looking inside the storage item diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 6a0dad18862..0744643aac4 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -80,9 +80,8 @@ user << "You remove the cell from [src]." status = 0 update_icon() - return - ..() - return + else + return ..() /obj/item/weapon/melee/baton/attack_self(mob/user) if(bcell && bcell.charge > hitcost) diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index a8420574e35..98a9bce06c5 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -88,9 +88,7 @@ return /obj/item/weapon/tank/internals/plasma/attackby(obj/item/weapon/W, mob/user, params) - ..() - - if (istype(W, /obj/item/weapon/flamethrower)) + if(istype(W, /obj/item/weapon/flamethrower)) var/obj/item/weapon/flamethrower/F = W if ((!F.status)||(F.ptank)) return @@ -99,7 +97,8 @@ user.unEquip(src) src.loc = F F.update_icon() - return + else + return ..() /obj/item/weapon/tank/internals/plasma/full/New() ..() diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index fc137875022..406e079ffbb 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -120,17 +120,14 @@ return (BRUTELOSS) /obj/item/weapon/tank/attackby(obj/item/weapon/W, mob/user, params) - ..() - add_fingerprint(user) - if(istype(src.loc, /obj/item/assembly)) - icon = src.loc - if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) atmosanalyzer_scan(air_contents, user) - if(istype(W, /obj/item/device/assembly_holder)) + else if(istype(W, /obj/item/device/assembly_holder)) bomb_assemble(W,user) + else + return ..() /obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = hands_state) diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 7652493137c..2b29db5f5b3 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -100,8 +100,9 @@ /obj/item/weapon/watertank/attackby(obj/item/W, mob/user, params) if(W == noz) remove_noz() - return - ..() + return 1 + else + return ..() // This mister item is intended as an extension of the watertank and always attached to it. // Therefore, it's designed to be "locked" to the player's hands or extended back onto @@ -152,8 +153,8 @@ loc = tank.loc /obj/item/weapon/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity) - if(target.loc == loc || target == tank) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it putting it away - return + if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it + return //phil235 shitty check ..() //Janitor tank diff --git a/code/game/objects/items/weapons/teleprod.dm b/code/game/objects/items/weapons/teleprod.dm index 44b8a11dd2b..6131158a4b0 100644 --- a/code/game/objects/items/weapons/teleprod.dm +++ b/code/game/objects/items/weapons/teleprod.dm @@ -22,7 +22,6 @@ do_teleport(M, get_turf(M), 15) /obj/item/weapon/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod - ..() if(istype(I, /obj/item/weapon/ore/bluespace_crystal)) if(!bcell) var/obj/item/weapon/melee/baton/cattleprod/teleprod/S = new /obj/item/weapon/melee/baton/cattleprod/teleprod @@ -35,6 +34,8 @@ qdel(src) else user.visible_message("You can't install the crystal onto the stunprod while it has a powercell installed!") + else + return ..() /obj/item/weapon/melee/baton/cattleprod/teleprod/attack_self(mob/user, obj/item/I)//handles removing the bluespace crystal + turning the prod on and off if(bcell && bcell.charge > hitcost) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index d50c3444532..49c2c4dd884 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -275,9 +275,10 @@ /obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) flamethrower_screwdriver(I, user) - if(istype(I, /obj/item/stack/rods)) + else if(istype(I, /obj/item/stack/rods)) flamethrower_rods(I, user) - ..() + else + return ..() /obj/item/weapon/weldingtool/attack(mob/living/carbon/human/H, mob/user) @@ -347,7 +348,7 @@ var/turf/location = get_turf(user) location.hotspot_expose(700, 50, 1) - if(isliving(O)) + if(isliving(O)) //phil235 need the new bitflag var/mob/living/L = O L.IgniteMob() diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index acfe1e6cd77..d05f4fa39a1 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -186,12 +186,10 @@ if(wielded) //destroys windows and grilles in one hit if(istype(A,/obj/structure/window)) var/obj/structure/window/W = A - W.spawnfragments() // this will qdel and spawn shards + W.shatter() else if(istype(A,/obj/structure/grille)) var/obj/structure/grille/G = A - G.health = -6 - G.destroyed += prob(25) // If this is set, healthcheck will completely remove the grille - G.healthcheck() + G.take_damage(16) /* @@ -282,7 +280,6 @@ item_color = "red" /obj/item/weapon/twohanded/dualsaber/attackby(obj/item/weapon/W, mob/user, params) - ..() if(istype(W, /obj/item/device/multitool)) if(hacked == 0) hacked = 1 @@ -291,7 +288,8 @@ update_icon() else user << "It's starting to look like a triple rainbow - no, nevermind." - + else + return ..() //spears /obj/item/weapon/twohanded/spear @@ -323,9 +321,7 @@ /obj/item/weapon/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity) if(!proximity) return - if(istype(AM, /turf/open/floor)) //So you can actually melee with it - return - if(istype(AM, /turf/open/space)) //So you can actually melee with it + if(istype(AM, /turf/open)) //So you can actually melee with it return if(explosive && wielded) user.say("[war_cry]") @@ -336,9 +332,10 @@ //THIS MIGHT BE UNBALANCED SO I DUNNO /obj/item/weapon/twohanded/spear/throw_impact(atom/target) . = ..() - if(explosive) - explosive.prime() - qdel(src) + if(!.) //not caught + if(explosive) + explosive.prime() + qdel(src) /obj/item/weapon/twohanded/spear/AltClick() diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 76a66584d26..862a638f9d5 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -89,7 +89,6 @@ attack_verb = list("hit", "bludgeoned", "whacked", "bonked") /obj/item/weapon/wirerod/attackby(obj/item/I, mob/user, params) - ..() if(istype(I, /obj/item/weapon/shard)) var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear @@ -113,6 +112,8 @@ user << "You fasten [I] to the top of the rod with the cable." qdel(I) qdel(src) + else + return ..() /obj/item/weapon/throwing_star diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 0d060d3784c..c022bb5abbd 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -30,7 +30,7 @@ return ..() /obj/structure/mech_melee_attack(obj/mecha/M) - if(M.damtype == "brute") + if(M.damtype == BRUTE || M.damtype == BURN) visible_message("[M.name] has hit [src].") return 1 return 0 @@ -40,6 +40,7 @@ add_fingerprint(user) if(structureclimber && structureclimber != user) user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) structureclimber.Weaken(2) structureclimber.visible_message("[structureclimber.name] has been knocked off the [src]", "You're knocked off the [src]!", "You see [structureclimber.name] get knocked off the [src]") interact(user) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index baa3f7c230d..59929295365 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -23,9 +23,8 @@ C.loc = get_turf(src) C.layer = layer+0.1 user.visible_message("[user] puts \the [C] on \the [src].","You place \the [C] on \the [src].") - return - - ..() + else + return ..() //Stick to the easel like glue @@ -105,15 +104,14 @@ var/global/list/globalBlankCanvases[AMT_OF_CANVASES] if(thePix != theOriginalPix) //colour changed DrawPixelOn(theOriginalPix,pixX,pixY) qdel(masterpiece) - return //Drawing one pixel with a crayon - if(istype(I, /obj/item/toy/crayon)) + else if(istype(I, /obj/item/toy/crayon)) var/obj/item/toy/crayon/C = I DrawPixelOn(C.paint_color, pixX, pixY) - return + else + return ..() - ..() //Clean the whole canvas /obj/item/weapon/canvas/attack_self(mob/user) diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 2ceaba07c52..0a0e00016bc 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -61,10 +61,10 @@ /obj/structure/sign/barsign/attackby(obj/item/I, mob/user) - if(!allowed(user)) - user << "Access denied." - return - if( istype(I, /obj/item/weapon/screwdriver)) + if(istype(I, /obj/item/weapon/screwdriver)) + if(!allowed(user)) + user << "Access denied." + return if(!panel_open) user << "You open the maintenance panel." set_sign(new /datum/barsign/hiddensigns/signoff) @@ -79,7 +79,7 @@ set_sign(new /datum/barsign/hiddensigns/empbarsign) panel_open = 0 - if(istype(I, /obj/item/stack/cable_coil) && panel_open) + else if(istype(I, /obj/item/stack/cable_coil) && panel_open) var/obj/item/stack/cable_coil/C = I if(emagged) //Emagged, not broken by EMP user << "Sign has been damaged beyond repair!" @@ -93,7 +93,8 @@ broken = 0 else user << "You need at least two lengths of cable!" - + else + return ..() /obj/structure/sign/barsign/emp_act(severity) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index fc16964286d..56ca3c27b51 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -50,6 +50,8 @@ if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) deconstruct() + else + return ..() /* * Roller beds diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 82218cdbd37..2b9568916c0 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -66,6 +66,8 @@ SK.loc = E SK.master = E qdel(src) + else + return ..() /obj/structure/chair/attack_tk(mob/user) if(buckled_mobs.len) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index bc4201bcb9c..357d8e3e451 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -40,7 +40,8 @@ LINEN BINS C.add_fingerprint(user) qdel(src) user << "You tear [src] up." - ..() + else + return ..() /obj/item/weapon/bedsheet/blue icon_state = "sheetblue" diff --git a/code/game/objects/structures/crates_lockers/crates/bins.dm b/code/game/objects/structures/crates_lockers/crates/bins.dm index 6f46530219b..4cc303db4a4 100644 --- a/code/game/objects/structures/crates_lockers/crates/bins.dm +++ b/code/game/objects/structures/crates_lockers/crates/bins.dm @@ -34,7 +34,7 @@ anchored = !anchored playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) else - ..() + return ..() /obj/structure/closet/crate/bin/proc/do_animate() playsound(loc, open_sound, 15, 1, -3) diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 8e346125205..85c66e179ce 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -30,4 +30,4 @@ qdel(src) else - ..() + return ..() diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index eef13b29223..d81af121c14 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -30,7 +30,7 @@ new /obj/item/weapon/grown/log/tree(get_turf(src)) else - ..() + return ..() diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index bc08d60b217..f24bea92dec 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -242,7 +242,7 @@ P.loc = src.loc user << "You fit the pipe into \the [src]." else - ..() + return ..() /obj/structure/girder/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) @@ -379,7 +379,7 @@ qdel(src) else - ..() + return ..() /obj/structure/girder/cult/narsie_act() return diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 175971ef2c6..cc7500e6ca0 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -86,6 +86,8 @@ usr << "You empty the contents of [src]'s bucket onto the floor." reagents.reaction(src.loc) src.reagents.clear_reagents() + else + return ..() /obj/structure/janitorialcart/attack_hand(mob/user) user.set_machine(src) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 377d6a5f584..fb32d2d03ba 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -20,6 +20,8 @@ var/obj/F = new /obj/structure/kitchenspike(src.loc,) transfer_fingerprints_to(F) qdel(src) + else + return ..() /obj/structure/kitchenspike name = "meat spike" @@ -48,8 +50,8 @@ qdel(src) else user << "You can't do that while something's on the spike!" - return - if(istype(I, /obj/item/weapon/grab)) + + else if(istype(I, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = I if(istype(G.affecting, /mob/living/)) if(!buckled_mobs.len) @@ -77,8 +79,8 @@ qdel(G) return user << "You can't use that on the spike!" - return - ..() + else + return ..() /obj/structure/kitchenspike/user_buckle_mob(mob/living/M, mob/living/user) //Don't want them getting put on the rack other than by spiking return diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 4d7bea05067..29afcc48253 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -18,4 +18,6 @@ else reagents.trans_to(I, 5) user << "You wet [I] in [src]." - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) \ No newline at end of file + playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + else + return ..() \ No newline at end of file diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 48a2b4be107..03b9f323307 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -63,7 +63,8 @@ add_fingerprint(user) /obj/structure/bodycontainer/attackby(obj/P, mob/user, params) - if (istype(P, /obj/item/weapon/pen)) + add_fingerprint(user) + if(istype(P, /obj/item/weapon/pen)) var/t = stripped_input(user, "What would you like the label to be?", text("[]", name), null) if (user.get_active_hand() != P) return @@ -73,7 +74,8 @@ name = text("[]- '[]'", initial(name), t) else name = initial(name) - add_fingerprint(user) + else + return ..() /obj/structure/bodycontainer/container_resist() open() diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index 0e40cd810a7..7ee1d283945 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -365,4 +365,4 @@ "You hear ratchet.") anchored = 0 else - ..() + return ..() diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 54fb5414f9c..8a7ce0ad0dd 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -29,6 +29,8 @@ user << "You pin the paper to the noticeboard." else user << "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached." + else + return ..() /obj/structure/noticeboard/attack_hand(mob/user) var/dat = "Noticeboard
      " diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index c0ed5f5bd92..ee8c28788a9 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -41,10 +41,6 @@ return 0 return ..() -/obj/structure/plasticflaps/attackby(obj/item/weapon/W, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) - ..() - /obj/structure/plasticflaps/ex_act(severity) ..() switch(severity) diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index b67d8f0b5a1..48004def34a 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -50,7 +50,7 @@ new framebuildstacktype(loc, framebuildstackamount) new buildstacktype(loc, buildstackamount) qdel(src) - if(istype(W, /obj/item/weapon/weldingtool)) + else if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W switch(anchored) if(0) @@ -76,7 +76,7 @@ anchored = 0 user << "You cut \the [src] free from the floor." //Finishing the frame - if(istype(W,/obj/item/stack/sheet)) + else if(istype(W,/obj/item/stack/sheet)) if(finished) return var/obj/item/stack/sheet/S = W @@ -101,6 +101,8 @@ S.use(1) new /obj/structure/reflector/box (src.loc) qdel(src) + else + return ..() /obj/structure/reflector/proc/get_reflection(srcdir,pdir) return 0 diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 92c0691d6d1..f06ef7a8b34 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -145,6 +145,7 @@ FLOOR SAFES /obj/structure/safe/attackby(obj/item/I, mob/user, params) if(open) + . = 1 //no afterattack if(I.w_class + space <= maxspace) space += I.w_class if(!user.drop_item()) @@ -157,10 +158,10 @@ FLOOR SAFES else user << "[I] won't fit in [src]." return + else if(istype(I, /obj/item/clothing/tie/stethoscope)) + user << "Hold [I] in one of your hands while you manipulate the dial!" else - if(istype(I, /obj/item/clothing/tie/stethoscope)) - user << "Hold [I] in one of your hands while you manipulate the dial!" - return + return ..() obj/structure/safe/blob_act() diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm index 06f733f4651..c9e6167f88f 100644 --- a/code/game/objects/structures/table_frames.dm +++ b/code/game/objects/structures/table_frames.dm @@ -29,8 +29,7 @@ for(var/i = 1, i <= framestackamount, i++) new framestack(get_turf(src)) qdel(src) - return - if(istype(I, /obj/item/stack/sheet/plasteel)) + else if(istype(I, /obj/item/stack/sheet/plasteel)) var/obj/item/stack/sheet/plasteel/P = I if(P.get_amount() < 1) user << "You need one plasteel sheet to do this!" @@ -40,8 +39,7 @@ P.use(1) new /obj/structure/table/reinforced(src.loc) qdel(src) - return - if(istype(I, /obj/item/stack/sheet/metal)) + else if(istype(I, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/metal/M = I if(M.get_amount() < 1) user << "You need one metal sheet to do this!" @@ -51,8 +49,7 @@ M.use(1) new /obj/structure/table(src.loc) qdel(src) - return - if(istype(I, /obj/item/stack/sheet/glass)) + else if(istype(I, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = I if(G.get_amount() < 1) user << "You need one glass sheet to do this!" @@ -63,8 +60,7 @@ new /obj/structure/table/glass(src.loc) qdel(src) - return - if(istype(I, /obj/item/stack/sheet/mineral/silver)) + else if(istype(I, /obj/item/stack/sheet/mineral/silver)) var/obj/item/stack/sheet/mineral/silver/S = I if(S.get_amount() < 1) user << "You need one silver sheet to do this!" @@ -74,7 +70,8 @@ S.use(1) new /obj/structure/table/optable(src.loc) qdel(src) - return + else + return ..() /* * Wooden Frames @@ -89,8 +86,6 @@ burn_state = FLAMMABLE /obj/structure/table_frame/wood/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/wrench)) - ..() if(istype(I, /obj/item/stack/sheet/mineral/wood)) var/obj/item/stack/sheet/mineral/wood/W = I if(W.get_amount() < 1) @@ -102,7 +97,7 @@ new /obj/structure/table/wood(src.loc) qdel(src) return - if(istype(I, /obj/item/stack/tile/carpet)) + else if(istype(I, /obj/item/stack/tile/carpet)) var/obj/item/stack/tile/carpet/C = I if(C.get_amount() < 1) user << "You need one carpet sheet to do this!" @@ -112,4 +107,5 @@ C.use(1) new /obj/structure/table/wood/poker(src.loc) qdel(src) - return + else + return ..() diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index c3a46195ab1..550b63d46d2 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -48,9 +48,11 @@ oxygentanks++ else full = TRUE - else + else if(user.a_intent != "harm") user << "[I] does not fit into [src]." return + else + return ..() if(full) user << "[src] can't hold anymore of [I]." return diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index 1928b6be6e7..bb7cc05d07c 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -54,9 +54,11 @@ obj/structure/transit_tube/ex_act(severity, target) R.add_fingerprint(user) src.destroy_diagonals() qdel(src) - if(istype(W, /obj/item/weapon/crowbar)) + else if(istype(W, /obj/item/weapon/crowbar)) for(var/obj/structure/transit_tube_pod/pod in src.loc) pod.attackby(W, user) + else + return ..() //destroys disconnected decorative diagonals /obj/structure/transit_tube/proc/destroy_diagonals() diff --git a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm index efc12760e79..ffcacef2f4b 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm @@ -39,7 +39,7 @@ split_text[1] = copytext(split_text[1],1,2) + copytext(split_text[2],2,3) split_text[2] = copytext(split_text[2],1,2) + ((copytext(split_text[2],2,3) == "E") ? "W" : "E") //for curves, swap the diagonal direction that is not in the same axis as the cardinal direction - else + else if(split_text[1] == "N" || split_text[1] == "S") split_text[2] = copytext(split_text[2],1,2) + ((copytext(split_text[2],2,3) == "E") ? "W" : "E") else @@ -104,7 +104,8 @@ var/obj/structure/transit_tube/R = src.buildtube() src.transfer_fingerprints_to(R) qdel(src) - return + else + return ..() // transit tube station /obj/structure/c_transit_tube/station diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 66e9b89b856..a1e5c3b8eed 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -41,6 +41,8 @@ src.transfer_fingerprints_to(R) R.add_fingerprint(user) qdel(src) + else + return ..() /obj/structure/transit_tube_pod/container_resist() var/mob/living/user = usr diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index ee956fc4075..9617e79727c 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -171,7 +171,7 @@ else name = "wired windoor assembly" else - ..() + return ..() if("02") @@ -299,7 +299,7 @@ else - ..() + return ..() //Update to reflect changes(if applicable) update_icon() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index fa059ea523c..970628005f4 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -145,7 +145,7 @@ if( thermite ) if(W.is_hot()) thermitemelt(user) - return + return var/turf/T = user.loc //get user's location for delay checks diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 30074a1ed3f..ed3c081fc7e 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -675,12 +675,12 @@ var/global/list/g_fancy_list_of_types = null for(var/obj/machinery/power/rad_collector/Rad in machines) if(Rad.anchored) - if(!Rad.P) + if(!Rad.loaded_tank) var/obj/item/weapon/tank/internals/plasma/Plasma = new/obj/item/weapon/tank/internals/plasma(Rad) Plasma.air_contents.assert_gas("plasma") Plasma.air_contents.gases["plasma"][MOLES] = 70 Rad.drainratio = 0 - Rad.P = Plasma + Rad.loaded_tank = Plasma Plasma.loc = Rad if(!Rad.active) diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index a0a614eff18..4f94c2a2b4e 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -104,7 +104,7 @@ new /obj/item/pipe_meter(src.loc) qdel(src) else - ..() + return ..() /obj/machinery/meter/attack_ai(mob/user) return src.attack_hand(user) diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index a6d0bbb0207..edcdc2fbce9 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -65,12 +65,8 @@ /obj/machinery/atmospherics/pipe/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/device/analyzer)) atmosanalyzer_scan(parent.air, user) - return - - if(istype(W,/obj/item/device/pipe_painter) || istype(W,/obj/item/weapon/pipe_dispenser)) - return - - return ..() + else + return ..() /obj/machinery/atmospherics/pipe/returnPipenet() return parent diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 4f0a39ddd09..c1ca56c5ae5 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -132,4 +132,4 @@ if(!movable) on = FALSE else - ..() + return ..() diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index 88e1a3b7c7e..b554a8a4547 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -48,7 +48,7 @@ active = 1 toggleFireplace() else - ..() + return ..() else W.fire_act() diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index d277998ef70..790cf6e47c1 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -36,8 +36,9 @@ if(!isturf(I.loc)) //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up. if(istype(I.loc,/obj/item/weapon/storage)) //in a container. var/obj/item/weapon/storage/U = I.loc - user.client.screen -= I - U.contents.Remove(I) + U.remove_from_storage(I, src) +// user.client.screen -= I +//phil235 U.contents.Remove(I) else if(user.l_hand == I) //in a hand user.drop_l_hand() else if(user.r_hand == I) //in a hand diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index c0757e4ec51..19345e4d476 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -14,6 +14,7 @@ w_class = 1 icon = 'icons/obj/toy.dmi' icon_state = "rag" + flags = OPENCONTAINER | NOBLUDGEON amount_per_transfer_from_this = 5 possible_transfer_amounts = list() volume = 5 diff --git a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm index 29a2244d732..2a6d0839c84 100644 --- a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm @@ -649,7 +649,6 @@ ..() /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/attack(obj/target, mob/user) - if(user.a_intent == "harm" && ismob(target) && target.reagents && reagents.total_volume) target.visible_message("[user] splashes the contents of [src] onto [target]!", \ "[user] splashes the contents of [src] onto [target]!") @@ -660,7 +659,8 @@ ..() /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/afterattack(obj/target, mob/user, proximity) - if((!proximity) || !check_allowed_items(target,target_self=1)) return + if((!proximity) || !check_allowed_items(target,target_self=1)) + return else if(reagents.total_volume && user.a_intent == "harm") user.visible_message("[user] splashes the contents of [src] onto [target]!", \ diff --git a/code/modules/food&drinks/kitchen machinery/food_cart.dm b/code/modules/food&drinks/kitchen machinery/food_cart.dm index e1d411e4538..2e17639cd25 100644 --- a/code/modules/food&drinks/kitchen machinery/food_cart.dm +++ b/code/modules/food&drinks/kitchen machinery/food_cart.dm @@ -101,7 +101,7 @@ else if(O.is_open_container()) return else - ..() + . = ..() updateDialog() /obj/machinery/food_cart/Topic(href, href_list) diff --git a/code/modules/food&drinks/kitchen machinery/gibber.dm b/code/modules/food&drinks/kitchen machinery/gibber.dm index 9a9f75125be..84a92fbaca7 100644 --- a/code/modules/food&drinks/kitchen machinery/gibber.dm +++ b/code/modules/food&drinks/kitchen machinery/gibber.dm @@ -94,7 +94,7 @@ src.startgibbing(user) /obj/machinery/gibber/attackby(obj/item/P, mob/user, params) - if (istype(P, /obj/item/weapon/grab)) + if(istype(P, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = P if(!iscarbon(G.affecting)) user << "This item is not suitable for the gibber!" @@ -117,19 +117,22 @@ qdel(G) update_icon() - if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", P)) + else if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", P)) return - if(exchange_parts(user, P)) + else if(exchange_parts(user, P)) return - if(default_pry_open(P)) + else if(default_pry_open(P)) return - if(default_unfasten_wrench(user, P)) + else if(default_unfasten_wrench(user, P)) return - default_deconstruction_crowbar(P) + else if(default_deconstruction_crowbar(P)) + return + else + return ..() diff --git a/code/modules/food&drinks/kitchen machinery/icecream_vat.dm b/code/modules/food&drinks/kitchen machinery/icecream_vat.dm index 1d63733a175..85c904ec981 100644 --- a/code/modules/food&drinks/kitchen machinery/icecream_vat.dm +++ b/code/modules/food&drinks/kitchen machinery/icecream_vat.dm @@ -110,7 +110,7 @@ else if(O.is_open_container()) return else - ..() + return ..() /obj/machinery/icecream_vat/proc/make(mob/user, make_type, amount) for(var/R in get_ingredient_list(make_type)) diff --git a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm index 47a8d236b6f..809f197ffad 100644 --- a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm +++ b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm @@ -47,11 +47,12 @@ power_change() return - default_deconstruction_crowbar(O) - - if (src.stat != 0) //NOPOWER etc + if(default_deconstruction_crowbar(O)) return - if (istype(O, /obj/item/weapon/grab)) + + if(stat) //NOPOWER etc + return + if(istype(O, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = O if(!user.Adjacent(G.affecting)) return @@ -63,7 +64,8 @@ return else user << "The machine only accepts monkeys!" - return + else + return ..() /obj/machinery/monkey_recycler/MouseDrop_T(mob/living/target, mob/living/user) if(!istype(target)) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 3f570dcf2d8..cbc8f0348a6 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -12,6 +12,7 @@ icon = 'playing_cards.dmi' icon_state = "deck" w_class = 2 + flags = NOBLUDGEON var/list/cards = list() diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 7663c49114d..dc710200724 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -155,10 +155,6 @@ user << "You are too primitive to use this device!" return -/obj/machinery/readybutton/New() - ..() - - /obj/machinery/readybutton/attackby(obj/item/weapon/W as obj, mob/user as mob, params) user << "The device is a solid button, there's nothing you can do with it!" diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 4a9139a5023..09d0f9b748f 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -75,9 +75,10 @@ if(istype(I, /obj/item/weapon/crowbar)) if(anchored==2) user << "Unscrew the hoses first!" + else if(default_deconstruction_crowbar(I, 1)) return - default_deconstruction_crowbar(I, 1) - ..() + else + return ..() /obj/machinery/hydroponics/proc/FindConnected() var/list/connected = list() @@ -801,8 +802,8 @@ for(var/obj/machinery/hydroponics/h in range(1,src)) h.update_icon() - - return + else + return ..() /obj/machinery/hydroponics/attack_hand(mob/user) if(istype(user, /mob/living/silicon)) //How does AI know what plant is? @@ -879,7 +880,8 @@ return // Has no lights /obj/machinery/hydroponics/soil/attackby(obj/item/O, mob/user, params) - ..() if(istype(O, /obj/item/weapon/shovel)) user << "You clear up [src]!" - qdel(src) \ No newline at end of file + qdel(src) + else + return ..() \ No newline at end of file diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index fc376776adc..bdb6d859b28 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -77,7 +77,7 @@ user << "You empty \the [I] into \the [src]." update_icon() else if(istype(I, /obj/item/weapon/pen)) - var/newname = stripped_input(usr, "What would you like to title this bookshelf?") + var/newname = stripped_input(user, "What would you like to title this bookshelf?") if(!newname) return else @@ -92,7 +92,7 @@ state = 1 icon_state = "bookempty" else - ..() + return ..() /obj/structure/bookcase/attack_hand(mob/user) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index ebd9a20854a..16862d3e8a5 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -305,7 +305,7 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums user << "[scanner]'s associated machine has been set to [src]." audible_message("[src] lets out a low, short blip.") else - ..() + return ..() /obj/machinery/computer/libraryconsole/bookmanagement/emag_act(mob/user) if(density && !emagged) @@ -457,6 +457,8 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums if(!user.drop_item()) return O.loc = src + else + return ..() /obj/machinery/libraryscanner/attack_hand(mob/user) usr.set_machine(src) @@ -528,4 +530,4 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums b.icon_state = "book[rand(1,7)]" qdel(O) else - ..() + return ..() diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index c8a86d9a3f3..fb38ee97255 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -178,7 +178,8 @@ if(locked) if(istype(W, /obj/item/weapon/card/emag)) boom(user) - if(istype(W, /obj/item/device/multitool)) + return + else if(istype(W, /obj/item/device/multitool)) user << "DECA-CODE LOCK REPORT:" if(attempts == 1) user << "* Anti-Tamper Bomb will activate on next failed access attempt." @@ -199,8 +200,8 @@ else if(a) ++cows user << "Last code attempt had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions." - else ..() - else ..() + return + return ..() /obj/structure/closet/crate/secure/loot/togglelock(mob/user) if(locked) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 64da738a5ef..2b1c53c082a 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -61,7 +61,8 @@ /obj/machinery/mineral/labor_claim_console/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/card/id)) return attack_hand(user) - ..() + else + return ..() /obj/machinery/mineral/labor_claim_console/emag_act(mob/user) if(!emagged) @@ -169,5 +170,5 @@ user << "Collect points by bringing smelted minerals to the Labor Shuttle stacking machine. Reach your quota to earn your release." else user << "Error: Invalid ID" - return - ..() + else + return ..() diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 39528908511..882221dd71b 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -9,17 +9,17 @@ density = 1 pressure_resistance = 5*ONE_ATMOSPHERE -/obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob, params) +/obj/structure/ore_box/attackby(obj/item/weapon/W, mob/user, params) if (istype(W, /obj/item/weapon/ore)) if(!user.drop_item()) return W.loc = src - if (istype(W, /obj/item/weapon/storage)) + else if (istype(W, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W for(var/obj/item/weapon/ore/O in S.contents) S.remove_from_storage(O, src) //This will move the item to this item's contents user << "You empty the ore in [S] into \the [src]." - if(istype(W, /obj/item/weapon/crowbar)) + else if(istype(W, /obj/item/weapon/crowbar)) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) var/obj/item/weapon/crowbar/C = W var/time = 50 @@ -30,7 +30,8 @@ var/obj/item/stack/sheet/mineral/wood/wo = new (loc, 4) wo.add_fingerprint(user) deconstruct() - return + else + return ..() /obj/structure/ore_box/attack_hand(mob/user) if(Adjacent(user)) diff --git a/code/modules/mob/interactive.dm b/code/modules/mob/interactive.dm index faad5010883..98f27b45659 100644 --- a/code/modules/mob/interactive.dm +++ b/code/modules/mob/interactive.dm @@ -577,7 +577,7 @@ if(istype(D,/obj/machinery/door/airlock)) var/obj/machinery/door/airlock/AL = D if(!AL.CanAStarPass(RPID)) // only crack open doors we can't get through - AL.p_open = 1 + AL.panel_open = 1 AL.update_icon() AL.shock(src,(100 - smartness)/2) sleep(5) @@ -589,7 +589,7 @@ if(!AL.wires.is_cut(WIRE_POWER2)) AL.wires.cut(WIRE_POWER2) sleep(5) - AL.p_open = 0 + AL.panel_open = 0 AL.update_icon() D.open() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index fad49701ae8..bde5baef416 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -24,7 +24,7 @@ for(var/datum/surgery/S in surgeries) if(S.next_step(user, src)) return 1 - ..() + return ..() /mob/living/carbon/attack_hand(mob/living/carbon/human/user) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index d4f4e91e080..43e4dfaae76 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -12,6 +12,3 @@ if(..()) //to allow surgery to return properly. return dna.species.spec_attack_hand(M, src) - -/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params) - return diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index aa75cc72d46..db6e21f3ad5 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -106,7 +106,7 @@ feedback_add_details("zone_targeted","[target_area]") // the attacked_by code varies among species - return dna.species.spec_attacked_by(I,user,def_zone,affecting,hit_area,src.a_intent,target_limb,target_area,src) + return dna.species.spec_attacked_by(I, user, def_zone, affecting, hit_area, a_intent, target_limb, target_area, src) /mob/living/carbon/human/emp_act(severity) var/informed = 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 638a318f7f0..0ffc29e42ec 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -953,14 +953,10 @@ if(H.check_shields(I.force, "the [I.name]", I, MELEE_ATTACK, I.armour_penetration)) return 0 - if(I.attack_verb && I.attack_verb.len) - H.visible_message("[user] has [pick(I.attack_verb)] [H] in the [hit_area] with [I]!", \ - "[user] has [pick(I.attack_verb)] [H] in the [hit_area] with [I]!") - else if(I.force) - H.visible_message("[user] has attacked [H] in the [hit_area] with [I]!", \ - "[user] has attacked [H] in the [hit_area] with [I]!") - else - return 0 + H.send_item_attack_message(I, user, hit_area) + + if(!I.force) + return 0 //item force is zero var/armor_block = H.run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened a hit to your [hit_area].",I.armour_penetration) armor_block = min(90,armor_block) //cap damage reduction at 90% diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 2bda69be2c0..e7b082de675 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -445,9 +445,6 @@ return !cleared /mob/living/silicon/robot/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/restraints/handcuffs)) // fuck i don't even know why isrobot() in handcuff code isn't working so this will have to do - return - if(istype(W, /obj/item/weapon/weldingtool) && (user.a_intent != "harm" || user == src)) user.changeNext_move(CLICK_CD_MELEE) var/obj/item/weapon/weldingtool/WT = W @@ -470,6 +467,7 @@ return else if(istype(W, /obj/item/stack/cable_coil) && wiresexposed) + user.changeNext_move(CLICK_CD_MELEE) var/obj/item/stack/cable_coil/coil = W if (getFireLoss() > 0) if(src == user) @@ -604,12 +602,15 @@ toner = tonermax qdel(W) user << "You fill the toner level of [src] to its max capacity." - else - if(W.force && W.damtype != STAMINA && src.stat != DEAD) //only sparks if real damage is dealt. - spark_system.start() return ..() +/mob/living/silicon/robot/attacked_by(obj/item/I, mob/living/user, def_zone) + if(I.force && I.damtype != STAMINA && stat != DEAD) //only sparks if real damage is dealt. + spark_system.start() + ..() + + /mob/living/silicon/robot/emag_act(mob/user) if(user != src)//To prevent syndieborgs from emagging themselves if(!opened)//Cover is closed diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index f01177c5517..1d4dd05f374 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -202,6 +202,7 @@ /mob/living/simple_animal/bot/medbot/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/reagent_containers/glass)) + . = 1 //no afterattack if(locked) user << "You cannot insert a beaker because the panel is locked!" return @@ -215,7 +216,6 @@ reagent_glass = W user << "You insert [W]." show_controls(user) - return else var/current_health = health diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 2b3760b2dcc..20b0c9fb1b7 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -72,8 +72,9 @@ /mob/living/simple_animal/hostile/retaliate/goat/attackby(obj/item/O, mob/user, params) if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) udder.milkAnimal(O, user) + return 1 else - ..() + return ..() //cow /mob/living/simple_animal/cow @@ -112,8 +113,9 @@ /mob/living/simple_animal/cow/attackby(obj/item/O, mob/user, params) if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) udder.milkAnimal(O, user) + return 1 else - ..() + return ..() /mob/living/simple_animal/cow/Life() . = ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index b7dc4777098..02de34f15cd 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -397,13 +397,6 @@ adjustBruteLoss(damage) updatehealth() - -/mob/living/simple_animal/attackby(obj/item/O, mob/living/user, params) //Marker -Agouri - if(O.flags & NOBLUDGEON) - return - - ..() - /mob/living/simple_animal/movement_delay() . = ..() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 8d6174cbe77..3812b42a551 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -55,8 +55,10 @@ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] [src]." - else + else if(user.a_intent != "harm") user << "You can't put [P] in [src]!" + else + return ..() /obj/structure/filingcabinet/attack_hand(mob/user) diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 8e5814eb035..d679df9e53a 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -12,8 +12,6 @@ if(!proximity) return if(!mode) //if it's off, give up. return - if(A == loc) // if placing the labeller into something (e.g. backpack) - return // don't set a label if(!labels_left) user << "No labels left!" diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index ca0688139ef..337aee4034c 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -288,6 +288,8 @@ return user << "You [anchored ? "unwrench" : "wrench"] [src]." anchored = !anchored + else + return ..() /obj/machinery/photocopier/ex_act(severity, target) switch(severity) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 3edf26b56e8..c93db65fd7e 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -422,12 +422,8 @@ viewpichelper(Ainfo) /obj/item/device/camera/afterattack(atom/target, mob/user, flag) - if(!on || !pictures_left || ismob(target.loc) || !isturf(target.loc)) + if(!on || !pictures_left || !isturf(target.loc)) return - if(user.Adjacent(target)) - var/list/bad_targets = list(/obj/structure, /obj/item/weapon/storage) - if(is_type_in_list(target, bad_targets)) - return captureimage(target, user, flag) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 9e27a7e8953..3bc5812c90e 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -590,8 +590,6 @@ ..() /obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user) - if(!user) - return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) user.visible_message("[user.name] slashes at the [src.name]!", "You slash at the [src.name]!") diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index da76c510940..caa7e9291be 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -180,13 +180,14 @@ var/const/GRAV_NEEDS_WRENCH = 3 // Fixing the gravity generator. /obj/machinery/gravity_generator/main/attackby(obj/item/I, mob/user, params) - var/old_broken_state = broken_state switch(broken_state) if(GRAV_NEEDS_SCREWDRIVER) if(istype(I, /obj/item/weapon/screwdriver)) user << "You secure the screws of the framework." playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) broken_state++ + update_icon() + return if(GRAV_NEEDS_WELDING) if(istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = I @@ -194,8 +195,10 @@ var/const/GRAV_NEEDS_WRENCH = 3 user << "You mend the damaged framework." playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) broken_state++ + update_icon() else if(WT.isOn()) user << "You don't have enough fuel to mend the damaged framework!" + return if(GRAV_NEEDS_PLASTEEL) if(istype(I, /obj/item/stack/sheet/plasteel)) var/obj/item/stack/sheet/plasteel/PS = I @@ -204,17 +207,18 @@ var/const/GRAV_NEEDS_WRENCH = 3 user << "You add the plating to the framework." playsound(src.loc, 'sound/machines/click.ogg', 75, 1) broken_state++ + update_icon() else user << "You need 10 sheets of plasteel!" + return if(GRAV_NEEDS_WRENCH) if(istype(I, /obj/item/weapon/wrench)) user << "You secure the plating to the framework." playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) set_fix() - else - ..() - if(old_broken_state != broken_state) - update_icon() + return + return ..() + /obj/machinery/gravity_generator/main/attack_hand(mob/user) if(!..()) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 1557c9138ae..09b33ebb881 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -223,7 +223,7 @@ display round(lastgen) and plasmatank amount anchored = 0 playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - + return else if(istype(O, /obj/item/weapon/screwdriver)) panel_open = !panel_open playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) @@ -231,8 +231,10 @@ display round(lastgen) and plasmatank amount user << "You open the access panel." else user << "You close the access panel." - else if(istype(O, /obj/item/weapon/crowbar) && panel_open) - default_deconstruction_crowbar(O) + return + else if(default_deconstruction_crowbar(O)) + return + return ..() /obj/machinery/power/port_gen/pacman/emag_act(mob/user) if(!emagged) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index d495f0681bc..2b19c42327b 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -114,24 +114,17 @@ // attach a wire to a power machine - leads from the turf you are standing on //almost never called, overwritten by all power machines but terminal and generator /obj/machinery/power/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/coil = W - var/turf/T = user.loc - if(T.intact || !istype(T, /turf/open/floor)) return - if(get_dist(src, user) > 1) return - coil.place_turf(T, user) - return else - ..() - return + return ..() + /////////////////////////////////////////// // Powernet handling helpers diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index eecacac5f85..051ca76dc48 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -246,16 +246,15 @@ disconnect_from_network() return - if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) + if(W.GetID()) if(emagged) user << "The lock seems to be broken!" return - if(src.allowed(user)) + if(allowed(user)) if(active) - src.locked = !src.locked + locked = !locked user << "You [src.locked ? "lock" : "unlock"] the controls." else - src.locked = 0 //just in case it somehow gets locked user << "The controls can only be locked when \the [src] is online!" else user << "Access denied." @@ -270,10 +269,10 @@ if(default_pry_open(W)) return - default_deconstruction_crowbar(W) + if(default_deconstruction_crowbar(W)) + return - ..() - return + return ..() /obj/machinery/power/emitter/emag_act(mob/user) if(!emagged) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 47604070cbd..378d179e08b 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -131,7 +131,7 @@ field_generator power level display user << "You cut \the [src] free from the floor." else - ..() + return ..() /obj/machinery/field/generator/emp_act() diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 332227b3562..490dfedd68a 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -15,7 +15,7 @@ if(src.energy >= 200) var/obj/singularity/S = new creation_type(T, 50) transfer_fingerprints_to(S) - if(src) qdel(src) + qdel(src) /obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) @@ -32,5 +32,5 @@ "You hear a ratchet.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) anchored = 0 - return - return ..() + else + return ..() diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 55190370271..c7efcc2278e 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -140,7 +140,7 @@ update_icon() return - ..() + return ..() /obj/structure/particle_accelerator/Move() diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index bef1d17af28..6543360d433 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -157,6 +157,7 @@ //disassembling the terminal if(istype(I, /obj/item/weapon/wirecutters) && terminal && panel_open) terminal.dismantle(user) + return //crowbarring it ! var/turf/T = get_turf(src) @@ -164,6 +165,9 @@ message_admins("[src] has been deconstructed by [key_name_admin(user)](?) (FLW) in ([T.x],[T.y],[T.z] - JMP)",0,1) log_game("[src] has been deconstructed by [key_name(user)]") investigate_log("SMES deconstructed by [key_name(user)]","singulo") + return + + return ..() /obj/machinery/power/smes/deconstruction() for(var/obj/item/weapon/stock_parts/cell/cell in component_parts) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 413411ac7c8..bd469e1853b 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -75,6 +75,5 @@ /obj/machinery/power/terminal/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/weapon/wirecutters)) dismantle(user) - return - - ..() + else + return ..() diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 682e22f5915..721fb142ee6 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -38,7 +38,10 @@ connect_to_network() return - default_deconstruction_crowbar(W) + if(default_deconstruction_crowbar(W)) + return + + return ..() /obj/machinery/power/tesla_coil/tesla_act(var/power) being_shocked = 1 @@ -77,7 +80,10 @@ if(default_unfasten_wrench(user, W)) return - default_deconstruction_crowbar(W) + if(default_deconstruction_crowbar(W)) + return + + return ..() /obj/machinery/power/grounding_rod/tesla_act(var/power) flick("coil_shock_1", src) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 3a0e06ef6b2..04450068d20 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -71,8 +71,8 @@ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the tracker.", "You take the glass off the tracker.") qdel(src) - return - ..() + else + return ..() // Tracker Electronic diff --git a/code/modules/projectiles/guns/grenade_launcher.dm b/code/modules/projectiles/guns/grenade_launcher.dm index 3c4657947d6..524568e28c8 100644 --- a/code/modules/projectiles/guns/grenade_launcher.dm +++ b/code/modules/projectiles/guns/grenade_launcher.dm @@ -30,14 +30,7 @@ usr << "The grenade launcher cannot hold more grenades." /obj/item/weapon/gun/grenadelauncher/afterattack(obj/target, mob/user , flag) - - if (istype(target, /obj/item/weapon/storage/backpack )) - return - - else if (locate (/obj/structure/table, src.loc)) - return - - else if(target == user) + if(target == user) return if(grenades.len) diff --git a/code/modules/projectiles/guns/projectile/saw.dm b/code/modules/projectiles/guns/projectile/saw.dm index 941b891c208..ebc79dfd8ad 100644 --- a/code/modules/projectiles/guns/projectile/saw.dm +++ b/code/modules/projectiles/guns/projectile/saw.dm @@ -76,6 +76,7 @@ armour_penetration = 0 /obj/item/projectile/bullet/saw/bleeding/on_hit(atom/target, blocked = 0, hit_zone) + . = ..() if((blocked != 100) && istype(target, /mob/living/carbon/human)) var/mob/living/carbon/human/H = target H.drip(35) diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 6389420a916..2cf416fdf08 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -20,7 +20,7 @@ /obj/item/projectile/energy/electrode/on_hit(atom/target, blocked = 0) . = ..() - if(!ismob(target) || blocked >= 2) //Fully blocked by mob or collided with dense object - burst into sparks! + if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks! var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread sparks.set_up(1, 1, src) sparks.start() @@ -51,8 +51,10 @@ SpinAnimation() /obj/item/projectile/energy/net/on_hit(atom/target, blocked = 0) - if(isliving(target) && !locate(/obj/effect/nettingportal) in loc) - new/obj/effect/nettingportal(get_turf(target)) + if(isliving(target)) + var/turf/Tloc = get_turf(target) + if(!locate(/obj/effect/nettingportal) in Tloc) + new/obj/effect/nettingportal(Tloc) ..() /obj/item/projectile/energy/net/on_range() @@ -98,7 +100,7 @@ range = 4 /obj/item/projectile/energy/trap/on_hit(atom/target, blocked = 0) - if(!ismob(target) || blocked >= 2) //Fully blocked by mob or collided with dense object - drop a trap + if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap new/obj/item/weapon/restraints/legcuffs/beartrap/energy(get_turf(loc)) else if(iscarbon(target)) var/obj/item/weapon/restraints/legcuffs/beartrap/B = new /obj/item/weapon/restraints/legcuffs/beartrap/energy(get_turf(target)) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 5c3f577f4d9..7fe9064c014 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -16,11 +16,6 @@ ..() update_icon() -/obj/machinery/computer/pandemic/set_broken() - icon_state = (beaker ? "mixer1_b" : "mixer0_b") - overlays.Cut() - stat |= BROKEN - /obj/machinery/computer/pandemic/proc/GetVirusByIndex(index) if(beaker && beaker.reagents) if(beaker.reagents.reagent_list.len) @@ -272,7 +267,9 @@ /obj/machinery/computer/pandemic/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER)) - if(stat & (NOPOWER|BROKEN)) return + . = 1 //no afterattack + if(stat & (NOPOWER|BROKEN)) + return if(beaker) user << "A beaker is already loaded into the machine!" return @@ -284,12 +281,10 @@ user << "You add the beaker to the machine." src.updateUsrDialog() icon_state = "mixer1" - - else if(istype(I, /obj/item/weapon/screwdriver)) - if(src.beaker) - beaker.loc = get_turf(src) - ..() - return else - ..() - return + return ..() + +/obj/machinery/computer/pandemic/deconstruction() + if(beaker) + beaker.loc = get_turf(src) + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index e1c9e8b3ea7..9ac92d78ace 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -104,6 +104,7 @@ return if (istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER) ) + . = 1 //no afterattack if (beaker) return 1 else @@ -140,7 +141,7 @@ user << "You empty the plant bag into the All-In-One grinder." src.updateUsrDialog() - return 0 + return 1 if (!is_type_in_list(I, blend_items) && !is_type_in_list(I, juice_items)) user << "Cannot refine into a reagent!" diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index a216e2ecdd2..ce8d57f492b 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -174,10 +174,9 @@ toxpwr = 1 /datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume) - if(istype(O,/obj/structure/alien/weeds/)) + if(istype(O,/obj/structure/alien/weeds)) var/obj/structure/alien/weeds/alien_weeds = O - alien_weeds.health -= rand(15,35) // Kills alien weeds pretty fast - alien_weeds.healthcheck() + alien_weeds.take_damage(rand(15,35), BRUTE, 0) // Kills alien weeds pretty fast else if(istype(O,/obj/effect/glowshroom)) //even a small amount is enough to kill it qdel(O) else if(istype(O,/obj/effect/spacevine)) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index a6b1171a6fc..3bcd9d6a5ef 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -6,33 +6,6 @@ flags = OPENCONTAINER spillable = 1 - can_be_placed_into = list( - /obj/machinery/chem_master/, - /obj/machinery/chem_dispenser/, - /obj/machinery/chem_heater/, - /obj/machinery/reagentgrinder, - /obj/machinery/biogenerator, - /obj/machinery/r_n_d/destructive_analyzer, - /obj/machinery/r_n_d/experimentor, - /obj/machinery/autolathe, - /obj/structure/table, - /obj/structure/rack, - /obj/structure/closet, - /obj/structure/sink, - /obj/item/weapon/storage, - /obj/machinery/atmospherics/components/unary/cryo_cell, - /obj/item/weapon/grenade/chem_grenade, - /mob/living/simple_animal/bot/medbot, - /obj/machinery/computer/pandemic, - /obj/structure/safe, - /obj/machinery/disposal, - /obj/machinery/hydroponics, - /obj/machinery/biogenerator, - /mob/living/simple_animal/cow, - /mob/living/simple_animal/hostile/retaliate/goat - ) - - /obj/item/weapon/reagent_containers/glass/attack(mob/M, mob/user, obj/target) if(!canconsume(M, user)) @@ -104,14 +77,6 @@ var/trans = reagents.trans_to(target, amount_per_transfer_from_this) user << "You transfer [trans] unit\s of the solution to [target]." - //Safety for dumping stuff into a ninja suit. It handles everything through attackby() and this is unnecessary. //gee thanks noize - //NINJACODE - else if(istype(target, /obj/item/clothing/suit/space/space_ninja)) - return - - else if(istype(target, /obj/effect/decal/cleanable)) //stops splashing while scooping up fluids - return - else if(reagents.total_volume) if(user.a_intent == "harm") user.visible_message("[user] splashes the contents of [src] onto [target]!", \ diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index f278a8d598a..4a9eb41cbc2 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -21,11 +21,7 @@ /obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user) - if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/rack) || istype(A, /obj/structure/closet) \ - || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics)) - return - - if(istype(A, /obj/effect/proc_holder/spell)) + if(istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics)) return if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index da5c39bb434..1db73cad36d 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -153,9 +153,9 @@ return qdel(I) cups++ - return else - ..() + return ..() + /obj/structure/reagent_dispensers/beerkeg name = "beer keg" desc = "A beer keg." diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 8ae4d09cac5..e0f333b8007 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -78,7 +78,7 @@ M.buffer = null user << "You upload the data from the [W.name]'s buffer." else - ..() + return ..() /obj/machinery/computer/telescience/attack_ai(mob/user) src.attack_hand(user) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 74fe6f5cab4..2b9890ee8c7 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -117,7 +117,8 @@ /obj/vehicle/attackby(obj/item/I, mob/user, params) if(keytype && istype(I, keytype)) user << "Hold [I] in one of your hands while you drive \the [name]." - + else + return ..() /obj/vehicle/Bump(atom/movable/M) . = ..() diff --git a/icons/obj/doors/door_fire2.dmi b/icons/obj/doors/door_fire2.dmi deleted file mode 100644 index 0640cce7bea35117e94e0eaf88d5ed87998b4d6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41754 zcmb5WWmH_v+vbbAy9EisoesmZ3v*0u5D?@LQsN>i?wMy@Ua{}?Jr2Rg6Kzux z9}7+qOb`jB;wlLy=)$t-JBgT;qG$<8v=PZW4Q(2N-vv!rlWbm@Wi5Y*ae%!t^)2i) ziS|RSgH%Rf(O|{q!!@oTF|EVE6s-?|jF$ZM^NSPDlHlRn+x5fR;kn@NLw5XVk^^lQ zjw->Dm-CCux#^eA%NLy}m(xW=zfI8j=E2qWz}dRH-^$jMGe26ifzO?*%fx4cQ5aBgDicQ zOj+16+1ku6-?OKoKs@?PK^iRm<~(*L@{^$+;IbVxs)_J;3G4x%b)D;Vq{)Q52p-y> z>_cTS!EL@i^NFr)wp~N~#-@f?DN0h``dPSskIYKEvl!*xrl7?TAz9vp@Q$9+ofCj2bXDHVZcT zw@+}cj6&lFR?<1_?R;rJ>AYzLbu4v!gcxh%#&)tlaM)tH%Cpk7q-=q-#$jR02%FEZ=>8JgM z=Y�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%0AkmLsOjwy@eca}r#Pcr)deKFk3uXZ(C*udr?c~<0 z`@gPc-EG|IU{GIgC_-bGi`cM3Q4^`~@2^zy32dhV#kiQnVCIFqFEZv+01MHn2!A%t@Gfi9(Q$LzC|1sTL5aqHdQ_=}93(qwUN7-H!zzydDE8>npI1<(xO_aZoT zSfibA`GwLhY*1Rz<55$p3$#1#H9?y4L#Y`CL?>iQ{&<>%Imh*XvQ3>%c+L@ zXzdnB9E+P`fQQLdxbnPAIz zxY6DU>1=zhIm;g+b?UR7f^X3rYUC;SKkUwctO=j4xbq+$$XI|0H=9>@Bcx z>}K8dlkX?=ND#!1ir$3De|+hU?z$_jcIbg@ySoE1lB$38t_R2U*T4N$s@HuKAu}g` z1^;}6D;D+HUEo{+U(t#fi1&Y-AjjDug~lMgdY=Lw2!DrZ^D~5h-K#~)zp_^O{Nrz+ z#{IBSHN&;n+%2f2*H2b{obEC(m4&|xnA%(JgPpC&e1Y&z`+~j9uA(* zmn9L1Sqx^jQ4eKF1^3TmV4nVP!til4ig#+F^x0hsPjTtKr+N1a^o#x0;R5^`z1w)X zQRU_WxEY7K{}Xcp`yl+K|DH$w`JUS)YD%f&O!u0lt&hlQ1aaLW%oxJ6?EpV$mU&?t zmTwk5N~J$T>CvDi;O_Em6L@)&;qbUFEu@PI0qZwX zFWaqVdX6v#|NLO&BfOKe7*y8Mv3_?lzM*}?cn-jM2w(SqR(LC~9y0!pSk{gH^MWe9Vp}&JlOIXG^p($nQ)Q*B@+f> zU`L1ZtffOAHwdkzn@Lg*A_GjG4%2JM8Qgk1!1E{YpdzP+kRWEctk>D*B$e5p7~7%MO@4V2C8`It^_jfyg&tXA_4{D-^M zH`BCavUFq!x@mnVUw;Gd1~*TJ7tXPm z{ty$0*(K+;?8Y8p{uhj+j+S8wiy&L$SR27l`%@y(;v8PZdzoZBBIi>NaS|-?=P8cC zb&m9@b1)3_`sAx00(rqk$c)gigCsK>QCjQT+67i(w9Vpf@3ZIOv>n>#@re1&uXDR* zdXJzt(7$j&V}ReXWijG2IX)9cClFwZNPuH&J-iPe(j`9>tPaB&WQrcbp=Ya=0A9MY z5%tXcQ|X|EYcF`hwBT5nBRJU>I~H8?=uY+K^RJz`5cqr?{6L?~gj`RL2|xU@0{;unYSrfA!Y*INu^w zfeDK-z79|RkKNK8Fw+wV-=M*tYP$3M2;4$m^DsC0K=2CfLVo03y z_2Vl@<{#xLJ&8(v;Ixmadwi;mKw7RZvvZ;on4e_IaCQ0(-A^t(!XDL{hU3`KD)oy zF^AbaIPswaTzyur?%;*>C?GIm~b^ySsr8zzb-yO@Mn$%e&%H^)yc^@5*YYR>SCbRqg0UOt16^4Xhz-7Ftl-IT96FG zz6^_c4J++vT_@2(PLO`K5gnV`Eez5CR;-z8e+KS7<@=RT_dKb~KbunCUuo3yeN5-c zda_n+(^e(5^9!MIE;3}y_Z|NtjIU_;?+-#w&ipjoX=7=#d^?q!0YS67rLSf^;I`ny zb+0bt5Xvr)A>lv!{}T-%5C6Eco)Z26Lcz2Mo8S)0xJKlh;Mf4RPpyvzg^G$e3D9YG zRb^T}m*kDq276b3dzK{FX$XHerp)UI#R)+ecx@p2%6gJ7Q2-Dgd4C{W!lKCmvj{uK;2UeF${KRl=jTpjOR@wYYfpa5A>JUcb z_sSBgKvoPsHWu$;PLR`1-)`As(>lBPDw5TP@NqP1Gj!a%RA%gU_FC z#@F6y+^nWRx=-61*^H+&Dv$>d$=-j$5sb8PEHc_8v(xPp?P|YhPV7lxK`*QXCU3fZ zQ)s%~TBo+FrjX+s_UY)&kCJ-m=#BgXR@Dv7uS$;SOiZFjKn+T4Yfb>I*nYP?Uekw= zAa+;xczDLqdEE0k*pQvE=-JB)gpMXIlbBW!G$&g zoY&Z>TeNZcPxPYktP{ZLAkdPSPAU8^rO*#4wVG1r-6>n2>B*2wUd*>4oD`6xkae$r zzH#Cpv@W;vs&4h5iUuVq^P(n|^7TNlC=#jn`Y_gEws`7L#eVAmuH*GT0TOd#01oUT zLUl2EkK*9mSaNm$ZcE%Tk()r$m{8(8D9ZA+T~1PVdGNhD8qI2W1IX zf#5>qyG`{*`%dULBMky6Ac$ujMBdkr^-_!V>t*Nkwzjq!d;9e7ALSV~d{Q6)c4bL{ zh_r)4V&fW8Oy6&QOG(r*u05*0VRV^sq|tJ8E*JV3VIV!y_Zs1I*efC#VU*H0KXjb< ztt?2^6a8l6vmEB(PJ}(opZjhF{tdOj-2AQlCk4AMv3PNYPREIC$=iFm~Em=lJ9N>BB_Q(b{3tPU+Fw?O&!p$52n1_?m>x zwqoi?%ipI)dSlX2jp7E6Xe_$ri9eOa3O|qpB+R2JB)gc*Byy7=N_bv~wy#8HV|tcr zl#Z^wuTC)oknX&CT7p6+Xmt$zy^s({CWc;i%bc&FNgDKhZP4KLnj_$LN0DpDWGlTL zT!ZIZ5s$)S=ure>LV-D2rF2<74go;0V~^V-4f^i60z&c}+$U;ON6C5h31INFEw^6V z8*p9y{jc007^p1FS&?v&_nGh0D87rc{)uhDP?)8qu zIYBkq5vx@;Z0S!)1iArdRCZMuNSO1-6arFTbH44%>JFo+2^k=dUa@gNLkWWwdLNC` z_{;ks-uE~J1XHtVbuZp_Su#&T5=;>B4d5NsEr!S+^T)Xz&T~hrfoT^k%0danFQ?GP zPn;-HIu@w-fCM1hElzn}{t>IwRd)QOy=7!dw-)Ti<<$6yZLsxnfXH5>bkK6R9haY@ zV>h+m5B!j2C+XF;sbnmY-dp`(2C7Uwc!B|=M`W$a?WxHKTbO&b$CnDz%eq%UHB)|{0msdX{SSeR2GRK5x><_Arm@b`7m!(p2rFJ zP}>_woWxyKnk6~~{caViqDNcm@oLjWlYJ<0BxZWQ!-)a}9OL7)ws_BUV8ouWnFTNX z7eI?(C(@Y8kSRCfBNJ-AtbC!hNT#Q8b>7s_H;~Um7+zMUhTCE$Mt|d719y=u!U9#d z5Y9~zXCt4I$oUxG4vED{)sA5lv5aXU{g^t@ob>DWYgNsp&FQRl%CZxFBa;nNyN&JR zf-E)7LUSfm5khMUk=p*0|2XWeQI=I>j$H&Dwcr?broNIL#FQbq{oGYjR<29se4M)r+))C3`g{fA;ko$>I8F(7St6Kem?N<6(a*Kq~h#E(Oy>> z3|=X|i&Ys>6bw_UEUCE_5~h)(M@%gy_78@GAz-@X(L>Qkyt1dYUtG1?)U?U?p@+Ku zt4Hz@b?RghHkeowFPsfqqDq4PszVdmKOw{*Ifa%$m~&KESRb`S8tt;HE>y;MSD$@U zJj;jw9MZ6`x_~T@)%} z{wHXT%^JmOZ6^WS2p_AX((Bmt{b2AFFFJy_*_$H|T5Vpqh2WY}+ut4r$bXCm+|@^F zUfUp9`P=|eA`0w}9t*)FD@^a6tG1PKt0_L~V=d_D4`;!}4uZ{cVKWqeJeF(pqXPD{ zru1{ztzJA=JjJV?wpR)ZXU$kxRai2@)D_keM(UA_^g0onO9!}nshG2H_8#S7F8Qf*rykANgoJMy zOjE;N`K-7Na6E(ZdeV&b6q@;7iHs*A#!S$3LrHn+GO-`ys`5%{j1Q+mys5vr2jQ$b zB9tmk4WHH6$ot+{qiUc7>L;UO3o|tMNfwk><(9;T&rHb;p)x+jS=eh@YEm<<}{&3PoW6=0`)7nZEP$4_vWH& zK94t!9%eRfuyEHXhS-67H-76ttDju;d>Sb;(*1FQ2LEY(atr>RuhldLjEd*wGCx8( zlZCbY1b8s7_qeT)8^3pC8Bjl7M3IlrAV;y~z8Zbi)Zg*(a^zoWL(F-)r;x@Gb>FU% zmo(OC3kI3RoIJe3Td+|9BN$+zISx1FcgVGd6-#=`)KD&+eVZEcNuJNji!dtjg(p9~ zB&65wlHD`oeaj{EJsNKM$Bno5W`pChSW_1EVT}FR4|>cf(ykZKmc7tw zd<{Yw#jWXup{7;hMRrRydEFU!0@pMo@*)DbT=NLA&JYNbHvsow-&_EtGa%JYe)YJv zy&%70Vb&+yWr9-pNG0$q^2G6dfq}B|;kI4(oN~e$n(+Z2-X5R z^i10}$g@`NMr7mr^s8QR*-|glX4LBgJ+kJ%`@6FbFhez+jgFb;opV_h-K3DzNgfC_ zQ=~%+d*&w=W=C5fV5s4pk*q2l)r6YH9P2Z$^f~u&9$Jr{U6CU-0k@)QP|-T9@9@1s z7b}>T(&b5Q)a9CpF5(5>x!-z+wmxdTvjqN#*L3yXDDr+8keYbSJzPX&^ehEK&O7-C z=qQ<3HIv@%G`vQJ{f80`C0EY2IsiWVH@zr=9~&!Q2^WLC2+DVME#;zFWNOg!`+pZiYW`*56K zHIe;ovoDaX9G{Q`bQ)YaanFVlo!kLexnzHy%ucYM}*l*5M6Y;>rMUJ449d#OStDk8~?$K z2+6O}zTFbWykN#ff)En@h@Vb_fcg@YpLgX)attU+)U}gHY%MBaL>i|<|3fmtun`a- z^6aW&jI4Go1E=98qv7qNC|*2S2Upjg@|F5kJL*7PsD;n2Xg3q|^Q0C3#;Ti{JjL^( zeM$+%--ySBe_eo(Y>1!yyY=K9%Y)y`aKfMKhjk? z61?jAN-8yqu_i;(7Jm2_jmjS*?w~u$8hKgbcJ!-wO zM~Xguo;<`2a^*-Gj(esR<=TO_WlOY>aF?#9HoM*tqPfRcWU86nk0lG+BgJ+(s;3AK z6qHzuEmZ63`9TiC`)$!x_V(3i4&-0u3*(Z`l6}8_P87wf(YC2q9-3aJA>OEI(CU&L zn=DMTp&pSB&rIdhR{UEzcYr+wT;oqSRL9I+fhy9E4nFrmTJ~iJOd_;DO=VCM7oP-% zJop|9@CTysqoNIqNcKM|uc*(Muz$0}P+zM{VaR1I`s5Fn7$5l*XQ$ss#PNyA(@no0 zq}xGbW@`~&Lo5a(iJDB{R^QE3_Wi|8Xt)sNW#*&w@k&HJ8Sy50u6Qf*YP+L$t^W1lNHK_SV`tUE(a7YQ8H}8#bN-1$Cd_&%5WO-6o)XU`}{>-@pwwy@RUv! zAh7`(F}^m+>puZ?cH+`)Q^7i3lNWP|G4|maeo{-dg}=7*ak8`u`9f(aYt}Fc6?N|0Ub;I;!kQFVb0!% zvp-tRK`e_!M|Qjeoz13iQ5a4f$6<`)z_h!g^jzXsgrBe z0%Bif9aoCWm4hDc-Fhct(M;BoaDLTPxen4dXVgQr<7`yn_7b3jU(5CGAp9dd^@-6u z7O_kBW4uY>QuZhW?2~bv-5t&kfKz9!*9~8y*PUDws_j#p`>2JL(J7A1wf&iI&#S27DIGqZ5Sd%#>{u zKy`5&%#}-w{Jc`xdfRA<-Lqs?cu~WTDG}5rBkQ-G?|W;pPHc(QW4y8ISw{?HE3XxLFjnKvIsP7(%P9piyoe!?ezx!8t3vC2U>o{&U@Nyt19g++3wit~WqMoqYIC)KhE$zR3w8F8eZ| zb-ipMVUkhl6-0>*`x0?z$aj%ElY|{XD8_AJr3{qr33am1fgGI!hr7`;L7Kj>wQJ{U z-3u@*$_(4d_8$K%^UwZtk2&5Y44(FLn44S_&s4@Iz2kf+Vx3e5sQI-$9XWnnVq4Tb zVVz%Pkh?nY`krl;FMY&rdtaw==B0U~(mlUcV7nZgD^txe%@us!BbyAr8iv1h-j) zojG_3lZWKW18OilI6Xe-3ye+Zyq2y;Vc!1$IeobKDJ7*j404$foth4PJH7D!c_yx9 z=wGe##wGp{_n(D=@=uA%O#-5z$!q;U7sAV?plgGtW=tCHiL(X81l-N8Y`D0#)2+zV zj}!JeqFIBeyy5evr`UI?Wt6GwD(&ZR0v6q&qpicX! zExLZnDt;^OPoiMa=NSyT=bVQlo`+U~q-qOQS*eckNb?V7c^g?aO4E%&YYnS)rjkQZ z(C1(nCE;AyCgD%p;v=04nyb-M3Z!r}X4aWuC(D*Pr`Yt4)q%j|vhwPB7XPSl^_-I| zfx`z~MY6I8BDD-~#Mg9liLF*SRyELQXMe>D+s2jCcW76yw;NREW_y)Iq{c+<9 zgVkXSyEIt6>^pkCbX@=MXVBl)Ir>X?qDY|4%`UNx=$gmX zP7aGssx6*19u_RPn|gL+jb~XBiTwuE$1}2^-=}|U^uwwd2V~$rTFc9~KSZN=+&|r( zgIVderI!I(r&n63v1h4X?$+j-Pw?(Hwhl34mA1bqPdD{H2$$Q6F5d=_|It8Xg3f8f zeV6rZ4Moe1Eql}AVYNqVlT!*x)i%9YmOGtyo#*H3NQ4Xt>pF_R!J6EzP<=g-Q1JC3FybcPCQVaX@|DZQ1+Q+)i8*8ehsNwXZ);Gyl*a^^8Z;w}1Dh`k; zUf#X8{+iERVotUXeve>JGp@OxR9Fo_Pg-w0o~#npiZ?7$CexiPp6D+=w-O-aL6Zz( zS7mRBV7R;e0=(4=)qOo%gsm8P#i{9z+-W%yBUPKIUeMiA|5S29`As){ZMX#qrpA`l zCn7-8lmklcd`0cG4SAj@qT2I(`}Q<_)X>r4ervw%E*T*+_MJLBy3b{285?hrp370Y zwW1DY3cp8IlBJ>1UtJ-Z_u$3d3#MM{x<@VitsPh#XUXNef{);`yg@KMP%Gu`7?)5P z8d!~r?EkN=vy6%=jN10lNSAbXcY`o=h@=Aof^o zd(d~i^?m$c@nhCv)_I;2_ukjFPmiZxhJae{c=qei&@POh*&kE^oC+W~?am-!LNr(EGtT z?zA*cElH9K80+F~$@u=h>VP!0Fkkxxr;SXR*QuhUC^B8e1e$X7EI(40On!#(wD83% zWnq3YvuS69i-ypv1)27%E_(bj`aa7bt@?Tud;#XI9gnvF10?&GND?Uh-2*hKUs7ZG zIi=c(39}8Q_DyjV%Evg?0mUz6w~ugt!=@Z!w{<9%{cFS;$x_&&&)nPXaH)Jg~)~Ia>Dd<;Xq#uxpLdTtP zOx~CmX`6LJ^lh&U>Gb1uQ3ZDpc2Mk@kObxr0me1eIom&B=%`~nwW{QUqtXVG#o@2;8PK)Q7rbjqZo)AOB&bKub`h%uL* z{qRRNq8Qk5#6w-p?fsg9xN96b+G7g$RsF9wA5_7eM4JYmF+4oop2}mwdLob?!>nLs z1#K?<4t|BkSQLs9|F#rS747uF0Qz`CHjLV5uIq5D^+z zF!JzE#vBsfBFze5I`ejqa&{DX_k);7AfPt_5U?N1%5SC0!-D6aF`gR>S z`(+%t8Pofmd)=>Qu$t#|H~Lmhfh!{Wjjg#wBPuOAqN3u4QZG{>wo_=*v{p$VA?~-g z#83E4fNT@CYskpyyl~!HEG~run;h8 z>U-jQ^-YMDCOGs^?pTGQQ?ST4?{1Vi{UjC`Lds>e;>KIWf+q z*+*9Dd;B8^C9lJ_2*EF6@ia7~AYX6H=EjwO3reUuGcjdwUK`=Jr0~n)=!p#i8QVDy zwj@v@yjOq3k`0Vtu>9&TmBUJLCOsG)@{&MjlWml__=-raA20XHB7rITDD{6v|} z5FOqQ|9$vPTdP2=8eX4IiTV+!{WiegG1jTqv?5wBj^YaX7xe^m}?bJU~TW=Fu8yxR0( zB$`(yO;j(xj$qgx^P=ZVsY;qGUtmxs5E1D3@fDBzSFBnpj4^Pf&Q^wH!S9|-S>0M~ zsOUu*VA0`z=B}9GslR36#>&L-x@DS-;L>tAYxo~>GL5#ANY=}4^lnj0T(C5ZAo<$X*Pa1^MAhcE8|j8%)zSuhkmWX zDG=EJEvbw!QypxHpZ>ssuG%sg6F(o~X@`-bP0FARVo3JZ&Pa>R7pd0z9Z|2*_OYDR z3d5e?gifg}8>gp{YJ}tM0%8z|4WTe-HLeV%$j!Rmq9XG`hXS*)q6yMM$e)7kB-oY0 z`rzIA`l^LM@?NPJRAK6uDd!U}Ok24sdR47q8ESBuL(GUt90SImdP4&)N3T>Lt|Z0# zJZ3L&lR2Wf@ZSJP_^BYEN9Z@@6>JwHWuBhoJj*^hw3$Brs;Q=Ao)&;nG{H@Qlu8M7 zoV39Yt`S?5FoZuZE{Te^tLPvK9U##D^_NJ&5SJT4JW#2sLn3mbI=TSsh1g37`c4L1 z&9b*M5-*sGv>yOCa+1qO++_*on6$=etyD6D8^{OJB2Y|7u_uc{#e^yh6)>98fjVQOgN@9(20YaNRtvPPbtI5a<0~=E>YULL zDVZfk6ku&%ewF~sQzAZkd}c5MtCqeOZ^uYOf0!oJq(P!+9dXUUdT0o;xY9sTytO88 zpo(Kee5_9`E(yPB!jOH2AKj~PdNk6@*NyYYC*e?f0R`y|s&Y$c>1W`jQ$tCcWbY$w zkQ7?5y)5Pg&ptG^{Tk1IdR?>vq~*Ct(}v-j z&)UW%#|g=p_y4;bq4f6lupvLH>Ux9)U%s`Y##R|WuV^;|v<~F2yZD}{(D;?ehnpn- z$@H*hJPN$gE?95m@*yB}&9-;XxYz(S6z&HN$L5G~#y@Gn!J=KMgEzalc z{%AIeS^65px|q*wzbU~JkA~jd&@Cdv&iKHR@4K9c36fP&hi_2_fTd}l8UAkMs#shQ zR~+?dP@}-w_C@W7f;yQ>i=hcrjT{`${ZQy&g502L!5Xsr6d1}^Gj3G|oqK&-8?IQ4 z2nSA1th#x;SNgWJ?ASSviR;m3E;D?eJ1AQFJWlYSH-$zwY8DB!a{sG1cIIsk&^|2R z^|e`}G^#7$ADX-sjWn558>@|}l&XbWGucA-4Y`s&2uV5IysRM5eDmqA?{&SV(i_yA ziyfoXxuqq#5kyXNczv2^3&c-ZZY84 zzveG!l(z}@9xJ&pXXfCS0ZXDQci9zTy%V^9RH=J+X3N5c;jvABdeCT&;u%gdH>)Oh zE(C(w<~q^KeI5WaOPj>)#XKA3KC^?JQ8(2G4bw$yq#P`yd~#J=z2<)MhjU>%Dz~E^8%+UJN#<$$35U7C zlxZ$~8x|;m`=K^BpPD^nxbj$>;oF|uLphO#1`9M%99lQ8|I^O4-MV?4yAs zA{4%MA0pwnlBc!|Xkq9mMZ)9qrTJ>I02{-eqsg4-t8Y;dR%meTx@2&Ii@P8@4slm3_p=AV#r81YPZg)wE&WrCieDN@JOBU1Z-sFz#NBD zmq&mJE-bEMp3nH(KIO>o6J-M~t~DkG?`xwtr*r150XKQc>9p$!tTCuXQkWDGCQr>v zX>{vgnMOA^P$ZTbeWBOCKzx7VTH>{GzS~{<>hqUyE-IArG)pED6-fHvzHV~>d;(rw zWiH^>%4y{Th&_K{7Byrl4|V2pyfS5s;rtkmo_OwE zCEQ|!M++p_$oolVlihy_7Oe5xc8nnyENEKFV@55R;@; zZh=gH5WsIr2n*fQ{iO2hXUbSpIw>H`pWDAxNf2=lj}L^^^K&}4IZJ8ltNZ*86i*Uj z9CeN~GkD8xnWRw33lr!b4Oqt*x7~fn8VUXy>>*_?)&1ly*gz4_Ld;6KnXvq1c^dm( zGkH9?jEZBW$L@0*)ddKLt3s(~3h(lA(Oxtw?vWoUK^4H8-zE25DEp!)(%S(&Z5`_T zv1Hu_AqBt_5n)6&3<|3x1@VGxw?QjsCr2ke)sU0giqA&VeAY6U-UHbp>pg%I<}L+x z%}FD>az|{szP?t2FfuOvvWQgZLs^_$><|&Sy72mq+}LOlwcb`=!&#pZQ;Wc;C~t@( zQxi$dCGo{9z?@;4FW|;u-os!jW*ec-g)Ngiq3yD~O}Jt~?t%R23cpSgo+gLpQFl1r zuO11Zu)4asjC}ybxZC?$A*p*U_3mjx1JISR2k9rxOd!-P0?J8hhBHK$T(v6HLd<|- zsTi%8q&6LE?4@+aPP1mO!}T-j18CPz?!Lvv4AV?)jOGLWaV?~LcD%{na(YuEBPuD^ z{;y8D;x}Mg?~dO$z;~9@JP3~OtAqOfgBU<2X$$&tILK?#0mkRjpjOpko!3c?KLU-y z9{}z3$9)I|c5CWwCS%~IH?N|Pk6nn~CFh>o-A~a~$Pt3f6mz$OczsV$` zr9)cgMfA8D{Iajijn>}Yj#tepx0HCDH9e7Ar6Lb6(|*ARY`sAAM68wDTVDv;|1XWU zHHHUVVm{~N;|ro6+_ST@lRcW((~+VR_#pY>#S2ldBic&=2;0};jx_$p*iibZQ>f>r zYUs_)F%0)U_(!c+LiA%IjjR6~ipP#RWD(Q2So`4DXg`cPNZ&|%a(n+ya;^1GP=YYN zK_z3imMGxdA|Mhe29oGjAEj0--zyKpj?0d_^JR7`?;-)DjektR%YYYbfyw&ir&xa zX2DX}kP(B2ko-#j^~=!ykZW_(K_oVA_Gp!@_iqd;8y|qvHDomH$L@z3UB}wGIzBg^ ziatH5tC$09xIaWlikejZJKQLux|*Aam>3bnZPXqb#=xMuqb;1EiaS@dGPhc--EAT< z*WNBpB&x9H`zERI5@)>@sjRH1> zC95alKFGMLnrXU;`o4JAiI_+Cnfr&zO3hcVB7y%nH$VSlFomVXp#=Us;=BjvS(Vb&^FI-X-+z6((#)1KwYW&ijfHC#76mWL z=aU9*>FB=7TVn(e=8|$lsRByo4LWkt8|`r58=xGz;SD{w zVn85}t1o|yQ?ZSrmky=Ma8I|!pR+?#dYf#Lb{{%BrRKOqc*^nt0HK_pO<_UFsJyaL z+d+p5!y;*bGQuv{YG94F5)JhTSbY*ZJ6@+%Ny$9JSYY|*xb%a&+}%y}p=7!pp23pm znOz{0h9_5d(L4noK44CgBr}y(R6- z1Q9ej8?82Y;=C#Vyt5`p5p6b&`a(!}7ss&iodK{snHPa)x;;Q!L$p&Oa<7H?E5bZi zO^65{w#)x01*i!^m}5Bk5jGvooWATaKEXETSz|h8TdiOt>bRtKbQ25IINz4&H6^2% z@G#pMFeQpjNV)U&sdKZ#FmdE`K>HWqG39L2yHW;*f0b)@$DkdIlm89ypqVFAIEz@R zzC5VXUQ1yc<2tIj8Tzs3mm5xZA^FlI45g̍FfTY{-{q$>zO;WYd|VFYD$7QEDb^gGj%y=YD-g70o_FU>}HUS zMBtFFcWo`c=#fQceVo)d%w!M@;t>+rSW$`xsj~nFbv>J>0|eM+i=LbQOTnz!(2RF%OHw=~Jqp7`Q_B;CN$Lc`Dw9tH5SjqHHNCd5kIB7pn zrw9u05@p6g=haJR1GdH!3NV2{0#$4cTKa?m|8cU6t(%aMxCcacmw6abvoHX`v05`6b-Chj?7W?deBa5fb3s`)2P2s8JIvF`QfU z_8=A1687j!#B3~s;pv@HIbH{)lP}9nU|O(hpiRE#Mwp1_fSaHov(1rF-mXBAy_dr+ZkX0cB5>7w ztI3RfjiHR-4G@jMeL|c`D`hW~vHW>qmdsc(KZ>xptt`e9O1M2v&nUmFj%(sTCN z!;n~ijER+41vB}7rE6XoO;6zddz8Us$0vE}NaLWJ ztngYuFR*(W>s{#Gs-Apw-OrfI%Gn>_$;7-p%_oXKjr!cCg|l8+;-x3^{}Y6_{{>;_ z`r-cx!mMPsgxsmHozisHNUxWV6P(sV6rjQMv8{l?Q9_6a_MZ$T@%TQ4$14~b-;YDV zv4Fi+w2Bvh;fD{_CFP7+3UR*KZy9|_o>BSk{&>M3U08-G3JVW+`!E}Ys>0&g6HERs zna5z@ddd~2mZ5F?^MHHF!1mX%3yht0MG6vuQaCeAw5nC_`t{#Lll3nQ(f}nigtH8T z4FGRz?gbxZBKo6LTN?n1MXz-{nttV4>WMOcPoF#oVyJ3H}d32q@41 diff --git a/tgstation.dme b/tgstation.dme index a2a4a626d32..50adc433f20 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -103,6 +103,7 @@ #include "code\_onclick\hud\alien.dm" #include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\blob_overmind.dm" +#include "code\_onclick\hud\blobbernauthud.dm" #include "code\_onclick\hud\drones.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\ghost.dm" From b146131a342d32a0bdac80d9130ae28ca3299c9d Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 24 Apr 2016 20:37:00 +0200 Subject: [PATCH 130/228] Second commits. This contains the changes to item_attack.dm Obj/attackby() now follows a similar structure as mob/living/attackby. It calls attack_obj() (like attack() but for obj) which calls attacked_by (just like attack() does) The use of the NOBLUDGEON flag changes a bit, it is now used to signify the item cannot be used as a melee weapon at all. No attack animation, no attack message. I've given this bitflag to many items that have an afterattack() so as to not both attack and do the special action (among those items: the rcd) There's also the code changes to attacking machines: attacking any machine now give a proper message and a sound. And with this, I made more machines breakable (using a health var and the very little used BROKEN stat). Most notably, tables can now be attacked when on harm intent and be destroyed. The newly destroyable machines have a take_damage() proc used by all sorts of attack (weapon, xeno, animal, hulk, mech melee, gun projectile, thrown items). There's some more stuff in there, see the PR's description and comments. --- code/_onclick/item_attack.dm | 135 ++++++----- code/game/gamemodes/gang/dominator.dm | 126 ++++------ code/game/machinery/PDApainter.dm | 75 ++++-- code/game/machinery/announcement_system.dm | 27 +-- code/game/machinery/camera/camera.dm | 88 ++++--- code/game/machinery/computer/computer.dm | 82 +++---- code/game/machinery/droneDispenser.dm | 80 ++++--- code/game/machinery/firealarm.dm | 34 ++- code/game/machinery/machinery.dm | 61 ++++- code/game/machinery/newscaster.dm | 160 +++++++------ code/game/machinery/requests_console.dm | 39 ++-- code/game/machinery/shieldgen.dm | 216 +++++++++--------- code/game/machinery/teleporter.dm | 48 ++-- code/game/machinery/vending.dm | 34 +-- .../atmospherics/machinery/atmosmachinery.dm | 55 ++--- .../components/binary_devices/passive_gate.dm | 14 +- .../components/binary_devices/pump.dm | 13 +- .../components/binary_devices/volume_pump.dm | 14 +- .../components/unary_devices/cryo.dm | 7 +- .../unary_devices/portables_connector.dm | 8 +- .../components/unary_devices/thermomachine.dm | 1 + .../components/unary_devices/vent_pump.dm | 10 +- .../components/unary_devices/vent_scrubber.dm | 13 +- .../machinery/portable/canister.dm | 54 ++--- .../portable/portable_atmospherics.dm | 64 +++--- .../kitchen machinery/processor.dm | 23 +- .../kitchen machinery/smartfridge.dm | 42 ++-- code/modules/hydroponics/biogenerator.dm | 72 +++--- code/modules/hydroponics/seed_extractor.dm | 36 ++- code/modules/mining/equipment_locker.dm | 27 ++- .../suit/n_suit_verbs/energy_net_nets.dm | 91 ++++---- code/modules/paperwork/paperbin.dm | 22 +- code/modules/power/antimatter/control.dm | 33 ++- code/modules/power/antimatter/shielding.dm | 27 ++- code/modules/power/lighting.dm | 131 +++++------ code/modules/power/singularity/collector.dm | 48 ++-- code/modules/power/solar.dm | 96 +++++--- .../chemistry/machinery/chem_dispenser.dm | 69 +++--- .../chemistry/machinery/chem_heater.dm | 22 +- .../chemistry/machinery/chem_master.dm | 52 +---- code/modules/recycling/conveyor2.dm | 19 +- .../recycling/disposal-construction.dm | 14 +- code/modules/recycling/disposal-structures.dm | 94 +++----- code/modules/recycling/disposal-unit.dm | 81 ++++--- code/modules/recycling/sortingmachinery.dm | 2 + code/modules/research/circuitprinter.dm | 112 ++++----- code/modules/research/destructive_analyzer.dm | 35 +-- code/modules/research/experimentor.dm | 43 +--- code/modules/research/protolathe.dm | 88 +++---- code/modules/research/rdmachines.dm | 56 ++++- code/modules/research/server.dm | 21 +- code/modules/shuttle/emergency.dm | 49 ++-- code/modules/telesci/telepad.dm | 27 ++- icons/obj/machines/research.dmi | Bin 19007 -> 19008 bytes 54 files changed, 1480 insertions(+), 1410 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 0c49e41078a..e392d3ee432 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -7,10 +7,8 @@ /atom/proc/attackby(obj/item/W, mob/user, params) return -/atom/movable/attackby(obj/item/W, mob/living/user, params) - user.do_attack_animation(src) - if(W && !(W.flags & NOBLUDGEON)) - visible_message("[user] has hit [src] with [W]!") +/obj/attackby(obj/item/I, mob/living/user, params) + return I.attack_obj(src, user) //phil235 /mob/living/attackby(obj/item/I, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) @@ -21,42 +19,54 @@ playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1) if(do_mob(user, src, 80/sharpness)) harvest(user) - return - I.attack(src, user) + return 1 + return I.attack(src, user) //phil235 should we return 1 if successful special attack() so we don't call afterattack? + //see the attack() procs if it'd be useful. -/mob/living/proc/attacked_by(obj/item/I, mob/living/user, def_zone) - apply_damage(I.force, I.damtype, def_zone) - if(I.damtype == "brute") - if(prob(33) && I.force) - var/turf/location = get_turf(src) - location.add_blood_floor(src) - var/message_verb = "" - if(I.attack_verb && I.attack_verb.len) - message_verb = "[pick(I.attack_verb)]" - else if(I.force) - message_verb = "attacked" +/obj/item/proc/attack(mob/living/M, mob/living/user, def_zone) + if(flags & (NOBLUDGEON|ABSTRACT)) //phil235 check that no abstract item uses attack or attack_obj + return + if(!force) + playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1) + else if(hitsound) + playsound(loc, hitsound, get_clamped_volume(), 1, -1) - var/attack_message = "[src] has been [message_verb] with [I]." - if(user) + user.lastattacked = M + M.lastattacker = user + + M.attacked_by(src, user, def_zone) + + add_logs(user, M, "attacked", src.name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + add_fingerprint(user) + + +//the equivalent of the standard version of attack() but for object targets. +/obj/item/proc/attack_obj(obj/O, mob/living/user) + if(flags & (NOBLUDGEON|ABSTRACT)) //phil235 + return + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(O) + O.attacked_by(src, user) + + + +/atom/movable/proc/attacked_by() + return + +/obj/attacked_by(obj/item/I, mob/living/user) + if(I.force) + user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") + +/mob/living/attacked_by(obj/item/I, mob/living/user, def_zone) + if(user != src) user.do_attack_animation(src) - if(user in viewers(src, null)) - attack_message = "[user] has [message_verb] [src] with [I]!" - if(message_verb) - visible_message("[attack_message]", - "[attack_message]") - -/mob/living/simple_animal/attacked_by(var/obj/item/I, var/mob/living/user) - if(!I.force) - user.visible_message("[user] gently taps [src] with [I].",\ - "This weapon is ineffective, it does no damage!") - else if(I.force >= force_threshold && I.damtype != STAMINA) - ..() - else - visible_message("[I] bounces harmlessly off of [src].",\ - "[I] bounces harmlessly off of [src]!") - - + if(send_item_attack_message(I, user, def_zone)) + if(apply_damage(I.force, I.damtype, def_zone)) + if(I.damtype == BRUTE) + if(prob(33)) + var/turf/location = get_turf(src) + location.add_blood_floor(src) // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. @@ -65,30 +75,35 @@ /obj/item/proc/get_clamped_volume() - if(src.force && src.w_class) - return Clamp((src.force + src.w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100 - else if(!src.force && src.w_class) - return Clamp(src.w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 + if(w_class) + if(force) + return Clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100 + else + return Clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 -/obj/item/proc/attack(mob/living/M, mob/living/user, def_zone) - - if (!istype(M)) // not sure if this is the right thing... - return - - if (hitsound && force > 0) //If an item's hitsound is defined and the item's force is greater than zero... - playsound(loc, hitsound, get_clamped_volume(), 1, -1) //...play the item's hitsound at get_clamped_volume() with varying frequency and -1 extra range. - else if (force == 0)//Otherwise, if the item's force is zero... - playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1)//...play tap.ogg at get_clamped_volume() - ///////////////////////// - user.lastattacked = M - M.lastattacker = user - - //spawn(1800) // this wont work right - // M.lastattacker = null - ///////////////////////// - M.attacked_by(src, user, def_zone) - - add_logs(user, M, "attacked", src.name, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") - add_fingerprint(user) +/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area) + var/message_verb = "attacked" + if(I.attack_verb.len) + message_verb = "[pick(I.attack_verb)]" + else if(!I.force) + return 0 + var/message_hit_area = "" + if(hit_area) + message_hit_area = " in the [hit_area]" + var/attack_message = "[src] has been [message_verb][message_hit_area] with [I]." + if(user in viewers(src, null)) + attack_message = "[user] has [message_verb] [src][message_hit_area] with [I]!" + visible_message("[attack_message]", + "[attack_message]") return 1 + +/mob/living/simple_animal/send_item_attack_message(obj/item/I, mob/living/user, hit_area) + if(!I.force) + user.visible_message("[user] gently taps [src] with [I].",\ + "This weapon is ineffective, it does no damage!") + else if(I.force < force_threshold || I.damtype == STAMINA) + visible_message("[I] bounces harmlessly off of [src].",\ + "[I] bounces harmlessly off of [src]!") + else + return ..() \ No newline at end of file diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index 6f32e5c427c..83f6da190fe 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -9,8 +9,9 @@ var/maxhealth = 200 var/health = 200 var/datum/gang/gang - var/operating = 0 //-1=broken, 0=standby, 1=takeover + var/operating = 0 //0=standby or broken, 1=takeover var/warned = 0 //if this device has set off the warning at <3 minutes yet + var/datum/effect_system/spark_spread/spark_system /obj/machinery/dominator/tesla_act() qdel(src) @@ -19,10 +20,12 @@ ..() SetLuminosity(2) poi_list |= src + spark_system = new + spark_system.set_up(5, 1, src) /obj/machinery/dominator/examine(mob/user) ..() - if(operating == -1) + if(stat & BROKEN) user << "It looks completely busted." return @@ -52,30 +55,31 @@ else SSmachine.processing -= src -/obj/machinery/dominator/proc/healthcheck(damage) - var/iconname = "dominator" - if(gang) - iconname += "-[gang.color]" - SetLuminosity(3) - - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread - +/obj/machinery/dominator/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(src, 'sound/effects/bang.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + else + return health -= damage if(health > (maxhealth/2)) if(prob(damage*2)) - sparks.set_up(5, 1, src) - sparks.start() - else if(operating >= 0) - sparks.set_up(5, 1, src) - sparks.start() + spark_system.start() + else if(!(stat & BROKEN)) + spark_system.start() overlays += "damage" - if(operating != -1) + if(!(stat & BROKEN)) if(health <= 0) set_broken() - else - icon_state = iconname if(health <= -100) new /obj/item/stack/sheet/plasteel(src.loc) @@ -107,17 +111,19 @@ SetLuminosity(0) icon_state = "dominator-broken" overlays.Cut() - operating = -1 + operating = 0 + stat |= BROKEN SSmachine.processing -= src /obj/machinery/dominator/Destroy() - if(operating != -1) + if(!(stat & BROKEN)) set_broken() poi_list.Remove(src) + qdel(spark_system) return ..() /obj/machinery/dominator/emp_act(severity) - healthcheck(100) + take_damage(100, BURN, 0) ..() /obj/machinery/dominator/ex_act(severity, target) @@ -128,31 +134,26 @@ if(1) qdel(src) if(2) - healthcheck(120) + take_damage(120, BRUTE, 0) if(3) - healthcheck(30) + take_damage(30, BRUTE, 0) return -/obj/machinery/dominator/bullet_act(obj/item/projectile/Proj) - if(Proj.damage) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - var/damage = Proj.damage - if(Proj.forcedodge) - damage *= 0.5 - playsound(src, 'sound/effects/bang.ogg', 50, 1) - visible_message("[src] was hit by [Proj].") - healthcheck(damage) - ..() +/obj/machinery/dominator/bullet_act(obj/item/projectile/P) + . = ..() + if(P.damage) + var/damage_amount = P.damage + if(P.forcedodge) + damage_amount *= 0.5 + visible_message("[src] was hit by [P].") + take_damage(damage_amount, P.damage_type, 0) + /obj/machinery/dominator/blob_act() - healthcheck(110) - -/obj/machinery/dominator/attackby(obj/I, mob/user, params) - - return + take_damage(110, BRUTE, 0) /obj/machinery/dominator/attack_hand(mob/user) - if(operating) + if(operating || (stat & BROKEN)) examine(user) return @@ -185,8 +186,9 @@ priority_announce("Network breach detected in [locname]. The [gang.name] Gang is attempting to seize control of the station!","Network Alert") gang.domination() src.name = "[gang.name] Gang [src.name]" - healthcheck(0) operating = 1 + icon_state = "dominator-[gang.color]" + SetLuminosity(3) SSmachine.processing += src gang.message_gangtools("Hostile takeover in progress: Estimated [time] minutes until victory.[gang.dom_attempts ? "" : " This is your final attempt."]") @@ -194,46 +196,14 @@ if(G != gang) G.message_gangtools("Enemy takeover attempt detected in [locname]: Estimated [time] minutes until our defeat.",1,1) -/obj/machinery/dominator/attack_alien(mob/living/user) - user.do_attack_animation(src) - playsound(src, 'sound/effects/bang.ogg', 50, 1) - user.visible_message("[user] smashes against [src] with its claws.",\ - "You smash against [src] with your claws.",\ - "You hear metal scraping.") - healthcheck(15) - -/obj/machinery/dominator/attack_animal(mob/living/user) - if(!isanimal(user)) - return - var/mob/living/simple_animal/M = user - M.do_attack_animation(src) - if(M.melee_damage_upper <= 0) - return - healthcheck(M.melee_damage_upper) - -/obj/machinery/dominator/mech_melee_attack(obj/mecha/M) - if(M.damtype == "brute") - playsound(src, 'sound/effects/bang.ogg', 50, 1) - visible_message("[M.name] has hit [src].") - healthcheck(M.force) - return - /obj/machinery/dominator/attack_hulk(mob/user) - playsound(src, 'sound/effects/bang.ogg', 50, 1) user.visible_message("[user] smashes [src].",\ "You punch [src].",\ "You hear metal being slammed.") - healthcheck(5) + take_damage(5) + +/obj/machinery/dominator/attacked_by(obj/item/I, mob/living/user) + add_fingerprint(user) + ..() + -/obj/machinery/dominator/attackby(obj/item/weapon/I, mob/living/user, params) - if(istype(I, /obj/item/weapon)) - add_fingerprint(user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if( (I.flags&NOBLUDGEON) || !I.force ) - return - playsound(src, 'sound/weapons/smash.ogg', 50, 1) - visible_message("[user] has hit \the [src] with [I].") - if(I.damtype == BURN || I.damtype == BRUTE) - healthcheck(I.force) - return diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index fce5479c697..4ff95775e70 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -7,6 +7,7 @@ anchored = 1 var/obj/item/device/pda/storedpda = null var/list/colorlist = list() + var/health = 100 /obj/machinery/pdapainter/update_icon() @@ -45,7 +46,7 @@ power_change() return - if(istype(O, /obj/item/device/pda)) + else if(istype(O, /obj/item/device/pda)) if(storedpda) user << "There is already a PDA inside!" return @@ -59,27 +60,65 @@ P.add_fingerprint(user) update_icon() + else if(istype(O, /obj/item/weapon/weldingtool) && user.a_intent != "harm") + var/obj/item/weapon/weldingtool/WT = O + if(stat & BROKEN) + if(WT.remove_fuel(0,user)) + user.visible_message("[user] is repairing [src].", \ + "You begin repairing [src]...", \ + "You hear welding.") + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + if(do_after(user,40/WT.toolspeed, 1, target = src)) + if(!WT.isOn() || !(stat & BROKEN)) + return + user << "You repair [src]." + playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + stat &= ~BROKEN + health = initial(health) + update_icon() + else + user << "[src] does not need repairs." + else + return ..() + +/obj/machinery/pdapainter/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + if(!(stat & BROKEN)) + health -= damage + if(health <= 0) + stat |= BROKEN + update_icon() /obj/machinery/pdapainter/attack_hand(mob/user) - ..() + if(..()) + add_fingerprint(user) - src.add_fingerprint(user) + if(storedpda) + var/obj/item/device/pda/P + P = input(user, "Select your color!", "PDA Painting") as null|anything in colorlist + if(!P) + return + if(!in_range(src, user)) + return + if(!storedpda)//is the pda still there? + return + storedpda.icon_state = P.icon_state + storedpda.desc = P.desc + ejectpda() - if(storedpda) - var/obj/item/device/pda/P - P = input(user, "Select your color!", "PDA Painting") as null|anything in colorlist - if(!P) - return - if(!in_range(src, user)) - return - if(!storedpda)//is the pda still there? - return - storedpda.icon_state = P.icon_state - storedpda.desc = P.desc - ejectpda() - - else - user << "The [src] is empty." + else + user << "The [src] is empty." /obj/machinery/pdapainter/verb/ejectpda() diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index e83bff6774a..29af1ab1e18 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -73,26 +73,19 @@ var/list/announcement_systems = list() /obj/machinery/announcement_system/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + panel_open = !panel_open if(!panel_open) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You open the maintenance hatch of [src]." - panel_open = 1 - else - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You close the maintenance hatch of [src]." - panel_open = 0 + user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." update_icon() + else if(default_deconstruction_crowbar(P)) return - - if(panel_open) - default_deconstruction_crowbar(P) - if(istype(P, /obj/item/device/multitool) && broken) - user << "You reset [src]'s firmware." - broken = 0 - update_icon() - return - - return ..() + else if(istype(P, /obj/item/device/multitool) && panel_open && broken) + user << "You reset [src]'s firmware." + broken = 0 + update_icon() + else + return ..() /obj/machinery/announcement_system/proc/CompileText(str, user, rank) //replaces user-given variables with actual thingies. str = replacetext(str, "%PERSON", "[user]") diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 600f0793715..648339bcbf7 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -63,7 +63,7 @@ if(assembly) qdel(assembly) assembly = null - if(istype(bug)) + if(bug) bug.bugged_cameras -= src.c_tag if(bug.current == src) bug.current = null @@ -110,9 +110,13 @@ /obj/machinery/camera/ex_act(severity, target) if(src.invuln) return - else - ..() - return + switch(severity) + if(1) + qdel(src) + if(2) + take_damage(50, BRUTE, 0) + else + take_damage(rand(30,60), BRUTE, 0) /obj/machinery/camera/proc/setViewRange(num = 7) src.view_range = num @@ -123,17 +127,6 @@ return user.electrocute_act(10, src) -/obj/machinery/camera/attack_paw(mob/living/carbon/alien/humanoid/user) - if(!istype(user)) - return - user.do_attack_animation(src) - add_hiddenprint(user) - visible_message("\The [user] slashes at [src]!") - playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) - health = max(0, health - 30) - if(!health && status) - toggle_cam(user, 0) - /obj/machinery/camera/attackby(obj/W, mob/living/user, params) var/msg = "You attach [W] into the assembly's inner circuits." var/msg2 = "[src] already has that upgrade!" @@ -173,6 +166,7 @@ user << "[msg]" else user << "[msg2]" + return else if(istype(W, /obj/item/stack/sheet/mineral/plasma)) if(!isEmpProof()) @@ -181,6 +175,8 @@ qdel(W) else user << "[msg2]" + return + else if(istype(W, /obj/item/device/assembly/prox_sensor)) if(!isMotion()) upgradeMotion() @@ -188,6 +184,7 @@ qdel(W) else user << "[msg2]" + return // OTHER if((istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/device/pda)) && isliving(user)) @@ -220,34 +217,52 @@ else if (O.client && O.client.eye == src) O << "[U] holds \a [itemname] up to one of the cameras ..." O << browse(text("[][]", itemname, info), text("window=[]", itemname)) + return - else if (istype(W, /obj/item/device/camera_bug)) - if (!src.can_use()) + else if(istype(W, /obj/item/device/camera_bug)) + if(!can_use()) user << "Camera non-functional." return - if(istype(src.bug)) + if(bug) user << "Camera bug removed." - src.bug.bugged_cameras -= src.c_tag - src.bug = null + bug.bugged_cameras -= src.c_tag + bug = null else user << "Camera bugged." - src.bug = W - src.bug.bugged_cameras[src.c_tag] = src + bug = W + bug.bugged_cameras[src.c_tag] = src + return + + else if(istype(W, /obj/item/weapon/pai_cable)) + var/obj/item/weapon/pai_cable/cable = W + cable.plugin(src, user) + return else if(istype(W, /obj/item/device/laser_pointer)) var/obj/item/device/laser_pointer/L = W L.laser_act(src, user) + return + return ..() - else - if(W.force >= 10) //fairly simplistic, but will do for now. - user.changeNext_move(CLICK_CD_MELEE) - visible_message("[user] hits [src] with [W]!", "You hit [src] with [W]!") - health = max(0, health - W.force) - user.do_attack_animation(src) - if(!health && status) - triggerCameraAlarm() - toggle_cam(user, 1) - return +/obj/machinery/camera/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(src, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + if(damage < 10) //camera has a damage resistance threshold + return + health = max(0, health - damage) + if(!health && status) + triggerCameraAlarm() + toggle_cam(null, 0) /obj/machinery/camera/proc/toggle_cam(mob/user, displaymessage = 1) status = !status @@ -373,12 +388,9 @@ else src.SetLuminosity(0) -/obj/machinery/camera/bullet_act(obj/item/projectile/proj) - if(proj.damage_type == BRUTE) - health = max(0, health - proj.damage) - if(!health && status) - triggerCameraAlarm() - toggle_cam(null, 1) +/obj/machinery/camera/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) /obj/machinery/camera/portable //Cameras which are placed inside of things, such as helmets. var/turf/prev_turf diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index c67b1b2f56b..a6f8eb6eb01 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -12,6 +12,7 @@ var/brightness_on = 2 var/icon_keyboard = "generic_key" var/icon_screen = "generic" + var/computer_health = 25 /obj/machinery/computer/New(location, obj/item/weapon/circuitboard/C) ..(location) @@ -32,7 +33,10 @@ return 1 /obj/machinery/computer/emp_act(severity) - if(prob(20/severity)) set_broken() + if(severity == 1) + take_damage(rand(15,30), BRUTE, 0) + else + take_damage(rand(15,25), BRUTE, 0) ..() /obj/machinery/computer/ex_act(severity, target) @@ -42,25 +46,17 @@ switch(severity) if(1) qdel(src) - return if(2) - if (prob(25)) + if(prob(25)) qdel(src) - return - if (prob(50)) - verbs.Cut() - set_broken() + else + take_damage(rand(20,30), BRUTE, 0) if(3) - if (prob(25)) - verbs.Cut() - set_broken() - else - return + take_damage(rand(10,30), BRUTE, 0) -/obj/machinery/computer/bullet_act(obj/item/projectile/Proj) - if(prob(Proj.damage)) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - set_broken() + +/obj/machinery/computer/bullet_act(obj/item/projectile/P) + take_damage(P.damage, P.damage_type, 0) ..() /obj/machinery/computer/update_icon() @@ -83,24 +79,19 @@ update_icon() return -/obj/machinery/computer/proc/set_broken() - if(circuit) //no circuit, no breaking - stat |= BROKEN - update_icon() - return - /obj/machinery/computer/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver) && circuit && !(flags&NODECONSTRUCT)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << " You start to disconnect the monitor..." if(do_after(user, 20/I.toolspeed, target = src)) + deconstruction() var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) A.circuit = circuit A.anchored = 1 circuit = null for (var/obj/C in src) C.loc = src.loc - if (src.stat & BROKEN) + if (stat & BROKEN) user << "The broken glass falls out." new /obj/item/weapon/shard( src.loc ) A.state = 3 @@ -110,30 +101,25 @@ A.state = 4 A.icon_state = "4" qdel(src) - return + else + return ..() -/obj/machinery/computer/attack_paw(mob/living/user) - user.do_attack_animation(src) - if(circuit) - if(prob(10)) - user.visible_message("[user.name] smashes the [src.name] with its paws.",\ - "You smash the [src.name] with your paws.",\ - "You hear a smashing sound.") - set_broken() +/obj/machinery/computer/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(stat & BROKEN) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + else + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else return - user.visible_message("[user.name] smashes against the [src.name] with its paws.",\ - "You smash against the [src.name] with your paws.",\ - "You hear hear a clicking sound.") - -/obj/machinery/computer/attack_alien(mob/living/user) - user.do_attack_animation(src) - if(circuit) - if(prob(80)) - user.visible_message("[user.name] smashes the [src.name] with its claws.",\ - "You smash the [src.name] with your claws.",\ - "You hear a smashing sound.") - set_broken() - return - user.visible_message("[user.name] smashes against the [src.name] with its claws.",\ - "You smash against the [src.name] with your claws.",\ - "You hear a clicking sound.") + computer_health = max(computer_health - damage, 0) + if(circuit) //no circuit, no breaking + if(!computer_health && !(stat & BROKEN)) + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) + stat |= BROKEN + update_icon() diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index 159e115888a..c2743105444 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -172,7 +172,7 @@ visible_message("[src] [end_create_message]") icon_state = icon_recharging sleep(cooldownTime) - if(stat != BROKEN) + if(!(stat & BROKEN)) icon_state = icon_on else icon_state = icon_off @@ -210,36 +210,50 @@ user << "You insert [stack] sheet[stack > 1 ? "s" : ""] to [src]." if((O && O.loc == src) || !stack) qdel(O) - return - if(istype(O, /obj/item/weapon/weldingtool) && (stat & BROKEN)) - var/obj/item/weapon/weldingtool/WT = O - if(!WT.isOn()) + else if(istype(O, /obj/item/weapon/weldingtool)) + if(stat & BROKEN) + var/obj/item/weapon/weldingtool/WT = O + if(!WT.isOn()) + return + if(WT.get_fuel() < 1) + user << "You need more fuel to complete this task!" + return + playsound(src, 'sound/items/Welder.ogg', 50, 1) + user.visible_message("[user] begins patching up [src] with [WT].", \ + "You begin restoring the damage to [src]...") + if(!do_after(user, 40/O.toolspeed, target = src)) + return + if(!src || !WT.remove_fuel(1, user)) return + user.visible_message("[user] fixes [src]!", \ + "You restore [src] to operation.") + stat &= ~BROKEN + health = max_health + if(!stat) + icon_state = icon_on + else + user << "[src] doesn't need repairs." + else + return ..() + +/obj/machinery/droneDispenser/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + else return - if(WT.get_fuel() < 1) - user << "You need more fuel to complete this task!" - return - playsound(src, 'sound/items/Welder.ogg', 50, 1) - user.visible_message("[user] begins patching up [src] with [WT].", \ - "You begin restoring the damage to [src]...") - if(!do_after(user, 40/O.toolspeed, target = src)) - return - if(!src || !WT.remove_fuel(1, user)) return - user.visible_message("[user] fixes [src]!", \ - "You restore [src] to operation.") - stat -= BROKEN - icon_state = icon_on - return - if(O.force && stat != BROKEN) - user.visible_message("[user] hits [src] with [O]!", \ - "You hit [src] with [O]!") - playsound(src, O.hitsound, 50, 1) - health = Clamp(health - O.force, 0, max_health) - if(health <= 0) - if(break_message) - audible_message("[src] [break_message]") - if(break_sound) - playsound(src, break_sound, 50, 1) - stat = BROKEN - icon_state = icon_off - return - ..() + health = max(health - damage, 0) + if(!health && !(stat & BROKEN)) + if(break_message) + audible_message("[src] [break_message]") + if(break_sound) + playsound(src, break_sound, 50, 1) + stat |= BROKEN + icon_state = icon_off + diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 0965843654a..95276267b3b 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -21,6 +21,7 @@ power_channel = ENVIRON var/detecting = 1 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone + var/health = 50 /obj/machinery/firealarm/New(loc, dir, building) ..() @@ -61,9 +62,9 @@ else overlays += "overlay_fire" -/obj/machinery/firealarm/bullet_act(BLAH) - if(prob(50)) - alarm() +/obj/machinery/firealarm/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) /obj/machinery/firealarm/emp_act(severity) if(prob(50 / severity)) @@ -74,11 +75,11 @@ emagged = 1 if(user) user.visible_message("Sparks fly out of the [src]!", - "You emag the [src], disabling its thermal sensors.") + "You emag [src], disabling its thermal sensors.") playsound(src.loc, 'sound/effects/sparks4.ogg', 50, 1) /obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume) - if(!emagged && detecting && temperature > T0C + 200) + if(!emagged && detecting && !stat && temperature > T0C + 200) alarm() /obj/machinery/firealarm/proc/alarm() @@ -200,4 +201,25 @@ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) qdel(src) return - return ..() \ No newline at end of file + return ..() + +/obj/machinery/firealarm/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + if(!(stat & BROKEN)) + health -= damage + if(health <= 0) + stat |= BROKEN + update_icon() + else if(prob(33)) + alarm() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 1c32cd0aeee..12e87f98ee9 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -137,10 +137,6 @@ Class Procs: dropContents() return ..() -/obj/machinery/attackby(obj/item/weapon/W, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) - ..() - /obj/machinery/proc/locate_machinery() return @@ -243,6 +239,61 @@ Class Procs: //////////////////////////////////////////////////////////////////////////////////////////// +/obj/machinery/mech_melee_attack(obj/mecha/M) + if(M.damtype == BRUTE || M.damtype == BURN) + visible_message("[M.name] has hit [src].") + take_damage(M.force*2, M.damtype) // multiplied by 2 so we can hit machines hard but not be overpowered against mobs. + return 1 + return 0 + +/obj/machinery/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force, I.damtype, 1) + +/obj/machinery/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + +//phil235 + + + +/obj/machinery/attack_alien(mob/living/carbon/alien/humanoid/user) + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + add_hiddenprint(user) + visible_message("\The [user] slashes at [src]!") + playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) + take_damage(20, BRUTE, 0) + +/obj/machinery/attack_animal(mob/living/simple_animal/M) + M.changeNext_move(CLICK_CD_MELEE) + M.do_attack_animation(src) + if(M.melee_damage_upper > 0) // phil235 use M.attack_text verb? + M.visible_message("[M.name] smashes against \the [src.name].",\ + "You smash against the [src.name].") + take_damage(M.melee_damage_upper, M.melee_damage_type, 1) + + +/obj/machinery/attack_paw(mob/living/user) + if(user.a_intent != "harm") + return attack_hand(user) + else + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + user.visible_message("[user.name] smashes against \the [src.name] with its paws.",\ + "You smash against the [src.name] with your paws.") + take_damage(4, BRUTE, 1) + + /obj/machinery/attack_ai(mob/user) if(isrobot(user))// For some reason attack_robot doesn't work var/mob/living/silicon/robot/R = user @@ -251,8 +302,6 @@ Class Procs: else return attack_hand(user) -/obj/machinery/attack_paw(mob/user) - return attack_hand(user) //set_machine must be 0 if clicking the machinery doesn't bring up a dialog /obj/machinery/attack_hand(mob/user, check_power = 1, set_machine = 1) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 3eedfeec907..4005154672f 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -175,8 +175,6 @@ var/list/obj/machinery/newscaster/allCasters = list() verb_say = "beeps" verb_ask = "beeps" verb_exclaim = "beeps" - var/isbroken = 0 - var/ispowered = 1 var/screen = 0 var/paper_remaining = 15 var/securityCaster = 0 @@ -188,11 +186,12 @@ var/list/obj/machinery/newscaster/allCasters = list() var/obj/item/weapon/photo/photo = null var/channel_name = "" var/c_locked=0 - var/hitstaken = 0 + var/health = 60 var/datum/newscaster/feed_channel/viewing_channel = null var/allow_comments = 1 luminosity = 0 anchored = 1 + var/hitstaken = 0 //phil235 to be removed, it's used in a map var edit. /obj/machinery/newscaster/security_unit name = "security newscaster" @@ -217,32 +216,35 @@ var/list/obj/machinery/newscaster/allCasters = list() return ..() /obj/machinery/newscaster/update_icon() - if(!ispowered || isbroken) - icon_state = "newscaster_off" - if(isbroken) - overlays.Cut() - overlays += image(icon, "crack3") - return overlays.Cut() - if(news_network.wanted_issue.active) - icon_state = "newscaster_wanted" - return - if(alert) - overlays += "newscaster_alert" - if(hitstaken > 0) - overlays += image(icon, "crack[hitstaken]") - icon_state = "newscaster_normal" + if(stat & (NOPOWER|BROKEN)) + icon_state = "newscaster_off" + else + if(news_network.wanted_issue.active) + icon_state = "newscaster_wanted" + else + icon_state = "newscaster_normal" + if(alert) + overlays += "newscaster_alert" + switch(health) + if(45 to 60) + return + if(30 to 45) + overlays += "crack1" + if(15 to 30) + overlays += "crack2" + else + overlays += "crack3" + /obj/machinery/newscaster/power_change() - if(isbroken) + if(stat & BROKEN) return if(powered()) - ispowered = 1 stat &= ~NOPOWER update_icon() else spawn(rand(0, 15)) - ispowered = 0 stat |= NOPOWER update_icon() @@ -251,21 +253,18 @@ var/list/obj/machinery/newscaster/allCasters = list() if(1) qdel(src) if(2) - isbroken=1 if(prob(50)) qdel(src) else - update_icon() + take_damage(rand(40,80), BRUTE, 0) else - if(prob(50)) - isbroken=1 - update_icon() + take_damage(rand(20,40), BRUTE, 0) /obj/machinery/newscaster/attack_ai(mob/user) return attack_hand(user) /obj/machinery/newscaster/attack_hand(mob/user) - if(!ispowered || isbroken) + if(stat & (NOPOWER|BROKEN)) return if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) ) var/mob/living/human_or_robot_user = user @@ -327,11 +326,11 @@ var/list/obj/machinery/newscaster/allCasters = list() if(6) dat+="ERROR: Could not submit Feed story to Network.

      " if(channel_name=="") - dat+="•Invalid receiving channel name.
      " + dat+="?Invalid receiving channel name.
      " if(scanned_user=="Unknown") - dat+="•Channel author unverified.
      " + dat+="?Channel author unverified.
      " if(msg == "" || msg == "\[REDACTED\]") - dat+="•Invalid message body.
      " + dat+="?Invalid message body.
      " dat+="
      Return
      " if(7) dat+="ERROR: Could not submit Feed Channel to Network.

      " @@ -342,18 +341,18 @@ var/list/obj/machinery/newscaster/allCasters = list() else existing_authors += FC.author if(scanned_user in existing_authors) - dat+="•There already exists a Feed channel under your name.
      " + dat+="?There already exists a Feed channel under your name.
      " if(channel_name=="" || channel_name == "\[REDACTED\]") - dat+="•Invalid channel name.
      " + dat+="?Invalid channel name.
      " var/check = 0 for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) if(FC.channel_name == channel_name) check = 1 break if(check) - dat+="•Channel name already in use.
      " + dat+="?Channel name already in use.
      " if(scanned_user=="Unknown") - dat+="•Channel author unverified.
      " + dat+="?Channel author unverified.
      " dat+="
      Return
      " if(8) var/total_num=length(news_network.network_channels) @@ -472,11 +471,11 @@ var/list/obj/machinery/newscaster/allCasters = list() if(16) dat+="ERROR: Wanted Issue rejected by Network.

      " if(channel_name=="" || channel_name == "\[REDACTED\]") - dat+="•Invalid name for person wanted.
      " + dat+="?Invalid name for person wanted.
      " if(scanned_user=="Unknown") - dat+="•Issue author unverified.
      " + dat+="?Issue author unverified.
      " if(msg == "" || msg == "\[REDACTED\]") - dat+="•Invalid description.
      " + dat+="?Invalid description.
      " dat+="
      Return
      " if(17) dat+="Wanted Issue successfully deleted from Circulation
      " @@ -724,39 +723,66 @@ var/list/obj/machinery/newscaster/allCasters = list() user << "You start [anchored ? "un" : ""]securing [name]..." playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 60/I.toolspeed, target = src)) - user << "You [anchored ? "un" : ""]secure [name]." - new /obj/item/wallframe/newscaster(loc) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - qdel(src) - return - if(isbroken) - playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - audible_message("[user.name] further abuses the shattered [name].", null, 5 ) - else - if(istype(I, /obj/item/weapon)) - user.do_attack_animation(src) - var/obj/item/weapon/W = I - if(W.damtype == STAMINA) - return - if(W.force <15) - audible_message("[user.name] hits the [name] with the [W.name] with no visible effect.", null , 5 ) - playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) + if(stat & BROKEN) + user << "The broken remains of [src] fall on the ground." + new /obj/item/stack/sheet/metal(loc, 5) + new /obj/item/weapon/shard(loc) + new /obj/item/weapon/shard(loc) else - hitstaken++ - if(hitstaken==3) - audible_message("[user.name] smashes the [name]!", null, 5 ) - isbroken=1 - playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) - else - audible_message("[user.name] forcefully slams the [name] with the [I.name]!", null, 5 ) - playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) + user << "You [anchored ? "un" : ""]secure [name]." + new /obj/item/wallframe/newscaster(loc) + qdel(src) + else if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent != "harm") + var/obj/item/weapon/weldingtool/WT = I + if(stat & BROKEN) + if(WT.remove_fuel(0,user)) + user.visible_message("[user] is repairing [src].", \ + "You begin repairing [src]...", \ + "You hear welding.") + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + if(do_after(user,40/WT.toolspeed, 1, target = src)) + if(!WT.isOn() || !(stat & BROKEN)) + return + user << "You repair [src]." + playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + stat &= ~BROKEN + update_icon() else - user << "This does nothing!" - update_icon() + user << "[src] does not need repairs." + else + return ..() + +/obj/machinery/newscaster/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(stat & BROKEN) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) + else + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + if(damage < 15) //so it can't be broken with a small weapon. + return + if(!(stat & BROKEN)) + health -= damage + if(health <= 0) + stat |= BROKEN + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) + update_icon() + /obj/machinery/newscaster/attack_paw(mob/user) - user << "The newscaster controls are far too complicated for your tiny brain!" - return + if(user.a_intent != "harm") + user << "The newscaster controls are far too complicated for your tiny brain!" + else + take_damage(5) + +//phil235 missing attack_alien, attack_animal, bullet_act, etc... /obj/machinery/newscaster/proc/AttachPhoto(mob/user) if(photo) @@ -895,7 +921,7 @@ var/list/obj/machinery/newscaster/allCasters = list() switch(screen) if(0) //Cover dat+="
      The Griffon
      " - dat+="
      Nanotrasen-standard newspaper, for use on Nanotrasen© Space Facilities

      " + dat+="
      Nanotrasen-standard newspaper, for use on Nanotrasen? Space Facilities

      " if(isemptylist(news_content)) if(wantedAuthor) dat+="Contents:
        **Important Security Announcement** \[page [pages+2]\]
      " @@ -1022,4 +1048,6 @@ var/list/obj/machinery/newscaster/allCasters = list() return scribble_page = curr_page scribble = s - attack_self(user) \ No newline at end of file + attack_self(user) + else + return ..() \ No newline at end of file diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index f367cb641b5..aa169ff97b6 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -64,7 +64,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console/update_icon() if(open) - if(hackState == 0) + if(!hackState) icon_state="req_comp_open" else icon_state="req_comp_rewired" @@ -135,7 +135,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() dat += "" dat += "[dpt]" dat += "Normal High" - if (hackState == 1) + if(hackState) dat += "EXTREME" dat += "" dat += "" @@ -150,7 +150,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() dat += "" dat += "[dpt]" dat += "Normal High" - if (hackState == 1) + if(hackState) dat += "EXTREME" dat += "" dat += "" @@ -165,7 +165,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() dat += "" dat += "[dpt]" dat += "Normal High" - if (hackState == 1) + if(hackState) dat += "EXTREME" dat += "" dat += "" @@ -479,34 +479,29 @@ var/list/obj/machinery/requests_console/allConsoles = list() SetLuminosity(2) /obj/machinery/requests_console/attackby(obj/item/weapon/O, mob/user, params) - if (istype(O, /obj/item/weapon/crowbar)) + if(istype(O, /obj/item/weapon/crowbar)) if(open) user << "You close the maintenance panel." open = 0 - icon_state="req_comp0" else user << "You open the maintenance panel." open = 1 - if(hackState == 0) - icon_state="req_comp_open" - else if(hackState == 1) - icon_state="req_comp_rewired" - if (istype(O, /obj/item/weapon/screwdriver)) + update_icon() + return + if(istype(O, /obj/item/weapon/screwdriver)) if(open) - if(hackState == 0) + hackState = !hackState + if(hackState) user << "You modify the wiring." - hackState = 1 - icon_state="req_comp_rewired" - else if(hackState == 1) + else user << "You reset the wiring." - hackState = 0 - icon_state="req_comp_open" + update_icon() else - user << "You can't do much with that!" - update_icon() + user << "You must open the maintenance panel first!" + return var/obj/item/weapon/card/id/ID = O.GetID() - if (ID) + if(ID) if(screen == 9) msgVerified = "Verified by [ID.registered_name] ([ID.assignment])" updateUsrDialog() @@ -517,9 +512,11 @@ var/list/obj/machinery/requests_console/allConsoles = list() announceAuth = 0 user << "You are not authorized to send announcements!" updateUsrDialog() + return if (istype(O, /obj/item/weapon/stamp)) if(screen == 9) var/obj/item/weapon/stamp/T = O msgStamped = "Stamped with the [T.name]" updateUsrDialog() - return + return + return ..() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index a00cbf3d205..a26b66350de 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -33,35 +33,25 @@ /obj/machinery/shield/CanAtmosPass(turf/T) return !density -/obj/machinery/shield/attackby(obj/item/weapon/W, mob/user, params) - ..() - if(W.damtype == BRUTE || W.damtype == BURN) - take_damage(W.force) - -/obj/machinery/shield/bullet_act(obj/item/projectile/Proj) - ..() - take_damage(Proj.damage) +/obj/machinery/shield/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type) /obj/machinery/shield/ex_act(severity, target) switch(severity) if(1) - if (prob(75)) - qdel(src) + take_damage(rand(180,260), BRUTE, 0) if(2) - if (prob(50)) - qdel(src) + take_damage(rand(150,230), BRUTE, 0) if(3) - if (prob(25)) - qdel(src) - return + take_damage(rand(80,150), BRUTE, 0) /obj/machinery/shield/emp_act(severity) switch(severity) if(1) qdel(src) if(2) - if(prob(50)) - qdel(src) + take_damage(50, BRUTE, 0) /obj/machinery/shield/blob_act() qdel(src) @@ -77,14 +67,21 @@ ..() take_damage(tforce) -/obj/machinery/shield/proc/take_damage(damage) - playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) +/obj/machinery/shield/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) + if(BRUTE) + if(sound_effect) + playsound(loc, 'sound/effects/EMPulse.ogg', 75, 1) + else + return opacity = 1 spawn(20) opacity = 0 health -= damage if(health <= 0) - visible_message("[src] dissipates.") qdel(src) /obj/machinery/shieldgen @@ -100,9 +97,7 @@ var/const/max_health = 100 var/health = max_health var/active = 0 - var/malfunction = 0 //Malfunction causes parts of the shield to slowly dissapate var/list/deployed_shields = list() - var/is_open = 0 //Whether or not the wires are exposed var/locked = 0 var/shield_range = 4 @@ -114,20 +109,22 @@ /obj/machinery/shieldgen/proc/shields_up() - if(active) return 0 //If it's already turned on, how did this get called? + if(active) + return 0 //If it's already turned on, how did this get called? - src.active = 1 + active = 1 update_icon() for(var/turf/target_tile in range(shield_range, src)) if (istype(target_tile,/turf/open/space) && !(locate(/obj/machinery/shield) in target_tile)) - if (malfunction && prob(33) || !malfunction) + if(!(stat & BROKEN) || prob(33)) deployed_shields += new /obj/machinery/shield(target_tile) /obj/machinery/shieldgen/proc/shields_down() - if(!active) return 0 //If it's already off, how did this get called? + if(!active) + return 0 //If it's already off, how did this get called? - src.active = 0 + active = 0 update_icon() for(var/obj/machinery/shield/shield_tile in deployed_shields) @@ -135,66 +132,70 @@ deployed_shields.Cut() /obj/machinery/shieldgen/process() - if(malfunction && active) + if((stat & BROKEN) && active) if(deployed_shields.len && prob(5)) qdel(pick(deployed_shields)) - return -/obj/machinery/shieldgen/proc/checkhp() - if(health <= 30) - src.malfunction = 1 - if(health <= 0) - qdel(src) - update_icon() - return +/obj/machinery/shieldgen/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + else + return + health = max(health - damage, 0) + if(health <= 0 && !(stat && BROKEN)) + stat |= BROKEN + update_icon() /obj/machinery/shieldgen/ex_act(severity, target) switch(severity) if(1) - src.health -= 75 - src.checkhp() + qdel(src) if(2) - src.health -= 30 - if (prob(15)) - src.malfunction = 1 - src.checkhp() + if(prob(33)) + qdel(src) + else + take_damage(rand(80,120), BRUTE, 0) if(3) - src.health -= 10 - src.checkhp() - return + take_damage(rand(40,80), BRUTE, 0) /obj/machinery/shieldgen/emp_act(severity) switch(severity) if(1) - src.health /= 2 //cut health in half - malfunction = 1 + health = 0 + stat |= BROKEN locked = pick(0,1) + update_icon() if(2) - if(prob(50)) - src.health *= 0.3 //chop off a third of the health - malfunction = 1 - checkhp() + take_damage(rand(80,120), BRUTE, 0) /obj/machinery/shieldgen/attack_hand(mob/user) if(locked) user << "The machine is locked, you are unable to use it!" return - if(is_open) + if(panel_open) user << "The panel must be closed before operating this machine!" return - if (src.active) + if (active) user.visible_message("[user] deactivated \the [src].", \ "You deactivate \the [src].", \ "You hear heavy droning fade out.") - src.shields_down() + shields_down() else if(anchored) user.visible_message("[user] activated \the [src].", \ "You activate \the [src].", \ "You hear heavy droning.") - src.shields_up() + shields_up() else user << "The device must first be secured to the floor!" return @@ -202,14 +203,12 @@ /obj/machinery/shieldgen/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/screwdriver)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) - if(is_open) - user << "You close the panel." - is_open = 0 - else + panel_open = !panel_open + if(panel_open) user << "You open the panel and expose the wiring." - is_open = 1 - - else if(istype(W, /obj/item/stack/cable_coil) && malfunction && is_open) + else + user << "You close the panel." + else if(istype(W, /obj/item/stack/cable_coil) && (stat & BROKEN) && panel_open) var/obj/item/stack/cable_coil/coil = W if (coil.get_amount() < 1) user << "You need one length of cable to repair [src]!" @@ -220,7 +219,7 @@ return coil.use(1) health = max_health - malfunction = 0 + stat &= ~BROKEN user << "You repair \the [src]." update_icon() @@ -237,31 +236,30 @@ user << "You unsecure \the [src] from the floor!" if(active) user << "\The [src] shuts off!" - src.shields_down() + shields_down() anchored = 0 - - else if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) - if(src.allowed(user)) - src.locked = !src.locked - user << "You [src.locked ? "lock" : "unlock"] the controls." + else if(W.GetID()) + if(allowed(user)) + locked = !locked + user << "You [locked ? "lock" : "unlock"] the controls." else user << "Access denied." else - ..() + return ..() /obj/machinery/shieldgen/emag_act() - if(!malfunction) - malfunction = 1 + if(!(stat & BROKEN)) + stat |= BROKEN + health = 0 update_icon() /obj/machinery/shieldgen/update_icon() if(active) - src.icon_state = malfunction ? "shieldonbr":"shieldon" + icon_state = (stat & BROKEN) ? "shieldonbr":"shieldon" else - src.icon_state = malfunction ? "shieldoffbr":"shieldoff" - return + icon_state = (stat & BROKEN) ? "shieldoffbr":"shieldoff" ////FIELD GEN START //shameless copypasta from fieldgen, powersink, and grille #define maxstoredpower 500 @@ -273,6 +271,8 @@ anchored = 0 density = 1 req_access = list(access_teleporter) + flags = CONDUCT + use_power = 0 var/active = 0 var/power = 0 var/steps = 0 @@ -280,8 +280,6 @@ var/check_delay = 10 var/recalc = 0 var/locked = 1 - var/destroyed = 0 -// var/maxshieldload = 200 var/obj/structure/cable/attached // the attached cable var/storedpower = 0 flags = CONDUCT @@ -312,8 +310,6 @@ if(PN) //runtime errors fixer. They were caused by PN.newload trying to access missing network in case of working on stored power. storedpower += shieldload PN.load += shieldload //uses powernet power. -// message_admins("[PN.load]") -// use_power(250) //uses APC power /obj/machinery/shieldwallgen/attack_hand(mob/user) if(!anchored) @@ -326,21 +322,21 @@ user << "\The [src] needs to be powered by wire underneath!" return 1 - if(src.active >= 1) - src.active = 0 + if(active >= 1) + active = 0 icon_state = "Shield_Gen" user.visible_message("[user] turned \the [src] off.", \ "You turn off \the [src].", \ "You hear heavy droning fade out.") - src.cleanup() + cleanup() else - src.active = 1 + active = 1 icon_state = "Shield_Gen +a" user.visible_message("[user] turned \the [src] on.", \ "You turn on \the [src].", \ "You hear heavy droning.") - src.add_fingerprint(user) + add_fingerprint(user) /obj/machinery/shieldwallgen/process() power() @@ -350,28 +346,26 @@ storedpower = maxstoredpower if(storedpower <= 0) storedpower = 0 -// if(shieldload >= maxshieldload) //there was a loop caused by specifics of process(), so this was needed. -// shieldload = maxshieldload - if(src.active == 1) + if(active == 1) if(!anchored) - src.active = 0 + active = 0 return setup_field(1) setup_field(2) setup_field(4) setup_field(8) src.active = 2 - if(src.active >= 1) - if(src.power == 0) - src.visible_message("The [src.name] shuts down due to lack of power!", \ + if(active >= 1) + if(power == 0) + visible_message("The [src.name] shuts down due to lack of power!", \ "You hear heavy droning fade out.") icon_state = "Shield_Gen" - src.active = 0 - src.cleanup(1) - src.cleanup(2) - src.cleanup(4) - src.cleanup(8) + active = 0 + cleanup(1) + cleanup(2) + cleanup(4) + cleanup(8) /obj/machinery/shieldwallgen/proc/setup_field(NSEW = 0) var/turf/T = src.loc @@ -436,16 +430,16 @@ anchored = 0 return - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (src.allowed(user)) - src.locked = !src.locked + if(W.GetID()) + if (allowed(user)) + locked = !locked user << "You [src.locked ? "lock" : "unlock"] the controls." else user << "Access denied." else add_fingerprint(user) - ..() + return ..() /obj/machinery/shieldwallgen/proc/cleanup(NSEW) var/obj/machinery/shieldwall/F @@ -466,15 +460,16 @@ break /obj/machinery/shieldwallgen/Destroy() - src.cleanup(1) - src.cleanup(2) - src.cleanup(4) - src.cleanup(8) + cleanup(1) + cleanup(2) + cleanup(4) + cleanup(8) return ..() -/obj/machinery/shieldwallgen/bullet_act(obj/item/projectile/Proj) - storedpower -= Proj.damage - ..() +/obj/machinery/shieldwallgen/bullet_act(obj/item/projectile/P) + . = ..() + storedpower -= P.damage + //////////////Containment Field START @@ -525,16 +520,15 @@ gen_secondary.storedpower -=10 -/obj/machinery/shieldwall/bullet_act(obj/item/projectile/Proj) +/obj/machinery/shieldwall/bullet_act(obj/item/projectile/P) + . = ..() if(needs_power) var/obj/machinery/shieldwallgen/G if(prob(50)) G = gen_primary else G = gen_secondary - G.storedpower -= Proj.damage - ..() - return + G.storedpower -= P.damage /obj/machinery/shieldwall/ex_act(severity, target) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 86d8993b928..27dc7cba695 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -47,8 +47,7 @@ locked = L user << "You insert the GPS device into the [name]'s slot." else - ..() - return + return ..() /obj/machinery/computer/teleporter/attack_ai(mob/user) src.attack_hand(user) @@ -299,11 +298,11 @@ /obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, params) if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W)) return - if(exchange_parts(user, W)) return - - default_deconstruction_crowbar(W) + if(default_deconstruction_crowbar(W)) + return + return ..() /obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj, turf/T) var/obj/machinery/computer/teleporter/com = power_station.teleporter_console @@ -405,34 +404,37 @@ return ..() /obj/machinery/teleport/station/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/device/multitool) && !panel_open) + if(istype(W, /obj/item/device/multitool)) var/obj/item/device/multitool/M = W - if(M.buffer && istype(M.buffer, /obj/machinery/teleport/station) && M.buffer != src) - if(linked_stations.len < efficiency) - linked_stations.Add(M.buffer) - M.buffer = null - user << "You upload the data from the [W.name]'s buffer." - else - user << "This station can't hold more information, try to use better parts." - if(default_deconstruction_screwdriver(user, "controller-o", "controller", W)) + if(panel_open) + M.buffer = src + user << "You download the data to the [W.name]'s buffer." + else + if(M.buffer && istype(M.buffer, /obj/machinery/teleport/station) && M.buffer != src) + if(linked_stations.len < efficiency) + linked_stations.Add(M.buffer) + M.buffer = null + user << "You upload the data from the [W.name]'s buffer." + else + user << "This station can't hold more information, try to use better parts." + return + else if(default_deconstruction_screwdriver(user, "controller-o", "controller", W)) update_icon() return - if(exchange_parts(user, W)) + else if(exchange_parts(user, W)) return - default_deconstruction_crowbar(W) + else if(default_deconstruction_crowbar(W)) + return - if(panel_open) - if(istype(W, /obj/item/device/multitool)) - var/obj/item/device/multitool/M = W - M.buffer = src - user << "You download the data to the [W.name]'s buffer." - return - if(istype(W, /obj/item/weapon/wirecutters)) + else if(istype(W, /obj/item/weapon/wirecutters)) + if(panel_open) link_console_and_hub() user << "You reconnect the station to nearby machinery." return + else + return ..() /obj/machinery/teleport/station/attack_paw() src.attack_hand() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 756f07068ee..cbc30cb5ede 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -179,9 +179,8 @@ user << "You insert [W] into [src]'s chef compartment." else user << "[src]'s chef compartment does not accept junk food." - return - if(istype(W, /obj/item/weapon/storage/bag/tray)) + else if(istype(W, /obj/item/weapon/storage/bag/tray)) if(!compartment_access_check(user)) return var/obj/item/weapon/storage/T = W @@ -203,7 +202,8 @@ updateUsrDialog() return - ..() + else + return ..() /obj/machinery/vending/snack/proc/compartment_access_check(user) req_access_txt = chef_compartment_access @@ -237,16 +237,20 @@ if(default_unfasten_wrench(user, W, time = 60)) return - if(component_parts && istype(W, /obj/item/weapon/crowbar)) - default_deconstruction_crowbar(W) + if(component_parts) + if(default_deconstruction_crowbar(W)) + return - if(istype(W, /obj/item/weapon/screwdriver) && anchored) - panel_open = !panel_open - user << "You [panel_open ? "open" : "close"] the maintenance panel." - overlays.Cut() - if(panel_open) - overlays += image(icon, "[initial(icon_state)]-panel") - updateUsrDialog() + if(istype(W, /obj/item/weapon/screwdriver)) + if(anchored) + panel_open = !panel_open + user << "You [panel_open ? "open" : "close"] the maintenance panel." + overlays.Cut() + if(panel_open) + overlays += image(icon, "[initial(icon_state)]-panel") + updateUsrDialog() + else + user << "You must first secure [src]." return else if(istype(W, /obj/item/device/multitool)||istype(W, /obj/item/weapon/wirecutters)) if(panel_open) @@ -273,14 +277,14 @@ user << "You loaded [transfered] items in \the [name]." else user << "The [name] is fully stocked." - return; + return else user << "You should probably unscrew the service panel first." else - ..() + return ..() -/obj/machinery/vending/default_deconstruction_crowbar(obj/item/O) +/obj/machinery/vending/deconstruction() var/product_list = list(product_records, hidden_records, coin_records) for(var/i=1, i<=3, i++) for(var/datum/data/vending_product/machine_content in product_list[i]) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index a84f002506a..7997c832e00 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -122,40 +122,43 @@ Pipelines + Other Objects -> Pipe network return /obj/machinery/atmospherics/attackby(obj/item/weapon/W, mob/user, params) - if(can_unwrench && istype(W, /obj/item/weapon/wrench)) - var/turf/T = get_turf(src) - if (level==1 && isturf(T) && T.intact) - user << "You must remove the plating first!" - return 1 - var/datum/gas_mixture/int_air = return_air() - var/datum/gas_mixture/env_air = loc.return_air() - add_fingerprint(user) + if(istype(W, /obj/item/weapon/wrench)) + if(can_unwrench(user)) + var/turf/T = get_turf(src) + if (level==1 && isturf(T) && T.intact) + user << "You must remove the plating first!" + return 1 + var/datum/gas_mixture/int_air = return_air() + var/datum/gas_mixture/env_air = loc.return_air() + add_fingerprint(user) - var/unsafe_wrenching = FALSE - var/internal_pressure = int_air.return_pressure()-env_air.return_pressure() + var/unsafe_wrenching = FALSE + var/internal_pressure = int_air.return_pressure()-env_air.return_pressure() - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user << "You begin to unfasten \the [src]..." - if (internal_pressure > 2*ONE_ATMOSPHERE) - user << "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?" - unsafe_wrenching = TRUE //Oh dear oh dear + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user << "You begin to unfasten \the [src]..." + if (internal_pressure > 2*ONE_ATMOSPHERE) + user << "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?" + unsafe_wrenching = TRUE //Oh dear oh dear - if (do_after(user, 20/W.toolspeed, target = src) && !qdeleted(src)) - user.visible_message( \ - "[user] unfastens \the [src].", \ - "You unfasten \the [src].", \ - "You hear ratchet.") - investigate_log("was REMOVED by [key_name(usr)]", "atmos") - - //You unwrenched a pipe full of pressure? Let's splat you into the wall, silly. - if(unsafe_wrenching) - unsafe_pressure_release(user, internal_pressure) - Deconstruct() + if (do_after(user, 20/W.toolspeed, target = src) && !qdeleted(src)) + user.visible_message( \ + "[user] unfastens \the [src].", \ + "You unfasten \the [src].", \ + "You hear ratchet.") + investigate_log("was REMOVED by [key_name(usr)]", "atmos") + //You unwrenched a pipe full of pressure? Let's splat you into the wall, silly. + if(unsafe_wrenching) + unsafe_pressure_release(user, internal_pressure) + Deconstruct() else return ..() +/obj/machinery/atmospherics/proc/can_unwrench(mob/user) + return can_unwrench + // Throws the user when they unwrench a pipe with a major difference between the internal and environmental pressure. /obj/machinery/atmospherics/proc/unsafe_pressure_release(mob/user, pressures = null) if(!user) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 7ddc1f518c9..7e5074c6388 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -166,10 +166,10 @@ Passive gate is similar to the regular pump except: ..() update_icon() -/obj/machinery/atmospherics/components/binary/passive_gate/attackby(obj/item/weapon/W, mob/user, params) - if(!istype(W, /obj/item/weapon/wrench)) - return ..() - if(on) - user << "You cannot unwrench this [src], turn it off first!" - return 1 - return ..() +/obj/machinery/atmospherics/components/binary/passive_gate/can_unwrench(mob/user) + if(..()) + if(on) + user << "You cannot unwrench this [src], turn it off first!" + else + return 1 + diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 1304c1b12ca..a500b3841de 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -173,11 +173,10 @@ Thus, the two variables affect pump operation are set in New(): ..() update_icon() -/obj/machinery/atmospherics/components/binary/pump/attackby(obj/item/weapon/W, mob/user, params) - if (!istype(W, /obj/item/weapon/wrench)) - return ..() - if (!(stat & NOPOWER) && on) - user << "You cannot unwrench this [src], turn it off first!" - return 1 - return ..() +/obj/machinery/atmospherics/components/binary/pump/can_unwrench(mob/user) + if(..()) + if(!(stat & NOPOWER) && on) + user << "You cannot unwrench this [src], turn it off first!" + else + return 1 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 8a09e99b93e..6b4bc164574 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -169,10 +169,10 @@ Thus, the two variables affect pump operation are set in New(): ..() update_icon() -/obj/machinery/atmospherics/components/binary/volume_pump/attackby(obj/item/weapon/W, mob/user, params) - if (!istype(W, /obj/item/weapon/wrench)) - return ..() - if (!(stat & NOPOWER) && on) - user << "You cannot unwrench this [src], turn it off first!" - return 1 - return ..() +/obj/machinery/atmospherics/components/binary/volume_pump/can_unwrench(mob/user) + if(..()) + if(!(stat & NOPOWER) && on) + user << "You cannot unwrench this [src], turn it off first!" + else + return 1 + diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 91a7a2d8ad0..d896d93a9a3 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -164,17 +164,17 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/reagent_containers/glass)) - if(isrobot(user)) + . = 1 //no afterattack + if(!user.drop_item()) return if(beaker) user << "A beaker is already loaded into [src]!" return - if(!user.drop_item()) - return beaker = I I.loc = src user.visible_message("[user] places [I] in [src].", \ "You place [I] in [src].") + return if(!on && !occupant && !state_open) if(default_deconstruction_screwdriver(user, "cell-o", "cell-off", I)) return @@ -186,6 +186,7 @@ return if(default_deconstruction_crowbar(I)) return + return ..() /obj/machinery/atmospherics/components/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = notcontained_state) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm index e4b9622b481..8d1c435b10c 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm @@ -27,12 +27,12 @@ connected_device.disconnect() return ..() -/obj/machinery/atmospherics/components/unary/portables_connector/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/wrench)) +/obj/machinery/atmospherics/components/unary/portables_connector/can_unwrench(mob/user) + if(..()) if(connected_device) - user << "You cannot unwrench this [src], dettach [connected_device] first!" + user << "You cannot unwrench this [src], detach [connected_device] first!" + else return 1 - return ..() /obj/machinery/atmospherics/components/unary/portables_connector/portableConnectorReturnAir() return connected_device.portableConnectorReturnAir() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 3ac314d3b6b..ed142bbf4ed 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -85,6 +85,7 @@ return if(default_deconstruction_crowbar(I)) return + return ..() /obj/machinery/atmospherics/components/unary/thermomachine/default_change_direction_wrench(mob/user, obj/item/weapon/wrench/W) if(!..()) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index f00c99897d1..55ac2266861 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -244,9 +244,6 @@ return /obj/machinery/atmospherics/components/unary/vent_pump/attackby(obj/item/W, mob/user, params) - if (istype(W, /obj/item/weapon/wrench)&& !(stat & NOPOWER) && on) - user << "You cannot unwrench this [src], turn it off first!" - return 1 if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if (WT.remove_fuel(0,user)) @@ -267,6 +264,13 @@ else return ..() +/obj/machinery/atmospherics/components/unary/vent_pump/can_unwrench(mob/user) + if(..()) + if(!(stat & NOPOWER) && on) + user << "You cannot unwrench this [src], turn it off first!" + else + return 1 + /obj/machinery/atmospherics/components/unary/vent_pump/examine(mob/user) ..() if(welded) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index cdefd24e240..b9c727da0a6 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -310,12 +310,15 @@ update_icon() pipe_vision_img = image(src, loc, layer = 20, dir = dir) return 0 - if (!istype(W, /obj/item/weapon/wrench)) + else return ..() - if (!(stat & NOPOWER) && on) - user << "You cannot unwrench this [src], turn it off first!" - return 1 - return ..() + +/obj/machinery/atmospherics/components/unary/vent_scrubber/can_unwrench(mob/user) + if(..()) + if (!(stat & NOPOWER) && on) + user << "You cannot unwrench this [src], turn it off first!" + else + return 1 /obj/machinery/atmospherics/components/unary/vent_scrubber/can_crawl_through() return !welded diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 212e1ccef37..00d7fab4602 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -149,14 +149,25 @@ /obj/machinery/portable_atmospherics/canister/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > temperature_resistance) - health -= 5 - healthcheck() + take_damage(5, BRUTE, 0) -/obj/machinery/portable_atmospherics/canister/proc/healthcheck() +/obj/machinery/portable_atmospherics/canister/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return if(stat & BROKEN) return - - if(health <= 10) + health = max( health - damage, 0) + if(!health) disconnect() var/datum/gas_mixture/expelled_gas = air_contents.remove(air_contents.total_moles()) var/turf/T = get_turf(src) @@ -193,42 +204,33 @@ update_icon() /obj/machinery/portable_atmospherics/canister/blob_act() - health = 0 - healthcheck() + take_damage(100, BRUTE, 0) /obj/machinery/portable_atmospherics/canister/bullet_act(obj/item/projectile/P) - if((P.damage_type == BRUTE || P.damage_type == BURN)) - if(P.damage) - health -= round(P.damage / 2) - healthcheck() - ..() + . = ..() + take_damage(P.damage / 2, P.damage_type, 0) /obj/machinery/portable_atmospherics/canister/ex_act(severity, target) switch(severity) if(1) if((stat & BROKEN) || prob(30)) qdel(src) - return else - health = 0 + take_damage(100, BRUTE, 0) if(2) if(stat & BROKEN) qdel(src) - return else - health -= rand(40, 100) + take_damage(rand(40, 110), BRUTE, 0) if(3) - health -= rand(15, 40) - healthcheck() + take_damage(rand(15, 40), BRUTE, 0) -/obj/machinery/portable_atmospherics/canister/attackby(obj/item/weapon/W, mob/user, params) - if(!istype(W, /obj/item/weapon/wrench) && !istype(W, /obj/item/weapon/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda)) - investigate_log("was smacked with \a [W] by [key_name(user)].", "atmos") - health -= W.force - add_fingerprint(user) - healthcheck() - playsound(loc, 'sound/weapons/smash.ogg', 60, 1) - ..() +/obj/machinery/portable_atmospherics/canister/attacked_by(obj/item/I, mob/user) + if(I.force) + user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") + investigate_log("was smacked with \a [I] by [key_name(user)].", "atmos") + add_fingerprint(user) + take_damage(I.force, I.damtype, 1) /obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = physical_state) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index f2b12e19c45..44f59644a2f 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -69,38 +69,40 @@ return air_contents /obj/machinery/portable_atmospherics/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/tank) && !(stat & BROKEN)) - var/obj/item/weapon/tank/T = W - if(holding || !user.drop_item()) - return - T.loc = src - holding = T - update_icon() - else if(istype(W, /obj/item/weapon/wrench) && !(stat & BROKEN)) - if(connected_port) - disconnect() - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message( \ - "[user] disconnects [src].", \ - "You unfasten [src] from the port.", \ - "You hear a ratchet.") - update_icon() - return - else - var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/components/unary/portables_connector) in loc - if(!possible_port) - user << "Nothing happens." + if(istype(W, /obj/item/weapon/tank)) + if(!(stat & BROKEN)) + var/obj/item/weapon/tank/T = W + if(holding || !user.drop_item()) return - if(!connect(possible_port)) - user << "[name] failed to connect to the port." - return - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - user.visible_message( \ - "[user] connects [src].", \ - "You fasten [src] to the port.", \ - "You hear a ratchet.") + T.loc = src + holding = T update_icon() - else if((istype(W, /obj/item/device/analyzer)) && Adjacent(user)) + else if(istype(W, /obj/item/weapon/wrench)) + if(!(stat & BROKEN)) + if(connected_port) + disconnect() + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message( \ + "[user] disconnects [src].", \ + "You unfasten [src] from the port.", \ + "You hear a ratchet.") + update_icon() + return + else + var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/components/unary/portables_connector) in loc + if(!possible_port) + user << "Nothing happens." + return + if(!connect(possible_port)) + user << "[name] failed to connect to the port." + return + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message( \ + "[user] connects [src].", \ + "You fasten [src] to the port.", \ + "You hear a ratchet.") + update_icon() + else if(istype(W, /obj/item/device/analyzer) && Adjacent(user)) atmosanalyzer_scan(air_contents, user) else - ..() \ No newline at end of file + return ..() \ No newline at end of file diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm index 46cbf39ef83..afbb781a6e1 100644 --- a/code/modules/food&drinks/kitchen machinery/processor.dm +++ b/code/modules/food&drinks/kitchen machinery/processor.dm @@ -170,7 +170,8 @@ if(default_unfasten_wrench(user, O)) return - default_deconstruction_crowbar(O) + if(default_deconstruction_crowbar(O)) + return var/atom/movable/what = O if(istype(O, /obj/item/weapon/grab)) @@ -183,15 +184,17 @@ what = G.affecting var/datum/food_processor_process/P = select_recipe(what) - if (!P) - user << "That probably won't blend!" - return 1 - - user.visible_message("[user] put [what] into [src].", \ - "You put the [what] into [src].") - user.drop_item() - what.loc = src - return + if(P) + user.visible_message("[user] put [what] into [src].", \ + "You put the [what] into [src].") + user.drop_item() + what.loc = src + else + if(user.a_intent != "harm") + user << "That probably won't blend!" + return 1 + else + return ..() /obj/machinery/processor/attack_hand(mob/user) if (src.stat != 0) //NOPOWER etc diff --git a/code/modules/food&drinks/kitchen machinery/smartfridge.dm b/code/modules/food&drinks/kitchen machinery/smartfridge.dm index 7c312cbf91f..1eac74d44c7 100644 --- a/code/modules/food&drinks/kitchen machinery/smartfridge.dm +++ b/code/modules/food&drinks/kitchen machinery/smartfridge.dm @@ -66,7 +66,9 @@ power_change() return - default_deconstruction_crowbar(O) + if(default_deconstruction_crowbar(O)) + updateUsrDialog() + return if(stat) return 0 @@ -81,38 +83,36 @@ updateUsrDialog() return 1 - var/loaded = 0 - if(istype(O, /obj/item/weapon/storage/bag)) var/obj/item/weapon/storage/P = O + var/loaded = 0 for(var/obj/G in P.contents) if(contents.len >= max_n_of_items) break if(accept_check(G)) load(G) loaded++ - else + updateUsrDialog() + + if(loaded) + if(contents.len >= max_n_of_items) + user.visible_message("[user] loads \the [src] with \the [O].", \ + "You fill \the [src] with \the [O].") + else + user.visible_message("[user] loads \the [src] with \the [O].", \ + "You load \the [src] with \the [O].") + if(O.contents.len > 0) + user << "Some items are refused." + else + user << "There is nothing in [O] to put in [src]!" + return 0 + + else if(user.a_intent != "harm") user << "\The [src] smartly refuses [O]." updateUsrDialog() return 0 - - // this is a little backwards but it avoids duplication. - // this code follows storage items and trays only. - if(loaded) - if(contents.len >= max_n_of_items) - user.visible_message("[user] loads \the [src] with \the [O].", \ - "You fill \the [src] with \the [O].") - else - user.visible_message("[user] loads \the [src] with \the [O].", \ - "You load \the [src] with \the [O].") - if(O.contents.len > 0) - user << "Some items are refused." else - user << "There is nothing in [O] to put in [src]!" - return 0 - - updateUsrDialog() - return 1 + return ..() diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 48a05c0bd27..978c4d191d9 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -54,40 +54,59 @@ return /obj/machinery/biogenerator/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/weapon/reagent_containers/glass) && !panel_open) - if(beaker) - user << "A container is already loaded into the machine." - else - user.unEquip(O) - O.loc = src - beaker = O - user << "You add the container to the machine." - updateUsrDialog() - else if(processing) + if(processing) user << "The biogenerator is currently processing." + return + + if(default_deconstruction_screwdriver(user, "biogen-empty-o", "biogen-empty", O)) + if(beaker) + var/obj/item/weapon/reagent_containers/glass/B = beaker + B.loc = loc + beaker = null + update_icon() + return + + if(exchange_parts(user, O)) + return + + if(default_deconstruction_crowbar(O)) + return + + if(istype(O, /obj/item/weapon/reagent_containers/glass)) + if(!panel_open) + if(beaker) + user << "A container is already loaded into the machine." + else + user.unEquip(O) + O.loc = src + beaker = O + user << "You add the container to the machine." + update_icon() + updateUsrDialog() + return 1 //no afterattack + else if(istype(O, /obj/item/weapon/storage/bag/plants)) + var/obj/item/weapon/storage/bag/plants/PB = O var/i = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents) i++ if(i >= max_items) user << "The biogenerator is already full! Activate it." else - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents) + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in PB.contents) if(i >= max_items) break - G.loc = src + PB.remove_from_storage(G, src) i++ if(iYou empty the plant bag into the biogenerator.
      " - else if(O.contents.len == 0) + else if(PB.contents.len == 0) user << "You empty the plant bag into the biogenerator, filling it to its capacity." else user << "You fill the biogenerator to its capacity." + return 1 //no afterattack - - else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) - user << "You cannot put this in [src.name]!" - else + else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) var/i = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents) i++ @@ -97,21 +116,12 @@ user.unEquip(O) O.loc = src user << "You put [O.name] in [src.name]" + return 1 //no afterattack - if(!processing) - if(default_deconstruction_screwdriver(user, "biogen-empty-o", "biogen-empty", O)) - if(beaker) - var/obj/item/weapon/reagent_containers/glass/B = beaker - B.loc = loc - beaker = null - - if(exchange_parts(user, O)) - return - - default_deconstruction_crowbar(O) - - update_icon() - return + else if(user.a_intent != "harm") + user << "You cannot put this in [src.name]!" + else + return ..() /obj/machinery/biogenerator/interact(mob/user) if(stat & BROKEN || panel_open) diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 7e479069c3c..d30378251f5 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -6,12 +6,16 @@ else t_max = rand(1,4) + var/seedloc = O.loc + if(extractor) + seedloc = extractor.loc + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/)) var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O if(F.seed) while(t_amount < t_max) var/obj/item/seeds/t_prod = F.seed.Copy() - t_prod.loc = O.loc + t_prod.loc = seedloc t_amount++ qdel(O) return 1 @@ -21,19 +25,12 @@ if(F.seed) while(t_amount < t_max) var/obj/item/seeds/t_prod = F.seed.Copy() - t_prod.loc = O.loc + t_prod.loc = seedloc t_amount++ qdel(O) return 1 - /*else if(istype(O, /obj/item/stack/tile/grass)) - var/obj/item/stack/tile/grass/S = O - new /obj/item/seeds/grassseed(O.loc) - S.use(1) - return 1*/ - - else - return 0 + return 0 /obj/machinery/seed_extractor @@ -75,9 +72,7 @@ if(default_unfasten_wrench(user, O)) return - default_deconstruction_crowbar(O) - - if(isrobot(user)) + if(default_deconstruction_crowbar(O)) return if (istype(O,/obj/item/weapon/storage/bag/plants)) @@ -87,7 +82,7 @@ if(contents.len >= max_seeds) break ++loaded - add(G) + add_seed(G) if (loaded) user << "You put the seeds from \the [O.name] into [src]." else @@ -98,19 +93,18 @@ user << "\The [O] is stuck to your hand, you cannot put it in the seed extractor!" return - if(O && O.loc) - O.loc = src.loc - - if(seedify(O,-1)) + else if(seedify(O,-1, src)) user << "You extract some seeds." return else if (istype(O,/obj/item/seeds)) - add(O) + add_seed(O) user << "You add [O] to [src.name]." updateUsrDialog() return - else + else if(user.a_intent != "harm") user << "You can't extract any seeds from \the [O.name]!" + else + return ..() /datum/seed_pile var/name = "" @@ -187,7 +181,7 @@ src.updateUsrDialog() return -/obj/machinery/seed_extractor/proc/add(obj/item/seeds/O) +/obj/machinery/seed_extractor/proc/add_seed(obj/item/seeds/O) if(contents.len >= 999) usr << "\The [src] is full." return 0 diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 12ec53f1011..7d52a164b8c 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -93,7 +93,7 @@ if (!powered()) return if(istype(W,/obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/I = usr.get_active_hand() + var/obj/item/weapon/card/id/I = user.get_active_hand() if(istype(I) && !istype(inserted_id)) if(!user.drop_item()) return @@ -112,12 +112,13 @@ if(default_deconstruction_screwdriver(user, "ore_redemption-open", "ore_redemption", W)) updateUsrDialog() return - if(panel_open) - if(istype(W, /obj/item/weapon/crowbar)) - empty_content() - default_deconstruction_crowbar(W) - return 1 - ..() + if(default_deconstruction_crowbar(W)) + return + + return ..() + +/obj/machinery/mineral/ore_redemption/deconstruction() + empty_content() /obj/machinery/mineral/ore_redemption/proc/SmeltMineral(obj/item/weapon/ore/O) if(O.refined_type) @@ -407,11 +408,9 @@ if(default_deconstruction_screwdriver(user, "mining-open", "mining", I)) updateUsrDialog() return - if(panel_open) - if(istype(I, /obj/item/weapon/crowbar)) - default_deconstruction_crowbar(I) - return 1 - ..() + if(default_deconstruction_crowbar(I)) + return + return ..() /obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer) var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Two Survival Capsules", "Resonator", "Mining Drone", "Advanced Scanner") @@ -767,8 +766,8 @@ icon_state = "door_electronics" icon = 'icons/obj/module.dmi' -/obj/item/device/mine_bot_ugprade/afterattack(mob/living/simple_animal/hostile/mining_drone/M, mob/user) - if(!istype(M)) +/obj/item/device/mine_bot_ugprade/afterattack(mob/living/simple_animal/hostile/mining_drone/M, mob/user, proximity) + if(!istype(M) || !proximity) return upgrade_bot(M, user) diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm index 9a3849e202e..a2b9add6e23 100644 --- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm +++ b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm @@ -20,20 +20,29 @@ It is possible to destroy the net by the occupant or someone else. -/obj/effect/energy_net/proc/healthcheck() +/obj/effect/energy_net/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) + else + return + health -= damage if(health <=0) - density = 0 - if(affecting) - var/mob/living/carbon/M = affecting - M.anchored = 0 - for(var/mob/O in viewers(src, 3)) - O.show_message("[M.name] was recovered from the energy net!", 1, "You hear a grunt.", 2) - if(!isnull(master))//As long as they still exist. - master << "ERROR: unable to initiate transport protocol. Procedure terminated." qdel(src) - return - +/obj/effect/energy_net/Destroy() + if(affecting) + var/mob/living/carbon/M = affecting + M.anchored = 0 + for(var/mob/O in viewers(src, 3)) + O.show_message("[M.name] was recovered from the energy net!", 1, "You hear a grunt.", 2) + if(master)//As long as they still exist. + master << "ERROR: unable to initiate transport protocol. Procedure terminated." + return ..() /obj/effect/energy_net/process(mob/living/carbon/M) var/check = 30//30 seconds before teleportation. Could be extended I guess. @@ -98,53 +107,39 @@ It is possible to destroy the net by the occupant or someone else. /obj/effect/energy_net/bullet_act(obj/item/projectile/Proj) - health -= Proj.damage - healthcheck() - ..() + . = ..() + take_damage(Proj.damage, Proj.damage_type) /obj/effect/energy_net/ex_act(severity, target) switch(severity) if(1) - health-=50 + qdel(src) if(2) - health-=50 + qdel(src) if(3) - health-=prob(50)?50:25 - healthcheck() - return - - + take_damage(rand(10,25), BRUTE, 0) /obj/effect/energy_net/blob_act() - health-=50 - healthcheck() - return + qdel(src) - - -/obj/effect/energy_net/hitby(AM as mob|obj) +/obj/effect/energy_net/hitby(atom/movable/AM) ..() var/tforce = 0 if(ismob(AM)) tforce = 10 - else - tforce = AM:throwforce - playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) - health = max(0, health - tforce) - healthcheck() - ..() - return - + else if(isobj(AM)) + var/obj/O = AM + tforce = O.throwforce + take_damage(tforce) /obj/effect/energy_net/attack_hulk(mob/living/carbon/human/user) ..(user, 1) user.visible_message("[user] rips the energy net apart!", \ "You easily destroy the energy net.") - health-=50 - healthcheck() + qdel(src) @@ -155,25 +150,17 @@ It is possible to destroy the net by the occupant or someone else. /obj/effect/energy_net/attack_alien(mob/living/user) user.do_attack_animation(src) - if (islarva(user)) - return + user.changeNext_move(CLICK_CD_MELEE) playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1) - health -= rand(10, 20) - if(health > 0) - user.visible_message("[user] claws at the energy net!", \ - "\green You claw at the net.") - else - user.visible_message("[user] slices the energy net apart!", \ + user.visible_message("[user] slices the energy net apart!", \ "\green You slice the energy net to pieces.") - healthcheck() - return + qdel(src) -/obj/effect/energy_net/attackby(obj/item/weapon/W, mob/user, params) - var/aforce = W.force - health = max(0, health - aforce) - healthcheck() +/obj/effect/energy_net/attacked_by(obj/item/weapon/W, mob/user) ..() - return + take_damage(W.force, W.damtype) + + diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index d21ac7a912c..71117b114db 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -78,19 +78,19 @@ add_fingerprint(user) -/obj/item/weapon/paper_bin/attackby(obj/item/weapon/paper/i, mob/user, params) - if(!istype(i)) +/obj/item/weapon/paper_bin/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/paper)) + var/obj/item/weapon/paper/P = I + if(!user.unEquip(P)) + return + P.loc = src + user << "You put [P] in [src]." + papers.Add(P) + amount++ + update_icon() + else return ..() - if(!user.unEquip(i)) - return - i.loc = src - user << "You put [i] in [src]." - papers.Add(i) - amount++ - update_icon() - - /obj/item/weapon/paper_bin/examine(mob/user) ..() if(amount) diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 985247e2203..3f10566dde8 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -127,9 +127,10 @@ /obj/machinery/power/am_control_unit/bullet_act(obj/item/projectile/Proj) + . = ..() if(Proj.flag != "bullet") stability -= Proj.force - return 0 + check_stability() /obj/machinery/power/am_control_unit/power_change() @@ -158,15 +159,14 @@ else if(!linked_shielding.len > 0) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) user.visible_message("[user.name] unsecures the [src.name].", \ - "YYou remove the anchor bolts.", \ + "You remove the anchor bolts.", \ "You hear a ratchet.") src.anchored = 0 disconnect_from_network() else user << "Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!" - return - if(istype(W, /obj/item/weapon/am_containment)) + else if(istype(W, /obj/item/weapon/am_containment)) if(fueljar) user << "There is already a [fueljar] inside!" return @@ -179,20 +179,29 @@ user.visible_message("[user.name] loads an [W.name] into the [src.name].", \ "You load an [W.name].", \ "You hear a thunk.") - return + else + return ..() - if(W.force >= 20) - stability -= W.force/2 +/obj/machinery/power/am_control_unit/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + if(damage >= 20) + stability -= damage/2 check_stability() - ..() - - /obj/machinery/power/am_control_unit/attack_hand(mob/user) if(anchored) interact(user) - return - /obj/machinery/power/am_control_unit/proc/add_shielding(obj/machinery/am_shielding/AMS, AMS_linking = 0) if(!istype(AMS)) diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 1fa86b2fb12..f4cc4163c7d 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -112,9 +112,10 @@ /obj/machinery/am_shielding/bullet_act(obj/item/projectile/Proj) + . = ..() if(Proj.flag != "bullet") stability -= Proj.force/2 - return 0 + check_stability() /obj/machinery/am_shielding/update_icon() @@ -132,11 +133,22 @@ shutdown_core() -/obj/machinery/am_shielding/attackby(obj/item/W, mob/user, params) - if(W.force > 10) - stability -= W.force/2 +/obj/machinery/am_shielding/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + if(damage >= 10) + stability -= damage/2 check_stability() - ..() //Call this to link a detected shilding unit to the controller @@ -219,6 +231,5 @@ if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf)) new/obj/machinery/am_shielding(src.loc) qdel(src) - return - ..() - return \ No newline at end of file + else + return ..() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index bb6b4f5fd45..47b0d481de9 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -114,7 +114,7 @@ transfer_fingerprints_to(newlight) qdel(src) return - ..() + return ..() /obj/machinery/light_construct/small @@ -148,6 +148,7 @@ // this is used to calc the probability the light burns out var/rigged = 0 // true if rigged to explode + var/health = 20 // the smaller bulb light fixture @@ -158,6 +159,7 @@ brightness = 4 desc = "A small lighting fixture." light_type = /obj/item/weapon/light/bulb + health = 15 /obj/machinery/light/Move() @@ -276,16 +278,12 @@ //Light replacer code if(istype(W, /obj/item/device/lightreplacer)) var/obj/item/device/lightreplacer/LR = W - if(isliving(user)) - var/mob/living/U = user - LR.ReplaceLight(src, U) - return + LR.ReplaceLight(src, user) // attempt to insert light - if(istype(W, /obj/item/weapon/light)) + else if(istype(W, /obj/item/weapon/light)) if(status != LIGHT_EMPTY) user << "There is a [fitting] already inserted!" - return else src.add_fingerprint(user) var/obj/item/weapon/light/L = W @@ -306,28 +304,6 @@ explode() else user << "This type of light requires a [fitting]!" - return - - // attempt to break the light - //If xenos decide they want to smash a light bulb with a toolbox, who am I to stop them? /N - - else if(status != LIGHT_BROKEN && status != LIGHT_EMPTY) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(W.damtype == STAMINA) - return - if(prob(1+W.force * 5)) - - user.visible_message("[user.name] smashed the light!", \ - "You hit the light, and it smashes!", \ - "You hear a tinkle of breaking glass.") - if(on && (W.flags & CONDUCT)) - if (prob(12)) - electrocute_mob(user, get_area(src), src, 0.3) - broken() - - else - user.visible_message("[user.name] hits the light!") // attempt to stick weapon into light socket else if(status == LIGHT_EMPTY) @@ -348,15 +324,43 @@ newlight.stage = 2 transfer_fingerprints_to(newlight) qdel(src) - return + else + user << "You stick \the [W] into the light socket!" + if(has_power() && (W.flags & CONDUCT)) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, src) + s.start() + if (prob(75)) + electrocute_mob(user, get_area(src), src, rand(0.7,1.0)) + else + return ..() - user << "You stick \the [W] into the light socket!" - if(has_power() && (W.flags & CONDUCT)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() - if (prob(75)) - electrocute_mob(user, get_area(src), src, rand(0.7,1.0)) +/obj/machinery/light/attacked_by(obj/item/I, mob/living/user) + ..() + if(status == LIGHT_BROKEN || status == LIGHT_EMPTY) + if(on && (I.flags & CONDUCT)) + if(prob(12)) + electrocute_mob(user, get_area(src), src, 0.3) + +/obj/machinery/light/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + switch(status) + if(LIGHT_EMPTY) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + if(LIGHT_BROKEN) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, 1) + else + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health -= damage + if(health <= 0) + broken() // returns whether this light has power @@ -385,28 +389,20 @@ src.flicker(1) return -// Aliens smash the bulb but do not get electrocuted./N -/obj/machinery/light/attack_alien(mob/living/carbon/alien/humanoid/user)//So larva don't go breaking light bulbs. - if(status == LIGHT_EMPTY||status == LIGHT_BROKEN) - user << "\green That object is useless to you." - return - else if (status == LIGHT_OK||status == LIGHT_BURNED) - user.do_attack_animation(src) - visible_message("[user.name] smashed the light!", "You hear a tinkle of breaking glass.") - broken() - return +/obj/machinery/light/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) + +/obj/machinery/light/hitby(AM as mob|obj) + ..() + var/tforce = 0 + if(ismob(AM)) + tforce = 40 + else if(isobj(AM)) + var/obj/item/I = AM + tforce = I.throwforce + take_damage(tforce) -/obj/machinery/light/attack_animal(mob/living/simple_animal/M) - if(M.melee_damage_upper == 0) - return - if(status == LIGHT_EMPTY||status == LIGHT_BROKEN) - M << "That object is useless to you." - return - else if (status == LIGHT_OK||status == LIGHT_BURNED) - M.do_attack_animation(src) - visible_message("[M.name] smashed the light!", "You hear a tinkle of breaking glass.") - broken() - return // attack with hand - remove tube/bulb // if hands aren't protected and the light is on, burn the player @@ -584,8 +580,8 @@ brightness = 4 /obj/item/weapon/light/throw_impact(atom/hit_atom) - ..() - shatter() + if(!..()) //not caught by a mob + shatter() // update the icon state and description of the light @@ -625,17 +621,12 @@ ..() return -// called after an attack with a light item -// shatter light, unless it was an attempt to put it in a light socket -// now only shatter if the intent was harm - -/obj/item/weapon/light/afterattack(atom/target, mob/user,proximity) - if(!proximity) return - if(istype(target, /obj/machinery/light)) - return - if(user.a_intent != "harm") - return +/obj/item/weapon/light/attack(mob/living/M, mob/living/user, def_zone) + ..() + shatter() +/obj/item/weapon/light/attack_obj(obj/O, mob/living/user) + ..() shatter() /obj/item/weapon/light/proc/shatter() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 304e5a37a1f..60a44a6f8bc 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -10,7 +10,7 @@ var/global/list/rad_collectors = list() density = 1 req_access = list(access_engine_equip) // use_power = 0 - var/obj/item/weapon/tank/internals/plasma/P = null + var/obj/item/weapon/tank/internals/plasma/loaded_tank = null var/last_power = 0 var/active = 0 var/locked = 0 @@ -25,13 +25,13 @@ var/global/list/rad_collectors = list() return ..() /obj/machinery/power/rad_collector/process() - if(P) - if(!P.air_contents.gases["plasma"]) + if(loaded_tank) + if(!loaded_tank.air_contents.gases["plasma"]) investigate_log("out of fuel.","singulo") eject() else - P.air_contents.gases["plasma"][MOLES] -= 0.001*drainratio - P.air_contents.garbage_collect() + loaded_tank.air_contents.gases["plasma"][MOLES] -= 0.001*drainratio + loaded_tank.air_contents.garbage_collect() return @@ -43,7 +43,7 @@ var/global/list/rad_collectors = list() toggle_power() user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ "You turn the [src.name] [active? "on":"off"].") - investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gases["plasma"][MOLES]/0.29)]%":"It is empty"].","singulo") + investigate_log("turned [active?"on":"off"] by [user.key]. [loaded_tank?"Fuel: [round(loaded_tank.air_contents.gases["plasma"][MOLES]/0.29)]%":"It is empty"].","singulo") return else user << "The controls are locked!" @@ -55,26 +55,26 @@ var/global/list/rad_collectors = list() if(istype(W, /obj/item/device/multitool)) user << "The [W.name] detects that [last_power]W were recently produced." return 1 - else if(istype(W, /obj/item/device/analyzer) && P) - atmosanalyzer_scan(P.air_contents, user) + else if(istype(W, /obj/item/device/analyzer) && loaded_tank) + atmosanalyzer_scan(loaded_tank.air_contents, user) else if(istype(W, /obj/item/weapon/tank/internals/plasma)) - if(!src.anchored) + if(!anchored) user << "The [src] needs to be secured to the floor first!" return 1 - if(src.P) + if(loaded_tank) user << "There's already a plasma tank loaded!" return 1 if(!user.drop_item()) return 1 - src.P = W + loaded_tank = W W.loc = src update_icons() else if(istype(W, /obj/item/weapon/crowbar)) - if(P && !src.locked) + if(loaded_tank && !src.locked) eject() return 1 else if(istype(W, /obj/item/weapon/wrench)) - if(P) + if(loaded_tank) user << "Remove the plasma tank first!" return 1 if(!anchored && !isinspace()) @@ -91,20 +91,18 @@ var/global/list/rad_collectors = list() "You unsecure the external bolts.", \ "You hear a ratchet.") disconnect_from_network() - else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (src.allowed(user)) + else if(W.GetID()) + if(allowed(user)) if(active) - src.locked = !src.locked - user << "You [src.locked ? "lock" : "unlock"] the controls." + locked = !locked + user << "You [locked ? "lock" : "unlock"] the controls." else - src.locked = 0 //just in case it somehow gets locked user << "The controls can only be locked when \the [src] is active!" else user << "Access denied." return 1 else - ..() - return 1 + return ..() /obj/machinery/power/rad_collector/ex_act(severity, target) @@ -116,20 +114,20 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/proc/eject() locked = 0 - var/obj/item/weapon/tank/internals/plasma/Z = src.P + var/obj/item/weapon/tank/internals/plasma/Z = src.loaded_tank if (!Z) return Z.loc = get_turf(src) Z.layer = initial(Z.layer) - src.P = null + src.loaded_tank = null if(active) toggle_power() else update_icons() /obj/machinery/power/rad_collector/proc/receive_pulse(pulse_strength) - if(P && active) - var/power_produced = P.air_contents.gases["plasma"] ? P.air_contents.gases["plasma"][MOLES] : 0 + if(loaded_tank && active) + var/power_produced = loaded_tank.air_contents.gases["plasma"] ? loaded_tank.air_contents.gases["plasma"][MOLES] : 0 power_produced *= pulse_strength*20 add_avail(power_produced) last_power = power_produced @@ -139,7 +137,7 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/proc/update_icons() overlays.Cut() - if(P) + if(loaded_tank) overlays += image('icons/obj/singularity.dmi', "ptank") if(stat & (NOPOWER|BROKEN)) return diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 836cfc8853a..9b953b22373 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -12,7 +12,7 @@ idle_power_usage = 0 active_power_usage = 0 var/id = 0 - var/health = 10 + var/health = 20 var/obscured = 0 var/sunfrac = 0 var/adir = SOUTH // actual dir @@ -66,24 +66,46 @@ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the solar panel.", "You take the glass off the solar panel.") qdel(src) - return - else if (W) - src.add_fingerprint(user) - src.health -= W.force - src.healthcheck() + else + return ..() + +/obj/machinery/power/solar/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type) + +/obj/machinery/power/solar/hitby(AM as mob|obj) ..() + var/tforce = 0 + if(ismob(AM)) + tforce = 20 + else if(isobj(AM)) + var/obj/item/I = AM + tforce = I.throwforce + take_damage(tforce) -/obj/machinery/power/solar/proc/healthcheck() - if (src.health <= 0) - if(!(stat & BROKEN)) - set_broken() +/obj/machinery/power/solar/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(stat & BROKEN) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 60, 1) + else + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) else - new /obj/item/weapon/shard(src.loc) - new /obj/item/weapon/shard(src.loc) - qdel(src) return - return - + health -= damage + if(health <= 0) + playsound(src, "shatter", 70, 1) + new /obj/item/weapon/shard(src.loc) + new /obj/item/weapon/shard(src.loc) + qdel(src) + else if(health <= 10) + if(!(stat & BROKEN)) + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) + set_broken() /obj/machinery/power/solar/update_icon() ..() @@ -132,7 +154,6 @@ stat |= BROKEN unset_control() update_icon() - return /obj/machinery/power/solar/ex_act(severity, target) @@ -140,11 +161,9 @@ if(!qdeleted(src)) switch(severity) if(2) - if(prob(50)) - set_broken() + take_damage(rand(10,20), BRUTE, 0) if(3) - if(prob(25)) - set_broken() + take_damage(rand(5,15), BRUTE, 0) /obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S) ..(loc, S, 0) @@ -255,7 +274,7 @@ tracker = 0 user.visible_message("[user] takes out the electronics from the solar assembly.", "You take out the electronics from the solar assembly.") return 1 - ..() + return ..() // // Solar Control Computer @@ -270,6 +289,7 @@ density = 1 use_power = 1 idle_power_usage = 250 + var/health = 25 var/icon_screen = "solar" var/icon_keyboard = "power_key" var/id = 0 @@ -443,9 +463,33 @@ A.icon_state = "4" A.anchored = 1 qdel(src) - else + else if(user.a_intent != "harm" && !(I.flags & NOBLUDGEON)) src.attack_hand(user) - return + else + return ..() + +/obj/machinery/power/solar_control/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type) + +/obj/machinery/power/solar_control/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(stat & BROKEN) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + else + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health -= damage + if(health <= 0 && !(stat & BROKEN)) + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) + stat |= BROKEN + update_icon() /obj/machinery/power/solar_control/process() lastgen = gen @@ -489,11 +533,9 @@ if(!qdeleted(src)) switch(severity) if(2) - if(prob(50)) - set_broken() + take_damage(rand(20,30), BRUTE, 0) if(3) - if(prob(25)) - set_broken() + take_damage(rand(10,20), BRUTE, 0) /obj/machinery/power/solar_control/blob_act() if (prob(75)) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 7a3c9eb472f..758a41d0d64 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -147,28 +147,28 @@ if(default_unfasten_wrench(user, I)) return - if(isrobot(user)) - return + if(istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER)) + var/obj/item/weapon/reagent_containers/B = I + . = 1 //no afterattack + if(beaker) + user << "A container is already loaded into the machine!" + return - var/obj/item/weapon/reagent_containers/B = I // Get a beaker from it? - if(!istype(B)) - return // Not a beaker? + if(!user.drop_item()) // Can't let go? + return - if(beaker) - user << "A beaker is already loaded into the machine!" - return + beaker = B + beaker.loc = src + user << "You add \the [B] to the machine." - if(!user.drop_item()) // Can't let go? - return - - beaker = B - beaker.loc = src - user << "You add the beaker to the machine." - - if(!icon_beaker) - icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10,5) - overlays += icon_beaker + if(!icon_beaker) + icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. + icon_beaker.pixel_x = rand(-10,5) + overlays += icon_beaker + else if(user.a_intent != "harm") + user << "You can't load \the [I] into the machine!" + else + return ..() /obj/machinery/chem_dispenser/constructable name = "portable chem dispenser" @@ -252,7 +252,7 @@ dispensable_reagents |= dispensable_reagent_tiers[i] dispensable_reagents = sortList(dispensable_reagents) -/obj/machinery/chem_dispenser/constructable/attackby(var/obj/item/I, var/mob/user, params) +/obj/machinery/chem_dispenser/constructable/attackby(obj/item/I, mob/user, params) ..() if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I)) return @@ -260,13 +260,14 @@ if(exchange_parts(user, I)) return - if(panel_open) - if(istype(I, /obj/item/weapon/crowbar)) - if(beaker) - beaker.loc = loc - beaker = null - default_deconstruction_crowbar(I) - return 1 + if(default_deconstruction_crowbar(I)) + return + return ..() + +/obj/machinery/chem_dispenser/constructable/deconstruction() + if(beaker) + beaker.loc = loc + beaker = null /obj/machinery/chem_dispenser/drinks name = "soda dispenser" @@ -296,20 +297,6 @@ "lemonjuice" ) -/obj/machinery/chem_dispenser/drinks/attackby(obj/item/I, mob/user) - if(default_unfasten_wrench(user, I)) - return - - if(istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER)) - if (beaker) - return 1 - else - if(!user.drop_item()) - return 1 - src.beaker = I - beaker.loc = src - update_icon() - return /obj/machinery/chem_dispenser/drinks/beer name = "booze dispenser" diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 092953d1243..edd2c9dd055 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -39,10 +39,17 @@ beaker.reagents.handle_reactions() /obj/machinery/chem_heater/attackby(obj/item/I, mob/user, params) - if(isrobot(user)) + if(default_deconstruction_screwdriver(user, "mixer0b", "mixer0b", I)) + return + + if(exchange_parts(user, I)) + return + + if(default_deconstruction_crowbar(I)) return if(istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER)) + . = 1 //no afterattack if(beaker) user << "A beaker is already loaded into the machine!" return @@ -53,18 +60,11 @@ I.loc = src user << "You add the beaker to the machine." icon_state = "mixer1b" - - if(default_deconstruction_screwdriver(user, "mixer0b", "mixer0b", I)) return + return ..() - if(exchange_parts(user, I)) - return - - if(panel_open) - if(istype(I, /obj/item/weapon/crowbar)) - eject_beaker() - default_deconstruction_crowbar(I) - return 1 +/obj/machinery/chem_heater/deconstruction() + eject_beaker() /obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = default_state) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 9d6337baf4a..3343bee85cd 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -37,10 +37,12 @@ return if(istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER)) - if(isrobot(user)) + . = 1 // no afterattack + if(panel_open) + user << "You can't use the [src.name] while its panel is opened!" return if(beaker) - user << "A beaker is already loaded into the machine!" + user << "A container is already loaded in the machine!" return if(!user.drop_item()) return @@ -62,8 +64,8 @@ bottle.loc = src user << "You add the pill bottle into the dispenser slot." src.updateUsrDialog() - - return + else + return ..() /obj/machinery/chem_master/Topic(href, href_list) if(..()) @@ -341,7 +343,6 @@ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null) /obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params) - if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B)) if(beaker) beaker.loc = src.loc @@ -352,40 +353,9 @@ bottle = null return - if(exchange_parts(user, B)) + else if(exchange_parts(user, B)) return - - if(panel_open) - if(istype(B, /obj/item/weapon/crowbar)) - default_deconstruction_crowbar(B) - return 1 - else - user << "You can't use the [src.name] while it's panel is opened!" - return 1 - - if(istype(B, /obj/item/weapon/reagent_containers) && (B.flags & OPENCONTAINER)) - if(beaker) - user << "A beaker is already loaded into the machine!" - return - if(!user.drop_item()) - return - - beaker = B - beaker.loc = src - user << "You add the beaker to the machine." - src.updateUsrDialog() - icon_state = "mixer1" - - else if(!condi && istype(B, /obj/item/weapon/storage/pill_bottle)) - if(bottle) - user << "A pill bottle is already loaded into the machine!" - return - if(!user.drop_item()) - return - - src.bottle = B - B.loc = src - user << "You add the pill bottle into the dispenser slot." - src.updateUsrDialog() - - return + else if(default_deconstruction_crowbar(B)) + return + else + return ..() \ No newline at end of file diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 2e12d38cbf6..c15e48ea344 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -122,22 +122,19 @@ transfer_fingerprints_to(C) user << "You remove the conveyor belt." qdel(src) - return - if(istype(I, /obj/item/weapon/wrench)) + + else if(istype(I, /obj/item/weapon/wrench)) if(!(stat & BROKEN)) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) dir = turn(dir,-45) update_move_direction() user << "You rotate [src]." - return - if(isrobot(user)) - return //Carn: fix for borgs dropping their modules on conveyor belts - if(!user.drop_item()) - user << "\The [I] is stuck to your hand, you cannot place it on the conveyor!" - return - if(I && I.loc) - I.loc = src.loc - return + + else if(user.a_intent != "harm") + if(user.drop_item()) + I.loc = src.loc + else + return ..() // attack with hand, move pulled object onto conveyor /obj/machinery/conveyor/attack_hand(mob/user) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 74e52fc92c8..dd7ae2b0f36 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -27,7 +27,7 @@ dir = direction // update iconstate and dpdir due to dir and type -/obj/structure/disposalconstruct/proc/update() +/obj/structure/disposalconstruct/update_icon() var/flip = turn(dir, 180) var/left = turn(dir, 90) var/right = turn(dir, -90) @@ -87,7 +87,7 @@ // change visibility status and force update of icon /obj/structure/disposalconstruct/hide(var/intact) invisibility = (intact && level==1) ? 101: 0 // hide if floor is intact - update() + update_icon() // flip and rotate verbs @@ -104,7 +104,7 @@ return dir = turn(dir, -90) - update() + update_icon() /obj/structure/disposalconstruct/AltClick(mob/user) ..() @@ -138,7 +138,7 @@ if(DISP_SORTJUNCTION_FLIP) ptype = DISP_SORTJUNCTION - update() + update_icon() // returns the type path of disposalpipe corresponding to this item dtype /obj/structure/disposalconstruct/proc/dpipetype() @@ -210,7 +210,7 @@ return else if(CP) - update() + update_icon() var/pdir = CP.dpdir if(istype(CP, /obj/structure/disposalpipe/broken)) pdir = CP.dir @@ -223,7 +223,7 @@ density = 0 user << "You attach the [nicetype] to the underfloor." playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - update() + update_icon() else if(istype(I, /obj/item/weapon/weldingtool)) if(anchored) @@ -235,7 +235,7 @@ if(!loc || !W.isOn()) return user << "The [nicetype] has been welded in place." - update() // TODO: Make this neat + update_icon() // TODO: Make this neat if(ispipe) var/pipetype = dpipetype() diff --git a/code/modules/recycling/disposal-structures.dm b/code/modules/recycling/disposal-structures.dm index b13585f9c1d..3f00548adba 100644 --- a/code/modules/recycling/disposal-structures.dm +++ b/code/modules/recycling/disposal-structures.dm @@ -358,24 +358,27 @@ //weldingtool: unfasten and convert to obj/disposalconstruct /obj/structure/disposalpipe/attackby(obj/item/I, mob/user, params) - var/turf/T = src.loc if(T.intact) return // prevent interaction with T-scanner revealed pipes - src.add_fingerprint(user) + add_fingerprint(user) if(istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = I + if(can_be_deconstructed(user)) + if(W.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + user << "You start slicing the disposal pipe..." + // check if anything changed over 2 seconds + if(do_after(user,30, target = src)) + if(!src || !W.isOn()) return + Deconstruct() + user << "You slice the disposal pipe." + else + return ..() - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the disposal pipe..." - // check if anything changed over 2 seconds - if(do_after(user,30, target = src)) - if(!src || !W.isOn()) return - Deconstruct() - user << "You slice the disposal pipe." - else - return +//checks if something is blocking the deconstruction (e.g. trunk with a bin still linked to it) +/obj/structure/disposalpipe/proc/can_be_deconstructed() + . = 1 // called when pipe is cut with welder /obj/structure/disposalpipe/Deconstruct() @@ -386,7 +389,7 @@ stored.dir = dir stored.density = 0 stored.anchored = 1 - stored.update() + stored.update_icon() ..() /obj/structure/disposalpipe/singularity_pull(S, current_size) @@ -514,9 +517,6 @@ return /obj/structure/disposalpipe/sortjunction/attackby(obj/item/I, mob/user, params) - if(..()) - return - if(istype(I, /obj/item/device/destTagger)) var/obj/item/device/destTagger/O = I @@ -528,6 +528,8 @@ sortTypes |= O.currTag user << "Added \"[TAGGERLOCATIONS[O.currTag]]\" filter." playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1) + else + return ..() // next direction to move @@ -635,47 +637,11 @@ update() return - // Override attackby so we disallow trunkremoval when somethings ontop -/obj/structure/disposalpipe/trunk/attackby(obj/item/I, mob/user, params) - - //Disposal bins or chutes - /* - These shouldn't be required - var/obj/machinery/disposal/D = locate() in src.loc - if(D && D.anchored) - return - - //Disposal outlet - var/obj/structure/disposaloutlet/O = locate() in src.loc - if(O && O.anchored) - return - */ - - //Disposal constructors - var/obj/structure/disposalconstruct/C = locate() in src.loc - if(C && C.anchored) - return - - var/turf/T = src.loc - if(T.intact) - return // prevent interaction with T-scanner revealed pipes - src.add_fingerprint(user) - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = I - - if(linked) - user << "You need to deconstruct disposal machinery above this pipe!" - return - - if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the disposal pipe..." - if(do_after(user,30/I.toolspeed, target = src)) - if(!src || !W.isOn()) return - Deconstruct() - user << "You slice the disposal pipe." - else - return +/obj/structure/disposalpipe/trunk/can_be_deconstructed(mob/user) + if(linked) + user << "You need to deconstruct disposal machinery above this pipe!" + else + . = 1 // would transfer to next pipe segment, but we are in a trunk // if not entering from disposal bin, @@ -781,20 +747,17 @@ return /obj/structure/disposaloutlet/attackby(obj/item/I, mob/user, params) - if(!I || !user) - return - src.add_fingerprint(user) + add_fingerprint(user) if(istype(I, /obj/item/weapon/screwdriver)) if(mode==0) mode=1 playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You remove the screws around the power connection." - return else if(mode==1) mode=0 playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You attach the screws around the power connection." - return + else if(istype(I,/obj/item/weapon/weldingtool) && mode==1) var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) @@ -805,13 +768,12 @@ user << "You slice the floorweld off \the [src]." stored.loc = loc src.transfer_fingerprints_to(stored) - stored.update() + stored.update_icon() stored.anchored = 0 stored.density = 1 qdel(src) - return - else - return + else + return ..() diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index d71557e4518..b2296e9c746 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -34,7 +34,7 @@ air_contents = new/datum/gas_mixture() //gas.volume = 1.05 * CELLSTANDARD - update() + update_icon() /obj/machinery/disposal/proc/trunk_check() trunk = locate() in src.loc @@ -66,11 +66,8 @@ trunk_check() /obj/machinery/disposal/attackby(obj/item/I, mob/user, params) - if(stat & BROKEN || !I || !user) - return - add_fingerprint(user) - if(mode<=0) // It's off + if(mode<=0) if(istype(I, /obj/item/weapon/screwdriver)) if(contents.len > 0) user << "Eject the items first!" @@ -96,7 +93,21 @@ user << "You slice the floorweld off \the [src]." Deconstruct() return - return 1 + + if(user.a_intent != "harm") + if(!user.drop_item() || (I.flags & ABSTRACT)) + return + place_item_in_disposal(I, user) + update_icon() + return 1 //no afterattack + else + return ..() + +/obj/machinery/disposal/proc/place_item_in_disposal(obj/item/I, mob/user) + I.loc = src + user.visible_message("[user.name] places \the [I] into \the [src].", \ + "You place \the [I] into \the [src].") + // mouse drop another mob or self @@ -133,7 +144,7 @@ "[user] has placed [target] in [src].") add_logs(user, target, "stuffed", addition="into [src]") target.LAssailant = user - update() + update_icon() // can breath normally in the disposal /obj/machinery/disposal/alter_health() @@ -157,7 +168,7 @@ user.loc = src.loc user.reset_perspective(null) - update() + update_icon() return @@ -166,7 +177,7 @@ if(stat & BROKEN) return flush = !flush - update() + update_icon() // ai as human but can't flush /obj/machinery/disposal/attack_ai(mob/user) @@ -198,10 +209,10 @@ for(var/atom/movable/AM in src) AM.forceMove(T) AM.pipe_eject(0) - update() + update_icon() // update the icon & overlays to reflect mode & status -/obj/machinery/disposal/proc/update() +/obj/machinery/disposal/update_icon() return /obj/machinery/disposal/proc/flush() @@ -222,12 +233,6 @@ flushing = 0 flush = 0 -/obj/machinery/disposal/bin/flush() - ..() - if(mode == 2) - mode = 1 - update() - /obj/machinery/disposal/proc/newHolderDestination(obj/structure/disposalholder/H) for(var/obj/item/smallDelivery/O in src) H.tomail = 1 @@ -239,7 +244,7 @@ // called when area power changes /obj/machinery/disposal/power_change() ..() // do default setting/reset of stat NOPOWER bit - update() // update icon + update_icon() // update icon return @@ -267,7 +272,7 @@ src.transfer_fingerprints_to(stored) stored.anchored = 0 stored.density = 1 - stored.update() + stored.update_icon() ..() //How disposal handles getting a storage dump from a storage object @@ -294,26 +299,15 @@ // attack by item places it in to disposal /obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, params) - if(!..()) - return - if(istype(I, /obj/item/weapon/storage/bag/trash)) var/obj/item/weapon/storage/bag/trash/T = I user << "You empty the bag." for(var/obj/item/O in T.contents) T.remove_from_storage(O,src) T.update_icon() - update() - return - - if(!user.drop_item() || I.flags & ABSTRACT) // Dunno why this wasn't here before? - return - - I.loc = src - user.visible_message("[user.name] places \the [I] into \the [src].", \ - "You place \the [I] into \the [src].") - - update() + update_icon() + else + return ..() // user interaction /obj/machinery/disposal/bin/interact(mob/user, ai=0) @@ -373,11 +367,11 @@ mode = 1 else mode = 0 - update() + update_icon() if(href_list["handle"]) flush = text2num(href_list["handle"]) - update() + update_icon() if(href_list["eject"]) eject() @@ -391,14 +385,20 @@ if(prob(75)) I.loc = src visible_message("\the [I] lands in \the [src].") - update() + update_icon() else visible_message("\the [I] bounces off of \the [src]'s rim!") return 0 else return ..(mover, target, height) -/obj/machinery/disposal/bin/update() +/obj/machinery/disposal/bin/flush() + ..() + if(mode == 2) + mode = 1 + update_icon() + +/obj/machinery/disposal/bin/update_icon() overlays.Cut() if(stat & BROKEN) mode = 0 @@ -473,7 +473,7 @@ // if full enough, switch to ready mode if(air_contents.return_pressure() >= SEND_PRESSURE) mode = 2 - update() + update_icon() return /obj/machinery/disposal/bin/get_remote_view_fullscreens(mob/user) @@ -498,6 +498,11 @@ if(trunk) trunk.linked = src // link the pipe trunk to self +/obj/machinery/disposal/deliveryChute/place_item_in_disposal(obj/item/I, mob/user) + if(I.disposalEnterTry()) + ..() + flush() + /obj/machinery/disposal/deliveryChute/Bumped(atom/movable/AM) //Go straight into the chute if(!AM.disposalEnterTry()) return diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 77e9d350cd3..ec75e1a1d75 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -44,6 +44,8 @@ icon_state = "gift[icon_state]" else user << "You need more paper!" + else + return ..() /obj/structure/bigDelivery/relay_container_resist(mob/living/user, obj/O) if(istype(loc, /atom/movable)) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 3b40c550c27..86a65b89bbf 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -74,71 +74,55 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). /obj/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials() return g_amount + gold_amount + diamond_amount -/obj/machinery/r_n_d/circuit_imprinter/attackby(obj/item/O, mob/user, params) - if (shocked) - shock(user,50) - if (default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter", O)) - if(linked_console) - linked_console.linked_imprinter = null - linked_console = null - return +//we drop the minerals in the machine onto the ground when deconstructed. +/obj/machinery/r_n_d/circuit_imprinter/deconstruction() + for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) + reagents.trans_to(G, G.reagents.maximum_volume) + if(g_amount >= MINERAL_MATERIAL_AMOUNT) + var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) + G.amount = round(g_amount / MINERAL_MATERIAL_AMOUNT) + if(gold_amount >= MINERAL_MATERIAL_AMOUNT) + var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc) + G.amount = round(gold_amount / MINERAL_MATERIAL_AMOUNT) + if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) + var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc) + G.amount = round(diamond_amount / MINERAL_MATERIAL_AMOUNT) + ..() - if(exchange_parts(user, O)) - return +/obj/machinery/r_n_d/circuit_imprinter/Insert_Item(obj/item/O, mob/user) - if (panel_open) - if(istype(O, /obj/item/weapon/crowbar)) - for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) - reagents.trans_to(G, G.reagents.maximum_volume) - if(g_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) - G.amount = round(g_amount / MINERAL_MATERIAL_AMOUNT) - if(gold_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc) - G.amount = round(gold_amount / MINERAL_MATERIAL_AMOUNT) - if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc) - G.amount = round(diamond_amount / MINERAL_MATERIAL_AMOUNT) - default_deconstruction_crowbar(O) - return - else - user << "You can't load the [src.name] while it's opened!" - return - if (disabled) - return - if (!linked_console) - user << "The [name] must be linked to an R&D console first!" + if (O.is_open_container()) //inserting reagents into the machine return 1 - if (O.is_open_container()) - return - if (!istype(O, /obj/item/stack/sheet/glass) && !istype(O, /obj/item/stack/sheet/mineral/gold) && !istype(O, /obj/item/stack/sheet/mineral/diamond)) + + if (istype(O, /obj/item/stack/sheet/glass) || istype(O, /obj/item/stack/sheet/mineral/gold) || istype(O, /obj/item/stack/sheet/mineral/diamond)) + . = 1 + if(!is_insertion_ready(user)) + return + var/obj/item/stack/sheet/stack = O + if ((TotalMaterials() + stack.perunit) > max_material_amount) + user << "The [name] is full! Please remove glass from the protolathe in order to insert more." + return + + var/amount = round(input("How many sheets do you want to add?") as num) + if(amount <= 0 || stack.amount <= 0) + return + if(amount > stack.amount) + amount = min(stack.amount, round((max_material_amount-TotalMaterials())/stack.perunit)) + + busy = 1 + use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount/10))) + user << "You add [amount] sheets to the [src.name]." + if(istype(stack, /obj/item/stack/sheet/glass)) + g_amount += amount * MINERAL_MATERIAL_AMOUNT + else if(istype(stack, /obj/item/stack/sheet/mineral/gold)) + gold_amount += amount * MINERAL_MATERIAL_AMOUNT + else if(istype(stack, /obj/item/stack/sheet/mineral/diamond)) + diamond_amount += amount * MINERAL_MATERIAL_AMOUNT + stack.use(amount) + busy = 0 + src.updateUsrDialog() + + else if(user.a_intent != "harm") user << "You cannot insert this item into the [name]!" - return - if (stat) - return - if (busy) - user << "The [name] is busy! Please wait for completion of previous operation." - return - var/obj/item/stack/sheet/stack = O - if ((TotalMaterials() + stack.perunit) > max_material_amount) - user << "The [name] is full! Please remove glass from the protolathe in order to insert more." - return - - var/amount = round(input("How many sheets do you want to add?") as num) - if(amount <= 0 || stack.amount <= 0) - return - if(amount > stack.amount) - amount = min(stack.amount, round((max_material_amount-TotalMaterials())/stack.perunit)) - - busy = 1 - use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount/10))) - user << "You add [amount] sheets to the [src.name]." - if(istype(stack, /obj/item/stack/sheet/glass)) - g_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/gold)) - gold_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/diamond)) - diamond_amount += amount * MINERAL_MATERIAL_AMOUNT - stack.use(amount) - busy = 0 - src.updateUsrDialog() + else + return 0 \ No newline at end of file diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 6fef356857b..76a65f9015d 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -11,7 +11,6 @@ Note: Must be placed within 3 tiles of the R&D Console name = "Destructive Analyzer" desc = "Learn science by destroying things!" icon_state = "d_analyzer" - var/obj/item/weapon/loaded_item = null var/decon_mod = 0 /obj/machinery/r_n_d/destructive_analyzer/New() @@ -36,30 +35,11 @@ Note: Must be placed within 3 tiles of the R&D Console temp_list[O] = text2num(temp_list[O]) return temp_list - -/obj/machinery/r_n_d/destructive_analyzer/attackby(obj/item/O, mob/user, params) - if (shocked) - shock(user,50) - if (default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer", O)) - if(linked_console) - linked_console.linked_destroy = null - linked_console = null - return - - if(exchange_parts(user, O)) - return - - default_deconstruction_crowbar(O) - - if (disabled) - return - if (!linked_console) - user << "The [src.name] must be linked to an R&D console first!" - return - if (busy) - user << "The [src.name] is busy right now." - return - if (istype(O, /obj/item) && !loaded_item) +/obj/machinery/r_n_d/destructive_analyzer/Insert_Item(obj/item/O, mob/user) + if(user.a_intent != "harm") + . = 1 + if(!is_insertion_ready(user)) + return if(!O.origin_tech) user << "This doesn't seem to have a tech origin!" return @@ -75,7 +55,4 @@ Note: Must be placed within 3 tiles of the R&D Console O.loc = src user << "You add the [O.name] to the [src.name]!" flick("d_analyzer_la", src) - spawn(10) - icon_state = "d_analyzer_l" - busy = 0 - return + diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index d37f8715f1f..7ae08a0338b 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -25,7 +25,6 @@ var/recentlyExperimented = 0 var/mob/trackedIan var/mob/trackedRuntime - var/obj/item/loaded_item = null var/badThingCoeff = 0 var/resetTime = 15 var/cloneMode = FALSE @@ -111,36 +110,14 @@ return FALSE return TRUE -/obj/machinery/r_n_d/experimentor/attackby(obj/item/O, mob/user, params) - if (shocked) - shock(user,50) - - if (default_deconstruction_screwdriver(user, "h_lathe_maint", "h_lathe", O)) - if(linked_console) - linked_console.linked_destroy = null - linked_console = null - return - - if(exchange_parts(user, O)) - return - - if(panel_open && istype(O, /obj/item/weapon/crowbar)) - default_deconstruction_crowbar(O) - return - - if(!checkCircumstances(O)) - user << "The [O] is not yet valid for the [src] and must be completed!" - return - - if (disabled) - return - if (!linked_console) - user << "The [src] must be linked to an R&D console first!" - return - if (loaded_item) - user << "The [src] is already loaded." - return - if (istype(O, /obj/item)) +/obj/machinery/r_n_d/experimentor/Insert_Item(obj/item/O, mob/user) + if(user.a_intent != "harm") + . = 1 + if(!is_insertion_ready(user)) + return + if(!checkCircumstances(O)) + user << "The [O] is not yet valid for the [src] and must be completed!" + return if(!O.origin_tech) user << "This doesn't seem to have a tech origin!" return @@ -158,7 +135,7 @@ user << "You add the [O.name] to the machine." flick("h_lathe_load", src) - return + /obj/machinery/r_n_d/experimentor/default_deconstruction_crowbar(obj/item/O) ejectItem() @@ -640,7 +617,7 @@ spawn(cooldownMax) cooldown = FALSE else - user << "You aren't quite sure what to do with this yet." + user << "You aren't quite sure what to do with this, yet." //////////////// RELIC PROCS ///////////////////////////// diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 0d390b517de..428ee5947a4 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -72,61 +72,45 @@ Note: Must be placed west/left of and R&D console to function. A = A / max(1, (being_built.materials[M])) return A -/obj/machinery/r_n_d/protolathe/attackby(obj/item/O, mob/user, params) - if (shocked) - shock(user,50) - if (default_deconstruction_screwdriver(user, "protolathe_t", "protolathe", O)) - if(linked_console) - linked_console.linked_lathe = null - linked_console = null - return +//we eject the materials upon deconstruction. +/obj/machinery/r_n_d/protolathe/deconstruction() + for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) + reagents.trans_to(G, G.reagents.maximum_volume) + materials.retrieve_all() + ..() - if(exchange_parts(user, O)) - return +/obj/machinery/r_n_d/protolathe/Insert_Item(obj/item/O, mob/user) - if (panel_open) - if(istype(O, /obj/item/weapon/crowbar)) - for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) - reagents.trans_to(G, G.reagents.maximum_volume) - materials.retrieve_all() - default_deconstruction_crowbar(O) + if(O.is_open_container()) //inserting reagents into the machine + return 1 + + if(istype(O,/obj/item/stack/sheet)) + . = 1 + if(!is_insertion_ready(user)) + return + if(!materials.has_space( materials.get_item_material_amount(O) )) + user << "The [src.name]'s material bin is full! Please remove material before adding more." + return 1 + + var/obj/item/stack/sheet/stack = O + var/amount = round(input("How many sheets do you want to add?") as num)//No decimals + if(!in_range(src, stack) || !user.Adjacent(src)) + return + var/amount_inserted = materials.insert_stack(O,amount) + if(!amount_inserted) return 1 else - user << "You can't load the [src.name] while it's opened!" - return 1 - if (disabled) - return - if (!linked_console) - user << "The [src.name] must be linked to an R&D console first!" - return 1 - if (busy) - user << "The [src.name] is busy! Please wait for completion of previous operation." - return 1 - if (O.is_open_container()) - return - if (stat) - return 1 - if(!istype(O,/obj/item/stack/sheet)) - return 1 + var/stack_name = stack.name + busy = 1 + use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount_inserted/10))) + user << "You add [amount_inserted] sheets to the [src.name]." + overlays += "protolathe_[stack_name]" + sleep(10) + overlays -= "protolathe_[stack_name]" + busy = 0 + updateUsrDialog() - if(!materials.has_space( materials.get_item_material_amount(O) )) - user << "The [src.name]'s material bin is full! Please remove material before adding more." - return 1 - - var/obj/item/stack/sheet/stack = O - var/amount = round(input("How many sheets do you want to add?") as num)//No decimals - if(!in_range(src, stack) || !user.Adjacent(src)) - return - var/amount_inserted = materials.insert_stack(O,amount) - if(!amount_inserted) - return 1 + else if(user.a_intent != "harm") + user << "You cannot insert this item into the [name]!" else - var/stack_name = stack.name - busy = 1 - use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount_inserted/10))) - user << "You add [amount_inserted] sheets to the [src.name]." - overlays += "protolathe_[stack_name]" - sleep(10) - overlays -= "protolathe_[stack_name]" - busy = 0 - updateUsrDialog() + return 0 \ No newline at end of file diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index db4337bf670..7fb6e811822 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -14,6 +14,7 @@ var/disabled = 0 var/shocked = 0 var/obj/machinery/computer/rdconsole/linked_console + var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer) /obj/machinery/r_n_d/New() ..() @@ -39,9 +40,62 @@ /obj/machinery/r_n_d/attack_hand(mob/user) if(shocked) - shock(user,50) + if(shock(user,50)) + return if(panel_open) wires.interact(user) +/obj/machinery/r_n_d/attackby(obj/item/O, mob/user, params) + if (shocked) + if(shock(user,50)) + return 1 + if (default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), O)) + if(linked_console) + linked_console.linked_lathe = null + linked_console = null + return + if(exchange_parts(user, O)) + return + if(default_deconstruction_crowbar(O)) + return + if(Insert_Item(O, user)) + return 1 + else + return ..() + +//proc used to handle inserting items or reagents into r_n_d machines +/obj/machinery/r_n_d/proc/Insert_Item(obj/item/I, mob/user) + return + +//whether the machine can have an item inserted in its current state. +/obj/machinery/r_n_d/proc/is_insertion_ready(mob/user) + if(panel_open) + user << "You can't load the [src.name] while it's opened!" + return + if (disabled) + return + if (!linked_console) + user << "The [name] must be linked to an R&D console first!" + return + if (busy) + user << "The [src.name] is busy right now." + return + if(stat & BROKEN) + user << "The [src.name] is broken." + return + if(stat & NOPOWER) + user << "The [src.name] has no power." + return + if(loaded_item) + user << "The [src] is already loaded." + return + return 1 + + +//we eject the loaded item when deconstructing the machine +/obj/machinery/r_n_d/deconstruction() + if(loaded_item) + loaded_item.loc = loc + ..() \ No newline at end of file diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index d60c092f25e..9377ac45165 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -124,20 +124,10 @@ env.merge(removed) air_update_turf() -/obj/machinery/r_n_d/server/attackby(obj/item/O, mob/user, params) - if (disabled) - return - if (shocked) - shock(user,50) - if (default_deconstruction_screwdriver(user, "server_o", "server", O)) - return - if(exchange_parts(user, O)) - return - if (panel_open) - if(istype(O, /obj/item/weapon/crowbar)) - griefProtection() - default_deconstruction_crowbar(O) - return 1 +//called when the server is deconstructed. +/obj/machinery/r_n_d/server/deconstruction() + griefProtection() + ..() /obj/machinery/r_n_d/server/attack_hand(mob/user as mob) // I guess only exists to stop ninjas or hell does it even work I dunno. See also ninja gloves. if (disabled) @@ -323,9 +313,8 @@ return /obj/machinery/computer/rdservercontrol/attackby(obj/item/weapon/D, mob/user, params) - ..() + . = ..() src.updateUsrDialog() - return /obj/machinery/computer/rdservercontrol/emag_act(mob/user) if(!emagged) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 764f3d3fa45..1a12c3eb759 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -7,46 +7,31 @@ var/list/authorized = list() -/obj/machinery/computer/emergency_shuttle/attackby(obj/item/weapon/card/W, mob/user, params) - if(stat & (BROKEN|NOPOWER)) - return - if(!istype(W, /obj/item/weapon/card)) - return - if(SSshuttle.emergency.mode != SHUTTLE_DOCKED) - return - if(!user) - return - if(SSshuttle.emergency.timeLeft() < 11) - return - if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if (istype(W, /obj/item/device/pda)) - var/obj/item/device/pda/pda = W - W = pda.id - if (!W:access) //no access - user << "The access level of [W:registered_name]\'s card is not high enough. " +/obj/machinery/computer/emergency_shuttle/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/card/id)) + var/obj/item/weapon/card/id/ID = I + if(stat & (BROKEN|NOPOWER)) return - - var/list/cardaccess = W:access - if(!istype(cardaccess, /list) || !cardaccess.len) //no access - user << "The access level of [W:registered_name]\'s card is not high enough. " + if(SSshuttle.emergency.mode != SHUTTLE_DOCKED) + return + if(SSshuttle.emergency.timeLeft() < 11) + return + if(!(access_heads in ID.access)) //doesn't have this access + user << "The access level of [ID.registered_name]\'s card is not high enough. " return - - if(!(access_heads in W:access)) //doesn't have this access - user << "The access level of [W:registered_name]\'s card is not high enough. " - return 0 var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort") - if(SSshuttle.emergency.mode != SHUTTLE_DOCKED || user.get_active_hand() != W) - return 0 + if(SSshuttle.emergency.mode != SHUTTLE_DOCKED || user.get_active_hand() != ID) + return var/seconds = SSshuttle.emergency.timeLeft() if(seconds <= 10) - return 0 + return switch(choice) if("Authorize") - if(!authorized.Find(W:registered_name)) - authorized += W:registered_name + if(!authorized.Find(ID.registered_name)) + authorized += ID.registered_name if(auth_need - authorized.len > 0) message_admins("[key_name_admin(user.client)](?) (FLW) has authorized early shuttle launch ",0,1) log_game("[key_name(user)] has authorized early shuttle launch in ([x],[y],[z])") @@ -58,13 +43,15 @@ SSshuttle.emergency.setTimer(100) if("Repeal") - if(authorized.Remove(W:registered_name)) + if(authorized.Remove(ID.registered_name)) minor_announce("[auth_need - authorized.len] authorizations needed until shuttle is launched early") if("Abort") if(authorized.len) minor_announce("All authorizations to launch the shuttle early have been revoked.") authorized.Cut() + else + return ..() /obj/machinery/computer/emergency_shuttle/emag_act(mob/user) if(!emagged && SSshuttle.emergency.mode == SHUTTLE_DOCKED) diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 45d0a39adf9..8e640ed006d 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -40,7 +40,10 @@ if(exchange_parts(user, I)) return - default_deconstruction_crowbar(I) + if(default_deconstruction_crowbar(I)) + return + + return ..() //CARGO TELEPAD// @@ -64,7 +67,7 @@ else if(!anchored) anchored = 1 user << "\The [src] is now secured." - if(istype(W, /obj/item/weapon/screwdriver)) + else if(istype(W, /obj/item/weapon/screwdriver)) if(stage == 0) playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) user << "You unscrew the telepad's tracking beacon." @@ -73,12 +76,20 @@ playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) user << "You screw in the telepad's tracking beacon." stage = 0 - if(istype(W, /obj/item/weapon/weldingtool) && stage == 1) - playsound(src, 'sound/items/Welder.ogg', 50, 1) - user << "You disassemble the telepad." - new /obj/item/stack/sheet/metal(get_turf(src)) - new /obj/item/stack/sheet/glass(get_turf(src)) - qdel(src) + else if(istype(W, /obj/item/weapon/weldingtool) && stage == 1) + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(0,user)) + playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + user << "You start disassembling [src]..." + if(do_after(user,20/WT.toolspeed, target = src)) + if(!WT.isOn()) + return + user << "You disassemble [src]." + new /obj/item/stack/sheet/metal(get_turf(src)) + new /obj/item/stack/sheet/glass(get_turf(src)) + qdel(src) + else + return ..() ///TELEPAD CALLER/// /obj/item/device/telepad_beacon diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi index de0b2780af913dd55f4cbdfd458fff27cd83d940..741f770f68641540b296a16d1f8ba187f310646c 100644 GIT binary patch delta 84 zcmV-a0IUDMlmWn$0gxmCZ?Ppe0YKKn{TZC Date: Sun, 24 Apr 2016 20:38:33 +0200 Subject: [PATCH 131/228] Same things but with structures now. --- code/datums/martial.dm | 59 ++--- code/game/gamemodes/handofgod/structures.dm | 95 ++++--- .../gamemodes/miniantags/bot_swarm/swarmer.dm | 49 ++-- code/game/mecha/mech_fabricator.dm | 20 +- code/game/mecha/mecha_defense.dm | 35 +-- code/game/objects/effects/aliens.dm | 164 +++++------- code/game/objects/effects/spiders.dm | 51 ++-- code/game/objects/items/devices/PDA/PDA.dm | 28 +- .../objects/items/devices/laserpointer.dm | 17 +- code/game/objects/items/robot/robot_parts.dm | 58 ++-- code/game/objects/items/toys.dm | 97 ++++--- code/game/objects/items/weapons/RSF.dm | 207 +++------------ .../objects/items/weapons/holosign_creator.dm | 50 ++-- .../objects/items/weapons/pneumaticCannon.dm | 43 ++- code/game/objects/structures/ai_core.dm | 22 +- .../structures/beds_chairs/alien_nest.dm | 24 +- .../structures/crates_lockers/closets.dm | 38 +-- .../crates_lockers/closets/secure/personal.dm | 37 ++- .../crates_lockers/closets/statue.dm | 26 +- code/game/objects/structures/displaycase.dm | 135 ++++++---- code/game/objects/structures/false_walls.dm | 39 +-- code/game/objects/structures/fireaxe.dm | 83 +++--- code/game/objects/structures/grille.dm | 101 +++---- code/game/objects/structures/guncase.dm | 9 +- code/game/objects/structures/mineral_doors.dm | 17 +- code/game/objects/structures/mirror.dm | 104 ++++---- code/game/objects/structures/signs.dm | 26 +- code/game/objects/structures/statues.dm | 77 +++--- code/game/objects/structures/tables_racks.dm | 249 ++++++++++-------- .../structures/transit_tubes/station.dm | 28 +- code/game/objects/structures/watercloset.dm | 70 ++--- code/game/objects/structures/window.dm | 137 ++++------ code/modules/vehicles/pimpin_ride.dm | 25 +- 33 files changed, 1050 insertions(+), 1170 deletions(-) diff --git a/code/datums/martial.dm b/code/datums/martial.dm index d69b28cd0b1..d1b498f5070 100644 --- a/code/datums/martial.dm +++ b/code/datums/martial.dm @@ -540,38 +540,35 @@ if(C.stat) user << "It would be dishonorable to attack a foe while they cannot retaliate." return - switch(user.a_intent) - if("disarm") - if(!wielded) - return ..() - if(!ishuman(target)) - return ..() - var/mob/living/carbon/human/H = target - var/list/fluffmessages = list("[user] clubs [H] with [src]!", \ - "[user] smacks [H] with the butt of [src]!", \ - "[user] broadsides [H] with [src]!", \ - "[user] smashes [H]'s head with [src]!", \ - "[user] beats [H] with front of [src]!", \ - "[user] twirls and slams [H] with [src]!") - H.visible_message("[pick(fluffmessages)]", \ - "[pick(fluffmessages)]") - playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1) - H.adjustStaminaLoss(rand(13,20)) - if(prob(10)) - H.visible_message("[H] collapses!", \ - "Your legs give out!") - H.Weaken(4) - if(H.staminaloss && !H.sleeping) - var/total_health = (H.health - H.staminaloss) - if(total_health <= config.health_threshold_crit && !H.stat) - H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking them out cold!", \ - "[user] knocks you unconscious!") - H.SetSleeping(30) - H.adjustBrainLoss(25) - return - else + if(user.a_intent == "disarm") + if(!wielded) return ..() - return ..() + if(!ishuman(target)) + return ..() + var/mob/living/carbon/human/H = target + var/list/fluffmessages = list("[user] clubs [H] with [src]!", \ + "[user] smacks [H] with the butt of [src]!", \ + "[user] broadsides [H] with [src]!", \ + "[user] smashes [H]'s head with [src]!", \ + "[user] beats [H] with front of [src]!", \ + "[user] twirls and slams [H] with [src]!") + H.visible_message("[pick(fluffmessages)]", \ + "[pick(fluffmessages)]") + playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1) + H.adjustStaminaLoss(rand(13,20)) + if(prob(10)) + H.visible_message("[H] collapses!", \ + "Your legs give out!") + H.Weaken(4) + if(H.staminaloss && !H.sleeping) + var/total_health = (H.health - H.staminaloss) + if(total_health <= config.health_threshold_crit && !H.stat) + H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking them out cold!", \ + "[user] knocks you unconscious!") + H.SetSleeping(30) + H.adjustBrainLoss(25) + else + return ..() /obj/item/weapon/twohanded/bostaff/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) if(wielded) diff --git a/code/game/gamemodes/handofgod/structures.dm b/code/game/gamemodes/handofgod/structures.dm index 309efa87a89..f86f4630683 100644 --- a/code/game/gamemodes/handofgod/structures.dm +++ b/code/game/gamemodes/handofgod/structures.dm @@ -52,15 +52,8 @@ return ..() -/obj/structure/divine/proc/healthcheck() - if(!health) - visible_message("\The [src] was destroyed!") - qdel(src) - /obj/structure/divine/attackby(obj/item/I, mob/user) - if(!I || (I.flags & ABSTRACT)) - return 0 //Structure conversion/capture if(istype(I, /obj/item/weapon/godstaff)) @@ -71,35 +64,52 @@ if(G.god && deity != G.god) assign_deity(G.god, alert_old_deity = TRUE) visible_message("\The [src] has been captured by [user]!") - return + else + return ..() +/obj/structure/divine/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force, I.damtype, 1) + +/obj/structure/divine/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health -= damage + if(!health) + visible_message("\The [src] was destroyed!") + qdel(src) + + +/obj/structure/divine/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) + + +/obj/structure/divine/attack_alien(mob/living/carbon/alien/humanoid/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - playsound(get_turf(src), I.hitsound, 50, 1) - visible_message("\The [src] has been attacked with \the [I][(user ? " by [user]" : ".")]!") - health = max(0, health-I.force) - healthcheck() + add_hiddenprint(user) + visible_message("\The [user] slashes at [src]!") + playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) + take_damage(20, BRUTE, 0) - -/obj/structure/divine/bullet_act(obj/item/projectile/Proj) - if(!Proj) - return 0 - - if(Proj.damage_type == BRUTE || Proj.damage_type == BURN) - health = max(0, health-Proj.damage) - healthcheck() - - -/obj/structure/divine/attack_animal(mob/living/simple_animal/M) - if(!M) - return 0 - - visible_message("\The [src] has been attacked by \the [M]!") - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - if(!damage) - return - health = max(0, health-damage) - healthcheck() +/obj/machinery/attack_animal(mob/living/simple_animal/M) + M.changeNext_move(CLICK_CD_MELEE) + M.do_attack_animation(src) + if(M.melee_damage_upper > 0) + M.visible_message("[M.name] smashes against \the [src.name].",\ + "You smash against the [src.name].") + take_damage(rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, 1) /obj/structure/divine/proc/assign_deity(mob/camera/god/new_deity, alert_old_deity = TRUE) @@ -199,7 +209,8 @@ user << "\The [src] does not require any more greater gems!" return - ..() + else + return ..() /obj/structure/divine/construction_holder/proc/check_completion() @@ -239,11 +250,22 @@ /obj/structure/divine/nexus/ex_act() return - -/obj/structure/divine/nexus/healthcheck() +/obj/structure/divine/nexus/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health -= damage if(deity) deity.update_health_hud() - if(!health) if(!qdeleted(deity) && deity.nexus_required) deity << "Your nexus was destroyed. You feel yourself fading..." @@ -257,7 +279,6 @@ /obj/structure/divine/nexus/process() - healthcheck() if(deity) deity.update_followers() deity.add_faith(faith_regen_rate + (powerpylons.len / 5) + (deity.alive_followers / 3)) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index f0c72d39e2a..4bebddd1564 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -371,44 +371,47 @@ mouse_opacity = 1 var/health = 30 -/obj/effect/swarmer/destructible/proc/TakeDamage(damage) +/obj/effect/swarmer/destructible/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return health -= damage if(health <= 0) qdel(src) -/obj/effect/swarmer/destructible/bullet_act(obj/item/projectile/Proj) - if(Proj.damage) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - TakeDamage(Proj.damage) - ..() +/obj/effect/swarmer/destructible/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type) -/obj/effect/swarmer/destructible/attackby(obj/item/weapon/I, mob/living/user, params) - if(istype(I, /obj/item/weapon)) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - TakeDamage(I.force) - return +/obj/effect/swarmer/destructible/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force, I.damtype) /obj/effect/swarmer/destructible/ex_act() qdel(src) - return /obj/effect/swarmer/destructible/blob_act() qdel(src) - return /obj/effect/swarmer/destructible/emp_act() qdel(src) - return -/obj/effect/swarmer/destructible/attack_animal(mob/living/user) - if(isanimal(user)) - var/mob/living/simple_animal/S = user - S.do_attack_animation(src) - user.changeNext_move(CLICK_CD_MELEE) - if(S.melee_damage_type == BRUTE || S.melee_damage_type == BURN) - TakeDamage(rand(S.melee_damage_lower, S.melee_damage_upper)) - return +/obj/effect/swarmer/destructible/attack_alien(mob/living/user) + user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) + take_damage(rand(20,30)) + +/obj/effect/swarmer/destructible/attack_animal(mob/living/simple_animal/S) + S.do_attack_animation(src) + S.changeNext_move(CLICK_CD_MELEE) + if(S.melee_damage_upper) + take_damage(rand(S.melee_damage_lower, S.melee_damage_upper), S.melee_damage_type) /mob/living/simple_animal/hostile/swarmer/proc/CreateTrap() set name = "Create trap" diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 5ef0cfdb794..5748be75618 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -459,6 +459,9 @@ return result +/obj/machinery/mecha_part_fabricator/deconstruction() + for(var/material in resources) + remove_material(material, resources[material]/MINERAL_MATERIAL_AMOUNT) /obj/machinery/mecha_part_fabricator/attackby(obj/W, mob/user, params) if(default_deconstruction_screwdriver(user, "fab-o", "fab-idle", W)) @@ -467,17 +470,13 @@ if(exchange_parts(user, W)) return - if(panel_open) - if(istype(W, /obj/item/weapon/crowbar)) - for(var/material in resources) - remove_material(material, resources[material]/MINERAL_MATERIAL_AMOUNT) - default_deconstruction_crowbar(W) - return 1 - else - user << "You can't load \the [name] while it's opened!" - return 1 + if(default_deconstruction_crowbar(W)) + return 1 if(istype(W, /obj/item/stack)) + if(panel_open) + user << "You can't load \the [name] while it's opened!" + return 1 var/material switch(W.type) if(/obj/item/stack/sheet/mineral/gold) @@ -519,7 +518,8 @@ overlays -= "fab-load-[material2name(material)]" //No matter what the overlay shall still be deleted else user << "\The [src] cannot hold any more [sname] sheet\s!" - return + else + return ..() /obj/machinery/mecha_part_fabricator/proc/material2name(ID) return copytext(ID,2) diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 9b0fc6d69e6..badf0ee4804 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -183,7 +183,7 @@ else user << "You were unable to attach [W] to [src]!" return - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + if(W.GetID()) if(add_req_access || maint_access) if(internals_access_allowed(user)) var/obj/item/weapon/card/id/id_card @@ -223,7 +223,7 @@ else user << "You need two lengths of cable to fix this mech!" return - else if(istype(W, /obj/item/weapon/screwdriver)) + else if(istype(W, /obj/item/weapon/screwdriver) && user.a_intent != "harm") if(internal_damage & MECHA_INT_TEMP_CONTROL) clearInternalDamage(MECHA_INT_TEMP_CONTROL) user << "You repair the damaged temperature controller." @@ -278,22 +278,25 @@ W.forceMove(src) user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") return + else + return ..() - else if(!(W.flags&NOBLUDGEON)) - user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. - user.do_attack_animation(src) - log_message("Attacked by [W]. Attacker - [user]") - var/deflection = 1 - var/dam_coeff = 1 - for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment) - if(B.attack_react(user)) - deflection *= B.deflect_coeff - dam_coeff *= B.damage_coeff - break - user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].") - take_damage(round(W.force*dam_coeff),W.damtype, user.dir, deflection, dam_coeff) +/obj/mecha/attacked_by(obj/item/I, mob/living/user) + log_message("Attacked by [I]. Attacker - [user]") + var/deflection = deflect_chance + var/dam_coeff = 1 + for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment) + if(B.attack_react(user)) + deflection *= B.deflect_coeff + dam_coeff *= B.damage_coeff + break + if(prob(deflection)) + user << "\The [I.name] bounces off [name]'s armor." + log_append_to_last("Armor saved.") + else + user.visible_message("[user] hits [src] with [I].", "You hit [src] with [I].") + take_damage(round(I.force*dam_coeff),I.damtype) check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - return 1 /obj/mecha/proc/mech_toxin_damage(mob/living/target) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index cc816f1d8f1..21ae2c75996 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -9,6 +9,40 @@ /obj/structure/alien icon = 'icons/mob/alien.dmi' + var/health = 100 + +/obj/structure/alien/attacked_by(obj/item/I, mob/user) + ..() + var/damage = I.force + switch(I.damtype) + if(BRUTE) + damage *= 0.25 + if(BURN) + damage *= 2 + else + damage = 0 //stamina damage does no damage + take_damage(damage, I.damtype) + +/obj/structure/alien/proc/take_damage(amount, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health = max(health - amount, 0) + if(!health) + Break() + +/obj/structure/alien/proc/Break() + qdel(src) + +/obj/structure/alien/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type) /* * Resin @@ -22,9 +56,10 @@ opacity = 1 anchored = 1 canSmoothWith = list(/obj/structure/alien/resin) - var/health = 200 - var/resintype = null + health = 200 smooth = SMOOTH_TRUE + var/resintype = null + /obj/structure/alien/resin/New(location) @@ -66,32 +101,17 @@ resintype = "membrane" canSmoothWith = list(/obj/structure/alien/resin/wall, /obj/structure/alien/resin/membrane) -/obj/structure/alien/resin/proc/healthcheck() - if(health <=0) - qdel(src) - - -/obj/structure/alien/resin/bullet_act(obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - - /obj/structure/alien/resin/ex_act(severity, target) switch(severity) if(1) - health -= 150 + take_damage(150, BRUTE, 0) if(2) - health -= 100 + take_damage(100, BRUTE, 0) if(3) - health -= 50 - healthcheck() - - -/obj/structure/alien/resin/blob_act() - health -= 50 - healthcheck() + take_damage(50, BRUTE, 0) +/obj/structure/alien/blob_act() + take_damage(50, BRUTE, 0) /obj/structure/alien/resin/hitby(atom/movable/AM) ..() @@ -101,16 +121,12 @@ else var/obj/O = AM tforce = O.throwforce - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - health -= tforce - healthcheck() + take_damage(tforce) /obj/structure/alien/resin/attack_hulk(mob/living/carbon/human/user) ..(user, 1) - user.do_attack_animation(src) user.visible_message("[user] destroys [src]!") - health = 0 - healthcheck() + take_damage(200) /obj/structure/alien/resin/attack_paw(mob/user) return attack_hand(user) @@ -119,23 +135,16 @@ /obj/structure/alien/resin/attack_alien(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - if(islarva(user)) - return user.visible_message("[user] claws at the resin!") - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - health -= 50 - if(health <= 0) - user.visible_message("[user] slices the [name] apart!") - healthcheck() - - -/obj/structure/alien/resin/attackby(obj/item/I, mob/living/user, params) - user.changeNext_move(CLICK_CD_MELEE) - health -= I.force - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - healthcheck() - ..() + take_damage(50) +/obj/structure/alien/resin/attack_animal(mob/living/simple_animal/M) + M.changeNext_move(CLICK_CD_MELEE) + M.do_attack_animation(src) + if(M.melee_damage_upper == 0 || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) + return + visible_message("[M] [M.attacktext] [src]!") + take_damage(M.melee_damage_upper, M.melee_damage_type) /obj/structure/alien/resin/CanPass(atom/movable/mover, turf/target, height=0) return !density @@ -155,7 +164,7 @@ density = 0 layer = TURF_LAYER + 0.09 icon_state = "weeds" - var/health = 15 + health = 15 var/obj/structure/alien/weeds/node/linked_node = null canSmoothWith = list(/obj/structure/alien/weeds, /turf/closed/wall) smooth = SMOOTH_MORE @@ -208,33 +217,9 @@ qdel(src) -/obj/structure/alien/weeds/attackby(obj/item/I, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) - if(I.attack_verb.len) - visible_message("[user] has [pick(I.attack_verb)] [src] with [I]!") - else - visible_message("[user] has attacked [src] with [I]!") - - var/damage = I.force / 4 - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = I - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - - health -= damage - healthcheck() - - -/obj/structure/alien/weeds/proc/healthcheck() - if(health <= 0) - qdel(src) - - /obj/structure/alien/weeds/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) - health -= 5 - healthcheck() + take_damage(5, BURN, 0) //Weed nodes @@ -271,7 +256,7 @@ icon_state = "egg_growing" density = 0 anchored = 1 - var/health = 100 + health = 100 var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive layer = MOB_LAYER @@ -340,43 +325,16 @@ remove_from_proximity_list(src, 1) ..() -/obj/structure/alien/egg/bullet_act(obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - - -/obj/structure/alien/egg/attackby(obj/item/I, mob/user, params) - if(I.attack_verb.len) - visible_message("[user] has [pick(I.attack_verb)] [src] with [I]!") - else - visible_message("[user] has attacked [src] with [I]!") - - var/damage = I.force / 4 - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = I - - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - - health -= damage - user.changeNext_move(CLICK_CD_MELEE) - healthcheck() - - -/obj/structure/alien/egg/proc/healthcheck() - if(health <= 0) - if(status != BURST && status != BURSTING) - Burst() - else if(status == BURST && prob(50)) - qdel(src) //Remove the egg after it has been hit after bursting. +/obj/structure/alien/egg/Break() + if(status != BURST && status != BURSTING) + Burst() + else if(status == BURST) + qdel(src) //Remove the egg after it has been hit after bursting. /obj/structure/alien/egg/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 500) - health -= 5 - healthcheck() + take_damage(5, BURN, 0) /obj/structure/alien/egg/HasProximity(atom/movable/AM) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 528ccafa5b9..b8d0a99bba9 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -19,37 +19,32 @@ qdel(src) return -/obj/effect/spider/attackby(obj/item/weapon/W, mob/user, params) - if(W.attack_verb.len) - visible_message("[user] has [pick(W.attack_verb)] \the [src] with \the [W]!") - else - visible_message("[user] has attacked \the [src] with \the [W]!") - - var/damage = W.force / 4 - - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - - health -= damage - healthcheck() - -/obj/effect/spider/bullet_act(obj/item/projectile/Proj) +/obj/effect/spider/attacked_by(obj/item/I, mob/user) ..() - health -= Proj.damage - healthcheck() + var/damage = I.force + take_damage(damage, I.damtype, 1) -/obj/effect/spider/proc/healthcheck() +/obj/effect/spider/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) + +/obj/effect/spider/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BURN) + damage *= 2 + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) + if(BRUTE)//the stickiness of the web mutes all attack sounds except fire damage type + damage *= 0.25 + else + return + health -= damage if(health <= 0) qdel(src) /obj/effect/spider/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) - health -= 5 - healthcheck() + take_damage(5, BURN, 0) /obj/effect/spider/stickyweb icon_state = "stickyweb1" @@ -125,14 +120,6 @@ else ..() -/obj/effect/spider/spiderling/proc/die() - visible_message("[src] dies!") - qdel(src) - -/obj/effect/spider/spiderling/healthcheck() - if(health <= 0) - die() - /obj/effect/spider/spiderling/process() if(travelling_in_vent) if(istype(src.loc, /turf)) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 33760586938..ebd6e3d05c1 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -10,6 +10,7 @@ var/global/list/obj/item/device/pda/PDAs = list() icon = 'icons/obj/pda.dmi' icon_state = "pda" item_state = "electronic" + flags = NOBLUDGEON //phil235 test it w_class = 1 slot_flags = SLOT_ID | SLOT_BELT origin_tech = "programming=2" @@ -728,7 +729,6 @@ var/global/list/obj/item/device/pda/PDAs = list() // access to status display signals /obj/item/device/pda/attackby(obj/item/C, mob/user, params) - ..() if(istype(C, /obj/item/weapon/cartridge) && !cartridge) cartridge = C if(!user.unEquip(C)) @@ -777,7 +777,8 @@ var/global/list/obj/item/device/pda/PDAs = list() var/obj/item/weapon/photo/P = C photo = P.img user << "You scan \the [C]." - return + else + return ..() /obj/item/device/pda/attack(mob/living/carbon/C, mob/living/user) if(istype(C)) @@ -821,23 +822,26 @@ var/global/list/obj/item/device/pda/PDAs = list() var/obj/item/weapon/tank/T = A atmosanalyzer_scan(T.air_contents, user, T) else if (istype(A, /obj/machinery/portable_atmospherics)) - var/obj/machinery/portable_atmospherics/T = A - atmosanalyzer_scan(T.air_contents, user, T) + var/obj/machinery/portable_atmospherics/PA = A + atmosanalyzer_scan(PA.air_contents, user, PA) else if (istype(A, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/T = A - atmosanalyzer_scan(T.parent.air, user, T) + var/obj/machinery/atmospherics/pipe/P = A + atmosanalyzer_scan(P.parent.air, user, P) else if (istype(A, /obj/machinery/power/rad_collector)) - var/obj/machinery/power/rad_collector/T = A - if(T.P) atmosanalyzer_scan(T.P.air_contents, user, T) + var/obj/machinery/power/rad_collector/RC = A + if(RC.loaded_tank) + atmosanalyzer_scan(RC.loaded_tank.air_contents, user, RC) else if (istype(A, /obj/item/weapon/flamethrower)) - var/obj/item/weapon/flamethrower/T = A - if(T.ptank) atmosanalyzer_scan(T.ptank.air_contents, user, T) + var/obj/item/weapon/flamethrower/F = A + if(F.ptank) + atmosanalyzer_scan(F.ptank.air_contents, user, F) if (!scanmode && istype(A, /obj/item/weapon/paper) && owner) - if (!A:info) + var/obj/item/weapon/paper/PP = A + if (!PP.info) user << "Unable to scan! Paper is blank." return - notehtml = A:info + notehtml = PP.info note = replacetext(notehtml, "
      ", "\[br\]") note = replacetext(note, "
    • ", "\[*\]") note = replacetext(note, "
        ", "\[list\]") diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index a5a5e2f5d0b..6ec1518cd18 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -5,7 +5,7 @@ icon_state = "pointer" item_state = "pen" var/pointer_icon_state - flags = CONDUCT + flags = CONDUCT | NOBLUDGEON slot_flags = SLOT_BELT materials = list(MAT_METAL=500, MAT_GLASS=500) w_class = 2 //Increased to 2, because diodes are w_class 2. Conservation of matter. @@ -38,11 +38,6 @@ ..() diode = new /obj/item/weapon/stock_parts/micro_laser/ultra - - -/obj/item/device/laser_pointer/attack(mob/living/M, mob/user) - laser_act(M, user) - /obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) if(!diode) @@ -53,20 +48,16 @@ user << "You install a [diode.name] in [src]." else user << "[src] already has a diode installed." - return else if(istype(W, /obj/item/weapon/screwdriver)) if(diode) user << "You remove the [diode.name] from \the [src]." diode.loc = get_turf(src.loc) diode = null - return - ..() - return + else + return ..() /obj/item/device/laser_pointer/afterattack(atom/target, mob/living/user, flag, params) - if(flag) //we're placing the object on a table or in backpack - return laser_act(target, user, params) /obj/item/device/laser_pointer/proc/laser_act(atom/target, mob/living/user, params) @@ -165,7 +156,7 @@ recharging = 1 SSobj.processing |= src if(energy <= 0) - user << "The [src]'s battery is overused, it needs time to recharge!" + user << "[src]'s battery is overused, it needs time to recharge!" recharge_locked = 1 flick_overlay(I, showto, 10) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index d33c5a274e2..3be12d0b94f 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -86,21 +86,22 @@ return 0 /obj/item/robot_parts/robot_suit/attackby(obj/item/W, mob/user, params) - ..() - if(istype(W, /obj/item/stack/sheet/metal) && !l_arm && !r_arm && !l_leg && !r_leg && !chest && !head) + + if(istype(W, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/metal/M = W - if (M.use(1)) - var/obj/item/weapon/ed209_assembly/B = new /obj/item/weapon/ed209_assembly - B.loc = get_turf(src) - user << "You arm the robot frame." - if (user.get_inactive_hand()==src) - user.unEquip(src) - user.put_in_inactive_hand(B) - qdel(src) - else - user << "You need one sheet of metal to start building ED-209!" - return - if(istype(W, /obj/item/robot_parts/l_leg)) + if(!l_arm && !r_arm && !l_leg && !r_leg && !chest && !head) + if (M.use(1)) + var/obj/item/weapon/ed209_assembly/B = new /obj/item/weapon/ed209_assembly + B.loc = get_turf(src) + user << "You arm the robot frame." + if (user.get_inactive_hand()==src) + user.unEquip(src) + user.put_in_inactive_hand(B) + qdel(src) + else + user << "You need one sheet of metal to start building ED-209!" + return + else if(istype(W, /obj/item/robot_parts/l_leg)) if(src.l_leg) return if(!user.unEquip(W)) @@ -109,7 +110,7 @@ src.l_leg = W src.updateicon() - if(istype(W, /obj/item/robot_parts/r_leg)) + else if(istype(W, /obj/item/robot_parts/r_leg)) if(src.r_leg) return if(!user.unEquip(W)) @@ -118,7 +119,7 @@ src.r_leg = W src.updateicon() - if(istype(W, /obj/item/robot_parts/l_arm)) + else if(istype(W, /obj/item/robot_parts/l_arm)) if(src.l_arm) return if(!user.unEquip(W)) @@ -127,7 +128,7 @@ src.l_arm = W src.updateicon() - if(istype(W, /obj/item/robot_parts/r_arm)) + else if(istype(W, /obj/item/robot_parts/r_arm)) if(src.r_arm) return if(!user.unEquip(W)) @@ -136,7 +137,7 @@ src.r_arm = W src.updateicon() - if(istype(W, /obj/item/robot_parts/chest)) + else if(istype(W, /obj/item/robot_parts/chest)) if(src.chest) return if(W:wired && W:cell) @@ -150,7 +151,7 @@ else user << "You need to attach a cell to it first!" - if(istype(W, /obj/item/robot_parts/head)) + else if(istype(W, /obj/item/robot_parts/head)) if(src.head) return if(W:flash2 && W:flash1) @@ -162,13 +163,13 @@ else user << "You need to attach a flash to it first!" - if (istype(W, /obj/item/device/multitool)) + else if (istype(W, /obj/item/device/multitool)) if(check_completion()) Interact(user) else user << "The endoskeleton must be assembled before debugging can begin!" - if(istype(W, /obj/item/device/mmi)) + else if(istype(W, /obj/item/device/mmi)) var/obj/item/device/mmi/M = W if(check_completion()) if(!istype(loc,/turf)) @@ -254,9 +255,10 @@ else user << "The MMI must go in after everything else!" - if(istype(W,/obj/item/weapon/pen)) + else if(istype(W,/obj/item/weapon/pen)) user << "You need to use a multitool to name [src]!" - return + else + return ..() /obj/item/robot_parts/robot_suit/proc/Interact(mob/user) var/t1 = text("Designation: [(created_name ? "[created_name]" : "Default Cyborg")]
        \n",src) @@ -308,7 +310,6 @@ return /obj/item/robot_parts/chest/attackby(obj/item/W, mob/user, params) - ..() if(istype(W, /obj/item/weapon/stock_parts/cell)) if(src.cell) user << "You have already inserted a cell!" @@ -319,7 +320,7 @@ W.loc = src src.cell = W user << "You insert the cell." - if(istype(W, /obj/item/stack/cable_coil)) + else if(istype(W, /obj/item/stack/cable_coil)) if(src.wired) user << "You have already inserted wire!" return @@ -329,10 +330,10 @@ user << "You insert the wire." else user << "You need one length of coil to wire it!" - return + else + return ..() /obj/item/robot_parts/head/attackby(obj/item/W, mob/user, params) - ..() if(istype(W, /obj/item/device/assembly/flash/handheld)) var/obj/item/device/assembly/flash/handheld/F = W if(src.flash1 && src.flash2) @@ -350,5 +351,6 @@ else src.flash1 = F user << "You insert the flash into the eye socket." - return + else + return ..() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 1a4cea9c3b1..3b13f07ac98 100755 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -60,28 +60,40 @@ desc = "A translucent balloon with some form of liquid sloshing around in it." update_icon() -/obj/item/toy/balloon/attackby(obj/O, mob/user, params) - if(istype(O, /obj/item/weapon/reagent_containers/glass)) - if(O.reagents) - if(O.reagents.total_volume <= 0) - user << "[O] is empty." +/obj/item/toy/balloon/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/reagent_containers/glass)) + if(I.reagents) + if(I.reagents.total_volume <= 0) + user << "[I] is empty." else if(reagents.total_volume >= 10) user << "[src] is full." else desc = "A translucent balloon with some form of liquid sloshing around in it." - user << "You fill the balloon with the contents of [O]." - O.reagents.trans_to(src, 10) + user << "You fill the balloon with the contents of [I]." + I.reagents.trans_to(src, 10) update_icon() + else if(is_sharp(I)) + balloon_burst() + else + return ..() /obj/item/toy/balloon/throw_impact(atom/hit_atom) if(!..()) //was it caught by a mob? - if(reagents.total_volume >= 1) - visible_message("[src] bursts!","You hear a pop and a splash.") - reagents.reaction(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - reagents.reaction(A) - icon_state = "burst" - qdel(src) + balloon_burst(hit_atom) + +/obj/item/toy/balloon/proc/balloon_burst(atom/AT) + if(reagents.total_volume >= 1) + var/turf/T + if(AT) + T = get_turf(AT) + else + T = get_turf(src) + T.visible_message("[src] bursts!","You hear a pop and a splash.") + reagents.reaction(T) + for(var/atom/A in T) + reagents.reaction(A) + icon_state = "burst" + qdel(src) /obj/item/toy/balloon/update_icon() if(src.reagents.total_volume >= 1) @@ -136,7 +148,7 @@ /obj/item/toy/gun/attackby(obj/item/toy/ammo/gun/A, mob/user, params) - if (istype(A, /obj/item/toy/ammo/gun)) + if(istype(A, /obj/item/toy/ammo/gun)) if (src.bullets >= 7) user << "It's already fully loaded!" return 1 @@ -153,7 +165,8 @@ src.bullets = 7 A.update_icon() return 1 - return + else + return ..() /obj/item/toy/gun/afterattack(atom/target as mob|obj|turf|area, mob/user, flag) if (flag) @@ -221,11 +234,9 @@ item_state = "sword0" w_class = 2 add_fingerprint(user) - return // Copied from /obj/item/weapon/melee/energy/sword/attackby /obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user, params) - ..() if(istype(W, /obj/item/toy/sword)) if(W == src) user << "You try to attach the end of the plastic sword to... itself. You're not very smart, are you?" @@ -259,6 +270,8 @@ user.update_inv_l_hand(0) else user << "It's already fabulous!" + else + return ..() /* * Foam armblade @@ -816,44 +829,43 @@ user.visible_message("[user] shuffles the deck.", "You shuffle the deck.") cooldown = world.time -/obj/item/toy/cards/deck/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params) - ..() - if(istype(C)) - if(C.parentdeck == src) - if(!user.unEquip(C)) +/obj/item/toy/cards/deck/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/toy/cards/singlecard)) + var/obj/item/toy/cards/singlecard/SC = I + if(SC.parentdeck == src) + if(!user.unEquip(SC)) user << "The card is stuck to your hand, you can't add it to the deck!" return - src.cards += C.cardname + cards += SC.cardname user.visible_message("[user] adds a card to the bottom of the deck.","You add the card to the bottom of the deck.") - qdel(C) + qdel(SC) else user << "You can't mix cards from other decks!" if(cards.len > 26) - src.icon_state = "deck_[deckstyle]_full" + icon_state = "deck_[deckstyle]_full" else if(cards.len > 10) - src.icon_state = "deck_[deckstyle]_half" + icon_state = "deck_[deckstyle]_half" else if(cards.len > 1) - src.icon_state = "deck_[deckstyle]_low" - - -/obj/item/toy/cards/deck/attackby(obj/item/toy/cards/cardhand/C, mob/living/user, params) - ..() - if(istype(C)) - if(C.parentdeck == src) - if(!user.unEquip(C)) + icon_state = "deck_[deckstyle]_low" + else if(istype(I, /obj/item/toy/cards/cardhand)) + var/obj/item/toy/cards/cardhand/CH = I + if(CH.parentdeck == src) + if(!user.unEquip(CH)) user << "The hand of cards is stuck to your hand, you can't add it to the deck!" return - src.cards += C.currenthand + cards += CH.currenthand user.visible_message("[user] puts their hand of cards in the deck.", "You put the hand of cards in the deck.") - qdel(C) + qdel(CH) else user << "You can't mix cards from other decks!" if(cards.len > 26) - src.icon_state = "deck_[deckstyle]_full" + icon_state = "deck_[deckstyle]_full" else if(cards.len > 10) - src.icon_state = "deck_[deckstyle]_half" + icon_state = "deck_[deckstyle]_half" else if(cards.len > 1) - src.icon_state = "deck_[deckstyle]_low" + icon_state = "deck_[deckstyle]_low" + else + return ..() /obj/item/toy/cards/deck/MouseDrop(atom/over_object) var/mob/M = usr @@ -960,6 +972,8 @@ qdel(C) else user << "You can't mix cards from other decks!" + else + return ..() /obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj) ..() @@ -1049,7 +1063,8 @@ qdel(src) else user << "You can't mix cards from other decks!" - + else + return ..() /obj/item/toy/cards/singlecard/attack_self(mob/user) if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained()) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 8b34ab841b5..38ba595e717 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -11,6 +11,7 @@ RSF opacity = 0 density = 0 anchored = 0 + flags = NOBLUDGEON var/matter = 0 var/mode = 1 w_class = 3 @@ -20,8 +21,7 @@ RSF return /obj/item/weapon/rsf/attackby(obj/item/weapon/W, mob/user, params) - ..() - if (istype(W, /obj/item/weapon/rcd_ammo)) + if(istype(W, /obj/item/weapon/rcd_ammo)) if ((matter + 10) > 30) user << "The RSF can't hold any more matter." return @@ -30,7 +30,8 @@ RSF playsound(src.loc, 'sound/machines/click.ogg', 10, 1) user << "The RSF now holds [matter]/30 fabrication-units." desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return + else + return ..() /obj/item/weapon/rsf/attack_self(mob/user) playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) @@ -60,175 +61,53 @@ RSF return // Change mode -/obj/item/weapon/rsf/afterattack(atom/A, mob/user, proximity) +/obj/item/weapon/rsf/afterattack(atom/A, mob/user, proximity) //phil235 shitty proc, rewrite. if(!proximity) return if (!(istype(A, /obj/structure/table) || istype(A, /turf/open/floor))) return - if (istype(A, /obj/structure/table) && mode == 1) - if (istype(A, /obj/structure/table) && matter >= 1) + if(matter < 1) + user << "\The [src] doesn't have enough matter left." + return + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(!R.cell || R.cell.charge < 200) + user << "You do not have enough power to use [src]." + return + + var/turf/T = get_turf(A) + playsound(src.loc, 'sound/machines/click.ogg', 10, 1) + switch(mode) + if(1) user << "Dispensing Dosh..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/stack/spacecash/c10( A.loc ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 200 //once money becomes useful, I guess changing this to a high ammount, like 500 units a kick, till then, enjoy dosh! - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /turf/open/floor) && mode == 1) - if (istype(A, /turf/open/floor) && matter >= 1) - user << "Dispensing Dosh..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/stack/spacecash/c10( A ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 200 //once money becomes useful, I guess changing this to a high ammount, like 500 units a kick, till then, enjoy dosh! - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /obj/structure/table) && mode == 2) - if (istype(A, /obj/structure/table) && matter >= 1) + new /obj/item/stack/spacecash/c10(T) + use_matter(200, user) + if(2) user << "Dispensing Drinking Glass..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass( A.loc ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 50 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /turf/open/floor) && mode == 2) - if (istype(A, /turf/open/floor) && matter >= 1) - user << "Dispensing Drinking Glass..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass( A ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 50 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /obj/structure/table) && mode == 3) - if (istype(A, /obj/structure/table) && matter >= 1) + new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(T) + use_matter(20, user) + if(3) user << "Dispensing Paper Sheet..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/weapon/paper( A.loc ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 10 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /turf/open/floor) && mode == 3) - if (istype(A, /turf/open/floor) && matter >= 1) - user << "Dispensing Paper Sheet..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/weapon/paper( A ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 10 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /obj/structure/table) && mode == 4) - if (istype(A, /obj/structure/table) && matter >= 1) + new /obj/item/weapon/paper(T) + use_matter(10, user) + if(4) user << "Dispensing Pen..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/weapon/pen( A.loc ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 50 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /turf/open/floor) && mode == 4) - if (istype(A, /turf/open/floor) && matter >= 1) - user << "Dispensing Pen..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/weapon/pen( A ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 50 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /obj/structure/table) && mode == 5) - if (istype(A, /obj/structure/table) && matter >= 1) + new /obj/item/weapon/pen(T) + use_matter(50, user) + if(5) user << "Dispensing Dice Pack..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/weapon/storage/pill_bottle/dice( A.loc ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 200 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /turf/open/floor) && mode == 5) - if (istype(A, /turf/open/floor) && matter >= 1) - user << "Dispensing Dice Pack..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/weapon/storage/pill_bottle/dice( A ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 200 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return - - else if (istype(A, /obj/structure/table) && mode == 6) - if (istype(A, /obj/structure/table) && matter >= 1) + new /obj/item/weapon/storage/pill_bottle/dice(T) + use_matter(200, user) + if(6) user << "Dispensing Cigarette..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/clothing/mask/cigarette( A.loc ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 10 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return + new /obj/item/clothing/mask/cigarette(T) + use_matter(10, user) - else if (istype(A, /turf/open/floor) && mode == 6) - if (istype(A, /turf/open/floor) && matter >= 1) - user << "Dispensing Cigarette..." - playsound(src.loc, 'sound/machines/click.ogg', 10, 1) - new /obj/item/clothing/mask/cigarette( A ) - if (isrobot(user)) - var/mob/living/silicon/robot/engy = user - engy.cell.charge -= 10 - else - matter-- - user << "The RSF now holds [matter]/30 fabrication-units." - desc = "A RSF. It currently holds [matter]/30 fabrication-units." - return \ No newline at end of file +/obj/item/weapon/rsf/proc/use_matter(charge, mob/user) + if (isrobot(user)) + var/mob/living/silicon/robot/R = user + R.cell.charge -= charge + else + matter-- + user << "The RSF now holds [matter]/30 fabrication-units." + desc = "A RSF. It currently holds [matter]/30 fabrication-units." \ No newline at end of file diff --git a/code/game/objects/items/weapons/holosign_creator.dm b/code/game/objects/items/weapons/holosign_creator.dm index e33bb121435..4c2288041bb 100644 --- a/code/game/objects/items/weapons/holosign_creator.dm +++ b/code/game/objects/items/weapons/holosign_creator.dm @@ -84,25 +84,23 @@ anchored = 1 var/holo_integrity = 1 -/obj/effect/overlay/holograph/attackby(obj/item/weapon/W, mob/user, params) - if(!W.force || (W.flags & (ABSTRACT|NOBLUDGEON))) - return - if(W.force >= 10) - take_damage(3, user) - else - take_damage(1, user) +/obj/effect/overlay/holograph/attacked_by(obj/item/I, mob/user) + ..() + take_damage(I.force * 0.5, I.damtype) /obj/effect/overlay/holograph/blob_act() qdel(src) /obj/effect/overlay/holograph/attack_animal(mob/living/simple_animal/M) - take_damage(5, M) + if(!M.melee_damage_upper) + return + attack_generic(5, M) /obj/effect/overlay/holograph/attack_alien(mob/living/carbon/alien/A) - take_damage(5, A) + attack_generic(5, A) /obj/effect/overlay/holograph/attack_hand(mob/living/user) - take_damage(1, user) + attack_generic(1, user) /obj/effect/overlay/holograph/mech_melee_attack(obj/mecha/M) playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) @@ -111,17 +109,28 @@ /obj/effect/overlay/holograph/attack_slime(mob/living/simple_animal/slime/S) if(S.is_adult) - take_damage(5, S) + attack_generic(5, S) else - take_damage(2, S) + attack_generic(2, S) -/obj/effect/overlay/holograph/proc/take_damage(amount, mob/living/user) +/obj/effect/overlay/holograph/proc/attack_generic(damage_amount, mob/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) user.visible_message("[user] hits [src].", \ "You hit [src]." ) - holo_integrity -= amount + take_damage(damage_amount) + +/obj/effect/overlay/holograph/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(damage && sound_effect) + playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) + if(BURN) + if(damage && sound_effect) + playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) + else + return + holo_integrity -= damage if(holo_integrity <= 0) qdel(src) @@ -133,16 +142,11 @@ else if(isobj(AM)) var/obj/item/I = AM tforce = max(1, I.throwforce * 0.2) - playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1) - holo_integrity -= tforce - if(holo_integrity <= 0) - qdel(src) + take_damage(tforce) /obj/effect/overlay/holograph/bullet_act(obj/item/projectile/P) - if((P.damage_type == BRUTE || P.damage_type == BURN)) - holo_integrity -= P.damage * 0.5 - if(holo_integrity <= 0) - qdel(src) + . = ..() + take_damage(P.damage * 0.5, P.damage_type) /obj/effect/overlay/holograph/wetsign name = "wet floor sign" diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index a3fee8b4079..3937889f8c1 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -29,17 +29,16 @@ /obj/item/weapon/pneumatic_cannon/attackby(obj/item/weapon/W, mob/user, params) - ..() - if(istype(W, /obj/item/weapon/tank/internals/) && !tank) - if(istype(W, /obj/item/weapon/tank/internals/emergency_oxygen)) - user << "\The [W] is too small for \the [src]." - return - updateTank(W, 0, user) - return - if(W.type == type) + if(istype(W, /obj/item/weapon/tank/internals)) + if(!tank) + var/obj/item/weapon/tank/internals/IT = W + if(IT.volume <= 3) + user << "\The [IT] is too small for \the [src]." + return + updateTank(W, 0, user) + else if(W.type == type) user << "You're fairly certain that putting a pneumatic cannon inside another pneumatic cannon would cause a spacetime disruption." - return - if(istype(W, /obj/item/weapon/wrench)) + else if(istype(W, /obj/item/weapon/wrench)) switch(pressureSetting) if(1) pressureSetting = 2 @@ -48,14 +47,12 @@ if(3) pressureSetting = 1 user << "You tweak \the [src]'s pressure output to [pressureSetting]." - return - if(istype(W, /obj/item/weapon/screwdriver) && tank) - updateTank(tank, 1, user) - return - if(loadedWeightClass >= maxWeightClass) + else if(istype(W, /obj/item/weapon/screwdriver)) + if(tank) + updateTank(tank, 1, user) + else if(loadedWeightClass >= maxWeightClass) user << "\The [src] can't hold any more items!" - return - if(istype(W, /obj/item)) + else if(istype(W, /obj/item)) var/obj/item/IW = W if((loadedWeightClass + IW.w_class) > maxWeightClass) user << "\The [IW] won't fit into \the [src]!" @@ -69,18 +66,14 @@ loadedItems.Add(IW) loadedWeightClass += IW.w_class IW.loc = src - return + /obj/item/weapon/pneumatic_cannon/afterattack(atom/target, mob/living/carbon/human/user, flag, params) - if(istype(target, /obj/item/weapon/storage)) //So you can store it in backpacks - return ..() - if(istype(target, /obj/structure/closet)) //So you can store it in closets - return ..() - if(istype(target, /obj/structure/rack)) //So you can store it on racks - return ..() + if(flag && user.a_intent == "harm") //melee attack + return if(!istype(user)) - return ..() + return Fire(user, target) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 383a065041b..ef533fe16a1 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -20,6 +20,7 @@ user << "You wrench the frame into place." anchored = 1 state = 1 + return if(istype(P, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = P if(!WT.isOn()) @@ -32,6 +33,7 @@ user << "You deconstruct the frame." new /obj/item/stack/sheet/plasteel( loc, 4) qdel(src) + return if(1) if(istype(P, /obj/item/weapon/wrench)) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) @@ -40,6 +42,7 @@ user << "You unfasten the frame." anchored = 0 state = 0 + return if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit) if(!user.drop_item()) return @@ -48,11 +51,13 @@ icon_state = "1" circuit = P P.loc = src + return if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You screw the circuit board into place." state = 2 icon_state = "2" + return if(istype(P, /obj/item/weapon/crowbar) && circuit) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) user << "You remove the circuit board." @@ -60,12 +65,14 @@ icon_state = "0" circuit.loc = loc circuit = null + return if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) user << "You unfasten the circuit board." state = 1 icon_state = "1" + return if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.get_amount() >= 5) @@ -79,7 +86,7 @@ icon_state = "3" else user << "You need five lengths of cable to wire the AI core!" - return + return if(3) if(istype(P, /obj/item/weapon/wirecutters)) if (brain) @@ -91,6 +98,7 @@ icon_state = "2" var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) A.amount = 5 + return if(istype(P, /obj/item/stack/sheet/rglass)) var/obj/item/stack/sheet/rglass/G = P @@ -105,11 +113,12 @@ icon_state = "4" else user << "You need two sheets of reinforced glass to insert them into AI core!" - return + return if(istype(P, /obj/item/weapon/aiModule)) var/obj/item/weapon/aiModule/module = P module.install(laws, user) + return if(istype(P, /obj/item/device/mmi)) var/obj/item/device/mmi/M = P @@ -148,6 +157,7 @@ brain = M user << "Added a brain." icon_state = "3b" + return if(istype(P, /obj/item/weapon/crowbar) && brain) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) @@ -155,6 +165,7 @@ brain.loc = loc brain = null icon_state = "3" + return if(4) if(istype(P, /obj/item/weapon/crowbar)) @@ -176,6 +187,8 @@ new /mob/living/silicon/ai (loc, laws, brain) feedback_inc("cyborg_ais_created",1) qdel(src) + return + return ..() /obj/structure/AIcore/deactivated name = "inactive AI" @@ -187,7 +200,7 @@ /obj/structure/AIcore/deactivated/attackby(obj/item/A, mob/user, params) if(istype(A, /obj/item/device/aicard))//Is it? A.transfer_ai("INACTIVE","AICARD",src,user) - if(istype(A, /obj/item/weapon/wrench)) + else if(istype(A, /obj/item/weapon/wrench)) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) user.visible_message("[user] [anchored ? "fastens" : "unfastens"] [src].", \ "You start to [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor...") @@ -200,7 +213,8 @@ if(do_after(user, 20, target = src)) user << "You unfasten the core." anchored = 0 - return + else + return ..() /* This is a good place for AI-related object verbs so I'm sticking it here. diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index 56f0ac6b166..c196e946244 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -10,6 +10,7 @@ can_be_unanchored = 0 canSmoothWith = null buildstacktype = null + flags = NODECONSTRUCT var/image/nest_overlay /obj/structure/bed/nest/New() @@ -80,15 +81,22 @@ M.layer = initial(M.layer) overlays -= nest_overlay -/obj/structure/bed/nest/attackby(obj/item/weapon/W, mob/user, params) - var/aforce = W.force - health = max(0, health - aforce) - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - visible_message("[user] hits [src] with [W]!") - healthcheck() +/obj/structure/bed/nest/attacked_by(obj/item/I, mob/user) + ..() + take_damage(I.force, I.damtype) -/obj/structure/bed/nest/proc/healthcheck() +/obj/structure/bed/nest/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health -= damage if(health <=0) density = 0 qdel(src) - return + diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 3b70fd76585..a22be184b38 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -215,28 +215,30 @@ var/turf/T = get_turf(src) new material_drop(T) qdel(src) + return 0 else if(user.drop_item()) W.Move(loc) - else - if(istype(W, /obj/item/stack/packageWrap)) + return 1 + else if(istype(W, /obj/item/weapon/weldingtool) && can_weld_shut) + var/obj/item/weapon/weldingtool/WT = W + if(!WT.remove_fuel(0, user)) return - else if(istype(W, /obj/item/weapon/weldingtool) && can_weld_shut) - var/obj/item/weapon/weldingtool/WT = W - if(!WT.remove_fuel(0, user)) + user << "You begin [welded ? "unwelding":"welding"] \the [src]..." + playsound(loc, 'sound/items/Welder2.ogg', 40, 1) + if(do_after(user, 40/WT.toolspeed, 1, target = src)) + if(opened || !WT.isOn()) return - user << "You begin [welded ? "unwelding":"welding"] \the [src]..." - playsound(loc, 'sound/items/Welder2.ogg', 40, 1) - if(do_after(user, 40/WT.toolspeed, 1, target = src)) - if(opened || !WT.isOn()) - return - playsound(loc, 'sound/items/welder.ogg', 50, 1) - welded = !welded - visible_message("[user] [welded ? "welds shut" : "unweldeds"] \the [src].", - "You [welded ? "weld" : "unwelded"] \the [src] with \the [WT].", - "You hear welding.") - update_icon() - else - togglelock(user) + playsound(loc, 'sound/items/welder.ogg', 50, 1) + welded = !welded + visible_message("[user] [welded ? "welds shut" : "unweldeds"] \the [src].", + "You [welded ? "weld" : "unwelded"] \the [src] with \the [WT].", + "You hear welding.") + update_icon() + else if(user.a_intent != "harm" && !(W.flags & NOBLUDGEON)) + togglelock(user) + return 1 + else + return ..() /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) if(!istype(O) || O.anchored || istype(O, /obj/screen)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index aa5e743cbc2..b0e80393e4a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -35,27 +35,22 @@ new /obj/item/device/radio/headset( src ) /obj/structure/closet/secure_closet/personal/attackby(obj/item/W, mob/user, params) + var/obj/item/weapon/card/id/I = W.GetID() + if(istype(I)) + if(broken) + user << "It appears to be broken." + return + if(!I || !I.registered_name) + return + if(allowed(user) || !registered_name || (istype(I) && (registered_name == I.registered_name))) + //they can open all lockers, or nobody owns this, or they own this locker + locked = !locked + update_icon() - if(istype(W)) - var/obj/item/weapon/card/id/I = W.GetID() - if(istype(I)) - if(src.broken) - user << "It appears to be broken." - return - if(!I || !I.registered_name) - return - if(src.allowed(user) || !src.registered_name || (istype(I) && (src.registered_name == I.registered_name))) - //they can open all lockers, or nobody owns this, or they own this locker - src.locked = !( src.locked ) - update_icon() - - if(!src.registered_name) - src.registered_name = I.registered_name - src.desc = "Owned by [I.registered_name]." - else - user << "Access Denied." + if(!registered_name) + registered_name = I.registered_name + desc = "Owned by [I.registered_name]." else - ..() + user << "Access Denied." else - ..() - return \ No newline at end of file + return ..() \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 936ad5713f2..69c639694f2 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -114,27 +114,21 @@ /obj/structure/closet/statue/bullet_act(obj/item/projectile/Proj) health -= Proj.damage if(health <= 0) - for(var/mob/M in src) - shatter(M) - - return + shatter() /obj/structure/closet/statue/attack_animal(mob/living/simple_animal/user) if(user.environment_smash) - for(var/mob/M in src) - shatter(M) + shatter() /obj/structure/closet/statue/blob_act() - for(var/mob/M in src) - shatter(M) + shatter() -/obj/structure/closet/statue/attackby(obj/item/I, mob/user, params) - user.changeNext_move(CLICK_CD_MELEE) - health -= I.force +/obj/structure/closet/statue/attacked_by(obj/item/I, mob/living/user) + if(I.damtype != STAMINA) + health -= I.force visible_message("[user] strikes [src] with [I].") if(health <= 0) - for(var/mob/M in src) - shatter(M) + shatter() /obj/structure/closet/statue/MouseDrop_T() return @@ -151,9 +145,9 @@ /obj/structure/closet/statue/update_icon() return -/obj/structure/closet/statue/proc/shatter(mob/user) - if(user) - user.dust() +/obj/structure/closet/statue/proc/shatter() + for(var/mob/living/M in src) + M.dust() dump_contents() visible_message("[src] shatters!.") qdel(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index c83ffc2513c..6ca97bb58a3 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -27,13 +27,9 @@ dump() qdel(src) if (2) - if (prob(50)) - src.health -= 15 - src.healthcheck() + take_damage(rand(10,20), BRUTE, 0) if (3) - if (prob(50)) - src.health -= 5 - src.healthcheck() + take_damage(5, BRUTE, 0) /obj/structure/displaycase/examine(mob/user) ..() @@ -43,12 +39,9 @@ user << "Hooked up with an anti-theft system." -/obj/structure/displaycase/bullet_act(obj/item/projectile/Proj) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - health -= Proj.damage - ..() - src.healthcheck() - return +/obj/structure/displaycase/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) /obj/structure/displaycase/proc/dump() if (showpiece) @@ -61,24 +54,36 @@ dump() qdel(src) -/obj/structure/displaycase/proc/healthcheck() - if (src.health <= 0) - if (!( src.destroyed )) - src.density = 0 - src.destroyed = 1 - new /obj/item/weapon/shard( src.loc ) - playsound(src, "shatter", 70, 1) - update_icon() +/obj/structure/displaycase/hitby(atom/movable/AM) + ..() + if(isobj(AM)) + var/obj/item/I = AM + take_damage(I.throwforce * 0.2) - //Activate Anti-theft - if(alert) - var/area/alarmed = get_area(src) - alarmed.burglaralert(src) - playsound(src, "sound/effects/alert.ogg", 50, 1) +/obj/structure/displaycase/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health = max( health - damage, 0) + if(!health && !destroyed) + density = 0 + destroyed = 1 + new /obj/item/weapon/shard( src.loc ) + playsound(src, "shatter", 70, 1) + update_icon() + + //Activate Anti-theft + if(alert) + var/area/alarmed = get_area(src) + alarmed.burglaralert(src) + playsound(src, "sound/effects/alert.ogg", 50, 1) - else - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - return /obj/structure/displaycase/proc/is_directional(atom/A) try @@ -115,23 +120,28 @@ return /obj/structure/displaycase/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/card) && electronics && !destroyed && allowed(user)) - user << "You [open ? "close":"open"] the [src]" - open = !open - update_icon() - return - if(!alert && istype(W,/obj/item/weapon/crowbar)) - if(destroyed && !showpiece) - user << "You remove the destroyed case" - qdel(src) - return - user << "You start to [open ? "close":"open"] the [src]" - if(do_after(user, 20/W.toolspeed, target = src)) + if(W.GetID() && electronics && !destroyed) + if(allowed(user)) user << "You [open ? "close":"open"] the [src]" open = !open update_icon() + else + user << "Access denied." + else if(!alert && istype(W,/obj/item/weapon/crowbar)) + if(destroyed) + if(showpiece) + user << "Remove the displayed object first." + else + user << "You remove the destroyed case" + qdel(src) + else + user << "You start to [open ? "close":"open"] the [src]" + if(do_after(user, 20/W.toolspeed, target = src)) + user << "You [open ? "close":"open"] the [src]" + open = !open + update_icon() else if(open && !showpiece) - if(user.unEquip(W)) + if(user.drop_item()) W.loc = src showpiece = W user << "You put [W] on display" @@ -148,15 +158,30 @@ health = initial(health) update_icon() else - user.changeNext_move(CLICK_CD_MELEE) - src.health -= W.force - src.healthcheck() - ..() - return + return ..() + +/obj/structure/displaycase/attacked_by(obj/item/weapon/W, mob/living/user) + ..() + take_damage(W.force, W.damtype) /obj/structure/displaycase/attack_paw(mob/user) return src.attack_hand(user) +/obj/structure/displaycase/attack_alien(mob/living/carbon/alien/humanoid/user) + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + visible_message("\The [user] slashes at [src]!") + playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) + take_damage(20, BRUTE, 0) + +/obj/structure/displaycase/attack_animal(mob/living/simple_animal/M) + M.changeNext_move(CLICK_CD_MELEE) + M.do_attack_animation(src) + if(M.melee_damage_upper > 0) + M.visible_message("[M.name] smashes against \the [src.name].",\ + "You smash against the [src.name].") + take_damage(M.melee_damage_upper, M.melee_damage_type, 1) + /obj/structure/displaycase/attack_hand(mob/user) user.changeNext_move(CLICK_CD_MELEE) if (showpiece && (destroyed || open)) @@ -166,11 +191,11 @@ update_icon() return else + user.do_attack_animation(src) user.visible_message("[user] kicks the display case.", \ "You kick the display case.") - src.health -= 2 - healthcheck() - return + take_damage(2) + /obj/structure/displaycase_chassis @@ -191,16 +216,16 @@ playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) new /obj/item/stack/sheet/mineral/wood(get_turf(src)) qdel(src) - return - if(istype(I, /obj/item/weapon/electronics/airlock)) + + else if(istype(I, /obj/item/weapon/electronics/airlock)) user << "You start installing the electronics into [src]..." playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(user.unEquip(I) && do_after(user, 30, target = src)) I.loc = src electronics = I user << "You install the airlock electronics." - return - if(istype(I, /obj/item/stack/sheet/glass)) + + else if(istype(I, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = I if(G.get_amount() < 10) user << "You need ten glass sheets to do this!" @@ -217,8 +242,8 @@ else display.req_access = electronics.accesses qdel(src) - return - return + else + return ..() /obj/structure/displaycase/captain diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index d150c78f75d..09fbd8a08d4 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -79,31 +79,32 @@ user << "You must wait until the door has stopped moving!" return - if(density) - var/turf/T = get_turf(src) - if(T.density) - user << "[src] is blocked!" - return - if(istype(W, /obj/item/weapon/screwdriver)) - if (!istype(T, /turf/open/floor)) + if(istype(W, /obj/item/weapon/screwdriver)) + if(density) + var/turf/T = get_turf(src) + if(T.density) + user << "[src] is blocked!" + return + if(!istype(T, /turf/open/floor)) user << "[src] bolts must be tightened on the floor!" return user.visible_message("[user] tightens some bolts on the wall.", "You tighten the bolts on the wall.") ChangeToWall() - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0,user)) - dismantle(user) - else - user << "You can't reach, close it first!" + else + user << "You can't reach, close it first!" - if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) + else if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(0,user)) + dismantle(user) + else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) dismantle(user) - - if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) + else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) var/obj/item/weapon/pickaxe/drill/jackhammer/D = W D.playDigSound() dismantle(user) + else + return ..() /obj/structure/falsewall/proc/dismantle(mob/user) user.visible_message("[user] dismantles the false wall.", "You dismantle the false wall.") @@ -160,7 +161,7 @@ /obj/structure/falsewall/uranium/attackby(obj/item/weapon/W, mob/user, params) radiate() - ..() + return ..() /obj/structure/falsewall/uranium/attack_hand(mob/user) radiate() @@ -222,8 +223,8 @@ message_admins("Plasma falsewall ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma falsewall ignited by [key_name(user)] in ([x],[y],[z])") burnbabyburn() - return - ..() + else + return ..() /obj/structure/falsewall/plasma/proc/burnbabyburn(user) playsound(src, 'sound/items/Welder.ogg', 100, 1) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 9a53e50cd94..dbc85a06870 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -8,7 +8,7 @@ density = 0 var/locked = 1 var/open = 0 - var/glass_hp = 60 + var/health = 60 /obj/structure/fireaxecabinet/New() ..() @@ -18,7 +18,7 @@ if(isrobot(user) || istype(I,/obj/item/device/multitool)) toggle_lock(user) return - if(open || glass_hp <= 0) + if(open || health <= 0) if(istype(I, /obj/item/weapon/twohanded/fireaxe) && !fireaxe) var/obj/item/weapon/twohanded/fireaxe/F = I if(F.wielded) @@ -31,42 +31,56 @@ user << "You place the [F.name] back in the [name]." update_icon() return - else if(glass_hp > 0) + else if(health > 0) toggle_open() + else + return ..() - else if(istype(I, /obj/item/weapon)) - user.changeNext_move(CLICK_CD_MELEE) - var/obj/item/weapon/W = I - user.do_attack_animation(src) - playsound(src, 'sound/effects/Glasshit.ogg', 100, 1) - if(W.force >= 10) - glass_hp -= W.force - if(glass_hp <= 0) - playsound(src, 'sound/effects/Glassbr3.ogg', 100, 1) - update_icon() +/obj/structure/fireaxecabinet/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force, I.damtype) + +/obj/structure/fireaxecabinet/proc/take_damage(damage, damage_type, sound_effect = 1) + if(open) + return + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(health <= 0) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, 1) + else + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) else - user << "The [name]'s protective glass glances off the hit." + return + if(damage < 10) + return + if(health > 0) + health -= damage + update_icon() + if(health <= 0) + playsound(src, 'sound/effects/Glassbr3.ogg', 100, 1) + /obj/structure/fireaxecabinet/ex_act(severity, target) switch(severity) if(1) qdel(src) - return if(2) if(prob(50) && fireaxe) fireaxe.loc = src.loc qdel(src) - return + else + take_damage(rand(30,70), BRUTE, 0) if(3) - return + take_damage(rand(10,30), BRUTE, 0) + +/obj/structure/fireaxecabinet/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) -/obj/structure/fireaxecabinet/bullet_act(obj/item/projectile/Proj) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - if(Proj.damage) - glass_hp -= Proj.damage - if(glass_hp <= 0) - playsound(src, 'sound/effects/Glassbr3.ogg', 100, 1) - update_icon() /obj/structure/fireaxecabinet/blob_act() if(fireaxe) @@ -74,7 +88,7 @@ qdel(src) /obj/structure/fireaxecabinet/attack_hand(mob/user) - if(open || glass_hp <= 0) + if(open || health <= 0) if(fireaxe) user.put_in_hands(fireaxe) fireaxe = null @@ -90,10 +104,19 @@ update_icon() return -/obj/structure/fireaxecabinet/attack_paw(mob/user) - if(ismonkey(user)) //no fire-axe wielding aliens allowed - attack_hand(user) - return +/obj/structure/fireaxecabinet/attack_paw(mob/living/user) + attack_hand(user) + +/obj/structure/fireaxecabinet/attack_alien(mob/living/user) + user.visible_message("[user] slashes [src].") + take_damage(20) + +/obj/structure/fireaxecabinet/attack_animal(mob/living/simple_animal/M) + if(!M.melee_damage_upper) + return + M.visible_message("[M] smashes against [src].", \ + "You smash against [src].") + take_damage(M.melee_damage_upper, M.melee_damage_type) /obj/structure/fireaxecabinet/attack_ai(mob/user) toggle_lock(user) @@ -104,7 +127,7 @@ if(fireaxe) overlays += "axe" if(!open) - switch(glass_hp) + switch(health) if(-INFINITY to 0) overlays += "glass4" if(1 to 20) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 59bc6451075..d34a261a8f2 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -17,13 +17,18 @@ stored.amount = 2 /obj/structure/grille/ex_act(severity, target) - qdel(src) + switch(severity) + if(1) + qdel(src) + else + take_damage(rand(5,10), BRUTE, 0) /obj/structure/grille/blob_act() qdel(src) /obj/structure/grille/Bumped(atom/user) - if(ismob(user)) shock(user, 70) + if(ismob(user)) + shock(user, 70) /obj/structure/grille/attack_paw(mob/user) @@ -32,37 +37,25 @@ /obj/structure/grille/attack_hulk(mob/living/carbon/human/user) ..(user, 1) shock(user, 70) - health -= 5 - healthcheck() + take_damage(5) /obj/structure/grille/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) user.visible_message("[user] hits [src].", \ "You hit [src].", \ "You hear twisting metal.") - - if(shock(user, 70)) - return - else - health -= rand(1,2) - healthcheck() + if(!shock(user, 70)) + take_damage(rand(1,2)) /obj/structure/grille/attack_alien(mob/living/user) user.do_attack_animation(src) - if(istype(user, /mob/living/carbon/alien/larva)) - return user.changeNext_move(CLICK_CD_MELEE) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) user.visible_message("[user] mangles [src].", \ "You mangle [src].", \ "You hear twisting metal.") - if(!shock(user, 70)) - health -= 5 - healthcheck() - return + take_damage(5) /obj/structure/grille/attack_slime(mob/living/simple_animal/slime/user) user.changeNext_move(CLICK_CD_MELEE) @@ -70,36 +63,25 @@ if(!user.is_adult) return - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) user.visible_message("[user] smashes against [src].", \ "You smash against [src].", \ "You hear twisting metal.") - - health -= rand(1,2) - healthcheck() - return + take_damage(rand(1,2)) /obj/structure/grille/attack_animal(var/mob/living/simple_animal/M) M.changeNext_move(CLICK_CD_MELEE) if(M.melee_damage_upper == 0 || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) return M.do_attack_animation(src) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) M.visible_message("[M] smashes against [src].", \ "You smash against [src].", \ "You hear twisting metal.") - - health -= M.melee_damage_upper - healthcheck() - return + take_damage(M.melee_damage_upper, M.melee_damage_type) /obj/structure/grille/mech_melee_attack(obj/mecha/M) if(..()) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - health -= M.force * 0.5 - healthcheck() - + take_damage(M.force * 0.5, M.damtype) /obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -118,13 +100,8 @@ . = . || mover.checkpass(PASSGRILLE) /obj/structure/grille/bullet_act(var/obj/item/projectile/Proj) - if(!Proj) - return - ..() - if((Proj.damage_type != STAMINA)) //Grilles can't be exhausted to death - src.health -= Proj.damage*0.3 - healthcheck() - return + . = ..() + take_damage(Proj.damage*0.3, Proj.damage_type) /obj/structure/grille/Deconstruct() if(!loc) //if already qdel'd somehow, we do nothing @@ -169,8 +146,6 @@ icon_state = "grille" R.use(1) return - else if(istype(W, /obj/item/weapon/rcd) && istype(loc, /turf)) //Do not attack the grille if the user is holding an RCD - return //window placing begin else if(istype(W, /obj/item/stack/sheet/rglass) || istype(W, /obj/item/stack/sheet/glass)) @@ -206,32 +181,35 @@ return //window placing end - else if(istype(W, /obj/item/weapon/shard)) - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - health -= W.force * 0.1 - else if(!shock(user, 70)) - switch(W.damtype) - if(STAMINA) - return - if(BURN) - playsound(loc, 'sound/items/welder.ogg', 80, 1) - else - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - health -= W.force * 0.3 + else if(istype(W, /obj/item/weapon/shard) || !shock(user, 70)) + return ..() - healthcheck() + +/obj/structure/grille/attacked_by(obj/item/I, mob/living/user) ..() - return + take_damage(I.force * 0.3, I.damtype) - -/obj/structure/grille/proc/healthcheck() +/obj/structure/grille/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/welder.ogg', 80, 1) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + else + return + health -= damage if(health <= 0) if(!destroyed) Break() else if(health <= -6) Deconstruct() - return + // shock user with probability prb (if all connections & power are working) // returns 1 if shocked, 0 otherwise @@ -258,8 +236,7 @@ /obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(!destroyed) if(exposed_temperature > T0C + 1500) - health -= 1 - healthcheck() + take_damage(1) ..() /obj/structure/grille/hitby(AM as mob|obj) @@ -277,9 +254,7 @@ if(C) playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) tesla_zap(src, 3, C.powernet.avail * 0.08) //ZAP for 1/5000 of the amount of power, which is from 15-25 with 200000W - playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - health = max(0, health - tforce) - healthcheck() + take_damage(tforce) /obj/structure/grille/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) return 0 diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index ae8c5b4e861..920f1534b69 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -46,11 +46,14 @@ update_icon() return - open = !open - update_icon() + else if(user.a_intent != "harm") + open = !open + update_icon() + else + return ..() /obj/structure/guncase/attack_hand(mob/user) - if(isrobot(usr) || isalien(usr)) + if(isrobot(user) || isalien(user)) return if(contents.len && open) ShowWindow(user) diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 970abe0decf..bd4e5504385 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -129,14 +129,16 @@ if(do_after(user,digTool.digspeed*hardness, target = src) && src) user << "You finish digging." Dismantle() - else if(istype(W,/obj/item/weapon)) //not sure, can't not just weapons get passed to this proc? - hardness -= W.force/100 - user << "You hit the [name] with your [W.name]!" - CheckHardness() - else + else if(user.a_intent != "harm") attack_hand(user) - return + else + return ..() +/obj/structure/mineral_door/attacked_by(obj/item/I, mob/user) + ..() + if(I.damtype != STAMINA) + hardness -= I.force/100 + CheckHardness() /obj/structure/mineral_door/bullet_act(obj/item/projectile/Proj) hardness -= Proj.damage @@ -222,7 +224,8 @@ message_admins("Plasma mineral door ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma mineral door ignited by [key_name(user)] in ([x],[y],[z])") TemperatureAct(100) - ..() + else + return ..() /obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 20d6a7a63e6..e2d7d3f1d47 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -42,32 +42,21 @@ /obj/structure/mirror/proc/shatter() - if(shattered) - return - shattered = 1 icon_state = "mirror_broke" playsound(src, "shatter", 70, 1) desc = "Oh no, seven years of bad luck!" -/obj/structure/mirror/bullet_act(obj/item/projectile/Proj) - if(prob(Proj.damage * 2)) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - if(!shattered) - shatter() - else - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - ..() +/obj/structure/mirror/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) /obj/structure/mirror/attackby(obj/item/I, mob/living/user, params) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(I.damtype == STAMINA) - return - if(shattered) - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = I + if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent != "harm") + var/obj/item/weapon/weldingtool/WT = I + if(shattered) + user.changeNext_move(CLICK_CD_MELEE) if(WT.remove_fuel(0, user)) user << "You begin repairing [src]..." playsound(src, 'sound/items/Welder.ogg', 100, 1) @@ -78,59 +67,60 @@ shattered = 0 icon_state = initial(icon_state) desc = initial(desc) - return - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - return - - if(prob(I.force * 2)) - visible_message("[user] smashes [src] with [I].") - shatter() else - visible_message("[user] hits [src] with [I]!") - playsound(src.loc, 'sound/effects/Glasshit.ogg', 70, 1) + return ..() +/obj/structure/mirror/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force, I.damtype) + +/obj/structure/mirror/ex_act(severity) + switch(severity) + if(1) + qdel(src) + if(2) + if(prob(50)) + qdel(src) + else + take_damage(5) + if(3) + if(prob(75)) + take_damage(5) + +/obj/structure/mirror/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(BURN) + else + return + if(!shattered) + if(damage) + shatter() + else if(sound_effect) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + +/obj/structure/mirror/proc/attack_generic(mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + user.visible_message("[user] smashes [src]!") + take_damage(5) /obj/structure/mirror/attack_alien(mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(islarva(user)) - return - if(shattered) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - return - user.visible_message("[user] smashes [src]!") - shatter() + attack_generic(user) - -/obj/structure/mirror/attack_animal(mob/living/user) - if(!isanimal(user)) - return - var/mob/living/simple_animal/M = user +/obj/structure/mirror/attack_animal(mob/living/simple_animal/M) if(M.melee_damage_upper <= 0) return - user.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if(shattered) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - return - user.visible_message("[user] smashes [src]!") - shatter() - + attack_generic(M) /obj/structure/mirror/attack_slime(mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if(shattered) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - return - user.visible_message("[user] smashes [src]!") - shatter() + attack_generic(user) /obj/structure/mirror/magic name = "magic mirror" desc = "Turn and face the strange... face." icon_state = "magic_mirror" - var/list/races_blacklist = list("skeleton","agent") + var/list/races_blacklist = list("skeleton", "agent") var/list/choosable_races = list() /obj/structure/mirror/magic/New() diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 08fefcf4910..1f5f8a22ec2 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -29,7 +29,7 @@ "You unfasten [src].") new /obj/item/sign_backing(get_turf(user)) qdel(src) - if(istype(O, /obj/item/weapon/pen)) + else if(istype(O, /obj/item/weapon/pen)) var/list/sign_types = list("Secure Area", "Biohazard", "High Voltage", "Radiation", "Hard Vacuum Ahead", "Disposal: Leads To Space", "Danger: Fire", "No Smoking", "Medbay", "Science", "Chemistry", \ "Hydroponics", "Xenobiology") var/obj/structure/sign/sign_type @@ -77,6 +77,8 @@ newsign.pixel_x = pixel_x newsign.pixel_y = pixel_y qdel(src) + else + return ..() /obj/item/sign_backing name = "sign backing" @@ -87,20 +89,16 @@ burn_state = FLAMMABLE /obj/item/sign_backing/afterattack(atom/target, mob/user, proximity) - if(!isturf(target)) + if(isturf(target) && proximity) + var/turf/T = target + user.visible_message("[user] fastens [src] to [T].", \ + "You attach a blank sign to [T].") + playsound(T, 'sound/items/Deconstruct.ogg', 50, 1) + new /obj/structure/sign/basic(T) + user.drop_item() + qdel(src) + else return ..() - if(!user.Adjacent(target)) - return ..() - var/turf/T = target - if(!T || !istype(T)) - return ..() - user.visible_message("[user] fastens [src] to [T].", \ - "You attach a blank sign to [T].") - playsound(T, 'sound/items/Deconstruct.ogg', 50, 1) - new /obj/structure/sign/basic(T) - user.drop_item() - qdel(src) - return /obj/structure/sign/map name = "station map" diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 9867e641623..173d87b92af 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -8,7 +8,7 @@ icon_state = "" density = 1 anchored = 0 - var/hardness = 1 + var/health = 100 var/oreAmount = 7 var/mineralType = "metal" @@ -75,11 +75,12 @@ user.visible_message("[user] slices apart the [name].", \ "You slice apart the [name]!") Dismantle(1) - else - hardness -= W.force/100 - ..() - CheckHardness() + return ..() + +/obj/structure/statue/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force, I.damtype) /obj/structure/statue/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) @@ -87,17 +88,30 @@ user.visible_message("[user] rubs some dust off from the [name]'s surface.", \ "You rub some dust off from the [name]'s surface.") +//attack alien animal phil235 + /obj/structure/statue/CanAtmosPass() return !density -/obj/structure/statue/bullet_act(obj/item/projectile/Proj) - hardness -= Proj.damage - ..() - CheckHardness() - return +/obj/structure/statue/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) -/obj/structure/statue/proc/CheckHardness() - if(hardness <= 0) +/obj/structure/statue/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + else + return + health -= damage + if(health <= 0) Dismantle(1) /obj/structure/statue/proc/Dismantle(devastated = 0) @@ -126,21 +140,15 @@ if(1) Dismantle(1) if(2) - if(prob(20)) - Dismantle(1) - else - hardness-- - CheckHardness() + take_damage(rand(60,110), BRUTE, 0) if(3) - hardness -= 0.1 - CheckHardness() - return + take_damage(10, BRUTE, 0) //////////////////////////////////////STATUES///////////////////////////////////////////////////////////// ////////////////////////uranium/////////////////////////////////// /obj/structure/statue/uranium - hardness = 3 + health = 300 luminosity = 2 mineralType = "uranium" var/last_event = 0 @@ -158,7 +166,7 @@ /obj/structure/statue/uranium/attackby(obj/item/weapon/W, mob/user, params) radiate() - ..() + return ..() /obj/structure/statue/uranium/Bumped(atom/user) radiate() @@ -185,7 +193,7 @@ ////////////////////////////plasma/////////////////////////////////////////////////////////////////////// /obj/structure/statue/plasma - hardness = 2 + health = 200 mineralType = "plasma" desc = "This statue is suitably made from plasma." @@ -200,7 +208,7 @@ /obj/structure/statue/plasma/bullet_act(obj/item/projectile/Proj) var/burn = FALSE - if(istype(Proj,/obj/item/projectile/beam)) + if(istype(Proj,/obj/item/projectile/beam)) //phil235 test this PlasmaBurn(2500) burn = TRUE else if(istype(Proj,/obj/item/projectile/ion)) @@ -220,13 +228,12 @@ message_admins("Plasma statue ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) log_game("Plasma statue ignited by [key_name(user)] in ([x],[y],[z])") ignite(W.is_hot()) - return - ..() + else + return ..() /obj/structure/statue/plasma/proc/PlasmaBurn() atmos_spawn_air("plasma=400;TEMP=1000") - hardness = 0 - CheckHardness() + Dismantle(1) /obj/structure/statue/plasma/proc/ignite(exposed_temperature) if(exposed_temperature > 300) @@ -235,7 +242,7 @@ //////////////////////gold/////////////////////////////////////// /obj/structure/statue/gold - hardness = 3 + health = 300 mineralType = "gold" desc = "This is a highly valuable statue made from gold." @@ -262,7 +269,7 @@ //////////////////////////silver/////////////////////////////////////// /obj/structure/statue/silver - hardness = 3 + health = 300 mineralType = "silver" desc = "This is a valuable statue made from silver." @@ -289,7 +296,7 @@ /////////////////////////diamond///////////////////////////////////////// /obj/structure/statue/diamond - hardness = 10 + health = 1000 mineralType = "diamond" desc = "This is a very expensive diamond statue" @@ -308,7 +315,7 @@ ////////////////////////bananium/////////////////////////////////////// /obj/structure/statue/bananium - hardness = 3 + health = 300 mineralType = "bananium" desc = "A bananium statue with a small engraving:'HOOOOOOONK'." var/spam_flag = 0 @@ -323,7 +330,7 @@ /obj/structure/statue/bananium/attackby(obj/item/weapon/W, mob/user, params) honk() - ..() + return ..() /obj/structure/statue/bananium/attack_hand(mob/user) honk() @@ -343,7 +350,7 @@ /////////////////////sandstone///////////////////////////////////////// /obj/structure/statue/sandstone - hardness = 0.5 + health = 50 mineralType = "sandstone" /obj/structure/statue/sandstone/assistant @@ -354,7 +361,7 @@ /////////////////////snow///////////////////////////////////////// /obj/structure/statue/snow - hardness = 0.5 + health = 50 mineralType = "snow" /obj/structure/statue/snow/snowman diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 83f7cdde998..a4956e461f0 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -28,7 +28,8 @@ var/busy = 0 var/buildstackamount = 1 var/framestackamount = 2 - var/deconstructable = 1 + var/deconstruction_ready = 1 + var/health = 100 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/table, /obj/structure/table/reinforced) @@ -48,55 +49,62 @@ if(1) qdel(src) if(2) - if(prob(50)) - table_destroy(1) - else - qdel(src) + take_damage(rand(80,120), BRUTE, 0) if(3) - if(prob(25)) - table_destroy(1) + take_damage(rand(40,80), BRUTE, 0) /obj/structure/table/blob_act() if(prob(75)) - table_destroy(1) - return + qdel(src) /obj/structure/table/narsie_act() if(prob(20)) new /obj/structure/table/wood(src.loc) /obj/structure/table/mech_melee_attack(obj/mecha/M) - visible_message("[M.name] smashes [src] apart!") playsound(src.loc, 'sound/weapons/punch4.ogg', 50, 1) - table_destroy(1) + visible_message("[M.name] smashes [src]!") + take_damage(200, M.damtype, 0) /obj/structure/table/attack_alien(mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) playsound(src.loc, 'sound/weapons/bladeslice.ogg', 50, 1) - visible_message("[user] slices [src] apart!") - table_destroy(1) + visible_message("[user] slices [src]!") + take_damage(100, BRUTE, 0) + /obj/structure/table/attack_animal(mob/living/simple_animal/user) - if(user.environment_smash) - user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + if(user.melee_damage_upper) + var/dmg_dealt = user.melee_damage_upper + if(user.environment_smash) + dmg_dealt = 100 + visible_message("[user] smashes [src]!") playsound(src.loc, 'sound/weapons/Genhit.ogg', 50, 1) - visible_message("[user] smashes [src] apart!") - table_destroy(1) + take_damage(dmg_dealt, user.melee_damage_type, 0) + /obj/structure/table/attack_paw(mob/user) attack_hand(user) /obj/structure/table/attack_hulk(mob/living/carbon/human/user) ..(user, 1) - visible_message("[user] smashes [src] apart!") - playsound(src.loc, 'sound/effects/bang.ogg', 50, 1) + playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) + visible_message("[user] smashes [src]!") user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - table_destroy(1) + take_damage(rand(180,280), BRUTE, 0) return 1 + /obj/structure/table/attack_tk() // no telehulk sorry return +/obj/structure/table/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) + /obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -145,31 +153,19 @@ qdel(I) /obj/structure/table/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/weapon/grab)) + if(istype(I, /obj/item/weapon/grab)) tablepush(I, user) return - if(!(flags&NODECONSTRUCT)) - if (istype(I, /obj/item/weapon/screwdriver)) - if(istype(src, /obj/structure/table/reinforced)) - var/obj/structure/table/reinforced/RT = src - if(RT.status == 1) - table_destroy(2, user) - return - else - table_destroy(2, user) - return + if(!(flags & NODECONSTRUCT)) + if(istype(I, /obj/item/weapon/screwdriver) && deconstruction_ready) + table_deconstruct(user, 1) + return - if (istype(I, /obj/item/weapon/wrench)) - if(istype(src, /obj/structure/table/reinforced)) - var/obj/structure/table/reinforced/RT = src - if(RT.status == 1) - table_destroy(3, user) - return - else - table_destroy(3, user) - return + if(istype(I, /obj/item/weapon/wrench) && deconstruction_ready) + table_deconstruct(user, 0) + return - if (istype(I, /obj/item/weapon/storage/bag/tray)) + if(istype(I, /obj/item/weapon/storage/bag/tray)) var/obj/item/weapon/storage/bag/tray/T = I if(T.contents.len > 0) // If the tray isn't empty var/list/obj/item/oldContents = T.contents.Copy() @@ -182,10 +178,7 @@ return // If the tray IS empty, continue on (tray will be placed on the table like other items) - if(isrobot(user)) - return - - if(!(I.flags & ABSTRACT)) //rip more parems rip in peace ;_; + if(user.a_intent != "harm" && !(I.flags & ABSTRACT)) if(user.drop_item()) I.Move(loc) var/list/click_params = params2list(params) @@ -195,29 +188,51 @@ //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) I.pixel_x = Clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) I.pixel_y = Clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + return 1 + else + return ..() +/obj/structure/table/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force, I.damtype) + +/obj/structure/table/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + else + return + health -= damage + if(health <= 0) + table_destroy() /* * TABLE DESTRUCTION/DECONSTRUCTION */ -#define TBL_DESTROY 1 -#define TBL_DISASSEMBLE 2 -#define TBL_DECONSTRUCT 3 -/obj/structure/table/proc/table_destroy(destroy_type, mob/user) - if(!deconstructable || (flags&NODECONSTRUCT)) - return - if(destroy_type == TBL_DESTROY) +/obj/structure/table/proc/table_destroy() + if(!(flags & NODECONSTRUCT)) + var/turf/T = get_turf(src) for(var/i = 1, i <= framestackamount, i++) - new framestack(get_turf(src)) + new framestack(T) for(var/i = 1, i <= buildstackamount, i++) - new buildstack(get_turf(src)) - qdel(src) - return + new buildstack(T) + qdel(src) - if(destroy_type == TBL_DISASSEMBLE) + +/obj/structure/table/proc/table_deconstruct(mob/user, disassembling = 0) + if(flags & NODECONSTRUCT) + return + if(disassembling) user << "You start disassembling [src]..." playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) if(do_after(user, 20, target = src)) @@ -225,9 +240,7 @@ for(var/i = 1, i <= buildstackamount, i++) new buildstack(get_turf(src)) qdel(src) - return - - if(destroy_type == TBL_DECONSTRUCT) + else user << "You start deconstructing [src]..." playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 40, target = src)) @@ -237,7 +250,7 @@ new buildstack(get_turf(src)) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) qdel(src) - return + /* * Glass tables @@ -249,6 +262,7 @@ icon_state = "glass_table" buildstack = /obj/item/stack/sheet/glass canSmoothWith = null + health = 50 /obj/structure/table/glass/tablepush(obj/item/I, mob/user) if(..()) @@ -306,45 +320,31 @@ desc = "A reinforced version of the four legged table, much harder to simply deconstruct." icon = 'icons/obj/smooth_structures/reinforced_table.dmi' icon_state = "r_table" - var/status = 2 + deconstruction_ready = 0 buildstack = /obj/item/stack/sheet/plasteel canSmoothWith = list(/obj/structure/table/reinforced, /obj/structure/table) + health = 200 /obj/structure/table/reinforced/attackby(obj/item/weapon/W, mob/user, params) - if (istype(W, /obj/item/weapon/weldingtool)) + if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0, user)) - if(src.status == 2) + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(deconstruction_ready) user << "You start weakening the reinforced table..." - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) if (do_after(user, 50/W.toolspeed, target = src)) if(!src || !WT.isOn()) return user << "You weaken the table." - src.status = 1 + deconstruction_ready = 0 else user << "You start strengthening the reinforced table..." - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) if (do_after(user, 50/W.toolspeed, target = src)) if(!src || !WT.isOn()) return user << "You strengthen the table." - src.status = 2 - return - ..() - -/obj/structure/table/reinforced/attack_paw(mob/user) - attack_hand(user) - -/obj/structure/table/reinforced/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - if(prob(75)) - playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) - user << text("You kick [src] into pieces.") - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - table_destroy(1) + deconstruction_ready = 1 else - playsound(src, 'sound/effects/bang.ogg', 50, 1) - user << text("You kick [src].") - return 1 + return ..() + /* * Surgery Tables @@ -394,7 +394,7 @@ density = 1 anchored = 1 pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density. - var/health = 5 + var/health = 20 /obj/structure/rack/ex_act(severity, target) switch(severity) @@ -406,20 +406,18 @@ else qdel(src) if(3) - if(prob(25)) - rack_destroy() + take_damage(rand(5,25), BRUTE, 0) /obj/structure/rack/blob_act() if(prob(75)) qdel(src) - return - else if(prob(50)) + else rack_destroy() - return + /obj/structure/rack/mech_melee_attack(obj/mecha/M) visible_message("[M.name] smashes [src] apart!") - rack_destroy(1) + rack_destroy() /obj/structure/rack/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -439,29 +437,26 @@ /obj/structure/rack/MouseDrop_T(obj/O, mob/user) if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) return - if(isrobot(user)) - return if(!user.drop_item()) - user << "\The [O] is stuck to your hand, you cannot put it in the rack!" return - if (O.loc != src.loc) + if(O.loc != src.loc) step(O, get_dir(O, src)) - return + /obj/structure/rack/attackby(obj/item/weapon/W, mob/user, params) if (istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) rack_destroy() return + if(user.a_intent == "harm") + return ..() + if(user.drop_item()) + W.Move(loc) + return 1 - if(isrobot(user)) - return - if(!user.drop_item()) - user << "\The [W] is stuck to your hand, you cannot put it in the rack!" - return - W.Move(loc) - return 1 - +/obj/structure/rack/attacked_by(obj/item/I, mob/living/user) + ..() + take_damage(I.force, I.damtype) /obj/structure/rack/attack_paw(mob/living/user) attack_hand(user) @@ -474,30 +469,54 @@ /obj/structure/rack/attack_hand(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) - playsound(loc, 'sound/items/dodgeball.ogg', 80, 1) user.visible_message("[user] kicks [src].", \ "You kick [src].") - health -= rand(1,2) - healthcheck() + take_damage(rand(4,8), BRUTE) /obj/structure/rack/attack_alien(mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) + playsound(src.loc, 'sound/weapons/bladeslice.ogg', 50, 1) visible_message("[user] slices [src] apart.") rack_destroy() /obj/structure/rack/attack_animal(mob/living/simple_animal/user) - if(user.environment_smash) - user.do_attack_animation(src) - visible_message("[user] smashes [src] apart.") - rack_destroy() + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + if(user.melee_damage_upper) + if(user.environment_smash) + playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) + visible_message("[user] smashes [src] apart.") + rack_destroy() + else + take_damage(user.melee_damage_upper, user.melee_damage_type) + + /obj/structure/rack/attack_tk() // no telehulk sorry return -/obj/structure/rack/proc/healthcheck() +/obj/structure/rack/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) + +/obj/structure/rack/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(damage) + playsound(loc, 'sound/items/dodgeball.ogg', 80, 1) + else + playsound(loc, 'sound/weapons/tap.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + else + return + health -= damage if(health <= 0) rack_destroy() - return + /* * Rack destruction @@ -524,12 +543,12 @@ materials = list(MAT_METAL=2000) /obj/item/weapon/rack_parts/attackby(obj/item/weapon/W, mob/user, params) - ..() if (istype(W, /obj/item/weapon/wrench)) new /obj/item/stack/sheet/metal( user.loc ) qdel(src) return - return + else + return ..() /obj/item/weapon/rack_parts/attack_self(mob/user) user << "You start constructing rack..." diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 475383d8b2b..e4bbee8dcf7 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -82,18 +82,19 @@ /obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/weapon/grab) && icon_state == "open") - var/obj/item/weapon/grab/G = W - if(ismob(G.affecting) && G.state >= GRAB_AGGRESSIVE) - var/mob/GM = G.affecting - for(var/obj/structure/transit_tube_pod/pod in loc) - pod.visible_message("[user] starts putting [GM] into the [pod]!") - if(do_after(user, 15, target = src) && GM && G && G.affecting == GM) - GM.Weaken(5) - src.Bumped(GM) - qdel(G) - break - if(istype(W, /obj/item/weapon/crowbar)) + if(istype(W, /obj/item/weapon/grab)) + if(icon_state == "open") + var/obj/item/weapon/grab/G = W + if(ismob(G.affecting) && G.state >= GRAB_AGGRESSIVE) + var/mob/GM = G.affecting + for(var/obj/structure/transit_tube_pod/pod in loc) + pod.visible_message("[user] starts putting [GM] into the [pod]!") + if(do_after(user, 15, target = src) && GM && G && G.affecting == GM) + GM.Weaken(5) + src.Bumped(GM) + qdel(G) + break + else if(istype(W, /obj/item/weapon/crowbar)) for(var/obj/structure/transit_tube_pod/pod in loc) if(pod.contents) user << "Empty the pod first!" @@ -103,7 +104,8 @@ pod.transfer_fingerprints_to(R) R.add_fingerprint(user) qdel(pod) - ..(W, user) + else + return ..() /obj/structure/transit_tube/station/proc/open_animation() if(icon_state == "closed") diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 1a9586b7449..9f90f3a224b 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -56,7 +56,23 @@ update_icon() return - if(istype(I, /obj/item/weapon/reagent_containers)) + else if(cistern) + if(user.a_intent != "harm") + if(I.w_class > 3) + user << "[I] does not fit!" + return + if(w_items + I.w_class > 5) + user << "The cistern is full!" + return + if(!user.drop_item()) + user << "\The [I] is stuck to your hand, you cannot put it in the cistern!" + return + I.loc = src + w_items += I.w_class + user << "You carefully place [I] into the cistern." + return + + else if(istype(I, /obj/item/weapon/reagent_containers)) if (!open) return var/obj/item/weapon/reagent_containers/RG = I @@ -64,7 +80,7 @@ user << "You fill [RG] from [src]. Gross." return - if(istype(I, /obj/item/weapon/grab)) + else if(istype(I, /obj/item/weapon/grab)) user.changeNext_move(CLICK_CD_MELEE) var/obj/item/weapon/grab/G = I if(!G.confirm()) @@ -95,20 +111,8 @@ else user << "You need a tighter grip!" - if(cistern) - if(I.w_class > 3) - user << "[I] does not fit!" - return - if(w_items + I.w_class > 5) - user << "The cistern is full!" - return - if(!user.drop_item()) - user << "\The [I] is stuck to your hand, you cannot put it in the cistern!" - return - I.loc = src - w_items += I.w_class - user << "You carefully place [I] into the cistern." - return + else + return ..() @@ -137,7 +141,8 @@ GM.adjustBruteLoss(8) else user << "You need a tighter grip!" - + else + return ..() /obj/machinery/shower name = "shower" @@ -418,9 +423,9 @@ if(RG.flags & OPENCONTAINER) RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) user << "You fill [RG] from [src]." - return + return 1 - if(istype(O, /obj/item/weapon/melee/baton)) + else if(istype(O, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = O if(B.bcell) if(B.bcell.charge > 0 && B.status == 1) @@ -435,12 +440,12 @@ playsound(src, "sparks", 50, 1) return - if(istype(O, /obj/item/weapon/mop)) + else if(istype(O, /obj/item/weapon/mop)) O.reagents.add_reagent("water", 5) user << "You wet [O] in [src]." playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) + else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = O if(M.wrapped) user << "You need to unwrap [src] first!" @@ -458,15 +463,20 @@ if(I.flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand. return - user << "You start washing [I]..." - busy = 1 - if(!do_after(user, 40, target = src)) + if(user.a_intent != "harm") + user << "You start washing [I]..." + busy = 1 + if(!do_after(user, 40, target = src)) + busy = 0 + return 1 busy = 0 - return - busy = 0 - O.clean_blood() - user.visible_message("[user] washes [I] using [src].", \ - "You wash [I] using [src].") + O.clean_blood() + user.visible_message("[user] washes [I] using [src].", \ + "You wash [I] using [src].") + return 1 + else + return ..() + /obj/structure/sink/kitchen name = "kitchen sink" @@ -484,5 +494,5 @@ /obj/structure/sink/puddle/attackby(obj/item/O, mob/user, params) icon_state = "puddle-splash" - ..() + . = ..() icon_state = "puddle" \ No newline at end of file diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 4259c94c6eb..bf8b3a9476f 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -12,7 +12,6 @@ var/ini_dir = null var/state = 0 var/reinf = 0 - var/disassembled = 0 var/wtype = "glass" var/fulltile = 0 var/list/storeditems = list() @@ -49,30 +48,28 @@ return -/obj/structure/window/bullet_act(obj/item/projectile/Proj) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - health -= Proj.damage - update_nearby_icons() - ..() - if(health <= 0) - spawnfragments() - return +/obj/structure/window/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(P.damage, P.damage_type, 0) /obj/structure/window/ex_act(severity, target) - if(severity == 1) - qdel(src) - else - spawnfragments() + switch(severity) + if(1) + qdel(src) + if(2) + shatter() + if(3) + take_damage(rand(25,75), BRUTE, 0) /obj/structure/window/blob_act() - spawnfragments() + shatter() /obj/structure/window/narsie_act() color = "#7D1919" /obj/structure/window/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) - spawnfragments() + shatter() /obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover) && mover.checkpass(PASSGLASS)) @@ -102,20 +99,9 @@ else if(isobj(AM)) var/obj/item/I = AM tforce = I.throwforce - if(reinf) tforce *= 0.25 - - playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) - health = max(0, health - tforce) - if(health <= 7 && !reinf) - anchored = 0 - update_nearby_icons() - step(src, get_dir(AM, src)) - - if(health <= 0) - spawnfragments() - update_nearby_icons() + take_damage(tforce) /obj/structure/window/attack_tk(mob/user) user.changeNext_move(CLICK_CD_MELEE) @@ -130,7 +116,7 @@ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) user.visible_message("[user] smashes through [src]!") add_fingerprint(user) - hit(50) + take_damage(50) return 1 /obj/structure/window/attack_hand(mob/user) @@ -145,44 +131,28 @@ return attack_hand(user) -/obj/structure/window/proc/attack_generic(mob/user, damage = 0) //used by attack_alien, attack_animal, and attack_slime +/obj/structure/window/proc/attack_generic(mob/user, damage = 0, damage_type = BRUTE) //used by attack_alien, attack_animal, and attack_slime if(!can_be_reached(user)) return + user.do_attack_animation(src) user.changeNext_move(CLICK_CD_MELEE) - health -= damage - if(health <= 0) - user.visible_message("[user] smashes through [src]!") - spawnfragments() - else //for nicer text~ - user.visible_message("[user] smashes into [src]!") - playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) - + user.visible_message("[user] smashes into [src]!") + take_damage(damage, damage_type) /obj/structure/window/attack_alien(mob/living/user) - user.do_attack_animation(src) - if(islarva(user)) return attack_generic(user, 15) - update_nearby_icons() -/obj/structure/window/attack_animal(mob/living/user) - if(!isanimal(user)) +/obj/structure/window/attack_animal(mob/living/simple_animal/M) + if(!M.melee_damage_upper) return + attack_generic(M, M.melee_damage_upper, M.melee_damage_type) - var/mob/living/simple_animal/M = user - M.do_attack_animation(src) - if(M.melee_damage_upper <= 0 || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) - return - - attack_generic(M, M.melee_damage_upper) - update_nearby_icons() /obj/structure/window/attack_slime(mob/living/simple_animal/slime/user) - user.do_attack_animation(src) if(!user.is_adult) return - attack_generic(user, rand(10, 15)) - update_nearby_icons() + /obj/structure/window/attackby(obj/item/I, mob/living/user, params) if(!can_be_reached(user)) @@ -243,8 +213,8 @@ playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) user << " You begin to disassemble [src]..." if(do_after(user, 40/I.toolspeed, target = src)) - if(disassembled) - return //Prevents multiple deconstruction attempts + if(qdeleted(src)) + return if(reinf) var/obj/item/stack/sheet/rglass/RG = new (user.loc) @@ -261,25 +231,19 @@ G.add_fingerprint(user) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - disassembled = 1 user << "You successfully disassemble [src]." qdel(src) return + return ..() - if(istype(I, /obj/item/weapon/rcd)) //Do not attack the window if the user is holding an RCD - return - if(I.damtype == BRUTE || I.damtype == BURN) - user.changeNext_move(CLICK_CD_MELEE) - hit(I.force) - else - playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) +/obj/structure/window/attacked_by(obj/item/I, mob/living/user) ..() - return + take_damage(I.force, I.damtype) /obj/structure/window/mech_melee_attack(obj/mecha/M) if(..()) - hit(M.force, 1) + take_damage(M.force, M.damtype) /obj/structure/window/proc/can_be_reached(mob/user) @@ -290,20 +254,27 @@ return 0 return 1 -/obj/structure/window/proc/hit(damage, sound_effect = 1) +/obj/structure/window/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) if(reinf) damage *= 0.5 - health = max(0, health - damage) + switch(damage_type) + if(BRUTE) + if(sound_effect) + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health -= damage update_nearby_icons() - if(sound_effect) - playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) if(health <= 0) - spawnfragments() - return + shatter() -/obj/structure/window/proc/spawnfragments() - if(qdeleted()) +/obj/structure/window/proc/shatter() + if(qdeleted(src)) return + playsound(src, "shatter", 70, 1) var/turf/T = loc for(var/obj/item/I in storeditems) I.loc = T @@ -378,8 +349,6 @@ /obj/structure/window/Destroy() density = 0 air_update_turf(1) - if(!disassembled && !(flags&NODECONSTRUCT)) - playsound(src, "shatter", 70, 1) update_nearby_icons() return ..() @@ -403,13 +372,9 @@ if(smooth) queue_smooth_neighbors(src) -//merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm) +//merges adjacent full-tile windows into one /obj/structure/window/update_icon() - //A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong. - //this way it will only update full-tile ones - //This spawn is here so windows get properly updated when one gets deleted. - spawn(2) - if(!src) return + if(!qdeleted(src)) //phil235 if(!fulltile) return @@ -427,7 +392,7 @@ /obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > T0C + (reinf ? 1600 : 800)) - hit(round(exposed_volume / 100), 0) + take_damage(round(exposed_volume / 100), BURN, 0) ..() /obj/structure/window/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) @@ -448,16 +413,6 @@ maxhealth = 50 explosion_block = 1 -/obj/structure/window/reinforced/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - if(2) - spawnfragments() - if(3) - if(prob(50)) - spawnfragments() - /obj/structure/window/reinforced/tinted name = "tinted window" icon_state = "twindow" diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index b1d1e5a3af8..356c5ca354d 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -60,20 +60,19 @@ /obj/vehicle/janicart/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/storage/bag/trash)) - if(keytype == /obj/item/key/janitor) - if(!user.drop_item()) - return - user << "You hook the trashbag onto \the [name]." - I.loc = src - mybag = I + if(!user.drop_item()) + return + user << "You hook the trashbag onto \the [name]." + I.loc = src + mybag = I + update_icon() else if(istype(I, /obj/item/janiupgrade)) - if(keytype == /obj/item/key/janitor) - floorbuffer = 1 - qdel(I) - user << "You upgrade \the [name] with the floor buffer." - update_icon() - - ..() + floorbuffer = 1 + qdel(I) + user << "You upgrade \the [name] with the floor buffer." + update_icon() + else + return ..() /obj/vehicle/janicart/update_icon() From 639ff5d16156437c4aa9b93dddcafed4a6efb58d Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 24 Apr 2016 20:39:30 +0200 Subject: [PATCH 132/228] Doors can now be attacked when clicked on harm intent. (they're currently indestructible so it's only cosmetic for now). I tried to make door code more OOP. --- code/game/machinery/doors/airlock.dm | 270 ++++++++---------- code/game/machinery/doors/door.dm | 133 ++++++--- code/game/machinery/doors/firedoor.dm | 66 ++--- code/game/machinery/doors/poddoor.dm | 79 +---- code/game/machinery/doors/unpowered.dm | 8 +- code/game/machinery/doors/windowdoor.dm | 165 ++++------- code/game/objects/structures/door_assembly.dm | 66 +++-- icons/obj/doors/blastdoor.dmi | Bin 2628 -> 2654 bytes 8 files changed, 341 insertions(+), 446 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 120881d38fa..66c2510e0ae 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -35,8 +35,6 @@ var/list/airlock_overlays = list() var/secondsMainPowerLost = 0 //The number of seconds until power is restored. var/secondsBackupPowerLost = 0 //The number of seconds until power is restored. var/spawnPowerRestoreRunning = 0 - var/welded = null - var/locked = 0 var/lights = 1 // bolt lights show by default secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it. var/aiDisabledIdScanner = 0 @@ -46,11 +44,10 @@ var/list/airlock_overlays = list() var/lockdownbyai = 0 var/doortype = /obj/structure/door_assembly/door_assembly_0 var/justzap = 0 - var/safe = 1 normalspeed = 1 var/obj/item/weapon/electronics/airlock/electronics = null var/hasShocked = 0 //Prevents multiple shocks from happening - var/autoclose = 1 + autoclose = 1 var/obj/item/device/doorCharge/charge = null //If applied, causes an explosion upon opening the door var/detonated = 0 var/doorOpen = 'sound/machines/airlock.ogg' @@ -267,7 +264,7 @@ var/list/airlock_overlays = list() filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file) else filling_overlay = get_airlock_overlay("fill_closed", icon) - if(p_open) + if(panel_open) panel_overlay = get_airlock_overlay("panel_closed", overlays_file) if(welded) weld_overlay = get_airlock_overlay("welded", overlays_file) @@ -285,7 +282,7 @@ var/list/airlock_overlays = list() filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file) else filling_overlay = get_airlock_overlay("fill_closed", icon) - if(p_open) + if(panel_open) panel_overlay = get_airlock_overlay("panel_closed", overlays_file) if(welded) weld_overlay = get_airlock_overlay("welded", overlays_file) @@ -298,7 +295,7 @@ var/list/airlock_overlays = list() filling_overlay = get_airlock_overlay("[airlock_material]_closed", overlays_file) else filling_overlay = get_airlock_overlay("fill_closed", icon) - if(p_open) + if(panel_open) panel_overlay = get_airlock_overlay("panel_closed", overlays_file) if(welded) weld_overlay = get_airlock_overlay("welded", overlays_file) @@ -311,7 +308,7 @@ var/list/airlock_overlays = list() filling_overlay = get_airlock_overlay("fill_closing", icon) if(lights && hasPower()) lights_overlay = get_airlock_overlay("lights_closing", overlays_file) - if(p_open) + if(panel_open) panel_overlay = get_airlock_overlay("panel_closing", overlays_file) if(AIRLOCK_OPEN) @@ -320,7 +317,7 @@ var/list/airlock_overlays = list() filling_overlay = get_airlock_overlay("[airlock_material]_open", overlays_file) else filling_overlay = get_airlock_overlay("fill_open", icon) - if(p_open) + if(panel_open) panel_overlay = get_airlock_overlay("panel_open", overlays_file) if(AIRLOCK_OPENING) @@ -331,7 +328,7 @@ var/list/airlock_overlays = list() filling_overlay = get_airlock_overlay("fill_opening", icon) if(lights && hasPower()) lights_overlay = get_airlock_overlay("lights_opening", overlays_file) - if(p_open) + if(panel_open) panel_overlay = get_airlock_overlay("panel_opening", overlays_file) //doesn't use overlays.Cut() for performance reasons @@ -379,13 +376,12 @@ var/list/airlock_overlays = list() playsound(src,doorDeni,50,0,3) sleep(6) update_icon(AIRLOCK_CLOSED) - icon_state = "closed" /obj/machinery/door/airlock/examine(mob/user) ..() - if(charge && !p_open && in_range(user, src)) + if(charge && !panel_open && in_range(user, src)) user << "The maintenance panel seems haphazardly fastened." - if(charge && p_open) + if(charge && panel_open) user << "Something is wired up to the airlock's electronics!" /obj/machinery/door/airlock/attack_ai(mob/user) @@ -579,7 +575,7 @@ var/list/airlock_overlays = list() visible_message("[user] headbutts the airlock. Good thing they're wearing a helmet.") return - if(src.p_open) + if(panel_open) wires.interact(user) else ..() @@ -600,7 +596,7 @@ var/list/airlock_overlays = list() usr.unset_machine() return - if((in_range(src, usr) && istype(src.loc, /turf)) && src.p_open) + if((in_range(src, usr) && istype(src.loc, /turf)) && panel_open) usr.set_machine(src) @@ -802,134 +798,29 @@ var/list/airlock_overlays = list() add_fingerprint(usr) if(!nowindow) updateUsrDialog() - return /obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params) - if(!(istype(usr, /mob/living/silicon) || IsAdminGhost(user))) + if(!issilicon(user) && !IsAdminGhost(user)) if(src.isElectrified()) if(src.shock(user, 75)) return - if(istype(C, /obj/item/device/detective_scanner)) - return - - if(istype(C, /obj/item/weapon/card/emag)) - return - - src.add_fingerprint(user) - if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) - var/obj/item/weapon/weldingtool/W = C - if(W.remove_fuel(0,user)) - user.visible_message("[user] is [welded ? "unwelding":"welding"] the airlock.", \ - "You begin [welded ? "unwelding":"welding"] the airlock...", \ - "You hear welding.") - playsound(loc, 'sound/items/Welder.ogg', 40, 1) - if(do_after(user,40/C.toolspeed, 1, target = src)) - if(density && !operating)//Door must be closed to weld. - if( !istype(src, /obj/machinery/door/airlock) || !user || !W || !W.isOn() || !user.loc ) - return - playsound(loc, 'sound/items/Welder2.ogg', 50, 1) - welded = !welded - user.visible_message("[user.name] has [welded? "welded shut":"unwelded"] [src].", \ - "You [welded ? "weld the airlock shut":"unweld the airlock"].") - update_icon() - return - else if(istype(C, /obj/item/weapon/screwdriver)) - if(p_open && detonated) + add_fingerprint(user) + if(istype(C, /obj/item/weapon/screwdriver)) + if(panel_open && detonated) user << "[src] has no maintenance panel!" return - src.p_open = !( src.p_open ) - user << "You [p_open ? "open":"close"] the maintenance panel of the airlock." + panel_open = !panel_open + user << "You [panel_open ? "open":"close"] the maintenance panel of the airlock." src.update_icon() else if(is_wire_tool(C)) return attack_hand(user) else if(istype(C, /obj/item/weapon/pai_cable)) var/obj/item/weapon/pai_cable/cable = C cable.plugin(src, user) - else if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe) ) - var/beingcrowbarred = null - if(istype(C, /obj/item/weapon/crowbar) ) - beingcrowbarred = 1 //derp, Agouri - else - beingcrowbarred = 0 - if(p_open && charge) - user << "You carefully start removing [charge] from [src]..." - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - if(!do_after(user, 150/C.toolspeed, target = src)) - user << "You slip and [charge] detonates!" - charge.ex_act(1) - user.Weaken(3) - return - user.visible_message("[user] removes [charge] from [src].", \ - "You gently pry out [charge] from [src] and unhook its wires.") - charge.loc = get_turf(user) - charge = null - return - if( beingcrowbarred && (density && welded && !operating && src.p_open && (!hasPower()) && !src.locked) ) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the airlock assembly.", \ - "You start to remove electronics from the airlock assembly...") - if(do_after(user,40/C.toolspeed, target = src)) - if(src.loc) - if(src.doortype) - var/obj/structure/door_assembly/A = new src.doortype(src.loc) - A.heat_proof_finished = src.heat_proof //tracks whether there's rglass in - else - new /obj/structure/door_assembly/door_assembly_0(src.loc) - //If you come across a null doortype, it will produce the default assembly instead of disintegrating. - - if(emagged) - user << "You discard the damaged electronics." - qdel(src) - return - user << "You remove the airlock electronics." - - var/obj/item/weapon/electronics/airlock/ae - if(!electronics) - ae = new/obj/item/weapon/electronics/airlock( src.loc ) - if(req_one_access) - ae.one_access = 1 - ae.accesses = src.req_one_access - else - ae.accesses = src.req_access - else - ae = electronics - electronics = null - ae.loc = src.loc - - qdel(src) - return - else if(hasPower()) - user << "The airlock's motors resist your efforts to force it!" - else if(locked) - user << "The airlock's bolts prevent it from being forced!" - else if( !welded && !operating) - if(density) - if(beingcrowbarred == 0) //being fireaxe'd - var/obj/item/weapon/twohanded/fireaxe/F = C - if(F:wielded) - spawn(0) - open(2) - else - user << "You need to be wielding the fire axe to do that!" - else - spawn(0) - open(2) - else - if(beingcrowbarred == 0) - var/obj/item/weapon/twohanded/fireaxe/F = C - if(F:wielded) - spawn(0) - close(2) - else - user << "You need to be wielding the fire axe to do that!" - else - spawn(0) - close(2) - else if(istype(C, /obj/item/weapon/airlock_painter)) change_paintjob(C, user) else if(istype(C, /obj/item/device/doorCharge)) - if(!p_open) + if(!panel_open) user << "The maintenance panel must be open to apply [C]!" return if(emagged) @@ -942,25 +833,113 @@ var/list/airlock_overlays = list() return user << "You apply [C]. Next time someone opens the door, it will explode." user.drop_item() - p_open = 0 + panel_open = 0 update_icon() - var/obj/item/device/doorCharge/newCharge = C //This is necessary, for some reason - newCharge.loc = src - charge = newCharge - return - else if(istype(C, /obj/item/weapon/rcd)) //Do not attack the airlock if the user is holding an RCD - return + C.loc = src + charge = C else - ..() - return + return ..() + + +/obj/machinery/door/airlock/try_to_weld(obj/item/weapon/weldingtool/W, mob/user) + if(!operating && density) + if(W.remove_fuel(0,user)) + user.visible_message("[user] is [welded ? "unwelding":"welding"] the airlock.", \ + "You begin [welded ? "unwelding":"welding"] the airlock...", \ + "You hear welding.") + playsound(loc, 'sound/items/Welder.ogg', 40, 1) + if(do_after(user,40/W.toolspeed, 1, target = src)) + if(density && !operating)//Door must be closed to weld. + if( !istype(src, /obj/machinery/door/airlock) || !user || !W || !W.isOn() || !user.loc ) + return + playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + welded = !welded + user.visible_message("[user.name] has [welded? "welded shut":"unwelded"] [src].", \ + "You [welded ? "weld the airlock shut":"unweld the airlock"].") + update_icon() + +/obj/machinery/door/airlock/try_to_crowbar(obj/item/I, mob/user) + var/beingcrowbarred = null + if(istype(I, /obj/item/weapon/crowbar) ) + beingcrowbarred = 1 + else + beingcrowbarred = 0 + if(panel_open && charge) + user << "You carefully start removing [charge] from [src]..." + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + if(!do_after(user, 150/I.toolspeed, target = src)) + user << "You slip and [charge] detonates!" + charge.ex_act(1) + user.Weaken(3) + return + user.visible_message("[user] removes [charge] from [src].", \ + "You gently pry out [charge] from [src] and unhook its wires.") + charge.loc = get_turf(user) + charge = null + return + if( beingcrowbarred && (density && welded && !operating && src.panel_open && (!hasPower()) && !src.locked) ) + playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + user.visible_message("[user] removes the electronics from the airlock assembly.", \ + "You start to remove electronics from the airlock assembly...") + if(do_after(user,40/I.toolspeed, target = src)) + if(src.loc) + if(src.doortype) + var/obj/structure/door_assembly/A = new src.doortype(src.loc) + A.heat_proof_finished = src.heat_proof //tracks whether there's rglass in + else + new /obj/structure/door_assembly/door_assembly_0(src.loc) + //If you come across a null doortype, it will produce the default assembly instead of disintegrating. + + if(emagged) + user << "You discard the damaged electronics." + qdel(src) + return + user << "You remove the airlock electronics." + + var/obj/item/weapon/electronics/airlock/ae + if(!electronics) + ae = new/obj/item/weapon/electronics/airlock( src.loc ) + if(req_one_access) + ae.one_access = 1 + ae.accesses = src.req_one_access + else + ae.accesses = src.req_access + else + ae = electronics + electronics = null + ae.loc = src.loc + + qdel(src) + return + else if(hasPower()) + user << "The airlock's motors resist your efforts to force it!" + else if(locked) + user << "The airlock's bolts prevent it from being forced!" + else if( !welded && !operating) + if(beingcrowbarred == 0) //being fireaxe'd + var/obj/item/weapon/twohanded/fireaxe/F = I + if(F.wielded) + spawn(0) + if(density) + open(2) + else + close(2) + else + user << "You need to be wielding the fire axe to do that!" + else + spawn(0) + if(density) + open(2) + else + close(2) /obj/machinery/door/airlock/plasma/attackby(obj/item/C, mob/user, params) if(C.is_hot() > 300)//If the temperature of the object is over 300, then ignite message_admins("Plasma airlock ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)") log_game("Plasma wall ignited by [key_name(user)] in ([x],[y],[z])") ignite(C.is_hot()) - return - ..() + else + return ..() /obj/machinery/door/airlock/open(forced=0) if( operating || welded || locked ) @@ -969,7 +948,7 @@ var/list/airlock_overlays = list() if(!hasPower() || wires.is_cut(WIRE_OPEN)) return 0 if(charge && !detonated) - p_open = 1 + panel_open = 1 update_icon(AIRLOCK_OPENING) visible_message("[src]'s panel is blown off in a spray of deadly shrapnel!") charge.loc = get_turf(src) @@ -1069,18 +1048,7 @@ var/list/airlock_overlays = list() return -/obj/machinery/door/airlock/proc/autoclose() - if(!qdeleted(src) && !density && !operating && !locked && !welded && autoclose) - close() - -/obj/machinery/door/airlock/proc/change_paintjob(obj/item/C, mob/user) - var/obj/item/weapon/airlock_painter/W - if(istype(C, /obj/item/weapon/airlock_painter)) - W = C - else - user << "If you see this, it means airlock/change_paintjob() was called with something other than an airlock painter. Check your code!" - return - +/obj/machinery/door/airlock/proc/change_paintjob(obj/item/weapon/airlock_painter/W, mob/user) if(!W.can_use(user)) return diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index d3ec8284955..aeebec18d4d 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -11,14 +11,19 @@ var/secondsElectrified = 0 var/visible = 1 - var/p_open = 0 var/operating = 0 var/glass = 0 + var/welded = 0 var/normalspeed = 1 var/heat_proof = 0 // For rglass-windowed airlocks and firedoors var/emergency = 0 // Emergency access override var/sub_door = 0 // 1 if it's meant to go under another door. var/closingLayer = 3.1 + var/autoclose = 0 //does it automatically close after some time + var/safe = 1 //whether the door detects things and mobs in its way and reopen or crushes them. + var/locked = 0 //whether the door is bolted or not. + + var/auto_close //phil235 to be removed, it's preventing a runtime with map. /obj/machinery/door/New() ..() @@ -75,11 +80,6 @@ /obj/machinery/door/CanAtmosPass() return !density -/obj/machinery/door/proc/CheckForMobs() - if(locate(/mob/living) in get_turf(src)) - sleep(1) - open() - /obj/machinery/door/proc/bumpopen(mob/user) if(operating) return @@ -100,11 +100,28 @@ /obj/machinery/door/attack_paw(mob/user) - return src.attack_hand(user) + if(user.a_intent != "harm") + return src.attack_hand(user) + else + attack_generic(user, 5) +/obj/machinery/door/proc/attack_generic(mob/user, damage = 0, damage_type = BRUTE) + if(operating) + return + user.do_attack_animation(src) + user.changeNext_move(CLICK_CD_MELEE) + user.visible_message("[user] smashes against the [src.name]!", \ + "You smash against the [src.name]!") + take_damage(damage, damage_type) + +/obj/machinery/door/attack_slime(mob/living/simple_animal/slime/S) + if(!S.is_adult) + attack_generic(S, 0) + else + attack_generic(S, 25) /obj/machinery/door/attack_hand(mob/user) - return src.attackby(user, user) + return try_to_activate_door(user) /obj/machinery/door/attack_tk(mob/user) @@ -112,28 +129,56 @@ return ..() -/obj/machinery/door/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/device/detective_scanner)) - return - if(isrobot(user)) - return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. - src.add_fingerprint(user) +/obj/machinery/door/proc/try_to_activate_door(mob/user) + add_fingerprint(user) if(operating || emagged) return - if(!Adjacent(user)) - user = null - if(!src.requiresID()) - user = null - if(src.allowed(user) || src.emergency == 1) - if(src.density) + if(!requiresID()) + user = null //so allowed(user) always succeeds + if(allowed(user) || emergency == 1) + if(density) open() else close() return - if(src.density) + if(density) do_animate("deny") + +/obj/machinery/door/proc/try_to_weld(obj/item/weapon/weldingtool/W, mob/user) return +obj/machinery/door/proc/try_to_crowbar(obj/item/I, mob/user) + return + +/obj/machinery/door/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/crowbar) || istype(I, /obj/item/weapon/twohanded/fireaxe)) + try_to_crowbar(I, user) + return 1 + else if(istype(I, /obj/item/weapon/weldingtool)) + try_to_weld(I, user) + return 1 + else if(!(I.flags & NOBLUDGEON) && user.a_intent != "harm") + try_to_activate_door(user) + return 1 + else + return ..() + +/obj/machinery/door/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + if(glass) + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + else + playsound(loc, 'sound/weapons/smash.ogg', 50, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + + + /obj/machinery/door/blob_act() if(prob(40)) qdel(src) @@ -171,18 +216,18 @@ /obj/machinery/door/proc/do_animate(animation) switch(animation) if("opening") - if(p_open) + if(panel_open) flick("o_doorc0", src) else flick("doorc0", src) if("closing") - if(p_open) + if(panel_open) flick("o_doorc1", src) else flick("doorc1", src) if("deny") - flick("door_deny", src) - return + if(!stat) + flick("door_deny", src) /obj/machinery/door/proc/open() @@ -193,42 +238,56 @@ if(!ticker || !ticker.mode) return 0 operating = 1 - do_animate("opening") - icon_state = "door0" - src.SetOpacity(0) + SetOpacity(0) sleep(5) - src.density = 0 + density = 0 sleep(5) - src.layer = 2.7 + layer = 2.7 update_icon() SetOpacity(0) operating = 0 air_update_turf(1) update_freelook_sight() + if(autoclose) + spawn(autoclose) + close() return 1 - /obj/machinery/door/proc/close() if(density) return 1 if(operating) return + if(safe) + for(var/atom/movable/M in get_turf(src)) + if(M.density && M != src) //something is blocking the door + if(autoclose) + addtimer(src, "autoclose", 60) + return operating = 1 do_animate("closing") - src.layer = closingLayer + layer = closingLayer sleep(5) - src.density = 1 + density = 1 sleep(5) update_icon() if(visible && !glass) SetOpacity(1) - CheckForMobs() operating = 0 air_update_turf(1) update_freelook_sight() - return + if(safe) + CheckForMobs() + else + crush() + return 1 + +/obj/machinery/door/proc/CheckForMobs() + if(locate(/mob/living) in get_turf(src)) + sleep(1) + open() /obj/machinery/door/proc/crush() for(var/mob/living/L in get_turf(src)) @@ -250,6 +309,10 @@ for(var/obj/mecha/M in get_turf(src)) M.take_damage(DOOR_CRUSH_DAMAGE) +/obj/machinery/door/proc/autoclose() + if(!qdeleted(src) && !density && !operating && !locked && !welded && autoclose) + close() + /obj/machinery/door/proc/requiresID() return 1 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index f234816f134..e2d5046c0d3 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -16,13 +16,12 @@ density = 0 heat_proof = 1 glass = 1 - var/blocked = 0 var/nextstate = null sub_door = 1 closingLayer = 3.11 /obj/machinery/door/firedoor/Bumped(atom/AM) - if(p_open || operating) + if(panel_open || operating) return if(!density) return ..() @@ -43,14 +42,6 @@ if(operating) return//Already doing something. - if(istype(C, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = C - if(W.remove_fuel(0, user)) - blocked = !blocked - user << text("You [blocked?"welded":"unwelded"] \the [src]") - update_icon() - return - if(istype(C, /obj/item/weapon/wrench) && panel_open) playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) user.visible_message("[user] starts undoing [src]'s bolts...", \ @@ -68,35 +59,41 @@ qdel(src) return - if(istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/twohanded/fireaxe) && C:wielded == 1)) - if(blocked || operating) - return - if(density) - open() - return - else //close it up again //fucking 10/10 commenting here einstein - close() - return - if(istype(C, /obj/item/weapon/screwdriver)) default_deconstruction_screwdriver(user, icon_state, icon_state, C) return + return ..() + +/obj/machinery/door/firedoor/try_to_activate_door(mob/user) return -/obj/machinery/door/firedoor/attack_ai(mob/user) - add_fingerprint(user) - if(blocked || operating || stat & NOPOWER) +/obj/machinery/door/firedoor/try_to_weld(obj/item/weapon/weldingtool/W, mob/user) + if(W.remove_fuel(0, user)) + welded = !welded + user << "You [welded?"welded":"unwelded"] \the [src]" + update_icon() + +/obj/machinery/door/firedoor/try_to_crowbar(obj/item/I, mob/user) + if(welded || operating) + return + if(density) + open() + else + close() + +/obj/machinery/door/firedoor/attack_ai(mob/user) + add_fingerprint(user) + if(welded || operating || stat & NOPOWER) return if(density) open() else close() - return /obj/machinery/door/firedoor/attack_alien(mob/user) add_fingerprint(user) - if(blocked) + if(welded) user << "[src] refuses to budge!" return open() @@ -107,33 +104,25 @@ flick("door_opening", src) if("closing") flick("door_closing", src) - return - /obj/machinery/door/firedoor/update_icon() overlays.Cut() if(density) icon_state = "door_closed" - if(blocked) + if(welded) overlays += "welded" else icon_state = "door_open" - if(blocked) + if(welded) overlays += "welded_open" - return /obj/machinery/door/firedoor/open() - ..() + . = ..() latetoggle() - return /obj/machinery/door/firedoor/close() - ..() - if(locate(/mob/living) in get_turf(src)) - open() - return + . = ..() latetoggle() - return /obj/machinery/door/firedoor/proc/latetoggle() if(operating || stat & NOPOWER || !nextstate) @@ -145,8 +134,6 @@ if(CLOSED) nextstate = null close() - return - /obj/machinery/door/firedoor/border_only icon = 'icons/obj/doors/edge_Doorfire.dmi' @@ -329,3 +316,4 @@ constructionStep = CONSTRUCTION_GUTTED update_icon() return + return ..() \ No newline at end of file diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 91c04b36e2e..0fc2740ba36 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -4,10 +4,10 @@ icon = 'icons/obj/doors/blastdoor.dmi' icon_state = "closed" var/id = 1 - var/auto_close = 0 // Time in seconds to automatically close when opened, 0 if it doesn't. sub_door = 1 explosion_block = 3 heat_proof = 1 + safe = 0 /obj/machinery/door/poddoor/preopen icon_state = "open" @@ -26,71 +26,6 @@ else return ..() - -/obj/machinery/door/poddoor/attackby(obj/item/I, mob/user, params) - add_fingerprint(user) - - if(istype(I, /obj/item/weapon/twohanded/fireaxe)) - var/obj/item/weapon/twohanded/fireaxe/F = I - if(!F.wielded) - return - else if(!istype(I, /obj/item/weapon/crowbar)) - return - - if(stat & NOPOWER) - open(1) //ignore the usual power requirement. - - -/obj/machinery/door/poddoor/open(ignorepower = 0) - if(operating) - return - if(!density) - return - if(!ignorepower && (stat & NOPOWER)) - return - - operating = 1 - flick("opening", src) - icon_state = "open" - SetOpacity(0) - sleep(5) - density = 0 - sleep(5) - air_update_turf(1) - update_freelook_sight() - operating = 0 - - if(auto_close) - spawn(auto_close) - // Checks for being able to close are in close(). - close() - - return 1 - - -/obj/machinery/door/poddoor/close(ignorepower = 0) - if(operating) - return - if(density) - return - if(!ignorepower && (stat & NOPOWER)) - return - - operating = 1 - flick("closing", src) - icon_state = "closed" - SetOpacity(1) - sleep(5) - density = 1 - sleep(5) - air_update_turf(1) - update_freelook_sight() - sleep(5) - crush() - sleep(5) - operating = 0 - - //"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS. /obj/machinery/door/poddoor/ex_act(severity, target) if(target == src) @@ -118,8 +53,18 @@ s.set_up(2, 1, src) s.start() +/obj/machinery/door/poddoor/do_animate(animation) + switch(animation) + if("opening") + flick("opening", src) + if("closing") + flick("closing", src) + /obj/machinery/door/poddoor/update_icon() if(density) icon_state = "closed" else - icon_state = "open" \ No newline at end of file + icon_state = "open" + +/obj/machinery/door/poddoor/try_to_activate_door(mob/user) + return \ No newline at end of file diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm index f93ffc94453..1a8126c3ce4 100644 --- a/code/game/machinery/doors/unpowered.dm +++ b/code/game/machinery/doors/unpowered.dm @@ -1,6 +1,4 @@ /obj/machinery/door/unpowered - var/locked = 0 - /obj/machinery/door/unpowered/Bumped(atom/AM) if(src.locked) @@ -10,10 +8,10 @@ /obj/machinery/door/unpowered/attackby(obj/item/I, mob/user, params) - if(src.locked) + if(locked) return - ..() - return + else + return ..() /obj/machinery/door/unpowered/emag_act() return diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 2b9a67ec67c..13a0d69f8e4 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -49,7 +49,7 @@ if(mecha.occupant && src.allowed(mecha.occupant)) open_and_close() else - flick("[src.base_state]deny", src) + do_animate("deny") return if (!( ticker )) return @@ -68,7 +68,7 @@ if(allowed(user)) open_and_close() else - flick("[src.base_state]deny", src) + do_animate("deny") return /obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0) @@ -110,7 +110,7 @@ return 0 if(!src.operating) //in case of emag src.operating = 1 - flick("[src.base_state]opening", src) + do_animate("opening") playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) src.icon_state ="[src.base_state]open" sleep(10) @@ -134,13 +134,11 @@ if(emagged) return 0 src.operating = 1 - flick("[src.base_state]closing", src) + do_animate("closing") playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) src.icon_state = src.base_state src.density = 1 -// if(src.visible) -// SetOpacity(1) //TODO: why is this here? Opaque windoors? ~Carn air_update_turf(1) update_freelook_sight() sleep(10) @@ -148,10 +146,19 @@ src.operating = 0 return 1 -/obj/machinery/door/window/proc/take_damage(damage) - src.health = max(0, src.health - damage) - if (src.health <= 0) - if(!(flags&NODECONSTRUCT)) +/obj/machinery/door/window/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + switch(damage_type) + if(BRUTE) + if(sound_effect) + playsound(loc, 'sound/effects/Glasshit.ogg', 90, 1) + if(BURN) + if(sound_effect) + playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) + else + return + health = max(0, src.health - damage) + if(health <= 0) + if(!(flags & NODECONSTRUCT)) var/debris = list( new /obj/item/weapon/shard(src.loc), new /obj/item/weapon/shard(src.loc), @@ -160,7 +167,7 @@ ) for(var/obj/fragment in debris) transfer_fingerprints_to(fragment) - src.density = 0 + density = 0 qdel(src) return @@ -172,85 +179,38 @@ if(prob(25)) qdel(src) else - take_damage(120) + take_damage(120, BRUTE, 0) if(3) - take_damage(60) + take_damage(60, BRUTE, 0) /obj/machinery/door/window/narsie_act() color = "#7D1919" -/obj/machinery/door/window/bullet_act(obj/item/projectile/Proj) - if(Proj.damage) - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - take_damage(round(Proj.damage / 2)) - ..() +/obj/machinery/door/window/bullet_act(obj/item/projectile/P) + . = ..() + take_damage(round(P.damage / 2), P.damage_type, 0) /obj/machinery/door/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > T0C + (reinf ? 1600 : 800)) - take_damage(round(exposed_volume / 200)) + take_damage(round(exposed_volume / 200), BURN, 0) ..() //When an object is thrown at the window -/obj/machinery/door/window/hitby(AM as mob|obj) - +/obj/machinery/door/window/hitby(atom/movable/AM) ..() var/tforce = 0 if(ismob(AM)) tforce = 40 - else - tforce = AM:throwforce - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) + else if(isobj(AM)) + var/obj/O = AM + tforce = O.throwforce take_damage(tforce) - //..() //Does this really need to be here twice? The parent proc doesn't even do anything yet. - Nodrak - return -/obj/machinery/door/window/mech_melee_attack(obj/mecha/M) - if(M.damtype == "brute") - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("[M.name] has hit [src].") - take_damage(M.force) - return - /obj/machinery/door/window/attack_ai(mob/user) return src.attack_hand(user) -/obj/machinery/door/window/proc/attack_generic(mob/user, damage = 0) - if(src.operating) - return - user.changeNext_move(CLICK_CD_MELEE) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - user.visible_message("[user] smashes against the [src.name]!", \ - "You smash against the [src.name]!") - take_damage(damage) - -/obj/machinery/door/window/attack_alien(mob/living/user) - user.do_attack_animation(src) - if(islarva(user)) - return - attack_generic(user, 25) - -/obj/machinery/door/window/attack_animal(mob/living/user) - if(!isanimal(user)) - return - var/mob/living/simple_animal/M = user - M.do_attack_animation(src) - if(M.melee_damage_upper > 0 && (M.melee_damage_type == BRUTE || M.melee_damage_type == BURN)) - attack_generic(M, M.melee_damage_upper) - -/obj/machinery/door/window/attack_slime(mob/living/simple_animal/slime/user) - user.do_attack_animation(src) - if(!user.is_adult) - return - attack_generic(user, 25) - -/obj/machinery/door/window/attack_paw(mob/user) - return src.attack_hand(user) - -/obj/machinery/door/window/attack_hand(mob/user) - return src.attackby(user, user) - /obj/machinery/door/window/emag_act(mob/user) if(!operating && density && !emagged) operating = 1 @@ -263,32 +223,27 @@ /obj/machinery/door/window/attackby(obj/item/weapon/I, mob/living/user, params) - //If it's in the process of opening/closing, ignore the click - if (src.operating) - return - - if(istype(I, /obj/item/weapon/card/emag)) + if(operating) return add_fingerprint(user) - if(!(flags&NODECONSTRUCT)) if(istype(I, /obj/item/weapon/screwdriver)) - if(src.density || src.operating) + if(density || operating) user << "You need to open the door to access the maintenance panel!" return playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - src.p_open = !( src.p_open ) - user << "You [p_open ? "open":"close"] the maintenance panel of the [src.name]." + panel_open = !panel_open + user << "You [panel_open ? "open":"close"] the maintenance panel of the [src.name]." return if(istype(I, /obj/item/weapon/crowbar)) - if(p_open && !src.density && !src.operating) + if(panel_open && !density && !operating) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] removes the electronics from the [src.name].", \ "You start to remove electronics from the [src.name]...") if(do_after(user,40/I.toolspeed, target = src)) - if(src.p_open && !src.density && !src.operating && src.loc) + if(panel_open && !density && !operating && src.loc) var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(src.loc) switch(base_state) if("left") @@ -330,51 +285,31 @@ qdel(src) return + return ..() - - //If windoor is unpowered, crowbar, fireaxe and armblade can force it. - if(istype(I, /obj/item/weapon/crowbar) || istype(I, /obj/item/weapon/twohanded/fireaxe) || istype(I, /obj/item/weapon/melee/arm_blade) ) - if(!hasPower()) - if(src.density) - open(2) - else - close(2) - return - - //If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway) - if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card) ) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - if( (I.flags&NOBLUDGEON) || !I.force ) - return - var/aforce = I.force - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("[user] has hit \the [src] with [I].") - if(I.damtype == BURN || I.damtype == BRUTE) - take_damage(aforce) - return - - if (!src.requiresID()) - //don't care who they are or what they have, act as if they're NOTHING - user = null - - if (src.allowed(user)) - if (src.density) - open() +/obj/machinery/door/window/try_to_crowbar(obj/item/I, mob/user) + if(!hasPower()) + if(density) + open(2) else - close() + close(2) + else + user << "The door's motors resist your efforts to force it!" - else if (src.density) - flick("[src.base_state]deny", src) - - return +/obj/machinery/door/window/do_animate(animation) + switch(animation) + if("opening") + flick("[src.base_state]opening", src) + if("closing") + flick("[src.base_state]closing", src) + if("deny") + flick("[src.base_state]deny", src) /obj/machinery/door/window/attack_hulk(mob/user) ..(user, 1) user.visible_message("[user] smashes through the windoor!", \ "You tear through the windoor!") user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) take_damage(health) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 6a00dab8c83..5d2e99c1867 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -353,7 +353,6 @@ if(!in_range(src, usr) && src.loc != usr) return created_name = t - return else if(istype(W, /obj/item/weapon/airlock_painter)) // |- Ricotez //INFORMATION ABOUT ADDING A NEW AIRLOCK TO THE PAINT LIST: @@ -508,42 +507,41 @@ new M(get_turf(src)) new M(get_turf(src)) qdel(src) + + else if(istype(W, /obj/item/weapon/wrench)) + if(!anchored ) + var/door_check = 1 + for(var/obj/machinery/door/D in loc) + if(!D.sub_door) + door_check = 0 + break + + if(door_check) + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + user.visible_message("[user] secures the airlock assembly to the floor.", \ + "You start to secure the airlock assembly to the floor...", \ + "You hear wrenching.") + + if(do_after(user, 40/W.toolspeed, target = src)) + if( src.anchored ) + return + user << "You secure the airlock assembly." + src.name = "secured airlock assembly" + src.anchored = 1 + else + user << "There is another door here!" + else - return - - else if(istype(W, /obj/item/weapon/wrench) && !anchored ) - var/door_check = 1 - for(var/obj/machinery/door/D in loc) - if(!D.sub_door) - door_check = 0 - break - - if(door_check) playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user.visible_message("[user] secures the airlock assembly to the floor.", \ - "You start to secure the airlock assembly to the floor...", \ + user.visible_message("[user] unsecures the airlock assembly from the floor.", \ + "You start to unsecure the airlock assembly from the floor...", \ "You hear wrenching.") - if(do_after(user, 40/W.toolspeed, target = src)) - if( src.anchored ) + if(!anchored ) return - user << "You secure the airlock assembly." - src.name = "secured airlock assembly" - src.anchored = 1 - else - user << "There is another door here!" - - else if(istype(W, /obj/item/weapon/wrench) && anchored ) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) - user.visible_message("[user] unsecures the airlock assembly from the floor.", \ - "You start to unsecure the airlock assembly from the floor...", \ - "You hear wrenching.") - if(do_after(user, 40/W.toolspeed, target = src)) - if( !src.anchored ) - return - user << "You unsecure the airlock assembly." - src.name = "airlock assembly" - src.anchored = 0 + user << "You unsecure the airlock assembly." + name = "airlock assembly" + anchored = 0 else if(istype(W, /obj/item/stack/cable_coil) && state == 0 && anchored ) var/obj/item/stack/cable_coil/C = W @@ -677,7 +675,7 @@ src.electronics.loc = door qdel(src) else - ..() + return ..() update_icon() /obj/structure/door_assembly/update_icon() @@ -686,4 +684,4 @@ overlays += get_airlock_overlay("fill_construction", icon) else overlays += get_airlock_overlay("[material]_construction", overlays_file) - overlays += get_airlock_overlay("panel_c[state+1]", overlays_file) + overlays += get_airlock_overlay("panel_c[state+1]", overlays_file) \ No newline at end of file diff --git a/icons/obj/doors/blastdoor.dmi b/icons/obj/doors/blastdoor.dmi index 37c9482da88b300eda0097278458bad42ba18c43..9457690cda365a95f35394da068bc7705453ea77 100644 GIT binary patch delta 2357 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 delta 2330 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 ABme*a From 950d8e4dfa73eb3195cdf1675e0a34ec680f2ec3 Mon Sep 17 00:00:00 2001 From: RandomMarine Date: Sun, 24 Apr 2016 12:06:18 -0700 Subject: [PATCH 133/228] drones can't squish cockroaches (by accident) --- .../mob/living/simple_animal/friendly/cockroach.dm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 30af1ef94da..0a856487efc 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -32,12 +32,13 @@ if(ismob(AM)) if(isliving(AM)) var/mob/living/A = AM - if(A.mob_size > MOB_SIZE_TINY) - if(prob(squish_chance)) - A.visible_message("\The [A] squashed \the [name].", "You squashed \the [name].") - death() - else - visible_message("\The [name] avoids getting crushed.") + if(!isdrone(A)) + if(A.mob_size > MOB_SIZE_TINY) + if(prob(squish_chance)) + A.visible_message("\The [A] squashed \the [name].", "You squashed \the [name].") + death() + else + visible_message("\The [name] avoids getting crushed.") else if(isobj(AM)) if(istype(AM,/obj/structure)) From 3d14a51fba9a22153306813ebc0d7e84abda37c8 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sun, 24 Apr 2016 19:09:27 +0000 Subject: [PATCH 134/228] Automatic changelog generation for PR #17053 --- html/changelogs/AutoChangeLog-pr-17053.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17053.yml diff --git a/html/changelogs/AutoChangeLog-pr-17053.yml b/html/changelogs/AutoChangeLog-pr-17053.yml new file mode 100644 index 00000000000..e8f61cf4668 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17053.yml @@ -0,0 +1,10 @@ +author: coiax +delete-after: True +changes: + - rscadd: "As a sign of friendship between the Free Golems and Centcom, +they have modified Centcom's jaunter to be worn around a user's waist, +which will save them from falling to their death in a chasm." + - experiment: "The Golems warn that these modifications have created +a risk of accidental activation when exposed to heavy electromagnetic +fields." + - tweak: "Renamed hivelord stabilizer to stabilizing serum." From 43e98079f141c3147b91211fd2e0b04103c0ffbb Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 24 Apr 2016 21:12:04 +0200 Subject: [PATCH 135/228] Removing some comments I had left in. --- code/_onclick/item_attack.dm | 11 ++++++----- code/game/machinery/doors/door.dm | 2 +- code/game/machinery/machinery.dm | 6 +----- code/game/machinery/newscaster.dm | 4 +--- code/game/objects/items/devices/PDA/PDA.dm | 2 +- code/game/objects/items/weapons/RPD.dm | 2 +- code/game/objects/items/weapons/RSF.dm | 5 +++-- code/game/objects/items/weapons/melee/misc.dm | 2 +- code/game/objects/items/weapons/tanks/watertank.dm | 2 +- code/game/objects/items/weapons/tools.dm | 2 +- code/game/objects/structures/statues.dm | 4 +--- code/game/objects/structures/window.dm | 2 +- code/modules/detectivework/evidence.dm | 2 -- 13 files changed, 19 insertions(+), 27 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index e392d3ee432..1dfcd96835a 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -8,7 +8,7 @@ return /obj/attackby(obj/item/I, mob/living/user, params) - return I.attack_obj(src, user) //phil235 + return I.attack_obj(src, user) /mob/living/attackby(obj/item/I, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) @@ -20,12 +20,11 @@ if(do_mob(user, src, 80/sharpness)) harvest(user) return 1 - return I.attack(src, user) //phil235 should we return 1 if successful special attack() so we don't call afterattack? - //see the attack() procs if it'd be useful. + return I.attack(src, user) /obj/item/proc/attack(mob/living/M, mob/living/user, def_zone) - if(flags & (NOBLUDGEON|ABSTRACT)) //phil235 check that no abstract item uses attack or attack_obj + if(flags & (NOBLUDGEON|ABSTRACT)) return if(!force) playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1) @@ -43,7 +42,7 @@ //the equivalent of the standard version of attack() but for object targets. /obj/item/proc/attack_obj(obj/O, mob/living/user) - if(flags & (NOBLUDGEON|ABSTRACT)) //phil235 + if(flags & (NOBLUDGEON|ABSTRACT)) return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(O) @@ -68,6 +67,8 @@ var/turf/location = get_turf(src) location.add_blood_floor(src) + + // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. /obj/item/proc/afterattack(atom/target, mob/user, proximity_flag, click_parameters) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index aeebec18d4d..09e955a44d3 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -23,7 +23,7 @@ var/safe = 1 //whether the door detects things and mobs in its way and reopen or crushes them. var/locked = 0 //whether the door is bolted or not. - var/auto_close //phil235 to be removed, it's preventing a runtime with map. + var/auto_close //TO BE REMOVED, no longer used, it's just preventing a runtime with a map var edit. /obj/machinery/door/New() ..() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 12e87f98ee9..32111cab817 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -262,10 +262,6 @@ Class Procs: if(sound_effect) playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) -//phil235 - - - /obj/machinery/attack_alien(mob/living/carbon/alien/humanoid/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) @@ -277,7 +273,7 @@ Class Procs: /obj/machinery/attack_animal(mob/living/simple_animal/M) M.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) - if(M.melee_damage_upper > 0) // phil235 use M.attack_text verb? + if(M.melee_damage_upper > 0) M.visible_message("[M.name] smashes against \the [src.name].",\ "You smash against the [src.name].") take_damage(M.melee_damage_upper, M.melee_damage_type, 1) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 4005154672f..462dee8ff9d 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -191,7 +191,7 @@ var/list/obj/machinery/newscaster/allCasters = list() var/allow_comments = 1 luminosity = 0 anchored = 1 - var/hitstaken = 0 //phil235 to be removed, it's used in a map var edit. + var/hitstaken = 0 //TO BE REMOVED, no longer used, the var is present in a map var edit which must be removed. /obj/machinery/newscaster/security_unit name = "security newscaster" @@ -782,8 +782,6 @@ var/list/obj/machinery/newscaster/allCasters = list() else take_damage(5) -//phil235 missing attack_alien, attack_animal, bullet_act, etc... - /obj/machinery/newscaster/proc/AttachPhoto(mob/user) if(photo) if(!photo.sillynewscastervar) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index ebd6e3d05c1..ba14a0d3540 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -10,7 +10,7 @@ var/global/list/obj/item/device/pda/PDAs = list() icon = 'icons/obj/pda.dmi' icon_state = "pda" item_state = "electronic" - flags = NOBLUDGEON //phil235 test it + flags = NOBLUDGEON w_class = 1 slot_flags = SLOT_ID | SLOT_BELT origin_tech = "programming=2" diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index f1908a99533..2f0a38ff8c7 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -125,7 +125,7 @@ var/global/list/RPD_recipes=list( desc = "A device used to rapidly pipe things." icon = 'icons/obj/items.dmi' icon_state = "rpd" - flags = CONDUCT //phil235 SEMIBLUDGEON? + flags = CONDUCT force = 10 throwforce = 10 throw_speed = 1 diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 38ba595e717..0ec9b84479c 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -61,8 +61,9 @@ RSF return // Change mode -/obj/item/weapon/rsf/afterattack(atom/A, mob/user, proximity) //phil235 shitty proc, rewrite. - if(!proximity) return +/obj/item/weapon/rsf/afterattack(atom/A, mob/user, proximity) + if(!proximity) + return if (!(istype(A, /obj/structure/table) || istype(A, /turf/open/floor))) return diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index b4356035962..475f602428d 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -174,7 +174,7 @@ ..() if(ismob(target)) var/mob/M - if(src.loc == M) //target caught the sword //phil235 NO, shit + if(src.loc == M) M.drop_item() consume_everything(target) diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 2b29db5f5b3..6cf002db034 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -154,7 +154,7 @@ /obj/item/weapon/reagent_containers/spray/mister/afterattack(obj/target, mob/user, proximity) if(target.loc == loc) //Safety check so you don't fill your mister with mutagen or something and then blast yourself in the face with it - return //phil235 shitty check + return ..() //Janitor tank diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 49c2c4dd884..022e31bd97e 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -348,7 +348,7 @@ var/turf/location = get_turf(user) location.hotspot_expose(700, 50, 1) - if(isliving(O)) //phil235 need the new bitflag + if(isliving(O)) var/mob/living/L = O L.IgniteMob() diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 173d87b92af..495b9ca5693 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -88,8 +88,6 @@ user.visible_message("[user] rubs some dust off from the [name]'s surface.", \ "You rub some dust off from the [name]'s surface.") -//attack alien animal phil235 - /obj/structure/statue/CanAtmosPass() return !density @@ -208,7 +206,7 @@ /obj/structure/statue/plasma/bullet_act(obj/item/projectile/Proj) var/burn = FALSE - if(istype(Proj,/obj/item/projectile/beam)) //phil235 test this + if(istype(Proj,/obj/item/projectile/beam)) PlasmaBurn(2500) burn = TRUE else if(istype(Proj,/obj/item/projectile/ion)) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index bf8b3a9476f..162efa790e3 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -374,7 +374,7 @@ //merges adjacent full-tile windows into one /obj/structure/window/update_icon() - if(!qdeleted(src)) //phil235 + if(!qdeleted(src)) if(!fulltile) return diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index 790cf6e47c1..1eeebc6d0ab 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -37,8 +37,6 @@ if(istype(I.loc,/obj/item/weapon/storage)) //in a container. var/obj/item/weapon/storage/U = I.loc U.remove_from_storage(I, src) -// user.client.screen -= I -//phil235 U.contents.Remove(I) else if(user.l_hand == I) //in a hand user.drop_l_hand() else if(user.r_hand == I) //in a hand From 3b6e237b26a7067f17694a13439f9c36839fb039 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 00:32:23 +0000 Subject: [PATCH 136/228] Automatic changelog generation for PR #17067 --- html/changelogs/AutoChangeLog-pr-17067.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17067.yml diff --git a/html/changelogs/AutoChangeLog-pr-17067.yml b/html/changelogs/AutoChangeLog-pr-17067.yml new file mode 100644 index 00000000000..69d7d32a0f7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17067.yml @@ -0,0 +1,10 @@ +author: coiax +delete-after: True +changes: + - rscadd: "The Janitor's Union has mandated additional features to station +light replacer devices." + - rscadd: "The light replacer now can be used on the floor to replace +the bulbs of any lights on that tile." + - rscadd: "The light replacer now eats replaced bulbs, and after a certain +number of bulb fragments (four) will recycle them into a new bulb." + - tweak: "The description of the light replacer is now more informative." From e32b9700a887520b3475b0046823f81ad3c68dd8 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Sun, 24 Apr 2016 18:01:43 -0700 Subject: [PATCH 137/228] Fixes jetpack implant inconsistency --- code/modules/mob/living/carbon/carbon_movement.dm | 4 ---- code/modules/mob/living/carbon/human/species.dm | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm index 574e88fd908..1bd1210c2f7 100644 --- a/code/modules/mob/living/carbon/carbon_movement.dm +++ b/code/modules/mob/living/carbon/carbon_movement.dm @@ -3,10 +3,6 @@ if(legcuffed) . += legcuffed.slowdown - var/obj/item/organ/internal/cyberimp/chest/thrusters/J = getorganslot("thrusters") - if(istype(J) && J.on) - . -= 2 - var/const/NO_SLIP_WHEN_WALKING = 1 var/const/SLIDE = 2 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 638a318f7f0..5ff44ea9d53 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -795,6 +795,11 @@ if(istype(J) && J.allow_thrust(0.01, H)) . -= 2 + else + var/obj/item/organ/internal/cyberimp/chest/thrusters/T = H.getorganslot("thrusters") + if(istype(T) && T.allow_thrust(0.01, H)) + . -= 2 + else var/health_deficiency = (100 - H.health + H.staminaloss) if(health_deficiency >= 40) From f3f2962d268cbb1d0b836a566d89248249895da0 Mon Sep 17 00:00:00 2001 From: RandomMarine Date: Sun, 24 Apr 2016 18:26:23 -0700 Subject: [PATCH 138/228] buffs cockroach survivability --- .../living/simple_animal/friendly/cockroach.dm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 0a856487efc..e9f1c512b42 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -32,13 +32,12 @@ if(ismob(AM)) if(isliving(AM)) var/mob/living/A = AM - if(!isdrone(A)) - if(A.mob_size > MOB_SIZE_TINY) - if(prob(squish_chance)) - A.visible_message("\The [A] squashed \the [name].", "You squashed \the [name].") - death() - else - visible_message("\The [name] avoids getting crushed.") + if(A.mob_size > MOB_SIZE_SMALL) + if(prob(squish_chance)) + A.visible_message("\The [A] squashed \the [name].", "You squashed \the [name].") + death() + else + visible_message("\The [name] avoids getting crushed.") else if(isobj(AM)) if(istype(AM,/obj/structure)) @@ -54,4 +53,4 @@ icon = 'icons/effects/blood.dmi' icon_state = "xfloor1" random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") - layer = 2 \ No newline at end of file + layer = 2 From 581a13975b499cb2e66413ee8117bb835f247dec Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Sun, 24 Apr 2016 21:27:48 -0700 Subject: [PATCH 139/228] makes goliath plates stackable. --- code/game/mecha/working/ripley.dm | 2 +- .../objects/items/stacks/sheets/sheet_types.dm | 16 +++++++++++++++- code/modules/cargo/exports/sheets.dm | 2 +- .../modules/mining/lavaland/necropolis_chests.dm | 2 +- .../living/simple_animal/hostile/mining_mobs.dm | 8 ++++---- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index c4ccf61010f..994455ea8af 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -25,7 +25,7 @@ /obj/mecha/working/ripley/Destroy() for(var/i=1, i <= hides, i++) - new /obj/item/asteroid/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop + new /obj/item/stack/sheet/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop damage_absorption["brute"] = initial(damage_absorption["brute"]) for(var/atom/movable/A in cargo) A.loc = loc diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d6fc198ceb3..2615df9688d 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -265,4 +265,18 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \ w_class = 3 throw_speed = 1 throw_range = 3 - origin_tech = "materials=2;bio=2" \ No newline at end of file + origin_tech = "materials=2;bio=2" + + /* + * Plates + */ + +/obj/item/stack/sheet/goliath_hide + name = "goliath hide plates" + desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." + icon = 'icons/obj/mining.dmi' + icon_state = "goliath_hide" + singular_name = "hide plate" + flags = NOBLUDGEON + w_class = 3 + layer = 4 diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index 74855bb54c3..d6484cf1691 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -35,7 +35,7 @@ /datum/export/goliath_hide cost = 2500 unit_name = "goliath hide" - export_types = list(/obj/item/asteroid/goliath_hide) + export_types = list(/obj/item/stack/sheet/goliath_hide) // Cat hide. Just in case Runtime is catsploding again. /datum/export/stack/skin/cat diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 87ce12f72d8..455d3a4e2ec 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -373,7 +373,7 @@ /datum/table_recipe/boat name = "goliath hide boat" result = /obj/vehicle/lavaboat - reqs = list(/obj/item/asteroid/goliath_hide = 3) + reqs = list(/obj/item/stack/sheet/goliath_hide = 3) time = 50 category = CAT_MISC diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 0d41abe1c86..2e8398c5964 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -350,7 +350,7 @@ mob_size = MOB_SIZE_LARGE var/pre_attack = 0 var/pre_attack_icon = "Goliath_preattack" - loot = list(/obj/item/asteroid/goliath_hide{layer = 4.1}) + loot = list(/obj/item/stack/sheet/goliath_hide{layer = 4.1}) /mob/living/simple_animal/hostile/asteroid/goliath/Life() ..() @@ -438,7 +438,7 @@ spawn(50) qdel(src) -/obj/item/asteroid/goliath_hide +/obj/item/stack/sheet/goliath_hide name = "goliath hide plates" desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." icon = 'icons/obj/mining.dmi' @@ -447,7 +447,7 @@ w_class = 3 layer = 4 -/obj/item/asteroid/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) +/obj/item/stack/sheet/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) if(proximity_flag) if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining) || istype(target, /obj/item/clothing/suit/hooded/explorer) || istype(target, /obj/item/clothing/head/explorer)) var/obj/item/clothing/C = target @@ -649,7 +649,7 @@ icon_dead = "goliath_dead" throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath2" - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/asteroid/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) loot = list() stat_attack = 1 robust_searching = 1 From 556f611278e8ff31f565e508a29740a2c08b32fb Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Sun, 24 Apr 2016 22:07:51 -0700 Subject: [PATCH 140/228] makes the path /animalhide --- code/game/mecha/working/ripley.dm | 2 +- code/game/objects/items/stacks/sheets/leather.dm | 14 ++++++++++++++ .../objects/items/stacks/sheets/sheet_types.dm | 12 ------------ code/modules/cargo/exports/sheets.dm | 2 +- code/modules/mining/lavaland/necropolis_chests.dm | 2 +- .../living/simple_animal/hostile/mining_mobs.dm | 8 ++++---- 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 994455ea8af..b0f20c8b4e8 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -25,7 +25,7 @@ /obj/mecha/working/ripley/Destroy() for(var/i=1, i <= hides, i++) - new /obj/item/stack/sheet/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop + new /obj/item/stack/sheet/animalhide/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop damage_absorption["brute"] = initial(damage_absorption["brute"]) for(var/atom/movable/A in cargo) A.loc = loc diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index feb0266390d..099ddd5bc78 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -135,6 +135,20 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \ icon_state = "sinew" origin_tech = "bio=4" + /* + * Plates + */ + +/obj/item/stack/sheet/animalhide/goliath_hide + name = "goliath hide plates" + desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." + icon = 'icons/obj/mining.dmi' + icon_state = "goliath_hide" + singular_name = "hide plate" + flags = NOBLUDGEON + w_class = 3 + layer = 4 + //Step one - dehairing. diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 2615df9688d..6c9b9254103 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -267,16 +267,4 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \ throw_range = 3 origin_tech = "materials=2;bio=2" - /* - * Plates - */ -/obj/item/stack/sheet/goliath_hide - name = "goliath hide plates" - desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." - icon = 'icons/obj/mining.dmi' - icon_state = "goliath_hide" - singular_name = "hide plate" - flags = NOBLUDGEON - w_class = 3 - layer = 4 diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index d6484cf1691..ba81daa0a07 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -35,7 +35,7 @@ /datum/export/goliath_hide cost = 2500 unit_name = "goliath hide" - export_types = list(/obj/item/stack/sheet/goliath_hide) + export_types = list(/obj/item/stack/sheet/animalhide/goliath_hide) // Cat hide. Just in case Runtime is catsploding again. /datum/export/stack/skin/cat diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 455d3a4e2ec..a6fabeb90dc 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -373,7 +373,7 @@ /datum/table_recipe/boat name = "goliath hide boat" result = /obj/vehicle/lavaboat - reqs = list(/obj/item/stack/sheet/goliath_hide = 3) + reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3) time = 50 category = CAT_MISC diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 2e8398c5964..33c31460b09 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -350,7 +350,7 @@ mob_size = MOB_SIZE_LARGE var/pre_attack = 0 var/pre_attack_icon = "Goliath_preattack" - loot = list(/obj/item/stack/sheet/goliath_hide{layer = 4.1}) + loot = list(/obj/item/stack/sheet/animalhide/goliath_hide{layer = 4.1}) /mob/living/simple_animal/hostile/asteroid/goliath/Life() ..() @@ -438,7 +438,7 @@ spawn(50) qdel(src) -/obj/item/stack/sheet/goliath_hide +/obj/item/stack/sheet/animalhide/goliath_hide name = "goliath hide plates" desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." icon = 'icons/obj/mining.dmi' @@ -447,7 +447,7 @@ w_class = 3 layer = 4 -/obj/item/stack/sheet/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) +/obj/item/stack/sheet/animalhide/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) if(proximity_flag) if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining) || istype(target, /obj/item/clothing/suit/hooded/explorer) || istype(target, /obj/item/clothing/head/explorer)) var/obj/item/clothing/C = target @@ -649,7 +649,7 @@ icon_dead = "goliath_dead" throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath2" - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) loot = list() stat_attack = 1 robust_searching = 1 From a45c8f5c29e68dd62edfb0587fc8659ee06b535d Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 06:00:52 +0000 Subject: [PATCH 141/228] Automatic changelog generation for PR #17078 --- html/changelogs/AutoChangeLog-pr-17078.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17078.yml diff --git a/html/changelogs/AutoChangeLog-pr-17078.yml b/html/changelogs/AutoChangeLog-pr-17078.yml new file mode 100644 index 00000000000..fba30ec9bcd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17078.yml @@ -0,0 +1,4 @@ +author: Joan +delete-after: True +changes: + - bugfix: "You can once again hit a closet or crate with an item to open it." From 508522c320604efb77967d8a29a4e632e9332fdb Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 25 Apr 2016 07:15:32 +0100 Subject: [PATCH 142/228] Minor explosion damage around exploded machine --- code/modules/events/processor_overload.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index bf8708ac2c6..e200e8f52f4 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -33,5 +33,8 @@ // Only a level 1 explosion actually damages the machine // at all P.ex_act(1) + // Damage the surrounding area to indicate that it popped + var/turf/T = get_turf(P) + explosion(T, 0, 0, 2) else P.emp_act(1) From d1359a3e09e95e0a8728b28ab6421fe84b241c21 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Sun, 24 Apr 2016 23:24:42 -0700 Subject: [PATCH 143/228] What's it gonna be, loyalty to me? Or loyalty to your country? (export datum tweak) --- code/modules/cargo/exports/sheets.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index ba81daa0a07..921ed474389 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -32,7 +32,7 @@ export_types = list(/obj/item/stack/sheet/animalhide/human) // Goliath hide. Expensive. -/datum/export/goliath_hide +/datum/export/stack/skin/goliath_hide cost = 2500 unit_name = "goliath hide" export_types = list(/obj/item/stack/sheet/animalhide/goliath_hide) From 497e1ae3a9b11b1a489fe2fee151876fcd38b31e Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Sun, 24 Apr 2016 23:50:01 -0700 Subject: [PATCH 144/228] fixes plate consumption in upgrades. --- code/modules/mob/living/simple_animal/hostile/mining_mobs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 33c31460b09..9fcd4c3a305 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -455,7 +455,7 @@ if(current_armor.["melee"] < 60) current_armor.["melee"] = min(current_armor.["melee"] + 10, 60) user << "You strengthen [target], improving its resistance against melee attacks." - qdel(src) + use(1) else user << "You can't improve [C] any further!" return From 19a6e140c36399f5c01ffdb1defd6e196f01d959 Mon Sep 17 00:00:00 2001 From: TheWiznard Date: Mon, 25 Apr 2016 01:48:12 -0500 Subject: [PATCH 145/228] fixes newline error moves a comment up --- code/game/gamemodes/malfunction/Malf_Modules.dm | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 238b8b9c3d7..7c5f80092ee 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -9,7 +9,6 @@ var/power_type - /datum/AI_Module/large/ uses = 1 @@ -81,7 +80,6 @@ var/message = "[timer] SECONDS UNTIL DOOMSDAY DEVICE ACTIVATION!" minor_announce(message, "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", 1) - /obj/machinery/doomsday_device/proc/detonate(z_level = 1) for(var/mob/M in player_list) M << 'sound/machines/Alarm.ogg' @@ -97,6 +95,8 @@ world << "The AI cleansed the station of life with the doomsday device!" ticker.force_ending = 1 +//////END DOOMSDAY DEVICE + /datum/AI_Module/large/fireproof_core module_name = "Core Upgrade" mod_pick_name = "coreup" @@ -106,11 +106,6 @@ power_type = /mob/living/silicon/ai/proc/fireproof_core - - -//////END DOOMSDAY DEVICE - - /mob/living/silicon/ai/proc/fireproof_core() set category = "Malfunction" set name = "Fireproof Core" @@ -254,7 +249,6 @@ src << "Virus package compiled. Select a target mech at any time. You must remain on the station at all times. Loss of signal will result in total system lockout." verbs -= /mob/living/silicon/ai/proc/mech_takeover - /datum/AI_Module/large/break_fire_alarms module_name = "Thermal Sensor Override" mod_pick_name = "burnpigs" @@ -303,8 +297,6 @@ src << "All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode." src.verbs -= /mob/living/silicon/ai/proc/break_air_alarms - - /datum/AI_Module/small/overload_machine module_name = "Machine Overload" mod_pick_name = "overload" @@ -623,7 +615,6 @@ src.use(usr) return - /datum/AI_Module/large/eavesdrop module_name = "Enhanced Surveillance" mod_pick_name = "eavesdrop" From 1a6ad107afb9999665acb171b3a7ad47776ec57e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 25 Apr 2016 09:01:52 +0100 Subject: [PATCH 146/228] Refactoring and tweaks --- .../miniantags/slaughter/slaughter.dm | 31 +++++---- code/modules/mob/living/bloodcrawl.dm | 68 +++++++++---------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index e1e4e0edbd3..10d99b7dc57 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -34,9 +34,6 @@ var/boost = 0 bloodcrawl = BLOODCRAWL_EAT see_invisible = SEE_INVISIBLE_MINIMUM - // Set consumed_mobs to a list() to keep the corpses in the demon - // for later retrieval on demon death - var/list/consumed_mobs = null var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and dissaapearing from the station at will. \ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ @@ -64,16 +61,8 @@ speed = 0 /mob/living/simple_animal/slaughter/death() - ..(1) - - death_mealspill() - playsound(get_turf(src),death_sound, 200, 1) - -/mob/living/simple_animal/slaughter/proc/death_mealspill() - if(consumed_mobs) - for(var/mob/living/M in consumed_mobs) - M.forceMove(get_turf(src)) + ..() /obj/effect/decal/cleanable/blood/innards icon = 'icons/obj/surgery.dmi' @@ -148,19 +137,20 @@ loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) // Keep the people we hug! - consumed_mobs = list() + var/list/consumed_mobs = list() // HOT. PINK. //color = "#FF69B4" + /mob/living/simple_animal/slaughter/laughter/New() ..() deathmessage = "[src] fades out, as all of its friends are released from its prison of hugs." -/mob/living/simple_animal/slaughter/laughter/death_mealspill() +/mob/living/simple_animal/slaughter/laughter/death() if(!consumed_mobs) - return + return ..() for(var/mob/living/M in consumed_mobs) M.loc = get_turf(src) @@ -174,3 +164,14 @@ break M << "You leave the [src]'s warm embrace, and feel ready to take on the world." + return ..() + +/mob/living/simple_animal/slaughter/laughter/bloodcrawl_swallow(var/mob/living/victim) + if(consumed_mobs) + // Keep their corpse so rescue is possible + consumed_mobs += victim + else + // Be safe and just eject the corpse + victim.forceMove(get_turf(victim)) + victim.exit_blood_effect() + victim.visible_message("[victim] falls out of the air, covered in blood, looking highly confused. And dead.") diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 19310eb23bf..69e85dfb9ab 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -85,12 +85,12 @@ kidnapped = TRUE if(kidnapped) - var/success = bloodcrawl_consume(B, victim) + var/success = bloodcrawl_consume(victim) if(!success) src << "You happily devour... nothing? Your meal vanished at some point!" return 1 -/mob/living/proc/bloodcrawl_consume(obj/effect/decal/cleanable/B, mob/living/victim) +/mob/living/proc/bloodcrawl_consume(mob/living/victim) src << "You begin to feast on [victim]. You can not move while you are doing this." var/sound @@ -110,46 +110,51 @@ if(victim.reagents && victim.reagents.has_reagent("devilskiss")) src << "AAH! THEIR FLESH! IT BURNS!" adjustBruteLoss(25) //I can't use adjustHealth() here because bloodcrawl affects /mob/living and adjustHealth() only affects simple mobs - victim.loc = get_turf(B) - // This whole thing here is the ONLY reason we keep passing B down - // this proc chain, so we know where to spit the person out who's - // been drinking. TODO would be a lot better if it just picked the - // nearest bloodspot and used that, then it'd be a lot cleaner - // from a code perspective - victim.visible_message("[B] violently expels [victim]!") + var/found_bloodpool = FALSE + for(var/obj/effect/decal/cleanable/target in range(1,get_turf(victim))) + if(target.can_bloodcrawl_in()) + victim.forceMove(get_turf(target)) + victim.visible_message("[target] violently expels [victim]!") + victim.exit_blood_effect(target) + found_bloodpool = TRUE + + if(!found_bloodpool) + // Fuck it, just eject them, thanks to some split second cleaning + victim.forceMove(get_turf(victim)) + victim.visible_message("[victim] appears from nowhere, covered in blood!") + victim.exit_blood_effect() return TRUE src << "You devour [victim]. Your health is fully restored." - src.adjustBruteLoss(-1000) - src.adjustFireLoss(-1000) - src.adjustOxyLoss(-1000) - src.adjustToxLoss(-1000) + src.revive(full_heal = 1) // No defib possible after laughter victim.adjustBruteLoss(1000) victim.death() - - var/del_corpse = TRUE - var/mob/living/simple_animal/slaughter/SD - if(istype(src, /mob/living/simple_animal/slaughter)) - SD = src - // `consumed_mobs` can be set to null to gib the corpse - if(SD.consumed_mobs) - // Keep their corpse so rescue is possible - SD.consumed_mobs += victim - del_corpse = FALSE - - if(del_corpse) - qdel(victim) - + bloodcrawl_swallow(victim) return TRUE +/mob/living/proc/bloodcrawl_swallow(var/mob/living/victim) + qdel(victim) + /obj/item/weapon/bloodcrawl name = "blood crawl" desc = "You are unable to hold anything while in this form." icon = 'icons/effects/blood.dmi' flags = NODROP|ABSTRACT +/mob/living/proc/exit_blood_effect(obj/effect/decal/cleanable/B) + playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) + var/oldcolor = src.color + //Makes the mob have the color of the blood pool it came out of + if(istype(B, /obj/effect/decal/cleanable/xenoblood)) + src.color = rgb(43, 186, 0) + else + src.color = rgb(149, 10, 10) + // but only for a few seconds + spawn(30) + src.color = oldcolor + /mob/living/proc/phasein(obj/effect/decal/cleanable/B) if(src.notransform) src << "Finish eating first!" @@ -162,20 +167,13 @@ src.loc = B.loc src.client.eye = src src.visible_message("[src] rises out of the pool of blood!") - playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) + exit_blood_effect(B) if(iscarbon(src)) var/mob/living/carbon/C = src for(var/obj/item/weapon/bloodcrawl/BC in C) BC.flags = null C.unEquip(BC) qdel(BC) - var/oldcolor = src.color - if(istype(B, /obj/effect/decal/cleanable/xenoblood)) //Makes the mob have the color of the blood pool it came out of for a few seconds - src.color = rgb(43, 186, 0) - else - src.color = rgb(149, 10, 10) qdel(src.holder) src.holder = null - spawn(30) - src.color = oldcolor return 1 From 8901ee0610a17afb836a93e00e3d8cea3e36296c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 25 Apr 2016 09:22:32 +0100 Subject: [PATCH 147/228] Actually compiles --- code/modules/events/processor_overload.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index e200e8f52f4..9ad23fd69ae 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -30,11 +30,10 @@ if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T if(prob(10)) + // Damage the surrounding area to indicate that it popped + explosion(get_turf(P), 0, 0, 2) // Only a level 1 explosion actually damages the machine // at all P.ex_act(1) - // Damage the surrounding area to indicate that it popped - var/turf/T = get_turf(P) - explosion(T, 0, 0, 2) else P.emp_act(1) From f08e95977798d33e58509ead1bf9e216d0a8739e Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 08:25:24 +0000 Subject: [PATCH 148/228] Automatic changelog generation for PR #16940 --- html/changelogs/AutoChangeLog-pr-16940.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-16940.yml diff --git a/html/changelogs/AutoChangeLog-pr-16940.yml b/html/changelogs/AutoChangeLog-pr-16940.yml new file mode 100644 index 00000000000..1ab63958340 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-16940.yml @@ -0,0 +1,6 @@ +author: coiax +delete-after: True +changes: + - rscadd: "Laughter demons are like slaughter demons, but they tickle people to death" + - tweak: "Slaughter demons are no longer able to cast spells while phased." + - tweak: "Wizards can now speak while ethereal, but still cannot cast spells while ethereal." From 322fc535adfa2271996c2dbe2759821df74da9f6 Mon Sep 17 00:00:00 2001 From: Lularian Date: Mon, 25 Apr 2016 05:04:11 -0500 Subject: [PATCH 149/228] sandbags rah rah rah --- .../objects/items/stacks/sheets/mineral.dm | 5 +++-- .../objects/items/weapons/miscellaneous.dm | 6 ------ .../closets/secure/engineering.dm | 1 + code/modules/clothing/suits/miscellaneous.dm | 2 +- code/modules/crafting/recipes.dm | 8 ------- code/modules/mining/mine_items.dm | 20 ++++++++++++++++++ icons/obj/items.dmi | Bin 59624 -> 60353 bytes icons/obj/smooth_structures/sandbags.dmi | Bin 887 -> 878 bytes 8 files changed, 25 insertions(+), 17 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index e48f7237cbe..f639d3e152f 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -27,6 +27,7 @@ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \ new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("Breakdown into sand", /obj/item/weapon/ore/glass, 1, one_per_turf = 0, on_floor = 1), \ /* new/datum/stack_recipe("sandstone wall", ???), \ new/datum/stack_recipe("sandstone floor", ???),\ */ ) @@ -52,13 +53,13 @@ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \ amount = 30 /* - * Sandbags( + * Sandbags */ /obj/item/stack/sheet/mineral/sandbags name = "sandbags" icon = 'icons/obj/items.dmi' - icon_state = "sandbag" + icon_state = "sandbags" singular_name = "sandbag" force = 5 throwforce = 5 diff --git a/code/game/objects/items/weapons/miscellaneous.dm b/code/game/objects/items/weapons/miscellaneous.dm index e46f6b4a3de..58711c23a66 100644 --- a/code/game/objects/items/weapons/miscellaneous.dm +++ b/code/game/objects/items/weapons/miscellaneous.dm @@ -11,9 +11,3 @@ w_class = 2 attack_verb = list("warned", "cautioned", "smashed") -/obj/item/weapon/emptysandbag - name = "empty sandbag" - desc = "A bag to be filled with sand." - icon = 'icons/obj/items.dmi' - icon_state = "sandbag" - w_class = 1 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 094d48be09e..8a1c73ae7ad 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -69,6 +69,7 @@ new /obj/item/weapon/holosign_creator/engineering(src) new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/glasses/meson/engine(src) + new /obj/item/weapon/storage/box/emptysandbags(src) /obj/structure/closet/secure_closet/atmospherics diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index cd62fb539d3..9a91b40b344 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -480,7 +480,7 @@ icon_state = "winterhood_cargo" /obj/item/clothing/suit/hooded/wintercoat/miner - name = "mining winter coat" + name = "gwinter coat" icon_state = "coatminer" allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter) armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 33fd8889965..181e45fa65b 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -172,14 +172,6 @@ time = 10 category = CAT_WEAPON -/datum/table_recipe/sandbags - name = "Sandbags" - result = /obj/item/stack/sheet/mineral/sandbags - reqs = list(/obj/item/weapon/ore/glass = 5, - /obj/item/weapon/emptysandbag = 1) - time = 10 - category = CAT_WEAPON - /datum/table_recipe/meteorshot name = "Meteorshot Shell" result = /obj/item/ammo_casing/shotgun/meteorshot diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 6d1e49b6957..1583c48ae60 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -36,6 +36,8 @@ /obj/structure/closet/secure_closet/miner/New() ..() + new /obj/item/stack/sheet/mineral/sandbags(src, 5) + new /obj/item/weapon/storage/box/emptysandbags(src) new /obj/item/device/radio/headset/headset_cargo(src) new /obj/item/device/t_scanner/adv_mining_scanner/lesser(src) new /obj/item/weapon/storage/bag/ore(src) @@ -46,6 +48,7 @@ new /obj/item/weapon/survivalcapsule(src) + /**********************Shuttle Computer**************************/ /obj/machinery/computer/shuttle/mining @@ -428,3 +431,20 @@ anchored = 1 layer = MOB_LAYER - 0.2 density = 0 + +/obj/item/weapon/emptysandbag + name = "empty sandbag" + desc = "A bag to be filled with sand." + icon = 'icons/obj/items.dmi' + icon_state = "sandbag" + w_class = 1 + +/obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params) + if(istype(W,/obj/item/weapon/ore/glass || /obj/item/weapon/ore/glass/basalt)) + user << "You fill the sandbag." + var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags + user.unEquip(src) + user.put_in_hands(I) + qdel(W) + qdel(src) + return diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 6f50b46333ff05aa094fe80c3a9e57e5d9f19cd5..bec65f208591139414d47397bef025cb99910c6a 100644 GIT binary patch delta 22260 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 nIl;*0zSdpv!M26(j8^pKURwjuumM*2+} delta 21526 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 diff --git a/icons/obj/smooth_structures/sandbags.dmi b/icons/obj/smooth_structures/sandbags.dmi index 2bb3723044e217997503d61013590ac10b9519e2..2e8c2e335284c276a22c4a3f86c2c867f3766af3 100644 GIT binary patch delta 660 zcmV;F0&D&E2JQxsBp44+OjJd{z`&b(OVp}#!<%HKhgI#A{%nyy#eY~yL_t(&f$f@M zZo?o9g_|3Ubr)zj0rCl&=Kg0IB-PsB=V37FDh*5hV}-8-UhGHH)5#u_U$4Fc=K&0J zpuRx==D^d{)7q0aT`0`GfyZ5TZgTlmD5nKZL<^g;r-eS0z+8tDImc!boKpjH9mWK) zZC_?OtARcTdH|$$V1LpP1KxM;677qFi^=C!xH z&%*;hndQ~M*Z~*N1zBFJ!`MFQhTG~fuixc;wTgKyP`}Gc;J#7|=+ii#0-k^0%?|>g z;aTqvgy&yNy|f-PAkcEmcmZ(e&tbtw46V%&WnvTx8Q7Ngn^ z?kjZK*ddp&zhq4#^eQ2F}93><#Y4jg{)0dX9DPzfA<@CW!ZKPZD5?VFVE z4{Y^=()jo!wE014yjEvwou((D$q!27W1`IuO5;<#Yx0BA_|$iU!4IptClSf(7~Evqlq7m{Ud!74hMS-em?sK zoEtEVf!YH7ivtg5PjgG&aH24_25xuRxxwwPLOCsPAez{eJx%nf1nzY>kaKJ{!8tW> zufv!iw(ZkM-)f-W13dsze?2hihygD|M;(vrFzyoZT`rj6UWZVa^j!q>ecmN<>_%6p>^%@!r z@SDZQvnTMc!&2Wc&`{qnP+#(&1e|?+eS`7(x2y%GvL%(XO(CBlU(j`F2ELmvljoCwRY%<9 z1_Pd)cR@R_`@tKq`#~kJ`@vt} z!~CEOs Date: Mon, 25 Apr 2016 05:09:50 -0500 Subject: [PATCH 150/228] oops --- code/modules/clothing/suits/miscellaneous.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 9a91b40b344..6fe0f740b22 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -480,11 +480,11 @@ icon_state = "winterhood_cargo" /obj/item/clothing/suit/hooded/wintercoat/miner - name = "gwinter coat" + name = "mining winter coat" icon_state = "coatminer" allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter) armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) hoodtype = /obj/item/clothing/head/winterhood/miner /obj/item/clothing/head/winterhood/miner - icon_state = "winterhood_miner" \ No newline at end of file + icon_state = "winterhood_miner" From c2a3ae9424ca0e0b9cc3e5260a861e8454af4d1a Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 09:24:40 -0600 Subject: [PATCH 151/228] adds a new argument to ChangeTurf() which allows us to skip calling AfterChange() --- code/game/turfs/turf.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 7ab1efb6c7b..2efe567a48c 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -129,7 +129,7 @@ qdel(L) //Creates a new turf -/turf/proc/ChangeTurf(path) +/turf/proc/ChangeTurf(path, defer_change = FALSE) if(!path) return if(path == type) @@ -139,7 +139,8 @@ SSair.remove_from_active(src) var/turf/W = new path(src) - W.AfterChange() + if(!defer_change) + W.AfterChange() W.blueprint_data = old_blueprint_data return W @@ -153,10 +154,11 @@ queue_smooth_neighbors(src) -/turf/open/AfterChange() +/turf/open/AfterChange(ignore_air) ..() RemoveLattice() - Assimilate_Air() + if(!ignore_air) + Assimilate_Air() //////Assimilate Air////// /turf/open/proc/Assimilate_Air() From b9bd58de883fbec6183400818064df82bbb3094e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 25 Apr 2016 16:28:16 +0100 Subject: [PATCH 152/228] Grammar fixes --- code/__DEFINES/clothing.dm | 1 - code/datums/dog_fashion.dm | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index 29e35489555..fabe22f95c4 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -101,4 +101,3 @@ #define TINT_DARKENED 2 //Threshold of tint level to apply weld mask overlay #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully - diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 337501d094d..9446d31dc52 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -65,7 +65,7 @@ /datum/dog_fashion/head/rabbit name = "Hoppy" emote_see = list("twitches its nose", "hops around a bit") - desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" + desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit." /datum/dog_fashion/head/beret name = "Yann" @@ -152,7 +152,7 @@ /datum/dog_fashion/head/sombrero/New(mob/M) ..() - desc = "You must respect Elder [M.real_name]" + desc = "You must respect Elder [M.real_name]." /datum/dog_fashion/head/hop name = "Lieutenant REAL_NAME" From 27bc533def16ae67386f108100cc434dcde22757 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 09:43:10 -0600 Subject: [PATCH 153/228] fixes air bugs with the maploader changeturf, hopefully --- code/modules/awaymissions/maploader/reader.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index e716f3e8fc0..70cf058917d 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -134,6 +134,10 @@ var/global/dmm_suite/preloader/_preloader = new if(bounds[1] == 1.#INF) // Shouldn't need to check every item return null else + for(var/t in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))) + var/turf/T = t + //we do this after we load everything in. if we don't; we'll have weird atmos bugs regarding atmos adjacent turfs + T.AfterChange(TRUE) return bounds /** @@ -267,7 +271,7 @@ var/global/dmm_suite/preloader/_preloader = new var/turf/T = locate(x,y,z) if(T) if(ispath(path, /turf)) - T.ChangeTurf(path) + T.ChangeTurf(path, defer_change = TRUE) instance = T else instance = new path (T)//first preloader pass @@ -394,4 +398,4 @@ var/global/dmm_suite/preloader/_preloader = new name = "Area Passthrough" /turf/template_noop - name = "Turf Passthrough" \ No newline at end of file + name = "Turf Passthrough" From 434c5f45be1ba3952739c4f57b64fae50fb32fe2 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 09:45:11 -0600 Subject: [PATCH 154/228] small optimization --- code/__HELPERS/lists.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index cb4e8c8163b..b6eb7864381 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -351,6 +351,6 @@ if(!islist(l)) return l . = l.Copy() - for(var/i = 1 to length(.)) + for(var/i = 1 to l.len) if(islist(.[i])) .[i] = .(.[i]) From 48ec49969e5cf5320e38ad4652d5405189596761 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 15:46:46 +0000 Subject: [PATCH 155/228] Automatic changelog generation for PR #17083 --- html/changelogs/AutoChangeLog-pr-17083.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17083.yml diff --git a/html/changelogs/AutoChangeLog-pr-17083.yml b/html/changelogs/AutoChangeLog-pr-17083.yml new file mode 100644 index 00000000000..ea4a2146270 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17083.yml @@ -0,0 +1,4 @@ +author: coiax +delete-after: True +changes: + - rscadd: "Clown mask appearance toggle now has an action button." From 4686f80b39c3cdd0f8df7191b81736003d6d1235 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 10:20:27 -0600 Subject: [PATCH 156/228] fixes horrible runtimes --- code/modules/awaymissions/maploader/reader.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 70cf058917d..6aceae504df 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -271,7 +271,7 @@ var/global/dmm_suite/preloader/_preloader = new var/turf/T = locate(x,y,z) if(T) if(ispath(path, /turf)) - T.ChangeTurf(path, defer_change = TRUE) + T.ChangeTurf(path, TRUE) instance = T else instance = new path (T)//first preloader pass From b23d676995b752add20a86ad7db260f3b0695691 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Mon, 25 Apr 2016 10:54:45 -0700 Subject: [PATCH 157/228] Fixes sloth ruin atmos runtime. --- code/controllers/subsystem/air.dm | 2 ++ code/game/turfs/open.dm | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 0b4794e698c..0ba721fa0df 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -270,6 +270,8 @@ var/datum/subsystem/air/SSair for(var/thing in turfs_to_init) var/turf/T = thing active_turfs -= T + if (T.blocks_air) + return T.Initalize_Atmos(times_fired) diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index d5aca9fad38..1094c43a496 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -7,8 +7,7 @@ /turf/open/Initalize_Atmos(times_fired) excited = 0 update_visuals() - if (blocks_air) - return + current_cycle = times_fired //cache some vars From f44688ed87fec340bb47eab5d2968d7c30d5abb8 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 25 Apr 2016 13:30:16 -0500 Subject: [PATCH 158/228] Minigun Fixes --- .../guns/projectile/rechargable_magazine.dm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index fe800092af6..1e4221ce984 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -146,7 +146,7 @@ icon_state = "minigun_spin" item_state = "minigun" origin_tech = null - flags = NODROP | CONDUCT | HANDSLOW + flags = CONDUCT | HANDSLOW slowdown = 1 slot_flags = null w_class = 5 @@ -162,6 +162,16 @@ /obj/item/weapon/gun/projectile/minigun/attack_self(mob/living/user) return +/obj/item/weapon/gun/projectile/minigun/dropped(mob/user) + if(ammo_pack) + ammo_pack.attach_gun(user) + else + qdel(src) + +/obj/item/weapon/gun/projectile/minigun/afterattack(atom/target, mob/living/user, flag, params) + if(!ammo_pack || ammo_pack.loc != user) + user << "You need the backpack power source to fire the gun!" + /obj/item/weapon/gun/projectile/minigun/New() if(!ammo_pack) if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one. From 1743138d079fbfd5934e4109c740e80dd34f7632 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Mon, 25 Apr 2016 11:32:21 -0700 Subject: [PATCH 159/228] Fixes SSU dropping contents on opening --- code/game/machinery/machinery.dm | 5 +++-- code/game/machinery/suit_storage_unit.dm | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 1c32cd0aeee..c5b5df6e648 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -157,10 +157,11 @@ Class Procs: PoolOrNew(/obj/effect/overlay/temp/emp, loc) ..() -/obj/machinery/proc/open_machine() +/obj/machinery/proc/open_machine(var/drop = 1) state_open = 1 density = 0 - dropContents() + if(drop) + dropContents() update_icon() updateUsrDialog() diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 85b03b73365..8ce32efcaaf 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -332,7 +332,7 @@ if(state_open) close_machine() else - open_machine() + open_machine(0) if(occupant) dump_contents() // Dump out contents if someone is in there. . = TRUE From e8cc449e4185509af77c1a2699084de79f4f1a52 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 25 Apr 2016 13:39:38 -0500 Subject: [PATCH 160/228] Fixes gun duping --- .../projectiles/guns/projectile/rechargable_magazine.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index 1e4221ce984..dc7a6b82994 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -95,8 +95,7 @@ /obj/item/weapon/minigunpack/dropped(mob/user) if(armed) - attach_gun(user) - ..() + user.unEquip(gun,1) /obj/item/weapon/minigunpack/MouseDrop(atom/over_object) if(armed) @@ -171,6 +170,7 @@ /obj/item/weapon/gun/projectile/minigun/afterattack(atom/target, mob/living/user, flag, params) if(!ammo_pack || ammo_pack.loc != user) user << "You need the backpack power source to fire the gun!" + ..() /obj/item/weapon/gun/projectile/minigun/New() if(!ammo_pack) From 025b432e8eec9dc4ff3337616ea579d09d28ce8c Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 25 Apr 2016 13:48:33 -0500 Subject: [PATCH 161/228] Lockdown Fix --- code/game/gamemodes/malfunction/Malf_Modules.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 238b8b9c3d7..32421f01efd 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -161,7 +161,7 @@ var/obj/machinery/door/airlock/AL for(var/obj/machinery/door/D in airlocks) - if(D.z != ZLEVEL_STATION && D.z != ZLEVEL_MINING) + if(D.z != ZLEVEL_STATION) continue spawn() if(istype(D, /obj/machinery/door/airlock)) @@ -191,6 +191,8 @@ var/obj/machinery/door/airlock/AL for(var/obj/machinery/door/D in airlocks) + if(D.z != ZLEVEL_STATION) + continue spawn() if(istype(D, /obj/machinery/door/airlock)) AL = D From 2007a8241d1a52e07bcc1d56ba5f1ee5252a26bf Mon Sep 17 00:00:00 2001 From: TheWiznard Date: Mon, 25 Apr 2016 15:21:52 -0500 Subject: [PATCH 162/228] removes comment --- code/game/gamemodes/malfunction/Malf_Modules.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 7c5f80092ee..bfff240e195 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -15,8 +15,6 @@ /datum/AI_Module/small/ uses = 5 -//////DOOMSDAY DEVICE - /datum/AI_Module/large/nuke_station module_name = "Doomsday Device" mod_pick_name = "nukestation" @@ -95,8 +93,6 @@ world << "The AI cleansed the station of life with the doomsday device!" ticker.force_ending = 1 -//////END DOOMSDAY DEVICE - /datum/AI_Module/large/fireproof_core module_name = "Core Upgrade" mod_pick_name = "coreup" From bb1f60e76901458a21279bc327c823cf6d92bb39 Mon Sep 17 00:00:00 2001 From: phil235 Date: Mon, 25 Apr 2016 22:29:17 +0200 Subject: [PATCH 163/228] Fixes typos and errors I made. Fixes unscrewing a broken computer only dropping one glass shard instead of two. Fixes AI holopad, recharger, keycard authentication device, reagent_dispensers reagentgrinder, and APC not being attackable. Fixes APC cover knockdown being random, it now uses the take_damage() proc, which also allows animals and xenos to knock down the cover of a broken apc. --- code/game/machinery/PDApainter.dm | 4 +- code/game/machinery/announcement_system.dm | 3 +- code/game/machinery/camera/camera.dm | 4 -- code/game/machinery/computer/computer.dm | 3 +- code/game/machinery/hologram.dm | 4 +- code/game/machinery/newscaster.dm | 20 +++---- code/game/machinery/recharger.dm | 17 +++--- code/game/machinery/shieldgen.dm | 2 - code/game/objects/effects/aliens.dm | 2 +- .../game/objects/items/stacks/sheets/glass.dm | 2 +- .../kitchen machinery/processor.dm | 1 + code/modules/hydroponics/biogenerator.dm | 8 ++- code/modules/hydroponics/seed_extractor.dm | 25 ++++---- code/modules/power/apc.dm | 57 ++++++++++++------- .../chemistry/machinery/reagentgrinder.dm | 26 +++++---- code/modules/reagents/reagent_dispenser.dm | 5 +- code/modules/recycling/disposal-unit.dm | 2 +- .../security levels/keycard authentication.dm | 3 - 18 files changed, 102 insertions(+), 86 deletions(-) diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 4ff95775e70..827ad18619e 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -101,7 +101,7 @@ update_icon() /obj/machinery/pdapainter/attack_hand(mob/user) - if(..()) + if(!..()) add_fingerprint(user) if(storedpda) @@ -118,7 +118,7 @@ ejectpda() else - user << "The [src] is empty." + user << "\The [src] is empty." /obj/machinery/pdapainter/verb/ejectpda() diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 29af1ab1e18..393f2f4f600 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -75,8 +75,7 @@ var/list/announcement_systems = list() if(istype(P, /obj/item/weapon/screwdriver)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) panel_open = !panel_open - if(!panel_open) - user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." + user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." update_icon() else if(default_deconstruction_crowbar(P)) return diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 648339bcbf7..724311e6a54 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -238,10 +238,6 @@ cable.plugin(src, user) return - else if(istype(W, /obj/item/device/laser_pointer)) - var/obj/item/device/laser_pointer/L = W - L.laser_act(src, user) - return return ..() /obj/machinery/camera/take_damage(damage, damage_type = BRUTE, sound_effect = 1) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index a6f8eb6eb01..1ae36a3a43d 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -93,7 +93,8 @@ C.loc = src.loc if (stat & BROKEN) user << "The broken glass falls out." - new /obj/item/weapon/shard( src.loc ) + new /obj/item/weapon/shard(src.loc) + new /obj/item/weapon/shard(src.loc) A.state = 3 A.icon_state = "3" else diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 366c3f56479..5d03cc6f5f2 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -69,7 +69,9 @@ var/const/HOLOPAD_MODE = RANGE_BASED if(default_unfasten_wrench(user, P)) return - default_deconstruction_crowbar(P) + if(default_deconstruction_crowbar(P)) + return + return ..() /obj/machinery/hologram/holopad/AltClick(mob/living/carbon/human/user) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 462dee8ff9d..99e7e402233 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -326,11 +326,11 @@ var/list/obj/machinery/newscaster/allCasters = list() if(6) dat+="ERROR: Could not submit Feed story to Network.

        " if(channel_name=="") - dat+="?Invalid receiving channel name.
        " + dat+="Invalid receiving channel name.
        " if(scanned_user=="Unknown") - dat+="?Channel author unverified.
        " + dat+="Channel author unverified.
        " if(msg == "" || msg == "\[REDACTED\]") - dat+="?Invalid message body.
        " + dat+="Invalid message body.
        " dat+="
        Return
        " if(7) dat+="ERROR: Could not submit Feed Channel to Network.

        " @@ -341,18 +341,18 @@ var/list/obj/machinery/newscaster/allCasters = list() else existing_authors += FC.author if(scanned_user in existing_authors) - dat+="?There already exists a Feed channel under your name.
        " + dat+="There already exists a Feed channel under your name.
        " if(channel_name=="" || channel_name == "\[REDACTED\]") - dat+="?Invalid channel name.
        " + dat+="Invalid channel name.
        " var/check = 0 for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) if(FC.channel_name == channel_name) check = 1 break if(check) - dat+="?Channel name already in use.
        " + dat+="Channel name already in use.
        " if(scanned_user=="Unknown") - dat+="?Channel author unverified.
        " + dat+="Channel author unverified.
        " dat+="
        Return
        " if(8) var/total_num=length(news_network.network_channels) @@ -471,11 +471,11 @@ var/list/obj/machinery/newscaster/allCasters = list() if(16) dat+="ERROR: Wanted Issue rejected by Network.

        " if(channel_name=="" || channel_name == "\[REDACTED\]") - dat+="?Invalid name for person wanted.
        " + dat+="Invalid name for person wanted.
        " if(scanned_user=="Unknown") - dat+="?Issue author unverified.
        " + dat+="Issue author unverified.
        " if(msg == "" || msg == "\[REDACTED\]") - dat+="?Invalid description.
        " + dat+="Invalid description.
        " dat+="
        Return
        " if(17) dat+="Wanted Issue successfully deleted from Circulation
        " diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index a879455c1b2..3ae2ded9223 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -31,35 +31,35 @@ user << "You [anchored ? "attached" : "detached"] [src]." playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) return - if(istype(user,/mob/living/silicon)) - return + if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G, /obj/item/ammo_box/magazine/recharge)) if(anchored) if(charging || panel_open) - return + return 1 //Checks to make sure he's not in space doing it, and that the area got proper power. var/area/a = get_area(src) if(!isarea(a) || a.power_equip == 0) user << "[src] blinks red as you try to insert [G]." - return + return 1 if (istype(G, /obj/item/weapon/gun/energy)) var/obj/item/weapon/gun/energy/gun = G if(!gun.can_charge) user << "Your gun has no external power connector." - return - if(!user.drop_item()) - return + return 1 + if(!user.drop_item()) + return 1 G.loc = src charging = G use_power = 2 update_icon() else user << "[src] isn't connected to anything!" + return 1 - if (anchored && !charging) + if(anchored && !charging) if(default_deconstruction_screwdriver(user, "rechargeropen", "recharger0", G)) return @@ -69,6 +69,7 @@ if(exchange_parts(user, G)) return + return ..() /obj/machinery/recharger/attack_hand(mob/user) if(issilicon(user)) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index a26b66350de..1868e966e5a 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -282,8 +282,6 @@ var/locked = 1 var/obj/structure/cable/attached // the attached cable var/storedpower = 0 - flags = CONDUCT - use_power = 0 /obj/machinery/shieldwallgen/proc/power() if(!anchored) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 21ae2c75996..4ec3efe5a33 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -141,7 +141,7 @@ /obj/structure/alien/resin/attack_animal(mob/living/simple_animal/M) M.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) - if(M.melee_damage_upper == 0 || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN)) + if(!M.melee_damage_upper) return visible_message("[M] [M.attacktext] [src]!") take_damage(M.melee_damage_upper, M.melee_damage_type) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 817cc5b22cf..3e12f0d4954 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -336,7 +336,7 @@ continue if(G.amount >= G.max_amount) continue - G.attackby(G, user) + G.attackby(NG, user) user << "You add the newly-formed glass to the stack. It now contains [NG.amount] sheet\s." qdel(src) else diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food&drinks/kitchen machinery/processor.dm index a602e611581..ab460e14999 100644 --- a/code/modules/food&drinks/kitchen machinery/processor.dm +++ b/code/modules/food&drinks/kitchen machinery/processor.dm @@ -193,6 +193,7 @@ "You put the [what] into [src].") user.drop_item() what.loc = src + return 1 else if(user.a_intent != "harm") user << "That probably won't blend!" diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 978c4d191d9..9ebde1d58ab 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -73,17 +73,21 @@ return if(istype(O, /obj/item/weapon/reagent_containers/glass)) + . = 1 //no afterattack if(!panel_open) if(beaker) user << "A container is already loaded into the machine." else - user.unEquip(O) + if(!user.drop_item()) + return O.loc = src beaker = O user << "You add the container to the machine." update_icon() updateUsrDialog() - return 1 //no afterattack + else + user << "Close the maintenance panel first." + return else if(istype(O, /obj/item/weapon/storage/bag/plants)) var/obj/item/weapon/storage/bag/plants/PB = O diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index d30378251f5..e7e63b26e23 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -1,4 +1,4 @@ -/proc/seedify(obj/item/O, t_max, obj/machinery/seed_extractor/extractor) +/proc/seedify(obj/item/O, t_max, obj/machinery/seed_extractor/extractor, mob/living/user) var/t_amount = 0 if(t_max == -1) if(extractor) @@ -13,6 +13,8 @@ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/)) var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O if(F.seed) + if(user && !user.drop_item()) //couldn't drop the item + return while(t_amount < t_max) var/obj/item/seeds/t_prod = F.seed.Copy() t_prod.loc = seedloc @@ -23,6 +25,8 @@ else if(istype(O, /obj/item/weapon/grown)) var/obj/item/weapon/grown/F = O if(F.seed) + if(user && !user.drop_item()) + return while(t_amount < t_max) var/obj/item/seeds/t_prod = F.seed.Copy() t_prod.loc = seedloc @@ -89,17 +93,13 @@ user << "There are no seeds in \the [O.name]." return - if(!user.drop_item()) //couldn't drop the item - user << "\The [O] is stuck to your hand, you cannot put it in the seed extractor!" - return - - else if(seedify(O,-1, src)) + else if(seedify(O,-1, src, user)) user << "You extract some seeds." return else if (istype(O,/obj/item/seeds)) - add_seed(O) - user << "You add [O] to [src.name]." - updateUsrDialog() + if(add_seed(O)) + user << "You add [O] to [src.name]." + updateUsrDialog() return else if(user.a_intent != "harm") user << "You can't extract any seeds from \the [O.name]!" @@ -188,15 +188,14 @@ if(istype(O.loc,/mob)) var/mob/M = O.loc - if(!M.unEquip(O)) - usr << "\the [O] is stuck to your hand, you cannot put it in \the [src]!" - return + if(!M.drop_item()) + return 0 else if(istype(O.loc,/obj/item/weapon/storage)) var/obj/item/weapon/storage/S = O.loc S.remove_from_storage(O,src) O.loc = src - + . = 1 for (var/datum/seed_pile/N in piles) if (O.plantname == N.name && O.lifespan == N.lifespan && O.endurance == N.endurance && O.maturation == N.maturation && O.production == N.production && O.yield == N.yield && O.potency == N.potency) ++N.amount diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 3bc5812c90e..46b263aabc6 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -91,6 +91,7 @@ var/global/list/status_overlays_equipment var/global/list/status_overlays_lighting var/global/list/status_overlays_environ + var/health = 50 /obj/machinery/power/apc/connect_to_network() //Override because the APC does not directly connect to the network; it goes through a terminal. @@ -442,7 +443,7 @@ user << "The wires have been [panel_open ? "exposed" : "unexposed"]" update_icon() - else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card + else if (W.GetID()) // trying to unlock the interface with an ID card if(emagged) user << "The interface is broken!" else if(opened) @@ -544,14 +545,21 @@ if (opened==2) opened = 1 update_icon() + + else if(panel_open && !opened && is_wire_tool(W)) + wires.interact(user) else - if(panel_open && !opened && is_wire_tool(W)) - wires.interact(user) - if(((stat & BROKEN) || malfhack) && !opened && W.force >= 5 && W.w_class >= 3 && prob(20)) + return ..() + +/obj/machinery/power/apc/take_damage(damage, damage_type = BRUTE, sound_effect = 1) + ..() + if((malfhack || (stat & BROKEN)) && !opened) + if(damage < 10) + return + health -= damage + if(health <= 0) opened = 2 - user.visible_message("[user.name] has knocked down the APC cover with the [W.name].", \ - "You knock down the APC cover with your [W.name]!", \ - "You hear bang.") + visible_message("The APC cover is knocked down!") update_icon() /obj/machinery/power/apc/emag_act(mob/user) @@ -590,23 +598,28 @@ ..() /obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user) - user.changeNext_move(CLICK_CD_MELEE) - user.do_attack_animation(src) - user.visible_message("[user.name] slashes at the [src.name]!", "You slash at the [src.name]!") - playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) + ..() + if(malfhack || (stat & BROKEN)) + return + if(opened == 0) + if(!panel_open) + panel_open = 1 + update_icon() + visible_message("The [src.name]'s cover flies open, exposing the wires!") - if(beenhit >= pick(3, 4) && panel_open != 1) - panel_open = 1 - update_icon() - visible_message("The [src.name]'s cover flies open, exposing the wires!") + else if(panel_open && !wires.is_all_cut()) + wires.cut_all() + update_icon() + visible_message("The [src.name]'s wires are shredded!") + else if(opened == 1) + if(cell) + cell.loc = user.loc + cell.updateicon() + cell = null + visible_message("The [src.name]'s power cell flies off!") + charging = 0 + update_icon() - else if(panel_open == 1 && !wires.is_all_cut()) - wires.cut_all() - update_icon() - visible_message("The [src.name]'s wires are shredded!") - else - beenhit += 1 - return /obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = default_state) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 9ac92d78ace..419d5e2c91d 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -104,17 +104,16 @@ return if (istype(I, /obj/item/weapon/reagent_containers) && (I.flags & OPENCONTAINER) ) - . = 1 //no afterattack - if (beaker) - return 1 - else + if (!beaker) if(!user.drop_item()) return 1 beaker = I beaker.loc = src update_icon() src.updateUsrDialog() - return 0 + else + user << "There's already a container inside." + return 1 //no afterattack if(is_type_in_list(I, dried_items)) if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown)) @@ -144,14 +143,17 @@ return 1 if (!is_type_in_list(I, blend_items) && !is_type_in_list(I, juice_items)) - user << "Cannot refine into a reagent!" - return 1 + if(user.a_intent == "harm") + return ..() + else + user << "Cannot refine into a reagent!" + return 1 - user.unEquip(I) - I.loc = src - holdingitems += I - src.updateUsrDialog() - return 0 + if(user.drop_item()) + I.loc = src + holdingitems += I + src.updateUsrDialog() + return 0 /obj/machinery/reagentgrinder/attack_paw(mob/user) return src.attack_hand(user) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 1db73cad36d..128ab849252 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -28,7 +28,10 @@ qdel(src) /obj/structure/reagent_dispensers/attackby(obj/item/weapon/W, mob/user, params) - return + if(istype(W, /obj/item/weapon/reagent_containers)) + return 0 //so we can refill them via their afterattack. + else + return ..() /obj/structure/reagent_dispensers/New() create_reagents(1000) diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index b2296e9c746..df8325fea57 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -92,7 +92,7 @@ return user << "You slice the floorweld off \the [src]." Deconstruct() - return + return if(user.a_intent != "harm") if(!user.drop_item() || (I.flags & ABSTRACT)) diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index d4018d364ee..46dc22254a0 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -26,9 +26,6 @@ var/datum/events/keycard_events = new() qdel(ev) . = ..() -/obj/machinery/keycard_auth/attackby(obj/item/weapon/W, mob/user, params) - return - /obj/machinery/keycard_auth/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) From 9b458d5b6bb143b8b4e876e6b86a77a8f13a52c0 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 22:40:24 +0000 Subject: [PATCH 164/228] Automatic changelog generation for PR #17054 --- html/changelogs/AutoChangeLog-pr-17054.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17054.yml diff --git a/html/changelogs/AutoChangeLog-pr-17054.yml b/html/changelogs/AutoChangeLog-pr-17054.yml new file mode 100644 index 00000000000..8b8b5ff8e55 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17054.yml @@ -0,0 +1,7 @@ +author: coiax +delete-after: True +changes: + - rscadd: "Centcom regret to inform you that new instabilities with nearby +gas giants are causing exospheric bubbles to affect the +telecommunications processors. Please contact your supervisor for +further instructions." From 04eac2cbe626b996088c4a3872950cfbc858a30a Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Mon, 25 Apr 2016 15:59:02 -0700 Subject: [PATCH 165/228] adds explorer belt. --- .../objects/items/weapons/storage/belt.dm | 39 ++++++++++++++++++ code/modules/mining/equipment_locker.dm | 1 + icons/mob/belt.dmi | Bin 12755 -> 13127 bytes icons/obj/clothing/belts.dmi | Bin 4116 -> 8990 bytes 4 files changed, 40 insertions(+) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index c782f36e07f..70c9d7905b2 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -119,6 +119,45 @@ new /obj/item/weapon/melee/baton/loaded(src) +/obj/item/weapon/storage/belt/mining + name = "explorer belt" + desc = "A versatile belt, cherised by miners and hunters alike." + icon_state = "ebelt" //I'm doing this because I love you, syndicate son. + item_state = "ebelt" + storage_slots = 5 + max_w_class = 4 //Pickaxes are big. + can_hold = list( + /obj/item/weapon/crowbar, + /obj/item/weapon/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/wirecutters, + /obj/item/weapon/wrench, + /obj/item/device/flashlight, + /obj/item/stack/cable_coil, + /obj/item/device/analyzer, + /obj/item/weapon/extinguisher/mini, + /obj/item/device/radio, + /obj/item/clothing/gloves, + /obj/item/weapon/resonator, + /obj/item/device/mining_scanner, + /obj/item/weapon/pickaxe, + /obj/item/stack/sheet/animalhide, + /obj/item/stack/sheet/sinew, + /obj/item/stack/sheet/bone, + /obj/item/weapon/lighter, + /obj/item/weapon/storage/fancy/cigarettes, + /obj/item/weapon/reagent_containers/food/drinks/bottle, + /obj/item/stack/medical, + /obj/item/weapon/kitchen/knife, + /obj/item/weapon/reagent_containers/hypospray/medipen, + /obj/item/device/gps, + /obj/item/weapon/storage/bag/ore, + /obj/item/weapon/survivalcapsule, + /obj/item/device/t_scanner/adv_mining_scanner, + /obj/item/weapon/reagent_containers/pill, + + ) + /obj/item/weapon/storage/belt/soulstone name = "soul stone belt" diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index aea31a8d9cf..af458a83571 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -289,6 +289,7 @@ new /datum/data/mining_equipment("Hivelord Stabilizer", /obj/item/weapon/hivelordstabilizer , 400), new /datum/data/mining_equipment("Shelter Capsule", /obj/item/weapon/survivalcapsule , 400), new /datum/data/mining_equipment("GAR scanners", /obj/item/clothing/glasses/meson/gar, 500), + new /datum/data/mining_equipment("Explorer Belt", /obj/item/weapon/storage/belt/mining, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 600), new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750), diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index caafd50a9095929fee401568e69ece0d594164a0..cfef95b74d259b22b3bc9ecb658b6e984c9d5c97 100644 GIT binary patch literal 13127 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 S_%|2;fc|mscKNM`&;JK{nNFYp literal 12755 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 WMmd6S`3rsS1yEDcQmm7QNBj?+KlKv; literal 4116 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 Date: Mon, 25 Apr 2016 23:29:29 +0000 Subject: [PATCH 166/228] Automatic changelog compile --- html/changelog.html | 4475 +------------------- html/changelogs/.all_changelog.yml | 35 + html/changelogs/AutoChangeLog-pr-16940.yml | 6 - html/changelogs/AutoChangeLog-pr-16974.yml | 8 - html/changelogs/AutoChangeLog-pr-17009.yml | 6 - html/changelogs/AutoChangeLog-pr-17053.yml | 10 - html/changelogs/AutoChangeLog-pr-17054.yml | 7 - html/changelogs/AutoChangeLog-pr-17067.yml | 10 - html/changelogs/AutoChangeLog-pr-17078.yml | 4 - html/changelogs/AutoChangeLog-pr-17083.yml | 4 - 10 files changed, 65 insertions(+), 4500 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-16940.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-16974.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17009.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17053.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17054.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17067.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17078.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17083.yml diff --git a/html/changelog.html b/html/changelog.html index 137551269a0..e6e2ce06695 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,36 @@ -->
        +

        25 April 2016

        +

        Joan updated:

        +
          +
        • You can once again hit a closet or crate with an item to open it.
        • +
        +

        Kor Razharas updated:

        +
          +
        • Adds support for autoclicking.
        • +
        • The Shock Revolver has been added to RnD.
        • +
        • The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick to fire as you hold down the mouse.
        • +
        • The Research Director now starts with a box of firing pins.
        • +
        • The SABR and Stun Revolver recipes have been removed from RnD
        • +
        +

        coiax updated:

        +
          +
        • Laughter demons are like slaughter demons, but they tickle people to death
        • +
        • Slaughter demons are no longer able to cast spells while phased.
        • +
        • Wizards can now speak while ethereal, but still cannot cast spells while ethereal.
        • +
        • Centcom's "drone expert" reports that drones vision filters have been upgraded to include the option of making all beings appear as harmless animals. info: As always, all drone filters are togglable.
        • +
        • As a sign of friendship between the Free Golems and Centcom, they have modified Centcom's jaunter to be worn around a user's waist, which will save them from falling to their death in a chasm.
        • +
        • The Golems warn that these modifications have created a risk of accidental activation when exposed to heavy electromagnetic fields.
        • +
        • Renamed hivelord stabilizer to stabilizing serum.
        • +
        • Centcom regret to inform you that new instabilities with nearby gas giants are causing exospheric bubbles to affect the telecommunications processors. Please contact your supervisor for further instructions.
        • +
        • The Janitor's Union has mandated additional features to station light replacer devices.
        • +
        • The light replacer now can be used on the floor to replace the bulbs of any lights on that tile.
        • +
        • The light replacer now eats replaced bulbs, and after a certain number of bulb fragments (four) will recycle them into a new bulb.
        • +
        • The description of the light replacer is now more informative.
        • +
        • Clown mask appearance toggle now has an action button.
        • +
        +

        23 April 2016

        Joan updated:

          @@ -565,4451 +595,6 @@
        • Wall-mounted flasher frames now have icons.
        • Upgraded resonators now have an inhand sprite.
        - -

        26 March 2016

        -

        CPTANT updated:

        -
          -
        • Nanotrasen found a new taser supplier. The new tasers hold 12 shots, down people with 2 hits and hybrid tasers now have a light laser attached.
        • -
        -

        CoreOverload updated:

        -
          -
        • Sorting junctions now support multiple sorting tags.
        • -
        -

        Fox McCloud updated:

        -
          -
        • Fixes Shadowlings not being spaceproof to pressure
        • -
        • Fixes being able to receive multiple spells as a Lesser Shadowling
        • -
        -

        Joan updated:

        -
          -
        • Adds assassin holoparasites, which do low damage and take full damage, but can go invisible, causing their next attack to do massive damage and ignore armor.
        • -
        • Assassin holoparasite stealth will be broken by attacking or taking damage, which will briefly prevent the parasite from recalling.
        • -
        • Traitor holoparasite injectors include this parasite type.
        • -
        -

        Kor updated:

        -
          -
        • There are a couple new lavaland ruins, including one with a new ghost role.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • The RD's reactive teleport armor now has a cooldown between teleports. EMPing it will cause it to shut down and have a longer cooldown applied.
        • -
        • Bolas, both reinforced and regular, now have newer, sexier sprites.
        • -
        - -

        24 March 2016

        -

        Iamgoofball updated:

        -
          -
        • CLF3 now melts, burns, and destroys floors a lot more often, as it should be.
        • -
        • CLF3 now makes 3x3 fireballs on tiles it touches now, instead of a single fireball.
        • -
        -

        Joan updated:

        -
          -
        • Lightning Holoparasites will actually shock relatively often instead of 'sometimes, maybe, if you're really lucky'
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Sand now fits in your pockets
        • -
        • Sand can now be thrown into people's eyes, doing slight stamina damage, making their vision slightly blurry, and making them stumble when they walk for a short time.
        • -
        -

        RemieRichards updated:

        -
          -
        • BEES
        • -
        • Hydroponics can now manage bee colonies, bees produce honeycombs that can be grinded to obtain honey, a decent nutriment+healing chemical
        • -
        • Hydroponics can inject a queen bee with a syringe of a reagent to alter her DNA to match that reagent, meaning all honeycombs produced will contain that reagent in small amounts
        • -
        • Bees with reagents will attack with that reagent
        • -
        -

        Xhuis updated:

        -
          -
        • Alcohol has received multiple tweaks.
        • -
        • Drunkenness will now be displayed on examine as long as the target's face is not hidden, ranging from a slight flush to being a completely drunken wreck. This also helps to measure alcohol poisoning, although the appearance will remain for thirty seconds after the alcohol leaves the imbiber's bloodstream.
        • -
        • Alcohol poisoning now has different effects. It begins with standard things such as confusion, dizziness, and slurring, but eventually escalates to constant vomiting, blacking out, and toxin damage.
        • -
        • Drinks now have a wide variety of alcoholism. Grog is barely a drink whatsoever, for instance, but Manly Dorf will completely floor you with too much consumption. Note that drinks based off of whiskey and vodka are the hardest, whereas beer and wine are the softest.
        • -
        • The speed of alcohol poisoning has been slightly reduced.
        • -
        • Some drinks have received unique effects. Experiment!
        • -
        • A new base alcohol joins the lineup! Absinthe has been added, and is very strong.
        • -
        • Whiskey Sour, made with Whiskey, Lemon Juice, and Sugar, simply expands the existing whiskey-based lineup.
        • -
        • Fetching Fizz, made with Nuka-Cola and Iron, will pull all nearby ores in the direction of the imbiber.
        • -
        • Hearty Punch, made with Brave Bull, Syndicate Bomb, and Absinthe, will provide extreme healing in critical condition.
        • -
        • Bacchus' Blessing, made with four of the most powerful alcohols on the station, is over three times stronger than any other alcohol on the station. Consume in small amounts or risk death.
        • -
        - -

        23 March 2016

        -

        Iamgoofball updated:

        -
          -
        • Cargo now works off of Credits.
        • -
        • Cargo now plays the Stock Market.
        • -
        • Buy Low, Sell High
        • -
        - -

        21 March 2016

        -

        CoreOverload updated:

        -
          -
        • You can now construct and deconstruct wall mounted flashes by using a wrench on empty wall flash. A crate with four linked "flash frame - flash controller" pairs is added to cargo.
        • -
        -

        Joan updated:

        -
          -
        • Explosive Holoparasites now have a 33% chance to explosively teleport attacked targets, doing damage to everyone near the target's appearance point.
        • -
        • Explosive Holoparasite bombs can now detonate when living mobs bump them.
        • -
        • Adds lightning holoparasites, which have medium damage resist, a weak attack, have a lightning chain to their summoner, and apply lightning chains when attacking targets.
        • -
        • Lightning chains shock everyone nearby, doing low burn damage. This is excluding the parasite and summoner; chains will shock enemies they're attached to.
        • -
        • Holoparasites can now smash tables and lockers.
        • -
        -

        PKPenguin321 && !JJRcop updated:

        -
          -
        • Milk, which is good for your bones, is now extra beneficial to species that are mostly comprised of bones.
        • -
        -

        kingofkosmos updated:

        -
          -
        • The backpack close-button has got a visual overhaul.
        • -
        • All storage items can be closed by clicking on them again.
        • -
        - -

        20 March 2016

        -

        Joan updated:

        -
          -
        • Nar-Sie will now corrupt airlocks, tables, windows, and windoors.
        • -
        • Corrupted airlocks have no access restrictions.
        • -
        • Nar-Sie no longer causes destruction while moving around in favor of additional corruption.
        • -
        • The surplus crate is less likely to give you eight space suits.
        • -
        • Nukeops can once again buy noslips. The nuke op magboots are still better than noslips, buy them instead.
        • -
        -

        Kor updated:

        -
          -
        • Runtime now has a chance to spawn with a more classic look.
        • -
        • Killing a necropolis tendril will now drop a chest full of spooky loot.
        • -
        • Killing a necropolis tendril will now cause the ground to collapse around it after 5 seconds.
        • -
        - -

        19 March 2016

        -

        Joan updated:

        -
          -
        • Xray lasers now have unique inhands.
        • -
        • Xray lasers have been recolored to match R&D equipment.
        • -
        -

        Zombehz updated:

        -
          -
        • Adds 'chicken' nuggets* in 4 shapes, including regular, star, corgi, and lizard. it. They are made with one cutlet of meat.
        • -
        - -

        17 March 2016

        -

        CoreOverload updated:

        -
          -
        • The recent jetpacks nerf is finally reverted. Turbo mode is dead and stabilization is once again can be toggled on and off.
        • -
        • Added a new chest cyberimplant: implantable thrusters set. This implant is a built-in jetpack that has no stabilization mode at all and can use gas from environment (if 30+ kPa) or from internals. It can also use plasma from plasma vessel organ, if you have one.
        • -
        -

        Joan updated:

        -
          -
        • Moved the security hud's icons down slightly to allow it to coexist with medical and antag huds.
        • -
        -

        Shadowlight213 updated:

        -
          -
        • HOG deity can now be heard by all of its followers!
        • -
        • The prophet no longer needs to wear his hat to speak with his deity.
        • -
        • The prophet's hat and staff have a new functionality! Use the staff inhand to reveal hidden structures.
        • -
        • Deities can now hide their structures from view! Pretend to be a book club when sec bursts in. experiment:Only enemy prophets or your own deity can reveal these structures and they are disabled when hidden.
        • -
        - -

        15 March 2016

        -

        Cuboos updated:

        -
          -
        • Modded the current door sound and added a few new ones, unique sound for closing, bolting up/down and a nifty denied sound.
        • -
        -

        Isratosh updated:

        -
          -
        • Security flashlights can now be attached to the bulletproof helmets.
        • -
        -

        Joan updated:

        -
          -
        • Resource blobs produce resources for their overmind slightly slower for each resource blob their overmind has.
        • -
        • Blob overminds get one free chemical reroll.
        • -
        • Blob overminds can no longer place resource and factory blobs out of range of cores and nodes, unless they Toggle Node Requirement off. It is on by default.
        • -
        • Blob UI buttons now have tooltips.
        • -
        • Cores and nodes will expand slightly slower.
        • -
        • Blob Chemicals no longer trigger effects on dead mobs.
        • -
        • Shifting Fragments has a lower chance to move shields with normal expansion and will no longer shift blobs to the location of a dying blob.
        • -
        • Flammable Goo no longer applies fire to tiles with blobs.
        • -
        • Electromagnetic Web has a slightly higher EMP range.
        • -
        -

        Kor updated:

        -
          -
        • Hunger was accidentally disabled sometime back in October 2015. We finally noticed and fixed it.
        • -
        -

        Kor (And all the lovely maintainers and spriters who helped me along the way) updated:

        -
          -
        • Adds a new, lava themed planet to mine on,with randomly generated rivers of lava and islands of volcanic rock. This mine is used on Box and Metastation. Other mappers may enable it at their discretion.
        • -
        • Added deadly ash storms to mining.
        • -
        • Added slightly deadlier variants of mining mobs to lavaland, with sprites done by my girlfriend.
        • -
        • Added portable survival capsules to mining equipment lockers. Don't forget these, or you might get caught out by a storm. You may purchase more at the venders.
        • -
        • Added randomly loaded ruins to mining. These maps contain new and unique items not seen elsewhere in thegame. There are around a dozen of them added with the "release" of lavaland, though I plan for many more.
        • -
        • Some ruins contain sleepers which allow you to spawn as various roles, such as survivors of a shuttle crash stranded in the wilderness. You can find these sleepers in the orbit list.
        • -
        • You can now fly the abandoned white ship to lavaland.
        • -
        -

        LanCartwright updated:

        -
          -
        • Choking now deals damage based on virus' Stage speed and virus Stealth.
        • -
        • Fever heats the body based on Transmittability and Stage speed.
        • -
        • Spontaneous Combustion now adjusts firestacks based on stage speed minus Stealth.
        • -
        • Necrotizing Fasciitis now deals damage based on lower Stealth values.
        • -
        • Toxic Filter now heals based on Stage speed.
        • -
        • Deoxyribonucleic Acid Restoration now heals brain damage based on Stage speed minus Stealth.
        • -
        • Shivering now chills based on Stealth and Resistance.
        • -
        • Proc for the total stage speed of a virus' symptoms.
        • -
        • Proc for the total stealth of a virus' symptoms.
        • -
        • Proc for the total resistance of a virus' symptoms.
        • -
        • Proc for the total transmittance speed of a virus' symptoms.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Lag has been removed from the following systems: mob life()/virus process, machine/object/event processing, atmos, deletion subsystem, lighting, explosions, singularity's eat(), timers, wall smoothing, mass var edit, mass proc calls(and all of sdql2), map loader, and the away mission loader.
        • -
        • Removed limit on bomb cap of 32,64,128, it can now go to the MOON.
        • -
        • Minimap generation is now a config option that defaults to off so coders don't have to wait for it to generate to test their code, server operators should note that they need to enable it on production servers that want minimap generation.
        • -
        • if you find any things that still lag, please report them to MrStonedOne for lag removal.
        • -
        • I'm gonna take this time to shill out that, Lummox JR, byond's only dev, coded the tool that made this change possible, he lives off of byond membership donations, if you like the lag removal, become a byond member or at least throw 5 bucks byond's way for doing this.
        • -
        • Feel free to ask for bomb cap removals when solo antag, but remember, the later in the round it is, the more likely you'll get it.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Scooters and skateboards have been added.
        • -
        • Use rods to make a scooter frame. From there, apply metal to make wheels, creating a skateboard. Apply a few more rods to make a full scooter. You can also use tablecrafting to create them, their recipes can be found under the Misc. category.
        • -
        • Each step of scooter deconstruction is performed with either a wrench or a screwdriver, depending on the step.
        • -
        -

        xxalpha updated:

        -
          -
        • Scrubber clog event now ejects cockroaches.
        • -
        - -

        13 March 2016

        -

        Dorsisdwarf updated:

        -
          -
        • Adds Robo-Doctor board (The Hippocratic Oath: Now on your beepbot)
        • -
        • Adds Reporter board (The truth will set ye free (termsandconditionsmayapply))
        • -
        • Adds Live and Let Live board
        • -
        • Adds Thermodynamics as a dangerous board.
        • -
        -

        Impisi updated:

        -
          -
        • Improvised shells now deal more far more damage but are more inaccurate.
        • -
        • Overloaded shells now require liquid plasma in addition to black powder. Shells now fire explosive pellets that are good at hurting you and everything in front of you.
        • -
        -

        Joan updated:

        -
          -
        • Blob gamemode blobs will no longer burst from people.
        • -
        • Instead, the blob gamemode spawns overminds, which can place their blob core underneath them in an unobserved area.
        • -
        • The overminds can, until they have placed a blob core, move to any non-space, non-shuttle tile.
        • -
        • If the overminds fail to place a blob core within a time limit, it will be automatically placed for them at a random blob spawnpoint.
        • -
        • The time before the overmind automatically places the core is slightly lower than the previous average time it'd take a blob to burst.
        • -
        - -

        12 March 2016

        -

        Joan updated:

        -
          -
        • Blobbernauts and blob spores can now move near blob tiles in no gravity.
        • -
        • Boiling Oil does slightly more damage and takes slightly less damage when extinguished.
        • -
        • Flammable Goo now applies firestacks to targets, but does not ignite them.
        • -
        -

        Jordie0608 updated:

        -
          -
        • Show Server Revision will now tell you if a PR is test merged currently.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Added reinforced bolas. They do a very short stun in addition to normal functions, and take twice as long to break out of when compared to regular bolas.
        • -
        • The traitor's Throwing Star Box has been made into the Throwing Weapons Box. It now contains two reinforced bolas in addition to its old contents. It also costs 5 TCs, down from 6.
        • -
        -

        tkdrg updated:

        -
          -
        • The detective's revolver now takes three full seconds to reload.
        • -
        -

        xxalpha updated:

        -
          -
        • Detective can be a Traitor/Double Agent.
        • -
        • Removed Detective's access to security lockers and secbots.
        • -
        • Removed bowman's headset from Detective's locker.
        • -
        • Box Brig Security Office and Locker Room require a higher access level (Security Officer level).
        • -
        - -

        10 March 2016

        -

        Joan updated:

        -
          -
        • The blob can now be shocked by the tesla.
        • -
        • Strong blobs are now much more resistant to brute damage.
        • -
        • Tweaks blob reagents;
        • -
        • Removes Ripping Tendrils.
        • -
        • Removes Draining Spikes.
        • -
        • Cryogenic Liquid does less burn damage.
        • -
        • Pressurized Slime does less brute damage.
        • -
        • Reactive Gelatin now has a lower minimum damage.
        • -
        • Poisonous Strands applies its damage over a longer period of time.
        • -
        • Sporing Pods now does much less damage, and is less likely to produce spores when killed.
        • -
        • Regenerative Materia, Hallucinogenic Nectar, and Envenomed Filaments do less toxin damage.
        • -
        • Energized Fibers no longer heals when hit with stamina damage, and is instead immune to the tesla.
        • -
        • Boiling Oil now takes damage from extinguisher blasts. Boiling Oil blobbernauts, however, do not.
        • -
        • Replicating Foam now takes increased brute damage and when expanding from damage, will not expand again.
        • -
        • Flammable Goo takes 50% increased burn damage, from 30%.
        • -
        • Explosive Lattice now takes much higher damage from fire, flashbangs, and the tesla.
        • -
        • Electromagnetic Web takes full brute damage, lasers will now one-hit normal blobs, and the death EMP is smaller.
        • -
        - -

        09 March 2016

        -

        Joan updated:

        -
          -
        • Blobs can now attack people that end up on top of blob tiles with Left-Click or the Expand/Attack Blob verb.
        • -
        • The Toxin Filter virology symptom now heals 4-8 toxin damage instead of 8-14.
        • -
        • The Damage Converter virology symptom will now do toxin damage for each limb healed.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Centcom has improved the the tesla generator! The generated tesla energy balls should now be more stable! Growing quicker and dissipating slower. It seems to also move around a touch more but that shouldn't be an issue as the the tesla escaping containment is unheard of!
        • -
        - -

        07 March 2016

        -

        WJohnston updated:

        -
          -
        • Queens and praetorians have new sprites!
        • -
        - -

        05 March 2016

        -

        CoreOverload updated:

        -
          -
        • Cyborg tools (screwdriver, crowbar, wrench, etc) now have new fancy sprites.
        • -
        • Said cyborg tools have received a buff and are now two times faster than their non-cyborg counterparts.
        • -
        -

        Joan updated:

        -
          -
        • Replicating Foam has lower expand chances when hit and on normal expand.
        • -
        • Shifting Fragments will no longer try and fail to swap with invalid blobs when hit.
        • -
        • Electromagnetic Web no longer always EMPs targets, instead doing it at a 25% chance.
        • -
        • Synchronous Mesh now only takes bonus damage from fire, bombs, and flashbangs.
        • -
        • Synchronous Mesh no longer tries to split damage to blob cores or nodes. Cores and nodes still split damage to nearby blobs, however.
        • -
        • Blobbernauts now attack much slower.
        • -
        • Blobbernauts are now maximum one per factory, reduce that factory's health drastically, and die slowly if that factory is destroyed.
        • -
        • Factories must still have above 50% health to produce blobbernauts.
        • -
        - -

        03 March 2016

        -

        Joan updated:

        -
          -
        • Blobbernauts now die slowly when not near a blob.
        • -
        • Blobbernauts can now see their health and the core health of the overmind that created them.
        • -
        - -

        02 March 2016

        -

        CoreOverload updated:

        -
          -
        • A new "breathing tube" mouth implant. It allows you to use internals without a mask and protects you from being choked. It doesn't protect you from the grab itself.
        • -
        • Arm cannon implants are now actually implanted into the arms, not into the chest.
        • -
        • Arm cannons have an action button again.
        • -
        • Heart removal is no longer instakill. It puts you in condition similar to heart attack instead. You can fix it by installing a new heart and applying defibrillator if it wasn't beating.
        • -
        • You can now make a stopped heart beat again by squeezing it. It will stop beating very soon, so you better be quick if you want to install it without using defibrillator.
        • -
        • There is now a chance to recover some of the internal organs when butchering aliens or monkeys.
        • -
        • A new organ - lungs. When removed, it will give you breathing and speaking troubles.
        • -
        • Human burgers are, once again, named after the generous meat donors that made them possible.
        • -
        -

        Fox McCloud updated:

        -
          -
        • Gibbing mobs will now throw their internal organs
        • -
        -

        Gun Hog updated:

        -
          -
        • Ghost security HUDs now show arrest status and implants.
        • -
        • The Alien queen, upon her death, will now severely weaken the remaining alien forces.
        • -
        -

        Joan updated:

        -
          -
        • Replicating Foam has a lower chance to expand when hit.
        • -
        • Penetrating Spines is now purple instead of sea green.
        • -
        • Blobbernauts now have a brief animation when produced.
        • -
        • Adds five new blob chemicals. This is a total of 25 blob chemicals. Will it ever stop?
        • -
        • Draining Spikes, which is reddish pink and does medium brute damage, and drains blood from targets.
        • -
        • Shifting Fragments, which is tan and does medium brute damage, and shifts position when attacked.
        • -
        • Flammable Goo, which is reddish orange and does low burn and toxin damage, and when hit with burn damage, emits a burst of flame. It takes more damage from burn, though.
        • -
        • Poisonous Strands, which is lavender and does burn, fire, and toxin damage over a few seconds, instead of instantly.
        • -
        • Adaptive Nexuses, which is dark blue and does medium brute damage, and reaps 5-10 resources from unconscious humans, killing them in the process.
        • -
        • Confused about what the chemical you're fighting does? Look at https://tgstation13.org/wiki/Blob#Blob_Chemicals
        • -
        • Adds 'Support and Mechanized Exosuits' and 'Space Suits and Hardsuits' categories to the syndicate uplink.
        • -
        • Nuke op reinforcements and mechs have been moved to the first category. Syndicate space suits and hardsuits have been moved to the second category.
        • -
        • Traitors can now properly buy the blood-red hardsuit for 8 TC.
        • -
        • Nuke ops can no longer buy the blood-red hardsuit, as the elite hardsuit costs the same amount while being absolutely better.
        • -
        -

        Kor updated:

        -
          -
        • Added door control remotes. Clicking on doors while holding them will let you open/bolt/toggle emergency access depending on the mode. They will not work on doors that have their IDscan disabled (rogue AIs take note!)
        • -
        • The Captain, RD, CE, HoS, CMO, and QM all now have door control remotes in their lockers.
        • -
        -

        LanCartwright updated:

        -
          -
        • Adds Uranium to Virus reaction. Will create a random symptom between 5 and 6 when mixed with blood.
        • -
        • Adds Virus rations, which creates a level 1 symptom when mixed with blood.
        • -
        • Adds Mutagenic agar, which creates a level 3 symptom.
        • -
        • Adds Sucrose agar which creates a level 4 symptom.
        • -
        • Adds Weak virus plasma, which creates a level 5 symptom.
        • -
        • Adds Virus plasma, which creates a level 6 symptom.
        • -
        • Adds Virus food and Mutagen reaction, creating Mutagenic agar.
        • -
        • Adds Virus food and Synaptizine reaction, creating Virus rations.
        • -
        • Adds Virus food and Plasma reaction, creating Virus plasma.
        • -
        • Adds Synaptizine and Virus plasma reaction, creating weakened virus plasma.
        • -
        • Adds Sugar and Mutagenic agar reaction, creating sucrose agar.
        • -
        • Adds Saline glucose solution and Mutagenic agar reaction, creating sucrose agar.
        • -
        • Adds Viral self-adaptation symptom, which boosts stealth and resistance, but lowers stage speed.
        • -
        • Adds Viral evolutionary acceleration, which bosts stage speed and transmittability, but lowers stealth and resistance.
        • -
        • Flypeople now vomit when they eat nutriment.
        • -
        • Flypeople can now suck the vomit off the floor to gain it's nutritional content.
        • -
        • Flypeople now must suck puke chunks and vomit to fill themselves of food content.
        • -
        -

        Malkevin updated:

        -
          -
        • Sec officers have two sets of cuffs again (one on spawn, one in locker)
        • -
        • Done some optimisation of sec spawn equipment lists and lockers to remove some of the repetitive clicking, sec belts are now preloaded with equipment.
        • -
        • HoS has a full baton instead of the collapsible one
        • -
        • Detective has a classic police baton and pepper spray instead of the collapsible baton (someone made police batons shit, so don't get overly happy)
        • -
        • pop scaled additional lockers spawned were the wrong type, changed them to the right type which has batons now (actually belts now that I've changed them).
        • -
        -

        MrStonedOne updated:

        -
          -
        • Suit sensors will now favor higher levels for starting amount with the exception of the max level, that remains unchanged.
        • -
        • Old odds: 25% off 25% binary lifesigns 25% full lifesigns 25% coordinates
        • -
        • New odds: 12.5% off 25% binary lifesigns 37.5% full lifesigns 25% coordinates
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Bolas are now in the game. They're a simple device fashioned from a cable and two weights on the end, designed to entangle enemies by wrapping around their legs upon being thrown at them. The victim can remove them rather quickly, however.
        • -
        • Bolas can be crafted by applying 6 metal sheets to cablecuffs. They can also be tablecrafted.
        • -
        -

        Sestren413 updated:

        -
          -
        • Botanists have access to a new banana mutation now, bluespace bananas. These will teleport anyone unfortunate enough to slip on their peel.
        • -
        -

        Shadowlight213 updated:

        -
          -
        • A wave of dark energy has been detected in the area. Corgi births may be affected.
        • -
        -

        Shadowlight213 and Robustin updated:

        -
          -
        • "Old Cult is back baby!"
        • -
        • "Cult survival objective disabled"
        • -
        • "Imbuing talismans now consumes the imbue rune"
        • -
        • "Invoking the stun talisman now hurts the cultist more"
        • -
        • "The stun talisman duration is nerfed by 10%, mute is nerfed by 60% but a stutter and special new slur effect will last much longer"
        • -
        • "The old cult has retained the rune of time stop, now requiring 3 cultists to invoke"
        • -
        • "New Cult is removed!"
        • -
        -

        bgobandit updated:

        -
          -
        • CentComm has been informed that cargo is receiving new forms of contraband in crates. Remember, Nanotrasen has a zero-tolerance contraband policy!
        • -
        -

        lordpidey updated:

        -
          -
        • New virology symptom, projectile vomiting. It is a level four symptom.
        • -
        - -

        26 February 2016

        -

        Iamgoofball updated:

        -
          -
        • Adds the Chameleon Kit to uplinks for 4 telecrystals containing a Chameleon Jumpsuit/Exosuit/Gloves/Shoes/Glasses/Hat/Mask/Backpack/Radio/Stamp/Gun/PDA.
        • -
        • The chameleon gun fires no-damage lasers regardless of what it looks like.
        • -
        • The Voice Changer has been merged into the Chameleon Mask.
        • -
        • No-slip shoes have been combined into Chameleon Shoes.
        • -
        • Space Ninjas no longer have voice changing capabilities.
        • -
        • The Chameleon Jumpsuit has been replaced by the Chameleon Kit in the uplink for the same price.
        • -
        • All chameleon clothing items have lost EMP vulnerability.
        • -
        • Chameleon equipment provides very minor armor.
        • -
        • Agent ID Cards can now use chameleon technology to look like any other ID card.
        • -
        • The Chameleon Kit is actually purchasable now. It doesn't give a single chameleon jumpsuit anymore.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • The kitchen vendor now contains two sharpening blocks.
        • -
        • Only items that are already sharp (such as fire axes, knives, etc) can be sharpened. Items used on sharpening blocks become sharper and deadlier. The sharpening blocks themselves can only be used once, and you can only sharpen items once.
        • -
        • The EMP kit has been buffed. It now contains five EMP grenades, up from two.
        • -
        • The EMP implant found in the EMP kit has been buffed. It now has three uses, up from two.
        • -
        - -

        24 February 2016

        -

        CPTANT updated:

        -
          -
        • stamina regeneration is now 50% faster.
        • -
        -

        Joan updated:

        -
          -
        • Revenants now have an essence display on their HUD
        • -
        • Revenants retain the essence cap from the previous revenant when reforming, minus any perfect souls.
        • -
        • Revenants can now toggle their night vision.
        • -
        • Revenant Defile has one tile more of range, but does less damage to windows.
        • -
        • Revenant Blight kills space vines and glowshrooms slightly more rapidly.
        • -
        • Delays before appearing when harvesting are slightly randomized.
        • -
        • Revenant fluff objectives have been changed to be slightly more interesting.
        • -
        -

        RemieRichards updated:

        -
          -
        • Cursed heart item for wizards, allows them to heal themselves in exchange for having to MANUALLY beat their heart every 6 seconds. Heals 25 brute/burn/oxy damage per correctly timed pump.
        • -
        -

        Steelpoint updated:

        -
          -
        • Syndicate engineers have reinforced the exterior of their stealth attack ships. Nuclear Operative ship hull walls are now, once again, indestructible.
        • -
        • In addition Syndicate engineers had the opportunity to revamp the interior of stealth attack ships. The inside of Op ships now has a slightly new layout, including a expanded medbay, as well as additional medical and explosive equipment.
        • -
        • Thanks to covert Syndicate operatives, strike teams can now bring the stealth attack ship within very close proximity to the station codenamed 'Boxstation'. A new ship destination labeled 'south maintenance airlock' is now available to Op strike teams.
        • -
        -

        phil235 updated:

        -
          -
        • Holo tape is replaced by holo barriers.
        • -
        • The action button of gas tanks and jetpacks now turn green when you turn your internals on.
        • -
        - -

        20 February 2016

        -

        CPTANT updated:

        -
          -
        • Due to new crystals Nanotrasen lasers weapons may now set you on FIRE.
        • -
        -

        Joan updated:

        -
          -
        • Blobbernauts and blob spores now have a visual healing effect when being healed by the blob.
        • -
        -

        xxalpha updated:

        -
          -
        • New event: Portal Storm.
        • -
        • Kinetic accelerators now reload automatically.
        • -
        - -

        19 February 2016

        -

        AnturK updated:

        -
          -
        • Chairs and stools can now be picked up and used as weapons by dragging them over your character.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • The cleanbot uprising has begun.
        • -
        • Emagged cleanbots are much scarier now. Standing on top of one will yield very devastating results, namely in the form of powerful flesh-eating acid.
        • -
        - -

        18 February 2016

        -

        Kor updated:

        -
          -
        • Four more chaplain weapon options have been added: hanzo steel, light energy sword, dark energy sword, and monk's staff.
        • -
        - -

        17 February 2016

        -

        Fox McCloud updated:

        -
          -
        • Laser eyes mutation no longer drains nutrition
        • -
        -

        Joan updated:

        -
          -
        • The sleeping carp gang no longer has special equipment and an inability to use pneumatic cannons.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • The traitor surgery bag now costs 3 TC, down from 4.
        • -
        -

        Zerrien updated:

        -
          -
        • adds unique icons for the two medical patch types
        • -
        - -

        14 February 2016

        -

        Joan updated:

        -
          -
        • Blobbernauts can now speak to overminds and other blobbernauts with :b
        • -
        • Blobs can now expand onto lattices and catwalks.
        • -
        • Blob expansion on space tiles with no supports is much slower.
        • -
        • Blob Sorium and Dark Matter now have less range on targets with bio protection.
        • -
        • Blob Sorium does slightly less damage.
        • -
        - -

        13 February 2016

        -

        Buggy123 updated:

        -
          -
        • You can now build cable coils using the autolathe.
        • -
        -

        Fox McCloud updated:

        -
          -
        • Fixes the sleeping carp martial arts grab not being an instant aggressive grab
        • -
        -

        KazeEspada updated:

        -
          -
        • New backpack options available! New options include: Department Bags, Leather Satchels, and Dufflebags!
        • -
        -

        Kor updated:

        -
          -
        • Chainsaw sword, force weapon, and war hammer have all been added as Chaplain weapon options.
        • -
        -

        Malkevin updated:

        -
          -
        • Tracking implants have been upgraded. The old clunky manually adjusted number system has been replaced with an automated ID scanner, this will show the implant carrier's name on both the Prisoner Management Console and the hand tracker. Happy deep striking!
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Traitor EMP kits have had their cost reduced from 5 to 2, and no longer contain the EMP flashlight. rcsadd: EMP flashlights can now be bought separately for 2 TCs.
        • -
        -

        Zerrien updated:

        -
          -
        • Conveyor pieces can be placed as corner pieces when building in non-cardinal directions.
        • -
        • Using a wrench on a conveyor rotates it while in place.
        • -
        -

        neersighted updated:

        -
          -
        • Gibtonite can now be pulled.
        • -
        • Slowdown factors are ignored when in zero gravity.
        • -
        -

        phil235 updated:

        -
          -
        • Brains can no longer be blinded.
        • -
        • Fixes brain being immortal. They are immune to everything but melee weapon attacks. Brains not inside a MMI can now be attacked just like MMIs. Damaged brain can't be put into a robot, they can still be put inside a brainless humanoid corpse and cloned, but deffibing the corpse always fails (can't revive someone with a brain beaten to a pulp).
        • -
        - -

        12 February 2016

        -

        Kor updated:

        -
          -
        • Malf AIs can now get the objective to have a robot army by the end of the round.
        • -
        • Malf AIs can now get the objective to ensure only human crew (no mutants) are on the shuttle at round end.
        • -
        • Malf AIs can now get the objective to prevent a crewmember from escaping the station, while requiring that crewmember still be alive.
        • -
        -

        neersighted updated:

        -
          -
        • Cybernetic implants purchased from the uplink now include a free autoimplanter!
        • -
        -

        octareenroon91 updated:

        -
          -
        • You can no longer kill yourself with the SORD
        • -
        • Suicide attempts with the SORD will inflict 200 stamina damage. You will only die of shame.
        • -
        • Cleanup to suicide verb code.
        • -
        - -

        11 February 2016

        -

        neersighted updated:

        -
          -
        • Remove all cyborg jetpacks... They were awful...
        • -
        • Adds borg ion thrusters, which are available as an upgrade module for any borg.
        • -
        • Jetpack stabilizers are always on, but now we have...
        • -
        • Jetpack turbo mode, to move at sanic speed in space.
        • -
        - -

        10 February 2016

        -

        Joan updated:

        -
          -
        • Blob mobs now heal for 2.5% of their maxhealth when blob_act()ed, basically whenever they're on blobs near a node or the core.
        • -
        • Blob expansion no longer has a chance to fail inversely proportional with the expanding blob's health. Blobs still, however, expand at roughly the same rate as they do currently.
        • -
        • Adds five new blob chemicals.
        • -
        • Adds Penetrating Spines, which is sea green and does brute damage through armor. The damage can still be reduced by bio protection.
        • -
        • Adds Explosive Lattice, which is dark orange and does brute damage to all mobs near the target. Explosive Lattice is very resistant to explosions.
        • -
        • Adds Cyclonic Grid, which is a light blueish green and does oxygen damage, in addition to randomly throwing or pulling nearby objects.
        • -
        • Adds Zombifying Feelers, which is a fleshy zombie color and does toxin damage, in addition to killing and reviving unconscious humans as blob zombies.
        • -
        • Adds Regenerative Materia, which is light pink and does toxin damage, in addition to making the attacked mob think it is at full health.
        • -
        • Tweaks some of the existing blob chemicals slightly.
        • -
        • Sporing Pods can produce spores when killed by damage less than 21, from less than 20. This means lasers can produce spores.
        • -
        • Reactive Gelatin has a slightly higher maximum damage and will attack the nearby area when hit with brute damage projectiles, from just when attacked by brute damage in melee.
        • -
        • Sorium, Dark Matter, and the new Cyclonic Grid will not throw mobs with the 'blob' faction, such as blobbernauts and spores.
        • -
        -

        Kor updated:

        -
          -
        • The chaplain can now transform the null rod into a holy weapon of his choice by using it in hand. Each one has different strengths and drawbacks.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Tesla balance changes
        • -
        • Tesla will now require increasingly more energy to trigger new orbiting balls. First ball comes with 32 energy (down from 300), fourth requires 256 (down from 1200), and so on and on, doubling with each new ball. Balls after 7 are increasingly harder to get than before, whereas balls before 6 are easier to get.
        • -
        • MULTIBOLT IS BACK!
        • -
        • Be warned that in multibolt all but 1 primary bolt now have a random shocking range, meaning they may still target a close human over a far away grounding rod as the rod may be out of range.
        • -
        • Power output of tesla massively dropped, it should no longer put out almost twice the power of a stage 3 singulo with maxed collectors without any balls, you'll need at least 3 balls for that now.
        • -
        • Tesla can now lose power, causing ball count to drop. Tesla will never shrink out of existence, just lose its balls.
        • -
        • Tesla is now more likely to head in the direction of the thing it last zapped.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Chameleon Jumpsuits now have slight melee, bullet, and laser protection.
        • -
        • The armor values for security helmets, caps, and berets have all been brought in line. Consequently, helmets and berets are a teeny bit better, and caps now have the slight bomb protection that the other two had.
        • -
        • The time needed to complete most tablecrafting recipes has been cut in half to make tablecrafting less annoying to use.
        • -
        -

        Shadowlight213 updated:

        -
          -
        • pAI controlled mulebots can now run people over.
        • -
        • Mulebot health has been greatly decreased.
        • -
        -

        neersighted updated:

        -
          -
        • Horizontal (lying) mobs now fit into crates
        • -
        • Mobs may now be stuffed into crates, as with lockers
        • -
        • Stuffing into a locker deals a mild stun (the same as tabling)
        • -
        -

        octareenroon91 updated:

        -
          -
        • New designs can now be added to Autolathes via a design disk. Simply use a disk containing a suitable design on your autolathe.
        • -
        - -

        09 February 2016

        -

        AnturK updated:

        -
          -
        • Syndicate Operatives can now buy bags full of plastic explosives for 9 TC.
        • -
        -

        Gun Hog updated:

        -
          -
        • "Nanotrasen has drafted a design for an exosuit version of the medical nanite projector normally issued to its Emergency Response Personnel. With sufficient research, a prototype may be fabricated for field testing!"
        • -
        -

        incoming5643 updated:

        -
          -
        • The wizard spell wild shapeshift has been made less terrible.
        • -
        -

        neersighted updated:

        -
          -
        • Internals tanks now provide an action button
        • -
        • Jetpacks now emit the gas consumed for propulsion onto their turf
        • -
        • Jetpacks no longer have object verbs
        • -
        • tgui no longer has internals buttons
        • -
        • Malf AI's flood ability now correctly sets vent pressure bounds -- the results are devastating... Try it!
        • -
        - -

        08 February 2016

        -

        Incoming5643 updated:

        -
          -
        • Poly will now speak a line or emote when pet.
        • -
        • Poly now responds to getting fed crackers by becoming more annoying for the round.
        • -
        • Every day he is growing stronger
        • -
        -

        Kor updated:

        -
          -
        • A certain hygiene obsessed alien is now obtainable via xenobiology gold cores.
        • -
        • Add laserguns with swappable, rechargeable magazines. They are adminspawn only.
        • -
        • Operatives now get their pinpointers in their pocket when they spawn, meaning reinforcements automatically come with them (and hopefully people stop forgetting them in general).
        • -
        • Capture the flag now features a high speed instagib mode, with guns courtesy of MMMiracles.
        • -
        -

        phil235 updated:

        -
          -
        • The vision updates for mobs are now instantaneous (e.g. you don't have to wait one second to see again when removing your welding helmet)
        • -
        • Your vision is now affected when you're inside something or viewing through a camera. You can no longer see mobs or objects when ventcrawling (unless you have xray for example), an xray user viewing through a camera do not see through walls around the camera. On the other hand, cameras with an xray upgrade let you see through walls. Unfocused camera now give you the same effect as when you are nearsighted. Being inside closets, morgue container and disposal bins give you some vision impairments.
        • -
        • The ability to toggle your hud on and off (with f12) is now available to all mobs not just humans.
        • -
        - -

        06 February 2016

        -

        LordPidey updated:

        -
          -
        • Added suicide command for pipe valves. It's quite messy.
        • -
        -

        Lzimann updated:

        -
          -
        • Combat Mechas now have a increased chance of destroying a wall with punches (40% for walls and 20% for reinforced walls)!
        • -
        • Combat mechas can now destroy tables and racks with a punch!
        • -
        -

        neersighted updated:

        -
          -
        • The Syndicate has stolen the latest tgui improvements from Nanotrasen! All uplinks now feature filtering/search.
        • -
        • Nanotrasen is proud to announce its next generation sleepers, featuring tgui!
        • -
        • Portable atmospheric components have been overhauled to use the latest interface technology.
        • -
        • The Area Atmosphere Computer has been removed.
        • -
        • Huge scrubbers now require power.
        • -
        • Borg jetpacks are now refilled from a recharger and not a canister.
        • -
        • Power monitors now have a state of the art graph. Hopefully they're actually useful to someone.
        • -
        • Cargo consoles have been redesigned and now feature search and a shopping cart!
        • -
        - -

        05 February 2016

        -

        Joan updated:

        -
          -
        • Blob expansion is faster near the expanding blob, but slower further away from it.
        • -
        • Blob spores produce a slightly larger smoke cloud when dying. Sporing Pods spores and blob zombies produce the current small cloud.
        • -
        • Blobbernauts can no longer pull anything at all.
        • -
        • Blobbernauts health reduced to 200, but blobbernauts now take half brute damage.
        • -
        • Blobbernauts now take massive damage from fire.
        • -
        • Blobbernauts do approximately 3 more damage when attacking.
        • -
        • Replicating Foam will expand more actively when damaged.
        • -
        • Adds Electromagnetic Web, which is light blue, does burn damage and EMPs targets, and causes a small EMP when dying.
        • -
        • Electromagnetic Web takes more damage; a normal blob that hasn't been near a node or the core for 6~ seconds can be oneshotted by a laser.
        • -
        • Anomalies, such as pyroclastic and vortex anomalies, now appear at the bottom of the ghost orbit and observe menus.
        • -
        -

        Kor updated:

        -
          -
        • Nuke ops can purchase sentience potions for 4tc
        • -
        -

        MMMiracles updated:

        -
          -
        • Bulldog now starts with stun-slugs instead of its usual 60-brute slugs. Slugs now cost 3 TC instead of 2.
        • -
        • Most SAW ammo has been slightly buffed in damage so maybe it'll be worth buying now along with a slight cost decrease for the gun itself.
        • -
        • Incen shells for the shotgun now apply extra firestacks on hit so it actually sets people on fire instead of turning them into a light show.
        • -
        • Incen rounds for the SAW now leave a fire trail similar to the bulldog's dragonsbreath round.
        • -
        • Nuke Ops now have the ability to purchase breaching shells, a weaker variant of the meteorslugs that can still push back people/airlocks/mechs/corgis.
        • -
        • SAW should now use its in-hand sprites for an open-closed magazine
        • -
        -

        PKPenguin321 updated:

        -
          -
        • You can now sharpen carrots into shivs by using a knife or hatchet on them.
        • -
        -

        bgobandit updated:

        -
          -
        • Seven new emoji have been added to hasten the death of the English language.
        • -
        -

        octareenroon91 updated:

        -
          -
        • Player-controlled medibots can examine a patient to know what chems are in the patient's body.
        • -
        • autolathes have been showing extra copies of the hacked designs, but no more.
        • -
        - -

        01 February 2016

        -

        Erwgd updated:

        -
          -
        • The Kitchen Vending machine now stocks salt shakers and pepper mills!
        • -
        • The NutriMax now stocks spades, cultivators and plant analyzers.
        • -
        • Rice seeds are now stocked in the MegaSeed Servitor, and the seeds supply crate now contains a pack of rice seeds.
        • -
        • Botanists should be aware that wheat stalks can no longer mutate into rice.
        • -
        -

        Fayrik updated:

        -
          -
        • pAI cards can now be inserted into simple robots, to allow for more robust robot personalities.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • You can now store knives, pens, switchblades, and energy daggers in certain types of shoes (such as jackboots, workboots, winter boots, combat boots, or no-slips).
        • -
        • Horns can now be stored in clown shoes. Honk.
        • -
        -

        TrustyGun updated:

        -
          -
        • Adds gag handcuffs to the prize pool for arcade machines. They act like regular handcuffs, but you break out of them in a second.
        • -
        -

        WJohnston updated:

        -
          -
        • Adds missing booze & soda dispenser, library console, fixes door access and a few other minor things to Efficiency Station
        • -
        • Also adds direction tags so people can find their way around better.
        • -
        -

        bgobandit updated:

        -
          -
        • On Valentine's Day, all spacemen will receive candy hearts and valentines for their special someones! Label valentines with a pen.
        • -
        • Note that today is not Valentine's Day.
        • -
        - -

        31 January 2016

        -

        Kor updated:

        -
          -
        • Added a special AI upgrade disk that allows normal AIs to use malf modules and hack APCs. It is admin only.
        • -
        • Added an AI upgrade disk that grants AIs the lipreading power. It is admin only.
        • -
        - -

        30 January 2016

        -

        Boredone updated:

        -
          -
        • Due to an experiment gone wrong, the Research Director's Teleport Armor now causes some mild radiation poisoning on teleportation to the wearer.
        • -
        -

        Francinum updated:

        -
          -
        • Added two new female underwear styles.
        • -
        -

        Kor updated:

        -
          -
        • You can now use the abandoned white ship as an escape route at round end. This is possible on Box, Meta, and Dream.
        • -
        • Added support so that mappers can make any shuttle function as an escape shuttle.
        • -
        -

        MMMiracles updated:

        -
          -
        • Three new bra sets have been added for the ladies out there who want to show their patriotism.
        • -
        -

        xxalpha updated:

        -
          -
        • Blueprints will now allow the expansion of an existing area by giving its name to a new adjacent area.
        • -
        • Added a no power warning cyborg verb to Robot Commands.
        • -
        - -

        29 January 2016

        -

        Joan updated:

        -
          -
        • Holoparasites can now see their summoner's health at all times. The health displayed is a percentage, with 0 being dead.
        • -
        • Holoparasites now have visual flashes on the summoner's location when recalled due to range limits and when manifesting.
        • -
        -

        Kor updated:

        -
          -
        • Red xenobio potions now work on vehicles (janitor cart, ATV, secway, etc), causing them to go faster.
        • -
        • Stuffing people in bins uses clickdrag instead of grab.
        • -
        - -

        28 January 2016

        -

        Joan updated:

        -
          -
        • Blobs can communicate before bursting to allow for more coordination.
        • -
        -

        Kor updated:

        -
          -
        • Butchering mobs by attacking them with sharp objects will only happen on harm intent. This means it is possible to do surgery on aliens again.
        • -
        - -

        27 January 2016

        -

        Joan updated:

        -
          -
        • Golems have about a 40% chance to stun with punches, from about 60%.
        • -
        • Millitary Synths have about a 50% chance to stun with punches, from literally 100%.
        • -
        • Blobbernaut creation costs 30 points, and does much more damage to the factory.
        • -
        • Blob factories regenerate at half normal rate.
        • -
        • Blob reagents tweaked;
        • -
        • Ripping Tendrils does slightly more brute damage, but less stamina damage.
        • -
        • Lexorin Jelly does less brute damage.
        • -
        • Energized Fibers does slightly more burn damage.
        • -
        • Sporing Pods does slightly more toxin damage.
        • -
        • Replicating Foam will try to replicate when hit more often.
        • -
        • Hallucinogenic Nectar does slightly more toxin damage and causes hallucinations for longer.
        • -
        • Cryogenic Liquid does more burn damage.
        • -
        • Synchronous Mesh does slightly less damage with one blob but massive damage with more than one nearby blob.
        • -
        • Dark Matter does less brute damage.
        • -
        • Sorium does slightly less brute damage.
        • -
        • Pressurized Slime has a lower chance to emit water when killed and when attacking targets.
        • -
        • Supermatter explosion is no longer capped, and under normal conditions will produce a 8/16/24 explosion when delaminating.
        • -
        • Blob tiles now do an attack animation when failing to expand into a turf.
        • -
        • Overmind-directed expansion is more visible than automatic expansion.
        • -
        -

        Kor updated:

        -
          -
        • Capture the flag has been added in space near central command. The spawners are disabled by default, so be sure to harass admins when you die until they let you play. The arena was mapped by Ausops.
        • -
        • Nuke ops can purchase mosin nagants for 2 telecrystals.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Fixes the powersink drawing less power than the smeses put out.
        • -
        • Made the powersink hold significantly more power before overloading and going boom.
        • -
        • Buffed the explosion of the power sink when it overloads. You are suggested to think twice about wiring the engine to the grid.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • The Autoimplanter, a device that can insert cyberimplants into humans instantly and without the need of surgery, has been added to the game. It is currently only obtainable by nuke ops, by way of being included in the Box of Implants.
        • -
        - -

        23 January 2016

        -

        neersighted updated:

        -
          -
        • Refactor wires; port wire interface to tgui.
        • -
        • Wire colors are now fully randomized.
        • -
        • Remove pizza bombs, as the code and sprites were terrible.
        • -
        • Add pizza bomb cores, which can be combined with a pizza box to make a pizza bomb.
        • -
        -

        octareenroon91 updated:

        -
          -
        • Chemistry machinery should now all equally accept beakers, drinking glasses, etc.
        • -
        - -

        19 January 2016

        -

        neersighted updated:

        -
          -
        • Many many interfaces have been ported to tgui; uplinks and MULEbots being the most important
        • -
        • You can now tune radios by entering a frequency
        • -
        • Air Alarms now support any gas
        • -
        - -

        17 January 2016

        -

        Joan updated:

        -
          -
        • You can once again repair a hacked APC by using an APC frame on it instead of welding it off the wall, at the same stage as you'd weld it off the wall.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Control clicking on a turf now un-pulls
        • -
        - -

        16 January 2016

        -

        Joan updated:

        -
          -
        • Alien queens and praetorians have suitably large speechbubbles.
        • -
        • Syndicate cyborgs and syndrones have suitably evil robotic speechbubbles.
        • -
        • Blob mobs have suitably uncomfortable-looking speechbubbles.
        • -
        • Holoparasites and guardians have suitably robotic and magical speechbubbles.
        • -
        • Swarmers have suitably holographic speechbubbles.
        • -
        • Slimes have suitably slimy speechbubbles.
        • -
        - -

        15 January 2016

        -

        Joan updated:

        -
          -
        • Holoparasites can no longer beat their owner to death while inside of them.
        • -
        • Updates traitor holoparasite descriptions for accuracy.
        • -
        • Adds 8 additional silvery metals to the holoparasite name pool.
        • -
        • Adds two new holoparasite colors, light purple and red.
        • -
        • Holoparasite HUD buttons now have new sprites.
        • -
        • Adds glow effects when guardians teleport or recall, including fire guardian teleporting and support guardian teleporting.
        • -
        -

        Kor updated:

        -
          -
        • Washing machines are activated via alt+click rather than a right click verb.
        • -
        - -

        13 January 2016

        -

        Joan updated:

        -
          -
        • Alien whisper ability has a new icon
        • -
        -

        MrStonedOne updated:

        -
          -
        • Control clicking on the thing you are pulling will no longer unpull, instead control clicking on anything too far away to be pulled will unpull. (reminder that the delete key also unpulls)
        • -
        -

        OneArmedYeti updated:

        -
          -
        • To help with colorblindness, gang HUDs have been changed so leaders have a border and normal gangster icons are smaller.
        • -
        - -

        11 January 2016

        -

        Joan updated:

        -
          -
        • Blob cores and nodes no longer cause normal pulsed blobs to animate. Factories and resource nodes will still animate.
        • -
        • Holoparasite sprites have been updated again, are now named after silvery metals and flowers and can also be colored purple, blue or yellow.
        • -
        -

        xxalpha updated:

        -
          -
        • Pipes and cables under walls, intact floors, grilles and reinforced windows will now be shielded from explosions until exposed.
        • -
        - -

        09 January 2016

        -

        Wjohnston updated:

        -
          -
        • AI Satellite has been remapped to make it more secure.
        • -
        - -

        07 January 2016

        -

        KorPhaeron updated:

        -
          -
        • Doubled cost of Lesser Summon Guns to 4 and increased charge time to 75 seconds.
        • -
        -

        TrustyGun updated:

        -
          -
        • Added two new UI styles: black and green Operative and pale green Slimecore.
        • -
        - -

        02 January 2016

        -

        Kor updated:

        -
          -
        • Guardians/Parasites are now named after constellations, and have new sprites from Ausops.
        • -
        -

        Kor and GunHog updated:

        -
          -
        • Malfunctioning AIs can now purchase Enhanced Surveillance for 30 points, which allows them to "hear" with their camera eye.
        • -
        -

        MMMiracles updated:

        -
          -
        • A distress signal was recently discovered with gateway coordinates attached to a far-off research facility owned by Nanotrasen. The signal was sent out in hopes of someone competent receiving it, unfortunately, your station was the only one to respond. Local security forces may not be welcoming your arrival group with open arms.
        • -
        - -

        01 January 2016

        -

        Iamgoofball updated:

        -
          -
        • Redid how objectives are assigned, they're now a lot more random in terms of what you can get.
        • -
        -

        Incoming5643 updated:

        -
          -
        • Removed gender restrictions from socks.
        • -
        -

        Joan updated:

        -
          -
        • Storage Blobs are gone; they were effectively a waste of resources, as there are more or less no points at which you should need them, unless you were winning excessively hard.
        • -
        • Blobs can no longer burst early; instead, the button gives some early help and serves to indicate you're a blob.
        • -
        • Blobbernauts now poll candidates instead of grabbing a candidate immediately. The poll is 5 seconds, so that there's no significant pause between making a blobbernaut and it doing stuff.
        • -
        • Blobbernaut creation replaces Storage Blob creation on the blob HUD.
        • -
        • Overmind communication is now much larger and easier to see, and blob mobs, such as blobbernauts, will hear it.
        • -
        -

        Kor updated:

        -
          -
        • The wizard has a new spell, Lesser Summon Guns. This summons an unending stream of single shot bolt action rifles into his hands, automatically replacing themselves as you fire.
        • -
        • Fixes successive generations of grey tide clones not despawning.
        • -
        • Using challenge ops now delays shuttle refuel.
        • -
        • Added a new wizard event, Advanced Darkness.
        • -
        -

        MrStonedOne updated:

        -
          -
        • GHOST POPUP RE-WORK
        • -
        • Ghost popups will no longer steal focus
        • -
        • Ghost popups will no longer submit on key press (regardless of focus) unless you tab to a button first
        • -
        • Ghost popups will close themselves after the time out has ended
        • -
        • Ghost popups are now themed.
        • -
        • Long actions (like resisting out of handcuffs) will no longer count space/nograv drifting as the user moving.
        • -
        • This does not apply to the target of a long action if that target isn't you. Pulling something while space drifting and working on it intentionally won't work.
        • -
        - -

        31 December 2015

        -

        Bawhoppen updated:

        -
          -
        • Nanotrasen has opened the availability of tactical SWAT gear to station's cargo department
        • -
        • Due to a new trade agreement with Chinese space suit manufacturers, Nanotrasen can now obtain basic space suits much cheaper; This has been reflected in the cargo prices
        • -
        • Amateur medieval enthusiasts have found a quick way to easily make wooden bucklers.
        • -
        -

        Joan updated:

        -
          -
        • Replaced every book sprite in the game with new, consistent versions.
        • -
        • Except the one-use wizard spellbooks, which already got new sprites.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Chest implants have been added that allow you to morph your arms into a gun and back at will. There are two variants, a taser version and a laser version. Both versions are self-charging. Getting EMPed with one of these implants results in the implant breaking and loads of fire damage. The implants are currently admin-only.
        • -
        • The telecrystal price for thermal imaging goggles has been lowered from 6 to 4.
        • -
        -

        incoming5643 updated:

        -
          -
        • The wizard federation has finally updated their assortment of guns for the summon guns event. Look forward to getting shot in the face with a whole new batch of interesting and rarely seen weaponry!
        • -
        - -

        28 December 2015

        -

        AnturK updated:

        -
          -
        • You can now write an entire word with crayons by setting it as a buffer and then clicking the target tiles in the right order.
        • -
        -

        Joan updated:

        -
          -
        • Blobbernauts can no longer smash walls of any type.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Progress bars now have 20 states instead of 5.
        • -
        • Bump mining should be fixed.
        • -
        • Long actions now checks for movement/changed hands/etc more often to prevent edge cases.
        • -
        • Multiple progress bars will now stack properly, rather than fight each other for focus.
        • -
        -

        Ressler updated:

        -
          -
        • Adds the reagent Haloperidol.
        • -
        • It is an anti-drug reagent, good for stopping assistants hyped up on meth, bath salts, and equally illegal drugs.
        • -
        • It can be made with Chlorine, Fluorine, Aluminum, Potassium Iodide, and Oil.
        • -
        -

        neersighted updated:

        -
          -
        • Make NanoUIs transfer upon (un)ghosting.
        • -
        • Fix NanoUIs jumping when resized/dragged.
        • -
        • Lots of other NanoUI bugs.
        • -
        - -

        27 December 2015

        -

        Joan updated:

        -
          -
        • Overmind-created blobbernauts are now player-controlled if possible.
        • -
        • Creating a blobbernaut no longer destroys the factory, instead doing heavy damage to it and preventing it from spawning spores for one minute.
        • -
        • You cannot spawn blobbernauts from overly damaged factories.
        • -
        • Procedure 5-6 may be issued for biohazard containment under certain situations.
        • -
        • Blobs will now burst slightly later on average, and the nuke report with the nuke code will arrive slightly earlier.
        • -
        -

        Kor updated:

        -
          -
        • Spacemen now announce when they are changing magazines.
        • -
        • Command headsets now have a toggle to let you have larger radio speech.
        • -
        -

        LanCartwright updated:

        -
          -
        • The Syndicate Ship no longer spawns with Bulldog shotguns, operative have been given 10 extra telecrystals instead.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Flashes that were emp'ed were incorrectly flashing people in range of the emper, not in range of the flash.
        • -
        • Flashes in a mob's inventory that are emp'ed will only aoe stun if it is not inside of a container like a backpack/box
        • -
        - -

        26 December 2015

        -

        Buggy123 updated:

        -
          -
        • Salicyclic Acid now rapidly heals severe bruising and slowly heals minor ones.
        • -
        -

        Iamgoofball updated:

        -
          -
        • Telsa energy ball now shoots only a single, powerful beam of lightning that can arc between mobs.
        • -
        • Energy ball can now be heard when near-by.
        • -
        -

        Incoming5643 updated:

        -
          -
        • Animated objects now revert if they have no one to attack for a while.
        • -
        • Added Golden revolver, a powerful sounding gun with large recoil.
        • -
        -

        Kor updated:

        -
          -
        • Transform Sting is now actually functional.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Movement in no gravity now allows you to push off of things only dense to some mobs if it is dense to you (such as tables/blob tiles) rather than just objects that are only dense to all mobs.
        • -
        • Long/timed actions will now cancel properly if you move and quickly move back to the right location.
        • -
        - -

        25 December 2015

        -

        Joan updated:

        -
          -
        • The blob Split Consciousness ability has been removed.
        • -
        • The blob mode now spawns more roundstart blobs, instead.
        • -
        -

        Kor updated:

        -
          -
        • AI holograms no longer drift in zero gravity
        • -
        -

        LanCartwright updated:

        -
          -
        • Shotguns shells now have one extra pellet.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Screen shakes will no longer allow you to see through walls
        • -
        • Screen shakes will now move with you when moving rather than lag your client behind your mob
        • -
        • Screen shakes are now less laggy in higher tickrates
        • -
        - -

        22 December 2015

        -

        Iamgoofball updated:

        -
          -
        • Tesla engine has been added alongside the singularity engine to all maps.
        • -
        -

        Joan updated:

        -
          -
        • Adds three new blob chemicals:
        • -
        • Replicating Foam, which is brown, does brute damage, has bonus expansion, and has a chance to expand when damaged.
        • -
        • Sporing Pods, which is light orange, does low toxin damage, and has a chance to produce weak spores when expanding or killed.
        • -
        • Synchronous Mesh, which is teal, does brute damage and bonus damage for each blob tile near the target, and splits damage taken between nearby blobs.
        • -
        • Synchronous Mesh blobs take 25% more damage, to compensate for the spread damage.
        • -
        -

        Kor updated:

        -
          -
        • Cayenne will no longer be targeted by the syndicate turrets.
        • -
        • Energy shields now only reflect energy projectiles.
        • -
        • Added accelerator sniper rounds to uplink, a weak projectile that ramps up damage the farther it flies.
        • -
        -

        MMMiracles updated:

        -
          -
        • Saber magazines have been dropped to 21 per magazine. When asked, Nanotrasens official ballistic department replied "There is indeed such a thing as too much bullet."
        • -
        -

        Xhuis updated:

        -
          -
        • Stun batons can now be blocked by shields, blocked hits don't deduct charge.
        • -
        -

        xxalpha updated:

        -
          -
        • Janitor cyborgs now have a bottle of drying agent.
        • -
        - -

        21 December 2015

        -

        AnturK updated:

        -
          -
        • Ghost HUD and Ghost Inquisitiveness toggles are now persistent between rounds.
        • -
        -

        Kor updated:

        -
          -
        • Malfunctioning AIs have been merged with traitor AIs. They no longer appear in their own mode.
        • -
        • Hacking APCs now gives you points to spend on your modules. Save up enough points and you can buy a doomsday device on a 450 second timer.
        • -
        • The detectives revolver reskins on alt click now.
        • -
        • You can now dual wield guns. Firing a gun will automatically fire the gun held in your off hand if you are on harm intent.
        • -
        -

        LanCartwright updated:

        -
          -
        • The TC costs for nuke ops have been rebalanced. Guns, viscerators and mechs are cheaper, ammo and borgs are more expensive.
        • -
        • Most guns can now be bought in bundles, together with some ammo and freebies for a special discount.
        • -
        -

        The-Albinobigfoot updated:

        -
          -
        • Nuclear Operative families may once again requisition ultra-adhesive footwear.
        • -
        - -

        20 December 2015

        -

        Joan updated:

        -
          -
        • Reduces Lexorin Jelly's oxygen damage significantly.
        • -
        • Blobbernaut chemical application on attack is back, but much less absurd this time; blobbernauts with an overmind will do 70% of the normal chem damage(plus 4) and attack at a much slower rate than the blob itself can.
        • -
        • As an example, a blobbernaut with the Ripping Tendrils chemical would do 14.5 brute and 10.5 stamina damage per hit.
        • -
        -

        Kor updated:

        -
          -
        • Adds reactive tesla armour. Adminspawn only.
        • -
        • Adds the legendary spear, Grey Tide. Admin only.
        • -
        • Nuke Ops can now purchase penetrator rounds for their sniper rifles.
        • -
        • Nuke ops can now purchase additional team members for 25 telecrystals. They don't come with any gear other than a pistol however, so remember to save some points for them.
        • -
        • Nuke Ops now have an assault pod. A 30tc targeting device will allow you to select any area on the station as its landing zone. The pod is one way, so don't forget your nuke.
        • -
        • The teleporter board is no longer available for purchase in the uplink.
        • -
        • After finding absolutely nothing of value, Nanotrasen away teams placed charges and scuttled the abandoned space hotel.
        • -
        • Metastation now has xenobiology computers.
        • -
        • Metastation now has escape pod computers.
        • -
        • A distress signal has been detected broadcasting in an asteroid field near Space Station 13.
        • -
        • Clicking the (F) follow link for AI speech will now make you orbit their camera eye.
        • -
        -

        MMMiracles updated:

        -
          -
        • The SAW has been revamped slightly. It now requires a free hand to fire, but includes 4 new ammo variants along with a TC cost decrease for both the gun and the ammo boxes.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Fixes ghost orbit breaking ghost floating
        • -
        • Fixes orbiting ever breaking golem spawning
        • -
        • Fixes orbiting ever preventing that ghost from showing up in pictures taken by ghost cameras resdel: Fixes being able to break your ghost sprite by multiple quick consecutive orbits (FINAL SOLUTION, PROVE ME WRONG YOU CAN'T)
        • -
        -

        Remie updated:

        -
          -
        • Byond members can now choose how their ghost orbits things, their choices are: Circle, Triangle, Square, Pentagon and Hexagon!
        • -
        • orbit() should be much cheaper for clients now, allowing those of you with potato PCs to survive mega ghost swirling better.
        • -
        -

        incoming5643 updated:

        -
          -
        • the terror of double tailed lizards and featureless clones should now be over
        • -
        • the emote *stopwag no longer works, just *wag again to stop instead
        • -
        - -

        18 December 2015

        -

        Incoming5643 updated:

        -
          -
        • Soon to be blobs in blob mode can now burst at their choosing. However they will still burst if they wait too long.
        • -
        • Burst responsibly.
        • -
        -

        Joan updated:

        -
          -
        • New blob chemicals:
        • -
        • Pressurized Slime, which is grey, does low brute, oxygen, and stamina damage, but releases water when damaged or destroyed.
        • -
        • Energized Fibers, which is light yellow, does low burn damage, high stamina damage, and heals if hit with stamina damage.
        • -
        • Hallucinogenic Nectar, which is pink, does low toxin damage, causes vivid hallucinations, and does some bonus toxin damage over time.
        • -
        • Replaces Kinetic Gelatin with Reactive Gelatin, which does less brute damage, but if hit with brute damage in melee, damages all nearby objects.
        • -
        • Changes three of the old blob chemicals:
        • -
        • Ripping Tendrils does slightly more stamina damage
        • -
        • Envenomed Filaments no longer causes hallucinations, but does some stamina damage in addition to toxin damage over time.
        • -
        • Cryogenic Liquid will freeze targets more effectively.
        • -
        -

        Kor updated:

        -
          -
        • Shooting someone who is holding a grenade has a chance to set the grenade off.
        • -
        • Shooting someone who is holding a flamethrower has a chance to rupture the fuel tank.
        • -
        • Shields have a bonus against blocking thrown projectiles.
        • -
        -

        Swankcookie updated:

        -
          -
        • lanterns no longer turn into flashlights when you pick them up.
        • -
        -

        bgobandit updated:

        -
          -
        • Lizard tails can now be severed by surgeons with a circular saw and cautery, and attached the same way augmented limbs are.
        • -
        • The Animal Rights Consortium is horrified by Nanotrasen stations' sudden rise of illegal lizard tail trade, with such atrocities as lizardskin hats, lizard whips, lizard clubs and even lizard kebab!
        • -
        -

        neersighted updated:

        -
          -
        • NanoUI should now load much faster, as the filesize and file count have been reduced
        • -
        - -

        17 December 2015

        -

        Kor updated:

        -
          -
        • Security barricades are now deployed via grenade. You can no longer move them after they've been deployed, you must destroy them.
        • -
        • You can now shoot through wooden barricades while adjacent, while any other gunfire has a 50% chance of being blocked.
        • -
        • There are no longer restrictions against implanting the nuclear disk in people.
        • -
        • If the station is destroyed in a nuclear blast, any surviving traitors will complete their "escape alive" objective regardless of their location.
        • -
        • Hulks now lose hulk when going into crit, rather than at 25 health.
        • -
        • Shuttles will no longer drag random tiles of space with them. This means you can be thrown out of partially destroyed escape shuttles very easily.
        • -
        • The people and objects on destroyed tiles won't be along for the ride when the shuttle moves either.
        • -
        • Adds hardsuits with built in energy shielding. CTF and security versions are admin only.
        • -
        • Nuclear operatives can buy a shielded hardsuit for 30tc.
        • -
        • Traitors can now buy a Mulligan for 4 telecrystals, a syringe that completely randomizes your name and appearance.
        • -
        • The spy bundle now includes a switchblade and Mulligan.
        • -
        -

        MMMiracles updated:

        -
          -
        • A set of coordinates have recently reappeared on the Nanotrasen gateway project. Ask your local central official about participation.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Ghosts can now double click on ANY movable thing (ie: not a turf) to orbit it
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Dope golden necklaces have been added. They're a jumpsuit attachment like ties and are completely cosmetic.
        • -
        • Dope necklaces can be bought from the clothesmate with a coin. Three are in the clothesmate by default, so you can get your posse going. Gangs that aren't Sleeping Carp can also purchase necklaces for 1 influence each. Dope.
        • -
        -

        xxalpha updated:

        -
          -
        • Restores the ability to bolt and unbolt operating airlocks.
        • -
        - -

        16 December 2015

        -

        AnturK updated:

        -
          -
        • Medical Beam Gun now available for Nuclear Operatives and ERT Medics.
        • -
        -

        Joan updated:

        -
          -
        • Revenant Overload Lights reveal time lowered from 10 seconds to 8 seconds, shock damage increased from 18 to 20.
        • -
        • Revenant Blight reveal time lowered from 6 seconds to 5 seconds.
        • -
        -

        Kor updated:

        -
          -
        • Styptic once again works in patches.
        • -
        • Nuke Op team leaders can now activate challenge mode if more than 50 players are online.
        • -
        • Xenobio mobs will no longer spontaneously murder their friends if you give them sentience
        • -
        -

        The-Albinobigfoot updated:

        -
          -
        • The Wishgranter now displays its faith in humans with curbed enthusiasm.
        • -
        -

        Tkdrg updated:

        -
          -
        • Cult has been overhauled in an attempt to make the gamemode more fun.
        • -
        • Cult onversion and stunpapers have been removed. So have most cult objectives.
        • -
        • The cult's single objective is now defend and feed a large construct shell in order to summon the Geometer.
        • -
        • The cult must sacrifice souls in order to acquire summoning orbs, which must be inserted inside said shell.
        • -
        • The large construct shell can be procured by using a summoning orb in hand, but it is vulnerable to attack.
        • -
        • Once enough orbs are inserted, the station will go Delta. After three minutes, the cult will have won.
        • -
        • Cult communications now no longer damage you when done without a tome.
        • -
        • Cultists now start with a sacrificial dagger, with bleeding effects and high throwing damage.
        • -
        • Most existing runes were buffed, merged, or removed. A Immolate rune and a Time Stop rune were added. Experiment!
        • -
        • Each cultist now gets a random set of runes in their tomes. Pool together your knowledge in order to thrive.
        • -
        -

        neersighted updated:

        -
          -
        • NanoUI 3.0
        • -
        • Completely rewrite NanoUI frontend; rework backend.
        • -
        • Re-design NanoUI interface to be much more attractive.
        • -
        • Reduce NanoUI LOC count/resource size.
        • -
        • Reduce NanoUI tickrate; make UIs update properly.
        • -
        • Add chromeless NanoUI mode.
        • -
        • NanoUI's chromeless mode can be toggled with the 'Fancy NanoUI' preference.
        • -
        • Allow NanoUI to work on IE8-IE11, and Edge.
        • -
        • Close holes that allow NanoUI href spoofing.
        • -
        - -

        15 December 2015

        -

        Incoming5643 updated:

        -
          -
        • The summon events... event "RPG loot" now allows for items to have bonuses of up to +15!
        • -
        • The "RPG loot" event now also improves the damage reduction of armor!
        • -
        • Check out the item mall for new item fortification scrolls!
        • -
        -

        as334 updated:

        -
          -
        • New research has shown that when when plasma reaches a high enough temperature in the presence of a carbon catalyst, it undergoes a violent and powerful fusion reaction.
        • -
        • Adds a new gas reaction, fusion. Heat up plasma and carbon dioxide in order to produce large amounts of energy and heat.
        • -
        -

        oranges updated:

        -
          -
        • hulk no longer stuns
        • -
        • John Cena
        • -
        - -

        13 December 2015

        -

        Kor updated:

        -
          -
        • Adds reactive stealth armor. Admin spawn only.
        • -
        - -

        12 December 2015

        -

        Joan updated:

        -
          -
        • The blob Split Consciousness ability now requires a node under the overmind's selector, instead of picking the oldest living node to spawn a core on.
        • -
        • Revenant antagonist preference can once again be toggled from the Game Preferences menu.
        • -
        -

        Kor updated:

        -
          -
        • You now have a chance to flip while attacking with a dualsaber.
        • -
        • Bluespace survival capsules have been added to escape pod safes.
        • -
        • Standing between activating shield generators now has disastrous consequences.
        • -
        -

        Lo6a4evskiy updated:

        -
          -
        • Ninja drains power properly, no more infinite stealth.
        • -
        -

        RemieRichards updated:

        -
          -
        • Adds a Synth Species
        • -
        • Species can now react to being force set by admins, used for Synth species
        • -
        - -

        09 December 2015

        -

        GunHog updated:

        -
          -
        • Nanotrasen has discovered new strains of Xenomorph which resist penetration by known injection devices, including syringes. This seems to only extend to the large 'Royal' strains, designed 'Queen' and 'Praetorian'. Extreme caution is advised should these specimens escape containment.
        • -
        • Ghosts may now use Diagnostic HUD.
        • -
        • Feedback added for which HUD is active.
        • -
        -

        Kor updated:

        -
          -
        • Security barricades now block gunfire 80% of the time while deployed.
        • -
        • Standing adjacent to barricades will allow you to shoot over them.
        • -
        -

        MrStonedOne updated:

        -
          -
        • noslip floors make you slightly faster
        • -
        -

        Shadowlight213 updated:

        -
          -
        • Admins can now interact with mos of the station's machinery as if they were an AI when ghosting.
        • -
        -

        incoming5643 updated:

        -
          -
        • a mutation of glowshrooms, glowcaps, have recently been discovered in botany.
        • -
        -

        ktccd updated:

        -
          -
        • Blobs now require the correct amount of blobs to win that scales depending on number of blobs, instead of a set value of 700.
        • -
        - -

        08 December 2015

        -

        Joan updated:

        -
          -
        • Revenants can no longer move through walls and windows while revealed, though they can move through tables, plastic flaps, mobs, and other similarly thin objects.
        • -
        • Defile now reveals for 4 seconds, from 8.
        • -
        • Overload lights now reveals for 10 seconds, from 8.
        • -
        • Blight now reveals for 6 seconds, from 8.
        • -
        • Blight has a higher chance of applying stamina damage to the infected.
        • -
        -

        Kor updated:

        -
          -
        • The blocking system has been completely overhauled. Any held item, exosuit, or jumpsuit can now have a chance to block, or a custom on hit effect. Different shields can now have different block chances.
        • -
        • The clowns jumpsuit now honks when you beat the owner.
        • -
        • There is a new (admin only for now) suit of reactive armour that ignites attackers instead of warping you.
        • -
        • Shields will no longer block hugs. Give peace a chance.
        • -
        -

        neersighted updated:

        -
          -
        • MC tab reworked, more items made available.
        • -
        • Admins can now click entries in the MC tab to debug.
        • -
        - -

        07 December 2015

        -

        octareenroon91 updated:

        -
          -
        • Wallets now use the access of all IDs stored inside them.
        • -
        • As the accesses of all IDs are merged, two IDs in a wallet may grant access to a door that neither one alone would open.
        • -
        • Wallets used to be useless for access if the first ID card put into it was taken out, until another ID card was put back in. That should not happen anymore.
        • -
        - -

        06 December 2015

        -

        Gun Hog updated:

        -
          -
        • Nanotrasen is proud to announce that it has improved its Diagnostic HUD firmware to include the station's automated robot population! New features include integrity tracking, Off/On status, and mode tracking! If your little robot friend suddenly manages to acquire free will, you will be able to track that as well!
        • -
        • Artificial Intelligence units may find that their bot management interface now shows when a robot gains free will. This is also displayed on the Personal Data Assistant's bot control interface.
        • -
        -

        neersighted updated:

        -
          -
        • Cryo now properly checks it is on before healing...
        • -
        - -

        05 December 2015

        -

        Joan updated:

        -
          -
        • Magic missiles no longer do damage.
        • -
        - -

        03 December 2015

        -

        Joan updated:

        -
          -
        • Artificers now have feedback when healing other constructs, showing how much health the target has.
        • -
        • Constructs can move in space.
        • -
        • Fixes cult flooring not lining up with normal floors.
        • -
        • Fixes a juggernaut back spine not glowing where it should.
        • -
        -

        Spudboy updated:

        -
          -
        • Realigned the librarian's PDA.
        • -
        -

        Swankcookie updated:

        -
          -
        • Cakehat now creates light
        • -
        -

        YotaXP updated:

        -
          -
        • Rolled out a new line of space heaters around the station. This new model has the functionality to cool down the environment, as well as heat it. Additionally, they can be built and upgraded like any other machine.
        • -
        -

        neersighted updated:

        -
          -
        • Dominator now shows the correct area name on non-Box maps.
        • -
        • Unwrenching atmos pipes is less... nuts...
        • -
        • You don't get hopelessly spun when standing on a unwrenched pipe... Don't try it, though.
        • -
        • You can now cancel pulling by Ctrl+Clicking anything else
        • -
        • Chemistry Dispensers now have a built-in drain!
        • -
        - -

        02 December 2015

        -

        GunHog updated:

        -
          -
        • Nanotrasen has discovered a flaw in the weapon recharging station's design that makes it incompatible with the Rapid Part Exchange Device. This has been corrected.
        • -
        -

        neersighted updated:

        -
          -
        • You can now stop pulling by trying to pull the same object again.
        • -
        • Nanotrasen is proud to announce that even the dead can use our state of the art NanoUI technology.
        • -
        - -

        01 December 2015

        -

        Kor updated:

        -
          -
        • The away mission Listening Post, originally mapped by Petethegoat, has removed as a mission. It is now present in normal deep space.
        • -
        -

        neersighted updated:

        -
          -
        • Attack animations are now directional!
        • -
        • Nanotrasen brand Airlock Electronics now sport our latest NanoUI interface! Upgrade your electronics today!
        • -
        • Cryo now knocks you out.
        • -
        • Resisting out of cryo has a delay.
        • -
        • Cryo auto-ejection can now be configured.
        • -
        • Remove Cryo eject verb (resist out).
        • -
        • Cryo works... Love, neersighted
        • -
        -

        swankcookie updated:

        -
          -
        • Switches cloak usage to overclothing slot
        • -
        - -

        30 November 2015

        -

        neersighted updated:

        -
          -
        • Nanotrasen would like to apologize for Chemistry being stuck on NanoUI 1.0... Please report any further bugs to Nanotrasen Support.
        • -
        • NanoUI becomes... difficult to operate with brain damage. Who would have guessed?
        • -
        • Telekinesis enables you to use NanoUI at a distance.
        • -
        • Canisters require physical proximity to actuate...
        • -
        • NanoUI no longer leaks memory on click.
        • -
        - -

        29 November 2015

        -

        Firecage updated:

        -
          -
        • Hand tools now have variable operating speeds.
        • -
        -

        GunHog updated:

        -
          -
        • Nanotrasen has improved the interface for the hand-held teleportation device. It will now provide the user with the name of the destination tracking beacon.
        • -
        -

        JJRcop updated:

        -
          -
        • Fixes changeling Hive Absorb DNA ability runtime.
        • -
        -

        Joan updated:

        -
          -
        • When sacrificing a target with the sacrifice rune, Nar-Sie herself will briefly appear to consume them.
        • -
        • When an artificer repairs a construct, there is a visible beam between it and the target.
        • -
        • When reviving a target with the raise dead rune, there is a visible beam between the two corpses used.
        • -
        • When draining a target with the blood drain rune, there is a visible beam between you and the rune.
        • -
        • Construct sprites are now consistent and all bob in the air.
        • -
        • Most cult messages now use the cult span classes, though visible messages from cult things generally do not.
        • -
        • Examining a cultist talisman as a cultist no longer causes the paper popup to appear.
        • -
        • You no longer need to press two buttons to read a cultist tome.
        • -
        • Cult should have a few less typos and grammatical errors.
        • -
        • The sacrifice rune now uses the proper invocation.
        • -
        -

        KorPhaeron updated:

        -
          -
        • Guardians and holoparasites can now be manually recalled by their master.
        • -
        • The ghost controlling a guardian or holoparasite can be repicked by their master, only one use which is removed when a new ghost is chosen.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Re-adds 100% chance timed injectors, as it was removed over a misunderstanding.
        • -
        • Fixes bug with injectors having a 100% power chance despite not being timed
        • -
        • Fixes the excessive amount of time it took the game to initialize.
        • -
        • Fixes some interface bugs.
        • -
        • when an interface window has to send a lot of resources before it can open, it will now tell you with a "sending resources" line so you know why it's not opening right away.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Teleprods can now be constructed. Make them via tablecrafting, or by putting a bluespace crystal onto a stunprod. They warp the target to a random nearby area (which may include space/the inside of a wall) in addition to giving the victim a brief stun. Like stunprods, they require a power cell to function.
        • -
        • Teleprods can have their crystal removed and be made back into stunprods by using them in your hand when they have no cell installed.
        • -
        • Mounted chainsaws now have a unique inhand sprite.
        • -
        -

        Remie + Kor updated:

        -
          -
        • Holopads now use AltClick to request the AI
        • -
        -

        Shadowlight213 updated:

        -
          -
        • Syndie melee mobs have been buffed.
        • -
        -

        TheNightingale updated:

        -
          -
        • Nuclear operatives can now buy the Elite Syndicate Hardsuit for 8 TC that has better armor and fireproofing.
        • -
        • Added throwing stars and Syndicate playing cards to nuclear operative's uplink.
        • -
        -

        Yolopanther12 updated:

        -
          -
        • Added the ability to use a box of lights on a light replacer to more quickly refill it to capacity.
        • -
        -

        incoming5643 updated:

        -
          -
        • OOC will now take steps to try and prevent accidental IC from people who mistakenly use OOC instead of say. This doesn't catch all mistakes, so please don't test it.
        • -
        -

        ktccd updated:

        -
          -
        • Blob pieces on some areas no longer count for blob mode victory (Such as space or asteroid).
        • -
        • Blobcode no longer spawns and destroys blobs uselessly, which fixes other stuff too.
        • -
        • Asteroid areas are no longer valid gang territory.
        • -
        -

        neersighted updated:

        -
          -
        • Nanotrasen would like to announce NanoUI 2.0, now being rolled out across all our stations. Existing NanoUI devices have been updated, and more will be added soon. Please report any bugs to Nanotrasen Support.
        • -
        • Many NanoUI interfaces have had +/- buttons replaced with input fields.
        • -
        • Some NanoUI interfaces have had more information added.
        • -
        • Drones can now interact with NanoUI windows.
        • -
        -

        swankcookie updated:

        -
          -
        • Fixes issue of space-Christians forgetting about the true, humbling values of space-Christmas.
        • -
        • Adds snowmen outfits
        • -
        - -

        28 November 2015

        -

        TechnoAlchemisto updated:

        -
          -
        • Cloaks are now worn in your exosuit slot!
        • -
        - -

        27 November 2015

        -

        AnturK updated:

        -
          -
        • Turret control panels can now be made through frames available at autolathe.
        • -
        • Unlocked turrets can be linked with built controls with multiool
        • -
        -

        JJRcop updated:

        -
          -
        • Restores golem shock immunity.
        • -
        -

        Kor and Ausops updated:

        -
          -
        • Added four different suits of medieval plate armour.
        • -
        • The Chaplain starts with a suit of Templar armour in his locker. God wills it!
        • -
        • Rumour has it that Nanotrasen is now training a new elite unit of soldiers to deal with paranormal threats. Corporate was unable to be reached for comment.
        • -
        -

        MMMiracles updated:

        -
          -
        • Adds a brand new away mission for the gateway called 'Caves'.
        • -
        • The away mission has multiple levels to explore and could be quite dangerous, running in without proper preparation is unadvised.
        • -
        -

        YotaXP updated:

        -
          -
        • Drones can now use the pick-up verb, and watertanks no longer get jammed in their internal storage.
        • -
        -

        bgobandit updated:

        -
          -
        • Due to changes in Nanotrasen's mining supply chain, ore redemption machines now offer a variety of upgraded items! However, certain items are more expensive. Point values for minerals have been adjusted to reflect their scarcity.
        • -
        • Nanotrasen R&D has discovered how to improve upon the resonator and kinetic accelerator.
        • -
        • After a colossal tectonic event on Nanotrasen's asteroid, ores are distributed more randomly.
        • -
        • Bluespace crystals have been discovered to be ore. They will now fit into satchels and ore boxes.
        • -
        • Mech advanced mining scanners now include meson functionality.
        • -
        -

        neersighted updated:

        -
          -
        • Wooden Barricades now take bullet damage.
        • -
        • Rebalance Wooden Barricade damage.
        • -
        - -

        26 November 2015

        -

        neersighted updated:

        -
          -
        • Cyborg Toner is now refilled by recharging stations.
        • -
        -

        oranges updated:

        -
          -
        • Removed the 'gloves' from the sailor dress which looked weird since it was a blouse basically
        • -
        • Made the skirt on the blue/red skirts less blocky,
        • -
        • Made the striped dress consistent at every direction
        • -
        - -

        25 November 2015

        -

        Incoming5643 updated:

        -
          -
        • A number of popular stunning spells have undergone balance changes. Note that for the most part the stuns themselves are untouched.
        • -
        • Lightning Bolt Changes:
        • -
        • You can no longer throw the bolt whenever you want, it will fire itself once it's done charging.
        • -
        • Getting hit by a bolt will do a flat 30 burn now, as opposed to scaling with how long the wizard spent charging the spell. Unless said wizard made a habit of charging lightning bolt to near maximum every time this is a buff to damage.
        • -
        • Every time the bolt jumps the next shock will do five less burn damage.
        • -
        • Lightning bolts can still jump back to the same body, so the maximum number of bolts you can be hit by in a single casting is three, and the maximum amount of damage you could take for that is 60 burn.
        • -
        • Magic Missile Changes:
        • -
        • Cooldown raised to 20 seconds, up from 15
        • -
        • Cooldown reduction from taking the spell multiple times raised from 1.5 seconds to 3.5 seconds. Rank 5 magic missile now has a cooldown of 6 seconds, down from 9, and is effectively a permastun.
        • -
        • Time Stop Changes:
        • -
        • Time Stop field now persists for 10 seconds, up from 9
        • -
        • Cooldown raised to 50 seconds, up from 40
        • -
        • Cooldown reduction from taking the spell multiple times raised from 7.75 seconds to 10 seconds. Rank 5 time stop now has a cooldown of 10 seconds, up from 9, and is effectively a permastun.
        • -
        -

        Kor updated:

        -
          -
        • Escape pods can now be launched to the asteroid during red and delta level security alerts. Pods launched in this manner will not travel to Centcomm at the end of the round.
        • -
        • Each pod is now equipped with a safe that contains two emergency space suits and mining pickaxes. This safe will only open during red or delta level security alerts.
        • -
        -

        MrStonedOne updated:

        -
          -
        • fixes interfaces (like the "ready" button) being unresponsive for the first minute or two after connecting.
        • -
        • Burn related code has been changed
        • -
        • This will give a small buff to fires by making them burn for longer
        • -
        • This will give a massive nerf to plasma related bombs
        • -
        • I am actively seeking feedback, if the nerf to bombs is too bad we can still tweak stuff
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Chainsaws (both arm-mounted and not arm-mounted) can now be used in surgeries as a ghetto sawing tool. Arm-mounted chainsaws are a teeny bit more precise than regular ol' everyday chainsaws.
        • -
        -

        YotaXP updated:

        -
          -
        • Spruced up the preview icons on the Character Setup dialog.
        • -
        -

        incoming5643 updated:

        -
          -
        • Citing shenanigan quality concerns the wizard federation has withdrawn supermatter swords and veil renderers from spellbooks.
        • -
        -

        neersighted updated:

        -
          -
        • Make Airlock Electronics use standard ID checks, allowing Drones to use them.
        • -
        - -

        24 November 2015

        -

        Kor updated:

        -
          -
        • Added a lava turf. Expect to see it in away missions or in admin 'events'
        • -
        - -

        23 November 2015

        -

        octareenroon91 updated:

        -
          -
        • Spilling oxygen or nitrogen will obtain a release of the corresponding atmospheric gas in the effected tile.
        • -
        • Carbon Dioxide has been added as a reagent. Recipe: 2:1 carbon:oxygen, heated to 777K.
        • -
        • Spilling CO2 will produce CO2 gas.
        • -
        - -

        21 November 2015

        -

        Joan updated:

        -
          -
        • Blobs now have a hud, with jump to node, create storage blob, create resource blob, create node blob, create factory blob, readapt chemical, relocate core, and jump to core buttons.
        • -
        • Manual blob expansion is now triggered by clicking anything next to a blob tile, instead of by ctrl-click.
        • -
        • Rally Spores no longer has a cost. Reminder: You can middle-click anything you can see to rally spores to it.
        • -
        • Creating a Shield Blob with hotkeys is now ctrl-click instead of alt-click.
        • -
        • Removing a blob now refunds some points based on the blob type, usually around 40% of initial cost. Hotkey for removal is alt-click.
        • -
        • Blobs now have the *Blob Help* verb which will pull up useful information, including what your reagent does.
        • -
        • Storage Blobs now cost 20, from 40. Storage Blobs also cannot be removed by blob removal.
        • -
        • Readapt Chemical now costs 40, from 50.
        • -
        -

        octareenroon91 updated:

        -
          -
        • Add numbers and a star graffiti to crayon/spraycan designs.
        • -
        - -

        20 November 2015

        -

        AnturK updated:

        -
          -
        • Staff of Doors now creates random types of doors.
        • -
        -

        Incoming5643 updated:

        -
          -
        • Setting your species to something other than human (if available) once again saves properly. Note that if you join a round where your species setting is no longer valid it will be reset to human.
        • -
        -

        PKPenguin321 updated:

        -
          -
        • Healing Fountains in Hand of God now give cultists a better and more culty healing chemical instead of Doctor's Delight.
        • -
        -

        kingofkosmos updated:

        -
          -
        • Added the ability to upgrade your grab by clicking the grabbed mob repeatedly.
        • -
        -

        octareenroon91 updated:

        -
          -
        • Add the four-color pen, which writes in black, red, green, and blue.
        • -
        • Adds two such pens to the Bureaucracy supply pack.
        • -
        - -

        19 November 2015

        -

        Joan updated:

        -
          -
        • Constructs have action buttons for their spells.
        • -
        • The Juggernaut forcewall now has a new, more cult-appropriate sprite.
        • -
        • Cult floors and walls now have a glow effect when being created.
        • -
        • Nar-Sie and Artificers will properly produce cult flooring.
        • -
        • Nar-Sie is a she.
        • -
        - -

        18 November 2015

        -

        oranges updated:

        -
          -
        • Nanotrasen apologies for a recent bad batch of synthflesh that was shipped to the station, any rumours of death or serious injury are false and should be reported to your nearest political officer. At most, only light burns would result.
        • -
        -

        phil235 updated:

        -
          -
        • Remotely detonating a planted c4 with a signaler now works again.
        • -
        - -

        17 November 2015

        -

        Xhuis updated:

        -
          -
        • Many medicines have received rebalancing. Expect underused chemicals like Oxandralone to be much more effective in restoring damage.
        • -
        • Many toxins are now more or less efficient.
        • -
        • The descriptions of many reagents have been made more accurate.
        • -
        • New poison: Heparin. Made from Formaldehyde, Sodium, Chlorine, and Lithium. Functions as an anticoagulant, inducing uncontrollable bleeding and small amounts of bruising.
        • -
        • New poison: Teslium. Made from Plasma, Silver, and Black Powder, heated to 400K. Modifies examine text and induces periodic shocks in the victim as well as making all shocks against them more damaging.
        • -
        • Two Chemistry books have been placed in the lab. When used, they will link to the wiki page for chemistry in the same vein as other wiki books.
        • -
        - -

        16 November 2015

        -

        Gun Hog updated:

        -
          -
        • The Combat tech requirement for Loyalty Firing Pins has been reduced from 6 to 5.
        • -
        -

        Joan updated:

        -
          -
        • Plasmamen can now man the bar.
        • -
        • Defile no longer directly affects mobs. Instead, it rips up floors and opens most machines and lockers.
        • -
        • Blight added. Blight infects humans with a virus that does a set amount of damage over time and is relatively easily cured. Blight also badly affects nonhuman mobs and other living things.
        • -
        • While the cure to Blight is simple, it's not in this changelog. Use a medical analyzer to find the cure.
        • -
        • Tweaked costs and stuntimes of abilities;
        • -
        • Defile now costs 30 essence and stuns for about a second.
        • -
        • Overload Lights now costs 40 essence.
        • -
        • Malfunction now costs 45 essence.
        • -
        • Blight costs 50 essence and 200 essence to unlock.
        • -
        • Transmit has a new, spookier icon.
        • -
        • Revenant abilities can be given to non-revenants, and will work as normal spells instead of runtiming.
        • -
        -

        bgobandit updated:

        -
          -
        • Blood packs can now be labeled with a pen.
        • -
        - -

        15 November 2015

        -

        CosmicScientist updated:

        -
          -
        • Hopefully made the dehydrated carp's uplink description 100% clear.
        • -
        • Made the dehydrated carp cost 1 TC (instead of 3) to help with your traitor gear combos.
        • -
        -

        Incoming5643 updated:

        -
          -
        • The supermatter sword was being far too kind in the hands of men. They should now have the desired effect when swung at people.
        • -
        -

        Joan updated:

        -
          -
        • Anomalies move more often, are resistant to explosions and will only be destroyed if they are in devastation range. You shouldn't bomb them, though.
        • -
        • Hyper-energetic flux anomaly will shock mobs that run into it, or if it runs into them.
        • -
        • Bluespace anomaly will occasionally teleport mobs away from it in a small radius.
        • -
        • Vortex anomalies will sometimes throw objects at nearby living mobs.
        • -
        • Pyroclastic anomalies will produce bigger, hotter fires, and if not disabled, it will release an additional burst of flame. In addition, the resulting slime will be rabid and thus attack much more aggressively.
        • -
        • Gravitational anomalies will now properly throw objects at nearby living things.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Away mission loading will no longer improperly expand the width of the game world to two times the size of the away mission map.
        • -
        • This should also improve the speed of loading away missions, since the game doesn't have to resize the world
        • -
        -

        RemieRichards updated:

        -
          -
        • Deities now start off with the ability to place 1 free turret
        • -
        • HoG Claymores now do 30 Brute (Down from 40) but now have 15 Armour Penetration (Up from 0)
        • -
        • Killing the other god objective is fixed
        • -
        • Turrets will no longer attack handcuffed people
        • -
        • Followers are now informed of their god's death
        • -
        • Followers are now informed of the location of their god's nexus when it is placed
        • -
        • Gods can no longer place structures near the enemy god's nexus
        • -
        - -

        13 November 2015

        -

        as334 updated:

        -
          -
        • Nanotrasen has hired a brand new supply of ~~expendable labor~~ *LOYAL CREW MEMBERS* please welcome them with open arms.
        • -
        • Plasmamen are now a playable race. They require plasma gas to survive and will ignite in oxygen environments.
        • -
        - -

        12 November 2015

        -

        Dunc updated:

        -
          -
        • DNA injectors have been restored to their original permanent RNG state from the impermanent guaranteed state.
        • -
        -

        Xhuis updated:

        -
          -
        • Reagents can no longer be determined by examining a reagent container without the proper apparatus. Silicons and ghosts can always see reagents.
        • -
        • Science goggles now allow reagents to be seen on examine. In addition, chemists now start wearing them. The bartender has a pair that looks and functions like sunglasses.
        • -
        - -

        11 November 2015

        -

        AnturK updated:

        -
          -
        • DNA Injectors now grant temporary powers on every use. Duration dependent on activated powers and machine upgrades
        • -
        • Delayed Transfer added to DNA Scanner - It will activate on the next closing of scanner door
        • -
        • UI+UE injectors/buffer transfers added for convinience
        • -
        • Injector creation timeout cut in half
        • -
        -

        Firecage updated:

        -
          -
        • NanoTrasen specialists has developed a new type of operating table. You can now make one yourself with only some rods and a sheet of silver!
        • -
        -

        Kor updated:

        -
          -
        • Adds immovable and indestructible reflector structures for badmin use.
        • -
        • The Mjolnir has been added to the wizards spellbook.
        • -
        • The Singularity Hammer has been added to the wizards spellbook.
        • -
        • The Supermatter Sword has been added to the wizards spellbook.
        • -
        • The Veil Render has been added to the wizards spellbook.
        • -
        • Trigger Multiverse War (give the entire crew multiswords) has been added to the wizards spellbook, at a cost of 8 points.
        • -
        • Converting (to cultist, rev, or gangster) a jobbaned player will now automatically offer control of their character to ghosts.
        • -
        • Emergency Response Teams and Deathsquads no longer accept non-human members if the server is configured to bar mutants from being heads of staff.
        • -
        -

        LordPidey updated:

        -
          -
        • Nanotransen doctors have re-approved Saline-Glucose Solution for usage in IV drips, when blood supplies are low. Simple pills will not suffice.
        • -
        -

        MMMiracles updated:

        -
          -
        • Water slips have been nerfed to a more reasonable duration. It is still a guaranteed way to disarm an opponent and obtain their weapon, but you can no longer manage to cuff/choke everyone who manages to slip without a problem.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Fixes the smartfridge not stacking items.
        • -
        -

        Xhuis updated:

        -
          -
        • The emergency shuttle now plays unique sounds (thanks to Cuboos for creating them) when launching from the station and arriving at Central Command.
        • -
        -

        torger597 updated:

        -
          -
        • Added a syringe to boxed poison kits.
        • -
        - -

        08 November 2015

        -

        Cuboos updated:

        -
          -
        • Added a new and better sounding flashbang sound and a ringing sound for flashbang deaf effect
        • -
        -

        JJRcop updated:

        -
          -
        • Chronosuits have had their movement revised, they now take time to teleport depending on how far you've traveled, and don't teleport automatically anymore unless you stop moving for a short moment, or press the new ' Teleport Now' button.
        • -
        • Added new outfit that allows admins to dress people up in the chrono equipment easier.
        • -
        -

        Jalleo updated:

        -
          -
        • Due to a recently discovered report it turns out The Wizard Federation has devised a way for CEOs to stop having some teas from their Smartfridges due to this change all smartfridges will temporarily be unable to stack contents.
        • -
        -

        Joan updated:

        -
          -
        • Revenant draining now takes about 5 seconds to complete and can be interrupted by dragging the target away.
        • -
        • Revenants can now tell if they are currently visible.
        • -
        • Revenant ability costs tweaked; Defile now costs 40 essence to cast, Overload Lights now costs 45 essence to cast, and Malfunction now costs 50 essence to cast.
        • -
        • Malfunction now affects non-machine objects, even if they're not being held by a human.
        • -
        • Defile does an extremely low amount of toxin damage to humans and confuses, but does much less stamina damage and stuns the revenant for slightly longer.
        • -
        • Overload Lights will no longer shock if the light is broken after a light is chosen to shock an area.
        • -
        -

        Kor updated:

        -
          -
        • Using water on a dark blue slime extract will now yield a new potion capable of completely fireproofing clothing items.
        • -
        • You can once again click+drag mobs into disposal units. Xenobiologists rejoice.
        • -
        -

        Xhuis updated:

        -
          -
        • Shadowling abilities now require the user to be human.
        • -
        • Enthralling now takes 21 seconds (down from 30).
        • -
        • Regenerate Chitin has been renamed to Rapid Re-Hatch.
        • -
        • Dethralling surgery's final step now requires a flash, penlight, or flashlight.
        • -
        • Dethralling surgery now produces a black tumor, which has a high biological tech origin but dies quickly in the light.
        • -
        • Shadowlings no longer have Enthrall before hatching.
        • -
        • Shadowling clothing now has icons to better reflect its existence.
        • -
        • Ascendant Broadcast has been removed.
        • -
        • Destroy Engines is now removed from the user after it is used once.
        • -
        - -

        05 November 2015

        -

        AnturK updated:

        -
          -
        • Added wild shapeshift spell for wizards.
        • -
        - -

        01 November 2015

        -

        Gun Hog updated:

        -
          -
        • Nanotrasen listens! After numerous complaints and petitions from Security personnel regarding energy weapon upkeep, we have authorized the construction and maintenance of your station's weapon rechargers. As an added bonus, we have also provided a more modular design for the devices, allowing for greater recharge rates if fitted with a more efficient capacitor!
        • -
        • Added Diagnostic HUDs! They can be used to view the health and cell status of borgs and mechs. Silicons have them built in, Roboticists get two in their locker, and the RD's hardsuit has one built in.
        • -
        -

        Incoming5643 updated:

        -
          -
        • The number of roundstart head revolutionaries nows depends on the roundstart security force as well as the roundstart heads
        • -
        • The maximum number of head revs is 3, the minimum is 1. If there is fewer than three station heads there will never be more than that number of head revs at roundstart. For every three vacant security roles (Head of Security/Warden/Security Officer/Detective) at roundstart the number of starting head revs will be reduced by 1.
        • -
        • Head revolutionaries can be gained during play if the security/head roles are filled. They are drawn from existing revolutionaries.
        • -
        • Added dental implant surgery. While targeting the mouth drill a hole in a tooth then stick a pill in there for hands free later use.
        • -
        -

        Kor updated:

        -
          -
        • Added an experimental control console for Xenobiology. Ask the admins if you'd like to try it out. It may not work on maps other than Box if they have renamed the Xenobiology Lab.
        • -
        • Injecting blood into a cerulean slime will yield a special one use set of blueprints that will allow you to expand the territory your camera can cover.
        • -
        -

        Kor and Remie updated:

        -
          -
        • Added as series of laser reflector structures, the frame of which can be built with 5 metal sheets.
        • -
        • Completing the frame with 5 glass sheets creates a mirror that will reflect lasers at a 90 degree angle.
        • -
        • Completing the frame with 10 reinforced glass sheets creates a double sided mirror that reflects lasers at a 90 degree angle.
        • -
        • Completing the frame with a single diamond sheet creates a box that will redirect all lasers that hit it from any angle in a single direction.
        • -
        -

        MMMiracles updated:

        -
          -
        • Energy Swords can now embed when thrown for a 75% chance. Embedding
        • -
        - -

        30 October 2015

        -

        Incoming5643 updated:

        -
          -
        • Slimepeople can now split if they contain 200 units of slime jelly, and slimepeople will now slowly generate slime jelly up to 200 units provided they are very well fed. Split slimepeople are NOT player controlled, but rather the original slime person can swap between the two mobs at will. If one of the slimepeople should die under player control, the player won't be able to swap back to their living body. Splitting only creates a new body, any items you have on you are not duplicated.
        • -
        • Slimepeople now take half damage from sources of heat, but double damage from sources of cold. Lasers good, Space bad.
        • -
        - -

        29 October 2015

        -

        Kor updated:

        -
          -
        • Slightly changed what items spawn on the captain vs in his locker, hopefully saving some annoying inventory shuffle at roundstart.
        • -
        - -

        28 October 2015

        -

        Tkdrg updated:

        -
          -
        • Added a Ghost On-screen HUD. It can be toggled using the "Toggle Ghost HUD" verb. Thank you Razharas for the sprites!
        • -
        • Ghosts can now use the "Toggle med/sec HUD" verb to see the basic secHUD (jobs only) or the medHUD of humans.
        • -
        • Ghost will now get clickable icon alerts from events such as being put in a cloner, drones being created, Nar-sie being summoned, among others. The older chat messages were kept. These alerts can not be toggled.
        • -
        - -

        27 October 2015

        -

        Joan updated:

        -
          -
        • You can now click on things under timestop effects, instead of clicking the effect and looking like a fool.
        • -
        -

        Kor updated:

        -
          -
        • Added a zombie mob that turns its kills into more zombies. Currently adminspawn and xenobio only.
        • -
        • Using water with a red slime extract will now yield a speed potion. Using the speed potion on an item of clothing will paint it red and remove its slowdown.
        • -
        -

        MrStonedOne updated:

        -
          -
        • You may now access the setup character screen when not in the lobby via the game preferences verb in the preferences tab
        • -
        • The round end restart delay can now be configured by server operators. New servers will default to 90 seconds while old servers will default to the old 25 seconds until they import the config option to their server.
        • -
        - -

        26 October 2015

        -

        Fox P McCloud updated:

        -
          -
        • Standardizes the slowdown of most spacesuits to 1 as opposed to 2.
        • -
        -

        Incoming5643 updated:

        -
          -
        • 48x48 pixel mode (x1.5 zoom) has been added to the Icons menu (top left). While playing in 32x32 or 64x64 will still provide a clearer looking station, for those of us with resolutions that fall into the gap between the two zooms this can provide a more consistant looking station than stretch to fit.
        • -
        • 96x96 pixel mode (x3 zoom) has also been added for our players who enjoy looking at spacemen on their 4k monitors at a crisp and consistent scale.
        • -
        • The lich spell has been subjected to some gentle nerfing. When you die a string of energy will tie your new body to your old body for a short time, aiding others in determining your location. The duration of this beam scales with the number of deaths you've avoided.
        • -
        • Additionally the post revival stun now also scales in this way.
        • -
        • The spell will also fail if the item and the wizard don't share the same z level, though the nature of space means the odds of the item (or the wizard) looping around back to the station is pretty high.
        • -
        • The spell is still really good.
        • -
        - -

        25 October 2015

        -

        Incoming5643 updated:

        -
          -
        • The spell Charge has been added to the spellbook. It can be used to extend the life of magic and energy weapons and even reset the cooldowns of held wizards! It cannot reset your own cooldowns.
        • -
        • The Staff of Healing has been added to the spellbook. Heals all damage and raises the dead! Can't be used on yourself however.
        • -
        • The exploit that allowed you to use the staff of healing on yourself by suicide has been fixed.
        • -
        -

        Jordie0608 updated:

        -
          -
        • You can now selectively mute non-admin players from OOC with the Ignore verb in the OOC tab.
        • -
        -

        Tkdrg updated:

        -
          -
        • Added chainsaws. They can be tablecrafted using a circular saw, a plasteel sheet, some cable coil, and a welding tool. Don't forget to turn it on!
        • -
        - -

        24 October 2015

        -

        Kor updated:

        -
          -
        • The friendly gold slime reaction now spawns three mobs.
        • -
        -

        phil235 updated:

        -
          -
        • Changed the effects of alcohol to be more realistic. The effects of alcohol now appear twice as fast. Drunkenness now scales with how much alcohol is in you, not how long you've been drinking. This means drinking very little but continuously no longer makes you very drunk, or confused/slurring for a long time or give you alcohol poisoning. The dizziness and slurring effects now properly scale with how drunk you are (and dizziness is generally more pronounced).
        • -
        - -

        23 October 2015

        -

        Incoming5643 updated:

        -
          -
        • Syndicate bomb payloads will now detonate if set on fire long enough. Note that the casings for the bombs is fireproof, so if you want to set fire to a bombcore you'll need to remove it from the case first (cut all wires, then crowbar it out). A reassurance from our explosives department: it is, and always has been, impossible to detonate a syndicate bomb that isn't ticking with wirecutters alone.
        • -
        -

        Xhuis updated:

        -
          -
        • Geiger counters have been added and are obtainable from autolathes and EngiVends. They will measure the severity of radiation pulses while in your pockets, belt, or hands. One can scan a mob's radiation level by switching to Help intent and clicking on it. These counters never really discard the radiation they store, and rumor has it this can be used in nefarious ways...
        • -
        • When a mob is impacted by radiation, the radiation is now relayed to all items on the mob.
        • -
        - -

        19 October 2015

        -

        AnturK updated:

        -
          -
        • Handheld T-Ray Scanners now detect critters in pipes.
        • -
        -

        Kor updated:

        -
          -
        • Weapons and projectiles that are armour piercing now have an increased chance to bypass riot shields.
        • -
        • Slipping on lube now deals slightly more damage, but is concentrated on a random body part, rather than spread to your entire body.
        • -
        • Slipping on water no longer deals damage
        • -
        • You can now attach grenades and C4 to spears to create explosive lances. This is done via table crafting. Alt+click the spear to set a war cry.
        • -
        -

        Shadowlight213 updated:

        -
          -
        • In response to reports of stranded drones, Nanotrasen has added magnets to drone legs. They are no longer affected by lack of gravity or spacewind!
        • -
        • Drones can now set Airlock access on RCDs.
        • -
        -

        bgobandit updated:

        -
          -
        • Nanotrasen loves recycling! In the highly unlikely occasion that your space station accumulates gibs, scoop 'em up and bring them to chemistry to recycle into soap, candles, or even delicious meat product!
        • -
        • L3 biohazard closets now contain bio-bag satchels for the safe collection of biowaste products, such as slime extracts.
        • -
        -

        phil235 updated:

        -
          -
        • Removing Smile, Swedish, Chav and Elvis mutations from genetics. These mutation can still be acquired via adminspawned dna injector.
        • -
        • Added a dna injector for laser eyes mutation for admin use.
        • -
        • Fixes winter coat hood sprite appearing as a bucket.
        • -
        • Fixes using razor on non human shaving non existent hair.
        • -
        • Fixes chair deconstruction dropping too much metal.
        • -
        • Fixes snapcorn not giving seeds.
        • -
        • Fixes portable chem dispenser.
        • -
        • Changing the transfer amount of all reagent containers (beaker, bucket, glass) is now done by clicking them, similar to spray. Reagent dispensers (watertank, fueltank, pepperspray dispenser) no longer have their own transfer amounts and use the reagent container's transfer amount instead (except for sprays which get 50u for faster refilling).
        • -
        - -

        16 October 2015

        -

        MrStonedOne updated:

        -
          -
        • Added a reconnect option to the file menu. This will allow you to reconnect to the game server without closing and re-opening the game window. This should also prevent another byond ad from playing during reconnections.
        • -
        -

        Xhuis updated:

        -
          -
        • A gamebreaking bug has been fixed with buckets. You can now wear them on your head.
        • -
        -

        bgobandit updated:

        -
          -
        • The Grape Growers Consortium has complained that Nanotrasen kitchens do not use their products enough. HQ has come up with a few recipes to pacify them. Goddamn winos.
        • -
        - -

        13 October 2015

        -

        AnturK updated:

        -
          -
        • Display cases can now be built using 5 wood planks and 10 glass sheets.
        • -
        • Add airlock electronics to open it with id later, otherwise you'll have to use crowbar
        • -
        • Broken display cases can be fixed with glass sheets or removed using crowbar
        • -
        • Added start_showpiece_type variable for mappers to create custom displays
        • -
        • Syndicate Lone Operatives spotted near the nanotrasen stations! Keep the disk safe!
        • -
        • Admin spawned nuclear operatives will now have access to nukeop equipment
        • -
        -

        Gun Hog updated:

        -
          -
        • Nanotrasen's research team has released a new, high tech design for Science Goggles, which previously did nothing! They new come fitted with a portable scanning module which will display the potential research data gained from experimenting with an object. Nanotrasen has also released drivers which shall enable the prototype hardsuit's built in scan visor.
        • -
        • Supporting this new design, Nanotrasen has seen fit to provide blueprints for Science Goggles to the station's protolathe.
        • -
        -

        Kor updated:

        -
          -
        • Gang implanters now only break implants/deconvert gangsters, meaning you will have to use a pen to convert them afterwards.
        • -
        • An important function, accessible via alt+click, has been restored to the detectives hat.
        • -
        • When Nar-Sie is created, they now use the old sound effect.
        • -
        -

        Steelpoint updated:

        -
          -
        • The Chief Medical Officers 'Medical Hardsuit' has been added to the CMO's office. Boasts the usage of lightweight materials allowing fast movement while wearing the suit as well as complete biological protection to airborne and similar pathogens.
        • -
        • The Head of Security's personal 'HoS Hardsuit' has been added to the HoS's office. This Hardsuit is slightly more armored than the regular Security Hardsuit.
        • -
        • The Research Directors 'Prototype Hardsuit' has been added to the RD's office. This Hardsuit offers the highest levels of protection against explosive, as well as biological, attacks, as well as fireproofing.
        • -
        • The Command EVA space suits, due to budget concerns, have been removed and reloacted to another space station.
        • -
        -

        Xhuis updated:

        -
          -
        • All instances of autorifles have been removed from Security.
        • -
        • The armory has been re-mapped.
        • -
        • The spell book has received a rebalancing! There are now ten uses by default, but most spells cost two uses. Some underused spells, like Blind, Smoke, and Forcewall, only cost a single use.
        • -
        • After searching through the Sleeping Carp's ancient monastery in deep space, more secrets have been uncovered of their traditional fighting techniques.
        • -
        • Members of the Sleeping Carp gang are now able to deflect all ranged projectiles.
        • -
        • Members of the Sleeping Carp gang are now uanble to use any type of ranged weaponry. Doing so would be dishonorable.
        • -
        • The Sleeping Carp martial art's effects are more damaging, and many stuns have been increased in duration.
        • -
        -

        phil235 updated:

        -
          -
        • Fixes critical bug causing multiple hits from single projectile.
        • -
        • Fixes not being able to shoot a mob on same tile as the shooter.
        • -
        • Clicking your mob (without targeting your mouth) no longer causes you to shoot yourself.
        • -
        • Fixes not being able to shoot non human mobs at point blank.
        • -
        • Morphs no longer automatically drop the things they swallowed, you have to butcher their corpse to retrieve their contents.
        • -
        • butchering a corpse no longer also attacks it.
        • -
        • Dipping cigarette (to asbsorb liquids) in a glass can now only be done with an unlit cigarette. Lit cigarette now heats up the glass content (like other heat sources).
        • -
        • Fixes trashbag not being able to pickup drinks and ammo casings.
        • -
        • Slimes now attaches themselves to mobs via buckling.
        • -
        - -

        07 October 2015

        -

        Kor updated:

        -
          -
        • The alien queen can now perform a tail sweep attack, throwing back and stunning all nearby foes.
        • -
        - -

        06 October 2015

        -

        Gun Hog, for WJohnston updated:

        -
          -
        • Add new Xenomorph caste: The Praetorian. Drones may become this on their way to growing into a full queen, and a queen may promote one if there is not one already.
        • -
        • Xenomorph queens are now GIGANTIC, along with the new Praetorian. Together, they are considered royals.
        • -
        • Queens are now significantly tougher to make up for their huge size.
        • -
        • All forms of dead xenomorph may now be grabbed and placed on a surgery table for organ harvesting!
        • -
        -

        Xhuis updated:

        -
          -
        • Maintenance drones now have a more descriptive message when examined.
        • -
        • A recent Nanotrasen firmware update to drones has increased vulnerability to foreign influences. Please periodically check drones for abnormal behavior or status LED malfunction. Note, however, that cryptographic sequencers will not incur this behavior.
        • -
        • In response to complaints about rogue drones, Nanotrasen engineers have allowed factory resets on all drones by simply using a wrench.
        • -
        • Central Command reminds drones to immediately retreat, if possible, when a law override is begun. Not doing so may anger the gods and incur their wrath!
        • -
        • Some virus symptoms that had no messages now have them.
        • -
        • New virology symptom: Weakness. This will cause stamina damage and fainting spells.
        • -
        • Many virus symptom messages have been changed to be more threatening.
        • -
        - -

        04 October 2015

        -

        Fox P McCloud updated:

        -
          -
        • Adds a bar of soap to the janitor's locker.
        • -
        • Re-adds the advanced mop as a researchable R&D item.
        • -
        • Adds a bluespace trashbag as a researchable R&D item; can hold large quantities of garbage.
        • -
        -

        Jordie0608 updated:

        -
          -
        • Added Special Verb 'Create Poll', an in-game interface to create server polls for admins with +permissions.
        • -
        -

        MrPerson updated:

        -
          -
        • Removed NTSL. Sorry. People could write scripts that crashed the server, and this is the only thing that can be done to prevent them from doing that.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Removed feature where quick consecutive ghost orbits while moving could be used to fuck with your sprite
        • -
        • Fixed ghosts losing floating animation when returning from an orbit
        • -
        • Fixed logic error that prevented orbit's automatic cancel when the orbiting thing moved in certain situations.
        • -
        • Ghost Orbit size now changes based on the icon size of the thing they are orbiting (for that sweet sweet singulo orbiting action)
        • -
        • Removed needless checks in ghost orbit, you can now orbit yourself and restart an orbit around the thing you are already orbiting
        • -
        -

        Xhuis updated:

        -
          -
        • Syndicate Medical cyborgs now have cryptographic sequencers.
        • -
        • Syndicate Medical cyborgs no longer have syringes.
        • -
        • Restorative Nanites now heal much more damage per type.
        • -
        • Operative pinpointers now actually point toward the nearest operative.
        • -
        • Syndicate Assault cyborgs no longer start with medical supplies.
        • -
        • Energy saws now have a proper icon.
        • -
        • Non-operatives can now longer use operative pinpointers or Syndicate cyborg teleporters.
        • -
        • Doctor's Delight now requires cryoxadone in its recipe instead of omnizine.
        • -
        • Doctor's Delight now restores half a point of brute, burn, toxin, and oxygen damage per tick.
        • -
        • Doctor's Delight now drains nutrition while it's in your system (that is, unless you're a doctor).
        • -
        • Syndicate roboticists have given Syndicate medical cyborgs sharper hypospray needles - they are now able to penetrate armor.
        • -
        - -

        29 September 2015

        -

        Kor updated:

        -
          -
        • The Chaos holoparasite can now actually set people on fire properly.
        • -
        • Guardian powers are now used via alt+click rather than shift+click.
        • -
        • Added an alert chime for ghosts when someone is summoning a Guardian.
        • -
        - -

        28 September 2015

        -

        Feemjmeem updated:

        -
          -
        • Rechargers can now be wrenched and unwrenched by cyborgs.
        • -
        • Rechargers no longer stop working forever if you move them from an unpowered area to a powered area, and now actually look powered off when they are.
        • -
        • Guns and batons can no longer be placed in unwrenched chargers.
        • -
        -

        Razharas updated:

        -
          -
        • Added button to preferences menu that kills all currently playing sounds when pressed, now you can kill midis and any other sounds for real.
        • -
        -

        phil235 updated:

        -
          -
        • Fixed the syndicate cyborg's grenade launcher.
        • -
        • You can modify the dna of corpses again.
        • -
        - -

        26 September 2015

        -

        MMMiracles updated:

        -
          -
        • Nanotrasen's genetic researchers have rediscovered the inactive dwarfism genetic defect inside all bipedal humanoids. Suffer not the short to live.
        • -
        -

        WJohnston updated:

        -
          -
        • Repiped the entire station. Atmosia and the disposals loop were not touched.
        • -
        • Moved mulebot delivery from misc lab to RnD.
        • -
        - -

        25 September 2015

        -

        Xhuis updated:

        -
          -
        • Changelings have a new ablity, Biodegrade. Costing 30 chemicals and having an unlock cost of 1, it allows them to dissolve handcuffs and straight jackets in 3 seconds, and escape from lockers in 7.
        • -
        • Fleshmend's effectiveness is now halved each time it is used in a short time span.
        • -
        • Last Resort now blinds and confuses nearby humans and briefly disables silicons upon use.
        • -
        • Headslugs now have 50 health, up from 20.
        • -
        - -

        24 September 2015

        -

        Jordie0608 updated:

        -
          -
        • Advanced energy guns now only critically fail after successive minor failures. Cease firing after multiple recent minor failures to avoid critical ones.
        • -
        -

        Kor updated:

        -
          -
        • Guardian Spirit types and powers have been heavily reworked. Full details of each type are available on the wiki.
        • -
        • Guardian damage transfer to users now deals cloneloss if their user is in crit.
        • -
        • Guardians are now undergoing a trial run in the traitor uplink, under the name of Holoparasites.
        • -
        • You can now hang human mobs (dead or alive) from meatspikes. Escaping the meatspike will further damage the victim.
        • -
        • You can no longer slam humans into the meatspike as an attack.
        • -
        - -

        23 September 2015

        -

        Xhuis updated:

        -
          -
        • Syndicate medical cyborgs have been added.
        • -
        • The Dart Pistol is now available from the uplink for 4 telecrystals. It functions as a pocket-sized syringe gun with a quieter firing sound.
        • -
        • Boxes of riot foam darts now cost 2 telecrystals, down from 10, and are available to traitors.
        • -
        • Foam dart pistols now cost 3 telecrystals, down from 6.
        • -
        • Syndicate cyborg teleporters now allow a choice between Assault and Medical cyborgs.
        • -
        • Syndicate cyborgs are now distinguished as Syndicate Assault.
        • -
        • Syndicate cyborg energy swords now cost 50 energy per use, down from 500.
        • -
        • Airlock charges now cost 2 telecrystals, down from 5.
        • -
        • Airlock charges are much more powerful.
        • -
        • There is no longer a 25% chance to detonate an airlock charge while removing it.
        • -
        • The description of many uplink items has been changed to better reflect their use.
        • -
        - -

        22 September 2015

        -

        Kor updated:

        -
          -
        • A new admin command, Offer Control to Ghosts, can be found in the view variables menu. It will randomly select a willing candidate from among dead players, providing a fair method of replacing antagonists.
        • -
        -

        Xhuis updated:

        -
          -
        • When a morph changes form, a message is shown to nearby people. This also happens upon undisguising.
        • -
        • Morphs now have an attack sound and message.
        • -
        • The Spawn Morph event now plays a sound to the chosen candidate.
        • -
        • Slaughter demons (and other creatures with blood crawl) now take two seconds to emerge from blood pools. Entering is still instantaneous.
        • -
        • The demon heart's sprite has been updated.
        • -
        • Eating a demon heart now surgically implants the heart into your chest. If the heart is removed from you, you lose the ability. Someone else can eat the heart to gain the ability.
        • -
        • Blood Crawl no longer has a 1-second cooldown, instead having none.
        • -
        • You can no longer hold items when attempting to Blood Crawl, nor can you use any items while Blood Crawling.
        • -
        • Creatures that can Blood Crawl now take two seconds to emerge from blood pools.
        • -
        • Slaughter demons now store devoured creatures, and will drop them upon death.
        • -
        • Revenants now have the ability to speak to the dead.
        • -
        • Revenant abilities now have icons.
        • -
        • Malfunction no longer EMPs a specific area - it will instead EMP nearby machines directly and stun cyborgs. Dominators are immune to this.
        • -
        • Revenants now have directional sprites.
        • -
        • Overload Lights now has a smaller radius.
        • -
        • Defile no longer corrupts tiles.
        • -
        • When glimmering residue reforms, the game will attempt to place the old revenant in control of the new one. If this cannot be done, it will find a random candidate.
        • -
        • Revenants can no longer see ghosts. They can see other revenants, however, and ghosts can still see revenants.
        • -
        • The Spawn Slaughter Demon event now plays a sound to the chosen candidate.
        • -
        -

        phil235 updated:

        -
          -
        • Lizards and other non human species can no longer acquire the hulk mutation. Hulks no longer have red eyes
        • -
        • Monkeys now always have dna and a blood type (compatible with humans).
        • -
        • Monkey transformation no longer deletes the human's clothes.
        • -
        • Space Retrovirus now correctly transfers dna SE to the infected human.
        • -
        • Changeling's Anatomic Panacea removes alien embryo again.
        • -
        • Cloning someone now correctly sets up their dna UE.
        • -
        • Fixes the laser eyes mutation not giving glowing red eyes to the human.
        • -
        • Using changeling readaptation now properly removes all evolutions bought (arm blade, chameleon skin, organic suit).
        • -
        -

        xxalpha updated:

        -
          -
        • Added a researchable cyborg self-repair module to the robotics fabricator.
        • -
        - -

        20 September 2015

        -

        Xhuis updated:

        -
          -
        • Rites have been renamed to their old runes, which reflect their functionality.
        • -
        • Examining a talisman no longer opens the paper GUI.
        • -
        • Armor talismans have been re-added.
        • -
        • EMP talismans now have the same range as their rune counterpart.
        • -
        • Some talismans now cost health to use, costing more or less depending on their effect.
        • -
        • Scribing runes now deals 0.1 brute damage instead of 1.
        • -
        • Bind Talisman runes no longer deal 5 brute damage when invoking.
        • -
        • Rune shapes and colors are now identical to their old versions.
        • -
        • Conversion runes can no longer be used by yourself, and require a static 2 cultists.
        • -
        - -

        19 September 2015

        -

        Xhuis updated:

        -
          -
        • Shadowlings are now able to sacrifice a thrall to extend the shuttle timer by 15 minutes. This will not stack.
        • -
        • Additional abilities granted by Collective Mind will now properly have icons.
        • -
        • Shadowlings now have their antagonism removed if turned into a silicon.
        • -
        • The order of abilities unlocked by Collective Mind has been changed. It now starts with Sonic Screech.
        • -
        • Veil now destroys glowshrooms in a much larger radius than before.
        • -
        - -

        17 September 2015

        -

        bgobandit updated:

        -
          -
        • Meatspikes can now be constructed and deconstructed with metal and rods, as well as wrenched and unwrenched! Humans and corgis can be used on them as well.
        • -
        -

        xxalpha updated:

        -
          -
        • Reworked nuke deconstruction: Standardized steps, partial reparation (use metal) to contain radiation.
        • -
        • New portable nuke, self-destruct terminal, syndie screwdriver sprites by WJohnston.
        • -
        - -

        16 September 2015

        -

        Razharas updated:

        -
          -
        • Replaces the space cube with space torus. Space levels are now each round randomly placed on the grid with at least one neigbour, any side of the space level that doesnt have neigbour will loop either onto itself or onto the opposite side of the furthest straight-connected space level on the same axis.
        • -
        -

        Supermichael777 updated:

        -
          -
        • The detomax pda cartridge no longer blows its user up.
        • -
        -

        Xhuis updated:

        -
          -
        • Cultists will now be able to create all runes without needing to research or collect words. This is subject to change.
        • -
        • Cult code has been significantly improved and will run much faster and be more responsive.
        • -
        • Conversion runes can now be invoked with less than three cultists, but take a small amount of time to convert the target.
        • -
        • Armor runes will only outfit the user with standard armor, rather than having different loadouts for different worn clothing items.
        • -
        • Astral Journey runes will now pull the user back to the rune if they are moved. The user also has a different color while on the rune.
        • -
        • Free Cultist has been removed. Summon Cultist now works even if the target is restrained.
        • -
        • Sacrifice and Raise Dead runes now offer more precise target selection.
        • -
        • Sacrifice runes now have different sounds, and gib rather than dust (assuming the target is not a silicon).
        • -
        • There is no longer a maximum cap on active runes.
        • -
        • Runes have been renamed to Rites. For instance, the Teleport rune is now the Rite of Translocation. The only exception to this is the rune to summon Nar-Sie, which is a Ritual.
        • -
        • Nar-Sie now has a new summon sound.
        • -
        • The Nar-Sie summon rune has a new 3x3 sprite.
        • -
        • The stun rune no longer stuns cultists.
        • -
        • The Rite of False Truths had been added, that will make all nearby runes appear as if they were drawn in crayon.
        • -
        • Runes can now be examined by cultists to determine their name, function, and words.
        • -
        -

        phil235 updated:

        -
          -
        • Riot and energy shield users now have a chance to block things thrown at them as well as xeno leaping at them.
        • -
        - -

        14 September 2015

        -

        Fox P McCloud updated:

        -
          -
        • Adds a mining voucher to the Quartermaster's locker.
        • -
        -

        Thunder12345 updated:

        -
          -
        • The captain has been issued with a new jacket for formal occasions.
        • -
        • Research has shown that is is possible to build technological shotshells without the need for silver. The design blueprints supplied to your station have been updated accordingly.
        • -
        -

        xxalpha updated:

        -
          -
        • Fixed not being able to grab things from storage while inside aliens.
        • -
        • Fixed two progress bars when devouring.
        • -
        • Shields will now block alien hunter pounces.
        • -
        • Alien hunters health reduced to 125 from 150. Alien sentinels health increased to 150 from 125.
        • -
        • Alien hunters will no longer be transparent when stalking, this ability was given to alien sentinels.
        • -
        • Alien slashing now deals constant 20 damage but has a chance to miss.
        • -
        • Reduced alien disarm stun duration vs cyborgs, from 7 seconds to 2 seconds.
        • -
        • Alien sentinels now move as fast as humans.
        • -
        • Facehuggers and alien eggs layers increased to be higher than resin walls.
        • -
        - -

        13 September 2015

        -

        Fox P McCloud updated:

        -
          -
        • Fixes an exploit and inconsistency issue with a few material amounts on a few items and designs.
        • -
        • Fixes Bibles/holy books not properly revealing runes.
        • -
        • fixes stimulants not properly applying its speedbuff.
        • -
        -

        Gun Hog updated:

        -
          -
        • Nanotrasen scientists have proposed a refined prototype design for the nuclear powered Advanced Energy guns to include a taser function along with the disable and kill modes. Addtionally, they have modified the chassis blueprint to include a hardpoint for attachable seclites.
        • -
        -

        Iamgoofball updated:

        -
          -
        • Reduced the cost of changeling armor to 1 and increased it's armor values.
        • -
        -

        Jordie0608 updated:

        -
          -
        • You can now view the reason of a jobban from character setup.
        • -
        -

        xxalpha updated:

        -
          -
        • Drying agent splashed on galoshes will turn them into absorbent galoshes that dry wet floors they walk on.
        • -
        • Drying agent can be made with ethanol, sodium and stable plasma.
        • -
        - -

        11 September 2015

        -

        CosmicScientist updated:

        -
          -
        • Drone dispenser now has a var for its cooldown, get var editing.
        • -
        - -

        09 September 2015

        -

        Joan updated:

        -
          -
        • New blob chemical; Cryogenic Liquid. Cools down targets.
        • -
        • Tweaked names, colors, and effects of remaining blob chemicals;
        • -
        • Skin Ripper is now Ripping Tendrils and does minor stamina damage, in addition to the brute damage.
        • -
        • Toxic Goop is now Envenomed Filaments and injects targets with spore toxin and causes hallucinations, in addition to the toxin damage.
        • -
        • Lung Destroying Toxin is now Lexorin Jelly and does brute damage instead of toxin damage. The oxygen loss it causes can also no longer crit you in one hit.
        • -
        • Explosive Gelatin is now Kinetic Gelatin and does random brute damage, instead of randomly exploding targets.
        • -
        • Skin Melter, Radioactive Liquid, Omnizine, and Space Drugs blob chemicals are gone.
        • -
        -

        bgobandit updated:

        -
          -
        • Nanotrasen has commissioned two new corporate motivational posters for your perusal and edification.
        • -
        • Nanotrasen also wishes to remind the crew that non-authorized posters ARE CONTRABAND. Especially those new ones with Rule 34. Perverts.
        • -
        - -

        07 September 2015

        -

        xxalpha updated:

        -
          -
        • Changed xeno weed spread to be like gas spread.
        • -
        - -

        06 September 2015

        -

        Fox P McCloud updated:

        -
          -
        • Fixes gold sheets having plasma as their material.
        • -
        -

        Xhuis updated:

        -
          -
        • Nanotrasen inspectors have discovered a fault in the buckles of chairs and beds. This has been fixed and you are now able to buckle again.
        • -
        - -

        05 September 2015

        -

        Shadowlight213 updated:

        -
          -
        • The syndicate have taken notice of the camera bug's woeful underuse, and have managed to combine all of its upgrades into one!
        • -
        - -

        01 September 2015

        -

        Dorsidwarf updated:

        -
          -
        • Changelings' Digital Camoflague ability now renders them totally invisible to the AI
        • -
        -

        ExcessiveUseOfCobblestone updated:

        -
          -
        • Added health analyzer to the autolathe.
        • -
        • Moved Cloning board to Medical Machinery section.
        • -
        • Moved Telesci stuff to Teleporter section.
        • -
        -

        Fox P McCloud updated:

        -
          -
        • Adds the emitter board to to the circuit imprinter for R&D.
        • -
        -

        Gun Hog updated:

        -
          -
        • The Disable RCD Malfunction power is now Destroy RCDs! It costs 25 CPU (down from 50), causes RCDs to explode, can be used multiple times, and no longer affects cyborgs.
        • -
        -

        Kor updated:

        -
          -
        • Revheads and Gang leaders now spawn with chameleon security HUDs, for keeping track of loyalty implanted crew.
        • -
        • Syndicate thermals now have a chameleon function as well, allowing you to disguise the goggles to match your job.
        • -
        -

        Miauw updated:

        -
          -
        • Edaggers actually work now and have been buffed to 18 brute and 2 TC.
        • -
        -

        Oisin100 updated:

        -
          -
        • Nanotransen discover ancient human knowledge confirming that trees produce Oxygen From Carbon Dioxide
        • -
        • Trees now require Oxygen to live. And will die in extreme temperatures
        • -
        -

        Xhuis updated:

        -
          -
        • The arcade machines have been stocked with a xenomorph action figure that comes with realistic sounds!
        • -
        • Darksight now has its own icon.
        • -
        • Empowered thralls have been added. While obvious, they are more powerful and can resist dethralling while conscious. Only 5 can exist at one time.
        • -
        • Shadowlings can now change their night vision radius by using the action button their eyes (glasses) now provide.
        • -
        • Torches are dimmer, being as bright as flashlights, and no longer fit on belts.
        • -
        • Black Recuperation now has a 1 minute cooldown, down from 5. It can also be used to empower living thralls.
        • -
        • Guise can now be used outside of darkness and makes the user more invisible than before.
        • -
        • Enthrall now functions properly when a shadowling is not hatched, allowing them to enthrall up to 5 people before hatching.
        • -
        -

        xxalpha updated:

        -
          -
        • Blood crawling is now a spell.
        • -
        • Engineering cyborgs now have a constant magpulse.
        • -
        • Changed foam spreading to be like gas spreading.
        • -
        - -

        28 August 2015

        -

        bgobandit updated:

        -
          -
        • Overheard at CentComm: 'This burn kit said salicyclic acid would heal my burns! WHO MADE THIS SHIT?' A muffled honking is heard in the background. (Burn first-aid kits now contain an appropriate burn pill.)
        • -
        • Oxandrolone, a new burn healing medication, has been added to burn first-aid kits and to chemistry. Ingesting 25 units or more causes burn and brute damage.
        • -
        - -

        19 August 2015

        -

        Joan updated:

        -
          -
        • Added a new revenant ability; Malfunction. It does bad stuff to machines.
        • -
        • Defile and Overload Lights now briefly stun the revenant.
        • -
        • You can now Harvest a target by clicking on them while next to them.
        • -
        • Harvesting no longer leaves you draining if the target is deleted mid-drain attempt.
        • -
        • Defile no longer emags bots or disables cyborgs, Malfunction does that now.
        • -
        -

        Kor updated:

        -
          -
        • The Ranged and Scout guardian types have been merged, and gained a new surveillance snare ability.
        • -
        -

        SconesC updated:

        -
          -
        • Added Military Belts to traitor uplinks.
        • -
        -

        bgobandit updated:

        -
          -
        • CentComm now offers its cargo department toys, as well as detective gear so their boss can figure out which tech wasted all the points on them.
        • -
        -

        phil235 updated:

        -
          -
        • You can now partially protect yourself from blob attack effects by wearing impermeable clothes like hardsuits, medical clothes, masks, etc. Max protection effect is capped at 50%.
        • -
        • Splashing someone with chemicals no longer injects those chemicals in their body.
        • -
        • Fixes splashing acid on items or floor with items not having any effect.
        • -
        - -

        18 August 2015

        -

        CoreOverload updated:

        -
          -
        • Added a new low-tech eye cyberimplant in RnD - welding shield implant.
        • -
        • Implanter and empty implant case added to protolathe.
        • -
        • You can sell tech disks and maxed reliability design disks in cargo for supply points.
        • -
        • DA menu shows current research levels.
        • -
        • You can print cyberimplants in updated mech fab.
        • -
        -

        Supermichael777 updated:

        -
          -
        • Added an ooc hotkey for borgs = O. They simply didn't have one and it was a consistency issue
        • -
        • Also added Ctrl+O as an any mode keycombo so you dont have to backspace and type ooc. Added to hotkey mode to remain consistent with all other Ctrl combos
        • -
        -

        bustygoku updated:

        -
          -
        • Most backpacks now have 21 or more slots, but are still weight restricted. What this means is that you can have a lot of tiny weight items, but only 7 medium items just like before.
        • -
        -

        phil235 updated:

        -
          -
        • Janicart rider no longer slip on wet floor or bananas. Moving on a floor tile with lube while buckled (chair, roller bed, etc) will make you fall off.
        • -
        - -

        16 August 2015

        -

        Joan updated:

        -
          -
        • Revenants will now occasionally spawn as an event.
        • -
        • Revenants gain more energy from Harvesting, and can Harvest from people in crit.
        • -
        • Revenant powers are more effective, and no longer freeze you in place, besides Harvest.
        • -
        • Slain Revenants will respawn much faster.
        • -
        • Fixed a whole bunch of revenant bugs, including one that caused the objective to always fail.
        • -
        -

        Kor updated:

        -
          -
        • The wizard can now stop time.
        • -
        -

        MMMiracles updated:

        -
          -
        • Revamps bioterror darts into a less-lethal, syringe form. Removed the coniine and spore toxins to keep it solely for quiet take-downs.
        • -
        - -

        15 August 2015

        -

        Miauw updated:

        -
          -
        • Changeling transformations have been upgraded to also include clothing instead of just DNA.
        • -
        • Patches no longer work on dead people.
        • -
        • Added 15-force edaggers that function like pens when off.
        • -
        -

        MrPerson updated:

        -
          -
        • Objects being dragged will no longer get shoved out of your grasp by space wind. Retrieving dead bodies should be possible.
        • -
        -

        RemieRichards updated:

        -
          -
        • Added Changeling Team Objectives, these are handed out to all lings, with the chance of a round having one being 20*number_of_lings% (3 lings = 60%)
        • -
        • Impersonate Department (Team Objective): As many members of a department as can reasonably be picked are chosen for the lings to kill, replace and escape as
        • -
        • Impersonate Heads (Team Objective): 3 to 6 Heads of Staff are chosen for the lings to kill, replace and escape as
        • -
        • If the Changelings have a Team Objective, their usual Kill, Maroon, Etc. objectives will not pick other changelings, to discourage backstabbing in teamling
        • -
        • Changeling Engorged Glands is now the default storage and regen rate, Engorged Glands remains for an extra boost
        • -
        • Armblades can now be used to open powered doors, however it takes 10 seconds of the changeling standing still, Their ability to instantly open unpowered doors remains unchanged
        • -
        • Debrain objective is no longer handed out to lings, it's as good as broken these days
        • -
        • Changelings may now purchase a togglable version of the Chameleon Skin genetics mutation, for 2 DNA
        • -
        - -

        13 August 2015

        -

        CoreOverload updated:

        -
          -
        • Added a new 8TC traitor item: subspace storage implant. It allows you to store two box-sized items in (almost) undetectable storage.
        • -
        • Changed the way most of the surgical operations work. See wiki for new steps.
        • -
        • You can cancel step 2+ surgeries with drapes and cautery in inactive hand.
        • -
        • Defib no longer works on humans who have no heart. Changeling/thrall/cult/strange reagent revives are still working, and this is intended.
        • -
        • You can eat all organs raw now, with exception for brains and cyberimplants.
        • -
        • Some xenos abilities are linked to their organs. Play with xenos' guts for fun and profit!
        • -
        -

        RemieRichards updated:

        -
          -
        • Modifying a string (Text) variable with View Variables or View Variables Mass Modify now allows you to embed variables like real byond strings, For example the variable real_name; you could set a text var to [real_name] and it would be replaced with the actual contents of the var, This allows for Mass fixing of certain variables but it's also useful for badmin gimmickery
        • -
        - -

        12 August 2015

        -

        CosmicScientist updated:

        -
          -
        • Added Space Carp costume to the code, get it from an autodrobe near you.
        • -
        • Added Ian costume to the code, take his place under the HoP's hand, get it from an autodrobe or corgi hide, keep it away from washing machines or it'll meat its end as clothing.
        • -
        • Added Space Carp spacesuit to the code, I know what I'm praying for.
        • -
        -

        bgobandit updated:

        -
          -
        • After multiple complaints from WaffleCo food activists, Nanotrasen has added real chocolate, berry juice and blue flavouring to its ice cream products.
        • -
        - -

        09 August 2015

        -

        RemieRichards updated:

        -
          -
        • Nanotrasen Mandatory FunCo Subsidiary: CoderbusGames, would like to announce an update to Orion Trail!
        • -
        • Spaceports: Buy/Sell Crew, Trade Fuel for Food, Trade Food for Fuel, Buy Spare Electronics, Engine Parts and Hull Plates, or maybe you think you're tough enough to attack the spaceport?
        • -
        • Changelings: Changelings can now sneak into your crew, Changelings eat double the standard food ration and have a chance to Ambush the rest of the crew!
        • -
        • Kill Crewmembers: Do you suspect changelings? or dont feel you have enough food rations? Just shoot somebody in the head, at any time!
        • -
        - -

        07 August 2015

        -

        KorPhaeron updated:

        -
          -
        • Added a new Guardian Mob that can be summoned to manifest inside a mob.
        • -
        • Guardians can communicate with their host and materialize themselves to protect their host with magic powers.
        • -
        • Guardians are invincible but cannot live without or too far from their host, they also relay injuries they suffer to the host.
        • -
        -

        Phil235 updated:

        -
          -
        • Fixed being able to run into your own bullet.
        • -
        -

        RemieRichards updated:

        -
          -
        • You no longer need to click on an item in a storage container to remove it, clicking anywhere around the item works.
        • -
        -

        bustygoku updated:

        -
          -
        • Removed the chance for a disease to make you a carrier on transfer.
        • -
        -

        phil235 updated:

        -
          -
        • The plasma cutter's fire rate is now a bit lower but its projectile can pierce multiple asteroid walls and its range isn't lowered in pressurized environment anymore.
        • -
        - -

        06 August 2015

        -

        AnturK updated:

        -
          -
        • Adds the voodoo doll as a mining treasure, link it with a victim with an item previously held by them.
        • -
        • Once linked the voodoo doll can be used to injure, confuse and control the victim.
        • -
        -

        Core0verlad updated:

        -
          -
        • Items can now be removed from storage containers inside storage containers.
        • -
        • Beds and bedsheets have new sprites.
        • -
        • MMIs are no longer ID locked.
        • -
        -

        KorPhaeron updated:

        -
          -
        • Slaughter Demon's have had their health reduced to 200 and their speed reduced but they get a speed boost when exiting blood.
        • -
        -

        MrPerson updated:

        -
          -
        • Items stacks now automatically merge unless thrown when moved onto the same tile.
        • -
        - -

        05 August 2015

        -

        CoreOverload updated:

        -
          -
        • Implants, implant cases and implanters got RnD levels and can be DA'ed for science.
        • -
        • Surgically removed implant can be placed into an implant case. Remove implant with empty implant case in inactive hand.
        • -
        • Surgical steps now got progress bars.
        • -
        • You can cancel a surgery by using drape on operable body part again. This works only before you perform surgery's first step.
        • -
        • Operating computer shows next step for surgeries. No more alt-tabbing to view next step on wiki while operating.
        • -
        • You cannot start two surgeries on one body part at once. You can start two multiloc surgeries (i.e. two augumentations) on diffirent body parts at once.
        • -
        • Monkey <-> Human transformations now keep your internal organs, cyberimplants and xeno embryos included.
        • -
        -

        Ikarrus updated:

        -
          -
        • Head beatings no longer deconvert gangsters.
        • -
        -

        LordPidey updated:

        -
          -
        • Added a new chemical. Spray tan. It is made by mixing orange juice with oil or corn oil. Warning: overexposure may result in orange douchebaggery.
        • -
        -

        Xhuis updated:

        -
          -
        • Shadowling thralls can now be deconverted via surgery or borging.
        • -
        • Thralls can be revealed by examining them. They can hide this by wearing a mask.
        • -
        • Thralls have a few minor abilities they can use in addition to night vision.
        • -
        • Hatch-exclusive abilities can no longer be used if you are not the shadowling mutant race.
        • -
        • Ascendants are now immune to bombs and singularities. Honk.
        • -
        • A Centcom report has been added for shadowlings.
        • -
        • Ascending no longer kills all shadowling thralls. This allows antagonists who were enthralled to succeed along with the ascendants.
        • -
        • Annihilate now has different sound and a shorter delay before the target explodes. In addition, it now works on all mobs, instead of just humans.
        • -
        • Glacial Blast now properly has no cooldown if used while phase shifting.
        • -
        • Fixes a runtime if a target with no mind is enthralled.
        • -
        -

        bgobandit updated:

        -
          -
        • Nanotrasen scientists have achieved the tremendous breakthrough of injecting gold slime extracts with water. Pets ensued.
        • -
        - -

        04 August 2015

        -

        Kor updated:

        -
          -
        • Soulstones will now attempt to pull ghosts from beyond if the targeted corpse has no soul.
        • -
        -

        Summoner99 updated:

        -
          -
        • Added the *roar emote back to Alien Larva
        • -
        • Fixed aliens not being able to do the *hiss and *screech emotes
        • -
        • Changed how the plural emote system works and now some emotes have plural versions, example is: *hiss and *hisses.
        • -
        - -

        02 August 2015

        -

        Incoming5643 updated:

        -
          -
        • Syndicate toolboxes now come with never before seen red insulated gloves.
        • -
        -

        Steelpoint updated:

        -
          -
        • Fixed multiple mapping errors for Boxstation and the mining base.
        • -
        • A circuit imprinter and exosuit fabrication board have been added to tech storage.
        • -
        -

        SvartaSvansen updated:

        -
          -
        • Our lizard engineers have worked hard and managed to improve Centcom airlocks so they no longer disintegrate when the electronics are removed!
        • -
        • Put a safety net in place so future airlocks without assemblies produce the default assembly instead of disintegrating.
        • -
        - -

        30 July 2015

        -

        Gun Hog updated:

        -
          -
        • The Reactivate Camera power for Malfunctining AIs now costs 10 CPU, and works on the entire camera network, up to 30 cameras fixed.
        • -
        • The Upgrade Cameras power now costs 35 CPU, upgrades all cameras in the network to have EMP proofing, X-ray, and gives the AI night-vision.
        • -
        -

        Ikarrus updated:

        -
          -
        • Door Access buttons can now be emagged to remove access restrictions.
        • -
        -

        LordPidey updated:

        -
          -
        • Added a new medication, Miner's Salve. It heals brute/burn damage over time, and has the side effect of making the patient think their wounds are fully healed. It is mixed with water+iron+oil, or grind a twinkie, a sheet of metal, and a sheet of plasma.
        • -
        • Added a grinder to the mining station.
        • -
        -

        Midaychi updated:

        -
          -
        • Random loot has been added to the derelict as salvage for drones.
        • -
        -

        Scones updated:

        -
          -
        • Adds a Rice Hat to the biogenerator.
        • -
        - -

        29 July 2015

        -

        AnturK updated:

        -
          -
        • Aliens can now mine through asteroid rock.
        • -
        -

        GunHog updated:

        -
          -
        • Cyborg headlamps have a short cooldown before reactivation when forcibly deactivated.
        • -
        • Shadowling's Veil now shuts down headlamps for the ability's entire duration.
        • -
        -

        Kor updated:

        -
          -
        • Eating the heart of a Slaughter Demon will grant you dark powers.
        • -
        -

        freerealestate updated:

        -
          -
        • Fixed bug where copying with ctrl+C didn't work due to it being assigned to resist.
        • -
        • Changed resist to B (hotkeys mode) and ctrl+B (either mode) instead.
        • -
        • Removed End resist from cyborgs.
        • -
        - -

        28 July 2015

        -

        Anonus updated:

        -
          -
        • New gang tags for Omni and Prima gangs.
        • -
        -

        Chiefwaffles updated:

        -
          -
        • After realizing how often AIs tend to 'disappear', Central Command has authorized the shipment of the Automated Announcement System to take over the AI's responsibility of announcing new arrivals.
        • -
        • In addition, users are able to configure the messages to their liking. Early testing has shown that this feature may be vulnerable to malicious external elements!
        • -
        • The station's R&D software has been updated so it can now succesfully create its own prototype AAS board once the prerequisite levels have been met.
        • -
        -

        Dorsisdwarf updated:

        -
          -
        • Increased the cost of Bioterror darts to 6TC.
        • -
        -

        Incoming5643 updated:

        -
          -
        • Double Agents no longer know they're Double Agents and not just standard Traitors.
        • -
        -

        xxalpha updated:

        -
          -
        • Removed Anti-Drop and Nutriment Pump implants from Nuclear Operative's uplink.
        • -
        - -

        27 July 2015

        -

        Bgobandit updated:

        -
          -
        • Burgers can now be made from corgi meat again.
        • -
        -

        Ikarrus updated:

        -
          -
        • Added shutters to the armory to allow quick access when needed.
        • -
        • Security can now use the Brig external airlocks.
        • -
        • Added a join queue when the server has exceeded the population cap.
        • -
        • Decreased the cost of Body Swap and removed it's genetic damage.
        • -
        -

        kingofkosmos updated:

        -
          -
        • Added a link to re-enter corpse to alert when your body is placed in a cloning scanner.
        • -
        - -

        26 July 2015

        -

        Phil235 updated:

        -
          -
        • Sechailers will now break when used too often.
        • -
        • Mechs now have new action button sprites.
        • -
        -

        Steelpoint updated:

        -
          -
        • Security Officers now spawn with a security breathmask in their internals box.
        • -
        • Abductor's batons now changes color with modes.
        • -
        • Unique sprites for Abductor hand cuffs and paper.
        • -
        -

        goosefraba19 updated:

        -
          -
        • Updated the Power Monitoring Console with better alignment and colorized readouts.
        • -
        - -

        25 July 2015

        -

        Dorsisdwarf updated:

        -
          -
        • Due to a fire sale at Syndicate HQ, many of the more interesting traitor gadgets have been cut in price dramatically. Please take this opportunity to make full use, as we cannot guarantee that the sale will last!
        • -
        -

        bgobandit updated:

        -
          -
        • Under pressure from the Animal Rights Consortium, Nanotrasen has improved conditions at its cat and dog breeding facilities. Cats and pugs are now much more responsive to their owners.
        • -
        -

        duncathan updated:

        -
          -
        • Restores RPD delay on disposals machines.
        • -
        -

        xxalpha updated:

        -
          -
        • Agent IDs are now rewrittable.
        • -
        - -

        24 July 2015

        -

        Incoming5643 updated:

        -
          -
        • The spells disintegrate and flesh to stone have had their mechanics changed. Using these spells will spawn a special touch weapon in a free hand (your dominant hand if possible) that can then be used to inflict the spell on the target of your choice. Having the touch weapon out is obvious, this is not a stealth based change. Clicking the spell while the hand is out will let you return the charge without using it.
        • -
        • The spell won't begin to recharge until the hand attack is either used or returned. Additionally these changes mean you can no longer use these spells while stunned or handcuffed. As a suggestion remember that the mutate spell allows you to break out of cuffs very easily, and warping abilities will keep you from getting cuffed to begin with!
        • -
        - -

        23 July 2015

        -

        NullQuery updated:

        -
          -
        • Crew monitoring: The minimap now supports scaling. You can zoom in and out using the buttons. Hovering over an entry in the table centers the minimap on that part of the screen.
        • -
        • Crew monitoring: If the window is wide enough the health indicator will expand to show full health data (if available).
        • -
        • Crew monitoring: Clicking on the area name will now copy the coordinates to your clipboard.
        • -
        • Crew monitoring: The AI can view health information again, but there is a 5 second delay between updates for everyone watching.
        • -
        -

        freerealestate updated:

        -
          -
        • Added resist hotkeys for borgs and humans. With hotkeys mode, use CTRL+C or C as a human and CTRL+C, C or END as a borg. With hotkeys mode off, use CTRL+C as a human and END as a borg.
        • -
        -

        xxalpha updated:

        -
          -
        • Changeling augmented eyesight night vision is now working.
        • -
        - -

        21 July 2015

        -

        Fayrik updated:

        -
          -
        • Syndicate Donksoft gear now costs less.
        • -
        -

        Xhuis updated:

        -
          -
        • Firelocks may now be constructed and deconstructed with standard tools. Circuit boards can be produced at a standard autolathe.
        • -
        -

        phil235 updated:

        -
          -
        • Thrown things no longer bounces off walls, unless they're in no gravity. Heavy items and mobs thrown can push the mobs and non anchored objects they land on. Throwing a mob onto a mob in no gravity will push each one in opposite direction. Thrown mobs landing on wall, or dense object or mob gets stunned and a bit injured. The damage when mob hit a wall is nerfed.
        • -
        - -

        20 July 2015

        -

        AnturK updated:

        -
          -
        • Lightning Bolt now always bounces 5 times and deals 15 to 50 burn damage to each target depending on the chargeup
        • -
        -

        KorPaheron updated:

        -
          -
        • Added the Multiverse Sword, a new wizard artifact that can summon clones of yourself from other universes, allowing for dangerous amounts of recursion.
        • -
        -

        phil235 updated:

        -
          -
        • Mechs no longer use object verbs and the exosuit interface tab. They now use action buttons. Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window. Mechs get two special alerts when their battery or health is low. Mechs now properly consume energy when moving and having their lights on. Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill).
        • -
        • Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window.
        • -
        • Mechs get two special alerts when their battery or health is low.
        • -
        • Mechs now properly consume energy when moving and having their lights on.
        • -
        • Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill).
        • -
        - -

        19 July 2015

        -

        Gun Hog updated:

        -
          -
        • Nanotrasen advancements in cyborg technology now allow for integrated headlamps! As such, the flashlight package normally used as a module is now seamlessly merged with their systems!
        • -
        -

        Ikarrus updated:

        -
          -
        • Asimov's subject of "human beings" can now be modified by uploaders.
        • -
        • Eaxmining AI modules while adjacent to them will show you what laws it will upload.
        • -
        -

        MMMiracles updated:

        -
          -
        • Adds a TWANG sound effect when hitting things with a guitar.
        • -
        - -

        18 July 2015

        -

        AlexanderUlanH updated:

        -
          -
        • Reduced stun duration of tabling to be closer to other stuns.
        • -
        -

        Iamgoofball updated:

        -
          -
        • The Bioterror Chemical Sprayer is now filled with a more deadly mix of chemicals.
        • -
        -

        RemieRichards updated:

        -
          -
        • Changelings now regenerate chemicals and geneticdamage while dead, but only up to specific caps (50% of their max chem storage, and 50 geneticdamage)
        • -
        • Fakedeath's length has been reduced from 80s dead (1 minute 20) to 40s dead
        • -
        • Changelings now get to see the last 8 messages the person they absorbed said, to allow them to better impersonate their victim's speech patterns
        • -
        -

        Steelpoint updated:

        -
          -
        • Reduced weight of Sechailer, it now fits in boxes.
        • -
        -

        phil updated:

        -
          -
        • Smoke and foam touch reactions gets buffed.
        • -
        • Reagent dispensers (watertank, fueltank) tells you how much reagents they have left when examined.
        • -
        • Liquid dark matter blob spore smoke now cannot throw you. The effects of sorium, blob sorium, liquid dark matter and blob liquid dark matter are now scaled by their volume. Sorium/LDM blob's touch now throws the mobs who are close but simply moves the mobs that are further away.
        • -
        - -

        17 July 2015

        -

        Ikarrus updated:

        -
          -
        • Virology is no longer all-access.
        • -
        • Changelings now have the ability to swap forms with another being.
        • -
        • Halved Domination Time.
        • -
        • Reinforced windows and windoors are a bit more resistant to fires and blasts.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Scrubbers now use power: 10w + 10w for every gas its configured to filter. (60w for siphon)
        • -
        • Scrubbers can now be configured to operate on a 3x3 range via the air alarm at a high cost (ranging from 100w to 1000w depending on how many tiles are near it that aren't blocked and how much power it's using normally)
        • -
        • Huge portable scrubbers (like in toxins storage) now use a 3x3 range rather then a higher volume rate
        • -
        • Fixed issue with atmos not allowing low levels of plasma to spread
        • -
        • Fixed issue with atmos not adding or removing plasma overlays in some cases
        • -
        • Panic siphon now uses a 3x3 area range rather then increasing the scrubbers intake rate by 8x
        • -
        • Replace air uses 3x3 range for the first stage
        • -
        • Air alarms now have 3 new environmental modes:
        • -
        • Siphon - Panic siphon without the panic, operates on a 1 tile range
        • -
        • Contaminated - Activates all gas filters and 3x3 scrubbing mode
        • -
        • Refill Air - 3 times the normal vent output
        • -
        - -

        14 July 2015

        -

        AnturK updated:

        -
          -
        • New species of mimic was spotted in the wilderness of space. Watch out!
        • -
        -

        Jordie0608 updated:

        -
          -
        • Added a Local Narrate verb for admins.
        • -
        - -

        13 July 2015

        -

        Ikarrus updated:

        -
          -
        • Loyalty Implant HUD Icon has been updated.
        • -
        -

        duncathan updated:

        -
          -
        • Greatly shortened the time it takes to lay pipes with the RPD and to unwrench pipes in general.
        • -
        • Added Optical T-Ray scanners to R&D and Atmospheric Technician closets. Optical T-Ray Scanners function identically to a handheld scanner.
        • -
        - -

        11 July 2015

        -

        Dorsidwarf updated:

        -
          -
        • Due to a new Syndicate budget, uplink implants are now only 14 TC.
        • -
        • In order to facilitate inter-agent communication, Syndicate Encryption Keys have been reduced to 2TC. They retain the ability to intercept all channels and speak on a private frequency.
        • -
        -

        Ikarrus updated:

        -
          -
        • Robotic augmentations have been made a bit more difficult to maintain.
        • -
        - -

        10 July 2015

        -

        Ikarrus updated:

        -
          -
        • New Changeling Ability: False Armblade Sting. It creates an undroppable armblade on the target temporarily. It will appear exactly like a real one, except you can't do anything with it.
        • -
        • Transform stings are no longer stealthy.
        • -
        - -

        09 July 2015

        -

        AlexanderUlanH updated:

        -
          -
        • Riot Shotguns now spawn loaded with rubber pellet shells that deal high stamina damage.
        • -
        -

        kingofkosmos updated:

        -
          -
        • Both beakers and drinking glasses can now be be drunk from, fed to mobs and splashed on mobs, turfs and most objects with harm intent.
        • -
        -

        nukeop updated:

        -
          -
        • RCDs have a larger storage and can be loaded with glass, metal and plasteel.
        • -
        • Grilles and Windows can be made with an RCD.
        • -
        • Engi-Vend machine now has three RCDs.
        • -
        • Removed RCD as a steal objective.
        • -
        - -

        07 July 2015

        -

        Ikarrus updated:

        -
          -
        • Fixed bug where gang messages would occasionally fail to send.
        • -
        • Fixed bug that prevented implant breakers from recruiting security.
        • -
        • Implanters are now only blocked by helmets with THICKMATERIAL
        • -
        • Light severity explosions no longer shred clothes.
        • -
        -

        MMMiracles updated:

        -
          -
        • Adds a new crate to cargo in the security section, for when desperate times call for desperate measures.
        • -
        -

        NullQuery updated:

        -
          -
        • Crew monitoring computers now sort by department and rank again.
        • -
        • Crew monitoring computer: Hovering over a dot on the minimap will now jump to the appropriate entry in the table.
        • -
        • sNPCs were given ID cards with blank assignments.
        • -
        - -

        06 July 2015

        -

        Ikarrus updated:

        -
          -
        • Increased Uzi SMG cost to 60 influence.
        • -
        • Increased Uzi ammo cost to 40 influence.
        • -
        • Domination attempt limit is reduced to 1 per gang while the shuttle is docked with the station.
        • -
        • Gang bosses can promote and recall the shuttle using spare gangtools
        • -
        • Fixed Gang bosses getting deconverted with head trauma
        • -
        • Lizard characters can now get random names unique from humans.
        • -
        - -

        05 July 2015

        -

        AlexanderUlanH & Xhuis updated:

        -
          -
        • Shadowling Ascendants have a new ability to send messages to the world.
        • -
        • Glare now properly silences targets.
        • -
        • Veil now turns off held lights.
        • -
        • Drain Thralls replaced with Drain Life, which targets all nearby humans.
        • -
        • Spatial Relocation replaced with Black Recuperation which lets you revive a dead thrall every five minutes.
        • -
        • Removed Vortex.
        • -
        • Shadowlings can now only enthrall five people before being forced to hatch; Hatched shadowlings can continue to enthrall however non-hatched ones can't pass the global limit.
        • -
        • Enthralling sends a message to all nearby humans.
        • -
        • Removed cooldown on Glacial Freeze.
        • -
        -

        Ikarrus updated:

        -
          -
        • Reactive armor may now teleport user to space tiles. Be careful using it around space.
        • -
        -

        Razharas updated:

        -
          -
        • Firing pins can now be removed by tablecrafting a gun with a plasmacutter, screwdriver and wirecutters.
        • -
        -

        RemieRichards updated:

        -
          -
        • Melee attacks with weapons now display and animation of the weapon over the target.
        • -
        • Tablecrafting window now shows all recipies and has been split into categorized tabs.
        • -
        • 30 item limit removed.
        • -
        -

        Sabbat updated:

        -
          -
        • Updated the cult armor rune to let you get additional equipment or abilities based on what you're wearing or holding. Some nerfed versions of wizard spells can be used by the cult in exchange for unique clothing, these spells require the cult robes or armor in order to use. No armor choices are mandatory, you will always have the option of the default choice.
        • -
        • Zealot - Default armor rune. If none of the required clothing is worn this will be chosen automatically. Is the same as ever.
        • -
        • Summoner - If you are wearing the wizard robe and hat when using the armor rune this choice will be available. User will receive magus robes and hat and nerfed versions of the summon shard and summon shell spells.
        • -
        • Traveler - Available to people wearing EVA suit and helmet. Replaces the EVA suit and helmet with the cult space suit and space helmet. Gives you a sword.
        • -
        • Marauder - Available to people wearing the captain's space suit and helmet. Same as Traveler except user is given a spell of summon creature (two creatures). They can and will attack the user.
        • -
        • Trickster - Available if wearing the RD's reactive teleport armor. Gives you magus robes, a wand of doors, and a nerfed version of Blink.
        • -
        • Physician - Available if wearing the CMO's labcoat. Gives you a wand of life.
        • -
        -

        TheVekter updated:

        -
          -
        • Ian now has a dog-bed in the HoP's office.
        • -
        -

        nukeop updated:

        -
          -
        • Uplinks now have a syndicate surgery bag containing surgery tools, a muzzle, a straightjacket and a syndicate MMI.
        • -
        • Syndicate MMIs can only be placed in cyborgs to create an unlinked cyborg with syndicate laws.
        • -
        - -

        04 July 2015

        -

        Gun Hog updated:

        -
          -
        • The Ore Redemption Machine now allows users to release minerals without having to insert an ID first.
        • -
        -

        Ikarrus updated:

        -
          -
        • Fixed items that logically shouldn't spill, spilling their contents when thrown
        • -
        • Fixed Bartender's non-spilling powers
        • -
        • Fixed thrown beakers not applying their contents onto floors
        • -
        • Fixed unable to transfer reagents between beakers you are holding
        • -
        • Fixed bombs shredding clothes that should have been protected by covering clothes
        • -
        • Fixed gang mode.
        • -
        -

        MMMiracles updated:

        -
          -
        • Added patriotic underwear apparel due to the most god damn american holiday being just around the corner.
        • -
        • Also adds some other stuff for those inferior countires too, I guess.
        • -
        - -

        03 July 2015

        -

        Ikarrus updated:

        -
          -
        • Added support for up to six gangs at a time. Admins may add additional gangs to any round.
        • -
        • Gang mode now has a chance to start with a third gang.
        • -
        • Promotion of lieutenants have been re-added
        • -
        • Every lieutenant promoted will lengthen the gang's recruitment cooldowns by one minute.
        • -
        • Only gang bosses will be able to recall the shuttle from their gangtool.
        • -
        • A recruitment pen that has not been used for a while will accumilate charges, so you are no longer punished for waiting to convert people.
        • -
        • Gangs are now fully functional outside of gang mode.
        • -
        -

        Ricotez updated:

        -
          -
        • Added two categories of mutant bodyparts for humans with the same system that lizards use: ears and tails. Right now only admins can edit these.
        • -
        • Updated the system that checks for which jobs your character qualifies to be species-dependant. At this moment you won't notice any differences, but in the future coders can use this to be more specific about which jobs a species is allowed in under which circumstances.
        • -
        • Added one option to both categories, taken from the kitty ears: a cat tail and cat ears.
        • -
        • Added a new button to the VV menu drop-down list for admins: Toggle Purrbation. Putting a human on purrbation will give them cat ears and a cat tail, and send them the message 'You suddenly feel valid.' Using the button a second time removes the effects.
        • -
        • Adding categories for tattoos and scars is in the works. (Read: I need sprites!)
        • -
        -

        oranges updated:

        -
          -
        • Engineers in nanotrasen's safety equipment department announced the release of a new and improved version of the X25 taser trigger, previous triggers, which suffered from a long line of misfire problems were recalled enmasse. Nanotrasen refused to comment on rumours that the previous trigger design was the work of a saboteur.
        • -
        - -

        02 July 2015

        -

        Ikarrus updated:

        -
          -
        • Throwing reagent containers such as drinks or beakers may spill their contents onto whatever they hit
        • -
        • Slipping while carrying items in your hand may cause ~accidents~
        • -
        • Mounted and portable flashers can now only be burned out from overuse, similar to flashes.
        • -
        -

        oranges updated:

        -
          -
        • Thanks to department budget cuts we've had to remove the security cameras built into officer helmets, Nanotrasen apologies for this inconvenience.
        • -
        - -

        01 July 2015

        -

        Ikarrus updated:

        -
          -
        • Multiple gang leaders are spawned at round start, the number which depends on server population
        • -
        • Gangsters can no longer be promoted mid-game.
        • -
        • Security can once again deconvert gangsters with loyalty implants
        • -
        • Added an Implant Breaker item to the gangtool as a purchasable item for 10 influence each
          * They are a one-use item that destroys all implants in the target, including loyalty implants
          * They will also attempt to recruit the target before destroying itself
        • -
        • Implanters no longer work if the target is wearing headgear. Remove them first.
        • -
        -

        NullQuery updated:

        -
          -
        • The crew monitoring computer, AI crew monitoring popup and the handheld crew monitor now update automatically.
        • -
        • Crew monitoring: The health information has been turned into a health indicator. It goes from green to red. Hovering over the icon shows detailed information (if available).
        • -
        • Crew monitoring: The location coordinates have been hidden. You can see them by hovering over the 'Location' column.
        • -
        • Crew monitoring: A minimap has been added so you can easily see where people are.
        • -
        • Crew monitoring: Players who are not in range of a camera are not shown on the minimap.
        • -
        • Crew monitoring: AI players can quickly move to other locations or track players by clicking the minimap or items in the table.
        • -
        • Crew monitoring: For AI players, health information always shows a white indicator instead of green-to-red. This is a deliberate limitation to prevent the AI from becoming too omnipresent.
        • -
        -

        phil235 updated:

        -
          -
        • Space drug overdose no longer cause brute/brain damage but you hallucinate more. Space Drug Blob now makes you hallucinate even if you don't overdose on its space drug.
        • -
        -

        xxalpha updated:

        -
          -
        • Added a new traitor objective: steal the station's self-destruct nuke plutonium core.
        • -
        - -

        29 June 2015

        -

        Ikarrus updated:

        -
          -
        • Clothing has been separated out of equipment lockers into wardrobes to reduce clutter.
        • -
        -

        Incoming5643 updated:

        -
          -
        • The secrets of the rainbow slimes have finally been revealed. To attain this rare blob you must breed a slime with a 100% mutation chance!
        • -
        • Rainbow slime cores will generate a randomly colored slime when injected with plasma. It's a good plan B if the slimes aren't cooperating in terms of colors. You can get any color slime this way, pray to the RNG!
        • -
        -

        Xhuis updated:

        -
          -
        • The Sleeping Carp clan has made its presence known on Space Station 13. Some gangs will name themselves after this group and practice martial arts rather than using traditional gang weaponry. These shadowboxers are not to be taken lightly.
        • -
        -

        oranges updated:

        -
          -
        • Thanks to a breakthrough in directed vector thrusting, all nanotrasen brand jetpacks have been greatly improved in speed and handling
        • -
        - -

        28 June 2015

        -

        Ikarrus updated:

        -
          -
        • Gang Lieutenants can buy gang tools now, but at a higher cost than the original boss
        • -
        • Gang leaders can register additional gangtools to themselves for use as spares.
        • -
        • Number of maximum lieutenants lowered to 2
        • -
        • Pistol cost increased to 25 influence
        • -
        • Uzi cost increased to 50 influence
        • -
        • Uzi Ammo decreased to 20 influence
        • -
        • Overcoats added to items the biogenerator can produce.
        • -
        • Micro and Macro bomb implants are now restricted to the Nuclear game mode.
        • -
        -

        phil235 updated:

        -
          -
        • Smoke (and foam) no longer distribute more reagents than they have. The amount of clouds in a smoke now depends on the amount of smoke created. Acid no longer melts items on a mob at low volume, and the chances to melt them increases with the amount applied on the mob. Sprays can now contain acid again.
        • -
        - -

        27 June 2015

        -

        Ikarrus updated:

        -
          -
        • Some objects can be burned now.
        • -
        • Bombs will shred your clothes, with respect to their layering and armor values. Exterior clothing will shield clothing underneath. Storage items will drop their contents when bombed this way.
        • -
        -

        Laharl Montogmmery updated:

        -
          -
        • Storage Content Transfer : Bluespace Boogaloo! You can now transfer the content of the BoH/BRPED into tiles/bins/bags out of your reach. Range is 7 tiles.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Admins will now receive a notification when one of them starts to reply to an adminhelp to cut down on multiple responses to adminhelps and let admins know when an adminhelp isn't getting replied to.
        • -
        • The keyword finder in admin helps (adds a (?) link next to player names in the text of adminhelps) has been added for all player to admin pms, as well as admin say.
        • -
        -

        NullQuery updated:

        -
          -
        • Introduces html_interface, a module to streamline the management of browser windows.
        • -
        • Adds playing cards that utilize a new HTML window management system.
        • -
        -

        Vekter updated:

        -
          -
        • Added a new military jacket to the Autodrobe and ClothesMate.
        • -
        - -

        26 June 2015

        -

        Ikarrus updated:

        -
          -
        • Added a couple of new gang tag resprites by Joan.
        • -
        -

        Kor updated:

        -
          -
        • Summon Guns has returned to its former glory. The spell will once again create antagonists, now with the objective to steal as many guns as possible.
        • -
        • Summon Guns once again costs a spell point, rather than granting one.
        • -
        -

        phil235 updated:

        -
          -
        • Buffs traitor stimpack (and adrenalin implant) to be more efficient against stuns/knockdowns.
        • -
        -

        pudl updated:

        -
          -
        • You can now play games of mastermind to unlock abandoned crates found throughout space.
        • -
        - -

        25 June 2015

        -

        Iamgoofball updated:

        -
          -
        • Changes up how Explosive Implants work.
        • -
        • They have become Microbomb Implants. They cost 1 TC each. Each implant you inject increases the size of the explosion. You gib on usage, regardless of explosion size.
        • -
        • A Macrobomb implant was added for 20 TC. It is the equivalent of injecting 20 microbombs.
        • -
        • Nuke Ops start with microbomb implants again.
        • -
        - -

        24 June 2015

        -

        Ikarrus updated:

        -
          -
        • Request Console message sent to major departments will now be broadcasted on that department's radio.
        • -
        • Request Consoles can be used to quicly declare a security, medical, or engineering emergency.
        • -
        - -

        23 June 2015

        -

        Fayrik updated:

        -
          -
        • NanoUI is now Telekenesis aware, but due to other constraints, NanoUI interfaces are read only at a distance.
        • -
        • Refactored all NanoUI interfaces to use a more universal proc.
        • -
        • Adjusted the refresh time of the NanoUI SubSystem. All interfaces will update less, but register mouse clicks faster.
        • -
        • Removed automatic updates on atmospheric pumps, canisters and tanks, making them respond to button clicks much faster.
        • -
        • Atmos alarm reset buttons work now. Probably.
        • -
        -

        Iamgoofball updated:

        -
          -
        • Adds a progress bar when performing actions.
        • -
        -

        Ikarrus updated:

        -
          -
        • New gang names with tags created by Joan
        • -
        • C4 explosive can be purchased by gangs for 10 influence.
        • -
        • Recruitment pen cost increased to 50.
        • -
        • Lieutenants recieve one free recruitment pen.
        • -
        • Recruitment pens are now stealthy and no longer give a tiny prick message.
        • -
        • Increased chance of deconversion with head trauma
        • -
        • Recalling the shuttle now takes about a minute to work, during which you won't be able to use your gangtool.
        • -
        • Pinpointers no longer point at dominators. Instead, dominators will beep while active.
        • -
        • Added puffer jackets and vests.
        • -
        • Increased gang outfit armor. It is moderately resistant to bullets now.
        • -
        • Removed bulletproof vests from gangtool menu.
        • -
        -

        Jordie0608 updated:

        -
          -
        • Admins can now flag ckeys to be alerted when they connect to the server.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Admins can now reject poor adminhelps. This will tell the player how to construct a useful adminhelp and give them back their adminhelp verb
        • -
        -

        RemieRichards updated:

        -
          -
        • Cumulative armour damage resistance is now capped at 90%, you will now always take at bare minimum, 10% of the incoming damage.
        • -
        • Added a system for Armour Penetration to items, it works by temporarily (It does NOT damage the armour or anything) reducing the armour values by the AP value during the attack instance.
        • -
        • The formula for AP is Armour-ArmourPenetration = AdjustedArmour and AdjustedArmour is used for all the remaining calculations instead of Armour (Eg: 80 Melee - 15 AP = 65 Melee).
        • -
        • The Ninja's Energy Katana has 15 AP, Xenomorphs have an inbuilt AP of 10.
        • -
        • You can now unwrench pipes who's internal pressures are greater than that of their environment...
        • -
        • However it will throw you away from the pipe at extreme speed! (You are warned beforehand if the pipe will do this, allowing you to cancel)
        • -
        -

        Vekter updated:

        -
          -
        • Finally fixed immovable rods! They will now properly bisect the station (and crit anyone unlucky enough to be in their path).
        • -
        • Increased Meteor activity detected in the vicinity of the station. Be advised that many storms may be more violent than they once were.
        • -
        • Gravitational anomalies will now throw items at mobs in their vicinity. Take care while scanning them.
        • -
        • Flux anomalies explode much more violently now. Get there and destroy them, or risk losing half a department.
        • -
        -

        xxalpha updated:

        -
          -
        • Added a new Reviver implant: now it revives you from unconsciousness rather than death.
        • -
        • Added cybernetic implants and a cybernetic implants bundle to the Nuke Ops uplink.
        • -
        • Fixed Nutriment pump implant printing.
        • -
        • Health Analyzers now have the ability to detect cybernetic implants.
        • -
        • X-Ray implants are now much harder to unlock.
        • -
        - -

        22 June 2015

        -

        Iamgoofball updated:

        -
          -
        • Removed failure chance and delay when emagging an APC.
        • -
        -

        KorPhaeron updated:

        -
          -
        • Rebalanced armor to be less effective, reducing the melee, bullet and/or laser damage reduction of all armor suits.
        • -
        -

        LaharlMontogmmery updated:

        -
          -
        • You can now click and drag a storage container to empty it's contents into another container, disposal bin or floor tile.
        • -
        -

        Xhuis updated:

        -
          -
        • Revenants have received a considerable overhaul.
        • -
        • Revenants will no longer share spawn points with space carp and will spawn in locations like the morgue and prisoner transfer center.
        • -
        • Revenants can no longer cross tiles covered in holy water.
        • -
        • Revenants have a new ability called Defile for 30E. It will cause robots to malfunction, holy water over tiles to evaporate, and a few other effects.
        • -
        • Upon death, revenants will appear and play a sound before rapidly fading away and leaving behind glimmering residue as evidence of their demise.
        • -
        • This residue lingers with the essence of the revenant. If left unattended, it may reform into a new revenant. Simply scattering it is enough to stop this, but it also has high research levels.
        • -
        • Revenants now have fluff objectives as well as a set essence goal.
        • -
        • Revenanants will be revealed for longer when using abilities and also receive feedback on this revealing.
        • -
        • Revenants can now only spawn via random event with a specific amount of dead mobs on the station. The default for this is 10.
        • -
        • Revenants can no longer use abilities from inside walls.
        • -
        • Directly lethal abilities have been removed from revenants. In addition, they can no longer harvest unconscious people, only the dead.
        • -
        - -

        21 June 2015

        -

        GunHog updated:

        -
          -
        • The Hostile Lockdown ability for Malfunctioning AIs has been nerfed. It now costs 30 CPU, is much more obvious, and automatically resets in 90 seconds.
        • -
        • Buffed the Upgrade Turrets Malfunction ability. Turrets will now fire heavy lasers instead of simply shooting faster.
        • -
        • Nanotrasen has released an Artificial Intelligence firmware upgrade under the ID 41ST0L3MYB1K3. It contains drivers for interacting with all variants of exosuit technology, from the Ripley APLU design to even experimental Phazon units. Simply upload your AI to the exosuit's internal computer via the InteliCard device. Per safety regulations, the exosuit must have maintenance protocols enabled in order to remove an AI from it.
        • -
        • Malfunctioning AIs may wirelessly steal mechs via a new power, Mech Domination. For 30 CPU, a Malf AI may permanently upload itself to a mech, ejecting any pilots. Malf AIs will still lose if they leave the Z-level, and the Malf will be gibbed if the mech is destroyed - they cannot be carded out of the mech or shunt to an APC.
        • -
        -

        Iamgoofball updated:

        -
          -
        • Blobs can no longer have Morphine as their chemical.
        • -
        -

        duncathan updated:

        -
          -
        • Heat exchangers now update their color to match that of the pipe connected to them.
        • -
        • Heat exchangers are on longer dense.
        • -
        - -

        20 June 2015

        -

        Dorsisdwarf updated:

        -
          -
        • Syndicate Bulldog Shotguns now use slug ammo instead of buckshot by default
        • -
        • Nuke Ops can now buy team grab-bags of bulldog ammo at a discount.
        • -
        -

        Ikarrus updated:

        -
          -
        • Wearing your gang's outfit now increases influence and shortens takeover time faster.
        • -
        • Added several more options for gang outfits
        • -
        • Pinpointers will now point at active dominators.
        • -
        • Gang outfits are now slightly armored
        • -
        • Gang tags are now named 'graffiti' to make them harder to detect
        • -
        • Initial takeover timer is now capped at 5 minutes (50% control)
        • -
        • Server Operators: The default Delta Alert texts have changed. Please check if your game_options.txt is up to date.
        • -
        • Loyalty implants now treat gangs as it treats cultists. Implants can no longer deconvert gangsters, but it can still prevent recruitments.
        • -
        • Replaced tommy guns with 9mm 2-burst 32 mag uzis that costs 40 influence. Unlike tommy guns gangs will be able to purchase ammo for uzis.
        • -
        -

        Jordie0608 updated:

        -
          -
        • For Admins: Jump-to-Mob (JMP) notification command replaced with Follow (FLW).
        • -
        • Message and Follow links added to many notifications.
        • -
        • New buttons to toggle nuke and set security level.
        • -
        • Flamethrowers are logged in attack_log.
        • -
        -

        Thunder12345 updated:

        -
          -
        • Combat shotguns are now semi automatic, and will be pumped automatically after firing.
        • -
        • Combat shotgun capacity has been reduced to six shells.
        • -
        -

        Xhuis updated:

        -
          -
        • You will now trip over securitrons if you run over them whilst they are chasing a target.
        • -
        • An admin-spawnable drone dispenser has been added that will automatically create drone shells when supplied with materials.
        • -
        • Airlock charges are available to traitors and will cause a lethal explosion on the next person to open the door.
        • -
        • Nuclear operatives can now buy drum magazines for their Bulldog shotguns filled with lethal poison-filled darts.
        • -
        • When a malfunctioning AI declares Delta, all blue tiles in its core will begin flashing red.
        • -
        • Back-worn cloaks have been added for all heads except the HoP. LARPers rejoice!
        • -
        • More suicide messages have been added for a few items.
        • -
        - -

        18 June 2015

        -

        AnturK updated:

        -
          -
        • Added new photo-over-pda function. Apply the photo to PDA to send it with your next message!
        • -
        -

        Ikarrus updated:

        -
          -
        • Department Management consoles have been added to Head of Staff offices. These will enable heads to modify ID's access to their department, as well as preform demotions.
        • -
        -

        Miauw updated:

        -
          -
        • Bullets can now damage cameras.
        • -
        • Camera alarms now trigger 90 seconds after the first EMP pulse, instead of when all EMP pulses run out.
        • -
        • Makes the force required to damage cameras greater than or equal to ten instead of greater than ten.
        • -
        • Camera alarms now trigger when cameras are disabled with brute force or bullets.
        • -
        -

        Xhuis updated:

        -
          -
        • Nanotrasen scientists have determined that a delaminating supermatter shard combining with a gravitational singularity is an extremely bad idea. They advise keeping the two as far apart as possible.
        • -
        -

        phil235 updated:

        -
          -
        • Nerfed the xray gun. Its range is now 15 tiles.
        • -
        - -

        15 June 2015

        -

        Incoming5643 updated:

        -
          -
        • Lizards can now choose from a wide varity of physical appearances in character creation! Sprites made by WJohn. Hiss Responsibly.
        • -
        -

        Kor updated:

        -
          -
        • A terrible new creature stalks the halls of SS13.
        • -
        • The wizard has a new artefact related to said creature.
        • -
        • Added a new sepia slime plasma reaction. Try it out!
        • -
        -

        spasticVerbalizer updated:

        -
          -
        • Drones can now properly quick-equip.
        • -
        - -

        14 June 2015

        -

        Ikarrus updated:

        -
          -
        • White suits added to gang outfits
        • -
        • Gang outfits are now free, but are now limited in stock (that replenishes over time)
        • -
        • While attempting a Hostile Takeover, gangs do not gain influence. Instead, the takeover timer will be reduced by how many territories they control.
        • -
        • Spraycan cost reduced to 5 influence.
        • -
        • Recruitment Pen cooldown increased to 2 minutes, but is reduced if the enemy gang has more members than yours.
        • -
        • Tommy guns no longer deal stamina damage.
        • -
        • Gangtools can no longer recall the shuttle if the game mode is not Gang War
        • -
        - -

        12 June 2015

        -

        Ikarrus updated:

        -
          -
        • Gang Updates
        • -
        • New objective: To win, Gangs must now buy a Dominator machine (50 influence) and defend it for a varying time frame.
          * The location of the dominator is broadcasted to the entire station the moment it is activated
          * The more territories the gang controls, the less time it will take
          * Gangs no longer win by capturing territories
        • -
        • A choice of gang outfits are now purchasable for 1 influence each
        • -
        • Thompson SMGs aka "tommy guns" are now purchasable for 50 influence
        • -
        • Bulletproof armor vests are now purchasable for 10 influence
        • -
        • Gang messages are now free to send
        • -
        • Prices of pistols and pens reduced to 20 and 30, respectively
        • -
        • Gang spraycans have been made a lot less obvious. They look nearly identical to regular ones, now.
        • -
        • Gangs will no longer be notified how much territory the enemy controls
        • -
        -

        Incoming5643 updated:

        -
          -
        • Growing tired of reports of slain members, the Wizard Federation has cautiously sactioned the dark path of lichdom. Beware of the powerful lich who hides his phylactery well, for he is immortal!
        • -
        • The trick to defeating liches is to destroy either their body or their phylactery item before they can ressurect to it. The more a lich is slain the longer it will take him to make use of his phylactery and the more likely the crew is to catch him during a vunerable moment.
        • -
        • Due to the addition of proper liching, skeletons as a choosable race from magic mirrors has been discontinued. My apologies to the powergamers. A special admin version of the mirror that allows for skeletons has also been added to the code.
        • -
        -

        Miauw updated:

        -
          -
        • AIs have received several minor nerfs in order to increase antagonist counterplay:
        • -
        • AI tracking is no longer instant, it takes an amount of time that increases with distance from the AI eye, up to 4 seconds. The AI detector item will light up when an AI begins tracking.
        • -
        • A random camera failure event has been added, which will break one or two random cameras.
        • -
        • You can no longer keep tracking people that are outside of your camera vision.
        • -
        • Camera wires have been removed. Screwdriver a camera to open the panel, then use wirecutters to disable it or a multitool to change the focus.
        • -
        • You can now hit cameras with items to break them. To repair a camera, simply open the panel and use wirecutters on it.
        • -
        • Camera alerts now only happen after a camera is reactivated.
        • -
        -

        RemieRichards updated:

        -
          -
        • New optional explosion effect ported from /vg/'s DeityLink, Explosions that are affected by Walls and Doors
        • -
        - -

        11 June 2015

        -

        Cheridan updated:

        -
          -
        • Removes the powerdrain for individiual active modules on cyborgs.
        • -
        - -

        09 June 2015

        -

        Aranclanos updated:

        -
          -
        • Structures and machines can now be built on shuttles.
        • -
        -

        Iamgoofball updated:

        -
          -
        • Adds the Bluespace Rapid Part Exchange Device: holds up to 400 stock parts and can be used to upgrade machines at range without needing to open their maintenance panel.
        • -
        • A new tier of stock parts have been added, they're very expensive to produce but provide ample improvements.
        • -
        • Many machines can now also be upgraded.
        • -
        • Emitter: Lasers decrease firing delay and Capacitors decrease power consumption.
        • -
        • Gibber: Matter Bins increase yield of meat and Manipulators speed up operation time, at high level can gib creatures with clothes.
        • -
        • Seed Extractor: Matter Bins increase storage and Manipulators multiply seed production.
        • -
        • Monkey Recycler: Matter Bins increase the amount of monkey cubes produced and Manipulators reduce the monkey-to-cubes ratio to a minimum of 1-to-1.
        • -
        • Crusher: Matter Bins increase material yield and Manipulators increase chance to yield materials, at high level there is a chance for rarer materials.
        • -
        • Holopad: Capacitors increase an AI's traversal range from the holopad.
        • -
        • Smartfridge: Matter Bins increase storage.
        • -
        • Processor: Matter Bins increase yield and Manipulators speed up operation time.
        • -
        • Microwave: Matter Bins increase storage.
        • -
        • Ore Redemption Machine: Matter Bins increase yield per ore, Lasers increase points per ore and Manipulators speed up operation time.
        • -
        • Hydroponics Tray: Manipulators improve water and nutrients efficiency.
        • -
        • Biogenerator: Matter Bins increase storage.
        • -
        -

        bananacreampie updated:

        -
          -
        • Added several new options to the ghostform sprites
        • -
        - -

        08 June 2015

        -

        AnturK updated:

        -
          -
        • Improved the interface of Spellbooks.
        • -
        -

        Cheridan updated:

        -
          -
        • Push-force from Atmospherics now depends on an entity's weight, heavier objects are less prone to being pushed.
        • -
        • Magboots and No-Slip shoes now prevent pushing from spacewind.
        • -
        -

        Firecage updated:

        -
          -
        • Protolathes can now build Experimental Welding Tools.
        • -
        - -

        07 June 2015

        -

        Aranclanos updated:

        -
          -
        • Malfunctioning AIs can preview placement of a Robotic Factory.
        • -
        -

        Iamgoofball updated:

        -
          -
        • Bicardine, Dexalin, Kelotane, Anti-toxin, Inaprovaline and Tricordrazine have been re-added.
        • -
        -

        RemieRichards updated:

        -
          -
        • Lizards can now wag their tails, emote *wag to start and *stopwag to stop.
        • -
        -

        kingofkosmos updated:

        -
          -
        • Mops can now be wet from normal buckets and sinks.
        • -
        - -

        06 June 2015

        -

        Incoming5643 updated:

        -
          -
        • Antagonists with escape alone can now escape with others on the shuttle, so long as they are also antagonists.
        • -
        • Antagonists with escape alone can also win if non-antagonists are on the shuttle provided they are locked in the brig.
        • -
        • Escaping to syndicate space on board the nuke op shuttle is now a valid way to escape the station.
        • -
        -

        Jordie0608 updated:

        -
          -
        • Admin-delaying the round now works once it has finished.
        • -
        - -

        05 June 2015

        -

        CandyClown updated:

        -
          -
        • Ointments, bruise packs, and gauze are now stacked to 6 instead of 5.
        • -
        -

        CorruptComputer updated:

        -
          -
        • Security lockers no longer spawn in front of each other on Box.
        • -
        • Hooked up the scrubbers in QM's office on Box.
        • -
        • Fixed bar disposals on Box
        • -
        • Fixed the stacked heater+freezer in expirementor maint on Box
        • -
        • Made the turbine into Atmos and Engineering access only, and renamed the doors to Turbine on Box.
        • -
        -

        Ikarrus updated:

        -
          -
        • Gang Bosses will now be able to discreetly send messages to everyone in their gang for 5 influence a message.
        • -
        • Conversion pens now use a flat 60sec cooldown rate.
        • -
        -

        KorPhaeron updated:

        -
          -
        • You can now lay tiles on the asteroid. Go nuts building forts.
        • -
        - -

        04 June 2015

        -

        Cuboos updated:

        -
          -
        • Added casting and firing sounds for wizard spells and staves.
        • -
        • A new title theme has been added.
        • -
        -

        Gun Hog updated:

        -
          -
        • Nanotrasen has approved the designs for destination taggers and hand labelers in the autolathe.
        • -
        -

        Palpatine213 updated:

        -
          -
        • Allows sechuds to have their id locks removed via emag as well as EMP
        • -
        - -

        31 May 2015

        -

        duncathan updated:

        -
          -
        • Clarified the ability to retract changeling armblades.
        • -
        - -

        30 May 2015

        -

        duncathan updated:

        -
          -
        • Fixes passive gates not auto-coloring.
        • -
        -

        spasticVerbalizer updated:

        -
          -
        • Players trying to speak but unable to will now get a message.
        • -
        - -

        26 May 2015

        -

        CosmicScientist updated:

        -
          -
        • Corrected wording for the pAI, donksoft riot darts and some tip of the round tips.
        • -
        -

        xxalpha updated:

        -
          -
        • Fixed changeling revival.
        • -
        - -

        25 May 2015

        -

        spasticVerbalizer updated:

        -
          -
        • Glass airlocks can now be made heat-proof by using a sheet of reinforced glass to create the window, regular glass creates a normal glass airlock.
        • -
        -

        xxalpha updated:

        -
          -
        • You can no longer drop items inside mechas nor machinery (this includes gas pipes, disposal pipes, cryopods, sleepers, etc.).
        • -
        • Fixed exploit of changelings being able to keep thermal vision after resetting their powers.
        • -
        • Fixed being able to implant NODROP items with cavity implant surgery.
        • -
        - -

        22 May 2015

        -

        Jordie0608 updated:

        -
          -
        • Smothering someone with a damp rag when in harm intent will apply reagents onto them, for acid-burning their face; otherwise it will inject them, for drugging with chloral hydrate.
        • -
        • The healthdoll is now blue when at full health to make it more clear when a body part is injured.
        • -
        - -

        20 May 2015

        -

        xxalpha updated:

        -
          -
        • Added three drone shells to the derelict.
        • -
        - -

        16 May 2015

        -

        MartiUK updated:

        -
          -
        • Fixed a typo when cleaning a Microwave.
        • -
        • Fixed a typo when burning someone with a lighter.
        • -
        - -

        15 May 2015

        -

        xxalpha updated:

        -
          -
        • Fixed emitter beams not being reflectable.
        • -
        - -

        13 May 2015

        -

        Firecage updated:

        -
          -
        • Kudzu is now admin-logged in Investigate.
        • -
        -

        GunHog updated:

        -
          -
        • Positronic brains are now entered by clicking on an empty one, in the same manner as drones.
        • -
        • Ghosts are alerted when a new posibrain is made.
        • -
        -

        Jordie0608 updated:

        -
          -
        • Borg reagent containers (beakers, spraybottles, shakers etc.) are no longer emptied when stowed.
        • -
        • Fixes North and West Mining Outposts having empty SMESs.
        • -
        • Aliens and slimes can smash metal foam again.
        • -
        • Deconstructing reinforced walls no longer creates additional rods out of nowhere.
        • -
        • Pepperspray now has inhand sprites.
        • -
        -

        Xhuis updated:

        -
          -
        • Fixes the recipe for pneumatic cannons; it now only requires a wrench, 4 metal, 2 pipes and 8 package wrappers .
        • -
        - -

        11 May 2015

        -

        Firecage updated:

        -
          -
        • New icons for Industrial and Experimental welding tools.
        • -
        -

        Gun Hog updated:

        -
          -
        • The power mechanic for mining drills and the jackhammer has been removed. They no longer require cells or recharging.
        • -
        • The diamond drill upgrade for mining cyborgs has been fixed.
        • -
        -

        Xhuis updated:

        -
          -
        • Adds the pneumatic cannon, attach an air tank and shoot anything out of it.
        • -
        • Improvised pneumatic cannons can be tablecrafted with a wrench, 4 metal, 2 pipes, a pipe manifold, a pipe valve and 8 package wrappers.
        • -
        -

        spasticVerbalizer updated:

        -
          -
        • False walls no longer stackable.
        • -
        - -

        10 May 2015

        -

        AnturK updated:

        -
          -
        • Fixed borg's cells draining much faster than they're meant to.
        • -
        -

        Gun Hog updated:

        -
          -
        • Station bot performance greatly increased.
        • -
        • Captain PDA cartridge now includes nearly all utilities and functions, including signaller and all bots! HoP now has janitor and quartermaster functions! The RD and Roboticists now have access to Floor, Clean, and Medibots!
        • -
        • Bot access on PDA is now one button across all PDAs. You will only see what bots you can access, however.
        • -
        • Cartridges that include a signaller have been improved so they will work on a larger frequency range.
        • -
        • All bots now have Robotics access, so they may be set to patrol and released once constructed.
        • -
        • Roboticists now have access to bot navigation beacons. They are found under the floor tiles as patrol route nodes.
        • -
        - -

        09 May 2015

        -

        Firecage updated:

        -
          -
        • Increased the manifestation chance of super powers.
        • -
        -

        Ikarrus updated:

        -
          -
        • Loyalty implants will no longer survive deconverting a gangster. Security now needs to use two of them if they want the permanent effects: The first to deconvert them, and the second to make them loyal.
        • -
        -

        KorPhaeron updated:

        -
          -
        • Slime mutation chance now starts at 30%.
        • -
        • Baby slimes have a -5% to 5% difference of their parent's mutation chance, allowing you to breed slimes that are more likely to mutate.
        • -
        • Plasma and epinephrine no longer affect mutation chance of slimes.
        • -
        • Red slime extract and plasma makes a potion that can increase mutation chance, Blue slime extract and plasma potions will decrease it.
        • -
        - -

        08 May 2015

        -

        Firecage updated:

        -
          -
        • Mobs can now be buckled to operating tables.
        • -
        -

        Gun Hog updated:

        -
          -
        • Top scientists at Nanotrasen have made strong progress in Artificial Intelligence technology, and have completed a design for replicating a human mind: Positronic Brains. Prototypes produced on your research station should be compatible with all Man-Machine Interface compliant machines, be it Mechs, AIs, and even Cyborg bodies. Please note that Cyborgs created from artificial brains are called Androids.
        • -
        • The pAI role preference and related jobbans have been renamed to properly reflect that they are not soley for pAI, but include drones and positroinc prains.
        • -
        -

        astralenigma updated:

        -
          -
        • Cargo packages are now delivered with their manifests taped to the outside. Click on them with an open hand to remove them.
        • -
        -

        optimumtact updated:

        -
          -
        • Machine frame and girder deconstruction now uses a screwdriver instead of welding tool.
        • -
        - -

        07 May 2015

        -

        Xhuis updated:

        -
          -
        • Emagged defibrillators will now do burn damage and stop the patient's heart if used in harm intent.
        • -
        • The previous stunning functionality of the emagged defibrillator has been moved to disarm intent.
        • -
        -

        phil235 updated:

        -
          -
        • Temperature effects from frost oil and capsaicin reagents and basilisk have been buffed to be significant again.
        • -
        -

        xxalpha updated:

        -
          -
        • Hulks can now break windoors.
        • -
        - -

        06 May 2015

        -

        Jordie0608 updated:

        -
          -
        • Borgs can now open lockers with the 'Toggle Open' verb.
        • -
        -

        Thunder12345 updated:

        -
          -
        • Severed the cryo tube's connection to the spirit world. Ghosts will no longer be able to eject people from cryo. Please report further instances of poltergeist activity to your local exorcist.
        • -
        -

        Xhuis updated:

        -
          -
        • Many minor technical changes have been made to cult.
        • -
        • Cultist communications now show the name of the person using them. Emergency communications do not do this.
        • -
        • Emergency communication does less damage.
        • -
        -

        xxalpha updated:

        -
          -
        • Engineering cyborgs can now pick their cable coil color whenever they want.
        • -
        - -

        05 May 2015

        -

        Firecage updated:

        -
          -
        • Golems and skeletons no longer fall over when stepping on shards.
        • -
        -

        Gun Hog updated:

        -
          -
        • Mining borg diamond drill upgrade now functional.
        • -
        -

        Ikarrus updated:

        -
          -
        • Doubled the initial charge of SMESs in Engineering.
        • -
        • Influence cap for gangs has been increased.
        • -
        -

        incoming5643 updated:

        -
          -
        • All modes now select their antagonists before job selection, this means that a player who prefers roles normally immune to being certain antagonists (implanted roles/silicons) can still have a fair shot at every antagonist roll they opt into. If they're selected they simply will not end up with an incompatible job.
        • -
        • As an example if someone loved to play Head of Security (humor me here) and had it set to high, and the only other jobs he had set were security officer at medium and botanist at low but he was selected to be a traitor, he would spawn as a botanist even if there ended up being no Head of Security.
        • -
        • Please give playing security another chance if you'd written it off because it affected your antag chances.
        • -
        -

        xxalpha updated:

        -
          -
        • Hulks can now break windoors.
        • -
        • Fixed smoking pipe messages. Fixed emptying a smoking pipe with nothing in it.
        • -
        - -

        04 May 2015

        -

        Firecage updated:

        -
          -
        • Emagged windoors can now be deconstructed.
        • -
        -

        RemieRichards updated:

        -
          -
        • Adds Plasmamen, a species that breathes plasma and bursts into flames if they don't wear special suits.
        • -
        • New burning icon for all humanoid mobs.
        • -
        • New sprite for Skeletons to match Plasmamen.
        • -
        -

        oranges updated:

        -
          -
        • Thanks to recent advances in fork science, you no longer need to aim at your eyes to eat the food off a fork
        • -
        -

        xxalpha updated:

        -
          -
        • Adds a new barsign: 'The Net'.
        • -
        - -

        03 May 2015

        -

        AnturK updated:

        -
          -
        • Abductors can purchase spare gear with experimentation points.
        • -
        -

        Ikarrus updated:

        -
          -
        • Admins can now adjust the pre-game delay time.
        • -
        -

        MrStonedOne updated:

        -
          -
        • MasterController and subsystem rejiggering!
        • -
        • The MC can now dynamcially change the rate a subsystem is triggered based on how laggy it's being. This has been applied to atmos to allow for faster air processing without lagging the server
        • -
        • Pipes and atmos machinery now processes in tune with air, rather than seperately.
        • -
        • Fixed hotspots and fire causing more lag than they needed to
        • -
        • Fixed some objects not getting garbage collected because they didn't properly clear references in Destory()
        • -
        • The qdel subsystem will now limit its processing time to a 5th of a second each tick to prevent lag when a lot of deletes happen
        • -
        • Fixed the ticker not showing a tip of the round if an admin forces the round to start immediately
        • -
        - -

        02 May 2015

        -

        Boggart updated:

        -
          -
        • Cryo tubes can no longer be used for ventcrawling.
        • -
        -

        Ikarrus updated:

        -
          -
        • Admins can choose the strength and size of Centcom teams to send, ranging from officials to deathsquads, with the 'Make Centcom Respone Team' button.
        • -
        -

        phil235 updated:

        -
          -
        • Space carps can no longer knock down anyone, but they now deal additional stamina damage to humans.
        • -
        • Radiation effects from uranium walls are nerfed to the level of uranium floor.
        • -
        • You can no longer put an inactive MMI in a cyborg shell. Ghosted brains now get an alert when someone puts their brain in a MMI. You can now examine the MMI to see if its brain is active.
        • -
        - -

        01 May 2015

        -

        Ikarrus updated:

        -
          -
        • Gang bosses can now rally their gang to their location with their gangtool.
        • -
        • Gangtools can no longer recall the shuttle if station integrity is lower than 70%
        • -
        • Removed requirement to be in the territory to tag it.
        • -
        • Recruitment Pen cost reduced to 40.
        • -
        • Communications console should now accurately print the (lack of a) location of the last shuttle call.
        • -
        -

        Xhuis updated:

        -
          -
        • Revenants will no longer spawn without admin intervention. They are pending a remake.
        • -
        - -

        30 April 2015

        -

        Fayrik updated:

        -
          -
        • Ported NanoUI to most atmospherics equipment.
        • -
        -

        TheVekter updated:

        -
          -
        • Hooch is now made with 2 parts Ethanol, 1 part Welder fuel and 1 part Universal Enzyme as a catalyst.
        • -
        • No-slip shoes are paintable, painting them doesn't remove no-slip properties.
        • -
        - -

        29 April 2015

        -

        AndroidSFV updated:

        -
          -
        • Dehydrated carp now are friendly to both the imprinter of the plushie as well as any coded-in allies (I.E. Nuke Ops team), and unfriendly to carp of other origin othan than yourself or your coded-in allies. Dehydrated carp that are not imprinted will still have the same behavior as regular carp.
        • -
        -

        AnturK updated:

        -
          -
        • Advanced cameras now have all functionality of the abductor consoles.
        • -
        • Pinpoint teleportation takes 8 seconds and spawns a flashy silhouette at the target location. Can be used as distraction since it appears even if teleporter is empty.
        • -
        • Abductors are now immune to viruses.
        • -
        • Dissection surgery ignores clothes.
        • -
        • Non-abductors can escape the ship by fiddling with consoles enough.
        • -
        • Three new negative glands.
        • -
        • Bloody glands spray blood everywhere and injure the host.
        • -
        • Bodysnatch glands turn the host into a cocoon that hatches doppelgangers.
        • -
        • Plasma glands cause the host to explode into a cloud of plasma.
        • -
        -

        GoonOnMoon updated:

        -
          -
        • Added a new assault rifle to the game for use by Nanotrasen fighting forces in special events. Also happens to be available in the Liberation Station vending machine and the summon guns spell usable by the wizard and badminnery.
        • -
        -

        Iamgoofball updated:

        -
          -
        • Acid blob has been removed.
        • -
        • Charcoal and Silver Sulf are more powerful now.
        • -
        • Styptic power and Silver Sulf metabolize at the default rate.
        • -
        -

        Ikarrus updated:

        -
          -
        • Spraycans and crayons can now draw Poseur Tags, aka Fake Gang Tags, as grafiti.
        • -
        • Influence income changed to provide weaker gangs a bigger boost, while slowing down stronger gangs to promote opportunity for comebacks.
        • -
        • Gangs only earn influence on territories they have held on to since the previous Status Report (the income calculation every 5 minutes). This places more significance on defending your existing territory.
        • -
        • You must be in the territory physically to tag it now. So no more tagging everything from maint.
        • -
        • Gang income delay reduced to 3 minutes intervals.
        • -
        • Gang Capture goal reduced to 50%
        • -
        • Gang spraycan use increased to 20
        • -
        • Gang Boss icon is now a red [G] icon to make it stand out better from regular gang icons
        • -
        -

        JJRcop updated:

        -
          -
        • TED's kill duration has been halved.
        • -
        • Escaping from the TED's field no longer kills you.
        • -
        -

        RemieRichards updated:

        -
          -
        • Adds Easels and canvases for custom drawings.
        • -
        • Place a canvas on an easel and draw on it with crayons, clean one pixel with a rag or soap and activate it in-hand to erase the whole canvas.
        • -
        • Ports VG's Ventcrawling overhaul!
        • -
        • Crawling through vents is no longer instant, you now have to move and navigate manually
        • -
        • While inside pipes and other atmos machinery, you now see pipe vision
        • -
        -

        phil235 updated:

        -
          -
        • Podplants are no longer unharvestable.
        • -
        • Choosing your clown, mime, cyborg and AI name as well as religion and deity is now done in the preferences window. As a chaplain , your bible's icon is now chosen by clicking the bible.
        • -
        - -

        25 April 2015

        -

        Boggart updated:

        -
          -
        • Generalizes handheld instrument code and Ports Nienhaus's guitar, sounds by BartNixon of Tau Ceti.
        • -
        • Fixes being unable to build disposal pipes on walls, makes changing the RPD's settings not affect pipes that are currently building, makes the RPD use the datum/browser ui, makes it use categories and makes it show the selected mode.
        • -
        -

        Gun Hog updated:

        -
          -
        • Nanotrasen has provided designs for fabrication of APC power control modules. You may print them at any autolathe.
        • -
        -

        Ikarrus updated:

        -
          -
        • Gangs can now purchase switchblades, a relatively cheap and decently robust melee weapon.
        • -
        • Gangs now require at least 66% control of the station to win.
        • -
        • Gang spraycan uses reduced to 15.
        • -
        • Pistol cost increased to 30 Influence
        • -
        • Promotions now start off cheap at 20 influence but get more expensive the more people you promote.
        • -
        -

        Xhuis updated:

        -
          -
        • Added a Create Antagonist button for revenants.
        • -
        • Removed Mind Blast.
        • -
        • Revenants no longer get killed by explosions.
        • -
        • Mind spike cooldown increased to 4 seconds.
        • -
        • Harvest now takes 8 seconds and requires you to be adjacent to the target.
        • -
        • Hypnotise sleeps targets for longer.
        • -
        • Revenant now starts with 3 strikes.
        • -
        -

        phil235 updated:

        -
          -
        • Telecom machines are now deconstructed the same way as all other constructable machines.
        • -
        • You can no longer overdose on nicotine but you can get addicted (very mild effects).
        • -
        - -

        22 April 2015

        -

        Incoming5643 updated:

        -
          -
        • Adds a new fun button for admins: 'Set Round End Sound'. You can use the set round end sound button to set the round end sound. Glad we cleared that up!
        • -
        -

        Miauw62 updated:

        -
          -
        • Very slightly expanded atmos and added an external airlock.
        • -
        -

        Xhuis updated:

        -
          -
        • A few issues have been fixed for revenants. In addition, the Mind Blast/Mind Spike sound effect has been removed.
        • -
        • Adds the Hypnotize ability to revenants. It will cause a target to fall asleep after a short time.
        • -
        -

        xxalpha updated:

        -
          -
        • Added an Exosuit Mining Scanner to the robotics fabricator.
        • -
        • Buffed Ripley's movement and drilling speed in low pressure environments.
        • -
        - -

        21 April 2015

        -

        Ikarrus updated:

        -
          -
        • Gang mode has had some considerable work done on it, including a new objective and currency dynamic.
        • -
        • New objective: Claim half the station as territory by tagging it with spray cans supplied to gang bosses, but usable by any member.
        • -
        • An area can only be tagged by one gang at a time, remove your opponent's tag or spray over it.
        • -
        • New recruitment: Recruiment pens replace flashes, stab people to recruit them.
        • -
        • Recruitment is silent, but causes brief seizures and has a cooldown that scales upwards with a gang's size.
        • -
        • New tool: The Gangtool is used by bosses and lieutenants to recall the shuttle and purchase supplies.
        • -
        • Pistols, ammo, spraycans, recruitment pens and additional gangtools can all be bought.
        • -
        • Gangtools also alert the user of promotions, purchases and territory changes within the gang.
        • -
        • Lieutenants are promoted from gang members when given their own gangtool; they're immune to deconversion and able to do anything a boss can except promotion.
        • -
        • New currency: Influence is used to purchase with the gangtool and is generated every 5 minutes by each territory owned by the gang.
        • -
        • Thermite can be cleaned off walls now.
        • -
        - -

        20 April 2015

        -

        Fayrik updated:

        -
          -
        • Abductors now get advanced camera consoles.
        • -
        • Redesigned Centcom again. There's a bar at the thunderdome now.
        • -
        • Headsets can now be locked to a spesific frequency, this only occurs for nuke ops and deathsquads.
        • -
        • The Centcom channel is now available over all z-levels, regardless of telecomms status.
        • -
        • The Deathsquad space suits have been upgraded to hardsuits.
        • -
        • The Deathsquad now have thermal imaging huds, which can swap which hud they display on the fly.
        • -
        -

        phil235 updated:

        -
          -
        • Reagents are now back to being metabolized every tick. Fixes frost oil and capsaicin not working.
        • -
        • Fixes not being able to make sterilizine.
        • -
        • Adding overdose to space drug, causing mild hallucination and toxin and brain damage.
        • -
        • Nerfed healing power of stimulant reagent. Buffed ephedrine a bit.
        • -
        • Nitroglycerin can now be stabilized with stabilizing agent, and explodes when heated.
        • -
        - -

        19 April 2015

        -

        AnturK updated:

        -
          -
        • Observers can now see abductor hivemind messages.
        • -
        • Adds advanced baton for abductors: Stun, Sleep and Cuff in one tool.
        • -
        • Abductor agents now have vest cameras.
        • -
        • New sprites for abductors and their gear made by Ausops.
        • -
        -

        Fayrik updated:

        -
          -
        • Added jobban options for Abductors and Deathsquads.
        • -
        • Made admin antag spawning buttons more efficient and less prone to failure.
        • -
        -

        Xhuis updated:

        -
          -
        • Recent sightings aboard space stations shows that spirits seem to be manifesting as malevolent revenants and draining the life of crew. The chaplain may be helpful in stopping this new threat.
        • -
        -

        kingofkosmos updated:

        -
          -
        • Girder and machine frame construction protocols has been changed. They can now be secured/unsecured with a wrench and disassembled with a welder.
        • -
        - -

        16 April 2015

        -

        AnturK updated:

        -
          -
        • Nanotrasen authorities are reporting sightings of unidentified space craft near space station 13. Report any strange sightings or mental breakdowns to central command.
        • -
        • PS : Abductions are not covered by health insurance.
        • -
        • Shadowlings and their thralls now have HUD icons.
        • -
        • Thralls learn their master's objectives when enthralled.
        • -
        • Regenerate Chitin ability lets shadowlings re-equip their armor if lost.
        • -
        • Loyalty implanted people take 25% longer to enthrall, but lose their implant and become immune to re-implanting.
        • -
        • Shadowlings now have a message in their spawning text which specifies that cooperation is mandatory.
        • -
        • Veil now works on equipped lights.
        • -
        • Shadowlings now take correct amount of burn damage and in light and heal clone and brain damage in darkness.
        • -
        • Fixes 'Round end code broke' displaying every round.
        • -
        • Shadowlings who ascend will nore greentext properly.
        • -
        -

        Gun Hog updated:

        -
          -
        • Thinktronic Systems, LTD. has increased the Value of the Value-PAK PDA cartridge! Standard issue for Captain PDAs, it can now access security bots, medibots, cleanbots, and floorbots ALL AT ONCE! In addition, it can also connect to your station's Newscaster network at NO EXTRA CHARGE! As a Thank you for our contract with them, they have thrown in Newscaster access for the HumanResources9001 cartridge, Heads of Personnel rejoice!
        • -
        • The Newscaster app has also gotten a free upgrade which allows it to display images and comments inside of posts!
        • -
        • Nanotrasen has concurrently released a patch for bots which will allow off-station bots to properly patrol.
        • -
        -

        Incoming5643 updated:

        -
          -
        • Changeling head slugs have been given player control, ventcrawling, and a short escape period after egg laying.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Admin ghosts can now drag ghosts to mobs to put that ghost in control of that mob.
        • -
        -

        Xhuis updated:

        -
          -
        • Nanotrasen scientists have recently observed a strange genome shift in green slimes. Experiments have shown that injection of radium into an active green slime extract will create a very unstable mutation toxin. Use with caution.
        • -
        - -

        13 April 2015

        -

        AnturK updated:

        -
          -
        • Spacemen have learned the basics of martial arts: Boxing, unleash it's power by wearing Boxing Gloves.
        • -
        • While boxing you can't grab or disarm, but you hit harder with a knockout chance that scales off stamina damage above 50.
        • -
        • Rumors have been heard of powerful martial styles avaliable only to the gods themselves.
        • -
        -

        CosmicScientist updated:

        -
          -
        • Added a dehydrated space carp to traitor items, bought with telecrystals. Use dehydrated space carp in hand to school them on loyalty. Add water to create a vicious murder machine just for the halibut.
        • -
        • The toy carp plushie now has attack verbs for fun, hit your friend with one today. I put my sole into this mod.
        • -
        • If you can think of a better fish pun let minnow but I shouldn't leave it to salmon else.
        • -
        -

        Ikarrus updated:

        -
          -
        • Gang bosses can no longer purchase certain potent traitor items but instead have access to some of a nuke op's arsenal of weapons.
        • -
        -

        Incoming5643 updated:

        -
          -
        • Three new chemical types of blob can occur: Omnizine, Morphine and Space Drugs.
        • -
        -

        MrPerson updated:

        -
          -
        • New lighting system! Lighting now smoothly transfers from one lighting level to the next.
        • -
        -

        Xhuis updated:

        -
          -
        • There have been... odd sighting in Space Station 13's sector. Alien organisms have appeared on stations 57, 23, and outlying.
        • -
        • Nanotrasen personnel have reason to believe that Space Station 13 is under attack by shadowlings. We have little intel on these creatures, but be on the lookout for odd behavior and dark areas. Use plenty of lights.
        • -
        -

        Zelacks updated:

        -
          -
        • Defibs no longer have a minimum damage requirement for a successful revive. Patients will have 150 total damage on a successful revive.
        • -
        • Additional feedback is given for several failure states of the defib.
        • -
        -

        xxalpha updated:

        -
          -
        • Airlock crushing damage increased.
        • -
        - -

        11 April 2015

        -

        Gun Hog updated:

        -
          -
        • Nanotrasen has approved an access upgrade for Cargo Technicians! They are now authorized to release minerals from the ore redemption machine, to allow proper inventory management and shipping.
        • -
        -

        Iamgoofball updated:

        -
          -
        • Blobbernauts no longer deal chemical damage, brute damage increased however.
        • -
        -

        Ikarrus updated:

        -
          -
        • Getting converted by a rev or cultist will stun you for a few seconds.
        • -
        -

        Incoming5643 updated:

        -
          -
        • Fixes some AI malf powers being usable when dead.
        • -
        -

        MrPerson updated:

        -
          -
        • Reduces movement speed penalty from being cold.
        • -
        -

        Xhuis updated:

        -
          -
        • Adds a pizza bomb traitor item for 4 telecrystals. It's a bomb, diguised as a pizza box. You can also attempt to defuse it by using wirecutters.
        • -
        -

        kingofkosmos updated:

        -
          -
        • Activating internals with an adjusted breath mask will automatically push it up to normal state.
        • -
        • Masks can now be adjusted when buckled to a chair.
        • -
        -

        optimumtact updated:

        -
          -
        • Stun batons no longer lose charge over time when on.
        • -
        -

        phil235 updated:

        -
          -
        • The AI holopads now use a popup window just like computers and other machines.
        • -
        • Nerfs kinetic accelerator and plasma cutters. Plasma cutter is no longer in the mining vendor. Reduces the drilling cost of all drills.
        • -
        • Adding 40+ new food and drink recipes, mostly using the newest plants. Notably rice recipes, burritos, nachos, salads, pizzas.
        • -
        • Opening the tablecrafting window can now also be done by dragging the mouse from any food (that's on a table) onto you.
        • -
        • The kitchen cabinet starts with one rice pack.
        • -
        • Glasses with unknown reagent will no longer be always brown but will take the color of their reagents.
        • -
        - -

        09 April 2015

        -

        Iamgoofball updated:

        -
          -
        • Quite a lot of cleanables can now be scooped up with a beaker in order to acquire the contents.
        • -
        • Light a piece of paper on fire with a lighter, and scoop up the ashes!
        • -
        • Scoop up the flour the clown sprayed everywhere as a 'joke'!
        • -
        • Scoop up the oil left behind by exploding robots for re-usage in chemistry!
        • -
        • You can splash the contents of a beaker onto the floor to create a Chemical Pile! This pile can be heated or blown up and have the reagents take the effects. Make a string of black powder around a department in maint. and then heat it with a welder today!
        • -
        • Reagents now can have processing effects when just sitting in a beaker.
        • -
        • Pyrosium and Cryostylane now feed off of oxygen and heat/cool the beaker without having to be inside of a person!
        • -
        • Reagents can now respond to explosions!
        • -
        • Black Powder now instantly detonates if there is an explosion that effects it.
        • -
        • Fire now heats up beakers and their contents!
        • -
        • Activate some smoke powder in style by lighting the beaker on fire with a burning hot plasma fire!
        • -
        -

        RemieRichards updated:

        -
          -
        • Ninja stars are summoned to your hand to be thrown rather than automatically targetting nearby mobs.
        • -
        • Added Sword Recall: pulls your katana towards you, hitting mobs in the way. Free if within sight, cost scales with distance otherwise.
        • -
        • Enemies can be electrocuted by a ninja as the cost of his energy, stunning and injuring them.
        • -
        • Removed SpiderOS, functions moved to status panel.
        • -
        • Fixed energy nets not anchoring target, katana emag spam and sound delay.
        • -
        -

        optimumtact updated:

        -
          -
        • Mimes can't use megaphone without breaking their vow anymore.
        • -
        -

        phil235 updated:

        -
          -
        • Flying animals no longer triggers mouse traps, bear traps or mines.
        • -
        - -

        04 April 2015

        -

        ACCount updated:

        -
          -
        • Emergency welding tool added to emergency toolbox.
        • -
        • Changed industrial welding tool sprite.
        • -
        • Replaced welder in syndicate toolbox with industrial one.
        • -
        • All tools in syndicate toolbox are red. Corporate style!
        • -
        • Red crowbar is a bit more robust.
        • -
        • Fixed two bugs: welder icon disappearing and drone toolbox spawning with invisible cable coil.
        • -
        -

        AnturK updated:

        -
          -
        • Picket signs: table crafted with a rod and two cardboard sheets, write on them with pen or crayon.
        • -
        -

        Cheridan updated:

        -
          -
        • The bar's layout has been changed with a poker table and re-arranged seating.
        • -
        -

        Dannno updated:

        -
          -
        • Added gun lockers for shotguns and energy guns. Click on the lockers with an item to close them if they're full.
        • -
        -

        Gun Hog updated:

        -
          -
        • Nanotrasen research has finalized improvements for the experimental Reactive Teleport Armor. The armor is now made of a thinner, lightweight material which will not hinder movement. In addition, the armor shows an increase in responsiveness, activating in at least 50% of tests.
        • -
        -

        Incoming updated:

        -
          -
        • The iconic blood-red hardsuits of nuke ops can now be purchased for a moderate sum of 8 TC by traitors.
        • -
        -

        Jordie0608 updated:

        -
          -
        • Cyborg mining drills now use up their internal battery before drawing power from a borg's cell.
        • -
        • Fixes cyborg mining drills not recharging.
        • -
        -

        RemieRichards updated:

        -
          -
        • Burning mobs will ignite others they bump into or when they are stepped on.
        • -
        -

        Xhuis updated:

        -
          -
        • Malfunctioning AIs can no longer leave the station z-level. Upon doing this, they will fail the round.
        • -
        • Phazon exosuits now require an anomaly core as the final step in their construction.
        • -
        -

        xxalpha updated:

        -
          -
        • Added Nutriment Pump, Nutriment Pump Plus and Reviver implants.
        • -
        • Added origin technologies to all implants.
        • -
        • The following implants are now much harder to obtain: X-ray, Thermals, Anti-Stun, Nutriment Pump Plus, Reviver.
        • -
        • Cauterizing a surgery wound will now heal some of the damage done by the bonesaw if it was used as part of the same surgery.
        • -
        • Added ability for Medical HUDs to detect cybernetic implants in humans.
        • -
        GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 4fd3cb663bb..3d1210ce8b6 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4600,3 +4600,38 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: You can craft primitive gear from bone and sinew. coiax: - bugfix: Non-humans are now able to interact with bee boxes. +2016-04-25: + Joan: + - bugfix: You can once again hit a closet or crate with an item to open it. + Kor Razharas: + - rscadd: Adds support for autoclicking. + - rscadd: The Shock Revolver has been added to RnD. + - rscadd: The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick + to fire as you hold down the mouse. + - rscadd: The Research Director now starts with a box of firing pins. + - rscadd: The SABR and Stun Revolver recipes have been removed from RnD + coiax: + - rscadd: Laughter demons are like slaughter demons, but they tickle people to death + - tweak: Slaughter demons are no longer able to cast spells while phased. + - tweak: Wizards can now speak while ethereal, but still cannot cast spells while + ethereal. + - rscadd: 'Centcom''s "drone expert" reports that drones vision filters have been + upgraded to include the option of making all beings appear as harmless animals. + info: As always, all drone filters are togglable.' + - rscadd: As a sign of friendship between the Free Golems and Centcom, they have + modified Centcom's jaunter to be worn around a user's waist, which will save + them from falling to their death in a chasm. + - experiment: The Golems warn that these modifications have created a risk of accidental + activation when exposed to heavy electromagnetic fields. + - tweak: Renamed hivelord stabilizer to stabilizing serum. + - rscadd: Centcom regret to inform you that new instabilities with nearby gas giants + are causing exospheric bubbles to affect the telecommunications processors. + Please contact your supervisor for further instructions. + - rscadd: The Janitor's Union has mandated additional features to station light + replacer devices. + - rscadd: The light replacer now can be used on the floor to replace the bulbs of + any lights on that tile. + - rscadd: The light replacer now eats replaced bulbs, and after a certain number + of bulb fragments (four) will recycle them into a new bulb. + - tweak: The description of the light replacer is now more informative. + - rscadd: Clown mask appearance toggle now has an action button. diff --git a/html/changelogs/AutoChangeLog-pr-16940.yml b/html/changelogs/AutoChangeLog-pr-16940.yml deleted file mode 100644 index 1ab63958340..00000000000 --- a/html/changelogs/AutoChangeLog-pr-16940.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "Laughter demons are like slaughter demons, but they tickle people to death" - - tweak: "Slaughter demons are no longer able to cast spells while phased." - - tweak: "Wizards can now speak while ethereal, but still cannot cast spells while ethereal." diff --git a/html/changelogs/AutoChangeLog-pr-16974.yml b/html/changelogs/AutoChangeLog-pr-16974.yml deleted file mode 100644 index 26c9011ff0e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-16974.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: Kor Razharas -delete-after: True -changes: - - rscadd: "Adds support for autoclicking." - - rscadd: "The Shock Revolver has been added to RnD." - - rscadd: "The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick to fire as you hold down the mouse." - - rscadd: "The Research Director now starts with a box of firing pins." - - rscadd: "The SABR and Stun Revolver recipes have been removed from RnD" diff --git a/html/changelogs/AutoChangeLog-pr-17009.yml b/html/changelogs/AutoChangeLog-pr-17009.yml deleted file mode 100644 index 81dc53b9e65..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17009.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "Centcom's \"drone expert\" reports that drones vision filters have -been upgraded to include the option of making all beings appear as harmless animals. -info: As always, all drone filters are togglable." diff --git a/html/changelogs/AutoChangeLog-pr-17053.yml b/html/changelogs/AutoChangeLog-pr-17053.yml deleted file mode 100644 index e8f61cf4668..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17053.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "As a sign of friendship between the Free Golems and Centcom, -they have modified Centcom's jaunter to be worn around a user's waist, -which will save them from falling to their death in a chasm." - - experiment: "The Golems warn that these modifications have created -a risk of accidental activation when exposed to heavy electromagnetic -fields." - - tweak: "Renamed hivelord stabilizer to stabilizing serum." diff --git a/html/changelogs/AutoChangeLog-pr-17054.yml b/html/changelogs/AutoChangeLog-pr-17054.yml deleted file mode 100644 index 8b8b5ff8e55..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17054.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "Centcom regret to inform you that new instabilities with nearby -gas giants are causing exospheric bubbles to affect the -telecommunications processors. Please contact your supervisor for -further instructions." diff --git a/html/changelogs/AutoChangeLog-pr-17067.yml b/html/changelogs/AutoChangeLog-pr-17067.yml deleted file mode 100644 index 69d7d32a0f7..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17067.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "The Janitor's Union has mandated additional features to station -light replacer devices." - - rscadd: "The light replacer now can be used on the floor to replace -the bulbs of any lights on that tile." - - rscadd: "The light replacer now eats replaced bulbs, and after a certain -number of bulb fragments (four) will recycle them into a new bulb." - - tweak: "The description of the light replacer is now more informative." diff --git a/html/changelogs/AutoChangeLog-pr-17078.yml b/html/changelogs/AutoChangeLog-pr-17078.yml deleted file mode 100644 index fba30ec9bcd..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17078.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Joan -delete-after: True -changes: - - bugfix: "You can once again hit a closet or crate with an item to open it." diff --git a/html/changelogs/AutoChangeLog-pr-17083.yml b/html/changelogs/AutoChangeLog-pr-17083.yml deleted file mode 100644 index ea4a2146270..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17083.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "Clown mask appearance toggle now has an action button." From 98030c8480aef74012f4d36ca9502d097e11c046 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Mon, 25 Apr 2016 16:51:09 -0700 Subject: [PATCH 167/228] """"""""Design Lead""""""""""" --- code/modules/mining/equipment_locker.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index af458a83571..b0d9c788204 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -415,12 +415,12 @@ ..() /obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer) - var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Two Survival Capsules", "Resonator", "Mining Drone", "Advanced Scanner") + var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Survival Capsule and Explorer Belt", "Resonator", "Mining Drone", "Advanced Scanner") if(!selection || !Adjacent(redeemer) || qdeleted(voucher) || voucher.loc != redeemer) return switch(selection) - if("Two Survival Capsules") - new /obj/item/weapon/survivalcapsule(src.loc) + if("Survival Capsule and Explorer Belt") + new /obj/item/weapon/storage/belt/mining(src.loc) new /obj/item/weapon/survivalcapsule(src.loc) if("Resonator") new /obj/item/weapon/resonator(src.loc) From 2f1b5d8fba4d518b2a32c32c14619e49fd323ceb Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Apr 2016 00:28:29 +0000 Subject: [PATCH 168/228] Automatic changelog generation for PR #17076 --- html/changelogs/AutoChangeLog-pr-17076.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17076.yml diff --git a/html/changelogs/AutoChangeLog-pr-17076.yml b/html/changelogs/AutoChangeLog-pr-17076.yml new file mode 100644 index 00000000000..6e2acc3ef64 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17076.yml @@ -0,0 +1,7 @@ +author: Joan +delete-after: True +changes: + - tweak: "Blobbernauts now spawn at half health." + - tweak: "Blobbernauts regeneration on blob is now 2.5 health per tick, from 5." + - tweak: "Blobbernauts now cost 40 resources to produce, from 30." + - rscdel: "Factories supporting blobbernauts do not spawn spores." From 7576665b1ade719c3af794868453e3c516a73c60 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Tue, 26 Apr 2016 00:32:24 +0000 Subject: [PATCH 169/228] Automatic changelog compile --- html/changelog.html | 98 ++-------------------- html/changelogs/.all_changelog.yml | 6 ++ html/changelogs/AutoChangeLog-pr-17076.yml | 7 -- 3 files changed, 15 insertions(+), 96 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-17076.yml diff --git a/html/changelog.html b/html/changelog.html index e6e2ce06695..2dd16a891d2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,15 @@ -->
        +

        26 April 2016

        +

        Joan updated:

        +
          +
        • Blobbernauts now spawn at half health.
        • +
        • Blobbernauts regeneration on blob is now 2.5 health per tick, from 5.
        • +
        • Blobbernauts now cost 40 resources to produce, from 30.
        • +
        • Factories supporting blobbernauts do not spawn spores.
        • +
        +

        25 April 2016

        Joan updated:

          @@ -506,95 +515,6 @@
        • Honey buns and honey nut bars are now craftable using honey.
        • Brewing mead now requires actual honey.
        - -

        29 March 2016

        -

        Bawhoppen updated:

        -
          -
        • Bruisepacks, ointment, and gauze now will apply significanty faster.
        • -
        • SWAT crates no longer contain combat knives.
        • -
        • SWAT crates now contain combat gloves.
        • -
        • Combat knives now can be ordered in their own crate.
        • -
        -

        Iamsaltball updated:

        -
          -
        • GRAB SUPER NERFED
        • -
        • IT'S WAY EASIER TO ESCAPE GRABS NOW
        • -
        • IT TAKES WAY LONGER TO UPGRADE GRABS NOW
        • -
        • YOU CAN ACTUALLY FUCKING ESCAPE GRABS NOW TOO #WOW #WHOA
        • -
        • GRAB TEXT IS ALL BIG BOLD AND RED MUCH LIKE YOUR MOM LAST NIGHT
        • -
        • GIT GUDDERS GO FUCK YOURSELVES YOU CAN'T GET GOOD AGAINST "LOL INSTANT PERMASTUN THAT ISN'T OBVIOUS IN CHAT LIKE THE REST OF THE STUNS"
        • -
        -

        Joan updated:

        -
          -
        • Ghost revival/body creation alerts now use the ghost's hud style.
        • -
        • Support holoparasites now have a healing effect with their color when successfully healing a target.
        • -
        • Ranged holoparasite projectiles now take on the color of the holoparasite.
        • -
        • Holoparasite communication(holo->summoner) now sends the message to all holoparasites the summoner has.
        • -
        • If you have multiple holoparasites for some reason, Reset Guardian allows you to choose which to reset.
        • -
        • Resetting a holoparasite also resets its color and name, to make it more obvious it's a new player.
        • -
        • Holoparasites can now see their summoner's health and various ability cooldowns from the status panel.
        • -
        • Blobbernauts are now alerted when their factory is destroyed.
        • -
        -

        KazeEspada updated:

        -
          -
        • Blob Mobs no longer swap with other mobs.
        • -
        -

        RemieRichards updated:

        -
          -
        • Added the ability to make Apiaries and Honey frames with wood
        • -
        • Added the ability to make Royal Bee Jelly from 10 Mutagen and 40 Honey
        • -
        • Added the ability to make more Queen Bees from Royal Bee Jelly by using it on an existing Queen, to split her into two Queens
        • -
        • Made homeless bees more obvious
        • -
        • Fixed a typo that made almost all bees homeless, severely reducing the odds of getting honeycomb
        • -
        • Made bee progress reports (50% towards new honeycomb, etc.) always show, even if it's 0%
        • -
        • Made some feedback text more obvious
        • -
        • Fixed being able to duplicate the bee holder object, this was not exploity, just weird
        • -
        • Fixed being able to put two (or more) queens in the same apiary
        • -
        • Fixed some runtimes from hydro code assuming a plant gene exists
        • -
        • Fixed runtime when you use a honeycomb in your hand
        • -
        • It now takes and uses 5u of a reagent to give a bee that reagent
        • -
        • Removed unused icon file
        • -
        -

        Ricotez updated:

        -
          -
        • The default white ghost form now has directional sprites.
        • -
        • The default white ghost form now also has (your) hair! Here's how it works.
        • -
        • If you ghost from a body, you'll get the hair from that body. If it has hair.
        • -
        • If you hit Observe, you'll get the hair from the character you had active in your setup window. If they had hair.
        • -
        • This only works with the default white ghost form right now (because the other forms have the wrong shape or lack directional sprites), and with human bodies since they're the only ones that have hair. Sorry lizards and plasmamen! You'll get your turn next time.
        • -
        • A new preference called Ghost Accessories. This lets you configure if you want your ghost sprite to show both hair and directional sprites, only directional sprites or just use its original default version without directional sprites.
        • -
        • A new preference called Ghosts of Others. This preference is clientside and lets you configure how other ghosts appear to you: as their own setting, as the form they chose but without any hair or directional sprites, or as the simple white ghost sprite if you're sick of those premium users with their rainbow ghosts.
        • -
        • The layout of the ghost preference buttons has slightly changed. The old Choose Ghost Form and Choose Ghost Orbit are now a part of Ghost Customization, which also contains the new Ghost Accessories button. Clicking Ghost Customization will send you directly to Ghost Accessories if you don't have premium. The Preferences tab now also contains the Ghost Display button, which lets you configure how other ghosts appear to you.
        • -
        • Fixed a bug where the toggles for Ghost Accessories and Ghosts of Others in the Preferences menu wouldn't save your preference update to your save file.
        • -
        • Renamed the "Ghost Display Settings" preference toggle button to "Ghosts of Others", so it fits with the name the preference has everywhere else.
        • -
        -

        TehZombehz updated:

        -
          -
        • Paper sacks are now craftable by tablecrafting with 5 sheets of paper.
        • -
        • Comes in 5 different designs: Use a pen on a paper sack to change the design.
        • -
        • Certain paper sack designs can be modified with a sharp object to craft a (creepy) paper sack hat.
        • -
        -

        Xhuis updated:

        -
          -
        • Portal storm messages now use the station name rather than the world name.
        • -
        • Shadowlings can no longer glare while shadow walking.
        • -
        • Progress bars are now properly shown when reloading revolvers.
        • -
        • Cyborgs and AIs are no longer knocked out when being stuffed into lockers.
        • -
        • Plasmamen can no longer be the patient zero of the space retrovirus.
        • -
        • Cyborgs and AIs now properly display death messages.
        • -
        • Revenants can no longer be closed into lockers.
        • -
        • Airlocks no longer play sounds or flash lights when denying access if the airlock has no power.
        • -
        • Job spawn icons in mapping have been fixed.
        • -
        • Gibtonite's disarm message no longer include the outside viewer.
        • -
        • Cult walls and girders are now more streamlined and can be built with runed metal.
        • -
        • Positronic brains and MMIs can no longer see ghosts.
        • -
        • When someone is turned into a statue, the statue now appears as a greyscale version of them.
        • -
        • Returning from a statue to a human now knocks you down.
        • -
        • Flesh to Stone no longer works on dead mobs.
        • -
        • Wall-mounted flasher crates now have the proper price.
        • -
        • Wall-mounted flasher frames now have icons.
        • -
        • Upgraded resonators now have an inhand sprite.
        • -
        GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 3d1210ce8b6..822c5f31361 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4635,3 +4635,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. of bulb fragments (four) will recycle them into a new bulb. - tweak: The description of the light replacer is now more informative. - rscadd: Clown mask appearance toggle now has an action button. +2016-04-26: + Joan: + - tweak: Blobbernauts now spawn at half health. + - tweak: Blobbernauts regeneration on blob is now 2.5 health per tick, from 5. + - tweak: Blobbernauts now cost 40 resources to produce, from 30. + - rscdel: Factories supporting blobbernauts do not spawn spores. diff --git a/html/changelogs/AutoChangeLog-pr-17076.yml b/html/changelogs/AutoChangeLog-pr-17076.yml deleted file mode 100644 index 6e2acc3ef64..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17076.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Joan -delete-after: True -changes: - - tweak: "Blobbernauts now spawn at half health." - - tweak: "Blobbernauts regeneration on blob is now 2.5 health per tick, from 5." - - tweak: "Blobbernauts now cost 40 resources to produce, from 30." - - rscdel: "Factories supporting blobbernauts do not spawn spores." From 18e1c7825d5349a384c3897bfd201cee9cfdd03e Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Mon, 25 Apr 2016 19:40:51 -0700 Subject: [PATCH 170/228] bigger --- code/game/objects/items/weapons/storage/belt.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 70c9d7905b2..1cf063e31a2 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -125,6 +125,7 @@ icon_state = "ebelt" //I'm doing this because I love you, syndicate son. item_state = "ebelt" storage_slots = 5 + w_class = 4 max_w_class = 4 //Pickaxes are big. can_hold = list( /obj/item/weapon/crowbar, From f84b00441ac7ae0a04b65d2ed3c386e1ae38e360 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Apr 2016 03:35:45 +0000 Subject: [PATCH 171/228] Automatic changelog generation for PR #17101 --- html/changelogs/AutoChangeLog-pr-17101.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17101.yml diff --git a/html/changelogs/AutoChangeLog-pr-17101.yml b/html/changelogs/AutoChangeLog-pr-17101.yml new file mode 100644 index 00000000000..b747e7cc3af --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17101.yml @@ -0,0 +1,4 @@ +author: TechnoAlchemisto +delete-after: True +changes: + - tweak: "Goliath plates can now be stacked." From 930f49589d411bb1af99493a1d414cc9d145fc6f Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Mon, 25 Apr 2016 21:01:31 -0700 Subject: [PATCH 172/228] nerfs bracers :( --- code/modules/clothing/gloves/miscellaneous.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 1a261f16d4a..6cf66684ab9 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -51,5 +51,5 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT burn_state = FIRE_PROOF - armor = list(melee = 60, bullet = 35, laser = 35, energy = 20, bomb = 35, bio = 35, rad = 35) //Not like anything ever hits the arms anyways. + armor = list(melee = 15, bullet = 35, laser = 35, energy = 20, bomb = 35, bio = 35, rad = 35) //Not like anything ever hits the arms anyways. From 0aa0c39d9bc19ccdde69334d442859cec3598d3e Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Tue, 26 Apr 2016 04:07:49 +0000 Subject: [PATCH 173/228] Automatic changelog compile --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 2 ++ html/changelogs/AutoChangeLog-pr-17101.yml | 4 ---- 3 files changed, 6 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-17101.yml diff --git a/html/changelog.html b/html/changelog.html index 2dd16a891d2..d9b0177b8df 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -63,6 +63,10 @@
      • Blobbernauts now cost 40 resources to produce, from 30.
      • Factories supporting blobbernauts do not spawn spores.
      +

      TechnoAlchemisto updated:

      +
        +
      • Goliath plates can now be stacked.
      • +

      25 April 2016

      Joan updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 822c5f31361..78ff59445de 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4641,3 +4641,5 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Blobbernauts regeneration on blob is now 2.5 health per tick, from 5. - tweak: Blobbernauts now cost 40 resources to produce, from 30. - rscdel: Factories supporting blobbernauts do not spawn spores. + TechnoAlchemisto: + - tweak: Goliath plates can now be stacked. diff --git a/html/changelogs/AutoChangeLog-pr-17101.yml b/html/changelogs/AutoChangeLog-pr-17101.yml deleted file mode 100644 index b747e7cc3af..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17101.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: TechnoAlchemisto -delete-after: True -changes: - - tweak: "Goliath plates can now be stacked." From 0f0aa25976144682d38cbe982c210480435cba6a Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 23:44:06 -0600 Subject: [PATCH 174/228] fixes watcher sinew origin tech --- code/game/objects/items/stacks/sheets/leather.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 099ddd5bc78..e4f86b5ce89 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -133,7 +133,7 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \ desc = "Long stringy filaments which presumably came from a watcher's wings." singular_name = "watcher sinew" icon_state = "sinew" - origin_tech = "bio=4" + origin_tech = "biotech=4" /* * Plates From 62688574bc7550da4ca07f8b7f372fb8f33cb742 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Tue, 26 Apr 2016 01:05:15 -0600 Subject: [PATCH 175/228] processor overload requires 20 players --- code/modules/events/processor_overload.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index 9ad23fd69ae..5214d9fea37 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -2,16 +2,17 @@ name = "Processor Overload" typepath = /datum/round_event/processor_overload weight = 15 + min_players = 20 /datum/round_event/processor_overload announceWhen = 1 /datum/round_event/processor_overload/announce() var/alert = pick( "Exospheric bubble inbound. Processor overload is likely. Please contact you*%xp25)`6cq-BZZT", \ - "Exospheric bubble inbound. Processor overload is likel*1eta;c5;'1v¬-BZZZT", \ + "Exospheric bubble inbound. Processor overload is likel*1eta;c5;'1v¬-BZZZT", \ "Exospheric bubble inbound. Processor ov#MCi46:5.;@63-BZZZZT", \ "Exospheric bubble inbo'Fz\\k55_@-BZZZZZT", \ - "Exospheri:%£ QCbyj^j Date: Tue, 26 Apr 2016 01:43:48 -0700 Subject: [PATCH 176/228] Adds a download link. --- code/modules/client/client procs.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 9b2151039a4..0abe489df35 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -145,6 +145,7 @@ var/next_external_rsc = 0 src << config.client_error_message src << "Your version: [byond_version]" src << "Required version: [config.client_error_version] or later" + src << "Visit http://www.byond.com/download/ to get the latest version of byond." if (holder) src << "Because you are an admin, you are being allowed to walk past this limitation, But it is still STRONGLY suggested you upgrade" else @@ -155,6 +156,7 @@ var/next_external_rsc = 0 src << config.client_warn_message src << "Your version: [byond_version]" src << "Required version to remove this message: [config.client_warn_version] or later" + src << "Visit http://www.byond.com/download/ to get the latest version of byond." if (connection == "web") if (!config.allowwebclient) From dadae277cbbf43c2c5dd3ae0a3887f4f5c244fd3 Mon Sep 17 00:00:00 2001 From: Zuvassin Date: Tue, 26 Apr 2016 18:55:31 +1000 Subject: [PATCH 177/228] Adds champion armour to necro chests --- .../clothing/spacesuits/miscellaneous.dm | 13 +++++++++++++ .../mining/lavaland/necropolis_chests.dm | 3 ++- icons/mob/head.dmi | Bin 143251 -> 143601 bytes icons/mob/suit.dmi | Bin 291711 -> 294139 bytes icons/obj/clothing/hats.dmi | Bin 68694 -> 68915 bytes icons/obj/clothing/suits.dmi | Bin 95473 -> 96224 bytes 6 files changed, 15 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index d03d7e169b5..48188b2764d 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -312,3 +312,16 @@ Contains: name = "inquisitor's helmet" icon_state = "hardsuit0-inq" item_state = "hardsuit0-inq" + +/obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker + name = "champion's hardsuit" + desc = "Voices echo from the hardsuit, driving the user insane." + icon_state = "hardsuit-beserker" + item_state = "hardsuit-beserker" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/beserker + +/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/beserker + name = "champion's helmet" + desc = "Peering into the eyes of the helmet is enough to seal damnation." + icon_state = "hardsuit0-beserker" + item_state = "hardsuit0-beserker" diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index a6fabeb90dc..b0b3ab28b58 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -38,7 +38,7 @@ if(11) new /obj/vehicle/lavaboat/dragon(src) if(12) - new /obj/item/upgradescroll(src) + new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker(src) if(13) new /obj/item/weapon/sord(src) if(14) @@ -68,6 +68,7 @@ new /obj/item/weapon/spellbook/oneuse/smoke(src) + //Spooky special loot /obj/item/device/wisp_lantern diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index c5de161057880b5fc72610903cb4e6c50b0a34a8..c434ad6a378b96032e02ed4a4cced2bc05b9ec15 100644 GIT binary patch delta 8803 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 wsYqi*np}2J@n$3(Cy0=}%m!W3vkcA|$$&JamW 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 Z6$Ki8oECMmrAgE2K6rS);-15+{{lTzX9NHM diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 77a3ec6f9edd757b3744e46ee695672b045d0e75..11f55cbc902e04bba4572b6af87e94417d8a37e6 100644 GIT binary patch delta 15111 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 OYAOnv@@2B-Z~qsCBJfE7 delta 12664 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 z

      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 b<0Z%0FKFX?J2AHhK%eId8uDeb=7IkQpP3-p delta 11233 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 YC)a`qH$hE42Egm7iYBZ=*&^is04|G;+5i9m delta 21629 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

      GwK)&_{skW;M$mWLw{+s${zcIe&D7ue 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 MRJ*TQq-^2)9|R3`(f|Me From deef8525162a8230c0d44709a7bdf1511c40269c Mon Sep 17 00:00:00 2001 From: bawhoppen Date: Tue, 26 Apr 2016 05:06:01 -0500 Subject: [PATCH 178/228] phil's suggestion --- code/modules/mining/mine_items.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 1583c48ae60..14ef7f79654 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -448,3 +448,4 @@ qdel(W) qdel(src) return + else return ..() From 9b1512e0b1a50ce55b7f38764517de2aa293558b Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Apr 2016 10:13:10 +0000 Subject: [PATCH 179/228] Automatic changelog generation for PR #16732 --- html/changelogs/AutoChangeLog-pr-16732.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-16732.yml diff --git a/html/changelogs/AutoChangeLog-pr-16732.yml b/html/changelogs/AutoChangeLog-pr-16732.yml new file mode 100644 index 00000000000..6f9aae5797a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-16732.yml @@ -0,0 +1,5 @@ +author: Iamgoofball & Super Aggro Crag +delete-after: True +changes: + - tweak: "Fluorosulfuric Acid now has doubled acid power." + - experiment: "Fluorosulfuric Acid now does BONUS burn damage scaling on the time it's been inside the consumer." From 534d970567aded572f8c5f9bb74b1d6379d82554 Mon Sep 17 00:00:00 2001 From: Razharas Date: Tue, 26 Apr 2016 15:34:49 +0300 Subject: [PATCH 180/228] Fixes drone or any other boh in boh abuse Fixes drone or any other boh in boh abuse --- code/game/objects/items/weapons/storage/backpack.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 46ccead351f..5bae7ddf7ee 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -71,7 +71,7 @@ return 0 /obj/item/weapon/storage/backpack/holding/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user) - if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail) + if((istype(W, /obj/item/weapon/storage/backpack/holding) || count_by_type(GetAllContents(W), /obj/item/weapon/storage/backpack/holding)) && !W.crit_fail) var/safety = alert(user, "Doing this will have extremely dire consequences for the station and its crew. Be sure you know what you're doing.", "Put in [name]?", "Proceed", "Abort") if(safety == "Abort" || !in_range(src, user) || !src || !W || user.incapacitated()) return From fe0f4e2ad069be5d5b03593e8377f95cc3c90b65 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Tue, 26 Apr 2016 11:22:22 -0400 Subject: [PATCH 181/228] Charger holoparasites now shake the target's camera --- .../mob/living/simple_animal/guardian/types/charger.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm index 43ad31d865c..f2903408299 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/charger.dm @@ -57,7 +57,7 @@ blocked = 1 if(ishuman(A)) var/mob/living/carbon/human/H = A - if(H.check_shields(90, "the [name]", src, attack_type = THROWN_PROJECTILE_ATTACK)) + if(H.check_shields(90, "[name]", src, attack_type = THROWN_PROJECTILE_ATTACK)) blocked = 1 if(!blocked) @@ -65,6 +65,9 @@ L.drop_l_hand() L.visible_message("[src] slams into [L]!", "[src] slams into you!") L.apply_damage(20, BRUTE) + playsound(get_turf(L), 'sound/effects/meteorimpact.ogg', 100, 1) + shake_camera(L, 4, 3) + shake_camera(src, 2, 3) charging = 0 From 02b29f888a5956ded459f19a67300b7d9cf0204b Mon Sep 17 00:00:00 2001 From: erwgd Date: Tue, 26 Apr 2016 18:41:21 +0100 Subject: [PATCH 182/228] Prevents collapsing roller beds or grabbing chairs whilst incapacitated (#17074) * added if(usr.incapacitated) for grabbing a chair * added if(usr.incapacitated()) for collapsing a roller bed --- code/game/objects/structures/beds_chairs/bed.dm | 3 +++ code/game/objects/structures/beds_chairs/chair.dm | 3 +++ 2 files changed, 6 insertions(+) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index fc16964286d..0488755e685 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -69,6 +69,9 @@ return 0 if(buckled_mobs.len) return 0 + if(usr.incapacitated()) + usr << "You can't do that right now!" + return 0 usr.visible_message("[usr] collapses \the [src.name].", "You collapse \the [src.name].") new foldabletype(get_turf(src)) qdel(src) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 82218cdbd37..9950aa178c0 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -214,6 +214,9 @@ if(over_object == usr && Adjacent(usr)) if(!item_chair || !ishuman(usr) || buckled_mobs.len || src.flags & NODECONSTRUCT) return + if(usr.incapacitated()) + usr << "You can't do that right now!" + return usr.visible_message("[usr] grabs \the [src.name].", "You grab \the [src.name].") var/C = new item_chair(loc) usr.put_in_hands(C) From de5a21413231b78389e0387c2564fa074041e199 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Tue, 26 Apr 2016 10:49:11 -0700 Subject: [PATCH 183/228] Fixes detection multitool (#17011) * detectionfix * unnessacary_things_removal * Uranges --- code/game/objects/items/devices/multitool.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 2ec98bab769..bc65f1a0f12 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -31,7 +31,6 @@ var/track_cooldown = 0 var/track_delay = 10 //How often it checks for proximity var/detect_state = PROXIMITY_NONE - var/turf/our_turf var/rangealert = 8 //Glows red when inside var/rangewarning = 20 //Glows yellow when inside @@ -47,12 +46,12 @@ if(track_cooldown > world.time) return detect_state = PROXIMITY_NONE - our_turf = get_turf(src) multitool_detect() icon_state = "[initial(icon_state)][detect_state]" - track_cooldown = world.time + track_delay // 1 second + track_cooldown = world.time + track_delay /obj/item/device/multitool/ai_detect/proc/multitool_detect() + var/turf/our_turf = get_turf(src) for(var/mob/living/silicon/ai/AI in ai_list) if(AI.cameraFollow == src) detect_state = PROXIMITY_ON_SCREEN @@ -76,7 +75,8 @@ track_delay = 5 /obj/item/device/multitool/ai_detect/admin/multitool_detect() - for(var/mob/J in range(rangewarning,src)) + var/turf/our_turf = get_turf(src) + for(var/mob/J in urange(rangewarning,our_turf)) if(admin_datums[J.ckey]) detect_state = PROXIMITY_NEAR var/turf/detect_turf = get_turf(J) From b7da04e8c89b3f06ab10faee1441b47f97df3254 Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 26 Apr 2016 21:43:11 +0200 Subject: [PATCH 184/228] You can now use your PDA on the emergency shuttle console. --- code/modules/shuttle/emergency.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 1a12c3eb759..987cb75af14 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -8,8 +8,8 @@ /obj/machinery/computer/emergency_shuttle/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/ID = I + var/obj/item/weapon/card/id/ID = I.GetID() + if(ID) if(stat & (BROKEN|NOPOWER)) return if(SSshuttle.emergency.mode != SHUTTLE_DOCKED) From da570054fe8a7839b62dc25670478b1e425c5375 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Apr 2016 20:00:45 +0000 Subject: [PATCH 185/228] Automatic changelog generation for PR #17092 --- html/changelogs/AutoChangeLog-pr-17092.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17092.yml diff --git a/html/changelogs/AutoChangeLog-pr-17092.yml b/html/changelogs/AutoChangeLog-pr-17092.yml new file mode 100644 index 00000000000..802054d39c6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17092.yml @@ -0,0 +1,9 @@ +author: phil235 +delete-after: True +changes: + - rscadd: "More structures and machines are now breakable and/or destroyable with melee weapon. Additionally, Some structures and machines that are already breakable/destroyable are now affected by more attack methods (gun projectiles, thrown items, melee weapons, xeno/animal attacks, explosions)." + - rscadd: "Hitting any machine now always makes a sound." + - rscadd: "You can hit closed closets/crates and doors by using an item on harm intent (but it doesn't actually hurt them)." + - rscadd: "you can now burst filled water balloons with sharp items." + - bugfix: "Wooden barricade drops wood when destroyed." + - bugfix: "Slot machines with coins inside are deconstructable now." From 5b19023f249054219fdc6ca68b8ae7ae87bef032 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Tue, 26 Apr 2016 13:35:00 -0700 Subject: [PATCH 186/228] adds skull helmet. --- code/modules/clothing/head/helmet.dm | 10 ++++++++++ code/modules/crafting/recipes.dm | 7 +++++++ icons/mob/head.dmi | Bin 143601 -> 144295 bytes icons/obj/clothing/hats.dmi | Bin 68915 -> 69446 bytes 4 files changed, 17 insertions(+) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 9a2da325ac4..0de25cc3366 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -203,6 +203,16 @@ icon_state = "knight_templar" item_state = "knight_templar" +/obj/item/clothing/head/helmet/skull + name = "skull helmet" + desc = "An intimidating tribal helmet, it doesn't look very comfortable." + flags_inv = HIDEEARS|HIDEHAIR + flags_cover = HEADCOVERSEYES + armor = list(melee = 25, bullet = 25, laser = 25, energy = 10, bomb = 10, bio = 5, rad = 20) + icon_state = "skull" + item_state = "skull" + strip_delay = 100 + //LightToggle /obj/item/clothing/head/helmet/update_icon() diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index a2b1e4a81e7..e1422fed664 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -373,4 +373,11 @@ time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1) + category = CAT_MISC + +/datum/table_recipe/skullhelm + name = "Skull Helmet" + result = /obj/item/clothing/head/helmet/skull + time = 30 + reqs = list(/obj/item/stack/sheet/bone = 4) category = CAT_MISC \ No newline at end of file diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index c434ad6a378b96032e02ed4a4cced2bc05b9ec15..7a45a41000ef314ef4842e66dc261218699985a5 100644 GIT binary patch delta 9861 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 B%eepm delta 9161 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 Date: Tue, 26 Apr 2016 13:49:35 -0700 Subject: [PATCH 187/228] Var stuff --- code/game/machinery/machinery.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index c5b5df6e648..b5c35f5fa12 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -157,7 +157,7 @@ Class Procs: PoolOrNew(/obj/effect/overlay/temp/emp, loc) ..() -/obj/machinery/proc/open_machine(var/drop = 1) +/obj/machinery/proc/open_machine(drop = 1) state_open = 1 density = 0 if(drop) From 926e351fee8120c37e2d5a52d9a227e65ac1e81e Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Tue, 26 Apr 2016 14:10:42 -0700 Subject: [PATCH 188/228] adds sinew restraints, changes sinew droprate. --- .../objects/items/stacks/sheets/leather.dm | 8 ++++++++ code/game/objects/items/weapons/handcuffs.dm | 8 ++++++++ .../simple_animal/hostile/mining_mobs.dm | 2 +- icons/obj/items.dmi | Bin 59624 -> 60180 bytes 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 9f43e348474..537b1646462 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -135,6 +135,14 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \ icon_state = "sinew" origin_tech = "biotech=4" + +var/global/list/datum/stack_recipe/sinew_recipes = list ( \ + new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1, on_floor = 1), \ + ) + +/obj/item/stack/sheet/sinew/New(var/loc, var/amount=null) + recipes = sinew_recipes + return ..() /* * Plates */ diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index aa0f83182a8..6ccf6f3b0b0 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -67,6 +67,14 @@ qdel(src) return +/obj/item/weapon/restraints/handcuffs/sinew + name = "sinew restraints" + desc = "A pair of restraints fashioned from long strands of flesh." + icon_state = "sinewcuff" + item_state = "sinewcuff" + breakouttime = 300 //Deciseconds = 30s + cuffsound = 'sound/weapons/cablecuff.ogg' + /obj/item/weapon/restraints/handcuffs/cable name = "cable restraints" desc = "Looks like some cables tied together. Could be used to tie something up." diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index a7186efb514..82c1949e81d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -635,7 +635,7 @@ stat_attack = 1 robust_searching = 1 loot = list() - butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, /obj/item/stack/sheet/bone = 1) + butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1) //Goliath diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 6f50b46333ff05aa094fe80c3a9e57e5d9f19cd5..c7a796bf35d3c96211cfedec3f5ff902599c79a6 100644 GIT binary patch delta 21796 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 Q5f1P$GqN%yA-%Bw1J|ExJ^%m! From 12f9d205e8a513aa97f3f7385bf5d996289a0dad Mon Sep 17 00:00:00 2001 From: LatD Date: Wed, 27 Apr 2016 00:28:01 +0300 Subject: [PATCH 189/228] Syndicate bomb delay wire changed to one time use (#16790) * Syndicate bomb delay wire * Fixes delay wires * Add bomb delay variables * Forgot to remove unused var * Small fix --- code/datums/wires/syndicatebomb.dm | 17 ++++++++++++----- code/game/machinery/syndicatebomb.dm | 4 ++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm index a9ad735a92c..570e45ba7af 100644 --- a/code/datums/wires/syndicatebomb.dm +++ b/code/datums/wires/syndicatebomb.dm @@ -24,9 +24,13 @@ if(WIRE_UNBOLT) holder.visible_message("\icon[B] The bolts spin in place for a moment.") if(WIRE_DELAY) - holder.visible_message("\icon[B] The bomb chirps.") - playsound(B, 'sound/machines/chime.ogg', 30, 1) - B.timer += 10 + if(B.delayedbig) + holder.visible_message("\icon[B] The bomb has already been delayed.") + else + holder.visible_message("\icon[B] The bomb chirps.") + playsound(B, 'sound/machines/chime.ogg', 30, 1) + B.timer += 30 + B.delayedbig = TRUE if(WIRE_PROCEED) holder.visible_message("\icon[B] The bomb buzzes ominously!") playsound(B, 'sound/machines/buzz-sigh.ogg', 30, 1) @@ -42,9 +46,12 @@ playsound(B, 'sound/machines/click.ogg', 30, 1) B.active = TRUE B.update_icon() + else if(B.delayedlittle) + holder.visible_message("\icon[B] Nothing happens.") else holder.visible_message("\icon[B] The bomb seems to hesitate for a moment.") - B.timer += 5 + B.timer += 10 + B.delayedlittle = TRUE /datum/wires/syndicatebomb/on_cut(wire, mend) var/obj/machinery/syndicatebomb/B = holder @@ -72,4 +79,4 @@ holder.visible_message("\icon[B] The timer stops! The bomb has been defused!") B.active = FALSE B.defused = TRUE - B.update_icon() \ No newline at end of file + B.update_icon() diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 3e843a10ad0..23a44cd1be5 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -16,6 +16,8 @@ var/defused = FALSE //is the bomb capable of exploding? var/obj/item/weapon/bombcore/payload = /obj/item/weapon/bombcore var/beepsound = 'sound/items/timer.ogg' + var/delayedbig = FALSE //delay wire pulsed? + var/delayedlittle = FALSE //activation wire pulsed? /obj/machinery/syndicatebomb/process() if(active && !defused && (timer > 0)) //Tick Tock @@ -250,6 +252,8 @@ holder.wires.shuffle_wires() holder.defused = 0 holder.open_panel = 0 + holder.delayedbig = FALSE + holder.delayedlittle = FALSE holder.update_icon() holder.updateDialog() From 48a23c6c7feacd51448ada313b267065d82c73e4 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Apr 2016 21:28:03 +0000 Subject: [PATCH 190/228] Automatic changelog generation for PR #16790 --- html/changelogs/AutoChangeLog-pr-16790.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-16790.yml diff --git a/html/changelogs/AutoChangeLog-pr-16790.yml b/html/changelogs/AutoChangeLog-pr-16790.yml new file mode 100644 index 00000000000..ef65cc526db --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-16790.yml @@ -0,0 +1,4 @@ +author: Lati +delete-after: True +changes: + - tweak: "Syndicate bomb can be only delayed once by pulsing the delay wire. Time gained from this is changed from 10 seconds to 30 seconds." From dc730e9b5bd634efa4bc317526b96a7508f48801 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 27 Apr 2016 01:00:39 +0200 Subject: [PATCH 191/228] Fixes typo making the destructive analyzer always be busy. --- code/modules/research/destructive_analyzer.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 76a65f9015d..85a492092c5 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -55,4 +55,6 @@ Note: Must be placed within 3 tiles of the R&D Console O.loc = src user << "You add the [O.name] to the [src.name]!" flick("d_analyzer_la", src) + spawn(10) + busy = 0 From 0a8da62457b97ec7c730b8507998526a7a6a3e97 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Tue, 26 Apr 2016 16:34:54 -0700 Subject: [PATCH 192/228] adds primal category to stop clutter in cat_misc. --- code/__DEFINES/tablecrafting.dm | 3 ++- code/modules/crafting/recipes.dm | 8 ++++---- code/modules/crafting/table.dm | 2 +- code/modules/mining/lavaland/necropolis_chests.dm | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/code/__DEFINES/tablecrafting.dm b/code/__DEFINES/tablecrafting.dm index 4f10232baf6..cfe3f8cb388 100644 --- a/code/__DEFINES/tablecrafting.dm +++ b/code/__DEFINES/tablecrafting.dm @@ -4,4 +4,5 @@ #define CAT_AMMO "Ammunition" #define CAT_ROBOT "Robots" #define CAT_FOOD "Food" -#define CAT_MISC "Misc" \ No newline at end of file +#define CAT_MISC "Misc" +#define CAT_PRIMAL "Tribal" \ No newline at end of file diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index e1422fed664..6bb6ac9ab5d 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -357,7 +357,7 @@ result = /obj/item/clothing/suit/armor/bone time = 30 reqs = list(/obj/item/stack/sheet/bone = 6) - category = CAT_MISC + category = CAT_PRIMAL /datum/table_recipe/bonetalisman name = "Bone Talisman" @@ -365,7 +365,7 @@ time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1) - category = CAT_MISC + category = CAT_PRIMAL /datum/table_recipe/bracers name = "Bone Bracers" @@ -373,11 +373,11 @@ time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1) - category = CAT_MISC + category = CAT_PRIMAL /datum/table_recipe/skullhelm name = "Skull Helmet" result = /obj/item/clothing/head/helmet/skull time = 30 reqs = list(/obj/item/stack/sheet/bone = 4) - category = CAT_MISC \ No newline at end of file + category = CAT_PRIMAL \ No newline at end of file diff --git a/code/modules/crafting/table.dm b/code/modules/crafting/table.dm index 687cae5be3b..ec813ea7e80 100644 --- a/code/modules/crafting/table.dm +++ b/code/modules/crafting/table.dm @@ -3,7 +3,7 @@ mouse_drag_pointer = MOUSE_ACTIVE_POINTER var/list/table_contents = list() var/viewing_category = 1 //typical powergamer starting on the Weapons tab - var/list/categories = list(CAT_WEAPON,CAT_AMMO,CAT_ROBOT,CAT_FOOD,CAT_MISC) + var/list/categories = list(CAT_WEAPON,CAT_AMMO,CAT_ROBOT,CAT_FOOD,CAT_MISC,CAT_PRIMAL) /obj/structure/table/MouseDrop(mob/living/user) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index b0b3ab28b58..6ac52843391 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -369,14 +369,14 @@ result = /obj/item/weapon/oar reqs = list(/obj/item/stack/sheet/bone = 2) time = 15 - category = CAT_MISC + category = CAT_PRIMAL /datum/table_recipe/boat name = "goliath hide boat" result = /obj/vehicle/lavaboat reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3) time = 50 - category = CAT_MISC + category = CAT_PRIMAL //Dragon Boat From ed23269f7b74eeddcfad96f99fc5a982960a0965 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Tue, 26 Apr 2016 23:39:28 +0000 Subject: [PATCH 193/228] Automatic changelog compile --- html/changelog.html | 18 ++++++++++++++++++ html/changelogs/.all_changelog.yml | 18 ++++++++++++++++++ html/changelogs/AutoChangeLog-pr-16732.yml | 5 ----- html/changelogs/AutoChangeLog-pr-16790.yml | 4 ---- html/changelogs/AutoChangeLog-pr-17092.yml | 9 --------- 5 files changed, 36 insertions(+), 18 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-16732.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-16790.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17092.yml diff --git a/html/changelog.html b/html/changelog.html index d9b0177b8df..91e13a61e84 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,11 @@ -->

      26 April 2016

      +

      Iamgoofball & Super Aggro Crag updated:

      +
        +
      • Fluorosulfuric Acid now has doubled acid power.
      • +
      • Fluorosulfuric Acid now does BONUS burn damage scaling on the time it's been inside the consumer.
      • +

      Joan updated:

      • Blobbernauts now spawn at half health.
      • @@ -63,10 +68,23 @@
      • Blobbernauts now cost 40 resources to produce, from 30.
      • Factories supporting blobbernauts do not spawn spores.
      +

      Lati updated:

      +
        +
      • Syndicate bomb can be only delayed once by pulsing the delay wire. Time gained from this is changed from 10 seconds to 30 seconds.
      • +

      TechnoAlchemisto updated:

      • Goliath plates can now be stacked.
      +

      phil235 updated:

      +
        +
      • More structures and machines are now breakable and/or destroyable with melee weapon. Additionally, Some structures and machines that are already breakable/destroyable are now affected by more attack methods (gun projectiles, thrown items, melee weapons, xeno/animal attacks, explosions).
      • +
      • Hitting any machine now always makes a sound.
      • +
      • You can hit closed closets/crates and doors by using an item on harm intent (but it doesn't actually hurt them).
      • +
      • you can now burst filled water balloons with sharp items.
      • +
      • Wooden barricade drops wood when destroyed.
      • +
      • Slot machines with coins inside are deconstructable now.
      • +

      25 April 2016

      Joan updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 78ff59445de..9a9ddcc0f08 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4636,10 +4636,28 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: The description of the light replacer is now more informative. - rscadd: Clown mask appearance toggle now has an action button. 2016-04-26: + Iamgoofball & Super Aggro Crag: + - tweak: Fluorosulfuric Acid now has doubled acid power. + - experiment: Fluorosulfuric Acid now does BONUS burn damage scaling on the time + it's been inside the consumer. Joan: - tweak: Blobbernauts now spawn at half health. - tweak: Blobbernauts regeneration on blob is now 2.5 health per tick, from 5. - tweak: Blobbernauts now cost 40 resources to produce, from 30. - rscdel: Factories supporting blobbernauts do not spawn spores. + Lati: + - tweak: Syndicate bomb can be only delayed once by pulsing the delay wire. Time + gained from this is changed from 10 seconds to 30 seconds. TechnoAlchemisto: - tweak: Goliath plates can now be stacked. + phil235: + - rscadd: More structures and machines are now breakable and/or destroyable with + melee weapon. Additionally, Some structures and machines that are already breakable/destroyable + are now affected by more attack methods (gun projectiles, thrown items, melee + weapons, xeno/animal attacks, explosions). + - rscadd: Hitting any machine now always makes a sound. + - rscadd: You can hit closed closets/crates and doors by using an item on harm intent + (but it doesn't actually hurt them). + - rscadd: you can now burst filled water balloons with sharp items. + - bugfix: Wooden barricade drops wood when destroyed. + - bugfix: Slot machines with coins inside are deconstructable now. diff --git a/html/changelogs/AutoChangeLog-pr-16732.yml b/html/changelogs/AutoChangeLog-pr-16732.yml deleted file mode 100644 index 6f9aae5797a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-16732.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Iamgoofball & Super Aggro Crag -delete-after: True -changes: - - tweak: "Fluorosulfuric Acid now has doubled acid power." - - experiment: "Fluorosulfuric Acid now does BONUS burn damage scaling on the time it's been inside the consumer." diff --git a/html/changelogs/AutoChangeLog-pr-16790.yml b/html/changelogs/AutoChangeLog-pr-16790.yml deleted file mode 100644 index ef65cc526db..00000000000 --- a/html/changelogs/AutoChangeLog-pr-16790.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Lati -delete-after: True -changes: - - tweak: "Syndicate bomb can be only delayed once by pulsing the delay wire. Time gained from this is changed from 10 seconds to 30 seconds." diff --git a/html/changelogs/AutoChangeLog-pr-17092.yml b/html/changelogs/AutoChangeLog-pr-17092.yml deleted file mode 100644 index 802054d39c6..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17092.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: phil235 -delete-after: True -changes: - - rscadd: "More structures and machines are now breakable and/or destroyable with melee weapon. Additionally, Some structures and machines that are already breakable/destroyable are now affected by more attack methods (gun projectiles, thrown items, melee weapons, xeno/animal attacks, explosions)." - - rscadd: "Hitting any machine now always makes a sound." - - rscadd: "You can hit closed closets/crates and doors by using an item on harm intent (but it doesn't actually hurt them)." - - rscadd: "you can now burst filled water balloons with sharp items." - - bugfix: "Wooden barricade drops wood when destroyed." - - bugfix: "Slot machines with coins inside are deconstructable now." From 1192b48c973a0f907c299ef34a834ace5b127f77 Mon Sep 17 00:00:00 2001 From: PKPenguin321 Date: Tue, 26 Apr 2016 16:41:53 -0700 Subject: [PATCH 194/228] moves krav gloves off of warden and into his locker --- .../structures/crates_lockers/closets/secure/security.dm | 1 + code/modules/jobs/job_types/security.dm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 502024a7c7b..2cb1eae867f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -100,6 +100,7 @@ new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/weapon/storage/belt/security/full(src) new /obj/item/device/flashlight/seclite(src) + new /obj/item/clothing/gloves/color/black/krav_maga/sec(src) /obj/structure/closet/secure_closet/security name = "security officer's locker" diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index 7e0bab091c3..e62a8e155a2 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -98,7 +98,7 @@ Warden uniform = /obj/item/clothing/under/rank/warden shoes = /obj/item/clothing/shoes/jackboots suit = /obj/item/clothing/suit/armor/vest/warden - gloves = /obj/item/clothing/gloves/color/black/krav_maga/sec + gloves = /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/warden glasses = /obj/item/clothing/glasses/hud/security/sunglasses r_pocket = /obj/item/device/assembly/flash/handheld From 18d748e126d6489f4a0bfb37d9849a45b7935725 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 27 Apr 2016 01:06:49 +0000 Subject: [PATCH 195/228] Automatic changelog generation for PR #17119 --- html/changelogs/AutoChangeLog-pr-17119.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17119.yml diff --git a/html/changelogs/AutoChangeLog-pr-17119.yml b/html/changelogs/AutoChangeLog-pr-17119.yml new file mode 100644 index 00000000000..1858d71ea48 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17119.yml @@ -0,0 +1,4 @@ +author: TechnoAlchemisto +delete-after: True +changes: + - rscadd: "Miners can now select explorer belts from the mining vendor using their vouchers, or mining points." From 8a31634cab2a6dd9458c94d04f14c19b9a1a51cd Mon Sep 17 00:00:00 2001 From: c0 Date: Wed, 27 Apr 2016 06:34:11 +0300 Subject: [PATCH 196/228] Nerfs botany slippery-everything --- code/modules/hydroponics/grown.dm | 11 ++------- code/modules/hydroponics/growninedible.dm | 11 ++------- code/modules/hydroponics/plant_genes.dm | 27 +++++++++++++++++++---- code/modules/hydroponics/seeds.dm | 10 ++++----- 4 files changed, 32 insertions(+), 27 deletions(-) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 83e1edfe366..306633d56bc 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -129,15 +129,8 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/Crossed(atom/movable/AM) if(seed) - var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip) - if(S && !ispath(trash, /obj/item/weapon/grown) && iscarbon(AM)) - var/mob/living/carbon/M = AM - var/stun = max(seed.potency * S.rate * 2, 1) - var/weaken = max(seed.potency * S.rate, 0.5) - if(M.slip(stun, weaken, src)) - for(var/datum/plant_gene/trait/T in seed.genes) - T.on_slip(src, M) - return 1 + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_cross(src, AM) ..() diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index cd6cd6f6732..17de41308f2 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -50,15 +50,8 @@ /obj/item/weapon/grown/Crossed(atom/movable/AM) if(seed) - var/datum/plant_gene/trait/slip/S = seed.get_gene(/datum/plant_gene/trait/slip) - if(S && iscarbon(AM)) - var/mob/living/carbon/M = AM - var/stun = max(seed.potency * S.rate * 2, 1) - var/weaken = max(seed.potency * S.rate, 0.5) - if(M.slip(stun, weaken, src)) - for(var/datum/plant_gene/trait/T in seed.genes) - T.on_slip(src, M) - return 1 + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_cross(src, AM) ..() diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index a4b6a92c36a..40f012af0d3 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -156,6 +156,8 @@ /datum/plant_gene/trait/proc/on_consume(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) return +/datum/plant_gene/trait/proc/on_cross(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) + return /datum/plant_gene/trait/proc/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) return /datum/plant_gene/trait/proc/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) @@ -177,11 +179,28 @@ /datum/plant_gene/trait/slip // Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery. // Applies other trait effects (teleporting, etc) to the target by on_slip. - // For code, see grown.dm name = "Slippery Skin" rate = 0.1 examine_line = "It has a very slippery skin." +/datum/plant_gene/trait/slip/on_cross(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) + if(iscarbon(target)) + var/obj/item/seeds/seed = G.seed + var/mob/living/carbon/M = target + + var/stun_len = seed.potency * rate + if(istype(G) && ispath(G.trash, /obj/item/weapon/grown)) + return + + if(!istype(G, /obj/item/weapon/grown/bananapeel) && (!G.reagents || !G.reagents.has_reagent("lube"))) + stun_len /= 3 + + var/stun = max(stun_len * 2, 1) + var/weaken = max(stun_len, 0.5) + + if(M.slip(stun, weaken, G)) + for(var/datum/plant_gene/trait/T in seed.genes) + T.on_slip(src, M) /datum/plant_gene/trait/cell_charge // Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten. @@ -189,18 +208,18 @@ // Small (potency*rate*5) chance to shock squish or slip target for (potency*rate*5) damage. // Multiplies max charge by (rate*1000) when used in potato power cells. name = "Electrical Activity" - rate = 0.01 + rate = 0.2 origin_tech = list("powerstorage" = 4) /datum/plant_gene/trait/cell_charge/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) - var/power = G.seed.potency*rate*5 + var/power = G.seed.potency*rate if(prob(power)) C.electrocute_act(round(power), G, 1, 1) /datum/plant_gene/trait/cell_charge/on_squash(obj/item/weapon/reagent_containers/food/snacks/grown/G, atom/target) if(iscarbon(target)) var/mob/living/carbon/C = target - var/power = G.seed.potency*rate*5 + var/power = G.seed.potency*rate if(prob(power)) C.electrocute_act(round(power), G, 1, 1) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index a919c48406b..5eba54312e5 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -5,7 +5,7 @@ /obj/item/seeds icon = 'icons/obj/hydroponics/seeds.dmi' icon_state = "seed" // Unknown plant seed - these shouldn't exist in-game. - w_class = 1 // Pocketable. + w_class = 1 burn_state = FLAMMABLE var/plantname = "Plants" // Name of plant when planted. var/product // A type path. The thing that is created when the plant is harvested. @@ -15,10 +15,10 @@ var/icon_dead // Used to override dead icon (default is "[species]-dead"). You can use one dead icon for multiple closely related plants with it. var/icon_harvest // Used to override harvest icon (default is "[species]-harvest"). If null, plant will use [icon_grow][growthstages]. - var/lifespan = 25 // How long before the plant begins to take damage from age. - var/endurance = 15 // Amount of health the plant has. - var/maturation = 6 // Used to determine which sprite to switch to when growing. - var/production = 6 // Changes the amount of time needed for a plant to become harvestable. + var/lifespan = 25 // How long before the plant begins to take damage from age. + var/endurance = 15 // Amount of health the plant has. + var/maturation = 6 // Used to determine which sprite to switch to when growing. + var/production = 6 // Changes the amount of time needed for a plant to become harvestable. var/yield = 3 // Amount of growns created per harvest. If is -1, the plant/shroom/weed is never meant to be harvested. var/oneharvest = 0 // If a plant is cleared from the tray after harvesting, e.g. a carrot. var/potency = 10 // The 'power' of a plant. Generally effects the amount of reagent in a plant, also used in other ways. From cd4cd13fe0d2b92ae489a4077461d67485aae517 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Wed, 27 Apr 2016 04:23:30 +0000 Subject: [PATCH 197/228] Automatic changelog compile --- html/changelog.html | 21 ++++++--------------- html/changelogs/.all_changelog.yml | 4 ++++ html/changelogs/AutoChangeLog-pr-17119.yml | 4 ---- 3 files changed, 10 insertions(+), 19 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-17119.yml diff --git a/html/changelog.html b/html/changelog.html index 91e13a61e84..fa953c8023b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->
      +

      27 April 2016

      +

      TechnoAlchemisto updated:

      +
        +
      • Miners can now select explorer belts from the mining vendor using their vouchers, or mining points.
      • +
      +

      26 April 2016

      Iamgoofball & Super Aggro Crag updated:

        @@ -522,21 +528,6 @@
        • Free Golems on Lavaland have been naming their newborn siblings with a wider range of geology terms
        - -

        30 March 2016

        -

        Coiax updated:

        -
          -
        • Geiger counters can now be stored in the suit storage of radiation suits
        • -
        -

        RemieRichards updated:

        -
          -
        • fixes shift-clicking action buttons not instantly resetting their location. (I'm only making a changelog for this because apparently barely noone even knows you can move the buttons, let alone reset them...)
        • -
        -

        TehZombehz updated:

        -
          -
        • Honey buns and honey nut bars are now craftable using honey.
        • -
        • Brewing mead now requires actual honey.
        • -
      GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 9a9ddcc0f08..b76de4de857 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4661,3 +4661,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: you can now burst filled water balloons with sharp items. - bugfix: Wooden barricade drops wood when destroyed. - bugfix: Slot machines with coins inside are deconstructable now. +2016-04-27: + TechnoAlchemisto: + - rscadd: Miners can now select explorer belts from the mining vendor using their + vouchers, or mining points. diff --git a/html/changelogs/AutoChangeLog-pr-17119.yml b/html/changelogs/AutoChangeLog-pr-17119.yml deleted file mode 100644 index 1858d71ea48..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17119.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: TechnoAlchemisto -delete-after: True -changes: - - rscadd: "Miners can now select explorer belts from the mining vendor using their vouchers, or mining points." From 9e3f62bf09684636d1cbe35bde418e2036aa86d5 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 27 Apr 2016 04:56:36 +0000 Subject: [PATCH 198/228] Automatic changelog generation for PR #17147 --- html/changelogs/AutoChangeLog-pr-17147.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17147.yml diff --git a/html/changelogs/AutoChangeLog-pr-17147.yml b/html/changelogs/AutoChangeLog-pr-17147.yml new file mode 100644 index 00000000000..ded81fe963c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17147.yml @@ -0,0 +1,4 @@ +author: TechnoAlchemisto +delete-after: True +changes: + - rscadd: "You can now craft skull helmets from bones." From fa7158e860711a9b9efb6a77d4c8c187932397ee Mon Sep 17 00:00:00 2001 From: bawhoppen Date: Wed, 27 Apr 2016 04:35:59 -0500 Subject: [PATCH 199/228] fixed it --- code/modules/mining/mine_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 14ef7f79654..fdd3e6092ac 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -440,7 +440,7 @@ w_class = 1 /obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params) - if(istype(W,/obj/item/weapon/ore/glass || /obj/item/weapon/ore/glass/basalt)) + if(istype(W,/obj/item/weapon/ore/glass)) user << "You fill the sandbag." var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags user.unEquip(src) From f4f09704ebb7223dcb26f93ea1de04fb08942063 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 27 Apr 2016 13:03:19 +0200 Subject: [PATCH 200/228] fixes not being able to pour reagents in circuit imprinter/protolathe --- code/modules/research/rdmachines.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 7fb6e811822..847df5d329d 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -60,6 +60,8 @@ return if(default_deconstruction_crowbar(O)) return + if((flags & OPENCONTAINER) && O.is_open_container()) + return 0 //inserting reagents into the machine if(Insert_Item(O, user)) return 1 else @@ -98,4 +100,4 @@ /obj/machinery/r_n_d/deconstruction() if(loaded_item) loaded_item.loc = loc - ..() \ No newline at end of file + ..() From 9657f328ec3279935cb61de60a15f0c1a461794a Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 27 Apr 2016 13:04:05 +0200 Subject: [PATCH 201/228] Fixes Reagent insertion in RnD machines --- code/modules/research/circuitprinter.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 86a65b89bbf..0f6cb9cb2a3 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -91,9 +91,6 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). /obj/machinery/r_n_d/circuit_imprinter/Insert_Item(obj/item/O, mob/user) - if (O.is_open_container()) //inserting reagents into the machine - return 1 - if (istype(O, /obj/item/stack/sheet/glass) || istype(O, /obj/item/stack/sheet/mineral/gold) || istype(O, /obj/item/stack/sheet/mineral/diamond)) . = 1 if(!is_insertion_ready(user)) @@ -125,4 +122,4 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). else if(user.a_intent != "harm") user << "You cannot insert this item into the [name]!" else - return 0 \ No newline at end of file + return 0 From 33d84ef73f6f0a8f8a07a0640c49acbb71e58258 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 27 Apr 2016 13:05:13 +0200 Subject: [PATCH 202/228] Fixes inserting reagents in RnD machines --- code/modules/research/protolathe.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 428ee5947a4..e704dd823ae 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -81,9 +81,6 @@ Note: Must be placed west/left of and R&D console to function. /obj/machinery/r_n_d/protolathe/Insert_Item(obj/item/O, mob/user) - if(O.is_open_container()) //inserting reagents into the machine - return 1 - if(istype(O,/obj/item/stack/sheet)) . = 1 if(!is_insertion_ready(user)) @@ -113,4 +110,4 @@ Note: Must be placed west/left of and R&D console to function. else if(user.a_intent != "harm") user << "You cannot insert this item into the [name]!" else - return 0 \ No newline at end of file + return 0 From fa018861e8ca8bca1c32c560f35d64d8a0a8fcd5 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Wed, 27 Apr 2016 16:20:06 +0100 Subject: [PATCH 203/228] New cargo crates to buy Also some minor spelling fixes I noticed. :cl: coiax tweak: Internals Crate now contains breath masks and small tanks. rscadd: Metal foam grenade box crate added for 1000 points rscadd: Added two Engineering Mesons to Engineering Gear Crate tweak: Engineering Gear now costs 1300 rscadd: Breach Shield Generator Crate added for 2500 points rscadd: Grounding Rod Crate added for 2500 points rscadd: PACMAN Generator Crate added for 2500 rscadd: Defibrillator Crate added for 1500 rscadd: Nanotrasen Customs report that some wide band suppliers have been providing "alternative" firing pins. Nanotrasen reminds all crewmembers that contraband is contraband. /:cl: Laser tag firing pins (only allow gun to be fired with laser tag armor of the appropriate colour) added to contraband. Special clown firing pin (prank your friends) added to contraband. --- .../objects/items/weapons/storage/boxes.dm | 13 +++- code/modules/cargo/export_scanner.dm | 4 +- code/modules/cargo/packs.dm | 69 +++++++++++++++++-- 3 files changed, 78 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index bb95dbf2d7f..23c8c3f64c3 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -381,6 +381,17 @@ for(var/i in 1 to 5) new /obj/item/device/firing_pin(src) +/obj/item/weapon/storage/box/lasertagpins + name = "box of laser tag firing pins" + desc = "A box full of laser tag firing pins, to allow newly-developed firearms to require wearing brightly coloured plastic armor before being able to be used." + icon_state = "id" + +/obj/item/weapon/storage/box/lasertagpins/New() + ..() + for(var/i in 1 to 3) + new /obj/item/device/firing_pin/tag/red(src) + new /obj/item/device/firing_pin/tag/blue(src) + /obj/item/weapon/storage/box/handcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." @@ -795,4 +806,4 @@ new /obj/item/weapon/circuitboard/protolathe(src) new /obj/item/weapon/circuitboard/destructive_analyzer(src) new /obj/item/weapon/circuitboard/circuit_imprinter(src) - new /obj/item/weapon/circuitboard/rdconsole(src) \ No newline at end of file + new /obj/item/weapon/circuitboard/rdconsole(src) diff --git a/code/modules/cargo/export_scanner.dm b/code/modules/cargo/export_scanner.dm index 7d085ff97f5..e17e7b5f635 100644 --- a/code/modules/cargo/export_scanner.dm +++ b/code/modules/cargo/export_scanner.dm @@ -11,7 +11,7 @@ /obj/item/device/export_scanner/examine(user) ..() if(!cargo_console) - user << "You had to link it to supply console for it to work." + user << "The [src] is currently not linked to a cargo console." /obj/item/device/export_scanner/afterattack(obj/O, mob/user, proximity) if(!istype(O) || !proximity) @@ -44,4 +44,4 @@ exported = TRUE break if(!exported) - user << "The object is unexportable." \ No newline at end of file + user << "The object is unexportable." diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 8fcbcff8bcc..a76603a1d50 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -53,6 +53,12 @@ contains = list(/obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath, + /obj/item/weapon/tank/internals/emergency_oxygen, + /obj/item/weapon/tank/internals/emergency_oxygen, + /obj/item/weapon/tank/internals/emergency_oxygen, /obj/item/weapon/tank/internals/air, /obj/item/weapon/tank/internals/air, /obj/item/weapon/tank/internals/air) @@ -105,6 +111,12 @@ crate_name = "weed control crate" crate_type = /obj/structure/closet/crate/secure/hydroponics +/datum/supply_pack/emergency/metalfoam + name = "Metal Foam Grenade Crate" + cost = 1000 + contains = list(/obj/item/weapon/storage/box/metalfoam,) + crate_name = "metal foam grenade crate" + /datum/supply_pack/emergency/specialops name = "Special Ops Supplies" hidden = TRUE @@ -440,7 +452,7 @@ /datum/supply_pack/engineering/engiequipment name = "Engineering Gear Crate" - cost = 1000 + cost = 1300 contains = list(/obj/item/weapon/storage/belt/utility, /obj/item/weapon/storage/belt/utility, /obj/item/weapon/storage/belt/utility, @@ -452,7 +464,9 @@ /obj/item/clothing/head/welding, /obj/item/clothing/head/hardhat, /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/hardhat) + /obj/item/clothing/head/hardhat, + /obj/item/clothing/glasses/meson/engine, + /obj/item/clothing/glasses/meson/engine,) crate_name = "engineering gear crate" /datum/supply_pack/engineering/engine/spacesuit @@ -468,6 +482,30 @@ crate_name = "space suit crate" crate_type = /obj/structure/closet/crate/secure +/datum/supply_pack/engineering/shieldgen + name = "Anti-breach Shield Projector Crate" + cost = 2500 + contains = list(/obj/machinery/shieldgen, + /obj/machinery/shieldgen,) + crate_name = "anti-breach shield projector crate" + +/datum/supply_pack/engineering/grounding_rods + name = "Grounding Rod Crate" + cost = 2500 + contains = list(/obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod) + crate_name = "grounding rod crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/pacman + name = "P.A.C.M.A.N Generator Crate" + cost = 2500 + contains = list(/obj/machinery/power/port_gen/pacman,) + crate_name = "PACMAN generator crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + /datum/supply_pack/engineering/solar name = "Solar Panel Crate" cost = 2000 @@ -668,6 +706,13 @@ contains = list(/obj/machinery/iv_drip) crate_name = "iv drip crate" +/datum/supply_pack/medical/defibs + name = "Defibrillator Crate" + cost = 1500 + contains = list(/obj/item/weapon/defibrillator/loaded, + /obj/item/weapon/defibrillator/loaded,) + crate_name = "defibrillator crate" + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Science ///////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -938,7 +983,7 @@ crate_name = "exotic seeds crate" /datum/supply_pack/organic/hydroponics/beekeeping_fullkit - name = "Beekeeping Starter Kit" + name = "Beekeeping Starter Crate" cost = 1500 contains = list(/obj/structure/beebox, /obj/item/honey_frame, @@ -947,10 +992,10 @@ /obj/item/queen_bee/bought, /obj/item/clothing/head/beekeeper_head, /obj/item/clothing/suit/beekeeper_suit) - crate_name = "beekeeping starter kit" + crate_name = "beekeeping starter crate" /datum/supply_pack/organic/hydroponics/beekeeping_suits - name = "2 Beekeeper suits" + name = "Beekeeper Suit Crate" cost = 1000 contains = list(/obj/item/clothing/head/beekeeper_head, /obj/item/clothing/suit/beekeeper_suit, @@ -1095,6 +1140,20 @@ /obj/item/clothing/head/helmet/bluetaghelm) crate_name = "laser tag crate" +/datum/supply_pack/misc/lasertag/pins + name = "Laser Tag Firing Pins Crate" + cost = 2000 + contraband = TRUE + contains = list(/obj/item/weapon/storage/box/lasertagpins,) + crate_name = "laser tag firing pins crate" + +/datum/supply_pack/misc/clownpin + name = "Hilarious Firing Pin Crate" + cost = 5000 + contraband = TRUE + contains = list(/obj/item/device/firing_pin/clown,) + crate_name = "hilarious firing pin crate" + /datum/supply_pack/misc/religious_supplies name = "Religious Supplies Crate" cost = 4000 // it costs so much because the Space Church is ran by Space Jews From ffc87184f0471eb02e0845dd554e6180706672df Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 27 Apr 2016 11:24:47 -0400 Subject: [PATCH 204/228] You can now analyze blobs to check material effects, blob type, and health * You can now analyze blobs to check material effects, damage resistance, and health. * beep beep * slime extinguishes stuff * I need to check my code * wew * buffnerfs * fuckthemeta * morebuffs * no unfriendly fire * damn my urge for low linecounts * this makes me want to drink heavily * if you see something, say nothing, and drink to forget * waiting for an answer is for scrubs * if you see something say nothing and drink to forget * no resist printout * phiiiiiiiil --- code/_onclick/hud/blob_overmind.dm | 2 +- code/game/gamemodes/blob/blobs/core.dm | 5 +- code/game/gamemodes/blob/blobs/factory.dm | 5 + code/game/gamemodes/blob/blobs/node.dm | 3 + code/game/gamemodes/blob/blobs/resource.dm | 3 + code/game/gamemodes/blob/blobs/shield.dm | 8 +- code/game/gamemodes/blob/powers.dm | 4 +- code/game/gamemodes/blob/theblob.dm | 31 ++++ .../chemistry/reagents/blob_reagents.dm | 133 ++++++++++++------ 9 files changed, 148 insertions(+), 46 deletions(-) diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index e46b1bebf54..8e3dcd2aa39 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -45,7 +45,7 @@ if(isovermind(usr)) var/mob/camera/blob/B = usr if(!B.placed) - B.place_blob_core() + B.place_blob_core(B.base_point_rate, 0) B.transport_core() /obj/screen/blob/Blobbernaut diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 7e47edfb42b..affd849e1e1 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -27,6 +27,9 @@ point_rate = new_rate ..() +/obj/effect/blob/core/scannerreport() + return "Directs the blob's expansion, gradually expands, and sustains nearby blob spores and blobbernauts." + /obj/effect/blob/core/update_icon() overlays.Cut() color = null @@ -71,7 +74,7 @@ Pulse_Area(overmind, 12, 4, 3) for(var/obj/effect/blob/normal/B in range(1, src)) if(prob(5)) - B.change_to(/obj/effect/blob/shield, overmind) + B.change_to(/obj/effect/blob/shield/core, overmind) ..() diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index 56ed5167f84..8ee6baa2c73 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -13,6 +13,11 @@ var/spore_delay = 0 +/obj/effect/blob/factory/scannerreport() + if(naut) + return "It is currently sustaining a blobbernaut, making it fragile and unable to produce blob spores." + return "Will produce a blob spore every few seconds." + /obj/effect/blob/factory/Destroy() for(var/mob/living/simple_animal/hostile/blob/blobspore/spore in spores) if(spore.factory == src) diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 0fa21158e26..98ddb79bf8c 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -15,6 +15,9 @@ SSobj.processing |= src ..(loc, h) +/obj/effect/blob/node/scannerreport() + return "Gradually expands and sustains nearby blob spores and blobbernauts." + /obj/effect/blob/node/update_icon() overlays.Cut() color = null diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm index a82293a0822..75a7ecfa366 100644 --- a/code/game/gamemodes/blob/blobs/resource.dm +++ b/code/game/gamemodes/blob/blobs/resource.dm @@ -8,6 +8,9 @@ point_return = 15 var/resource_delay = 0 +/obj/effect/blob/resource/scannerreport() + return "Gradually supplies the blob with resources, increasing the rate of expansion." + /obj/effect/blob/resource/creation_action() if(overmind) overmind.resource_blobs += src diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index c3003136915..cd879363cf6 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -7,9 +7,15 @@ maxhealth = 150 brute_resist = 0.1 explosion_block = 3 - point_return = 2 + point_return = 4 atmosblock = 1 +/obj/effect/blob/shield/scannerreport() + return "Will prevent the spread of atmospheric changes." + /obj/effect/blob/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) return + +/obj/effect/blob/shield/core + point_return = 0 diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index a8df3818ff0..aa8485cf2fc 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -1,13 +1,13 @@ /mob/camera/blob/proc/can_buy(cost = 15) if(blob_points < cost) - src << "You cannot afford this!" + src << "You cannot afford this, you need at least [cost] resources!" return 0 add_points(-cost) return 1 // Power verbs -/mob/camera/blob/proc/place_blob_core(point_rate = base_point_rate, placement_override = 0) +/mob/camera/blob/proc/place_blob_core(point_rate, placement_override) if(placed && placement_override != -1) return 1 if(!placement_override) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 1bac15b4993..16638eef0b3 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -195,6 +195,13 @@ var/damage = Clamp(0.01 * exposed_temperature, 0, 4) take_damage(damage, BURN) +/obj/effect/blob/emp_act(severity) + if(severity > 0) + if(overmind) + overmind.blob_reagent_datum.emp_reaction(src, severity) + if(prob(100 - severity * 30)) + PoolOrNew(/obj/effect/overlay/temp/emp, get_turf(src)) + /obj/effect/blob/tesla_act(power) ..() if(overmind) @@ -213,6 +220,21 @@ take_damage(Proj.damage, Proj.damage_type, Proj) return 0 +/obj/effect/blob/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/device/analyzer)) + user.changeNext_move(CLICK_CD_MELEE) + user << "The analyzer beeps once, then reports:
      " + user << 'sound/machines/ping.ogg' + if(overmind) + user << "Material: [overmind.blob_reagent_datum.name]." + user << "Material Effects: [overmind.blob_reagent_datum.analyzerdescdamage]" + user << "Material Properties: [overmind.blob_reagent_datum.analyzerdesceffect]
      " + user << "Blob Type: [uppertext(initial(name))]" + user << "Health: [health]/[maxhealth]" + user << "Effects: [scannerreport()]" + else + return ..() + /obj/effect/blob/attacked_by(obj/item/I, mob/living/user) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) @@ -275,12 +297,16 @@ user << "It seems to be made of [get_chem_name()]." return +/obj/effect/blob/proc/scannerreport() + return "A generic blob. Looks like someone forgot to override this proc, adminhelp this." + /obj/effect/blob/proc/get_chem_name() if(overmind) return overmind.blob_reagent_datum.name return "an unknown variant" /obj/effect/blob/normal + name = "normal blob" icon_state = "blob" luminosity = 0 health = 21 @@ -288,6 +314,11 @@ health_regen = 1 brute_resist = 0.25 +/obj/effect/blob/normal/scannerreport() + if(health <= 10) + return "Currently weak to brute damage." + return "N/A" + /obj/effect/blob/normal/update_icon() ..() if(health <= 10) diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index f57c1ea91c9..5218b3c4f82 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -5,15 +5,15 @@ color = "#FFFFFF" var/complementary_color = "#000000" //a color that's complementary to the normal blob color var/shortdesc = null //just damage and on_mob effects, doesn't include special, blob-tile only effects + var/analyzerdescdamage = "Unknown. Report this bug to a coder, or just adminhelp." + var/analyzerdesceffect = "N/A" var/blobbernaut_message = "slams" //blobbernaut attack verb var/message = "The blob strikes you" //message sent to any mob hit by the blob var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt /datum/reagent/blob/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - if(M.stat == DEAD) - return 0 //the dead don't cause reactions - if(istype(M, /mob/living/simple_animal/hostile/blob)) - return 0 //the blob mobs do not cause effects when hitting themselves or other blob mobs + if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob)) + return 0 //the dead, and blob mobs, don't cause reactions return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. /datum/reagent/blob/proc/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) //when the blob takes damage, do this @@ -31,12 +31,17 @@ /datum/reagent/blob/proc/extinguish_reaction(obj/effect/blob/B) //when the blob is hit with water, do this return +/datum/reagent/blob/proc/emp_reaction(obj/effect/blob/B, severity) //when the blob is hit with an emp, do this + return + //does low toxin damage, but creates fragile spores when expanding or killed by weak attacks /datum/reagent/blob/sporing_pods name = "Sporing Pods" id = "sporing_pods" - description = "will do low toxin damage and produce fragile spores when killed or on expanding." - shortdesc = "will do low toxin damage." + description = "will do very low toxin damage and produce fragile spores when killed or on expanding." + shortdesc = "will do very low toxin damage." + analyzerdescdamage = "Does very low toxin damage." + analyzerdesceffect = "Produces spores when expanding and when killed." color = "#E88D5D" complementary_color = "#5DB8E8" message_living = ", and you feel sick" @@ -67,12 +72,14 @@ id = "replicating_foam" description = "will do medium brute damage and replicate when damaged, but takes increased brute damage." shortdesc = "will do medium brute damage." + analyzerdescdamage = "Does medium brute damage." + analyzerdesceffect = "Expands when attacked, will occasionally expand again when expanding, and is fragile to brute damage." color = "#7B5A57" complementary_color = "#57787B" /datum/reagent/blob/replicating_foam/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() - M.apply_damage(0.6*reac_volume, BRUTE) + M.apply_damage(0.5*reac_volume, BRUTE) /datum/reagent/blob/replicating_foam/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) var/effectivedamage = damage @@ -96,6 +103,8 @@ id = "shifting_fragments" description = "will do medium brute damage and shift away from damage." shortdesc = "will do medium brute damage." + analyzerdescdamage = "Does medium brute damage." + analyzerdesceffect = "When attacked, may shift away from the attacker." color = "#C8963C" complementary_color = "#3C6EC8" @@ -121,12 +130,14 @@ B.forceMove(T) //swap the blobs return ..() -//does low burn and a lot of stamina damage, immune to tesla bolts +//does low burn and a lot of stamina damage, immune to tesla bolts, weak to EMP /datum/reagent/blob/energized_fibers name = "Energized Fibers" id = "energized_fibers" - description = "will do low burn and high stamina damage and conduct electricity." + description = "will do low burn and high stamina damage and conduct electricity, but is weak to EMPs." shortdesc = "will do low burn and high stamina damage." + analyzerdescdamage = "Does low burn damage and massively drains stamina." + analyzerdesceffect = "Is immune to electricity and will easily conduct it, but is weak to EMPs." color = "#EFD65A" complementary_color = "#5A73EF" blobbernaut_message = "shocks" @@ -134,19 +145,25 @@ /datum/reagent/blob/energized_fibers/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() - M.apply_damage(0.4*reac_volume, BURN) + M.apply_damage(0.6*reac_volume, BURN) if(M) - M.adjustStaminaLoss(0.8*reac_volume) + M.adjustStaminaLoss(0.6*reac_volume) /datum/reagent/blob/energized_fibers/tesla_reaction(obj/effect/blob/B, power) return 0 +/datum/reagent/blob/energized_fibers/emp_reaction(obj/effect/blob/B, severity) + var/damage = rand(30, 50) - severity * rand(10, 15) + B.take_damage(damage, BURN) + //sets you on fire, does burn damage, weak to water /datum/reagent/blob/boiling_oil name = "Boiling Oil" id = "boiling_oil" description = "will do medium burn damage and set targets on fire, but is weak to water." shortdesc = "will do medium burn damage and set targets on fire." + analyzerdescdamage = "Does medium burn damage and sets targets on fire." + analyzerdesceffect = "Takes damage from water and other extinguishing liquids." color = "#B68D00" complementary_color = "#0029B6" blobbernaut_message = "splashes" @@ -155,10 +172,10 @@ /datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() - M.adjust_fire_stacks(round(reac_volume/12)) + M.adjust_fire_stacks(round(reac_volume/10)) M.IgniteMob() if(M) - M.apply_damage(0.5*reac_volume, BURN) + M.apply_damage(0.6*reac_volume, BURN) if(iscarbon(M)) M.emote("scream") @@ -169,8 +186,10 @@ /datum/reagent/blob/flammable_goo name = "Flammable Goo" id = "flammable_goo" - description = "will do low burn damage, medium toxin damage, and ignite when burned." - shortdesc = "will do low burn damage and medium toxin damage." + description = "will do medium burn and toxin damage, make targets flammable, and ignite when burned." + shortdesc = "will do medium burn and toxin damage, and make targets flammable." + analyzerdescdamage = "Does medium burn damage, medium toxin damage, and makes targets flammable." + analyzerdesceffect = "Releases bursts of flame when attacked with burn damage, but takes additional burn damage." color = "#BE5532" complementary_color = "#329BBE" blobbernaut_message = "splashes" @@ -179,15 +198,16 @@ /datum/reagent/blob/flammable_goo/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() - M.adjust_fire_stacks(round(reac_volume/10)) //apply, but don't ignite + M.adjust_fire_stacks(round(reac_volume/8)) //apply, but don't ignite M.apply_damage(0.4*reac_volume, TOX) if(M) - M.apply_damage(0.2*reac_volume, BURN) + M.apply_damage(0.4*reac_volume, BURN) /datum/reagent/blob/flammable_goo/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) if(cause && damage_type == BURN) - for(var/turf/T in range(1, B)) - if(!(locate(/obj/effect/blob) in T) && prob(80)) + for(var/turf/open/T in range(1, B)) + var/obj/effect/blob/C = locate() in T + if(!(C && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) && prob(80)) PoolOrNew(/obj/effect/hotspot, T) return damage * 1.5 return ..() @@ -197,6 +217,7 @@ name = "Regenerative Materia" id = "regenerative_materia" description = "will do low toxin damage and cause targets to believe they are fully healed." + analyzerdescdamage = "Does low toxin damage and injects a toxin that causes the target to believe they are fully healed." color = "#C8A5DC" complementary_color = "#B9DCA5" message_living = ", and you feel alive" @@ -225,6 +246,7 @@ name = "Hallucinogenic Nectar" id = "hallucinogenic_nectar" description = "will do low toxin damage, vivid hallucinations, and inject targets with toxins." + analyzerdescdamage = "Does low toxin damage and injects a toxin that causes vivid hallucinations and blurried vision." color = "#CD7794" complementary_color = "#77CDB0" blobbernaut_message = "splashes" @@ -233,8 +255,8 @@ /datum/reagent/blob/hallucinogenic_nectar/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() - M.hallucination += 0.8*reac_volume - M.adjust_drugginess(0.8*reac_volume) + M.hallucination += reac_volume + M.adjust_drugginess(reac_volume) if(M.reagents) M.reagents.add_reagent("spore", 0.2*reac_volume) @@ -244,7 +266,8 @@ /datum/reagent/blob/zombifying_feelers name = "Zombifying Feelers" id = "zombifying_feelers" - description = "will cause medium toxin damage and turn sleeping targets into blob zombies." + description = "will do low toxin damage and turn sleeping targets into blob zombies." + analyzerdescdamage = "Does low toxin damage and kills unconscious humans, turning them into blob zombies." color = "#828264" complementary_color = "#646482" message_living = ", and you feel tired" @@ -259,13 +282,14 @@ O.blob_mobs.Add(BS) BS.Zombify(M) if(M) - M.apply_damage(0.6*reac_volume, TOX) + M.apply_damage(0.4*reac_volume, TOX) //toxin, stamina, and some bonus spore toxin /datum/reagent/blob/envenomed_filaments name = "Envenomed Filaments" id = "envenomed_filaments" - description = "will cause medium toxin and stamina damage, and inject targets with toxins." + description = "will do medium toxin and stamina damage, and inject targets with toxins." + analyzerdescdamage = "Does medium toxin damage, drains stamina, and injects a weak toxin." color = "#9ACD32" complementary_color = "#6532CD" message_living = ", and you feel sick and nauseated" @@ -283,6 +307,7 @@ name = "Poisonous Strands" id = "poisonous_strands" description = "will inject targets with poison." + analyzerdescdamage = "Injects a highly lethal poison that will gradually liquify the target's internal organs." color = "#7D6EB4" complementary_color = "#A5B46E" blobbernaut_message = "injects" @@ -304,6 +329,7 @@ name = "Cyclonic Grid" id = "cyclonic_grid" description = "will cause high oxygen damage and randomly throw targets to or from it." + analyzerdescdamage = "Does high oxygen damage and randomly throws targets at or away from it." color = "#9BCD9B" complementary_color = "#CD9BCD" message = "The blob blasts you with a gust of air" @@ -320,6 +346,7 @@ name = "Lexorin Jelly" id = "lexorin_jelly" description = "will cause low brute and high oxygen damage, and cause targets to be unable to breathe." + analyzerdescdamage = "Does low brute damage, high oxygen damage, and prevents targets from breathing." color = "#00E5B1" complementary_color = "#E50034" message_living = ", and your lungs feel heavy and weak" @@ -337,6 +364,8 @@ id = "explosive_lattice" description = "will do brute damage in an area around targets and is resistant to explosions." shortdesc = "will do brute damage in an area around targets." + analyzerdescdamage = "Does medium brute damage and causes damage to everyone near its targets." + analyzerdesceffect = "Is highly resistant to explosions." color = "#8B2500" complementary_color = "#00668B" blobbernaut_message = "blasts" @@ -370,6 +399,8 @@ id = "reactive_gelatin" description = "will do random brute damage and react to brute damage." shortdesc = "will do random brute damage." + analyzerdescdamage = "Does random brute damage." + analyzerdesceffect = "When attacked with brute damage, will lash out, attacking everything near it." color = "#FFA500" complementary_color = "#005AFF" blobbernaut_message = "pummels" @@ -377,7 +408,7 @@ /datum/reagent/blob/reactive_gelatin/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() - var/damage = rand(0, 30)/25 + var/damage = rand(5, 35)/25 M.apply_damage(damage*reac_volume, BRUTE) /datum/reagent/blob/reactive_gelatin/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) @@ -393,6 +424,7 @@ name = "Cryogenic Liquid" id = "cryogenic_liquid" description = "will do low burn and stamina damage, and cause targets to freeze." + analyzerdescdamage = "Does low burn damage, drains stamina, and injects targets with a freezing liquid." color = "#8BA6E9" complementary_color = "#E9CE8B" blobbernaut_message = "splashes" @@ -402,11 +434,11 @@ /datum/reagent/blob/cryogenic_liquid/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() if(M.reagents) - M.reagents.add_reagent("frostoil", 0.4*reac_volume) - M.reagents.add_reagent("ice", 0.4*reac_volume) + M.reagents.add_reagent("frostoil", 0.3*reac_volume) + M.reagents.add_reagent("ice", 0.3*reac_volume) M.apply_damage(0.4*reac_volume, BURN) if(M) - M.adjustStaminaLoss(0.4*reac_volume) + M.adjustStaminaLoss(0.3*reac_volume) //does burn damage and EMPs, slightly fragile /datum/reagent/blob/electromagnetic_web @@ -414,6 +446,8 @@ id = "electromagnetic_web" description = "will do low burn damage and EMP targets, but is very fragile." shortdesc = "will do low burn damage and EMP targets." + analyzerdescdamage = "Does low burn damage and EMPs targets." + analyzerdesceffect = "Is fragile to all types of damage, but takes massive damage from brute. In addition, releases a small EMP when killed." color = "#83ECEC" complementary_color = "#EC8383" blobbernaut_message = "lashes" @@ -448,6 +482,8 @@ id = "synchronous_mesh" description = "will do brute damage for each nearby blob and spread damage between nearby blobs." shortdesc = "will do brute damage for each nearby blob." + analyzerdescdamage = "Does brute damage, increasing for each blob near the target." + analyzerdesceffect = "When attacked, spreads damage between all blobs near the attacked blob." color = "#65ADA2" complementary_color = "#AD6570" blobbernaut_message = "synchronously strikes" @@ -475,18 +511,20 @@ else return damage * 1.25 -//does brute damage through armor(but not though bio resistance) +//does brute damage through armor and bio resistance /datum/reagent/blob/penetrating_spines name = "Penetrating Spines" id = "penetrating_spines" - description = "will do medium brute damage through armor." + description = "will do medium brute damage through armor and bio resistance." + analyzerdescdamage = "Does medium brute damage, ignoring armor and bio resistance." color = "#6E4664" complementary_color = "#466E50" blobbernaut_message = "stabs" message = "The blob stabs you" /datum/reagent/blob/penetrating_spines/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() + if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob)) + return 0 //the dead, and blob mobs, don't cause reactions M.adjustBruteLoss(0.6*reac_volume) /datum/reagent/blob/adaptive_nexuses @@ -494,6 +532,7 @@ id = "adaptive_nexuses" description = "will do medium brute damage and kill unconscious targets, giving you bonus resources." shortdesc = "will do medium brute damage and kill unconscious targets, giving your overmind bonus resources." + analyzerdescdamage = "Does medium brute damage and kills unconscious humans, reaping resources from them." color = "#4A64C0" complementary_color = "#823ABB" @@ -506,7 +545,7 @@ O << "Gained [points] resources from the death of [M]." M.death() if(M) - M.apply_damage(0.6*reac_volume, BRUTE) + M.apply_damage(0.5*reac_volume, BRUTE) //does low brute damage, oxygen damage, and stamina damage and wets tiles when damaged /datum/reagent/blob/pressurized_slime @@ -514,6 +553,8 @@ id = "pressurized_slime" description = "will do low brute, oxygen, and stamina damage, and wet tiles when damaged or killed." shortdesc = "will do low brute, oxygen, and stamina damage, and wet tiles under targets." + analyzerdescdamage = "Does low brute damage, low oxygen damage, drains stamina, and wets tiles under targets, extinguishing them." + analyzerdesceffect = "When attacked or killed, wets nearby tiles, extinguishing anything on them." color = "#AAAABB" complementary_color = "#BBBBAA" blobbernaut_message = "emits slime at" @@ -525,30 +566,39 @@ var/turf/open/T = get_turf(M) if(istype(T) && prob(reac_volume)) T.MakeSlippery(TURF_WET_WATER) - M.apply_damage(0.2*reac_volume, BRUTE) + M.adjust_fire_stacks(-(reac_volume / 10)) + M.ExtinguishMob() + M.apply_damage(0.1*reac_volume, BRUTE) if(M) - M.apply_damage(0.4*reac_volume, OXY) + M.apply_damage(0.3*reac_volume, OXY) if(M) - M.adjustStaminaLoss(0.4*reac_volume) + M.adjustStaminaLoss(0.3*reac_volume) /datum/reagent/blob/pressurized_slime/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) - for(var/turf/open/T in range(1, B)) - if(prob(damage)) - T.MakeSlippery(TURF_WET_WATER) + extinguisharea(B, damage) return ..() /datum/reagent/blob/pressurized_slime/death_reaction(obj/effect/blob/B, cause) if(!isnull(cause)) B.visible_message("The blob ruptures, spraying the area with liquid!") + extinguisharea(B, 50) + +/datum/reagent/blob/pressurized_slime/proc/extinguisharea(obj/effect/blob/B, probchance) for(var/turf/open/T in range(1, B)) - if(prob(50)) + if(prob(probchance)) T.MakeSlippery(TURF_WET_WATER) + for(var/obj/O in T) + O.extinguish() + for(var/mob/living/L in T) + L.adjust_fire_stacks(-2.5) + L.ExtinguishMob() //does brute damage and throws or pulls nearby objects at the target /datum/reagent/blob/dark_matter name = "Dark Matter" id = "dark_matter" description = "will do medium brute damage and pull nearby objects and enemies at the target." + analyzerdescdamage = "Does medium brute damage and pulls nearby objects and creatures at the target." color = "#61407E" complementary_color = "#5D7E40" message = "You feel a thrum as the blob strikes you, and everything flies at you" @@ -556,13 +606,14 @@ /datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() reagent_vortex(M, 0, reac_volume) - M.apply_damage(0.4*reac_volume, BRUTE) + M.apply_damage(0.3*reac_volume, BRUTE) //does brute damage and throws or pushes nearby objects away from the target /datum/reagent/blob/b_sorium name = "Sorium" id = "b_sorium" description = "will do medium brute damage and throw nearby objects and enemies away from the target." + analyzerdescdamage = "Does medium brute damage and pushes nearby objects and creatures away from the target." color = "#808000" complementary_color = "#000080" message = "The blob slams into you and sends you flying" @@ -570,7 +621,7 @@ /datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) reac_volume = ..() reagent_vortex(M, 1, reac_volume) - M.apply_damage(0.4*reac_volume, BRUTE) + M.apply_damage(0.3*reac_volume, BRUTE) /datum/reagent/blob/proc/reagent_vortex(mob/living/M, setting_type, reac_volume) if(M && reac_volume) From 0d0319c117e01015adcfc1c5c78a70421032ca1d Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 27 Apr 2016 15:24:51 +0000 Subject: [PATCH 205/228] Automatic changelog generation for PR #17128 --- html/changelogs/AutoChangeLog-pr-17128.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17128.yml diff --git a/html/changelogs/AutoChangeLog-pr-17128.yml b/html/changelogs/AutoChangeLog-pr-17128.yml new file mode 100644 index 00000000000..2db618cf7d8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17128.yml @@ -0,0 +1,22 @@ +author: Joan +delete-after: True +changes: + - rscadd: "Attacking a blob with an analyzer will tell you what its chemical does, its health, and a small fact about the blob analyzed." + - rscdel: "NERFS:" + - tweak: "Zombifying Feelers does less toxin damage." + - tweak: "Adaptive Nexuses does slightly less brute damage." + - tweak: "Replicating Foam does slightly less brute damage." + - tweak: "Blob Sorium does slightly less brute damage." + - tweak: "Blob Dark Matter does slightly less brute damage." + - tweak: "Cyrogenic Liquid injects slightly less frost oil and ice and does slightly less stamina damage." + - tweak: "Pressurized Slime does less brute, oxygen, and stamina damage, and extinguishes objects and people on turfs it wets." + - rscdel: "Blob core strong blobs no longer give points when removed." + - wip: "PROBABLY BUFFS:" + - tweak: "Flammable Goo now does slightly more burn damage and applies more firestacks, but applies fire to blob tiles that don't share its chemical." + - tweak: "Energized Fibers does slightly more burn damage, slightly less stamina damage, and now takes damage from EMPs." + - rscadd: "BUFFS:" + - tweak: "Boiling Oil does slightly more burn damage and applies more firestacks." + - tweak: "Reactive Gelatin does slightly more damage on average." + - tweak: "Penetrating Spines now also ignores bio resistance in addition to armor." + - tweak: "Hallucinogenic Nectar causes more hallucinations." + - tweak: "Normal strong blobs now refund 4 points when removed, from 2." From c396cd5be53d9ae366eaf9c387a5b565956bd2c8 Mon Sep 17 00:00:00 2001 From: Razharas Date: Wed, 27 Apr 2016 18:29:56 +0300 Subject: [PATCH 206/228] Fixes falsewalls being unsmashable (#17135) * Fixes falsewalls being unsmashable --- code/game/objects/structures/false_walls.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 09fbd8a08d4..fb766921ac3 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -48,6 +48,14 @@ update_icon() opening = 0 +/obj/structure/falsewall/attack_animal(mob/living/simple_animal/user) + if(user.environment_smash) + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) + visible_message("[user] smashes [src] apart!") + qdel(src) + /obj/structure/falsewall/proc/do_the_flick() if(density) smooth = SMOOTH_FALSE From 88b55ced87e4757b11c957626dd80bbf11c610e3 Mon Sep 17 00:00:00 2001 From: Razharas Date: Wed, 27 Apr 2016 18:31:54 +0300 Subject: [PATCH 207/228] Fixes chameleon projector explosion protection (#17138) Fixes chameleon projector explosion protection --- code/game/objects/items/devices/chameleonproj.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 0bb1e20fe62..6e89ab267a0 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -105,7 +105,8 @@ /obj/effect/dummy/chameleon/attack_alien() master.disrupt() -/obj/effect/dummy/chameleon/ex_act() //ok now THATS some serious protection against explosions right here +/obj/effect/dummy/chameleon/ex_act(S, T) + contents_explosion(S, T) master.disrupt() /obj/effect/dummy/chameleon/bullet_act() From 61c037389e8ac19ba74370a451edba40e36bd75c Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 27 Apr 2016 17:45:56 +0200 Subject: [PATCH 208/228] You can attack with ABSTRACT items again. --- code/_onclick/item_attack.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 1dfcd96835a..374b077d67a 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -24,7 +24,7 @@ /obj/item/proc/attack(mob/living/M, mob/living/user, def_zone) - if(flags & (NOBLUDGEON|ABSTRACT)) + if(flags & NOBLUDGEON) return if(!force) playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1) @@ -42,7 +42,7 @@ //the equivalent of the standard version of attack() but for object targets. /obj/item/proc/attack_obj(obj/O, mob/living/user) - if(flags & (NOBLUDGEON|ABSTRACT)) + if(flags & NOBLUDGEON) return user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(O) From 6af0e2a0dc2ed4019104e5b744ff493bd0f79e49 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Wed, 27 Apr 2016 17:35:34 +0100 Subject: [PATCH 209/228] Cargo shuttle now arrives in 2 minutes --- code/modules/shuttle/supply.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 306bf6aebc1..f0be26c05ef 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -1,7 +1,7 @@ /obj/docking_port/mobile/supply name = "supply shuttle" id = "supply" - callTime = 10 + callTime = 1200 dir = 8 travelDir = 90 @@ -153,4 +153,4 @@ for(var/obj/thing in O) sold_atoms += recursive_sell(thing, level) qdel(O) - return sold_atoms \ No newline at end of file + return sold_atoms From b2a04afd393a6066e1c89508555dccb8686b9ce0 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 27 Apr 2016 19:28:13 +0200 Subject: [PATCH 210/228] Fixes the air subsystem initialization. --- code/controllers/subsystem/air.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 0ba721fa0df..6efb4ca6e40 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -271,7 +271,7 @@ var/datum/subsystem/air/SSair var/turf/T = thing active_turfs -= T if (T.blocks_air) - return + continue T.Initalize_Atmos(times_fired) From 4a622c07126a25e9ba1a45876f3092c8d4095283 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 27 Apr 2016 18:24:56 +0000 Subject: [PATCH 211/228] Automatic changelog generation for PR #17140 --- html/changelogs/AutoChangeLog-pr-17140.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17140.yml diff --git a/html/changelogs/AutoChangeLog-pr-17140.yml b/html/changelogs/AutoChangeLog-pr-17140.yml new file mode 100644 index 00000000000..0095d02ac4c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17140.yml @@ -0,0 +1,4 @@ +author: Joan +delete-after: True +changes: + - rscadd: "Charger holoparasites now play a sound when hitting a target, as well as shaking the target's camera." From efa60f8587eaaec8e3a41d25237ff1b355da49f9 Mon Sep 17 00:00:00 2001 From: Razharas Date: Wed, 27 Apr 2016 21:33:36 +0300 Subject: [PATCH 212/228] Fixes BoHs Fixes BoHs fix https://github.com/tgstation/-tg-station/issues/17173 --- code/game/objects/items/weapons/storage/backpack.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 5bae7ddf7ee..0110a6ac2cf 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -71,7 +71,7 @@ return 0 /obj/item/weapon/storage/backpack/holding/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user) - if((istype(W, /obj/item/weapon/storage/backpack/holding) || count_by_type(GetAllContents(W), /obj/item/weapon/storage/backpack/holding)) && !W.crit_fail) + if((istype(W, /obj/item/weapon/storage/backpack/holding) || count_by_type(W.GetAllContents(), /obj/item/weapon/storage/backpack/holding)) && !W.crit_fail) var/safety = alert(user, "Doing this will have extremely dire consequences for the station and its crew. Be sure you know what you're doing.", "Put in [name]?", "Proceed", "Abort") if(safety == "Abort" || !in_range(src, user) || !src || !W || user.incapacitated()) return From 41aec098b171185905461e31b32cb5784d698e51 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Wed, 27 Apr 2016 16:13:09 -0400 Subject: [PATCH 213/228] Adds plant DNA machine to Dreamstation --- _maps/map_files/DreamStation/dreamstation04.dmm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index 07aafa41947..2d22f7cbc31 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -33696,10 +33696,7 @@ /turf/open/floor/plasteel/hydrofloor, /area/hydroponics) "bog" = ( -/obj/structure/table, -/obj/item/weapon/reagent_containers/spray/plantbgone, -/obj/item/weapon/reagent_containers/spray/plantbgone, -/obj/item/weapon/reagent_containers/spray/plantbgone, +/obj/machinery/plantgenes, /turf/open/floor/plasteel/hydrofloor, /area/hydroponics) "boh" = ( @@ -77759,6 +77756,9 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/item/weapon/reagent_containers/spray/plantbgone, +/obj/item/weapon/reagent_containers/spray/plantbgone, +/obj/item/weapon/reagent_containers/spray/plantbgone, /turf/open/floor/plasteel/hydrofloor, /area/hydroponics) "cRD" = ( From 9b251fdf8d54a83339ad8ea0c76d8d6a9b1d5c38 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Wed, 27 Apr 2016 21:09:06 +0000 Subject: [PATCH 214/228] Automatic changelog generation for PR #17046 --- html/changelogs/AutoChangeLog-pr-17046.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17046.yml diff --git a/html/changelogs/AutoChangeLog-pr-17046.yml b/html/changelogs/AutoChangeLog-pr-17046.yml new file mode 100644 index 00000000000..9236d1cc79d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17046.yml @@ -0,0 +1,4 @@ +author: PKPenguin321 +delete-after: True +changes: + - rscadd: "The warden's locker now contains krav maga gloves." From 442c952a6c86bb03c51f145c984ce456b5a91eea Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 28 Apr 2016 00:23:23 +0000 Subject: [PATCH 215/228] Automatic changelog generation for PR #17108 --- html/changelogs/AutoChangeLog-pr-17108.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17108.yml diff --git a/html/changelogs/AutoChangeLog-pr-17108.yml b/html/changelogs/AutoChangeLog-pr-17108.yml new file mode 100644 index 00000000000..05fe6b2d3d5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17108.yml @@ -0,0 +1,6 @@ +author: Bawhoppen +delete-after: True +changes: + - tweak: "Sandbags are no longer tablecrafted. Now you just put in sand (or ash) by hand to make them." + - rscadd: "Miners and Engis now get boxes of empty sandbags in their lockers. Miners also get a few premade aswell." + - rscadd: "You can now break sandstone down into normal sand." From 6bf0eae164c9341e52833fa7bb547f959bbde658 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Thu, 28 Apr 2016 01:09:14 +0000 Subject: [PATCH 216/228] Automatic changelog compile --- html/changelog.html | 39 ++++++++++++++++++++++ html/changelogs/.all_changelog.yml | 38 +++++++++++++++++++++ html/changelogs/AutoChangeLog-pr-17046.yml | 4 --- html/changelogs/AutoChangeLog-pr-17108.yml | 6 ---- html/changelogs/AutoChangeLog-pr-17128.yml | 22 ------------ html/changelogs/AutoChangeLog-pr-17140.yml | 4 --- html/changelogs/AutoChangeLog-pr-17147.yml | 4 --- 7 files changed, 77 insertions(+), 40 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-17046.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17108.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17128.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17140.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17147.yml diff --git a/html/changelog.html b/html/changelog.html index fa953c8023b..93b26f694c5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,45 @@ -->
      +

      28 April 2016

      +

      Bawhoppen updated:

      +
        +
      • Sandbags are no longer tablecrafted. Now you just put in sand (or ash) by hand to make them.
      • +
      • Miners and Engis now get boxes of empty sandbags in their lockers. Miners also get a few premade aswell.
      • +
      • You can now break sandstone down into normal sand.
      • +
      +

      Joan updated:

      +
        +
      • Attacking a blob with an analyzer will tell you what its chemical does, its health, and a small fact about the blob analyzed.
      • +
      • NERFS:
      • +
      • Zombifying Feelers does less toxin damage.
      • +
      • Adaptive Nexuses does slightly less brute damage.
      • +
      • Replicating Foam does slightly less brute damage.
      • +
      • Blob Sorium does slightly less brute damage.
      • +
      • Blob Dark Matter does slightly less brute damage.
      • +
      • Cyrogenic Liquid injects slightly less frost oil and ice and does slightly less stamina damage.
      • +
      • Pressurized Slime does less brute, oxygen, and stamina damage, and extinguishes objects and people on turfs it wets.
      • +
      • Blob core strong blobs no longer give points when removed.
      • +
      • PROBABLY BUFFS:
      • +
      • Flammable Goo now does slightly more burn damage and applies more firestacks, but applies fire to blob tiles that don't share its chemical.
      • +
      • Energized Fibers does slightly more burn damage, slightly less stamina damage, and now takes damage from EMPs.
      • +
      • BUFFS:
      • +
      • Boiling Oil does slightly more burn damage and applies more firestacks.
      • +
      • Reactive Gelatin does slightly more damage on average.
      • +
      • Penetrating Spines now also ignores bio resistance in addition to armor.
      • +
      • Hallucinogenic Nectar causes more hallucinations.
      • +
      • Normal strong blobs now refund 4 points when removed, from 2.
      • +
      • Charger holoparasites now play a sound when hitting a target, as well as shaking the target's camera.
      • +
      +

      PKPenguin321 updated:

      +
        +
      • The warden's locker now contains krav maga gloves.
      • +
      +

      TechnoAlchemisto updated:

      +
        +
      • You can now craft skull helmets from bones.
      • +
      +

      27 April 2016

      TechnoAlchemisto updated: