diff --git a/README.md b/README.md index dade37afd8e..5a182f9ddfd 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![forthebadge](http://forthebadge.com/images/badges/contains-technical-debt.svg)](http://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/fuck-it-ship-it.svg)](http://forthebadge.com) -[Website](http://www.nanotrasen.se/) - [Code](https://github.com/ParadiseSS13/Paradise) - [Discord](https://discordapp.com/invite/gXZMc?utm_source=Discord%20Widget&utm_medium=Connect) +[Website](https://nanotrasen.se/) - [Code](https://github.com/ParadiseSS13/Paradise) - [Discord](https://discordapp.com/invite/gXZMc?utm_source=Discord%20Widget&utm_medium=Connect) --- diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index bd90e0be9f0..8cf94d61835 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -266,7 +266,7 @@ CREATE TABLE `player` ( `UI_style` varchar(10) DEFAULT 'Midnight', `UI_style_color` varchar(7) DEFAULT '#ffffff', `UI_style_alpha` smallint(4) DEFAULT '255', - `be_role` mediumtext NOT NULL, + `be_role` mediumtext, `default_slot` smallint(4) DEFAULT '1', `toggles` mediumint(8) DEFAULT '383', `sound` mediumint(8) DEFAULT '31', diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index 94010ad1b74..d1b62ae3767 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -265,7 +265,7 @@ CREATE TABLE `SS13_player` ( `UI_style` varchar(10) DEFAULT 'Midnight', `UI_style_color` varchar(7) DEFAULT '#ffffff', `UI_style_alpha` smallint(4) DEFAULT '255', - `be_role` mediumtext NOT NULL, + `be_role` mediumtext, `default_slot` smallint(4) DEFAULT '1', `toggles` mediumint(8) DEFAULT '383', `sound` mediumint(8) DEFAULT '31', diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index e6e04b560fb..872d4aa1ea9 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -990,6 +990,7 @@ "atb" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/security/range) "atc" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore) "atd" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig) +"ate" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) "atf" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/brig) "atg" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/brig) "ath" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 8; icon_state = "darkredcorners"},/area/security/brig) @@ -1473,7 +1474,7 @@ "aCr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/prison/cell_block/B) "aCs" = (/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 6"; name = "Cell 6"; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) "aCt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10; initialize_directions = 10; level = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkredcorners"},/area/security/prison/cell_block/B) -"aCu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/prison/cell_block/B) +"aCu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Paramedic"; req_access_txt = "66"},/turf/simulated/floor/plasteel,/area/medical/paramedic) "aCv" = (/obj/structure/stool/bed/chair,/obj/item/device/radio/intercom/department/security{pixel_x = -28},/obj/machinery/camera{c_tag = "Brig Interrogation Observation"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/interrogation) "aCw" = (/obj/structure/stool/bed/chair,/obj/machinery/light_switch{pixel_x = 25},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/interrogation) "aCx" = (/obj/structure/stool/bed/chair,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/interrogation) @@ -1719,6 +1720,7 @@ "aHd" = (/obj/structure/stool/bed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aHe" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway West"; dir = 4; network = list("SS13")},/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) "aHf" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore) +"aHg" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "aHh" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/crew_quarters/mrchangs) "aHi" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/weapon/twohanded/required/kirbyplants,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5; level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) "aHj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "barber"},/area/civilian/barber) @@ -2474,7 +2476,7 @@ "aVF" = (/obj/machinery/camera{c_tag = "Bar Storage"; network = list("SS13")},/obj/structure/table/woodentable,/obj/machinery/reagentgrinder,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aVG" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aVH" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/fancy/candle_box/eternal,/obj/item/weapon/storage/fancy/candle_box/eternal,/obj/item/weapon/storage/fancy/candle_box/eternal,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"aVI" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) +"aVI" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "aVJ" = (/obj/effect/decal/cleanable/blood/oil/streak,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aVK" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "aVL" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/fitness) @@ -2608,7 +2610,6 @@ "aYj" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/bridge) "aYk" = (/obj/machinery/door/window/eastright{name = "Coroner Office"; req_access_txt = "5"},/turf/simulated/floor/plasteel,/area/medical/morgue) "aYl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) -"aYm" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2) "aYn" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aYo" = (/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes/stokcubes,/obj/item/weapon/storage/box/monkeycubes/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes/wolpincubes,/obj/item/weapon/storage/box/monkeycubes/farwacubes,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHEAST)"; icon_state = "whitepurple"; dir = 6},/area/medical/genetics) "aYp" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/computer/card/minor/rd,/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/crew_quarters/hor) @@ -5703,7 +5704,6 @@ "chi" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint) "chj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "paramedic"; name = "Paramedic Garage"},/turf/simulated/floor/plasteel,/area/medical/paramedic) "chk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/paramedic) -"chl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/diamond{name = "Paramedic"; req_access_txt = "66"},/turf/simulated/floor/plasteel,/area/medical/paramedic) "chm" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "acutesep"; name = "Acute Separation Privacy Shutters"; opacity = 0},/turf/simulated/floor/plasteel{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/sleeper) "chn" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "acutesep"; name = "Acute Separation Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/sleeper) "cho" = (/obj/structure/sign/greencross,/turf/simulated/wall,/area/medical/sleeper) @@ -9067,7 +9067,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxiazeazgazhaxiaaaaxkazfazjaziaxkalwaabarXarXarXarXarXaaaatHaaaarXarXarXarXarXaabalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauvaxoawzaxmatIatMatNazVauyawBaudaudaudaznazXazWazsazrawKazYazZawWaAcaAaawWaAdaAqaxLaAraBHaAsaxLazyaAtaxpaAuaAvaxpaAwavnaxvaAyaACaAAaAEaADaAHaAGawlaAIaAKaAJawlaydavqavqaxhaxhaxhdmoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarUazUaAbaraaraaraazbaraaraaraaraazbaraaraaraaraaALaaaaaaamWaaaaAfaAfaAgaAgaAgaAgaAgaAgaAfaAfaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxiaAhazgazhaxiaaaaxkaAiaykaykaxkalwaaaasMasLasLasLasLasNasPasOasQasQasQasQasRaaaalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatIaymawzawzayhauyayoaAMauCaAmaAnaAlaAnaApaApaANaApaAoaElaAOaAPawKaxSaARawKaATaAVaAUaAWaxLaAZaAXaBbaBaawHaBiayeawHaBraBpaBsaBsaBsaBsaBsawVaBuaBtawlaBvaBRaBvawlaBwavqavqatGaupaurauqauqausaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaAYaBxaByaabaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaamWaAfaAfaBdaBcaBeaBgaBhaBfaBjaBeaAfaAfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxiaAhazgazhaxiaaaaxkaBkaykaBlaxkaabaBmatFatFatFatFatFaaaatHaaaatFatFatFatFatFaabalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatIazkazkazkatIatMaBAaBzaBBaAmaCaaAnaAnaBCaApaBDaBqaBoaElaBEaBFauZavcaBGauZaAdaxLaxLaBJaBIaBKaxLaxLazxavlaBLavmavlaBNaBMaBPaBOaBSaBQaBsaCcaCfaCeaZIaCgavqaSPavqaChavqavqavsavqavtavpavuavwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaabaBTaabaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaAfaAfaAfaAfaBUaBgaBVaBgaBVaBXaBgaBgaBgaBWaAfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxiazgazgazgaBYaaaaxkaBkaykaBlaxkalwaaaaaaaabaaaaabaaaaaaaBZaaaaaaaabaaaaabaaaaaaalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAeaAkaAkaAkaAjaaaaaaaaaaaaaBnaAnaAnaAnaCiaCkaCjaCdaCbaElavPaCmaClavTaCnaCoavdaxLaEBaCpaEBaCqaEBaxLaAzazAaCrawdaCsaCuaCtaBsaCvaCxaCwaBsaCzaCBaCAaCCaZIaZIaCgavqavqaybaycatGavqawkauqauqawmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaCLaabaabaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaAfaCNaCOaCPaCMaCRaCQaCSaBgaBgaCUaCVaBgaCWaAfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxiazgazgazgaBYaaaaxkaBkaykaBlaxkalwaaaaaaaabaaaaabaaaaaaaBZaaaaaaaabaaaaabaaaaaaalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAeaAkaAkaAkaAjaaaaaaaaaaaaaBnaAnaAnaAnaCiaCkaCjaCdaCbaElavPaCmaClavTaCnaCoavdaxLaEBaCpaEBaCqaEBaxLaAzazAaCrawdaCsateaCtaBsaCvaCxaCwaBsaCzaCBaCAaCCaZIaZIaCgavqavqaybaycatGavqawkauqauqawmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaCLaabaabaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaAfaCNaCOaCPaCMaCRaCQaCSaBgaBgaCUaCVaBgaCWaAfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxiaCTazgazgaCXaaaaxkaCYaykaykaCZalwalwalwaabaabaabaabaDbaDaaDbaabaabaabaabalwalwalwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBnaDdaDcaCEaCDaCGaCFaCHaDiaElauYaCIawWaCKaCJawWaDeaDfaEBaDgaFFaDhaEBaDkaDjaxpaDlaDmaxpaDoaDnaBsaDpaDraDqaBsaDsaDNaDNaDNaDNaDPaDPaDRaDRaDRaDRatGatGatGatGaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaaaaabaabaDSaDKaDSaabaabaaaaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaAfaDUaDTaDWaDVaDYaDXaBgaBgaBgaDZaEaaBgaEcaAfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxiaEbazgaEeaxiaaaaxkaEfaykaykaxkaabaaaaabaaaaaaaabaaaaDbaEgaEdaaaaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEiaEiaEiaEiaEiaEiaEiaAmaElaElaElaDtaElaElaElaDuaAmaAxaAxaAxaAxaAxaAxaEBaEBaDvaDgaFFaDhaDvaDvaDvaEpaEpaEpaEpaDxaDwaBsaDyaDAaDzaBsaDsaDNaELaEMaEKaDPaENaDBaEOaEQaDRaaaaaaaaaaaaaaaaaaaaaaaaaaaabpaaaaabaabaaaaabaabaabaabaabaaaaDSaERaDSaaaaabaaaaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaAfaETaESaCPaEUaEWaEVaEXaBgaEZaEYaFbaFaaAfaFdaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFeaFfaFcaFfaFgaaaaFiaFhaykaFkaFiaabaaaaabaaaaaaaabaDbaDbaFjaFmaDbaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEiaFlaFoaDCaDDaFvaFwaFsaDFaDEaDDaDGaFvaFvaDIaDHaFBaFAaFyaFyaFyaFyaFyaFyaFyaDJaDLaGraDMaEjaDOavqavqavqavqavqaBsaDQaEkaEhaEnaEmaBsaEoaDNaFTaFUaFPaDPaFVaEqaFWaFYaDPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaabaDSaDSaFZaDSaDSaabaaaaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaAfaGbaGaaCPaAfaCPaCPaGdaGcaAfaAfaAfaAfaAfaAfaabaabaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9114,7 +9114,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSdbKybKxbKpaQZaQZaQZbndaSfaSfbCfbKCbCfbKDbKsbKtbKEbCfblQbKvbKvbKwbKFbKwbKwbKwbKFbKwblQblQbxbbxbbxbbKGbxbbKzbKzbKzbKzbKzbKzbJfbKAbKBbKHbzFbKIbKKbKJbKMbKLbKObKNbKQbKPbKSbKRbKVbKUbKXbKXbLabKZbKTbLbbLfbKWbLgbKYbFCbLhbHDbLibHBbLkbFCaaabLcbLdbLebLnbLdbLdbLdbLdbLpbxvbLqbFObLrbLjbLsbLlbLmbLtbLobEobLvbLubLxbLwbLzbLybLBbLAbGabLDbEtaTHaTLaTKaTNaTMbHQaTObHQaSVbIbbHUbHQbIbbEubIebGqbLNbLEbLPbLSbLQbLIbLTbLKbLLbLMbLUbLObLVbEAbLXbLRbLYbEDbLZbMfbMabIpbLWbMgbEDbKubGGbMhbGHaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSdbMjbMibKpaSeaSebMbbMcaSebMdbCfbMebIBbMlbMkbMnbMmbCfaaaaabaabbMpbMobMobMobMobMobMraaaaaabKBbMtbMsbMubMqbKzbKzbKzbKzbKzbKzbMwbMvbMzbMybMDbMBbMxbDXbzJbzJbMFbMAbzJbzJbMJbMCbMLbMEbMMbMGbMGbMHbMGbMIbMNbMGbMKbKYbFCbMObFEbFEbFEbMPbFCaaabLcbLdbMRbMQbMVbMTbMWbMSbNbbMUbNcbFObNdbEobMXbMYbMZbNabNfbNebNjbNgbNlbNkbNhbNibNnbNmbNqbNpbNrbLFaTQaTPbEtaTRaTTaTSaTUaSVbNAaTVaTWbGvbEubNKbNzbNLbNBbNBbNMbNDbNEbNFbNGbNHbNIbNJbNObNNbEAbNQbLRbNRbEDbNSbNPbNTbIpbIpbNUbEDbIzbGGbNWbGHaaaaaaaaaaaaaabbNXbNZbNVbNZbNVbNZbOaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSdbKpbKpbObaSdaSdbjQaLdaSdaSdbCfbOdbIBbIBbIBbCfbCfbCfaaaaaaaaabOebOcbOcbOfbOcbOcbOeaaaaaabKBbOgbKzbOibOhbOhbOhbOhbOhbOkbOjbOhbOlbOnbOmbOpbOobOrbOqbzJbOtbBnbOvbOsbDXbOwbOubOxbMEbMEbMGbOAbOybOCbOBbODbMGbFBbKYbFCbOEbOHbOFbOObOMbFCaaabOGbLdbOPbOIbOJbOKbOLbOKbOSbONbOXbFObOYbEobOQbOQbORbPabOTbOUbOVbOWbPcbPbbOZbOZbPebPdbPhbPfbEtbNoaUOaTYbEtbEubPgbEubEuaUPbEubEubEubEubPrbPmbGqbPvbLEbLPbPxbNBbNEbPnbPobPobPpbIdbPqbPybPsbPtbIrbPubEDbPzbPwbIpbPHbPBbPJbEDbKubPAbGHbGHaaaaaaaaaaaaaabbPKbPCbPDbPEbPFbPGbPKaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIbPIbPIbPIbPNbPMbPIbPIbPIbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebOcbOcbOcbOcbOcbOebPTbKBbKBbPUbPObPPbPQbPQbPQbPObKzbJfbKAbKzbKzbKBbPZbPSbQcbQdbPVbQebPXbBnbBnbPYbDXbOwbOubQhbQfbQbbQibQkbOzbQlbQgbQnbMGbQobQjbHmbQpbQqbQmbQsbQrbHsbHtbQtbLdbQvbQubQwbOKbQxbOKbQybONbQzbFObQAbEobQDbQBbQGbQEbQHbQCbQJbQIbQFbQFbQMbQKbQFbQFbQObQNbQPbQLaVyaVxbQTbQSaWIaVIaYmaYlaWObQVbRebQXbRgbRfbGqbRabRbbRcbRjbRibIabRkbPobPobRlbRhbPqbRmbEAbRnbRnbRobEDbRpbRybRqbRzbIpbREbEDbKubRFbGHaaaaaaaaaaaaaaaaabbRrbRsbPDbPFbPDbRtbNVaabaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIbPIbPIbPIbPNbPMbPIbPIbPIbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebOcbOcbOcbOcbOcbOebPTbKBbKBbPUbPObPPbPQbPQbPQbPObKzbJfbKAbKzbKzbKBbPZbPSbQcbQdbPVbQebPXbBnbBnbPYbDXbOwbOubQhbQfbQbbQibQkbOzbQlbQgbQnbMGbQobQjbHmbQpbQqbQmbQsbQrbHsbHtbQtbLdbQvbQubQwbOKbQxbOKbQybONbQzbFObQAbEobQDbQBbQGbQEbQHbQCbQJbQIbQFbQFbQMbQKbQFbQFbQObQNbQPbQLaVyaVxbQTbQSaWIaHgaVIaYlaWObQVbRebQXbRgbRfbGqbRabRbbRcbRjbRibIabRkbPobPobRlbRhbPqbRmbEAbRnbRnbRobEDbRpbRybRqbRzbIpbREbEDbKubRFbGHaaaaaaaaaaaaaaaaabbRrbRsbPDbPFbPDbRtbNVaabaaaaaaaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbRubRvbRwbRxbRGbRHbRAbRGbRBbRCbRDbPIbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebOcbOcbOcbOcbOcbRJbRIbRKbRIbRSbRRbRTbRRbRRbRRbRRbRUbJfbKAbRLbxbbxbbRMbBnbzFbQdbRNbDXbRObRPbRPbRQbNYbRYbRXbRZbRVbRWbSbbSdbScbSabQgbSebMGbMKbKYbFCbSfbShbSgbSlbSkbFCaaabOGbSibSjbSibSibSibSibSibSmbSibSpbFObQAbEobSqbSnbSnbSobSrbOUbStbSsbSvbSubSxbSwbSybSvbSAbSzbSDbSBaWSaWRbSGbSGbSEbSHbSJbSIbSLbSKbSNbSMbSPbSObSRbSQbSQbSSbSUbSTbIabSWbIdbIdbSXbSVbPqbSYbTabSZbTfbTcbTbbTgbTdbTebTjbTebEDbEDbTkbPtbThbTibTibTibTibTibThbPKbPFbPDbPFbPFbPGbPKaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIbRAbRAbRAbTlbRGbTnbTnbRGbTobRAbRAbTpbWLbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebOcbOcbOcbOcbOcbTtbTrbTqbTrbTubKzbPPbPQbPQbPQbKzbKzbJfbKAbTsbTxbxbbTAbBnbTBbQdbTvbDXbTwbBnbBobBnbPWbOwbTybTzbRVbRWbTCbTEbTDbTKbTFbTLbTGbTHbTIbTJbTJbTNbTMbTPbFCbFCaaabOGbSibTQbTObTSbTRbTVbTTbTWbTUbTXbFObQAbNebTZbTYbUbbUabUcbOUbUebUdbUibUhbUfbUgbUkbUjbUmbUlbUobUnbUqbUpbUsbUrbUubUtbUybUvbUDbQVbUwbQXbUxbUGbGrbUzbUAbUBbUCbUCbIabUIbUEbUFbIabUJbPqbUHbIabUKbUMbULbUObUNbUQbUPbUSbURbUUbUTbUWbUVbUYbUXbUXbUZbVbbVabQabVcbNZbNVbVdbNVbNZbVjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIbVebVfbVgbVhbVibRGbVkbRAbVlbRAbRAbRAbRAbRAbTlbRGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOebVmbOcbOcbOcbVnbOebPTbKBbKBbVobKzbPPbKzbKzbKzbKzbKzbJfbKAbTsbVpbxbbVrbBnbVqbVsbBnbVwbzEbBnbBnbVtbDXbOwbTybTzbRVbRWbMGbVubVvbVybVxbVzbMHbVBbVAbVDbVCbHsbVEbVFbHsbHtbHtbVGbSibVIbVHbVKbVJbVLbVLbVNbVMbVObFObVPbEobOUbVQbOQbVSbVRbOUbUebVUbVTbVVbVXbVWbVYbVTbUebVZbWebWabWbbWabWcbWabWdbWdbWhbWfbWgbWgbWgbWmbWgbWgbWibWibWjbWkbWjbWjbIabIabIabIabIabWlbWnbLIbIabWobWrbWpbWqbWqbWvbWsbWtbWubWxbWwbWzbWybWBbWAbWAbWCbWEbWDbThbQabQabQabWFbThaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9124,7 +9124,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPIbPIbPIbPIbPIbPIbRGbTobRAcbzbRAcbxcbycbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbDcbBbOccbCbOccbEcbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbGaabaaaaaaaaaaaacamcbIcbHcbKcbJbYMcbNcbLcbMcbRbYMbOwbTycbOcbPcbQcbScbVcbTcbUcbWcbYcbXccacbZcccccbccfccdcceccgccjcchccicckccqcclccmbEnccnbFOccoccpccrbFOccscaAccvcctccuccwccxbUecczccyccBccAccDccCccFccEccHccGccIbWaccKbZuccJccMccLccOccNccPbXNccQbXQbXQbXQccRbWgcbdccTccSccVccUccXccWcdbcbfccYccZcdacbjcbjcdccbocddcdfcdecdhcdgcdjcdicdkbYjcdnbGHaaaaaaaaabThbThbThbThaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPLbPIcdlcdmcdpcdlcdobRGbRAbRAbRGbRAcdrcdqcdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdvcdtcducducducdtcdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacamcdycdxcdAcdzbYLcdBcdDcdCcdEbYMbOwcdGcdFbTybTycdHcdKcdIcdJcclcdOcdLcdOcdMcdNcdNcdQcdPcdRcdNcdNcdTcdNcdScdNcclccmbEncdVcdUcdXcdWcdZcdYbFOcaAcebcctceaccucedbUececceecegcefceicehcekcejbUecelcembWaceocencencercepceqcetcesbXNceucevbXQcexcewbWgcbdcezceyceBceAceDceCceGcbfceEccZceFceFcbjceHceJceIceLceKceNceMcePceOceSbYjcacbGHceQaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWObWGceRceRceRceRceRceTbRAbRAbRGbPIbPIbPIbPIbPIbPIbPRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceVceUceUceUceWaaaaaaaaaaaaaaaaaaaaaceXceZceYceZcfaaaaaaaaaacamcamcamcffcfbcdAcfcbYLcfdcbMcfecfgbYMbOwcfhcfjcficflcfkcfncfmcfpcfocfrcfqcfucfscftcftcfxcfvcfvcfvcfvcfvcfvcfwcfAcfycfzcfBcfDcfCcfFcfEcfHcfGcfIcaAcfJcctccucfKcedbUececceecfMcfLcfOcfNcfQcfPbUmcfRcfSbWabWacfUcfUbWacepbWdcfTcfVbWgcfXcfWcfZcfYcgabWgcbdcgccgbcgecgdcghcgfcggcbfcgiccZceFceFcbjcgjcgmcgkcglcgncgpcgocgrcgqcgvbYjcaccgscgtcgscgucgycgucgucguaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYubWGceRceRceRcgwcgxbRGbRAbRAbRGbRAbRAbRAcgzbRAcgAbRGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgFcgBcgCcgDcgFbYPbYPbYPcamcgHcgGcgJcgIcgLcgKcgNcgMcgOcgOcgPbYMcgRcgQcgTcgScgScgUcgXcgVcgScgWcgWcgYchbcgZcgWcgWchacclcclchechcchcchcchdchgchcchcchfchichhchhchjchhchlchkchhchnchmchpcaAchochqcecchschrchtchvchuchwchrbUecelchychxchAchzchCchBchFchDchEchGchLchHchIchJchKchNbWicbdcbdchMchQchOchPchOchRcbfchUchSchTchTcbjchVchXchWbYjbYjbYjbYjbYjbYjbYjbYjcaccgscifchYchZciaciacibcguaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcicciccicciccidcidcieciecieciecijaabaabaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYubWGceRceRceRcgwcgxbRGbRAbRAbRGbRAbRAbRAcgzbRAcgAbRGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgFcgBcgCcgDcgFbYPbYPbYPcamcgHcgGcgJcgIcgLcgKcgNcgMcgOcgOcgPbYMcgRcgQcgTcgScgScgUcgXcgVcgScgWcgWcgYchbcgZcgWcgWchacclcclchechcchcchcchdchgchcchcchfchichhchhchjchhaCuchkchhchnchmchpcaAchochqcecchschrchtchvchuchwchrbUecelchychxchAchzchCchBchFchDchEchGchLchHchIchJchKchNbWicbdcbdchMchQchOchPchOchRcbfchUchSchTchTcbjchVchXchWbYjbYjbYjbYjbYjbYjbYjbYjcaccgscifchYchZciaciacibcguaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcicciccicciccidcidcieciecieciecijaabaabaaaaaaaaaabpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaebPIcigceRceRcihciibRGbRAbRAcikbRAbRAbRAciobRAcilbRGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceYcimcincimceYbYPcipciqcamcitcfbcircisciyciubYMcivciwcixcizbYMcgQcgQciCcgSciAciBciEciDciHcgWciFciGciJciIciKcgWciMciLciNchcciPciOciSciQciRciTciVciUciXciWciZciYcjbcjacjdcjccjgcjecjfcjhcjjcjicjkceecjocjlcjmcjncjqcjpbUmcjrcjtcjscjuchCcjvcjvcjxcjwbWgcjycjAcjzcjCcjBcjEaYobWicjFcjHcjGcjIcjGcjGcjLcjJcjKcjPcjMcjNcjOcbjcjQcjRcbnbPtbGGcjTcjScjUcjUcjScjUcjYcgscjVcjWchZciackecjXcguaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciccjZckacjZcidciecieckbckcckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaebPIckdceRceRckfbRGbRAbRAbRGckgbRAbRAckjckhbPIbYvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgFckicimcimckkcklcfbcfbckmckncfbcfbcisckqckobYMbYMbYMbYMbYMbYMckpcgQcksckrckxcktcktcktckucgWckvckwckwckwckzckyckBckAckDckCckFckEckHckGckJckIchcchfckKchhckMckLckOckNckPchhcebccuceaccuckRckQckUckSckTckVckXckWckYchrclackZclcclbclecldclgclfcljclhbWgbWgbWgbWgbWgclicllclkbWiclncjGcjGclmclocjGcltclpcbjclqccZclrclrcbjcbmclscbnbPtcgsclvcgscgscgscgscgscgscgscluclwcguclxclzclycguafOafOafOafOafOafOafOafOafOafOafOafOafOafOafOafOafOafOafOafOafOclBcjZcjZclAciecieckbckbclHckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaebPIclCclDclEbRGbRAclFbRGclGclIbRAbPIbPIbYvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceYcincincinceYbYPclJclMclKckncfbcfbclLclOclNclQclPclPclPclTcgQcgQcgQciCcgSclRcktclScktclVcgWckvckwclUckwclWcgWclYclXclZchccmccmacmbcmecmdcmhcmfcmgcmjcmicmlcmkcmocmmcmnchhcfJccuccucmpckRckQcmrcmqcmucjlcmscmtaYqcmvcmycmxcmAcmzcmCcmBcmEcmDcjvcmHchxcmFcmGcmJcmIcmKcmNcmLclpclncmMcjGcjGcjGcmQcmOclpcbjcmPccZclrclrcbjcmTcmRcbnbPtcmScmVcmUcgscmWcmYcmXcnbcmZcnacnfcgucnccndcnecgucgscgscgscgEcgEcgEcgEcgEaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaacnkcieclBciecieckbckbckbckbckbckbckbciecieaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm new file mode 100644 index 00000000000..64b903a78f5 --- /dev/null +++ b/_maps/map_files/shuttles/emergency_dept.dmm @@ -0,0 +1,127 @@ +"aa" = (/turf/space,/area/space) +"ab" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/escape) +"ac" = (/obj/structure/grille,/obj/structure/window/full/shuttle,/turf/simulated/floor/plating,/area/shuttle/escape) +"ad" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/escape) +"ae" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"af" = (/turf/simulated/shuttle/wall{icon_state = "swallc4"},/area/shuttle/escape) +"ag" = (/obj/machinery/computer/emergency_shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ah" = (/turf/simulated/shuttle/wall{icon_state = "swallc3"},/area/shuttle/escape) +"ai" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"aj" = (/obj/machinery/computer/communications,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ak" = (/obj/machinery/computer/security{network = list("SS13","Telecomms","Research Outpost","Mining Outpost")},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"al" = (/obj/structure/stool/bed/chair/comfy/blue{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"am" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"an" = (/obj/machinery/computer/crew,/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ao" = (/obj/machinery/computer/robotics,/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ap" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape) +"aq" = (/turf/simulated/shuttle/floor,/area/shuttle/escape) +"ar" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"as" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"at" = (/obj/structure/stool/bed/chair/comfy/red{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"au" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"av" = (/obj/structure/stool/bed/chair/comfy/purp{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"aw" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/escape) +"ax" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/shuttle/escape) +"ay" = (/obj/machinery/door/airlock/glass_command{name = "Escape Shuttle Cockpit"; req_access_txt = "19"},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"az" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aA" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aB" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "16"},/turf/simulated/floor/plating,/area/shuttle/escape) +"aC" = (/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aD" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aE" = (/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aF" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light/spot{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aG" = (/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aH" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aI" = (/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aJ" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "15"},/turf/simulated/floor/plating,/area/shuttle/escape) +"aK" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aL" = (/obj/machinery/chem_dispenser/beer,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aM" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access_txt = "2"},/turf/simulated/floor/plating,/area/shuttle/escape) +"aN" = (/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/clothing/mask/cigarette/cigar,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aO" = (/obj/machinery/chem_dispenser/soda,/obj/structure/table/woodentable,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aP" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/floor/plating,/area/shuttle/escape) +"aQ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape) +"aR" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/shuttle/escape) +"aS" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area/shuttle/escape) +"aT" = (/obj/docking_port/mobile/emergency{dir = 4; dwidth = 11; height = 13; timid = 1; width = 24},/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"aU" = (/turf/simulated/floor/plasteel,/area/shuttle/escape) +"aV" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "station intercom (General)"; pixel_x = -28},/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"aW" = (/obj/machinery/door/window/northleft{req_access_txt = "32"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"aX" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"aY" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"aZ" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"ba" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bb" = (/obj/machinery/door/window/northleft{req_access_txt = "47"},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bc" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bd" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"be" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bf" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bg" = (/obj/structure/grille,/obj/structure/window/full/shuttle{icon_state = "8"},/turf/simulated/floor/plating,/area/shuttle/escape) +"bh" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bi" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bj" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bk" = (/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bl" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bm" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bn" = (/obj/machinery/door/window/southright{req_access_txt = "32"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bo" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bp" = (/obj/structure/window/reinforced,/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bq" = (/obj/structure/window/reinforced,/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"br" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bs" = (/obj/machinery/door/window/southright{req_access_txt = "47"},/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bt" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor5"},/area/shuttle/escape) +"bu" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bv" = (/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bw" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape) +"bx" = (/obj/structure/noticeboard,/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"by" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = null; name = "Shuttle Cargo Hatch"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bz" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bA" = (/obj/machinery/door/window/northleft{req_access_txt = "5"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bB" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bC" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bD" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/escape) +"bE" = (/obj/machinery/door/airlock/shuttle{aiControlDisabled = 1; hackProof = 1; id_tag = "s_docking_airlock"; name = "Shuttle Hatch"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape) +"bF" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bG" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bH" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape) +"bI" = (/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0; req_access_txt = "0"},/obj/machinery/sleeper,/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bJ" = (/obj/item/device/radio/intercom{dir = 4; name = "station intercom (General)"; pixel_x = 28},/obj/item/weapon/extinguisher,/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bK" = (/obj/structure/closet/cardboard,/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bL" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bN" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bO" = (/obj/machinery/sleeper,/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/shuttle/escape) +"bP" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape) +"bQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/shuttle/escape) +"bR" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/escape) +"bS" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape) +"bT" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/escape) +"bU" = (/turf/space,/area/shuttle/escape) + +(1,1,1) = {" +aaaaaaaaaaabacadaaaaaaaaaa +aaaaabaeaeafagahaeaeadaaaa +aaabafaiajakalamanaoahadaa +aaapaqarasataqaqauavaqapaa +aaapaqaqaqaqaqaqaqaqaqapaa +abawaeaeaeaxayaeaeaeaeawad +apazaAazazaBaCaDaEaCaFaGap +apaHaIaIaIaJaCaDaEaCaKaLap +apaIaIaIaIaMaCaDaEaCaNaOap +aPaIaIaQaQaBaCaDaEaCaRaRac +aSaeaeaeaeaJaCaDaEaCaCaCap +aTaUaUaUaUaUaUaUaUaUaUaUap +apaVaWaXaBaYaUaZaBbabbbcap +aBbdbebfbgbhaUbibgbjbkblaB +bgbdbebfbgbhaUbibgbjbkblbg +aJbmbnboaJbpaUbqaJbrbsbtaJ +apbuaUaUaUaUaUaUaUaUaUbvap +bwaUaUaUaUaUaUaUaUaUaUaUac +aSaebxbyaBbzbAbBaBbCacaebD +bEaUaUaUbgbFbGbHbgaUaUbIap +acaUaUaUbgbFbGbHbgaUaUbJap +apbKbLbLaJbFbGbHaJbNbMbOap +bPaxbQbQawaeaeaeawbRbRaxbS +aabPbTbTbSbUbUbUbPbTbTbSaa +"} + diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm new file mode 100644 index 00000000000..4ba11cef609 --- /dev/null +++ b/_maps/map_files/templates/shelter_2.dmm @@ -0,0 +1,41 @@ +"a" = (/turf/simulated/wall/survival,/area/survivalpod) +"b" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/wall/survival,/area/survivalpod) +"c" = (/obj/machinery/smartfridge/survival_pod/loaded,/turf/simulated/floor/pod,/area/survivalpod) +"d" = (/turf/simulated/floor/pod,/area/survivalpod) +"e" = (/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) +"f" = (/obj/machinery/light,/turf/simulated/floor/carpet/black,/area/survivalpod) +"g" = (/obj/structure/sign/mining/survival{tag = "icon-survival (NORTH)"; icon_state = "survival"; dir = 1},/turf/simulated/wall/survival,/area/survivalpod) +"h" = (/obj/structure/fans,/turf/simulated/floor/pod,/area/survivalpod) +"i" = (/obj/machinery/sleeper/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) +"j" = (/obj/structure/table/survival_pod,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/brute{pixel_x = 4; pixel_y = -2},/turf/simulated/floor/pod,/area/survivalpod) +"k" = (/obj/structure/table/wood/fancy/black{pixel_y = -9},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/microwave,/turf/simulated/floor/carpet/black,/area/survivalpod) +"l" = (/obj/structure/sink/kitchen{dir = 4; pixel_x = -11},/turf/simulated/floor/carpet/black,/area/survivalpod) +"m" = (/obj/structure/sign/mining/survival,/turf/simulated/wall/survival,/area/survivalpod) +"n" = (/obj/structure/curtain/black,/obj/machinery/shower{pixel_y = 20},/turf/simulated/floor/pod{pixel_y = 0},/area/survivalpod) +"o" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) +"p" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/turf/simulated/floor/carpet/black,/area/survivalpod) +"q" = (/obj/structure/window/reinforced/survival_pod{dir = 9},/turf/simulated/floor/carpet/black,/area/survivalpod) +"r" = (/turf/simulated/floor/carpet/black,/area/survivalpod) +"s" = (/obj/item/device/gps/computer,/turf/simulated/floor/pod,/area/survivalpod) +"t" = (/obj/structure/stool/bed/pod,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/pod,/area/survivalpod) +"u" = (/obj/structure/tubes,/obj/item/weapon/twohanded/required/kirbyplants,/turf/simulated/floor/pod,/area/survivalpod) +"v" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/displaycase{desc = "A display case containing an expensive forgery, probably."; locked = 1; pixel_y = -4; req_access_txt = "48"; start_showpiece_type = /obj/item/fakeartefact},/turf/simulated/floor/carpet/black{dir = 1},/area/survivalpod) +"w" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/survival_pod,/turf/simulated/floor/pod,/area/survivalpod) +"x" = (/obj/structure/sign/mining/survival{tag = "icon-survival (EAST)"; icon_state = "survival"; dir = 4},/turf/simulated/wall/survival,/area/survivalpod) +"y" = (/obj/structure/toilet/secret{pixel_y = 12},/turf/simulated/floor/pod,/area/survivalpod) +"z" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/item/cardboard_cutout{desc = "A cardboard cutout of a xenomorph maid."; icon_state = "cutout_lusty"; name = "lusty xenomorph maid"}, /turf/simulated/floor/carpet/black,/area/survivalpod) +"A" = (/obj/structure/table/wood/fancy/black,/obj/machinery/light{dir = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor/carpet/black,/area/survivalpod) +"B" = (/obj/structure/table/wood/fancy/black,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -4; pixel_y = 1},/obj/effect/spawner/lootdrop/three_course_meal,/turf/simulated/floor/carpet/black,/area/survivalpod) +"C" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet/black,/area/survivalpod) +"D" = (/obj/structure/sign/mining,/turf/simulated/wall/survival,/area/survivalpod) + +(1,1,1) = {" +agagaga +bhcsnyx +aidtoza +bjdupAx +akevqBa +blfrrCx +amawaDa +"} + diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 8e7be007d12..4f07d54ee01 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -96,6 +96,7 @@ #define NUTRITION_LEVEL_FED 350 #define NUTRITION_LEVEL_HUNGRY 250 #define NUTRITION_LEVEL_STARVING 150 +#define NUTRITION_LEVEL_CURSED 0 //Blood levels #define BLOOD_VOLUME_NORMAL 560 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 99079fd81bb..a2f487086ae 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -332,4 +332,6 @@ #define STATION_GOAL_BUDGET 1 #define FIRST_DIAG_STEP 1 -#define SECOND_DIAG_STEP 2 \ No newline at end of file +#define SECOND_DIAG_STEP 2 + +#define ARBITRARY_VIEWRANGE_NOHUD 2 \ No newline at end of file diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm index c2295b9c5dc..36fffdd907a 100644 --- a/code/__DEFINES/mob.dm +++ b/code/__DEFINES/mob.dm @@ -92,10 +92,14 @@ #define APPEARANCE_ALL 32767 // Intents -#define I_HELP "help" -#define I_DISARM "disarm" -#define I_GRAB "grab" -#define I_HARM "harm" +#define INTENT_HELP "help" +#define INTENT_DISARM "disarm" +#define INTENT_GRAB "grab" +#define INTENT_HARM "harm" + +// Movement Intents +#define MOVE_INTENT_WALK "walk" +#define MOVE_INTENT_RUN "run" // AI wire/radio settings #define AI_CHECK_WIRELESS 1 diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 0abf2ac1af3..f20be8c1c0b 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -464,3 +464,7 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul set hidden = 1 set name = ".mouse" LogMouseMacro(".mouse", params) + +/proc/update_all_mob_security_hud() + for(var/mob/living/carbon/human/H in mob_list) + H.sec_hud_set_security_status() \ No newline at end of file diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 58928da83e0..b4bb8292ca2 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -169,7 +169,7 @@ /mob/proc/RangedAttack(var/atom/A, var/params) if(!mutations.len) return - if((LASER in mutations) && a_intent == I_HARM) + if((LASER in mutations) && a_intent == INTENT_HARM) LaserEyes(A) // moved into a proc below return else diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 79d109c0c57..ff8b856e797 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -41,14 +41,14 @@ static_inventory += using using = new /obj/screen/act_intent/alien() - using.icon_state = (mymob.a_intent == "hurt" ? "harm" : mymob.a_intent) + using.icon_state = (mymob.a_intent == "hurt" ? INTENT_HARM : mymob.a_intent) using.screen_loc = ui_acti static_inventory += using action_intent = using using = new /obj/screen/mov_intent() using.icon = 'icons/mob/screen_alien.dmi' - using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") + using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi static_inventory += using move_intent = using diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index c4f453077ef..9e57fd9429b 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -14,7 +14,7 @@ using = new /obj/screen/mov_intent() using.icon = 'icons/mob/screen_alien.dmi' - using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") + using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") static_inventory += using move_intent = using @@ -36,4 +36,4 @@ mymob.zone_sel = new /obj/screen/zone_sel/alien() mymob.zone_sel.update_icon(mymob) - static_inventory += mymob.zone_sel \ No newline at end of file + static_inventory += mymob.zone_sel diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 2e1d87f605e..f4b43516cd0 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -100,6 +100,15 @@ if(display_hud_version > HUD_VERSIONS) //If the requested version number is greater than the available versions, reset back to the first version display_hud_version = 1 + if(mymob.client.view < world.view) + if(mymob.client.view < ARBITRARY_VIEWRANGE_NOHUD) + to_chat(mymob, "HUD is unavailable with this view range.") + display_hud_version = HUD_STYLE_NOHUD + else + if(display_hud_version == HUD_STYLE_STANDARD) + to_chat(mymob, "Standard HUD mode is unavailable with a smaller-than-normal view range.") + display_hud_version = HUD_STYLE_REDUCED + switch(display_hud_version) if(HUD_STYLE_STANDARD) //Default HUD hud_shown = 1 //Governs behavior of other procs diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index d543ce9c416..d309cc37e0f 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -81,7 +81,7 @@ using = new /obj/screen/mov_intent() using.icon = ui_style - using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") + using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi using.color = ui_color using.alpha = ui_alpha diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index e5d1e15512a..ae0fb3e1263 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -17,7 +17,7 @@ using = new /obj/screen/mov_intent() using.icon = ui_style - using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") + using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi using.color = ui_color using.alpha = ui_alpha diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index cf0247e847a..260df783bf9 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -70,14 +70,14 @@ var/_y = text2num(params2list(params)["icon-y"]) if(_x<=16 && _y<=16) - usr.a_intent_change(I_HARM) + usr.a_intent_change(INTENT_HARM) else if(_x<=16 && _y>=17) - usr.a_intent_change(I_HELP) + usr.a_intent_change(INTENT_HELP) else if(_x>=17 && _y<=16) - usr.a_intent_change(I_GRAB) + usr.a_intent_change(INTENT_GRAB) else if(_x>=17 && _y>=17) - usr.a_intent_change(I_DISARM) + usr.a_intent_change(INTENT_DISARM) else usr.a_intent_change("right") @@ -199,15 +199,15 @@ var/mob/living/carbon/C = usr if(C.legcuffed) to_chat(C, "You are legcuffed! You cannot run until you get [C.legcuffed] removed!") - C.m_intent = "walk" //Just incase + C.m_intent = MOVE_INTENT_WALK //Just incase C.hud_used.move_intent.icon_state = "walking" return 1 switch(usr.m_intent) - if("run") - usr.m_intent = "walk" + if(MOVE_INTENT_RUN) + usr.m_intent = MOVE_INTENT_WALK usr.hud_used.move_intent.icon_state = "walking" - if("walk") - usr.m_intent = "run" + if(MOVE_INTENT_WALK) + usr.m_intent = MOVE_INTENT_RUN usr.hud_used.move_intent.icon_state = "running" if(istype(usr,/mob/living/carbon/alien/humanoid)) usr.update_icons() diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index ea9de45f295..87b78259593 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -30,7 +30,7 @@ /mob/living/carbon/human/RangedAttack(var/atom/A) if(!gloves && !mutations.len) return var/obj/item/clothing/gloves/G = gloves - if((LASER in mutations) && a_intent == I_HARM) + if((LASER in mutations) && a_intent == INTENT_HARM) LaserEyes(A) // moved into a proc below else if(istype(G) && G.Touch(A,0)) // for magic gloves diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm index 2d7fb9467df..b5249e11740 100644 --- a/code/datums/diseases/advance/symptoms/vision.dm +++ b/code/datums/diseases/advance/symptoms/vision.dm @@ -28,22 +28,25 @@ Bonus /datum/symptom/visionloss/Activate(datum/disease/advance/A) ..() if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob + var/mob/living/carbon/M = A.affected_mob + var/obj/item/organ/internal/eyes/eyes = M.get_int_organ(/obj/item/organ/internal/eyes) + if(!eyes) //NO EYES, NO PROBLEM! Rip out your eyes today to prevent future blindness! + return switch(A.stage) if(1, 2) to_chat(M, "Your eyes itch.") if(3, 4) to_chat(M, "Your eyes burn!") - M.blur_eyes(10) - M.adjust_eye_damage(1) + M.EyeBlurry(20) + eyes.take_damage(1) else to_chat(M, "Your eyes burn horrificly!") - M.blur_eyes(20) - M.adjust_eye_damage(5) - if(M.eye_damage >= 10) - M.become_nearsighted() - if(prob(M.eye_damage - 10 + 1)) - if(M.become_blind()) + M.EyeBlurry(30) + eyes.take_damage(5) + if(eyes.damage >= 10) + M.BecomeNearsighted() + if(prob(eyes.damage - 10 + 1)) + if(M.BecomeBlind()) to_chat(M, "You go blind!") diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 5c11c42930a..40c38ac0627 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1173,3 +1173,39 @@ suit = /obj/item/clothing/suit/wizrobe/marisa shoes = /obj/item/clothing/shoes/sandal/marisa head = /obj/item/clothing/head/wizard/marisa + + +/datum/outfit/admin/dark_priest + name = "Dark Priest" + + uniform = /obj/item/clothing/under/color/black + suit = /obj/item/clothing/suit/hooded/chaplain_hoodie + back = /obj/item/weapon/storage/backpack + head = /obj/item/clothing/head/chaplain_hood + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/black + l_ear = /obj/item/device/radio/headset/syndicate + id = /obj/item/weapon/card/id/syndicate + r_hand = /obj/item/weapon/nullrod/armblade + backpack_contents = list( + /obj/item/weapon/storage/box/survival = 1, + /obj/item/device/flashlight = 1, + ) + +/datum/outfit/admin/dark_priest/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + var/obj/item/weapon/card/id/I = H.wear_id + if(istype(I)) + apply_to_card(I, H, get_all_accesses(), "Dark Priest", "syndie") + var/obj/item/weapon/nullrod/armblade/B = H.r_hand + if(istype(B)) + B.force = 20 + B.name = "blessing of the reaper" + B.desc = "Sometimes, someone's just gotta die." + var/obj/item/device/radio/headset/R = H.l_ear + if(istype(R)) + R.flags |= NODROP + var/obj/item/weapon/implant/dust/D = new /obj/item/weapon/implant/dust(H) + D.implant(H) \ No newline at end of file diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 24007dbafee..3d0f877a3aa 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -39,6 +39,12 @@ suffix = "cyb" name = "emergency shuttle (Cyberiad)" +/datum/map_template/shuttle/emergency/dept + suffix = "dept" + name = "emergency shuttle (department)" + description = "Features include: areas for each department, and a small bar." + admin_notes = "Designed to reduce chaos. Each dept requires dept access." + /datum/map_template/shuttle/emergency/clown suffix = "clown" name = "Snappop(tm)!" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 1cf08abebd0..1aa65685d5e 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -922,6 +922,15 @@ var/list/uplink_items = list() cost = 2 surplus = 30 +/datum/uplink_item/stealthy_tools/cutouts + name = "Adaptive Cardboard Cutouts" + desc = "These cardboard cutouts are coated with a thin material that prevents discoloration and makes the images on them appear more lifelike. This pack contains three as well as a \ + spraycan for changing their appearances." + reference = "ADCC" + item = /obj/item/weapon/storage/box/syndie_kit/cutouts + cost = 1 + surplus = 20 + // DEVICE AND TOOLS /datum/uplink_item/device_tools diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index eb743afad62..140b6116cd6 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -307,7 +307,7 @@ var/mob/living/L = A if(!L.ckey) return - if((oldarea.has_gravity == 0) && (newarea.has_gravity == 1) && (L.m_intent == "run")) // Being ready when you change areas gives you a chance to avoid falling all together. + if((oldarea.has_gravity == 0) && (newarea.has_gravity == 1) && (L.m_intent == MOVE_INTENT_RUN)) // Being ready when you change areas gives you a chance to avoid falling all together. thunk(L) // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch @@ -344,7 +344,7 @@ if(istype(get_turf(M), /turf/space)) // Can't fall onto nothing. return - if((istype(M,/mob/living/carbon/human/)) && (M.m_intent == "run")). + if((istype(M,/mob/living/carbon/human/)) && (M.m_intent == MOVE_INTENT_RUN)). M.Stun(5) M.Weaken(5) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 5d1dd5c74fb..292ad651235 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -34,6 +34,9 @@ //Detective Work, used for the duplicate data points kept in the scanners var/list/original_atom + //Detective Work, used for allowing a given atom to leave its fibers on stuff. Allowed by default + var/can_leave_fibers = TRUE + var/allow_spin = 1 //Set this to 1 for a _target_ that is being thrown at; if an atom has this set to 1 then atoms thrown AT it will not spin; currently used for the singularity. -Fox var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff. @@ -469,4 +472,4 @@ /atom/on_varedit(modified_var) if(!Debug2) admin_spawned = TRUE - ..() \ No newline at end of file + ..() diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 16f8dad4bdb..52b62f6cabf 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -600,13 +600,13 @@ thoughts = "haunted by their own mortality" switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) to_chat(user, "Mood: You sense benevolent thoughts from [M.name].") - if(I_DISARM) + if(INTENT_DISARM) to_chat(user, "Mood: You sense cautious thoughts from [M.name].") - if(I_GRAB) + if(INTENT_GRAB) to_chat(user, "Mood: You sense hostile thoughts from [M.name].") - if(I_HARM) + if(INTENT_HARM) to_chat(user, "Mood: You sense cruel thoughts from [M.name].") for(var/mob/living/L in view(7,M)) if(L == M) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index ea92b93f473..a9975618435 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -68,7 +68,7 @@ icon_living = "brainslug" icon_dead = "brainslug_dead" speed = 5 - a_intent = I_HARM + a_intent = INTENT_HARM stop_automated_movement = 1 status_flags = CANPUSH attacktext = "nips" diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 39acdabacc5..4825dea6ebb 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -11,7 +11,7 @@ icon_living = "magicOrange" icon_dead = "magicOrange" speed = 0 - a_intent = I_HARM + a_intent = INTENT_HARM stop_automated_movement = 1 floating = 1 attack_sound = 'sound/weapons/punch1.ogg' @@ -218,7 +218,7 @@ //Fire. Low damage, low resistance, sets mobs on fire when bumping /mob/living/simple_animal/hostile/guardian/fire - a_intent = I_HELP + a_intent = INTENT_HELP melee_damage_lower = 10 melee_damage_upper = 10 attack_sound = 'sound/items/Welder.ogg' @@ -340,7 +340,7 @@ //Healer /mob/living/simple_animal/hostile/guardian/healer - a_intent = I_HARM + a_intent = INTENT_HARM friendly = "heals" speed = 0 melee_damage_lower = 15 @@ -362,7 +362,7 @@ icon_state = "seal" attacktext = "slaps" speak_emote = list("barks") - a_intent = I_HARM + a_intent = INTENT_HARM friendly = "heals" speed = 0 melee_damage_lower = 0 @@ -398,7 +398,7 @@ /mob/living/simple_animal/hostile/guardian/healer/ToggleMode() if(src.loc == summoner) if(toggle) - a_intent = I_HARM + a_intent = INTENT_HARM speed = 0 damage_transfer = 0.7 if(src.adminseal) @@ -408,7 +408,7 @@ to_chat(src, "You switch to combat mode.") toggle = FALSE else - a_intent = I_HELP + a_intent = INTENT_HELP speed = 1 damage_transfer = 1 if(src.adminseal) @@ -490,7 +490,7 @@ armour_penetration = 100 /mob/living/simple_animal/hostile/guardian/ranged - a_intent = I_HELP + a_intent = INTENT_HELP friendly = "quietly assesses" melee_damage_lower = 10 melee_damage_upper = 10 diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index be21008d5f2..28ca711946a 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -11,7 +11,7 @@ icon_living = "morph" icon_dead = "morph_dead" speed = 2 - a_intent = "harm" + a_intent = INTENT_HARM stop_automated_movement = 1 status_flags = CANPUSH pass_flags = PASSTABLE @@ -168,4 +168,3 @@ eat(I) return target.attack_animal(src) - diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 19411dee6de..8fbc0563181 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -14,7 +14,7 @@ icon_state = "daemon" icon_living = "daemon" speed = 1 - a_intent = I_HARM + a_intent = INTENT_HARM stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/misc/demon_attack1.ogg' diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index e60b564f5d0..6cb2f8d6db6 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -11,7 +11,7 @@ name = "traitor" config_tag = "traitor" restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Internal Affairs Agent", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Internal Affairs Agent", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Internal Affairs Agent", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer") required_players = 0 required_enemies = 1 recommended_enemies = 4 diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index f3dc8e4e41a..406f21bdcdb 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -10,7 +10,7 @@ config_tag = "vampire" restricted_jobs = list("AI", "Cyborg") protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer") - protected_species = list("Machine", "Plasmaman") + protected_species = list("Machine") required_players = 15 required_enemies = 1 recommended_enemies = 4 diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index e5c9d1a0804..721372b56f5 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -332,7 +332,7 @@ while((progress / milestone) > INSTALLED && LAZYLEN(missing_organs)) var/obj/item/organ/I = pick_n_take(missing_organs) - I.replaced(occupant) + I.safe_replace(occupant) #undef INSTALLED @@ -377,7 +377,7 @@ return else connected_message("Authorized Ejection") - announce_radio_message("An authorized ejection of [occupant.real_name] has occured") + announce_radio_message("An authorized ejection of [(occupant) ? occupant.real_name : "the malfunctioning pod"] has occured") to_chat(user, "You force an emergency ejection.") go_out() diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index e343135b246..17147954372 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -135,7 +135,7 @@ return /obj/machinery/computer/attack_alien(mob/living/user) - if(isalien(user) && user.a_intent == I_HELP) + if(isalien(user) && user.a_intent == INTENT_HELP) var/mob/living/carbon/alien/humanoid/xeno = user if(xeno.has_fine_manipulation) return attack_hand(user) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 16efcb7de76..fca20841cfa 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -485,10 +485,6 @@ /obj/machinery/computer/secure_data/proc/setTemp(text, list/buttons = list()) temp = list("text" = text, "buttons" = buttons, "has_buttons" = buttons.len > 0) -/obj/machinery/computer/secure_data/proc/update_all_mob_security_hud() - for(var/mob/living/carbon/human/H in mob_list) - H.sec_hud_set_security_status() - /obj/machinery/computer/secure_data/proc/create_record_photo(datum/data/record/R) // basically copy-pasted from the camera code but different enough that it has to be redone var/icon/photoimage = get_record_photo(R) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index dd3c1be36da..24f5c88695c 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -612,7 +612,7 @@ to destroy them and players will be able to make replacements. name = "Circuit Board (PACMAN-type Generator)" build_path = /obj/machinery/power/port_gen/pacman board_type = "machine" - origin_tech = "programming=2:powerstorage=3;plasmatech=3;engineering=3" + origin_tech = "programming=2;powerstorage=3;plasmatech=3;engineering=3" frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor." req_components = list( /obj/item/weapon/stock_parts/matter_bin = 1, diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index a24af37dc72..68987b63ebd 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -29,32 +29,51 @@ var/timetoset = 0 // Used to set releasetime upon starting the timer var/obj/item/device/radio/Radio var/printed = 0 + var/datum/data/record/prisoner maptext_height = 26 maptext_width = 32 /obj/machinery/door_timer/proc/print_report() - var/logname = input(usr, "Name of the guilty?","[id] log name") - var/logcharges = stripped_multiline_input(usr, "What have they been charged with?","[id] log charges") + var/logname = input(usr, "Name of the guilty?","[id] log name") + var/logcharges = stripped_multiline_input(usr, "What have they been charged with?","[id] log charges") - if(!logname || !logcharges) - return 0 + if(!logname || !logcharges) + return 0 - for(var/obj/machinery/computer/prisoner/C in prisoncomputer_list) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(C.loc) - P.name = "[id] log - [logname] [worldtime2text()]" - P.info = "
[id] - Brig record



" - P.info += {"
[station_name()] - Security Department

-
Admission data:

- Log generated at: [worldtime2text()]
- Detainee: [logname]
- Duration: [timetoset/10] seconds
- Charge(s): [logcharges]
- Arresting Officer: [usr.name]


- This log file was generated automatically upon activation of a cell timer."} + for(var/obj/machinery/computer/prisoner/C in prisoncomputer_list) + var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(C.loc) + P.name = "[id] log - [logname] [worldtime2text()]" + P.info = "
[id] - Brig record



" + P.info += {"
[station_name()] - Security Department

+
Admission data:

+ Log generated at: [worldtime2text()]
+ Detainee: [logname]
+ Duration: [timetoset/10] seconds
+ Charge(s): [logcharges]
+ Arresting Officer: [usr.name]


+ This log file was generated automatically upon activation of a cell timer."} - playsound(C.loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) - cell_logs += P - return 1 + playsound(C.loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1) + cell_logs += P + + var/datum/data/record/R = find_security_record("name", logname) + Radio.autosay("Detainee [logname] has been incarcerated for [timetoset/10] seconds for the charges of, '[logcharges]'. \ + Arresting Officer: [usr.name].[R ? "" : " Detainee record not found, manual record update required."]", name, "Security", list(z)) + + if(R) + prisoner = R + R.fields["criminal"] = "Incarcerated" + var/mob/living/carbon/human/M = usr + var/rank = "UNKNOWN RANK" + if(istype(M) && M.wear_id) + var/obj/item/weapon/card/id/I = M.wear_id + rank = I.assignment + if(!R.fields["comments"] || !islist(R.fields["comments"])) //copied from security computer code because apparently these need to be initialized + R.fields["comments"] = list() + R.fields["comments"] += "Autogenerated by [name] on [current_date_string] [worldtime2text()]
Sentenced to [timetoset/10] seconds for the charges of \"[logcharges]\" by [rank] [usr.name]." + update_all_mob_security_hud() + + return 1 /obj/machinery/door_timer/initialize() ..() @@ -91,6 +110,7 @@ /obj/machinery/door_timer/Destroy() QDEL_NULL(Radio) targets.Cut() + prisoner = null return ..() //Main door timer loop, if it's timing and time is >0 reduce time by 1. @@ -166,6 +186,10 @@ // Reset releasetime releasetime = 0 printed = 0 + if(prisoner) + prisoner.fields["criminal"] = "Released" + update_all_mob_security_hud() + prisoner = null for(var/obj/machinery/door/window/brigdoor/door in targets) if(!door.density) @@ -294,6 +318,7 @@ timer_start() else timer_end() + Radio.autosay("Timer stopped manually by [usr.name].", name, "Security", list(z)) else if(href_list["tp"]) //adjust timer, close door if not already closed diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 7ecf1f17920..bda658ef128 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -112,7 +112,7 @@ add_fingerprint(user) user.changeNext_move(CLICK_CD_MELEE) - if(can_force && (!glass || user.a_intent != I_HELP)) + if(can_force && (!glass || user.a_intent != INTENT_HELP)) user.visible_message("[user] begins forcing \the [src].", \ "You begin forcing \the [src].") if(do_after(user, force_open_time, target = src)) diff --git a/code/game/machinery/dye_generator.dm b/code/game/machinery/dye_generator.dm index a4d70d78023..1d392d187cf 100644 --- a/code/game/machinery/dye_generator.dm +++ b/code/game/machinery/dye_generator.dm @@ -88,7 +88,7 @@ overlays += I /obj/item/hair_dye_bottle/attack(mob/living/carbon/M as mob, mob/user as mob) - if(user.a_intent != "help") + if(user.a_intent != INTENT_HELP) ..() return if(!(M in view(1))) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 1b685f50197..58e4525a30c 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -51,7 +51,7 @@ /obj/machinery/flasher/attack_ai(mob/user) if(anchored) return flash() - + /obj/machinery/flasher/attack_ghost(mob/user) if(anchored && user.can_advanced_admin_interact()) return flash() @@ -92,7 +92,7 @@ if(istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - if((M.m_intent != "walk") && (anchored)) + if((M.m_intent != MOVE_INTENT_WALK) && (anchored)) flash() /obj/machinery/flasher/portable/attackby(obj/item/weapon/W as obj, mob/user as mob, params) @@ -119,11 +119,11 @@ anchored = 1.0 use_power = 1 idle_power_usage = 2 - active_power_usage = 4 - + active_power_usage = 4 + /obj/machinery/flasher_button/attack_ai(mob/user as mob) return attack_hand(user) - + /obj/machinery/flasher_button/attack_ghost(mob/user) if(user.can_advanced_admin_interact()) return attack_hand(user) @@ -150,4 +150,4 @@ sleep(50) icon_state = "launcherbtt" - active = 0 \ No newline at end of file + active = 0 diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 3abbcef84ae..5ce444bcc09 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -36,7 +36,7 @@ /obj/machinery/holosign_switch name = "holosign switch" icon = 'icons/obj/power.dmi' - icon_state = "light1" + icon_state = "light0" desc = "A remote control switch for holosign." var/id = null var/active = 0 diff --git a/code/game/machinery/programmable_unloader.dm b/code/game/machinery/programmable_unloader.dm index 6b6b1938de9..039e894b86d 100644 --- a/code/game/machinery/programmable_unloader.dm +++ b/code/game/machinery/programmable_unloader.dm @@ -501,7 +501,7 @@ to_chat(H, "The boxing machine refuses to acknowledge you unless you face it head on!") return var/damage = 0 - if(H.a_intent != I_HARM) + if(H.a_intent != INTENT_HARM) damage += rand(0,5) else damage += rand(0,10) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 1a901f4a71e..a08f4bea77a 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -157,10 +157,10 @@ log_message("Toggled zoom mode.") occupant_message("Zoom mode [zoom?"en":"dis"]abled.") if(zoom) - occupant.client.view = 12 + occupant.client.AddViewMod("mecha", 12) to_chat(occupant, sound('sound/mecha/imag_enh.ogg',volume=50)) else - occupant.client.view = initial(occupant.client.view) + occupant.client.RemoveViewMod("mecha") diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 81fba15d1e8..4421eba9aae 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -51,7 +51,7 @@ else if(istype(target,/mob/living)) var/mob/living/M = target if(M.stat == DEAD) return - if(chassis.occupant.a_intent == I_HARM) + if(chassis.occupant.a_intent == INTENT_HARM) M.take_overall_damage(dam_force) if(!M) return @@ -101,11 +101,11 @@ else if(istype(target,/mob/living)) var/mob/living/M = target if(M.stat == DEAD) return - if(chassis.occupant.a_intent == I_HARM) + if(chassis.occupant.a_intent == INTENT_HARM) target.visible_message("[chassis] destroys [target] in an unholy fury.", "[chassis] destroys [target] in an unholy fury.") M.gib() - /*if(chassis.occupant.a_intent == I_DISARM) + /*if(chassis.occupant.a_intent == INTENT_DISARM) target.visible_message("[chassis] rips [target]'s arms off.", "[chassis] rips [target]'s arms off.")*/ else diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 9c554407afa..77bcc4c1966 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -77,6 +77,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/disabler name = "CH-PD Disabler" + origin_tech = "combat=3" projectile = /obj/item/projectile/beam/disabler projectiles_per_shot = 2 projectile_delay = 1 @@ -104,7 +105,7 @@ name = "P-X Tesla Cannon" desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine" icon_state = "mecha_laser" - origin_tech = "materials=4;combat=5;magnets=4" + origin_tech = "materials=4;engineering=4;combat=6;magnets=6" energy_drain = 500 projectile = /obj/item/projectile/energy/shock_revolver fire_sound = 'sound/magic/lightningbolt.ogg' @@ -129,7 +130,7 @@ name = "ZFI Immolation Beam Gun" desc = "A weapon for combat exosuits. Fires beams of extreme heat that set targets on fire." icon_state = "mecha_laser" - origin_tech = "materials=4;combat=4;magnets=3;plasmatech=2" + origin_tech = "materials=4;engineering=4;combat=6;magnets=6" energy_drain = 80 projectile = /obj/item/projectile/beam/immolator fire_sound = 'sound/weapons/laser3.ogg' diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 9eab3e88cee..975ecdc1e84 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -748,7 +748,7 @@ to_chat(user, "There's not enough wire to finish the task.") return - else if(isscrewdriver(W) && user.a_intent != I_HARM) + else if(isscrewdriver(W) && user.a_intent != INTENT_HARM) if(hasInternalDamage(MECHA_INT_TEMP_CONTROL)) clearInternalDamage(MECHA_INT_TEMP_CONTROL) to_chat(user, "You repair the damaged temperature controller.") @@ -776,7 +776,7 @@ to_chat(user, "There's already a powercell installed.") return - else if(iswelder(W) && user.a_intent != I_HARM) + else if(iswelder(W) && user.a_intent != INTENT_HARM) var/obj/item/weapon/weldingtool/WT = W if(health18, knife 10->30, hatchet 12->36 if(I.damtype != STAMINA) endurance -= damage_to_do CheckEndurance() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 7045a06a875..ebfd177959e 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -198,3 +198,27 @@ /obj/item/weapon/gun/energy/kinetic_accelerator = 1, /obj/item/pizzabox = 3, ) + +/obj/effect/spawner/lootdrop/three_course_meal + name = "three course meal spawner" + lootcount = 3 + lootdoubles = FALSE + var/soups = list( + /obj/item/weapon/reagent_containers/food/snacks/beetsoup, + /obj/item/weapon/reagent_containers/food/snacks/stew, + /obj/item/weapon/reagent_containers/food/snacks/hotchili, + /obj/item/weapon/reagent_containers/food/snacks/nettlesoup, + /obj/item/weapon/reagent_containers/food/snacks/meatballsoup) + var/salads = list( + /obj/item/weapon/reagent_containers/food/snacks/herbsalad, + /obj/item/weapon/reagent_containers/food/snacks/validsalad, + /obj/item/weapon/reagent_containers/food/snacks/aesirsalad) + var/mains = list( + /obj/item/weapon/reagent_containers/food/snacks/enchiladas, + /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat, + /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, + /obj/item/weapon/reagent_containers/food/snacks/superbiteburger) + +/obj/effect/spawner/lootdrop/three_course_meal/New() + loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) + . = ..() diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm new file mode 100644 index 00000000000..b076b7be43c --- /dev/null +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -0,0 +1,188 @@ +//Cardboard cutouts! They're man-shaped and can be colored with a crayon to look like a human in a certain outfit, although it's limited, discolored, and obvious to more than a cursory glance. +/obj/item/cardboard_cutout + name = "cardboard cutout" + desc = "A vaguely humanoid cardboard cutout. It's completely blank." + icon = 'icons/obj/cardboard_cutout.dmi' + icon_state = "cutout_basic" + burn_state = FLAMMABLE + w_class = WEIGHT_CLASS_BULKY + var/list/possible_appearances = list("Assistant", "Clown", "Mime", + "Traitor", "Nuke Op", "Cultist", "Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Swarmer", + "Deathsquad Officer", "Ian", "Slaughter Demon", + "Laughter Demon", "Xenomorph Maid", "Security Officer", "Terror Spider") + var/pushed_over = FALSE //If the cutout is pushed over and has to be righted + var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version + var/lastattacker = null + +/obj/item/cardboard_cutout/attack_hand(mob/living/user) + if(user.a_intent == INTENT_HELP || pushed_over) + return ..() + user.visible_message("[user] pushes over [src]!", "You push over [src]!") + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + push_over() + +/obj/item/cardboard_cutout/proc/push_over() + name = initial(name) + desc = "[initial(desc)] It's been pushed over." + icon = initial(icon) + icon_state = "cutout_pushed_over" + color = initial(color) + alpha = initial(alpha) + pushed_over = TRUE + +/obj/item/cardboard_cutout/attack_self(mob/living/user) + if(!pushed_over) + return + to_chat(user, "You right [src].") + desc = initial(desc) + icon = initial(icon) + icon_state = initial(icon_state) //This resets a cutout to its blank state - this is intentional to allow for resetting + pushed_over = FALSE + +/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/toy/crayon)) + change_appearance(I, user) + return + // Why yes, this does closely resemble mob and object attack code. + if(I.flags & NOBLUDGEON) + return + if(!I.force) + playsound(loc, 'sound/weapons/tap.ogg', 20, 1, -1) + else if(I.hitsound) + playsound(loc, I.hitsound, 20, 1, -1) + + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + + if(I.force) + user.visible_message("[user] has hit \ + [src] with [I]!", "You hit [src] \ + with [I]!") + + if(prob(I.force)) + push_over() + +/obj/item/cardboard_cutout/bullet_act(obj/item/projectile/P) + visible_message("[src] has been hit by [P]!") + playsound(src, 'sound/weapons/slice.ogg', 50, 1) + if(prob(P.damage)) + push_over() + +/obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user) + if(!crayon || !user) + return + if(istype(crayon, /obj/item/toy/crayon/spraycan)) + var/obj/item/toy/crayon/spraycan/can = crayon + if(can.capped) + to_chat(user, "The cap is on [src] remove it first!") + return + if(pushed_over) + to_chat(user, "Right [src] first!") + return + var/new_appearance = input(user, "Choose a new appearance for [src].", "26th Century Deception") as null|anything in possible_appearances + if(!new_appearance || !crayon) + return + if(!do_after(user, 10, FALSE, src, TRUE)) + return + user.visible_message("[user] gives [src] a new look.", "Voila! You give [src] a new look.") + alpha = 255 + icon = initial(icon) + if(!deceptive) + color = "#FFD7A7" + switch(new_appearance) + if("Assistant") + name = "[pick(first_names_male)] [pick(last_names)]" + desc = "A cardboard cutout of an assistant." + icon_state = "cutout_greytide" + if("Clown") + name = pick(clown_names) + desc = "A cardboard cutout of a clown. You get the feeling that it should be in a corner." + icon_state = "cutout_clown" + if("Mime") + name = pick(mime_names) + desc = "...(A cardboard cutout of a mime.)" + icon_state = "cutout_mime" + if("Traitor") + name = "[pick("Unknown", "Captain")]" + desc = "A cardboard cutout of a traitor." + icon_state = "cutout_traitor" + if("Nuke Op") + name = "[pick("Unknown", "COMMS", "Telecomms", "AI", "stealthy op", "STEALTH", "sneakybeaky", "MEDIC", "Medic", "Gonk op")]" + desc = "A cardboard cutout of a nuclear operative." + icon_state = "cutout_fluke" + if("Cultist") + name = "Unknown" + desc = "A cardboard cutout of a cultist." + icon_state = "cutout_cultist" + //if("Clockwork Cultist") + // name = "[random_name(pick(MALE,FEMALE))]" + // desc = "A cardboard cutout of a servant of Ratvar." + // icon_state = "cutout_servant" + if("Revolutionary") + name = "Unknown" + desc = "A cardboard cutout of a revolutionary." + icon_state = "cutout_viva" + if("Wizard") + name = "[pick(wizard_first)], [pick(wizard_second)]" + desc = "A cardboard cutout of a wizard." + icon_state = "cutout_wizard" + if("Shadowling") + name = "Unknown" + desc = "A cardboard cutout of a shadowling." + icon_state = "cutout_shadowling" + if("Xenomorph") + name = "alien hunter ([rand(1, 999)])" + desc = "A cardboard cutout of a xenomorph." + icon_state = "cutout_fukken_xeno" + if(prob(10)) + alpha = 75 //Spooky sneaking! + if("Swarmer") + name = "Swarmer ([rand(1, 999)])" + desc = "A cardboard cutout of a swarmer." + icon_state = "cutout_swarmer" + //if("Ash Walker") + // name = random_name(pick(MALE,FEMALE),"Unathi") + // desc = "A cardboard cutout of an ash walker." + // icon_state = "cutout_free_antag" + if("Deathsquad Officer") + name = pick(commando_names) + desc = "A cardboard cutout of a death commando." + icon_state = "cutout_deathsquad" + if("Ian") + name = "Ian" + desc = "A cardboard cutout of the HoP's beloved corgi." + icon_state = "cutout_ian" + if("Slaughter Demon") + name = "slaughter demon" + desc = "A cardboard cutout of a slaughter demon." + icon = 'icons/mob/mob.dmi' + icon_state = "daemon" + dir = "SOUTH" + if("Laughter Demon") + name = "laughter demon" + desc = "A cardboard cutout of a laughter demon." + icon = 'icons/mob/mob.dmi' + icon_state = "bowmon" + dir = "SOUTH" + if("Xenomorph Maid") + name = "lusty xenomorph maid ([rand(1, 999)])" + desc = "A cardboard cutout of a xenomorph maid." + icon_state = "cutout_lusty" + if("Security Officer") + name = "Private Security Officer" + desc = "A cardboard cutout of a private security officer." + icon_state = "cutout_ntsec" + if("Terror Spider") + name = "Gray Terror Spider" + desc = "A cardboard cutout of a terror spider." + icon = 'icons/mob/terrorspider.dmi' + icon_state = "terror_gray" + dir = "SOUTH" + + return 1 + +/obj/item/cardboard_cutout/setDir() + dir = SOUTH + +/obj/item/cardboard_cutout/adaptive //Purchased by Syndicate agents, these cutouts are indistinguishable from normal cutouts but aren't discolored when their appearance is changed + deceptive = TRUE diff --git a/code/game/objects/items/policetape.dm b/code/game/objects/items/policetape.dm index 127f3f82c41..56fd5eadbad 100644 --- a/code/game/objects/items/policetape.dm +++ b/code/game/objects/items/policetape.dm @@ -162,7 +162,7 @@ var/list/tape_roll_applications = list() breaktape(W, user) /obj/item/tape/attack_hand(mob/user as mob) - if(user.a_intent == I_HELP && src.allowed(user)) + if(user.a_intent == INTENT_HELP && src.allowed(user)) user.visible_message("[user] lifts [src], allowing passage.", "You lift [src], allowing passage.") src.density = 0 spawn(200) @@ -174,7 +174,7 @@ var/list/tape_roll_applications = list() breaktape(/obj/item/weapon/wirecutters,user) /obj/item/tape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob) - if(user.a_intent == I_HELP && ((!can_puncture(W) && src.allowed(user)))) + if(user.a_intent == INTENT_HELP && ((!can_puncture(W) && src.allowed(user)))) to_chat(user, "You can't break the [src] with that!") return user.visible_message("[user] breaks the [src]!", "You break the [src]!") diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 858365f6d29..67755655fe3 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -237,6 +237,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( new /datum/stack_recipe("folder", /obj/item/weapon/folder), new /datum/stack_recipe("cardboard tube", /obj/item/weapon/c_tube), new /datum/stack_recipe("cardboard box", /obj/structure/closet/cardboard, 4), + new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), ) /obj/item/stack/sheet/cardboard //BubbleWrap diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 1fec38f491b..f982c89a8c3 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -100,6 +100,11 @@ turf_type = /turf/simulated/floor/carpet burn_state = FLAMMABLE +/obj/item/stack/tile/carpet/black + name = "black carpet" + icon_state = "tile-carpet-black" + turf_type = /turf/simulated/floor/carpet/black + //Plasteel /obj/item/stack/tile/plasteel name = "floor tiles" diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 575cf09a6b1..83b6d31a0ea 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -283,7 +283,7 @@ /obj/item/toy/snappop/Crossed(H as mob|obj) if(ishuman(H) || issilicon(H)) //i guess carp and shit shouldn't set them off var/mob/living/carbon/M = H - if(issilicon(H) || M.m_intent == "run") + if(issilicon(H) || M.m_intent == MOVE_INTENT_RUN) to_chat(M, "You step on the snap pop!") pop_burst(2, 0) diff --git a/code/game/objects/items/weapons/caution.dm b/code/game/objects/items/weapons/caution.dm index 250aff951fd..032decd7bc5 100644 --- a/code/game/objects/items/weapons/caution.dm +++ b/code/game/objects/items/weapons/caution.dm @@ -44,7 +44,7 @@ if(armed) if(istype(AM, /mob/living/carbon) && !istype(AM, /mob/living/carbon/brain)) var/mob/living/carbon/C = AM - if(C.m_intent != "walk") + if(C.m_intent != MOVE_INTENT_WALK) src.visible_message("The [src.name] beeps, \"Running on wet floors is hazardous to your health.\"") explosion(src.loc,-1,0,2) if(ishuman(C)) diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 7be57f646c4..ad8a30bed07 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -19,7 +19,7 @@ //So this is a workaround. This also makes more sense from an IC standpoint. ~Carn if(user.client && (target in user.client.screen)) to_chat(user, "You need to take that [target.name] off before cleaning it.") - else if(target == user && user.a_intent == I_GRAB && ishuman(target)) + else if(target == user && user.a_intent == INTENT_GRAB && ishuman(target)) var/mob/living/carbon/human/muncher = user if(muncher && muncher.get_species() == "Drask") to_chat(user, "You take a bite of the [src.name]. Delicious!") diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index ee7a6d4764b..8705b86ea3a 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -319,7 +319,7 @@ to_chat(user, "The instructions on [defib] don't mention how to revive that...") return else - if(user.a_intent == I_HARM && !defib.safety) + if(user.a_intent == INTENT_HARM && !defib.safety) busy = 1 H.visible_message("[user] has touched [H.name] with [src]!", \ "[user] has touched [H.name] with [src]!") @@ -465,7 +465,7 @@ to_chat(user, "This unit is only designed to work on humanoid lifeforms.") return else - if(user.a_intent == I_HARM && !safety) + if(user.a_intent == INTENT_HARM && !safety) busy = 1 H.visible_message("[user] has touched [H.name] with [src]!", \ "[user] has touched [H.name] with [src]!") diff --git a/code/game/objects/items/weapons/highlander_swords.dm b/code/game/objects/items/weapons/highlander_swords.dm new file mode 100644 index 00000000000..22686b90c96 --- /dev/null +++ b/code/game/objects/items/weapons/highlander_swords.dm @@ -0,0 +1,50 @@ + +//Highlander Style Martial Art +// Prevents use of guns, but makes the highlander impervious to ranged attacks. Their bravery in battle shields them from the weapons of COWARDS! + +/datum/martial_art/highlander + name = "Highlander Style" + deflection_chance = 100 + no_guns = TRUE + no_guns_message = "You'd never stoop so low as to use the weapon of a COWARD!" + + +//Highlander Claymore +// Grants the wielder the Highlander Style Martial Art + +/obj/item/weapon/claymore/highlander + name = "Highlander Claymore" + desc = "Imbues the wielder with legendary martial prowress and a nigh-unquenchable thirst for glorious battle!" + var/datum/martial_art/highlander/style = new + +/obj/item/weapon/claymore/highlander/Destroy() + if(ishuman(loc)) //just in case it gets destroyed while in someone's possession, such as due to acid or something? + var/mob/living/carbon/human/H = loc + style.remove(H) + QDEL_NULL(style) + return ..() + +/obj/item/weapon/claymore/highlander/equipped(mob/user, slot) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(slot == slot_r_hand || slot == slot_l_hand) + if(H.martial_art && H.martial_art != style) + style.teach(H, 1) + to_chat(H, "THERE CAN ONLY BE ONE!") + else if(H.martial_art && H.martial_art == style) + style.remove(H) + var/obj/item/weapon/claymore/highlander/sword = H.is_in_hands(/obj/item/weapon/claymore/highlander) + if(sword) + //if we have a highlander sword in the other hand, relearn the style from that sword. + sword.style.teach(H, 1) + +/obj/item/weapon/claymore/highlander/dropped(mob/user) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + style.remove(H) + var/obj/item/weapon/claymore/highlander/sword = H.is_in_hands(/obj/item/weapon/claymore/highlander) + if(sword) + //if we have a highlander sword in the other hand, relearn the style from that sword. + sword.style.teach(H, 1) diff --git a/code/game/objects/items/weapons/implants/implant_track.dm b/code/game/objects/items/weapons/implants/implant_track.dm index d0d1159a9c5..e0d44cdefcf 100644 --- a/code/game/objects/items/weapons/implants/implant_track.dm +++ b/code/game/objects/items/weapons/implants/implant_track.dm @@ -30,3 +30,11 @@ circuitry. As a result neurotoxins can cause massive damage.
Implant Specifics:
"} return dat + +/obj/item/weapon/implantcase/track + name = "implant case - 'Tracking'" + desc = "A glass case containing a tracking implant." + +/obj/item/weapon/implantcase/track/New() + imp = new /obj/item/weapon/implant/tracking(src) + ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index c3763f4924e..13bc85999e0 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -40,7 +40,7 @@ if(!istype(M)) return ..() - if(user.a_intent != I_HELP) + if(user.a_intent != INTENT_HELP) if(user.zone_sel.selecting == "head" || user.zone_sel.selecting == "eyes") if((CLUMSY in user.mutations) && prob(50)) M = user diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 5571640f08f..e5bd30fe609 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -20,7 +20,7 @@ toolspeed = 0.75 /obj/item/weapon/scissors/attack(mob/living/carbon/M as mob, mob/user as mob) - if(user.a_intent != "help") + if(user.a_intent != INTENT_HELP) ..() return if(!(M in view(1))) //Adjacency test @@ -101,7 +101,7 @@ var/is_cutting = 0 //to prevent spam clicking this for huge accumulation of losebreath. /obj/item/weapon/scissors/safety/attack(mob/living/carbon/M as mob, mob/user as mob) - if(user.a_intent != "help") + if(user.a_intent != INTENT_HELP) ..() return if(!(M in view(1))) diff --git a/code/game/objects/items/weapons/stock_parts.dm b/code/game/objects/items/weapons/stock_parts.dm index f256c1695cd..29d4d310b5d 100644 --- a/code/game/objects/items/weapons/stock_parts.dm +++ b/code/game/objects/items/weapons/stock_parts.dm @@ -179,7 +179,7 @@ name = "pico-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "pico_mani" - origin_tech = "materials=4;programming=4,engineering=4" + origin_tech = "materials=4;programming=4;engineering=4" rating = 3 materials = list(MAT_METAL=30) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index d721cb46271..9efc5f625a6 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -216,3 +216,13 @@ B.deity_name = "Success" B.icon_state = "greentext" B.item_state = "greentext" + + +/obj/item/weapon/storage/box/syndie_kit/cutouts + name = "Fortified Artistic Box" + +/obj/item/weapon/storage/box/syndie_kit/cutouts/New() + ..() + for(var/i in 1 to 3) + new/obj/item/cardboard_cutout/adaptive(src) + new/obj/item/toy/crayon/spraycan(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 9a01f150ea9..c4c29a9542f 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -118,7 +118,7 @@ var/mob/living/L = M - if(user.a_intent != I_HARM) + if(user.a_intent != INTENT_HARM) if(status) user.do_attack_animation(L) baton_stun(L, user) diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index e55b2451347..3ce0f32d47a 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -46,7 +46,7 @@ return if(!isliving(target)) return - if(user.a_intent == I_HARM) + if(user.a_intent == INTENT_HARM) if(!..()) return if(!isrobot(target)) return else diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 684dbc688a1..7655fba3605 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -46,6 +46,18 @@ /obj/item/stack/sheet/wood, /obj/item/stack/sheet/wood) +/obj/item/weapon/table_parts/wood/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/stack/tile/carpet)) + var/target = /obj/item/weapon/table_parts/fancy + if(istype(W, /obj/item/stack/tile/carpet/black)) + target = /obj/item/weapon/table_parts/fancy/black + var/obj/item/stack/S = W + if(S.use(1)) + new target(get_turf(src)) + qdel(src) + else + . = ..() + /obj/item/weapon/table_parts/glass name = "glass table parts" desc = "fragile!" @@ -57,6 +69,17 @@ /obj/item/stack/sheet/metal, /obj/item/stack/sheet/metal) +/obj/item/weapon/table_parts/fancy + name = "fancy table parts" + desc = "Pretty!" + icon_state = "fancy_tableparts" + result = /obj/structure/table/wood/fancy + +/obj/item/weapon/table_parts/fancy/black + name = "black fancy table parts" + icon_state = "black_fancy_tableparts" + result = /obj/structure/table/wood/fancy/black + /obj/item/weapon/rack_parts name = "rack parts" desc = "Parts of a rack." diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 3460699fbe4..8aabce1eb54 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -155,7 +155,7 @@ src.pixel_y = rand(0, 16) /obj/item/weapon/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user) - if(!istype(M) || user.a_intent == I_HELP) + if(!istype(M) || user.a_intent == INTENT_HELP) return ..() if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head") return ..() @@ -404,7 +404,7 @@ if(!S) return - if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP || S.open == 2) + if(!(S.status & ORGAN_ROBOT) || user.a_intent != INTENT_HELP || S.open == 2) return ..() if(!isOn()) //why wasn't this being checked already? diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 9636e1407b6..f3ab646c952 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -1,10 +1,3 @@ -///////////////// -// NEW DEFINES // -///////////////// - -/client - var/viewingCanvas = 0 //If this is 1, as soon as client /TRIES/ to move the view resets. - /////////// // EASEL // /////////// @@ -140,20 +133,4 @@ var/global/list/globalBlankCanvases[AMT_OF_CANVASES] icon = blank user.visible_message("[user] cleans the canvas.","You clean the canvas.") -//Examine to enlarge -/obj/item/weapon/canvas/examine(mob/user) - ..(user) - if(in_range(user, src) && get_turf(src) && user.client && ishuman(user)) //Let only humans be the robust zoominators. I'm too spooked other mobs trying to use it may get broken huds. - if(src.loc == user || get_turf(src) == get_turf(user)) - to_chat(user, "[src] has to be on the ground to focus on it!") - return - to_chat(user, "You focus on \the [src].") - user.client.screen = list() //This is because screen objects go way past the view bounds we set, therefore not allowing stretch to fit to zoom in properly. - user.client.reset_stretch = winget(user.client, "mapwindow.map", "icon-size") //Remember previous icon-size - user.client.view = 3 //Decrease view - winset(user.client, "mapwindow.map", "icon-size=0") //Enable stretch-to-fit - user.client.viewingCanvas = 1 //Reset everything we just changed as soon as client tries to move - else - to_chat(user, "It is too far away.") - #undef AMT_OF_CANVASES \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 6db9a26fd8d..d5b966c7d98 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -193,6 +193,9 @@ L[tmpname] = R var/desc = input("Please select a telepad.", "RCS") in L E.pad = L[desc] + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 @@ -204,17 +207,22 @@ to_chat(user, "Error: User located in container--aborting for safety.") playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) return + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else E.rand_x = rand(50,200) E.rand_y = rand(50,200) var/L = locate(E.rand_x, E.rand_y, 6) + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [name]...") E.teleporting = 1 @@ -226,11 +234,13 @@ to_chat(user, "Error: User located in container--aborting for safety.") playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) return + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else 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 76b69edc28c..ed2599e91dd 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -327,7 +327,7 @@ new /obj/item/clothing/suit/storage/det_suit(src) new /obj/item/clothing/suit/storage/det_suit/forensics/blue(src) new /obj/item/clothing/suit/storage/det_suit/forensics/red(src) - new /obj/item/clothing/gloves/color/black(src) + new /obj/item/clothing/gloves/color/black/forensics(src) new /obj/item/clothing/head/det_hat(src) new /obj/item/clothing/shoes/brown(src) new /obj/item/weapon/storage/box/evidence(src) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 07a738a8c94..010da69a834 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -102,6 +102,9 @@ L[tmpname] = R var/desc = input("Please select a telepad.", "RCS") in L E.pad = L[desc] + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 @@ -109,17 +112,23 @@ E.teleporting = 0 return E.teleporting = 0 + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return + else E.rand_x = rand(50,200) E.rand_y = rand(50,200) var/L = locate(E.rand_x, E.rand_y, 6) + if(!Adjacent(user)) + to_chat(user, "Unable to teleport, too far from crate.") + return playsound(E.loc, E.usesound, 50, 1) to_chat(user, "Teleporting [src.name]...") E.teleporting = 1 @@ -127,11 +136,13 @@ E.teleporting = 0 return E.teleporting = 0 + if(!(E.rcell && E.rcell.use(E.chargecost))) + to_chat(user, "Unable to teleport, insufficient charge.") + return var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) - E.rcell.use(E.chargecost) to_chat(user, "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.") return else diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index 104fac7fd69..0fbc7b97879 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -35,6 +35,44 @@ icon_state = "open" layer = SHOWER_OPEN_LAYER +/obj/structure/curtain/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/toy/crayon)) + color = input(user, "Choose Color") as color + else if(isscrewdriver(W)) + if(anchored) + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] unscrews [src] from the floor.", "You start to unscrew [src] from the floor...", "You hear rustling noises.") + if(do_after(user, 50 * W.toolspeed, target = src)) + if(!anchored) + return + anchored = FALSE + to_chat(user, "You unscrew [src] from the floor.") + else + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] screws [src] to the floor.", "You start to screw [src] to the floor...", "You hear rustling noises.") + if(do_after(user, 50 * W.toolspeed, target = src)) + if(anchored) + return + anchored = TRUE + to_chat(user, "You screw [src] to the floor.") + else if(istype(W, /obj/item/weapon/wirecutters)) + if(!anchored) + playsound(loc, W.usesound, 100, 1) + user.visible_message("[user] cuts apart [src].", "You start to cut apart [src].", "You hear cutting.") + if(do_after(user, 50 * W.toolspeed, target = src)) + if(anchored) + return + to_chat(user, "You cut apart [src].") + deconstruct() + else + . = ..() + +/obj/structure/curtain/proc/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/cloth(loc, 2) + new /obj/item/stack/sheet/plastic(loc, 2) + new /obj/item/stack/rods(loc, 1) + qdel(src) + /obj/structure/curtain/black name = "black curtain" color = "#222222" @@ -59,4 +97,4 @@ color = "#000066" #undef SHOWER_OPEN_LAYER -#undef SHOWER_CLOSED_LAYER \ No newline at end of file +#undef SHOWER_CLOSED_LAYER diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 72638ff0943..858d0e83c6e 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -105,19 +105,21 @@ var/global/list/captain_display_cases = list() var/ue = null var/image/occupant_overlay = null var/obj/item/weapon/airlock_electronics/circuit + var/start_showpiece_type = null //add type for items on display + +/obj/structure/displaycase/New() + . = ..() + if(start_showpiece_type) + occupant = new start_showpiece_type(src) + update_icon() /obj/structure/displaycase/captains_laser name = "captain's display case" desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system." - burglar_alarm = 1 - -/obj/structure/displaycase/captains_laser/New() - captain_display_cases += src - req_access = list(access_captain) + burglar_alarm = 1 locked = 1 - spawn(5) - occupant = new /obj/item/weapon/gun/energy/laser/captain(src) - update_icon() + req_access = list(access_captain) + start_showpiece_type = /obj/item/weapon/gun/energy/laser/captain /obj/structure/displaycase/Destroy() dump() @@ -259,7 +261,7 @@ var/global/list/captain_display_cases = list() if(W.flags & ABSTRACT) to_chat(user, "You can't put this into the case.") return - if(user.a_intent == I_HARM) + if(user.a_intent == INTENT_HARM) if(locked && !destroyed) src.health -= W.force src.healthcheck() @@ -283,14 +285,14 @@ var/global/list/captain_display_cases = list() update_icon() /obj/structure/displaycase/attack_hand(mob/user as mob) - if(destroyed || (!locked && user.a_intent == I_HARM)) + if(destroyed || (!locked && user.a_intent == INTENT_HARM)) if(occupant) dump() to_chat(user, "You smash your fist into the delicate electronics at the bottom of the case, and deactivate the hover field.") src.add_fingerprint(user) update_icon() else - if(user.a_intent == I_HARM) + if(user.a_intent == INTENT_HARM) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) user.visible_message("[user.name] kicks \the [src]!", \ diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 43d08cccee9..b53ca70f9da 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -136,7 +136,7 @@ if(do_after(user, digTool.digspeed * hardness, target = src) && src) to_chat(user, "You finished digging.") deconstruct(TRUE) - else if(user.a_intent != I_HARM) + else if(user.a_intent != INTENT_HARM) attack_hand(user) else attacked_by(W, user) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 55181579699..d6bec1019b2 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -412,6 +412,35 @@ /obj/structure/table/woodentable/poker/narsie_act() return +/* + * Fancy Tables + */ + +/obj/structure/table/wood/fancy + name = "fancy table" + desc = "A standard metal table frame covered with an amazingly fancy, patterned cloth." + icon = 'icons/obj/structures.dmi' + icon_state = "fancy_table" + parts = /obj/item/weapon/table_parts/fancy + canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black) + +/obj/structure/table/wood/fancy/New() + icon = 'icons/obj/smooth_structures/fancy_table.dmi' //so that the tables place correctly in the map editor + ..() + +/obj/structure/table/wood/fancy/black + icon_state = "fancy_table_black" + parts = /obj/item/weapon/table_parts/fancy/black + +/obj/structure/table/wood/fancy/black/New() + ..() + icon = 'icons/obj/smooth_structures/fancy_table_black.dmi' //so that the tables place correctly in the map editor + + +/* + * Glass Tables + */ + /obj/structure/glasstable_frame name = "glass table frame" desc = "A metal frame for a glass table." diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index a43406eb3c7..d3cc48d46bf 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -120,6 +120,15 @@ to_chat(user, "You carefully place [I] into the cistern.") return +/obj/structure/toilet/secret + var/secret_type = null + +/obj/structure/toilet/secret/New() + . = ..() + if(secret_type) + var/obj/item/secret = new secret_type(src) + secret.desc += " It's a secret!" + w_items += secret.w_class /obj/structure/urinal diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 9da30e5fe82..126dd6e3a38 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -133,7 +133,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) user.visible_message("[user] smashes through [src]!") destroy() - else if(user.a_intent == I_HARM) + else if(user.a_intent == INTENT_HARM) user.changeNext_move(CLICK_CD_MELEE) playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1) user.visible_message("[user.name] bangs against the [src.name]!", \ diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 94dc68b51f2..f4d281cdf68 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -145,6 +145,11 @@ burnt = 1 update_icon() +/turf/simulated/floor/carpet/black + icon = 'icons/turf/floors/carpet_black.dmi' + floor_tile = /obj/item/stack/tile/carpet/black + canSmoothWith = list(/turf/simulated/floor/carpet/black) + /turf/simulated/floor/fakespace icon = 'icons/turf/space.dmi' icon_state = "0" @@ -153,4 +158,4 @@ /turf/simulated/floor/fakespace/New() ..() - icon_state = "[rand(0,25)]" \ No newline at end of file + icon_state = "[rand(0,25)]" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 6853baf0755..d7de6dd6844 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -101,7 +101,9 @@ var/global/nologevent = 0

