Staying up to date.

This commit is contained in:
KasparoVy
2016-07-28 17:02:07 -04:00
276 changed files with 10447 additions and 11662 deletions
+4
View File
@@ -254,7 +254,11 @@ CREATE TABLE `player` (
`volume` smallint(4) DEFAULT '100',
`nanoui_fancy` smallint(4) DEFAULT '1',
`show_ghostitem_attack` smallint(4) DEFAULT '1',
`lastchangelog` varchar(32) NOT NULL DEFAULT '0',
`lastchangelog` varchar(32) NOT NULL,
`space_parallax` smallint(4) DEFAULT '1',
`space_dust` smallint(4) DEFAULT '1',
`parallax_speed` float(24) DEFAULT '2',
PRIMARY KEY (`id`),
UNIQUE KEY `ckey` (`ckey`)
) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1;
+4
View File
@@ -254,7 +254,11 @@ CREATE TABLE `SS13_player` (
`volume` smallint(4) DEFAULT '100',
`nanoui_fancy` smallint(4) DEFAULT '1',
`show_ghostitem_attack` smallint(4) DEFAULT '1',
`lastchangelog` varchar(32) NOT NULL DEFAULT '0',
`lastchangelog` varchar(32) NOT NULL,
`space_parallax` smallint(4) DEFAULT '1',
`space_dust` smallint(4) DEFAULT '1',
`parallax_speed` float(24) DEFAULT '2',
PRIMARY KEY (`id`),
UNIQUE KEY `ckey` (`ckey`)
) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1;
@@ -6306,6 +6306,7 @@
"crn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/sleeper{name = "Sleepers"})
"cro" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/sleeper,/turf/simulated/floor/plasteel{icon_state = "whitebluefull"},/area/medical/sleeper{name = "Sleepers"})
"crp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/medical/sleeper{name = "Sleepers"})
"crq" = (/obj/machinery/door_control{id = "telelab"; name = "Test Chamber Blast Doors"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/dropper,/obj/item/stack/medical/bruise_pack/advanced,/obj/item/stack/medical/ointment/advanced,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab)
"crs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/spawner/window{useFull = 1; tag = "fullWin"},/turf/simulated/floor/plating,/area/medical/sleeper{name = "Sleepers"})
"crt" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitebluecorner"},/area/medical/medbay{name = "Medbay Central"})
"cru" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"})
@@ -6402,7 +6403,6 @@
"cth" = (/obj/structure/table/reinforced,/obj/item/weapon/hand_labeler,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab)
"cti" = (/obj/machinery/computer/rdconsole/experiment,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab)
"ctj" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/book/manual/experimentor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab)
"ctk" = (/obj/machinery/door_control{id = "telelab"; name = "Test Chamber Blast Doors"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 7; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/dropper,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/stack/medical/advanced/ointment,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab)
"ctl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{dir = 2; icon_state = "warning"},/area/toxins/explab)
"ctm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = 1},/obj/effect/spawner/lootdrop{loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/weapon/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); name = "maint grille or trash spawner"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"})
"ctn" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"})
@@ -8618,7 +8618,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqarBaaacjcaaaabqaaaaaaabqaaabZUbZUbZUbZUbZUbZUbZUbZUbZUcodcoecoecofcogcogcogcogcohcogcogcogcoicojcokcolcomconcoocopcoqcorcoscotcoucovcowcoxcoycozcoAcoBcoCcoDcoEcmgcoFckVcmmcmpcoGcoHcoIcoJcoKcoLcmocoMcoNcoOcoPcmzcdNcjncrFcrvcmzcoRcoScoTcoUcoVcmBcnKcoWcoXcoYcnKcoZcpacmBcpbbZUbZUbZUbZUbZUaoGaoGaoGcfKcfKcfKcpcclAcpdcpecpfcpgabqbGLcphcpicpjbGLcpkcplcpmbGLcpncpocppbGLabqaaaabqaaabCMcpqcprcpscptaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaabeaaackrabqabqabqabqabqaaabZUcpucpvcpwcpxcpycpzcpAbZUcodcoecpBcpCcpDcpEcpFcoecpGcpHcpIcoecpJcpKcpLcpMcpNcpOcpPcpQcpRcpScpTcpUcpTcpScpTcpVcpWcpXcpYcpZcqacqbcrVcmicnsckVcrWcmocqdcqecqfcqgcqhcqicqjcqkcqlcqmcqncmzcqocqpcqqcsncmzcqscqtcqucqvcqwcmBcnKcnKcqxcnKcnKcqycqzcmBcmCbZUcqAcqBbZUcqCcqDcqEcqFcqGcqHaoGcsoclAclAcsRclAclAabqbGLcqKcqLcqMbGLcqNcqOcqPbGLcqQcqRcqSbGLabqabqabqabqcptcqTcqUcqVcqWabqabeabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaarBaaackrabqaaaaaaaaaabqaaacqXcqYcqZcracrbcpycrccrdbZUcodcoecrecrfcrgcrhcricrjcrkcrlcrmcoeaovaotcrpcrncrocrscrtcructAcrwcrxcrycrycrycrzcrAcrBcrCcrDcpZcrEctBcrGcmgcrHckVcrIcmocrJcrKcrLcrMcrNcrOcmocrPcrQcrRcrScmzcrTcrUctSctEcmzcrXcrYcrZcsacsbcmBcmBcsccsdcsecsecmBcsfcmBcsgcshcsicsjbZUcskasJasJasJcdKcslbZUcsmcynclAcyqclAcspabqbGLcqKcsqcqKbGLcqNcsrcqNbGLcsscstcssbGLabqaaaabqaaacqWcqUcsucqUcjaaaabFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabeabqckrabqaaaaaaaaaabqaaacqXcsvcrccqZcswcpycsxbZUbZUcsycoecszcsAcszcsBcszcoecszcsCcszcoeckEcsDcsEcsFckEckEcsGcsHcsIcsJcsJcsKcsLcsMcsJcsJcsNcmgcsOcsPcsQcyCcmgcmgcsSckVcsTcmocmocsUcsVcsWcsXcsYcmocsZcnBcfwcfwcmzctacmzctbcmzcmzcfwctcctdcfwcfwctectfctgcthctictjctkctlcmBctmbZUctnctobZUctpcdKchschyctqctrbZUctscttctuctvctuarAabqbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLabqabqabqabqcjacqUcqUcqUcqWabqbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabeabqckrabqaaaaaaaaaabqaaacqXcsvcrccqZcswcpycsxbZUbZUcsycoecszcsAcszcsBcszcoecszcsCcszcoeckEcsDcsEcsFckEckEcsGcsHcsIcsJcsJcsKcsLcsMcsJcsJcsNcmgcsOcsPcsQcyCcmgcmgcsSckVcsTcmocmocsUcsVcsWcsXcsYcmocsZcnBcfwcfwcmzctacmzctbcmzcmzcfwctcctdcfwcfwctectfctgcthctictjcrqctlcmBctmbZUctnctobZUctpcdKchschyctqctrbZUctscttctuctvctuarAabqbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLbGLabqabqabqabqcjacqUcqUcqUcqWabqbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaabqaaaaaaarBaaaclIaaaaaaaaaaaaabqaaacqXctwcqZcswctxcpyctyctzcdOcodcoeczqczpctCctDczJcoectFctGctHcoectIctJctKctLctMctNctOcgrctPcsJctQctRcABctTctUcsJccvcmgctVctWctXctYcmictZcuacubcuccudcuecufcugcuhcuicujcukculcumcuncuocupciccuqcurcusciccutcuucuvciccuwctecuxcuycuzcuAcuBcuCcuDcmBcmCbZUbZUcuEbZUcuFcuGchychycuHcuIcqXabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqabqaaaabqaaacjacqWcptbCMcptaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqaaaaaaabqaaaaaaabeaaacmRabqaaaaaaaaaabqaaacqXcqXcqZcpycpycqZcqZcuJcdOcodcoecuKcuLcuMcuNcuOcoecuPcuQcuRcuScuTcuUcuVcuWcuXcuYcuZcgrcgscsKcvacvbcvccvdcvecsJchscmgcvfcvgcvhcvicvjcvkcvlckVcvmcvncvocvpcvqcvrcvscvtcvucvvcvwcvxcvycvzcvAcvBcvCcvDcvEcvDcvFcvGcvHcvIcvJcvKcvLcvMcvNcvOcvPcvQcvRcvSbZUcvTcvUcvVcbvctqchychycvWcvXbZUcvYabqaaaaaaaaaabqaaaaaaaaaaaaaaaabqaaaaaaaaaabqaaaaaaaaaaaaabqaaaabqaaaaaaabqaaaabqaaaaaaabqabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaabqabqaaaaaaarBaaacjcaaaaaaaaaaaaabqaaacqXcvZcqZcwacqZcqZcsxbZUbZUcwbcwccwdcuLcwecuNcwfcwgcwhcwicwjcwkcwlcwmcwncwocwpcwqcwrcwscjAcwtcwucwvcwwcwxcwwcwycwzcmgcwAcwBcwCcwDcmicvkcvlckVcvmcwEcmpcwFcwGcwHcwIcwJcukcwKcwLcwMcwNcwOcwPcwQcwRcihcihcwScwTcwUcwVcwWcwXcwYcwZcxacxbcxccxdcxecmBcmCbZUcxfcxgcxhcsicxicuHcmDchycxjcqXaaaabqaaaaaaaaaabqabqabebFbbFbbFbbFbbFbbFbabebFbbFcbFbbPGabqbFcabqabqabebRmbRmbRmabeabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+59 -56
View File
@@ -92,7 +92,7 @@
"abN" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/security/permabrig)
"abO" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/security/permabrig)
"abP" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/security/permabrig)
"abQ" = (/turf/simulated/floor/holofloor,/area/security/permabrig)
"abQ" = (/obj/item/weapon/beach_ball/holoball,/turf/simulated/floor/holofloor,/area/security/permabrig)
"abR" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/gameboard,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
"abS" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
"abT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
@@ -356,10 +356,10 @@
"agR" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk2"; icon_state = "catwalk2"},/area/solar/auxstarboard)
"agS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/interrogation)
"agT" = (/obj/item/weapon/restraints/handcuffs/pinkcuffs,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/security/prisonlockers)
"agU" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/interrogationhallway)
"agU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/item/clothing/mask/gas/clown_hat,/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space)
"agV" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/armoury)
"agW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/permabrig)
"agX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig)
"agX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space)
"agY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/wall,/area/security/seceqstorage)
"agZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/seceqstorage)
"aha" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/security/prisonlockers)
@@ -378,7 +378,7 @@
"ahn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/security/permabrig)
"aho" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/main)
"ahp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/securehallway)
"ahq" = (/obj/machinery/light{dir = 4},/obj/structure/rack,/obj/item/weapon/storage/box/teargas,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"ahq" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/security/permabrig)
"ahr" = (/obj/structure/sink{pixel_y = 18},/obj/structure/mirror{pixel_y = 32},/obj/item/device/radio/intercom/department/security{pixel_x = 28; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/seceqstorage)
"ahs" = (/obj/structure/disposalpipe/segment,/obj/structure/table,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main)
"aht" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/security/main)
@@ -401,13 +401,13 @@
"ahK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main)
"ahL" = (/obj/machinery/vending/cigarette,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/main)
"ahM" = (/obj/structure/table,/obj/item/ashtray/bronze{pixel_x = 2; pixel_y = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/item/weapon/storage/fancy/cigarettes/cigpack_robust,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/main)
"ahN" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/permabrig)
"ahN" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig)
"ahO" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/security/armoury)
"ahP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/seceqstorage)
"ahQ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/effect/landmark{name = "blobstart"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"ahR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"ahS" = (/turf/simulated/floor/plasteel,/area/security/armoury)
"ahT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/permabrig)
"ahT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig)
"ahU" = (/turf/simulated/wall,/area/security/main)
"ahV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/seceqstorage)
"ahW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plasteel,/area/security/seceqstorage)
@@ -462,8 +462,8 @@
"aiT" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 6},/area/security/seceqstorage)
"aiU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/flasher/portable,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aiV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/armoury)
"aiW" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aiX" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aiW" = (/obj/structure/table,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/security/permabrig)
"aiX" = (/obj/machinery/light{dir = 4},/obj/effect/decal/warning_stripes/red/hollow,/obj/structure/closet/bombcloset,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aiY" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aiZ" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/interrogationhallway)
"aja" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/security/seceqstorage)
@@ -532,7 +532,7 @@
"akl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden)
"akm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/secure_closet/warden,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/warden)
"akn" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/apc{dir = 1; name = "Starboard Hall East APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/seceqstorage)
"ako" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Interrogation Hallway APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/camera{c_tag = "Interrogation Hallway"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/interrogationhallway)
"ako" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Prison Wing"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/permabrig)
"akp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/book/manual/sop_legal,/turf/simulated/floor/plasteel,/area/security/main)
"akq" = (/obj/structure/reagent_dispensers/peppertank{pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/seceqstorage)
"akr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/interrogationhallway)
@@ -671,7 +671,7 @@
"amU" = (/obj/machinery/computer/secure_data,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/prisonershuttle)
"amV" = (/obj/machinery/computer/prisoner{req_access = null; req_access_txt = "2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle)
"amW" = (/obj/machinery/computer/shuttle/labor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle)
"amX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/reinforced,/obj/item/stack/medical/advanced/bruise_pack,/obj/machinery/vending/wallmed1{dir = 2; name = "Emergency NanoMed"; pixel_x = -27; pixel_y = 0; req_access_txt = "0"},/obj/machinery/camera{c_tag = "Brig Security Equipment South"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/seceqstorage)
"amX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/reinforced,/obj/item/stack/medical/bruise_pack/advanced,/obj/machinery/vending/wallmed1{dir = 2; name = "Emergency NanoMed"; pixel_x = -27; pixel_y = 0; req_access_txt = "0"},/obj/machinery/camera{c_tag = "Brig Security Equipment South"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/seceqstorage)
"amY" = (/obj/machinery/light,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/obj/structure/rack,/obj/item/weapon/restraints/handcuffs{pixel_y = -4},/obj/item/weapon/restraints/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/seceqstorage)
"amZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle)
"ana" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/prisonershuttle)
@@ -731,7 +731,7 @@
"aoc" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/seceqstorage)
"aod" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer"; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor/plasteel,/area/security/lobby)
"aoe" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/security/lobby)
"aof" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/courtroomdandp)
"aof" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/interrogationhallway)
"aog" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/courtroomdandp)
"aoh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/courtroomdandp)
"aoi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig)
@@ -760,11 +760,11 @@
"aoF" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/flasher{id = "gulagshuttleflasher"; pixel_x = 25},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/siberia)
"aoG" = (/obj/structure/closet/crate,/turf/simulated/shuttle/floor,/area/shuttle/siberia)
"aoH" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/lobby)
"aoI" = (/obj/machinery/light_switch{pixel_x = -25},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/processing)
"aoI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Interrogation Hallway APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/camera{c_tag = "Interrogation Hallway"; dir = 4; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/interrogationhallway)
"aoJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plasteel,/area/security/processing)
"aoK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel,/area/security/processing)
"aoL" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle)
"aoM" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "Prisoner Processing APC"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/processing)
"aoM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig)
"aoN" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{name = "Security Office APC"; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/security/main)
"aoO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/security/courtroomdandp)
"aoP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
@@ -779,10 +779,10 @@
"aoY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig)
"aoZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable,/obj/machinery/power/apc{name = "Brig APC"; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"apa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"apb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig)
"apb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"apc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel,/area/security/brig)
"apd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"ape" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"ape" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig)
"apf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"apg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"aph" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
@@ -860,7 +860,7 @@
"aqB" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/security/lobby)
"aqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B)
"aqD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/lobby)
"aqE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/security/processing)
"aqE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/brig)
"aqF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall,/area/security/processing)
"aqG" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{dir = 6; icon_state = "red"},/area/security/lobby)
"aqH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/stool/bed/chair/office/dark,/obj/machinery/door_control{desc = "A remote control switch for the brig foyer."; id = "BrigFoyer"; name = "Brig Foyer Doors"; normaldoorcontrol = 1; pixel_x = -5; pixel_y = -35; range = 10; req_access_txt = "63"},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/lobby)
@@ -933,8 +933,8 @@
"arW" = (/obj/machinery/sleeper/upgraded{dir = 4},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"arX" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plasteel{dir = 2; icon_state = "carpet"},/area/crew_quarters/courtroom)
"arY" = (/obj/structure/stool/bed/chair,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/processing)
"arZ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Prisoner Cell Block B APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"asa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/power/apc{dir = 4; name = "Prison Cell Block A APC"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
"arZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/brig)
"asa" = (/obj/structure/cable,/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/security/processing)
"asb" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"asc" = (/obj/structure/stool/bed,/obj/machinery/flasher{id = "Cell 6"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/prison/cell_block/B)
"asd" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/power/treadmill{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/treadmill_monitor{id = "Cell 6"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/B)
@@ -982,7 +982,7 @@
"asT" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/processing)
"asU" = (/turf/simulated/wall/r_wall,/area/security/prison/cell_block/B)
"asV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/security/evidence)
"asW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"asW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/flag/nt,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/courtroomdandp)
"asX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/spawner/window/reinforced,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/evidence)
"asY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/camera{c_tag = "Labor Shuttle Dock"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "red"},/area/security/prisonershuttle)
"asZ" = (/turf/simulated/wall/r_wall,/area/security/prison/cell_block/A)
@@ -1071,7 +1071,7 @@
"auE" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/security/prison/cell_block/A)
"auF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 8; id = "Cell 4"; name = "Cell 4"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"auG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"auH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"auH" = (/obj/machinery/light_switch{pixel_x = -25},/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/processing)
"auI" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 2"; name = "Cell 2"; req_access_txt = "2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"auJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
"auK" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/prison/cell_block/A)
@@ -1090,7 +1090,7 @@
"auX" = (/obj/structure/window/basic,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office)
"auY" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"auZ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/item/device/radio/intercom{pixel_x = -28},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"ava" = (/obj/structure/cable,/obj/item/device/radio/intercom{pixel_x = 28},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
"ava" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Prisoner Processing APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/processing)
"avb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"avc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"avd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -1213,7 +1213,7 @@
"axq" = (/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"axr" = (/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
"axs" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore)
"axt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/brig)
"axt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle)
"axu" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
"axv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"axw" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/clown,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/clownoffice)
@@ -1256,7 +1256,7 @@
"ayh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"ayi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"ayj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"ayk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prisonershuttle)
"ayk" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/processing)
"ayl" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"aym" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"ayn" = (/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
@@ -4110,7 +4110,7 @@
"bBb" = (/obj/structure/table,/obj/machinery/door/window/northright{name = "Medbay Lobby"; req_access_txt = "5"},/obj/item/device/radio/intercom/department/medbay,/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/medical/reception)
"bBc" = (/obj/structure/table,/obj/machinery/media/receiver/boombox,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/medical/reception)
"bBd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = 28},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/reception)
"bBe" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_y = -32},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/syringe/insulin,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/item/weapon/reagent_containers/syringe,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/stack/medical/advanced/ointment,/obj/item/weapon/reagent_containers/food/pill/patch/styptic,/obj/item/weapon/reagent_containers/food/pill/patch/styptic,/obj/item/weapon/reagent_containers/food/pill/patch/silver_sulf,/obj/item/weapon/reagent_containers/food/pill/patch/silver_sulf,/obj/item/weapon/storage/pill_bottle/painkillers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/exam_room)
"bBe" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_y = -32},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/syringe/insulin,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/item/weapon/reagent_containers/syringe,/obj/item/stack/medical/bruise_pack/advanced,/obj/item/stack/medical/ointment/advanced,/obj/item/weapon/reagent_containers/food/pill/patch/styptic,/obj/item/weapon/reagent_containers/food/pill/patch/styptic,/obj/item/weapon/reagent_containers/food/pill/patch/silver_sulf,/obj/item/weapon/reagent_containers/food/pill/patch/silver_sulf,/obj/item/weapon/storage/pill_bottle/painkillers,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/exam_room)
"bBf" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/table,/obj/item/weapon/cane,/obj/item/weapon/cane{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cane{pixel_x = -6; pixel_y = 4},/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/exam_room)
"bBg" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_y = -10},/obj/item/weapon/clipboard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/exam_room)
"bBh" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/medical/morgue)
@@ -4398,7 +4398,7 @@
"bGD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bGE" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/chargebay)
"bGF" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/assembly/chargebay)
"bGG" = (/obj/structure/table,/obj/item/weapon/FixOVein,/obj/item/weapon/surgicaldrill,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/item/stack/medical/advanced/bruise_pack{pixel_x = -4; pixel_y = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics)
"bGG" = (/obj/structure/table,/obj/item/weapon/FixOVein,/obj/item/weapon/surgicaldrill,/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/item/stack/medical/bruise_pack/advanced{pixel_x = -4; pixel_y = 4},/turf/simulated/floor/plasteel,/area/assembly/robotics)
"bGH" = (/obj/effect/decal/warning_stripes/east,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/table,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi/posibrain,/obj/item/device/robotanalyzer,/turf/simulated/floor/plasteel,/area/assembly/robotics)
"bGI" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
"bGJ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/machinery/newscaster{pixel_x = 26; pixel_y = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/assembly/robotics)
@@ -8888,14 +8888,14 @@
"doV" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/hallway/primary/fore)
"doW" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/fore)
"doX" = (/obj/item/toy/prize/honk,/turf/simulated/floor/plating,/area/space)
"doY" = (/obj/item/weapon/pen,/obj/structure/closet{name = "Evidence Closet"},/obj/structure/cable,/obj/machinery/power/apc{dir = 4; cell_type = 15000; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence)
"doY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"doZ" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway Courtroom"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"dpa" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"dpb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"dpc" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/hallway/primary/fore)
"dpd" = (/turf/simulated/wall/r_wall,/area/clownoffice)
"dpe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light,/turf/simulated/floor/wood,/area/clownoffice)
"dpf" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1; network = list("SS13")},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence)
"dpf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Prisoner Cell Block B APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/B)
"dpg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/primary)
"dph" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/primary)
"dpi" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/storage/primary)
@@ -8936,8 +8936,8 @@
"dpR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/wall/r_wall,/area/security/permabrig)
"dpS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/flasher{id = "permaflash2"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
"dpT" = (/obj/machinery/flasher{id = "permaflash3"; pixel_x = 28; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/permabrig)
"dpU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/item/clothing/mask/gas/clown_hat,/turf/simulated/floor/plating,/area/space)
"dpV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plating,/area/space)
"dpU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/power/apc{dir = 4; name = "Prison Cell Block A APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
"dpV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
"dpW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/security/permabrig)
"dpX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/holofloor{dir = 10; icon_state = "red"},/area/security/permabrig)
"dpY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/security/permabrig)
@@ -8982,9 +8982,9 @@
"dqL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig)
"dqM" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/security/permabrig)
"dqN" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/camera{c_tag = "Prison Solitary Confinement"; dir = 6; network = list("Prison","SS13")},/turf/simulated/floor/plating,/area/security/permabrig)
"dqO" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/security/permabrig)
"dqO" = (/obj/effect/decal/warning_stripes/red/hollow,/obj/structure/closet/l3closet/security,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"dqP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/security/permabrig)
"dqQ" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/table,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/security/permabrig)
"dqQ" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/box/teargas{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"dqR" = (/obj/structure/sign/securearea{name = "\improper ARMORY"; pixel_y = -32},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/space)
"dqS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/permabrig)
"dqT" = (/turf/simulated/floor/plasteel{icon_state = "red"; dir = 4},/area/security/permabrig)
@@ -8994,11 +8994,14 @@
"dqX" = (/obj/item/weapon/circular_saw,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{frequency = 1459; name = "station intercom (General)"; pixel_x = -28},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"dqY" = (/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"dqZ" = (/obj/item/weapon/retractor,/obj/item/weapon/cautery,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"dra" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/advanced/bruise_pack,/obj/machinery/camera{c_tag = "Medbay Surgery 1 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"dra" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/bruise_pack/advanced,/obj/machinery/camera{c_tag = "Medbay Surgery 1 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"drb" = (/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"drc" = (/obj/item/weapon/bonegel,/obj/item/weapon/bonesetter,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"drd" = (/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"dre" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/advanced/bruise_pack,/obj/machinery/camera{c_tag = "Medbay Surgery 2 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"dre" = (/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/bruise_pack/advanced,/obj/machinery/camera{c_tag = "Medbay Surgery 2 South"; dir = 1; network = list("SS13"); pixel_x = 0},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"drf" = (/obj/item/device/radio/intercom{pixel_x = 28},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/prison/cell_block/A)
"drg" = (/obj/structure/closet{name = "Evidence Closet"},/obj/structure/cable,/obj/machinery/power/apc{dir = 4; cell_type = 15000; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence)
"drh" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1; network = list("SS13")},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = 0; pixel_y = -22},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/evidence)
(1,1,1) = {"
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -9052,15 +9055,15 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhYcaVcaVdhZbFldiacaVcczdicdibdibdibbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikaalabRaaHabSaaHabTabVabUabYabXacaabZaccacbacfaceabZacjacjacFahdahcbnHahedhqbnIbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVcaVcaVdidcaVcaVdiedigdifdifdihbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdiibikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaavdiEdiDdkJdiIdpodkKdkJdkJdpqdppdpsdprdkJdptdpudkJdkJdpvdpxdpwdpydpwabPdpzbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldhRcaVcaVcaVdijcaVcaVcaVaVUdikdikdimbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaaldpBdpAdpDdpCdpEaaldpFdpFaaldpGdpHaaldpJdpIaalaalaalaaldpKagtaaDagtabPdpLbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdhPaafaafaafaafaafaafdincaVcaVaafaafaafaafaafaafdhXbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaaldpMaaydpNabndpOdpDdpPdpOdpQdpSdpRdpDdpTdpOdpUdpVdpOdpXdpWdpZdpYdqaaalbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdiobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldipdipdiqdisdirbFlditcaVcaVbFldiudiwdivdiydixbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabuaalabvdqbaaldqcaaqaaldqcaaqabxdqcaaqaalbikaEQaalaalaalaalaalaalaalaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcaVcaVcaVayLcaVdizcaVcaVcaVdiAcaVayLcaVayLdiBbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaalaalaalaalabuaaldqddqeaaldqfdqfaaldqgdqgabxdqhdqhaalbikaEQabKabKabKdqiaEQaEQaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikabAcQScJadgjbikbikbikabAbikbikbikdgjbikbikbikabAdiCdgldgjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlajbcaVcaVcaVcaVdiFcaVcaVcaVdiGcaVcaVcaVcaVdiHbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaaldqkdqjdqmdqldqnabkdqpdqodqqdqqdqsdqrdqrdqtdqrdquaalbikbikbikaEQabKabKaEQaabbikbikaabbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgodgndgmbikbikabAdgmdgpdgrdgqdgmdgjbikbikdgmdgsdgtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlajecaVcaVdiKdiJbFldiLdiMdiLbFlaWldiOcaVcaVcaVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaaldqwdqvdqydqxdqAdqzdqCdqBdqAdqDdqAdqEdqFdqAdqAdqGaalbikbikbikbikaEQabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgvdgudgmbikabAdgwdgydgxdgAdgzdgydgwdgjbikdgmdgBdgCdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcaVcaVdiPbFlaafbFlcaVdiRdiQbFlaafbFlcaVcaVcaVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaalaalaalaalaaldqHdqIaalaalaalaalaalaalaalaalaalaalbikbikbikbikaEQabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgEdgDdgFbikdgHdgGdgydgydgIdgydgydgGdgJbikdgLdgKdgMdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiSdiUdiTbFlbikbFldiVdiVdiVbFlbikbFldiWdiYdiXbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaldqJdqLdqKdqNdqMdqOaalaabaabaabbikbikbikbikbikbikbikabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwbikbikdgOdgGdgydgPdgQdgydgydgGdgRbikbikdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachacidqPackacldqQaalacmbikbikbikbikbikbikbikbikbikdqRabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalaalbikbikbikbikbikbikbikbikbikbikactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdhPaafaafaafaafaafaafdincaVcaVaafaafaafaafaafaafdhXbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaaldpMaaydpNabndpOdpDdpPdpOdpQdpSdpRdpDdpTdpOagUagXdpOdpXdpWdpZdpYdqaaalbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdiobikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldipdipdiqdisdirbFlditcaVcaVbFldiudiwdivdiydixbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalabuaalabvdqbaaldqcaaqaaldqcaaqabxdqcaaqaalaabaEQaalaalaalaalaalaalaalaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcaVcaVcaVayLcaVdizcaVcaVcaVdiAcaVayLcaVayLdiBbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaalaalaalaalabuaaldqddqeaaldqfdqfaaldqgdqgabxdqhdqhaalaabaEQabLabLabLdqiaEQaEQaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikabAcQScJadgjbikbikbikabAbikbikbikdgjbikbikbikabAdiCdgldgjbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlajbcaVcaVcaVcaVdiFcaVcaVcaVdiGcaVcaVcaVcaVdiHbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaabaabaaldqkdqjdqmdqldqnabkdqpdqodqqdqqdqsdqrdqrdqtdqrdquaalaabaabaabaEQabLabLaEQaabbikbikaabbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgodgndgmbikbikabAdgmdgpdgrdgqdgmdgjbikbikdgmdgsdgtdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlajecaVcaVdiKdiJbFldiLdiMdiLbFlaWldiOcaVcaVcaVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaaldqwdqvdqydqxdqAdqzdqCdqBdqAdqDdqAdqEdqFdqAdqAdqGaalbikaabaabaabaEQabLaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgvdgudgmbikabAdgwdgydgxdgAdgzdgydgwdgjbikdgmdgBdgCdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFlcaVcaVdiPbFlaafbFlcaVdiRdiQbFlaafbFlcaVcaVcaVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaalaalaalaalaalaaldqHdqIaalaalaalaalaalaalaalaalaalaalbikbikbikaabaEQabLabLaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdgEdgDdgFbikdgHdgGdgydgydgIdgydgydgGdgJbikdgLdgKdgMdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiSdiUdiTbFlbikbFldiVdiVdiVbFlbikbFldiWdiYdiXbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaaldqJdqLdqKdqNdqMahqaalaabaabaabbikbikbikbikbikaabaabaEQabLaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwbikbikdgOdgGdgydgPdgQdgydgydgGdgRbikbikdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbFldiVdiVdiVbFlbikcVGdiZdjbdjadelbikbFldiVdiVdiVbFlbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgachacidqPackaclaiWaalacmbikbikbikbikbikbikaabaabaabdqRabLabLbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgwdgNdgwdgwdgwdgwdgwdgwdgwdgSdgwdgwdgwdgwdgwdgwdgwdgNdgwbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikcVGdiZdjbdjadelbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacnacoacpacqacracsacdaalaalaalaalaalbikbikbikbikbikbikbikbikbikaabactactactacuacvactactactabKabKabKabKabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgHdgNdgTdgTdgTdgTdgTdgTdgmdgUdgmdgTdgTdgTdgTdgTdgTdgNdgJbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacwacxacyaczacAacBacCaalacDacEacEacEacEacEbikbikbikbikbikbikbikbikactacHacIacJacKacLacMactabLabLabLabLabLabKbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgVdgXdgWdgZanqdhadgmdgSdgwdgSdgwdgSdgmdhcdhbdhedhddgXdhfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikacgacNacOacPacQacRacSacCaalacEacEacUacTacVacEacEacEbikbikbikbikbikbikactacWacXacYacXacXacZactadaadaadaadaadaadaabLadbbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgOdgXdgydgydgydhgdgmdgydgydgydgydgydgmdgydgydhhdgydgXdgRbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacgacgacgacgacgacgadcaddacEacEadeadgadfadiadhacEacEbikbikbikbikbikbikactadjadkadladmadnadoactadpadqadradsadtaduadvbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhjdhidhldhkdhmdgmdhndgydgydgydhodgmarWdgydhsdhrdhjdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -9072,28 +9075,28 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafzafAaeAafyafzafAaeAbikbikbikaabadwadxaekadUaemaelaenafKafLaeoacEacEafPafOafQacEacEafmafDafcafRagaafIafEafWafXafYaegagaagaagbafVagdagcagfaggaghadabikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikafxbikaabbikagibikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgmdhHdhGdgydhIdhJdgmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAagjafAagkaeAaglafAagmaeAaabbikbikbikadwadyaeraeqaeBagqagragsagtaeCagvagwagzagyaeFaehafeafMahlafSageafSafSafTahpafbafGafCafSafSaikagoagLagxagMagNagOagPbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabagRaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdgwdhKdhMdhLdgwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyafAaeAafAafyafAaeAbikbikaabaabadwadzaeraeGaeHahaahbdqSdqUdqTagvagnahiahhahmahjafJagvagpagYahgaguaguagAagDagCafUagEagHagGahUafZahvahwahxahyahzadaahAahAahAahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQagQafxbikahBbikafxagQagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdgLdgwdgwdgwdgFbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafAafyaeAafyafAafyaeAbikaabbikbikadwadxafBagBagFahJahfagWahnagIagKagJahRahQairahSahqagVagZahFahGahrahkahUahoahsahuahtahKahKahMahLahAadaadaadaadaadaaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabaabaabahBaabaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafyafAaeAafyafyafAaeAaabaabbikbikadwadwaiOafFailailadTaatahTahNagvaiqaisahhamuaitaiuahOahVahPahXahWahYaifaibaiaamyamzamzaicaiCaidahAaieaieaieaieaieaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQbikbikbikaiIbikbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyaiJaeAafAafyaiKaeAamcaabaabaabaabadwagTaiOaigaiwaeEaatagXaiSagvaimaiUaiVaiWaiXaiYaihaijaiiajgajfahYaioaiyaixaiEaiDaiHaiGaiCaiLahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVydmddmkdmjdmldmddmddmmdmddmddmnbikbikbikbikbikbikbikbikbikafxaabajnaabafxbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaeAajoajpajqajrajoajpajqajsajtajtajtajtajtajtajuajuafdaiAagSafHakoagUajGajGajNahIajEajFajGaiRaiPaiMaiNaipaiTajaajwaixaiEajhajiaiGajMajvajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabbikaabbikaabaabaabaabaabaabaabaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafAafyaeAafyafAafyaeAbikaabbikbikadwadxafBagBagFahJahfagWahnagIagKagJahRahQairahSaiXagVagZahFahGahrahkahUahoahsahuahtahKahKahMahLahAadaadaadaadaadaaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQaabaabaabahBaabaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGacGafxacGacGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafyafyafAaeAafyafyafAaeAaabaabbikbikadwadwaiOafFailailadTaatahTahNagvaiqaisahhamuaitdqOahOahVahPahXahWahYaifaibaiaamyamzamzaicaiCaidahAaieaieaieaieaieaieaieaieahAbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikagQbikbikbikaiIbikbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikaabbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaeAafAafyaiJaeAafAafyaiKaeAamcaabaabaabaabadwagTaiOaigaiwaeEaatakoaiSagvaimaiUaiVdqQaiuaiYaihaijaiiajgajfahYaioaiyaixaiEaiDaiHaiGaiCaiLahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVydmddmkdmjdmldmddmddmmdmddmddmnbikbikbikbikbikbikbikbikbikafxaabajnaabafxbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikaeAajoajpajqajrajoajpajqajsajtajtajtajtajtajtajuajuafdaiAagSafHaoIaofajGajGajNahIajEajFajGaiRaiPaiMaiNaipaiTajaajwaixaiEajhajiaiGajMajvajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabbikaabbikaabaabaabaabaabaabaabaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmpdmodmrdmqdmtdmsdmsdmsdmvdmudmwbikbikbikacGacGacGafxafxaabaabbikajQbikaabaabafxafxacGacGacGbikbikbikbikbikbikbikbikbikbikbikbikaeAajRajSajTafyajUajVajWakcajtbSoclqajcajAajyajDajuahDahCajJajxajLahHajBakjakkaklakmaiFajFaiRakiakaaiRajIaiRahUalhajKakbajYakpakdakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmxdmodmzdmydmsdmAdmAdmAdmAdmAdmBbikbikbikacGbikbikaabbikaabbikbikajQbikbikaabbikaabbikbikacGbikbikbikbikbikbikbikbikbikbikbikbikaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPajZajuaivainaiBaizakrahHakWakXakYakZalaalbajdaknakwakuakqaksaktakTalBakSalcakUalealdaiCalfajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabbikbikaabaloaabaabbikbikaloaabbikaabaabajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmCdmodmEdmDdmAdmAdmAdmAdmGdmFdmwbikbikbikacGaabalpalpalpalpalpbikalqbikalpalpalpalpalpaabacGbikbikbikbikbikbikbikbikbikbikbikbikaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakxajuampaiQakRaiZalEajzajBalFalGaklalHalIajFaliahPaljaljallalCalgalJajXakfakealMakeakhakgahAahAahAahAahAahAahAahAahAahAaabaloaabbikajkajlajmbikbikajkajlajmbikbikajkajlajmaabaabbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaXhdmddmddmddmldmddmddmmdmddmddmIbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamaalZaowanxambbikbikbikamcaeAaeAaeAamdamdamealKamgamdajuamfamiamjamkamhamlajualNajHammalQamnakvajGamsamtaXNamvaYjajGamXamDamqanlamYdoHaocaoNdoIasvaiCateauydoNalkahAamKamKamKamKamKbikbikbikbikaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikamOamNamQamPamOamRamSamSamTamUamVamWalnakVamZanaanbancajuajuandaneajuajualmajualAalAaufalAauLalDajGajBajCanjajEajFajGdoOatgdoPaiRaiRaiRahUahUannalLdoSalOahUahAalPahAanrantansansanubikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikaabbikbikbikaEEanwanzanyanBanAanDanCanAanGanGanHanIanJanKanLanManNanOanPanQanRanSanTaoiaokalRaqjaxtaojaPcauwaswamoamxamwamBamAamEamCamGamFaokaojaokaolaomamHamJamIanfaoraovapmaotaovaEHaouaoyaoxbikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOanEaoAanFamOamRamSamSamSauQasYamrankauSaoLaoLanoanmaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTavRapcawqanpaoTapdanUaoTapeaoTapcapbaoTaoVapfapgaphapianVapkaplapmapnaovaozansansapobikaacapqaacbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikaabaabajkajPajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsdmMdmLdmOdmNbikbikbikbikbikbikajjbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamOaoCaoCaoDamObikbikbikapwanganianhanWawDanianiapBapBapBapBapCapDapEapEapEapFapGapHapFapEapEapEaoeaodaodanXanZanYaopaooahEahEaobaoaahEahEapRapSapTapUapVapWapXapmapnapYapYamKapZapZapZamKaqaamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmaabaabbikaabaiIaabbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmQdmQdmQdmPbikbikbikbikbikbikacGaqbamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikaEEaoEaoCaoFamOamRamSamSamSaxyaniaofaohaogaoqaonapBaqnaqoaqpapjaqraqsaqtaquaqvapxapvaqyaqzaqAaqsapzapyapyaosaoHaoBapMapLahEaoIaoKaoJaoMahEaqMaqNaqOaqhaqQaqiapXapmaqSaqTaqUaqVaqWaqWaqXamKaqYamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikaabaloaabbikbikaqZbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmRdmRdmRdmPbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikacGbikbikbikamOaoGaoCaoCaptanAapuanCanAaykaniayYapAaoOapJapIapBarkarlarmarnaqCarparqarrarsartaruarvarrarwarxaqDapyapyaosapNapKaqHaqGapPapOaqgapQawFahEaszasAarMarNarMarOapXapmaovaovaovaovarPaovarQarRarSamKakBarTakEbikbikaiIaabaabaabaabaiIaabaabaabaabaiIaabaabaabaabarUarVakEaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmTdmSdmUdmPbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOaqcaqcaqcamOamRamSazdazdazfaqlaqkaqqaqmaqxaqwapBascasdasearzasgashasiasjaskarAasmasnasoaspasharBapyapyaosaqBaooarFarEaqFaqEaqJaqIaqKahEatnatoatparNarMasBapXasCasDasEasFasEasGasHamKamKapnamKaloasIasJakCakCarTakCakCakCakCarTakCakCakCakCarTakCakCakCasKasLasIaloaabbikagQaabbikbikbikbikbikbikbikbikbikbikaabbikaabbikasMasMasNasNasNasNasNasNasMasMaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmVdmSdmUdmPbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikaqeaqdaqdaqdaqfbikbikaqLaqPaqPaqPaqRaqRaqRaqRarhapBapBatRapBarZasWapEapEatSapEasbasaapEatSapEasZaslasfapyariaroarjaAEasuahEaryarDarCarHarGauiaueaukatqarMatrapXatsattatuatvatwatxatyatzatAatBamKatCarTatDaabaabbikaabbikbikbikbikbikbikbikbikaabaabaabaabaabatEatFatDaabaabaabaabaabbikbikbikbikbikbikbikbikbikaabbikaabasMasMatGatHatIatJatKatLatMatIasMasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikaabbikbikbikaEEanwanzanyanBanAanDanCanAanGanGanHanIanJanKanLanManNanOanPanQanRanSanTaoiaokalRaqjaoMaojaPcauwaswamoamxamwamBamAamEamCamGamFaokaojaokaolaomamHamJamIanfaoraovapmaotaovaEHaouaoyaoxbikbikbikbikbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikajkajPajmbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOanEaoAanFamOamRamSamSamSauQasYamrankauSaoLaoLanoanmaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoWaoZapaaoTavRapcawqanpaoTapdanUaoTapdapbaqEapearZaoVapfapgaphapianVapkaplapmapnaovaozansansapobikaacapqaacbikaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikaabaabajkajPajmaabaabagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikapsdmMdmLdmOdmNbikbikbikbikbikbikajjbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikamOaoCaoCaoDamObikbikbikapwanganianhanWawDanianiapBapBapBapBapCapDapEapEapEapFapGapHapFapEapEapEaoeaodaodanXanZanYaopaooahEasaaobaoaasaahEapRapSapTapUapVapWapXapmapnapYapYamKapZapZapZamKaqaamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmaabaabbikaabaiIaabbikbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmQdmQdmQdmPbikbikbikbikbikbikacGaqbamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikaEEaoEaoCaoFamOamRamSamSamSaxyaniasWaohaogaoqaonapBaqnaqoaqpapjaqraqsaqtaquaqvapxapvaqyaqzaqAaqsapzapyapyaosaoHaoBapMapLahEauHaoKaoJavaahEaqMaqNaqOaqhaqQaqiapXapmaqSaqTaqUaqVaqWaqWaqXamKaqYamKaabaloaabbikajkajPajmbikbikajkajPajmbikbikajkajPajmbikbikbikaabaloaabbikbikaqZbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmRdmRdmRdmPbikbikbikbikbikbikacGbikbikbikaabbikbikbikanvbikbikbikaabbikbikbikacGbikbikbikamOaoGaoCaoCaptanAapuanCanAaxtaniayYapAaoOapJapIapBarkarlarmarnaqCarparqarrarsartaruarvarrarwarxaqDapyapyaosapNapKaqHaqGapPapOaqgapQawFahEaszasAarMarNarMarOapXapmaovaovaovaovarPaovarQarRarSamKakBarTakEbikbikaiIaabaabaabaabaiIaabaabaabaabaiIaabaabaabaabarUarVakEaabbikagQbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmTdmSdmUdmPbikbikbikbikbikbikacGaabalpalpalpalpalpbikamMbikalpalpalpalpalpaabacGbikbikbikamOaqcaqcaqcamOamRamSazdazdazfaqlaqkaqqaqmaqxaqwapBascasdasearzasgashasiasjaskarAasmasnasoaspasharBapyapyaosaqBaooarFarEaqFaykaqJaqIaqKahEatnatoatparNarMasBapXasCasDasEasFasEasGasHamKamKapnamKaloasIasJakCakCarTakCakCakCakCarTakCakCakCakCarTakCakCakCasKasLasIaloaabbikagQaabbikbikbikbikbikbikbikbikbikbikaabbikaabbikasMasMasNasNasNasNasNasNasMasMaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmVdmSdmUdmPbikbikbikbikbikbikacGbikalSalTalTalTalTalUalValWalXalXalXalXalYbikacGbikbikbikaqeaqdaqdaqdaqfbikbikaqLaqPaqPaqPaqRaqRaqRaqRarhapBapBatRapBdpfdoYapEapEatSapEasbdpUapEatSapEasZaslasfapyariaroarjaAEasuahEaryarDarCarHarGauiaueaukatqarMatrapXatsattatuatvatwatxatyatzatAatBamKatCarTatDaabaabbikaabbikbikbikbikbikbikbikbikaabaabaabaabaabatEatFatDaabaabaabaabaabbikbikbikbikbikbikbikbikbikaabbikaabasMasMatGatHatIatJatKatLatMatIasMasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmVdmSdmUdmPbikbikbikbikbikbikaabatNamLamLamLamLamLbikamMbikamLamLamLamLamLaabacGbikbikbikbikbikbikbikbikbikbikarIaqPaqPaqParJaqRarKarXarLapBatPatUatTatbatVaqsatQauJauEatdatcavEavBatWaqsatfaATapyapyapyathaSWatiahEarYaryasqasrahEatXatOarMarNarMaulapXatsarPattattattaumaovaunauoaupamKbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikaabaabaabaabauqaabaabbikbikaabaabaabbikbikbikbikbikbikbikbikasMasMasMasMauratJausatJausautatJatJatJauuasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmSdmSdmSdmWbikbikbikbikbikbikacGbikbikaabbikaabbikbikauvbikbikaabbikaabbikbikacGbikbikbikbikbikbikaahbikbikbikarIassaqPaqPastaqRaqRasxaxjapBarkavJauzaucauBaudauDdlLauFauGauHauIdlMauKaujaugauNauNauNauNauNcwXauhahEasyasqaryasTasSasXasVasSauMauXauPapXatsavbavcavcavcavdaveavfavgavhamKbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabbikbikbikaabaabaabaviaabaabbikbikaabbikaabaabbikbikbikbikbikbikbikasMavjavkavlavmavnavoavpatJatJavqavratJavsasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmXdmSdmSdmYbikbikbikbikbikbikacGacGacGaabaabaabaabavtavuavtaabaabaabaabacGacGacGbikbikbikbikbikbikbikbikbikbikaqLatadoKatkatjatmatlatZatYapBdlPdlQavyauZasgashdlRdlSashavvavaashdlTdlUashavxavwavAavzapyavHapyavCahEauaauxaubasqdoTauCauAaSqavMavOavOavQavPavTavUavUavUavVavWavXavYavYavYbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikaabaabavZawaavZaabaabbikaabbikbikaabaabbikbikbikbikbikbikasMawbawcawdaweawfawgatJatJatJawhawiatJawjasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmSdmSdmSdmWbikbikbikbikbikbikacGbikbikaabbikaabbikbikauvbikbikaabbikaabbikbikacGbikbikbikbikbikbikaahbikbikbikarIassaqPaqPastaqRaqRasxaxjapBarkavJauzaucauBaudauDdlLauFauGdpVauIdlMauKaujaugauNauNauNauNauNcwXauhahEasyasqaryasTasSasXasVasSauMauXauPapXatsavbavcavcavcavdaveavfavgavhamKbikbikbikbikbikaahbikbikbikbikbikbikbikaabaabbikbikbikaabaabaabaviaabaabbikbikaabbikaabaabbikbikbikbikbikbikbikasMavjavkavlavmavnavoavpatJatJavqavratJavsasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmXdmSdmSdmYbikbikbikbikbikbikacGacGacGaabaabaabaabavtavuavtaabaabaabaabacGacGacGbikbikbikbikbikbikbikbikbikbikaqLatadoKatkatjatmatlatZatYapBdlPdlQavyauZasgashdlRdlSashavvdrfashdlTdlUashavxavwavAavzapyavHapyavCahEauaauxaubasqdoTauCauAaSqavMavOavOavQavPavTavUavUavUavVavWavXavYavYavYbikbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikaabaabavZawaavZaabaabbikaabbikbikaabaabbikbikbikbikbikbikasMawbawcawdaweawfawgatJatJatJawhawiatJawjasMbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdmPdmZdmSdnadmPbikaahbikbikbikbikaabbikaabbikbikaabbikavtawkawlbikbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikauOauOazIazIazIavSdoJdoGdoLauRasUasUasUawoawvawuawrawrawsawrawyawwawrawtasZasZaUcawzawAawBawCawBawCawAahEahEahEahEahEasSauUauTauVaxbaxeaxdawEaxfavUawGawHawIavVawJawKawLawMavWbikbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikaabbikavZawNavZbikaabbikaabbikbikbikaabaabbikbikbikbikbikasMawOawPavlawQawRawSawTatJawUawVawWawXasMawYaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnbdnddncdnddnebikbikbikbikbikbikaabbikaabbikbikaabavtavtawZaxaavtbikaabbikbikaabbikbikbikbikbikbikbikbikbikbikauOauWavDauYavGavFavIaxvdoQaxxdoZaxhaxhaxzaxlaxlaxlaxlaxlaxmaxnaxoaxlaxlaxlaxlaxpdoUaxlaxlaxqdoVaxqaxraxraxAaxraxBaxuadQavLavKavNaxXaxCaxDaxEapmavUaxGaxHaxIavVaxKaxLaxJaAZavWbikbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikaabavZavZaxMavZavZaabbikaabbikbikbikbikaabaabbikbikbikbikasMaxNaxOavlasMavlavlaxPaxQasMasMasMasMasMasMaabaabbikbikbikbikbikaahbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnbdnfdnebikbikbikbikbikbikaabaabbikaabbikbikaabaxRaxSaxTaxUaxRaxVaxVbikbikaabbikbikbikbikbikbikbikbikbikbikdoFdoWaxqawnayjawpayjaygayiayhayoayjayjaypayjayjayjayjayjayqayjayjayjayjayjayjayPayuayjayjayjayQayjayRaxqaylaxqaymaynadQdpfdoYadQayraysaytaxEayUavUayvaywayxayyayzayAayBawMavWbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikaabayCayDayEayFayCaabbikaabbikbikaabbikbikaabaabbikbikayGasMavlasMavlayHayIayHayJayHayHayHayKayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikdnbdnfdnebikbikbikbikbikbikaabaabbikaabbikbikaabaxRaxSaxTaxUaxRaxVaxVbikbikaabbikbikbikbikbikbikbikbikbikbikdoFdoWaxqawnayjawpayjaygayiayhayoayjayjaypayjayjayjayjayjayqayjayjayjayjayjayjayPayuayjayjayjayQayjayRaxqaylaxqaymaynadQdrhdrgadQayraysaytaxEayUavUayvaywayxayyayzayAayBawMavWbikbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikaabayCayDayEayFayCaabbikaabbikbikaabbikbikaabaabbikbikayGasMavlasMavlayHayIayHayJayHayHayHayKayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikbikbikbikbikbikbikbikbikbikaxVaxVaxVaxVaxVaabaabaxRazsayMayNaxRayOaxVbikbikaabbikbikbikbikbikbikbikbikbikbikdoFdplaxgaxcaxkaxiaxsazgdpabOIayXayXayZdlNazbazcayXayXayXdpbayXayXayXayXayXayXazedpcazgazgazgazhaziazjaziazkazlazmaznadQadQadQadQazoazoazoaxEapmavUazpaxHazqavVcscazraxJcvYavWbikbikbikbikbikbikbikbikaabaabbikbikbikbikbikbikbikbikaabayCaFCaztazuayCaabbikaabbikbikaabbikbikayGazvayGazvayGayKayHayHayHayHayHayHayHayHayHazwazxayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikazyazzazybikbikbikaxVaxVaxVaxVazAazBazCaxVbikbikaxRazDazEazFazGazHaxVbikbikaabbikbikbikbikbikbikbikbikbikbikauOauOauOdpdawmdlVayaayaaVMazJazKazKazLazMazNazOazPazPazOazQazOazRazRazRazRazRazRazSazRazRazTazUazVazWazIazXazIazYazIazIaqVazZaovaovaovaovaAaapmavUaAbaxHaAcavVaAdayAayBawMavWbikbikbikbikbikbikbikbikaabaabbikbikbikbikazyaAeazybikaabayCaAfaAgaAhayCaAiaAiaAiaAiaAiazvazvazvayGaAjayHazwazxayJayHayJayJayJayGaAkayGayGayGayGayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabbikaAlaAmaAlbikbikaabaxVaAnaAoaApazHaAqazHaxVaAlaAlaxRaxRaAraAsazGazHaxVaxVaAlaAlaAlaxVaxVbikaabbikbikbikbikbikbikbikbikdpdaxFaxwaxYaxWaxZazJaAtaAuaAvazMaAwazOaAxaAyaAzaAAaABaACaADbfTaAFaAGaAHaAIaAJaAKaALaxqaxraAMaANaAOaAPaAQaAPaAPaAPaARaAPaAPaAPaAPaASdoMaAUaAVaAWaAXaAYcNsaBaaUadcuavWaabaBbaBcaBcaBcaBcaBcaBdaabaabbikbikbikbikazvaBeazvbikaAiayCayCaBfaBgayCaBhayHayHayHayJaBiayHaBjayGayHayHayHaBkayJayHayGaBlaBmayGayHaBnayGbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+2 -2
View File
@@ -689,6 +689,7 @@
"nm" = (/obj/machinery/light{dir = 4},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/trader_station/sol)
"nn" = (/obj/docking_port/stationary/transit{dir = 8; dwidth = 2; height = 11; id = "trade_sol_transit"; name = "trade_sol in transit"; turf_type = /turf/space/transit/horizontal; width = 5},/turf/space/transit/horizontal,/area/space)
"no" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/centcom/evac)
"np" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/bruise_pack/advanced,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin)
"oB" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (WEST)"; icon_state = "fakewindows"; dir = 8},/area/syndicate_mothership)
"oC" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership)
"oH" = (/obj/structure/table,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
@@ -1217,7 +1218,6 @@
"FQ" = (/obj/structure/table,/obj/random/tool,/obj/item/clothing/gloves/color/yellow,/obj/item/weapon/pinpointer/advpinpointer,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin)
"FR" = (/obj/structure/table,/obj/item/weapon/grenade/syndieminibomb{pixel_x = 4; pixel_y = 2; pixel_z = 0},/obj/item/weapon/grenade/syndieminibomb{pixel_x = -1},/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin)
"FS" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/obj/item/toy/cards/deck/syndicate/black,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/admin)
"FT" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/stack/medical/advanced/bruise_pack,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin)
"FU" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin)
"FV" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "ADMINCHEMLOCKDOWN"; name = "Security Doors"; opacity = 0},/obj/machinery/door/airlock/hatch{desc = "Uh oh."; name = "Operating Theater"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/admin)
"FW" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/turf/unsimulated/wall{dir = 4; icon = 'icons/turf/shuttle.dmi'; icon_state = "diagonalWall3"},/area/admin)
@@ -1589,7 +1589,7 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbW
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYDKDKDKDKkhFkDwDwDwDwDADKDKDAEwEwFlFmDADKDAFnFoFpDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFqFrFsDKFtDAFuFvFwFxDADKDKDAFyEwEwFzDADKDAFAFBFCDNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEYlfDKDKDKFDDAFEFvFvFvFFDKDKDAFGEwEwFHDADKDKDKDKDKEfaNaNaNaNDtDwFIFJFKDwDuaNaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFMFNFODKFPDAFQFvFRFSDADKDKDAFTFUEwEwFVDKDKDKDKDKDAaNaNaNDtDwFWFXFXFXFYDwDuaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAFMFNFODKFPDAFQFvFRFSDADKDKDAnpFUEwEwFVDKDKDKDKDKDAaNaNaNDtDwFWFXFXFXFYDwDuaNaNaNaNaNaN
aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDwDwDwDwDwDwDwDwDwDwDwDwGaDKDKGbDwDwDwDwDwDwDwDwGcDwDADuaNDtDwFWFXFXFXFXFXFYDADuaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDtDAGaGdGeGfGgGhGiGjGbDAGaDKDKDKDKDKDKGbDwDwDwDwDwGaDKGbDwDwGkDwFWFXFXFXGlFXFXFXFYDAaNaNaNaNaN
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNFLFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFZFLaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDIGmlhDKDKlvDKDKDKDKDKGoDKDKGpGpGpGpDKDKDKDKDKDKDKDKDKDKGqFXFXFXFXFXFXGrGsGtFXFXFXGuaNaNaNaNaN
+1 -1
View File
@@ -874,7 +874,7 @@
"qP" = (/obj/structure/rack{dir = 1},/obj/item/clothing/glasses/meson,/obj/item/device/flashlight,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp)
"qQ" = (/obj/structure/rack{dir = 1},/obj/item/clothing/glasses/meson,/obj/item/device/flashlight,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/obj/machinery/camera{c_tag = "Labor Camp Storage"; dir = 8; network = list("Labor")},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp)
"qR" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/laborcamp)
"qS" = (/obj/structure/table,/obj/item/device/healthanalyzer,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/laborcamp)
"qS" = (/obj/structure/table,/obj/item/device/healthanalyzer,/obj/item/stack/medical/bruise_pack/advanced,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/laborcamp)
"qT" = (/obj/structure/sign/redcross{pixel_y = 32},/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/laborcamp)
"qU" = (/obj/machinery/camera{c_tag = "Labor Camp Medical"; dir = 8; network = list("Labor")},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/item/device/radio/intercom/locked/prison{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/mine/laborcamp)
"qV" = (/turf/simulated/wall,/area/mine/laborcamp)
+3 -2
View File
@@ -30,8 +30,9 @@
#define slot_in_backpack 18
#define slot_legcuffed 19
#define slot_r_ear 20
#define slot_tie 21
#define slots_amt 21
#define slot_wear_pda 21
#define slot_tie 22
#define slots_amt 22
//Cant seem to find a mob bitflags area other than the powers one
+2 -1
View File
@@ -105,7 +105,8 @@
#define SLOT_POCKET 2048 //this is to allow items with a w_class of 3 or 4 to fit in pockets.
#define SLOT_DENYPOCKET 4096 //this is to deny items with a w_class of 2 or 1 to fit in pockets.
#define SLOT_TWOEARS 8192
#define SLOT_TIE 16384
#define SLOT_PDA 16384
#define SLOT_TIE 32768
//ORGAN TYPE FLAGS
#define AFFECT_ROBOTIC_ORGAN 1
+8
View File
@@ -80,6 +80,14 @@
//turfs += centerturf
return atoms
/proc/trange(rad = 0, turf/centre = null) //alternative to range (ONLY processes turfs and thus less intensive)
if(!centre)
return
var/turf/x1y1 = locate(((centre.x-rad)<1 ? 1 : centre.x-rad),((centre.y-rad)<1 ? 1 : centre.y-rad),centre.z)
var/turf/x2y2 = locate(((centre.x+rad)>world.maxx ? world.maxx : centre.x+rad),((centre.y+rad)>world.maxy ? world.maxy : centre.y+rad),centre.z)
return block(x1y1,x2y2)
/proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj)
var/dx = Loc1.x - Loc2.x
var/dy = Loc1.y - Loc2.y
+1 -1
View File
@@ -171,7 +171,7 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been [what_done] by [key_name(user)][object ? " with [object]" : " "][addition]</font>")
if(admin)
log_attack("<font color='red'>[key_name(user)] [what_done] [key_name(target)][object ? " with [object]" : " "][addition]</font>")
if(istype(target) && target.client)
if(istype(target) && (target.client || target.player_logged))
if(what_done in ignore) return
if(target == user)return
if(!admin) return
+6 -1
View File
@@ -72,4 +72,9 @@ var/timezoneOffset = 0 // The difference betwen midnight (of the host computer)
// For FTP requests. (i.e. downloading runtime logs.)
// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
var/fileaccess_timer = 0
var/fileaccess_timer = 0
//SPACE PARALLAX
var/parallax_initialized = 0
var/space_color = "#050505"
var/list/parallax_icon[27]
+5
View File
@@ -1,3 +1,8 @@
#define CLICKCATCHER_PLANE -99
#define PLANE_SPACE_BACKGROUND -10
#define PLANE_SPACE_PARALLAX (PLANE_SPACE_BACKGROUND + 1)
#define PLANE_SPACE_DUST (PLANE_SPACE_PARALLAX + 1)
#define PLANE_BASE 0
#define HUD_PLANE 90
+3 -1
View File
@@ -35,7 +35,7 @@
#define ui_swaphand2 "CENTER: 16,SOUTH+1:5"
#define ui_storage1 "CENTER+1:18,SOUTH:5"
#define ui_storage2 "CENTER+2:20,SOUTH:5"
#define ui_crafting "12:-10,1:5"
#define ui_pda "CENTER+3:22,SOUTH:5"
#define ui_alien_head "4:12,1:5" //aliens
#define ui_alien_oclothing "5:14,1:5" //aliens
@@ -65,6 +65,8 @@
#define ui_zonesel "EAST-1:28,SOUTH:5"
#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12)
#define ui_crafting "EAST:-5,SOUTH+2:7"
#define ui_borg_pull "EAST-2:26,SOUTH+1:7"
#define ui_borg_radio "EAST-1:28,SOUTH+1:7"
#define ui_borg_intents "EAST-2:26,SOUTH:5"
+1
View File
@@ -167,6 +167,7 @@
mymob.update_action_buttons(1)
reorganize_alerts()
reload_fullscreen()
update_parallax_and_dust()
/datum/hud/human/show_hud(version = 0)
..()
+15
View File
@@ -157,6 +157,16 @@
inv_box.alpha = ui_alpha
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "pda"
inv_box.icon = ui_style
inv_box.icon_state = "pda"
inv_box.screen_loc = ui_pda
inv_box.slot_id = slot_wear_pda
inv_box.color = ui_color
inv_box.alpha = ui_alpha
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "mask"
inv_box.icon = ui_style
@@ -393,6 +403,9 @@
if(H.wear_id)
H.wear_id.screen_loc = ui_id
H.client.screen += H.wear_id
if(H.wear_pda)
H.wear_pda.screen_loc = ui_pda
H.client.screen += H.wear_pda
if(H.belt)
H.belt.screen_loc = ui_belt
H.client.screen += H.belt
@@ -410,6 +423,8 @@
H.s_store.screen_loc = null
if(H.wear_id)
H.wear_id.screen_loc = null
if(H.wear_pda)
H.wear_pda.screen_loc = null
if(H.belt)
H.belt.screen_loc = null
if(H.back)
+281
View File
@@ -0,0 +1,281 @@
/*
* This file handles all parallax-related business once the parallax itself is initialized with the rest of the HUD
*/
var/list/parallax_on_clients = list()
/obj/screen/parallax
var/base_offset_x = 0
var/base_offset_y = 0
mouse_opacity = 0
icon = 'icons/turf/space.dmi'
icon_state = "blank"
name = "space parallax"
blend_mode = BLEND_ADD
layer = AREA_LAYER
plane = PLANE_SPACE_PARALLAX
var/parallax_speed = 0
var/last_accumulated_offset_x = 0
var/last_accumulated_offset_y = 0
/obj/screen/plane_master
appearance_flags = PLANE_MASTER
screen_loc = "1,1"
/obj/screen/plane_master/parallax_master
plane = PLANE_SPACE_PARALLAX
blend_mode = BLEND_MULTIPLY
color = list(
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 0,
0, 0, 0, 1)
/obj/screen/plane_master/parallax_spacemaster // Turns space-turfs into white. The parallax plane multiplies itself by the white, causing the parallax to only show in areas with opacity.
plane = PLANE_SPACE_BACKGROUND
color = list(
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
1, 1, 1, 1,
0, 0, 0, 0)
/obj/screen/plane_master/parallax_dustmaster
plane = PLANE_SPACE_DUST
/datum/hud/proc/update_parallax()
var/client/C = mymob.client
if(!parallax_initialized || C.updating_parallax) return
for(var/turf/space/T in trange(C.view,get_turf(C.eye)))
C.updating_parallax = 1
break
if(!C.updating_parallax)
return
//multiple sub-procs for profiling purposes
if(update_parallax1())
update_parallax2(0)
update_parallax3()
C.updating_parallax = 0
else
C.updating_parallax = 0
/datum/hud/proc/update_parallax_and_dust()
var/client/C = mymob.client
if(!parallax_initialized || C.updating_parallax) return
C.updating_parallax = 1
if(update_parallax1())
update_parallax2(1)
update_parallax3()
C.updating_parallax = 0
else
C.updating_parallax = 0
/datum/hud/proc/update_parallax1()
var/client/C = mymob.client
//DO WE UPDATE PARALLAX
if(C.prefs.space_parallax)//have to exclude Centcom so parallax doens't appear during hyperspace
parallax_on_clients |= C
else
for(var/obj/screen/parallax/bgobj in C.parallax)
C.screen -= bgobj
parallax_on_clients -= C
C.screen -= C.parallax_master
C.screen -= C.parallax_spacemaster
C.screen -= C.parallax_dustmaster
return 0
if(!C.parallax_master)
C.parallax_master = new /obj/screen/plane_master/parallax_master
if(!C.parallax_spacemaster)
C.parallax_spacemaster = new /obj/screen/plane_master/parallax_spacemaster
if(!C.parallax_dustmaster)
C.parallax_dustmaster = new /obj/screen/plane_master/parallax_dustmaster
return 1
/datum/hud/proc/update_parallax2(forcerecalibrate = 0)
var/client/C = mymob.client
//DO WE HAVE TO REPLACE ALL THE LAYERS
if(!C.parallax.len)
for(var/obj/screen/parallax/bgobj in parallax_icon)
var/obj/screen/parallax/parallax_layer = new /obj/screen/parallax
parallax_layer.appearance = bgobj.appearance
parallax_layer.base_offset_x = bgobj.base_offset_x
parallax_layer.base_offset_y = bgobj.base_offset_y
parallax_layer.parallax_speed = bgobj.parallax_speed
C.parallax += parallax_layer
var/parallax_loaded = 0
for(var/obj/screen/parallax/S in C.screen)
parallax_loaded = 1
break
if(forcerecalibrate || !parallax_loaded)
for(var/obj/screen/parallax/bgobj in C.parallax)
C.screen |= bgobj
C.screen |= C.parallax_master
C.screen |= C.parallax_spacemaster
C.screen |= C.parallax_dustmaster
C.parallax_dustmaster.color = list(0,0,0,0)
if(C.prefs.space_dust)
C.parallax_dustmaster.color = list(
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1)
if(!C.parallax_offset.len)
C.parallax_offset["horizontal"] = 0
C.parallax_offset["vertical"] = 0
/datum/hud/proc/update_parallax3()
var/client/C = mymob.client
//ACTUALLY MOVING THE PARALLAX
var/turf/posobj = get_turf(C.eye)
if(!C.previous_turf || (C.previous_turf.z != posobj.z))
C.previous_turf = posobj
var/x_diff = posobj.x - C.previous_turf.x
var/y_diff = posobj.y - C.previous_turf.y
if(x_diff == 0 && y_diff == 0)
return // Nothing to do here.
var/world_time = world.time
var/last_delay = world_time - C.last_parallax_shift
last_delay = min(last_delay, 4)
//Doing it this way prevents parallax layers from "jumping" when you change Z-Levels.
C.parallax_offset["horizontal"] += x_diff
C.parallax_offset["vertical"] += y_diff
C.previous_turf = posobj
C.last_parallax_shift = world_time
for(var/obj/screen/parallax/bgobj in C.parallax)
if(bgobj.parallax_speed)//only the middle and front layers actually move
var/accumulated_offset_x = bgobj.base_offset_x - round(C.parallax_offset["horizontal"] * bgobj.parallax_speed * (C.prefs.parallax_speed/2))
var/accumulated_offset_y = bgobj.base_offset_y - round(C.parallax_offset["vertical"] * bgobj.parallax_speed * (C.prefs.parallax_speed/2))
bgobj.last_accumulated_offset_x = accumulated_offset_x
bgobj.last_accumulated_offset_y = accumulated_offset_y
while(accumulated_offset_x > 720)
accumulated_offset_x -= 1440
while(accumulated_offset_x < -720)
accumulated_offset_x += 1440
while(accumulated_offset_y > 720)
accumulated_offset_y -= 1440
while(accumulated_offset_y < -720)
accumulated_offset_y += 1440
bgobj.screen_loc = "CENTER-7:[accumulated_offset_x],CENTER-7:[accumulated_offset_y]"
else
bgobj.screen_loc = "CENTER-7:[bgobj.base_offset_x],CENTER-7:[bgobj.base_offset_y]"
//Parallax generation code below
#define PARALLAX4_ICON_NUMBER 20
#define PARALLAX3_ICON_NUMBER 14
#define PARALLAX2_ICON_NUMBER 10
/datum/controller/game_controller/proc/cachespaceparallax()
var/list/plane1 = list()
var/list/plane2 = list()
var/list/plane3 = list()
var/list/pixel_x = list()
var/list/pixel_y = list()
var/index = 1
for(var/i = 0 to 224)
for(var/j = 1 to 9)
plane1 += rand(1,26)
plane2 += rand(1,26)
plane3 += rand(1,26)
pixel_x += 32 * (i%15)
pixel_y += 32 * round(i/15)
for(var/i in 0 to 8)
var/obj/screen/parallax/parallax_layer = new /obj/screen/parallax()
var/list/L = list()
for(var/j in 1 to 225)
if(plane1[j+i*225] <= PARALLAX4_ICON_NUMBER)
var/image/I = image('icons/turf/space_parallax4.dmi',"[plane1[j+i*225]]")
I.pixel_x = pixel_x[j]
I.pixel_y = pixel_y[j]
I.plane = PLANE_SPACE_PARALLAX
L += I
parallax_layer.overlays = L
parallax_layer.parallax_speed = 0
parallax_layer.plane = PLANE_SPACE_PARALLAX
calibrate_parallax(parallax_layer,i+1)
parallax_icon[index] = parallax_layer
index++
for(var/i in 0 to 8)
var/obj/screen/parallax/parallax_layer = new /obj/screen/parallax()
var/list/L = list()
for(var/j in 1 to 225)
if(plane2[j+i*225] <= PARALLAX3_ICON_NUMBER)
var/image/I = image('icons/turf/space_parallax3.dmi',"[plane2[j+i*225]]")
I.pixel_x = pixel_x[j]
I.pixel_y = pixel_y[j]
I.plane = PLANE_SPACE_PARALLAX
L += I
parallax_layer.overlays = L
parallax_layer.parallax_speed = 1
parallax_layer.plane = PLANE_SPACE_PARALLAX
calibrate_parallax(parallax_layer,i+1)
parallax_icon[index] = parallax_layer
index++
for(var/i in 0 to 8)
var/obj/screen/parallax/parallax_layer = new /obj/screen/parallax()
var/list/L = list()
for(var/j in 1 to 225)
if(plane3[j+i*225] <= PARALLAX2_ICON_NUMBER)
var/image/I = image('icons/turf/space_parallax2.dmi',"[plane3[j+i*225]]")
I.pixel_x = pixel_x[j]
I.pixel_y = pixel_y[j]
I.plane = PLANE_SPACE_PARALLAX
L += I
parallax_layer.overlays = L
parallax_layer.parallax_speed = 2
parallax_layer.plane = PLANE_SPACE_PARALLAX
calibrate_parallax(parallax_layer,i+1)
parallax_icon[index] = parallax_layer
index++
parallax_initialized = 1
/proc/calibrate_parallax(var/obj/screen/parallax/p_layer,var/i)
if(!p_layer || !i) return
/* Placement of screen objects
1 2 3
4 5 6
7 8 9
*/
switch(i)
if(1,4,7)
p_layer.base_offset_x = -480
if(3,6,9)
p_layer.base_offset_x = 480
switch(i)
if(1,2,3)
p_layer.base_offset_y = 480
if(7,8,9)
p_layer.base_offset_y = -480
#undef PARALLAX4_ICON_NUMBER
#undef PARALLAX3_ICON_NUMBER
#undef PARALLAX2_ICON_NUMBER
-7
View File
@@ -1,7 +0,0 @@
/datum/controller/process/vote/setup()
name = "vote"
schedule_interval = 10 // every second
log_startup_progress("Voting ticker starting up.")
/datum/controller/process/vote/doWork()
vote.process()
+5
View File
@@ -53,6 +53,11 @@ var/global/pipe_processing_killed = 0
setupgenetics()
setupfactions()
setup_economy()
var/watch = start_watch()
log_startup_progress("Caching space parallax simulation...")
cachespaceparallax()
log_startup_progress(" Finished caching space parallax simulation in [stop_watch(watch)]s.")
for(var/i=0, i<max_secret_rooms, i++)
make_mining_asteroid_secret()
+4 -1
View File
@@ -18,7 +18,7 @@
return
/client/proc/debug_controller(controller in list("Master","failsafe","Ticker","Air","Lighting","Jobs","Sun","Radio","Configuration","pAI", "Cameras","Garbage", "Transfer Controller","Event","Alarm","Scheduler","Nano"))
/client/proc/debug_controller(controller in list("Master","failsafe","Ticker","Air","Lighting","Jobs","Sun","Radio","Configuration","pAI", "Cameras","Garbage", "Transfer Controller","Event","Alarm","Scheduler","Nano","Vote"))
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -73,6 +73,9 @@
if("Nano")
debug_variables(nanomanager)
feedback_add_details("admin_verb","DNano")
if("Vote")
debug_variables(vote)
feedback_add_details("admin_verb","DVote")
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
return
+365 -310
View File
@@ -2,7 +2,7 @@ var/datum/controller/vote/vote = new()
var/global/list/round_voters = list() //Keeps track of the individuals voting for a given round, for use in forcedrafting.
datum/controller/vote
/datum/controller/vote
var/initiator = null
var/started_time = null
var/time_remaining = 0
@@ -14,340 +14,395 @@ datum/controller/vote
var/list/current_votes = list()
var/auto_muted = 0
New()
if(vote != src)
if(istype(vote))
qdel(vote)
vote = src
/datum/controller/vote/New()
if(vote != src)
if(istype(vote))
qdel(vote)
vote = src
spawn(0)
while(!gcDestroyed)
try
while(!gcDestroyed)
sleep(10)
process()
catch(var/exception/e)
log_runtime(e, src, "Caught in vote controller")
proc/process() //called by master_controller
if(mode)
// No more change mode votes after the game has started.
// 3 is GAME_STATE_PLAYING, but that #define is undefined for some reason
if(mode == "gamemode" && ticker.current_state >= 2)
to_chat(world, "<b>Voting aborted due to game start.</b>")
src.reset()
return
/datum/controller/vote/proc/process()
if(mode)
// No more change mode votes after the game has started.
if(mode == "gamemode" && ticker.current_state >= GAME_STATE_SETTING_UP)
to_chat(world, "<b>Voting aborted due to game start.</b>")
reset()
return
// Calculate how much time is remaining by comparing current time, to time of vote start,
// plus vote duration
time_remaining = round((started_time + config.vote_period - world.time)/10)
// Calculate how much time is remaining by comparing current time, to time of vote start,
// plus vote duration
time_remaining = round((started_time + config.vote_period - world.time)/10)
if(time_remaining < 0)
result()
for(var/client/C in voting)
if(C)
C << browse(null,"window=vote;can_close=0")
reset()
else
for(var/client/C in voting)
if(C)
C << browse(vote.interface(C),"window=vote;can_close=0")
if(time_remaining < 0)
result()
for(var/client/C in voting)
if(C)
C << browse(null,"window=vote")
reset()
else
for(var/client/C in voting)
update_panel(C)
CHECK_TICK
voting.Cut()
/datum/controller/vote/proc/autotransfer()
initiate_vote("crew_transfer","the server")
proc/autotransfer()
initiate_vote("crew_transfer","the server")
/datum/controller/vote/proc/reset()
initiator = null
time_remaining = 0
mode = null
question = null
choices.Cut()
voted.Cut()
voting.Cut()
current_votes.Cut()
proc/reset()
initiator = null
time_remaining = 0
mode = null
question = null
choices.Cut()
voted.Cut()
voting.Cut()
current_votes.Cut()
if(auto_muted && !config.ooc_allowed)
auto_muted = 0
config.ooc_allowed = !( config.ooc_allowed )
to_chat(world, "<b>The OOC channel has been automatically enabled due to vote end.</b>")
log_admin("OOC was toggled automatically due to vote end.")
message_admins("OOC has been toggled on automatically.")
if(auto_muted && !config.ooc_allowed)
auto_muted = 0
config.ooc_allowed = !( config.ooc_allowed )
to_chat(world, "<b>The OOC channel has been automatically enabled due to vote end.</b>")
log_admin("OOC was toggled automatically due to vote end.")
message_admins("OOC has been toggled on automatically.")
proc/get_result()
//get the highest number of votes
var/greatest_votes = 0
var/total_votes = 0
/datum/controller/vote/proc/get_result()
var/greatest_votes = 0
var/total_votes = 0
var/list/sorted_choices = list()
var/sorted_highest
var/sorted_votes = -1
//get the highest number of votes, while also sorting the list
while(choices.len)
// This is a very inefficient sorting method, but that's okay
for(var/option in choices)
var/votes = choices[option]
total_votes += votes
if(sorted_votes < votes)
sorted_highest = option
sorted_votes = votes
if(votes > greatest_votes)
greatest_votes = votes
//default-vote for everyone who didn't vote
if(!config.vote_no_default && choices.len)
var/non_voters = (clients.len - total_votes)
if(non_voters > 0)
if(mode == "restart")
choices["Continue Playing"] += non_voters
if(choices["Continue Playing"] >= greatest_votes)
greatest_votes = choices["Continue Playing"]
else if(mode == "gamemode")
if(master_mode in choices)
choices[master_mode] += non_voters
if(choices[master_mode] >= greatest_votes)
greatest_votes = choices[master_mode]
else if(mode == "crew_transfer")
var/factor = 0.5
switch(world.time / (10 * 60)) // minutes
if(0 to 60)
factor = 0.5
if(61 to 120)
factor = 0.8
if(121 to 240)
factor = 1
if(241 to 300)
factor = 1.2
else
factor = 1.4
choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor)
to_chat(world, "<font color='purple'>Crew Transfer Factor: [factor]</font>")
greatest_votes = max(choices["Initiate Crew Transfer"], choices["Continue The Round"])
//get all options with that many votes and return them in a list
. = list()
if(greatest_votes)
for(var/option in choices)
if(choices[option] == greatest_votes)
. += option
return .
proc/announce_result()
var/list/winners = get_result()
var/text
if(winners.len > 0)
if(winners.len > 1)
if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
text = "<b>Vote Tied Between:</b>\n"
for(var/option in winners)
text += "\t[option]\n"
. = pick(winners)
for(var/key in current_votes)
if(choices[current_votes[key]] == .)
round_voters += key // Keep track of who voted for the winning round.
if((mode == "gamemode" && . == "extended") || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes
text += "<b>Vote Result: [.]</b>"
else
if(mode != "gamemode")
text += "<b>Vote Result: [.]</b>"
else
text += "<b>The vote has ended.</b>" // What will be shown if it is a gamemode vote that isn't extended
else
text += "<b>Vote Result: Inconclusive - No Votes!</b>"
log_vote(text)
to_chat(world, "<font color='purple'>[text]</font>")
return .
proc/result()
. = announce_result()
var/restart = 0
if(.)
switch(mode)
if("restart")
if(. == "Restart Round")
restart = 1
if("gamemode")
if(master_mode != .)
world.save_mode(.)
if(ticker && ticker.mode)
restart = 1
else
master_mode = .
if(!going)
going = 1
to_chat(world, "<font color='red'><b>The round will start soon.</b></font>")
if("crew_transfer")
if(. == "Initiate Crew Transfer")
init_shift_change(null, 1)
if(restart)
world.Reboot("Restart vote successful.", "end_error", "restart vote")
return .
proc/submit_vote(var/ckey, var/vote)
if(mode)
if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder)
return 0
if(current_votes[ckey])
choices[choices[current_votes[ckey]]]--
if(vote && 1<=vote && vote<=choices.len)
voted += usr.ckey
choices[choices[vote]]++ //check this
current_votes[ckey] = vote
return vote
return 0
proc/initiate_vote(var/vote_type, var/initiator_key)
if(!mode)
if(started_time != null && !check_rights(R_ADMIN))
var/next_allowed_time = (started_time + config.vote_delay)
if(next_allowed_time > world.time)
return 0
reset()
switch(vote_type)
if("restart")
choices.Add("Restart Round","Continue Playing")
if("gamemode")
if(ticker.current_state >= 2)
return 0
choices.Add(config.votable_modes)
if("crew_transfer")
if(check_rights(R_ADMIN|R_MOD))
if(ticker.current_state <= 2)
return 0
question = "End the shift?"
choices.Add("Initiate Crew Transfer", "Continue The Round")
sorted_votes = -1
total_votes += choices[sorted_highest]
sorted_choices[sorted_highest] = choices[sorted_highest] || 0
choices -= sorted_highest
choices = sorted_choices
//default-vote for everyone who didn't vote
if(!config.vote_no_default && choices.len)
var/non_voters = (clients.len - total_votes)
if(non_voters > 0)
if(mode == "restart")
choices["Continue Playing"] += non_voters
if(choices["Continue Playing"] >= greatest_votes)
greatest_votes = choices["Continue Playing"]
else if(mode == "gamemode")
if(master_mode in choices)
choices[master_mode] += non_voters
if(choices[master_mode] >= greatest_votes)
greatest_votes = choices[master_mode]
else if(mode == "crew_transfer")
var/factor = 0.5
switch(world.time / (10 * 60)) // minutes
if(0 to 60)
factor = 0.5
if(61 to 120)
factor = 0.8
if(121 to 240)
factor = 1
if(241 to 300)
factor = 1.2
else
if(ticker.current_state <= 2)
return 0
question = "End the shift?"
choices.Add("Initiate Crew Transfer", "Continue The Round")
if("custom")
question = html_encode(input(usr,"What is the vote for?") as text|null)
if(!question) return 0
for(var/i=1,i<=10,i++)
var/option = capitalize(html_encode(input(usr,"Please enter an option or hit cancel to finish") as text|null))
if(!option || mode || !usr.client) break
choices.Add(option)
else return 0
mode = vote_type
initiator = initiator_key
started_time = world.time
var/text = "[capitalize(mode)] vote started by [initiator]."
if(mode == "custom")
text += "\n[question]"
log_vote(text)
to_chat(world, "<font color='purple'><b>[text]</b>\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>")
switch(vote_type)
if("crew_transfer")
world << sound('sound/ambience/alarm4.ogg')
if("gamemode")
world << sound('sound/ambience/alarm4.ogg')
if("custom")
world << sound('sound/ambience/alarm4.ogg')
if(mode == "gamemode" && going)
going = 0
to_chat(world, "<font color='red'><b>Round start has been delayed.</b></font>")
if(mode == "crew_transfer" && config.ooc_allowed)
auto_muted = 1
config.ooc_allowed = !( config.ooc_allowed )
to_chat(world, "<b>The OOC channel has been automatically disabled due to a crew transfer vote.</b>")
log_admin("OOC was toggled automatically due to crew_transfer vote.")
message_admins("OOC has been toggled off automatically.")
if(mode == "gamemode" && config.ooc_allowed)
auto_muted = 1
config.ooc_allowed = !( config.ooc_allowed )
to_chat(world, "<b>The OOC channel has been automatically disabled due to the gamemode vote.</b>")
log_admin("OOC was toggled automatically due to gamemode vote.")
message_admins("OOC has been toggled off automatically.")
if(mode == "custom" && config.ooc_allowed)
auto_muted = 1
config.ooc_allowed = !( config.ooc_allowed )
to_chat(world, "<b>The OOC channel has been automatically disabled due to a custom vote.</b>")
log_admin("OOC was toggled automatically due to custom vote.")
message_admins("OOC has been toggled off automatically.")
factor = 1.4
choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor)
to_chat(world, "<font color='purple'>Crew Transfer Factor: [factor]</font>")
greatest_votes = max(choices["Initiate Crew Transfer"], choices["Continue The Round"])
//get all options with that many votes and return them in a list
. = list()
if(greatest_votes)
for(var/option in choices)
if(choices[option] == greatest_votes)
. += option
return .
/datum/controller/vote/proc/announce_result()
var/list/winners = get_result()
var/text
if(winners.len > 0)
if(winners.len > 1)
if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
text = "<b>Vote Tied Between:</b>\n"
for(var/option in winners)
text += "\t[option]\n"
. = pick(winners)
time_remaining = round(config.vote_period/10)
return 1
return 0
proc/interface(var/client/C)
if(!C) return
var/admin = check_rights(R_ADMIN,0)
voting |= C
. = "<html><head><title>Voting Panel</title></head><body>"
if(mode)
if(question) . += "<h2>Vote: '[question]'</h2>"
else . += "<h2>Vote: [capitalize(mode)]</h2>"
. += "Time Left: [time_remaining] s<hr><ul>"
for(var/i = 1, i <= choices.len, i++)
var/votes = choices[choices[i]]
if(!votes) votes = 0
if(current_votes[C.ckey] == i)
. += "<li><b><a href='?src=\ref[src];vote=[i]'>[choices[i]] ([votes] votes)</a></b></li>"
else
. += "<li><a href='?src=\ref[src];vote=[i]'>[choices[i]] ([votes] votes)</a></li>"
. += "</ul><hr>"
if(admin)
. += "(<a href='?src=\ref[src];vote=cancel'>Cancel Vote</a>) "
for(var/key in current_votes)
if(choices[current_votes[key]] == .)
round_voters += key // Keep track of who voted for the winning round.
if(mode == "gamemode" && (. == "extended" || ticker.hide_mode == 0)) // Announce Extended gamemode, but not other gamemodes
text += "<b>Vote Result: [.] ([choices[.]] vote\s)</b>"
else
. += "<h2>Start a vote:</h2><hr><ul><li>"
//restart
if(admin || config.allow_vote_restart)
. += "<a href='?src=\ref[src];vote=restart'>Restart</a>"
if(mode == "custom")
// Completely replace text to show all results in custom votes
text = "<b><span style='text-decoration: underline;'>[question]</span></b>\n"
for(var/option in winners)
text += "\t<b>[option]: [choices[option]] vote\s</b>\n"
for(var/option in (choices-winners))
text += "\t[option]: [choices[option]] vote\s\n"
else if(mode != "gamemode")
text += "<b>Vote Result: [.] ([choices[.]] vote\s)</b>"
else
. += "<font color='grey'>Restart (Disallowed)</font>"
. += "</li><li>"
if(admin || config.allow_vote_restart)
. += "<a href='?src=\ref[src];vote=crew_transfer'>Crew Transfer</a>"
else
. += "<font color='grey'>Crew Transfer (Disallowed)</font>"
if(admin)
. += "\t(<a href='?src=\ref[src];vote=toggle_restart'>[config.allow_vote_restart?"Allowed":"Disallowed"]</a>)"
. += "</li><li>"
//gamemode
if(admin || config.allow_vote_mode)
. += "<a href='?src=\ref[src];vote=gamemode'>GameMode</a>"
else
. += "<font color='grey'>GameMode (Disallowed)</font>"
if(admin)
. += "\t(<a href='?src=\ref[src];vote=toggle_gamemode'>[config.allow_vote_mode?"Allowed":"Disallowed"]</a>)"
text += "<b>The vote has ended.</b>" // What will be shown if it is a gamemode vote that isn't extended
. += "</li>"
//custom
if(admin)
. += "<li><a href='?src=\ref[src];vote=custom'>Custom</a></li>"
. += "</ul><hr>"
. += "<a href='?src=\ref[src];vote=close' style='position:absolute;right:50px'>Close</a></body></html>"
return .
else
text += "<b>Vote Result: Inconclusive - No Votes!</b>"
log_vote(text)
to_chat(world, "<font color='purple'>[text]</font>")
return .
Topic(href,href_list[],hsrc)
if(!usr || !usr.client) return //not necessary but meh...just in-case somebody does something stupid
var/admin = check_rights(R_ADMIN,0)
switch(href_list["vote"])
if("close")
voting -= usr.client
usr << browse(null, "window=vote")
return
if("cancel")
if(admin)
reset()
if("toggle_restart")
if(admin)
config.allow_vote_restart = !config.allow_vote_restart
if("toggle_gamemode")
if(admin)
config.allow_vote_mode = !config.allow_vote_mode
/datum/controller/vote/proc/result()
. = announce_result()
var/restart = 0
if(.)
switch(mode)
if("restart")
if(config.allow_vote_restart || admin)
initiate_vote("restart",usr.key)
if(. == "Restart Round")
restart = 1
if("gamemode")
if(config.allow_vote_mode || admin)
initiate_vote("gamemode",usr.key)
if(master_mode != .)
world.save_mode(.)
if(ticker && ticker.mode)
restart = 1
else
master_mode = .
if(!going)
going = 1
to_chat(world, "<font color='red'><b>The round will start soon.</b></font>")
if("crew_transfer")
if(config.allow_vote_restart || admin)
initiate_vote("crew_transfer",usr.key)
if(. == "Initiate Crew Transfer")
init_shift_change(null, 1)
if(restart)
world.Reboot("Restart vote successful.", "end_error", "restart vote")
return .
/datum/controller/vote/proc/submit_vote(var/ckey, var/vote)
if(mode)
if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder)
return 0
if(current_votes[ckey])
choices[choices[current_votes[ckey]]]--
if(vote && 1<=vote && vote<=choices.len)
voted += usr.ckey
choices[choices[vote]]++ //check this
current_votes[ckey] = vote
return vote
return 0
/datum/controller/vote/proc/initiate_vote(var/vote_type, var/initiator_key)
if(!mode)
if(started_time != null && !check_rights(R_ADMIN))
var/next_allowed_time = (started_time + config.vote_delay)
if(next_allowed_time > world.time)
return 0
reset()
switch(vote_type)
if("restart")
choices.Add("Restart Round","Continue Playing")
if("gamemode")
if(ticker.current_state >= 2)
return 0
choices.Add(config.votable_modes)
if("crew_transfer")
if(check_rights(R_ADMIN|R_MOD))
if(ticker.current_state <= 2)
return 0
question = "End the shift?"
choices.Add("Initiate Crew Transfer", "Continue The Round")
else
if(ticker.current_state <= 2)
return 0
question = "End the shift?"
choices.Add("Initiate Crew Transfer", "Continue The Round")
if("custom")
if(admin)
initiate_vote("custom",usr.key)
question = html_encode(input(usr,"What is the vote for?") as text|null)
if(!question) return 0
for(var/i=1,i<=10,i++)
var/option = capitalize(html_encode(input(usr,"Please enter an option or hit cancel to finish") as text|null))
if(!option || mode || !usr.client) break
choices.Add(option)
else
submit_vote(usr.ckey, round(text2num(href_list["vote"])))
usr.vote()
return 0
mode = vote_type
initiator = initiator_key
started_time = world.time
var/text = "[capitalize(mode)] vote started by [initiator]."
if(mode == "custom")
text += "\n[question]"
if(usr)
log_admin("[capitalize(mode)] ([question]) vote started by [key_name(usr)].")
else if(usr)
log_admin("[capitalize(mode)] vote started by [key_name(usr)].")
log_vote(text)
to_chat(world, {"<font color='purple'><b>[text]</b>
<a href='?src=\ref[src];vote=open'>Click here or type vote to place your vote.</a>
You have [config.vote_period/10] seconds to vote.</font>"})
switch(vote_type)
if("crew_transfer")
world << sound('sound/ambience/alarm4.ogg')
if("gamemode")
world << sound('sound/ambience/alarm4.ogg')
if("custom")
world << sound('sound/ambience/alarm4.ogg')
if(mode == "gamemode" && going)
going = 0
to_chat(world, "<font color='red'><b>Round start has been delayed.</b></font>")
if(mode == "crew_transfer" && config.ooc_allowed)
auto_muted = 1
config.ooc_allowed = !( config.ooc_allowed )
to_chat(world, "<b>The OOC channel has been automatically disabled due to a crew transfer vote.</b>")
log_admin("OOC was toggled automatically due to crew_transfer vote.")
message_admins("OOC has been toggled off automatically.")
if(mode == "gamemode" && config.ooc_allowed)
auto_muted = 1
config.ooc_allowed = !( config.ooc_allowed )
to_chat(world, "<b>The OOC channel has been automatically disabled due to the gamemode vote.</b>")
log_admin("OOC was toggled automatically due to gamemode vote.")
message_admins("OOC has been toggled off automatically.")
if(mode == "custom" && config.ooc_allowed)
auto_muted = 1
config.ooc_allowed = !( config.ooc_allowed )
to_chat(world, "<b>The OOC channel has been automatically disabled due to a custom vote.</b>")
log_admin("OOC was toggled automatically due to custom vote.")
message_admins("OOC has been toggled off automatically.")
time_remaining = round(config.vote_period/10)
return 1
return 0
/datum/controller/vote/proc/browse_to(var/client/C)
if(!C)
return
var/admin = check_rights(R_ADMIN, 0, user = C.mob)
voting |= C
var/dat = {"<script>
function update_vote_div(new_content) {
var votediv = document.getElementById("vote_div");
if(votediv) {
votediv.innerHTML = new_content;
}
}
</script>"}
if(mode)
dat += "<div id='vote_div'>[vote_html(C)]</div><hr>"
if(admin)
dat += "(<a href='?src=\ref[src];vote=cancel'>Cancel Vote</a>) "
else
dat += "<div id='vote_div'><h2>Start a vote:</h2><hr><ul><li>"
//restart
if(admin || config.allow_vote_restart)
dat += "<a href='?src=\ref[src];vote=restart'>Restart</a>"
else
dat += "<font color='grey'>Restart (Disallowed)</font>"
dat += "</li><li>"
if(admin || config.allow_vote_restart)
dat += "<a href='?src=\ref[src];vote=crew_transfer'>Crew Transfer</a>"
else
dat += "<font color='grey'>Crew Transfer (Disallowed)</font>"
if(admin)
dat += "\t(<a href='?src=\ref[src];vote=toggle_restart'>[config.allow_vote_restart?"Allowed":"Disallowed"]</a>)"
dat += "</li><li>"
//gamemode
if(admin || config.allow_vote_mode)
dat += "<a href='?src=\ref[src];vote=gamemode'>GameMode</a>"
else
dat += "<font color='grey'>GameMode (Disallowed)</font>"
if(admin)
dat += "\t(<a href='?src=\ref[src];vote=toggle_gamemode'>[config.allow_vote_mode?"Allowed":"Disallowed"]</a>)"
dat += "</li>"
//custom
if(admin)
dat += "<li><a href='?src=\ref[src];vote=custom'>Custom</a></li>"
dat += "</ul></div><hr>"
var/datum/browser/popup = new(C.mob, "vote", "Voting Panel", nref=src)
popup.set_content(dat)
popup.open()
/datum/controller/vote/proc/update_panel(var/client/C)
C << output(url_encode(vote_html(C)), "vote.browser:update_vote_div")
/datum/controller/vote/proc/vote_html(var/client/C)
. = ""
if(question)
. += "<h2>Vote: '[question]'</h2>"
else
. += "<h2>Vote: [capitalize(mode)]</h2>"
. += "Time Left: [time_remaining] s<hr><ul>"
for(var/i = 1, i <= choices.len, i++)
var/votes = choices[choices[i]]
if(!votes)
votes = 0
if(current_votes[C.ckey] == i)
. += "<li><b><a href='?src=\ref[src];vote=[i]'>[choices[i]] ([votes] vote\s)</a></b></li>"
else
. += "<li><a href='?src=\ref[src];vote=[i]'>[choices[i]] ([votes] vote\s)</a></li>"
. += "</ul>"
/datum/controller/vote/Topic(href,href_list[],hsrc)
if(!usr || !usr.client)
return //not necessary but meh...just in-case somebody does something stupid
var/admin = check_rights(R_ADMIN,0)
if(href_list["close"])
voting -= usr.client
return
switch(href_list["vote"])
if("open")
// vote proc will automatically get called after this switch ends
if("cancel")
if(admin && mode)
var/votedesc = capitalize(mode)
if(mode == "custom")
votedesc += " ([question])"
admin_log_and_message_admins("cancelled the running [votedesc] vote.")
reset()
if("toggle_restart")
if(admin)
config.allow_vote_restart = !config.allow_vote_restart
if("toggle_gamemode")
if(admin)
config.allow_vote_mode = !config.allow_vote_mode
if("restart")
if(config.allow_vote_restart || admin)
initiate_vote("restart",usr.key)
if("gamemode")
if(config.allow_vote_mode || admin)
initiate_vote("gamemode",usr.key)
if("crew_transfer")
if(config.allow_vote_restart || admin)
initiate_vote("crew_transfer",usr.key)
if("custom")
if(admin)
initiate_vote("custom",usr.key)
else
submit_vote(usr.ckey, round(text2num(href_list["vote"])))
update_panel(usr.client)
return
usr.vote()
/mob/verb/vote()
@@ -355,4 +410,4 @@ datum/controller/vote
set name = "Vote"
if(vote)
src << browse(vote.interface(client),"window=vote;can_close=0")
vote.browse_to(client)
+8 -17
View File
@@ -24,13 +24,12 @@
body += debug_variable("icon", new/icon(A.icon, A.icon_state, A.dir), 0)
#endif
var/icon/sprite
var/sprite
if(istype(D,/atom))
var/atom/AT = D
if(AT.icon && AT.icon_state)
sprite = new /icon(AT.icon, AT.icon_state)
usr << browse_rsc(sprite, "view_vars_sprite.png")
sprite = 1
title = "[D] (\ref[D]) = [D.type]"
@@ -162,7 +161,7 @@
body += "<div align='center'><table width='100%'><tr><td width='50%'>"
if(sprite)
body += "<table align='center' width='100%'><tr><td><img src='view_vars_sprite.png'></td><td>"
body += "<table align='center' width='100%'><tr><td>[bicon(D)]</td><td>"
else
body += "<table align='center' width='100%'><tr><td>"
@@ -351,26 +350,18 @@ body
else if(isicon(value))
#ifdef VARSICON
var/icon/I = new/icon(value)
var/rnd = rand(1,10000)
var/rname = "tmp\ref[I][rnd].png"
usr << browse_rsc(I, rname)
html += "[name] = (<span class='value'>[value]</span>) <img class=icon src=\"[rname]\">"
html += "[name] = /icon (<span class='value'>[value]</span>) [bicon(value)]"
#else
html += "[name] = /icon (<span class='value'>[value]</span>)"
#endif
/* else if(istype(value, /image))
else if(istype(value, /image))
#ifdef VARSICON
var/rnd = rand(1, 10000)
var/image/I = value
src << browse_rsc(I.icon, "tmp\ref[value][rnd].png")
html += "[name] = <img src=\"tmp\ref[value][rnd].png\">"
html += "<a href='?_src_=vars;Vars=\ref[value]'>[name] \ref[value]</a> = /image (<span class='value'>[value]</span>) [bicon(value)]"
#else
html += "[name] = /image (<span class='value'>[value]</span>)"
html += "<a href='?_src_=vars;Vars=\ref[value]'>[name] \ref[value]</a> = /image (<span class='value'>[value]</span>)"
#endif
*/
else if(isfile(value))
html += "[name] = <span class='value'>'[value]'</span>"
@@ -43,11 +43,11 @@ Bonus
return
/datum/symptom/choking/proc/Choke_stage_3_4(mob/living/M, datum/disease/advance/A)
var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth())*1)
var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth())
M.adjustOxyLoss(get_damage)
return 1
/datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A)
var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth()*5))
var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth()*5)
M.adjustOxyLoss(get_damage)
return 1
@@ -45,9 +45,11 @@ Bonus
if(!parts.len)
return
M.heal_overall_damage(get_damage, get_damage)
for(var/obj/item/organ/external/E in parts)
E.heal_damage(get_damage, get_damage, 0, 0)
M.adjustToxLoss(get_damage*parts.len)
else
if(M.getFireLoss() > 0 || M.getBruteLoss() > 0)
M.adjustFireLoss(-get_damage)
@@ -21,7 +21,7 @@ Bonus
resistance = -4
stage_speed = -4
transmittable = -3
level = 6
level = 5
severity = 0
/datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A)
@@ -38,12 +38,12 @@ Bonus
M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10))
to_chat(M, "<span class='notice'>You feel sober.</span>")
if(4)
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10)
M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10, "synaptizine"=5))
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10)
M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10, "synaphydramine"=5))
to_chat(M, "<span class='notice'>You feel focused.</span>")
if(5)
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10)
M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "oculine"=10, "synaptizine"=10))
if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10)
M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "oculine"=10, "synaphydramine"=10))
to_chat(M, "<span class='notice'>Your mind feels relaxed.</span>")
return
+10 -2
View File
@@ -276,11 +276,10 @@
text += "<br><b>enthralled</b>"
text = "<i><b>[text]</b></i>: "
if(src in ticker.mode.vampire_enthralled)
text += "<b><font color='#FF0000'>YES</font></b>|no"
text += "<b><font color='#FF0000'>YES</font></b>|<a href='?src=\ref[src];vampthrall=clear'>no</a>"
else
text += "yes|<font color='#00FF00'>NO</font></b>"
sections["vampire"] = text
@@ -948,6 +947,13 @@
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
else if(href_list["vampthrall"])
switch(href_list["vampthrall"])
if("clear")
if(src in ticker.mode.vampire_enthralled)
ticker.mode.remove_vampire_mind(src)
log_admin("[key_name(usr)] has de-vampthralled [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-vampthralled [key_name_admin(current)]")
else if(href_list["nuclear"])
var/mob/living/carbon/human/H = current
@@ -990,6 +996,7 @@
qdel(H.head)
qdel(H.shoes)
qdel(H.wear_id)
qdel(H.wear_pda)
qdel(H.wear_suit)
qdel(H.w_uniform)
@@ -1316,6 +1323,7 @@
qdel(H.head)
qdel(H.shoes)
qdel(H.wear_id)
qdel(H.wear_pda)
qdel(H.wear_suit)
qdel(H.w_uniform)
+1 -2
View File
@@ -45,7 +45,7 @@
return .
/proc/key_name_admin(var/whom, var/include_name = 1)
var/message = "[key_name(whom, 1, include_name)](<A HREF='?_src_=holder;adminmoreinfo=\ref[whom]'>?</A>)[isAntag(whom) ? "(A)" : ""] ([admin_jump_link(whom, "holder")])"
var/message = "[key_name(whom, 1, include_name)](<A HREF='?_src_=holder;adminmoreinfo=\ref[whom]'>?</A>)[isAntag(whom) ? "(A)" : ""][isSSD(whom) ? "<span class='danger'>(SSD!)</span>" : ""] ([admin_jump_link(whom, "holder")])"
return message
/proc/log_and_message_admins(var/message as text)
@@ -55,4 +55,3 @@
/proc/admin_log_and_message_admins(var/message as text)
log_admin("[key_name(usr)] " + message)
message_admins("[key_name_admin(usr)] " + message, 1)
+3 -3
View File
@@ -84,14 +84,14 @@
if(istype(A, /datum/reagent))
if(!reagents)
reagents = new()
reagents.reagent_list.Add(A)
reagents.conditional_update()
reagents.reagent_list.Add(A)
reagents.conditional_update()
else if(istype(A, /atom/movable))
var/atom/movable/M = A
if(istype(M.loc, /mob/living))
var/mob/living/L = M.loc
L.unEquip(M)
M.loc = src
M.forceMove(src)
/atom/proc/assume_air(datum/gas_mixture/giver)
qdel(giver)
+18
View File
@@ -104,6 +104,8 @@
if(. && buckled_mob && !handle_buckled_mob_movement(loc, direct)) //movement failed due to buckled mob
. = 0
update_client_hook(loc)
// Previously known as Crossed()
@@ -144,9 +146,25 @@
for(var/datum/light_source/L in light_sources)
L.source_atom.update_light()
update_client_hook(destination)
return 1
/atom/movable/proc/update_client_hook(atom/destination)
if(locate(/mob) in src)
for(var/client/C in parallax_on_clients)
if((get_turf(C.eye) == destination) && (C.mob.hud_used))
C.mob.hud_used.update_parallax()
/mob/update_client_hook(atom/destination)
if(locate(/mob) in src)
for(var/client/C in parallax_on_clients)
if((get_turf(C.eye) == destination) && (C.mob.hud_used))
C.mob.hud_used.update_parallax()
else if(client && hud_used)
hud_used.update_parallax()
//called when src is thrown into hit_atom
/atom/movable/proc/throw_impact(atom/hit_atom, var/speed)
if(istype(hit_atom,/mob/living))
+2 -2
View File
@@ -36,7 +36,6 @@
melee_damage_upper = 4
attacktext = "hits"
attack_sound = 'sound/weapons/genhit1.ogg'
del_on_death = 1
speak_emote = list("pulses")
var/obj/effect/blob/factory/factory = null
var/list/human_overlays = list()
@@ -92,6 +91,7 @@
loc.visible_message("<span class='warning'>The corpse of [H.name] suddenly rises!</span>")
/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed)
..()
// On death, create a small smoke of harmful gas (s-Acid)
var/datum/effect/system/chem_smoke_spread/S = new
var/turf/location = get_turf(src)
@@ -108,7 +108,7 @@
S.attach(location)
S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud
S.start()
..()
qdel(src)
/mob/living/simple_animal/hostile/blob/blobspore/Destroy()
if(factory)
+1 -3
View File
@@ -48,9 +48,7 @@ var/round_start_time = 0
to_chat(world, "<B><FONT color='blue'>Welcome to the pre-game lobby!</FONT></B>")
to_chat(world, "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds")
while(current_state == GAME_STATE_PREGAME)
for(var/i=0, i<10, i++)
sleep(1)
vote.process()
sleep(10)
if(going)
pregame_timeleft--
@@ -240,7 +240,7 @@
//There's no define for this / get all items ?
var/list/slots = list(slot_back,slot_w_uniform,slot_wear_suit,\
slot_wear_mask,slot_head,slot_shoes,slot_gloves,slot_l_ear,slot_r_ear,\
slot_glasses,slot_belt,slot_s_store,slot_l_store,slot_r_store,slot_wear_id)
slot_glasses,slot_belt,slot_s_store,slot_l_store,slot_r_store,slot_wear_id,slot_wear_pda)
for(var/slot in slots)
var/obj/item/I = H.get_item_by_slot(slot)
+1 -1
View File
@@ -3,7 +3,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "pinoff"
flags = CONDUCT
slot_flags = SLOT_BELT
slot_flags = SLOT_PDA | SLOT_BELT
w_class = 2
item_state = "electronic"
throw_speed = 4
+11 -1
View File
@@ -799,7 +799,17 @@ var/list/potential_theft_objectives=subtypesof(/datum/theft_objective) \
/datum/objective/heist/inviolate_death
explanation_text = "Follow the Inviolate. Minimise death and loss of resources."
completed = 1
check_completion()
var/vox_allowed_kills = 3 // The number of people the vox can accidently kill. Mostly a counter to people killing themselves if a raider touches them to force fail.
var/vox_total_kills = 0
var/datum/game_mode/heist/H = ticker.mode
for(var/datum/mind/raider in H.raiders)
vox_total_kills += raider.kills.len // Kills are listed in the mind; uses this to calculate vox kills
if(vox_total_kills > vox_allowed_kills) return 0
return 1
// Traders
+4
View File
@@ -409,6 +409,10 @@ var/global/list/multiverse = list()
if(belt)
M.equip_to_slot_or_del(new belt.type(M), slot_belt)
var/obj/pda = H.get_item_by_slot(slot_wear_pda)
if(pda)
M.equip_to_slot_or_del(new pda.type(M), slot_wear_pda)
var/obj/back = H.get_item_by_slot(slot_back)
if(back)
M.equip_to_slot_or_del(new back.type(M), slot_back)
+3 -3
View File
@@ -20,7 +20,7 @@
H.equip_or_collect(new /obj/item/clothing/gloves/color/white(H), slot_gloves)
H.equip_or_collect(new /obj/item/device/radio/headset/centcom(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer(H), slot_head)
H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
@@ -61,13 +61,13 @@
H.equip_or_collect(new /obj/item/clothing/gloves/combat(H), slot_gloves)
H.equip_or_collect(new /obj/item/device/radio/headset/centcom(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer/navy(H), slot_head)
H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/centcom(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/suit/space/deathsquad/officer(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/implanter/dust(H), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(H), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(H), slot_belt)
H.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(H), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
+8 -8
View File
@@ -27,16 +27,16 @@
if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/device/pda/heads/ce(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/heads/ce(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/head/hardhat/white(H), slot_head)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
H.equip_or_collect(new /obj/item/clothing/gloves/color/black/ce(H), slot_gloves)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
else
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_in_backpack)
return 1
@@ -64,14 +64,14 @@
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
H.equip_or_collect(new /obj/item/clothing/head/hardhat(H), slot_head)
H.equip_or_collect(new /obj/item/device/t_scanner(H), slot_r_store)
H.equip_or_collect(new /obj/item/device/pda/engineering(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/engineering(H), slot_wear_pda)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
else
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_in_backpack)
return 1
@@ -99,12 +99,12 @@
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/atmos(H), slot_belt)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/atmostech/(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/atmos(H), slot_wear_pda)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
else
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/atmostech/(H), slot_in_backpack)
return 1
/datum/job/mechanic
@@ -129,12 +129,12 @@
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/rank/mechanic(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
H.equip_or_collect(new /obj/item/clothing/head/hardhat(H), slot_head)
H.equip_or_collect(new /obj/item/device/t_scanner(H), slot_r_store)
H.equip_or_collect(new /obj/item/device/pda/engineering(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/engineering(H), slot_wear_pda)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
else
H.equip_or_collect(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_in_backpack)
return 1
+7 -7
View File
@@ -25,7 +25,7 @@
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/heads/cmo(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/heads/cmo(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat/cmo(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
@@ -89,7 +89,7 @@
H.equip_or_collect(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
if(H.backbag == 1)
@@ -127,7 +127,7 @@
H.equip_or_collect(new /obj/item/clothing/glasses/science(H), slot_glasses)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_wear_pda)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/chemist(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -157,7 +157,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_medsci(H), slot_l_ear)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_wear_pda)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/genetics(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
@@ -185,7 +185,7 @@
if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_vir(H), slot_back)
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/device/pda/viro(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/viro(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
H.equip_or_collect(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat/virologist(H), slot_wear_suit)
@@ -228,7 +228,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
@@ -257,7 +257,7 @@
if(H.backbag == 3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/mask/cigarette(H), slot_wear_mask)
H.equip_or_collect(new /obj/item/clothing/head/soft/blue(H), slot_head)
H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
+4 -4
View File
@@ -33,7 +33,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/rd(H), slot_l_ear)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/research_director(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_wear_pda)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
@@ -71,7 +71,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/toxins(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/device/pda/toxins(H), slot_wear_pda)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat/science(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -106,11 +106,11 @@
H.equip_or_collect(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/roboticist(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/roboticist(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full(H), slot_in_backpack)
return 1
+6 -6
View File
@@ -28,7 +28,7 @@
H.equip_or_collect(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/suit/armor/hos(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/device/pda/heads/hos(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/heads/hos(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/gloves/color/black/hos(H), slot_gloves)
H.equip_or_collect(new /obj/item/clothing/head/HoS(H), slot_head)
H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
@@ -72,7 +72,7 @@
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/warden(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head)
H.equip_or_collect(new /obj/item/device/pda/warden(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/warden(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
// H.equip_or_collect(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk
@@ -115,7 +115,7 @@
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/det(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/detective(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/detective(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/toy/crayon/white(H), slot_l_store)
/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
CIG.light("")
@@ -173,7 +173,7 @@
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/security(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet(H), slot_head)
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
H.equip_or_collect(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store)
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
@@ -212,7 +212,7 @@
H.equip_or_collect(new /obj/item/clothing/suit/storage/fr_jacket(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/glasses/hud/health/health_advanced, slot_glasses)
H.equip_or_collect(new /obj/item/clothing/shoes/white(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/medical(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_s_store)
if(H.backbag == 1)
@@ -247,7 +247,7 @@
H.equip_or_collect(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/suit/jacket/pilot(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
H.equip_or_collect(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store)
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
+6 -6
View File
@@ -25,7 +25,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
U.accessories += M
M.on_attached(U)
H.equip_or_collect(U, slot_w_uniform)
H.equip_or_collect(new /obj/item/device/pda/captain(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/captain(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/capcarapace(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/head/caphat(H), slot_head)
@@ -84,7 +84,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
H.equip_or_collect(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/head/hopcap(H), slot_head)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/heads/hop(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/heads/hop(H), slot_wear_pda)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/ids(H), slot_r_hand)
else
@@ -130,7 +130,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
H.equip_or_collect(new /obj/item/clothing/under/rank/ntrep(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/suit/storage/ntrep(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/heads/ntrep(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/heads/ntrep(H), slot_wear_pda)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
@@ -170,7 +170,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
H.equip_or_collect(new /obj/item/clothing/glasses/hud/health/health_advanced, slot_glasses)
H.equip_or_collect(new /obj/item/clothing/under/rank/blueshield(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest/blueshield(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/device/pda/heads/blueshield(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/heads/blueshield(H), slot_wear_pda)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/deathimp(H), slot_r_hand)
@@ -216,7 +216,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
H.equip_or_collect(new /obj/item/clothing/shoes/centcom(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/head/powdered_wig(H), slot_head)
H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
H.equip_or_collect(new /obj/item/device/pda/heads/magistrate(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/heads/magistrate(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/device/flash(H), slot_r_store)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
@@ -251,7 +251,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
H.equip_or_collect(new /obj/item/clothing/suit/storage/internalaffairs(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses)
H.equip_or_collect(new /obj/item/device/pda/lawyer(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/lawyer(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
H.equip_or_collect(new /obj/item/device/laser_pointer(H), slot_l_store)
H.equip_or_collect(new /obj/item/device/flash(H), slot_r_store)
+16 -17
View File
@@ -22,7 +22,8 @@
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/device/pda/bar(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/bar(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/weapon/storage/belt/bandolier/full(H), slot_in_backpack)
if(H.backbag == 1)
var/obj/item/weapon/storage/box/survival/Barpack = new /obj/item/weapon/storage/box/survival(H)
@@ -30,7 +31,6 @@
else
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_in_backpack)
H.equip_or_collect(new /obj/item/toy/russian_revolver(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/storage/belt/bandolier/full(H), slot_in_backpack)
H.dna.SetSEState(SOBERBLOCK,1)
H.mutations += SOBER
@@ -64,7 +64,7 @@
H.equip_or_collect(new /obj/item/clothing/suit/chef(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/clothing/head/chefhat(H), slot_head)
H.equip_or_collect(new /obj/item/device/pda/chef(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/chef(H), slot_wear_pda)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
@@ -99,7 +99,7 @@
H.equip_or_collect(new /obj/item/clothing/gloves/botanic_leather(H), slot_gloves)
H.equip_or_collect(new /obj/item/clothing/suit/apron(H), slot_wear_suit)
H.equip_or_collect(new /obj/item/device/analyzer/plant_analyzer(H), slot_s_store)
H.equip_or_collect(new /obj/item/device/pda/botanist(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/botanist(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
@@ -128,7 +128,7 @@
H.equip_or_collect(new /obj/item/device/radio/headset/headset_cargo(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/brown(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/quartermaster(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/quartermaster(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
H.equip_or_collect(new /obj/item/weapon/clipboard(H), slot_l_hand)
if(H.backbag == 1)
@@ -161,7 +161,7 @@
H.equip_or_collect(new /obj/item/device/radio/headset/headset_cargo(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/cargo(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/cargo(H), slot_wear_pda)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
@@ -196,7 +196,7 @@
H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/gloves/fingerless(H), slot_gloves)
H.equip_or_collect(new /obj/item/device/pda/shaftminer(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/shaftminer(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/patch/styptic(H), slot_l_store)
H.equip_or_collect(new /obj/item/device/flashlight/seclite(H), slot_r_store)
@@ -234,7 +234,7 @@
H.equip_or_collect(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask)
H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/clown(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/clown(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask)
H.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/bikehorn(H), slot_in_backpack)
@@ -277,7 +277,7 @@
H.equip_or_collect(new /obj/item/clothing/mask/gas/mime(H), slot_wear_mask)
H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/mime(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/mime(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/gloves/color/white(H), slot_gloves)
H.equip_or_collect(new /obj/item/clothing/head/beret(H), slot_head)
H.equip_or_collect(new /obj/item/clothing/suit/suspenders(H), slot_wear_suit)
@@ -315,7 +315,7 @@
H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/janitor(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/janitor(H), slot_wear_pda)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
@@ -339,21 +339,20 @@
equip(var/mob/living/carbon/human/H)
if(!H) return 0
if(!H)
return 0
switch(H.backbag)
if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/under/suit_jacket/red(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/device/pda/librarian(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/librarian(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_or_collect(new /obj/item/weapon/barcodescanner(H), slot_l_hand)
H.equip_or_collect(new /obj/item/weapon/storage/bag/books(H), slot_l_hand)
H.equip_or_collect(new /obj/item/weapon/barcodescanner(H), slot_r_store)
H.equip_or_collect(new /obj/item/device/laser_pointer(H), slot_l_store)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
return 1
/datum/job/barber
+1 -1
View File
@@ -21,7 +21,7 @@
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_or_collect(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
H.equip_or_collect(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform)
H.equip_or_collect(new /obj/item/device/pda/chaplain(H), slot_belt)
H.equip_or_collect(new /obj/item/device/pda/chaplain(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+1 -1
View File
@@ -594,7 +594,7 @@ var/global/datum/controller/occupations/job_master
H.equip_to_slot_or_del(C, slot_wear_id)
H.equip_to_slot_or_del(new /obj/item/device/pda(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/device/pda(H), slot_wear_pda)
if(locate(/obj/item/device/pda,H))
var/obj/item/device/pda/pda = locate(/obj/item/device/pda,H)
pda.owner = H.real_name
+19 -3
View File
@@ -12,11 +12,12 @@
/obj/machinery/computer/aifixer/attackby(I as obj, user as mob, params)
if(occupant && istype(I, /obj/item/weapon/screwdriver))
if(stat & (NOPOWER|BROKEN))
if(stat & BROKEN)
..()
if(stat & NOPOWER)
to_chat(user, "<span class='warning'>The screws on [name]'s screen won't budge.</span>")
else
to_chat(user, "<span class='warning'>The screws on [name]'s screen won't budge and it emits a warning beep.</span>")
return
to_chat(user, "<span class='warning'>The screws on [name]'s screen won't budge and it emits a warning beep!.</span>")
else
..()
@@ -135,3 +136,18 @@
to_chat(user, "<span class='boldannounce'>ERROR</span>: Reconstruction in progress.")
else if(!occupant)
to_chat(user, "<span class='boldannounce'>ERROR</span>: Unable to locate artificial intelligence.")
/obj/machinery/computer/aifixer/Destroy()
if(occupant)
occupant.ghostize()
qdel(occupant)
occupant = null
return ..()
/obj/machinery/computer/aifixer/emp_act()
if(occupant)
occupant.ghostize()
qdel(occupant)
occupant = null
else
..()
+1 -1
View File
@@ -458,7 +458,7 @@
// Book keeping!
log_admin("<span class='notice'>[key_name(M)] has entered a stasis pod.</span>")
message_admins("[key_name_admin(user)] has entered a stasis pod. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
message_admins("[key_name_admin(M)] has entered a stasis pod. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
//Despawning occurs when process() is called with an occupant without a client.
src.add_fingerprint(M)
+159 -93
View File
@@ -1,101 +1,127 @@
/obj/machinery/iv_drip
name = "\improper IV drip"
icon = 'icons/obj/iv_drip.dmi'
icon_state = "iv_drip"
anchored = 0
density = 1
var/mob/living/carbon/human/attached = null
var/mode = 1 // 1 is injecting, 0 is taking blood.
var/obj/item/weapon/reagent_containers/beaker = null
/obj/machinery/iv_drip/New()
..()
update_icon()
/obj/machinery/iv_drip/var/mob/living/carbon/human/attached = null
/obj/machinery/iv_drip/var/mode = 1 // 1 is injecting, 0 is taking blood.
/obj/machinery/iv_drip/var/obj/item/weapon/reagent_containers/beaker = null
/obj/machinery/iv_drip/Destroy()
attached = null
if(beaker)
qdel(beaker)
beaker = null
return ..()
/obj/machinery/iv_drip/update_icon()
if(src.attached)
icon_state = "hooked"
if(attached)
if(mode)
icon_state = "injecting"
else
icon_state = "donating"
else
icon_state = ""
if(mode)
icon_state = "injectidle"
else
icon_state = "donateidle"
overlays = null
overlays.Cut()
if(beaker)
var/datum/reagents/reagents = beaker.reagents
if(reagents.total_volume)
if(attached)
overlays += "beakeractive"
else
overlays += "beakeridle"
if(beaker.reagents.total_volume)
var/image/filling = image('icons/obj/iv_drip.dmi', src, "reagent")
var/percent = round((reagents.total_volume / beaker.volume) * 100)
var/percent = round((beaker.reagents.total_volume / beaker.volume) * 100)
switch(percent)
if(0 to 9) filling.icon_state = "reagent0"
if(10 to 24) filling.icon_state = "reagent10"
if(25 to 49) filling.icon_state = "reagent25"
if(50 to 74) filling.icon_state = "reagent50"
if(75 to 79) filling.icon_state = "reagent75"
if(80 to 90) filling.icon_state = "reagent80"
if(91 to INFINITY) filling.icon_state = "reagent100"
if(0 to 9)
filling.icon_state = "reagent0"
if(10 to 24)
filling.icon_state = "reagent10"
if(25 to 49)
filling.icon_state = "reagent25"
if(50 to 74)
filling.icon_state = "reagent50"
if(75 to 79)
filling.icon_state = "reagent75"
if(80 to 90)
filling.icon_state = "reagent80"
if(91 to INFINITY)
filling.icon_state = "reagent100"
filling.icon += mix_color_from_reagents(reagents.reagent_list)
filling.icon += mix_color_from_reagents(beaker.reagents.reagent_list)
overlays += filling
/obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location)
..()
if(!ishuman(usr) && !isrobot(usr))
return
var/turf/T = get_turf(src)
if(!usr in range(1, T))
/obj/machinery/iv_drip/MouseDrop(mob/living/target)
if(!ishuman(usr))
return
if(attached)
visible_message("[src.attached] is detached from \the [src]")
src.attached = null
src.update_icon()
visible_message("<span class='warning'>[attached] is detached from [src].</span>")
attached = null
update_icon()
return
if(in_range(src, usr) && ishuman(over_object) && get_dist(over_object, src) <= 1)
visible_message("[usr] attaches \the [src] to \the [over_object].")
src.attached = over_object
src.update_icon()
if(!target.dna)
to_chat(usr, "<span class='danger'>The drip beeps: Warning, incompatible creature!</span>")
return
/obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/reagent_containers))
if(!isnull(src.beaker))
to_chat(user, "There is already a reagent container loaded!")
return
if(user.drop_item())
W.forceMove(src)
src.beaker = W
to_chat(user, "You attach \the [W] to \the [src].")
src.update_icon()
return
if(Adjacent(target) && usr.Adjacent(target))
if(beaker)
usr.visible_message("<span class='warning'>[usr] attaches [src] to [target].</span>", "<span class='notice'>You attach [src] to [target].</span>")
attached = target
addAtProcessing()
update_icon()
else
to_chat(user, "\The [W] is stuck to you!")
to_chat(usr, "<span class='warning'>There's nothing attached to the IV drip!</span>")
/obj/machinery/iv_drip/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers))
if(beaker)
to_chat(user, "<span class='warning'>There is already a reagent container loaded!</span>")
return
if(!user.drop_item())
return
W.forceMove(src)
beaker = W
to_chat(user, "<span class='notice'>You attach [W] to [src].</span>")
update_icon()
else
return ..()
/obj/machinery/iv_drip/process()
//set background = 1
if(!attached)
return PROCESS_KILL
if(src.attached)
if(get_dist(src, attached) > 1 && isturf(attached.loc))
to_chat(attached, "<span class='userdanger'>The IV drip needle is ripped out of you!</span>")
attached.apply_damage(3, BRUTE, pick("r_arm", "l_arm"))
attached = null
update_icon()
return PROCESS_KILL
if(!(get_dist(src, src.attached) <= 1 && isturf(src.attached.loc)))
visible_message("The needle is ripped out of [src.attached], doesn't that hurt?")
src.attached:apply_damage(3, BRUTE, pick("r_arm", "l_arm"))
src.attached = null
src.update_icon()
return
if(src.attached && src.beaker)
if(beaker)
// Give blood
if(mode)
if(src.beaker.volume > 0)
var/transfer_amount = REAGENTS_METABOLISM
if(istype(src.beaker, /obj/item/weapon/reagent_containers/blood))
if(beaker.volume > 0)
var/transfer_amount = 5
if(istype(beaker, /obj/item/weapon/reagent_containers/blood))
// speed up transfer on blood packs
transfer_amount = 4
src.beaker.reagents.trans_to(src.attached, transfer_amount)
transfer_amount = 10
var/fraction = min(transfer_amount/beaker.volume, 1) //the fraction that is transfered of the total volume
beaker.reagents.reaction(attached, INGEST, fraction) //make reagents reacts, but don't spam messages
beaker.reagents.trans_to(attached, transfer_amount)
update_icon()
// Take blood
@@ -104,71 +130,111 @@
amount = min(amount, 4)
// If the beaker is full, ping
if(amount == 0)
if(prob(5)) visible_message("\The [src] pings.")
if(prob(5))
visible_message("[src] pings.")
return
var/mob/living/carbon/human/T = attached
if(!istype(T)) return
if(!ishuman(T))
return
if(!T.dna)
return
if(NOCLONE in T.mutations)
return
if(T.species && T.species.flags & NO_BLOOD)
if(T.species.flags & NO_BLOOD)
return
// If the human is losing too much blood, beep.
if(T.vessel.get_reagent_amount("blood") < BLOOD_VOLUME_SAFE) if(prob(5))
visible_message("\The [src] beeps loudly.")
var/datum/reagent/B = T.take_blood(beaker,amount)
if(B)
beaker.reagents.reagent_list |= B
beaker.reagents.update_total()
beaker.on_reagent_change()
beaker.reagents.handle_reactions()
if(T.species.exotic_blood)
T.vessel.trans_to(beaker, amount)
update_icon()
else
var/datum/reagent/B = T.take_blood(beaker, amount)
/obj/machinery/iv_drip/attack_hand(mob/living/carbon/user)
if(!istype(user))
if(B)
beaker.reagents.reagent_list |= B
beaker.reagents.update_total()
beaker.on_reagent_change()
beaker.reagents.handle_reactions()
update_icon()
// If attached is losing too much blood, beep.
var/blood_type = attached.get_blood_name()
if(T.vessel.get_reagent_amount(blood_type) < BLOOD_VOLUME_SAFE && prob(5))
visible_message("[src] beeps loudly.")
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
/obj/machinery/iv_drip/attack_hand(mob/user)
if(!ishuman(user))
return
if(src.beaker)
src.beaker.loc = get_turf(src)
src.beaker = null
if(attached)
visible_message("[attached] is detached from [src]")
attached = null
update_icon()
return
else if(beaker)
eject_beaker(user)
else
return ..()
toggle_mode()
/obj/machinery/iv_drip/AltClick(mob/user)
..()
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!Adjacent(user))
return
toggle_mode()
/obj/machinery/iv_drip/verb/toggle_mode()
set name = "Toggle Mode"
/obj/machinery/iv_drip/verb/eject_beaker(mob/user)
set category = "Object"
set name = "Remove IV Container"
set src in view(1)
if(!istype(usr, /mob/living))
to_chat(usr, "\red You can't do that.")
if(!iscarbon(usr))
to_chat(usr, "<span class='warning'>You can't do that!</span>")
return
if(usr.stat)
if(usr.incapacitated())
return
if(beaker)
beaker.forceMove(get_turf(src))
beaker = null
update_icon()
/obj/machinery/iv_drip/verb/toggle_mode()
set category = "Object"
set name = "Toggle Mode"
set src in view(1)
if(!iscarbon(usr))
to_chat(usr, "<span class='warning'>You can't do that!</span>")
return
if(usr.incapacitated())
return
mode = !mode
to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].")
update_icon()
/obj/machinery/iv_drip/examine(mob/user)
..(user)
if(!(user in view(2)) && usr != src.loc) return
if(!(user in view(2)) && user != loc)
return
to_chat(usr, "The IV drip is [mode ? "injecting" : "taking blood"].")
to_chat(user, "The IV drip is [mode ? "injecting" : "taking blood"].")
if(beaker)
if(beaker.reagents && beaker.reagents.reagent_list.len)
to_chat(user, "\blue Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.")
to_chat(user, "<span class='notice'>Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.</span>")
else
to_chat(user, "\blue Attached is an empty [beaker].")
to_chat(user, "<span class='notice'>Attached is an empty [beaker].</span>")
else
to_chat(user, "\blue No chemicals are attached.")
to_chat(user, "<span class='notice'>No chemicals are attached.</span>")
to_chat(user, "\blue [attached ? attached : "No one"] is attached.")
to_chat(user, "<span class='notice'>[attached ? attached : "No one"] is attached.</span>")
+1 -2
View File
@@ -361,10 +361,9 @@ Class Procs:
return ..()
/obj/machinery/CheckParts()
/obj/machinery/CheckParts(list/parts_list)
..()
RefreshParts()
return
/obj/machinery/proc/RefreshParts() //Placeholder proc for machines that are built using frames.
return
+2 -2
View File
@@ -893,7 +893,7 @@
products = list(/obj/item/weapon/reagent_containers/glass/bottle/charcoal = 4,/obj/item/weapon/reagent_containers/glass/bottle/morphine = 4,/obj/item/weapon/reagent_containers/glass/bottle/ether = 4,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine = 4,
/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,/obj/item/weapon/reagent_containers/syringe/antiviral = 6,/obj/item/weapon/reagent_containers/syringe/insulin = 4,
/obj/item/weapon/reagent_containers/syringe = 12,/obj/item/device/healthanalyzer = 5,/obj/item/device/healthupgrade = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4,
/obj/item/weapon/reagent_containers/dropper = 2,/obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3,
/obj/item/weapon/reagent_containers/dropper = 2,/obj/item/stack/medical/bruise_pack/advanced = 3, /obj/item/stack/medical/ointment/advanced = 3,
/obj/item/stack/medical/bruise_pack = 3,/obj/item/stack/medical/splint = 2, /obj/item/device/sensor_device = 2)
contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/pancuronium = 1,/obj/item/weapon/reagent_containers/glass/bottle/sulfonal = 1)
@@ -947,7 +947,7 @@
icon_deny = "sec-deny"
req_access_txt = "1"
products = list(/obj/item/weapon/restraints/handcuffs = 8,/obj/item/weapon/restraints/handcuffs/cable/zipties = 8,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/flash = 5,
/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12,/obj/item/weapon/storage/box/evidence = 6,/obj/item/device/flashlight/seclite = 4)
/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12,/obj/item/weapon/storage/box/evidence = 6,/obj/item/device/flashlight/seclite = 4,/obj/item/weapon/restraints/legcuffs/bola/energy = 7)
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/fancy/donut_box = 2,/obj/item/device/hailer = 5)
/obj/machinery/vending/hydronutrients
+7 -8
View File
@@ -413,10 +413,10 @@
do_after_cooldown()
return
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas
name = "PCMK-6 Bolas Launcher"
icon_state = "mecha_bolas"
projectile = /obj/item/weapon/legcuffs/bolas
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola
name = "PCMK-6 Bola Launcher"
icon_state = "mecha_bola"
projectile = /obj/item/weapon/restraints/legcuffs/bola
fire_sound = 'sound/weapons/whip.ogg'
projectiles = 10
missile_speed = 1
@@ -424,19 +424,18 @@
projectile_energy_cost = 50
equip_cooldown = 10
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas/can_attach(obj/mecha/combat/gygax/M as obj)
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola/can_attach(obj/mecha/combat/gygax/M as obj)
if(..())
if(istype(M))
return 1
return 0
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas/action(target, params)
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola/action(target, params)
if(!action_checks(target))
return
set_ready_state(0)
var/obj/item/weapon/legcuffs/bolas/M = new projectile(chassis.loc)
var/obj/item/weapon/restraints/legcuffs/bola/M = new projectile(chassis.loc)
playsound(chassis, fire_sound, 50, 1)
M.thrown_from = src
M.throw_at(target, missile_range, missile_speed)
projectiles--
log_message("Fired from [name], targeting [target].")
+9 -8
View File
@@ -158,6 +158,7 @@ var/global/list/PDA_Manifest = list()
var/name = sanitize(t.fields["name"])
var/rank = sanitize(t.fields["rank"])
var/real_rank = t.fields["real_rank"]
var/isactive = t.fields["p_stat"]
var/department = 0
var/depthead = 0 // Department Heads will be placed at the top of their lists.
@@ -165,44 +166,44 @@ var/global/list/PDA_Manifest = list()
heads[++heads.len] = list("name" = name, "rank" = rank, "active" = isactive)
department = 1
depthead = 1
if(rank=="Captain" && heads.len != 1)
heads.Swap(1,heads.len)
if(rank == "Captain" && heads.len != 1)
heads.Swap(1, heads.len)
if(real_rank in security_positions)
sec[++sec.len] = list("name" = name, "rank" = rank, "active" = isactive)
department = 1
if(depthead && sec.len != 1)
sec.Swap(1,sec.len)
sec.Swap(1, sec.len)
if(real_rank in engineering_positions)
eng[++eng.len] = list("name" = name, "rank" = rank, "active" = isactive)
department = 1
if(depthead && eng.len != 1)
eng.Swap(1,eng.len)
eng.Swap(1, eng.len)
if(real_rank in medical_positions)
med[++med.len] = list("name" = name, "rank" = rank, "active" = isactive)
department = 1
if(depthead && med.len != 1)
med.Swap(1,med.len)
med.Swap(1, med.len)
if(real_rank in science_positions)
sci[++sci.len] = list("name" = name, "rank" = rank, "active" = isactive)
department = 1
if(depthead && sci.len != 1)
sci.Swap(1,sci.len)
sci.Swap(1, sci.len)
if(real_rank in service_positions)
ser[++ser.len] = list("name" = name, "rank" = rank, "active" = isactive)
department = 1
if(depthead && ser.len != 1)
ser.Swap(1,ser.len)
ser.Swap(1, ser.len)
if(real_rank in supply_positions)
sup[++sup.len] = list("name" = name, "rank" = rank, "active" = isactive)
department = 1
if(depthead && sup.len != 1)
sup.Swap(1,sup.len)
sup.Swap(1, sup.len)
if(real_rank in nonhuman_positions)
bot[++bot.len] = list("name" = name, "rank" = rank, "active" = isactive)
@@ -82,7 +82,7 @@
/obj/item/device/t_scanner = 60,
/obj/item/stack/cable_coil = 40,
/obj/item/stack/cable_coil{amount = 5} = 60,
/obj/item/stack/medical/advanced/bruise_pack = 10,
/obj/item/stack/medical/bruise_pack/advanced = 10,
/obj/item/stack/rods{amount = 10} = 80,
/obj/item/stack/rods{amount = 23} = 20,
/obj/item/stack/rods{amount = 50} = 10,
+2
View File
@@ -1,3 +1,5 @@
var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.dmi', "icon_state" = "fire")
/obj/item
name = "item"
icon = 'icons/obj/items.dmi'
+101 -132
View File
@@ -5,14 +5,14 @@
amount = 5
max_amount = 5
w_class = 1
throw_speed = 4
throw_range = 20
throw_speed = 3
throw_range = 7
var/heal_brute = 0
var/heal_burn = 0
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
/obj/item/stack/medical/attack(mob/living/carbon/M, mob/user)
if(!istype(M))
to_chat(user, "<span class='danger'>\The [src] cannot be applied to [M]!</span>")
to_chat(user, "<span class='danger'>[src] cannot be applied to [M]!</span>")
return 1
if(!user.IsAdvancedToolUser())
@@ -40,12 +40,15 @@
H.UpdateDamageIcon()
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
user.visible_message("<span class='notice'>[M] has been applied with [src] by [user].</span>","<span class='notice'>You apply \the [src] to [M].</span>")
M.heal_organ_damage(heal_brute/2, heal_burn/2)
user.visible_message("<span class='notice'>[M] has been applied with [src] by [user].</span>", \
"<span class='notice'>You apply [src] to [M].</span>")
use(1)
M.updatehealth()
//Bruise Packs//
/obj/item/stack/medical/bruise_pack
name = "roll of gauze"
singular_name = "gauze length"
@@ -53,94 +56,7 @@
icon_state = "gauze"
origin_tech = "biotech=1"
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
if(..())
return 1
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
if(!affecting.bandage())
to_chat(user, "\red The wounds on [M]'s [affecting.name] have already been bandaged.")
return 1
else
for(var/datum/wound/W in affecting.wounds)
if(W.internal)
continue
if(W.current_stage <= W.max_bleeding_stage)
user.visible_message( "\blue [user] bandages \the [W.desc] on [M]'s [affecting.name].", \
"\blue You bandage \the [W.desc] on [M]'s [affecting.name]." )
else if(istype(W,/datum/wound/bruise))
user.visible_message( "\blue [user] places a bruise patch over \the [W.desc] on [M]'s [affecting.name].", \
"\blue You place a bruise patch over \the [W.desc] on [M]'s [affecting.name]." )
else
user.visible_message( "\blue [user] places a bandaid over \the [W.desc] on [M]'s [affecting.name].", \
"\blue You place a bandaid over \the [W.desc] on [M]'s [affecting.name]." )
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
use(1)
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
use(1)
/obj/item/stack/medical/ointment
name = "ointment"
desc = "Used to treat those nasty burns."
gender = PLURAL
singular_name = "ointment"
icon_state = "ointment"
heal_burn = 1
origin_tech = "biotech=1"
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
if(..())
return 1
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
if(!affecting.salve())
to_chat(user, "\red The wounds on [M]'s [affecting.name] have already been salved.")
return 1
else
user.visible_message( "\blue [user] salves the wounds on [M]'s [affecting.name].", \
"\blue You salve the wounds on [M]'s [affecting.name]." )
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
use(1)
else
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than some ointment!</span>")
/obj/item/stack/medical/bruise_pack/comfrey
name = "\improper Comfrey leaf"
singular_name = "Comfrey leaf"
desc = "A soft leaf that is rubbed on bruises."
icon = 'icons/obj/hydroponics_products.dmi'
icon_state = "alien3-product"
color = "#378C61"
heal_brute = 7
/obj/item/stack/medical/ointment/aloe
name = "\improper Aloe Vera leaf"
singular_name = "Aloe Vera leaf"
desc = "A cold leaf that is rubbed on burns."
icon = 'icons/obj/hydroponics_products.dmi'
icon_state = "ambrosia-product"
color = "#4CC5C7"
heal_burn = 7
/obj/item/stack/medical/advanced/bruise_pack
name = "advanced trauma kit"
singular_name = "advanced trauma kit"
desc = "An advanced trauma kit for severe injuries."
icon_state = "traumakit"
heal_brute = 12
origin_tech = "biotech=1"
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M, mob/user)
if(..())
return 1
@@ -153,38 +69,49 @@
var/disinfected = affecting.disinfect()
if(!(bandaged || disinfected))
to_chat(user, "\red The wounds on [M]'s [affecting.name] have already been treated.")
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
return 1
else
for(var/datum/wound/W in affecting.wounds)
if(W.internal)
continue
if(W.current_stage <= W.max_bleeding_stage)
user.visible_message( "\blue [user] cleans \the [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \
"\blue You clean and seal \the [W.desc] on [M]'s [affecting.name]." )
//H.add_side_effect("Itch")
user.visible_message("<span class='notice'>[user] bandages \the [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You bandage \the [W.desc] on [M]'s [affecting.name].</span>" )
else if(istype(W,/datum/wound/bruise))
user.visible_message( "\blue [user] places a medicine patch over \the [W.desc] on [M]'s [affecting.name].", \
"\blue You place a medicine patch over \the [W.desc] on [M]'s [affecting.name]." )
user.visible_message("<span class='notice'>[user] places a bruise patch over \the [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You place a bruise patch over \the [W.desc] on [M]'s [affecting.name].</span>" )
else
user.visible_message( "\blue [user] smears some bioglue over [W.desc] on [M]'s [affecting.name].", \
"\blue You smear some bioglue over [W.desc] on [M]'s [affecting.name]." )
user.visible_message("<span class='notice'>[user] places a bandaid over \the [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You place a bandaid over \the [W.desc] on [M]'s [affecting.name].</span>" )
if(bandaged)
affecting.heal_damage(heal_brute,0)
affecting.heal_damage(heal_brute, heal_burn)
use(1)
else
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
to_chat(user, "<span class='notice'>[affecting] is cut open, you'll need more than a bandage!</span>")
/obj/item/stack/medical/advanced/ointment
name = "advanced burn kit"
singular_name = "advanced burn kit"
desc = "An advanced treatment kit for severe burns."
icon_state = "burnkit"
heal_burn = 12
/obj/item/stack/medical/bruise_pack/advanced
name = "advanced trauma kit"
singular_name = "advanced trauma kit"
desc = "An advanced trauma kit for severe injuries."
icon_state = "traumakit"
heal_brute = 12
//Ointment//
/obj/item/stack/medical/ointment
name = "ointment"
desc = "Used to treat those nasty burns."
gender = PLURAL
singular_name = "ointment"
icon_state = "ointment"
origin_tech = "biotech=1"
/obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M, mob/user)
if(..())
return 1
@@ -194,15 +121,52 @@
if(affecting.open == 0)
if(!affecting.salve())
to_chat(user, "\red The wounds on [M]'s [affecting.name] have already been salved.")
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
return 1
else
user.visible_message( "\blue [user] covers the wounds on [M]'s [affecting.name] with regenerative membrane.", \
"\blue You cover the wounds on [M]'s [affecting.name] with regenerative membrane." )
affecting.heal_damage(0,heal_burn)
user.visible_message("<span class='notice'>[user] salves the wounds on [M]'s [affecting.name].", \
"<span class='notice'>You salve the wounds on [M]'s [affecting.name].</span>" )
affecting.heal_damage(heal_brute, heal_burn)
use(1)
else
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
to_chat(user, "<span class='notice'>[affecting] is cut open, you'll need more than some ointment!</span>")
/obj/item/stack/medical/ointment/advanced
name = "advanced burn kit"
singular_name = "advanced burn kit"
desc = "An advanced treatment kit for severe burns."
icon_state = "burnkit"
heal_burn = 12
//Medical Herbs//
/obj/item/stack/medical/bruise_pack/comfrey
name = "\improper Comfrey leaf"
singular_name = "Comfrey leaf"
desc = "A soft leaf that is rubbed on bruises."
icon = 'icons/obj/hydroponics_products.dmi'
icon_state = "alien3-product"
color = "#378C61"
heal_brute = 7
/obj/item/stack/medical/ointment/aloe
name = "\improper Aloe Vera leaf"
singular_name = "Aloe Vera leaf"
desc = "A cold leaf that is rubbed on burns."
icon = 'icons/obj/hydroponics_products.dmi'
icon_state = "ambrosia-product"
color = "#4CC5C7"
heal_burn = 7
//Splits//
/obj/item/stack/medical/splint
name = "medical splints"
@@ -211,11 +175,7 @@
amount = 5
max_amount = 5
/obj/item/stack/medical/splint/single
amount = 1
/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/user as mob)
/obj/item/stack/medical/splint/attack(mob/living/carbon/M, mob/user)
if(..())
return 1
@@ -224,30 +184,39 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
var/limb = affecting.name
if(!(affecting.limb_name in list("l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot")))
to_chat(user, "\red You can't apply a splint there!")
to_chat(user, "<span class='danger'>You can't apply a splint there!</span>")
return
if(affecting.status & ORGAN_SPLINTED)
to_chat(user, "\red [M]'s [limb] is already splinted!")
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
if(alert(user, "Would you like to remove the splint from [M]'s [limb]?", "Removing.", "Yes", "No") == "Yes")
affecting.status &= ~ORGAN_SPLINTED
to_chat(user, "<span class='notice'>You remove the splint from [M]'s [limb].")
to_chat(user, "<span class='notice'>You remove the splint from [M]'s [limb].</span>")
return
if(M != user)
user.visible_message("\red [user] starts to apply \the [src] to [M]'s [limb].", "\red You start to apply \the [src] to [M]'s [limb].", "\red You hear something being wrapped.")
user.visible_message("<span class='notice'>[user] starts to apply [src] to [M]'s [limb].</span>", \
"<span class='notice'>You start to apply [src] to [M]'s [limb].</span>", \
"<span class='notice'>You hear something being wrapped.</span>")
else
if((!user.hand && affecting.limb_name in list("r_arm", "r_hand")) || (user.hand && affecting.limb_name in list("l_arm", "l_hand")))
to_chat(user, "\red You can't apply a splint to the arm you're using!")
to_chat(user, "<span class='danger'>You can't apply a splint to the arm you're using!</span>")
return
user.visible_message("\red [user] starts to apply \the [src] to their [limb].", "\red You start to apply \the [src] to your [limb].", "\red You hear something being wrapped.")
user.visible_message("<span class='notice'>[user] starts to apply [src] to their [limb].</span>", \
"<span class='notice'>You start to apply [src] to your [limb].</span>", \
"<span class='notice'>You hear something being wrapped.</span>")
if(do_after(user, 50, target = M))
if(M != user)
user.visible_message("\red [user] finishes applying \the [src] to [M]'s [limb].", "\red You finish applying \the [src] to [M]'s [limb].", "\red You hear something being wrapped.")
user.visible_message("<span class='notice'>[user] finishes applying [src] to [M]'s [limb].</span>", \
"<span class='notice'>You finish applying [src] to [M]'s [limb].</span>", \
"<span class='notice'>You hear something being wrapped.</span>")
else
if(prob(25))
user.visible_message("\red [user] successfully applies \the [src] to their [limb].", "\red You successfully apply \the [src] to your [limb].", "\red You hear something being wrapped.")
user.visible_message("<span class='notice'>[user] successfully applies [src] to their [limb].</span>", \
"<span class='notice'>You successfully apply [src] to your [limb].</span>", \
"<span class='notice'>You hear something being wrapped.</span>")
else
user.visible_message("\red [user] fumbles \the [src].", "\red You fumble \the [src].", "\red You hear something being wrapped.")
user.visible_message("<span class='warning'>[user] fumbles [src].</span>",
"<span class='warning'>You fumble [src].</span>",
"<span class='warning'>You hear something being wrapped.</span>")
return
affecting.status |= ORGAN_SPLINTED
use(1)
return
@@ -184,7 +184,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
new/datum/stack_recipe("folder", /obj/item/weapon/folder), \
new/datum/stack_recipe("cardboard tube", /obj/item/weapon/c_tube), \
new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4), \
new/datum/stack_recipe("cardboard box", /obj/structure/closet/cardboard, 4), \
)
/obj/item/stack/sheet/cardboard //BubbleWrap
+1 -1
View File
@@ -1372,7 +1372,7 @@ obj/item/toy/cards/deck/syndicate/black
is_empty = 1
playsound(src, 'sound/weapons/Gunshot.ogg', 50, 1)
user.visible_message("<span class='danger'>The [src] goes off!</span>")
M.apply_damage(200, "brute", "head", used_weapon = "Self-inflicted gunshot would to the head.", sharp=1)
M.apply_damage(200, BRUTE, "head", sharp =1, used_weapon = "Self-inflicted gunshot would to the head.")
M.death()
else
user.visible_message("<span class='danger'>[user] lowers the [src] from their head.</span>")
+25 -1
View File
@@ -105,4 +105,28 @@
desc = "Damn son, where'd you find this?"
icon_state = "air_horn"
honk_sound = 'sound/items/AirHorn2.ogg'
cooldowntime = 50
cooldowntime = 50
/obj/item/weapon/bikehorn/golden
name = "golden bike horn"
desc = "Golden? Clearly, its made with bananium! Honk!"
icon_state = "gold_horn"
item_state = "gold_horn"
/obj/item/weapon/bikehorn/golden/attack()
flip_mobs()
return ..()
/obj/item/weapon/bikehorn/golden/attack_self(mob/user)
flip_mobs()
..()
/obj/item/weapon/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user)
if(!spam_flag)
var/turf/T = get_turf(src)
for(M in ohearers(7, T))
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs) || H.ear_deaf)
continue
M.emote("flip")
+1 -1
View File
@@ -69,7 +69,7 @@
ratio = Ceiling(ratio*4) * 25
overlays += "[icon_state]-charge[ratio]"
/obj/item/weapon/defibrillator/CheckParts()
/obj/item/weapon/defibrillator/CheckParts(list/parts_list)
..()
bcell = locate(/obj/item/weapon/stock_parts/cell) in contents
update_icon()
@@ -164,10 +164,13 @@
update_icon()
return
/obj/item/weapon/flamethrower/CheckParts()
/obj/item/weapon/flamethrower/CheckParts(list/parts_list)
..()
weldtool = locate(/obj/item/weapon/weldingtool) in contents
igniter = locate(/obj/item/device/assembly/igniter) in contents
weldtool.status = 0
igniter.secured = 0
status = 1
update_icon()
//Called from turf.dm turf/dblclick
@@ -93,7 +93,7 @@
else
range = pick(2,2,2,3,3,3,4)
/obj/item/weapon/grenade/iedcasing/CheckParts()
/obj/item/weapon/grenade/iedcasing/CheckParts(list/parts_list)
..()
var/obj/item/weapon/reagent_containers/food/drinks/cans/can = locate() in contents
if(can)
+17 -3
View File
@@ -65,8 +65,8 @@
/obj/item/weapon/restraints/handcuffs/cable
name = "cable restraints"
desc = "Looks like some cables tied together. Could be used to tie something up."
icon_state = "cuff_white"
item_state = "coil_red"
icon_state = "cuff_red"
materials = list(MAT_METAL=150, MAT_GLASS=75)
breakouttime = 300 //Deciseconds = 30s
cuffsound = 'sound/weapons/cablecuff.ogg'
@@ -114,14 +114,28 @@
to_chat(user, "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>")
qdel(src)
else
to_chat(user, "<span class='warning'>You need one rod to make a wired rod.</span>")
to_chat(user, "<span class='warning'>You need one rod to make a wired rod!</span>")
else if(istype(I, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/M = I
if(M.amount < 6)
to_chat(user, "<span class='warning'>You need at least six metal sheets to make good enough weights!</span>")
return
to_chat(user, "<span class='notice'>You begin to apply [I] to [src]...</span>")
if(do_after(user, 35, target = src))
var/obj/item/weapon/restraints/legcuffs/bola/S = new /obj/item/weapon/restraints/legcuffs/bola
M.use(6)
user.put_in_hands(S)
to_chat(user, "<span class='notice'>You make some weights out of [I] and tie them to [src].</span>")
if(!remove_item_from_storage(user))
user.unEquip(src)
qdel(src)
/obj/item/weapon/restraints/handcuffs/cable/zipties
name = "zipties"
desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use."
icon_state = "cuff_white"
breakouttime = 450 //Deciseconds = 45s
materials = list()
trashtype = /obj/item/weapon/restraints/handcuffs/cable/zipties/used
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
+80 -95
View File
@@ -15,12 +15,17 @@
name = "bear trap"
throw_speed = 1
throw_range = 1
icon_state = "beartrap0"
icon_state = "beartrap"
desc = "A trap used to catch bears and other legged creatures."
var/armed = 0
var/trap_damage = 20
var/obj/item/weapon/grenade/iedcasing/IED = null
var/obj/item/device/assembly/signaler/sig = null
/obj/item/weapon/restraints/legcuffs/beartrap/New()
..()
icon_state = "[initial(icon_state)][armed]"
/obj/item/weapon/restraints/legcuffs/beartrap/Destroy()
if(IED)
qdel(IED)
@@ -35,14 +40,14 @@
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return (BRUTELOSS)
/obj/item/weapon/restraints/legcuffs/beartrap/attack_self(mob/user as mob)
/obj/item/weapon/restraints/legcuffs/beartrap/attack_self(mob/user)
..()
if(ishuman(user) && !user.stat && !user.restrained())
armed = !armed
icon_state = "beartrap[armed]"
icon_state = "[initial(icon_state)][armed]"
to_chat(user, "<span class='notice'>[src] is now [armed ? "armed" : "disarmed"]</span>")
/obj/item/weapon/restraints/legcuffs/beartrap/attackby(var/obj/item/I, mob/user as mob) //Let's get explosive.
/obj/item/weapon/restraints/legcuffs/beartrap/attackby(obj/item/I, mob/user) //Let's get explosive.
if(istype(I, /obj/item/weapon/grenade/iedcasing))
if(IED)
to_chat(user, "<span class='warning'>This beartrap already has an IED hooked up to it!</span>")
@@ -101,7 +106,7 @@
if( (iscarbon(AM) || isanimal(AM)) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator))
var/mob/living/L = AM
armed = 0
icon_state = "beartrap0"
icon_state = "[initial(icon_state)][armed]"
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
L.visible_message("<span class='danger'>[L] triggers \the [src].</span>", \
"<span class='userdanger'>You trigger \the [src]!</span>")
@@ -122,105 +127,85 @@
if(ishuman(AM))
var/mob/living/carbon/H = AM
if(H.lying)
H.apply_damage(20,BRUTE,"chest")
H.apply_damage(trap_damage, BRUTE,"chest")
else
H.apply_damage(20,BRUTE,(pick("l_leg", "r_leg")))
H.apply_damage(trap_damage, BRUTE,(pick("l_leg", "r_leg")))
if(!H.legcuffed) //beartrap can't cuff you leg if there's already a beartrap or legcuffs.
H.legcuffed = src
src.loc = H
H.update_inv_legcuffed(0)
forceMove(H)
H.update_inv_legcuffed()
feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart.
else
L.apply_damage(20,BRUTE)
L.apply_damage(trap_damage, BRUTE)
..()
/obj/item/weapon/restraints/legcuffs/beartrap/energy
name = "energy snare"
armed = 1
icon_state = "e_snare"
trap_damage = 0
/obj/item/weapon/legcuffs/bolas
name = "bolas"
desc = "An entangling bolas. Throw at your foes to trip them and prevent them from running."
/obj/item/weapon/restraints/legcuffs/beartrap/energy/New()
..()
spawn(100)
if(!istype(loc, /mob))
var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread
sparks.set_up(1, 1, src)
sparks.start()
qdel(src)
/obj/item/weapon/restraints/legcuffs/beartrap/energy/dropped()
..()
qdel(src)
/obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user)
Crossed(user) //honk
/obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg
breakouttime = 20 // Cyborgs shouldn't have a strong restraint
/obj/item/weapon/restraints/legcuffs/bola
name = "bola"
desc = "A restraining device designed to be thrown at the target. Upon connecting with said target, it will wrap around their legs, making it difficult for them to move quickly."
icon_state = "bola"
breakouttime = 35//easy to apply, easy to break out of
gender = NEUTER
icon = 'icons/obj/weapons.dmi'
icon_state = "bolas"
slot_flags = SLOT_BELT
throwforce = 2
origin_tech = "engineering=3;combat=1"
var/weaken = 0
/obj/item/weapon/restraints/legcuffs/bola/throw_impact(atom/hit_atom)
if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed,
return//abort
var/mob/living/carbon/C = hit_atom
if(!C.legcuffed)
visible_message("<span class='danger'>[src] ensnares [C]!</span>")
C.legcuffed = src
forceMove(C)
C.update_inv_legcuffed()
feedback_add_details("handcuffs","B")
to_chat(C, "<span class='userdanger'>[src] ensnares you!</span>")
C.Weaken(weaken)
/obj/item/weapon/restraints/legcuffs/bola/tactical //traitor variant
name = "reinforced bola"
desc = "A strong bola, made with a long steel chain. It looks heavy, enough so that it could trip somebody."
icon_state = "bola_r"
breakouttime = 70
origin_tech = "engineering=4;combat=3"
weaken = 1
/obj/item/weapon/restraints/legcuffs/bola/energy //For Security
name = "energy bola"
desc = "A specialized hard-light bola designed to ensnare fleeing criminals and aid in arrests."
icon_state = "ebola"
hitsound = 'sound/weapons/tase.ogg'
w_class = 2
origin_tech = "materials=1"
attack_verb = list("lashed", "bludgeoned", "whipped")
force = 4
breakouttime = 50 //10 seconds
throw_speed = 1
throw_range = 10
var/dispenser = 0
var/throw_sound = 'sound/weapons/whip.ogg'
var/trip_prob = 60
var/thrown_from
breakouttime = 60
/obj/item/weapon/legcuffs/bolas/suicide_act(mob/living/user)
to_chat(viewers(user), "<span class='danger'>[user] is wrapping the [src.name] around \his neck! It looks like \he's trying to commit suicide.</span>")
return(OXYLOSS)
/obj/item/weapon/legcuffs/bolas/throw_at(var/atom/A, throw_range, throw_speed)
if(usr && !istype(thrown_from, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas)) //if there is a user, but not a mech
if(istype(usr, /mob/living/carbon/human)) //if the user is human
var/mob/living/carbon/human/H = usr
if((CLUMSY in H.mutations) && prob(50))
to_chat(H, "<span class='warning'>You smack yourself in the face while swinging the [src]!</span>")
H.Stun(2)
H.drop_item(src)
return
if(!thrown_from && usr) //if something hasn't set it already (like a mech does when it launches)
thrown_from = usr //then the user must have thrown it
if(!istype(thrown_from, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bolas))
playsound(src, throw_sound, 20, 1) //because mechs play the sound anyways
var/turf/target = get_turf(A)
var/atom/movable/adjtarget = new /atom/movable
var/xadjust = 0
var/yadjust = 0
var/scaler = 0 //used to changed the normalised vector to the proper size
scaler = throw_range / max(abs(target.x - src.x), abs(target.y - src.y)) //whichever is larger magnitude is what we normalise to
if(target.x - src.x != 0) //just to avoid fucking with math for no reason
xadjust = round((target.x - src.x) * scaler) //normalised vector is now scaled up to throw_range
adjtarget.x = src.x + xadjust //the new target at max range
else
adjtarget.x = src.x
if(target.y - src.y != 0)
yadjust = round((target.y - src.y) * scaler)
adjtarget.y = src.y + yadjust
else
adjtarget.y = src.y
// log_admin("Adjusted target of [adjtarget.x] and [adjtarget.y], adjusted with [xadjust] and [yadjust] from [scaler]")
..(get_turf(adjtarget), throw_range, throw_speed)
thrown_from = null
/obj/item/weapon/legcuffs/bolas/throw_impact(atom/hit_atom) //Pomf was right, I was wrong - Comic
if(isliving(hit_atom) && hit_atom != usr) //if the target is a live creature other than the thrower
var/mob/living/M = hit_atom
if(ishuman(M)) //if they're a human species
var/mob/living/carbon/human/H = M
if(H.legcuffed) //if the target is already legcuffed (has to be walking)
throw_failed()
return
if(prob(trip_prob)) //this probability is up for change and mostly a placeholder - Comic
step(H, H.dir)
H.visible_message("<span class='warning'>[H] was tripped by the bolas!</span>","<span class='warning'>Your legs have been tangled!</span>");
H.Stun(2) //used instead of setting damage in vars to avoid non-human targets being affected
H.Weaken(4)
H.legcuffed = src //applies legcuff properties inherited through legcuffs
src.loc = H
H.update_inv_legcuffed()
if(!H.legcuffed) //in case it didn't happen, we need a safety net
throw_failed()
else
M.Stun(2) //minor stun damage to anything not human
throw_failed()
return
/obj/item/weapon/legcuffs/bolas/proc/throw_failed() //called when the throw doesn't entangle
//log_admin("Logged as [thrown_from]")
if(!thrown_from || !istype(thrown_from, /mob/living)) //in essence, if we don't know whether a person threw it
qdel(src) //destroy it, to stop infinite bolases
/obj/item/weapon/legcuffs/bolas/Bump()
..()
throw_failed() //allows a mech bolas to be destroyed
/obj/item/weapon/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom)
if(iscarbon(hit_atom))
var/obj/item/weapon/restraints/legcuffs/beartrap/B = new /obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
B.Crossed(hit_atom)
qdel(src)
..()
+41 -206
View File
@@ -1,7 +1,5 @@
//NEVER USE THIS IT SUX -PETETHEGOAT
var/global/list/cached_icons = list()
/obj/item/weapon/reagent_containers/glass/paint
desc = "It's a paint bucket."
name = "paint bucket"
@@ -10,220 +8,57 @@ var/global/list/cached_icons = list()
item_state = "paintcan"
materials = list(MAT_METAL=200)
w_class = 3
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(10,20,30,50,70)
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(5,10,20,30,50,70)
volume = 70
flags = OPENCONTAINER
var/paint_type = ""
afterattack(turf/simulated/target, mob/user, proximity)
if(!proximity) return
if(istype(target) && reagents.total_volume > 5)
for(var/mob/O in viewers(user))
O.show_message("\red \The [target] has been splashed with something by [user]!", 1)
spawn(5)
reagents.reaction(target, TOUCH)
reagents.remove_any(5)
else
return ..()
New()
if(paint_type == "remover")
name = "paint remover bucket"
else if(paint_type && lentext(paint_type) > 0)
name = paint_type + " " + name
..()
reagents.add_reagent("paint_[paint_type]", volume)
red
icon_state = "paint_red"
paint_type = "red"
green
icon_state = "paint_green"
paint_type = "green"
blue
icon_state = "paint_blue"
paint_type = "blue"
yellow
icon_state = "paint_yellow"
paint_type = "yellow"
violet
icon_state = "paint_violet"
paint_type = "violet"
black
icon_state = "paint_black"
paint_type = "black"
white
icon_state = "paint_white"
paint_type = "white"
remover
paint_type = "remover"
/*
/obj/item/weapon/paint
name = "Paint Can"
desc = "Used to recolor floors and walls. Can not be removed by the janitor."
icon = 'icons/obj/items.dmi'
icon_state = "paint_neutral"
color = "FFFFFF"
item_state = "paintcan"
w_class = 3
/obj/item/weapon/paint/red
name = "Red paint"
color = "FF0000"
icon_state = "paint_red"
/obj/item/weapon/paint/green
name = "Green paint"
color = "00FF00"
icon_state = "paint_green"
/obj/item/weapon/paint/blue
name = "Blue paint"
color = "0000FF"
icon_state = "paint_blue"
/obj/item/weapon/paint/yellow
name = "Yellow paint"
color = "FFFF00"
icon_state = "paint_yellow"
/obj/item/weapon/paint/violet
name = "Violet paint"
color = "FF00FF"
icon_state = "paint_violet"
/obj/item/weapon/paint/black
name = "Black paint"
color = "333333"
icon_state = "paint_black"
/obj/item/weapon/paint/white
name = "White paint"
color = "FFFFFF"
icon_state = "paint_white"
/obj/item/weapon/paint/anycolor
name = "Any color"
icon_state = "paint_neutral"
attack_self(mob/user as mob)
var/t1 = input(user, "Please select a color:", "Locking Computer", null) in list( "red", "blue", "green", "yellow", "black", "white")
if((user.get_active_hand() != src || user.stat || user.restrained()))
return
switch(t1)
if("red")
color = "FF0000"
if("blue")
color = "0000FF"
if("green")
color = "00FF00"
if("yellow")
color = "FFFF00"
if("violet")
color = "FF00FF"
if("white")
color = "FFFFFF"
if("black")
color = "333333"
icon_state = "paint_[t1]"
add_fingerprint(user)
/obj/item/weapon/reagent_containers/glass/paint/afterattack(turf/simulated/target, mob/user, proximity)
if(!proximity)
return
/obj/item/weapon/paint/afterattack(turf/target, mob/user as mob, proximity)
if(!proximity) return
if(!istype(target) || istype(target, /turf/space))
return
var/ind = "[initial(target.icon)][color]"
if(!cached_icons[ind])
var/icon/overlay = new/icon(initial(target.icon))
overlay.Blend("#[color]",ICON_MULTIPLY)
overlay.SetIntensity(1.4)
target.icon = overlay
cached_icons[ind] = target.icon
if(istype(target) && reagents.total_volume >= 5)
user.visible_message("<span class='warning'>[target] has been splashed with something by [user]!</span>")
spawn(5)
reagents.reaction(target, TOUCH)
reagents.remove_any(5)
else
target.icon = cached_icons[ind]
return
return ..()
/obj/item/weapon/paint/paint_remover
name = "Paint remover"
icon_state = "paint_neutral"
/obj/item/weapon/reagent_containers/glass/paint/red
name = "red paint bucket"
icon_state = "paint_red"
list_reagents = list("paint_red" = 70)
afterattack(turf/target, mob/user as mob)
if(istype(target) && target.icon != initial(target.icon))
target.icon = initial(target.icon)
return
*/
/obj/item/weapon/reagent_containers/glass/paint/green
name = "green paint bucket"
icon_state = "paint_green"
list_reagents = list("paint_green" = 70)
datum/reagent/paint
name = "Paint"
id = "paint_"
description = "Floor paint is used to color floor tiles."
reagent_state = 2
color = "#808080"
/obj/item/weapon/reagent_containers/glass/paint/blue
name = "blue paint bucket"
icon_state = "paint_blue"
list_reagents = list("paint_blue" = 70)
reaction_turf(var/turf/T, var/volume)
if(!istype(T) || istype(T, /turf/space))
return
T.color = color
/obj/item/weapon/reagent_containers/glass/paint/yellow
name = "yellow paint bucket"
icon_state = "paint_yellow"
list_reagents = list("paint_yellow" = 70)
reaction_obj(var/obj/O, var/volume)
..()
if(istype(O,/obj/item/weapon/light))
O.color = color
/obj/item/weapon/reagent_containers/glass/paint/violet
name = "violet paint bucket"
icon_state = "paint_violet"
list_reagents = list("paint_violet" = 70)
red
name = "Red Paint"
id = "paint_red"
color = "#FF0000"
/obj/item/weapon/reagent_containers/glass/paint/black
name = "black paint bucket"
icon_state = "paint_black"
list_reagents = list("paint_black" = 70)
green
name = "Green Paint"
color = "#00FF00"
id = "paint_green"
/obj/item/weapon/reagent_containers/glass/paint/white
name = "white paint bucket"
icon_state = "paint_white"
list_reagents = list("paint_white" = 70)
blue
name = "Blue Paint"
color = "#0000FF"
id = "paint_blue"
yellow
name = "Yellow Paint"
color = "#FFFF00"
id = "paint_yellow"
violet
name = "Violet Paint"
color = "#FF00FF"
id = "paint_violet"
black
name = "Black Paint"
color = "#333333"
id = "paint_black"
white
name = "White Paint"
color = "#FFFFFF"
id = "paint_white"
datum/reagent/paint_remover
name = "Paint Remover"
id = "paint_remover"
description = "Paint remover is used to remove floor paint from floor tiles."
reagent_state = 2
color = "#808080"
reaction_turf(var/turf/T, var/volume)
if(istype(T) && T.icon != initial(T.icon))
T.icon = initial(T.icon)
return
/obj/item/weapon/reagent_containers/glass/paint/remover
name = "paint remover bucket"
list_reagents = list("paint_remover" = 70)
@@ -141,6 +141,7 @@
/obj/item/stack/packageWrap = 8,
/obj/item/pipe = 2)
time = 300
category = CAT_WEAPON
/obj/item/weapon/pneumatic_cannon/proc/updateTank(obj/item/weapon/tank/thetank, removing = 0, mob/living/carbon/human/user)
if(removing)
+2 -1
View File
@@ -40,4 +40,5 @@
result = /obj/item/weapon/picket_sign
reqs = list(/obj/item/stack/rods = 1,
/obj/item/stack/sheet/cardboard = 2)
time = 80
time = 80
category = CAT_MISC
@@ -375,7 +375,7 @@
max_combined_w_class = 21
max_w_class = 3
w_class = 4 //Bigger than a book because physics
can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/spellbook") //No bibles, consistent with bookcase
can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/storage/bible", "/obj/item/weapon/tome", "/obj/item/weapon/spellbook")
/*
* Trays - Agouri
@@ -181,8 +181,8 @@
"/obj/item/weapon/melee/classic_baton",
"/obj/item/device/flashlight/seclite",
"/obj/item/taperoll/police",
"/obj/item/weapon/melee/classic_baton/telescopic"
)
"/obj/item/weapon/melee/classic_baton/telescopic",
"/obj/item/weapon/restraints/legcuffs/bola")
/obj/item/weapon/storage/belt/security/sec/New()
..()
@@ -476,7 +476,7 @@
allow_quick_empty = 1
can_hold = list(
"/obj/item/weapon/grenade/smokebomb",
"/obj/item/weapon/legcuffs/bolas"
"/obj/item/weapon/restraints/legcuffs/bola"
)
flags = NODROP
@@ -492,8 +492,8 @@
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/legcuffs/bolas(src)
new /obj/item/weapon/legcuffs/bolas(src)
new /obj/item/weapon/restraints/legcuffs/bola(src)
new /obj/item/weapon/restraints/legcuffs/bola(src)
processing_objects.Add(src)
cooldown = world.time
@@ -504,7 +504,7 @@
for(S in src)
smokecount++
bolacount = 0
var/obj/item/weapon/legcuffs/bolas/B
var/obj/item/weapon/restraints/legcuffs/bola/B
for(B in src)
bolacount++
if(smokecount < 4)
@@ -513,7 +513,7 @@
smokecount++
if(bolacount < 2)
while(bolacount < 2)
new /obj/item/weapon/legcuffs/bolas(src)
new /obj/item/weapon/restraints/legcuffs/bola(src)
bolacount++
cooldown = world.time
update_icon()
@@ -705,3 +705,73 @@
new /obj/item/weapon/lipstick/green(src)
new /obj/item/weapon/lipstick/blue(src)
new /obj/item/weapon/lipstick/white(src)
#define NODESIGN "None"
#define NANOTRASEN "NanotrasenStandard"
#define SYNDI "SyndiSnacks"
#define HEART "Heart"
#define SMILE "SmileyFace"
/obj/item/weapon/storage/box/papersack
name = "paper sack"
desc = "A sack neatly crafted out of paper."
icon_state = "paperbag_None"
item_state = "paperbag_None"
foldable = null
var/design = NODESIGN
/obj/item/weapon/storage/box/papersack/update_icon()
if(!contents.len)
icon_state = "[item_state]"
else icon_state = "[item_state]_closed"
/obj/item/weapon/storage/box/papersack/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/pen))
//if a pen is used on the sack, dialogue to change its design appears
if(contents.len)
to_chat(user, "<span class='warning'>You can't modify [src] with items still inside!</span>")
return
var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILE)
var/switchDesign = input("Select a Design:", "Paper Sack Design", designs[1]) as null|anything in designs
if(!switchDesign)
return
if(get_dist(usr, src) > 1 && !usr.incapacitated())
to_chat(usr, "<span class='warning'>You have moved too far away!</span>")
return
if(design == switchDesign)
return
to_chat(usr, "<span class='notice'>You make some modifications to [src] using your pen.</span>")
design = switchDesign
icon_state = "paperbag_[design]"
item_state = "paperbag_[design]"
switch(design)
if(NODESIGN)
desc = "A sack neatly crafted out of paper."
if(NANOTRASEN)
desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go."
if(SYNDI)
desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program."
if(HEART)
desc = "A paper sack with a heart etched onto the side."
if(SMILE)
desc = "A paper sack with a crude smile etched onto the side."
return
else if(is_sharp(W))
if(!contents.len)
if(item_state == "paperbag_None")
to_chat(user, "<span class='notice'>You cut eyeholes into [src].</span>")
new /obj/item/clothing/head/papersack(user.loc)
qdel(src)
return
else if(item_state == "paperbag_SmileyFace")
to_chat(user, "<span class='notice'>You cut eyeholes into [src] and modify the design.</span>")
new /obj/item/clothing/head/papersack/smiley(user.loc)
qdel(src)
return
return ..()
#undef NODESIGN
#undef NANOTRASEN
#undef SYNDI
#undef HEART
#undef SMILE
@@ -140,11 +140,11 @@
..()
if(empty) return
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/ointment(src)
new /obj/item/stack/medical/advanced/ointment(src)
new /obj/item/stack/medical/bruise_pack/advanced(src)
new /obj/item/stack/medical/bruise_pack/advanced(src)
new /obj/item/stack/medical/bruise_pack/advanced(src)
new /obj/item/stack/medical/ointment/advanced(src)
new /obj/item/stack/medical/ointment/advanced(src)
new /obj/item/stack/medical/splint(src)
return
+5 -13
View File
@@ -23,7 +23,7 @@
update_icon()
return
/obj/item/weapon/melee/baton/CheckParts()
/obj/item/weapon/melee/baton/CheckParts(list/parts_list)
..()
bcell = locate(/obj/item/weapon/stock_parts/cell) in contents
update_icon()
@@ -47,11 +47,11 @@
/obj/item/weapon/melee/baton/update_icon()
if(status)
icon_state = "[initial(icon_state)]_active"
icon_state = "[initial(name)]_active"
else if(!bcell)
icon_state = "[initial(icon_state)]_nocell"
icon_state = "[initial(name)]_nocell"
else
icon_state = "[initial(icon_state)]"
icon_state = "[initial(name)]"
/obj/item/weapon/melee/baton/examine(mob/user)
..(user)
@@ -198,12 +198,4 @@
throwforce = 5
stunforce = 5
hitcost = 3750
slot_flags = null
/obj/item/weapon/melee/baton/cattleprod/update_icon()
if(status)
icon_state = "stunprod_active"
else if(!bcell)
icon_state = "stunprod_nocell"
else
icon_state = "stunprod"
slot_flags = null
@@ -0,0 +1,18 @@
/obj/item/weapon/melee/baton/cattleprod/teleprod
name = "teleprod"
desc = "A prod with a bluespace crystal on the end. The crystal doesn't look too fun to touch."
icon_state = "teleprod_nocell"
item_state = "teleprod"
origin_tech = "combat=2;bluespace=4;materials=3"
/obj/item/weapon/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
..()
if(status)
if((CLUMSY in user.mutations) && prob(50))
user.visible_message("<span class='danger'>[user] accidentally hits themself with [src]!</span>", \
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
user.Weaken(stunforce*3)
deductcharge(hitcost)
do_teleport(user, get_turf(user), 50)//honk honk
else if(iscarbon(M) && !M.anchored)
do_teleport(M, get_turf(M), 15)
+125 -8
View File
@@ -283,20 +283,90 @@
w_class = 4
slot_flags = SLOT_BACK
force_unwielded = 10
force_wielded = 18 // Was 13, Buffed - RR
force_wielded = 18
throwforce = 20
throw_speed = 3
throw_speed = 4
armour_penetration = 10
no_spin_thrown = 1 // Thrown spears that spin look dumb. -Fox
materials = list(MAT_METAL=1150, MAT_GLASS=2075)
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
sharp = 1
edge = 1
no_spin_thrown = 1
var/obj/item/weapon/grenade/explosive = null
var/war_cry = "AAAAARGH!!!"
/obj/item/weapon/twohanded/spear/update_icon()
icon_state = "spearglass[wielded]"
return
if(explosive)
icon_state = "spearbomb[wielded]"
else
icon_state = "spearglass[wielded]"
/obj/item/weapon/twohanded/spear/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return ..()
/obj/item/weapon/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
if(!proximity)
return
if(isturf(AM)) //So you can actually melee with it
return
if(explosive && wielded)
user.say("[war_cry]")
explosive.forceMove(AM)
explosive.prime()
qdel(src)
/obj/item/weapon/twohanded/spear/throw_impact(atom/target)
. = ..()
if(explosive)
explosive.prime()
qdel(src)
/obj/item/weapon/twohanded/spear/AltClick(mob/user)
..()
if(!explosive)
return
if(ismob(loc))
var/mob/M = loc
var/input = stripped_input(M, "What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50)
if(input)
war_cry = input
/obj/item/weapon/twohanded/spear/CheckParts(list/parts_list)
..()
if(explosive)
explosive.forceMove(get_turf(loc))
explosive = null
update_icon()
var/obj/item/weapon/grenade/G = locate() in contents
if(G)
explosive = G
name = "explosive lance"
desc = "A makeshift spear with [G] attached to it. Alt+click on the spear to set your war cry!"
update_icon()
//GREY TIDE
/obj/item/weapon/twohanded/spear/grey_tide
icon_state = "spearglass0"
name = "\improper Grey Tide"
desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces."
force_unwielded = 15
force_wielded = 25
throwforce = 20
throw_speed = 4
attack_verb = list("gored")
/obj/item/weapon/twohanded/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity)
..()
if(!proximity)
return
user.faction |= "greytide(\ref[user])"
if(isliving(AM))
var/mob/living/L = AM
if(istype (L, /mob/living/simple_animal/hostile/illusion))
return
if(!L.stat && prob(50))
var/mob/living/simple_animal/hostile/illusion/M = new(user.loc)
M.faction = user.faction.Copy()
M.Copy_Parent(user, 100, user.health/2.5, 12, 30)
M.GiveTarget(L)
//Putting heads on spears
/obj/item/organ/external/head/attackby(var/obj/item/weapon/W, var/mob/living/user, params)
@@ -348,6 +418,53 @@
name = "Kidan spear"
desc = "A spear brought over from the Kidan homeworld."
// DIY CHAINSAW
/obj/item/weapon/twohanded/required/chainsaw
name = "chainsaw"
desc = "A versatile power tool. Useful for limbing trees and delimbing humans."
icon_state = "gchainsaw_off"
flags = CONDUCT
force = 13
w_class = 5
throwforce = 13
throw_speed = 2
throw_range = 4
materials = list(MAT_METAL=13000)
origin_tech = "materials=3;engineering=4;combat=2"
attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered")
hitsound = "swing_hit"
sharp = 1
edge = 1
actions_types = list(/datum/action/item_action/startchainsaw)
var/on = 0
/obj/item/weapon/twohanded/required/chainsaw/attack_self(mob/user)
on = !on
to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]")
if(on)
playsound(loc, 'sound/weapons/chainsawstart.ogg', 50, 1)
force = on ? 21 : 13
throwforce = on ? 21 : 13
icon_state = "gchainsaw_[on ? "on" : "off"]"
if(hitsound == "swing_hit")
hitsound = 'sound/weapons/chainsaw.ogg'
else
hitsound = "swing_hit"
if(src == user.get_active_hand()) //update inhands
user.update_inv_l_hand()
user.update_inv_r_hand()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/weapon/twohanded/required/chainsaw/doomslayer
name = "OOOH BABY"
desc = "<span class='warning'>VRRRRRRR!!!</span>"
armour_penetration = 100
///CHAINSAW///
/obj/item/weapon/twohanded/chainsaw
icon_state = "chainsaw0"
@@ -66,6 +66,14 @@
handle_rotation()
return
/obj/structure/stool/bed/chair/AltClick(mob/user)
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!Adjacent(user))
return
rotate()
// Chair types
/obj/structure/stool/bed/chair/wood
// TODO: Special ash subtype that looks like charred chair legs
@@ -78,7 +78,7 @@
last_delay = current_tube.enter_delay(src, next_dir)
sleep(last_delay)
dir = next_dir
loc = next_loc // When moving from one tube to another, skip collision and such.
forceMove(next_loc) // When moving from one tube to another, skip collision and such.
density = current_tube.density
if(current_tube && current_tube.should_stop_pod(src, next_dir))
@@ -322,6 +322,14 @@ obj/structure/windoor_assembly/Destroy()
update_icon()
return
/obj/structure/windoor_assembly/AltClick(mob/user)
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!Adjacent(user))
return
revrotate()
//Flips the windoor assembly, determines whather the door opens to the left or the right
/obj/structure/windoor_assembly/verb/flip()
set name = "Flip Windoor Assembly"
+8
View File
@@ -318,6 +318,14 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
return
/obj/structure/window/AltClick(mob/user)
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!Adjacent(user))
return
revrotate()
/*
/obj/structure/window/proc/updateSilicate()
if(silicateIcon && silicate)
+22 -19
View File
@@ -241,7 +241,7 @@ var/ert_request_answered = 0
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/engineer(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/responseteam(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
var/obj/item/weapon/card/id/W = new(src)
W.assignment = "Emergency Response Team Member"
@@ -256,7 +256,7 @@ var/ert_request_answered = 0
pda.ownjob = "Emergency Response Team Member"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
pda.icon_state = "pda-engineer"
M.equip_to_slot_or_del(pda, slot_belt)
M.equip_to_slot_or_del(pda, slot_wear_pda)
if("Security")
@@ -265,7 +265,7 @@ var/ert_request_answered = 0
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/security(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/responseteam(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/response_team(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/response_team(M), slot_belt)
var/obj/item/weapon/card/id/W = new(src)
W.assignment = "Emergency Response Team Member"
@@ -280,7 +280,7 @@ var/ert_request_answered = 0
pda.ownjob = "Emergency Response Team Member"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
pda.icon_state = "pda-security"
M.equip_to_slot_or_del(pda, slot_belt)
M.equip_to_slot_or_del(pda, slot_wear_pda)
if("Medic")
@@ -302,7 +302,7 @@ var/ert_request_answered = 0
pda.ownjob = "Emergency Response Team Member"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
pda.icon_state = "pda-medical"
M.equip_to_slot_or_del(pda, slot_belt)
M.equip_to_slot_or_del(pda, slot_wear_pda)
if("Commander")
@@ -329,7 +329,7 @@ var/ert_request_answered = 0
pda.owner = M.real_name
pda.ownjob = "Emergency Response Team Leader"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_to_slot_or_del(pda, slot_belt)
M.equip_to_slot_or_del(pda, slot_wear_pda)
/datum/response_team/proc/cannot_send_team()
command_announcement.Announce("[station_name()], we are unfortunately unable to send you an Emergency Response Team at this time.", "ERT Unavailable")
@@ -382,12 +382,13 @@ var/ert_request_answered = 0
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/ert/medical(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical/response_team(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/ert/medical(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/o2(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/brute(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical/response_team(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/CMO(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store)
@@ -398,11 +399,12 @@ var/ert_request_answered = 0
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/ert/command(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/ert/command(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/lockbox/loyalty(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store)
@@ -420,7 +422,7 @@ var/ert_request_answered = 0
switch(officer_type)
if("Engineer")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/engineer(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/engi(M), slot_s_store)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(M), slot_glasses)
@@ -440,7 +442,7 @@ var/ert_request_answered = 0
if("Security")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/security(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(M), slot_s_store)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
@@ -458,10 +460,11 @@ var/ert_request_answered = 0
if("Medic")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex/nitrile(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/medical(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/health_advanced(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/medical(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_in_backpack)
@@ -470,22 +473,22 @@ var/ert_request_answered = 0
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/surgery(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/CMO(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store)
if("Commander")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/commander(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/commander(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/lockbox/loyalty(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(M), slot_l_store)
@@ -504,7 +507,7 @@ var/ert_request_answered = 0
switch(officer_type)
if("Engineer")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/advance(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/engineer(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_s_store)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson/night(M), slot_glasses)
@@ -544,12 +547,12 @@ var/ert_request_answered = 0
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/medical(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/night(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/medical(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/surgery(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/defibrillator/compact/loaded(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(src), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store)
@@ -562,13 +565,13 @@ var/ert_request_answered = 0
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/commander(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/night(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/rig/ert/commander(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/lockbox/loyalty(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/nuclear(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_r_store)
+7
View File
@@ -4,6 +4,8 @@
icon_state = "0"
dynamic_lighting = 0
luminosity = 1
plane = PLANE_SPACE_BACKGROUND
temperature = TCMB
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
@@ -18,6 +20,11 @@
if(!istype(src, /turf/space/transit))
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]")
I.plane = PLANE_SPACE_DUST
I.alpha = 80
I.blend_mode = BLEND_ADD
overlays += I
update_starlight()
/turf/space/Destroy()
+1
View File
@@ -1,4 +1,5 @@
/turf/space/transit
plane = 0
var/pushdirection // push things that get caught in the transit tile this direction
//Overwrite because we dont want people building rods in space.
+25 -1
View File
@@ -7,7 +7,8 @@
#define AREAEDIT_BUILDMODE 7
#define FILL_BUILDMODE 8
#define LINK_BUILDMODE 9
#define NUM_BUILDMODES 9
#define BOOM_BUILDMODE 10
#define NUM_BUILDMODES 10
/obj/screen/buildmode
icon = 'icons/misc/buildmode.dmi'
@@ -167,6 +168,12 @@
var/list/link_lines = list()
var/obj/link_obj
var/valid_links = 0
//Explosion mode
var/devastation = -1
var/heavy = -1
var/light = -1
var/flash = -1
var/flames = -1
/datum/click_intercept/buildmode/New(client/c)
..()
@@ -250,6 +257,10 @@
to_chat(user, "<span class='notice'>Left Mouse Button on obj = Select button to link</span>")
to_chat(user, "<span class='notice'>Right Mouse Button on obj = Link/unlink to selected button")
to_chat(user, "<span class='notice'>***********************************************************</span>")
if(BOOM_BUILDMODE)
to_chat(user, "<span class='notice'>***********************************************************</span>")
to_chat(user, "<span class='notice'>Mouse Button on obj = Kaboom</span>")
to_chat(user, "<span class='notice'>***********************************************************</span>")
/datum/click_intercept/buildmode/proc/change_settings(mob/user)
switch(mode)
@@ -322,6 +333,17 @@
if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0))
objholder = /obj/structure/closet
deselect_region()
if(BOOM_BUILDMODE)
devastation = input("Range of total devastation. -1 to none", text("Input")) as num|null
if(devastation == null) devastation = -1
var/heavy = input("Range of heavy impact. -1 to none", text("Input")) as num|null
if(heavy == null) heavy = -1
var/light = input("Range of light impact. -1 to none", text("Input")) as num|null
if(light == null) light = -1
var/flash = input("Range of flash. -1 to none", text("Input")) as num|null
if(flash == null) flash = -1
var/flames = input("Range of flames. -1 to none", text("Input")) as num|null
if(flames == null) flames = -1
/datum/click_intercept/buildmode/proc/change_dir()
switch(build_dir)
@@ -601,3 +623,5 @@
var/obj/effect/buildmode_line/L2 = new(holder, P, M, "[M.name] to [P.name]") // Yes, reversed one so that you can see it from both sides.
L2.color = L.color
link_lines += L2
if(BOOM_BUILDMODE)
explosion(object, devastation, heavy, light, flash, null, null,flames)
+202 -33
View File
@@ -593,17 +593,25 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
"tournament janitor",
"pirate",
"space pirate",
"soviet tourist",
"soviet soldier",
"soviet admiral",
"tunnel clown",
"mime assassin",
"survivor",
"greytide",
"greytide leader",
"greytide xeno",
"masked killer",
"singuloth knight",
"dark lord",
"assassin",
"spy",
"vox",
"death commando",
"syndicate agent",
"syndicate operative",
"syndicate bomber",
"syndicate strike team",
"syndicate officer",
"chrono legionnaire",
@@ -746,30 +754,29 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if("pirate")
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
equip_special_id(M,get_all_accesses(), "Pirate", /obj/item/weapon/card/id)
equip_special_id(M,list(access_maint_tunnels), "Pirate", /obj/item/weapon/card/id)
if("space pirate")
if("space pirate") // not spaceworthy, just has fancier coat.
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/pirate(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
equip_special_id(M,get_all_accesses(), "Space Pirate", /obj/item/weapon/card/id)
if("soviet soldier")
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head)
equip_special_id(M,get_all_accesses(), "Soviet Soldier", /obj/item/weapon/card/id)
equip_special_id(M,list(access_maint_tunnels), "Space Pirate", /obj/item/weapon/card/id)
if("tunnel clown")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
@@ -780,25 +787,106 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/suit/chaplain_hoodie(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store)
equip_special_id(M,get_all_accesses(), "Tunnel Clown", /obj/item/weapon/card/id)
equip_special_id(M,list(access_clown, access_theatre, access_maint_tunnels), "Tunnel Clown", /obj/item/weapon/card/id)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
M.equip_to_slot_or_del(fire_axe, slot_r_hand)
if("mime assassin")
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/mime(M), slot_back)
if(M.gender == FEMALE)
M.equip_or_collect(new /obj/item/clothing/under/sexymime(M), slot_w_uniform)
M.equip_or_collect(new /obj/item/clothing/mask/gas/sexymime(M), slot_wear_mask)
else
M.equip_or_collect(new /obj/item/clothing/under/mime(M), slot_w_uniform)
M.equip_or_collect(new /obj/item/clothing/mask/gas/mime(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/suspenders(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/syndie_kit/caneshotgun, slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/toy/crayon/mime, slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/suppressor(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/pen/sleepy(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack)
var/obj/item/device/pda/mime/pda = new(M)
pda.owner = M.real_name
pda.ownjob = "Mime"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_to_slot_or_del(pda, slot_wear_pda)
equip_special_id(M,list(access_mime, access_theatre, access_maint_tunnels), "Mime", /obj/item/weapon/card/id/syndicate)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
if("survivor")
M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
equip_special_id(M,get_all_accesses(), "Survivor", /obj/item/weapon/card/id)
equip_special_id(M,list(access_maint_tunnels), "Survivor", /obj/item/weapon/card/id)
for(var/obj/item/carried_item in M.contents)
if(!istype(carried_item, /obj/item/weapon/implant))
carried_item.add_blood(M)
if("greytide")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/flag/grey(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
equip_special_id(M,list(access_maint_tunnels), "Greytide", /obj/item/weapon/card/id)
if("greytide leader")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/flag/grey(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
equip_special_id(M,list(access_maint_tunnels), "Greytide Leader", /obj/item/weapon/card/id)
if("greytide xeno")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/xenos(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/xenos(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/toy/toy_xeno(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
equip_special_id(M,list(access_maint_tunnels), "Legit Xenomorph", /obj/item/weapon/card/id)
if("masked killer")
M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask)
@@ -809,7 +897,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
equip_special_id(M,get_all_accesses(), "Masked Killer", /obj/item/weapon/card/id/syndicate, "syndie")
equip_special_id(M,list(access_maint_tunnels), "Masked Killer", /obj/item/weapon/card/id/syndicate, "syndie")
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
M.equip_to_slot_or_del(fire_axe, slot_r_hand)
for(var/obj/item/carried_item in M.contents)
@@ -821,6 +909,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_l_hand)
@@ -841,6 +930,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M)
for(var/obj/item/briefcase_item in sec_briefcase)
@@ -859,7 +949,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
pda.owner = M.real_name
pda.ownjob = "Reaper"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_to_slot_or_del(pda, slot_belt)
M.equip_to_slot_or_del(pda, slot_wear_pda)
equip_special_id(M,get_all_accesses(), "Reaper", /obj/item/weapon/card/id/syndicate, "syndie")
if("spy")
@@ -880,14 +970,39 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/pen/sleepy(M), slot_r_store)
var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M)
DUST.implant(M)
var/obj/item/weapon/implant/dust/STOR = new /obj/item/weapon/implant/storage(M)
STOR.implant(M)
M.equip_to_slot_or_del(new /obj/item/weapon/implanter/storage(M), slot_in_backpack)
var/obj/item/device/pda/heads/pda = new(M)
pda.owner = M.real_name
pda.ownjob = "Spy"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_to_slot_or_del(pda, slot_belt)
equip_special_id(M,get_all_accesses(), "Spy", /obj/item/weapon/card/id/syndicate, "syndie")
equip_special_id(M,list(access_maint_tunnels), "Spy", /obj/item/weapon/card/id/syndicate, "syndie")
if("vox")
if(istype(M, /mob/living/carbon/human/voxarmalis)) // have to do this, they cannot wear normal vox gear!
M.equip_to_slot_or_del(new /obj/item/clothing/under/vox_grey(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_robes (M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/weapon/card/id/syndicate/vox(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate, slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow/vox, slot_gloves)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic, slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/vox, slot_r_store)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle, slot_glasses)
M.equip_to_slot_or_del(new /obj/item/device/flashlight, slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs/cable/zipties, slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/flash, slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/noisecannon, slot_in_backpack)
equip_special_id(M,get_all_accesses(), "Vox Armalis", /obj/item/weapon/card/id/syndicate/vox, "syndie")
else
M.equip_vox_raider()
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_l_hand)
M.regenerate_icons()
if("death commando")
M.equip_death_commando()
@@ -909,15 +1024,31 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
U.hidden_uplink.uses = 20
M.equip_to_slot_or_del(U, slot_r_store)
if("syndicate bomber")
M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/device/flashlight(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/radio/beacon/syndicate/bomb(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/radio/beacon/syndicate/bomb(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/syndicatedetonator(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt)
M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
equip_special_id(M,get_syndicate_access("Syndicate Operative"), "Syndicate Bomber", /obj/item/weapon/card/id/syndicate, "syndie")
if("syndicate operative")
M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/ammo_box/magazine/m10mm(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/crowbar/red(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/clothing/glasses/night(M), slot_glasses)
M.equip_or_collect(new /obj/item/weapon/storage/belt/military(M), slot_belt)
@@ -948,8 +1079,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/clothing/glasses/thermal(M), slot_glasses)
M.equip_or_collect(new /obj/item/weapon/storage/belt/military(M), slot_belt)
M.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer(M), slot_l_store)
@@ -974,9 +1105,10 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_or_collect(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_or_collect(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/clothing/head/that(M), slot_head)
M.equip_or_collect(new /obj/item/device/radio/headset/ert(M), slot_l_ear)
M.equip_or_collect(new /obj/item/device/pda/(M), slot_belt)
M.equip_or_collect(new /obj/item/device/pda/(M), slot_wear_pda)
equip_special_id(M,get_centcom_access("VIP Guest"), "VIP Guest", /obj/item/weapon/card/id/centcom)
if("nt navy officer")
@@ -985,10 +1117,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_or_collect(new /obj/item/clothing/gloves/color/white(M), slot_gloves)
M.equip_or_collect(new /obj/item/device/radio/headset/centcom(M), slot_l_ear)
M.equip_or_collect(new /obj/item/clothing/head/beret/centcom/officer(M), slot_head)
M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_belt)
M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_wear_pda)
M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt)
M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
@@ -1003,10 +1136,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_or_collect(new /obj/item/clothing/gloves/color/white(M), slot_gloves)
M.equip_or_collect(new /obj/item/device/radio/headset/centcom(M), slot_l_ear)
M.equip_or_collect(new /obj/item/clothing/head/beret/centcom/captain(M), slot_head)
M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_belt)
M.equip_or_collect(new /obj/item/device/pda/centcom(M), slot_wear_pda)
M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt)
M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
@@ -1047,10 +1181,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(src), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head) // job has /obj/item/clothing/head/beret/centcom/officer/navy
M.equip_to_slot_or_del(new /obj/item/device/pda/centcom(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/device/pda/centcom(M), slot_wear_pda)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) // job has /obj/item/clothing/glasses/hud/security/sunglasses
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/deathsquad/officer(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/implanter/dust(M), slot_in_backpack)
@@ -1075,9 +1210,10 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/centcom(src), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad/beret(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) // special
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/matches(M), slot_r_store)
M.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_in_backpack)
@@ -1088,7 +1224,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
pda.desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition designed for military field work."
M.equip_or_collect(pda, slot_belt)
M.equip_or_collect(pda, slot_wear_pda)
M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack)
M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack)
equip_special_id(M,get_centcom_access("Special Operations Officer"), "Special Operations Officer", /obj/item/weapon/card/id/centcom)
@@ -1117,7 +1253,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id)
if("red wizard")
@@ -1130,7 +1266,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id)
if("marisa wizard")
@@ -1143,20 +1279,53 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id)
if("soviet tourist")
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack)
equip_special_id(M,list(access_maint_tunnels), "Soviet Tourist", /obj/item/weapon/card/id)
if("soviet soldier")
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/c4(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/c4(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
equip_special_id(M,list(access_maint_tunnels), "Soviet Soldier", /obj/item/weapon/card/id)
if("soviet admiral")
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
equip_special_id(M,get_all_accesses() + get_all_centcom_access(), "Admiral", /obj/item/weapon/card/id, "commander")
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
equip_special_id(M,get_all_accesses() + get_all_centcom_access(), "Soviet Admiral", /obj/item/weapon/card/id, "commander")
//W.icon_state = "commander"
if("chrono legionnaire")
+1 -1
View File
@@ -111,7 +111,7 @@ var/global/sent_honksquad = 0
equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(src), slot_w_uniform)
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(src), slot_wear_mask)
equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(src), slot_shoes)
equip_to_slot_or_del(new /obj/item/device/pda/clown(src), slot_belt)
equip_to_slot_or_del(new /obj/item/device/pda/clown(src), slot_wear_pda)
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(src), slot_wear_mask)
equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(src), slot_in_backpack)
equip_to_slot_or_del(new /obj/item/weapon/bikehorn(src), slot_in_backpack)
+1 -2
View File
@@ -873,8 +873,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set name = "Reset Telecomms Scripts"
set desc = "Blanks all telecomms scripts from all telecomms servers"
if(!holder || !holder.rights || !holder.rights & R_ADMIN)
to_chat(usr, "<span class='warning'>Admin only.</span>")
if(!check_rights(R_ADMIN, 1, src))
return
var/confirm = alert(src, "You sure you want to blank all NTSL scripts?", "Confirm", "Yes", "No")
+13 -1
View File
@@ -88,4 +88,16 @@
// Their chat window, sort of important.
// See /goon/code/datums/browserOutput.dm
var/datum/chatOutput/chatOutput
var/datum/chatOutput/chatOutput
////////////
//PARALLAX//
////////////
var/updating_parallax = 0
var/list/parallax = list()
var/list/parallax_offset = list()
var/turf/previous_turf = null
var/obj/screen/plane_master/parallax_master/parallax_master = null
var/obj/screen/plane_master/parallax_dustmaster/parallax_dustmaster = null
var/obj/screen/plane_master/parallax_spacemaster/parallax_spacemaster = null
var/last_parallax_shift
@@ -29,7 +29,7 @@
/datum/gear/sechud
display_name = "a classic security HUD"
path = /obj/item/clothing/glasses/hud/security
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot")
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent")
/datum/gear/matches
display_name = "a box of matches"
@@ -38,3 +38,35 @@
/datum/gear/cards
display_name = "a deck of cards"
path = /obj/item/toy/cards/deck
/datum/gear/blackbandana
display_name = "bandana, black"
path = /obj/item/clothing/mask/bandana/black
/datum/gear/purplebandana
display_name = "bandana, purple"
path = /obj/item/clothing/mask/bandana/purple
/datum/gear/orangebandana
display_name = "bandana, orange"
path = /obj/item/clothing/mask/bandana/orange
/datum/gear/greenbandana
display_name = "bandana, green"
path = /obj/item/clothing/mask/bandana/green
/datum/gear/bluebandana
display_name = "bandana, blue"
path = /obj/item/clothing/mask/bandana/blue
/datum/gear/redbandana
display_name = "bandana, red"
path = /obj/item/clothing/mask/bandana/red
/datum/gear/goldbandana
display_name = "bandana, gold"
path = /obj/item/clothing/mask/bandana/gold
/datum/gear/skullbandana
display_name = "bandana, skull"
path = /obj/item/clothing/mask/bandana/skull
@@ -4,5 +4,15 @@
sort_category = "Shoes"
/datum/gear/shoes/sandals
display_name = "sandals"
path = /obj/item/clothing/shoes/sandal
display_name = "sandals, wooden"
path = /obj/item/clothing/shoes/sandal
/datum/gear/shoes/fancysandals
display_name = "sandals, fancy"
cost = 5
path = /obj/item/clothing/shoes/sandal/fancy
/datum/gear/shoes/dressshoes
display_name = "dress shoes"
cost = 5
path = /obj/item/clothing/shoes/centcom
@@ -59,7 +59,7 @@
/datum/gear/suit/coat/job/miner
display_name = "winter coat, miner"
path = /obj/item/clothing/suit/hooded/wintercoat/miner
allowed_roles = list("Miner")
allowed_roles = list("Shaft Miner")
//LABCOATS
/datum/gear/suit/labcoat_emt
@@ -144,3 +144,17 @@
/datum/gear/suit/blackhoodie
display_name = "hoodie, black"
path = /obj/item/clothing/suit/hooded/hoodie
//SUITS!
/datum/gear/suit/blacksuit
display_name = "suit jacket, black"
path = /obj/item/clothing/suit/storage/lawyer/blackjacket
/datum/gear/suit/bluesuit
display_name = "suit jacket, blue"
path = /obj/item/clothing/suit/storage/lawyer/bluejacket
/datum/gear/suit/purplesuit
display_name = "suit jacket, purple"
path = /obj/item/clothing/suit/storage/lawyer/purpjacket
@@ -66,7 +66,7 @@
/datum/gear/uniform/skirt/job/med
display_name = "skirt, medical"
path = /obj/item/clothing/under/rank/medical/skirt
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic","Brig Physician")
/datum/gear/uniform/skirt/job/sci
display_name = "skirt, scientist"
@@ -106,8 +106,8 @@
path = /obj/item/clothing/under/rank/security/formal
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
datum/gear/uniform/secorporate
display_name = "security uniform, corporate "
/datum/gear/uniform/sec/secorporate
display_name = "security uniform, corporate"
path = /obj/item/clothing/under/rank/security/corp
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot")
+22 -1
View File
@@ -93,6 +93,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/show_ghostitem_attack = TRUE
var/UI_style_color = "#ffffff"
var/UI_style_alpha = 255
var/space_parallax = 1
var/space_dust = 1
var/parallax_speed = 1
//character preferences
@@ -416,6 +419,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(TAB_GAME) // General Preferences
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
dat += "<h2>General Settings</h2>"
dat += "<b>Space Parallax:</b> <a href='?_src_=prefs;preference=parallax'><b>[space_parallax ? "Enabled" : "Disabled"]</b></a><br>"
dat += "<b>Parallax Speed:</b> <a href='?_src_=prefs;preference=p_speed'><b>[parallax_speed]</b></a><br>"
dat += "<b>Space Dust:</b> <a href='?_src_=prefs;preference=dust'><b>[space_dust ? "Yes" : "No"]</b></a><br>"
dat += "<b>Fancy NanoUI:</b> <a href='?_src_=prefs;preference=nanoui'>[(nanoui_fancy) ? "Yes" : "No"]</a><br>"
dat += "<b>Ghost-Item Attack Animation:</b> <a href='?_src_=prefs;preference=ghost_att_anim'>[(show_ghostitem_attack) ? "Yes" : "No"]</a><br>"
dat += "<b>Custom UI settings:</b><br>"
@@ -1934,6 +1940,21 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/mob/living/carbon/human/H = usr
H.remake_hud()
if("parallax")
space_parallax = !space_parallax
if(usr && usr.hud_used)
usr.hud_used.update_parallax_and_dust()
if("dust")
space_dust = !space_dust
if(usr && usr.hud_used)
usr.hud_used.update_parallax_and_dust()
if("p_speed")
parallax_speed = min(max(input(user, "Enter a number between 0 and 5 included (default=2)","Parallax Speed Preferences",parallax_speed),0),5)
if("be_special")
var/r = href_list["role"]
if(!(r in special_roles))
@@ -2204,4 +2225,4 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
popup.open(0)
/datum/preferences/proc/close_load_dialog(mob/user)
user << browse(null, "window=saves")
user << browse(null, "window=saves")
@@ -13,7 +13,10 @@
volume,
nanoui_fancy,
show_ghostitem_attack,
lastchangelog
lastchangelog,
space_parallax,
space_dust,
parallax_speed
FROM [format_table_name("player")]
WHERE ckey='[C.ckey]'"}
)
@@ -40,6 +43,9 @@
nanoui_fancy = text2num(query.item[11])
show_ghostitem_attack = text2num(query.item[12])
lastchangelog = query.item[13]
space_parallax = text2num(query.item[14])
space_dust = text2num(query.item[15])
parallax_speed = text2num(query.item[16])
//Sanitize
ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor))
@@ -54,6 +60,9 @@
nanoui_fancy = sanitize_integer(nanoui_fancy, 0, 1, initial(nanoui_fancy))
show_ghostitem_attack = sanitize_integer(show_ghostitem_attack, 0, 1, initial(show_ghostitem_attack))
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
space_parallax = sanitize_integer(space_parallax, 0, 1, initial(space_parallax))
space_dust = sanitize_integer(space_dust, 0, 1, initial(space_dust))
parallax_speed = sanitize_integer(parallax_speed, 0, 5, initial(parallax_speed))
return 1
/datum/preferences/proc/save_preferences(client/C)
@@ -78,7 +87,10 @@
volume='[volume]',
nanoui_fancy='[nanoui_fancy]',
show_ghostitem_attack='[show_ghostitem_attack]',
lastchangelog='[lastchangelog]'
lastchangelog='[lastchangelog]',
space_parallax='[space_parallax]',
space_dust='[space_dust]',
parallax_speed='[parallax_speed]'
WHERE ckey='[C.ckey]'"}
)
@@ -213,4 +213,45 @@
set category = "Preferences"
set desc = "Allows you to access the Setup Character screen. Changes to your character won't take effect until next round, but other changes will."
prefs.current_tab = 1
prefs.ShowChoices(usr)
prefs.ShowChoices(usr)
/client/verb/toggle_space_parallax()
set name = "Toggle Space Parallax"
set category = "Preferences"
set desc = "Toggle the parallax effect of space turfs."
prefs.space_parallax = !prefs.space_parallax
prefs.save_preferences(src)
if(!prefs.space_parallax)
to_chat(usr, "Space parallax is now deactivated.")
else
to_chat(usr, "Space parallax is now activated.")
if(mob && mob.hud_used)
mob.hud_used.update_parallax_and_dust()
/client/verb/toggle_space_dust()
set name = "Toggle Space Dust"
set category = "Preferences"
set desc = "Toggle the presence of dust on space turfs."
prefs.space_dust = !prefs.space_dust
prefs.save_preferences(src)
if(!prefs.space_dust)
to_chat(usr, "Space dust is now deactivated.")
else
to_chat(usr, "Space dust is now activated.")
if(mob && mob.hud_used)
mob.hud_used.update_parallax_and_dust()
/client/verb/toggle_parallax_speed()
set name = "Change Parallax Speed"
set category = "Preferences"
set desc = "Change the speed at which parallax moves."
prefs.parallax_speed = min(max(input(usr, "Enter a number between 0 and 5 included (default=2)","Parallax Speed Preferences",prefs.parallax_speed),0),5)
prefs.save_preferences(src)
+14
View File
@@ -372,3 +372,17 @@
desc = "A horribly bloated and mismatched human head."
icon_state = "lingspacehelmet"
item_state = "lingspacehelmet"
/obj/item/clothing/head/papersack
name = "paper sack hat"
desc = "A paper sack with crude holes cut out for eyes. Useful for hiding one's identity or ugliness."
icon_state = "papersack"
flags = BLOCKHAIR
flags_inv = HIDEFACE|HIDEEARS
/obj/item/clothing/head/papersack/smiley
name = "paper sack hat"
desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all."
icon_state = "papersack_smile"
flags = BLOCKHAIR
flags_inv = HIDEFACE|HIDEEARS
+6 -6
View File
@@ -222,37 +222,37 @@
/obj/item/clothing/mask/bandana/attack_self(var/mob/user)
adjustmask(user)
obj/item/clothing/mask/bandana/red
/obj/item/clothing/mask/bandana/red
name = "red bandana"
icon_state = "bandred"
item_color = "red"
desc = "It's a red bandana."
obj/item/clothing/mask/bandana/blue
/obj/item/clothing/mask/bandana/blue
name = "blue bandana"
icon_state = "bandblue"
item_color = "blue"
desc = "It's a blue bandana."
obj/item/clothing/mask/bandana/gold
/obj/item/clothing/mask/bandana/gold
name = "gold bandana"
icon_state = "bandgold"
item_color = "yellow"
desc = "It's a gold bandana."
obj/item/clothing/mask/bandana/green
/obj/item/clothing/mask/bandana/green
name = "green bandana"
icon_state = "bandgreen"
item_color = "green"
desc = "It's a green bandana."
obj/item/clothing/mask/bandana/orange
/obj/item/clothing/mask/bandana/orange
name = "orange bandana"
icon_state = "bandorange"
item_color = "orange"
desc = "It's an orange bandana."
obj/item/clothing/mask/bandana/purple
/obj/item/clothing/mask/bandana/purple
name = "purple bandana"
icon_state = "bandpurple"
item_color = "purple"
+1 -2
View File
@@ -177,12 +177,11 @@
/datum/crafting_recipe/shoe_rags
name = "Shoe Rags"
result = /obj/item/shoe_silencer
reqs = list(/obj/item/stack/tape_roll = 10)
tools = list(/obj/item/weapon/wirecutters)
time = 40
category = CAT_MISC
/obj/item/clothing/shoes/sandal/white
name = "White Sandals"
+2 -3
View File
@@ -43,7 +43,7 @@
. = list()
. += user.r_hand
. += user.l_hand
if(!istype(user.loc, /turf))
if(!isturf(user.loc))
return
var/list/L = block(get_step(user, SOUTHWEST), get_step(user, NORTHEAST))
for(var/A in L)
@@ -231,8 +231,7 @@
var/list/surroundings = get_surroundings(user)
var/dat = "<h3>Crafting menu</h3>"
if(busy)
dat += "<div class='statusDisplay'>"
dat += "Crafting in progress...</div>"
dat += "<div class='statusDisplay'>Crafting in progress...</div>"
else
dat += "<A href='?src=\ref[src];backwardCat=1'><--</A>"
dat += " [categories[prev_cat()]] |"
+77 -14
View File
@@ -23,7 +23,25 @@
/obj/item/device/assembly/igniter = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans = 1)
parts = list(/obj/item/weapon/reagent_containers/food/drinks/cans = 1)
time = 80
time = 15
category = CAT_WEAPON
/datum/crafting_recipe/lance
name = "explosive lance (grenade)"
result = /obj/item/weapon/twohanded/spear
reqs = list(/obj/item/weapon/twohanded/spear = 1,
/obj/item/weapon/grenade = 1)
parts = list(/obj/item/weapon/grenade = 1)
time = 15
category = CAT_WEAPON
/datum/crafting_recipe/molotov
name = "Molotov"
result = /obj/item/weapon/reagent_containers/food/drinks/bottle/molotov
reqs = list(/obj/item/weapon/reagent_containers/glass/rag = 1,
/obj/item/weapon/reagent_containers/food/drinks/bottle = 1)
parts = list(/obj/item/weapon/reagent_containers/food/drinks/bottle = 1)
time = 40
category = CAT_WEAPON
/datum/crafting_recipe/stunprod
@@ -33,10 +51,18 @@
/obj/item/stack/rods = 1,
/obj/item/weapon/wirecutters = 1,
/obj/item/weapon/stock_parts/cell = 1)
time = 80
time = 40
parts = list(/obj/item/weapon/stock_parts/cell = 1)
category = CAT_WEAPON
/datum/crafting_recipe/bola
name = "Bola"
result = /obj/item/weapon/restraints/legcuffs/bola
reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1,
/obj/item/stack/sheet/metal = 6)
time = 20//15 faster than crafting them by hand!
category= CAT_WEAPON
/datum/crafting_recipe/ed209
name = "ED209"
result = /mob/living/simple_animal/bot/ed209
@@ -52,7 +78,7 @@
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/robot_parts/r_arm = 1)
tools = list(/obj/item/weapon/weldingtool, /obj/item/weapon/screwdriver)
time = 120
time = 60
category = CAT_ROBOT
/datum/crafting_recipe/secbot
@@ -64,7 +90,7 @@
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/robot_parts/r_arm = 1)
tools = list(/obj/item/weapon/weldingtool)
time = 120
time = 60
category = CAT_ROBOT
/datum/crafting_recipe/cleanbot
@@ -73,7 +99,7 @@
reqs = list(/obj/item/weapon/reagent_containers/glass/bucket = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/robot_parts/r_arm = 1)
time = 80
time = 40
category = CAT_ROBOT
/datum/crafting_recipe/floorbot
@@ -83,7 +109,7 @@
/obj/item/stack/tile/plasteel = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/robot_parts/r_arm = 1)
time = 80
time = 40
category = CAT_ROBOT
/datum/crafting_recipe/medbot
@@ -93,7 +119,7 @@
/obj/item/weapon/storage/firstaid = 1,
/obj/item/device/assembly/prox_sensor = 1,
/obj/item/robot_parts/r_arm = 1)
time = 80
time = 40
category = CAT_ROBOT
/datum/crafting_recipe/flamethrower
@@ -101,9 +127,11 @@
result = /obj/item/weapon/flamethrower
reqs = list(/obj/item/weapon/weldingtool = 1,
/obj/item/device/assembly/igniter = 1,
/obj/item/stack/rods = 2)
/obj/item/stack/rods = 1)
parts = list(/obj/item/device/assembly/igniter = 1,
/obj/item/weapon/weldingtool = 1)
tools = list(/obj/item/weapon/screwdriver)
time = 20
time = 10
category = CAT_WEAPON
/datum/crafting_recipe/meteorshot
@@ -171,7 +199,8 @@
name = "Overload Improvised Shell"
result = /obj/item/ammo_casing/shotgun/improvised/overload
reqs = list(/obj/item/ammo_casing/shotgun/improvised = 1,
/datum/reagent/blackpowder = 5)
/datum/reagent/blackpowder = 10,
/datum/reagent/plasma_dust = 20)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
@@ -194,7 +223,26 @@
/obj/item/weaponcrafting/stock = 1,
/obj/item/stack/packageWrap = 5,)
tools = list(/obj/item/weapon/screwdriver)
time = 200
time = 100
category = CAT_WEAPON
/datum/crafting_recipe/chainsaw
name = "Chainsaw"
result = /obj/item/weapon/twohanded/required/chainsaw
reqs = list(/obj/item/weapon/circular_saw = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/stack/sheet/plasteel = 1)
tools = list(/obj/item/weapon/weldingtool)
time = 50
category = CAT_WEAPON
/datum/crafting_recipe/spear
name = "Spear"
result = /obj/item/weapon/twohanded/spear
reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1,
/obj/item/weapon/shard = 1,
/obj/item/stack/rods = 1)
time = 40
category = CAT_WEAPON
/datum/crafting_recipe/spooky_camera
@@ -205,10 +253,17 @@
/datum/reagent/holywater = 10)
parts = list(/obj/item/device/camera = 1)
/datum/crafting_recipe/papersack
name = "Paper Sack"
result = /obj/item/weapon/storage/box/papersack
time = 10
reqs = list(/obj/item/weapon/paper = 5)
category = CAT_MISC
/datum/crafting_recipe/notreallysoap
name = "Homemade Soap"
result = /obj/item/weapon/soap/ducttape
time = 100
time = 50
reqs = list(/obj/item/stack/tape_roll = 1,
/datum/reagent/liquidgibs = 10)
@@ -224,7 +279,7 @@
/datum/crafting_recipe/makeshift_bolt
name = "Makeshift Bolt"
result = /obj/item/weapon/arrow/rod
time = 15
time = 5
reqs = list(/obj/item/stack/rods = 1)
tools = list(/obj/item/weapon/weldingtool)
category = CAT_AMMO
@@ -232,7 +287,7 @@
/datum/crafting_recipe/crossbow
name = "Powered Crossbow"
result = /obj/item/weapon/gun/throw/crossbow
time = 300
time = 150
reqs = list(/obj/item/stack/rods = 3,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/sheet/mineral/plastic = 3,
@@ -247,3 +302,11 @@
time = 15
reqs = list(/obj/item/clothing/gloves/color/latex = 1,
/obj/item/stack/cable_coil = 5)
/datum/crafting_recipe/gold_horn
name = "Golden bike horn"
result = /obj/item/weapon/bikehorn/golden
time = 20
reqs = list(/obj/item/stack/sheet/mineral/bananium = 5,
/obj/item/weapon/bikehorn)
category = CAT_MISC
+1 -1
View File
@@ -149,7 +149,7 @@ var/list/event_last_fired = list()
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
//new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 100)),
//new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100)),
//new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 250, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150)),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 50), 1),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
@@ -1,327 +1,333 @@
////////////////////////////////////////////////////////////////////////////////
/// Drinks.
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/drinks
name = "drink"
desc = "yummy"
icon = 'icons/obj/drinks.dmi'
icon_state = null
flags = OPENCONTAINER
consume_sound = 'sound/items/drink.ogg'
possible_transfer_amounts = list(5,10,15,20,25,30,50)
volume = 50
/obj/item/weapon/reagent_containers/food/drinks/New()
..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
bitesize = amount_per_transfer_from_this
if(bitesize < 5)
bitesize = 5
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user)
return
/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M, mob/user, def_zone)
if(!reagents || !reagents.total_volume)
to_chat(user, "<span class='warning'> None of [src] left, oh no!</span>")
return 0
if(istype(M, /mob/living/carbon))
var/mob/living/carbon/C = M
if(C.eat(src, user))
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
var/mob/living/silicon/robot/borg = user
borg.cell.use(30)
var/refill = reagents.get_master_reagent_id()
if(refill in drinks) // Only synthesize drinks
spawn(600)
reagents.add_reagent(refill, bitesize)
return 1
return 0
/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
if(!proximity) return
// Moved from the can code; not necessary since closed cans aren't open containers now, but, eh.
if(istype(target, /obj/item/weapon/reagent_containers/food/drinks/cans))
var/obj/item/weapon/reagent_containers/food/drinks/cans/cantarget = target
if(cantarget.canopened == 0)
to_chat(user, "<span class='notice'>You need to open the drink you want to pour into!</span>")
return
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(!target.reagents.total_volume)
to_chat(user, "<span class='warning'> [target] is empty.</span>")
return
if(reagents.total_volume >= reagents.maximum_volume)
to_chat(user, "<span class='warning'> [src] is full.</span>")
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
to_chat(user, "<span class='notice'> You fill [src] with [trans] units of the contents of [target].</span>")
else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
if(!reagents.total_volume)
to_chat(user, "<span class='warning'> [src] is empty.</span>")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "<span class='warning'> [target] is full.</span>")
return
var/datum/reagent/refill
var/datum/reagent/refillName
if(isrobot(user))
refill = reagents.get_master_reagent_id()
refillName = reagents.get_master_reagent_name()
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'> You transfer [trans] units of the solution to [target].</span>")
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
if(refill in drinks) // Only synthesize drinks
var/mob/living/silicon/robot/bro = user
var/chargeAmount = max(30,4*trans)
bro.cell.use(chargeAmount)
to_chat(user, "Now synthesizing [trans] units of [refillName]...")
spawn(300)
reagents.add_reagent(refill, trans)
to_chat(user, "Cyborg [src] refilled.")
return
/obj/item/weapon/reagent_containers/food/drinks/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
return
if(is_hot(I))
if(src.reagents)
src.reagents.chem_temp += 15
to_chat(user, "<span class='notice'>You heat [src] with [I].</span>")
src.reagents.handle_reactions()
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume==0)
to_chat(user, "<span class='notice'> \The [src] is empty!</span>")
else if(reagents.total_volume<=src.volume/4)
to_chat(user, "<span class='notice'> \The [src] is almost empty!</span>")
else if(reagents.total_volume<=src.volume*0.66)
to_chat(user, "<span class='notice'> \The [src] is half full!</span>")// We're all optimistic, right?!
else if(reagents.total_volume<=src.volume*0.90)
to_chat(user, "<span class='notice'> \The [src] is almost full!</span>")
else
to_chat(user, "<span class='notice'> \The [src] is full!</span>")
////////////////////////////////////////////////////////////////////////////////
/// Drinks. END
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/drinks/trophy
name = "pewter cup"
desc = "Everyone gets a trophy."
icon_state = "pewter_cup"
w_class = 1
force = 1
throwforce = 1
amount_per_transfer_from_this = 5
materials = list(MAT_METAL=100)
possible_transfer_amounts = list()
volume = 5
flags = CONDUCT | OPENCONTAINER
/obj/item/weapon/reagent_containers/food/drinks/trophy/gold_cup
name = "gold cup"
desc = "You're winner!"
icon_state = "golden_cup"
w_class = 4
force = 14
throwforce = 10
amount_per_transfer_from_this = 20
materials = list(MAT_GOLD=1000)
volume = 150
/obj/item/weapon/reagent_containers/food/drinks/trophy/silver_cup
name = "silver cup"
desc = "Best loser!"
icon_state = "silver_cup"
w_class = 3
force = 10
throwforce = 8
amount_per_transfer_from_this = 15
materials = list(MAT_SILVER=800)
volume = 100
/obj/item/weapon/reagent_containers/food/drinks/trophy/bronze_cup
name = "bronze cup"
desc = "At least you ranked!"
icon_state = "bronze_cup"
w_class = 2
force = 5
throwforce = 4
amount_per_transfer_from_this = 10
materials = list(MAT_METAL=400)
volume = 25
///////////////////////////////////////////////Drinks
//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
// Formatting is the same as food.
/obj/item/weapon/reagent_containers/food/drinks/coffee
name = "Robust Coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
icon_state = "coffee"
list_reagents = list("coffee" = 30)
/obj/item/weapon/reagent_containers/food/drinks/ice
name = "Ice Cup"
desc = "Careful, cold ice, do not chew."
icon_state = "coffee"
list_reagents = list("ice" = 30)
/obj/item/weapon/reagent_containers/food/drinks/tea
name = "Duke Purple Tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
list_reagents = list("tea" = 30)
/obj/item/weapon/reagent_containers/food/drinks/tea/New()
..()
if(prob(20))
reagents.add_reagent("mugwort", 3)
/obj/item/weapon/reagent_containers/food/drinks/mugwort
name = "Mugwort Tea"
desc = "A bitter herbal tea."
icon_state = "manlydorfglass"
item_state = "coffee"
list_reagents = list("mugwort" = 30)
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
name = "Dutch Hot Coco"
desc = "Made in Space South America."
list_reagents = list("hot_coco" = 30, "sugar" = 5)
/obj/item/weapon/reagent_containers/food/drinks/chocolate
name = "Hot Chocolate"
desc = "Made in Space Switzerland."
icon_state = "hot_coco"
item_state = "coffee"
list_reagents = list("chocolate" = 30)
/obj/item/weapon/reagent_containers/food/drinks/weightloss
name = "Weight-Loss Shake"
desc = "A shake designed to cause weight loss. The package proudly proclaims that it is 'tapeworm free.'"
icon_state = "coffee"
item_state = "coffee"
list_reagents = list("lipolicide" = 30, "chocolate" = 5)
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
name = "Cup Ramen"
desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years."
icon_state = "ramen"
list_reagents = list("dry_ramen" = 30)
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New()
..()
if(prob(20))
reagents.add_reagent("enzyme", 3)
/obj/item/weapon/reagent_containers/food/drinks/chicken_soup
name = "Cup Chicken Soup"
desc = "A delicious and soothing cup of chicken noodle soup; just like spessmom used to make it."
icon_state = "ramen"
list_reagents = list("chicken_soup" = 30)
/obj/item/weapon/reagent_containers/food/drinks/sillycup
name = "paper cup"
desc = "A paper water cup."
icon_state = "water_cup_e"
possible_transfer_amounts = list()
volume = 10
/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change()
if(reagents.total_volume)
icon_state = "water_cup"
else
icon_state = "water_cup_e"
//////////////////////////drinkingglass and shaker//
//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass
// icon states.
/obj/item/weapon/reagent_containers/food/drinks/shaker
name = "shaker"
desc = "A metal shaker to mix drinks in."
icon_state = "shaker"
materials = list(MAT_METAL=1500)
amount_per_transfer_from_this = 10
volume = 100
/obj/item/weapon/reagent_containers/food/drinks/flask
name = "flask"
desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go."
icon_state = "flask"
materials = list(MAT_METAL=250)
volume = 60
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask
name = "flask"
desc = "For those who can't be bothered to hang out at the bar to drink."
icon_state = "barflask"
/obj/item/weapon/reagent_containers/food/drinks/flask/gold
name = "captain's flask"
desc = "A gold flask belonging to the captain."
icon_state = "flask_gold"
materials = list(MAT_GOLD=500)
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
name = "detective's flask"
desc = "The detective's only true friend."
icon_state = "detflask"
list_reagents = list("whiskey" = 30)
/obj/item/weapon/reagent_containers/food/drinks/flask/hand_made
name = "handmade flask"
desc = "A wooden flask with a silver lid and bottom. It has a matte, dark blue paint on it with the initials \"W.H.\" etched in black."
icon = 'icons/obj/custom_items.dmi'
icon_state = "williamhackett"
materials = list()
/obj/item/weapon/reagent_containers/food/drinks/flask/thermos
name = "vintage thermos"
desc = "An older thermos with a faint shine."
icon_state = "thermos"
volume = 50
/obj/item/weapon/reagent_containers/food/drinks/flask/shiny
name = "shiny flask"
desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
icon_state = "shinyflask"
volume = 50
/obj/item/weapon/reagent_containers/food/drinks/flask/lithium
name = "Lithium Flask"
desc = "A flask with a Lithium Atom symbol on it."
icon = 'icons/obj/custom_items.dmi'
icon_state = "lithiumflask"
volume = 50
/obj/item/weapon/reagent_containers/food/drinks/britcup
name = "cup"
desc = "A cup with the british flag emblazoned on it."
icon_state = "britcup"
////////////////////////////////////////////////////////////////////////////////
/// Drinks.
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/drinks
name = "drink"
desc = "yummy"
icon = 'icons/obj/drinks.dmi'
icon_state = null
flags = OPENCONTAINER
consume_sound = 'sound/items/drink.ogg'
possible_transfer_amounts = list(5,10,15,20,25,30,50)
volume = 50
/obj/item/weapon/reagent_containers/food/drinks/New()
..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
bitesize = amount_per_transfer_from_this
if(bitesize < 5)
bitesize = 5
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user)
return
/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M, mob/user, def_zone)
if(!reagents || !reagents.total_volume)
to_chat(user, "<span class='warning'> None of [src] left, oh no!</span>")
return 0
if(istype(M, /mob/living/carbon))
var/mob/living/carbon/C = M
if(C.eat(src, user))
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
var/mob/living/silicon/robot/borg = user
borg.cell.use(30)
var/refill = reagents.get_master_reagent_id()
if(refill in drinks) // Only synthesize drinks
spawn(600)
reagents.add_reagent(refill, bitesize)
return 1
return 0
/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
if(!proximity) return
// Moved from the can code; not necessary since closed cans aren't open containers now, but, eh.
if(istype(target, /obj/item/weapon/reagent_containers/food/drinks/cans))
var/obj/item/weapon/reagent_containers/food/drinks/cans/cantarget = target
if(cantarget.canopened == 0)
to_chat(user, "<span class='notice'>You need to open the drink you want to pour into!</span>")
return
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(!target.reagents.total_volume)
to_chat(user, "<span class='warning'> [target] is empty.</span>")
return
if(reagents.total_volume >= reagents.maximum_volume)
to_chat(user, "<span class='warning'> [src] is full.</span>")
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
to_chat(user, "<span class='notice'> You fill [src] with [trans] units of the contents of [target].</span>")
else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
if(!reagents.total_volume)
to_chat(user, "<span class='warning'> [src] is empty.</span>")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "<span class='warning'> [target] is full.</span>")
return
var/datum/reagent/refill
var/datum/reagent/refillName
if(isrobot(user))
refill = reagents.get_master_reagent_id()
refillName = reagents.get_master_reagent_name()
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'> You transfer [trans] units of the solution to [target].</span>")
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
if(refill in drinks) // Only synthesize drinks
var/mob/living/silicon/robot/bro = user
var/chargeAmount = max(30,4*trans)
bro.cell.use(chargeAmount)
to_chat(user, "Now synthesizing [trans] units of [refillName]...")
spawn(300)
reagents.add_reagent(refill, trans)
to_chat(user, "Cyborg [src] refilled.")
return
/obj/item/weapon/reagent_containers/food/drinks/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
return
if(is_hot(I))
if(src.reagents)
src.reagents.chem_temp += 15
to_chat(user, "<span class='notice'>You heat [src] with [I].</span>")
src.reagents.handle_reactions()
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume==0)
to_chat(user, "<span class='notice'> \The [src] is empty!</span>")
else if(reagents.total_volume<=src.volume/4)
to_chat(user, "<span class='notice'> \The [src] is almost empty!</span>")
else if(reagents.total_volume<=src.volume*0.66)
to_chat(user, "<span class='notice'> \The [src] is half full!</span>")// We're all optimistic, right?!
else if(reagents.total_volume<=src.volume*0.90)
to_chat(user, "<span class='notice'> \The [src] is almost full!</span>")
else
to_chat(user, "<span class='notice'> \The [src] is full!</span>")
////////////////////////////////////////////////////////////////////////////////
/// Drinks. END
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/drinks/trophy
name = "pewter cup"
desc = "Everyone gets a trophy."
icon_state = "pewter_cup"
w_class = 1
force = 1
throwforce = 1
amount_per_transfer_from_this = 5
materials = list(MAT_METAL=100)
possible_transfer_amounts = list()
volume = 5
flags = CONDUCT | OPENCONTAINER
/obj/item/weapon/reagent_containers/food/drinks/trophy/gold_cup
name = "gold cup"
desc = "You're winner!"
icon_state = "golden_cup"
w_class = 4
force = 14
throwforce = 10
amount_per_transfer_from_this = 20
materials = list(MAT_GOLD=1000)
volume = 150
/obj/item/weapon/reagent_containers/food/drinks/trophy/silver_cup
name = "silver cup"
desc = "Best loser!"
icon_state = "silver_cup"
w_class = 3
force = 10
throwforce = 8
amount_per_transfer_from_this = 15
materials = list(MAT_SILVER=800)
volume = 100
/obj/item/weapon/reagent_containers/food/drinks/trophy/bronze_cup
name = "bronze cup"
desc = "At least you ranked!"
icon_state = "bronze_cup"
w_class = 2
force = 5
throwforce = 4
amount_per_transfer_from_this = 10
materials = list(MAT_METAL=400)
volume = 25
///////////////////////////////////////////////Drinks
//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
// Formatting is the same as food.
/obj/item/weapon/reagent_containers/food/drinks/coffee
name = "Robust Coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
icon_state = "coffee"
list_reagents = list("coffee" = 30)
/obj/item/weapon/reagent_containers/food/drinks/ice
name = "Ice Cup"
desc = "Careful, cold ice, do not chew."
icon_state = "coffee"
list_reagents = list("ice" = 30)
/obj/item/weapon/reagent_containers/food/drinks/tea
name = "Duke Purple Tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
icon_state = "teacup"
item_state = "coffee"
list_reagents = list("tea" = 30)
/obj/item/weapon/reagent_containers/food/drinks/tea/New()
..()
if(prob(20))
reagents.add_reagent("mugwort", 3)
/obj/item/weapon/reagent_containers/food/drinks/mugwort
name = "Mugwort Tea"
desc = "A bitter herbal tea."
icon_state = "manlydorfglass"
item_state = "coffee"
list_reagents = list("mugwort" = 30)
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
name = "Dutch Hot Coco"
desc = "Made in Space South America."
icon_state = "hot_coco"
item_state = "coffee"
list_reagents = list("hot_coco" = 30, "sugar" = 5)
/obj/item/weapon/reagent_containers/food/drinks/chocolate
name = "Hot Chocolate"
desc = "Made in Space Switzerland."
icon_state = "hot_coco"
item_state = "coffee"
list_reagents = list("chocolate" = 30)
/obj/item/weapon/reagent_containers/food/drinks/weightloss
name = "Weight-Loss Shake"
desc = "A shake designed to cause weight loss. The package proudly proclaims that it is 'tapeworm free.'"
icon_state = "coffee"
list_reagents = list("lipolicide" = 30, "chocolate" = 5)
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
name = "Cup Ramen"
desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years."
icon_state = "ramen"
item_state = "coffee"
list_reagents = list("dry_ramen" = 30)
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New()
..()
if(prob(20))
reagents.add_reagent("enzyme", 3)
/obj/item/weapon/reagent_containers/food/drinks/chicken_soup
name = "Cup Chicken Soup"
desc = "A delicious and soothing cup of chicken noodle soup; just like spessmom used to make it."
icon_state = "ramen"
item_state = "coffee"
list_reagents = list("chicken_soup" = 30)
/obj/item/weapon/reagent_containers/food/drinks/sillycup
name = "paper cup"
desc = "A paper water cup."
icon_state = "water_cup_e"
item_state = "coffee"
possible_transfer_amounts = list()
volume = 10
/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change()
if(reagents.total_volume)
icon_state = "water_cup"
else
icon_state = "water_cup_e"
//////////////////////////drinkingglass and shaker//
//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass
// icon states.
/obj/item/weapon/reagent_containers/food/drinks/shaker
name = "shaker"
desc = "A metal shaker to mix drinks in."
icon_state = "shaker"
materials = list(MAT_METAL=1500)
amount_per_transfer_from_this = 10
volume = 100
/obj/item/weapon/reagent_containers/food/drinks/flask
name = "flask"
desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go."
icon_state = "flask"
materials = list(MAT_METAL=250)
volume = 60
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask
name = "flask"
desc = "For those who can't be bothered to hang out at the bar to drink."
icon_state = "barflask"
/obj/item/weapon/reagent_containers/food/drinks/flask/gold
name = "captain's flask"
desc = "A gold flask belonging to the captain."
icon_state = "flask_gold"
materials = list(MAT_GOLD=500)
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
name = "detective's flask"
desc = "The detective's only true friend."
icon_state = "detflask"
list_reagents = list("whiskey" = 30)
/obj/item/weapon/reagent_containers/food/drinks/flask/hand_made
name = "handmade flask"
desc = "A wooden flask with a silver lid and bottom. It has a matte, dark blue paint on it with the initials \"W.H.\" etched in black."
icon = 'icons/obj/custom_items.dmi'
icon_state = "williamhackett"
materials = list()
/obj/item/weapon/reagent_containers/food/drinks/flask/thermos
name = "vintage thermos"
desc = "An older thermos with a faint shine."
icon_state = "thermos"
volume = 50
/obj/item/weapon/reagent_containers/food/drinks/flask/shiny
name = "shiny flask"
desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
icon_state = "shinyflask"
volume = 50
/obj/item/weapon/reagent_containers/food/drinks/flask/lithium
name = "Lithium Flask"
desc = "A flask with a Lithium Atom symbol on it."
icon = 'icons/obj/custom_items.dmi'
icon_state = "lithiumflask"
volume = 50
/obj/item/weapon/reagent_containers/food/drinks/britcup
name = "cup"
desc = "A cup with the british flag emblazoned on it."
icon_state = "britcup"
volume = 30
@@ -1,279 +1,346 @@
///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
//Bottles now weaken and break when smashed on people's heads. - Giacom
/obj/item/weapon/reagent_containers/food/drinks/bottle
amount_per_transfer_from_this = 10
volume = 100
throwforce = 15
item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target, mob/living/user, ranged = 0)
//Creates a shattering noise and replaces the bottle with a broken_bottle
var/new_location = get_turf(loc)
var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(new_location)
if(ranged)
B.loc = new_location
else
user.drop_item()
user.put_in_active_hand(B)
B.icon_state = src.icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
B.icon = I
if(isGlass)
if(prob(33))
new/obj/item/weapon/shard(new_location)
playsound(src, "shatter", 70, 1)
else
B.name = "broken carton"
B.force = 0
B.throwforce = 0
B.desc = "A carton with the bottom half burst open. Might give you a papercut."
transfer_fingerprints_to(B)
qdel(src)
/obj/item/weapon/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user)
if(!target)
return
if(user.a_intent != I_HARM || !isGlass)
return ..()
force = 15 //Smashing bottles over someoen's head hurts.
var/obj/item/organ/external/affecting = user.zone_sel.selecting //Find what the player is aiming at
var/armor_block = 0 //Get the target's armor values for normal attack damage.
var/armor_duration = 0 //The more force the bottle has, the longer the duration.
//Calculating duration and calculating damage.
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/headarmor = 0 // Target's head armor
armor_block = H.run_armor_check(affecting, "melee","","",armour_penetration) // For normal attack damage
//If they have a hat/helmet and the user is targeting their head.
if(istype(H.head, /obj/item/clothing/head) && affecting == "head")
// If their head has an armor value, assign headarmor to it, else give it 0.
if(H.head.armor["melee"])
headarmor = H.head.armor["melee"]
else
headarmor = 0
else
headarmor = 0
//Calculate the weakening duration for the target.
armor_duration = (duration - headarmor) + force
else
//Only humans can have armor, right?
armor_block = target.run_armor_check(affecting, "melee")
if(affecting == "head")
armor_duration = duration + force
armor_duration /= 10
//Apply the damage!
armor_block = min(90, armor_block)
target.apply_damage(force, BRUTE, affecting, armor_block)
// You are going to knock someone out for longer if they are not wearing a helmet.
var/head_attack_message = ""
if(affecting == "head" && iscarbon(target))
head_attack_message = " on the head"
//Weaken the target for the duration that we calculated and divide it by 5.
if(armor_duration)
target.apply_effect(min(armor_duration, 10) , WEAKEN) // Never weaken more than a flash!
//Display an attack message.
if(target != user)
target.visible_message("<span class='danger'>[user] has hit [target][head_attack_message] with a bottle of [src.name]!</span>", \
"<span class='userdanger'>[user] has hit [target][head_attack_message] with a bottle of [src.name]!</span>")
else
user.visible_message("<span class='danger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>", \
"<span class='userdanger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>")
//Attack logs
add_logs(target, user, "attacked", src)
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
SplashReagents(target)
//Finally, smash the bottle. This kills (del) the bottle.
smash(target, user)
/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/SplashReagents(mob/M)
if(reagents && reagents.total_volume)
M.visible_message("<span class='danger'>The contents of \the [src] splashes all over [M]!</span>")
reagents.reaction(M, TOUCH)
reagents.clear_reagents()
//Keeping this here for now, I'll ask if I should keep it here.
/obj/item/weapon/broken_bottle
name = "Broken Bottle"
desc = "A bottle with a sharp broken bottom."
icon = 'icons/obj/drinks.dmi'
icon_state = "broken_bottle"
force = 9
throwforce = 5
throw_speed = 3
throw_range = 5
w_class = 1
item_state = "beer"
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("stabbed", "slashed", "attacked")
var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
sharp = 1
edge = 1
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
name = "Griffeater Gin"
desc = "A bottle of high quality gin, produced in the New London Space Station."
icon_state = "ginbottle"
list_reagents = list("gin" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
name = "Uncle Git's Special Reserve"
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
icon_state = "whiskeybottle"
list_reagents = list("whiskey" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka
name = "Tunguska Triple Distilled"
desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide."
icon_state = "vodkabottle"
list_reagents = list("vodka" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/badminka
name = "Badminka Vodka"
desc = "The label's written in Cyrillic. All you can make out is the name and a word that looks vaguely like 'Vodka'."
icon_state = "badminka"
list_reagents = list("vodka" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila
name = "Caccavo Guaranteed Quality Tequila"
desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
icon_state = "tequilabottle"
list_reagents = list("tequila" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
name = "Bottle of Nothing"
desc = "A bottle filled with nothing."
icon_state = "bottleofnothing"
list_reagents = list("nothing" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
name = "Wrapp Artiste Patron"
desc = "Silver laced tequila, served in space night clubs across the galaxy."
icon_state = "patronbottle"
list_reagents = list("patron" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum
name = "Captain Pete's Cuban Spiced Rum"
desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
icon_state = "rumbottle"
list_reagents = list("rum" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater
name = "Flask of Holy Water"
desc = "A flask of the chaplain's holy water."
icon_state = "holyflask"
list_reagents = list("holywater" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell
desc = "A flask of holy water...it's been sitting in the Necropolis a while though."
list_reagents = list("hell_water" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
name = "Goldeneye Vermouth"
desc = "Sweet, sweet dryness~"
icon_state = "vermouthbottle"
list_reagents = list("vermouth" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua
name = "Robert Robust's Coffee Liqueur"
desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK."
icon_state = "kahluabottle"
list_reagents = list("kahlua" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager
name = "College Girl Goldschlager"
desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
icon_state = "goldschlagerbottle"
list_reagents = list("goldschlager" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
name = "Chateau De Baton Premium Cognac"
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
icon_state = "cognacbottle"
list_reagents = list("cognac" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine
name = "Doublebeard Bearded Special Wine"
desc = "A faint aura of unease and asspainery surrounds the bottle."
icon_state = "winebottle"
list_reagents = list("wine" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
name = "Extra-Strong Absinthe"
desc = "An strong alcoholic drink brewed and distributed by"
icon_state = "absinthebottle"
list_reagents = list("absinthe" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/premium
name = "Gwyn's Premium Absinthe"
desc = "A potent alcoholic beverage, almost makes you forget the ash in your lungs."
icon_state = "absinthepremium"
/obj/item/weapon/reagent_containers/food/drinks/bottle/hcider
name = "Jian Hard Cider"
desc = "Apple juice for adults."
icon_state = "hcider"
volume = 50
list_reagents = list("suicider" = 50)
//////////////////////////JUICES AND STUFF ///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
name = "Orange Juice"
desc = "Full of vitamins and deliciousness!"
icon_state = "orangejuice"
item_state = "carton"
isGlass = 0
list_reagents = list("orangejuice" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
name = "Milk Cream"
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
icon_state = "cream"
item_state = "carton"
isGlass = 0
list_reagents = list("cream" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
name = "Tomato Juice"
desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
icon_state = "tomatojuice"
item_state = "carton"
isGlass = 0
list_reagents = list("tomatojuice" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
name = "Lime Juice"
desc = "Sweet-sour goodness."
icon_state = "limejuice"
item_state = "carton"
isGlass = 0
list_reagents = list("limejuice" = 100)
///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
//Bottles now weaken and break when smashed on people's heads. - Giacom
/obj/item/weapon/reagent_containers/food/drinks/bottle
amount_per_transfer_from_this = 10
volume = 100
throwforce = 15
item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target, mob/living/user, ranged = 0)
//Creates a shattering noise and replaces the bottle with a broken_bottle
var/new_location = get_turf(loc)
var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(new_location)
if(ranged)
B.loc = new_location
else
user.drop_item()
user.put_in_active_hand(B)
B.icon_state = src.icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
B.icon = I
if(isGlass)
if(prob(33))
new/obj/item/weapon/shard(new_location)
playsound(src, "shatter", 70, 1)
else
B.name = "broken carton"
B.force = 0
B.throwforce = 0
B.desc = "A carton with the bottom half burst open. Might give you a papercut."
transfer_fingerprints_to(B)
qdel(src)
/obj/item/weapon/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user)
if(!target)
return
if(user.a_intent != I_HARM || !isGlass)
return ..()
force = 15 //Smashing bottles over someoen's head hurts.
var/obj/item/organ/external/affecting = user.zone_sel.selecting //Find what the player is aiming at
var/armor_block = 0 //Get the target's armor values for normal attack damage.
var/armor_duration = 0 //The more force the bottle has, the longer the duration.
//Calculating duration and calculating damage.
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/headarmor = 0 // Target's head armor
armor_block = H.run_armor_check(affecting, "melee","","",armour_penetration) // For normal attack damage
//If they have a hat/helmet and the user is targeting their head.
if(istype(H.head, /obj/item/clothing/head) && affecting == "head")
// If their head has an armor value, assign headarmor to it, else give it 0.
if(H.head.armor["melee"])
headarmor = H.head.armor["melee"]
else
headarmor = 0
else
headarmor = 0
//Calculate the weakening duration for the target.
armor_duration = (duration - headarmor) + force
else
//Only humans can have armor, right?
armor_block = target.run_armor_check(affecting, "melee")
if(affecting == "head")
armor_duration = duration + force
armor_duration /= 10
//Apply the damage!
armor_block = min(90, armor_block)
target.apply_damage(force, BRUTE, affecting, armor_block)
// You are going to knock someone out for longer if they are not wearing a helmet.
var/head_attack_message = ""
if(affecting == "head" && iscarbon(target))
head_attack_message = " on the head"
//Weaken the target for the duration that we calculated and divide it by 5.
if(armor_duration)
target.apply_effect(min(armor_duration, 10) , WEAKEN) // Never weaken more than a flash!
//Display an attack message.
if(target != user)
target.visible_message("<span class='danger'>[user] has hit [target][head_attack_message] with a bottle of [src.name]!</span>", \
"<span class='userdanger'>[user] has hit [target][head_attack_message] with a bottle of [src.name]!</span>")
else
user.visible_message("<span class='danger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>", \
"<span class='userdanger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>")
//Attack logs
add_logs(target, user, "attacked", src)
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
SplashReagents(target)
//Finally, smash the bottle. This kills (del) the bottle.
smash(target, user)
/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/SplashReagents(mob/M)
if(reagents && reagents.total_volume)
M.visible_message("<span class='danger'>The contents of \the [src] splashes all over [M]!</span>")
reagents.reaction(M, TOUCH)
reagents.clear_reagents()
//Keeping this here for now, I'll ask if I should keep it here.
/obj/item/weapon/broken_bottle
name = "Broken Bottle"
desc = "A bottle with a sharp broken bottom."
icon = 'icons/obj/drinks.dmi'
icon_state = "broken_bottle"
force = 9
throwforce = 5
throw_speed = 3
throw_range = 5
w_class = 1
item_state = "beer"
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("stabbed", "slashed", "attacked")
var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
sharp = 1
edge = 1
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
name = "Griffeater Gin"
desc = "A bottle of high quality gin, produced in the New London Space Station."
icon_state = "ginbottle"
list_reagents = list("gin" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
name = "Uncle Git's Special Reserve"
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
icon_state = "whiskeybottle"
list_reagents = list("whiskey" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka
name = "Tunguska Triple Distilled"
desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide."
icon_state = "vodkabottle"
list_reagents = list("vodka" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/badminka
name = "Badminka Vodka"
desc = "The label's written in Cyrillic. All you can make out is the name and a word that looks vaguely like 'Vodka'."
icon_state = "badminka"
list_reagents = list("vodka" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila
name = "Caccavo Guaranteed Quality Tequila"
desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
icon_state = "tequilabottle"
list_reagents = list("tequila" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
name = "Bottle of Nothing"
desc = "A bottle filled with nothing."
icon_state = "bottleofnothing"
list_reagents = list("nothing" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
name = "Wrapp Artiste Patron"
desc = "Silver laced tequila, served in space night clubs across the galaxy."
icon_state = "patronbottle"
list_reagents = list("patron" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum
name = "Captain Pete's Cuban Spiced Rum"
desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle."
icon_state = "rumbottle"
list_reagents = list("rum" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater
name = "Flask of Holy Water"
desc = "A flask of the chaplain's holy water."
icon_state = "holyflask"
list_reagents = list("holywater" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell
desc = "A flask of holy water...it's been sitting in the Necropolis a while though."
list_reagents = list("hell_water" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
name = "Goldeneye Vermouth"
desc = "Sweet, sweet dryness~"
icon_state = "vermouthbottle"
list_reagents = list("vermouth" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua
name = "Robert Robust's Coffee Liqueur"
desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK."
icon_state = "kahluabottle"
list_reagents = list("kahlua" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager
name = "College Girl Goldschlager"
desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
icon_state = "goldschlagerbottle"
list_reagents = list("goldschlager" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
name = "Chateau De Baton Premium Cognac"
desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time."
icon_state = "cognacbottle"
list_reagents = list("cognac" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine
name = "Doublebeard Bearded Special Wine"
desc = "A faint aura of unease and asspainery surrounds the bottle."
icon_state = "winebottle"
list_reagents = list("wine" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
name = "Extra-Strong Absinthe"
desc = "An strong alcoholic drink brewed and distributed by"
icon_state = "absinthebottle"
list_reagents = list("absinthe" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/premium
name = "Gwyn's Premium Absinthe"
desc = "A potent alcoholic beverage, almost makes you forget the ash in your lungs."
icon_state = "absinthepremium"
/obj/item/weapon/reagent_containers/food/drinks/bottle/hcider
name = "Jian Hard Cider"
desc = "Apple juice for adults."
icon_state = "hcider"
volume = 50
list_reagents = list("suicider" = 50)
//////////////////////////JUICES AND STUFF ///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
name = "Orange Juice"
desc = "Full of vitamins and deliciousness!"
icon_state = "orangejuice"
item_state = "carton"
isGlass = 0
list_reagents = list("orangejuice" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
name = "Milk Cream"
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
icon_state = "cream"
item_state = "carton"
isGlass = 0
list_reagents = list("cream" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
name = "Tomato Juice"
desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
icon_state = "tomatojuice"
item_state = "carton"
isGlass = 0
list_reagents = list("tomatojuice" = 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
name = "Lime Juice"
desc = "Sweet-sour goodness."
icon_state = "limejuice"
item_state = "carton"
isGlass = 0
list_reagents = list("limejuice" = 100)
////////////////////////// MOLOTOV ///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/molotov
name = "molotov cocktail"
desc = "A throwing weapon used to ignite things, typically filled with an accelerant. Recommended highly by rioters and revolutionaries. Light and toss."
icon_state = "vodkabottle"
list_reagents = list()
var/list/accelerants = list(/datum/reagent/ethanol,/datum/reagent/fuel,/datum/reagent/clf3,/datum/reagent/phlogiston,
/datum/reagent/napalm,/datum/reagent/hellwater,/datum/reagent/plasma,/datum/reagent/plasma_dust)
var/active = 0
/obj/item/weapon/reagent_containers/food/drinks/bottle/molotov/CheckParts(list/parts_list)
..()
var/obj/item/weapon/reagent_containers/food/drinks/bottle/B = locate() in contents
if(B)
icon_state = B.icon_state
B.reagents.copy_to(src, 100)
if(!B.isGlass)
desc += " You're not sure if making this out of a carton was the brightest idea."
isGlass = 0
/obj/item/weapon/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/target,mob/thrower)
var/firestarter = 0
for(var/datum/reagent/R in reagents.reagent_list)
for(var/A in accelerants)
if(istype(R, A))
firestarter = 1
break
SplashReagents(target)
if(firestarter && active)
target.fire_act()
new /obj/effect/hotspot(get_turf(target))
..()
/obj/item/weapon/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params)
if(is_hot(I) && !active)
active = 1
var/turf/bombturf = get_turf(src)
var/area/bombarea = get_area(bombturf)
message_admins("[key_name(user)]<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[bombarea] (JMP)</a>.")
log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] ([bombturf.x],[bombturf.y],[bombturf.z]).")
to_chat(user, "<span class='info'>You light [src] on fire.</span>")
overlays += fire_overlay
if(!isGlass)
spawn(50)
if(active)
var/counter
var/target = loc
for(counter = 0, counter < 2, counter++)
if(istype(target, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = target
target = S.loc
if(istype(target, /atom))
var/atom/A = target
SplashReagents(A)
A.fire_act()
qdel(src)
/obj/item/weapon/reagent_containers/food/drinks/bottle/molotov/attack_self(mob/user)
if(active)
if(!isGlass)
to_chat(user, "<span class='danger'>The flame's spread too far on it!</span>")
return
to_chat(user, "<span class='info'>You snuff out the flame on \the [src].</span>")
overlays -= fire_overlay
active = 0

Some files were not shown because too many files have changed in this diff Show More