@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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]")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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*********************************/
|
||||
|
||||
@@ -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 = ""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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."
|
||||
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 229 KiB |
|
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 257 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 36 KiB |