[check_rights(R_ADMIN,0) ? "Traitor panel | " : "" ] Narrate to | - Subtle message + Subtle message | + Bless | + Smite "} if(M.client) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index d6a5ede9ed8..4c9194d1225 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -229,7 +229,8 @@ var/list/admin_verbs_snpc = list( verbs += /client/proc/togglebuildmodeself if(holder.rights & R_ADMIN) verbs += admin_verbs_admin - control_freak = 0 + spawn(1) + control_freak = 0 if(holder.rights & R_BAN) verbs += admin_verbs_ban if(holder.rights & R_EVENT) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 605c4acd1f3..b43001f3abc 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1546,7 +1546,7 @@ to_chat(X, take_msg) else if(is_mhelp && check_rights(R_MOD|R_MENTOR, 0, X.mob)) to_chat(X, take_msg) - to_chat(M, "Your question is being attended to by [key_name(usr.client)]. Thanks for your patience!") + to_chat(M, "Your question is being attended to by [key_name(usr.client, null, 0)]. Thanks for your patience!") else to_chat(usr, "Unable to locate mob.") @@ -1790,9 +1790,15 @@ H = M ptypes += "Brain Damage" ptypes += "Honk Tumor" + ptypes += "Hallucinate" + ptypes += "Cold" + ptypes += "Hunger" ptypes += "Cluwne" ptypes += "Mutagen Cookie" ptypes += "Hellwater Cookie" + ptypes += "Assassin" + ptypes += "Priest" + ptypes += "Lynch" var/punishment = input(owner, "How would you like to smite [M]?", "Its good to be baaaad...", "") as null|anything in ptypes if(!(punishment in ptypes)) return @@ -1820,6 +1826,15 @@ to_chat(H, "Life seems funnier, somehow.") organ.insert(H) logmsg = "a honk tumor." + if("Hallucinate") + H.Hallucinate(1000) + logmsg = "hallucinations." + if("Hunger") + H.nutrition = NUTRITION_LEVEL_CURSED + logmsg = "starvation." + if("Cold") + H.reagents.add_reagent("frostoil", 40) + H.reagents.add_reagent("ice", 40) if("Cluwne") H.makeCluwne() logmsg = "cluwned." @@ -1828,6 +1843,7 @@ evilcookie.reagents.add_reagent("mutagen", 10) evilcookie.desc = "It has a faint green glow." evilcookie.bitesize = 100 + evilcookie.flags = NODROP H.drop_l_hand() H.equip_to_slot_or_del(evilcookie, slot_l_hand) logmsg = "a mutagen cookie." @@ -1836,9 +1852,92 @@ evilcookie.reagents.add_reagent("hell_water", 25) evilcookie.desc = "Sulphur-flavored." evilcookie.bitesize = 100 + evilcookie.flags = NODROP H.drop_l_hand() H.equip_to_slot_or_del(evilcookie, slot_l_hand) logmsg = "a hellwater cookie." + if("Priest") + logmsg = "priest." + H.mutations |= NOCLONE + message_admins("[key_name_admin(owner)] is sending a dark priest to assassinate [key_name_admin(M)]...") + var/list/candidates = pollCandidates("Do you want to play as a murderous dark priest?") + if(!candidates.len) + to_chat(usr, "ERROR: Could not create priest. No valid candidates.") + return + var/mob/C = pick(candidates) + var/key_of_priest = C.key + if(!key_of_priest) + to_chat(usr, "ERROR: Could not create priest. Could not pick key.") + return + var/datum/mind/priest_mind = new /datum/mind(key_of_priest) + priest_mind.active = 1 + var/mob/living/carbon/human/priest_mob = new /mob/living/carbon/human(pick(latejoin)) + priest_mind.transfer_to(priest_mob) + var/datum/outfit/admin/dark_priest/O = new /datum/outfit/admin/dark_priest + priest_mob.equipOutfit(O, FALSE) + var/obj/item/weapon/pinpointer/advpinpointer/N = new /obj/item/weapon/pinpointer/advpinpointer(priest_mob) + priest_mob.equip_to_slot_or_del(N, slot_r_store) + N.active = 1 + N.mode = 2 + N.target = H + N.point_at(N.target) + N.flags |= NODROP + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = priest_mind + kill_objective.target = H.mind + kill_objective.explanation_text = "Murder [H.real_name], the [H.mind.assigned_role], in the name of the dark gods." + priest_mind.objectives += kill_objective + ticker.mode.traitors |= priest_mob.mind + to_chat(priest_mob, "ATTENTION: You are now a dark priest!") + to_chat(priest_mob, "Goal: MURDER [H.real_name], currently in [get_area(H.loc)], in the name of the dark gods. "); + to_chat(priest_mob, "The gods will prevent their revival."); + priest_mob.mind.special_role = SPECIAL_ROLE_TRAITOR + var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR] + tatorhud.join_hud(priest_mob) + ticker.mode.set_antag_hud(priest_mob, "hudsyndicate") + if("Assassin") + logmsg = "assassin." + var/list/possible_traitors = list() + for(var/mob/living/player in living_mob_list) + if(player.client && player.mind && !player.mind.special_role && player.stat != DEAD && player != H) + if(ishuman(player)) + if(player.client && (ROLE_TRAITOR in player.client.prefs.be_special) && !jobban_isbanned(player, ROLE_TRAITOR) && !jobban_isbanned(player, "Syndicate")) + possible_traitors += player.mind + for(var/datum/mind/player in possible_traitors) + if(player.current) + if(ismindshielded(player.current)) + possible_traitors -= player + if(possible_traitors.len) + var/datum/mind/newtraitormind = pick(possible_traitors) + var/mob/living/newtraitor = newtraitormind.current + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = newtraitormind + kill_objective.target = H.mind + kill_objective.explanation_text = "Assassinate [H.real_name], the [H.mind.assigned_role]." + newtraitormind.objectives += kill_objective + ticker.mode.equip_traitor(newtraitor) + ticker.mode.traitors |= newtraitor.mind + to_chat(newtraitor, "ATTENTION: It is time to pay your debt to the Syndicate...") + to_chat(newtraitor, "You are now a traitor.") + to_chat(newtraitor, "Goal: KILL [H.real_name], currently in [get_area(H.loc)]"); + newtraitor.mind.special_role = SPECIAL_ROLE_TRAITOR + var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR] + tatorhud.join_hud(newtraitor) + ticker.mode.set_antag_hud(newtraitor, "hudsyndicate") + else + to_chat(usr, "ERROR: Failed to create a traitor.") + return + if("Lynch") + logmsg = "lynch." + for(var/datum/mind/crew in ticker.minds) + if(!crew.current) + continue + if(!isliving(crew.current)) + continue + if(crew == H.mind) + continue + to_chat(crew.current, "
The gods have given you a task: find [H.real_name], located in [get_area(H.loc)], and slay them!"); + to_chat(crew.current, "Do not harm anyone other than [H.real_name] while carrying out this task.
"); if("Gib") logmsg = "gibbed." M.gib(FALSE) diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 9bfe544cef5..79914745e79 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -37,7 +37,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear) H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) + H.equip_to_slot_or_del(new /obj/item/weapon/claymore/highlander(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(H.loc), slot_l_store) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 7436d27a608..e22923fa965 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -101,7 +101,7 @@ if(armed) if(ishuman(AM)) var/mob/living/carbon/H = AM - if(H.m_intent == "run") + if(H.m_intent == MOVE_INTENT_RUN) triggered(H) H.visible_message("[H] accidentally steps on [src].", \ "You accidentally step on [src]") diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index d547a9a582f..ca3d17e9c50 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -76,8 +76,6 @@ "off" = "borgmacro") ) - var/reset_stretch = 0 //Used by things that fiddle with client's stretch-to-fit. - var/topic_debugging = 0 //if set to true, allows client to see nanoUI errors -- yes i realize this is messy but it'll make live testing infinitely easier control_freak = CONTROL_FREAK_ALL | CONTROL_FREAK_SKIN | CONTROL_FREAK_MACROS @@ -93,7 +91,7 @@ // Donator stuff. var/donator_level = DONATOR_LEVEL_NONE - + // If set to true, this client can interact with atoms such as buttons and doors on top of regular machinery interaction var/advanced_admin_interaction = FALSE diff --git a/code/modules/client/view.dm b/code/modules/client/view.dm new file mode 100644 index 00000000000..f4e74e203e8 --- /dev/null +++ b/code/modules/client/view.dm @@ -0,0 +1,90 @@ +/* + * ViewMods Client module + * This should be used by anything that wants to change a client's view range. + * Also includes + */ + +/* Defines */ +#define CUSTOM_VIEWRANGES list(1, 2, 3, 4, 5, 6, "RESET") + +/* Viewmods */ +/client + var/list/ViewMods = list() + var/ViewModsActive = FALSE + var/ViewPreferedIconSize = 0 + +/client/proc/AddViewMod(id, size) + var/datum/viewmod/V = new /datum/viewmod(id, size) + ViewMods[V.id] = V + UpdateView() + +/client/proc/CheckViewMod(id) + . = 0 + if(ViewMods[id]) + . = 1 + +/client/proc/RemoveViewMod(id) + if(CheckViewMod(id)) + qdel(ViewMods[id]) + ViewMods.Remove(id) + UpdateView() + +/client/proc/UpdateView() + if(!ViewModsActive) + ViewPreferedIconSize = winget(src, "mapwindow.map", "icon-size") + + var/highest_range = 0 + for(var/mod_id in ViewMods) + var/datum/viewmod/V = ViewMods[mod_id] + highest_range = max(highest_range, V.size) + + SetView(highest_range ? highest_range : world.view) + ViewModsActive = (highest_range > 0) + +/client/proc/SetView(view_range) + if(view_range == world.view) + winset(src, "mapwindow.map", "icon-size=[ViewPreferedIconSize]") + else + winset(src, "mapwindow.map", "icon-size=0") + + view = view_range + + if(mob && mob.hud_used) + // If view range is less than world.view, assume the HUD will not fit under normal mode and turn it to reduced + if(view_range < world.view) + // If it's really tiny, turn their hud off completely + if(view_range <= ARBITRARY_VIEWRANGE_NOHUD) + mob.hud_used.show_hud(HUD_STYLE_NOHUD) + else + mob.hud_used.show_hud(HUD_STYLE_REDUCED) + else + mob.hud_used.show_hud(HUD_STYLE_STANDARD) + +/* Viewmod datums */ +/datum/viewmod + var/id = "" + var/size = -1 + +/datum/viewmod/New(new_id, new_size = world.view) + . = ..() + id = new_id + size = new_size + +/* Client verbs */ +/proc/viewNum_to_text(view) + return "[(view * 2) + 1]x[(view * 2) + 1]" + +/client/verb/set_view_range(view_range as null|anything in CUSTOM_VIEWRANGES) + set name = "Set View Range" + set category = "Preferences" + + if(!view_range) + return + + RemoveViewMod("custom") + if(view_range == "RESET") + to_chat(src, "View range reset.") + return + + to_chat(src, "View range set to [viewNum_to_text(view_range)]") + AddViewMod("custom", view_range) \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 2142d336fac..3d11f40b1c9 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -421,7 +421,7 @@ BLIND // can't see anything if(!istype(H) || !istype(T)) return 0 - if(H.m_intent == "run") + if(H.m_intent == MOVE_INTENT_RUN) if(shoe_sound_footstep >= 2) if(T.shoe_running_volume) playsound(src, shoe_sound, T.shoe_running_volume, 1) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index ee5022a1793..69588148b9d 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -17,6 +17,13 @@ icon_state = "black" item_state = "r_hands" + +/obj/item/clothing/gloves/color/black/forensics + name = "forensics gloves" + desc = "These high-tech gloves don't leave any material traces on objects they touch. Perfect for leaving crime scenes undisturbed...both before and after the crime." + icon_state = "forensics" + can_leave_fibers = FALSE + /obj/item/clothing/gloves/combat desc = "These tactical gloves are somewhat fire and impact resistant." name = "combat gloves" @@ -82,7 +89,7 @@ return FALSE if(cell) var/mob/living/carbon/human/H = loc - if(H.a_intent == I_HARM) + if(H.a_intent == INTENT_HARM) var/mob/living/carbon/C = A if(cell.use(stun_cost)) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread @@ -124,4 +131,4 @@ to_chat(user, "You cut [cell] away from [src].") cell.forceMove(get_turf(loc)) cell = null - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 4c53d9c3c8d..69098f54138 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -60,7 +60,7 @@ if(istype(user.get_active_hand(),/obj) && istype(user.get_inactive_hand(),/obj)) to_chat(user, "You need an empty hand to draw the [holstered]!") else - if(user.a_intent == I_HARM) + if(user.a_intent == INTENT_HARM) usr.visible_message("[user] draws the [holstered], ready to shoot!", \ "You draw the [holstered], ready to shoot!") else diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index ae964af74a8..6f266c121e1 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -307,9 +307,26 @@ /obj/item/weapon/bikehorn) category = CAT_MISC +/datum/crafting_recipe/blackcarpet + name = "Black Carpet" + result = /obj/item/stack/tile/carpet/black + time = 20 + reqs = list(/obj/item/stack/tile/carpet = 1) + tools = list(/obj/item/toy/crayon) + category = CAT_MISC + +/datum/crafting_recipe/showercurtain + name = "Shower Curtains" + result = /obj/structure/curtain + time = 20 + reqs = list(/obj/item/stack/sheet/cloth = 2, + /obj/item/stack/sheet/plastic = 2, + /obj/item/stack/rods = 1) + category = CAT_MISC + /datum/crafting_recipe/bonfire name = "Bonfire" time = 60 reqs = list(/obj/item/weapon/grown/log = 5) result = /obj/structure/bonfire - category = CAT_PRIMAL \ No newline at end of file + category = CAT_PRIMAL diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 9ddb90f7832..1d7ae95427c 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -30,7 +30,7 @@ usesound = 'sound/items/Welder2.ogg' /obj/item/device/fluff/tattoo_gun/attack(mob/living/carbon/M as mob, mob/user as mob) - if(user.a_intent == "harm") + if(user.a_intent == INTENT_HARM) user.visible_message("[user] stabs [M] with the [src]!", "You stab [M] with the [src]!") to_chat(M, "[user] stabs you with the [src]!
You feel a tiny prick!") return @@ -360,6 +360,68 @@ return to_chat(user, "You can't modify [target]!") +/obj/item/device/fluff/lighty_plasman_modkit // LightFire53: Ikelos + name = "plasmaman suit modkit" + desc = "A kit containing nanites that are able to modify the look of a plasmaman suit and helmet without exposing the wearer to hostile environments." + icon_state = "modkit" + w_class = 2 + force = 0 + throwforce = 0 + var/picked_color = null + var/list/helmets = list( + "Blue" = "plasmaman_ikelosdefault_helmet", + "Gold" = "plasmaman_ikelosgold_helmet", + "Red" = "plasmaman_ikelossecurity_helmet") + var/list/suits = list( + "Blue" = "plasmaman_ikelosdefault", + "Gold" = "plasmaman_ikelosgold", + "Red" = "plasmaman_ikelossecurity") + +/obj/item/device/fluff/lighty_plasman_modkit/afterattack(atom/target, mob/user, proximity) + if(!proximity || !ishuman(user) || user.incapacitated()) + return + var/mob/living/carbon/human/H = user + + if(istype(target, /obj/item/clothing/head/helmet/space/eva/plasmaman)) + if(used & USED_MOD_HELM) + to_chat(H, "The kit's helmet modifier has already been used.") + return + + picked_color = input(H, "Which color would you like to paint [target]?", "Recolor") as null|anything in helmets + var/obj/item/clothing/head/helmet/space/eva/plasmaman/P = target + + if(!picked_color) + return + P.icon_state = helmets[picked_color] + "[P.on]" + P.base_state = helmets[picked_color] + + to_chat(H, "You modify the appearance of [target].") + P.icon = 'icons/obj/custom_items.dmi' + used |= USED_MOD_HELM + + if(P == H.head) + H.update_inv_head() + return + if(istype(target, /obj/item/clothing/suit/space/eva/plasmaman)) + if(used & USED_MOD_SUIT) + to_chat(user, "The kit's suit modifier has already been used.") + return + picked_color = input(H, "Which color would you like to paint [target]?", "Recolor") as null|anything in suits + var/obj/item/clothing/suit/space/eva/plasmaman/P = target + + if(!picked_color) + return + P.icon_state = suits[picked_color] + + to_chat(H, "You modify the appearance of [target].") + P.icon = 'icons/obj/custom_items.dmi' + used |= USED_MOD_SUIT + + if(P == H.wear_suit) + H.update_inv_wear_suit() + return + to_chat(user, "You can't modify [target]!") + #undef USED_MOD_HELM #undef USED_MOD_SUIT @@ -706,6 +768,16 @@ item_state = "castile_dress" item_color = "castile_dress" +/obj/item/clothing/under/fluff/xantholne //Xantholne: Meex Zwichsnicrur + name = "Stripped Shorts and Shirt" + desc = "A silky pair of dark shorts with a matching shirt. The shirt's collar has a tag on the inside that reads 'Meexy' on it." + icon = 'icons/obj/custom_items.dmi' + lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' + righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' + icon_state = "xantholne" + item_state = "xantholne" + item_color = "xantholne" + /obj/item/clothing/under/fluff/elishirt // FlattestGuitar9: Eli Randolph name = "casual dress shirt" desc = "A soft, white dress shirt paired up with black suit pants. The set looks comfortable." diff --git a/code/modules/detective_work/detective_work.dm b/code/modules/detective_work/detective_work.dm index 01267f2fb08..dd22a439c19 100644 --- a/code/modules/detective_work/detective_work.dm +++ b/code/modules/detective_work/detective_work.dm @@ -16,33 +16,33 @@ atom/proc/add_fibers(mob/living/carbon/human/M) var/item_multiplier = istype(src,/obj/item)?1.2:1 if(M.wear_suit) fibertext = "Material from \a [M.wear_suit]." - if(prob(10*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(10*item_multiplier) && !(fibertext in suit_fibers) && M.wear_suit.can_leave_fibers) //log_to_dd("Added fibertext: [fibertext]") suit_fibers += fibertext if(!(M.wear_suit.body_parts_covered & UPPER_TORSO)) if(M.w_uniform) fibertext = "Fibers from \a [M.w_uniform]." - if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed. + if(prob(12*item_multiplier) && !(fibertext in suit_fibers) && M.w_uniform.can_leave_fibers) //Wearing a suit means less of the uniform exposed. //log_to_dd("Added fibertext: [fibertext]") suit_fibers += fibertext if(!(M.wear_suit.body_parts_covered & HANDS)) if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers) //log_to_dd("Added fibertext: [fibertext]") suit_fibers += fibertext else if(M.w_uniform) fibertext = "Fibers from \a [M.w_uniform]." - if(prob(15*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(15*item_multiplier) && !(fibertext in suit_fibers) && M.w_uniform.can_leave_fibers) // "Added fibertext: [fibertext]" suit_fibers += fibertext if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers) //log_to_dd("Added fibertext: [fibertext]") suit_fibers += "Material from a pair of [M.gloves.name]." else if(M.gloves) fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) + if(prob(20*item_multiplier) && !(fibertext in suit_fibers) && M.gloves.can_leave_fibers) //log_to_dd("Added fibertext: [fibertext]") - suit_fibers += "Material from a pair of [M.gloves.name]." \ No newline at end of file + suit_fibers += "Material from a pair of [M.gloves.name]." diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index 45967dc8ac7..85ec9f292c4 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -513,7 +513,7 @@ /obj/machinery/fishtank/attack_animal(mob/living/simple_animal/M as mob) if(istype(M, /mob/living/simple_animal/pet/cat)) - if(M.a_intent == I_HELP) //Cats can try to fish in open tanks on help intent + if(M.a_intent == INTENT_HELP) //Cats can try to fish in open tanks on help intent if(lid_switch) //Can't fish in a closed tank. Fishbowls are ALWAYS open. M.visible_message("[M.name] stares at into \the [src] while sitting perfectly still.", "The lid is closed, so you stare into \the [src] intently.") else @@ -535,7 +535,7 @@ else attack_generic(M, M.harm_intent_damage) else if(istype(M, /mob/living/simple_animal/hostile/bear)) - if(M.a_intent == I_HELP) //Bears can try to fish in open tanks on help intent + if(M.a_intent == INTENT_HELP) //Bears can try to fish in open tanks on help intent if(lid_switch) //Can't fish in a closed tank. Fishbowls are ALWAYS open. M.visible_message("[M.name] scrapes it's claws along \the [src]'s lid.", "The lid is closed, so you scrape your claws against \the [src]'s lid.") else @@ -555,7 +555,7 @@ else if(M.melee_damage_upper > 0) //If the simple_animal has a melee_damage_upper defined, use that for the damage attack_generic(M, M.melee_damage_upper) - else if(M.a_intent == I_HARM) //Let any simple_animal try to break tanks when on harm intent + else if(M.a_intent == INTENT_HARM) //Let any simple_animal try to break tanks when on harm intent if(M.harm_intent_damage <= 0) return //If it doesn't do damage, don't bother with the attack attack_generic(M, M.harm_intent_damage) check_health() @@ -575,7 +575,7 @@ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) user.visible_message("[user] smashes through [src]!") destroy() - else if(usr.a_intent == I_HARM) + else if(usr.a_intent == INTENT_HARM) user.changeNext_move(CLICK_CD_MELEE) playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1) usr.visible_message("[usr.name] bangs against the [src.name]!", \ @@ -611,7 +611,7 @@ //Welders repair damaged tanks on help intent, damage on all others if(istype(O, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = O - if(user.a_intent == I_HELP) + if(user.a_intent == INTENT_HELP) if(W.isOn()) if(cur_health < max_health) playsound(loc, W.usesound, 50, 1) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index e1a517caaf3..011a4ffacde 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -47,7 +47,7 @@ if(!target) return - if(user.a_intent != I_HARM || !isGlass) + if(user.a_intent != INTENT_HARM || !isGlass) return ..() force = 15 //Smashing bottles over someoen's head hurts. diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index 89deed5dedd..267b80aed20 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -32,7 +32,7 @@ if(canopened == 0) to_chat(user, "You need to open the drink!") return - else if(M == user && !reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head") + else if(M == user && !reagents.total_volume && user.a_intent == INTENT_HARM && user.zone_sel.selecting == "head") user.visible_message("[user] crushes ["\the [src]"] on \his forehead!", "You crush \the [src] on your forehead.") crush(user) return diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index deac3c6660d..b9bb541f77a 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -68,7 +68,7 @@ return /obj/machinery/biogenerator/attackby(obj/item/O, mob/user, params) - if(user.a_intent == I_HARM) + if(user.a_intent == INTENT_HARM) return ..() if(processing) diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 7f2c3587349..f5137d5743b 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -102,7 +102,7 @@ to_chat(user, "You add [O] to [name].") updateUsrDialog() return - else if(user.a_intent != I_HARM) + else if(user.a_intent != INTENT_HARM) to_chat(user, "You can't extract any seeds from \the [O.name]!") else return ..() diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 3f1705f4651..075b3a14d9d 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -7,6 +7,8 @@ var/datum/martial_art/base = null // The permanent style var/deflection_chance = 0 //Chance to deflect projectiles var/help_verb = null + var/no_guns = FALSE //set to TRUE to prevent users of this style from using guns (sleeping carp, highlander). They can still pick them up, but not fire them. + var/no_guns_message = "" //message to tell the style user if they try and use a gun while no_guns = TRUE (DISHONORABRU!) /datum/martial_art/proc/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) return 0 @@ -207,7 +209,7 @@ to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate.") return switch(user.a_intent) - if("disarm") + if(INTENT_DISARM) if(!wielded) return ..() if(!ishuman(target)) diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index 960844a063a..c6af4679552 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -8,6 +8,8 @@ name = "The Sleeping Carp" deflection_chance = 100 help_verb = /mob/living/carbon/human/proc/sleeping_carp_help + no_guns = TRUE + no_guns_message = "Use of ranged weaponry would bring dishonor to the clan." /datum/martial_art/the_sleeping_carp/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(findtext(streak,WRIST_WRENCH_COMBO)) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 96735d1a078..7852fe0edd8 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -333,8 +333,28 @@ new /obj/effect/effect/harmless_smoke(get_turf(src)) qdel(src) +/obj/item/weapon/survivalcapsule/luxury + name = "luxury bluespace shelter capsule" + desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace." + origin_tech = "engineering=3;bluespace=4" + template_id = "shelter_beta" + //Pod turfs and objects +//Window +/obj/structure/window/reinforced/survival_pod + name = "pod window" + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "pwindow" + +// This override can be removed whenever we get rid of the stupid fucking `dir = 9` = full tile!!!! shit +/obj/structure/window/reinforced/survival_pod/CanPass(atom/movable/mover, turf/target, height=0) + if(istype(mover) && mover.checkpass(PASSGLASS)) + return 1 + if(get_dir(loc, target) == dir) + return !density + else + return 1 //Floors /turf/simulated/floor/pod @@ -364,6 +384,12 @@ base_icon_state = "survival_pod" glass_type = "/survival_pod" +//Windoor +/obj/machinery/door/window/survival_pod + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "windoor" + base_state = "windoor" + //Table /obj/structure/table/survival_pod icon = 'icons/obj/lavaland/survival_pod.dmi' @@ -536,3 +562,31 @@ new /obj/item/stack/rods(loc) qdel(src) return ..() + +/obj/item/fakeartefact + name = "expensive forgery" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + var/possible = list(/obj/item/ship_in_a_bottle, + /obj/item/weapon/gun/energy/pulse, + /obj/item/weapon/sleeping_carp_scroll, + /obj/item/weapon/shield/changeling, + /obj/item/weapon/lava_staff, + /obj/item/weapon/katana/energy, + /obj/item/weapon/storage/toolbox/green/memetic, + /obj/item/weapon/gun/projectile/automatic/l6_saw, + /obj/item/weapon/gun/magic/staff/chaos, + /obj/item/weapon/gun/magic/staff/spellblade, + /obj/item/weapon/gun/magic/wand/death, + /obj/item/weapon/gun/magic/wand/fireball, + /obj/item/stack/telecrystal, + /obj/item/weapon/banhammer) + +/obj/item/fakeartefact/New() + . = ..() + var/obj/item/I = pick(possible) + name = initial(I.name) + icon = initial(I.icon) + desc = initial(I.desc) + icon_state = initial(I.icon_state) + item_state = initial(I.item_state) diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 575fbf3b5b6..a1e7e775e23 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -11,7 +11,7 @@ status_flags = CANSTUN|CANWEAKEN|CANPUSH mouse_opacity = 1 faction = list("neutral") - a_intent = I_HARM + a_intent = INTENT_HARM 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 wander = 0 @@ -93,7 +93,7 @@ return /mob/living/simple_animal/hostile/mining_drone/attack_hand(mob/living/carbon/human/M) - if(M.a_intent == I_HELP) + if(M.a_intent == INTENT_HELP) toggle_mode() switch(mode) if(MINEDRONE_COLLECT) diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm index 38750b12d19..2389470e7f5 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -40,3 +40,17 @@ /datum/map_template/shelter/alpha/New() . = ..() whitelisted_turfs = typecacheof(/turf/simulated/mineral) + +/datum/map_template/shelter/beta + name = "Shelter Beta" + shelter_id = "shelter_beta" + description = "An extremly luxurious shelter, containing all \ + the amenities of home, including carpeted floors, hot and cold \ + running water, a gourmet three course meal, cooking facilities, \ + and a deluxe companion to keep you from getting lonely during \ + an ash storm." + mappath = "_maps/map_files/templates/shelter_2.dmm" + +/datum/map_template/shelter/beta/New() + . = ..() + whitelisted_turfs = typecacheof(/turf/simulated/mineral) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 568033f3606..062e1f4d44e 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -168,6 +168,7 @@ /mob/proc/hear_sleep(var/message) var/heard = "" if(prob(15)) + message = strip_html_properly(message) var/list/punctuation = list(",", "!", ".", ";", "?") var/list/messages = splittext(message, " ") var/R = rand(1, messages.len) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index b5fa736dfc3..eef224e8378 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -273,7 +273,7 @@ Des: Removes all infected images from the alien. if(T.footstep_sounds["xeno"]) var/S = pick(T.footstep_sounds["xeno"]) if(S) - if(m_intent == "run") + if(m_intent == MOVE_INTENT_RUN) if(!(step_count % 2)) //every other turf makes a sound return 0 @@ -281,7 +281,7 @@ Des: Removes all infected images from the alien. range -= 0.666 //-(7 - 2) = (-5) = -5 | -5 - (0.666) = -5.666 | (7 + -5.666) = 1.334 | 1.334 * 3 = 4.002 | range(4.002) = range(4) var/volume = 5 - if(m_intent == "walk") + if(m_intent == MOVE_INTENT_WALK) return 0 //silent when walking if(buckled || lying || throwing) diff --git a/code/modules/mob/living/carbon/alien/alien_defenses.dm b/code/modules/mob/living/carbon/alien/alien_defenses.dm index 65e32e2fae9..fef2e469848 100644 --- a/code/modules/mob/living/carbon/alien/alien_defenses.dm +++ b/code/modules/mob/living/carbon/alien/alien_defenses.dm @@ -15,7 +15,7 @@ In all, this is a lot like the monkey code. /N return switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) AdjustSleeping(-5) resting = 0 AdjustParalysis(-3) @@ -23,7 +23,7 @@ In all, this is a lot like the monkey code. /N AdjustWeakened(-3) visible_message("[M.name] nuzzles [src] trying to wake it up!") - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) return 1 @@ -50,11 +50,11 @@ In all, this is a lot like the monkey code. /N return 0 //this is horrible but 100% necessary switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) help_shake_act(M) - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) - if(I_HARM, I_DISARM) + if(INTENT_HARM, INTENT_DISARM) return 1 return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 3782806db33..ddac1cc18e9 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -40,7 +40,7 @@ /mob/living/carbon/alien/humanoid/hunter/handle_environment() - if(m_intent == "run" || resting) + if(m_intent == MOVE_INTENT_RUN || resting) ..() else adjustPlasma(-heal_rate) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index fff315c90e3..d37d83e8215 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -160,13 +160,13 @@ switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) help_shake_act(M) - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) - if(I_HARM) + if(INTENT_HARM) M.do_attack_animation(src) var/damage = rand(1, 9) if(prob(90)) @@ -191,7 +191,7 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to punch [src]!") - if(I_DISARM) + if(INTENT_DISARM) if(!lying) if(prob(5))//Very small chance to push an alien down. Paralyse(2) diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 0d6545d0a0f..f1bcfc0eeaf 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -33,7 +33,7 @@ else if(lying || resting) icon_state = "alien[caste]_sleep" - else if(m_intent == "run") + else if(m_intent == MOVE_INTENT_RUN) icon_state = "alien[caste]_running" else icon_state = "alien[caste]_s" diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index df00e862b38..305f8ad45a9 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -127,10 +127,10 @@ switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) help_shake_act(M) - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) else diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 141d760287a..2ef62eae6e9 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -34,9 +34,9 @@ if(.) if(nutrition && stat != DEAD) nutrition -= hunger_drain / 10 - if(m_intent == "run") + if(m_intent == MOVE_INTENT_RUN) nutrition -= hunger_drain / 10 - if((FAT in mutations) && m_intent == "run" && bodytemperature <= 360) + if((FAT in mutations) && m_intent == MOVE_INTENT_RUN && bodytemperature <= 360) bodytemperature += 2 // Moving around increases germ_level faster @@ -936,7 +936,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, /mob/living/carbon/proc/slip(var/description, var/stun, var/weaken, var/tilesSlipped, var/walkSafely, var/slipAny) - if(flying || buckled || (walkSafely && m_intent == "walk")) + if(flying || buckled || (walkSafely && m_intent == MOVE_INTENT_WALK)) return 0 if((lying) && (!(tilesSlipped))) return 0 diff --git a/code/modules/mob/living/carbon/carbon_defenses.dm b/code/modules/mob/living/carbon/carbon_defenses.dm index 1c911a3f661..c5c1e4917e4 100644 --- a/code/modules/mob/living/carbon/carbon_defenses.dm +++ b/code/modules/mob/living/carbon/carbon_defenses.dm @@ -20,7 +20,7 @@ /mob/living/carbon/attackby(obj/item/I, mob/user, params) if(lying) if(surgeries.len) - if(user != src && user.a_intent == "help") + if(user != src && user.a_intent == INTENT_HELP) for(var/datum/surgery/S in surgeries) if(S.next_step(user, src)) return 1 @@ -37,4 +37,4 @@ for(var/datum/disease/D in user.viruses) if(D.IsSpreadByTouch()) ContractDisease(D) - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 000a7a52bd0..ba55801c522 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -335,7 +335,7 @@ /mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L as mob) switch(L.a_intent) - if(I_HELP) + if(INTENT_HELP) visible_message("[L] rubs its head against [src].") @@ -1985,8 +1985,8 @@ to_chat(src, "Your fingers don't fit in the trigger guard!") return 0 - if(martial_art && martial_art.name == "The Sleeping Carp") //great dishonor to famiry - to_chat(src, "Use of ranged weaponry would bring dishonor to the clan.") + if(martial_art && martial_art.no_guns) //great dishonor to famiry + to_chat(src, "[martial_art.no_guns_message]") return 0 return . diff --git a/code/modules/mob/living/carbon/human/human_attackalien.dm b/code/modules/mob/living/carbon/human/human_attackalien.dm index 015c73455ba..7c4039789a9 100644 --- a/code/modules/mob/living/carbon/human/human_attackalien.dm +++ b/code/modules/mob/living/carbon/human/human_attackalien.dm @@ -4,13 +4,13 @@ return 0 switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) visible_message("[M] caresses [src] with its scythe like arm.") - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) - if(I_HARM) + if(INTENT_HARM) M.do_attack_animation(src) if(w_uniform) w_uniform.add_fingerprint(M) @@ -33,7 +33,7 @@ apply_effect(4, WEAKEN, armor_block) updatehealth() - if(I_DISARM) + if(INTENT_DISARM) M.do_attack_animation(src) if(prob(80)) var/obj/item/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting)) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index b0d2fb3e315..59c8f3efa63 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -18,7 +18,7 @@ ..() - if((M != src) && M.a_intent != "help" && check_shields(0, M.name, attack_type = UNARMED_ATTACK)) + if((M != src) && M.a_intent != INTENT_HELP && check_shields(0, M.name, attack_type = UNARMED_ATTACK)) add_logs(M, src, "attempted to touch") visible_message("[M] attempted to touch [src]!") return 0 @@ -53,7 +53,7 @@ species.handle_attack_hand(src,M) switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) if(attacker_style && attacker_style.help_act(H, src))//adminfu only... return 1 if(can_operate(src)) @@ -99,14 +99,14 @@ else to_chat(M, "You need to stay still while performing CPR!") - if(I_GRAB) + if(INTENT_GRAB) if(attacker_style && attacker_style.grab_act(H, src)) return 1 else src.grabbedby(M) return 1 - if(I_HARM) + if(INTENT_HARM) //Vampire code if(M.mind && M.mind.vampire && (M.mind in ticker.mode.vampires) && !M.mind.vampire.draining && M.zone_sel && M.zone_sel.selecting == "head" && src != M) if(species && species.flags & NO_BLOOD)//why this hell were we never checkinf for this? @@ -168,7 +168,7 @@ forcesay(hit_appends) - if(I_DISARM) + if(INTENT_DISARM) if(attacker_style && attacker_style.disarm_act(H, src)) return 1 else diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 585ac587ffc..bbe57fa66f9 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -191,7 +191,7 @@ emp_act /mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone) if(!I || !user) return 0 - if((istype(I, /obj/item/weapon/kitchen/knife/butcher/meatcleaver) || istype(I, /obj/item/weapon/twohanded/chainsaw)) && src.stat == DEAD && user.a_intent == I_HARM) + if((istype(I, /obj/item/weapon/kitchen/knife/butcher/meatcleaver) || istype(I, /obj/item/weapon/twohanded/chainsaw)) && src.stat == DEAD && user.a_intent == INTENT_HARM) var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/weapon/reagent_containers/food/snacks/meat/human(get_turf(src.loc)) newmeat.name = src.real_name + newmeat.name newmeat.subjectname = src.real_name @@ -378,7 +378,7 @@ emp_act if(penetrated_dam) SS.create_breaches(damtype, penetrated_dam) /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) - if(M.occupant.a_intent == I_HARM) + if(M.occupant.a_intent == INTENT_HARM) if(M.damtype == "brute") step_away(src,M,15) var/obj/item/organ/external/affecting = get_organ(pick("chest", "chest", "chest", "head")) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 87176a7a02a..85dd6e81f3c 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -47,12 +47,12 @@ if(T.footstep_sounds["human"]) var/S = pick(T.footstep_sounds["human"]) if(S) - if(m_intent == "run") + if(m_intent == MOVE_INTENT_RUN) if(!(step_count % 2)) //every other turf makes a sound return 0 var/range = -(world.view - 2) - if(m_intent == "walk") + if(m_intent == MOVE_INTENT_WALK) range -= 0.333 if(!shoes) range -= 0.333 @@ -65,7 +65,7 @@ //-(7 - 2) = (-5) = -5 | -5 - (0.333 * 2) = -5.666 | (7 + -5.666) = 1.334 | 1.334 * 3 = 4.002 | range(4.002) = range(4) var/volume = 13 - if(m_intent == "walk") + if(m_intent == MOVE_INTENT_WALK) volume -= 4 if(!shoes) volume -= 4 @@ -91,4 +91,4 @@ playsound(T, S, volume, 1, range) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/mob/living/carbon/human/interactive/functions.dm b/code/modules/mob/living/carbon/human/interactive/functions.dm index ad4d8226c4a..eb7b767dc94 100644 --- a/code/modules/mob/living/carbon/human/interactive/functions.dm +++ b/code/modules/mob/living/carbon/human/interactive/functions.dm @@ -638,7 +638,7 @@ if(canmove) if((graytide || (TRAITS & TRAIT_MEAN)) || retal) interest += targetInterestShift - a_intent = "harm" + a_intent = INTENT_HARM zone_sel.selecting = pick("chest","r_leg","l_leg","r_arm","l_arm","head") doing |= SNPC_FIGHTING if(retal) @@ -746,7 +746,7 @@ tryWalk(TARGET) else if(Adjacent(TARGET)) - a_intent = pick("disarm", "harm") + a_intent = pick(INTENT_DISARM, INTENT_HARM) M.attack_hand(src) timeout++ else if(timeout >= 10 || !(targetRange(M) > 14)) diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm index 9f27956b764..00b8e0a4544 100644 --- a/code/modules/mob/living/carbon/human/interactive/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm @@ -431,7 +431,7 @@ var/mob/living/M = target if(istype(M)) if(health > 0) - if(M.a_intent == "help" && !incapacitated()) + if(M.a_intent == INTENT_HELP && !incapacitated()) chatter() if(istype(target, /mob/living/carbon) && !retal && prob(SNPC_FUZZY_CHANCE_LOW)) var/mob/living/carbon/C = target @@ -439,7 +439,7 @@ tryWalk(target) else C.help_shake_act(src) - if(M.a_intent == "harm") + if(M.a_intent == INTENT_HARM) retal = 1 retal_target = target @@ -658,7 +658,7 @@ if(grabbed_by.len > 0) for(var/obj/item/weapon/grab/G in grabbed_by) if(Adjacent(G)) - a_intent = "disarm" + a_intent = INTENT_DISARM G.assailant.attack_hand(src) inactivity_period = 10 diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm index 4fcedc1844a..7fee37a17c2 100644 --- a/code/modules/mob/living/carbon/human/species/apollo.dm +++ b/code/modules/mob/living/carbon/human/species/apollo.dm @@ -58,7 +58,7 @@ /datum/species/wryn/handle_attack_hand(var/mob/living/carbon/human/H, var/mob/living/carbon/human/M) var/obj/item/organ/external/head/head_organ = H.get_organ("head") - if(M.a_intent == I_HARM) + if(M.a_intent == INTENT_HARM) if(H.handcuffed) if(!H.get_int_organ(/obj/item/organ/internal/wryn/hivenode)) return var/turf/p_loc = M.loc diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1cb97bb3e19..9a8a9b91404 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1092,8 +1092,8 @@ var/global/list/damage_icon_parts = list() if(legcuffed) overlays_standing[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1") throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) - if(m_intent != "walk") - m_intent = "walk" + if(m_intent != MOVE_INTENT_WALK) + m_intent = MOVE_INTENT_WALK if(hud_used && hud_used.move_intent) hud_used.move_intent.icon_state = "walking" diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 85fed33c156..94ae7482437 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -241,7 +241,7 @@ switch(L.a_intent) - if(I_HELP) + if(INTENT_HELP) visible_message("[L] rubs its head against [src].") @@ -322,7 +322,7 @@ return else if(stat == DEAD && surgeries.len) - if(M.a_intent == I_HELP) + if(M.a_intent == INTENT_HELP) for(var/datum/surgery/S in surgeries) if(S.next_step(M, src)) return 1 @@ -343,10 +343,10 @@ switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) help_shake_act(M) - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) else @@ -393,10 +393,10 @@ return switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) visible_message("[M] caresses [src] with its scythe like arm.") - if(I_HARM) + if(INTENT_HARM) M.do_attack_animation(src) if(prob(95)) attacked += 10 @@ -416,10 +416,10 @@ visible_message("[M] has attempted to lunge at [name]!", \ "[M] has attempted to lunge at [name]!") - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) - if(I_DISARM) + if(INTENT_DISARM) M.do_attack_animation(src) playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) var/damage = 5 @@ -460,7 +460,7 @@ /mob/living/carbon/slime/attackby(obj/item/W, mob/user, params) if(stat == DEAD && surgeries.len) - if(user.a_intent == I_HELP) + if(user.a_intent == INTENT_HELP) for(var/datum/surgery/S in surgeries) if(S.next_step(user, src)) return 1 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 06b6440f756..90003c12e65 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -60,10 +60,10 @@ if(!M.buckled && !M.has_buckled_mobs()) var/mob_swap //the puller can always swap with it's victim if on grab intent - if(M.pulledby == src && a_intent == I_GRAB) + if(M.pulledby == src && a_intent == INTENT_GRAB) mob_swap = 1 //restrained people act if they were on 'help' intent to prevent a person being pulled from being seperated from their puller - else if((M.restrained() || M.a_intent == I_HELP) && (restrained() || a_intent == I_HELP)) + else if((M.restrained() || M.a_intent == INTENT_HELP) && (restrained() || a_intent == INTENT_HELP)) mob_swap = 1 if(mob_swap) //switch our position with M @@ -176,7 +176,7 @@ return 0 var/obj/item/hand_item = get_active_hand() if(istype(hand_item, /obj/item/weapon/gun) && A != hand_item) - if(a_intent == I_HELP || !ismob(A)) + if(a_intent == INTENT_HELP || !ismob(A)) visible_message("[src] points to [A] with [hand_item]") return 1 A.visible_message("[src] points [hand_item] at [A]!", @@ -937,11 +937,11 @@ . += config.run_speed else switch(m_intent) - if("run") + if(MOVE_INTENT_RUN) if(drowsyness > 0) . += 6 . += config.run_speed - if("walk") + if(MOVE_INTENT_WALK) . += config.walk_speed diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 3aec754eabb..548f1fb357b 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -108,7 +108,7 @@ /mob/living/mech_melee_attack(obj/mecha/M) - if(M.occupant.a_intent == I_HARM) + if(M.occupant.a_intent == INTENT_HARM) if(M.damtype == "brute") step_away(src,M,15) switch(M.damtype) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 06021939ac9..84f731d3669 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -677,7 +677,7 @@ var/list/ai_verbs_default = list( switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) visible_message("[M] caresses [src]'s plating with its scythe like arm.") else //harm diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 3f1799c7c9f..3637b0e10b1 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -246,7 +246,7 @@ switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) for(var/mob/O in viewers(src, null)) if((O.client && !( O.blinded ))) O.show_message(text("[M] caresses [src]'s casing with its scythe like arm."), 1) @@ -508,7 +508,7 @@ /mob/living/silicon/pai/attack_hand(mob/user as mob) if(stat == DEAD) return - if(user.a_intent == I_HELP) + if(user.a_intent == INTENT_HELP) user.visible_message("[user] pets [src].") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) else diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index f9c711b4b17..ba4c616b2f3 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -44,7 +44,7 @@ //Actual picking-up event. /mob/living/silicon/robot/drone/attack_hand(mob/living/carbon/human/M as mob) - if(M.a_intent == I_HELP) + if(M.a_intent == INTENT_HELP) get_scooped(M) ..() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 9d93d0baa77..1f4430c3aea 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -575,7 +575,7 @@ var/list/robot_verbs_default = list( return - if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent == I_HELP) + if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent == INTENT_HELP) if(W == module_active) return if(!getBruteLoss()) @@ -594,7 +594,7 @@ var/list/robot_verbs_default = list( return - else if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == I_HELP && (wiresexposed || istype(src,/mob/living/silicon/robot/drone))) + else if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == INTENT_HELP && (wiresexposed || istype(src,/mob/living/silicon/robot/drone))) if(!getFireLoss()) to_chat(user, "Nothing to fix!") return @@ -818,15 +818,15 @@ var/list/robot_verbs_default = list( switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) for(var/mob/O in viewers(src, null)) if((O.client && !( O.blinded ))) O.show_message(text("[M] caresses [src]'s plating with its scythe like arm."), 1) - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) - if(I_HARM) + if(INTENT_HARM) M.do_attack_animation(src) var/damage = rand(10, 20) if(prob(90)) @@ -842,7 +842,7 @@ var/list/robot_verbs_default = list( visible_message("[M] took a swipe at [src]!", \ "[M] took a swipe at [src]!") - if(I_DISARM) + if(INTENT_DISARM) if(!(lying)) M.do_attack_animation(src) if(prob(85)) @@ -923,7 +923,7 @@ var/list/robot_verbs_default = list( diag_hud_set_borgcell() if(!opened && (!istype(user, /mob/living/silicon))) - if(user.a_intent == I_HELP) + if(user.a_intent == INTENT_HELP) user.visible_message("[user] pets [src]!", \ "You pet [src]!") diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 063fc07badf..899608d0f1a 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -256,7 +256,7 @@ new /obj/effect/decal/cleanable/blood/oil(loc) /mob/living/simple_animal/bot/attack_hand(mob/living/carbon/human/H) - if(H.a_intent == "help") + if(H.a_intent == INTENT_HELP) interact(H) else return ..() @@ -329,7 +329,7 @@ ejectpai(user) else user.changeNext_move(CLICK_CD_MELEE) - if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm") + if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) if(health >= maxHealth) to_chat(user, "[src] does not need a repair!") return diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 8a160d25c4f..37699e820f2 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -161,13 +161,13 @@ Auto Patrol[]"}, mode = BOT_HUNT /mob/living/simple_animal/bot/ed209/attack_hand(mob/living/carbon/human/H) - if(H.a_intent == "harm") + if(H.a_intent == INTENT_HARM) retaliate(H) return ..() /mob/living/simple_animal/bot/ed209/attackby(obj/item/weapon/W, mob/user, params) ..() - if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm") // Any intent but harm will heal, so we shouldn't get angry. + if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry. return if(!istype(W, /obj/item/weapon/screwdriver) && (!target)) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass. if(W.force && W.damtype != STAMINA)//If force is non-zero and damage type isn't stamina. diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index e95d2409921..9f8725067b0 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -18,7 +18,7 @@ health = 50 maxHealth = 50 damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - a_intent = "harm" //No swapping + a_intent = INTENT_HARM //No swapping buckle_lying = 0 mob_size = MOB_SIZE_LARGE radio_channel = "Supply" diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index a77429eb631..46a8ec12f76 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -173,13 +173,13 @@ Auto Patrol: []"}, mode = BOT_HUNT /mob/living/simple_animal/bot/secbot/attack_hand(mob/living/carbon/human/H) - if(H.a_intent == "harm") + if(H.a_intent == INTENT_HARM) retaliate(H) return ..() /mob/living/simple_animal/bot/secbot/attackby(obj/item/weapon/W, mob/user, params) ..() - if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm") // Any intent but harm will heal, so we shouldn't get angry. + if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry. return if(!istype(W, /obj/item/weapon/screwdriver) && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass. retaliate(user) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 54cf810a081..3daacefb108 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -10,7 +10,7 @@ response_harm = "punches" icon_dead = "shade_dead" speed = 0 - a_intent = I_HARM + a_intent = INTENT_HARM stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/weapons/punch1.ogg' diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 95a1d100161..5f977bfd508 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -37,12 +37,85 @@ icon_resting = "cat_rest" gender = FEMALE gold_core_spawnable = CHEM_MOB_SPAWN_INVALID + var/list/family = list() + var/memory_saved = 0 + var/list/children = list() //Actual mob instances of children + var/cats_deployed = 0 + +/mob/living/simple_animal/pet/cat/Runtime/New() + Read_Memory() + ..() + +/mob/living/simple_animal/pet/cat/Runtime/Life() + if(!cats_deployed && ticker.current_state >= GAME_STATE_SETTING_UP) + Deploy_The_Cats() + if(!stat && ticker.current_state == GAME_STATE_FINISHED && !memory_saved) + Write_Memory() + ..() + +/mob/living/simple_animal/pet/cat/Runtime/make_babies() + var/mob/baby = ..() + if(baby) + children += baby + return baby + +/mob/living/simple_animal/pet/cat/Runtime/death() + if(!memory_saved) + Write_Memory(1) + ..() + +/mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory() + var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") + S["family"] >> family + + if(isnull(family)) + family = list() + +/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead) + var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") + family = list() + if(!dead) + for(var/mob/living/simple_animal/pet/cat/kitten/C in children) + if(istype(C,type) || C.stat || !C.z || !C.butcher_results) + continue + if(C.type in family) + family[C.type] += 1 + else + family[C.type] = 1 + S["family"] << family + memory_saved = 1 + +/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats() + cats_deployed = 1 + for(var/cat_type in family) + if(family[cat_type] > 0) + for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS) + new cat_type(loc) + /mob/living/simple_animal/pet/cat/handle_automated_action() ..() + if(prob(1)) + custom_emote(1, pick("stretches out for a belly rub.", "wags its tail.", "lies down.")) + icon_state = "[icon_living]_rest" + resting = 1 + update_canmove() + else if (prob(1)) + custom_emote(1, pick("sits down.", "crouches on its hind legs.", "looks alert.")) + icon_state = "[icon_living]_sit" + resting = 1 + update_canmove() + else if (prob(1)) + if (resting) + custom_emote(1, pick("gets up and meows.", "walks around.", "stops resting.")) + icon_state = "[icon_living]" + resting = 0 + update_canmove() + else + custom_emote(1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat.")) //MICE! - if(eats_mice && loc && isturf(loc) && !incapacitated()) + if(eats_mice && isturf(loc) && !incapacitated()) for(var/mob/living/simple_animal/mouse/M in view(1,src)) if(!M.stat && Adjacent(M)) custom_emote(1, "splats \the [M]!") @@ -50,13 +123,11 @@ movement_target = null stop_automated_movement = 0 break - - //attempt to mate make_babies() /mob/living/simple_animal/pet/cat/handle_automated_movement() ..() - if(eats_mice && !incapacitated()) + if(!stat && !resting && !buckled) turns_since_scan++ if(turns_since_scan > 5) walk_to(src,0) @@ -75,6 +146,7 @@ stop_automated_movement = 1 walk_to(src,movement_target,0,3) + /mob/living/simple_animal/pet/cat/Proc name = "Proc" @@ -102,4 +174,4 @@ gold_core_spawnable = CHEM_MOB_SPAWN_INVALID eats_mice = 0 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 \ No newline at end of file + minbodytemp = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 97702a28027..bf4ac4a1664 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -557,8 +557,8 @@ /mob/living/simple_animal/pet/corgi/attack_hand(mob/living/carbon/human/M) . = ..() switch(M.a_intent) - if(I_HELP) wuv(1,M) - if(I_HARM) wuv(-1,M) + if(INTENT_HELP) wuv(1,M) + if(INTENT_HARM) wuv(-1,M) /mob/living/simple_animal/pet/corgi/proc/wuv(change, mob/M) if(change) diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index e6e9d2f93f1..6bec35b98db 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -51,7 +51,7 @@ /mob/living/simple_animal/diona/attack_hand(mob/living/carbon/human/M) //Let people pick the little buggers up. - if(M.a_intent == I_HELP) + if(M.a_intent == INTENT_HELP) if(M.species && M.species.name == "Diona") to_chat(M, "You feel your being twine with that of [src] as it merges with your biomass.") to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.") 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 840c988dc98..4f3d4588378 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -136,7 +136,7 @@ milk_content = min(50, milk_content+rand(5, 10)) /mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M as mob) - if(!stat && M.a_intent == I_DISARM && icon_state != icon_dead) + if(!stat && M.a_intent == INTENT_DISARM && icon_state != icon_dead) M.visible_message("[M] tips over [src].","You tip over [src].") Weaken(30) icon_state = icon_dead diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index fdcf39dd51b..17740441153 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -77,7 +77,7 @@ client.time_died_as_mouse = world.time /mob/living/simple_animal/mouse/attack_hand(mob/living/carbon/human/M as mob) - if(M.a_intent == I_HELP) + if(M.a_intent == INTENT_HELP) get_scooped(M) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 85e0cba9073..88db29b88a7 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -18,7 +18,7 @@ melee_damage_upper = 25 attacktext = "slashes" speak_emote = list("hisses") - a_intent = I_HARM + a_intent = INTENT_HARM attack_sound = 'sound/weapons/bladeslice.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) unsuitable_atmos_damage = 15 @@ -141,7 +141,7 @@ name = "lusty xenomorph maid" melee_damage_lower = 0 melee_damage_upper = 0 - a_intent = "help" + a_intent = INTENT_HELP friendly = "caresses" environment_smash = 0 icon_state = "maid" diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index b6cda2e0e3c..746c1789e16 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -7,7 +7,7 @@ icon_dead = "null" melee_damage_lower = 5 melee_damage_upper = 5 - a_intent = "harm" + a_intent = INTENT_HARM attacktext = "gores" maxHealth = 100 health = 100 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index a8102b94b94..dba3121f3a7 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -5,7 +5,7 @@ desc = "Attack the weak point for massive damage." health = 1000 maxHealth = 1000 - a_intent = "harm" + a_intent = INTENT_HARM sentience_type = SENTIENCE_BOSS environment_smash = 3 luminosity = 3 @@ -228,4 +228,4 @@ /proc/ClearScore(client/player) world.SetScores(player.ckey, "", global.medal_hub, global.medal_pass) -#undef MEDAL_PREFIX \ No newline at end of file +#undef MEDAL_PREFIX diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm index 3e6d98afd95..bd9c532bb45 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm @@ -19,7 +19,7 @@ melee_damage_upper = 0 attacktext = "barrels into" attack_sound = 'sound/weapons/punch1.ogg' - a_intent = I_HELP + a_intent = INTENT_HELP speak_emote = list("screeches") throw_message = "sinks in slowly, before being pushed out of " status_flags = CANPUSH 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 3298e334bd2..184f7b3ced3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -11,7 +11,7 @@ response_disarm = "shoves" response_harm = "strikes" status_flags = 0 - a_intent = I_HARM + a_intent = INTENT_HARM var/throw_message = "bounces off of" var/icon_aggro = null // for swapping to when we get aggressive see_in_dark = 8 @@ -68,7 +68,7 @@ melee_damage_lower = 12 melee_damage_upper = 12 attacktext = "bites into" - a_intent = I_HARM + a_intent = INTENT_HARM speak_emote = list("chitters") attack_sound = 'sound/weapons/bladeslice.ogg' aggro_vision_range = 9 diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index d7984031052..25311673076 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -138,7 +138,7 @@ /mob/living/simple_animal/hostile/mushroom/attack_hand(mob/living/carbon/human/M as mob) ..() - if(M.a_intent == I_HARM) + if(M.a_intent == INTENT_HARM) Bruise() /mob/living/simple_animal/hostile/mushroom/hitby(atom/movable/AM) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index cce4b32235c..c2ba962e2e0 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -13,7 +13,7 @@ speak = list("HONK", "Honk!", "Welcome to clown planet!") emote_see = list("honks") speak_chance = 1 - a_intent = I_HARM + a_intent = INTENT_HARM maxHealth = 75 health = 75 speed = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index df5b53f5368..d4a88b49e60 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -15,7 +15,7 @@ response_harm = "hits the" speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.") emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity") - a_intent = I_HARM + a_intent = INTENT_HARM stop_automated_movement_when_pulled = 0 health = 300 maxHealth = 300 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm index 5a0798874e4..687e0b7c73a 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/pet.dm @@ -12,7 +12,7 @@ response_help = "pets" emote_hear = list("chitters") maxHealth = 250 - health = 200 + health = 250 harm_intent_damage = 3 melee_damage_lower = 15 melee_damage_upper = 20 diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 30bdb8c95e2..2f639d9e6f7 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -18,7 +18,7 @@ melee_damage_upper = 15 attacktext = "punches" attack_sound = 'sound/weapons/punch1.ogg' - a_intent = I_HARM + a_intent = INTENT_HARM unsuitable_atmos_damage = 15 faction = list("russian") status_flags = CANPUSH diff --git a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm index b1393e84ef9..27bd2f3ee1c 100644 --- a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm +++ b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm @@ -28,7 +28,7 @@ maxbodytemp = 350 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) - a_intent = I_HARM //so they don't get pushed around + a_intent = INTENT_HARM //so they don't get pushed around environment_smash = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 168ed2d441c..6ddb86fd818 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -8,7 +8,7 @@ icon_living = "angel" icon_dead = "angel" gender = NEUTER - a_intent = I_HARM + a_intent = INTENT_HARM response_help = "touches" response_disarm = "pushes" diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 805059f25f7..469631951aa 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -18,7 +18,7 @@ melee_damage_upper = 10 attacktext = "punches" attack_sound = 'sound/weapons/punch1.ogg' - a_intent = I_HARM + a_intent = INTENT_HARM unsuitable_atmos_damage = 15 faction = list("syndicate") check_friendly_fire = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index b4ac6212220..f27891f5965 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -56,7 +56,7 @@ harm_intent_damage = 5 melee_damage_lower = 25 melee_damage_upper = 25 - a_intent = I_HARM + a_intent = INTENT_HARM attack_sound = 'sound/weapons/bladeslice.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) unsuitable_atmos_damage = 0 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 1aa6c82b4a8..72c416e8f23 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -304,12 +304,12 @@ switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) if(health > 0) visible_message(" [M] [response_help] [src].") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - if(I_GRAB) + if(INTENT_GRAB) if(M == src || anchored) return if(!(status_flags & CANPUSH)) @@ -326,7 +326,7 @@ visible_message("[M] has grabbed [src] passively!") playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - if(I_HARM, I_DISARM) + if(INTENT_HARM, INTENT_DISARM) M.do_attack_animation(src) visible_message("[M] [response_harm] [src]!") playsound(loc, "punch", 25, 1, -1) @@ -338,13 +338,13 @@ switch(M.a_intent) - if(I_HELP) + if(INTENT_HELP) visible_message("[M] caresses [src] with its scythe like arm.") - if(I_GRAB) + if(INTENT_GRAB) grabbedby(M) - if(I_HARM, I_DISARM) + if(INTENT_HARM, INTENT_DISARM) M.do_attack_animation(src) var/damage = rand(15, 30) visible_message("[M] has slashed at [src]!", \ @@ -357,7 +357,7 @@ /mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L as mob) switch(L.a_intent) - if(I_HELP) + if(INTENT_HELP) visible_message("[L] rubs its head against [src].") @@ -592,7 +592,7 @@ alone = 0 continue if(alone && partner && children < 3) - new childtype(loc) + return new childtype(loc) /mob/living/simple_animal/say_quote(var/message) var/verb = "says" diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm index 46a05daba98..22b5fb705a9 100644 --- a/code/modules/mob/living/simple_animal/spawner.dm +++ b/code/modules/mob/living/simple_animal/spawner.dm @@ -12,7 +12,7 @@ status_flags = 0 anchored = 1 AIStatus = AI_OFF - a_intent = "harm" + a_intent = INTENT_HARM stop_automated_movement = 1 wander = 0 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) @@ -81,4 +81,4 @@ /mob/living/simple_animal/hostile/spawner/mining/basilisk name = "basilisk den" desc = "A den housing a nest of basilisks, bring a coat." - mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk \ No newline at end of file + mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 2988363ffb9..959913972fa 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -75,8 +75,8 @@ var/overeatduration = 0 // How long this guy is overeating //Carbon var/intent = null//Living var/shakecamera = 0 - var/a_intent = I_HELP//Living - var/m_intent = "run"//Living + var/a_intent = INTENT_HELP//Living + var/m_intent = MOVE_INTENT_RUN//Living var/lastKnownIP = null var/atom/movable/buckled = null//Living var/obj/item/l_hand = null//Living @@ -196,5 +196,5 @@ var/list/permanent_huds = list() var/list/actions = list() - + var/list/progressbars = null //for stacking do_after bars diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index fffd02adf0a..ecc987530ab 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -316,7 +316,7 @@ var/mob/living/carbon/human/affected = affecting var/mob/living/carbon/human/attacker = assailant switch(assailant.a_intent) - if(I_HELP) + if(INTENT_HELP) /*if(force_down) to_chat(assailant, "You no longer pin [affecting] to the ground.") force_down = 0 @@ -324,10 +324,10 @@ //This specific example would allow you to stop pinning people to the floor without moving away from them. return - if(I_GRAB) + if(INTENT_GRAB) return - if(I_HARM) //This checks that the user is on harm intent. + if(INTENT_HARM) //This checks that the user is on harm intent. if(last_hit_zone == "head") //This checks the hitzone the user has selected. In this specific case, they have the head selected. if(affecting.lying) return @@ -368,7 +368,7 @@ //This specific example would allow you to squish people's eyes with a GRAB_NECK. - if(I_DISARM) //This checks that the user is on disarm intent. + if(INTENT_DISARM) //This checks that the user is on disarm intent. /* if(state < GRAB_AGGRESSIVE) to_chat(assailant, "You require a better grab to do this.") return diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 6c443b4aa30..e1a1bdc1d8b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -319,20 +319,20 @@ proc/muffledspeech(phrase) return 0 //converts intent-strings into numbers and back -var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) +var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) /proc/intent_numeric(argument) if(istext(argument)) switch(argument) - if(I_HELP) return 0 - if(I_DISARM) return 1 - if(I_GRAB) return 2 + if(INTENT_HELP) return 0 + if(INTENT_DISARM) return 1 + if(INTENT_GRAB) return 2 else return 3 else switch(argument) - if(0) return I_HELP - if(1) return I_DISARM - if(2) return I_GRAB - else return I_HARM + if(0) return INTENT_HELP + if(1) return INTENT_DISARM + if(2) return INTENT_GRAB + else return INTENT_HARM //change a mob's act-intent. Input the intent as a string such as "help" or use "right"/"left /mob/verb/a_intent_change(input as text) @@ -341,7 +341,7 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) if(ishuman(src) || isalienadult(src) || isbrain(src)) switch(input) - if(I_HELP,I_DISARM,I_GRAB,I_HARM) + if(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) a_intent = input if("right") a_intent = intent_numeric((intent_numeric(a_intent)+1) % 4) @@ -352,14 +352,14 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM) else if(isrobot(src) || islarva(src)) switch(input) - if(I_HELP) - a_intent = I_HELP - if(I_HARM) - a_intent = I_HARM + if(INTENT_HELP) + a_intent = INTENT_HELP + if(INTENT_HARM) + a_intent = INTENT_HARM if("right","left") a_intent = intent_numeric(intent_numeric(a_intent) - 3) if(hud_used && hud_used.action_intent) - if(a_intent == I_HARM) + if(a_intent == INTENT_HARM) hud_used.action_intent.icon_state = "harm" else hud_used.action_intent.icon_state = "help" diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 03ba9618bd4..20e08001754 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -149,14 +149,6 @@ /client/Move(n, direct) - if(viewingCanvas) - view = world.view //Reset the view - winset(src, "mapwindow.map", "icon-size=[src.reset_stretch]") - viewingCanvas = 0 - mob.reset_perspective() - if(mob.hud_used) - mob.hud_used.show_hud(HUD_STYLE_STANDARD) - if(world.time < move_delay) return diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index c21733a7a39..51890a7337f 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -128,7 +128,7 @@ if("Drone") new_xeno = new /mob/living/carbon/alien/humanoid/drone(loc) - new_xeno.a_intent = I_HARM + new_xeno.a_intent = INTENT_HARM new_xeno.key = key to_chat(new_xeno, "You are now an alien.") @@ -187,7 +187,7 @@ qdel(t) var/mob/living/simple_animal/pet/corgi/new_corgi = new /mob/living/simple_animal/pet/corgi (loc) - new_corgi.a_intent = I_HARM + new_corgi.a_intent = INTENT_HARM new_corgi.key = key to_chat(new_corgi, "You are now a Corgi. Yap Yap!") @@ -218,7 +218,7 @@ var/mob/new_mob = new mobpath(src.loc) new_mob.key = key - new_mob.a_intent = I_HARM + new_mob.a_intent = INTENT_HARM to_chat(new_mob, "You suddenly feel more... animalistic.") @@ -235,7 +235,7 @@ var/mob/new_mob = new mobpath(src.loc) new_mob.key = key - new_mob.a_intent = I_HARM + new_mob.a_intent = INTENT_HARM to_chat(new_mob, "You feel more... animalistic") new_mob.update_pipe_vision() diff --git a/code/modules/ninja/martial_art.dm b/code/modules/ninja/martial_art.dm index 35969ab8d5e..1ea05b1073e 100644 --- a/code/modules/ninja/martial_art.dm +++ b/code/modules/ninja/martial_art.dm @@ -162,7 +162,7 @@ if(!istype(A, /mob/living/carbon/human)) // Special moves only work on humans. user.pointed(A) return 0 - if(user.a_intent == "help") // No special move for help intent. + if(user.a_intent == INTENT_HELP) // No special move for help intent. user.pointed(A) return 0 if(!(A in range(1,user))) // Is the target within one tile of us? @@ -173,10 +173,10 @@ var/mob/living/carbon/human/target = A switch(user.a_intent) - if("disarm") + if(INTENT_DISARM) user_martial_art.wrist_wrench(user, target) - if("grab") + if(INTENT_GRAB) user_martial_art.choke_hold(user, target) - if("harm") + if(INTENT_HARM) user_martial_art.palm_strike(user, target) - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b70e847cab4..705e4ad8ed7 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -525,7 +525,7 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( if(!S) return - if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP || S.open == 2) + if(!(S.status & ORGAN_ROBOT) || user.a_intent != INTENT_HELP || S.open == 2) return ..() if(S.burn_dam) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 3f42b4d58ce..323d403d1cb 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -122,6 +122,7 @@ fixture_type = "bulb" sheets_refunded = 1 + // the standard tube light fixture /obj/machinery/light name = "light fixture" @@ -149,6 +150,7 @@ // this is used to calc the probability the light burns out var/rigged = 0 // true if rigged to explode + var/lightmaterials = list(MAT_GLASS=100) //stores the materials the light is made of to stop infinite glass exploit // the smaller bulb light fixture @@ -305,6 +307,7 @@ brightness_range = L.brightness_range brightness_power = L.brightness_power brightness_color = L.brightness_color + lightmaterials = L.materials on = has_power() update() @@ -450,7 +453,7 @@ else if(TK in user.mutations) to_chat(user, "You telekinetically remove the light [fitting].") else - if(user.a_intent == I_DISARM || user.a_intent == I_GRAB) + if(user.a_intent == INTENT_DISARM || user.a_intent == INTENT_GRAB) to_chat(user, "You try to remove the light [fitting], but you burn your hand on it!") var/obj/item/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_hand") @@ -472,6 +475,7 @@ L.brightness_range = brightness_range L.brightness_power = brightness_power L.brightness_color = brightness_color + L.materials = lightmaterials // light item inherits the switchcount, then zero it L.switchcount = switchcount @@ -500,6 +504,7 @@ L.brightness_range = brightness_range L.brightness_power = brightness_power L.brightness_color = brightness_color + L.materials = lightmaterials // light item inherits the switchcount, then zero it L.switchcount = switchcount @@ -596,7 +601,7 @@ var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state var/switchcount = 0 // number of times switched - materials = list(MAT_METAL=60) + materials = list(MAT_GLASS=100) var/rigged = 0 // true if rigged to explode var/brightness_range = 2 //how much light it gives off var/brightness_power = 1 @@ -608,7 +613,6 @@ icon_state = "ltube" base_state = "ltube" item_state = "c_tube" - materials = list(MAT_GLASS=100) brightness_range = 8 /obj/item/weapon/light/tube/large @@ -623,7 +627,6 @@ icon_state = "lbulb" base_state = "lbulb" item_state = "contvapour" - materials = list(MAT_GLASS=100) brightness_range = 5 brightness_color = "#a0a080" @@ -637,7 +640,6 @@ icon_state = "fbulb" base_state = "fbulb" item_state = "egg4" - materials = list(MAT_GLASS=100) brightness_range = 5 // update the icon state and description of the light @@ -694,7 +696,7 @@ if(!proximity) return if(istype(target, /obj/machinery/light)) return - if(user.a_intent != I_HARM) + if(user.a_intent != INTENT_HARM) return shatter() diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm index 0dc2bbb5f76..5f8f8c1b8e4 100644 --- a/code/modules/power/treadmill.dm +++ b/code/modules/power/treadmill.dm @@ -70,11 +70,11 @@ // a reasonable approximation of movement speed var/mob_speed = M.movement_delay() switch(M.m_intent) - if("run") + if(MOVE_INTENT_RUN) if(M.drowsyness > 0) mob_speed += 6 mob_speed += config.run_speed - 1 - if("walk") + if(MOVE_INTENT_WALK) mob_speed += config.walk_speed - 1 mob_speed = BASE_MOVE_DELAY / max(1, BASE_MOVE_DELAY + mob_speed) speed = min(speed + inertia * mob_speed, mob_speed) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 0304f4a48a9..1baac918966 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -117,7 +117,7 @@ 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 - if(!ismob(target) || user.a_intent == "harm") //melee attack + if(!ismob(target) || user.a_intent == INTENT_HARM) //melee attack return if(target == user && user.zone_sel.selecting != "mouth") //so we can't shoot ourselves (unless mouth selected) return @@ -232,7 +232,7 @@ obj/item/weapon/gun/proc/newshot() feedback_add_details("gun_fired","[type]") /obj/item/weapon/gun/attack(mob/M as mob, mob/user) - if(user.a_intent == "harm") //Flogging + if(user.a_intent == INTENT_HARM) //Flogging ..() else return diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index ef7a17fa28a..f5cfede882d 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -218,7 +218,7 @@ /obj/item/weapon/gun/projectile/revolver/russian/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) if(flag) if(!(target in user.contents) && ismob(target)) - if(user.a_intent == "harm") // Flogging action + if(user.a_intent == INTENT_HARM) // Flogging action return if(isliving(user)) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 6cddc1c1b91..01dcbd5228d 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -130,7 +130,7 @@ /obj/item/projectile/beam/instakill/on_hit(atom/target) . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.visible_message("[M] explodes into a shower of gibs!") - M.gib() + if(isliving(target)) + var/mob/living/L = target + L.visible_message("[L] explodes!") + L.gib() \ No newline at end of file diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 6d4976e1d53..ff274a48993 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -243,7 +243,7 @@ proc/wabbajack(mob/living/M) M.create_attack_log("[M.real_name] ([M.ckey]) became [new_mob.real_name].") new_mob.attack_log = M.attack_log - new_mob.a_intent = I_HARM + new_mob.a_intent = INTENT_HARM if(M.mind) M.mind.transfer_to(new_mob) else diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 2714b8d1b16..839ce9c0a8d 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -151,7 +151,7 @@ return 1 if (!is_type_in_list(I, blend_items) && !is_type_in_list(I, juice_items)) - if(user.a_intent == I_HARM) + if(user.a_intent == INTENT_HARM) return ..() else to_chat(user, "Cannot refine into a reagent!") diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 89233789903..241370668e0 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -373,8 +373,8 @@ color = "#FF83A5" /datum/reagent/love/on_mob_life(mob/living/M) - if(M.a_intent == I_HARM) - M.a_intent = I_HELP + if(M.a_intent == INTENT_HARM) + M.a_intent = INTENT_HELP if(prob(8)) var/lovely_phrase = pick("appreciated", "loved", "pretty good", "really nice", "pretty happy with yourself, even though things haven't always gone as well as they could") diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 8896d939e2f..fc3baf62556 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -140,7 +140,7 @@ update_move_direction() to_chat(user, "You rotate [src].") - else if(user.a_intent != "harm") + else if(user.a_intent != INTENT_HARM) if(user.drop_item()) I.forceMove(loc) else diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 42b4151fcf0..7f47b68d76a 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -898,7 +898,7 @@ desc = "Allows for the construction of CH-PD Disabler." id = "mech_laser" build_type = MECHFAB - req_tech = list("combat" = 3, "magnets" = 3) + req_tech = list("combat" = 3) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/disabler materials = list(MAT_METAL=10000) construction_time = 100 @@ -977,7 +977,7 @@ build_type = MECHFAB req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla - materials = list(MAT_METAL = 10000, MAT_GLASS = 10000, MAT_SILVER = 10000) + materials = list(MAT_METAL=20000,MAT_SILVER=8000) construction_time = 100 category = list("Exosuit Equipment") @@ -986,9 +986,9 @@ desc = "Allows for the construction of ZFI Immolation Beam Gun." id = "mech_tesla" build_type = MECHFAB - req_tech = list("combat" = 4, "materials" = 4, "plasmatech" = 2, "magnets" = 3) + req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/immolator - materials = list(MAT_METAL = 4000, MAT_GLASS = 1000, MAT_SILVER = 3000, MAT_PLASMA = 2000) + materials = list(MAT_METAL = 10000, MAT_SILVER = 8000, MAT_PLASMA = 8000) construction_time = 100 category = list("Exosuit Equipment") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index c84c7c4c6c8..66c150f636d 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -394,22 +394,22 @@ build_path = /obj/item/weapon/implantcase category = list("Medical") -/datum/design/implant_freedom - name = "Freedom Implant Case" +/datum/design/implant_chem + name = "Chemical Implant Case" desc = "A glass case containing an implant." - id = "implant_freedom" - req_tech = list("combat" = 6, "biotech" = 5, "magnets" = 3, "syndicate" = 3) + id = "implant_chem" + req_tech = list("materials" = 3, "biotech" = 5,) build_type = PROTOLATHE - materials = list(MAT_METAL = 800, MAT_GLASS = 500, MAT_GOLD = 500) - build_path = /obj/item/weapon/implantcase/freedom + materials = list(MAT_GLASS = 700) + build_path = /obj/item/weapon/implantcase/chem category = list("Medical") -/datum/design/implant_adrenalin - name = "Adrenalin Implant Case" +/datum/design/implant_tracking + name = "Tracking Implant Case" desc = "A glass case containing an implant." - id = "implant_adrenalin" - req_tech = list("biotech" = 6, "combat" = 6, "syndicate" = 6) + id = "implant_tracking" + req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "programming" = 2) build_type = PROTOLATHE - materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_GOLD = 500, MAT_URANIUM = 600, MAT_DIAMOND = 600) - build_path = /obj/item/weapon/implantcase/adrenaline + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/weapon/implantcase/track category = list("Medical") diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 5903035903b..3d459dd08a4 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -263,7 +263,7 @@ timer = world.time priority_announcement.Announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.") for(var/mob/M in player_list) - if(!isnewplayer(M) && !M.client.karma_spent && !M.get_preference(DISABLE_KARMA_REMINDER)) + if(!isnewplayer(M) && !M.client.karma_spent && !(M.client.ckey in karma_spenders) && !M.get_preference(DISABLE_KARMA_REMINDER)) to_chat(M, "You have not yet spent your karma for the round; was there a player worthy of receiving your reward? Look under OOC tab, Award Karma.") if(SHUTTLE_ESCAPE) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index e05c7bc924a..d24853a7948 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -245,6 +245,7 @@ /obj/machinery/teleport/station, /obj/machinery/teleport/hub, /obj/machinery/telepad, + /obj/machinery/telepad_cargo, /obj/machinery/clonepod, /obj/effect/hierophant, /obj/item/device/warp_cube, diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 2a111433948..c5dcf75c69a 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -296,7 +296,7 @@ to_chat(M, mymessage) /obj/spacepod/attackby(obj/item/W as obj, mob/user as mob, params) - if(user.a_intent == I_HARM) + if(user.a_intent == INTENT_HARM) ..() deal_damage(W.force) else @@ -408,7 +408,7 @@ obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment cargo_hold.max_combined_w_class += SPE.storage_mod["w_class"] /obj/spacepod/attack_hand(mob/user as mob) - if(user.a_intent == I_GRAB && unlocked) + if(user.a_intent == INTENT_GRAB && unlocked) var/mob/target if(pilot) target = pilot diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 045e34ea41e..fb52fba69f9 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -327,6 +327,10 @@ var/list/organ_cache = list() /obj/item/organ/proc/replaced(var/mob/living/carbon/human/target) return // Nothing uses this, it is always overridden +// A version of `replaced` that "flattens" the process of insertion, making organs "Plug'n'play" +// (Particularly the heart, which stops beating when removed) +/obj/item/organ/proc/safe_replace(var/mob/living/carbon/human/target) + replaced(target) /obj/item/organ/proc/surgeryize() return @@ -370,4 +374,4 @@ I use this so that this can be made better once the organ overhaul rolls out -- // The only thing the official proc does is //instantiate the list and call this proc dna.deserialize(data["dna"]) - ..() \ No newline at end of file + ..() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 05f06f4b030..071d579b0c0 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -170,6 +170,10 @@ if(!owner) Stop() +/obj/item/organ/internal/heart/safe_replace(mob/living/carbon/human/target) + Restart() + ..() + /obj/item/organ/internal/heart/proc/Stop() beating = 0 update_icon() diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 05486c9046d..e44f20046db 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -305,8 +305,8 @@ var/static/regex/multispin_words = regex("like a record baby") else if((findtext(message, walk_words))) for(var/V in listeners) var/mob/living/L = V - if(L.m_intent != "walk") - L.m_intent = "walk" + if(L.m_intent != MOVE_INTENT_WALK) + L.m_intent = MOVE_INTENT_WALK if(L.hud_used) L.hud_used.move_intent.icon_state = "walking" next_command = world.time + cooldown_meme @@ -315,8 +315,8 @@ var/static/regex/multispin_words = regex("like a record baby") else if((findtext(message, run_words))) for(var/V in listeners) var/mob/living/L = V - if(L.m_intent != "run") - L.m_intent = "run" + if(L.m_intent != MOVE_INTENT_RUN) + L.m_intent = MOVE_INTENT_RUN if(L.hud_used) L.hud_used.move_intent.icon_state = "running" next_command = world.time + cooldown_meme @@ -324,25 +324,25 @@ var/static/regex/multispin_words = regex("like a record baby") //HELP INTENT else if((findtext(message, helpintent_words))) for(var/mob/living/carbon/human/H in listeners) - H.a_intent_change(I_HELP) + H.a_intent_change(INTENT_HELP) next_command = world.time + cooldown_meme //DISARM INTENT else if((findtext(message, disarmintent_words))) for(var/mob/living/carbon/human/H in listeners) - H.a_intent_change(I_DISARM) + H.a_intent_change(INTENT_DISARM) next_command = world.time + cooldown_meme //GRAB INTENT else if((findtext(message, grabintent_words))) for(var/mob/living/carbon/human/H in listeners) - H.a_intent_change(I_GRAB) + H.a_intent_change(INTENT_GRAB) next_command = world.time + cooldown_meme //HARM INTENT else if((findtext(message, harmintent_words))) for(var/mob/living/carbon/human/H in listeners) - H.a_intent_change(I_HARM) + H.a_intent_change(INTENT_HARM) next_command = world.time + cooldown_meme //THROW/CATCH @@ -452,4 +452,4 @@ var/static/regex/multispin_words = regex("like a record baby") next_command = world.time + cooldown_none message_admins("[key_name_admin(owner)] has said '[log_message]' with a Voice of God, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].") - log_game("[key_name(owner)] has said '[log_message]' with a Voice of God, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].") \ No newline at end of file + log_game("[key_name(owner)] has said '[log_message]' with a Voice of God, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 127077a621d..48ee29f3f45 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -90,7 +90,7 @@ if(target_zone == surgery.location) initiate(user, target, target_zone, tool, surgery) return 1//returns 1 so we don't stab the guy in the dick or wherever. - if(isrobot(user) && user.a_intent != I_HARM) //to save asimov borgs a LOT of heartache + if(isrobot(user) && user.a_intent != INTENT_HARM) //to save asimov borgs a LOT of heartache return 1 return 0 diff --git a/html/changelog.html b/html/changelog.html index 9773490ef06..9af10b246e0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,123 @@ -->
+

