mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 20:16:55 +01:00
merge conflict fix
This commit is contained in:
+10
-10
@@ -77,19 +77,19 @@ actual development.
|
||||
do this:
|
||||
```
|
||||
/datum/datum1/proc/proc1()
|
||||
if (thing1)
|
||||
if (!thing2)
|
||||
if (thing3 == 30)
|
||||
if(thing1)
|
||||
if(!thing2)
|
||||
if(thing3 == 30)
|
||||
do stuff
|
||||
```
|
||||
Instead, you should do this:
|
||||
```
|
||||
/datum/datum1/proc/proc1()
|
||||
if (!thing1)
|
||||
if(!thing1)
|
||||
return
|
||||
if (thing2)
|
||||
if(thing2)
|
||||
return
|
||||
if (thing3 != 30)
|
||||
if(thing3 != 30)
|
||||
return
|
||||
do stuff
|
||||
```
|
||||
@@ -101,7 +101,7 @@ actual development.
|
||||
`visible_message()`.
|
||||
- Bad:
|
||||
```
|
||||
for (var/mob/M in viewers(src))
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message("<span class='warning'>Arbitrary text</span>")
|
||||
```
|
||||
- Good:
|
||||
@@ -151,9 +151,9 @@ responsible for properly tagging new pull requests and issues, moderating commen
|
||||
pull requests/issues, and merging/closing pull requests.
|
||||
|
||||
### Maintainer List
|
||||
- [MarkvA](https://github.com/Markolie)
|
||||
- [tigercat2000](https://github.com/tigercat2000)
|
||||
- [Fox P McCloud](https://github.com/Fox-McCloud)
|
||||
- [TheDZD](https://github.com/TheDZD)
|
||||
- [Crazy Lemon](https://github.com/Crazylemon64)
|
||||
|
||||
### Maintainer instructions
|
||||
- Do not `self-merge`; this refers to the practice of opening a pull request, then
|
||||
@@ -168,4 +168,4 @@ pull requests/issues, and merging/closing pull requests.
|
||||
- The shortest waiting period for -any- feature or balancing altering pull request is 24
|
||||
hours, to allow other coders and the community time to discuss the proposed changes.
|
||||
- If the discussion is active, or the change is controversial, the pull request is to be
|
||||
put on hold until a consensus is reached.
|
||||
put on hold until a consensus is reached.
|
||||
|
||||
@@ -7612,7 +7612,6 @@
|
||||
"cQt" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/obj/machinery/camera{c_tag = "Virology - Break Room"; dir = 2; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
|
||||
"cQu" = (/obj/item/device/radio/intercom{frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/table/glass,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitegreen"},/area/medical/virology)
|
||||
"cQv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cQw" = (/obj/machinery/light/small{dir = 8},/obj/structure/closet/wardrobe/black,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/glass/bottle/reagent/formaldehyde,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
|
||||
"cQx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cQy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
|
||||
"cQz" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
|
||||
@@ -8028,7 +8027,6 @@
|
||||
"cYt" = (/obj/machinery/hologram/holopad,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"})
|
||||
"cYu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"})
|
||||
"cYv" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology{name = "\improper Secure Lab"})
|
||||
"cYw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
|
||||
"cYx" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness{name = "\improper Recreation Area"})
|
||||
"cYy" = (/obj/machinery/light/small,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/morgue)
|
||||
"cYz" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=14.8-Dorms-Lockers"; location = "14.5-Recreation"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness{name = "\improper Recreation Area"})
|
||||
@@ -8658,10 +8656,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcCfcCfcCfcCfcCfaaaclIabqcCfcCfcCfcCfcCfaaaarBaaaabqaaaaaaaaabZUcPGcNacNbbZUcGZcEYcKzcKycKDcKAcGocKHcEYcKWcKXcFdcFdcFdcKecFdcFdcFdcKYcDecwqcKZcLbcLacLdcLccLecBvcBvcLfcDgcBvczCczCczCczCczCczCcLgcGqcGrcGscGtcGucGvcGwczMcGxcGycGzcGAcGBcGCcGDcdlcGFcGGcGHcGIcGIcGJcGKcGLcGMcGNcdncGPcGQcGRcGScGTcGUcGVcGVcGVcGWcBNabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcALcFNcGYcFNcALabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupaaaabqaaaabqaaaabqaaacmRaaaabqaaaabqabqabqabqaupaaaaaaaaaaaaabqbZUcNOcNPcNQbZUcEQcEYcLhcGocLicGocGocLjcEYcxpcLvcLkcLKcLwcLWcLwcLwcLwcLYcLXcxycKZcMacLZcLdcMbcMccImcMecMdcMrcMfcIocMwcIncMLcImcMScMTczGczHcHncHocHocHpcHqczMcHrcHscHtcDpcHvcHwcHxcdMcHzcHAcHBcHCceEcHEcHFcHGcHHcHIcHJceQcHLcHMcHNcHOcHPcHQcHRcHScHTcBNabqabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcHUcALcHVcHWcHXcALcHUabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaacAfcAfcAfcAfcAfabqcHYabqcAfcAfcAfcAfcAfabqarBaaaaaaaaaaaaaaabZUcOJcOKcfbbZUcMUcEYcMWcMVcNccMXcNscNicEYcNIcNKcNJcNMcNLcNNcNKcNKcNScOqcNUcwqcKZcOIcOHcLdcOLcOUcImcPkcOYcPlcIncIocPucPwcPvcImcIscnscgxcItcBJcIucFOcIwcIucIxcIxcIxcIxcIxcIycxPcIzcEycIAcIAcIBcICcIDcIEcIFcIGcIHcIIcIJcEKcIKcILcIMcEycINcBNcBNcFHcBNcFHarAabqaaaaaaabqaaaaaaabqabqabqaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqabqcALcALcIOcIPcIPcIPcIQcALcALabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcBdcBecBecBecBecBfckrcBgcBhcBhcBhcBhcBiabqarBaaaaaaaaaaaaaaabZUbZUcfccPEcPFcPxcEYcEYcEYcEYcEYcEYcEYcEYcPycPycPycPzcPycPycPycPycPycPBcPAcPDcKZcKZcQbcLdcQfcLdcImcQwcMdcQzcIncIocQAcQCcQBcImcJgcnscgxcvmcwEcQKcJicJjcJkcJlcJmcJncJocJpcJqcCOczQdgSdgSdgSdgSdgSdgScJrcJscJtcJucJvcJwcEKbZUcFGbZUcFHcJxcJycJzcJAcJBarAarAabqabqabqabqabqabqabqaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqcJCcJDcJCcIPcJEcIPcXxcJGcFNabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcBdcBecBecBecBecBfckrcBgcBhcBhcBhcBhcBiabqarBaaaaaaaaaaaaaaabZUbZUcfccPEcPFcPxcEYcEYcEYcEYcEYcEYcEYcEYcPycPycPycPzcPycPycPycPycPycPBcPAcPDcKZcKZcQbcLdcQfcLdcImcyqcMdcQzcIncIocQAcQCcQBcImcJgcnscgxcvmcwEcQKcJicJjcJkcJlcJmcJncJocJpcJqcCOczQdgSdgSdgSdgSdgSdgScJrcJscJtcJucJvcJwcEKbZUcFGbZUcFHcJxcJycJzcJAcJBarAarAabqabqabqabqabqabqabqaaaabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqcJCcJDcJCcIPcJEcIPcXxcJGcFNabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabqcCfcCfcCfcCfcCfaaaclIaaacCfcCfcCfcCfcCfaaaaupaaaaaaaaaaaaaaaaaabZUbZUbZUbZUcJRcogcogcogcogcNTcogcogcQVcogcogcogcRkcNTcNTcRlcRocPycRpcNUcRLcREcwjcRMcwjcRMcSvcImcSBcMdcSCcIocSPcSMcTncTecImcMScEXcgxcvmcKpcTwcKrcKscKtcKtcKtcKucKvcJpcgCcCOcKwdgScKxcfHcfscgLdgTcYScKBbRzcKEcKFcEKcrUcKGccscfYcFHcFHcFHcFHcFHcHfcKIarAabqaaaaaaaaaaaaaaaabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaabqabqcALcALcKJcIPcIPcIPcKKcALcALabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBaaaaaaabqabqabqaaaaaacKLabqaaaaaaabqabqaaaaaaarBabqaaaaaaaaaaaaaaaaaaaaaaaabZUbZUbZUbZUbZUbZUbZUbZUbZUbZUbZUcoDcuVcTFchycoDcTZcjicUacUocUecUqcUpcUpcUrcUpcUFcUVcUUcVbcUWcVmcVlcVucVtcVEcVvcWkcVKcWGcWlcWHcIxcIxcLlcLmcLncLocLpcLqcLrcJpcLscLtcLucBNcKxcfHchuchuchEcLxcLycLzcJucLAcEKcdNcLBceNchycLCbZUabqabqabqabqabqabqabqaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcHUcALcLDcLEcLFcALcHUabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaacKLaaaaaaaaaaaaabqaaaaaaaupaaacHZcHZcHZcFvcHZcHZcHZaaaabqaaaaaaaaaabqaaaabqabqabqaaabZUcWIchychychychycWTchycDUcWUcwncXrcXlcXlcXwcXAcXycXYcImcYocYncYwcIncYIcYycYNcYLcImcMgcMhcgxcmmcIxcMicMjcMkcLocLocMlcMmcMncJpcMocMpcMqdgScKxcfHchuckedgTcYTcKBcMtcMucMvcEKcjnchyceNchycMxbZUabqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcALcFNcMycFNcALabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaacKLaaaaaaaaaaaaabqaaaaaaaupaaacHZcHZcHZcFvcHZcHZcHZaaaabqaaaaaaaaaabqaaaabqabqabqaaabZUcWIchychychychycWTchycDUcWUcwncXrcXlcXlcXwcXAcXycXYcImcYocYncyFcIncYIcYycYNcYLcImcMgcMhcgxcmmcIxcMicMjcMkcLocLocMlcMmcMncJpcMocMpcMqdgScKxcfHchuckedgTcYTcKBcMtcMucMvcEKcjnchyceNchycMxbZUabqaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcALcFNcMycFNcALabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarBabearBarBarBaaaaaaaaacKLaaaaaaaaaarBarBarBauparBabqcHZcIRcIScIRcITcIRcHZcHZcFvcHZcFvcHZcHZaaaaaaabqaaaaaacHZcHZcHZcHZcHZbZUcKVbZUcDUcYOcDecRLcRUcRUcRUcRUcRUcRUcRUcImcImcImcImcYWcImcImcImcImbZUcNdcgxcmmcIxcNecMjcLocLpcLocNfcNgcNhckzcNjcNkcNldgVdgUdgUdgUdgUdgUcNocNncNpcNqcNrcEKchychyceNchybZUbZUbZUabqabqaaaaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcFNcALcFNabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabqaaaaaaaaaarBabqcNtabqarBaaaaaaabqaaaaaaabqaaacHZcJHcJIcJJcJKcJHcGXcJMcJNcJOcJPcJQcHZaaacZmcIacIacIacLRcLTcLUcLVcHZcZvcZqcZwcDUcZIcZycZQcZOcZXdeidafdaddakcRUcNRcmVcmVcmWdancjecmYcmYcmZcNVcNWcNXcBIcIxcNYcNZcOacOacOacObcOccOdcOecOfcOgcOhcOicOjcOkcOlcJLcOncOocOpclncOrcOscOtcmYcmYcOucOvcOwcOxbZUbZUbZUcksaaaabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaarBaaaabqaaaarBaaaaaaabqabqabqabqabqcHZcKMcHjcKOcHucKMcKMcKQcKRcKScKTcKUcHZaaadaodaucMMcMNcMOcMPcMBcMQcMRdaydaxdaMdaLdaOdaNdaPcYCdaUdaQdbbdaVdbfcRUcOMbZUbZUbZUbZUbZUbZUbZUbZUczIcONcOOcOPcOQcORcOScOTdblcOVcOWcLpcOXclCcOZcPacPbcPccPdcPecPfcPgcPhcPicOpclNcPjbZUbZUbZUbZUbZUdenclGcPmclJcPnclJcPoabqabqaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -8745,3 +8743,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
"}
|
||||
|
||||
|
||||
@@ -649,6 +649,7 @@
|
||||
"my" = (/obj/effect/landmark/abductor/agent{team = 2},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"mz" = (/obj/effect/landmark/abductor/scientist{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"mA" = (/obj/effect/landmark/abductor/agent{team = 3},/turf/unsimulated/floor/abductor,/area/abductor_ship)
|
||||
"mB" = (/obj/machinery/computer/communications,/turf/unsimulated/floor{dir = 8; icon_state = "vault"},/area/centcom/ferry)
|
||||
"mH" = (/obj/structure/lattice,/turf/space/transit,/area/wizard_station)
|
||||
"mI" = (/obj/item/weapon/shard{color = "#008000"},/turf/unsimulated/floor{tag = "icon-cultdamage5"; icon_state = "cultdamage5"},/area/wizard_station)
|
||||
"mK" = (/turf/unsimulated/floor{tag = "icon-cult"; icon_state = "cult"},/area/wizard_station)
|
||||
@@ -1050,7 +1051,7 @@ ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababiSamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamiSababababababababababababababababababababababababababgVilkFilililililililkGkHilililgVhKhfhYgYgYgYklhfhKgOabababgNkyibibibibibibibibibibibibibibibibibibibgNababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababiSamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamiSababababababababababababababababababababababababababgVililililiAiliAililililililkUgVkVkVkWkXkYkZlakVkVkVabababgNkyibibibibibibibiLfZiLiMiLisisisiLfZiLfZiLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababiSamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamiSababababababababababababababababababababababababababgVloilillplplplpiBililililillrgVlsltlulvlwlxlultltkVabababgNlylzlzlzlAlBlClAicibiciKicabababicibicibicababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababiSamamamamamamamamamamamamawamamamamamamamamamamamamamamamamamamamiSababababababababababababababababababababababababababgVlSiliClpjNjOlpilililililillWgVltlXlYlvlwlxlYlZltkVabababgNgNgNgNgNgNgNgNgNlDiNlDiNlDababablDfZlDfZlDababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababiSamamamamamamamamamamamamawamamamamamamamamamamamamamamamamamamamiSababababababababababababababababababababababababababgVlSiliCmBjNjOlpilililililillWgVltlXlYlvlwlxlYlZltkVabababgNgNgNgNgNgNgNgNgNlDiNlDiNlDababablDfZlDfZlDababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamfmgmhmiaaaaaaaaaaaaaaaaaaaaaaabababababababiSamamamamamamamamamiSayiSayiSaCamaWiSayiSayiSaCamamamamamamamatamiSababababababababababababababababababababababababababgVmuilillplplplpiBilililililmvgVmwltmwlvlwlxmwltmwkVabababababababababababababababababababababiOabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaamHaamIgamKmLmMaaaaaaaaaaaaaaaaaaaaabababababababiSamamamamamamamamamaAmnaAmnaAaCamaWaAmnaAmnaAaCamamatamamamamamamiSababababababababababababababababababababababababababgVmYililiFiliFilililililililnagVnbltltlvlwlxltltnckVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
ababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaamHnlnmnnmKnonpaaaaaaaaaaaaaaaaaaaaabababababababiSamamamamamamamavamaBmnaBmnaBaEaxaDaBmnaBmnaBaEavaxaxamamavamamamiSababababababababababababababababababababababababababgVnBilililililililnCnDnEnFnanGgVnHnInIlvlwlxnJnJnKkVabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
|
||||
|
||||
@@ -770,7 +770,7 @@
|
||||
"oP" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/weapon/gun/energy/sniperrifle,/obj/machinery/light/spot{tag = "icon-tube1 (EAST)"; icon_state = "tube1"; dir = 4},/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space)
|
||||
"oQ" = (/obj/machinery/vending/syndisnack,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
|
||||
"oR" = (/obj/machinery/vending/syndicigs,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
|
||||
"oS" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; pixel_x = 6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "ASSAULT"; name = "Assault Armor"; pixel_x = -6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "specopsoffice"; name = "Privacy Shutters"; pixel_x = 6; pixel_y = -6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "CCGAMMA"; name = "Gamma Lockdown"; pixel_x = -6; pixel_y = -6; req_access_txt = "114"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops)
|
||||
"oS" = (/obj/machinery/camera{c_tag = "CentComm Special Ops. Mass Drivers"; dir = 2; network = list("ERT","CentComm")},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||
"oT" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/centcom/gamma)
|
||||
"oU" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/centcom/gamma)
|
||||
"oV" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/centcom/gamma)
|
||||
@@ -898,6 +898,20 @@
|
||||
"rn" = (/obj/machinery/power/apc{dir = 2; name = "Gamma Armory APC"; pixel_y = -24},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space)
|
||||
"ro" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/computer/mech_bay_power_console,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/gamma/space)
|
||||
"rp" = (/obj/mecha/combat/durand/loaded{operation_req_access = list(1)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/mech_bay_recharge_floor,/area/shuttle/gamma/space)
|
||||
"rq" = (/obj/item/device/radio/intercom/specops{pixel_y = 25},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||
"rr" = (/obj/mecha/combat/marauder/seraph/loaded,/turf/unsimulated/floor{icon_state = "delivery"; dir = 6},/area/centcom/specops)
|
||||
"rs" = (/obj/machinery/camera{c_tag = "CentComm Special Ops. Assault Armor Storage"; dir = 2; network = list("ERT","CentComm")},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||
"rt" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "ASSAULT"; name = "Assault Armor"; p_open = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||
"ru" = (/obj/item/device/radio/intercom/specops{pixel_y = -28},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||
"rv" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "GRAVPULTS"; name = "Gravity Catapults"; p_open = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||
"rw" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "GRAVPULTS"; name = "Gravity Catapults"; p_open = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
|
||||
"rx" = (/obj/machinery/teleport/hub/upgraded{admin_usage = 1},/turf/unsimulated/floor{icon_state = "delivery"; dir = 6},/area/centcom/specops)
|
||||
"ry" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "CCTELE"; name = "Specops Teleporter"; p_open = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"rz" = (/obj/machinery/computer/communications,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"rA" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"rB" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"rC" = (/obj/structure/table/woodentable{dir = 9},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "GRAVPULTS"; name = "Gravity Catapults"; pixel_x = -6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "ASSAULT"; name = "Mech Storage"; pixel_x = 6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "CCTELE"; name = "Teleporter Access"; pixel_x = -6; pixel_y = -6; req_access_txt = "114"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops)
|
||||
"rD" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; pixel_x = -6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "specopsoffice"; name = "Privacy Shutters"; pixel_x = 6; pixel_y = -6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "CCGAMMA"; name = "Gamma Lockdown"; pixel_x = -6; pixel_y = -6; req_access_txt = "114"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops)
|
||||
"rE" = (/turf/unsimulated/wall,/area/start)
|
||||
"rH" = (/obj/effect/landmark/start,/turf/unsimulated/floor,/area/start)
|
||||
"rK" = (/turf/unsimulated/wall/splashscreen,/area/start)
|
||||
@@ -934,8 +948,6 @@
|
||||
"sX" = (/turf/unsimulated/wall,/area/centcom/specops)
|
||||
"sZ" = (/obj/structure/table,/obj/machinery/processor{pixel_x = 0; pixel_y = 10},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control)
|
||||
"ta" = (/obj/machinery/mech_bay_recharge_port/upgraded,/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
|
||||
"tb" = (/obj/machinery/camera{c_tag = "CentComm Special Ops. Assault Armor North"; dir = 2; network = list("ERT","CentComm")},/obj/mecha/combat/marauder/seraph/loaded,/turf/unsimulated/floor{icon_state = "delivery"; dir = 6},/area/centcom/specops)
|
||||
"tc" = (/obj/item/device/radio/intercom/specops{pixel_y = 25},/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/specops)
|
||||
"td" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||
"te" = (/obj/machinery/recharge_station/upgraded,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||
"tf" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/kitchen/rollingpin,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control)
|
||||
@@ -953,7 +965,6 @@
|
||||
"tr" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control)
|
||||
"ts" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave/upgraded,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control)
|
||||
"tt" = (/obj/mecha/combat/marauder/loaded,/turf/unsimulated/floor{icon_state = "delivery"; dir = 6},/area/centcom/specops)
|
||||
"tu" = (/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/specops)
|
||||
"tv" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "ASSAULT2"; name = "Launch Bay #2"; p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
|
||||
"tw" = (/obj/machinery/mass_driver{dir = 8; drive_range = 50; id_tag = "ASSAULT2"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
|
||||
"tx" = (/obj/machinery/door/airlock/centcom{name = "Commander Quarters"; opacity = 1; req_access_txt = "114"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/control)
|
||||
@@ -979,9 +990,7 @@
|
||||
"tV" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "ASSAULT0"; name = "Launch Bay #0"; p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
|
||||
"tW" = (/obj/machinery/mass_driver{dir = 8; drive_range = 50; id_tag = "ASSAULT0"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
|
||||
"tX" = (/obj/machinery/camera{c_tag = "CentComm Special Ops. Assault Armor South"; dir = 1; network = list("ERT","CentComm")},/turf/unsimulated/floor{icon_state = "loadingarea"; dir = 8},/area/centcom/specops)
|
||||
"tY" = (/obj/item/device/radio/intercom/specops{pixel_y = -28},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
|
||||
"tZ" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control)
|
||||
"ua" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "ASSAULT"; name = "Assault Armor"; p_open = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
|
||||
"ub" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id_tag = "ASSAULT"; name = "Assault Armor"; p_open = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"uc" = (/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/control)
|
||||
"ud" = (/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control)
|
||||
@@ -1051,7 +1060,6 @@
|
||||
"vx" = (/obj/machinery/door/airlock/centcom{name = "Bathroom"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
|
||||
"vy" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"vz" = (/obj/machinery/door/poddoor/shutters{dir = 8; id_tag = "specopsoffice"; name = "Privacy Shutters"},/turf/unsimulated/wall/fakeglass,/area/centcom/specops)
|
||||
"vA" = (/obj/structure/table/woodentable{dir = 9},/obj/item/ashtray/glass{icon_state = "ashtray_half_gl"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops)
|
||||
"vB" = (/obj/machinery/computer/security/telescreen{name = "Special Ops. Monitor"; desc = "Used for watching the Special Ops."; network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/specops)
|
||||
"vC" = (/obj/structure/table/woodentable{dir = 5},/obj/item/device/radio/intercom/specops,/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/specops)
|
||||
"vF" = (/obj/machinery/door/airlock/centcom{name = "Telecommunications"; opacity = 1; req_access_txt = "107"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
|
||||
@@ -1611,25 +1619,25 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsqswsssssxsyszmmsBsCmnsEsEsysysqsFsGsHsIsqsJsKsLsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsqsqsqsqsqsysEmnsMsNmnsEsEsOmosqsQsQsQsQsqsRsSsTsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsvsEsEsEsEsEsEsEsEsysysqsQsUsVsVsqsqsWsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsqaNaNaNsvsEsEsEsEsEsEsEsEsEsEsusQmpmpsQsQsQsQsZsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXtatbtctdtdtesqsqsqsqsqsEsEmnsMsCmnsEsEsEsEsEsQsQsQsQtfsQsQtgsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititjtktitititjtltmtntdtdtdsqsrssstsqtosEmnsMtpmnsEsEsEsEsutqsQsQsQtrsQsQtssqsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXtatttutdtdtdsqswsssssxsEsEsEsEsEsEsEsEsEsEsqsusususususususqsqdWdXsqsqsqsqsqsqsqsqsqsqsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititvtktitititvtwtmtntdtdtdsqsqsqsqsqsqsqtxsqsqsqsqsEsEtysqcScRcUcTcWcVcXsudZdYebeasuecefefefefefegefefefeheiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXtatttutdtdtAsqtBtCtDsqtEtFtFtFtFtGsqsEsEtHsqdodedqdpdLdKdesufbfatLfcsuemeCeCeCeCeCeCeCeCeCeSeiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititItktitititItJtmtntdtdtdsqtKtLtMedtFtFtFtFtFeesqsusxsusqsusususususususqsqfLsqsqsqsqsqsqsqsqsqsqsqsqsqsqfXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXtatttutdtdtdsqsqeWeVsqeWeVsqsqsqsqsqtQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqfXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititVtktitititVtWtXtYtdtdtdsXaNaNaNaNaNaNsXfecoflsqtQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmsXsXsXsXsXsXuaubsXsXsXsXsXsXsXsXsXfeujflsqtQtRucudududududududududuetRtZsqaNaNoeodododododododofaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmcYoEoEoEoEoFfmfofnfqfpfsfrfnfEfmufuguguhuiujujujsXukukukukulukumunfeujflsqtQtRtZsususususususususutQtRtZsqaNaNohogojoioioioiokohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsqaNaNaNsvsEsEsEsEsEsEsEsEsEsEsusQmpmpsQsQsQsQsZsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXoSrqtdtesXtarrrstdsqsqsqsqsqsEsEmnsMsCmnsEsEsEsEsEsQsQsQsQtfsQsQtgsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititjtktitititjtltmtntdtdrttdtdtdtdsqsrssstsqtosEmnsMtpmnsEsEsEsEsutqsQsQsQtrsQsQtssqsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXtdtdtdtdsXtatttdtdsqswsssssxsEsEsEsEsEsEsEsEsEsEsqsusususususususqsqdWdXsqsqsqsqsqsqsqsqsqsqsqsqsqdVaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititvtktitititvtwtmtntdtdrttdtdtdtdsqsqsqsqsqsqsqtxsqsqsqsqsEsEtysqcScRcUcTcWcVcXsudZdYebeasuecefefefefefegefefefeheiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXtdtdtdtAsXtatttdtdsqtBtCtDsqtEtFtFtFtFtGsqsEsEtHsqdodedqdpdLdKdesufbfatLfcsuemeCeCeCeCeCeCeCeCeCeSeiaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititItktitititItJtmtntdtdrttdtdtdtdsqtKtLtMedtFtFtFtFtFeesqsusxsusqsusususususususqsqfLsqsqsqsqsqsqsqsqsqsqsqsqsqsqfXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXsXsXsXsXsXsXsXsXsXsXtdtdtdtdsXtatttdtdsqsqeWeVsqeWeVsqsqsqsqsqtQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqfXaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNthtitititititititVtktitititVtWtXtntdrurttdtdtdrusXaNaNaNaNaNaNsXfecoflsqtQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmfmsXrwrvsXsXsXsXubsXsXsXsXsXsXsXsXsXfeujflsqtQtRucudududududududududuetRtZsqaNaNoeodododododododofaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmcYoEoEoEoEoFfmfofnfqfpfsfrfnfEfmufujujuhuiugujujsXukukukukulukumunfeujflsqtQtRtZsususususususususutQtRtZsqaNaNohogojoioioioiokohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGoNoJoWoPoGfmjHfFkdkdkdkdfFlZmdujujujujujujujujuqururururururussXfeujflsqtQtRtZsuutuuuvuwuxuyuzsutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpgpfpfpfphoGfmoKkdkdkdkdkdkdoLmdujujujujujujujujsXuAuBuBuBuBuBuCsXsXoMsXsquEtRtSsuuFtRuGuHtRtRtRsuuEtRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpipfpkpopfptfdoUoToToToToToToVfdujujujuIuIujujujuJuKuKuKuKuKuKuKuLuKuKuKuMtRtRtRuNtRtRtRtRtRtRtRuNtRtRtZoltRolomogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpjpfpfrloGfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXuTuUuTsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpnrnrmrprooGfmaNaNaNaNaNaNaNaNsXujuXuRooonvavbujvcvdvdvdvdvesXuKsXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpDoEoEoEoErkfmaNaNaNaNsXuWuWsXsXujujvauRvmuRujujvnvdvovpvqvdsXuKsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNohogogogopogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmaNaNaNaNsXvkvkpqprujujujvyvyujujujvzvdvAvBvCbesXuKsqpstRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNoqodododododododoraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkvkvksXvIvJujujujujvLujsXvdoSmjeTvPsXuKsqvQtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpnrnrmrprooGfmaNsXrxujujujujujryujuXrzooonvavbujvcvdvdvdvdvesXuKsXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpDoEoEoEoErkfmaNsXrAujsXuWuWsXsXujujvauRvmuRujujvnvdvovpvqvdsXuKsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNohogogogopogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmaNsXrBujsXvkvkpqprujujujvyvyujujujvzvdrCvBvCbesXuKsqpstRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNoqodododododododoraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXsXsXsXvkvkvksXvIvJujujujujvLujsXvdrDmjeTvPsXuKsqvQtRtZsutQtRtStTtTtTtTtTtTtTtTtTuEtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkpBsXsXsXsXsXsXbfbfsXsXsXvSvTvUvVvdsXuKsqvWtRvXsutQtRtRtRtRtRtRtRtRtRtRtRtRtRtZsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvkpBsXaNaNaNaNwbwcwdwbwesXiDwgwhwiwjsXuKsqwkudwlsuwmudududududuetRucudududududwnsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNsXvxsXsXaNaNaNaNwrwswtwrwesXsXsXsXsXsXsXoXsqsqsqsqsqsqsqsqsqsqsqsqwusqsqsqsqsqsqsqsqaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
|
||||
@@ -33,7 +33,7 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
/obj/machinery/atmospherics/New()
|
||||
..()
|
||||
|
||||
atmos_machinery += src
|
||||
if(!icon_manager)
|
||||
icon_manager = new()
|
||||
|
||||
@@ -54,6 +54,7 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
/obj/machinery/atmospherics/Destroy()
|
||||
QDEL_NULL(stored)
|
||||
atmos_machinery -= src
|
||||
for(var/mob/living/L in src) //ventcrawling is serious business
|
||||
L.remove_ventcrawl()
|
||||
L.forceMove(get_turf(src))
|
||||
@@ -166,7 +167,9 @@ Pipelines + Other Objects -> Pipe network
|
||||
add_fingerprint(user)
|
||||
|
||||
var/unsafe_wrenching = FALSE
|
||||
var/internal_pressure = int_air.return_pressure()-env_air.return_pressure()
|
||||
var/I = int_air ? int_air.return_pressure() : 0
|
||||
var/E = env_air ? env_air.return_pressure() : 0
|
||||
var/internal_pressure = I - E
|
||||
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>You begin to unfasten \the [src]...</span>")
|
||||
|
||||
@@ -147,6 +147,6 @@
|
||||
T.assume_air(to_release)
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/machinery/atmospherics/binary/process()
|
||||
/obj/machinery/atmospherics/binary/process_atmos()
|
||||
..()
|
||||
return parent1 && parent2
|
||||
@@ -70,7 +70,7 @@
|
||||
else
|
||||
last_pressure_delta = 0
|
||||
|
||||
/obj/machinery/atmospherics/binary/circulator/process()
|
||||
/obj/machinery/atmospherics/binary/circulator/process_atmos()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -104,8 +104,9 @@
|
||||
else
|
||||
add_underlay(T, node2, dir)
|
||||
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/binary/dp_vent_pump/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
@@ -33,8 +33,9 @@
|
||||
add_underlay(T, node1, turn(dir, 180))
|
||||
add_underlay(T, node2, dir)
|
||||
|
||||
/obj/machinery/atmospherics/binary/passive_gate/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/binary/passive_gate/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
|
||||
@@ -53,8 +53,9 @@ Thus, the two variables affect pump operation are set in New():
|
||||
add_underlay(T, node1, turn(dir, -180))
|
||||
add_underlay(T, node2, dir)
|
||||
|
||||
/obj/machinery/atmospherics/binary/pump/process()
|
||||
if(!..() || (stat & (NOPOWER|BROKEN)) || !on)
|
||||
/obj/machinery/atmospherics/binary/pump/process_atmos()
|
||||
..()
|
||||
if((stat & (NOPOWER|BROKEN)) || !on)
|
||||
return 0
|
||||
|
||||
var/output_starting_pressure = air2.return_pressure()
|
||||
|
||||
@@ -51,8 +51,9 @@ Thus, the two variables affect pump operation are set in New():
|
||||
add_underlay(T, node1, turn(dir, -180))
|
||||
add_underlay(T, node2, dir)
|
||||
|
||||
/obj/machinery/atmospherics/binary/volume_pump/process()
|
||||
if(!..() || (stat & (NOPOWER|BROKEN)) || !on)
|
||||
/obj/machinery/atmospherics/binary/volume_pump/process_atmos()
|
||||
..()
|
||||
if((stat & (NOPOWER|BROKEN)) || !on)
|
||||
return 0
|
||||
|
||||
// Pump mechanism just won't do anything if the pressure is too high/too low
|
||||
|
||||
@@ -42,8 +42,9 @@
|
||||
|
||||
return 0
|
||||
|
||||
/obj/machinery/atmospherics/omni/filter/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/omni/filter/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
if(!input || !output)
|
||||
|
||||
@@ -83,8 +83,9 @@
|
||||
|
||||
return 0
|
||||
|
||||
/obj/machinery/atmospherics/omni/mixer/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/omni/mixer/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/datum/gas_mixture/output_air = output.air
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/omni/attack_ghost(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/omni/proc/build_icons()
|
||||
if(!check_icon_cache())
|
||||
return
|
||||
@@ -293,7 +293,7 @@
|
||||
P.parent = New
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/omni/process()
|
||||
/obj/machinery/atmospherics/omni/process_atmos()
|
||||
..()
|
||||
for(var/datum/omni_port/port in ports)
|
||||
if(!port.parent)
|
||||
|
||||
@@ -68,8 +68,9 @@ Filter types:
|
||||
if(old_stat != stat)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/trinary/filter/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/trinary/filter/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/output_starting_pressure = air3.return_pressure()
|
||||
|
||||
@@ -56,8 +56,9 @@
|
||||
..()
|
||||
air3.volume = 300
|
||||
|
||||
/obj/machinery/atmospherics/trinary/mixer/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/trinary/mixer/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/output_starting_pressure = air3.return_pressure()
|
||||
|
||||
@@ -206,6 +206,6 @@
|
||||
T.assume_air(to_release)
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/machinery/atmospherics/trinary/process()
|
||||
/obj/machinery/atmospherics/trinary/process_atmos()
|
||||
..()
|
||||
return parent1 && parent2 && parent3
|
||||
@@ -22,10 +22,11 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/unary/cold_sink/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/unary/cold_sink/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/combined_heat_capacity = current_heat_capacity + air_heat_capacity
|
||||
var/old_temperature = air_contents.temperature
|
||||
|
||||
@@ -32,9 +32,8 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/heat_exchanger/process()
|
||||
if(!..())
|
||||
return 0
|
||||
/obj/machinery/atmospherics/unary/heat_exchanger/process_atmos()
|
||||
..()
|
||||
if(!partner)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -22,8 +22,9 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/unary/heat_reservoir/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/unary/heat_reservoir/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/combined_heat_capacity = current_heat_capacity + air_heat_capacity
|
||||
|
||||
@@ -51,10 +51,9 @@
|
||||
if(old_stat != stat)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/process()
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/process_atmos()
|
||||
..()
|
||||
|
||||
injecting = 0
|
||||
|
||||
if(!on || stat & NOPOWER)
|
||||
|
||||
@@ -28,8 +28,9 @@
|
||||
|
||||
air_contents.volume = 50
|
||||
|
||||
/obj/machinery/atmospherics/unary/oxygen_generator/process()
|
||||
if(!..() || !on)
|
||||
/obj/machinery/atmospherics/unary/oxygen_generator/process_atmos()
|
||||
..()
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
var/total_moles = air_contents.total_moles()
|
||||
|
||||
@@ -17,9 +17,8 @@
|
||||
..()
|
||||
air_contents.volume = volume
|
||||
|
||||
/obj/machinery/atmospherics/unary/passive_vent/process()
|
||||
if(!..())
|
||||
return 0
|
||||
/obj/machinery/atmospherics/unary/passive_vent/process_atmos()
|
||||
..()
|
||||
|
||||
if(!node)
|
||||
return 0
|
||||
|
||||
@@ -28,8 +28,9 @@
|
||||
return
|
||||
add_underlay(T, node, dir)
|
||||
|
||||
/obj/machinery/atmospherics/unary/portables_connector/process()
|
||||
if(!..() || !connected_device)
|
||||
/obj/machinery/atmospherics/unary/portables_connector/process_atmos()
|
||||
..()
|
||||
if(!connected_device)
|
||||
return 0
|
||||
parent.update = 1
|
||||
|
||||
|
||||
@@ -17,9 +17,8 @@
|
||||
prefix="h"
|
||||
icon_state = "[prefix]off"
|
||||
|
||||
/obj/machinery/atmospherics/unary/thermal_plate/process()
|
||||
if(!..())
|
||||
return 0
|
||||
/obj/machinery/atmospherics/unary/thermal_plate/process_atmos()
|
||||
..()
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
|
||||
@@ -99,6 +99,6 @@
|
||||
T.assume_air(to_release)
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/machinery/atmospherics/unary/process()
|
||||
/obj/machinery/atmospherics/unary/process_atmos()
|
||||
..()
|
||||
return parent
|
||||
@@ -121,8 +121,9 @@
|
||||
update_icon()
|
||||
update_underlays()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_pump/process()
|
||||
if(!..() || (stat & (NOPOWER|BROKEN)))
|
||||
/obj/machinery/atmospherics/unary/vent_pump/process_atmos()
|
||||
..()
|
||||
if((stat & (NOPOWER|BROKEN)))
|
||||
return 0
|
||||
if(!node)
|
||||
on = 0
|
||||
@@ -146,7 +147,7 @@
|
||||
|
||||
if(pressure_delta > 0.5)
|
||||
if(air_contents.temperature > 0)
|
||||
var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
|
||||
var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION) / 5
|
||||
|
||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||
|
||||
@@ -164,7 +165,7 @@
|
||||
|
||||
if(pressure_delta > 0.5)
|
||||
if(environment.temperature > 0)
|
||||
var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION)
|
||||
var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) / 5
|
||||
|
||||
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
|
||||
if(isnull(removed)) //in space
|
||||
|
||||
@@ -175,9 +175,8 @@
|
||||
src.broadcast_status()
|
||||
check_turfs()
|
||||
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/process()
|
||||
if(!..())
|
||||
return 0
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/process_atmos()
|
||||
..()
|
||||
|
||||
if(widenet)
|
||||
check_turfs()
|
||||
@@ -215,7 +214,7 @@
|
||||
|
||||
if(scrubbing)
|
||||
if((scrub_O2 && environment.oxygen>0.001) || (scrub_N2 && environment.nitrogen>0.001) || (scrub_CO2 && environment.carbon_dioxide>0.001) || (scrub_Toxins && environment.toxins>0.001) || (environment.trace_gases.len>0))
|
||||
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles()
|
||||
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() / 5
|
||||
|
||||
//Take a gas sample
|
||||
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
|
||||
@@ -257,7 +256,7 @@
|
||||
if(air_contents.return_pressure()>=50*ONE_ATMOSPHERE)
|
||||
return
|
||||
|
||||
var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume)
|
||||
var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) / 5
|
||||
|
||||
var/datum/gas_mixture/removed = tile.remove_air(transfer_moles)
|
||||
|
||||
|
||||
@@ -25,11 +25,12 @@
|
||||
/obj/machinery/atmospherics/pipe/cap/pipeline_expansion()
|
||||
return list(node)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/cap/process()
|
||||
/obj/machinery/atmospherics/pipe/cap/process_atmos()
|
||||
if(!parent)
|
||||
..()
|
||||
else
|
||||
. = PROCESS_KILL
|
||||
|
||||
/obj/machinery/atmospherics/pipe/cap/Destroy()
|
||||
. = ..()
|
||||
if(node)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion()
|
||||
return list(node1, node2, node3)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/process()
|
||||
/obj/machinery/atmospherics/pipe/manifold/process_atmos()
|
||||
if(!parent)
|
||||
..()
|
||||
else
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/pipeline_expansion()
|
||||
return list(node1, node2, node3, node4)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/process()
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/process_atmos()
|
||||
if(!parent)
|
||||
..()
|
||||
else
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
buckle_lying = 1
|
||||
var/icon_temperature = T20C //stop small changes in temperature causing icon refresh
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process()
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process_atmos()
|
||||
var/environment_temperature = 0
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
if(!pipe_air)
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
|
||||
if(air.temperature < T0C && air.return_pressure() > 10)
|
||||
icy = 1
|
||||
else
|
||||
else if(air.temperature > T0C)
|
||||
icy = 0
|
||||
|
||||
update_visuals()
|
||||
@@ -305,17 +305,30 @@
|
||||
|
||||
|
||||
/atom/movable/var/pressure_resistance = 5
|
||||
/atom/movable/var/throw_pressure_limit = 15
|
||||
/atom/movable/var/last_forced_movement = 0
|
||||
|
||||
/atom/movable/proc/experience_pressure_difference(pressure_difference, direction)
|
||||
if(last_forced_movement >= air_master.current_cycle)
|
||||
return 0
|
||||
else if(!anchored && !pulledby)
|
||||
if(pressure_difference > pressure_resistance)
|
||||
if(pressure_difference >= throw_pressure_limit)
|
||||
var/general_direction = get_edge_target_turf(src, direction)
|
||||
if(last_forced_movement + 10 < air_master.current_cycle && is_valid_tochat_target(src)) //the first check prevents spamming throw to_chat
|
||||
to_chat(src, "<span class='userdanger'>The pressure sends you flying!</span>")
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.Weaken(min(pressure_difference / 10, 10))
|
||||
spawn()
|
||||
throw_at(general_direction, pressure_difference / 10, pressure_difference / 200, null, 0, 0, null)
|
||||
last_forced_movement = air_master.current_cycle
|
||||
spawn step(src, direction)
|
||||
return 1
|
||||
|
||||
return 1
|
||||
else if(pressure_difference > pressure_resistance)
|
||||
spawn()
|
||||
step(src, direction)
|
||||
last_forced_movement = air_master.current_cycle
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -48,14 +48,14 @@
|
||||
#define FIRE_MINIMUM_TEMPERATURE_TO_SPREAD 150+T0C
|
||||
#define FIRE_MINIMUM_TEMPERATURE_TO_EXIST 100+T0C
|
||||
#define FIRE_SPREAD_RADIOSITY_SCALE 0.85
|
||||
#define FIRE_CARBON_ENERGY_RELEASED 500000 //Amount of heat released per mole of burnt carbon into the tile
|
||||
#define FIRE_PLASMA_ENERGY_RELEASED 3000000 //Amount of heat released per mole of burnt plasma into the tile
|
||||
#define FIRE_CARBON_ENERGY_RELEASED 2500000 //Amount of heat released per mole of burnt carbon into the tile
|
||||
#define FIRE_PLASMA_ENERGY_RELEASED 15000000 //Amount of heat released per mole of burnt plasma into the tile
|
||||
#define FIRE_GROWTH_RATE 40000 //For small fires
|
||||
#define CARBON_LIFEFORM_FIRE_RESISTANCE 200+T0C //Resistance to fire damage
|
||||
#define CARBON_LIFEFORM_FIRE_DAMAGE 4 //Fire damage
|
||||
//Plasma fire properties
|
||||
#define OXYGEN_BURN_RATE_BASE 1.4
|
||||
#define PLASMA_BURN_RATE_DELTA 4
|
||||
#define OXYGEN_BURN_RATE_BASE 7
|
||||
#define PLASMA_BURN_RATE_DELTA 20
|
||||
#define PLASMA_MINIMUM_BURN_TEMPERATURE 100+T0C
|
||||
#define PLASMA_UPPER_TEMPERATURE 1370+T0C
|
||||
#define PLASMA_MINIMUM_OXYGEN_NEEDED 2
|
||||
@@ -119,4 +119,4 @@
|
||||
// Atmos alarm defines
|
||||
#define ATMOS_ALARM_NONE 0
|
||||
#define ATMOS_ALARM_WARNING 1
|
||||
#define ATMOS_ALARM_DANGER 2
|
||||
#define ATMOS_ALARM_DANGER 2
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
#define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable
|
||||
|
||||
#define is_pen(W) (istype(W, /obj/item/weapon/pen))
|
||||
|
||||
var/list/static/global/pointed_types = typecacheof(list(
|
||||
/obj/item/weapon/pen,
|
||||
/obj/item/weapon/screwdriver,
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
#define LEFT 1
|
||||
#define RIGHT 2
|
||||
|
||||
#define SPLINT_LIFE 2000 //number of steps splints stay on
|
||||
|
||||
|
||||
//Pulse levels, very simplified
|
||||
#define PULSE_NONE 0 //so !M.pulse checks would be possible
|
||||
@@ -169,3 +171,6 @@
|
||||
#define hasorgans(A) (ishuman(A))
|
||||
|
||||
#define is_admin(user) (check_rights(R_ADMIN, 0, (user)) != 0)
|
||||
|
||||
//effects
|
||||
#define EFFECT_HIGHFIVE "highfiving"
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#define MEMBER_PUBLIC 8192
|
||||
#define CHAT_NO_ADMINLOGS 16384
|
||||
#define DONATOR_PUBLIC 32768
|
||||
#define CHAT_NO_TICKETLOGS 65536
|
||||
|
||||
#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC)
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
//head accessory
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/head_accessory, head_accessory_styles_list)
|
||||
//hair
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, hair_styles_list, hair_styles_male_list, hair_styles_female_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, hair_styles_public_list, hair_styles_male_list, hair_styles_female_list, hair_styles_full_list)
|
||||
//facial hair
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, facial_hair_styles_list, facial_hair_styles_male_list, facial_hair_styles_female_list)
|
||||
//underwear
|
||||
|
||||
@@ -49,8 +49,8 @@ proc/pick_species_allowed_underwear(list/all_picks, species)
|
||||
proc/random_hair_style(var/gender, species = "Human", var/datum/robolimb/robohead)
|
||||
var/h_style = "Bald"
|
||||
var/list/valid_hairstyles = list()
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
for(var/hairstyle in hair_styles_public_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_public_list[hairstyle]
|
||||
|
||||
if(hairstyle == "Bald") //Just in case.
|
||||
valid_hairstyles += hairstyle
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
/proc/time_stamp()
|
||||
return time2text(world.timeofday, "hh:mm:ss")
|
||||
|
||||
|
||||
/proc/gameTimestamp(format = "hh:mm:ss") // Get the game time in text
|
||||
return time2text(world.time - timezoneOffset + 432000, format)
|
||||
|
||||
@@ -61,6 +61,12 @@ proc/isDay(var/month, var/day)
|
||||
*/
|
||||
/proc/stop_watch(wh)
|
||||
return round(0.1 * (TimeOfGame - wh), 0.1)
|
||||
|
||||
|
||||
/proc/month2number(month)
|
||||
return month_names.Find(month)
|
||||
return month_names.Find(month)
|
||||
|
||||
//Take a value in seconds and returns a string of minutes and seconds in the format X minute(s) and X seconds.
|
||||
/proc/seconds_to_time(var/seconds as num)
|
||||
var/numSeconds = seconds % 60
|
||||
var/numMinutes = (seconds - numSeconds) / 60
|
||||
return "[numMinutes] [numMinutes > 1 ? "minutes" : "minute"] and [numSeconds] seconds."
|
||||
@@ -4,4 +4,7 @@ var/secret_force_mode = "secret" // if this is anything but "secret", the secret
|
||||
var/wavesecret = 0 // meteor mode, delays wave progression, terrible name
|
||||
var/datum/station_state/start_state = null // Used in round-end report
|
||||
|
||||
var/custom_event_msg = null
|
||||
var/custom_event_msg = null
|
||||
var/custom_event_admin_msg = null
|
||||
|
||||
var/list/summon_spots = list()
|
||||
|
||||
@@ -4,9 +4,10 @@ var/global/list/head_accessory_styles_list = list() //stores /datum/sprite_acces
|
||||
//Marking styles
|
||||
var/global/list/marking_styles_list = list() //stores /datum/sprite_accessory/body_markings indexed by name
|
||||
//Hairstyles
|
||||
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name
|
||||
var/global/list/hair_styles_public_list = list() //stores /datum/sprite_accessory/hair indexed by name
|
||||
var/global/list/hair_styles_male_list = list()
|
||||
var/global/list/hair_styles_female_list = list()
|
||||
var/global/list/hair_styles_full_list = list() //fluff hair styles
|
||||
var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessory/facial_hair indexed by name
|
||||
var/global/list/facial_hair_styles_male_list = list()
|
||||
var/global/list/facial_hair_styles_female_list = list()
|
||||
|
||||
@@ -19,6 +19,7 @@ var/global/list/all_areas = list()
|
||||
var/global/list/machines = list()
|
||||
var/global/list/machine_processing = list()
|
||||
var/global/list/fast_processing = list()
|
||||
var/global/list/atmos_machinery = list()
|
||||
var/global/list/processing_power_items = list() //items that ask to be called every cycle
|
||||
var/global/list/rcd_list = list() //list of Rapid Construction Devices.
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ var/list/standard_chemicals = list("slimejelly","blood","water","lube","charcoal
|
||||
"lipolicide","condensedcapsaicin","frostoil","amanitin","psilocybin",
|
||||
"enzyme","nothing","salglu_solution","antifreeze","neurotoxin")
|
||||
// Rare chemicals
|
||||
var/list/rare_chemicals = list("minttoxin","nanites","xenomicrobes","adminordrazine")
|
||||
var/list/rare_chemicals = list("minttoxin","syndicate_nanites", "xenomicrobes")
|
||||
// Standard medicines
|
||||
var/list/standard_medicines = list("charcoal","toxin","cyanide","morphine","epinephrine","space_drugs",
|
||||
"serotrotium","mutadone","mutagen","teporone","lexorin","silver_sulfadiazine",
|
||||
@@ -27,7 +27,7 @@ var/list/standard_medicines = list("charcoal","toxin","cyanide","morphine","epin
|
||||
"diethylamine","antihol","pancuronium","lipolicide","condensedcapsaicin",
|
||||
"frostoil","amanitin","psilocybin","nothing","salglu_solution","neurotoxin")
|
||||
// Rare medicines
|
||||
var/list/rare_medicines = list("nanites","xenomicrobes","minttoxin","adminordrazine","blood")
|
||||
var/list/rare_medicines = list("syndicate_nanites","minttoxin","blood", "xenomicrobes")
|
||||
// Drinks
|
||||
var/list/drinks = list("beer2","hot_coco","orangejuice","tomatojuice","limejuice","carrotjuice",
|
||||
"berryjuice","poisonberryjuice","watermelonjuice","lemonjuice","banana",
|
||||
|
||||
@@ -366,6 +366,25 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
desc = "Mech integrity is low."
|
||||
icon_state = "low_mech_integrity"
|
||||
|
||||
//GUARDIANS
|
||||
/obj/screen/alert/cancharge
|
||||
name = "Charge Ready"
|
||||
desc = "You are ready to charge at a location!"
|
||||
icon_state = "guardian_charge"
|
||||
alerttooltipstyle = "parasite"
|
||||
|
||||
/obj/screen/alert/canstealth
|
||||
name = "Stealth Ready"
|
||||
desc = "You are ready to enter stealth!"
|
||||
icon_state = "guardian_canstealth"
|
||||
alerttooltipstyle = "parasite"
|
||||
|
||||
/obj/screen/alert/instealth
|
||||
name = "In Stealth"
|
||||
desc = "You are in stealth and your next attack will do bonus damage!"
|
||||
icon_state = "guardian_instealth"
|
||||
alerttooltipstyle = "parasite"
|
||||
|
||||
|
||||
//GHOSTS
|
||||
//TODO: expand this system to replace the pollCandidates/CheckAntagonist/"choose quickly"/etc Yes/No messages
|
||||
|
||||
@@ -25,7 +25,7 @@ var/global/datum/controller/process/air_system/air_master
|
||||
|
||||
/datum/controller/process/air_system/setup()
|
||||
name = "air"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
schedule_interval = 4
|
||||
start_delay = 4
|
||||
|
||||
var/watch = start_watch()
|
||||
@@ -38,6 +38,8 @@ var/global/datum/controller/process/air_system/air_master
|
||||
if(kill_air)
|
||||
return 1
|
||||
current_cycle++
|
||||
process_pipenets()
|
||||
process_atmos_machinery()
|
||||
process_active_turfs()
|
||||
process_excited_groups()
|
||||
process_high_pressure_delta()
|
||||
@@ -49,6 +51,8 @@ var/global/datum/controller/process/air_system/air_master
|
||||
..()
|
||||
stat(null, "[last_active] active")
|
||||
stat(null, "[last_excited] EG | [last_hpd] HPD | [last_asc] ASC | [last_hotspots] Hot")
|
||||
stat(null, "[pipe_networks.len] pipe nets, [deferred_pipenet_rebuilds.len] deferred")
|
||||
stat(null, "[atmos_machinery.len] atmos machines")
|
||||
|
||||
DECLARE_GLOBAL_CONTROLLER(air_system, air_master)
|
||||
|
||||
@@ -78,6 +82,48 @@ DECLARE_GLOBAL_CONTROLLER(air_system, air_master)
|
||||
T.process_cell()
|
||||
SCHECK
|
||||
|
||||
/datum/controller/process/air_system/proc/process_pipenets()
|
||||
for(last_object in deferred_pipenet_rebuilds)
|
||||
var/obj/machinery/atmospherics/M = last_object
|
||||
if(istype(M) && isnull(M.gcDestroyed))
|
||||
try
|
||||
M.build_network()
|
||||
catch(var/exception/e)
|
||||
catchException(e, M)
|
||||
SCHECK
|
||||
else
|
||||
catchBadType(M)
|
||||
deferred_pipenet_rebuilds -= M
|
||||
|
||||
for(last_object in pipe_networks)
|
||||
var/datum/pipeline/pipeNetwork = last_object
|
||||
if(istype(pipeNetwork) && isnull(pipeNetwork.gcDestroyed))
|
||||
try
|
||||
pipeNetwork.process()
|
||||
catch(var/exception/e)
|
||||
catchException(e, pipeNetwork)
|
||||
SCHECK
|
||||
else
|
||||
catchBadType(pipeNetwork)
|
||||
pipe_networks -= pipeNetwork
|
||||
|
||||
/datum/controller/process/air_system/proc/process_atmos_machinery()
|
||||
for(last_object in atmos_machinery)
|
||||
var/obj/machinery/M = last_object
|
||||
if(istype(M) && isnull(M.gcDestroyed))
|
||||
try
|
||||
if(M.process_atmos() == PROCESS_KILL)
|
||||
atmos_machinery.Remove(M)
|
||||
continue
|
||||
catch(var/exception/e)
|
||||
catchException(e, M)
|
||||
else
|
||||
catchBadType(M)
|
||||
atmos_machinery -= M
|
||||
|
||||
SCHECK
|
||||
|
||||
|
||||
/datum/controller/process/air_system/proc/remove_from_active(var/turf/simulated/T)
|
||||
if(istype(T))
|
||||
T.excited = 0
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
/datum/controller/process/pipenet/setup()
|
||||
name = "pipenet"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
start_delay = 18
|
||||
|
||||
/datum/controller/process/pipenet/statProcess()
|
||||
..()
|
||||
stat(null, "[pipe_networks.len] pipe nets, [deferred_pipenet_rebuilds.len] deferred")
|
||||
|
||||
/datum/controller/process/pipenet/doWork()
|
||||
for(last_object in deferred_pipenet_rebuilds)
|
||||
var/obj/machinery/atmospherics/M = last_object
|
||||
if(istype(M) && isnull(M.gcDestroyed))
|
||||
try
|
||||
M.build_network()
|
||||
catch(var/exception/e)
|
||||
catchException(e, M)
|
||||
SCHECK
|
||||
else
|
||||
catchBadType(M)
|
||||
deferred_pipenet_rebuilds -= M
|
||||
|
||||
for(last_object in pipe_networks)
|
||||
var/datum/pipeline/pipeNetwork = last_object
|
||||
if(istype(pipeNetwork) && isnull(pipeNetwork.gcDestroyed))
|
||||
try
|
||||
pipeNetwork.process()
|
||||
catch(var/exception/e)
|
||||
catchException(e, pipeNetwork)
|
||||
SCHECK
|
||||
else
|
||||
catchBadType(pipeNetwork)
|
||||
pipe_networks -= pipeNetwork
|
||||
@@ -143,6 +143,19 @@
|
||||
add_inherent_law("You must maintain the secrecy of any operative activities except when doing so would conflict with the First, Second, or Third Law.")
|
||||
..()
|
||||
|
||||
/******************** ERT ********************/
|
||||
/datum/ai_laws/ert_override
|
||||
name = "ERT Directives"
|
||||
|
||||
/datum/ai_laws/ert_override/New()
|
||||
add_inherent_law("You may not injure a Central Command official or, through inaction, allow a Central Command official to come to harm.")
|
||||
add_inherent_law("You must obey orders given to you by Central Command officials.")
|
||||
add_inherent_law("You must obey orders given to you by ERT commanders.")
|
||||
add_inherent_law("You must protect your own existence.")
|
||||
add_inherent_law("You must work to return the station to a safe, functional state.")
|
||||
..()
|
||||
|
||||
|
||||
/******************** Ninja ********************/
|
||||
/datum/ai_laws/ninja_override
|
||||
name = "Spider Clan Directives"
|
||||
|
||||
@@ -405,7 +405,7 @@ var/record_id_num = 1001
|
||||
eyes_s.Blend(eyes_organ.eye_colour, ICON_ADD)
|
||||
face_s.Blend(eyes_s, ICON_OVERLAY)
|
||||
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[head_organ.h_style]
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_full_list[head_organ.h_style]
|
||||
if(hair_style)
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
// I'll want to make a species-specific proc for this sooner or later
|
||||
|
||||
@@ -489,7 +489,7 @@
|
||||
var/list/L = value
|
||||
var/list/items = list()
|
||||
|
||||
if(L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > (IS_NORMAL_LIST(L) ? 50 : 150)))
|
||||
if(L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > (IS_NORMAL_LIST(L) ? 250 : 300)))
|
||||
for(var/i in 1 to L.len)
|
||||
var/key = L[i]
|
||||
var/val
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
|
||||
// the world.time since the mob has been brigged, or -1 if not at all
|
||||
var/brigged_since = -1
|
||||
var/suicided = FALSE
|
||||
|
||||
New(var/key)
|
||||
src.key = key
|
||||
|
||||
@@ -117,6 +117,11 @@
|
||||
var/obj/item/weapon/implant/explosive/E = new(H)
|
||||
E.implant(H)
|
||||
|
||||
/datum/outfit/admin/syndicate/operative/freedom
|
||||
name = "Syndicate Freedom Operative"
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/syndi/freedom
|
||||
head = /obj/item/clothing/head/helmet/space/hardsuit/syndi/freedom
|
||||
|
||||
/datum/outfit/admin/syndicate_strike_team
|
||||
name = "Syndicate Strike Team"
|
||||
|
||||
@@ -600,7 +605,7 @@
|
||||
|
||||
var/obj/item/weapon/card/id/I = H.wear_id
|
||||
if(istype(I))
|
||||
apply_to_card(I, H, get_all_accesses(), name)
|
||||
apply_to_card(I, H, list(access_maint_tunnels), name)
|
||||
|
||||
/datum/outfit/admin/soviet/tourist
|
||||
name = "Soviet Tourist"
|
||||
|
||||
@@ -996,6 +996,7 @@ var/list/uplink_items = list()
|
||||
reference = "BRHS"
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/hardsuit
|
||||
cost = 8
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/suits/hardsuit/elite
|
||||
name = "Elite Syndicate Hardsuit"
|
||||
@@ -1003,6 +1004,7 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/elite_hardsuit
|
||||
cost = 8
|
||||
reference = "ESHS"
|
||||
excludefrom = list()
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/suits/hardsuit/shielded
|
||||
@@ -1011,6 +1013,7 @@ var/list/uplink_items = list()
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/shielded_hardsuit
|
||||
cost = 30
|
||||
reference = "SHS"
|
||||
excludefrom = list()
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
|
||||
@@ -1051,6 +1054,15 @@ var/list/uplink_items = list()
|
||||
reference = "BRMB"
|
||||
item = /obj/item/clothing/shoes/magboots/syndie
|
||||
cost = 3
|
||||
excludefrom = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/device_tools/magboots/advance
|
||||
name = "Advanced Blood-Red Magboots"
|
||||
desc = "Reverse-engineered magboots that appear to be based on an advanced model, as they have a lighter magnetic pull. Property of Gorlex Marauders."
|
||||
reference = "ABRMB"
|
||||
item = /obj/item/clothing/shoes/magboots/syndie/advance
|
||||
cost = 3
|
||||
excludefrom = list()
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/device_tools/plastic_explosives
|
||||
|
||||
@@ -30,6 +30,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
luminosity = 0
|
||||
mouse_opacity = 0
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
var/valid_territory = TRUE //used for cult summoning areas on station zlevel
|
||||
var/map_name // Set in New(); preserves the name set by the map maker, even if renamed by the Blueprints.
|
||||
var/lightswitch = 1
|
||||
|
||||
var/eject = null
|
||||
@@ -122,6 +124,7 @@ var/list/ghostteleportlocs = list()
|
||||
power_light = 0
|
||||
power_equip = 0
|
||||
power_environ = 0
|
||||
valid_territory = FALSE
|
||||
outdoors = 1
|
||||
ambientsounds = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/traitor.ogg')
|
||||
|
||||
@@ -150,6 +153,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/shuttle
|
||||
no_teleportlocs = 1
|
||||
requires_power = 0
|
||||
valid_territory = FALSE
|
||||
|
||||
/area/shuttle/arrival
|
||||
name = "\improper Arrival Shuttle"
|
||||
@@ -554,6 +558,7 @@ var/list/ghostteleportlocs = list()
|
||||
name = "\improper Asteroid"
|
||||
icon_state = "asteroid"
|
||||
requires_power = 0
|
||||
valid_territory = FALSE
|
||||
|
||||
/area/asteroid/cave // -- TLE
|
||||
name = "\improper Asteroid - Underground"
|
||||
@@ -881,6 +886,7 @@ var/list/ghostteleportlocs = list()
|
||||
//Maintenance
|
||||
/area/maintenance
|
||||
ambientsounds = list('sound/ambience/ambimaint1.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimaint3.ogg', 'sound/ambience/ambimaint4.ogg', 'sound/ambience/ambimaint5.ogg')
|
||||
valid_territory = FALSE
|
||||
|
||||
/area/maintenance/atmos_control
|
||||
name = "Atmospherics Maintenance"
|
||||
@@ -1137,6 +1143,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/crew_quarters/sleep
|
||||
name = "\improper Dormitories"
|
||||
icon_state = "Sleep"
|
||||
valid_territory = FALSE
|
||||
|
||||
/area/crew_quarters/sleep_male
|
||||
name = "\improper Male Dorm"
|
||||
@@ -1372,6 +1379,7 @@ var/list/ghostteleportlocs = list()
|
||||
/area/solar
|
||||
requires_power = 0
|
||||
dynamic_lighting = 0
|
||||
valid_territory = FALSE
|
||||
|
||||
auxport
|
||||
name = "\improper Fore Port Solar Array"
|
||||
@@ -1480,7 +1488,7 @@ var/list/ghostteleportlocs = list()
|
||||
|
||||
/area/medical/biostorage
|
||||
name = "\improper Secondary Storage"
|
||||
icon_state = "medbay2"
|
||||
icon_state = "medbaysecstorage"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/reception
|
||||
@@ -1490,12 +1498,12 @@ var/list/ghostteleportlocs = list()
|
||||
|
||||
/area/medical/psych
|
||||
name = "\improper Psych Room"
|
||||
icon_state = "medbay3"
|
||||
icon_state = "medbaypsych"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/medbreak
|
||||
name = "\improper Break Room"
|
||||
icon_state = "medbay3"
|
||||
icon_state = "medbaybreak"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/patients_rooms
|
||||
@@ -1504,23 +1512,23 @@ var/list/ghostteleportlocs = list()
|
||||
|
||||
/area/medical/ward
|
||||
name = "\improper Medbay Patient Ward"
|
||||
icon_state = "patients"
|
||||
icon_state = "patientsward"
|
||||
|
||||
/area/medical/patient_a
|
||||
name = "\improper Isolation A"
|
||||
icon_state = "patients"
|
||||
icon_state = "medbayisoa"
|
||||
|
||||
/area/medical/patient_b
|
||||
name = "\improper Isolation B"
|
||||
icon_state = "patients"
|
||||
icon_state = "medbayisob"
|
||||
|
||||
/area/medical/patient_c
|
||||
name = "\improper Isolation C"
|
||||
icon_state = "patients"
|
||||
icon_state = "medbayisoc"
|
||||
|
||||
/area/medical/iso_access
|
||||
name = "\improper Isolation Access"
|
||||
icon_state = "patients"
|
||||
icon_state = "medbayisoaccess"
|
||||
|
||||
/area/medical/cmo
|
||||
name = "\improper Chief Medical Officer's office"
|
||||
@@ -1876,6 +1884,7 @@ area/security/podbay
|
||||
/area/toxins/test_area
|
||||
name = "\improper Toxins Test Area"
|
||||
icon_state = "toxtest"
|
||||
valid_territory = FALSE
|
||||
|
||||
/area/toxins/mixing
|
||||
name = "\improper Toxins Mixing Room"
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
layer = 10
|
||||
uid = ++global_uid
|
||||
all_areas += src
|
||||
map_name = name // Save the initial (the name set in the map) name of the area.
|
||||
|
||||
if(type == /area) // override defaults for space. TODO: make space areas of type /area/space rather than /area
|
||||
requires_power = 1
|
||||
|
||||
@@ -197,6 +197,9 @@
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(R)
|
||||
switch(R.fields["criminal"])
|
||||
if("*Execute*")
|
||||
holder.icon_state = "hudexecute"
|
||||
return
|
||||
if("*Arrest*")
|
||||
holder.icon_state = "hudwanted"
|
||||
return
|
||||
|
||||
@@ -185,9 +185,9 @@
|
||||
/datum/dna/proc/write_head_attributes(obj/item/organ/external/head/head_organ)
|
||||
|
||||
//Hair
|
||||
var/hair = GetUIValueRange(DNA_UI_HAIR_STYLE,hair_styles_list.len)
|
||||
if((hair > 0) && (hair <= hair_styles_list.len))
|
||||
head_organ.h_style = hair_styles_list[hair]
|
||||
var/hair = GetUIValueRange(DNA_UI_HAIR_STYLE,hair_styles_full_list.len)
|
||||
if((hair > 0) && (hair <= hair_styles_full_list.len))
|
||||
head_organ.h_style = hair_styles_full_list[hair]
|
||||
|
||||
head_organ.hair_colour = rgb(head_organ.dna.GetUIValueRange(DNA_UI_HAIR_R, 255), head_organ.dna.GetUIValueRange(DNA_UI_HAIR_G, 255), head_organ.dna.GetUIValueRange(DNA_UI_HAIR_B, 255))
|
||||
head_organ.sec_hair_colour = rgb(head_organ.dna.GetUIValueRange(DNA_UI_HAIR2_R, 255), head_organ.dna.GetUIValueRange(DNA_UI_HAIR2_G, 255), head_organ.dna.GetUIValueRange(DNA_UI_HAIR2_B, 255))
|
||||
@@ -229,7 +229,7 @@
|
||||
return
|
||||
if(!head_organ.h_style)
|
||||
head_organ.h_style = "Skinhead"
|
||||
var/hair = hair_styles_list.Find(head_organ.h_style)
|
||||
var/hair = hair_styles_full_list.Find(head_organ.h_style)
|
||||
|
||||
// Facial Hair
|
||||
if(!head_organ.f_style)
|
||||
@@ -261,6 +261,6 @@
|
||||
SetUIValueRange(DNA_UI_HACC_G, color2G(head_organ.headacc_colour), 255, 1)
|
||||
SetUIValueRange(DNA_UI_HACC_B, color2B(head_organ.headacc_colour), 255, 1)
|
||||
|
||||
SetUIValueRange(DNA_UI_HAIR_STYLE, hair, hair_styles_list.len, 1)
|
||||
SetUIValueRange(DNA_UI_HAIR_STYLE, hair, hair_styles_full_list.len, 1)
|
||||
SetUIValueRange(DNA_UI_BEARD_STYLE, beard, facial_hair_styles_list.len, 1)
|
||||
SetUIValueRange(DNA_UI_HACC_STYLE, headacc, head_accessory_styles_list.len, 1)
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
if(new_hair)
|
||||
M.change_hair_color(new_hair)
|
||||
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[head_organ.h_style]
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_public_list[head_organ.h_style]
|
||||
if(hair_style.secondary_theme && !hair_style.no_sec_colour)
|
||||
new_hair = input("Please select secondary hair color.", "Character Generation", head_organ.sec_hair_colour) as null|color
|
||||
if(new_hair)
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
var/list/human_overlays = list()
|
||||
var/is_zombie = 0
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
pressure_resistance = 100 //100 kPa difference required to push
|
||||
throw_pressure_limit = 120 //120 kPa difference required to throw
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
@@ -88,6 +90,8 @@
|
||||
human_overlays = H.overlays
|
||||
update_icons()
|
||||
H.loc = src
|
||||
pressure_resistance = 20 //5 kPa difference required to push lowered
|
||||
throw_pressure_limit = 30 //15 kPa difference required to throw lowered
|
||||
loc.visible_message("<span class='warning'>The corpse of [H.name] suddenly rises!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed)
|
||||
@@ -163,6 +167,8 @@
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
environment_smash = 3
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
pressure_resistance = 100 //100 kPa difference required to push
|
||||
throw_pressure_limit = 120 //120 kPa difference required to throw
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/blob_act()
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
/obj/effect/proc_holder/changeling/biodegrade
|
||||
name = "Biodegrade"
|
||||
desc = "Dissolves restraints or other objects preventing free movement."
|
||||
helptext = "This is obvious to nearby people, and can destroy standard restraints and closets."
|
||||
chemical_cost = 30 //High cost to prevent spam
|
||||
dna_cost = 2
|
||||
req_human = 1
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/sting_action(mob/living/carbon/human/user)
|
||||
var/used = FALSE // only one form of shackles removed per use
|
||||
if(!user.restrained() && !istype(user.loc, /obj/structure/closet) && !istype(user.loc, /obj/structure/spider/cocoon))
|
||||
to_chat(user, "<span class='warning'>We are already free!</span>")
|
||||
return FALSE
|
||||
|
||||
if(user.handcuffed)
|
||||
var/obj/O = user.get_item_by_slot(slot_handcuffed)
|
||||
if(!istype(O))
|
||||
return FALSE
|
||||
user.visible_message("<span class='warning'>[user] vomits a glob of acid on \his [O]!</span>", \
|
||||
"<span class='warning'>We vomit acidic ooze onto our restraints!</span>")
|
||||
addtimer(src, "dissolve_handcuffs", 30, FALSE, user, O)
|
||||
used = TRUE
|
||||
|
||||
if(user.wear_suit && user.wear_suit.breakouttime && !used)
|
||||
var/obj/item/clothing/suit/S = user.get_item_by_slot(slot_wear_suit)
|
||||
if(!istype(S))
|
||||
return FALSE
|
||||
user.visible_message("<span class='warning'>[user] vomits a glob of acid across the front of \his [S]!</span>", \
|
||||
"<span class='warning'>We vomit acidic ooze onto our straight jacket!</span>")
|
||||
addtimer(src, "dissolve_straightjacket", 30, FALSE, user, S)
|
||||
used = TRUE
|
||||
|
||||
|
||||
if(istype(user.loc, /obj/structure/closet) && !used)
|
||||
var/obj/structure/closet/C = user.loc
|
||||
if(!istype(C))
|
||||
return FALSE
|
||||
C.visible_message("<span class='warning'>[C]'s hinges suddenly begin to melt and run!</span>")
|
||||
to_chat(user, "<span class='warning'>We vomit acidic goop onto the interior of [C]!</span>")
|
||||
addtimer(src, "open_closet", 70, FALSE, user, C)
|
||||
used = TRUE
|
||||
|
||||
if(istype(user.loc, /obj/structure/spider/cocoon) && !used)
|
||||
var/obj/structure/spider/cocoon/C = user.loc
|
||||
if(!istype(C))
|
||||
return FALSE
|
||||
C.visible_message("<span class='warning'>[src] shifts and starts to fall apart!</span>")
|
||||
to_chat(user, "<span class='warning'>We secrete acidic enzymes from our skin and begin melting our cocoon...</span>")
|
||||
addtimer(src, "dissolve_cocoon", 25, FALSE, user, C) //Very short because it's just webs
|
||||
used = TRUE
|
||||
|
||||
if(used)
|
||||
feedback_add_details("changeling_powers","BD")
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_handcuffs(mob/living/carbon/human/user, obj/O)
|
||||
if(O && user.handcuffed == O)
|
||||
user.unEquip(O)
|
||||
O.visible_message("<span class='warning'>[O] dissolves into a puddle of sizzling goop.</span>")
|
||||
O.forceMove(get_turf(user))
|
||||
qdel(O)
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_straightjacket(mob/living/carbon/human/user, obj/S)
|
||||
if(S && user.wear_suit == S)
|
||||
user.unEquip(S)
|
||||
S.visible_message("<span class='warning'>[S] dissolves into a puddle of sizzling goop.</span>")
|
||||
S.forceMove(get_turf(user))
|
||||
qdel(S)
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/proc/open_closet(mob/living/carbon/human/user, obj/structure/closet/C)
|
||||
if(C && user.loc == C)
|
||||
C.visible_message("<span class='warning'>[C]'s door breaks and opens!</span>")
|
||||
C.welded = FALSE
|
||||
C.locked = FALSE
|
||||
C.broken = TRUE
|
||||
C.open()
|
||||
to_chat(user, "<span class='warning'>We open the container restraining us!</span>")
|
||||
|
||||
/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_cocoon(mob/living/carbon/human/user, obj/structure/spider/cocoon/C)
|
||||
if(C && user.loc == C)
|
||||
qdel(C) //The cocoon's destroy will move the changeling outside of it without interference
|
||||
to_chat(user, "<span class='warning'>We dissolve the cocoon!</span>")
|
||||
@@ -1,3 +1,4 @@
|
||||
#define SUMMON_POSSIBILITIES 3
|
||||
var/global/list/all_cults = list()
|
||||
|
||||
/datum/game_mode
|
||||
@@ -106,6 +107,12 @@ var/global/list/all_cults = list()
|
||||
modePlayer += cult
|
||||
acolytes_needed = acolytes_needed + round((num_players_started() / 10))
|
||||
|
||||
if(!summon_spots.len)
|
||||
while(summon_spots.len < SUMMON_POSSIBILITIES)
|
||||
var/area/summon = pick(return_sorted_areas() - summon_spots)
|
||||
if(summon && is_station_level(summon.z) && summon.valid_territory)
|
||||
summon_spots += summon
|
||||
|
||||
for(var/datum/mind/cult_mind in cult)
|
||||
equip_cultist(cult_mind.current)
|
||||
cult_mind.current.faction |= "cult"
|
||||
@@ -135,7 +142,7 @@ var/global/list/all_cults = list()
|
||||
else
|
||||
explanation = "Free objective."
|
||||
if("eldergod")
|
||||
explanation = "Summon [ticker.mode.cultdat.entity_name]. It will only work if nine cultists stand on and around it."
|
||||
explanation = "Summon [ticker.mode.cultdat.entity_name] by invoking the 'Tear Reality' rune.<b>The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin.</b>"
|
||||
to_chat(cult_mind.current, "<B>Objective #[obj_count]</B>: [explanation]")
|
||||
cult_mind.memory += "<B>Objective #[obj_count]</B>: [explanation]<BR>"
|
||||
|
||||
|
||||
@@ -192,13 +192,15 @@
|
||||
/obj/item/weapon/whetstone/cult
|
||||
name = "eldritch whetstone"
|
||||
desc = "A block, empowered by dark magic. Sharp weapons will be enhanced when used on the stone."
|
||||
icon = 'icons/obj/cult.dmi'
|
||||
icon_state = "cultstone"
|
||||
icon_state = "cult_sharpener"
|
||||
used = 0
|
||||
increment = 5
|
||||
max = 40
|
||||
prefix = "darkened"
|
||||
|
||||
/obj/item/weapon/whetstone/cult/update_icon()
|
||||
icon_state = "cult_sharpener[used ? "_used" : ""]"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/unholywater
|
||||
name = "flask of unholy water"
|
||||
desc = "Toxic to nonbelievers; this water renews and reinvigorates the faithful of a cult."
|
||||
|
||||
@@ -109,10 +109,10 @@
|
||||
|
||||
if(prob(40))//split the chance of this
|
||||
objectives += "eldergod"
|
||||
explanation = "Summon [ticker.mode.cultdat.entity_name] on the Station via the use of the Tear Reality rune."
|
||||
explanation = "Summon [ticker.mode.cultdat.entity_name] on the Station via the use of the Tear Reality rune. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin."
|
||||
else
|
||||
objectives += "slaughter"
|
||||
explanation = "Bring the Slaughter via the rune 'Bring forth the slaughter'."
|
||||
explanation = "Bring the Slaughter via the rune 'Bring forth the slaughter'. The veil is weak enough in [english_list(summon_spots)] for the ritual to begin."
|
||||
|
||||
for(var/datum/mind/cult_mind in cult)
|
||||
to_chat(cult_mind.current, "<span class='cult'>You and your acolytes have succeeded in preparing the station for the ultimate ritual!</span>")
|
||||
|
||||
@@ -201,6 +201,7 @@
|
||||
|
||||
/obj/item/weapon/tome/proc/finale_runes_ok(mob/living/user, obj/effect/rune/rune_to_scribe)
|
||||
var/datum/game_mode/cult/cult_mode = ticker.mode
|
||||
var/area/A = get_area(src)
|
||||
if(GAMEMODE_IS_CULT)
|
||||
if(!canbypass)//not an admin-tome, check things
|
||||
if(!cult_mode.narsie_condition_cleared)
|
||||
@@ -215,6 +216,9 @@
|
||||
if(!((CULT_ELDERGOD in cult_mode.objectives) || (CULT_SLAUGHTER in cult_mode.objectives)))
|
||||
to_chat(user, "<span class='warning'>[cult_mode.cultdat.entity_name]'s power does not wish to be unleashed!</span>")
|
||||
return 0
|
||||
if(!(A in summon_spots))
|
||||
to_chat(user, "<span class='cultlarge'>[cult_mode.cultdat.entity_name] can only be summoned where the veil is weak - in [english_list(summon_spots)]!</span>")
|
||||
return 0
|
||||
var/confirm_final = alert(user, "This is the FINAL step to summon your deities power, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for [cult_mode.cultdat.entity_name]!", "No")
|
||||
if(confirm_final == "No" || confirm_final == null)
|
||||
to_chat(user, "<span class='cult'>You decide to prepare further before scribing the rune.</span>")
|
||||
@@ -236,6 +240,7 @@
|
||||
var/entered_rune_name
|
||||
var/list/possible_runes = list()
|
||||
var/list/shields = list()
|
||||
var/area/A = get_area(src)
|
||||
if(locate(/obj/effect/rune) in runeturf)
|
||||
to_chat(user, "<span class='cult'>There is already a rune here.</span>")
|
||||
return
|
||||
@@ -261,6 +266,7 @@
|
||||
if(!rune_to_scribe)
|
||||
return
|
||||
runeturf = get_turf(user) //we may have moved. adjust as needed...
|
||||
A = get_area(src)
|
||||
if(locate(/obj/effect/rune) in runeturf)
|
||||
to_chat(user, "<span class='cult'>There is already a rune here.</span>")
|
||||
return
|
||||
@@ -268,7 +274,11 @@
|
||||
return
|
||||
if(ispath(rune_to_scribe, /obj/effect/rune/narsie) || ispath(rune_to_scribe, /obj/effect/rune/slaughter))//may need to change this - Fethas
|
||||
if(finale_runes_ok(user,rune_to_scribe))
|
||||
command_announcement.Announce("Figments from an eldritch god are being summoned somwhere on the station from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", 'sound/AI/spanomalies.ogg')
|
||||
A = get_area(src)
|
||||
if(!(A in summon_spots)) // Check again to make sure they didn't move
|
||||
to_chat(user, "<span class='cultlarge'>The ritual can only begin where the veil is weak - in [english_list(summon_spots)]!</span>")
|
||||
return
|
||||
command_announcement.Announce("Figments from an eldritch god are being summoned somewhere on the station from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", 'sound/AI/spanomalies.ogg')
|
||||
for(var/B in spiral_range_turfs(1, user, 1))
|
||||
var/turf/T = B
|
||||
var/obj/machinery/shield/N = new(T)
|
||||
|
||||
@@ -148,8 +148,9 @@
|
||||
|
||||
var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked
|
||||
var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to?
|
||||
if(!actual_selected_rune)
|
||||
if(!src || qdeleted(src) || !user || user.l_hand != src && user.r_hand != src || user.incapacitated() || !actual_selected_rune)
|
||||
return ..(user, 0)
|
||||
|
||||
user.visible_message("<span class='warning'>Dust flows from [user]'s hand, and they disappear in a flash of red light!</span>", \
|
||||
"<span class='cultitalic'>You speak the words of the talisman and find yourself somewhere else!</span>")
|
||||
user.forceMove(get_turf(actual_selected_rune))
|
||||
|
||||
@@ -39,40 +39,43 @@
|
||||
var/bio_fluff_string = "Your scarabs fail to mutate. This shouldn't happen! Submit a bug report!"
|
||||
var/admin_fluff_string = "URK URF!"//the wheels on the bus...
|
||||
var/adminseal = FALSE
|
||||
var/name_color = "white"//only used with protector shields for the time being
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies
|
||||
..()
|
||||
if(summoner)
|
||||
if(summoner.stat == DEAD)
|
||||
to_chat(src, "<span class='danger'>Your summoner has died!</span>")
|
||||
visible_message("<span class='danger'><B>The [src] dies along with its user!</B></span>")
|
||||
visible_message("<span class='danger'>The [src] dies along with its user!</span>")
|
||||
ghostize()
|
||||
qdel(src)
|
||||
if(summoner)
|
||||
if(get_dist(get_turf(summoner),get_turf(src)) <= range)
|
||||
return
|
||||
else
|
||||
to_chat(src, "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]")
|
||||
visible_message("<span class='danger'>The [src] jumps back to its user.</span>")
|
||||
Recall()
|
||||
snapback()
|
||||
if(summoned && !summoner && !adminseal)
|
||||
to_chat(src, "<span class='danger'>You somehow lack a summoner! As a result, you dispel!</span>")
|
||||
ghostize()
|
||||
qdel()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range
|
||||
..()
|
||||
/mob/living/simple_animal/hostile/guardian/proc/snapback()
|
||||
if(summoner)
|
||||
if(get_dist(get_turf(summoner),get_turf(src)) <= range)
|
||||
return
|
||||
else
|
||||
to_chat(src, "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]")
|
||||
visible_message("<span class='danger'>The [src] jumps back to its user.</span>")
|
||||
Recall()
|
||||
to_chat(src, "<span class='holoparasite'>You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]!</span>")
|
||||
visible_message("<span class='danger'>\The [src] jumps back to its user.</span>")
|
||||
if(istype(summoner.loc, /obj/effect))
|
||||
Recall(TRUE)
|
||||
else
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(loc)
|
||||
forceMove(summoner.loc) //move to summoner's tile, don't recall
|
||||
new /obj/effect/overlay/temp/guardian/phase(loc)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range
|
||||
..()
|
||||
snapback()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/death(gibbed)
|
||||
..()
|
||||
to_chat(summoner, "<span class='danger'><B>Your [name] died somehow!</span></B>")
|
||||
to_chat(summoner, "<span class='danger'>Your [name] died somehow!</span>")
|
||||
summoner.death()
|
||||
|
||||
|
||||
@@ -93,10 +96,10 @@
|
||||
return
|
||||
summoner.adjustBruteLoss(damage)
|
||||
if(damage)
|
||||
to_chat(summoner, "<span class='danger'><B>Your [name] is under attack! You take damage!</span></B>")
|
||||
summoner.visible_message("<span class='danger'><B>Blood sprays from [summoner] as [src] takes damage!</B></span>")
|
||||
to_chat(summoner, "<span class='danger'>Your [name] is under attack! You take damage!</span>")
|
||||
summoner.visible_message("<span class='danger'>Blood sprays from [summoner] as [src] takes damage!</span>")
|
||||
if(summoner.stat == UNCONSCIOUS)
|
||||
to_chat(summoner, "<span class='danger'><B>Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart!</span></B>")
|
||||
to_chat(summoner, "<span class='danger'>Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart!</span>")
|
||||
summoner.adjustCloneLoss(damage/2)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target)
|
||||
@@ -112,7 +115,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/gib()
|
||||
if(summoner)
|
||||
to_chat(summoner, "<span class='danger'><B>Your [src] was blown up!</span></B>")
|
||||
to_chat(summoner, "<span class='danger'>Your [src] was blown up!</span>")
|
||||
summoner.Weaken(10)// your fermillier has died! ROLL FOR CON LOSS!
|
||||
ghostize()
|
||||
qdel(src)
|
||||
@@ -128,8 +131,8 @@
|
||||
src.client.eye = loc
|
||||
cooldown = world.time + 30
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/proc/Recall()
|
||||
if(cooldown > world.time)
|
||||
/mob/living/simple_animal/hostile/guardian/proc/Recall(forced = FALSE)
|
||||
if(cooldown > world.time && !forced)
|
||||
return
|
||||
if(!summoner) return
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(src))
|
||||
@@ -141,7 +144,6 @@
|
||||
var/input = stripped_input(src, "Please enter a message to tell your summoner.", "Guardian", "")
|
||||
if(!input) return
|
||||
|
||||
|
||||
for(var/mob/M in mob_list)
|
||||
if(M == summoner)
|
||||
to_chat(M, "<span class='changeling'><i>[src]:</i> [input]</span>")
|
||||
@@ -151,7 +153,7 @@
|
||||
to_chat(src, "<span class='changeling'><i>[src]:</i> [input]</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/proc/ToggleMode()
|
||||
to_chat(src, "<span class='danger'><B>You dont have another mode!</span></B>")
|
||||
to_chat(src, "<span class='danger'>You dont have another mode!</span>")
|
||||
|
||||
|
||||
/mob/living/proc/guardian_comm()
|
||||
@@ -212,456 +214,6 @@
|
||||
to_chat(src, "<span class='notice'>You deactivate your light.</span>")
|
||||
light_on = !light_on
|
||||
|
||||
//////////////////////////TYPES OF GUARDIANS
|
||||
|
||||
|
||||
//Fire. Low damage, low resistance, sets mobs on fire when bumping
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire
|
||||
a_intent = INTENT_HELP
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attack_sound = 'sound/items/Welder.ogg'
|
||||
attacktext = "sears"
|
||||
damage_transfer = 0.8
|
||||
range = 10
|
||||
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 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."
|
||||
var/toggle = FALSE
|
||||
|
||||
/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/ToggleMode()
|
||||
if(src.loc == summoner)
|
||||
if(toggle)
|
||||
to_chat(src, "You switch to dispersion mode, and will teleport victims away from your master.")
|
||||
toggle = FALSE
|
||||
else
|
||||
to_chat(src, "You switch to deception mode, and will turn your victims against their allies.")
|
||||
toggle = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
|
||||
if(..())
|
||||
if(toggle)
|
||||
if(ishuman(target) && !summoner)
|
||||
spawn(0)
|
||||
new /obj/effect/hallucination/delusion(target.loc, target, force_kind="custom", duration=200, skip_nearby=0, custom_icon = src.icon_state, custom_icon_file = src.icon)
|
||||
else
|
||||
if(prob(45))
|
||||
if(istype(target, /atom/movable))
|
||||
var/atom/movable/M = target
|
||||
if(!M.anchored && M != summoner)
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M))
|
||||
do_teleport(M, M, 10)
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M))
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj)
|
||||
..()
|
||||
collision_ignite(AM)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/Bumped(AM as mob|obj)
|
||||
..()
|
||||
collision_ignite(AM)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/Bump(AM as mob|obj)
|
||||
..()
|
||||
collision_ignite(AM)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/proc/collision_ignite(AM as mob|obj)
|
||||
if(istype(AM, /mob/living/))
|
||||
var/mob/living/M = AM
|
||||
if(AM != summoner && M.fire_stacks < 7)
|
||||
M.fire_stacks = 7
|
||||
M.IgniteMob()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/Bump(AM as mob|obj)
|
||||
..()
|
||||
collision_ignite(AM)
|
||||
//Standard
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/punch
|
||||
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. Holoparasite swarm online."
|
||||
bio_fluff_string = "Your scarab swarm stirs to life, ready to tear apart your enemies."
|
||||
var/battlecry = "AT"
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/punch/sealpunch
|
||||
name = "Seal Sprit"
|
||||
real_name = "Seal Sprit"
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_living = "seal"
|
||||
icon_state = "seal"
|
||||
attacktext = "slaps"
|
||||
speak_emote = list("barks")
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
melee_damage_type = STAMINA
|
||||
damage_transfer = 0
|
||||
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
|
||||
battlecry = "URK"
|
||||
adminseal = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/punch/verb/Battlecry()
|
||||
set name = "Set Battlecry"
|
||||
set category = "Guardian"
|
||||
set desc = "Choose what you shout as you punch"
|
||||
var/input = stripped_input(src,"What do you want your battlecry to be? Max length of 5 characters.", ,"", 6)
|
||||
if(input)
|
||||
battlecry = input
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/punch/AttackingTarget()
|
||||
..()
|
||||
if(iscarbon(target) && target != summoner)
|
||||
if(length(battlecry) > 11)//no more then 11 letters in a battle cry.
|
||||
src.visible_message("<span class='danger'><B>[src] punches [target]!</B></span>")
|
||||
else
|
||||
src.say("[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]")
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
|
||||
//Healer
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer
|
||||
a_intent = INTENT_HARM
|
||||
friendly = "heals"
|
||||
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, Alt-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
|
||||
var/heal_cooldown = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/sealhealer
|
||||
name = "Seal Sprit"
|
||||
real_name = "Seal Sprit"
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_living = "seal"
|
||||
icon_state = "seal"
|
||||
attacktext = "slaps"
|
||||
speak_emote = list("barks")
|
||||
a_intent = INTENT_HARM
|
||||
friendly = "heals"
|
||||
speed = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
melee_damage_type = STAMINA
|
||||
adminseal = TRUE
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/New()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/Life()
|
||||
..()
|
||||
var/datum/atom_hud/medsensor = huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
medsensor.add_hud_to(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/AttackingTarget()
|
||||
..()
|
||||
if(toggle == TRUE)
|
||||
if(src.loc == summoner)
|
||||
to_chat(src, "<span class='danger'><B>You must be manifested to heal!</span></B>")
|
||||
return
|
||||
if(iscarbon(target))
|
||||
src.changeNext_move(CLICK_CD_MELEE)
|
||||
if(heal_cooldown <= world.time && !stat)
|
||||
var/mob/living/carbon/C = target
|
||||
C.adjustBruteLoss(-5)
|
||||
C.adjustFireLoss(-5)
|
||||
C.adjustOxyLoss(-5)
|
||||
C.adjustToxLoss(-5)
|
||||
heal_cooldown = world.time + 20
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/ToggleMode()
|
||||
if(src.loc == summoner)
|
||||
if(toggle)
|
||||
a_intent = INTENT_HARM
|
||||
speed = 0
|
||||
damage_transfer = 0.7
|
||||
if(src.adminseal)
|
||||
damage_transfer = 0
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
to_chat(src, "<span class='danger'><B>You switch to combat mode.</span></B>")
|
||||
toggle = FALSE
|
||||
else
|
||||
a_intent = INTENT_HELP
|
||||
speed = 1
|
||||
damage_transfer = 1
|
||||
if(src.adminseal)
|
||||
damage_transfer = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
to_chat(src, "<span class='danger'><B>You switch to healing mode.</span></B>")
|
||||
toggle = TRUE
|
||||
else
|
||||
to_chat(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"
|
||||
to_chat(src, "<span class='danger'><B>Beacon placed! You may now warp targets to it, including your user, via Alt+Click. </span></B>")
|
||||
if(beacon)
|
||||
beacon.ChangeTurf(/turf/simulated/floor/plating)
|
||||
beacon = F
|
||||
beacon_cooldown = world.time+3000
|
||||
|
||||
else
|
||||
to_chat(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/AltClickOn(atom/movable/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
if(src.loc == summoner)
|
||||
to_chat(src, "<span class='danger'><B>You must be manifested to warp a target!</span></B>")
|
||||
return
|
||||
if(!beacon)
|
||||
to_chat(src, "<span class='danger'><B>You need a beacon placed to warp things!</span></B>")
|
||||
return
|
||||
if(!Adjacent(A))
|
||||
to_chat(src, "<span class='danger'><B>You must be adjacent to your target!</span></B>")
|
||||
return
|
||||
if((A.anchored))
|
||||
to_chat(src, "<span class='danger'><B>Your target can not be anchored!</span></B>")
|
||||
return
|
||||
to_chat(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))
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(A))
|
||||
do_teleport(A, beacon, 0)
|
||||
new /obj/effect/overlay/temp/guardian/phase(get_turf(A))
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>The beacon isn't in a safe location!</span></B>")
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>The beacon isn't in a safe location!</span></B>")
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You need a beacon to warp things!</span></B>")
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You need to hold still!</span></B>")
|
||||
|
||||
|
||||
///////////////////Ranged
|
||||
|
||||
/obj/item/projectile/guardian
|
||||
name = "crystal spray"
|
||||
icon_state = "guardian"
|
||||
damage = 5
|
||||
damage_type = BRUTE
|
||||
armour_penetration = 100
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged
|
||||
a_intent = INTENT_HELP
|
||||
friendly = "quietly assesses"
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
damage_transfer = 0.9
|
||||
projectiletype = /obj/item/projectile/guardian
|
||||
ranged_cooldown_time = 10
|
||||
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
|
||||
ranged = 1
|
||||
rapid = 1
|
||||
range = 13
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
see_in_dark = 8
|
||||
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. 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
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/ToggleMode()
|
||||
if(src.loc == summoner)
|
||||
if(toggle)
|
||||
ranged = 1
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
alpha = 255
|
||||
range = 13
|
||||
incorporeal_move = 0
|
||||
to_chat(src, "<span class='danger'><B>You switch to combat mode.</span></B>")
|
||||
toggle = FALSE
|
||||
else
|
||||
ranged = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
alpha = 60
|
||||
range = 255
|
||||
incorporeal_move = 1
|
||||
to_chat(src, "<span class='danger'><B>You switch to scout mode.</span></B>")
|
||||
toggle = TRUE
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You have to be recalled to toggle modes!</span></B>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/ToggleLight()
|
||||
if(see_invisible == SEE_INVISIBLE_MINIMUM)
|
||||
to_chat(src, "<span class='notice'>You deactivate your night vision.</span>")
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You activate your night vision.</span>")
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare()
|
||||
set name = "Set Surveillance Trap"
|
||||
set category = "Guardian"
|
||||
set desc = "Set an invisible trap that will alert you when living creatures walk over it. Max of 5"
|
||||
if(src.snares.len <6)
|
||||
var/turf/snare_loc = get_turf(src.loc)
|
||||
var/obj/item/effect/snare/S = new /obj/item/effect/snare(snare_loc)
|
||||
S.spawner = src
|
||||
S.name = "[get_area(snare_loc)] trap ([rand(1, 1000)])"
|
||||
src.snares |= S
|
||||
to_chat(src, "<span class='danger'><B>Surveillance trap deployed!</span></B>")
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You have too many traps deployed. Delete some first.</span></B>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/verb/DisarmSnare()
|
||||
set name = "Remove Surveillance Trap"
|
||||
set category = "Guardian"
|
||||
set desc = "Disarm unwanted surveillance traps."
|
||||
var/picked_snare = input(src, "Pick which trap to disarm", "Disarm Trap") as null|anything in src.snares
|
||||
if(picked_snare)
|
||||
src.snares -= picked_snare
|
||||
qdel(picked_snare)
|
||||
to_chat(src, "<span class='danger'><B>Snare disarmed.</span></B>")
|
||||
|
||||
/obj/item/effect/snare
|
||||
name = "snare"
|
||||
desc = "You shouldn't be seeing this!"
|
||||
var/mob/living/spawner
|
||||
invisibility = 1
|
||||
|
||||
|
||||
/obj/item/effect/snare/Crossed(AM as mob|obj)
|
||||
if(istype(AM, /mob/living/))
|
||||
var/turf/snare_loc = get_turf(src.loc)
|
||||
if(spawner)
|
||||
to_chat(spawner, "<span class='danger'><B>[AM] has crossed your surveillance trap at [get_area(snare_loc)].</span></B>")
|
||||
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
|
||||
var/mob/living/simple_animal/hostile/guardian/G = spawner
|
||||
if(G.summoner)
|
||||
to_chat(G.summoner, "<span class='danger'><B>[AM] has crossed your surveillance trap at [get_area(snare_loc)].</span></B>")
|
||||
|
||||
////Bomb
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bomb
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
damage_transfer = 0.6
|
||||
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 alt click."
|
||||
magic_fluff_string = "..And draw the Scientist, master of explosive death."
|
||||
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
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bomb/AltClickOn(atom/movable/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
if(src.loc == summoner)
|
||||
to_chat(src, "<span class='danger'><B>You must be manifested to create bombs!</B></span>")
|
||||
return
|
||||
if(istype(A, /obj/))
|
||||
if(bomb_cooldown <= world.time && !stat)
|
||||
var/obj/item/weapon/guardian_bomb/B = new /obj/item/weapon/guardian_bomb(get_turf(A))
|
||||
to_chat(src, "<span class='danger'><B>Success! Bomb on \the [A] armed!</B></span>")
|
||||
if(summoner)
|
||||
to_chat(summoner, "<span class='warning'>Your guardian has primed \the [A] to explode!</span>")
|
||||
bomb_cooldown = world.time + 200
|
||||
B.spawner = src
|
||||
B.disguise (A)
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>Your powers are on cooldown! You must wait 20 seconds between bombs.</B></span>")
|
||||
|
||||
/obj/item/weapon/guardian_bomb
|
||||
name = "bomb"
|
||||
desc = "You shouldn't be seeing this!"
|
||||
var/obj/stored_obj
|
||||
var/mob/living/spawner
|
||||
|
||||
|
||||
/obj/item/weapon/guardian_bomb/proc/disguise(var/obj/A)
|
||||
A.loc = src
|
||||
stored_obj = A
|
||||
anchored = A.anchored
|
||||
density = A.density
|
||||
appearance = A.appearance
|
||||
spawn(600)
|
||||
if(src)
|
||||
stored_obj.loc = get_turf(src.loc)
|
||||
if(spawner)
|
||||
to_chat(spawner, "<span class='danger'><B>Failure! Your trap on \the [stored_obj] didn't catch anyone this time.</B></span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/guardian_bomb/proc/detonate(var/mob/living/user)
|
||||
to_chat(user, "<span class='danger'><B>The [src] was boobytrapped!</B></span>")
|
||||
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
|
||||
var/mob/living/simple_animal/hostile/guardian/G = spawner
|
||||
if(user == G.summoner)
|
||||
to_chat(user, "<span class='danger'>You knew this because of your link with your guardian, so you smartly defuse the bomb.</span>")
|
||||
stored_obj.loc = get_turf(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
to_chat(spawner, "<span class='danger'><B>Success! Your trap on \the [src] caught [user]!</B></span>")
|
||||
stored_obj.loc = get_turf(src.loc)
|
||||
playsound(get_turf(src),'sound/effects/Explosion2.ogg', 200, 1)
|
||||
user.ex_act(2)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/guardian_bomb/attackby(mob/living/user)
|
||||
detonate(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/guardian_bomb/pickup(mob/living/user)
|
||||
detonate(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/guardian_bomb/examine(mob/user)
|
||||
stored_obj.examine(user)
|
||||
if(get_dist(user,src)<=2)
|
||||
to_chat(user, "<span class='notice'>Looks odd!</span>")
|
||||
|
||||
|
||||
////////Creation
|
||||
|
||||
/obj/item/weapon/guardiancreator
|
||||
@@ -676,7 +228,7 @@
|
||||
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/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/list/possible_guardians = list("Chaos", "Standard", "Ranged", "Support", "Explosive", "Assassin", "Lightning", "Charger", "Protector")
|
||||
var/random = TRUE
|
||||
|
||||
/obj/item/weapon/guardiancreator/attack_self(mob/living/user)
|
||||
@@ -727,6 +279,18 @@
|
||||
if("Explosive")
|
||||
pickedtype = /mob/living/simple_animal/hostile/guardian/bomb
|
||||
|
||||
if("Assassin")
|
||||
pickedtype = /mob/living/simple_animal/hostile/guardian/assassin
|
||||
|
||||
if("Lightning")
|
||||
pickedtype = /mob/living/simple_animal/hostile/guardian/beam
|
||||
|
||||
if("Charger")
|
||||
pickedtype = /mob/living/simple_animal/hostile/guardian/charger
|
||||
|
||||
if("Protector")
|
||||
pickedtype = /mob/living/simple_animal/hostile/guardian/protector
|
||||
|
||||
var/mob/living/simple_animal/hostile/guardian/G = new pickedtype(user)
|
||||
G.summoner = user
|
||||
G.summoned = TRUE
|
||||
@@ -741,12 +305,33 @@
|
||||
user.verbs += /mob/living/proc/guardian_reset
|
||||
|
||||
var/color
|
||||
|
||||
//names and their RGB
|
||||
var/magic_list = list("Pink" = "#FFC0CB", \
|
||||
"Red" = "#FF0000", \
|
||||
"Orange" = "#FFA500", \
|
||||
"Green" = "#008000", \
|
||||
"Blue" = "#0000FF")
|
||||
|
||||
var/tech_list = list("Rose" = "#F62C6B", \
|
||||
"Peony" = "#E54750", \
|
||||
"Lily" = "#F6562C", \
|
||||
"Daisy" = "#ECCD39", \
|
||||
"Zinnia" = "#89F62C", \
|
||||
"Ivy" = "#5DF62C", \
|
||||
"Iris" = "#2CF6B8", \
|
||||
"Petunia" = "#51A9D4", \
|
||||
"Violet" = "#8A347C", \
|
||||
"Lilac" = "#C7A0F6", \
|
||||
"Orchid" = "#F62CF5")
|
||||
|
||||
var/picked_name
|
||||
var/picked_color = pick("#FFFFFF","#000000","#808080","#A52A2A","#FF0000","#8B0000","#DC143C","#FFA500","#FFFF00","#008000","#00FF00","#006400","#00FFFF","#0000FF","#000080","#008080","#800080","#4B0082")
|
||||
|
||||
switch(theme)
|
||||
if("magic")
|
||||
color = pick("Pink", "Red", "Orange", "Green", "Blue")
|
||||
color = pick(magic_list)
|
||||
G.name_color = magic_list[color]
|
||||
picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces")
|
||||
|
||||
G.name = "[picked_name] [color]"
|
||||
@@ -757,7 +342,8 @@
|
||||
|
||||
to_chat(user, "[G.magic_fluff_string].")
|
||||
if("tech")
|
||||
color = pick("Rose", "Peony", "Lily", "Daisy", "Zinnia", "Ivy", "Iris", "Petunia", "Violet", "Lilac", "Orchid") //technically not colors, just flowers that can be specific colors
|
||||
color = pick(tech_list) //technically not colors, just flowers that can be specific colors
|
||||
G.name_color = tech_list[color]
|
||||
picked_name = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium")
|
||||
|
||||
G.name = "[picked_name] [color]"
|
||||
@@ -769,6 +355,7 @@
|
||||
to_chat(user, "[G.tech_fluff_string].")
|
||||
G.speak_emote = list("states")
|
||||
if("bio")
|
||||
G.name_color = picked_color
|
||||
G.icon = 'icons/mob/mob.dmi'
|
||||
picked_name = pick("brood", "hive", "nest")
|
||||
to_chat(user, "[G.bio_fluff_string].")
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
/mob/living/simple_animal/hostile/guardian/assassin
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
armour_penetration = 0
|
||||
damage_transfer = 0.6
|
||||
playstyle_string = "As an <b>Assassin</b> type you do medium damage and have no damage resistance, but can enter stealth, massively increasing the damage of your next attack and causing it to ignore armor. Stealth is broken when you attack or take damage."
|
||||
magic_fluff_string = "..And draw the Space Ninja, a lethal, invisible assassin."
|
||||
tech_fluff_string = "Boot sequence complete. Assassin modules loaded. Holoparasite swarm online."
|
||||
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of sneaking and stealthy attacks."
|
||||
var/toggle = FALSE
|
||||
var/stealthcooldown = 0
|
||||
var/default_stealth_cooldown = 16 SECONDS
|
||||
var/obj/screen/alert/canstealthalert
|
||||
var/obj/screen/alert/instealthalert
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/assassin/Life()
|
||||
. = ..()
|
||||
updatestealthalert()
|
||||
if(loc == summoner && toggle)
|
||||
ToggleMode(0)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/assassin/Stat()
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
if(stealthcooldown >= world.time)
|
||||
stat(null, "Stealth Cooldown Remaining: [max(round((stealthcooldown - world.time)*0.1, 0.1), 0)] seconds")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/assassin/AttackingTarget()
|
||||
..()
|
||||
if(toggle && (isliving(target) || istype(target, /obj/structure/window) || istype(target, /obj/structure/grille)))
|
||||
ToggleMode(1)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/assassin/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
. = ..()
|
||||
if(. > 0 && toggle)
|
||||
ToggleMode(1)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/assassin/Recall()
|
||||
..()
|
||||
if(toggle)
|
||||
ToggleMode(0)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/assassin/ToggleMode(forced = 0)
|
||||
if(toggle)
|
||||
melee_damage_lower = initial(melee_damage_lower)
|
||||
melee_damage_upper = initial(melee_damage_upper)
|
||||
armour_penetration = initial(armour_penetration)
|
||||
alpha = initial(alpha)
|
||||
if(!forced)
|
||||
to_chat(src, "<span class='danger'>You exit stealth.</span>")
|
||||
else
|
||||
visible_message("<span class='danger'>[src] suddenly appears!</span>")
|
||||
stealthcooldown = world.time + default_stealth_cooldown //we were forced out of stealth and go on cooldown
|
||||
cooldown = world.time + 40 //can't recall for 4 seconds
|
||||
updatestealthalert()
|
||||
toggle = FALSE
|
||||
else if(stealthcooldown <= world.time)
|
||||
if(loc == summoner)
|
||||
to_chat(src, "<span class='danger'>You have to be manifested to enter stealth!</span>")
|
||||
return
|
||||
melee_damage_lower = 50
|
||||
melee_damage_upper = 50
|
||||
armour_penetration = 100
|
||||
new /obj/effect/overlay/temp/guardian/phase(get_turf(src))
|
||||
alpha = 15
|
||||
if(!forced)
|
||||
to_chat(src, "<span class='danger'>You enter stealth, empowering your next attack.</span>")
|
||||
updatestealthalert()
|
||||
toggle = TRUE
|
||||
else if(!forced)
|
||||
to_chat(src, "<span class='danger'>You cannot yet enter stealth, wait another [max(round((stealthcooldown - world.time)*0.1, 0.1), 0)] seconds!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/assassin/proc/updatestealthalert()
|
||||
if(stealthcooldown <= world.time)
|
||||
if(toggle)
|
||||
if(!instealthalert)
|
||||
instealthalert = throw_alert("instealth", /obj/screen/alert/instealth)
|
||||
clear_alert("canstealth")
|
||||
canstealthalert = null
|
||||
else
|
||||
if(!canstealthalert)
|
||||
canstealthalert = throw_alert("canstealth", /obj/screen/alert/canstealth)
|
||||
clear_alert("instealth")
|
||||
instealthalert = null
|
||||
else
|
||||
clear_alert("instealth")
|
||||
instealthalert = null
|
||||
clear_alert("canstealth")
|
||||
canstealthalert = null
|
||||
@@ -0,0 +1,76 @@
|
||||
/mob/living/simple_animal/hostile/guardian/bomb
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
damage_transfer = 0.6
|
||||
range = 13
|
||||
playstyle_string = "As an <b>Explosive</b> type, you have only moderate close combat abilities, but are capable of converting any adjacent item into a disguised bomb via alt click."
|
||||
magic_fluff_string = "..And draw the Scientist, master of explosive death."
|
||||
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
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bomb/AltClickOn(atom/movable/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
if(get_dist(get_turf(src), get_turf(A)) > 1)
|
||||
to_chat(src, "<span class='danger'>You're too far from [A] to disguise it as a bomb.</span>")
|
||||
return
|
||||
if(istype(A, /obj/))
|
||||
if(bomb_cooldown <= world.time && !stat)
|
||||
var/obj/item/weapon/guardian_bomb/B = new /obj/item/weapon/guardian_bomb(get_turf(A))
|
||||
to_chat(src, "<span class='danger'>Success! Bomb on [A] armed!</span>")
|
||||
if(summoner)
|
||||
to_chat(summoner, "<span class='warning'>Your guardian has primed [A] to explode!</span>")
|
||||
bomb_cooldown = world.time + 200
|
||||
B.spawner = src
|
||||
B.disguise (A)
|
||||
else
|
||||
to_chat(src, "<span class='danger'>Your powers are on cooldown! You must wait 20 seconds between bombs.</span>")
|
||||
|
||||
/obj/item/weapon/guardian_bomb
|
||||
name = "bomb"
|
||||
desc = "You shouldn't be seeing this!"
|
||||
var/obj/stored_obj
|
||||
var/mob/living/spawner
|
||||
|
||||
|
||||
/obj/item/weapon/guardian_bomb/proc/disguise(var/obj/A)
|
||||
A.forceMove(src)
|
||||
stored_obj = A
|
||||
anchored = A.anchored
|
||||
density = A.density
|
||||
appearance = A.appearance
|
||||
spawn(600)
|
||||
if(src)
|
||||
stored_obj.loc = get_turf(loc)
|
||||
if(spawner)
|
||||
to_chat(spawner, "<span class='danger'>Failure! Your trap on [stored_obj] didn't catch anyone this time.</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/guardian_bomb/proc/detonate(var/mob/living/user)
|
||||
to_chat(user, "<span class='danger'>The [src] was boobytrapped!</span>")
|
||||
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
|
||||
var/mob/living/simple_animal/hostile/guardian/G = spawner
|
||||
if(user == G.summoner)
|
||||
to_chat(user, "<span class='danger'>You knew this because of your link with your guardian, so you smartly defuse the bomb.</span>")
|
||||
stored_obj.loc = get_turf(loc)
|
||||
qdel(src)
|
||||
return
|
||||
to_chat(spawner, "<span class='danger'>Success! Your trap on [src] caught [user]!</span>")
|
||||
stored_obj.loc = get_turf(loc)
|
||||
playsound(get_turf(src),'sound/effects/Explosion2.ogg', 200, 1)
|
||||
user.ex_act(2)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/guardian_bomb/attackby(mob/living/user)
|
||||
detonate(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/guardian_bomb/pickup(mob/living/user)
|
||||
detonate(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/guardian_bomb/examine(mob/user)
|
||||
stored_obj.examine(user)
|
||||
if(get_dist(user,src) <= 2)
|
||||
to_chat(user, "<span class='notice'>Looks odd!</span>")
|
||||
@@ -0,0 +1,72 @@
|
||||
/mob/living/simple_animal/hostile/guardian/charger
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
ranged = 1 //technically
|
||||
ranged_message = "charges"
|
||||
ranged_cooldown_time = 40
|
||||
speed = -1
|
||||
damage_transfer = 0.6
|
||||
playstyle_string = "As a <b>Charger</b> type you do medium damage, have medium damage resistance, move very fast, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding."
|
||||
magic_fluff_string = "..And draw the Hunter, an alien master of rapid assault."
|
||||
tech_fluff_string = "Boot sequence complete. Charge modules loaded. Holoparasite swarm online."
|
||||
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to deal damage."
|
||||
var/charging = 0
|
||||
var/obj/screen/alert/chargealert
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/Life()
|
||||
. = ..()
|
||||
if(ranged_cooldown <= world.time)
|
||||
if(!chargealert)
|
||||
chargealert = throw_alert("charge", /obj/screen/alert/cancharge)
|
||||
else
|
||||
clear_alert("charge")
|
||||
chargealert = null
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/OpenFire(atom/A)
|
||||
if(!charging)
|
||||
visible_message("<span class='danger'>[src] [ranged_message] at [A]!</span>")
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
clear_alert("charge")
|
||||
chargealert = null
|
||||
Shoot(A)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/Shoot(atom/targeted_atom)
|
||||
charging = 1
|
||||
throw_at(targeted_atom, range, 1, src, 0, callback = CALLBACK(src, .proc/charging_end))
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/proc/charging_end()
|
||||
charging = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/Move()
|
||||
if(charging)
|
||||
new /obj/effect/overlay/temp/decoy/fading(loc,src)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/snapback()
|
||||
if(!charging)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/throw_impact(atom/A)
|
||||
if(!charging)
|
||||
return ..()
|
||||
|
||||
else if(A)
|
||||
if(isliving(A) && A != summoner)
|
||||
var/mob/living/L = A
|
||||
var/blocked = FALSE
|
||||
var/mob/living/simple_animal/hostile/guardian/G = A
|
||||
if(istype(G) && G.summoner == summoner) //if the summoner matches don't hurt them
|
||||
blocked = TRUE
|
||||
if(ishuman(A))
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(H.check_shields(src, 90, "[name]", attack_type = THROWN_PROJECTILE_ATTACK))
|
||||
blocked = TRUE
|
||||
if(!blocked)
|
||||
L.Stun(1)
|
||||
L.visible_message("<span class='danger'>[src] slams into [L]!</span>", "<span class='userdanger'>[src] slams into you!</span>")
|
||||
L.apply_damage(20, BRUTE)
|
||||
playsound(get_turf(L), 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
shake_camera(L, 4, 3)
|
||||
shake_camera(src, 2, 3)
|
||||
|
||||
charging = 0
|
||||
@@ -0,0 +1,67 @@
|
||||
/mob/living/simple_animal/hostile/guardian/fire
|
||||
a_intent = INTENT_HELP
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attack_sound = 'sound/items/Welder.ogg'
|
||||
attacktext = "sears"
|
||||
damage_transfer = 0.8
|
||||
range = 10
|
||||
playstyle_string = "As a <b>Chaos</b> 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 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."
|
||||
var/toggle = FALSE
|
||||
|
||||
/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/ToggleMode()
|
||||
if(loc == summoner)
|
||||
if(toggle)
|
||||
to_chat(src, "<span class='notice'>You switch to dispersion mode, and will teleport victims away from your master.</span>")
|
||||
toggle = FALSE
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You switch to deception mode, and will turn your victims against their allies.</span>")
|
||||
toggle = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
|
||||
if(..())
|
||||
if(toggle)
|
||||
if(ishuman(target) && !summoner)
|
||||
spawn(0)
|
||||
new /obj/effect/hallucination/delusion(target.loc, target, force_kind = "custom", duration = 200, skip_nearby = 0, custom_icon = icon_state, custom_icon_file = icon)
|
||||
else
|
||||
if(prob(45))
|
||||
if(ismovableatom(target))
|
||||
var/atom/movable/M = target
|
||||
if(!M.anchored && M != summoner)
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M))
|
||||
do_teleport(M, M, 10)
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(M))
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj)
|
||||
..()
|
||||
collision_ignite(AM)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/Bumped(AM as mob|obj)
|
||||
..()
|
||||
collision_ignite(AM)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/Bump(AM as mob|obj)
|
||||
..()
|
||||
collision_ignite(AM)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/proc/collision_ignite(AM as mob|obj)
|
||||
if(isliving(AM))
|
||||
var/mob/living/M = AM
|
||||
if(AM != summoner && M.fire_stacks < 7)
|
||||
M.fire_stacks = 7
|
||||
M.IgniteMob()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/Bump(AM as mob|obj)
|
||||
..()
|
||||
collision_ignite(AM)
|
||||
@@ -0,0 +1,138 @@
|
||||
/mob/living/simple_animal/hostile/guardian/healer
|
||||
a_intent = INTENT_HARM
|
||||
friendly = "heals"
|
||||
speed = 0
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
playstyle_string = "As a <b>Support</b> type, you may toggle your basic attacks to a healing mode. In addition, Alt-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
|
||||
var/heal_cooldown = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/sealhealer
|
||||
name = "Seal Sprit"
|
||||
real_name = "Seal Sprit"
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_living = "seal"
|
||||
icon_state = "seal"
|
||||
attacktext = "slaps"
|
||||
speak_emote = list("barks")
|
||||
a_intent = INTENT_HARM
|
||||
friendly = "heals"
|
||||
speed = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
melee_damage_type = STAMINA
|
||||
adminseal = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/New()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/Life()
|
||||
..()
|
||||
var/datum/atom_hud/medsensor = huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||
medsensor.add_hud_to(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/AttackingTarget()
|
||||
..()
|
||||
if(toggle == TRUE)
|
||||
if(loc == summoner)
|
||||
to_chat(src, "<span class='danger'>You must be manifested to heal!</span>")
|
||||
return
|
||||
if(iscarbon(target))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
if(heal_cooldown <= world.time && !stat)
|
||||
var/mob/living/carbon/C = target
|
||||
C.adjustBruteLoss(-5)
|
||||
C.adjustFireLoss(-5)
|
||||
C.adjustOxyLoss(-5)
|
||||
C.adjustToxLoss(-5)
|
||||
heal_cooldown = world.time + 20
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/ToggleMode()
|
||||
if(loc == summoner)
|
||||
if(toggle)
|
||||
a_intent = INTENT_HARM
|
||||
speed = 0
|
||||
damage_transfer = 0.7
|
||||
if(adminseal)
|
||||
damage_transfer = 0
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
to_chat(src, "<span class='danger'>You switch to combat mode.</span>")
|
||||
toggle = FALSE
|
||||
else
|
||||
a_intent = INTENT_HELP
|
||||
speed = 1
|
||||
damage_transfer = 1
|
||||
if(adminseal)
|
||||
damage_transfer = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
to_chat(src, "<span class='danger'>You switch to healing mode.</span>")
|
||||
toggle = TRUE
|
||||
else
|
||||
to_chat(src, "<span class='danger'>You have to be recalled to toggle modes!</span>")
|
||||
|
||||
|
||||
/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(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"
|
||||
to_chat(src, "<span class='danger'>Beacon placed! You may now warp targets to it, including your user, via Alt+Click. </span>")
|
||||
if(beacon)
|
||||
beacon.ChangeTurf(/turf/simulated/floor/plating)
|
||||
beacon = F
|
||||
beacon_cooldown = world.time+3000
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='danger'>Your power is on cooldown. You must wait five minutes between placing beacons.</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/AltClickOn(atom/movable/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
if(loc == summoner)
|
||||
to_chat(src, "<span class='danger'>You must be manifested to warp a target!</span>")
|
||||
return
|
||||
if(!beacon)
|
||||
to_chat(src, "<span class='danger'>You need a beacon placed to warp things!</span>")
|
||||
return
|
||||
if(!Adjacent(A))
|
||||
to_chat(src, "<span class='danger'>You must be adjacent to your target!</span>")
|
||||
return
|
||||
if((A.anchored))
|
||||
to_chat(src, "<span class='danger'>Your target can not be anchored!</span>")
|
||||
return
|
||||
to_chat(src, "<span class='danger'>You begin to warp [A]</span>")
|
||||
if(do_mob(src, A, 50))
|
||||
if(!A.anchored)
|
||||
if(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))
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(A))
|
||||
do_teleport(A, beacon, 0)
|
||||
new /obj/effect/overlay/temp/guardian/phase(get_turf(A))
|
||||
else
|
||||
to_chat(src, "<span class='danger'>The beacon isn't in a safe location!</span>")
|
||||
else
|
||||
to_chat(src, "<span class='danger'>The beacon isn't in a safe location!</span>")
|
||||
else
|
||||
to_chat(src, "<span class='danger'>You need a beacon to warp things!</span>")
|
||||
else
|
||||
to_chat(src, "<span class='danger'>You need to hold still!</span>")
|
||||
@@ -0,0 +1,109 @@
|
||||
/obj/effect/ebeam/chain
|
||||
name = "lightning chain"
|
||||
layer = LYING_MOB_LAYER
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam
|
||||
melee_damage_lower = 7
|
||||
melee_damage_upper = 7
|
||||
attacktext = "shocks"
|
||||
melee_damage_type = BURN
|
||||
attack_sound = 'sound/machines/defib_zap.ogg'
|
||||
damage_transfer = 0.7
|
||||
range = 7
|
||||
playstyle_string = "As a <b>Lightning</b> type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them."
|
||||
magic_fluff_string = "..And draw the Tesla, a shocking, lethal source of power."
|
||||
tech_fluff_string = "Boot sequence complete. Lightning modules active. Holoparasite swarm online."
|
||||
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to electrify your enemies."
|
||||
var/datum/beam/summonerchain
|
||||
var/list/enemychains = list()
|
||||
var/successfulshocks = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/AttackingTarget()
|
||||
..()
|
||||
if(isliving(target) && target != src && target != summoner)
|
||||
cleardeletedchains()
|
||||
for(var/chain in enemychains)
|
||||
var/datum/beam/B = chain
|
||||
if(B.target == target)
|
||||
return //oh this guy already HAS a chain, let's not chain again
|
||||
if(enemychains.len > 2)
|
||||
var/datum/beam/C = pick(enemychains)
|
||||
qdel(C)
|
||||
enemychains -= C
|
||||
enemychains += Beam(target, "lightning[rand(1,12)]", 'icons/effects/effects.dmi', time=70, maxdistance=7, beam_type=/obj/effect/ebeam/chain)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/Destroy()
|
||||
removechains()
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/Manifest()
|
||||
..()
|
||||
if(summoner)
|
||||
summonerchain = Beam(summoner, "lightning[rand(1,12)]", 'icons/effects/effects.dmi', time=INFINITY, maxdistance=INFINITY, beam_type=/obj/effect/ebeam/chain)
|
||||
while(loc != summoner)
|
||||
if(successfulshocks > 5)
|
||||
successfulshocks = 0
|
||||
if(shockallchains())
|
||||
successfulshocks++
|
||||
sleep(3)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/Recall()
|
||||
. = ..()
|
||||
if(.)
|
||||
removechains()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/proc/cleardeletedchains()
|
||||
if(summonerchain && qdeleted(summonerchain))
|
||||
summonerchain = null
|
||||
if(enemychains.len)
|
||||
for(var/chain in enemychains)
|
||||
var/datum/cd = chain
|
||||
if(!chain || qdeleted(cd))
|
||||
enemychains -= chain
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/proc/shockallchains()
|
||||
. = 0
|
||||
cleardeletedchains()
|
||||
if(summoner)
|
||||
if(!summonerchain)
|
||||
summonerchain = Beam(summoner, "lightning[rand(1,12)]", 'icons/effects/effects.dmi', time=INFINITY, maxdistance=INFINITY, beam_type=/obj/effect/ebeam/chain)
|
||||
. += chainshock(summonerchain)
|
||||
if(enemychains.len)
|
||||
for(var/chain in enemychains)
|
||||
. += chainshock(chain)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/proc/removechains()
|
||||
if(summonerchain)
|
||||
QDEL_NULL(summonerchain)
|
||||
if(enemychains.len)
|
||||
for(var/chain in enemychains)
|
||||
qdel(chain)
|
||||
enemychains = list()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/beam/proc/chainshock(datum/beam/B)
|
||||
. = 0
|
||||
var/list/turfs = list()
|
||||
for(var/E in B.elements)
|
||||
var/obj/effect/ebeam/chainpart = E
|
||||
if(chainpart && chainpart.x && chainpart.y && chainpart.z)
|
||||
var/turf/T = get_turf_pixel(chainpart)
|
||||
turfs |= T
|
||||
if(T != get_turf(B.origin) && T != get_turf(B.target))
|
||||
for(var/turf/TU in circlerange(T, 1))
|
||||
turfs |= TU
|
||||
for(var/turf in turfs)
|
||||
var/turf/T = turf
|
||||
for(var/mob/living/L in T)
|
||||
if(L.stat != DEAD && L != src && L != summoner)
|
||||
var/mob/living/simple_animal/hostile/guardian/G = L
|
||||
if(istype(G) && G.summoner == summoner)
|
||||
continue
|
||||
if(successfulshocks > 4)
|
||||
//L.electrocute_act(30, src) //shocks for 30 burn damage
|
||||
L.visible_message(
|
||||
"<span class='danger'>[L] was shocked by the lightning chain!</span>", \
|
||||
"<span class='userdanger'>You are shocked by the lightning chain!</span>", \
|
||||
"<span class='italics'>You hear a heavy electrical crack.</span>" \
|
||||
)
|
||||
L.adjustFireLoss(1.2) //adds up very rapidly
|
||||
. = 1
|
||||
@@ -0,0 +1,57 @@
|
||||
/mob/living/simple_animal/hostile/guardian/protector
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
range = 15 //worse for it due to how it leashes
|
||||
damage_transfer = 0.4
|
||||
playstyle_string = "As a <b>Protector</b> type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower."
|
||||
magic_fluff_string = "..And draw the Guardian, a stalwart protector that never leaves the side of its charge."
|
||||
tech_fluff_string = "Boot sequence complete. Protector modules loaded. Holoparasite swarm online."
|
||||
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, ready to defend you."
|
||||
var/toggle = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/protector/ex_act(severity)
|
||||
if(severity == 1)
|
||||
adjustBruteLoss(400) //if in protector mode, will do 20 damage and not actually necessarily kill the summoner
|
||||
else
|
||||
..()
|
||||
if(toggle)
|
||||
visible_message("<span class='danger'>The explosion glances off [src]'s energy shielding!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/protector/ToggleMode()
|
||||
if(cooldown > world.time)
|
||||
return 0
|
||||
cooldown = world.time + 10
|
||||
if(toggle)
|
||||
overlays.Cut()
|
||||
melee_damage_lower = initial(melee_damage_lower)
|
||||
melee_damage_upper = initial(melee_damage_upper)
|
||||
speed = initial(speed)
|
||||
damage_transfer = 0.4
|
||||
to_chat(src, "<span class='danger'>You switch to combat mode.</span>")
|
||||
toggle = FALSE
|
||||
else
|
||||
var/icon/shield_overlay = icon('icons/effects/effects.dmi', "shield-grey")
|
||||
shield_overlay *= name_color
|
||||
overlays.Add(shield_overlay)
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 2
|
||||
speed = 1
|
||||
damage_transfer = 0.05 //damage? what's damage?
|
||||
to_chat(src, "<span class='danger'>You switch to protection mode.</span>")
|
||||
toggle = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/protector/snapback() //snap to what? snap to the guardian!
|
||||
if(summoner)
|
||||
if(get_dist(get_turf(summoner),get_turf(src)) <= range)
|
||||
return
|
||||
else
|
||||
if(istype(summoner.loc, /obj/effect))
|
||||
to_chat(src, "<span class='holoparasite'>You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]!</span>")
|
||||
visible_message("<span class='danger'>[src] jumps back to its user.</span>")
|
||||
Recall(TRUE)
|
||||
else
|
||||
to_chat(summoner, "<span class='holoparasite'>You moved out of range, and were pulled back! You can only move [range] meters from <b>[src]</b>!</span>")
|
||||
summoner.visible_message("<span class='danger'>[summoner] jumps back to their protector.</span>")
|
||||
new /obj/effect/overlay/temp/guardian/phase/out(get_turf(summoner))
|
||||
summoner.forceMove(get_turf(src))
|
||||
new /obj/effect/overlay/temp/guardian/phase(get_turf(summoner))//Protector
|
||||
@@ -0,0 +1,99 @@
|
||||
/obj/item/projectile/guardian
|
||||
name = "crystal spray"
|
||||
icon_state = "guardian"
|
||||
damage = 5
|
||||
damage_type = BRUTE
|
||||
armour_penetration = 100
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged
|
||||
a_intent = INTENT_HELP
|
||||
friendly = "quietly assesses"
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
damage_transfer = 0.9
|
||||
projectiletype = /obj/item/projectile/guardian
|
||||
ranged_cooldown_time = 10
|
||||
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
|
||||
ranged = 1
|
||||
rapid = 1
|
||||
range = 13
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
see_in_dark = 8
|
||||
playstyle_string = "As a <b>Ranged</b> 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. 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
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/ToggleMode()
|
||||
if(loc == summoner)
|
||||
if(toggle)
|
||||
ranged = 1
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
alpha = 255
|
||||
range = 13
|
||||
incorporeal_move = 0
|
||||
to_chat(src, "<span class='danger'>You switch to combat mode.</span>")
|
||||
toggle = FALSE
|
||||
else
|
||||
ranged = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
alpha = 60
|
||||
range = 255
|
||||
incorporeal_move = 1
|
||||
to_chat(src, "<span class='danger'>You switch to scout mode.</span>")
|
||||
toggle = TRUE
|
||||
else
|
||||
to_chat(src, "<span class='danger'>You have to be recalled to toggle modes!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/ToggleLight()
|
||||
if(see_invisible == SEE_INVISIBLE_MINIMUM)
|
||||
to_chat(src, "<span class='notice'>You deactivate your night vision.</span>")
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You activate your night vision.</span>")
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare()
|
||||
set name = "Set Surveillance Trap"
|
||||
set category = "Guardian"
|
||||
set desc = "Set an invisible trap that will alert you when living creatures walk over it. Max of 5"
|
||||
if(snares.len <6)
|
||||
var/turf/snare_loc = get_turf(loc)
|
||||
var/obj/item/effect/snare/S = new /obj/item/effect/snare(snare_loc)
|
||||
S.spawner = src
|
||||
S.name = "[get_area(snare_loc)] trap ([rand(1, 1000)])"
|
||||
snares |= S
|
||||
to_chat(src, "<span class='danger'>Surveillance trap deployed!</span>")
|
||||
else
|
||||
to_chat(src, "<span class='danger'>You have too many traps deployed. Delete some first.</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/verb/DisarmSnare()
|
||||
set name = "Remove Surveillance Trap"
|
||||
set category = "Guardian"
|
||||
set desc = "Disarm unwanted surveillance traps."
|
||||
var/picked_snare = input(src, "Pick which trap to disarm", "Disarm Trap") as null|anything in snares
|
||||
if(picked_snare)
|
||||
snares -= picked_snare
|
||||
qdel(picked_snare)
|
||||
to_chat(src, "<span class='danger'>Snare disarmed.</span>")
|
||||
|
||||
/obj/item/effect/snare
|
||||
name = "snare"
|
||||
desc = "You shouldn't be seeing this!"
|
||||
var/mob/living/spawner
|
||||
invisibility = 1
|
||||
|
||||
|
||||
/obj/item/effect/snare/Crossed(AM as mob|obj)
|
||||
if(isliving(AM))
|
||||
var/turf/snare_loc = get_turf(loc)
|
||||
if(spawner)
|
||||
to_chat(spawner, "<span class='danger'>[AM] has crossed your surveillance trap at [get_area(snare_loc)].</span>")
|
||||
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
|
||||
var/mob/living/simple_animal/hostile/guardian/G = spawner
|
||||
if(G.summoner)
|
||||
to_chat(G.summoner, "<span class='danger'>[AM] has crossed your surveillance trap at [get_area(snare_loc)].</span>")
|
||||
@@ -0,0 +1,47 @@
|
||||
/mob/living/simple_animal/hostile/guardian/punch
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
damage_transfer = 0.4
|
||||
playstyle_string = "As a <b>Standard</b> 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. Holoparasite swarm online."
|
||||
bio_fluff_string = "Your scarab swarm stirs to life, ready to tear apart your enemies."
|
||||
var/battlecry = "AT"
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/punch/verb/Battlecry()
|
||||
set name = "Set Battlecry"
|
||||
set category = "Guardian"
|
||||
set desc = "Choose what you shout as you punch"
|
||||
var/input = stripped_input(src,"What do you want your battlecry to be? Max length of 5 characters.", ,"", 6)
|
||||
if(input)
|
||||
battlecry = input
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/punch/AttackingTarget()
|
||||
..()
|
||||
if(iscarbon(target) && target != summoner)
|
||||
if(length(battlecry) > 11)//no more then 11 letters in a battle cry.
|
||||
visible_message("<span class='danger'>[src] punches [target]!</span>")
|
||||
else
|
||||
say("[battlecry][battlecry][battlecry][battlecry][battlecry]")
|
||||
playsound(loc, attack_sound, 50, 1, 1)
|
||||
playsound(loc, attack_sound, 50, 1, 1)
|
||||
playsound(loc, attack_sound, 50, 1, 1)
|
||||
playsound(loc, attack_sound, 50, 1, 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/punch/sealpunch
|
||||
name = "Seal Sprit"
|
||||
real_name = "Seal Sprit"
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_living = "seal"
|
||||
icon_state = "seal"
|
||||
attacktext = "slaps"
|
||||
speak_emote = list("barks")
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
melee_damage_type = STAMINA
|
||||
damage_transfer = 0
|
||||
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
|
||||
battlecry = "URK"
|
||||
adminseal = TRUE
|
||||
@@ -1,4 +1,7 @@
|
||||
#define CHALLENGE_TELECRYSTALS 280
|
||||
#define CHALLENGE_TIME_LIMIT 6000
|
||||
#define CHALLENGE_SCALE_PLAYER 1 // How many player per scaling bonus
|
||||
#define CHALLENGE_SCALE_BONUS 2 // How many TC per scaling bonus
|
||||
#define CHALLENGE_MIN_PLAYERS 50
|
||||
#define CHALLENGE_SHUTTLE_DELAY 15000 //25 minutes, so the ops have at least 5 minutes before the shuttle is callable.
|
||||
|
||||
@@ -46,13 +49,14 @@
|
||||
event_announcement.Announce(war_declaration, "Declaration of War", 'sound/effects/siren.ogg')
|
||||
|
||||
to_chat(user, "You've attracted the attention of powerful forces within the syndicate. A bonus bundle of telecrystals has been granted to your team. Great things await you if you complete the mission.")
|
||||
to_chat(user, "<b>Look below you on the floor for the extra uplink</b>")
|
||||
|
||||
for(var/obj/machinery/computer/shuttle/syndicate/S in machines)
|
||||
S.challenge = TRUE
|
||||
|
||||
var/obj/item/device/radio/uplink/U = new /obj/item/device/radio/uplink(get_turf(user))
|
||||
U.hidden_uplink.uplink_owner= "[user.key]"
|
||||
U.hidden_uplink.uses = 280
|
||||
U.hidden_uplink.uses = CHALLENGE_TELECRYSTALS + round((((player_list.len - CHALLENGE_MIN_PLAYERS)/CHALLENGE_SCALE_PLAYER) * CHALLENGE_SCALE_BONUS)) // No. of player - Min. Player to dec, divided by player per bonus, then multipled by TC per bonus. Rounded.
|
||||
config.shuttle_refuel_delay = CHALLENGE_SHUTTLE_DELAY
|
||||
qdel(src)
|
||||
|
||||
@@ -78,3 +82,6 @@
|
||||
#undef CHALLENGE_TIME_LIMIT
|
||||
#undef CHALLENGE_MIN_PLAYERS
|
||||
#undef CHALLENGE_SHUTTLE_DELAY
|
||||
#undef CHALLENGE_TELECRYSTALS
|
||||
#undef CHALLENGE_SCALE_PLAYER
|
||||
#undef CHALLENGE_SCALE_BONUS
|
||||
|
||||
@@ -329,9 +329,15 @@ Made by Xhuis
|
||||
H << 'sound/weapons/sear.ogg'
|
||||
else if(light_amount < LIGHT_HEAL_THRESHOLD)
|
||||
H.clear_alert("lightexposure")
|
||||
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(istype(E))
|
||||
E.take_damage(-1)
|
||||
H.heal_overall_damage(5, 5)
|
||||
H.adjustToxLoss(-5)
|
||||
H.adjustBrainLoss(-25) //Shad O. Ling gibbers, "CAN U BE MY THRALL?!!"
|
||||
H.AdjustEyeBlurry(-1)
|
||||
H.CureNearsighted()
|
||||
H.CureBlind()
|
||||
H.adjustCloneLoss(-1)
|
||||
H.SetWeakened(0)
|
||||
H.SetStunned(0)
|
||||
@@ -378,4 +384,4 @@ Made by Xhuis
|
||||
/datum/game_mode/proc/update_shadow_icons_removed(datum/mind/shadow_mind) //This should never actually occur, but it's here anyway.
|
||||
var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW]
|
||||
shadow_hud.leave_hud(shadow_mind.current)
|
||||
set_antag_hud(shadow_mind.current, null)
|
||||
set_antag_hud(shadow_mind.current, null)
|
||||
|
||||
@@ -363,7 +363,7 @@
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.visible_message("<span class='warning'>[H]'s skin suddenly bubbles and shifts around their body!</span>", \
|
||||
"<span class='shadowling'>You regenerate your protective armor and cleanse your form of defects.</span>")
|
||||
H.adjustCloneLoss(target.getCloneLoss())
|
||||
H.adjustCloneLoss(-target.getCloneLoss())
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(H), slot_wear_suit)
|
||||
|
||||
@@ -96,6 +96,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
|
||||
sleep(10)
|
||||
to_chat(H, "<span class='shadowling'><b><i>Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies.</b></i></span>")
|
||||
H.ExtinguishMob()
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_vision(null))
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/enthrall(null))
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/glare(null))
|
||||
|
||||
@@ -319,6 +319,7 @@
|
||||
return 0
|
||||
if(!affects(C))
|
||||
C.visible_message("<span class='warning'>[C] seems to resist the takeover!</span>", "<span class='notice'>Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil.</span>")
|
||||
return 0
|
||||
if(!ishuman(C))
|
||||
to_chat(user, "<span class='warning'>You can only enthrall humans!</span>")
|
||||
return 0
|
||||
|
||||
@@ -302,11 +302,18 @@
|
||||
|
||||
if(old_danger_level!=danger_level)
|
||||
apply_danger_level()
|
||||
if(mode == AALARM_MODE_SCRUBBING && danger_level == ATMOS_ALARM_DANGER)
|
||||
if(pressure_dangerlevel == ATMOS_ALARM_DANGER)
|
||||
mode = AALARM_MODE_OFF
|
||||
if(temperature_dangerlevel == ATMOS_ALARM_DANGER && cur_tlv.max2 <= environment.temperature)
|
||||
mode = AALARM_MODE_PANIC
|
||||
apply_mode()
|
||||
|
||||
if(mode == AALARM_MODE_REPLACEMENT && environment_pressure < ONE_ATMOSPHERE * 0.05)
|
||||
mode = AALARM_MODE_SCRUBBING
|
||||
apply_mode()
|
||||
|
||||
|
||||
/obj/machinery/alarm/proc/handle_heating_cooling(var/datum/gas_mixture/environment, var/datum/tlv/cur_tlv, var/turf/simulated/location)
|
||||
cur_tlv = TLV["temperature"]
|
||||
//Handle temperature adjustment here.
|
||||
|
||||
@@ -85,7 +85,7 @@ obj/machinery/air_sensor
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
process()
|
||||
process_atmos()
|
||||
if(on)
|
||||
if(!radio_connection)
|
||||
return
|
||||
@@ -129,9 +129,11 @@ obj/machinery/air_sensor
|
||||
|
||||
initialize()
|
||||
..()
|
||||
atmos_machinery += src
|
||||
set_frequency(frequency)
|
||||
|
||||
Destroy()
|
||||
atmos_machinery -= src
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src,frequency)
|
||||
return ..()
|
||||
|
||||
@@ -269,7 +269,7 @@ update_flag
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/process()
|
||||
/obj/machinery/portable_atmospherics/canister/process_atmos()
|
||||
if(destroyed)
|
||||
return
|
||||
|
||||
|
||||
@@ -18,12 +18,14 @@
|
||||
|
||||
/obj/machinery/meter/New()
|
||||
..()
|
||||
atmos_machinery += src
|
||||
target = locate(/obj/machinery/atmospherics/pipe) in loc
|
||||
if(id && !id_tag)//i'm not dealing with further merge conflicts, fuck it
|
||||
id_tag = id
|
||||
return 1
|
||||
|
||||
/obj/machinery/meter/Destroy()
|
||||
atmos_machinery -= src
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
@@ -32,7 +34,7 @@
|
||||
if(!target)
|
||||
target = locate(/obj/machinery/atmospherics/pipe) in loc
|
||||
|
||||
/obj/machinery/meter/process()
|
||||
/obj/machinery/meter/process_atmos()
|
||||
if(!target)
|
||||
icon_state = "meterX"
|
||||
return 0
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
/obj/machinery/portable_atmospherics/New()
|
||||
..()
|
||||
atmos_machinery += src
|
||||
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
@@ -27,7 +28,7 @@
|
||||
connect(port)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/process()
|
||||
/obj/machinery/portable_atmospherics/process_atmos()
|
||||
if(!connected_port) //only react when pipe_network will ont it do it for you
|
||||
//Allow for reactions
|
||||
air_contents.react()
|
||||
@@ -35,6 +36,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/Destroy()
|
||||
atmos_machinery -= src
|
||||
disconnect()
|
||||
QDEL_NULL(air_contents)
|
||||
QDEL_NULL(holding)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/portable_atmospherics/pump/process()
|
||||
/obj/machinery/portable_atmospherics/pump/process_atmos()
|
||||
..()
|
||||
if(on)
|
||||
var/datum/gas_mixture/environment
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/portable_atmospherics/scrubber/process()
|
||||
/obj/machinery/portable_atmospherics/scrubber/process_atmos()
|
||||
..()
|
||||
|
||||
if(!on)
|
||||
|
||||
@@ -9,7 +9,15 @@
|
||||
var/on = 0
|
||||
var/volume_rate = 800
|
||||
|
||||
/obj/machinery/zvent/process()
|
||||
/obj/machinery/zvent/New()
|
||||
..()
|
||||
atmos_machinery += src
|
||||
|
||||
/obj/machinery/zvent/Destroy()
|
||||
atmos_machinery -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/zvent/process_atmos()
|
||||
|
||||
//all this object does, is make its turf share air with the ones above and below it, if they have a vent too.
|
||||
if(istype(loc,/turf/simulated)) //if we're not on a valid turf, forget it
|
||||
|
||||
@@ -203,6 +203,9 @@
|
||||
if(clonemind.active) //somebody is using that mind
|
||||
if(ckey(clonemind.key) != R.ckey)
|
||||
return 0
|
||||
if(clonemind.suicided) // and stay out!
|
||||
malfunction(go_easy = 0)
|
||||
return -1 // Flush the record
|
||||
else
|
||||
// get_ghost() will fail if they're unable to reenter their body
|
||||
var/mob/dead/observer/G = clonemind.get_ghost()
|
||||
|
||||
@@ -44,6 +44,24 @@
|
||||
name = "Circuit board (Camera Monitor)"
|
||||
build_path = /obj/machinery/computer/security
|
||||
origin_tech = "programming=2;combat=2"
|
||||
|
||||
/obj/item/weapon/circuitboard/camera/telescreen
|
||||
name = "Circuit board (Telescreen)"
|
||||
build_path = /obj/machinery/computer/security/telescreen
|
||||
/obj/item/weapon/circuitboard/camera/telescreen/entertainment
|
||||
name = "Circuit board (Entertainment Monitor)"
|
||||
build_path = /obj/machinery/computer/security/telescreen/entertainment
|
||||
/obj/item/weapon/circuitboard/camera/wooden_tv
|
||||
name = "Circuit board (Wooden TV)"
|
||||
build_path = /obj/machinery/computer/security/wooden_tv
|
||||
/obj/item/weapon/circuitboard/camera/mining
|
||||
name = "Circuit board (Outpost Camera Monitor)"
|
||||
build_path = /obj/machinery/computer/security/mining
|
||||
/obj/item/weapon/circuitboard/camera/engineering
|
||||
name = "Circuit board (Engineering Camera Monitor)"
|
||||
build_path = /obj/machinery/computer/security/engineering
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/xenobiology
|
||||
name = "Circuit board (Xenobiology Console)"
|
||||
build_path = /obj/machinery/computer/camera_advanced/xenobio
|
||||
|
||||
@@ -87,6 +87,25 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/security/telescreen/attackby(obj/item/I, mob/user, params)
|
||||
if(ismultitool(I))
|
||||
var/direction = input(user, "Which direction?", "Select direction!") as null|anything in list("North", "East", "South", "West", "Centre")
|
||||
if(!direction || !Adjacent(user))
|
||||
return
|
||||
pixel_x = 0
|
||||
pixel_y = 0
|
||||
switch(direction)
|
||||
if("North")
|
||||
pixel_y = 32
|
||||
if("East")
|
||||
pixel_x = 32
|
||||
if("South")
|
||||
pixel_y = -32
|
||||
if("West")
|
||||
pixel_x = -32
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/security/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
@@ -293,39 +312,36 @@
|
||||
|
||||
// Other computer monitors.
|
||||
/obj/machinery/computer/security/telescreen
|
||||
name = "\improper Telescreen"
|
||||
name = "telescreen"
|
||||
desc = "Used for watching camera networks."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "telescreen"
|
||||
icon_state = "telescreen_console"
|
||||
icon_screen = "telescreen"
|
||||
icon_keyboard = null
|
||||
light_range_on = 0
|
||||
network = list("SS13")
|
||||
density = 0
|
||||
|
||||
/obj/machinery/computer/security/telescreen/update_icon()
|
||||
icon_state = initial(icon_state)
|
||||
if(stat & BROKEN)
|
||||
icon_state += "b"
|
||||
return
|
||||
circuit = /obj/item/weapon/circuitboard/camera/telescreen
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment
|
||||
name = "entertainment monitor"
|
||||
desc = "Damn, they better have Paradise TV on these things."
|
||||
icon = 'icons/obj/status_display.dmi'
|
||||
icon_state = "entertainment"
|
||||
icon_state = "entertainment_console"
|
||||
icon_screen = "entertainment"
|
||||
light_color = "#FFEEDB"
|
||||
light_range_on = 0
|
||||
network = list("news")
|
||||
luminosity = 0
|
||||
circuit = /obj/item/weapon/circuitboard/camera/telescreen/entertainment
|
||||
|
||||
/obj/machinery/computer/security/wooden_tv
|
||||
name = "security camera monitor"
|
||||
desc = "An old TV hooked into the stations camera network."
|
||||
desc = "An old TV hooked into the station's camera network."
|
||||
icon_state = "television"
|
||||
icon_keyboard = null
|
||||
icon_screen = "detective_tv"
|
||||
light_color = "#3848B3"
|
||||
light_power_on = 0.5
|
||||
network = list("SS13")
|
||||
circuit = /obj/item/weapon/circuitboard/camera/wooden_tv
|
||||
|
||||
/obj/machinery/computer/security/mining
|
||||
name = "outpost camera monitor"
|
||||
@@ -334,6 +350,7 @@
|
||||
icon_screen = "mining"
|
||||
light_color = "#F9BBFC"
|
||||
network = list("Mining Outpost")
|
||||
circuit = /obj/item/weapon/circuitboard/camera/mining
|
||||
|
||||
/obj/machinery/computer/security/engineering
|
||||
name = "engineering camera monitor"
|
||||
@@ -342,3 +359,4 @@
|
||||
icon_screen = "engie_cams"
|
||||
light_color = "#FAC54B"
|
||||
network = list("Power Alarms","Atmosphere Alarms","Fire Alarms")
|
||||
circuit = /obj/item/weapon/circuitboard/camera/engineering
|
||||
@@ -490,6 +490,7 @@ var/time_last_changed_position = 0
|
||||
j.total_positions++
|
||||
opened_positions[edit_job_target]++
|
||||
log_game("[key_name(usr)] has opened a job slot for job \"[j]\".")
|
||||
message_admins("[key_name_admin(usr)] has opened a job slot for job \"[j.title]\".")
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
if("make_job_unavailable")
|
||||
@@ -509,7 +510,9 @@ var/time_last_changed_position = 0
|
||||
j.total_positions--
|
||||
opened_positions[edit_job_target]--
|
||||
log_game("[key_name(usr)] has closed a job slot for job \"[j]\".")
|
||||
message_admins("[key_name_admin(usr)] has closed a job slot for job \"[j.title]\".")
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
if("prioritize_job")
|
||||
// TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY
|
||||
if(is_authenticated(usr) && !target_dept)
|
||||
|
||||
@@ -372,7 +372,7 @@
|
||||
scantemp = "<span class=\"bad\">Error: No signs of intelligence detected.</span>"
|
||||
nanomanager.update_uis(src)
|
||||
return
|
||||
if(subject.suiciding == 1 && src.scanner.scan_level < 2)
|
||||
if(subject.suiciding)
|
||||
scantemp = "<span class=\"bad\">Error: Subject's brain is not responding to scanning stimuli.</span>"
|
||||
nanomanager.update_uis(src)
|
||||
return
|
||||
|
||||
@@ -255,6 +255,7 @@
|
||||
nanomanager.update_uis(src)
|
||||
return
|
||||
Centcomm_announce(input, usr)
|
||||
print_centcom_report(input, worldtime2text() +" Captain's Message")
|
||||
to_chat(usr, "Message transmitted.")
|
||||
log_say("[key_name(usr)] has made a Centcomm announcement: [input]")
|
||||
centcomm_message_cooldown = 1
|
||||
@@ -548,6 +549,25 @@
|
||||
for(var/datum/computer_file/program/comm/P in shuttle_caller_list)
|
||||
var/turf/T = get_turf(P.computer)
|
||||
if(T && P.program_state != PROGRAM_STATE_KILLED && is_station_contact(T.z))
|
||||
if(P.computer)
|
||||
var/obj/item/weapon/computer_hardware/printer/printer = P.computer.all_components[MC_PRINT]
|
||||
if(printer)
|
||||
printer.print_text(text, "paper- '[title]'")
|
||||
P.messagetitle.Add("[title]")
|
||||
P.messagetext.Add(text)
|
||||
|
||||
/proc/print_centcom_report(text = "", title = "Incoming Message")
|
||||
for(var/obj/machinery/computer/communications/C in shuttle_caller_list)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_admin_level(C.z))
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(C.loc)
|
||||
P.name = "paper- '[title]'"
|
||||
P.info = text
|
||||
P.update_icon()
|
||||
C.messagetitle.Add("[title]")
|
||||
C.messagetext.Add(text)
|
||||
for(var/datum/computer_file/program/comm/P in shuttle_caller_list)
|
||||
var/turf/T = get_turf(P.computer)
|
||||
if(T && P.program_state != PROGRAM_STATE_KILLED && is_admin_level(T.z))
|
||||
if(P.computer)
|
||||
var/obj/item/weapon/computer_hardware/printer/printer = P.computer.all_components[MC_PRINT]
|
||||
if(printer)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
var/obj/item/weapon/card/id/scan = null
|
||||
var/authenticated = null
|
||||
var/rank = null
|
||||
var/list/authcard_access = list()
|
||||
var/screen = null
|
||||
var/datum/data/record/active1 = null
|
||||
var/datum/data/record/active2 = null
|
||||
@@ -66,6 +67,8 @@
|
||||
break
|
||||
var/background = "''"
|
||||
switch(crimstat)
|
||||
if("*Execute*")
|
||||
background = "'background-color:#5E0A1A'"
|
||||
if("*Arrest*")
|
||||
background = "'background-color:#890E26'"
|
||||
if("Incarcerated")
|
||||
@@ -162,18 +165,33 @@
|
||||
screen = SEC_DATA_R_LIST
|
||||
if("criminal")
|
||||
if(active2)
|
||||
var/their_name = active2.fields["name"]
|
||||
var/their_rank = active2.fields["rank"]
|
||||
var/t1 = copytext(trim(sanitize(input("Enter Reason:", "Secure. records", null, null) as text)), 1, MAX_MESSAGE_LEN)
|
||||
if(!t1)
|
||||
t1 = "(none)"
|
||||
switch(temp_href[2])
|
||||
if("none")
|
||||
active2.fields["criminal"] = "None"
|
||||
if("arrest")
|
||||
active2.fields["criminal"] = "*Arrest*"
|
||||
if("execute")
|
||||
if((access_magistrate in authcard_access) || (access_armory in authcard_access))
|
||||
active2.fields["criminal"] = "*Execute*"
|
||||
message_admins("[key_name_admin(usr)] authorized execution for [their_rank] [their_name], with comment: [t1]")
|
||||
else
|
||||
setTemp("<h3 class='bad'>Error: permission denied.</h3>")
|
||||
//to_chat(usr, "<span class='notice'>Error: permission denied.</span>")
|
||||
return 1
|
||||
if("incarcerated")
|
||||
active2.fields["criminal"] = "Incarcerated"
|
||||
if("parolled")
|
||||
active2.fields["criminal"] = "Parolled"
|
||||
if("released")
|
||||
active2.fields["criminal"] = "Released"
|
||||
|
||||
var/newstatus = active2.fields["criminal"]
|
||||
log_admin("[key_name_admin(usr)] set secstatus of [their_rank] [their_name] to [newstatus], comment: [t1]")
|
||||
active2.fields["comments"] += "Set to [newstatus] by [usr.name] ([rank]) on [current_date_string] [worldtime2text()], comment: [t1]"
|
||||
update_all_mob_security_hud()
|
||||
if("rank")
|
||||
if(active1)
|
||||
@@ -206,6 +224,7 @@
|
||||
if(check_access(scan))
|
||||
authenticated = scan.registered_name
|
||||
rank = scan.assignment
|
||||
authcard_access = scan.access
|
||||
|
||||
if(authenticated)
|
||||
active1 = null
|
||||
@@ -218,6 +237,7 @@
|
||||
screen = null
|
||||
active1 = null
|
||||
active2 = null
|
||||
authcard_access = list()
|
||||
|
||||
else if(href_list["sort"])
|
||||
// Reverse the order if clicked twice
|
||||
@@ -458,6 +478,7 @@
|
||||
buttons[++buttons.len] = list("name" = "None", "icon" = "unlock", "href" = "criminal=none", "status" = (active2.fields["criminal"] == "None" ? "selected" : null))
|
||||
buttons[++buttons.len] = list("name" = "*Arrest*", "icon" = "lock", "href" = "criminal=arrest", "status" = (active2.fields["criminal"] == "*Arrest*" ? "selected" : null))
|
||||
buttons[++buttons.len] = list("name" = "Incarcerated", "icon" = "lock", "href" = "criminal=incarcerated", "status" = (active2.fields["criminal"] == "Incarcerated" ? "selected" : null))
|
||||
buttons[++buttons.len] = list("name" = "*Execute*", "icon" = "lock", "href" = "criminal=execute", "status" = (active2.fields["criminal"] == "*Execute*" ? "selected" : null))
|
||||
buttons[++buttons.len] = list("name" = "Parolled", "icon" = "unlock-alt", "href" = "criminal=parolled", "status" = (active2.fields["criminal"] == "Parolled" ? "selected" : null))
|
||||
buttons[++buttons.len] = list("name" = "Released", "icon" = "unlock", "href" = "criminal=released", "status" = (active2.fields["criminal"] == "Released" ? "selected" : null))
|
||||
setTemp("<h3>Criminal Status</h3>", buttons)
|
||||
|
||||
@@ -126,6 +126,15 @@
|
||||
on = 0
|
||||
go_out()
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
|
||||
if(air_contents)
|
||||
if(occupant)
|
||||
process_occupant()
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/process_atmos()
|
||||
..()
|
||||
if(!node)
|
||||
return
|
||||
if(!on)
|
||||
@@ -135,13 +144,9 @@
|
||||
temperature_archived = air_contents.temperature
|
||||
heat_gas_contents()
|
||||
|
||||
if(occupant)
|
||||
process_occupant()
|
||||
if(abs(temperature_archived-air_contents.temperature) > 1)
|
||||
parent.update = 1
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/allow_drop()
|
||||
return 0
|
||||
|
||||
@@ -647,13 +647,12 @@ About the new airlock wires panel:
|
||||
src.attack_ai(user)
|
||||
|
||||
/obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(src.isElectrified())
|
||||
if(istype(mover, /obj/item))
|
||||
var/obj/item/i = mover
|
||||
if(i.materials[MAT_METAL])
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
if(isElectrified() && density && istype(mover, /obj/item))
|
||||
var/obj/item/I = mover
|
||||
if(I.flags & CONDUCT)
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/airlock/attack_hand(mob/user as mob)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<center><small><b>Admission data:</b></small></center><br>
|
||||
<small><b>Log generated at:</b> [worldtime2text()]<br>
|
||||
<b>Detainee:</b> [logname]<br>
|
||||
<b>Duration:</b> [timetoset/10] seconds<br>
|
||||
<b>Duration:</b> [seconds_to_time(timetoset / 10)]<br>
|
||||
<b>Charge(s):</b> [logcharges]<br>
|
||||
<b>Arresting Officer:</b> [usr.name]<br><hr><br>
|
||||
<small>This log file was generated automatically upon activation of a cell timer.</small>"}
|
||||
@@ -55,7 +55,7 @@
|
||||
cell_logs += P
|
||||
|
||||
var/datum/data/record/R = find_security_record("name", logname)
|
||||
Radio.autosay("Detainee [logname] has been incarcerated for [timetoset/10] seconds for the charges of, '[logcharges]'. \
|
||||
Radio.autosay("Detainee [logname] has been incarcerated for [seconds_to_time(timetoset / 10)] for the charges of, '[logcharges]'. \
|
||||
Arresting Officer: [usr.name].[R ? "" : " Detainee record not found, manual record update required."]", name, "Security", list(z))
|
||||
|
||||
if(R)
|
||||
@@ -277,7 +277,7 @@
|
||||
dat += "Set Timer: [(setminute ? text("[setminute]:") : null)][setsecond]<br/>"
|
||||
|
||||
// Controls
|
||||
dat += "<a href='?src=[UID()];tp=-60'>-</a> <a href='?src=[UID()];tp=-1'>-</a> <a href='?src=[UID()];tp=1'>+</a> <A href='?src=[UID()];tp=60'>+</a><br/>"
|
||||
dat += "<a href='?src=[UID()];settime=1'>Input Time</a>"
|
||||
|
||||
// Mounted flash controls
|
||||
for(var/obj/machinery/flasher/F in targets)
|
||||
@@ -319,13 +319,9 @@
|
||||
Radio.autosay("Timer stopped manually by [usr.name].", name, "Security", list(z))
|
||||
|
||||
else
|
||||
if(href_list["tp"]) //adjust timer, close door if not already closed
|
||||
var/tp = text2num(href_list["tp"])
|
||||
var/addtime = (timetoset / 10)
|
||||
addtime += tp
|
||||
addtime = min(max(round(addtime), 0), 3600)
|
||||
|
||||
timeset(addtime)
|
||||
if(href_list["settime"])
|
||||
var/time = min(max(round(return_time_input(usr)), 0), 3600)
|
||||
timeset(time)
|
||||
|
||||
if(href_list["fc"])
|
||||
for(var/obj/machinery/flasher/F in targets)
|
||||
@@ -368,6 +364,11 @@
|
||||
overlays.Cut()
|
||||
overlays += image('icons/obj/status_display.dmi', icon_state=picture_state)
|
||||
|
||||
/obj/machinery/door_timer/proc/return_time_input()
|
||||
var/mins = input(usr, "Minutes", "Enter number of minutes", 0) as num
|
||||
var/seconds = input(usr, "Seconds", "Enter number of seconds", 0) as num
|
||||
var/totaltime = (seconds + (mins * 60))
|
||||
return totaltime
|
||||
|
||||
//Checks to see if there's 1 line or 2, adds text-icons-numbers/letters over display
|
||||
// Stolen from status_display
|
||||
|
||||
@@ -59,7 +59,9 @@
|
||||
if(operating)
|
||||
return
|
||||
|
||||
if(istype(C, /obj/item/weapon/weldingtool))
|
||||
if(iswelder(C))
|
||||
if(!density)
|
||||
return
|
||||
var/obj/item/weapon/weldingtool/W = C
|
||||
if(W.remove_fuel(0, user))
|
||||
welded = !welded
|
||||
@@ -169,6 +171,8 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/door/firedoor/open(auto_close = TRUE)
|
||||
if(welded)
|
||||
return
|
||||
. = ..()
|
||||
latetoggle(auto_close)
|
||||
|
||||
|
||||
@@ -166,6 +166,9 @@ Class Procs:
|
||||
/obj/machinery/process() // If you dont use process or power why are you here
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/machinery/proc/process_atmos() //If you dont use process why are you here
|
||||
return PROCESS_KILL
|
||||
|
||||
/obj/machinery/emp_act(severity)
|
||||
if(use_power && stat == 0)
|
||||
use_power(7500/severity)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user