mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 23:53:47 +01:00
Merge branch 'master' into stationgoals
This commit is contained in:
@@ -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`)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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>")
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>")
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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 ..()
|
||||
@@ -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"
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 //////////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]'"}
|
||||
)
|
||||
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
..()
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
// ********************************************************************
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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]"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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]"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user