13 June 2017

+

KasparoVy updated:

+
    +
  • Moves a hidden emergency locker to where it is visible.
  • +
+

Vivalas updated:

+
    +
  • Brig timers will now update the records of those who are imprisoned in their cell, as long as their name is entered correctly.
  • +
  • Sentences and arresting officers are announced over the security channel by brig timers, as well as the names of those who end timers manually.
  • +
+ +

10 June 2017

+

Alffd updated:

+
    +
  • Ports Incoming5643's persistence features for Runtime from TG
  • +
  • Ports additional cat NPC emotes from TG
  • +
+

Citinited updated:

+
    +
  • Disconnecting before the shuttle leaves after having spent karma will no longer prompt you to spend karma.
  • +
+

FalseIncarnate updated:

+
    +
  • Adds Highlander Style, granted to the wielder of Highlander Claymores. This martial art allows you to deflect ranged attacks from the weapons of COWARDS. FOR THE HONOR OF THE HIGHLANDERS!
  • +
  • Highlander now equips combatants with a Highlander claymore instead of a normal claymore. FIGHT ON BROTHERS!
  • +
+ +

09 June 2017

+

Alexshreds updated:

+
    +
  • Taking mhelps no longer gives mhelping players your IC name
  • +
+

FlattyPatty updated:

