Merge branch 'master' into stationgoals

This commit is contained in:
Mark van Alphen
2017-02-17 18:05:15 +01:00
committed by GitHub
214 changed files with 3728 additions and 1602 deletions
+1
View File
@@ -275,6 +275,7 @@ CREATE TABLE `player` (
`show_ghostitem_attack` smallint(4) DEFAULT '1',
`lastchangelog` varchar(32) NOT NULL DEFAULT '0',
`windowflashing` smallint(4) DEFAULT '1',
`ghost_anonsay` tinyint(1) NOT NULL DEFAULT '0',
`exp` mediumtext,
PRIMARY KEY (`id`),
UNIQUE KEY `ckey` (`ckey`)
+1
View File
@@ -274,6 +274,7 @@ CREATE TABLE `SS13_player` (
`show_ghostitem_attack` smallint(4) DEFAULT '1',
`lastchangelog` varchar(32) NOT NULL DEFAULT '0',
`windowflashing` smallint(4) DEFAULT '1',
`ghost_anonsay` tinyint(1) NOT NULL DEFAULT '0',
`exp` mediumtext,
PRIMARY KEY (`id`),
UNIQUE KEY `ckey` (`ckey`)
@@ -635,7 +635,7 @@
"amk" = (/turf/simulated/wall/r_wall,/area/engine/gravitygenerator)
"aml" = (/obj/structure/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox)
"amm" = (/obj/machinery/conveyor{dir = 2; id = "garbage"; layer = 2.7},/obj/machinery/door/poddoor/preopen{id_tag = "Disposal Exit"; layer = 3.1; name = "disposal exit vent"},/turf/simulated/floor/plating,/area/maintenance/disposal)
"amn" = (/obj/machinery/door_control{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/driver_button{id_tag = "trash"; pixel_x = -26; pixel_y = -6},/obj/structure/stool,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/disposal)
"amn" = (/obj/machinery/door_control{id = "trash"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/driver_button{id_tag = "trash"; pixel_x = -26; pixel_y = -6},/obj/structure/stool,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/disposal)
"amo" = (/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/disposal)
"amp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/plating,/area/maintenance/disposal)
"amq" = (/obj/effect/decal/cleanable/blood/oil,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal)
@@ -8072,6 +8072,8 @@
"cZl" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 2; initialize_directions = 11},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-24"; layer = 4.1; tag = "icon-plant-24"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main)
"cZm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/chapel/main)
"cZn" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"cZo" = (/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Emergency Shuttle Airlock"; req_access_txt = "0"},/turf/simulated/shuttle/floor,/area/shuttle/escape)
"cZp" = (/obj/docking_port/mobile/emergency{dir = 2; dwidth = 5; height = 14; width = 25},/obj/docking_port/stationary{dir = 2; dwidth = 5; height = 14; id = "emergency_home"; name = "emergency evac bay"; width = 25},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Emergency Shuttle Airlock"; req_access_txt = "0"},/turf/simulated/shuttle/floor,/area/shuttle/escape)
"cZq" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/turf/simulated/shuttle/plating{icon_state = "bot"},/area/shuttle/escape)
"cZr" = (/turf/simulated/wall,/area/toxins/xenobiology{name = "\improper Secure Lab"})
"cZs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/xenobiology{name = "\improper Secure Lab"})
@@ -8113,7 +8115,6 @@
"dah" = (/turf/simulated/shuttle/wall{icon_state = "swallc2"; dir = 2},/area/shuttle/escape)
"dai" = (/turf/simulated/shuttle/wall{icon_state = "swall0"; dir = 2},/area/shuttle/escape)
"daj" = (/obj/structure/sign/nosmoking_2,/turf/simulated/shuttle/wall{icon_state = "swall0"; dir = 2},/area/shuttle/escape)
"dak" = (/obj/docking_port/mobile/emergency{dir = 2; dwidth = 5; height = 14; width = 25},/obj/docking_port/stationary{dir = 2; dwidth = 5; height = 14; id = "emergency_home"; name = "emergency evac bay"; width = 25},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/shuttle/floor,/area/shuttle/escape)
"dal" = (/turf/simulated/shuttle/wall{icon_state = "swall4"; dir = 2},/area/shuttle/escape)
"dam" = (/obj/structure/closet/crate{name = "emergency supplies crate"},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/flashlight/flare{pixel_x = 3; pixel_y = 3},/obj/item/device/flashlight/flare{pixel_x = -6; pixel_y = -2},/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/device/radio,/turf/simulated/shuttle/plating{icon_state = "bot"},/area/shuttle/escape)
"dao" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor/preopen{id_tag = "xenobio1"; name = "containment blast door"},/turf/simulated/floor/plating,/area/toxins/xenobiology{name = "\improper Secure Lab"})
@@ -8662,7 +8663,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabqaaacTZcXjcVMcVRcWNcWNcXkcSOcSOcSOcSOcZwcWzcXmcUXcXncUXcXmcZxcZCcSOcXpcTXcXpcTXcTXcTXcTXcTXcXpcTXcXpcTXaaaabqabqcVGcXqcXrcXscXtcVGcXucXvcVGcVGcXwdeQcXycXzcVGcYccZvcYycXZcYdcYbcYdcYdcYecXZaaaaaaabqauparBaupabqabqabqabqcVJabqabqabqabqabqabearBarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcSOcSOcSOcXEcUXcUXcUXcXFcXGcSOcZQcVacXIcXJcXJcXKcXJcXJcXLcZRcVkcXMcTXcXacTXaaaaaaaaacTXcXNcTXcXacTXaaaabqaaacNzcXOcXPcXQcXRcXRcXScXTcXUcXVcXVcXWcXXcXYcNzcYccZvcYycYGcXBcXCcZycXCcXBcZzaaaaaaabqaaaabqaaaabqaaaaaaaaacYfaaaaaaabqaaaaaaaaaaaaaupaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaacTZcYgcYhcYicYjcYkcXKcYlcYmcSOcSOcSOcSOcUecUecUecUecUecSOcSOcVkcXpcTXcXpcTXaaaabqaaacTXcXpcTXcZUcZTabqabqaaacNzdeBcYpcYqcYrcYrcYscYtcYucYucYucYucYvcYwcNzcYccZvcYycOmcOmcOmcYIcfwaaaaaaaaaaaaabqaaacYAcYAcYAcYAcYAabqcYBabqcYAcYAcYAcYAcYAaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcSOcTZcSOcSOcTZcTZcTZcSOcYCcSOaaaaaacYDcYFcYFcYFcYFdahdaXcYFdaidcbcYFdcbdajcYFcYFcYFdaidakcYFdcbdalcYEcYJaaacVGcYKcYLcYMcYNcYOcYPcYQcYRdgXdgWcYUcYVcYWcVGcYcciccWkdawcOmcZfcZhcOmaaaaaaaaaaaaabqabqcYXcYYcYYcYYcYYcYZcZacZbcZccZccZccZccZdabqarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqcSOcTZcSOcSOcTZcTZcTZcSOcYCcSOaaaaaacYDcYFcYFcYFcYFdahdaXcYFdaicZocYFcZodajcYFcYFcYFdaicZpcYFdcbdalcYEcYJaaacVGcYKcYLcYMcYNcYOcYPcYQcYRdgXdgWcYUcYVcYWcVGcYcciccWkdawcOmcZfcZhcOmaaaaaaaaaaaaabqabqcYXcYYcYYcYYcYYcYZcZacZbcZccZccZccZccZdabqarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqaaaaaaabqaaaaaaaaaaaaaaaabqabqdazdbadaAdcTdcPdaBcZedcncZBdaCcZBdaDcZBdaCdaCdaDdaCdaEcZBdaCcZBcZBdaKdaJaaacVGcZrcZrcZrcZrcTkcZscZtcZucTkcZrcZrcZrcZrcVGdaLciccWkdaMdaOcZicZncfwaaaaaaaaaaaaabqabqcZAcZAcZAcZAcZAaaacYBaaacZAcZAcZAcZAcZAabqarBabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqabqabqabqabqabqabqabqabqabqdaVdaZcZedbkcZBddadbqdbhcZBcZBcZBcZBcZBcZBcZBcZBcZBcZBcZBcZBcZBcZBcZBcZgcYFaaacVGcZGcZHcZHcVbcZJcZKcZLcZMcZNcVlcZPcZPcZPcVGcYcdbudbFdbvcfwcfwcOmcfwaaaaaaaaaaaaabqaaaabqaaaabqabqabqaaacYBaaaabqaaaabqaaaabqaaaarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbNdbOcZedbPddccZBcZBdaJcZBcZBdbQdbYdbQdbQdbQcZBdbQdbQdbQdbYdbQcZBcZBdccdaiabqcVGcZPcZPcZPcZXcZYcZZdaadabdacdadcZPcZPcZPcVGcOmcfwcOmcOmcfwaaaaaaaaaaaaaaaaaaaaaabqaaacYAcYAcYAcYAcYAabqcYBabqcYAcYAcYAcYAcYAabqarBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+1 -1
View File
@@ -437,7 +437,7 @@
"iu" = (/obj/machinery/door/airlock/centcom{name = "Centcom Security"; opacity = 1; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac)
"iv" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/evac)
"iw" = (/obj/item/weapon/soap/syndie,/obj/structure/mopbucket,/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"ix" = (/obj/structure/table/woodentable,/obj/item/pizzabox,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"ix" = (/obj/structure/table/woodentable,/obj/item/pizzabox,/obj/item/device/paicard/syndicate,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"iy" = (/obj/structure/table/woodentable,/obj/item/toy/nuke,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"iz" = (/obj/effect/landmark{name = "Commando"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
"iA" = (/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark{name = "Response Team"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/ferry)
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -490,7 +490,7 @@
"jK" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/syndicate_mothership)
"jL" = (/obj/docking_port/stationary/transit{dwidth = 3; height = 7; id = "steel_rain_transit"; name = "steel_rain in transit"; width = 7},/turf/space/transit/horizontal,/area/space)
"jM" = (/obj/item/weapon/soap/syndie,/obj/structure/mopbucket,/obj/machinery/light{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"jN" = (/obj/structure/table/woodentable,/obj/item/pizzabox,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"jN" = (/obj/structure/table/woodentable,/obj/item/pizzabox,/obj/item/device/paicard/syndicate,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"jO" = (/obj/structure/table/woodentable,/obj/item/toy/nuke,/turf/unsimulated/floor{dir = 2; icon_state = "wood"},/area/syndicate_mothership)
"jP" = (/turf/unsimulated/wall/abductor{icon_state = "alien21"},/area/abductor_ship)
"jQ" = (/turf/unsimulated/wall/abductor{icon_state = "alien20"},/area/abductor_ship)
+8 -7
View File
@@ -1152,7 +1152,7 @@
"wh" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"wi" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/mining,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel,/area/mine/eva)
"wj" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/mining,/turf/simulated/floor/plasteel,/area/mine/eva)
"wk" = (/obj/structure/rack,/obj/item/weapon/storage/backpack/satchel,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/belt/utility,/obj/machinery/light/small{dir = 1},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/mine/eva)
"wk" = (/obj/structure/rack,/obj/machinery/light/small{dir = 1},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/clothing/suit/space/rig/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/mining,/turf/simulated/floor/plasteel,/area/mine/eva)
"wl" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/dangerous/explored)
"wm" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/mine/west_outpost)
"wn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_mining{name = "Break Room"; req_access_txt = "54"},/turf/simulated/floor/plasteel,/area/mine/west_outpost)
@@ -1174,7 +1174,7 @@
"wD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"wE" = (/turf/simulated/wall,/area/mine/lobby)
"wF" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_mining{name = "Mining Station Pod Bay"; req_access_txt = "54"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/lobby)
"wG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/camera{c_tag = "Mining Outpost EVA"; dir = 4; network = list("Mining Outpost")},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/mine/eva)
"wG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/camera{c_tag = "Mining Outpost EVA"; dir = 4; network = list("Mining Outpost")},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/rack,/obj/item/clothing/suit/space/rig/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/mining,/turf/simulated/floor/plasteel,/area/mine/eva)
"wH" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plasteel,/area/mine/eva)
"wI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/mine/eva)
"wJ" = (/obj/machinery/atmospherics/unary/portables_connector,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel,/area/mine/eva)
@@ -1195,7 +1195,7 @@
"wY" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plating,/area/mine/eva)
"wZ" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/item/device/gps/mining{gpstag = "MINE2"},/obj/item/device/gps/mining{gpstag = "MINE1"},/obj/item/device/gps/mining,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -3},/turf/simulated/floor/plasteel,/area/mine/eva)
"xa" = (/turf/simulated/floor/plasteel,/area/mine/eva)
"xb" = (/obj/structure/dispenser/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/eva)
"xb" = (/obj/structure/rack,/obj/item/weapon/storage/backpack/satchel,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plasteel,/area/mine/eva)
"xc" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/mine/eva)
"xd" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "mining_east_pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/eva)
"xe" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "mining_east_pump"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva)
@@ -1258,7 +1258,7 @@
"yj" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/mine/eva)
"yk" = (/obj/machinery/power/apc{dir = 2; name = "Mining EVA APC"; pixel_x = 1; pixel_y = -23},/obj/structure/cable,/turf/simulated/floor/plasteel,/area/mine/eva)
"yl" = (/obj/machinery/mineral/equipment_vendor,/turf/simulated/floor/plasteel,/area/mine/eva)
"ym" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel,/area/mine/eva)
"ym" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/mine/eva)
"yn" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/mine/eva)
"yo" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_east_pump"; tag_exterior_door = "mining_east_outer"; frequency = 1379; id_tag = "mining_east_airlock"; tag_interior_door = "mining_east_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_chamber_sensor = "mining_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "mining_east_pump"},/turf/simulated/floor/plasteel,/area/mine/eva)
"yp" = (/obj/machinery/camera{c_tag = "Mining Outpost Starboard External Airlock"; dir = 1; network = list("Mining Outpost")},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "mining_east_sensor"; pixel_x = 0; pixel_y = -25},/obj/structure/ore_box,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "mining_east_pump"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva)
@@ -1373,6 +1373,7 @@
"Au" = (/turf/simulated/wall,/area/mine/living_quarters{name = "Mining Station Break Room"})
"Av" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/mine/living_quarters{name = "Mining Station Break Room"})
"Aw" = (/obj/effect/spawner/window/reinforced,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/mine/lobby)
"Ax" = (/obj/machinery/light/small,/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel,/area/mine/eva)
"AB" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/mine/lobby)
"AC" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/lobby)
"AD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Mining Shuttle Airlock"; dir = 8; network = list("Mining Outpost")},/turf/simulated/floor/plasteel,/area/mine/lobby)
@@ -1619,10 +1620,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaccsacacacacaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacbjbjacaaaaaaaaaeaevkvkvkvkvkvkvlvlvlvkvmvkvkvkaeaeaeafacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacafafaeaeaeaeaeafafafafafacacacacacacacbjbjbjbjuEuEuEuEvnvovpuEuIvquEvruEuEuEuVuVuVuEaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafaeaeaeaeoapSpUpTpApVphaeaeaeaeaeaeaeaeafafafafafoBoBoBoBoBoBoBoBoBoBafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacacacaaaaafaeaeaevkvvvwvxvyvzvAvBvCvDvEvFvGvyrkaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacafafaeaeaeaeaeaeaeaeaeaeafafafafafacacacacbjbjbjuEvHvIvJvKvIvIuEuMuNvLuKuEvMvNvOvOvOuVaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafaeaeaeaeqdqcqsqqwXvPvRvRvQvQaeaeaeaeaeaeafafafafoBoBoBoBoBoBoBoBoBoBafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaacacacaaaaacafaeaeaevkvSvTvUvyvTvVvTvTvWvXvYvGvZviaeaeaeaeaeafafafacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjacacafafnfaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafacacacacacacuEwbvIwcwdwewfuEuEuEuEuKuEvMwgwgwgwhuVaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeqdxwzgxFwXwiwjwjwkvQaevjaeaeaenXnfafafafoBoBoBoBoBoBoBoBoBoBafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacafaeaeaevkwmvTvTwnvTvVwovTvTvywpwqvyrKaeaeaeaeaeaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjacacafafaevbaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafacacacuEwrwswtvIwuwvwwwhwxwywzuEoTwgwBwCwDuVaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaezRzRwTwFwXwGwHwIwJvQvQvQvQaeaeaeaeafafafafoBoBoBoBoBoBoBoBoBafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacafafaeaevkwKvTwLvEwMwNwOvTvkvkvkvkvkvmrjrkaeaeaeaeaeaeaeaeafafafacacacacacbjbjbjbjbjbjbjacacacafaeaeaeaeaeaeaeaeaeaeaerjrkaeaeaeaeaeaeaeaeaeafafacacwPuEuEuEwQuEuEwRwSwUwRwSuEuEuEuEuExruEuEuVuVaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaexuxuwVAMABwYwZxaxaxbxcxdxexcrkaeaeaenlafafafoBoBoBoBoBoBoBafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacafaeaeaevkwmvTvTwnvTvVwovTvTvywpwqvyrKaeaeaeaeaeaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjacacafafaevbaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafacacacuEwrwswtvIwuwvwwwhwxwywzuEoTwgwBwCwDuVaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaezRzRwTwFwXwGwHwIxbvQvQvQvQaeaeaeaeafafafafoBoBoBoBoBoBoBoBoBafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacafafaeaevkwKvTwLvEwMwNwOvTvkvkvkvkvkvmrjrkaeaeaeaeaeaeaeaeafafafacacacacacbjbjbjbjbjbjbjacacacafaeaeaeaeaeaeaeaeaeaeaerjrkaeaeaeaeaeaeaeaeaeafafacacwPuEuEuEwQuEuEwRwSwUwRwSuEuEuEuEuExruEuEuVuVaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaexuxuwVAMABwYwZymxawJxcxdxexcrkaeaeaenlafafafoBoBoBoBoBoBoBafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkxfxgxhvyxixjxkxlxmxnxoxpxqxHtStTqJqJqJqJqJqFaeaeaeaeafafafacacacacacbjbjbjacacacacafafaeaetRqJqJqJqJqJqJqJqJtStTqJqJqJqJqFaeaeaeaeaeafacacacacacwQxsxtxRwgwDxvwhwDwwzJxxxywhwDwgxzxAuVuVuVxBxCxCxCxCxCxCxCxDxDxDxDxDxDxDxuxuxuxEwWBQxGybxIxaxaxJxKxLxMxNvsaeaeaenlafafafoBoBoBoBoBoBafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkvkvkvkvkxPxQyevkvkxSvkvkvkvkrCrKaeaeaeaeaepuaeaeaeaeafaeafafacacacacacacacacacacafafaeaeaepuaeaeaeaeaeaeaeaerCrKaeaeaeaepuaeaeaeaeaeafafnfafafacuEuEuEuEwgwDxTxUxVwyxWxXxXxYxYxZxXyayExXyEycycycycycycycycydydydydydydydyIyfyIygyfyhyiyjykylymynxcyoypxcrKaeaeaeaeafafafafoBoBoBoBoBafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkvkvkvkvkxPxQyevkvkxSvkvkvkvkrCrKaeaeaeaeaepuaeaeaeaeafaeafafacacacacacacacacacacafafaeaeaepuaeaeaeaeaeaeaeaerCrKaeaeaeaepuaeaeaeaeaeafafnfafafacuEuEuEuEwgwDxTxUxVwyxWxXxXxYxYxZxXyayExXyEycycycycycycycycydydydydydydydyIyfyIygyfyhyiyjykylAxynxcyoypxcrKaeaeaeaeafafafafoBoBoBoBoBafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafaeaeaeaeaevkyqyrysytvknovtofaeaeaeaeaeqvaeaeaeqEqJqJqFaeaeaeaeafacacacacacacacacacacafaeaetRqJtQaeaeaeaeafaeaeqvaeaeaeaeaeaepuaeaeaeaeaeaeaevbaeafafafafafuEwgywyxyyyyyxyzyAyByyyyyCyxyDyVyVyVyFyFyFyFyFyFyFyFyGyGyGyGyGyGyHyXyXyXyJyKyLyMyNyOyPyOyOyOyOyOyOvuaeaeaeaenlafafafoBoBoBoBafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafaeaeaeaevkyRySyTyUvkaeaeaeaeaeaeafafnfafaeaeaeaeaepuaeaeaeaeaeafacacacacacafafafafafaetRtQaeaeaeafafafafafafnfaeaeaeaeaeaepuaeaeaeaeaeaeaeaeaeaeaeafafuEuEwRAnwRuEuEyWAoyYuEuEuEyZwRuEuVaeaeaeaaaaaaaaagaaaaaaagaaaaaaaaaaagaaxuxuwWzazbzczdzezfBRzhziyOuvwaaeaeaeaeaeafafafoBoBoBoBafafafoBafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafaeaeaevkvkvkvkvkvkaeaeafafafafafacacafafaeaeaeaepuaeaeaeaeaeaeafafafafafafaeaeaeaeaepuaeaeafafafacacacacacafaeaeaeaeaeaepuaeaeaerjrkaeaeaeaeaeaeaeafuEzkwAzmzluEzozpzqzrzsuEztzuzvuEaeaeaeaeaeaeaaaaagaaaaaaagagagagagagagagagwEzwzxzyzzzAzAzBzCzCzDzEwluLaeaeaeaeaeafafafoBoBoBafafoBoBoBafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+4 -2
View File
@@ -6,7 +6,7 @@
"af" = (/turf/simulated/shuttle/wall{icon_state = "swall0"; dir = 2},/area/shuttle/escape)
"ag" = (/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/shuttle/floor,/area/shuttle/escape)
"ah" = (/obj/structure/sign/nosmoking_2,/turf/simulated/shuttle/wall{icon_state = "swall0"; dir = 2},/area/shuttle/escape)
"ai" = (/obj/docking_port/mobile/emergency{dir = 2; dwidth = 5; height = 14; name = "Meta emergency shuttle"; timid = 1; width = 25},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/shuttle/floor,/area/shuttle/escape)
"ai" = (/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Emergency Shuttle Airlock"; req_access_txt = "0"},/turf/simulated/shuttle/floor,/area/shuttle/escape)
"aj" = (/turf/simulated/shuttle/wall{icon_state = "swall4"; dir = 2},/area/shuttle/escape)
"ak" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/shuttle/escape)
"al" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/shuttle/escape)
@@ -110,9 +110,10 @@
"cf" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/shuttle/escape)
"cg" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"; dir = 2},/area/shuttle/escape)
"ch" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/shuttle/escape)
"ci" = (/obj/docking_port/mobile/emergency{dir = 2; dwidth = 5; height = 14; name = "Meta emergency shuttle"; timid = 1; width = 25},/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Emergency Shuttle Airlock"; req_access_txt = "0"},/turf/simulated/shuttle/floor,/area/shuttle/escape)
(1,1,1) = {"
aaaaabacacacacadaeacafagacagahacacacafaiacagajakal
aaaaabacacacacadaeacafaiacaiahacacacafciacagajakal
aaamanaoapaqarasatauavauawauavavawavaxauavauauayaz
aAaBasaCauaDaEaFauauauauauauauauauauauauauauauaGac
aHaIasaJaKauauazauauaLaMaLaLaLauaLaLaLaMaLauauaNaf
@@ -127,3 +128,4 @@ aOaBasbIbpbpbJaFbKbrbrbLasbMauauaublbNbpbpbpbpbAac
aabOanbPbpbpbJasbQbRbSbTasbUbVbWbXbYbZcacbcccdceaV
aaaacfacbqbqaccgakacacajcgaeacacajcgakaeacacajakch
"}
@@ -61,6 +61,7 @@
/obj/machinery/atmospherics/unary/vent_pump/New()
..()
all_vent_pumps += src
icon = null
initial_loc = get_area(loc)
area_uid = initial_loc.uid
@@ -426,6 +427,7 @@
return ..()
/obj/machinery/atmospherics/unary/vent_pump/Destroy()
all_vent_pumps -= src
if(initial_loc)
initial_loc.air_vent_info -= id_tag
initial_loc.air_vent_names -= id_tag
+12
View File
@@ -625,3 +625,15 @@ proc/dd_sortedObjectList(list/incoming)
/datum/alarm/dd_SortValue()
return "[sanitize(last_name)]"
//Picks from the list, with some safeties, and returns the "default" arg if it fails
#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default)
#define LAZYINITLIST(L) if (!L) L = list()
#define UNSETEMPTY(L) if (L && !L.len) L = null
#define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } }
#define LAZYADD(L, I) if(!L) { L = list(); } L += I;
#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null)
#define LAZYLEN(L) length(L)
#define LAZYCLEARLIST(L) if(L) L.Cut()
+1 -1
View File
@@ -250,7 +250,7 @@ Proc for attack log creation, because really why not
*/
proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=null, var/admin=1, var/print_attack_log = 1)//print_attack_log notifies admins with attack logs on
var/list/ignore=list("shaked", "CPRed", "grabbed", "punched", "disarmed")
var/list/ignore=list("shaked", "CPRed", "grabbed", "disarmed")
if(!user)
return
if(ismob(user))
+1
View File
@@ -23,6 +23,7 @@ var/global/list/rcd_list = list() //list of Rapid Construction Devices.
var/global/list/apcs = list()
var/global/list/air_alarms = list()
var/global/list/power_monitors = list()
var/global/list/all_vent_pumps = list()
var/global/list/navbeacons = list() //list of all bot nagivation beacons, used for patrolling.
var/global/list/deliverybeacons = list() //list of all MULEbot delivery beacons.
+3 -3
View File
@@ -161,13 +161,13 @@
for(var/mob/O in viewers(messagesource, null))
if(attack_verb.len)
O.show_message("<span class='danger'>[M] has been [pick(attack_verb)] with [src][showname] </span>", 1)
O.show_message("<span class='combat danger'>[M] has been [pick(attack_verb)] with [src][showname] </span>", 1)
else
O.show_message("<span class='danger'>[M] has been attacked with [src][showname] </span>", 1)
O.show_message("<span class='combat danger'>[M] has been attacked with [src][showname] </span>", 1)
if(!showname && user)
if(user.client)
to_chat(user, "<span class='danger'>You attack [M] with [src]. </span>")
to_chat(user, "<span class='combat danger'>You attack [M] with [src]. </span>")
+12
View File
@@ -86,6 +86,18 @@
overlay_updates++
SCHECK
/datum/controller/process/lighting/statProcess()
..()
stat(null, "[all_lighting_sources.len] light sources exist")
stat(null, "[all_lighting_corners.len] light corners exist")
stat(null, "[global.all_lighting_overlays.len] light overlays exist")
stat(null, "[lighting_update_lights.len] lighting sources queued")
stat(null, "[lighting_update_corners.len] lighting corners queued")
stat(null, "[lighting_update_overlays.len] lighting overlays queued")
#undef MAX_LIGHT_UPDATES_PER_WORK
#undef MAX_CORNER_UPDATES_PER_WORK
#undef MAX_OVERLAY_UPDATES_PER_WORK
+3 -3
View File
@@ -38,7 +38,7 @@
var/continuous_rounds = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke.
var/allow_Metadata = 0 // Metadata is supported.
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
var/Ticklag = 0.9
var/Ticklag = 0.5
var/Tickcomp = 0
var/socket_talk = 0 // use socket_talk to communicate with other processes
var/list/resource_urls = null
@@ -575,10 +575,10 @@
if("round_abandon_penalty_period")
config.round_abandon_penalty_period = MinutesToTicks(text2num(value))
if("medal_hub_address")
global.medal_hub = value
if("medal_hub_password")
global.medal_pass = value
+3 -3
View File
@@ -135,7 +135,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
if(H.gender == FEMALE)
g = "f"
var/icon/icobase = H.species.icobase
var/icon/icobase = head_organ.icobase //At this point all the organs would have the same icobase, so this is just recycling.
preview_icon = new /icon(icobase, "torso_[g]")
var/icon/temp
@@ -153,8 +153,8 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
if(H.body_accessory && istype(H.body_accessory, /datum/body_accessory/tail))
temp = new/icon("icon" = H.body_accessory.icon, "icon_state" = H.body_accessory.icon_state)
preview_icon.Blend(temp, ICON_OVERLAY)
else if(H.species.tail && H.species.bodyflags & HAS_TAIL)
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s")
else if(H.tail && H.species.bodyflags & HAS_TAIL)
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.tail]_s")
preview_icon.Blend(temp, ICON_OVERLAY)
for(var/obj/item/organ/external/E in H.organs)
+1 -1
View File
@@ -51,5 +51,5 @@
affected_mob.visible_message("<span class='danger'>[affected_mob] hits [M] with their thrashing!</span>")
M.adjustBruteLoss(damage)
else
playsound(affected_mob.loc, "sound/weapons/punchmiss.ogg", 25, 1, -1)
playsound(affected_mob.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
affected_mob.visible_message("<span class='danger'>[affected_mob] fails to hit [M] with their thrashing!</span>")
+1
View File
@@ -54,6 +54,7 @@
var/has_been_rev = 0//Tracks if this mind has been a rev or not
var/miming = 0 // Mime's vow of silence
var/speech_span // What span any body this mind has talks in.
var/datum/faction/faction //associated faction
var/datum/changeling/changeling //changeling holder
var/linglink
+29 -4
View File
@@ -1,9 +1,12 @@
#define PROGRESSBAR_HEIGHT 6
/datum/progressbar
var/goal = 1
var/image/bar
var/shown = 0
var/mob/user
var/client/client
var/listindex
/datum/progressbar/New(mob/User, goal_number, atom/target)
. = ..()
@@ -11,15 +14,21 @@
EXCEPTION("Invalid target given")
if(goal_number)
goal = goal_number
bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0")
bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", HUD_LAYER)
bar.plane = HUD_PLANE
bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
bar.pixel_y = 32
user = User
if(user)
client = user.client
LAZYINITLIST(user.progressbars)
LAZYINITLIST(user.progressbars[bar.loc])
var/list/bars = user.progressbars[bar.loc]
bars.Add(src)
listindex = bars.len
bar.pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1))
/datum/progressbar/proc/update(progress)
// to_chat(world, "Update [progress] - [goal] - [(progress / goal)] - [((progress / goal) * 100)] - [round(((progress / goal) * 100), 5)]")
if(!user || !user.client)
shown = 0
return
@@ -35,8 +44,24 @@
user.client.images += bar
shown = 1
/datum/progressbar/proc/shiftDown()
--listindex
bar.pixel_y -= PROGRESSBAR_HEIGHT
/datum/progressbar/Destroy()
for(var/I in user.progressbars[bar.loc])
var/datum/progressbar/P = I
if(P != src && P.listindex > listindex)
P.shiftDown()
var/list/bars = user.progressbars[bar.loc]
bars.Remove(src)
if(!bars.len)
LAZYREMOVE(user.progressbars, bar.loc)
if(client)
client.images -= bar
qdel(bar)
. = ..()
. = ..()
#undef PROGRESSBAR_HEIGHT
+43
View File
@@ -0,0 +1,43 @@
/obj/effect/proc_holder/spell/targeted/rod_form
name = "Rod Form"
desc = "Take on the form of an immovable rod, destroying all in your path."
clothes_req = 1
human_req = 0
charge_max = 600
cooldown_min = 200
range = -1
include_user = 1
invocation = "CLANG!"
invocation_type = "shout"
action_icon_state = "immrod"
/obj/effect/proc_holder/spell/targeted/rod_form/cast(list/targets,mob/user = usr)
for(var/mob/living/M in targets)
var/turf/start = get_turf(M)
var/obj/effect/immovablerod/wizard/W = new(start, get_ranged_target_turf(M, M.dir, (15 + spell_level * 3)))
W.wizard = M
W.max_distance += spell_level * 3 //You travel farther when you upgrade the spell
W.start_turf = start
M.forceMove(W)
M.notransform = 1
M.status_flags |= GODMODE
//Wizard Version of the Immovable Rod
/obj/effect/immovablerod/wizard
var/max_distance = 13
var/mob/living/wizard
var/turf/start_turf
notify = FALSE
/obj/effect/immovablerod/wizard/Move()
if(get_dist(start_turf, get_turf(src)) >= max_distance)
qdel(src)
..()
/obj/effect/immovablerod/wizard/Destroy()
if(wizard)
wizard.status_flags &= ~GODMODE
wizard.notransform = 0
wizard.forceMove(get_turf(src))
return ..()
+3 -7
View File
@@ -139,6 +139,7 @@
/mob/living/carbon/proc/med_hud_set_status()
var/image/holder = hud_list[STATUS_HUD]
//var/image/holder2 = hud_list[STATUS_HUD_OOC]
var/mob/living/simple_animal/borer/B = has_brain_worms()
if(stat == 2)
holder.icon_state = "huddead"
//holder2.icon_state = "huddead"
@@ -146,13 +147,8 @@
holder.icon_state = "hudxeno"
else if(check_virus())
holder.icon_state = "hudill"
else if(has_brain_worms())
var/mob/living/simple_animal/borer/B = has_brain_worms()
if(B.controlling)
holder.icon_state = "hudbrainworm"
else
holder.icon_state = "hudhealthy"
//holder2.icon_state = "hudhealthy"
else if(has_brain_worms() && B != null && B.controlling)
holder.icon_state = "hudbrainworm"
else
holder.icon_state = "hudhealthy"
//holder2.icon_state = "hudhealthy"
+5 -5
View File
@@ -135,13 +135,13 @@
message = replacetextEx(message,"w","v")
message = replacetextEx(message,"J","Y")
message = replacetextEx(message,"j","y")
message = replacetextEx(message,"A",pick("Å","Ä","Æ","A"))
message = replacetextEx(message,"a",pick("å","ä","æ","a"))
message = replacetextEx(message,"A",pick("Å","Ä","Æ","A"))
message = replacetextEx(message,"a",pick("å","ä","æ","a"))
message = replacetextEx(message,"BO","BJO")
message = replacetextEx(message,"Bo","Bjo")
message = replacetextEx(message,"bo","bjo")
message = replacetextEx(message,"O",pick("Ö","Ø","O"))
message = replacetextEx(message,"o",pick("ö","ø","o"))
message = replacetextEx(message,"O",pick("Ö","Ø","O"))
message = replacetextEx(message,"o",pick("ö","ø","o"))
if(prob(30))
message += " Bork[pick("",", bork",", bork, bork")]!"
return message
@@ -259,7 +259,7 @@
action_icon_state = "genetic_incendiary"
/obj/effect/proc_holder/spell/targeted/immolate/cast(list/targets,mob/living/user = usr)
/obj/effect/proc_holder/spell/targeted/immolate/cast(list/targets, mob/living/user = usr)
var/mob/living/carbon/L = user
L.adjust_fire_stacks(0.5)
L.visible_message("<span class='danger'>[L.name]</b> suddenly bursts into flames!</span>")
+80 -88
View File
@@ -143,15 +143,15 @@
action_icon_state = "genetic_cryo"
/obj/effect/proc_holder/spell/targeted/cryokinesis/cast(list/targets)
/obj/effect/proc_holder/spell/targeted/cryokinesis/cast(list/targets, mob/user = usr)
if(!targets.len)
to_chat(usr, "<span class='notice'>No target found in range.</span>")
to_chat(user, "<span class='notice'>No target found in range.</span>")
return
var/mob/living/carbon/C = targets[1]
if(!iscarbon(C))
to_chat(usr, "<span class='warning'>This will only work on normal organic beings.</span>")
to_chat(user, "<span class='warning'>This will only work on normal organic beings.</span>")
return
if(RESIST_COLD in C.mutations)
@@ -164,15 +164,15 @@
if(istype(H.wear_suit, /obj/item/clothing/suit/space))
handle_suit = 1
if(H.internal)
H.visible_message("<span class='warning'>[usr] sprays a cloud of fine ice crystals, engulfing [H]!</span>",
"<span class='notice'>[usr] sprays a cloud of fine ice crystals over your [H.head]'s visor.</span>")
log_admin("[key_name(usr)] has used cryokinesis on [key_name(C)] while wearing internals and a suit")
msg_admin_attack("[key_name_admin(usr)] has cast cryokinesis on [key_name_admin(C)]")
H.visible_message("<span class='warning'>[user] sprays a cloud of fine ice crystals, engulfing [H]!</span>",
"<span class='notice'>[user] sprays a cloud of fine ice crystals over your [H.head]'s visor.</span>")
log_admin("[key_name(user)] has used cryokinesis on [key_name(C)] while wearing internals and a suit")
msg_admin_attack("[key_name_admin(user)] has cast cryokinesis on [key_name_admin(C)]")
else
H.visible_message("<span class='warning'>[usr] sprays a cloud of fine ice crystals engulfing, [H]!</span>",
"<span class='warning'>[usr] sprays a cloud of fine ice crystals cover your [H.head]'s visor and make it into your air vents!.</span>")
log_admin("[key_name(usr)] has used cryokinesis on [key_name(C)]")
msg_admin_attack("[key_name_admin(usr)] has cast cryokinesis on [key_name_admin(C)]")
H.visible_message("<span class='warning'>[user] sprays a cloud of fine ice crystals engulfing, [H]!</span>",
"<span class='warning'>[user] sprays a cloud of fine ice crystals cover your [H.head]'s visor and make it into your air vents!.</span>")
log_admin("[key_name(user)] has used cryokinesis on [key_name(C)]")
msg_admin_attack("[key_name_admin(user)] has cast cryokinesis on [key_name_admin(C)]")
H.bodytemperature = max(0, H.bodytemperature - 50)
H.adjustFireLoss(5)
if(!handle_suit)
@@ -180,11 +180,11 @@
C.adjustFireLoss(10)
C.ExtinguishMob()
C.visible_message("\red [usr] sprays a cloud of fine ice crystals, engulfing [C]!")
log_admin("[key_name(usr)] has used cryokinesis on [key_name(C)] without internals or a suit")
msg_admin_attack("[key_name_admin(usr)] has cast cryokinesis on [key_name_admin(C)]")
C.visible_message("\red [user] sprays a cloud of fine ice crystals, engulfing [C]!")
log_admin("[key_name(user)] has used cryokinesis on [key_name(C)] without internals or a suit")
msg_admin_attack("[key_name_admin(user)] has cast cryokinesis on [key_name_admin(C)]")
//playsound(usr.loc, 'bamf.ogg', 50, 0)
//playsound(user.loc, 'bamf.ogg', 50, 0)
new/obj/effect/self_deleting(C.loc, icon('icons/effects/genetics.dmi', "cryokinesis"))
@@ -294,10 +294,9 @@
revert_cast(user)
return
perform(targets)
perform(targets, user = user)
/obj/effect/proc_holder/spell/targeted/eat/cast(list/targets)
var/mob/user = usr
/obj/effect/proc_holder/spell/targeted/eat/cast(list/targets, mob/user = usr)
if(!targets.len)
to_chat(user, "<span class='notice'>No target found in range.</span>")
return
@@ -383,60 +382,60 @@
action_icon_state = "genetic_jump"
/obj/effect/proc_holder/spell/targeted/leap/cast(list/targets)
/obj/effect/proc_holder/spell/targeted/leap/cast(list/targets, mob/user = usr)
var/failure = 0
if(istype(usr.loc,/mob/) || usr.lying || usr.stunned || usr.buckled || usr.stat)
to_chat(usr, "<span class='warning'>You can't jump right now!</span>")
if(istype(user.loc,/mob/) || user.lying || user.stunned || user.buckled || user.stat)
to_chat(user, "<span class='warning'>You can't jump right now!</span>")
return
if(istype(usr.loc,/turf/))
if(usr.restrained())//Why being pulled while cuffed prevents you from moving
for(var/mob/M in range(usr, 1))
if(M.pulling == usr)
if(!M.restrained() && M.stat == 0 && M.canmove && usr.Adjacent(M))
if(istype(user.loc,/turf/))
if(user.restrained())//Why being pulled while cuffed prevents you from moving
for(var/mob/M in range(user, 1))
if(M.pulling == user)
if(!M.restrained() && M.stat == 0 && M.canmove && user.Adjacent(M))
failure = 1
else
M.stop_pulling()
if(usr.pinned.len)
if(user.pinned.len)
failure = 1
usr.visible_message("<span class='danger'>[usr.name]</b> takes a huge leap!</span>")
playsound(usr.loc, 'sound/weapons/thudswoosh.ogg', 50, 1)
user.visible_message("<span class='danger'>[user.name]</b> takes a huge leap!</span>")
playsound(user.loc, 'sound/weapons/thudswoosh.ogg', 50, 1)
if(failure)
usr.Weaken(5)
usr.Stun(5)
usr.visible_message("<span class='warning'>[usr] attempts to leap away but is slammed back down to the ground!</span>",
user.Weaken(5)
user.Stun(5)
user.visible_message("<span class='warning'>[user] attempts to leap away but is slammed back down to the ground!</span>",
"<span class='warning'>You attempt to leap away but are suddenly slammed back down to the ground!</span>",
"<span class='notice'>You hear the flexing of powerful muscles and suddenly a crash as a body hits the floor.</span>")
return 0
var/prevLayer = usr.layer
var/prevFlying = usr.flying
usr.layer = 9
var/prevLayer = user.layer
var/prevFlying = user.flying
user.layer = 9
usr.flying = 1
user.flying = 1
for(var/i=0, i<10, i++)
step(usr, usr.dir)
if(i < 5) usr.pixel_y += 8
else usr.pixel_y -= 8
step(user, user.dir)
if(i < 5) user.pixel_y += 8
else user.pixel_y -= 8
sleep(1)
usr.flying = prevFlying
user.flying = prevFlying
if(FAT in usr.mutations && prob(66))
usr.visible_message("<span class='danger'>[usr.name]</b> crashes due to their heavy weight!</span>")
//playsound(usr.loc, 'zhit.wav', 50, 1)
usr.AdjustWeakened(10)
usr.AdjustStunned(5)
if(FAT in user.mutations && prob(66))
user.visible_message("<span class='danger'>[user.name]</b> crashes due to their heavy weight!</span>")
//playsound(user.loc, 'zhit.wav', 50, 1)
user.AdjustWeakened(10)
user.AdjustStunned(5)
usr.layer = prevLayer
user.layer = prevLayer
if(istype(usr.loc,/obj/))
var/obj/container = usr.loc
to_chat(usr, "<span class='warning'>You leap and slam your head against the inside of [container]! Ouch!</span>")
usr.AdjustParalysis(3)
usr.AdjustWeakened(5)
container.visible_message("<span class='danger'>[usr.loc]</b> emits a loud thump and rattles a bit.</span>")
playsound(usr.loc, 'sound/effects/bang.ogg', 50, 1)
if(istype(user.loc,/obj/))
var/obj/container = user.loc
to_chat(user, "<span class='warning'>You leap and slam your head against the inside of [container]! Ouch!</span>")
user.AdjustParalysis(3)
user.AdjustWeakened(5)
container.visible_message("<span class='danger'>[user.loc]</b> emits a loud thump and rattles a bit.</span>")
playsound(user.loc, 'sound/effects/bang.ogg', 50, 1)
var/wiggle = 6
while(wiggle > 0)
wiggle--
@@ -446,9 +445,6 @@
container.pixel_x = 0
container.pixel_y = 0
return
////////////////////////////////////////////////////////////////////////
// WAS: /datum/bioEffect/polymorphism
@@ -475,6 +471,7 @@
charge_max = 1800
clothes_req = 0
human_req = 1
stat_allowed = 0
invocation_type = "none"
range = 1
@@ -482,21 +479,18 @@
action_icon_state = "genetic_poly"
/obj/effect/proc_holder/spell/targeted/polymorph/cast(list/targets)
var/mob/living/M=targets[1]
/obj/effect/proc_holder/spell/targeted/polymorph/cast(list/targets, mob/user = usr)
var/mob/living/M = targets[1]
if(!ishuman(M))
to_chat(usr, "<span class='warning'>You can only change your appearance to that of another human.</span>")
return
if(!ishuman(usr))
return
usr.visible_message("<span class='warning'>[usr]'s body shifts and contorts.</span>")
user.visible_message("<span class='warning'>[user]'s body shifts and contorts.</span>")
spawn(10)
if(M && usr)
playsound(usr.loc, 'sound/goonstation/effects/gib.ogg', 50, 1)
var/mob/living/carbon/human/H = usr
if(M && user)
playsound(user.loc, 'sound/goonstation/effects/gib.ogg', 50, 1)
var/mob/living/carbon/human/H = user
var/mob/living/carbon/human/target = M
H.UpdateAppearance(target.dna.UI)
H.real_name = target.real_name
@@ -524,6 +518,7 @@
desc = "Read the minds of others for information."
charge_max = 180
clothes_req = 0
human_req = 1
stat_allowed = 0
invocation_type = "none"
range = -2
@@ -539,29 +534,26 @@
revert_cast(user)
return
perform(targets)
/obj/effect/proc_holder/spell/targeted/empath/cast(list/targets)
if(!ishuman(usr)) return
perform(targets, user = user)
/obj/effect/proc_holder/spell/targeted/empath/cast(list/targets, mob/user = usr)
for(var/mob/living/carbon/M in targets)
if(!iscarbon(M))
to_chat(usr, "<span class='warning'>You may only use this on other organic beings.</span>")
to_chat(user, "<span class='warning'>You may only use this on other organic beings.</span>")
return
if(PSY_RESIST in M.mutations)
to_chat(usr, "<span class='warning'>You can't see into [M.name]'s mind at all!</span>")
to_chat(user, "<span class='warning'>You can't see into [M.name]'s mind at all!</span>")
return
if(M.stat == 2)
to_chat(usr, "<span class='warning'>[M.name] is dead and cannot have their mind read.</span>")
to_chat(user, "<span class='warning'>[M.name] is dead and cannot have their mind read.</span>")
return
if(M.health < 0)
to_chat(usr, "<span class='warning'>[M.name] is dying, and their thoughts are too scrambled to read.</span>")
to_chat(user, "<span class='warning'>[M.name] is dying, and their thoughts are too scrambled to read.</span>")
return
to_chat(usr, "<span class='notice'>Mind Reading of <b>[M.name]:</b></span>")
to_chat(user, "<span class='notice'>Mind Reading of <b>[M.name]:</b></span>")
var/pain_condition = M.health
// lower health means more pain
var/list/randomthoughts = list("what to have for lunch","the future","the past","money",
@@ -578,33 +570,33 @@
switch(pain_condition)
if(81 to INFINITY)
to_chat(usr, "<span class='notice'><b>Condition</b>: [M.name] feels good.</span>")
to_chat(user, "<span class='notice'><b>Condition</b>: [M.name] feels good.</span>")
if(61 to 80)
to_chat(usr, "<span class='notice'><b>Condition</b>: [M.name] is suffering mild pain.</span>")
to_chat(user, "<span class='notice'><b>Condition</b>: [M.name] is suffering mild pain.</span>")
if(41 to 60)
to_chat(usr, "<span class='notice'><b>Condition</b>: [M.name] is suffering significant pain.</span>")
to_chat(user, "<span class='notice'><b>Condition</b>: [M.name] is suffering significant pain.</span>")
if(21 to 40)
to_chat(usr, "<span class='notice'><b>Condition</b>: [M.name] is suffering severe pain.</span>")
to_chat(user, "<span class='notice'><b>Condition</b>: [M.name] is suffering severe pain.</span>")
else
to_chat(usr, "<span class='notice'><b>Condition</b>: [M.name] is suffering excruciating pain.</span>")
to_chat(user, "<span class='notice'><b>Condition</b>: [M.name] is suffering excruciating pain.</span>")
thoughts = "haunted by their own mortality"
switch(M.a_intent)
if(I_HELP)
to_chat(usr, "<span class='notice'><b>Mood</b>: You sense benevolent thoughts from [M.name].</span>")
to_chat(user, "<span class='notice'><b>Mood</b>: You sense benevolent thoughts from [M.name].</span>")
if(I_DISARM)
to_chat(usr, "<span class='notice'><b>Mood</b>: You sense cautious thoughts from [M.name].</span>")
to_chat(user, "<span class='notice'><b>Mood</b>: You sense cautious thoughts from [M.name].</span>")
if(I_GRAB)
to_chat(usr, "<span class='notice'><b>Mood</b>: You sense hostile thoughts from [M.name].</span>")
to_chat(user, "<span class='notice'><b>Mood</b>: You sense hostile thoughts from [M.name].</span>")
if(I_HARM)
to_chat(usr, "<span class='notice'><b>Mood</b>: You sense cruel thoughts from [M.name].</span>")
to_chat(user, "<span class='notice'><b>Mood</b>: You sense cruel thoughts from [M.name].</span>")
for(var/mob/living/L in view(7,M))
if(L == M)
continue
thoughts = "thinking about punching [L.name]"
break
else
to_chat(usr, "<span class='notice'><b>Mood</b>: You sense strange thoughts from [M.name].</span>")
to_chat(user, "<span class='notice'><b>Mood</b>: You sense strange thoughts from [M.name].</span>")
if(istype(M,/mob/living/carbon/human))
var/numbers[0]
@@ -613,11 +605,11 @@
numbers += H.mind.initial_account.account_number
numbers += H.mind.initial_account.remote_access_pin
if(numbers.len>0)
to_chat(usr, "<span class='notice'><b>Numbers</b>: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].</span>")
to_chat(usr, "<span class='notice'><b>Thoughts</b>: [M.name] is currently [thoughts].</span>")
to_chat(user, "<span class='notice'><b>Numbers</b>: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].</span>")
to_chat(user, "<span class='notice'><b>Thoughts</b>: [M.name] is currently [thoughts].</span>")
if(EMPATH in M.mutations)
to_chat(M, "<span class='warning'>You sense [usr.name] reading your mind.</span>")
to_chat(M, "<span class='warning'>You sense [user.name] reading your mind.</span>")
else if(prob(5) || M.mind.assigned_role=="Chaplain")
to_chat(M, "<span class='warning'>You sense someone intruding upon your thoughts...</span>")
return
-2
View File
@@ -45,8 +45,6 @@
print_command_report(intercepttext, interceptname)
event_announcement.Announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg')
return
/datum/station_state
var/floor = 0
+1 -1
View File
@@ -333,7 +333,7 @@
if(ticker && ticker.mode.name == "blob")
var/datum/game_mode/blob/BL = ticker.mode
BL.blobwincount = initial(BL.blobwincount) * 2
BL.blobwincount += initial(BL.blobwincount)
/mob/camera/blob/verb/blob_broadcast()
@@ -11,6 +11,16 @@
to_chat(user, "<span class='notice'>We cleanse impurities from our form.</span>")
var/mob/living/simple_animal/borer/B = user.has_brain_worms()
if(B)
if(B.controlling)
B.detatch()
B.leave_host()
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(0)
to_chat(user, "<span class='notice'>We expel a parasite from our form.</span>")
var/obj/item/organ/internal/body_egg/egg = user.get_int_organ(/obj/item/organ/internal/body_egg)
if(egg)
egg.remove(user)
+1 -1
View File
@@ -245,7 +245,7 @@
var/timer = shuttle_master.emergency.timeLeft(1) + cursetime
shuttle_master.emergency.setTimer(timer)
to_chat(user,"<span class='danger'>You shatter the orb! A dark essence spirals into the air, then disappears.</span>")
playsound(user.loc, "sound/effects/Glassbr1.ogg", 50, 1)
playsound(user.loc, 'sound/effects/Glassbr1.ogg', 50, 1)
qdel(src)
sleep(20)
var/global/list/curses
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,51 @@
/datum/borer_chem
var/chemname
var/chemdesc = "This is a chemical"
var/chemuse = 30
var/quantity = 10
/datum/borer_chem/capulettium_plus
chemname = "capulettium_plus"
chemdesc = "Silences and masks pulse."
/datum/borer_chem/charcoal
chemname = "charcoal"
chemdesc = "Slowly heals toxin damage, also slowly removes other chemicals."
/datum/borer_chem/epinephrine
chemname = "epinephrine"
chemdesc = "Stabilizes critical condition and slowly heals suffocation damage."
/datum/borer_chem/fliptonium
chemname = "fliptonium"
chemdesc = "Causes uncontrollable flipping."
chemuse = 50
/datum/borer_chem/hydrocodone
chemname = "hydrocodone"
chemdesc = "An extremely strong painkiller."
/datum/borer_chem/mannitol
chemname = "mannitol"
chemdesc = "Heals brain damage."
/datum/borer_chem/methamphetamine
chemname = "methamphetamine"
chemdesc = "Reduces stun times and increases stamina. Deals small amounts of brain damage."
chemuse = 50
/datum/borer_chem/mitocholide
chemname = "mitocholide"
chemdesc = "Heals internal organ damage."
/datum/borer_chem/salbutamol
chemname = "salbutamol"
chemdesc = "Heals suffocation damage."
/datum/borer_chem/salglu_solution
chemname = "salglu_solution"
chemdesc = "Slowly heals brute and burn damage, also slowly restores blood."
/datum/borer_chem/spaceacillin
chemname = "spaceacillin"
chemdesc = "Slows progression of diseases and fights infections."
@@ -4,11 +4,11 @@
announceWhen = 400
var/spawncount = 5
var/successSpawn = 0 //So we don't make a command report if nothing gets spawned.
var/successSpawn = FALSE //So we don't make a command report if nothing gets spawned.
/datum/event/borer_infestation/setup()
announceWhen = rand(announceWhen, announceWhen + 50)
spawncount = rand(1, 3)
spawncount = rand(2, 3)
/datum/event/borer_infestation/announce()
if(successSpawn)
@@ -22,14 +22,8 @@
if(temp_vent.parent.other_atmosmch.len > 50)
vents += temp_vent
spawn(0)
var/list/candidates = pollCandidates("Do you want to play as a cortical borer?", ROLE_BORER, 1)
while(spawncount > 0 && vents.len && candidates.len)
var/obj/vent = pick_n_take(vents)
var/mob/C = pick_n_take(candidates)
var/mob/living/simple_animal/borer/new_borer = new(vent.loc)
new_borer.key = C.key
spawncount--
successSpawn = 1
while(spawncount >= 1 && vents.len)
var/obj/vent = pick_n_take(vents)
new /mob/living/simple_animal/borer(vent.loc)
successSpawn = TRUE
spawncount--
@@ -0,0 +1,69 @@
/mob/living/simple_animal/borer/proc/get_html_template(content)
var/html = {"<!DOCTYPE html">
<html>
<head>
<title>Borer Chemicals</title>
<link rel='stylesheet' type='text/css' href='icons.css'>
<link rel='stylesheet' type='text/css' href='shared.css'>
<style type='text/css'>
body {
font-size: 12px;
color: #ffffff;
font-family: Verdana, Geneva, sans-serif;
background: #272727;
overflow-x: hidden;
}
a, a:link, a:visited, a:active, .link, .linkOn, .linkOff, .selected, .disabled {
color: #ffffff;
text-decoration: none;
background: #40628a;
border: 1px solid #161616;
cursor: pointer;
display: inline-block;
}
a:hover, .linkActive:hover {
background: #507aac;
cursor: pointer;
}
p {
text-align: center;
font-size: 11px;
margin: 0px;
}
table {
width: 560px;
text-align: center;
}
td {
width: 560px;
}
.chem-select {
width: 560px;
text-align: center;
}
.enabled {
background-color: #0a0;
}
.disabled {
background-color: #a00;
}
.shown {
display: block;
}
.hidden {
display: none;
}
</style>
<script src="jquery.min.js"></script>
<script type='text/javascript'>
function update_chemicals(chemicals) {
$('#chemicals').text(chemicals);
}
$(function() {
});
</script>
</head>
<body scroll='yes'><div id='content'>
[content]
</div></body></html>"}
return html
@@ -1,5 +1,5 @@
#define CHALLENGE_TIME_LIMIT 6000
#define MIN_CHALLENGE_PLAYERS 50
#define CHALLENGE_MIN_PLAYERS 50
#define CHALLENGE_SHUTTLE_DELAY 15000 //25 minutes, so the ops have at least 5 minutes before the shuttle is callable.
/obj/item/device/nuclear_challenge
@@ -9,33 +9,42 @@
desc = "Use to send a declaration of hostilities to the target, delaying your shuttle departure for 20 minutes while they prepare for your assault. \
Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply your team with a massive amount of bonus telecrystals. \
Must be used within five minutes, or your benefactors will lose interest."
var/declaring_war = 0
var/declaring_war = FALSE
/obj/item/device/nuclear_challenge/attack_self(mob/living/user)
if(declaring_war)
return
if(player_list.len < MIN_CHALLENGE_PLAYERS)
to_chat(user, "The enemy crew is too small to be worth declaring war on.")
return
if(!is_admin_level(user.z))
to_chat(user, "You have to be at your base to use this.")
if(!check_allowed(user))
return
if(world.time > CHALLENGE_TIME_LIMIT)
to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.")
declaring_war = TRUE
var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew? You have [-round((world.time-round_start_time - CHALLENGE_TIME_LIMIT)/10)] seconds to decide.", "Declare war?", "Yes", "No")
declaring_war = FALSE
if(!check_allowed(user))
return
declaring_war = 1
var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew?", "Declare war?", "Yes", "No")
if(are_you_sure == "No")
to_chat(user, "On second thought, the element of surprise isn't so bad after all.")
declaring_war = 0
return
var/war_declaration = "[user.real_name] has declared his intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop them."
declaring_war = TRUE
var/custom_threat = alert(user, "Do you want to customize your declaration?", "Customize?", "Yes", "No")
declaring_war = FALSE
if(!check_allowed(user))
return
if(custom_threat == "Yes")
declaring_war = TRUE
war_declaration = stripped_input(user, "Insert your custom declaration", "Declaration")
declaring_war = FALSE
if(!check_allowed(user) || !war_declaration)
return
event_announcement.Announce(war_declaration, "Declaration of War", 'sound/effects/siren.ogg')
to_chat(user, "You've attracted the attention of powerful forces within the syndicate. A bonus bundle of telecrystals has been granted to your team. Great things await you if you complete the mission.")
for(var/obj/machinery/computer/shuttle/syndicate/S in machines)
@@ -47,7 +56,25 @@
config.shuttle_refuel_delay = CHALLENGE_SHUTTLE_DELAY
qdel(src)
/obj/item/device/nuclear_challenge/proc/check_allowed(mob/living/user)
if(declaring_war)
to_chat(user, "You are already in the process of declaring war! Make your mind up.")
return FALSE
if(player_list.len < CHALLENGE_MIN_PLAYERS)
to_chat(user, "The enemy crew is too small to be worth declaring war on.")
return FALSE
if(!is_admin_level(user.z))
to_chat(user, "You have to be at your base to use this.")
return FALSE
if(world.time > CHALLENGE_TIME_LIMIT)
to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.")
return FALSE
for(var/obj/machinery/computer/shuttle/syndicate/S in machines)
if(S.moved)
to_chat(user, "The shuttle has already been moved! You have forfeit the right to declare war.")
return FALSE
return TRUE
#undef CHALLENGE_TIME_LIMIT
#undef MIN_CHALLENGE_PLAYERS
#undef CHALLENGE_MIN_PLAYERS
#undef CHALLENGE_SHUTTLE_DELAY
+9 -4
View File
@@ -32,11 +32,16 @@
attached_spell.attached_hand = null
qdel(src)
/obj/item/weapon/melee/touch_attack/dropped()
if(attached_spell)
attached_spell.attached_hand = null
qdel(src)
/obj/item/weapon/melee/touch_attack/disintegrate
name = "disintegrating touch"
desc = "This hand of mine glows with an awesome power!"
catchphrase = "EI NATH!!"
on_use_sound = "sound/magic/Disintegrate.ogg"
on_use_sound = 'sound/magic/Disintegrate.ogg'
icon_state = "disintegrate"
item_state = "disintegrate"
@@ -54,7 +59,7 @@
name = "petrifying touch"
desc = "That's the bottom line, because flesh to stone said so!"
catchphrase = "STAUN EI!!"
on_use_sound = "sound/magic/FleshToStone.ogg"
on_use_sound = 'sound/magic/FleshToStone.ogg'
icon_state = "fleshtostone"
item_state = "fleshtostone"
@@ -73,7 +78,7 @@
name = "toy plastic hand"
desc = "This hand of mine glows with an awesome power! Ok, maybe just batteries."
catchphrase = "EI NATH!!"
on_use_sound = "sound/magic/Disintegrate.ogg"
on_use_sound = 'sound/magic/Disintegrate.ogg'
icon_state = "disintegrate"
item_state = "disintegrate"
@@ -90,7 +95,7 @@
name = "cluwne touch"
desc = "It's time to start clowning around."
catchphrase = "NWOLC EGNEVER"
on_use_sound = "sound/misc/sadtrombone.ogg"
on_use_sound = 'sound/misc/sadtrombone.ogg'
icon_state = "cluwnecurse"
item_state = "cluwnecurse"
+18 -11
View File
@@ -8,7 +8,7 @@
slot_flags = SLOT_BELT
origin_tech = "bluespace=4;materials=4"
var/imprinted = "empty"
var/usability = TRUE // Can this soul stone be used by anyone, or only cultists/wizards?
var/reusable = TRUE // Can this soul stone be used more than once?
var/spent = FALSE // If the soul stone can only be used once, has it been used?
@@ -18,7 +18,7 @@
return TRUE
return FALSE
/obj/item/device/soulstone/proc/was_used()
if(!reusable)
spent = TRUE
@@ -26,21 +26,21 @@
desc = "A fragment of the legendary treasure known simply as \
the 'Soul Stone'. The shard lies still, dull and lifeless; \
whatever spark it once held long extinguished."
/obj/item/device/soulstone/anybody
usability = TRUE
/obj/item/device/soulstone/anybody/chaplain
name = "mysterious old shard"
reusable = FALSE
/obj/item/device/soulstone/pickup(mob/living/user)
..()
if(!can_use(user))
to_chat(user, "<span class='danger'>An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.</span>")
user.Dizzy(120)
//////////////////////////////Capturing////////////////////////////////////////////////////////
//////////////////////////////Capturing////////////////////////////////////////////////////////
/obj/item/device/soulstone/attack(mob/living/carbon/human/M as mob, mob/user as mob)
if(!can_use(user))
user.Paralyse(5)
@@ -53,7 +53,7 @@
if(!ishuman(M) || istype(M, /mob/living/carbon/human/dummy)) //If target is not a human or a dummy
return ..()
if(M.has_brain_worms()) //Borer stuff - RR
to_chat(user, "<span class='warning'>This being is corrupted by an alien intelligence and cannot be soul trapped.</span>")
return ..()
@@ -62,6 +62,13 @@
to_chat(user, "<span class='warning'>A mysterious force prevents you from trapping this being's soul.</span>")
return ..()
if(iscultist(M))
to_chat(user, "<span class='cultlarge'>This soul is already MINE.</span>")
return ..()
M.create_attack_log("<font color='orange'>Has had their soul captured with [src.name] by [key_name(user)]</font>")
user.create_attack_log("<font color='red'>Used the [src.name] to capture the soul of [key_name(M)]</font>")
M.create_attack_log("<font color='orange'>Has had their soul captured with [src.name] by [key_name(user)]</font>")
user.create_attack_log("<font color='red'>Used the [src.name] to capture the soul of [key_name(M)]</font>")
log_attack("<font color='red'>[key_name(user)] used the [src.name] to capture the soul of [key_name(M)]</font>")
@@ -69,7 +76,7 @@
transfer_soul("VICTIM", M, user)
return
///////////////////Options for using captured souls///////////////////////////////////////
///////////////////Options for using captured souls///////////////////////////////////////
/obj/item/device/soulstone/attack_self(mob/user)
if(!in_range(src, user))
return
@@ -77,8 +84,8 @@
if(!can_use(user))
user.Paralyse(5)
to_chat(user, "<span class='userdanger'>Your body is wracked with debilitating pain!</span>")
return
return
user.set_machine(src)
var/dat = "<TT><B>Soul Stone</B><BR>"
for(var/mob/living/simple_animal/shade/A in src)
@@ -127,7 +134,7 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "construct"
desc = "A wicked machine used by those skilled in magical arts. It is inactive"
/obj/structure/constructshell/examine(mob/user)
if(..(user, 0))
if(iscultist(user) || iswizard(user) || user.stat == DEAD)
+6 -1
View File
@@ -106,6 +106,11 @@
spell_type = /obj/effect/proc_holder/spell/fireball
log_name = "FB"
/datum/spellbook_entry/rod_form
name = "Rod Form"
spell_type = /obj/effect/proc_holder/spell/targeted/rod_form
log_name = "RF"
/datum/spellbook_entry/magicm
name = "Magic Missile"
spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile
@@ -853,7 +858,7 @@
spellname = "disintegrate"
icon_state ="bookfireball"
desc = "This book feels like it will rip stuff apart."
/obj/item/weapon/spellbook/oneuse/sacredflame
spell = /obj/effect/proc_holder/spell/targeted/sacred_flame
spellname = "sacred flame"
+1 -1
View File
@@ -8,7 +8,7 @@
supervisors = "your laws"
req_admin_notify = 1
minimal_player_age = 30
exp_requirements = 600
exp_requirements = 1200
exp_type = EXP_TYPE_CREW
equip(var/mob/living/carbon/human/H)
+3 -1
View File
@@ -13,7 +13,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
access = list() //See get_access()
minimal_access = list() //See get_access()
minimal_player_age = 30
exp_requirements = 600
exp_requirements = 1200
exp_type = EXP_TYPE_CREW
equip(var/mob/living/carbon/human/H)
if(!H) return 0
@@ -237,6 +237,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0)
minimal_access = list(access_lawyer, access_court, access_sec_doors, access_maint_tunnels)
alt_titles = list("Lawyer","Public Defender")
minimal_player_age = 30
exp_requirements = 300
exp_type = EXP_TYPE_CREW
idtype = /obj/item/weapon/card/id/security
equip(var/mob/living/carbon/human/H)
+1 -1
View File
@@ -473,7 +473,7 @@
printing = 1
visible_message("<span class='notice'>\The [src] rattles and prints out a sheet of paper.</span>")
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
P.info = "<CENTER><B>Body Scan - [href_list["name"]]</B></CENTER><BR>"
P.info += "<b>Time of scan:</b> [worldtime2text(world.time)]<br><br>"
P.info += "[printing_text]"
+4 -4
View File
@@ -445,12 +445,12 @@ update_flag
else
logmsg = "Valve was <b>opened</b> by [usr] ([usr.ckey]), starting the transfer into the <font color='red'><b>air</b></font><br>"
if(air_contents.toxins > 0)
message_admins("[key_name_admin(usr)] opened a canister that contains plasma! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_admin("[key_name(usr)] opened a canister that contains plasma at [x], [y], [z]")
message_admins("[key_name_admin(usr)] opened a canister that contains plasma in [get_area(src)]! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_admin("[key_name(usr)] opened a canister that contains plasma at [get_area(src)]: [x], [y], [z]")
var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air_contents.trace_gases
if(sleeping_agent && (sleeping_agent.moles > 1))
message_admins("[key_name_admin(usr)] opened a canister that contains N2O! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_admin("[key_name(usr)] opened a canister that contains N2O at [x], [y], [z]")
message_admins("[key_name_admin(usr)] opened a canister that contains N2O in [get_area(src)]! (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
log_admin("[key_name(usr)] opened a canister that contains N2O at [get_area(src)]: [x], [y], [z]")
investigate_log(logmsg, "atmos")
release_log += logmsg
valve_open = !valve_open
+1 -1
View File
@@ -137,7 +137,7 @@
user.visible_message("[user] begins to load \the [O] in \the [src]...",
"You begin to load a design from \the [O]...",
"You hear the chatter of a floppy drive.")
playsound(get_turf(src), "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(get_turf(src), 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
busy = 1
if(do_after(user, 14.4, target = src))
files.AddDesign2Known(D.blueprint)
+3
View File
@@ -124,6 +124,9 @@
buf.dna.unique_enzymes = md5(buf.dna.real_name)
buf.dna.UI=list(0x066,0x000,0x033,0x000,0x000,0x000,0xAF0,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x033,0x066,0x0FF,0x4DB,0x002,0x690,0x000,0x000)
//buf.dna.UI=list(0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x000,0x000,0x000,0x000,0x161,0xFBD,0xDEF) // Farmer Jeff
for(var/i in buf.dna.UI.len to DNA_UI_LENGTH)
buf.dna.UI += 0x000
buf.dna.ResetSE()
buf.dna.UpdateUI()
/obj/item/weapon/disk/data/monkey
+28 -14
View File
@@ -37,18 +37,19 @@
off_action.Activate()
/obj/machinery/computer/camera_advanced/attack_hand(mob/user)
if(..())
return
if(!iscarbon(user))
return
if(current_user)
to_chat(user, "The console is already in use!")
return
if(!iscarbon(user))
return
if(..())
return
user.set_machine(src)
if(!eyeobj)
CreateEye()
if(!eyeobj.initialized)
if(!eyeobj.eye_initialized)
var/camera_location
for(var/obj/machinery/camera/C in cameranet.cameras)
if(!C.can_use())
@@ -57,7 +58,7 @@
camera_location = get_turf(C)
break
if(camera_location)
eyeobj.initialized = 1
eyeobj.eye_initialized = 1
give_eye_control(user)
eyeobj.setLoc(camera_location)
else
@@ -66,6 +67,7 @@
user.unset_machine()
else
give_eye_control(user)
eyeobj.setLoc(eyeobj.loc)
/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user)
@@ -77,7 +79,6 @@
user.remote_view = 1
user.remote_control = eyeobj
user.reset_perspective(eyeobj)
eyeobj.setLoc(eyeobj.loc)
/mob/camera/aiEye/remote
name = "Inactive Camera Eye"
@@ -86,10 +87,15 @@
var/acceleration = 1
var/mob/living/carbon/human/eye_user = null
var/obj/machinery/computer/camera_advanced/origin
var/initialized = 0
var/eye_initialized = 0
var/visible_icon = 0
var/image/user_image = null
/mob/camera/aiEye/remote/Destroy()
eye_user = null
origin = null
return ..()
/mob/camera/aiEye/remote/GetViewerClient()
if(eye_user)
return eye_user.client
@@ -102,12 +108,11 @@
T = get_turf(T)
loc = T
cameranet.visibility(src)
if(eye_user.client)
if(visible_icon)
if(visible_icon)
if(eye_user.client)
eye_user.client.images -= user_image
user_image = image(icon,loc,icon_state,FLY_LAYER)
eye_user.client.images += user_image
eye_user.client.eye = src
/mob/camera/aiEye/remote/relaymove(mob/user,direct)
var/initial = initial(sprint)
@@ -140,14 +145,16 @@
remote_eye.origin.current_user = null
remote_eye.origin.jump_action.Remove(C)
remote_eye.eye_user = null
C.reset_perspective(null)
if(C.client)
C.client.images -= remote_eye.user_image
C.reset_perspective(null)
if(remote_eye.visible_icon)
C.client.images -= remote_eye.user_image
for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks)
C.client.images -= chunk.obscured
C.remote_control = null
C.unset_machine()
src.Remove(C)
playsound(remote_eye.origin, 'sound/machines/terminal_off.ogg', 25, 0)
/datum/action/innate/camera_jump
name = "Jump To Camera"
@@ -175,7 +182,14 @@
T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam
playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, 0)
var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T
var/obj/machinery/camera/final = T[camera]
playsound(origin, "terminal_type", 25, 0)
if(final)
playsound(origin, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
remote_eye.setLoc(get_turf(final))
C.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/noise)
C.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console!
else
playsound(origin, 'sound/machines/terminal_prompt_deny.ogg', 25, 0)
+1 -1
View File
@@ -362,7 +362,7 @@ var/time_last_changed_position = 0
if("print")
if(!printing)
printing = 1
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
spawn(50)
printing = null
nanomanager.update_uis(src)
+1 -1
View File
@@ -465,7 +465,7 @@
if(href_list["print_p"])
if(!( src.printing ))
src.printing = 1
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
sleep(50)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
P.info = "<CENTER><B>Medical Record</B></CENTER><BR>"
+1 -1
View File
@@ -63,7 +63,7 @@
src.spark_system.start()
var/obj/item/weapon/paper/monitorkey/MK = new/obj/item/weapon/paper/monitorkey
MK.loc = src.loc
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
// Will help make emagging the console not so easy to get away with.
MK.info += "<br><br><font color='red'>£%@%(*$%&(£&?*(%&£/{}</font>"
update_icon()
+2 -2
View File
@@ -318,7 +318,7 @@ What a mess.*/
if("Print Record")
if(!( printing ))
printing = 1
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
sleep(50)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
P.info = "<CENTER><B>Security Record</B></CENTER><BR>"
@@ -341,7 +341,7 @@ What a mess.*/
if("Print Photo")
if(!printing)
printing = 1
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
sleep(50)
if(istype(active1, /datum/data/record) && data_core.general.Find(active1))
create_record_photo(active1)
+1 -1
View File
@@ -253,7 +253,7 @@ What a mess.*/
if("Print Record")
if(!( printing ))
printing = 1
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
sleep(50)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
P.info = "<CENTER><B>Employment Record</B></CENTER><BR>"
+1 -1
View File
@@ -159,7 +159,7 @@
// to_chat(usr, "Printing the log, standby...")
//sleep(50)
var/obj/item/weapon/paper/P = new/obj/item/weapon/paper( loc )
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
P.name = "activity log"
P.info = dat
+3 -7
View File
@@ -46,17 +46,13 @@
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/teleporter
ME = new /obj/item/mecha_parts/mecha_equipment/teleporter/precise
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
ME.attach(src)
/obj/mecha/combat/gygax/dark/add_cell(var/obj/item/weapon/stock_parts/cell/C=null)
if(C)
C.forceMove(src)
cell = C
return
cell = new(src)
/obj/mecha/combat/gygax/dark/add_cell()
cell = new /obj/item/weapon/stock_parts/cell/bluespace(src)
cell.charge = 30000
cell.maxcharge = 30000
+6 -1
View File
@@ -50,6 +50,11 @@
force = 55
max_equip = 5
/obj/mecha/combat/marauder/seraph/add_cell()
cell = new /obj/item/weapon/stock_parts/cell/bluespace(src)
cell.charge = 40000
cell.maxcharge = 40000
/obj/mecha/combat/marauder/seraph/loaded/New()
..()//Let it equip whatever is needed.
var/obj/item/mecha_parts/mecha_equipment/ME
@@ -61,7 +66,7 @@
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src)
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src)
ME = new /obj/item/mecha_parts/mecha_equipment/teleporter/precise(src)
ME.attach(src)
ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src)
ME.attach(src)
+10 -2
View File
@@ -9,17 +9,25 @@
icon_state = "mecha_teleport"
origin_tech = "bluespace=10"
equip_cooldown = 150
energy_drain = 1000
energy_drain = 8000
range = RANGED
var/tele_precision = 4
/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target)
if(!action_checks(target) || !is_teleport_allowed(loc.z))
return
var/turf/T = get_turf(target)
if(T)
do_teleport(chassis, T, 4)
chassis.use_power(energy_drain)
do_teleport(chassis, T, tele_precision)
return 1
/obj/item/mecha_parts/mecha_equipment/teleporter/precise
name = "upgraded teleporter"
desc = "An exosuit module that allows exosuits to teleport to any position in view. This is the high-precision, energy-efficient version."
origin_tech = "bluespace=13"
energy_drain = 1000
tele_precision = 1
////////////////////////////////////////////// WORMHOLE GENERATOR //////////////////////////////////////////
+1 -1
View File
@@ -237,7 +237,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced
name = "\improper S.H.H. \"Quietus\" Carbine"
fire_sound = "sound/weapons/Gunshot_silenced.ogg"
fire_sound = 'sound/weapons/Gunshot_silenced.ogg'
icon_state = "mecha_mime"
equip_cooldown = 15
projectile = /obj/item/projectile/bullet/mime
+3 -3
View File
@@ -750,7 +750,7 @@ steam.start() -- spawns the effect
var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition)
I.dir = src.holder.dir
flick("ion_fade", I)
I.icon_state = "blank"
I.icon_state = ""
spawn( 20 )
if(I)
I.delete()
@@ -812,8 +812,8 @@ steam.start() -- spawns the effect
II.dir = src.holder.dir
flick("ion_fade", I)
flick("ion_fade", II)
I.icon_state = "blank"
II.icon_state = "blank"
I.icon_state = ""
II.icon_state = ""
spawn( 20 )
if(I) I.delete()
if(II) II.delete()
+10 -5
View File
@@ -77,7 +77,7 @@
drawtype = temp
update_window(usr)
/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity)
if(!proximity) return
if(is_type_in_list(target,validSurfaces))
var/temp = "rune"
@@ -95,17 +95,22 @@
if(!uses)
to_chat(user, "<span class='danger'>You used up your [name]!</span>")
qdel(src)
return
/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
/obj/item/toy/crayon/attack(mob/M, mob/user)
var/huffable = istype(src,/obj/item/toy/crayon/spraycan)
if(M == user)
to_chat(user, "You take a [huffable ? "huff" : "bite"] of the [name]. Delicious!")
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(!H.check_has_mouth())
to_chat(user, "<span class='warning'>You do not have a mouth!</span>")
return
playsound(loc, 'sound/items/eatfood.ogg', 50, 0)
to_chat(user, "<span class='notice'>You take a [huffable ? "huff" : "bite"] of the [name]. Delicious!</span>")
user.nutrition += 5
if(uses)
uses -= 5
if(uses <= 0)
to_chat(user, "<span class='danger'>There is no more of [name] left!</span>")
to_chat(user, "<span class='warning'>There is no more of [name] left!</span>")
qdel(src)
else
..()
+1 -1
View File
@@ -151,7 +151,7 @@
for(var/mob/O in viewers(usr))
O.show_message("\red \the [src] rattles and prints out a sheet of paper.", 1)
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
sleep(10)
var/obj/item/weapon/paper/P = new(usr.loc)
+1 -4
View File
@@ -25,10 +25,7 @@
ui_interact(user)
/obj/item/device/guitar/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
return
if(!isliving(user) || user.stat || user.restrained() || user.lying)
if(!isliving(user) || user.incapacitated())
return
song.ui_interact(user, ui_key, ui, force_open)
+23 -18
View File
@@ -11,11 +11,16 @@
var/obj/item/device/radio/radio
var/looking_for_personality = 0
var/mob/living/silicon/pai/pai
var/list/faction = list("neutral") // The factions the pAI will inherit from the card
/obj/item/device/paicard/syndicate
name = "syndicate personal AI device"
faction = list("syndicate")
/obj/item/device/paicard/relaymove(var/mob/user, var/direction)
if(user.stat || user.stunned)
return
var/obj/item/weapon/rig/rig = src.get_rig()
var/obj/item/weapon/rig/rig = get_rig()
if(istype(rig))
rig.forced_move(direction, user)
@@ -260,7 +265,7 @@
to_chat(usr, "\red The request system is currently offline. Please wait another [cooldown_time] seconds.")
return
last_request = world.time / 10
src.looking_for_personality = 1
looking_for_personality = 1
paiController.findPAI(src, usr)
if(href_list["wipe"])
var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No")
@@ -297,33 +302,33 @@
// WIRE_TRANSMIT = 4
/obj/item/device/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
src.pai = personality
src.overlays += "pai-happy"
pai = personality
overlays += "pai-happy"
/obj/item/device/paicard/proc/removePersonality()
src.pai = null
src.overlays.Cut()
src.overlays += "pai-off"
pai = null
overlays.Cut()
overlays += "pai-off"
/obj/item/device/paicard
var/current_emotion = 1
/obj/item/device/paicard/proc/setEmotion(var/emotion)
if(pai)
src.overlays.Cut()
overlays.Cut()
switch(emotion)
if(1) src.overlays += "pai-happy"
if(2) src.overlays += "pai-cat"
if(3) src.overlays += "pai-extremely-happy"
if(4) src.overlays += "pai-face"
if(5) src.overlays += "pai-laugh"
if(6) src.overlays += "pai-off"
if(7) src.overlays += "pai-sad"
if(8) src.overlays += "pai-angry"
if(9) src.overlays += "pai-what"
if(1) overlays += "pai-happy"
if(2) overlays += "pai-cat"
if(3) overlays += "pai-extremely-happy"
if(4) overlays += "pai-face"
if(5) overlays += "pai-laugh"
if(6) overlays += "pai-off"
if(7) overlays += "pai-sad"
if(8) overlays += "pai-angry"
if(9) overlays += "pai-what"
current_emotion = emotion
/obj/item/device/paicard/proc/alertUpdate()
var/turf/T = get_turf_or_move(src.loc)
var/turf/T = get_turf_or_move(loc)
for(var/mob/M in viewers(T))
M.show_message("\blue [src] flashes a message across its screen, \"Additional personalities available for download.\"", 3, "\blue [src] bleeps electronically.", 2)
@@ -231,7 +231,7 @@
return
to_chat(usr, "<span class='notice'>Transcript printed.</span>")
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src))
var/t1 = "<B>Transcript:</B><BR><BR>"
for(var/i = 1, mytape.storedinfo.len >= i, i++)
+1 -4
View File
@@ -30,10 +30,7 @@
ui_interact(user)
/obj/item/device/violin/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
return
if(!isliving(user) || user.stat || user.restrained() || user.lying)
if(!isliving(user) || user.incapacitated())
return
song.ui_interact(user, ui_key, ui, force_open)
+10 -2
View File
@@ -7,7 +7,7 @@ RCD
/obj/item/weapon/rcd
name = "rapid-construction-device (RCD)"
desc = "A device used to rapidly build and deconstruct walls and floors."
icon = 'icons/obj/items.dmi'
icon = 'icons/obj/tools.dmi'
icon_state = "rcd"
opacity = 0
density = 0
@@ -28,6 +28,7 @@ RCD
var/canRwall = 0
var/menu = 1
var/door_type = /obj/machinery/door/airlock
var/door_name = "Airlock"
req_access = list(access_engine)
var/list/door_accesses = list()
var/list/door_accesses_list = list()
@@ -85,7 +86,7 @@ RCD
/obj/item/weapon/rcd/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = inventory_state)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "rcd.tmpl", "[name]", 400, 400, state = state)
ui = new(user, src, ui_key, "rcd.tmpl", "[name]", 450, 400, state = state)
ui.open()
ui.set_auto_update(1)
@@ -93,6 +94,7 @@ RCD
var/data[0]
data["mode"] = mode
data["door_type"] = door_type
data["door_name"] = door_name
data["menu"] = menu
data["matter"] = matter
data["max_matter"] = max_matter
@@ -164,6 +166,11 @@ RCD
door_accesses_list[++door_accesses_list.len] = list("name" = get_access_desc(access), "id" = access, "enabled" = (access in door_accesses))
. = 1
if(href_list["choice"] && !locked)
var/temp_t = sanitize(copytext(input("Enter a custom Airlock Name.","Airlock Name"),1,MAX_MESSAGE_LEN))
if(temp_t)
door_name = temp_t
/obj/item/weapon/rcd/proc/activate()
playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1)
@@ -207,6 +214,7 @@ RCD
if(!useResource(10, user)) return 0
activate()
var/obj/machinery/door/airlock/T = new door_type(A)
T.name = door_name
T.autoclose = 1
if(one_access)
T.req_one_access = door_accesses.Copy()
+2 -2
View File
@@ -6,8 +6,8 @@ RSF
/obj/item/weapon/rsf
name = "\improper Rapid-Service-Fabricator"
desc = "A device used to rapidly deploy service items."
icon = 'icons/obj/items.dmi'
icon_state = "rcd"
icon = 'icons/obj/tools.dmi'
icon_state = "rsf"
opacity = 0
density = 0
anchored = 0.0
+3 -3
View File
@@ -78,7 +78,7 @@
species_hair = hair_styles_list
var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair
user.visible_message("<span class='notice'>[user] starts cutting [M]'s hair!</span>", "<span class='notice'>You start cutting [M]'s hair!</span>") //arguments for this are: 1. what others see 2. what the user sees. --Fixed grammar, (TGameCo)
playsound(loc, "sound/goonstation/misc/Scissor.ogg", 100, 1)
playsound(loc, 'sound/goonstation/misc/Scissor.ogg', 100, 1)
if(do_after(user, 50, target = H)) //this is the part that adds a delay. delay is in deciseconds. --Made it 5 seconds, because hair isn't cut in one second in real life, and I want at least a little bit longer time, (TGameCo)
if(!(M in view(1))) //Adjacency test
user.visible_message("<span class='notice'>[user] stops cutting [M]'s hair.</span>", "<span class='notice'>You stop cutting [M]'s hair.</span>")
@@ -111,9 +111,9 @@
if(!is_cutting)
is_cutting = 1
user.visible_message("<span class='notice'>[user] starts cutting [M]'s hair!</span>", "<span class='notice'>You start cutting [M]'s hair!</span>")
playsound(loc, "sound/goonstation/misc/Scissor.ogg", 100, 1)
playsound(loc, 'sound/goonstation/misc/Scissor.ogg', 100, 1)
if(do_after(user, 50, target = H))
playsound(loc, "sound/weapons/bladeslice.ogg", 50, 1, -1)
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
user.visible_message("<span class='danger'>[user] abruptly stops cutting [M]'s hair and slices their throat!</span>", "<span class='danger'>You stop cutting [M]'s hair and slice their throat!</span>") //Just a little off the top.
H.AdjustLoseBreath(10) //30 Oxy damage over time
H.apply_damage(18, BRUTE, "head", sharp =1, edge =1, used_weapon = "scissors")
@@ -13,7 +13,7 @@
materials = list(MAT_METAL = 500)
origin_tech = "combat=1"
attack_verb = list("robusted")
hitsound = "sound/weapons/smash.ogg"
hitsound = 'sound/weapons/smash.ogg'
New()
..()
@@ -184,7 +184,6 @@
name = "vox specialized nitrogen tank"
desc = "A high-tech nitrogen tank designed specifically for Vox."
icon_state = "emergency_vox"
item_state = "emergency_vox"
volume = 25
/obj/item/weapon/tank/emergency_oxygen/vox/New()
+48 -71
View File
@@ -12,47 +12,42 @@
* Revolver Conversion Kit
*/
/*
* Wrench
*/
//Wrench
/obj/item/weapon/wrench
name = "wrench"
desc = "A wrench with common uses. Can be found in your hand."
icon = 'icons/obj/items.dmi'
icon = 'icons/obj/tools.dmi'
icon_state = "wrench"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
force = 5
throwforce = 7
w_class = 2
materials = list(MAT_METAL=150)
origin_tech = "materials=1;engineering=1"
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
/*
* Screwdriver
*/
//Screwdriver
/obj/item/weapon/screwdriver
name = "screwdriver"
desc = "You can be totally screwy with this."
icon = 'icons/obj/items.dmi'
icon = 'icons/obj/tools.dmi'
icon_state = "screwdriver"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
force = 5
w_class = 1
throwforce = 5.0
throwforce = 5
throw_speed = 3
throw_range = 5
materials = list(MAT_METAL=75)
attack_verb = list("stabbed")
hitsound = 'sound/weapons/bladeslice.ogg'
suicide_act(mob/user)
to_chat(viewers(user), pick("<span class='suicide'>[user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.</span>", \
"<span class='suicide'>[user] is stabbing the [src.name] into \his heart! It looks like \he's trying to commit suicide.</span>"))
return(BRUTELOSS)
/obj/item/weapon/screwdriver/suicide_act(mob/user)
to_chat(viewers(user), pick("<span class='suicide'>[user] is stabbing the [name] into \his temple! It looks like \he's trying to commit suicide.</span>", \
"<span class='suicide'>[user] is stabbing the [name] into \his heart! It looks like \he's trying to commit suicide.</span>"))
return(BRUTELOSS)
/obj/item/weapon/screwdriver/New()
switch(pick("red","blue","purple","brown","green","cyan","yellow"))
@@ -82,7 +77,7 @@
src.pixel_y = rand(0, 16)
return
/obj/item/weapon/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
/obj/item/weapon/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!istype(M) || user.a_intent == I_HELP)
return ..()
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
@@ -91,72 +86,60 @@
M = user
return eyestab(M,user)
/*
* Wirecutters
*/
//Wirecutters
/obj/item/weapon/wirecutters
name = "wirecutters"
desc = "This cuts wires."
icon = 'icons/obj/items.dmi'
icon = 'icons/obj/tools.dmi'
icon_state = "cutters"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 6.0
force = 6
throw_speed = 3
throw_range = 7
w_class = 2
materials = list(MAT_METAL=80)
origin_tech = "materials=1;engineering=1"
attack_verb = list("pinched", "nipped")
hitsound = "sound/items/Wirecutter.ogg"
hitsound = 'sound/items/Wirecutter.ogg'
sharp = 1
edge = 1
/obj/item/weapon/wirecutters/New(loc, var/param_color = null)
/obj/item/weapon/wirecutters/New(loc, param_color = null)
..()
if((!param_color && prob(50)) || param_color == "yellow")
icon_state = "cutters-y"
item_state = "cutters_yellow"
/obj/item/weapon/wirecutters/attack(mob/living/carbon/human/C as mob, mob/user as mob)
if(istype(C) && C.handcuffed)
if(istype(C.handcuffed, /obj/item/weapon/restraints/handcuffs/cable))
usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\
"You cut \the [C]'s restraints with \the [src]!",\
/obj/item/weapon/wirecutters/attack(mob/living/carbon/human/H, mob/user)
if(istype(H) && H.handcuffed)
if(istype(H.handcuffed, /obj/item/weapon/restraints/handcuffs/cable))
usr.visible_message("\The [usr] cuts \the [H]'s restraints with \the [src]!",\
"You cut \the [H]'s restraints with \the [src]!",\
"You hear cable being cut.")
C.handcuffed = null
if(C.buckled && C.buckled.buckle_requires_restraints)
C.buckled.unbuckle_mob()
C.update_handcuffed()
H.handcuffed = null
if(H.buckled && H.buckled.buckle_requires_restraints)
H.buckled.unbuckle_mob()
H.update_handcuffed()
return
else
..()
/*
* Welding Tool
*/
//Welding Tool
/obj/item/weapon/weldingtool
name = "welding tool"
icon = 'icons/obj/items.dmi'
icon = 'icons/obj/tools.dmi'
icon_state = "welder"
item_state = "welder"
flags = CONDUCT
slot_flags = SLOT_BELT
//Amount of OUCH when it's thrown
force = 3
throwforce = 5
throw_speed = 3
throw_range = 5
w_class = 2
//Cost to make in the autolathe
materials = list(MAT_METAL=70, MAT_GLASS=30)
//R&D tech level
origin_tech = "engineering=1"
//Welding tool specific stuff
var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
var/status = 1 //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
var/max_fuel = 20 //The max amount of fuel the welder can hold
@@ -169,7 +152,6 @@
create_reagents(max_fuel)
reagents.add_reagent("fuel", max_fuel)
update_icon()
return
/obj/item/weapon/weldingtool/examine(mob/user)
if(..(user, 0))
@@ -196,10 +178,9 @@
else
icon_state = "[initial(icon_state)][ratio]"
update_torch()
return
/obj/item/weapon/weldingtool/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user, params)
if(isscrewdriver(I))
flamethrower_screwdriver(I, user)
if(istype(I, /obj/item/stack/rods))
flamethrower_rods(I, user)
@@ -231,7 +212,7 @@
if(isturf(location))
location.hotspot_expose(700, 5)
/obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob)
/obj/item/weapon/weldingtool/attack(mob/M, mob/user)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
@@ -289,7 +270,7 @@
return reagents.get_reagent_amount("fuel")
//Removes fuel from the welding tool. If a mob is passed, it will try to flash the mob's eyes. This should probably be renamed to use()
/obj/item/weapon/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/living/M = null)
/obj/item/weapon/weldingtool/proc/remove_fuel(amount = 1, mob/living/M = null)
if(!welding || !check_fuel())
return 0
if(get_fuel() >= amount)
@@ -402,7 +383,7 @@
/obj/item/weapon/weldingtool/hugetank
name = "Upgraded Welding Tool"
desc = "An upgraded welder based of the industrial welder."
desc = "An upgraded welder based off the industrial welder."
icon_state = "upindwelder"
item_state = "upindwelder"
max_fuel = 80
@@ -419,10 +400,10 @@
w_class = 3
materials = list(MAT_METAL=70, MAT_GLASS=120)
origin_tech = "engineering=4;plasmatech=3"
var/last_gen = 0
change_icons = 0
can_off_process = 1
light_intensity = 1
var/last_gen = 0
/obj/item/weapon/weldingtool/experimental/proc/fuel_gen()
if(!welding && !last_gen)
@@ -436,19 +417,16 @@
if(reagents.total_volume < max_fuel)
fuel_gen()
/*
* Crowbar
*/
//Crowbar
/obj/item/weapon/crowbar
name = "pocket crowbar"
desc = "A small crowbar. This handy tool is useful for lots of things, such as prying floor tiles or opening unpowered doors."
icon = 'icons/obj/items.dmi'
icon = 'icons/obj/tools.dmi'
icon_state = "crowbar"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
force = 5
throwforce = 7
item_state = "crowbar"
w_class = 2
materials = list(MAT_METAL=50)
@@ -456,7 +434,6 @@
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
/obj/item/weapon/crowbar/red
icon = 'icons/obj/items.dmi'
icon_state = "red_crowbar"
item_state = "crowbar_red"
@@ -480,14 +457,14 @@
origin_tech = "combat=2"
var/open = 0
New()
..()
update_icon()
/obj/item/weapon/conversion_kit/New()
..()
update_icon()
icon_state = "[initial(icon_state)]_[open]"
attack_self(mob/user as mob)
open = !open
to_chat(user, "\blue You [open?"open" : "close"] the conversion kit.")
update_icon()
/obj/item/weapon/conversion_kit/update_icon()
icon_state = "[initial(icon_state)]_[open]"
/obj/item/weapon/conversion_kit/attack_self(mob/user)
open = !open
to_chat(user, "\blue You [open?"open" : "close"] the conversion kit.")
update_icon()
@@ -1,6 +1,7 @@
/obj/structure/closet/cardboard
name = "large cardboard box"
desc = "Just a box..."
icon = 'icons/obj/cardboard_boxes.dmi'
icon_state = "cardboard"
icon_opened = "cardboard_open"
icon_closed = "cardboard"
@@ -43,7 +44,7 @@
/mob/living/proc/do_alert_animation(atom/A)
var/image/I
I = image('icons/obj/closet.dmi', A, "cardboard_special", A.layer+1)
I = image('icons/obj/cardboard_boxes.dmi', A, "cardboard_special", A.layer+1)
var/list/viewing = list()
for(var/mob/M in viewers(A))
if(M.client)
@@ -52,6 +53,7 @@
I.alpha = 0
animate(I, pixel_z = 32, alpha = 255, time = 5, easing = ELASTIC_EASING)
/obj/structure/closet/cardboard/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(src.opened)
if(istype(W, /obj/item/weapon/weldingtool))
@@ -62,3 +64,25 @@
for(var/mob/M in viewers(src))
M.show_message("<span class='notice'>\The [src] has been cut apart by [user] with \the [WC].</span>", 3, "You hear cutting.", 2)
qdel(src)
return
if(istype(W, /obj/item/weapon/pen))
var/decalselection = input("Please select a decal") as null|anything in list("Atmospherics", "Bartender", "Barber", "Blueshield", "Brig Physician", "Captain",
"Cargo", "Chief Engineer", "Chaplain", "Chef", "Chemist", "Civilian", "Clown", "CMO", "Coroner", "Detective", "Engineering", "Genetics", "HOP",
"HOS", "Hydroponics", "Internal Affairs Agent", "Janitor", "Magistrate", "Mechanic", "Medical", "Mime", "Mining", "NT Representative", "Paramedic", "Pod Pilot",
"Prisoner", "Research Director", "Security", "Syndicate", "Therapist", "Virology", "Warden", "Xenobiology")
if(!decalselection)
return
if(user.incapacitated())
to_chat(user, "You're in no condition to perform this action.")
return
if(W != user.get_active_hand())
to_chat(user, "You must be holding the pen to perform this action.")
return
if(! Adjacent(user))
to_chat(user, "You have moved too far away from the cardboard box.")
return
decalselection = replacetext(decalselection, " ", "_")
decalselection = lowertext(decalselection)
icon_opened = ("cardboard_open_"+decalselection)
icon_closed = ("cardboard_"+decalselection)
update_icon() // a proc declared in the closets parent file used to update opened/closed sprites on normal closets
@@ -3,7 +3,7 @@
/obj/structure/closet/crate
name = "crate"
desc = "A rectangular steel crate."
icon = 'icons/obj/storage.dmi'
icon = 'icons/obj/crates.dmi'
icon_state = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
@@ -490,7 +490,6 @@
/obj/structure/closet/crate/large
name = "large crate"
desc = "A hefty metal crate."
icon = 'icons/obj/storage.dmi'
icon_state = "largemetal"
icon_opened = "largemetalopen"
icon_closed = "largemetal"
@@ -515,7 +514,6 @@
/obj/structure/closet/crate/secure/large
name = "large crate"
desc = "A hefty metal crate with an electronic locking system."
icon = 'icons/obj/storage.dmi'
icon_state = "largemetal"
icon_opened = "largemetalopen"
icon_closed = "largemetal"
@@ -1,8 +1,8 @@
/obj/structure/largecrate
name = "large crate"
desc = "A hefty wooden crate."
icon = 'icons/obj/storage.dmi'
icon_state = "densecrate"
icon = 'icons/obj/crates.dmi'
icon_state = "largecrate"
density = 1
var/obj/item/weapon/paper/manifest/manifest
@@ -49,7 +49,6 @@
return attack_hand(user)
/obj/structure/largecrate/mule
icon_state = "mulecrate"
/obj/structure/largecrate/lisa
icon_state = "lisacrate"
@@ -79,7 +79,7 @@
if(victim.buckled)
return 0
var/mob/living/H = victim
playsound(loc, "sound/effects/splat.ogg", 25, 1)
playsound(loc, 'sound/effects/splat.ogg', 25, 1)
H.forceMove(loc)
H.emote("scream")
if(istype(H, /mob/living/carbon/human)) //So you don't get human blood when you spike a giant spidere
+5 -3
View File
@@ -138,10 +138,10 @@
return data
/datum/song/Topic(href, href_list)
if(!in_range(instrumentObj, usr) || (issilicon(usr) && instrumentObj.loc != usr) || !isliving(usr) || !usr.canmove || usr.restrained())
if(!in_range(instrumentObj, usr) || (issilicon(usr) && instrumentObj.loc != usr) || !isliving(usr) || usr.incapacitated())
usr << browse(null, "window=instrument")
usr.unset_machine()
return
return 1
instrumentObj.add_fingerprint(usr)
@@ -168,6 +168,8 @@
//split into lines
spawn()
lines = splittext(t, "\n")
if(lines.len == 0)
return 1
if(copytext(lines[1],1,6) == "BPM: ")
tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6)))
lines.Cut(1,2)
@@ -291,7 +293,7 @@
ui_interact(user)
/obj/structure/piano/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user || !anchored)
if(!isliving(user) || user.incapacitated() || !anchored)
return
song.ui_interact(user, ui_key, ui, force_open)
+15 -9
View File
@@ -5,6 +5,9 @@
#define ERT_TYPE_RED 2
#define ERT_TYPE_GAMMA 3
/datum/game_mode
var/list/datum/mind/ert = list()
var/list/response_team_members = list()
var/responseteam_age = 21 // Minimum account age to play as an ERT member
var/datum/response_team/active_team = null
@@ -93,7 +96,7 @@ var/ert_request_answered = 0
if(response_team_members.len > 6)
to_chat(src, "The emergency response team is already full!")
return 0
return 1
/proc/trigger_armed_response_team(var/datum/response_team/response_team_type)
@@ -106,7 +109,7 @@ var/ert_request_answered = 0
active_team.cannot_send_team()
send_emergency_team = 0
return 0
// Respawnable players get first dibs
for(var/mob/dead/observer/M in ert_candidates)
if((M in respawnable_list) && M.JoinResponseTeam())
@@ -115,7 +118,7 @@ var/ert_request_answered = 0
for(var/mob/dead/observer/M in (ert_candidates - respawnable_list))
if(M.JoinResponseTeam())
response_team_members |= M
if(!response_team_members.len)
active_team.cannot_send_team()
send_emergency_team = 0
@@ -125,14 +128,14 @@ var/ert_request_answered = 0
for(var/mob/M in response_team_members)
if(index > emergencyresponseteamspawn.len)
index = 1
var/client/C = M.client
var/mob/living/carbon/human/new_commando = C.create_response_team(emergencyresponseteamspawn[index])
new_commando.mind.key = M.key
new_commando.key = M.key
new_commando.update_icons()
index++
send_emergency_team = 0
active_team.announce_team()
return 1
@@ -170,8 +173,8 @@ var/ert_request_answered = 0
head_organ.b_hair = color2B(hair_c)
M.change_eye_color(color2R(eye_c), color2G(eye_c), color2B(eye_c))
M.s_tone = skin_tone
head_organ.h_style = random_hair_style(M.gender, head_organ.species.name)
head_organ.f_style = random_facial_hair_style(M.gender, head_organ.species.name)
head_organ.h_style = random_hair_style(M.gender, head_organ.species.name)
head_organ.f_style = random_facial_hair_style(M.gender, head_organ.species.name)
M.real_name = "[pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant First Class", "Master Sergeant", "Sergeant Major")] [pick(last_names)]"
M.name = M.real_name
@@ -187,6 +190,7 @@ var/ert_request_answered = 0
M.mind.special_role = SPECIAL_ROLE_ERT
if(!(M.mind in ticker.minds))
ticker.minds += M.mind //Adds them to regular mind list.
ticker.mode.ert += M.mind
M.forceMove(spawn_location)
active_team.equip_officer(class, M)
@@ -256,6 +260,7 @@ var/ert_request_answered = 0
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
pda.icon_state = "pda-engineer"
M.equip_to_slot_or_del(pda, slot_wear_pda)
M.job = "ERT Engineering"
if("Security")
@@ -280,7 +285,7 @@ var/ert_request_answered = 0
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
pda.icon_state = "pda-security"
M.equip_to_slot_or_del(pda, slot_wear_pda)
M.job = "ERT Security"
if("Medic")
medical_slots -= 1
@@ -302,7 +307,7 @@ var/ert_request_answered = 0
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
pda.icon_state = "pda-medical"
M.equip_to_slot_or_del(pda, slot_wear_pda)
M.job = "ERT Medical"
if("Commander")
command_slots = 0
@@ -329,6 +334,7 @@ var/ert_request_answered = 0
pda.ownjob = "Emergency Response Team Leader"
pda.name = "PDA-[M.real_name] ([pda.ownjob])"
M.equip_to_slot_or_del(pda, slot_wear_pda)
M.job = "ERT Commander"
/datum/response_team/proc/cannot_send_team()
event_announcement.Announce("[station_name()], we are unfortunately unable to send you an Emergency Response Team at this time.", "ERT Unavailable")
+5
View File
@@ -12,6 +12,9 @@ var/list/page_sound = list('sound/effects/pageturn1.ogg', 'sound/effects/pagetur
var/list/gun_sound = list('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg')
var/list/computer_ambience = list('sound/goonstation/machines/ambicomp1.ogg', 'sound/goonstation/machines/ambicomp2.ogg', 'sound/goonstation/machines/ambicomp3.ogg')
var/list/ricochet = list('sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg','sound/weapons/effects/ric3.ogg','sound/weapons/effects/ric4.ogg','sound/weapons/effects/ric5.ogg')
var/list/terminal_type = list('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg',
'sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg',
'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg')
/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, var/is_global, var/pitch)
@@ -137,4 +140,6 @@ var/list/ricochet = list('sound/weapons/effects/ric1.ogg', 'sound/weapons/effect
soundin = pick(computer_ambience)
if("ricochet")
soundin = pick(ricochet)
if("terminal_type")
soundin = pick(terminal_type)
return soundin
+2 -2
View File
@@ -73,10 +73,10 @@
icons = list("bananium","bananium_dam")
var/spam_flag = 0
/turf/simulated/floor/mineral/bananium/Entered(mob/AM)
/turf/simulated/floor/mineral/bananium/Entered(mob/living/M)
.=..()
if(!.)
if(istype(AM))
if(istype(M))
squeek()
/turf/simulated/floor/mineral/bananium/attackby(obj/item/weapon/W, mob/user, params)
+5 -1
View File
@@ -167,7 +167,7 @@ var/list/admin_verbs_debug = list(
/client/proc/admin_serialize,
/client/proc/admin_deserialize,
/client/proc/jump_to_ruin,
/client/proc/toggle_medal_disable
/client/proc/toggle_medal_disable
)
var/list/admin_verbs_possess = list(
/proc/possess,
@@ -214,6 +214,10 @@ var/list/admin_verbs_snpc = list(
/client/proc/hide_snpc_verbs
)
/client/proc/on_holder_add()
if(chatOutput && chatOutput.loaded)
chatOutput.loadAdmin()
/client/proc/add_admin_verbs()
if(holder)
verbs += admin_verbs_default
+1
View File
@@ -32,6 +32,7 @@ var/list/admin_datums = list()
if(istype(C))
owner = C
owner.holder = src
owner.on_holder_add()
owner.add_admin_verbs() //TODO
owner.verbs -= /client/proc/readmin
admins |= C
+10
View File
@@ -531,6 +531,16 @@
if(ticker.mode.greyshirts.len)
dat += check_role_table("Greyshirts", ticker.mode.greyshirts)
if(ts_spiderlist.len)
var/list/spider_minds = list()
for(var/mob/living/simple_animal/hostile/poison/terror_spider/S in ts_spiderlist)
if(S.ckey)
spider_minds += S.mind
dat += check_role_table("Terror Spiders", spider_minds)
if(ticker.mode.ert.len)
dat += check_role_table("ERT", ticker.mode.ert)
dat += "</body></html>"
usr << browse(dat, "window=roundstatus;size=400x500")
else
+97
View File
@@ -1710,6 +1710,103 @@
to_chat(src.owner, "You sent a [eviltype] fax to [H]")
log_admin("[key_name(src.owner)] sent [key_name(H)] a [eviltype] fax")
message_admins("[key_name_admin(src.owner)] replied to [key_name_admin(H)] with a [eviltype] fax")
else if(href_list["Bless"])
if(!check_rights(R_ADMIN))
return
var/mob/living/M = locateUID(href_list["Bless"])
if(!istype(M))
to_chat(usr, "This can only be used on instances of type /mob/living")
return
var/btypes = list("To Arrivals", "Moderate Heal")
var/mob/living/carbon/human/H
if(ishuman(M))
H = M
btypes += "Heal Over Time"
btypes += "Permanent Regeneration"
btypes += "Super Powers"
var/blessing = input(src.owner, "How would you like to bless [M]?", "Its good to be good...", "") as null|anything in btypes
if(!(blessing in btypes))
return
switch(blessing)
if("To Arrivals")
M.forceMove(pick(latejoin))
to_chat(M, "<span class='userdanger'>You are abruptly pulled through space!</span>")
if("Moderate Heal")
M.adjustBruteLoss(-25)
M.adjustFireLoss(-25)
M.adjustToxLoss(-25)
M.adjustOxyLoss(-25)
to_chat(M,"<span class='userdanger'>You feel invigorated!</span>")
if("Heal Over Time")
H.reagents.add_reagent("salglu_solution", 30)
H.reagents.add_reagent("salbutamol", 20)
H.reagents.add_reagent("spaceacillin", 20)
if("Permanent Regeneration")
H.dna.SetSEState(REGENERATEBLOCK, 1)
genemutcheck(H, REGENERATEBLOCK, null, MUTCHK_FORCED)
H.update_mutations()
if("Super Powers")
var/list/default_genes = list(REGENERATEBLOCK, NOBREATHBLOCK, COLDBLOCK)
for(var/gene in default_genes)
H.dna.SetSEState(gene, 1)
genemutcheck(H, gene, null, MUTCHK_FORCED)
H.update_mutations()
else if(href_list["Smite"])
if(!check_rights(R_ADMIN))
return
var/mob/living/M = locateUID(href_list["Smite"])
var/mob/living/carbon/human/H
if(!istype(M))
to_chat(usr, "This can only be used on instances of type /mob/living")
return
var/ptypes = list("Lightning bolt", "Fire Death", "Gib")
if(ishuman(M))
H = M
ptypes += "Brain Damage"
ptypes += "Honk Tumor"
ptypes += "Cluwne"
ptypes += "Mutagen Cookie"
ptypes += "Hellwater Cookie"
var/punishment = input(src.owner, "How would you like to smite [M]?", "Its good to be baaaad...", "") as null|anything in ptypes
if(!(punishment in ptypes))
return
switch(punishment)
if("Lightning bolt")
M.electrocute_act(5, "Lightning Bolt", safety=1)
playsound(get_turf(M), 'sound/magic/LightningShock.ogg', 50, 1, -1)
M.adjustFireLoss(75)
M.Weaken(5)
to_chat(M, "<span class='userdanger'>The gods have punished you for your sins!</span>")
if("Brain Damage")
H.adjustBrainLoss(75)
if("Fire Death")
to_chat(M,"<span class='userdanger'>You feel hotter than usual. Maybe you should lowe-wait, is that your hand melting?</span>")
var/turf/simulated/T = get_turf(M)
new /obj/effect/hotspot(T)
M.adjustFireLoss(150)
if("Honk Tumor")
if(!H.get_int_organ(/obj/item/organ/internal/honktumor))
var/obj/item/organ/internal/organ = new /obj/item/organ/internal/honktumor
to_chat(H, "<span class='userdanger'>Life seems funnier, somehow.</span>")
organ.insert(H)
if("Cluwne")
H.makeCluwne()
if("Mutagen Cookie")
var/obj/item/weapon/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/weapon/reagent_containers/food/snacks/cookie
evilcookie.reagents.add_reagent("mutagen", 10)
evilcookie.desc = "It has a faint green glow."
evilcookie.bitesize = 100
H.drop_l_hand()
H.equip_to_slot_or_del(evilcookie, slot_l_hand)
if("Hellwater Cookie")
var/obj/item/weapon/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/weapon/reagent_containers/food/snacks/cookie
evilcookie.reagents.add_reagent("hell_water", 25)
evilcookie.desc = "Sulphur-flavored."
evilcookie.bitesize = 100
H.drop_l_hand()
H.equip_to_slot_or_del(evilcookie, slot_l_hand)
if("Gib")
M.gib(FALSE)
else if(href_list["FaxReplyTemplate"])
if(!check_rights(R_ADMIN))
return
+1 -1
View File
@@ -13,7 +13,7 @@
return
var/image/cross = image('icons/obj/storage.dmi',"bible")
msg = "\blue [bicon(cross)] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
msg = "\blue [bicon(cross)] <b><font color=purple>PRAY: </font>[key_name(src, 1)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?_src_=vars;Vars=[UID()]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=\ref[src]'>SM</A>) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) (<A HREF='?_src_=holder;adminspawncookie=\ref[src]'>SC</a>) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]"
for(var/client/X in admins)
if(check_rights(R_EVENT,0,X.mob))
+3 -1
View File
@@ -92,4 +92,6 @@
var/datum/chatOutput/chatOutput
// Donator stuff.
var/donator_level = DONATOR_LEVEL_NONE
var/donator_level = DONATOR_LEVEL_NONE
var/var_edited = FALSE
+22 -3
View File
@@ -232,7 +232,7 @@
to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. <a href='http://www.byond.com/membership'>Click here to find out more</a>.")
return 0
return 1
//Like for /atoms, but clients are their own snowflake FUCK
/client/proc/setDir(newdir)
dir = newdir
@@ -335,6 +335,7 @@
world.update_status()
if(holder)
on_holder_add()
add_admin_verbs()
admin_memo_output("Show", 0, 1)
@@ -408,10 +409,12 @@
if(IsGuestKey(key))
return
establish_db_connection()
if(!dbcon.IsConnected())
return
var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM [format_table_name("player")] WHERE ckey = '[ckey]'")
query.Execute()
var/sql_id = 0
@@ -421,6 +424,7 @@
player_age = text2num(query.item[2])
break
var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = '[address]'")
query_ip.Execute()
related_accounts_ip = list()
@@ -428,6 +432,7 @@
if(ckey != query_ip.item[1])
related_accounts_ip.Add("[query_ip.item[1]]")
var/DBQuery/query_cid = dbcon.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]'")
query_cid.Execute()
related_accounts_cid = list()
@@ -435,6 +440,7 @@
if(ckey != query_cid.item[1])
related_accounts_cid.Add("[query_cid.item[1]]")
var/admin_rank = "Player"
if(holder)
admin_rank = holder.rank
@@ -443,15 +449,18 @@
if(check_randomizer(connectiontopic))
return
//Log all the alts
if(related_accounts_cid.len)
log_access("Alts: [key_name(src)]:[jointext(related_accounts_cid, " - ")]")
var/watchreason = check_watchlist(ckey)
if(watchreason)
message_admins("<font color='red'><B>Notice: </B></font><font color='blue'>[key_name_admin(src)] is on the watchlist and has just connected - Reason: [watchreason]</font>")
send2irc(config.admin_notify_irc, "Watchlist - [key_name(src)] is on the watchlist and has just connected - Reason: [watchreason]")
//Just the standard check to see if it's actually a number
if(sql_id)
if(istext(sql_id))
@@ -467,17 +476,24 @@
if(sql_id)
//Player already identified previously, we need to just update the 'lastseen', 'ip' and 'computer_id' variables
var/DBQuery/query_update = dbcon.NewQuery("UPDATE [format_table_name("player")] SET lastseen = Now(), ip = '[sql_ip]', computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]' WHERE id = [sql_id]")
query_update.Execute()
if(!query_update.Execute())
var/err = query_update.ErrorMsg()
log_game("SQL ERROR during log_client_to_db (update). Error : \[[err]\]\n")
message_admins("SQL ERROR during log_client_to_db (update). Error : \[[err]\]\n")
else
//New player!! Need to insert all the stuff
var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]')")
query_insert.Execute()
if(!query_insert.Execute())
var/err = query_insert.ErrorMsg()
log_game("SQL ERROR during log_client_to_db (insert). Error : \[[err]\]\n")
message_admins("SQL ERROR during log_client_to_db (insert). Error : \[[err]\]\n")
//Logging player access
var/serverip = "[world.internet_address]:[world.port]"
var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `[format_table_name("connection_log")]`(`id`,`datetime`,`serverip`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),'[serverip]','[ckey]','[sql_ip]','[sql_computerid]');")
query_accesslog.Execute()
#undef TOPIC_SPAM_DELAY
#undef UPLOAD_LIMIT
#undef MIN_CLIENT_VERSION
@@ -628,3 +644,6 @@
/client/proc/colour_transition(var/list/colour_to = null, var/time = 10) //Call this with no parameters to reset to default.
animate(src, color=colour_to, time=time, easing=SINE_EASING)
/client/proc/on_varedit()
var_edited = TRUE
@@ -95,6 +95,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/UI_style_alpha = 255
var/windowflashing = TRUE
//ghostly preferences
var/ghost_anonsay = 0
//character preferences
var/real_name //our character's name
@@ -283,6 +285,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<b>Species:</b> <a href='?_src_=prefs;preference=species;task=input'>[species]</a><br>"
if(species == "Vox")
dat += "<b>N2 Tank:</b> <a href='?_src_=prefs;preference=speciesprefs;task=input'>[speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]</a><br>"
if(species == "Grey")
dat += "<b>Voice:</b> <a href ='?_src_=prefs;preference=speciesprefs;task=input'>[speciesprefs ? "Wingdings" : "Normal"]</a><BR>"
dat += "<b>Secondary Language:</b> <a href='?_src_=prefs;preference=language;task=input'>[language]</a><br>"
dat += "<b>Blood Type:</b> <a href='?_src_=prefs;preference=b_type;task=input'>[b_type]</a><br>"
if(species in list("Human", "Drask", "Vox"))
@@ -444,6 +448,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]</b></a><br>"
dat += "<b>Ghost sight:</b> <a href='?_src_=prefs;preference=ghost_sight'><b>[(toggles & CHAT_GHOSTSIGHT) ? "Nearest Creatures" : "All Emotes"]</b></a><br>"
dat += "<b>Ghost radio:</b> <a href='?_src_=prefs;preference=ghost_radio'><b>[(toggles & CHAT_GHOSTRADIO) ? "Nearest Speakers" : "All Chatter"]</b></a><br>"
dat += "<b>Deadchat anonymity:</b> <a href='?_src_=prefs;preference=ghost_anonsay'><b>[ghost_anonsay ? "Anonymous" : "Not Anonymous"]</b></a><br>"
dat += "</td><td width='300px' height='300px' valign='top'>"
dat += "<h2>Special Role Settings</h2>"
@@ -1334,6 +1339,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_skin = 0
alt_head = "None" //No alt heads on species that don't have them.
speciesprefs = 0 //My Vox tank shouldn't change how my future Grey talks.
body_accessory = null //no vulptail on humans damnit
@@ -1994,6 +2000,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("ghost_radio")
toggles ^= CHAT_GHOSTRADIO
if("ghost_anonsay")
ghost_anonsay = !ghost_anonsay
if("save")
save_preferences(user)
save_character(user)
@@ -2040,6 +2049,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.add_language(language)
character.real_name = real_name
character.dna.real_name = real_name
character.name = character.real_name
@@ -14,8 +14,9 @@
nanoui_fancy,
show_ghostitem_attack,
lastchangelog,
exp,
windowflashing
windowflashing,
ghost_anonsay,
exp
FROM [format_table_name("player")]
WHERE ckey='[C.ckey]'"}
)
@@ -42,8 +43,9 @@
nanoui_fancy = text2num(query.item[11])
show_ghostitem_attack = text2num(query.item[12])
lastchangelog = query.item[13]
exp = query.item[14]
windowflashing = text2num(query.item[15])
windowflashing = text2num(query.item[14])
ghost_anonsay = text2num(query.item[15])
exp = query.item[16]
//Sanitize
ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor))
@@ -58,8 +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))
exp = sanitize_text(exp, initial(exp))
windowflashing = sanitize_integer(windowflashing, 0, 1, initial(windowflashing))
ghost_anonsay = sanitize_integer(ghost_anonsay, 0, 1, initial(ghost_anonsay))
exp = sanitize_text(exp, initial(exp))
return 1
/datum/preferences/proc/save_preferences(client/C)
@@ -84,7 +87,9 @@
volume='[volume]',
nanoui_fancy='[nanoui_fancy]',
show_ghostitem_attack='[show_ghostitem_attack]',
lastchangelog='[lastchangelog]'
lastchangelog='[lastchangelog]',
windowflashing='[windowflashing]',
ghost_anonsay='[ghost_anonsay]'
WHERE ckey='[C.ckey]'"}
)
+2 -2
View File
@@ -327,8 +327,8 @@
flash_protect = 0
tint = 0
var/mob/living/carbon/user = usr
user.update_inv_glasses()
user.update_tint()
user.update_inv_glasses()
for(var/X in actions)
var/datum/action/A = X
@@ -492,4 +492,4 @@
else
to_chat(user, "<span class='notice'>The eye winks at you and vanishes into the abyss, you feel really unlucky.</span>")
qdel(src)
..()
..()
+1 -1
View File
@@ -383,7 +383,7 @@
/obj/item/clothing/head/griffin/proc/caw()
if(cooldown < world.time - 20) // A cooldown, to stop people being jerks
playsound(src.loc, "sound/misc/caw.ogg", 50, 1)
playsound(src.loc, 'sound/misc/caw.ogg', 50, 1)
cooldown = world.time
+3 -3
View File
@@ -67,9 +67,9 @@
to_chat(usr, "You push the [src] up out of your face.")
flash_protect = 0
tint = 0
var/mob/living/carbon/C = usr
C.update_tint()
usr.update_inv_head() //so our mob-overlays update
var/mob/living/carbon/user = usr
user.update_tint()
user.update_inv_head() //so our mob-overlays update
for(var/X in actions)
var/datum/action/A = X
+4 -2
View File
@@ -52,7 +52,9 @@
to_chat(usr, "You push the [src] up out of your face.")
flash_protect = 0
tint = 0
usr.update_inv_wear_mask() //so our mob-overlays update
var/mob/living/carbon/user = usr
user.update_tint()
user.update_inv_wear_mask() //so our mob-overlays update
for(var/X in actions)
var/datum/action/A = X
@@ -182,7 +184,7 @@
/obj/item/clothing/mask/gas/owl_mask/proc/hoot()
if(cooldown < world.time - 35) // A cooldown, to stop people being jerks
playsound(src.loc, "sound/misc/hoot.ogg", 50, 1)
playsound(src.loc, 'sound/misc/hoot.ogg', 50, 1)
cooldown = world.time
// ********************************************************************
+12 -13
View File
@@ -40,8 +40,7 @@
if(!isturf(I.loc)) //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up.
if(istype(I.loc,/obj/item/weapon/storage)) //in a container.
var/obj/item/weapon/storage/U = I.loc
user.client.screen -= I
U.contents.Remove(I)
U.remove_from_storage(I, src)
else if(user.l_hand == I) //in a hand
user.drop_l_hand()
else if(user.r_hand == I) //in a hand
@@ -59,6 +58,7 @@
I.pixel_x = 0 //then remove it so it'll stay within the evidence bag
I.pixel_y = 0
var/image/img = image("icon"=I, "layer"=FLOAT_LAYER) //take a snapshot. (necessary to stop the underlays appearing under our inventory-HUD slots ~Carn
img.plane = FLOAT_PLANE
I.pixel_x = xx //and then return it
I.pixel_y = yy
overlays += img
@@ -69,7 +69,7 @@
w_class = I.w_class
return 1
/obj/item/weapon/evidencebag/attack_self(mob/user as mob)
/obj/item/weapon/evidencebag/attack_self(mob/user)
if(contents.len)
var/obj/item/I = contents[1]
user.visible_message("<span class='notice'>[user] takes [I] out of [src].</span>", "<span class='notice'>You take [I] out of [src].</span>",\
@@ -83,17 +83,16 @@
else
to_chat(user, "[src] is empty.")
icon_state = "evidenceobj"
return
/obj/item/weapon/storage/box/evidence
name = "evidence bag box"
desc = "A box claiming to contain evidence bags."
New()
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
..()
return
/obj/item/weapon/storage/box/evidence/New()
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
new /obj/item/weapon/evidencebag(src)
..()
+1 -1
View File
@@ -66,7 +66,7 @@
if(log.len && !scanning)
scanning = 1
to_chat(usr, "<span class='notice'>Printing report, please wait...</span>")
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
spawn(100)
// Create our paper
+1 -1
View File
@@ -335,7 +335,7 @@ log transactions
to_chat(usr, "<span class='notice'>The [src.name] flashes an error on its display.</span>")
return
lastprint = world.timeofday
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
var/obj/item/weapon/paper/R = new(src.loc)
R.name = "Account balance: [authenticated_account.owner_name]"
R.info = {"<b>NT Automated Teller Account Statement</b><br><br>
+1 -1
View File
@@ -89,7 +89,7 @@ var/global/list/all_money_accounts = list()
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(source_db.loc)
var/obj/item/weapon/paper/R = new /obj/item/weapon/paper(P)
playsound(source_db.loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
playsound(source_db.loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
P.wrapped = R
R.name = "Account information: [M.owner_name]"
+1 -1
View File
@@ -220,7 +220,7 @@
if("print")
var/text
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
var/obj/item/weapon/paper/P = new(loc)
if(detailed_account_view)
P.name = "account #[detailed_account_view.account_number] details"
+1 -1
View File
@@ -26,7 +26,7 @@
linked_account = station_account
/obj/item/device/eftpos/proc/print_reference()
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
var/obj/item/weapon/paper/R = new(src.loc)
R.name = "Reference: [eftpos_name]"
+1 -1
View File
@@ -201,7 +201,7 @@ var/const/POS_HEADER = {"<html>
</tr>"}
receipt += "</table></body></html>"
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
var/obj/item/weapon/paper/P = new(loc)
P.name="Receipt #[id]-[++sales]"
P.info=receipt
+2 -1
View File
@@ -191,7 +191,8 @@ var/list/event_last_fired = list()
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Abductor Visit", /datum/event/abductor, 80, is_one_shot = 1),
new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 0, is_one_shot = 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Slaughter Demon", /datum/event/spawn_slaughter, 15, is_one_shot = 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, is_one_shot = 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Slaughter Demon", /datum/event/spawn_slaughter, 15, is_one_shot = 1)
)
+5 -3
View File
@@ -29,14 +29,16 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
anchored = 1
var/z_original = 0
var/destination
var/notify = TRUE
/obj/effect/immovablerod/New(atom/start, atom/end)
loc = start
z_original = z
destination = end
notify_ghosts("\A [src] is inbound!",
enter_link="<a href=?src=[UID()];follow=1>(Click to follow)</a>",
source=src, action=NOTIFY_FOLLOW)
if(notify)
notify_ghosts("\A [src] is inbound!",
enter_link="<a href=?src=[UID()];follow=1>(Click to follow)</a>",
source=src, action=NOTIFY_FOLLOW)
poi_list |= src
if(end && end.z==z_original)
walk_towards(src, destination, 1)
+1 -1
View File
@@ -15,5 +15,5 @@
/datum/event/meteor_wave/goreops/end()
/datum/event/meteor_wave/goreop/end()
event_announcement.Announce("All MeteorOps are dead. Major Station Victory.", "MeteorOps")
+3 -3
View File
@@ -428,8 +428,8 @@
if(potency != null)
mutativeness = potency / 10
if(production != null)
spread_cap *= production / 5
spread_multiplier /= production / 5
spread_cap /= production / 5
spread_multiplier *= production / 5
..()
@@ -567,4 +567,4 @@
if(isliving(A))
var/mob/living/M = A
if(("vines" in M.faction) || ("plants" in M.faction))
. = TRUE
. = TRUE
+44
View File
@@ -0,0 +1,44 @@
/datum/event/spider_terror
announceWhen = 400
var/spawncount = 1
/datum/event/spider_terror/setup()
announceWhen = rand(announceWhen, announceWhen + 50)
spawncount = 1
/datum/event/spider_infestation/announce()
command_announcement.Announce("Confirmed outbreak of level 3 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren.ogg')
/datum/event/spider_terror/start()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in all_vent_pumps)
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
if(temp_vent.parent.other_atmosmch.len > 50)
vents += temp_vent
var/spider_type
var/infestation_type = pick(1, 2, 3, 4)
switch(infestation_type)
if(1)
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/green
spawncount = pick(2,3)
if(2)
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/white
spawncount = 1
if(3)
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/prince
spawncount = 1
if(4)
spider_type = /mob/living/simple_animal/hostile/poison/terror_spider/queen
spawncount = 1
while(spawncount >= 1 && vents.len)
var/obj/vent = pick(vents)
var/obj/effect/spider/spiderling/terror_spiderling/S = new(vent.loc)
S.name = "evil-looking spiderling"
S.grow_as = spider_type
S.amount_grown = 75
vents -= vent
spawncount--
@@ -1218,13 +1218,6 @@
user.drop_item()
forceMove(get_turf(O))
return Expand()
if(istype(O, /obj/machinery/computer/camera_advanced/xenobio))
var/obj/machinery/computer/camera_advanced/xenobio/X = O
X.monkeys++
to_chat(user, "<span class='notice'>You feed [src] to the [X]. It now has [X.monkeys] monkey cubes stored.</span>")
user.drop_item()
qdel(src)
return
..()
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature)
+3 -10
View File
@@ -59,21 +59,14 @@ var/list/all_lighting_overlays = list() // Global list of lighting overlays.
var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx)
var/list/new_matrix = list(
color = list(
cr.cache_r, cr.cache_g, cr.cache_b, 0,
cg.cache_r, cg.cache_g, cg.cache_b, 0,
cb.cache_r, cb.cache_g, cb.cache_b, 0,
ca.cache_r, ca.cache_g, ca.cache_b, 0,
0, 0, 0, 1
)
var/lum = max > LIGHTING_SOFT_THRESHOLD
if(lum)
luminosity = 1
animate(src, color = new_matrix, time = 5)
else
animate(src, color = new_matrix, time = 5)
animate(luminosity = 0, time = 0)
)
luminosity = max > LIGHTING_SOFT_THRESHOLD

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