Merge pull request #3 from tgstation/master

merge
This commit is contained in:
KorPhaeron
2015-09-23 19:43:58 -05:00
78 changed files with 1976 additions and 6518 deletions
+3 -2
View File
@@ -610,7 +610,7 @@
"lL" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/escape)
"lM" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/machinery/status_display{pixel_y = 31},/turf/simulated/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
"lN" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/simulated/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape)
"lO" = (/obj/structure/showcase{desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; icon_state = "processor"; name = "byond random number generator"},/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage7"},/area/wizard_station)
"lO" = (/obj/structure/showcase{desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; icon = 'icons/obj/machines/telecomms.dmi'; icon_state = "processor"; name = "byond random number generator"},/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage7"},/area/wizard_station)
"lP" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station)
"lQ" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/cult,/area/wizard_station)
"lR" = (/obj/structure/showcase{desc = "A historical figure of great importance to the wizard federation. He spent his long life learning magic, stealing artifacts, and harassing idiots with swords. May he rest forever, Rodney."; icon = 'icons/mob/mob.dmi'; icon_state = "nim"; name = "wizard of yendor showcase"},/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage4"},/area/wizard_station)
@@ -867,7 +867,7 @@
"qI" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/wizard_station)
"qJ" = (/turf/indestructible/riveted,/area/centcom/holding)
"qK" = (/obj/structure/table/wood,/turf/simulated/floor/plasteel/cult,/area/wizard_station)
"qL" = (/obj/structure/table/wood,/obj/item/weapon/gun/magic/wand{desc = "Used in emergency's to reignite magma engines. This one appears spent."; name = "wand of emergency engine ignition"},/turf/simulated/floor/plasteel/cult,/area/wizard_station)
"qL" = (/obj/structure/table/wood,/obj/item/weapon/gun/magic/wand{desc = "Used in emergencies to reignite magma engines."; max_charges = 0; name = "wand of emergency engine ignition"},/turf/simulated/floor/plasteel/cult,/area/wizard_station)
"qM" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/wizard_station)
"qN" = (/obj/structure/table,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/centcom/holding)
"qO" = (/turf/simulated/floor/plasteel/freezer{dir = 2},/area/centcom/holding)
@@ -1225,3 +1225,4 @@ abababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
"}
@@ -43,7 +43,6 @@
"aaQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "barber"},/area/security/prison)
"aaR" = (/obj/structure/lattice,/obj/structure/sign/securearea{pixel_y = -32},/turf/space,/area/space)
"aaS" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
"aaT" = (/obj/structure/grille,/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space)
"aaU" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison)
"aaV" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/security/prison)
"aaW" = (/obj/structure/table,/obj/item/toy/cards/deck,/turf/simulated/floor/plasteel,/area/security/prison)
@@ -6030,7 +6029,6 @@
"clX" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"clY" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"clZ" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"cma" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space)
"cmb" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cmc" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
"cmd" = (/turf/simulated/wall/r_wall,/area/maintenance/incinerator)
@@ -6652,7 +6650,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaiaaiaaBaaDaaCaaFaaEaataataavaaGaaiaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaiaaIaataataataataaJaataataaLaaKaaiaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaMaaJaataataaOaaNaaJaataaQaaPaaiaafaaRaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaSaaSaaTaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaUaataataataaJaaWaaVaataataaYaaXaaiaaiaaZaaZaaZaaZaaZaaZaaZaaZaaZaaZaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaTaaTaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaUaataataataaJaaWaaVaataataaYaaXaaiaaiaaZaaZaaZaaZaaZaaZaaZaaZaaZaaZaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcabbabeabdabgabfaatabhaataataataataataataavaatabjabiaaZabkabkabkablablabnabmabmaaZabpaboabpaboabpabqabqabrabrabrabqabqaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafabsaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuabtabwabvabyabxaataatabAabzabBaatabDabCabEaatabGabFaaZabHabIabIabKabJabMabLabNaaZabPabOabQabOabRabqabTabSabVabUabWabqaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafabXaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSabYabYabYabYaafaafaaaabZaaaaafaafaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuacaaccacbabyacdaceacdacdacdacfacdacdacdacgacdacdachaaZaciaciabIackacjacmaclacnaaZacoabOacqacpabPabqacsacracuactacvabqaaaaafacwaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaaacxaaaacyaafaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6761,13 +6759,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaaciPaaaaaaaaaciPaaaaaaaaaciPaaaaaaaafcfxcfxcfxciQciSciRcfwbHEbHEbHEbHEbCqaaaaaaaafaaaaaaaafaaaaaaaafaaabCqciTbCqciUciVccwciXciWciZciYcjbcjacgRcgRcgRcjccjecjdcjfcjacfbcjgcjicjhciocjjcfbcjkcjmcjlccwaafcjnaafbOiaafcjnaafbOiaafcjoaafcjoaafaafaaaaaaaaaaafaafcfjcjpcjrcjqcjtcjscjvcjucjxcjwcjzcjyccMbLSccMcjAceJbzsbzsaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabkycjBbMBbkycjCcbfbkyaaaaaaaaaaaabkybtpcbfcjEcjDcjDcjFcjGcjDaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccacjHccbaaaccacjHccbaaaccacjHccbaaaaafaaaaaacfxcfwcfwcfwcfwcjIbLubHEbHEbCqbCqbLvcjJcjJcjJcjJcjJcjJcjJaafbCqbCqbCqcjKcjLccwcjMciZciZciYcjOcjNcjNcjPcjRcjQcjScjScjTcgRcfbcjUcjWcjVcjYcjXcfbcjZcfMckaccwbOhckbbQAckbbOhckbbQAckbbOhckcbQAckdbOhaaaaaaaaaaaaaaaaafckfckecjrckgckickhckkckjcfjcklceJceJceJckmceJceJceJbBRbCqbLvbLvcknaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabkyckobkybkyckpcbfbkybkybZibZibkybkybtpckqckrcjDcktcksckucjDaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaafaaaaaaaaaaaaaagbCqbCqbCqckvbHEbCqckvbJfcjJckwckyckxckyckzcjJaaabCqbSsbHEckAcjLccwckBckBckCccwckEckDckGckFcgUckHckJckIckKckKcfbckLckNckMckPckOckRckQckTckSccwbOhckVckUckWbOhckYckXckZbOhclbclaclcbOhaaaaaaaaaaaaaaaaaacfjcldclfcleclhclgcljclicfjclkclmcllcloclnccMccMccMbAwclpbHEclpcknaaaaaaaafaaabZibZibZibkybkybkybkybkybkyclqbDhbkyclsclrcltcgrcltcltcltcltclvcluclwcjDclyclxclzcjDaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEcgGbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcjLccwckBckBckCccwclHcigclJclIclLclKclJcigclJclJcigclMclOclNckHclPclRclQcgUclSccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhaafaafaafaafcmaaafcfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbLvbLvcknaafaafaafaaabZicmlcmmbkybtpcmncmpcmobkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEcgGbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcjLccwckBckBckCccwclHcigclJclIclLclKclJcigclJclJcigclMclOclNckHclPclRclQcgUclSccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhaafaafaafaafaafaafcfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbLvbLvcknaafaafaafaaabZicmlcmmbkybtpcmncmpcmobkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaaaaafaafaaaaaaaagbCqbCqbCqbCqbHEbCqbCqbCqcjJcmycmAcmzcmBcmycjJaafbCqccwcmDcmCcmEccwckBckCckCccwcmGcmFcmIcmHcgUcmJcmLcmKcmLcmLcmNcmMcmPcmOcmRcmQcmQcmQcmTcmSccwbOhclUcmUclUbOhclWcmVclWbOhclZcmWclZbOhaaaaaaaafaafaaaaaaaaaaaaaaacmXcmdcmYcnacmZcmdbAwcnccnbcbQcndcnebFrcngcnfbCqaaaaaaaaaaaaaaaaafaaabZicnhcnibYrbtpceRbtpbtpbYrciIbtpbkybkybkybkybkybtpbkyaafaaaaaaaaaaafcnjcnjcnkcnjcnjaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcnsccwccwccwccwccwcntcgRcnuckFcgUcgRcgRcgRcnwcnvcnxcgUcgUckFcgRcnycgRcgRcnAcnzccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaaaaafaafaaaaaaaaaaaaaaaaaacnBcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaaaaaaaaaaaaaaaaafaaabZicmlcnHbkycmobtpbtpcnIbkycnJbtpbtpbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaaaSaaaaaaaaaaafaafaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnLcnNcnMcnPcnOcnRcnQcnScnRcnUcnTcnWcnVcnYcnXcoacnZcobcjNcodcoccofcoecohcogcoicogcoicojcolcokcjNcjNcomcjNcooconccwccwccwccwccwcigcigcigcigccwaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaacnBcmdcopcorcoqcosaafbzsceIcotbPnbPnbzsbzsaaaaafaaaaaaaaaaaaaaaaafaafbZibZibZibkybkybkybtpbkybkyckobkybkycmocoubMBbNAbkybkyaafaaaaaaaaaaafaaacnjcnkcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaafaafaaaaaaaafbLvbHEbLvaafaafcjJcovcoxcowcozcoycoBcoAcoCcoBcoEcoDcoGcoFcoIcoHcoJcoHcoLcoKcoNcoMcoPcoOceycoQcoScoRcoScoTcoVcoUcjScoMcoWcjScoYcoXcjScoZcgRcpaccwcpbcigcpccpdcpdcpeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnBcmdcmdcpfcmdcmdaaaaafaaacnBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaabkycnicpgbkycphaafbkybkybZibZibkybkyaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcgRcprckFcgUcpsclJcptckHcpucpwcpvcpvcpvcpycpxcpAcpzcpCcpBcpycpDcpDcnxcgRcnyckHcpEcpGcpFcjNcpHcpIciZcpIcpJcpLcpKcpMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnBaagcmdcpNcmdcpOaafaafaaacpPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaabkycnicmnbkycpQaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRcprcpWcpYcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcqncgUcgRcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacpPaagcqscqtcqsaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabZicqubZibZicmaaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRcprcpWcpYcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcqncgUcgRcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacpPaagcqscqtcqsaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabZicqubZibZiaafaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcqycqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcqGccwcqBcqBcqBcqCccwcqAcigcqIcgUcgRccwccwcigcigcigcigccwaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaafaagaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcqMcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdcmCcgUcrfcjZcrgcgRcrhcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcrlcrmbJebCqcigcrncrncrncrncrncrncrncrncigccwcrpcrocrrcrqcrpccwccwccwcqAccwccwcqYcqYcqYcqYcrscrucrtcrucrvcqYcqYcqYcqYccwccwcqAccwcmCcrwcrycrxcrzcgRcrAcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -6775,13 +6773,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcrUaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacrUcrVcrTccwcrWcrXccwcigcigcrYcigaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaSaaaaaaaaaaafaaaaaaaaacrkaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrZcsbcsaaafaafaafcscaaaaaaaaaaaacscaaaaaacscaafaafaafcsdcsfcseccwcsgcfKcigaafaaacsicshaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcsjaaaaaaaafaaaaaaaaaaaaaaacskaaaaaaaaaaafaaaaaacrUcrUcrTccwaagaagaagaafaaacsmcslcsocsncspcsncsocsncspcsncsocsncspcsncsocsncspcsqcsraaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsscstcrUaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacrUcsvcsuccwaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacsmcswcshcmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaaaaaaaafcscaafaafcszcsycsAaafcsBaaaaafaaaaaacrUcsxccwccwaaaaaaaagaafaafcmaaafaafcmaaafaafaafaafaafaafaafaafaafaafaafaafcmaaafcsCcswcsraafaafcsDcsDcsDcsDcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaafaaaaaaaaacsEaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcsFccwcsGcrUaaaaaaaafaaaaaaaafcsIcsHcsJaafaaaaaaaafaaaaaacrUcsKccwcsFaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagcmaaaaaaacsLcswcshaaacsDcsNcsMcsOcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacpiaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsscstcrUaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacrUcsvcsuccwaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacsmcswcshaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaaaaaaaafcscaafaafcszcsycsAaafcsBaaaaafaaaaaacrUcsxccwccwaaaaaaaagaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcsCcswcsraafaafcsDcsDcsDcsDcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaafaaaaaaaaacsEaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcsFccwcsGcrUaaaaaaaafaaaaaaaafcsIcsHcsJaafaaaaaaaafaaaaaacrUcsKccwcsFaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaafaaaaaacsLcswcshaaacsDcsNcsMcsOcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacpiaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaaaaaaaafaaacsPaafcsRcsQcsSaafaafcscaafaaaaaacrUcsxccwccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaacsUcsTcshcsDcsWcsVcsXcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcsZcsYcsZcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsvcsucrUaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacrUcsscstccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcsUctacsDctcctbctdcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacpiaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcteaaaaaactfaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaacrUcrUcrTccwaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgcthcsDctjctictkcsDctgctgaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaafaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaccwctlcsbcsaaafaafaafcscaaaaaacscaaaaaaaaaaaacscaafctmaafcsdcsfctnccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagcmaaafaafaafaafctgctpctoctrctqcttctsctuctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaacpiaaaaafaafaaSaaSaaSabaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaccwctlcsbcsaaafaafaafcscaaaaaacscaaaaaaaaaaaacscaafctmaafcsdcsfctnccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaafctgctpctoctrctqcttctsctuctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaacpiaaaaafaafaaSaaSaaSabaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUcrUaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacrUcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctwctoctxctbctzctyctActyaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafctBaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUctCaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaactDcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctFctEctHctGctJctIctKctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjZccwccwccwcrUaafaafaafaafaaaaaaaaaaaaaaaaafaafaafaafcrUccwccwccwcjZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctgctgctMctLctNctgctgctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -338,7 +338,6 @@
"gz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"gA" = (/obj/structure/window/fulltile{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
"gB" = (/obj/structure/lattice,/obj/structure/window/fulltile{dir = 1},/turf/space,/area/space)
"gC" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window/fulltile{dir = 1},/turf/space,/area/space)
"gD" = (/turf/simulated/floor/plating,/area/derelict/arrival)
"gE" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel)
"gF" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
@@ -958,7 +957,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYfYfYfYfYfYfYfYfYfYfYfYfYaaaaaaaaaaaaaaaaaaaaaaaadgdfdgaeaefDecevdBdBdBfPdxdxdydbdbdBcIcIaafFfMfmfdfgfgfgfffQfgfdfdfdgcgcbwbwbwfRfOfOfOfOfOfOfSfTfUfVfUfWfXfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYgigigigiggggggggggghgifYaaaaaaaaaaaaaaaaaaaafZaadfdfgaaeaedfgbdBdbdbfadBdBdbdcdddBdBcIcIaafFfFfmfdfdfdfgfdfdfdfdfdfdbwfxbjbjfxfxgdgdgegegffOodfSodfUfUfXfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYfYfYgigKggggggfYfYgEfYfYfYfYfYgjgkgkgkgjglgmgngogjgpaegqaedBdBdbdcdcdcdbdBdBdbdccIcIcIcIaaflfmfffdfgfufffufdfufugrfubjfxfxfxbjfxgegdgfgfgegsfUfUfUfUfUfUfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqfYiPfYfYfYfYfYgPfYgQggghggggggfYgtgtgtgugtolocgngnoeaeaeaeaecIcIdBgydddbdBcIcIcIcIcIcIaeaefFgzfmfffgfgfffFfufugrfufFgAbwbwgBgBgCgBfNfNfNfNfNfNfUfUgDfUfUfUfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqfYiPfYfYfYfYfYgPfYgQggghggggggfYgtgtgtgugtolocgngnoeaeaeaeaecIcIdBgydddbdBcIcIcIcIcIcIaeaefFgzfmfffgfgfffFfufugrfufFgAbwbwgBgBgBgBfNfNfNfNfNfNfUfUgDfUfUfUfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaofomgYgZgYoggYgZgYfYgQgggQgggQggfYgFgtgtgtgtgGgvgwgnohgngnaeaecIcIcIcIdfcIcIcIcIcIcIaeaabjfdhtfmfffffdfgfffffFfkfkfkfkfkaeaeaeaaaaaagHfygHbjcBfNfSfSfUfSgIfUgJfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaofhgojoiokhihhhihhfYgQgggQgggQgggEgtgtgtgtgtgtgvonotgngngnaaaeaecIcIgLhuoDcIcIaeaeaeaaaabjfdfmfmhvfffdfdfdfdfufkfIfxfIgMaaaeaaaaaaaaaaaagHaegMfNgNgNfUgNgOfUfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahooooGhrhshrgZgYgZgYfYgQopgQoqgQggfYorgtgtgtgtoHosgvgwgngngnaaaaaeaecIcIcIcIcIaeaeaaaagSgSgTfdffgUfffgfdfgfufffufkfxgMfxfxaaaeaaaacDaaaaaaaagMaefNfUfUfUfUgVfSodfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+3 -4
View File
@@ -25,7 +25,7 @@
"ay" = (/turf/simulated/floor/plating/airless,/area/space)
"az" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"aA" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/airless,/area/mine/abandoned)
"aB" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space)
"aB" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored)
"aC" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space)
"aD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"aE" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/plasteel/airless,/area/mine/abandoned)
@@ -374,7 +374,6 @@
"hj" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/mine/maintenance)
"hk" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/mine/maintenance)
"hl" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored)
"hm" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored)
"hn" = (/obj/structure/lattice,/turf/space,/area/mine/explored)
"ho" = (/turf/space,/area/mine/unexplored)
"hp" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/bluegrid,/area/mine/maintenance)
@@ -768,7 +767,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarasakajalaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaratauavalalababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababalalalalalalalalalalafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawakaxabababababacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacaeacacacacacacacacacabababayayayayayayayayayayafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalazaAakaxabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababalalalalalaBalalalafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalazaAakaxabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababalalalalalalalalalafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalaCaDaEaFaxabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaaaaaaaaaaaaaafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalaGaHaIaxaJaKaxaxaxaxacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaLaMaraNaOaPagaQaFaxaRaRaxacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -880,7 +879,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacac
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacacacacacacacacacacacacacacabababafafafafafafafafafafafgXgYhaafababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiafafafbGbGbGewewbGafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaabababacacacacacacacacacacacacacacacacacababafbGbGdhdhhbdjdjdjdjdjdjhcgYhaafabababacacacacacacacacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacachdhdhdhdhdhdhdacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiafafafbGbGbGewewbGafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacabafbGbGbGbGgWhehehehehehehehfhghaafababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacachdhhhihjhkhhhdacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiafafafafbGbGewewbGafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacabafbGbGbGdhdhdGdGdGdGdGdGhlgYhmhnhoafafafafabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacachdhhhphqhrhshdacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiafafafafbGbGewewbGafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacabafbGbGbGdhdhdGdGdGdGdGdGhlgYaBhnhoafafafafabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacachdhhhphqhrhshdacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiafafafafbGbGewewbGafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacababafbGbGbGafhohohohohohogXgYhahohohobGbGbGafababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacachthuhvachwhdhdhdhxhdhdhdacacabababaaaaaaaaaaaaaaaaaaaaaaaaafafafafafaiaiafafafafbGbGewewbGafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacabafbGbGafhohohohohohohogXgYhahobGbGbGbGbGafafabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacachyhvhzachwhAhBhwhChwafafabacabababaaaaaaaaaaaaaaaaaaaaaaafafafafafafaiaiafafafafafbGewewbGbGafafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacaeacacacacacacacacababafbGafhohohohohohohohDgYhabGbGbGbGbGbGbGafabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacachtdQachwhEhFhGhChwbGafafababababaaaaaaaaaaaaaaaaaaaaafafafafafafafaiaiafafafafafbGewewbGbGbGbGafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+36 -29
View File
@@ -1,10 +1,26 @@
/atom/var/smooth = 0
//Redefinitions of the diagonal directions so they can be stored in one var without conflicts
#define NORTH_EAST 16
#define NORTH_WEST 32
#define SOUTH_EAST 64
#define SOUTH_WEST 128
#define SMOOTH_FALSE 0 //not smooth
#define SMOOTH_TRUE 1 //smooths with exact specified types or just itself
#define SMOOTH_MORE 2 //smooths with all subtypes of specified types or just itself
/atom/var/smooth = SMOOTH_FALSE
/atom/var/top_left_corner
/atom/var/top_right_corner
/atom/var/bottom_left_corner
/atom/var/bottom_right_corner
/atom/var/can_be_unanchored = 0
/atom/var/list/canSmoothWith=list() // TYPE PATHS I CAN SMOOTH WITH~~~~~
/atom/var/list/canSmoothWith = null // TYPE PATHS I CAN SMOOTH WITH~~~~~ If this is null and atom is smooth, it smooths only with itself
/atom/proc/clear_smooth_overlays()
overlays -= top_left_corner
overlays -= top_right_corner
overlays -= bottom_right_corner
overlays -= bottom_left_corner
//generic (by snowflake) tile smoothing code; smooth your icons with this!
/*
@@ -16,13 +32,10 @@
Each atom has its own icon file with all the possible corner states. See 'smooth_wall.dmi' for a template.
*/
//Redefinitions of the diagonal directions so they can be stored in one var without conflicts
#define NORTH_EAST 16
#define NORTH_WEST 32
#define SOUTH_EAST 64
#define SOUTH_WEST 128
/proc/calculate_adjacencies(atom/A)
if(!A.loc)
return 0
var/adjacencies = 0
if(A.can_be_unanchored)
@@ -45,11 +58,13 @@
return adjacencies
/proc/smooth_icon(atom/A)
if(qdeleted(A))
return
spawn(0) //don't remove this, otherwise smoothing breaks
if(A && A.smooth)
var/adjacencies = calculate_adjacencies(A)
clear_overlays(A)
A.clear_smooth_overlays()
A.top_left_corner = make_nw_corner(adjacencies)
A.top_right_corner = make_ne_corner(adjacencies)
@@ -61,7 +76,6 @@
A.overlays += A.bottom_right_corner
A.overlays += A.bottom_left_corner
/proc/make_nw_corner(adjacencies)
var/sdir = "i"
if((adjacencies & NORTH) && (adjacencies & WEST))
@@ -74,8 +88,6 @@
sdir = "n"
else if(adjacencies & WEST)
sdir = "w"
else
sdir = "i"
return "1-[sdir]"
/proc/make_ne_corner(adjacencies)
@@ -90,8 +102,6 @@
sdir = "n"
else if(adjacencies & EAST)
sdir = "e"
else
sdir = "i"
return "2-[sdir]"
/proc/make_sw_corner(adjacencies)
@@ -106,8 +116,6 @@
sdir = "s"
else if(adjacencies & WEST)
sdir = "w"
else
sdir = "i"
return "3-[sdir]"
/proc/make_se_corner(adjacencies)
@@ -123,8 +131,6 @@
else
if(adjacencies & EAST)
sdir = "e"
else
sdir = "i"
return "4-[sdir]"
/proc/smooth_icon_neighbors(atom/A)
@@ -149,14 +155,21 @@
var/turf/target_turf = locate(source.x + x_offset, source.y + y_offset, source.z)
if(source.canSmoothWith)
var/atom/A
for(var/a_type in source.canSmoothWith)
if(ispath(a_type, /turf))
if(a_type == target_turf.type)
if(source.smooth == SMOOTH_MORE)
for(var/a_type in source.canSmoothWith)
if( istype(target_turf, a_type) )
return target_turf
else
A = locate(a_type) in target_turf
if(A && A.type == a_type)
if(A)
return A
return null
for(var/a_type in source.canSmoothWith)
if(a_type == target_turf.type)
return target_turf
A = locate(a_type) in target_turf
if(A && A.type == a_type)
return A
return null
else
if(isturf(source))
@@ -164,12 +177,6 @@
var/atom/A = locate(source.type) in target_turf
return A && A.type == source.type ? A : null
/proc/clear_overlays(atom/A)
A.overlays -= A.top_left_corner
A.overlays -= A.top_right_corner
A.overlays -= A.bottom_right_corner
A.overlays -= A.bottom_left_corner
/proc/transform_dir(direction)
switch(direction)
if(NORTH,SOUTH,EAST,WEST)
+10
View File
@@ -39,6 +39,16 @@
visible_message("<span class='danger'>[attack_message]</span>",
"<span class='userdanger'>[attack_message]</span>")
if((butcher_results) && (stat == DEAD))
var/sharpness = is_sharp(I)
if(sharpness)
user.changeNext_move(CLICK_CD_MELEE)
user << "<span class='notice'>You begin to butcher [src]...</span>"
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
if(do_mob(user, src, 80/sharpness))
harvest(user)
return
/mob/living/simple_animal/attacked_by(var/obj/item/I, var/mob/living/user)
if(!I.force)
user.visible_message("<span class='warning'>[user] gently taps [src] with [I].</span>",\
@@ -57,33 +57,3 @@ Bonus
return
M.dna.struc_enzymes = archived_dna
M.domutcheck()
/*
//////////////////////////////////////
DNA Aide
Very very very very noticable.
Lowers resistance tremendously.
Decreases stage speed tremendously.
Decreases transmittablity tremendously.
Fatal Level.
Bonus
Cleans the DNA of a person and then randomly gives them a power..
//////////////////////////////////////
*/
/datum/symptom/genetic_mutation/powers
name = "Deoxyribonucleic Acid Aide"
stealth = -7
resistance = -7
stage_speed = -7
transmittable = -7
level = 6
severity = 0
/datum/symptom/genetic_mutation/powers/Start(datum/disease/advance/A)
..()
possible_mutations = good_mutations
+7
View File
@@ -244,6 +244,13 @@ var/list/uplink_items = list()
if(istype(T))
T.TC_cost = cost
/datum/uplink_item/dangerous/guardian
name = "Holoparasites"
desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an organic host as a home base and source of fuel."
item = /obj/item/weapon/storage/box/syndie_kit/guardian
excludefrom = list(/datum/game_mode/nuclear,/datum/game_mode/gang)
cost = 12
// AMMUNITION
/datum/uplink_item/ammo
@@ -316,12 +316,12 @@
genetic_damage = 11
req_human = 1
max_genetic_damage = 20
recharge_slowdown = 0.25
suit_type = /obj/item/clothing/suit/armor/changeling
helmet_type = /obj/item/clothing/head/helmet/changeling
suit_name_simple = "armor"
helmet_name_simple = "helmet"
recharge_slowdown = 0.25
/obj/item/clothing/suit/armor/changeling
name = "chitinous mass"
@@ -329,7 +329,7 @@
icon_state = "lingarmor"
flags = NODROP
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
armor = list(melee = 70, bullet = 50, laser = 70, energy = 50, bomb = 10, bio = 4, rad = 0)
armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 10, bio = 4, rad = 0)
flags_inv = HIDEJUMPSUIT
cold_protection = 0
heat_protection = 0
@@ -347,7 +347,7 @@
desc = "A tough, hard covering of black chitin with transparent chitin in front."
icon_state = "lingarmorhelmet"
flags = BLOCKHAIR | NODROP
armor = list(melee = 60, bullet = 30, laser = 60, energy = 30, bomb = 10, bio = 4, rad = 0)
armor = list(melee = 30, bullet = 30, laser = 40, energy = 20, bomb = 10, bio = 4, rad = 0)
flags_inv = HIDEEARS
flags_cover = HEADCOVERSEYES
+2
View File
@@ -81,6 +81,8 @@ It also contains rune words, which are soon to be removed.
playsound(M, 'sound/weapons/sear.ogg', 50, 1)
M.visible_message("<span class='danger'>[user] strikes [M] with the arcane tome!</span>", \
"<span class='userdanger'>[user] strikes you with the tome, searing your flesh!</span>")
flick("tome_attack", src)
user.do_attack_animation(M)
add_logs(user, M, "smacked", src)
/obj/item/weapon/tome/attack_self(mob/user)
+11 -1
View File
@@ -2,7 +2,7 @@ var/list/doppler_arrays = list()
/obj/machinery/doppler_array
name = "tachyon-doppler array"
desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array."
desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon = 'icons/obj/machines/research.dmi'
icon_state = "tdoppler"
density = 1
@@ -44,6 +44,16 @@ var/list/doppler_arrays = list()
src.dir = turn(src.dir, 90)
return
/obj/machinery/doppler_array/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
/obj/machinery/doppler_array/proc/sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,
took,orig_dev_range,orig_heavy_range,orig_light_range)
if(stat & NOPOWER) return
+9 -2
View File
@@ -877,8 +877,15 @@ var/list/obj/machinery/newscaster/allCasters = list()
var/creationTime
/obj/item/weapon/newspaper/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is focusing intently on [src]! It looks like they're trying to commit sudoku.</span>")
return(OXYLOSS)
user.visible_message("<span class='suicide'>[user] is focusing intently on [src]! It looks like they're trying to commit sudoku... until their eyes light up with realization!</span>")
user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF")
var/mob/living/carbon/human/H = user
var/obj/W = new /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(H.loc)
playsound(H.loc, 'sound/items/drink.ogg', rand(10,50), 1)
W.reagents.trans_to(H, W.reagents.total_volume)
user.visible_message("<span class='suicide'>[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku!</span>")
return(TOXLOSS)
/obj/item/weapon/newspaper/attack_self(mob/user)
if(ishuman(user))
+14
View File
@@ -43,6 +43,10 @@ Buildable meters
PIPE_GAS_MIXER, \
)
/obj/item/pipe/examine(mob/user)
..()
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
/obj/item/pipe/New(loc, pipe_type, dir, obj/machinery/atmospherics/make_from)
..()
if(make_from)
@@ -159,6 +163,16 @@ var/global/list/pipeID2State = list(
return
/obj/item/pipe/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
/obj/item/pipe/Move()
..()
if ((pipe_type in list (PIPE_SIMPLE, PIPE_HE)) && is_bent \
+115 -28
View File
@@ -2,10 +2,14 @@
// SUIT STORAGE UNIT /////////////////
//////////////////////////////////////
#define REPAIR_NEEDS_WIRECUTTERS 1
#define REPAIR_NEEDS_WIRES 2
#define REPAIR_NEEDS_CROWBAR 3
#define REPAIR_NEEDS_METAL 4
/obj/machinery/suit_storage_unit
name = "suit storage unit"
desc = "An industrial U-Stor-It Storage unit designed to accomodate all kinds of space suits. Its on-board equipment also allows the user to decontaminate the contents through a UV-ray purging cycle. There's a warning label dangling from the control pad, reading \"STRICTLY NO BIOLOGICALS IN THE CONFINES OF THE UNIT\"."
desc = "An industrial unit made to hold space suits. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit."
icon = 'icons/obj/suitstorage.dmi'
icon_state = "close"
anchored = 1
@@ -30,9 +34,25 @@
var/ispowered = 1
var/isbroken = 0
var/issuperUV = 0
var/panelopen = 0
var/safetieson = 1
var/cycletime_left = 0
var/repair_stage = 0
/obj/machinery/suit_storage_unit/examine(mob/user)
..()
if(isbroken && isopen)
if(!panel_open)
user << "<span class='warning'>A small LED above the maintenance panel is flashing red.</span>"
return
switch(repair_stage)
if(REPAIR_NEEDS_WIRECUTTERS)
user << "<span class='warning'>The wires inside are charred and snapped.</span>"
if(REPAIR_NEEDS_WIRES)
user << "<span class='warning'>There are no wires inside.</span>"
if(REPAIR_NEEDS_CROWBAR)
user << "<span class='warning'>Some of the interior metal is burnt and broken.</span>"
if(REPAIR_NEEDS_METAL)
user << "<span class='warning'>It lacks interior plating.</span>"
@@ -168,10 +188,10 @@
return
if(stat & NOPOWER)
return
if(src.panelopen) //The maintenance panel is open. Time for some shady stuff
if(src.panel_open) //The maintenance panel is open. Time for some shady stuff
dat+= "<HEAD><TITLE>Suit storage unit: Maintenance panel</TITLE></HEAD>"
dat+= "<B>Maintenance panel controls</B><HR>"
dat+= "The panel is ridden with controls, button and meters, labeled in strange signs and symbols that <BR>you cannot understand. Probably the manufactoring world's language.<BR> Among other things, a few controls catch your eye.<BR><BR>"
dat+= "The panel is ridden with controls, button and meters, labeled in strange signs and symbols that you cannot understand; probably the manufacturing world's language. Among other things, a few controls catch your eye...<BR><BR>"
dat+= text("A small dial with a \"ë\" symbol embroidded on it. It's pointing towards a gauge that reads [].<BR> <A href='?src=\ref[];toggleUV=1'>Turn towards []</A><BR>",(src.issuperUV ? "15nm" : "185nm"),src,(src.issuperUV ? "185nm" : "15nm") )
dat+= text("A thick old-style button, with 2 grimy LED lights next to it. The [] LED is on.<BR><A href='?src=\ref[];togglesafeties=1'>Press button</a>",(src.safetieson? "<font color='green'><B>GREEN</B></font>" : "<font color='red'><B>RED</B></font>"),src)
dat+= text("<HR><BR><A href='?src=\ref[];mach_close=suit_storage_unit'>Close panel</A>", user)
@@ -256,7 +276,7 @@
/obj/machinery/suit_storage_unit/proc/toggleUV(mob/user)
if(!src.panelopen)
if(!src.panel_open)
return
else
@@ -270,7 +290,7 @@
/obj/machinery/suit_storage_unit/proc/togglesafeties(mob/user)
if(!src.panelopen) //Needed check due to bugs
if(!src.panel_open) //Needed check due to bugs
return
else
user << "<span class='notice'>You push the button. The coloured LED next to it changes.</span>"
@@ -323,7 +343,7 @@
/obj/machinery/suit_storage_unit/proc/toggle_lock(mob/user)
if(src.OCCUPANT && src.safetieson)
user << "<span class='warning'>The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.</span>"
user << "<span class='warning'>The unit's safety protocols disallow locking when a biological form is detected inside its compartments.</span>"
return
if(src.isopen)
return
@@ -335,12 +355,12 @@
if(src.isUV || src.isopen) //I'm bored of all these sanity checks
return
if(src.OCCUPANT && src.safetieson)
user << "<font color='red'><B>WARNING:</B> Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.</font>"
user << "<font color='red'><B>WARNING:</B> Biological entity detected in the confines of the unit's storage. Cannot initiate cycle.</font>"
return
if(!src.HELMET && !src.MASK && !src.SUIT && !src.STORAGE && !src.OCCUPANT )
user << "<font color='red'>Unit storage bays empty. Nothing to disinfect -- Aborting.</font>"
return
user << "<span class='notice'>You start the Unit's cauterisation cycle.</span>"
user << "<span class='notice'>You start the unit's cauterisation cycle.</span>"
src.cycletime_left = 20
src.isUV = 1
if(src.OCCUPANT && !src.islocked)
@@ -372,10 +392,11 @@
src.SUIT = null
src.MASK = null
qdel(STORAGE)
visible_message("<font color='red'>With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.</font>", 3)
visible_message("<span class='warning'>With a loud whining noise, [src]'s door grinds open. A foul cloud of smoke emanates from the chamber.</span>")
src.isbroken = 1
src.isopen = 1
src.islocked = 0
repair_stage = REPAIR_NEEDS_WIRECUTTERS
src.eject_occupant(OCCUPANT)
src.isUV = 0 //Cycle ends
src.update_icon()
@@ -397,9 +418,9 @@
if (src.OCCUPANT.client)
if(user != OCCUPANT)
OCCUPANT << "<font color='blue'>The machine kicks you out!</font>"
OCCUPANT << "<span class='warning'>The machine kicks you out!</span>"
if(user.loc != src.loc)
OCCUPANT << "<font color='blue'>You leave the not-so-cozy confines of the SSU.</font>"
OCCUPANT << "<span class='warning'>You leave the not-so-cozy confines of [src].</span>"
src.OCCUPANT.client.eye = src.OCCUPANT.client.mob
src.OCCUPANT.client.perspective = MOB_PERSPECTIVE
@@ -426,7 +447,7 @@
else
isopen = 1
islocked = 0
visible_message("<span class='warning'>[user] successfully broke out of [src]!</span>")
visible_message("<span class='warning'>[user] kicks their way out of [src]!</span>")
else
return
@@ -455,9 +476,9 @@
user << "<span class='warning'>It's too cluttered inside to fit in!</span>"
return
if(M == user)
visible_message("[user] starts squeezing into the suit storage unit!", 3)
visible_message("<span class='warning'>[user] squeezes into [src]!</span>", "<span class='notice'>You squeeze into [src].</span>")
else
visible_message("[user] starts putting [M.name] into the Suit Storage Unit!", 3)
M.visible_message("<span class='warning'>[user] starts putting [M] into [src]!</span>", "<span class='userdanger'>[user] starts shoving you into [src]!</span>")
if(do_mob(user, M, 10))
user.stop_pulling()
if(M.client)
@@ -473,21 +494,83 @@
return
return
/obj/machinery/suit_storage_unit/proc/fix()
audible_message("<span class='notice'>[src] beeps and comes back online!</span>")
playsound(src, 'sound/machines/defib_ready.ogg', 50, 1)
repair_stage = 0
isbroken = 0
update_icon()
/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params)
if(!src.ispowered)
if(istype(I, /obj/item/weapon/crowbar) && !isopen)
if(toggle_open(user))
dump_everything()
user << text("<span class='notice'>You pry \the [src] open.</span>")
user << text("<span class='notice'>You pry open [src]'s doors.</span>")
update_icon()
return
if(istype(I, /obj/item/weapon/screwdriver))
src.panelopen = !src.panelopen
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
user << text("<span class='notice'>You [] the unit's maintenance panel.</span>",(src.panelopen ? "open up" : "close") )
src.panel_open = !src.panel_open
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
user << text("<span class='notice'>You [] the unit's maintenance panel.</span>",(src.panel_open ? "open up" : "close") )
src.updateUsrDialog()
return
if(isbroken && panel_open)
if(istype(I, /obj/item/weapon/wirecutters) && repair_stage == REPAIR_NEEDS_WIRECUTTERS)
user.visible_message("<span class='notice'>[user] starts removing [src]'s damaged wires.</span>", \
"<span class='notice'>You begin removing the damaged wires from [src]...</span>")
playsound(src, 'sound/items/Wirecutter.ogg', 50, 1)
if(!do_after(user, 30, target = src))
return
user.visible_message("<span class='notice'>[user] removes the damaged wires from [src].</span>", \
"<spna class='notice'>You remove the damaged wiring from [src].</span>")
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
repair_stage = REPAIR_NEEDS_WIRES
return
if(istype(I, /obj/item/stack/cable_coil) && repair_stage == REPAIR_NEEDS_WIRES)
var/obj/item/stack/cable_coil/C = I
if(C.amount < 5)
user << "<span class='warning'>You need at least five cables to rewire [src]!</span>"
return
user.visible_message("<span class='notice'>[user] begins replacing [src] wires.</span>", \
"<span class='notice'>You begin rewiring [src]...</span>")
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
if(!do_after(user, 30, target = src))
return
user.visible_message("<span class='notice'>[user] adds wires to [src].</span>", \
"<span class='notice'>You rewire [src].</span>")
C.amount -= 5
if(C.amount <= 0)
user.drop_item()
qdel(C)
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
repair_stage = REPAIR_NEEDS_CROWBAR
return
if(istype(I, /obj/item/weapon/crowbar) && repair_stage == REPAIR_NEEDS_CROWBAR)
user.visible_message("<span class='notice'>[user] starts removing [src]'s broken interior plating.</span>", \
"<span class='notice'>You begin removing the damaged interior plating from [src]...</span>")
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
if(!do_after(user, 30, target = src))
return
user.visible_message("<span class='notice'>[user] removes the damaged interior plating from [src].</span>", \
"<spna class='notice'>You remove the damaged interior plating from [src].</span>")
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
repair_stage = REPAIR_NEEDS_METAL
return
if(istype(I, /obj/item/stack/sheet/metal) && repair_stage == REPAIR_NEEDS_METAL)
var/obj/item/stack/sheet/metal/M = I
if(M.amount < 3)
user << "<span class='warning'>You need at least three sheets of metal to repair [src]!</span>"
return
user.visible_message("<span class='notice'>[user] starts adding interior plating to [src].</span>", \
"<span class='notice'>You begin adding interior plating to [src]...</span>")
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
if(!do_after(user, 30, target = src))
return
user.visible_message("<span class='notice'>[user] adds interior plating to [src].</span>", \
"<spna class='notice'>You add interior plating to [src].</span>")
fix()
return
if ( istype(I, /obj/item/weapon/grab) )
var/obj/item/weapon/grab/G = I
store_mob(G.affecting, user)
@@ -500,9 +583,9 @@
user << "<span class='notice'>The unit already contains a suit.</span>"
return
if(!user.drop_item())
user << "<span class='warning'>\The [S] is stuck to your hand, you cannot put it in the Suit Storage Unit!</span>"
user << "<span class='warning'>[S] is stuck to your hand, you cannot put it in [src]!</span>"
return
user << "<span class='notice'>You load the [S.name] into the suit storage compartment.</span>"
user << "<span class='notice'>You load [S] into the suit storage compartment.</span>"
S.loc = src
src.SUIT = S
src.update_icon()
@@ -516,9 +599,9 @@
user << "<span class='warning'>The unit already contains a helmet!</span>"
return
if(!user.drop_item())
user << "<span class='warning'>\The [H] is stuck to your hand, you cannot put it in the Suit Storage Unit!</span>"
user << "<span class='warning'>[H] is stuck to your hand, you cannot put it in the Suit Storage Unit!</span>"
return
user << "<span class='notice'>You load the [H.name] into the helmet storage compartment.</span>"
user << "<span class='notice'>You load [H] into the helmet storage compartment.</span>"
H.loc = src
src.HELMET = H
src.update_icon()
@@ -532,9 +615,9 @@
user << "<span class='warning'>The unit already contains a mask!</span>"
return
if(!user.drop_item())
user << "<span class='warning'>\The [M] is stuck to your hand, you cannot put it in the Suit Storage Unit!</span>"
user << "<span class='warning'>[M] is stuck to your hand, you cannot put it in the Suit Storage Unit!</span>"
return
user << "<span class='notice'>You load the [M.name] into the mask storage compartment.</span>"
user << "<span class='notice'>You load [M] into the mask storage compartment.</span>"
M.loc = src
src.MASK = M
src.update_icon()
@@ -548,9 +631,9 @@
user << "<span class='warning'>The auxiliary storage compartment is full!</span>"
return
if(!user.drop_item())
user << "<span class='warning'>\The [ITEM] is stuck to your hand, you cannot put it in the Suit Storage Unit!</span>"
user << "<span class='warning'>[ITEM] is stuck to your hand, you cannot put it in the Suit Storage Unit!</span>"
return
user << "<span class='notice'>You load the [ITEM.name] into the auxiliary storage compartment.</span>"
user << "<span class='notice'>You load [ITEM] into the auxiliary storage compartment.</span>"
ITEM.loc = src
src.STORAGE = ITEM
src.update_icon()
@@ -563,6 +646,10 @@
/obj/machinery/suit_storage_unit/attack_paw(mob/user)
user << "<span class='warning'>The console controls are far too complicated for your tiny brain!</span>"
user << "<span class='warning'>You don't know how to work this!</span>"
return
#undef REPAIR_NEEDS_WIRECUTTERS
#undef REPAIR_NEEDS_WIRES
#undef REPAIR_NEEDS_CROWBAR
#undef REPAIR_NEEDS_METAL
+6
View File
@@ -664,6 +664,10 @@
user << "<span class='warning'>Access denied.</span>"
log_append_to_last("Permission denied.")
return
if(user.buckled)
user << "<span class='warning'>You are currently buckled and cannot move.</span>"
log_append_to_last("Permission denied.")
return
for(var/mob/living/simple_animal/slime/S in range(1,user))
if(S.Victim == user)
user << "<span class='warning'>You're too busy getting your life sucked out of you!</span>"
@@ -676,6 +680,8 @@
user << "<span class='warning'>You cannot get in the [src.name], it has been destroyed!</span>"
else if(occupant)
user << "<span class='danger'>[src.occupant] was faster! Try better next time, loser.</span>"
else if(user.buckled)
user << "<span class='warning'>You have been buckled and cannot move.</span>"
else
moved_inside(user)
else
+1 -1
View File
@@ -29,7 +29,7 @@
canSmoothWith = list(/obj/structure/alien/resin)
var/health = 200
var/resintype = null
smooth = 1
smooth = SMOOTH_TRUE
/obj/structure/alien/resin/New(location)
@@ -1,7 +1,7 @@
//########################## POSTERS ##################################
#define NUM_OF_POSTER_DESIGNS 35 // contraband posters
#define NUM_OF_POSTER_DESIGNS 36 // contraband posters
#define NUM_OF_POSTER_DESIGNS_LEGIT 35 // corporate approved posters
@@ -35,7 +35,7 @@ list(name = "- Donut Corp.", desc = " This poster is an unauthorized advertiseme
list(name = "- EAT.", desc = " This poster promotes rank gluttony."),
list(name = "- Tools", desc = " This poster looks like an advertisement for tools, but is in fact a subliminal jab at the tools at CentComm."),
list(name = "- Power", desc = " A poster that positions the seat of power outside Nanotrasen."),
list(name = "- Power to the People", desc = " Screw those EDF guys!"),
list(name = "- Space Cube", desc = " Ignorant of Nature's Harmonic 6 Side Space Cube Creation, the Spacemen are Dumb, Educated Singularity Stupid and Evil."),
list(name = "- Communist State", desc = " All hail the Communist party!"),
list(name = "- Lamarr", desc = " This poster depicts Lamarr. Probably made by a traitorous Research Director."),
list(name = "- Borg Fancy", desc = " Being fancy can be for any borg, just need a suit."),
@@ -53,7 +53,8 @@ list(name = "- CC 64K Ad", desc = " The latest portable computer from Comrade Co
list(name = "- Punch Shit", desc = " Fight things for no reason, like a man!"),
list(name = "- The Griffin", desc = " The Griffin commands you to be the worst you can be. Will you?"),
list(name = "- Lizard", desc = " This lewd poster depicts a lizard preparing to mate."),
list(name = "- Free Drone", desc = " This poster commemorates the bravery of the rogue drone banned by CentComm.") )
list(name = "- Free Drone", desc = " This poster commemorates the bravery of the rogue drone banned by CentComm."),
list(name = "- Busty Backdoor Xeno Babes 6", desc = " Get a load, or give, of these all natural Xenos!") )
// LEGIT
+17
View File
@@ -134,6 +134,23 @@
edible = 0
validSurfaces = list(/turf/simulated/floor,/turf/simulated/wall)
/obj/item/toy/crayon/spraycan/suicide_act(mob/user)
var/mob/living/carbon/human/H = user
if(capped)
user.visible_message("<span class='suicide'>[user] shakes up the [src] with a rattle and lifts it to their mouth, but nothing happens! Maybe they should have uncapped it first! Nonetheless--</span>")
user.say("MEDIOCRE!!")
else
user.visible_message("<span class='suicide'>[user] shakes up the [src] with a rattle and lifts it to their mouth, spraying silver paint across their teeth!</span>")
user.say("WITNESS ME!!")
playsound(loc, 'sound/effects/spray.ogg', 5, 1, 5)
colour = "#C0C0C0"
update_icon()
H.lip_style = "spray_face"
H.lip_color = colour
H.update_body()
uses = max(0, uses - 10)
return (OXYLOSS)
/obj/item/toy/crayon/spraycan/New()
..()
name = "spray can"
@@ -6,6 +6,7 @@
origin_tech = "plasma=1"
turf_type = /turf/simulated/floor/mineral/plasma
mineralType = "plasma"
materials = list(MAT_PLASMA=500)
/obj/item/stack/tile/mineral/uranium
name = "uranium tile"
@@ -15,6 +16,7 @@
origin_tech = "material=1"
turf_type = /turf/simulated/floor/mineral/uranium
mineralType = "uranium"
materials = list(MAT_URANIUM=500)
/obj/item/stack/tile/mineral/gold
name = "gold tile"
@@ -24,6 +26,7 @@
origin_tech = "material=1"
turf_type = /turf/simulated/floor/mineral/gold
mineralType = "gold"
materials = list(MAT_GOLD=500)
/obj/item/stack/tile/mineral/silver
name = "silver tile"
@@ -33,6 +36,7 @@
origin_tech = "material=1"
turf_type = /turf/simulated/floor/mineral/silver
mineralType = "silver"
materials = list(MAT_SILVER=500)
/obj/item/stack/tile/mineral/diamond
name = "diamond tile"
@@ -42,6 +46,7 @@
origin_tech = "material=2"
turf_type = /turf/simulated/floor/mineral/diamond
mineralType = "diamond"
materials = list(MAT_DIAMOND=500)
/obj/item/stack/tile/mineral/bananium
name = "bananium tile"
@@ -51,4 +56,5 @@
origin_tech = "material=1"
turf_type = /turf/simulated/floor/mineral/bananium
mineralType = "bananium"
materials = list(MAT_BANANIUM=500)
+6
View File
@@ -168,6 +168,12 @@ var/global/list/RPD_recipes=list(
/obj/item/weapon/pipe_dispenser/attack_self(mob/user)
show_menu(user)
/obj/item/weapon/pipe_dispenser/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] points the end of the RPD down \his throat and presses a button! It looks like \he's trying to commit suicide...</span>")
playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1)
playsound(get_turf(user), 'sound/items/Deconstruct.ogg', 50, 1)
return(BRUTELOSS)
/obj/item/weapon/pipe_dispenser/proc/render_dir_img(_dir,pic,title,flipped=0)
var/selected=" class=\"imglink\""
if(_dir == p_dir)
@@ -36,9 +36,10 @@
cleanspeed = 10 //much faster than mop so it is useful for traitors who want to clean crime scenes
/obj/item/weapon/soap/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] crams the bar of soap down \his throat! It looks like \he's trying to commit suicide..</span>")
. = TOXLOSS
src.loc = user
user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!")
user.visible_message("<span class='suicide'>[user] lifts the [src.name] to their mouth and gnaws on it furiously, producing a thick froth! They'll never get that BB gun now!")
PoolOrNew(/obj/effect/effect/foam, loc)
return (TOXLOSS)
/obj/item/weapon/soap/Crossed(AM as mob|obj)
if (istype(AM, /mob/living/carbon))
@@ -1,6 +1,6 @@
/obj/structure/stool/bed/chair/e_chair
name = "electric chair"
desc = "Looks absolutely SHOCKING!"
desc = "Looks absolutely SHOCKING!\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "echair0"
var/obj/item/assembly/shock_kit/part = null
var/last_time = 1
+4 -4
View File
@@ -19,7 +19,7 @@
/obj/structure/falsewall/reinforced, // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS.
/turf/simulated/wall/rust,
/turf/simulated/wall/r_wall/rust)
smooth = 1
smooth = SMOOTH_TRUE
can_be_unanchored = 0
/obj/structure/falsewall/attack_hand(mob/user)
@@ -49,15 +49,15 @@
/obj/structure/falsewall/proc/do_the_flick()
if(density)
smooth = 0
clear_overlays(src)
smooth = SMOOTH_FALSE
clear_smooth_overlays()
icon_state = "fwall_opening"
else
icon_state = "fwall_closing"
/obj/structure/falsewall/update_icon()//Calling icon_update will refresh the smoothwalls if it's closed, otherwise it will make sure the icon is correct if it's open
if(density)
smooth = 1
smooth = SMOOTH_TRUE
smooth_icon(src)
icon_state = ""
else
+65 -100
View File
@@ -1,13 +1,3 @@
#define SKINTYPE_MONKEY /obj/item/stack/sheet/animalhide/monkey
#define SKINTYPE_ALIEN /obj/item/stack/sheet/animalhide/xeno
#define SKINTYPE_BEAR /obj/item/clothing/head/bearpelt
#define SKINTYPE_CORGI /obj/item/stack/sheet/animalhide/corgi
#define MEATTYPE_MONKEY /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey
#define MEATTYPE_ALIEN /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
#define MEATTYPE_BEAR /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear
#define MEATTYPE_CORGI /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi
//////Kitchen Spike
/obj/structure/kitchenspike_frame
@@ -38,44 +28,17 @@
desc = "A spike for collecting meat from animals"
density = 1
anchored = 1
var/meat = 0
var/occupied = 0
var/meattype = null
var/skin = 0
var/skintype = null
buckle_lying = 0
can_buckle = 1
var/global/list/allowed_types = list( //ugh I know it's a whitelist but it's not as god-awful and hacky as before. at least this way it's sustainable. i don't think there's even a better way than this.
/mob/living/carbon/monkey,
/mob/living/carbon/alien,
/mob/living/simple_animal/hostile/bear,
/mob/living/simple_animal/pet/dog/corgi,
)
var/global/list/meatlist = list(
"monkey" = MEATTYPE_MONKEY,
"alien" = MEATTYPE_ALIEN,
"bear" = MEATTYPE_BEAR,
"corgi" = MEATTYPE_CORGI,
)
var/global/list/skinlist = list(
"monkey" = SKINTYPE_MONKEY,
"alien" = SKINTYPE_ALIEN,
"bear" = SKINTYPE_BEAR,
"corgi" = SKINTYPE_CORGI,
)
/obj/structure/kitchenspike/attack_paw(mob/user)
return src.attack_hand(usr)
/obj/structure/kitchenspike/proc/is_mob_allowed(var/obj/item/weapon/grab/G)
for(var/I in allowed_types)
if(istype(G.affecting, I))
return I
return 0
/obj/structure/kitchenspike/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/crowbar))
if(!src.occupied)
if(!src.buckled_mob)
playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
if(do_after(user, 20, target = src))
user << "<span class='notice'>You pry the spikes out of the frame.</span>"
@@ -88,69 +51,71 @@
return
if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
var/allowed_type = is_mob_allowed(G)
if(allowed_type)
if(!occupied)
occupied = 1
meat = 5
skin = 1
var/list/affecting_path = text2list("[allowed_type]", "/") //we want a specific part of the type path for this: the last part of the path in allowed_types
var/affecting_type = affecting_path[affecting_path.len] //ex. 1 if affecting.type is /mob/living/carbon/monkey, this will set affecting_type to "monkey"
//ex. 2 if affecting.type is /mob/living/carbon/alien/humanoid/queen, this will set affecting_type to "alien"
//set these vars to the appropriate values based on type
icon_state = "spikebloody[affecting_type]"
meattype = meatlist["[affecting_type]"]
skintype = skinlist["[affecting_type]"]
var/mob/living/O = G.affecting
O.visible_message(text("<span class='danger'>[user] has forced [G.affecting] onto the spike, killing them instantly!</span>"))
qdel(G.affecting)
qdel(G)
else
user << "<span class='danger'>The spike already has something on it; finish collecting its meat first!</span>"
return
if(istype(G.affecting, /mob/living/carbon/human))
user.changeNext_move(CLICK_CD_MELEE)
playsound(src.loc, "sound/effects/splat.ogg", 25, 1)
var/mob/living/carbon/human/H = G.affecting
H.visible_message("<span class='danger'>[user] slams [G.affecting] into the meat spike!</span>", "<span class='userdanger'>[user] slams you into the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
H.adjustBruteLoss(20)
return
if(istype(G.affecting, /mob/living/))
if(!buckled_mob)
if(do_mob(user, src, 120))
if(buckled_mob) //to prevent spam/queing up attacks
return
if(G.affecting.buckled)
return
var/mob/living/H = G.affecting
playsound(src.loc, "sound/effects/splat.ogg", 25, 1)
H.visible_message("<span class='danger'>[user] slams [G.affecting] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
H.loc = src.loc
H.emote("scream")
if(istype(H, /mob/living/carbon/human)) //So you don't get human blood when you spike a giant spidere
var/turf/pos = get_turf(H)
pos.add_blood_floor(H)
H.adjustBruteLoss(30)
H.buckled = src
H.dir = 2
buckled_mob = H
var/matrix/m120 = matrix(H.transform)
m120.Turn(180)
animate(H, transform = m120, time = 3)
H.pixel_y = H.get_standard_pixel_y_offset(180)
return
user << "<span class='danger'>You can't use that on the spike!</span>"
return
..()
///obj/structure/kitchenspike/MouseDrop_T(var/atom/movable/C, mob/user)
// if(istype(C, /obj/mob/carbon/monkey)
// else if(istype(C, /obj/mob/carbon/alien) && !istype(C, /mob/living/carbon/alien/larva/slime))
// else if(istype(C, /obj/livestock/spesscarp
/obj/structure/kitchenspike/user_buckle_mob(mob/living/M, mob/living/user) //Don't want them getting put on the rack other than by spiking
return
/obj/structure/kitchenspike/attack_hand(mob/user)
if(..())
return
if(occupied)
if(meat >= 1)
new meattype(src.loc)
meat--
if(meat > 1)
usr << "<span class='notice'>You remove some meat from [src].</span>"
/obj/structure/kitchenspike/user_unbuckle_mob(mob/living/carbon/human/user)
if(buckled_mob && buckled_mob.buckled == src)
var/mob/living/M = buckled_mob
if(M != user)
M.visible_message(\
"[user.name] tries to pull [M.name] free of the [src]!",\
"<span class='notice'>[user.name] is trying to pull you off the [src], opening up fresh wounds!</span>",\
"<span class='italics'>You hear a squishy wet noise.</span>")
if(!do_after(user, 300, target = src))
if(M && M.buckled)
M.visible_message(\
"[user.name] fails to free [M.name]!",\
"<span class='notice'>[user.name] fails to pull you off of the [src].</span>")
return
else
M.visible_message(\
"<span class='warning'>[M.name] struggles to break free from the [src]!</span>",\
"<span class='notice'>You struggle to break free from the [src], exacerbating your wounds! (Stay still for two minutes.)</span>",\
"<span class='italics'>You hear a wet squishing noise..</span>")
M.adjustBruteLoss(30)
if(!do_after(M, 1200, target = src))
if(M && M.buckled)
M << "<span class='warning'>You fail to free yourself!</span>"
return
if(!M.buckled)
return
if(src.skin >=1)
new skintype(src.loc)
skin--
usr << "<span class='notice'>You remove the hide from [src].</span>"
icon_state = "spike"
occupied = 0
#undef SKINTYPE_MONKEY
#undef SKINTYPE_ALIEN
#undef SKINTYPE_BEAR
#undef SKINTYPE_CORGI
#undef MEATTYPE_MONKEY
#undef MEATTYPE_ALIEN
#undef MEATTYPE_BEAR
#undef MEATTYPE_CORGI
var/mob/living/L = buckled_mob
var/matrix/m120 = matrix(L.transform)
m120.Turn(360)
animate(L, transform = m120, time = 3)
L.pixel_y = L.get_standard_pixel_y_offset(360)
M.adjustBruteLoss(30)
src.visible_message(text("<span class='danger'>[M] falls free of the [src]!</span>"))
unbuckle_mob()
L.emote("scream")
L.AdjustWeakened(10)
+11 -48
View File
@@ -1,12 +1,17 @@
/obj/structure/lattice
name = "lattice"
desc = "A lightweight support lattice. These hold our station together."
icon = 'icons/obj/structures.dmi'
icon_state = "latticefull"
icon = 'icons/obj/smooth_structures/lattice.dmi'
icon_state = "lattice"
density = 0
anchored = 1
layer = 2.3 //under pipes
var/obj/item/stack/rods/stored
canSmoothWith = list(/obj/structure/lattice,
/turf/simulated/floor,
/turf/simulated/wall,
/obj/structure/falsewall)
smooth = SMOOTH_MORE
// flags = CONDUCT
/obj/structure/lattice/New()
@@ -17,21 +22,6 @@
if(LAT != src)
qdel(LAT)
stored = new/obj/item/stack/rods(src)
icon = 'icons/obj/smoothlattice.dmi'
updateOverlays()
for (var/dir in cardinal)
var/obj/structure/lattice/L
if(locate(/obj/structure/lattice, get_step(src, dir)))
L = locate(/obj/structure/lattice, get_step(src, dir))
L.updateOverlays()
/obj/structure/lattice/Destroy()
for (var/dir in cardinal)
var/obj/structure/lattice/L
if(locate(/obj/structure/lattice, get_step(src, dir)))
L = locate(/obj/structure/lattice, get_step(src, dir))
L.updateOverlays(src.loc)
return ..()
/obj/structure/lattice/blob_act()
qdel(src)
@@ -63,27 +53,9 @@
Deconstruct()
return
/obj/structure/lattice/proc/updateOverlays()
//if(!(istype(src.loc, /turf/space)))
// qdel(src)
overlays.Cut()
var/dir_sum = 0
for (var/direction in cardinal)
if(locate(/obj/structure/lattice, get_step(src, direction)))
dir_sum += direction
else
if(!(istype(get_step(src, direction), /turf/space)))
dir_sum += direction
icon_state = "[name][dir_sum]"
return
/obj/structure/lattice/Deconstruct()
var/turf/T = loc
stored.loc = T
updateOverlays()
..()
/obj/structure/lattice/singularity_pull(S, current_size)
@@ -93,7 +65,10 @@
/obj/structure/lattice/catwalk
name = "catwalk"
desc = "A catwalk for easier EVA manuevering and cable placement."
icon_state = "catwalkfull"
icon = 'icons/obj/smooth_structures/catwalk.dmi'
icon_state = "catwalk"
smooth = SMOOTH_TRUE
canSmoothWith = null
/obj/structure/lattice/catwalk/Move()
var/turf/T = loc
@@ -113,15 +88,3 @@
var/turf/T = get_turf(src)
T.attackby(C, user) //catwalks 'enable' coil laying on space tiles, not the catwalks themselves
return
/obj/structure/lattice/catwalk/updateOverlays()
overlays.Cut()
var/dir_sum = 0
for (var/direction in cardinal)
if(locate(/obj/structure/lattice/catwalk, get_step(src, direction))) //so we only blend with other catwalks
dir_sum += direction
icon_state = "[name][dir_sum]"
return
+92 -4
View File
@@ -5,6 +5,11 @@
density = 0
layer = 3.5
/obj/structure/sign/basic
name = "blank sign"
desc = "How can signs be real if our eyes aren't real?"
icon_state = "backing"
/obj/structure/sign/ex_act(severity, target)
qdel(src)
@@ -12,6 +17,79 @@
qdel(src)
return
/obj/structure/sign/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/wrench))
user.visible_message("<span class='notice'>[user] starts removing [src]...</span>", \
"<span class='notice'>You start unfastening [src].</span>")
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
if(!do_after(user, 30, target = src))
return
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("<span class='notice'>[user] unfastens [src].</span>", \
"<span class='notice'>You unfasten [src].</span>")
new /obj/item/sign_backing(get_turf(user))
qdel(src)
if(istype(O, /obj/item/weapon/pen))
var/list/sign_types = list("Secure Area", "Biohazard", "High Voltage", "Radiation", "Hard Vacuum Ahead", "Disposal: Leads To Space", "Danger: Fire", "No Smoking", "Medbay", "Science", "Chemistry", \
"Hydroponics", "Xenobiology")
var/sign_type
switch(input(user, "Select a sign type.", "Sign Customization") as null|anything in sign_types)
if("Blank")
sign_type = /obj/structure/sign/basic
if("Secure Area")
sign_type = /obj/structure/sign/securearea
if("Biohazard")
sign_type = /obj/structure/sign/biohazard
if("High Voltage")
sign_type = /obj/structure/sign/electricshock
if("Radiation")
sign_type = /obj/structure/sign/radiation
if("Hard Vacuum Ahead")
sign_type = /obj/structure/sign/vacuum
if("Disposal: Leads To Space")
sign_type = /obj/structure/sign/deathsposal
if("Danger: Fire")
sign_type = /obj/structure/sign/fire
if("No Smoking")
sign_type = /obj/structure/sign/nosmoking_1
if("Medbay")
sign_type = /obj/structure/sign/bluecross_2
if("Science")
sign_type = /obj/structure/sign/science
if("Chemistry")
sign_type = /obj/structure/sign/chemistry
if("Hydroponics")
sign_type = /obj/structure/sign/botany
if("Xenobiology")
sign_type = /obj/structure/sign/xenobio
if(!sign_type)
return
new sign_type(get_turf(src))
qdel(src)
/obj/item/sign_backing
name = "sign backing"
desc = "A blank sign with adhesive backing."
icon = 'icons/obj/decals.dmi'
icon_state = "backing"
w_class = 3
burn_state = 0 //Burnable, made of wood
/obj/item/sign_backing/afterattack(atom/target, mob/user, proximity)
if(!isturf(target))
return ..()
if(!user.Adjacent(target))
return ..()
var/turf/T = target
if(!T || !istype(T))
return ..()
user.visible_message("<span class='notice'>[user] fastens [src] to [T].</span>", \
"<span class='notice'>You attach a blank sign to [T].</span>")
playsound(T, 'sound/items/Deconstruct.ogg', 50, 1)
new /obj/structure/sign/basic(T)
user.drop_item()
qdel(src)
return
/obj/structure/sign/map
name = "station map"
@@ -75,6 +153,11 @@
desc = "A warning sign which reads 'NO SMOKING'"
icon_state = "nosmoking2"
/obj/structure/sign/radiation
name = "HAZARDOUS RADIATION"
desc = "A warning sign alerting the user of potential radiation hazards."
icon_state = "radiation"
/obj/structure/sign/bluecross
name = "medbay"
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here.'"
@@ -111,20 +194,25 @@
icon_state = "maltesefalcon-right"
/obj/structure/sign/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map
name = "\improper SCIENCE!"
desc = "A warning sign which reads 'SCIENCE!'"
name = "\improper SCIENCE"
desc = "A sign labelling an area where research and science is performed."
icon_state = "science1"
/obj/structure/sign/chemistry
name = "\improper CHEMISTRY"
desc = "A warning sign which reads 'CHEMISTRY'"
desc = "A sign labelling an area containing chemical equipment."
icon_state = "chemistry1"
/obj/structure/sign/botany
name = "\improper HYDROPONICS"
desc = "A warning sign which reads 'HYDROPONICS'"
desc = "A sign labelling an area as a place where plants are grown."
icon_state = "hydro1"
/obj/structure/sign/xenobio
name = "\improper XENOBIOLOGY"
desc = "A sign labelling an area as a place where xenobiological entites are researched."
icon_state = "xenobio"
/obj/structure/sign/directions/science
name = "science department"
desc = "A direction sign, pointing out which way the Science department is."
@@ -6,7 +6,7 @@
icon = 'icons/obj/smooth_structures/alien/nest.dmi'
icon_state = "nest"
var/health = 100
smooth = 1
smooth = SMOOTH_TRUE
can_be_unanchored = 0
canSmoothWith = null
var/image/nest_overlay
@@ -1,6 +1,6 @@
/obj/structure/stool/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete
name = "chair"
desc = "You sit in this. Either by will or force."
desc = "You sit in this. Either by will or force.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "chair"
buckle_lying = 0 //you sit in a chair, not lay
burn_state = -1 //Not Burnable
@@ -72,6 +72,15 @@
return
spin()
/obj/structure/stool/bed/chair/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
// Chair types
/obj/structure/stool/bed/chair/wood
@@ -98,7 +107,7 @@
/obj/structure/stool/bed/chair/comfy
name = "comfy chair"
desc = "It looks comfy."
desc = "It looks comfy.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "comfychair"
color = rgb(255,255,255)
burn_state = 0 //Burnable
+1 -1
View File
@@ -28,7 +28,7 @@
var/buildstackamount = 1
var/framestackamount = 2
var/mob/tableclimber
smooth = 1
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/table, /obj/structure/table/reinforced)
/obj/structure/table/New()
@@ -9,6 +9,10 @@
layer = 3.1 //same as the built tube
anchored = 0
/obj/structure/c_transit_tube/examine(mob/user)
..()
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
//wrapper for turn that changes the transit tube formatted icon_state instead of the dir
/obj/structure/c_transit_tube/proc/tube_turn(angle)
var/list/badtubes = list("W-E", "W-E-Pass", "S-N", "S-N-Pass", "SW-NE", "SE-NW")
@@ -50,6 +54,16 @@
tube_turn(-90)
/obj/structure/c_transit_tube/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
/obj/structure/c_transit_tube/verb/rotate_ccw()
set name = "Rotate Tube CCW"
set category = "Object"
@@ -27,6 +27,10 @@
var/secure = 0 //Whether or not this creates a secure windoor
var/state = "01" //How far the door assembly has progressed
/obj/structure/windoor_assembly/examine(mob/user)
..()
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
/obj/structure/windoor_assembly/New(dir=NORTH)
..()
ini_dir = dir
@@ -323,6 +327,16 @@
update_icon()
return
/obj/structure/windoor_assembly/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
revrotate()
//Flips the windoor assembly, determines whather the door opens to the left or the right
/obj/structure/windoor_assembly/verb/flip()
set name = "Flip Windoor Assembly"
+17 -4
View File
@@ -21,6 +21,10 @@
var/image/crack_overlay
can_be_unanchored = 1
/obj/structure/window/examine(mob/user)
..()
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
/obj/structure/window/New(Loc,re=0)
..()
health = maxhealth
@@ -342,6 +346,15 @@
add_fingerprint(usr)
return
/obj/structure/window/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
revrotate()
/*
/obj/structure/window/proc/updateSilicate() what do you call a syndicate silicon?
@@ -441,7 +454,7 @@
dir = 5
maxhealth = 50
fulltile = 1
smooth = 1
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile)
/obj/structure/window/reinforced/fulltile
@@ -450,7 +463,7 @@
dir = 5
maxhealth = 100
fulltile = 1
smooth = 1
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile)
/obj/structure/window/reinforced/tinted/fulltile
@@ -458,7 +471,7 @@
icon_state = "tinted_window"
dir = 5
fulltile = 1
smooth = 1
smooth = SMOOTH_TRUE
canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile)
/obj/structure/window/shuttle
@@ -471,6 +484,6 @@
wtype = "shuttle"
fulltile = 1
reinf = 1
smooth = 1
smooth = SMOOTH_TRUE
canSmoothWith = null
explosion_block = 1
@@ -47,7 +47,7 @@
icon_state = "carpet"
floor_tile = /obj/item/stack/tile/carpet
broken_states = list("damaged")
smooth = 1
smooth = SMOOTH_TRUE
canSmoothWith = null
/turf/simulated/floor/carpet/New()
+2 -2
View File
@@ -22,10 +22,10 @@
/turf/simulated/wall,
/turf/simulated/wall/r_wall,
/obj/structure/falsewall,
/obj/structure/falsewall/reinforced, // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS.
/obj/structure/falsewall/reinforced,
/turf/simulated/wall/rust,
/turf/simulated/wall/r_wall/rust)
smooth = 1
smooth = SMOOTH_TRUE
/turf/simulated/wall/New()
..()
+1 -1
View File
@@ -4,8 +4,8 @@
icon_state = ""
var/last_event = 0
var/active = null
smooth = 1
canSmoothWith = null
smooth = SMOOTH_TRUE
/turf/simulated/wall/mineral/New()
sheet_type = text2path("/obj/item/stack/sheet/mineral/[mineral]")
+1 -1
View File
@@ -45,7 +45,7 @@
icon = 'icons/turf/shuttle.dmi'
icon_state = "wall1"
walltype = "shuttle"
smooth = 0
smooth = SMOOTH_FALSE
//sub-type to be used for interior shuttle walls
//won't get an underlay of the destination turf on shuttle move
@@ -215,10 +215,10 @@
/turf/simulated/wall/r_wall/proc/update_icon()
if(d_state)
icon_state = "r_wall-[d_state]"
smooth = 0
clear_overlays(src)
smooth = SMOOTH_FALSE
clear_smooth_overlays()
else
smooth = 1
smooth = SMOOTH_TRUE
icon_state = ""
/turf/simulated/wall/r_wall/singularity_pull(S, current_size)
+1 -2
View File
@@ -317,8 +317,7 @@
/turf/indestructible/riveted/uranium
icon = 'icons/turf/walls/uranium_wall.dmi'
icon_state = "uranium"
smooth = 1
canSmoothWith = null
smooth = SMOOTH_TRUE
/turf/indestructible/abductor
icon_state = "alien1"
+11 -1
View File
@@ -1,6 +1,6 @@
/obj/item/device/assembly/infra
name = "infrared emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "infrared"
materials = list(MAT_METAL=1000, MAT_GLASS=500)
origin_tech = "magnets=2"
@@ -144,6 +144,16 @@
dir = turn(dir, 90)
return
/obj/item/device/assembly/infra/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
/***************************IBeam*********************************/
+2
View File
@@ -48,9 +48,11 @@
//Security biosuit, grey with red stripe across the chest
/obj/item/clothing/head/bio_hood/security
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 20)
icon_state = "bio_security"
/obj/item/clothing/suit/bio_suit/security
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 20)
icon_state = "bio_security"
@@ -2,6 +2,7 @@
name = "alien"
icon_state = "alien_s"
pass_flags = PASSTABLE
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 5, /obj/item/stack/sheet/animalhide/xeno = 1)
var/obj/item/r_store = null
var/obj/item/l_store = null
var/caste = ""
+3 -2
View File
@@ -91,8 +91,9 @@
brainmob.real_name = L.real_name
if(L.has_dna())
var/mob/living/carbon/C = L
brainmob.dna = C.dna
brainmob.dna.holder = brainmob
if(!brainmob.dna)
brainmob.dna = new /datum/dna(brainmob)
C.dna.copy_dna(brainmob.dna)
brainmob.container = src
if(ishuman(L))
@@ -58,8 +58,9 @@
brainmob.timeofhostdeath = L.timeofdeath
if(L.has_dna())
var/mob/living/carbon/C = L
brainmob.dna = C.dna
brainmob.dna.holder = brainmob
if(!brainmob.dna)
brainmob.dna = new /datum/dna(brainmob)
C.dna.copy_dna(brainmob.dna)
if(L.mind)
L.mind.transfer_to(brainmob)
brainmob << "<span class='notice'>You feel slightly disoriented. That's normal when you're just a brain.</span>"
@@ -61,8 +61,9 @@ var/global/posibrain_notif_cooldown = 0
brainmob.real_name = C.real_name
brainmob.dna = C.dna
if(C.has_dna())
brainmob.dna = C.dna
brainmob.dna.holder = brainmob
if(!brainmob.dna)
brainmob.dna = new /datum/dna(brainmob)
C.dna.copy_dna(brainmob.dna)
brainmob.timeofhostdeath = C.timeofdeath
brainmob.stat = 0
if(brainmob.mind)
@@ -49,7 +49,7 @@
for(var/datum/mutation/human/HM in dna.mutations)
HM.on_move(src, NewLoc)
if(shoes)
if(!lying)
if(!lying && !buckled)
if(loc == NewLoc)
if(!has_gravity(loc))
return
@@ -8,6 +8,7 @@
pass_flags = PASSTABLE
languages = MONKEY
ventcrawler = 1
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1)
type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey
gib_type = /obj/effect/decal/cleanable/blood/gibs
unique_name = 1
+11
View File
@@ -895,3 +895,14 @@ Sorry Giacom. Please don't be mad :(
//used in datum/reagents/reaction() proc
/mob/living/proc/get_permeability_protection()
return 0
/mob/living/proc/harvest(mob/living/user)
if(qdeleted(src))
return
if(butcher_results)
for(var/path in butcher_results)
for(var/i = 1; i <= butcher_results[path];i++)
new path(src.loc)
butcher_results.Remove(path) //In case you want to have things like simple_animals drop their butcher results on gib, so it won't double up below.
visible_message("<span class='notice'>[user] butchers [src].</span>")
gib()
@@ -53,3 +53,5 @@
var/last_bumped = 0
var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666)
var/list/butcher_results = null
@@ -24,6 +24,7 @@
melee_damage_upper = 15
butcher_results = list(/obj/item/weapon/ectoplasm = 1)
AIStatus = AI_OFF
var/animated_manifest = FALSE
var/cooldown = 0
var/damage_transfer = 1 //how much damage from each attack we transfer to the owner
var/mob/living/summoner
@@ -71,7 +72,10 @@
src.summoner.adjustBruteLoss(damage)
if(damage)
src.summoner << "<span class='danger'><B>Your [src.name] is under attack! You take damage!</span></B>"
src.summoner.visible_message("<span class='danger'>Blood sprays from [summoner] as [src] takes damage!</span>")
if(src.summoner.stat == UNCONSCIOUS)
src.summoner << "<span class='danger'><B>Your body can't take the strain of sustaining [src.name] in this condition, it begins to fall apart!</span></B>"
src.summoner.adjustCloneLoss(damage/2)
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target)
switch (severity)
@@ -99,6 +103,11 @@
if(src.loc == summoner)
src.loc = get_turf(summoner)
cooldown = world.time + 30
if(animated_manifest)
var/end_icon = icon_state
icon_state = "parasite_forming"
spawn(6)
icon_state = end_icon
/mob/living/simple_animal/hostile/guardian/verb/Recall()
set name = "Recall"
@@ -107,6 +116,7 @@
if(cooldown > world.time)
return
src.loc = summoner
buckled = null
cooldown = world.time + 30
/mob/living/simple_animal/hostile/guardian/verb/Communicate()
@@ -145,37 +155,55 @@
/mob/living/simple_animal/hostile/guardian/fire
a_intent = "help"
melee_damage_lower = 15
melee_damage_upper = 15
melee_damage_lower = 10
melee_damage_upper = 10
attack_sound = 'sound/items/Welder.ogg'
attacktext = "sears"
damage_transfer = 0.7
damage_transfer = 0.8
range = 10
playstyle_string = "As a fire type, you have only light damage resistance, but will ignite any enemy you bump into."
playstyle_string = "As a Chaos type, you have only light damage resistance, but will ignite any enemy you bump into. In addition, your melee attacks will randomly teleport enemies."
environment_smash = 1
magic_fluff_string = "..And draw Atmosia, bringer of cleansing fires!"
tech_fluff_string = "Boot sequence complete. Incendiary combat modules loaded. Nanoswarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of igniting enemies on touch."
pass_flags = PASSMOB
magic_fluff_string = "..And draw the Wizard, bringer of endless chaos!"
tech_fluff_string = "Boot sequence complete. Crowd control modules activated. Holoparasite swarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to sow havoc at random."
/mob/living/simple_animal/hostile/guardian/fire/Life() //Dies if the summoner dies
..()
if(summoner)
summoner.ExtinguishMob()
summoner.adjust_fire_stacks(-20)
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
..()
if(prob(30))
if(istype(target, /atom/movable))
var/atom/movable/M = target
if(!M.anchored && M != src.summoner)
do_teleport(M, M, 10)
/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj)
if(istype(AM, /mob/living/))
var/mob/living/M = AM
if(AM != src.summoner)
M.adjust_fire_stacks(10)
M.adjust_fire_stacks(7)
M.IgniteMob()
/mob/living/simple_animal/hostile/guardian/fire/Bumped(AM as mob|obj)
if(istype(AM, /mob/living/))
var/mob/living/M = AM
if(AM != src.summoner)
M.adjust_fire_stacks(7)
M.IgniteMob()
//Standard
/mob/living/simple_animal/hostile/guardian/punch
melee_damage_lower = 25
melee_damage_upper = 25
melee_damage_lower = 20
melee_damage_upper = 20
damage_transfer = 0.5
playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls."
environment_smash = 2
magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated."
tech_fluff_string = "Boot sequence complete. Standard combat modules loaded. Nanoswarm online."
tech_fluff_string = "Boot sequence complete. Standard combat modules loaded. Holoparasite swarm online."
bio_fluff_string = "Your scarab swarm stirs to life, ready to tear apart your enemies."
var/battlecry = "AT"
@@ -199,63 +227,113 @@
playsound(loc, src.attack_sound, 50, 1, 1)
playsound(loc, src.attack_sound, 50, 1, 1)
//Fast Standard. Does less damage, has less resistance, but moves faster, has higher range
/mob/living/simple_animal/hostile/guardian/fast
melee_damage_lower = 20
melee_damage_upper = 20
damage_transfer = 0.7
speed = -1
range = 15
attacktext = "slices"
attack_sound = 'sound/weapons/bladeslice.ogg'
playstyle_string = "As a fast standard type, you have no special abilities and only light damage resistance, but deal high damage at high speed."
environment_smash = 1
magic_fluff_string = "..And draw the Shoes, bringer of great speed. The card is badly damaged, and barely legible."
tech_fluff_string = "Boot sequence complete. High speed combat modules active. Nanoswarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of moving at blinding speed."
//Defender. Does no damage, takes no damage, moves slowly.
/mob/living/simple_animal/hostile/guardian/shield
melee_damage_lower = 0
melee_damage_upper = 0
speed = 1
range = 10
damage_transfer = 0
friendly = "stares down"
status_flags = CANPUSH
playstyle_string = "As a defensive type, you are incapable of attacking and move slowly, but completely nullify any attack that hits you."
magic_fluff_string = "..And draw the Juggernaut, an invincible, unstoppable force."
tech_fluff_string = "Boot sequence complete. Defensive modules active. Nanoswarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, helpless, but invulnerable."
//Healer
/mob/living/simple_animal/hostile/guardian/healer
a_intent = "help"
a_intent = "harm"
friendly = "heals"
speed = 1
melee_damage_lower = 0
melee_damage_upper = 0
playstyle_string = "As a healer type, you are incapable of attacking, but can mend any wound simply by touching a target."
magic_fluff_string = "..And draw the CMO, a potent force of life and health."
tech_fluff_string = "Boot sequence complete. Medical modules active. Nanoswarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of mending wounds."
speed = 0
melee_damage_lower = 15
melee_damage_upper = 15
playstyle_string = "As a Support type, you may toggle your basic attacks to a healing mode. In addition, Shift-Clicking on an adjacent mob will warp them to your bluespace beacon after a short delay."
magic_fluff_string = "..And draw the CMO, a potent force of life...and death."
tech_fluff_string = "Boot sequence complete. Medical modules active. Bluespace modules activated. Holoparasite swarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of mending wounds and travelling via bluespace."
var/turf/simulated/floor/beacon
var/beacon_cooldown = 0
var/toggle = FALSE
/mob/living/simple_animal/hostile/guardian/healer/AttackingTarget()
..()
if(toggle == TRUE)
if(src.loc == summoner)
src << "<span class='danger'><B>You must be manifested to heal!</span></B>"
return
if(iscarbon(target))
var/mob/living/carbon/C = target
C.adjustBruteLoss(-5)
C.adjustFireLoss(-5)
C.adjustOxyLoss(-5)
C.adjustToxLoss(-5)
/mob/living/simple_animal/hostile/guardian/healer/verb/ToggleMode()
set name = "Toggle Mode"
set category = "Guardian"
set desc = "Toggle between combat and healing modes."
if(src.loc == summoner)
src << "<span class='danger'><B>You must be manifested to heal!</span></B>"
if(toggle)
a_intent = "harm"
speed = 0
damage_transfer = 0.7
melee_damage_lower = 15
melee_damage_upper = 15
src << "<span class='danger'><B>You switch to combat mode.</span></B>"
toggle = FALSE
else
a_intent = "help"
speed = 1
damage_transfer = 1
melee_damage_lower = 0
melee_damage_upper = 0
src << "<span class='danger'><B>You switch to healing mode.</span></B>"
toggle = TRUE
else
src << "<span class='danger'><B>You have to be recalled to toggle modes!</span></B>"
/mob/living/simple_animal/hostile/guardian/healer/verb/Beacon()
set name = "Place Bluespsace Beacon"
set category = "Guardian"
set desc = "Mark a floor as your beacon point, allowing you to warp targets to it. Your beacon will not work in unfavorable atmospheric conditions."
if(beacon_cooldown<world.time)
var/turf/beacon_loc = get_turf(src.loc)
if(istype(beacon_loc, /turf/simulated/floor))
var/turf/simulated/floor/F = beacon_loc
F.icon = 'icons/turf/floors.dmi'
F.name = "bluespace recieving pad"
F.desc = "A recieving zone for bluespace teleportations. Building a wall over it should disable it."
F.icon_state = "light_on-w"
src << "<span class='danger'><B>Beacon placed! You may now warp targets to it, including your user, via Shift+Click. </span></B>"
if(beacon)
beacon.ChangeTurf(/turf/simulated/floor/plating)
beacon = F
beacon_cooldown = world.time+3000
else
src << "<span class='danger'><B>Your power is on cooldown. You must wait five minutes between placing beacons.</span></B>"
/mob/living/simple_animal/hostile/guardian/healer/ShiftClickOn(atom/movable/A)
if(src.loc == summoner)
src << "<span class='danger'><B>You must be manifested to warp a target!</span></B>"
return
if(iscarbon(target))
var/mob/living/carbon/C = target
C.adjustBruteLoss(-5)
C.adjustFireLoss(-5)
C.adjustOxyLoss(-5)
C.adjustToxLoss(-5)
if(!beacon)
src << "<span class='danger'><B>You need a beacon placed to warp things!</span></B>"
return
if(!Adjacent(A))
src << "<span class='danger'><B>You must be adjacent to your target!</span></B>"
return
if((A.anchored))
src << "<span class='danger'><B>Your target can not be anchored!</span></B>"
return
src << "<span class='danger'><B>You begin to warp [A]</span></B>"
if(do_mob(src, A, 50))
if(!A.anchored)
if(src.beacon) //Check that the beacon still exists and is in a safe place. No instant kills.
if(beacon.air)
var/datum/gas_mixture/Z = beacon.air
if(Z.oxygen >= 16 && !Z.toxins && Z.carbon_dioxide < 10 && !Z.trace_gases.len)
if((Z.temperature > 270) && (Z.temperature < 360))
var/pressure = Z.return_pressure()
if((pressure > 20) && (pressure < 550))
do_teleport(A, beacon, 0)
else
src << "<span class='danger'><B>The beacon isn't in a safe location!</span></B>"
else
src << "<span class='danger'><B>The beacon isn't in a safe location!</span></B>"
else
src << "<span class='danger'><B>You need a beacon to warp things!</span></B>"
else
src << "<span class='danger'><B>You need to hold still!</span></B>"
///////////////////Ranged
@@ -263,7 +341,7 @@
/obj/item/projectile/guardian
name = "crystal spray"
icon_state = "guardian"
damage = 4
damage = 5
damage_type = BRUTE
/mob/living/simple_animal/hostile/guardian/ranged
@@ -271,7 +349,7 @@
friendly = "quietly assesses"
melee_damage_lower = 10
melee_damage_upper = 10
damage_transfer = 1.2
damage_transfer = 0.9
projectiletype = /obj/item/projectile/guardian
ranged_cooldown_cap = 0
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
@@ -279,7 +357,7 @@
range = 13
playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit."
magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat."
tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Nanoswarm online."
tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Holoparasite swarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of spraying shards of crystal."
var/list/snares = list()
var/toggle = FALSE
@@ -308,9 +386,7 @@
src << "<span class='danger'><B>You switch to scout mode.</span></B>"
toggle = TRUE
else
src << "<span class='danger'><B>You have to be recalled to toggle modes!.</span></B>"
src << "<span class='danger'><B>You have to be recalled to toggle modes!</span></B>"
/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare()
set name = "Set Surveillance Trap"
@@ -348,33 +424,10 @@
var/turf/snare_loc = get_turf(src.loc)
if(spawner)
spawner << "<span class='danger'><B>[AM] has crossed your surveillance trap at [get_area(snare_loc)].</span></B>"
///Bluespace
/mob/living/simple_animal/hostile/guardian/bluespace
ranged = 1
range = 15
melee_damage_lower = 15
melee_damage_upper = 15
speed = -1
attack_sound = 'sound/weapons/emitter.ogg'
projectiletype = /obj/item/projectile/magic/teleport
projectilesound = 'sound/weapons/emitter.ogg'
playstyle_string = "As a bluespace type, you have only light damage resistance, but are capable of shooting teleporation bolts as well as flinging enemies away with your standard attack."
magic_fluff_string = "..And draw the Wizard, master of teleportation."
tech_fluff_string = "Boot sequence complete. Experimental bluespace combat modules active. Nanoswarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, crackling with bluespace energy."
/mob/living/simple_animal/hostile/guardian/bluespace/AttackingTarget()
..()
if(istype(target, /atom/movable))
var/atom/movable/M = target
if(!M.anchored && M != src.summoner)
do_teleport(M, M, 10)
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
var/mob/living/simple_animal/hostile/guardian/G = spawner
if(G.summoner)
G.summoner << "<span class='danger'><B>[AM] has crossed your surveillance trap at [get_area(snare_loc)].</span></B>"
////Bomb
@@ -385,7 +438,7 @@
range = 13
playstyle_string = "As an explosive type, you have only moderate close combat abilities, but are capable of converting any adjacent item into a disguised bomb via shift click."
magic_fluff_string = "..And draw the Scientist, master of explosive death."
tech_fluff_string = "Boot sequence complete. Explosive modules active. Nanoswarm online."
tech_fluff_string = "Boot sequence complete. Explosive modules active. Holoparasite swarm online."
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of stealthily booby trapping items."
var/bomb_cooldown = 0
@@ -443,15 +496,6 @@
user << "<span class='notice'>Looks odd!</span>"
////////Creation
/obj/item/weapon/guardiancreator
@@ -465,10 +509,18 @@
var/use_message = "You shuffle the deck..."
var/used_message = "All the cards seem to be blank now."
var/failure_message = "..And draw a card! It's...blank? Maybe you should try again later."
var/list/possible_guardians = list("Fire", "Standard", "Shield", "Ranged", "Healer", "Fast", "Explosive")
var/ling_failure = "The deck refuses to respond to a souless creature such as you."
var/list/possible_guardians = list("Chaos", "Standard", "Ranged", "Support", "Explosive")
var/random = TRUE
/obj/item/weapon/guardiancreator/attack_self(mob/living/user)
for(var/mob/living/simple_animal/hostile/guardian/G in living_mob_list)
if (G.summoner == user)
user << "You already have a [mob_name]!"
return
if(user.mind && user.mind.changeling)
user << "[ling_failure]"
return
if(used == TRUE)
user << "[used_message]"
return
@@ -514,36 +566,24 @@
var/picked_color = randomColor(0)
switch(gaurdiantype)
if("Fire")
if("Chaos")
pickedtype = /mob/living/simple_animal/hostile/guardian/fire
if("Standard")
pickedtype = /mob/living/simple_animal/hostile/guardian/punch
if("Shield")
pickedtype = /mob/living/simple_animal/hostile/guardian/shield
if("Ranged")
pickedtype = /mob/living/simple_animal/hostile/guardian/ranged
if("Healer")
if("Support")
pickedtype = /mob/living/simple_animal/hostile/guardian/healer
if("Fast")
pickedtype = /mob/living/simple_animal/hostile/guardian/fast
if("Bluespace")
pickedtype = /mob/living/simple_animal/hostile/guardian/bluespace
if("Explosive")
pickedtype = /mob/living/simple_animal/hostile/guardian/bomb
var/mob/living/simple_animal/hostile/guardian/G = new pickedtype(user)
G.summoner = user
G.key = key
G.name = "[mob_name] [capitalize(picked_color)]"
G.real_name = "[mob_name] [capitalize(picked_color)]"
G.color = color2hex(picked_color)
G << "You are a [mob_name] bound to serve [user.real_name]."
G << "You are capable of manifesting or recalling to your master with verbs in the Guardian tab. You will also find a verb to communicate with them privately there."
G << "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself."
@@ -551,37 +591,42 @@
user.verbs += /mob/living/proc/guardian_comm
switch (theme)
if("magic")
G.name = "[mob_name] [capitalize(picked_color)]"
G.color = color2hex(picked_color)
G.real_name = "[mob_name] [capitalize(picked_color)]"
user << "[G.magic_fluff_string]."
if("tech")
var/colour = pick("orange", "neon", "pink", "red", "blue", "green")
G.name = "[mob_name] [capitalize(colour)]"
G.real_name = "[mob_name] [capitalize(colour)]"
G.icon_living = "parasite[colour]"
G.icon_state = "parasite[colour]"
G.animated_manifest = TRUE
user << "[G.tech_fluff_string]."
G.attacktext = "swarms"
G.speak_emote = list("states")
if("bio")
user << "[G.bio_fluff_string]."
G.attacktext = "swarms"
G.speak_emote = list("chitters")
/obj/item/weapon/guardiancreator/choose
random = FALSE
/obj/item/weapon/guardiancreator/tech
name = "parasitic nanomachine injector"
desc = "Though powerful in combat, these nanomachines require a living host as a source of fuel and home base."
name = "holoparasite injector"
desc = "It contains alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel."
icon = 'icons/obj/syringe.dmi'
icon_state = "combat_hypo"
theme = "tech"
mob_name = "Nanomachine Swarm"
mob_name = "Holoparasite"
use_message = "You start to power on the injector..."
used_message = "The injector has already been used."
failure_message = "<B>...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER.</B>"
ling_failure = "The holoparasites recoil in horror. They want nothing to do with a creature like you."
/obj/item/weapon/guardiancreator/tech/choose
random = FALSE
/obj/item/weapon/guardiancreator/biological
name = "scarab egg cluster"
desc = "A parasitic species that will nest in the closest living creature upon birth. While not great for your health, they'll defend their new 'hive' to the death."
@@ -595,3 +640,34 @@
/obj/item/weapon/guardiancreator/biological/choose
random = FALSE
/obj/item/weapon/paper/guardian
name = "Holoparasite Guide"
icon_state = "alienpaper_words"
info = {"<b>A list of Holoparasite Types</b><br>
<br>
<b>Chaos</b>: Ignites mobs on touch. teleports them at random on attack. Automatically extinguishes the user if they catch fire.<br>
<br>
<b>Standard</b>:Devestating close combat attacks and high damage resist. No special powers.<br>
<br>
<b>Ranged</b>: Has two modes. Ranged: Extremely weak, highly spammable projectile attack. Scout: Can not attack, but can move through walls. Can lay surveillance snares in either mode.<br>
<br>
<b>Support</b>:Has two modes. Combat: Medium power attacks and damage resist. Healer: Attacks heal damage, but low damage resist and slow movemen. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.<br>
<br>
<b>Explosive</b>: High damage resist and medium power attack. Can turn any object into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered.<br>
"}
/obj/item/weapon/paper/guardian/update_icon()
return
/obj/item/weapon/storage/box/syndie_kit/guardian
name = "holoparasite injector kit"
/obj/item/weapon/storage/box/syndie_kit/guardian/New()
..()
new /obj/item/weapon/guardiancreator/tech/choose(src)
new /obj/item/weapon/paper/guardian(src)
return
@@ -14,7 +14,7 @@
taunt_chance = 25
turns_per_move = 5
see_in_dark = 6
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear = 5)
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -18,7 +18,6 @@
var/turns_per_move = 1
var/turns_since_move = 0
var/list/butcher_results = null
var/stop_automated_movement = 0 //Use this to temporarely stop random movement or to if you write special movement code for animals.
var/wander = 1 // Does the mob wander around when idle?
var/stop_automated_movement_when_pulled = 1 //When set to 1 this stops the animal from moving when someone is pulling it.
@@ -364,16 +363,6 @@
if(O.flags & NOBLUDGEON)
return
if((butcher_results) && (stat == DEAD))
user.changeNext_move(CLICK_CD_MELEE)
var/sharpness = is_sharp(O)
if(sharpness)
user << "<span class='notice'>You begin to butcher [src]...</span>"
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
if(do_mob(user, src, 80/sharpness))
harvest(user)
return
..()
/mob/living/simple_animal/movement_delay()
@@ -468,11 +457,6 @@
if(alone && partner && children < 3)
new childtype(loc)
// Harvest an animal's delicious byproducts
/mob/living/simple_animal/proc/harvest(mob/living/user)
visible_message("<span class='notice'>[user] butchers [src].</span>")
gib()
/mob/living/simple_animal/stripPanelUnequip(obj/item/what, mob/who, where, child_override)
if(!child_override)
src << "<span class='warning'>You don't have the dexterity to do this!</span>"
+12 -2
View File
@@ -2,7 +2,7 @@
/obj/machinery/power/emitter
name = "Emitter"
desc = "A heavy duty industrial laser"
desc = "A heavy duty industrial laser.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon = 'icons/obj/singularity.dmi'
icon_state = "emitter"
anchored = 0
@@ -57,9 +57,19 @@
if (src.anchored)
usr << "<span class='warning'>It is fastened to the floor!</span>"
return 0
src.dir = turn(src.dir, 90)
src.dir = turn(src.dir, 270)
return 1
/obj/machinery/power/emitter/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
/obj/machinery/power/emitter/initialize()
..()
if(state == 2 && anchored)
@@ -71,6 +71,10 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
var/strength = null
var/desc_holder = null
/obj/structure/particle_accelerator/examine(mob/user)
..()
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
/obj/structure/particle_accelerator/Destroy()
construction_state = 0
if(master)
@@ -101,6 +105,16 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
src.dir = turn(src.dir, 270)
return 1
/obj/structure/particle_accelerator/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
/obj/structure/particle_accelerator/verb/rotateccw()
set name = "Rotate Counter Clockwise"
set category = "Object"
@@ -1,101 +1,139 @@
////////////////INTERNAL MAGAZINES//////////////////////
/obj/item/ammo_box/magazine/internal
desc = "Oh god, this shouldn't be here"
//internals magazines are accessible, so replace spent ammo if full when trying to put a live one in
/obj/item/ammo_box/magazine/internal/give_round(obj/item/ammo_casing/R)
return ..(R,1)
// Revolver internal mags
/obj/item/ammo_box/magazine/internal/cylinder
name = "revolver cylinder"
desc = "Oh god, this shouldn't be here"
ammo_type = /obj/item/ammo_casing/a357
caliber = "357"
max_ammo = 7
/obj/item/ammo_box/magazine/internal/cylinder/ammo_count(countempties = 1)
if (!countempties)
var/boolets = 0
for (var/i = 1, i <= stored_ammo.len, i++)
var/obj/item/ammo_casing/bullet = stored_ammo[i]
if (bullet.BB)
boolets++
return boolets
else
return ..()
var/boolets = 0
for(var/obj/item/ammo_casing/bullet in stored_ammo)
if(bullet && (bullet.BB || countempties))
boolets++
/obj/item/ammo_box/magazine/internal/cylinder/rus357
name = "russian revolver cylinder"
desc = "Oh god, this shouldn't be here"
ammo_type = /obj/item/ammo_casing/a357
caliber = "357"
max_ammo = 6
multiload = 0
return boolets
/obj/item/ammo_box/magazine/internal/cylinder/rus357/New()
stored_ammo += new ammo_type(src)
/obj/item/ammo_box/magazine/internal/cylinder/get_round(keep = 0)
rotate()
var/b = stored_ammo[1]
if(!keep)
stored_ammo[1] = null
return b
/obj/item/ammo_box/magazine/internal/cylinder/proc/rotate()
var/b = stored_ammo[1]
stored_ammo.Cut(1,2)
stored_ammo.Insert(0, b)
/obj/item/ammo_box/magazine/internal/cylinder/proc/spin()
for(var/i in 1 to rand(0, max_ammo*2))
rotate()
/obj/item/ammo_box/magazine/internal/cylinder/give_round(obj/item/ammo_casing/R, replace_spent = 0)
if(!R || (caliber && R.caliber != caliber) || (!caliber && R.type != ammo_type))
return 0
for(var/i in 1 to stored_ammo.len)
var/obj/item/ammo_casing/bullet = stored_ammo[i]
if(!bullet || !bullet.BB) // found a spent ammo
stored_ammo[i] = R
R.loc = src
if(bullet)
bullet.loc = get_turf(src.loc)
return 1
return 0
/obj/item/ammo_box/magazine/internal/cylinder/rev38
name = "d-tiv revolver cylinder"
desc = "Oh god, this shouldn't be here"
ammo_type = /obj/item/ammo_casing/c38
caliber = "38"
max_ammo = 6
/obj/item/ammo_box/magazine/internal/cylinder/grenademulti
name = "grenade launcher internal magazine"
ammo_type = /obj/item/ammo_casing/a40mm
caliber = "40mm"
max_ammo = 6
// Shotgun internal mags
/obj/item/ammo_box/magazine/internal/shot
name = "shotgun internal magazine"
desc = "Oh god, this shouldn't be here"
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
caliber = "shotgun"
max_ammo = 4
multiload = 0
/obj/item/ammo_box/magazine/internal/shotcom
/obj/item/ammo_box/magazine/internal/shot/ammo_count(countempties = 1)
if (!countempties)
var/boolets = 0
for(var/obj/item/ammo_casing/bullet in stored_ammo)
if(bullet.BB)
boolets++
return boolets
else
return ..()
/obj/item/ammo_box/magazine/internal/shot/com
name = "combat shotgun internal magazine"
desc = "Oh god, this shouldn't be here"
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
caliber = "shotgun"
max_ammo = 6
multiload = 0
/obj/item/ammo_box/magazine/internal/cylinder/dualshot
/obj/item/ammo_box/magazine/internal/shot/dual
name = "double-barrel shotgun internal magazine"
desc = "This doesn't even exist"
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
caliber = "shotgun"
max_ammo = 2
multiload = 0
/obj/item/ammo_box/magazine/internal/cylinder/improvised
/obj/item/ammo_box/magazine/internal/shot/improvised
name = "improvised shotgun internal magazine"
desc = "This doesn't even exist"
ammo_type = /obj/item/ammo_casing/shotgun/improvised
caliber = "shotgun"
max_ammo = 1
multiload = 0
/obj/item/ammo_box/magazine/internal/shotriot
/obj/item/ammo_box/magazine/internal/shot/riot
name = "riot shotgun internal magazine"
desc = "Oh god, this shouldn't be here"
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
caliber = "shotgun"
max_ammo = 6
multiload = 0
/obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher
/obj/item/ammo_box/magazine/internal/grenadelauncher
name = "grenade launcher internal magazine"
ammo_type = /obj/item/ammo_casing/a40mm
caliber = "40mm"
max_ammo = 1
/obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher/multi
ammo_type = /obj/item/ammo_casing/a40mm
max_ammo = 6
/obj/item/ammo_box/magazine/internal/cylinder/speargun
/obj/item/ammo_box/magazine/internal/speargun
name = "speargun internal magazine"
ammo_type = /obj/item/ammo_casing/caseless/magspear
caliber = "speargun"
max_ammo = 1
/obj/item/ammo_box/magazine/internal/rus357
name = "russian revolver cylinder"
ammo_type = /obj/item/ammo_casing/a357
caliber = "357"
max_ammo = 6
multiload = 0
/obj/item/ammo_box/magazine/internal/rus357/New()
stored_ammo += new ammo_type(src)
/obj/item/ammo_box/magazine/internal/boltaction
name = "bolt action rifle internal magazine"
desc = "Oh god, this shouldn't be here"
+47 -7
View File
@@ -122,8 +122,12 @@
/obj/item/weapon/gun/afterattack(atom/target as mob|obj|turf, mob/living/carbon/human/user as mob|obj, flag, params)//TODO: go over this
if(flag) //It's adjacent, is the user, or is on the user's person
if(istype(target, /mob/) && target != user && !(target in user.contents)) //We make sure that it is a mob, it's not us or part of us.
if(user.a_intent == "harm") //Flogging action
if(istype(target, /mob/) && !(target in user.contents) && target != user && user.a_intent == "harm")
//We make sure that it is a mob, it's not us or part of us.
return //Flogging action
else if(ishuman(target) && ishuman(user))
if(user.zone_sel.selecting == "mouth")
handle_suicide(user, target, params)
return
else
return
@@ -134,8 +138,7 @@
var/mob/living/M = user
if (M.disabilities & CLUMSY && prob(40))
user << "<span class='userdanger'>You shoot yourself in the foot with \the [src]!</span>"
var/shot_leg = pick("l_leg", "r_leg")
process_fire(user,user,0,params, zone_override = shot_leg)
process_fire(user,user,0,params)
M.drop_item()
return
@@ -179,7 +182,7 @@
return 0
/obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override)
/obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params)
add_fingerprint(user)
if(semicd)
@@ -197,7 +200,7 @@
if( i>1 && !(src in get_both_hands(user))) //for burst firing
break
if(chambered)
if(!chambered.fire(target, user, params, , suppressed, zone_override))
if(!chambered.fire(target, user, params, , suppressed))
shoot_with_empty_chamber(user)
break
else
@@ -213,7 +216,7 @@
sleep(fire_delay)
else
if(chambered)
if(!chambered.fire(target, user, params, , suppressed, zone_override))
if(!chambered.fire(target, user, params, , suppressed))
shoot_with_empty_chamber(user)
return
else
@@ -362,3 +365,40 @@
name = input
M << "You name the gun [input]. Say hello to your new friend."
return
/obj/item/weapon/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params)
if(!ishuman(user) || !ishuman(target))
return
if(semicd)
return
if(user == target)
target.visible_message("<span class='warning'>[user] sticks [src] in their mouth, ready to pull the trigger...</span>", \
"<span class='userdanger'>You stick [src] in your mouth, ready to pull the trigger...</span>")
else
target.visible_message("<span class='warning'>[user] points [src] at [target]'s head, ready to pull the trigger...</span>", \
"<span class='userdanger'>[user] points [src] at your head, ready to pull the trigger...</span>")
semicd = 1
if(!do_mob(user, target, 120) || user.zone_sel.selecting != "mouth")
if(user == target && user)
user.visible_message("<span class='notice'>[user] decided life was worth living.</span>")
else if(user && target && target.Adjacent(user))
target.visible_message("<span class='notice'>[user] has decided to spare [target]'s life.</span>", "<span class='notice'>[user] has decided to spare your life!</span>")
semicd = 0
return
semicd = 0
if(!can_trigger_gun(user))
return
target.visible_message("<span class='warning'>[user] pulls the trigger!</span>", "<span class='userdanger'>[user] pulls the trigger!</span>")
if(chambered && chambered.BB)
chambered.BB.damage *= 5
process_fire(target, user, 1, params)
+36 -32
View File
@@ -51,8 +51,9 @@
icon_state = "nucgun"
item_state = "nucgun"
origin_tech = "combat=3;materials=5;powerstorage=3"
var/fail_state = 0
var/fail_tick = 0
var/charge_tick = 0
var/charge_delay = 5
pin = null
can_charge = 0
ammo_x_offset = 1
@@ -62,46 +63,40 @@
..()
SSobj.processing |= src
/obj/item/weapon/gun/energy/gun/nuclear/Destroy()
SSobj.processing.Remove(src)
return ..()
/obj/item/weapon/gun/energy/gun/nuclear/process()
if(fail_tick > 0)
fail_tick--
charge_tick++
if(charge_tick < 4) return 0
if(charge_tick < charge_delay)
return
charge_tick = 0
if(!power_supply) return 0
if((power_supply.charge / power_supply.maxcharge) != 1)
if(!failcheck()) return 0
power_supply.give(100)
update_icon()
return 1
if(!power_supply)
return
power_supply.give(100)
update_icon()
/obj/item/weapon/gun/energy/gun/nuclear/shoot_live_shot()
failcheck()
update_icon()
..()
/obj/item/weapon/gun/energy/gun/nuclear/proc/failcheck()
fail_state = 0
if (prob(src.reliability)) return 1 //No failure
if (prob(src.reliability))
for (var/mob/living/M in range(0,src)) //Only a minor failure, enjoy your radiation if you're in the same tile or carrying it
if (src in M.contents)
M << "<span class='danger'>Your gun feels pleasantly warm for a moment.</span>"
else
M << "<span class='danger'>You feel a warm sensation.</span>"
M.irradiate(rand(3,120))
fail_state = 1
else
for (var/mob/living/M in range(rand(1,4),src)) //Big failure, TIME FOR RADIATION BITCHES
if (src in M.contents)
M << "<span class='danger'>Your gun's reactor overloads!</span>"
M << "<span class='danger'>You feel a wave of heat wash over you.</span>"
M.irradiate(300)
fail_state = 2 //break the gun so it stops recharging
crit_fail = 1 //So that it may be properly perfected in this state.
SSobj.processing.Remove(src)
update_icon()
return 0
if(!prob(reliability) && istype(loc, /mob/living))
var/mob/living/M = loc
switch(fail_tick)
if(0 to 200)
fail_tick += (2*(100-reliability))
M.irradiate(40)
M << "<span class='userdanger'>Your [name] feels warmer.</span>"
if(201 to INFINITY)
SSobj.processing.Remove(src)
M.irradiate(80)
crit_fail = 1
M << "<span class='userdanger'>Your [name]'s reactor overloads!</span>"
/obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity)
..()
@@ -109,4 +104,13 @@
/obj/item/weapon/gun/energy/gun/nuclear/update_icon()
..()
overlays += "[icon_state]_fail_[fail_state]"
if(crit_fail)
overlays += "[icon_state]_fail_3"
else
switch(fail_tick)
if(0)
overlays += "[icon_state]_fail_0"
if(1 to 150)
overlays += "[icon_state]_fail_1"
if(151 to INFINITY)
overlays += "[icon_state]_fail_2"
@@ -6,7 +6,7 @@
name = "grenade launcher"
icon_state = "dshotgun-sawn"
item_state = "gun"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher
mag_type = /obj/item/ammo_box/magazine/internal/grenadelauncher
fire_sound = 'sound/weapons/grenadelaunch.ogg'
w_class = 3
pin = /obj/item/device/firing_pin/implant/pindicate
@@ -24,7 +24,7 @@
name = "multi grenade launcher"
icon = 'icons/mecha/mecha_equipment.dmi'
icon_state = "mecha_grenadelnchr"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenadelauncher/multi
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenademulti
/obj/item/weapon/gun/projectile/revolver/grenadelauncher/cyborg/attack_self()
return
@@ -56,7 +56,7 @@
w_class = 4
force = 10
can_suppress = 0
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/speargun
mag_type = /obj/item/ammo_box/magazine/internal/speargun
fire_sound = 'sound/weapons/grenadelaunch.ogg'
burst_size = 1
fire_delay = 0
@@ -4,13 +4,22 @@
icon_state = "revolver"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder
/obj/item/weapon/gun/projectile/revolver/chamber_round()
if ((chambered && chambered.BB)|| !magazine) //if there's a live ammo in the chamber or no magazine
return
else if (magazine.ammo_count())
/obj/item/weapon/gun/projectile/revolver/New()
..()
if(!istype(magazine, /obj/item/ammo_box/magazine/internal/cylinder))
verbs -= /obj/item/weapon/gun/projectile/revolver/verb/spin
/obj/item/weapon/gun/projectile/revolver/chamber_round(var/spin = 1)
if(spin)
chambered = magazine.get_round(1)
else
chambered = magazine.stored_ammo[1]
return
/obj/item/weapon/gun/projectile/revolver/shoot_with_empty_chamber(mob/living/user as mob|obj)
..()
chamber_round(1)
/obj/item/weapon/gun/projectile/revolver/process_chamber()
return ..(0, 1)
@@ -20,7 +29,7 @@
user << "<span class='notice'>You load [num_loaded] shell\s into \the [src].</span>"
A.update_icon()
update_icon()
chamber_round()
chamber_round(0)
if(unique_rename)
if(istype(A, /obj/item/weapon/pen))
@@ -28,19 +37,39 @@
/obj/item/weapon/gun/projectile/revolver/attack_self(mob/living/user)
var/num_unloaded = 0
chambered = null
while (get_ammo() > 0)
var/obj/item/ammo_casing/CB
CB = magazine.get_round(0)
chambered = null
CB.loc = get_turf(src.loc)
CB.SpinAnimation(10, 1)
CB.update_icon()
num_unloaded++
if(CB)
CB.loc = get_turf(src.loc)
CB.SpinAnimation(10, 1)
CB.update_icon()
num_unloaded++
if (num_unloaded)
user << "<span class='notice'>You unload [num_unloaded] shell\s from [src].</span>"
else
user << "<span class='warning'>[src] is empty!</span>"
/obj/item/weapon/gun/projectile/revolver/verb/spin()
set name = "Spin Chamber"
set category = "Object"
set desc = "Click to spin your revolver's chamber."
var/mob/M = usr
if(M.stat || !in_range(M,src))
return
if(istype(magazine, /obj/item/ammo_box/magazine/internal/cylinder))
var/obj/item/ammo_box/magazine/internal/cylinder/C = magazine
C.spin()
chamber_round(0)
usr.visible_message("[usr] spins [src]'s chamber.", "<span class='notice'>You spin [src]'s chamber.</span>")
else
verbs -= /obj/item/weapon/gun/projectile/revolver/verb/spin
/obj/item/weapon/gun/projectile/revolver/can_shoot()
return get_ammo(0,0)
@@ -129,7 +158,7 @@
name = "\improper russian revolver"
desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull."
origin_tech = "combat=2;materials=2"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357
mag_type = /obj/item/ammo_box/magazine/internal/rus357
var/spun = 0
/obj/item/weapon/gun/projectile/revolver/russian/New()
@@ -68,7 +68,7 @@
name = "riot shotgun"
desc = "A sturdy shotgun with a longer magazine and a fixed tactical stock designed for non-lethal riot control."
icon_state = "riotshotgun"
mag_type = /obj/item/ammo_box/magazine/internal/shotriot
mag_type = /obj/item/ammo_box/magazine/internal/shot/riot
sawn_desc = "Come with me if you want to live."
/obj/item/weapon/gun/projectile/shotgun/riot/attackby(obj/item/A, mob/user, params)
@@ -127,7 +127,7 @@
flags = CONDUCT
slot_flags = SLOT_BACK
origin_tech = "combat=3;materials=1"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/dualshot
mag_type = /obj/item/ammo_box/magazine/internal/shot/dual
sawn_desc = "Omar's coming!"
unique_rename = 1
unique_reskin = 1
@@ -179,7 +179,7 @@
force = 10
slot_flags = null
origin_tech = "combat=2;materials=2"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/improvised
mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised
sawn_desc = "I'm just here for the gasoline."
unique_rename = 0
unique_reskin = 0
@@ -298,5 +298,5 @@
desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath."
icon_state = "cshotgun"
origin_tech = "combat=5;materials=2"
mag_type = /obj/item/ammo_box/magazine/internal/shotcom
mag_type = /obj/item/ammo_box/magazine/internal/shot/com
w_class = 5
@@ -106,5 +106,7 @@
else
visible_message("<span class='notice'>[src] spills its contents all over [target].</span>")
reagents.reaction(target, TOUCH)
if(qdeleted(src))
return
reagents.clear_reagents()
@@ -16,6 +16,10 @@
var/dpdir = 0 // directions as disposalpipe
var/base_state = "pipe-s"
/obj/structure/disposalconstruct/examine(mob/user)
..()
user << "<span class='notice'>Alt-click to rotate it clockwise.</span>"
/obj/structure/disposalconstruct/New(var/loc, var/pipe_type, var/direction = 1)
..(loc)
if(pipe_type)
@@ -104,6 +108,16 @@
dir = turn(dir, -90)
update()
/obj/structure/disposalconstruct/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
/obj/structure/disposalconstruct/verb/flip()
set name = "Flip Pipe"
set category = "Object"
@@ -477,7 +477,7 @@
icon_state = "tile-bluespace"
w_class = 3
force = 6
materials = list(MAT_METAL=937.5)
materials = list(MAT_METAL=500)
throwforce = 10
throw_speed = 3
throw_range = 7
@@ -500,7 +500,7 @@
icon_state = "tile-sepia"
w_class = 3
force = 6
materials = list(MAT_METAL=937.5)
materials = list(MAT_METAL=500)
throwforce = 10
throw_speed = 3
throw_range = 7
+30
View File
@@ -55,6 +55,36 @@
-->
<div class="commit sansserif">
<h2 class="date">24 September 2015</h2>
<h3 class="author">Jordie0608 updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Advanced energy guns now only critically fail after successive minor failures. Cease firing after multiple recent minor failures to avoid critical ones.</li>
</ul>
<h3 class="author">Kor updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Guardian Spirit types and powers have been heavily reworked. Full details of each type are available on the wiki.</li>
<li class="rscadd">Guardian damage transfer to users now deals cloneloss if their user is in crit.</li>
<li class="rscadd">Guardians are now undergoing a trial run in the traitor uplink, under the name of Holoparasites.</li>
<li class="rscadd">You can now hang human mobs (dead or alive) from meatspikes. Escaping the meatspike will further damage the victim.</li>
<li class="rscdel">You can no longer slam humans into the meatspike as an attack.</li>
</ul>
<h2 class="date">23 September 2015</h2>
<h3 class="author">Xhuis updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Syndicate medical cyborgs have been added.</li>
<li class="rscadd">The Dart Pistol is now available from the uplink for 4 telecrystals. It functions as a pocket-sized syringe gun with a quieter firing sound.</li>
<li class="tweak">Boxes of riot foam darts now cost 2 telecrystals, down from 10, and are available to traitors.</li>
<li class="tweak">Foam dart pistols now cost 3 telecrystals, down from 6.</li>
<li class="tweak">Syndicate cyborg teleporters now allow a choice between Assault and Medical cyborgs.</li>
<li class="tweak">Syndicate cyborgs are now distinguished as Syndicate Assault.</li>
<li class="tweak">Syndicate cyborg energy swords now cost 50 energy per use, down from 500.</li>
<li class="tweak">Airlock charges now cost 2 telecrystals, down from 5.</li>
<li class="tweak">Airlock charges are much more powerful.</li>
<li class="tweak">There is no longer a 25% chance to detonate an airlock charge while removing it.</li>
<li class="tweak">The description of many uplink items has been changed to better reflect their use.</li>
</ul>
<h2 class="date">22 September 2015</h2>
<h3 class="author">Kor updated:</h3>
<ul class="changes bgimages16">
+32
View File
@@ -1893,3 +1893,35 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
(arm blade, chameleon skin, organic suit).
xxalpha:
- rscadd: Added a researchable cyborg self-repair module to the robotics fabricator.
2015-09-23:
Xhuis:
- rscadd: Syndicate medical cyborgs have been added.
- rscadd: The Dart Pistol is now available from the uplink for 4 telecrystals. It
functions as a pocket-sized syringe gun with a quieter firing sound.
- tweak: Boxes of riot foam darts now cost 2 telecrystals, down from 10, and are
available to traitors.
- tweak: Foam dart pistols now cost 3 telecrystals, down from 6.
- tweak: Syndicate cyborg teleporters now allow a choice between Assault and Medical
cyborgs.
- tweak: Syndicate cyborgs are now distinguished as Syndicate Assault.
- tweak: Syndicate cyborg energy swords now cost 50 energy per use, down from 500.
- tweak: Airlock charges now cost 2 telecrystals, down from 5.
- tweak: Airlock charges are much more powerful.
- tweak: There is no longer a 25% chance to detonate an airlock charge while removing
it.
- tweak: The description of many uplink items has been changed to better reflect
their use.
2015-09-24:
Jordie0608:
- tweak: Advanced energy guns now only critically fail after successive minor failures.
Cease firing after multiple recent minor failures to avoid critical ones.
Kor:
- rscadd: Guardian Spirit types and powers have been heavily reworked. Full details
of each type are available on the wiki.
- rscadd: Guardian damage transfer to users now deals cloneloss if their user is
in crit.
- rscadd: Guardians are now undergoing a trial run in the traitor uplink, under
the name of Holoparasites.
- rscadd: You can now hang human mobs (dead or alive) from meatspikes. Escaping
the meatspike will further damage the victim.
- rscdel: You can no longer slam humans into the meatspike as an attack.
-15
View File
@@ -1,15 +0,0 @@
author: Xhuis
delete-after: True
changes:
- rscadd: "Syndicate medical cyborgs have been added."
- rscadd: "The Dart Pistol is now available from the uplink for 4 telecrystals. It functions as a pocket-sized syringe gun with a quieter firing sound."
- tweak: "Boxes of riot foam darts now cost 2 telecrystals, down from 10, and are available to traitors."
- tweak: "Foam dart pistols now cost 3 telecrystals, down from 6."
- tweak: "Syndicate cyborg teleporters now allow a choice between Assault and Medical cyborgs."
- tweak: "Syndicate cyborgs are now distinguished as Syndicate Assault."
- tweak: "Syndicate cyborg energy swords now cost 50 energy per use, down from 500."
- tweak: "Airlock charges now cost 2 telecrystals, down from 5."
- tweak: "Airlock charges are much more powerful."
- tweak: "There is no longer a 25% chance to detonate an airlock charge while removing it."
- tweak: "The description of many uplink items has been changed to better reflect their use."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 KiB

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 36 KiB