+
    +
  • Added forensics gloves for the Detective.
  • +
+

Fox McCloud updated:

+
    +
  • Paramedic door is no longer diamond
  • +
  • Fixes the backwards health analyzer sprite
  • +
  • Remove adrenaline and freedom implants from R&D
  • +
  • Added chem and tracking implants to R&D
  • +
+

KasparoVy updated:

+
    +
  • Adds some sanity checking to the RCS.
  • +
  • The cargo shuttle no longer permits RCS telepads.
  • +
+

Kyep updated:

+
    +
  • glowshrooms are now destroyable with two hits from a wirecutter.
  • +
  • New 'department' shuttle, which can be sent by CC instead of the regular evac shuttle.
  • +
  • The gods have grown tired of prayers requesting freebies, and developed some new curses with which to smite those who would treat them like miracle vending machines.
  • +
+

alexkar598 updated:

+
    +
  • Surgury holosign switch has correct icon at roundstart
  • +
+

tigercat2000 updated:

+
    +
  • You can now zoom in with the Set View Range option in your Preferences tab!
  • +
+ +

08 June 2017

+

Alexshreds updated:

+
    +
  • Hyphema and Ocular Restoration are now possible to evolve from viruses
  • +
+ +

07 June 2017

+

Fethas updated:

+
    +
  • adds cardboard cutouts..now you can trick the station into thinkings it shadowlings!
  • +
+

tigercat2000 updated:

+
    +
  • Luxury versions of the bluespace shelter capsule! Currently not obtainable.
  • +
  • Black Carpet can now be crafted using a stack of carpet and a crayon.
  • +
  • Black fancy tables can now be crafted using Black Carpet.
  • +
  • Shower curtains can now be recoloured with crayons, unscrewed from the floor, disassembled with wire cutters, and reassembled using cloth, plastic, and a metal rod.
  • +
+ +

06 June 2017

+

DarkPyrolord updated:

+
    +
  • Plasmamen should be able to become vampires on normal vampire rounds.
  • +
+

Fox McCloud updated:

+
    +
  • adjust the mech tesla, immolator, and disabler techs to bring it in line with the tech refactor
  • +
+

Kyep updated:

+
    +
  • Instagib lasers now work against non-carbon mobs, such as animals and borgs.
  • +
+

imsxz updated:

+
    +
  • Sergeant Araneus now spawns at full HP.
  • +
+ +

04 June 2017

+

Crazylemon64 updated:

+
    +
  • Clone's hearts now start operational
  • +
  • EMP'd clone pods can now be emptied again
  • +
+

FreeStylaLT updated:

+
    +
  • Cell 6 is now connected to the atmos system properly.
  • +
+ +

03 June 2017

+

FlattestGuitar updated:

+
    +
  • PACMAN boards and pico manipulators now have proper research levels
  • +
+

01 June 2017

Alexshreds updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index f11af979a99..441df3d78e7 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4835,3 +4835,83 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscdel: Removes the Autolathe from the RnD Room. - rscdel: Removed the Forensic Scanner from RnD. Cargo can order a Forensics crate now. +2017-06-03: + FlattestGuitar: + - bugfix: PACMAN boards and pico manipulators now have proper research levels +2017-06-04: + Crazylemon64: + - bugfix: Clone's hearts now start operational + - bugfix: EMP'd clone pods can now be emptied again + FreeStylaLT: + - bugfix: Cell 6 is now connected to the atmos system properly. +2017-06-06: + DarkPyrolord: + - bugfix: Plasmamen should be able to become vampires on normal vampire rounds. + Fox McCloud: + - tweak: adjust the mech tesla, immolator, and disabler techs to bring it in line + with the tech refactor + Kyep: + - bugfix: Instagib lasers now work against non-carbon mobs, such as animals and + borgs. + imsxz: + - bugfix: Sergeant Araneus now spawns at full HP. +2017-06-07: + Fethas: + - rscadd: adds cardboard cutouts..now you can trick the station into thinkings it + shadowlings! + tigercat2000: + - rscadd: Luxury versions of the bluespace shelter capsule! Currently not obtainable. + - rscadd: Black Carpet can now be crafted using a stack of carpet and a crayon. + - rscadd: Black fancy tables can now be crafted using Black Carpet. + - rscadd: Shower curtains can now be recoloured with crayons, unscrewed from the + floor, disassembled with wire cutters, and reassembled using cloth, plastic, + and a metal rod. +2017-06-08: + Alexshreds: + - bugfix: Hyphema and Ocular Restoration are now possible to evolve from viruses +2017-06-09: + Alexshreds: + - tweak: Taking mhelps no longer gives mhelping players your IC name + FlattyPatty: + - rscadd: Added forensics gloves for the Detective. + Fox McCloud: + - tweak: Paramedic door is no longer diamond + - bugfix: Fixes the backwards health analyzer sprite + - rscdel: Remove adrenaline and freedom implants from R&D + - rscadd: Added chem and tracking implants to R&D + KasparoVy: + - bugfix: Adds some sanity checking to the RCS. + - bugfix: The cargo shuttle no longer permits RCS telepads. + Kyep: + - rscadd: glowshrooms are now destroyable with two hits from a wirecutter. + - rscadd: New 'department' shuttle, which can be sent by CC instead of the regular + evac shuttle. + - rscadd: The gods have grown tired of prayers requesting freebies, and developed + some new curses with which to smite those who would treat them like miracle + vending machines. + alexkar598: + - bugfix: Surgury holosign switch has correct icon at roundstart + tigercat2000: + - rscadd: You can now zoom in with the Set View Range option in your Preferences + tab! +2017-06-10: + Alffd: + - rscadd: Ports Incoming5643's persistence features for Runtime from TG + - rscadd: Ports additional cat NPC emotes from TG + Citinited: + - bugfix: Disconnecting before the shuttle leaves after having spent karma will + no longer prompt you to spend karma. + FalseIncarnate: + - rscadd: Adds Highlander Style, granted to the wielder of Highlander Claymores. + This martial art allows you to deflect ranged attacks from the weapons of COWARDS. + FOR THE HONOR OF THE HIGHLANDERS! + - tweak: Highlander now equips combatants with a Highlander claymore instead of + a normal claymore. FIGHT ON BROTHERS! +2017-06-13: + KasparoVy: + - bugfix: Moves a hidden emergency locker to where it is visible. + Vivalas: + - rscadd: Brig timers will now update the records of those who are imprisoned in + their cell, as long as their name is entered correctly. + - rscadd: Sentences and arresting officers are announced over the security channel + by brig timers, as well as the names of those who end timers manually. diff --git a/icons/mob/inhands/fluff_lefthand.dmi b/icons/mob/inhands/fluff_lefthand.dmi index 6e6ef4cce20..d7dd45e4227 100644 Binary files a/icons/mob/inhands/fluff_lefthand.dmi and b/icons/mob/inhands/fluff_lefthand.dmi differ diff --git a/icons/mob/inhands/fluff_righthand.dmi b/icons/mob/inhands/fluff_righthand.dmi index 6bdb1530b48..96c023a0f40 100644 Binary files a/icons/mob/inhands/fluff_righthand.dmi and b/icons/mob/inhands/fluff_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 6d0661c8911..08050649225 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 7dc7b163c54..90a218c7166 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/species/plasmaman/helmet.dmi b/icons/mob/species/plasmaman/helmet.dmi index 880e1e7c5eb..125be79a278 100644 Binary files a/icons/mob/species/plasmaman/helmet.dmi and b/icons/mob/species/plasmaman/helmet.dmi differ diff --git a/icons/mob/species/plasmaman/suit.dmi b/icons/mob/species/plasmaman/suit.dmi index fb428adaadc..827146bb24c 100644 Binary files a/icons/mob/species/plasmaman/suit.dmi and b/icons/mob/species/plasmaman/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 3ff998af6b7..f9bb3b2bbec 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/cardboard_cutout.dmi b/icons/obj/cardboard_cutout.dmi new file mode 100644 index 00000000000..da5f58d7f7c Binary files /dev/null and b/icons/obj/cardboard_cutout.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 82ce8437b28..42f1eda0e74 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index b78d7431d15..40d4ef11cc9 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 2735d145ac8..cb535c90165 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/lavaland/survival_pod.dmi b/icons/obj/lavaland/survival_pod.dmi index fae242d524f..a4c207b402c 100644 Binary files a/icons/obj/lavaland/survival_pod.dmi and b/icons/obj/lavaland/survival_pod.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table.dmi b/icons/obj/smooth_structures/fancy_table.dmi new file mode 100644 index 00000000000..a57b165f4ac Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table.dmi differ diff --git a/icons/obj/smooth_structures/fancy_table_black.dmi b/icons/obj/smooth_structures/fancy_table_black.dmi new file mode 100644 index 00000000000..d4570e8a7c1 Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_black.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index 85788316c13..2c7fedf90b3 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index e4fedae838b..67cc9682cf8 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/turf/floors/carpet_black.dmi b/icons/turf/floors/carpet_black.dmi new file mode 100644 index 00000000000..d1174203aa9 Binary files /dev/null and b/icons/turf/floors/carpet_black.dmi differ diff --git a/paradise.dme b/paradise.dme index 869bffe601b..71edb0e003d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -277,6 +277,7 @@ #include "code\datums\diseases\advance\symptoms\stimulant.dm" #include "code\datums\diseases\advance\symptoms\symptoms.dm" #include "code\datums\diseases\advance\symptoms\viral.dm" +#include "code\datums\diseases\advance\symptoms\vision.dm" #include "code\datums\diseases\advance\symptoms\voice_change.dm" #include "code\datums\diseases\advance\symptoms\vomit.dm" #include "code\datums\diseases\advance\symptoms\weakness.dm" @@ -709,6 +710,7 @@ #include "code\game\objects\items\blueprints.dm" #include "code\game\objects\items\bodybag.dm" #include "code\game\objects\items\candle.dm" +#include "code\game\objects\items\cardboard_cutouts.dm" #include "code\game\objects\items\changestone.dm" #include "code\game\objects\items\contraband.dm" #include "code\game\objects\items\control_wand.dm" @@ -804,6 +806,7 @@ #include "code\game\objects\items\weapons\garrote.dm" #include "code\game\objects\items\weapons\gift_wrappaper.dm" #include "code\game\objects\items\weapons\handcuffs.dm" +#include "code\game\objects\items\weapons\highlander_swords.dm" #include "code\game\objects\items\weapons\holosign.dm" #include "code\game\objects\items\weapons\holy_weapons.dm" #include "code\game\objects\items\weapons\kitchen.dm" @@ -1137,6 +1140,7 @@ #include "code\modules\client\client defines.dm" #include "code\modules\client\client procs.dm" #include "code\modules\client\message.dm" +#include "code\modules\client\view.dm" #include "code\modules\client\preference\preferences.dm" #include "code\modules\client\preference\preferences_mysql.dm" #include "code\modules\client\preference\preferences_spawnpoints.dm"