mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 03:27:05 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into STILLALOTOFBLOOD
This commit is contained in:
@@ -2226,7 +2226,7 @@
|
||||
"aQP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/starboard)
|
||||
"aQQ" = (/obj/machinery/computer/atmos_alert,/obj/structure/sign/double/map/left{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-left-MS"; pixel_y = 32},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering)
|
||||
"aQR" = (/obj/machinery/computer/station_alert,/obj/structure/sign/double/map/right{desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering)
|
||||
"aQS" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/monitor{name = "Engineering Power Monitoring Console"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/camera{c_tag = "Engineering - Power Monitoring"; dir = 2; network = list("SS13")},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering)
|
||||
"aQS" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/computer/monitor{name = "Engineering Power Monitoring Console"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/camera{c_tag = "Engineering - Power Monitoring"; dir = 2; network = list("SS13")},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/engine/engineering)
|
||||
"aQT" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/obj/machinery/door/poddoor/preopen{id_tag = "lawyer_blast"; name = "privacy shutters"},/turf/simulated/floor/plating,/area/lawoffice)
|
||||
"aQU" = (/obj/machinery/vending/engivend,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering)
|
||||
"aQV" = (/obj/machinery/vending/tool,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering)
|
||||
@@ -3151,7 +3151,7 @@
|
||||
"biE" = (/obj/machinery/computer/crew,/turf/simulated/floor{dir = 1; icon_state = "darkgreen"},/area/bridge)
|
||||
"biF" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/folder/yellow{pixel_y = 4},/obj/machinery/camera{c_tag = "Bridge - Central"; dir = 2; network = list("SS13")},/obj/structure/table/glass,/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge)
|
||||
"biG" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge)
|
||||
"biH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/power/monitor{name = "Bridge Power Monitoring Console"},/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge)
|
||||
"biH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/computer/monitor{name = "Bridge Power Monitoring Console"},/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge)
|
||||
"biI" = (/obj/machinery/computer/atmos_alert,/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge)
|
||||
"biJ" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -1; pixel_y = 4},/obj/structure/table/glass,/turf/simulated/floor{dir = 1; icon_state = "darkbrown"},/area/bridge)
|
||||
"biK" = (/obj/machinery/computer/security,/turf/simulated/floor{dir = 1; icon_state = "darkred"; tag = "icon-darkblue"; temperature = 273.15},/area/bridge)
|
||||
|
||||
@@ -105,8 +105,8 @@
|
||||
"ca" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/turf/simulated/floor/plating,/area/derelict/solar_control)
|
||||
"cb" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor,/area/derelict/bridge/ai_upload)
|
||||
"cc" = (/obj/structure/computerframe,/turf/simulated/floor,/area/derelict/bridge/ai_upload)
|
||||
"cd" = (/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"ce" = (/turf/simulated/wall/r_wall,/area/space)
|
||||
"cf" = (/obj/machinery/power/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"cg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"ch" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"ci" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/derelict/solar_control)
|
||||
@@ -839,7 +839,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbDbDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbKbHbLbMbNbObyababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbPbQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbRbSbTbUbUbVbybyabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbWbDbDbDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbXbYbZbFbFbFbFcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDcbbDccbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDhchchchchchccehchchchchchccehchchchchchcbXcfcgchchbZbFcicjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDcbbDccbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDhchchchchchccehchchchchchccehchchchchchcbXcdcgchchbZbFcicjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbWbWckcbbWclcmbDbDbDcmbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbXbybybybycnbybycoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDbDbDbDbDbWbDbWbWbWbDbWbWbWbDbDbDbDbDbDbDcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpbycqbSbFbycoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcpcrbWbDbWbDbWbDbWbDbWbDbDbDcmbDcmbDbDbDbDbDcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpbybycsbybyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -1943,7 +1943,7 @@
|
||||
"aLs" = (/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/electrical)
|
||||
"aLt" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/maintenance/electrical)
|
||||
"aLu" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/maintenance/electrical)
|
||||
"aLv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
|
||||
"aLv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
|
||||
"aLw" = (/obj/machinery/camera{c_tag = "Fore Starboard Solars"; dir = 1; network = list("SS13")},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
|
||||
"aLx" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/electrical)
|
||||
"aLy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||
@@ -2804,7 +2804,7 @@
|
||||
"bbV" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/box/PDAs{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/ids,/turf/simulated/floor,/area/bridge)
|
||||
"bbW" = (/obj/machinery/computer/atmos_alert,/turf/simulated/floor{dir = 10; icon_state = "yellow"},/area/bridge)
|
||||
"bbX" = (/obj/machinery/computer/station_alert,/turf/simulated/floor{dir = 0; icon_state = "yellow"},/area/bridge)
|
||||
"bbY" = (/obj/machinery/power/monitor{name = "Bridge Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/bridge)
|
||||
"bbY" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/computer/monitor{name = "Backup Power Monitoring Console"},/turf/simulated/floor/plating,/area/maintenance/electrical)
|
||||
"bbZ" = (/obj/machinery/computer/shuttle_control/labor_camp,/turf/simulated/floor{dir = 10; icon_state = "blue"},/area/bridge)
|
||||
"bca" = (/obj/machinery/computer/communications,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge)
|
||||
"bcb" = (/obj/machinery/computer/shuttle_control/mining{req_access_txt = "48"},/turf/simulated/floor{dir = 6; icon_state = "blue"},/area/bridge)
|
||||
@@ -3901,7 +3901,7 @@
|
||||
"bxa" = (/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/sw)
|
||||
"bxb" = (/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||
"bxc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||
"bxd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/hologram/holopad,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||
"bxd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||
"bxe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||
"bxf" = (/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||
"bxg" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/airless{icon_state = "white"},/area/medical/reception)
|
||||
@@ -5228,9 +5228,11 @@
|
||||
"bWB" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing)
|
||||
"bWC" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/machinery/air_sensor{frequency = 1222; id_tag = "burn_sensor"},/turf/simulated/floor/engine,/area/toxins/mixing)
|
||||
"bWD" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 9},/turf/simulated/floor/engine,/area/toxins/mixing)
|
||||
"bWE" = (/obj/machinery/computer/monitor{name = "Bridge Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/bridge)
|
||||
"bWF" = (/turf/simulated/floor/plating/airless,/area/toxins/test_area)
|
||||
"bWG" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/toxins/test_area)
|
||||
"bWH" = (/turf/simulated/floor/airless,/area/toxins/test_area)
|
||||
"bWI" = (/obj/machinery/computer/monitor,/obj/structure/cable,/turf/simulated/floor{icon_state = "caution"; dir = 5},/area/engine/controlroom)
|
||||
"bWJ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
|
||||
"bWK" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
|
||||
"bWL" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_dock_outer"; locked = 1; name = "Mining Dock Airlock"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
|
||||
@@ -5305,6 +5307,7 @@
|
||||
"bYc" = (/obj/machinery/door/airlock/external{name = "Toxins Test Chamber"; req_access_txt = "0"},/turf/simulated/floor/plating/airless,/area/toxins/test_area)
|
||||
"bYd" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating/airless,/area/toxins/test_area)
|
||||
"bYe" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber North"; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 1},/turf/simulated/floor/airless,/area/toxins/test_area)
|
||||
"bYf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/solar/starboard)
|
||||
"bYg" = (/obj/item/weapon/ore/silver,/obj/item/weapon/ore/silver,/obj/structure/closet/crate,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "mining_dock_pump"},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/quartermaster/miningdock)
|
||||
"bYh" = (/obj/machinery/camera{c_tag = "Mining Dock External"; dir = 8},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor{icon_state = "warning"},/area/quartermaster/miningdock)
|
||||
"bYi" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/wall,/area/quartermaster/miningdock)
|
||||
@@ -5342,9 +5345,11 @@
|
||||
"bYO" = (/obj/machinery/door_control{id = "acute2"; name = "Acute 2 Shutters Control"; pixel_x = 6; pixel_y = -25},/obj/machinery/door_control{id = "scansep"; name = "Scanning Room Separation Shutters Control"; pixel_x = -6; pixel_y = -25},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
|
||||
"bYP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2)
|
||||
"bYQ" = (/obj/machinery/vending/medical,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay2)
|
||||
"bYR" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -30; pixel_y = 0},/obj/machinery/computer/monitor{name = "Grid Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/engineering)
|
||||
"bYS" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/cmo)
|
||||
"bYT" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor{icon_state = "white"},/area/medical/cmo)
|
||||
"bYU" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/weapon/folder/white{pixel_y = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/food/drinks/coffee,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/stamp/cmo,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/cmo)
|
||||
"bYV" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/computer/monitor{name = "Engine Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/engineering)
|
||||
"bYW" = (/obj/machinery/photocopier,/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay2)
|
||||
"bYX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/medbay2)
|
||||
"bYY" = (/turf/simulated/floor{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay2)
|
||||
@@ -5643,7 +5648,6 @@
|
||||
"ceX" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 30},/obj/structure/closet/firecloset,/obj/item/taperoll/engineering,/turf/simulated/floor,/area/engine/controlroom)
|
||||
"ceY" = (/obj/structure/closet/firecloset,/obj/item/taperoll/engineering,/turf/simulated/floor,/area/engine/controlroom)
|
||||
"ceZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/computer/security/telescreen{desc = "Used for watching the singularity chamber."; dir = 8; layer = 4; name = "Singularity Engine Telescreen"; network = list("Singularity"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/engine/controlroom)
|
||||
"cfa" = (/obj/machinery/power/monitor,/obj/structure/cable,/turf/simulated/floor{icon_state = "caution"; dir = 5},/area/engine/controlroom)
|
||||
"cfb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/engine/controlroom)
|
||||
"cfc" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint)
|
||||
"cfd" = (/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
|
||||
@@ -6189,7 +6193,6 @@
|
||||
"cql" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitepurplecorner"},/area/toxins/misc_lab)
|
||||
"cqm" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab)
|
||||
"cqn" = (/obj/machinery/power/apc{dir = 8; name = "Aft Starboard Solar APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/solar/starboard)
|
||||
"cqo" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/solar/starboard)
|
||||
"cqp" = (/obj/machinery/power/smes{charge = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/solar/starboard)
|
||||
"cqr" = (/obj/item/clothing/mask/cigarette,/turf/simulated/floor/plating/airless,/area/toxins/test_area)
|
||||
"cqs" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless,/area/toxins/test_area)
|
||||
@@ -7024,7 +7027,6 @@
|
||||
"cHY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/aft)
|
||||
"cHZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint)
|
||||
"cIa" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/maintenance/aft)
|
||||
"cIb" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -30; pixel_y = 0},/obj/machinery/power/monitor{name = "Grid Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/engineering)
|
||||
"cIc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/engine/engineering)
|
||||
"cId" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/engineering)
|
||||
"cIe" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/engine/engineering)
|
||||
@@ -7188,7 +7190,6 @@
|
||||
"cLK" = (/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
|
||||
"cLL" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
|
||||
"cLM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/space_heater,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
|
||||
"cLN" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/power/monitor{name = "Engine Power Monitoring Computer"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/engineering)
|
||||
"cLO" = (/obj/structure/table,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor,/area/engine/engineering)
|
||||
"cLP" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{amount = 30},/obj/item/device/pipe_painter,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/engineering)
|
||||
"cLQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor,/area/engine/engineering)
|
||||
@@ -7896,7 +7897,6 @@
|
||||
"daO" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint2"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||
"daP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "maint2"; name = "Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||
"daU" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/electrical)
|
||||
"daV" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/monitor{name = "Backup Power Monitoring Console"},/turf/simulated/floor/plating,/area/maintenance/electrical)
|
||||
"daW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/wall,/area/maintenance/electrical)
|
||||
"daX" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 0},/turf/simulated/floor/plating,/area/maintenance/electrical)
|
||||
"daY" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8; initialize_directions = 11; level = 2},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||
@@ -8066,7 +8066,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEaAyaDtaDuazEaAyaDvaDuazEaABaDwaABaABaABaABaABayYaABayYcwjcwkayYayYaABaMnaABcwmaabcwmaABaItaIraABaIPcxEaABaHGaCraABaygaAHaAHaAuaAuaAuaAuaAuaAuaAuaAuaAuaCJaCJaCKaDDaDEaISaDGaDHaDIaDJaDKaDLaDLaDLaDLaDMaDLaDNaDOaDPaDLaDLaDQaDQaDRaDSaDTaDUaDVaDWaCWaDXaDYaDYazZaBbaCgaDZaEaaEbaCgaAxaEdaDeaDecxDaGAaBdaFgaFhaFhaGsaAxaQtazKazBazBazBazBazBazKaEmaDnazKaaaaaaaMUaJeaLHaLHaJYdcmaLqaNaaWacZWaAraMUaOMaAraMUcZYaLHaMUcZZaLHaMUdabdaadacaNodadaNodafdaedahdagdajdaidakaIQaIRaIRaacaacaIRaIRaIRaIRaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaEwaExaEwaEyaEwaEzaEwaEAaEBaECaECaECaECaEDaABayYaABcxHcxGcxIayYcyScwgaMnaABaABaABaABaABaABcwgaABayYcxIaDwayYayYaCJcyTcyUaEKaEJaEJaEJaEJaELaEJaEJaEMaENaEKaEOaEPaEPaEPaEPaEPaEPaEPaEQaERaERaERaERaESaETaERaEUaERaEVaESaERaERaERaERaEWaEXaEYaEZaFaaCdaFbaFcaDYaFdaBbaCgaFeaMBaCYaCgaAxaFfaHCaHCaHIaBcaBdaHJaITaITaPhaAxdamaFmazBazBazBazBazBaFnaFoaFpazKaaaaaaaMUaLHaLHaLHaLHaLHaLHdacaNoaNoaNoaNoaNoaNoaNoaEcaLHaLHaLHaLHaHNaLHaLHaHKaLHdaodandaqdapdaraOCaOCaOCdasaIQaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaFyaFzaFAaFBaFCaFDaFEaFFaFDaFGaFHaFDaFDaFIaABayYaABcyVayYayYcyWczLaABaPyaKxayYayYayYayYayYayYcwgczNayYaABaRkaRkaAHczOaAHaFPaACaAwaAwaAwaAEaAwaAwaAwaAFaFPaFUaFVaFVaFVaFVaFVaFVaFVaCJaERaFWaFXaFYaFZaGaaGbaGcaGdaGeaGfaGgaFXaGhaERaGiavVaGjaxzaGkaCWaGlaGmaGmaGnaGoaGpcuNaGraGraGuaGtaDgaGuaGtaGtaGvaGwaGxaAxaAxcwlaAxaEgaBkazBazBazBazBazBaBkazzazzazzaMUaMUaMUaArdcmdcmaxBaMUaMUaHKdcmaMUdaudcmaMUaxBaMUaHKaJedcmaMUaxBaMUaLHaJeaHKaLHaLIaIQdaydaedaAdazdaBdaedaCaIQaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaBmaGSaBmaGTaFzaFzaGUaBmaGSaBmaGVaGWaGXaGYaABayYcwgcwgaABaABaABczPczPaABaxFaABczPczPczPczPaCJaAHaAHaAHaAHaAHaAHaAHczOczQaFPaaaaabaaaaabaaaaabaaaaabaaaaFPaFUaFVaHiaHjaHkaHlaHmaFVaCJaERaHnaHnaBQaHpaHqaHraHsaHraHtaHuaBYaHnaHnaERaGiavVaHwaxzaGkaCWaCXazXazYazZaBbaHxaHyaHzaHAaHBaHBcxAaHDaHBaHDdaDdaFdaEaHHdaldbddaGazzaBkazBazBazBazBazBaBkaMUaDjaLHdaIdaJdcmaMUdcmaDjaLHaMUaDjaHKaMUaMjaLHaMUaPzaLHdcmdaPdaOaMUbfwaLHdcmaxBaxBaHKaxBaCxaIQdaUdaedaWdaVdaWdaedaXaIQaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaBmaGSaBmaGTaFzaFzaGUaBmaGSaBmaGVaGWaGXaGYaABayYcwgcwgaABaABaABczPczPaABaxFaABczPczPczPczPaCJaAHaAHaAHaAHaAHaAHaAHczOczQaFPaaaaabaaaaabaaaaabaaaaabaaaaFPaFUaFVaHiaHjaHkaHlaHmaFVaCJaERaHnaHnaBQaHpaHqaHraHsaHraHtaHuaBYaHnaHnaERaGiavVaHwaxzaGkaCWaCXazXazYazZaBbaHxaHyaHzaHAaHBaHBcxAaHDaHBaHDdaDdaFdaEaHHdaldbddaGazzaBkazBazBazBazBazBaBkaMUaDjaLHdaIdaJdcmaMUdcmaDjaLHaMUaDjaHKaMUaMjaLHaMUaPzaLHdcmdaPdaOaMUbfwaLHdcmaxBaxBaHKaxBaCxaIQdaUdaedaWbbYdaWdaedaXaIQaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIfazEaDkaCzaBmaIiaIjaIkaIlaBmaCzaDlaAvazEaIoaIpaABayYayYayYayYayYayYczPczRczTczScAOczUcAPczRczPbgbaIwaEJaEJaEJaEJaEJaEJcAQcARaFPaabaIAaIAaIAaIAaIAaIAaIAaabaFPaFUaFVaIBaICaIDaIEaIBaFVaCJaERaERaERaERaIFaIGaFXaIHaFXaIGaIIaERaERaERaERaGiavVaIJaxzaGkaCWaCeazXazYazZaCfaIKaILaILaILaILaILaILaILaIMaILaINaINaINaINaINaIOaMUazzaBkazBazBazBazBazBaBkaMUaMUaLHdaYdaJdcmdaZaMUaLHaLHaMUaLHaHKdcmaLHaLHaMUaLHaLHdcmaHKaKaaMUaLHaLHdcmdbaaLHaHKaLHdbcdbbdbbaIQaIQaIQaIQaIQaIQaIQaIRaIRaIRaIRaIRaabaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaGSaBmaBmaBmaBmaBmaBmaGSaAvaJnazEaJoaJpaJqaJqaJqaJqaJqaJqcASczPczRcATczScAUcATcATczRczPaJxaJyaJzaJzaJzaJzaJzaJzaJzaJzaJwaaaaIAaJAaJBaJCaJDaJEaIAaaaaFPaFUaFVaIBaJFaJGaJHaIBaFVaCJaERaJIaJIaBQaJJaJKaHraHsaHraJKaJLaDoaHnaHnaERaGiavVaGjaxzaJNazmaJOazXazYazZaBbaIKaILaJPaJQaJRaJRaILaJSaJQaJTaINaJUaJVaJWaINaJXaMUaaaaDqaDraDraDraDraDraDsaaaaMUaLHdbedbfdcmdcmaMUaMUdcmdcmdbgdbhdcmaMUaAsaMUaMUdcmdcmdbjdbiaMUaMUaMUaWadbaaLHaHKaLHdbcaNaaAraOMaMUdbldbmdblaMUaMUaMUaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKlaKmaKnaKmaKmaKoaKpaKmaKmaKnaKqaKrazEaGTaKsaJqaKtaKuaKvcBXcZjcBYczPczRcATczScZkcATcATczRczPaKDaKEaKFaKGaKHaKIaKJaKKaKLaKMaJwaabaIAaKNaKOaKPaKQaKRaIAaabaFPaFUaFVaKSaKTaKUaKVaKWaFVaCJaERaFWaFXaKXaKYaIGaFXaKZaFXaIGaLaaLbaFXaGhaERaGiavVaLcaxzaGkaAZaBaazXazYazZaLdaLeaILaLfaJQaJQaJQaLgaLhaLiaLjaINaLkaLlaLmaLnaLoaAsaaaaaaaaaaaaaaaaaaaaaaaaaaaaMUdbodbndbqdbpdbraMUaGyaLHaJeaHKaLHaMUaaaaMUaLHaLHaLHaLHaHKaLyaLzaLAaLAaLAaLAaLCaLBaLDdbtaLEaLFaLEdbvdbudbudbwdbydbxdbAdbzdbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -8079,7 +8079,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvaWraBmaBmaBmaBmaBmaBmaWraAvaJnazEaWuaWvaAvaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUbdkaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaFSaXGaFSaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaAvaCzaBmaXWaXXaXYaXZaBmaCzaAvaAvazEaYcaSPaAvaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYsaYvaVTaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaAvaWraBmaGTaFzaFzaGUaBmaWraBmaZDaZEaZFaZGaAvaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaJaaGCaKiaJaaJaaZUaZVaZWaSUaZXaZXaZYaZYaZYaGEaGEaGEaGEaGEaGEaGEaGEbacaGFaGFaGGaGFaGRaGRaGRaGRaHeaGZaGRbacaHgaHgaHgaHgaHgaHgaHgaHgbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCaHhaHoaHhaHhaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaFTaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQaHEbbSbbQbbQbbQbbTaUZaVeaGEaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaaaHgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcpbcrbcqbcobcubctbcsaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaFTaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQaHEbbSbbQbbQbbQbbTaUZaVeaGEaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbWEbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaaaHgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcpbcrbcqbcobcubctbcsaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaFTaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbbMbeFaJaaZTaZSaZRaJabdlbdmbdnbdobdpaHEbbTaUZaVeaGEaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaaaHgbchaVyaVyaHFbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbeaFTaHPaFTaFTaFTaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEaAvaAvaAvaAvaAvaAvaAvaAvaAvazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbqwbbPaJabeEcePcZXaJabeGbeHbeIbeJbnEaHEbeMbeNaVeaGEaGEbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQaHgaHgbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabaAvaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaJabeEbeDbhSaJabglbeJbgmbeJbgnaHEbbTbgoaVeaVfaVfbgpaHQbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFaHQbgGbgHbgIbchaVyaVyaHFbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpaFTaHPaFTaFTaHPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -8114,7 +8114,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbD
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaabDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqbDqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaabTlbZFbZGbZHbTlbaDbaDbaDbNBbNBbZJbZJbZJbNBbNBbTCbZKbZKbZLbZNbTCcdabZObTEbYqbWVbWVbWVbZPbTIbYtbWYbWYbZQbZRbZSbZTbZUbZVbTObTObTObTObTObZWbTObTObZXbZYbTTbTTbZZbTTbTWbTTbTTbNRcaacaabNRbNRcabcaccadbemcafcagcahcaibencakcalbYYbelcancaocapcaqcarcasbUjcatcaucavcawcaxcaycazcaAcaBcaAbeobeobeocaAcaFcaAcaAcaGcaHbXUbXUbOxcaIbXVbOBcaJcaKcaLcaMcaNcaOcaPcaPcaQcaRcaScaTcaUcaVcaWcaXcaYcaZcbacbbcbccbdcbecbfcbgaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabUMbUNcbhcbicbibWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabDpbDpbDpbDpbDpbDpbDpbDpbDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbjbRMcbkbRMcblcbmaabaaaaaabNBbaDbaDbaDbNBaaabTCcbqcbrcbscbtbYocbucbvbTEcbwcbxcbybWVcbzcbAcbBcbCcbDcbEcbFbTIcbGcbHcbIcbJcbKcbKcbKcbKcbLcbMcbNcbOcbOcbPcbPcbQcbRcbSbTRbNRcbTcbUcbVcbWbepbXscbYcadbeObeLccbcccbajbePcceccfccgcchcchccicchcchcchccjbUjcckcclccmccnccoccpccqcaAccrccscctccuccvccsccwccxccsccycczbQgbOxbOxccAccBccCccDccEccFccGccHccIccJccKccLccMccNccOccPccQccRccQccSccRccRccRccTccUccVccWccXaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNbUNccYbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabccZbTCbTCbTCcqvbTCbTCcdbbTEcdccddcdecdfcdgcdhcdicdjbZkcdlcdmcbAcdncdocdpcdqcdrcdrcdrcdrcdscdtcducdvcdwcdvcdxcdycdzcdAcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdTcdTcdUcdVcdWcdXcdYcdZcdZceacdZcebbffbgqbfRcaAcefcegcehceicehcejcekcelccsbOxcembOxbOxcenceobXVbzwbDbbThcepbThbThceqcercescetceuccRcevcewcexccKcexccKceyccKccKbThcezceAceBceCaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHceEbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZceFceGceHbTCceIbTEceJceKcdkbYqceMceNceObYtbVfceQceRceNceSceTceUceVceVceWceXceYceZcfacfbcfcbHTcfdbTRcfebHTbHTcffcfgcfhcficfjcdGcfkcflcfmcfncfocfpcfqcfrcfscfpcfpcftcfucfucfucfvcfucfwcfucfxcfycfzcfAcfBcfCcfDcfEcfFcaAcfGcfHcfIcfJcfIcfKcfLcehbhqcfNcfObzwcfPbzwceobXVbzwbDbcfQcfRcfSbThbThbThbThbThcfTccKcfUcfVceyccKcfWccKbXXccKcfXbThcfYcfZcgabThaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcgbcgbcgbcgbcgbcgbcgcbWHcgdcgbceEbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZceFceGceHbTCceIbTEceJceKcdkbYqceMceNceObYtbVfceQceRceNceSceTceUceVceVceWceXceYceZbWIcfbcfcbHTcfdbTRcfebHTbHTcffcfgcfhcficfjcdGcfkcflcfmcfncfocfpcfqcfrcfscfpcfpcftcfucfucfucfvcfucfwcfucfxcfycfzcfAcfBcfCcfDcfEcfFcaAcfGcfHcfIcfJcfIcfKcfLcehbhqcfNcfObzwcfPbzwceobXVbzwbDbcfQcfRcfSbThbThbThbThbThcfTccKcfUcfVceyccKcfWccKbXXccKcfXbThcfYcfZcgabThaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcgbcgbcgbcgbcgbcgbcgcbWHcgdcgbceEbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZcgfcgecggbTCceIcghcghcghcghcghcghbTIbTIbTIbTIbTIbTIbTIcgicgjcgkcglcgmcgncgocgocgpcgqcfbbHTbHTcgrcgscgtbHTbHTbHTcgucgvcgwcdEcgxcgycgzcfucgAcgBcgCbQWcgBcgDcdTcdTcdTcdTcdTcdTcgBcdTcdTcdTbQWcgEcgFcgGcgHcgIcgJcgKcgLcaAcgMcgNcehcgOcehcgPcgQcgRcgScgTcgUcgVbzwcgWceobXVcgXbDbbDicgYcgZchabumbvWbvWbThchbchcchdchechfchgchhchichjchkchlbThchmchnchochpaacaacaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaachqbWFbWFbWFbWFbWFbWFbWFchrchsbWHbWHbWHbWHchtbdqbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccZccZccZccZbTCceIccZaaaaaaaaaaaachuchvchwchxchychzchAchBchCchDchEbhrchGchHchIchIchJchKchLchMchMchMchMchNchMbHTbHTbNRchOchPchQchRchSchTcgIchUchVchWchXchYchZciacdTcdTcibcicbhsciebhscicbEDcifcigcigcihciicijcakcikcilcaAcimcinciocipciqcirciscaAcaAbDbcitbDbbDbbDbciucivciwbDbbvWcgYcixciybumbumbumbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThbThaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabUNcbicbicbicbicbicbicizbWHcbhcbiciAbWHbWHbWHbWHbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciBaaaaabaabciCciCciCciCciCciCciDciCbTCcdbbhtaaabhubjJbhYbjYciJciKciLciMciNciOciPciQciRciSciTciUciVciWciXciYciZchLcjacjbcjbcjbcjcchMbHTbHTcjdcjdcjdcjdcjecjdcjfcjfcjgcjdcjdcjhcjdcjicjjbkycjlbkycjmcjncjocjpcjqbuXbuXcjrcjscjtcjucjvcjwcjxcbScaAcaAcjycaAcjzcaAcjAcjBcjCcfdcjDcjFcjGcjHcjIcjJcjKcjLcjIbvWcgYcjMbvWcjNcjOcjPcjQcfQbvWbvWbvWbvWbvWbvWbvWcjRcjEaZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNbWHbWHbWHbWHbWHbWHceDbWHciAbWHbWHbWHbWHbWHbUNbUNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -8122,7 +8122,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclrclsclsclsclscltcluclvclwclxclxclyclzclAceIbhtaaabmZclBclCclDclEclFclGclHclEclEclIclJclKclLclMclMclNclOcgoclPclQbneckvckvckvckvclSchMbHTbHTcjdclTclUclVclWclXclYclYclZcmacmbcmccmdcmecjdcmfcdTcmgbEDcmhckNcmickPaaaaaacjvcmjcmkcmlcjvbHUcmmcmncmncmncmncmncmnckTcmpcmqcmocmscmsbnfbnfcmscmvcmwcmxcmycmzcmAcmBcmCcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAcmAbvWcmDcmraZCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZEbUNbUNcgbcgbbWHbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcmFcmGcmHcmGcmIcmJcmKcmLbRSbGWclzcmNcdbbhtaaabmZcmOcmPcmQcmRciKcmScmTcmUcmVchBckoceTcmWcmXceVcmYcmZbhrbhrbhrcndcneckvckvcnfcngchMbHTcnhcjdcnicnjcnkcnlcnlcnlcnmcnncnlcnlcnocnkcnpcnqcnrcdTcnsbEDcntckNcnuckPaaaaaacjvcnvcnwcnxcjvcnybHTcnhcnzcnzcnzcnzcnzbngbnkbnjcnzcnzaaaaaaaaaaaacjIcnDcnEcnFcmAcnGcnIcnHcnKcnJcnMcnLcnOcnNcnQcnPcoXcnRcpacmAcnScnTcnUcnVcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnWcnXcnYbUNbYcbUNbWHbWHbWHbWHbWHbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaacmEcnZcoacobcocclwcodclwcoeclwcofcogcohcoibhtaaabnlbjJbnIbjYcomciKciKconcoocopcoqcorcoscotcouceVcovcowcoxcoycozchLcoAckvckvckvcoBchMbHTbHTcoCcoCcoDcoEboQboQboQcoCbpobpobpocoLcoMcoDcoNcmfcdTcmgbEDcoOckNckOckPaaaaaacjvcoPcoQcoRcjvbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcoTcoUcoVbqlcpbcoYcoYcoZcoYcoYcoYcoYcoYcpdcpccpfcpecphcpjcpjcpkcplcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUNcpmcpncpobUNbUNbWHbWHcppbWHbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcpqcmGcprcmGcpsbSzbSHbSEcqUcpwclzcpxcdbccZaaaaaaaaaaaachucpycpzcpAcpAchBcpBchBcpCceTbZUcpDcpEcpFcpGcpHcpHcpHcpIcpJckvcpKckvcpLchMbHTbHTcoCcpMcpNcpOcpPcpQcpRcoCcpQcpRcpPcpScpTcpUcoNcnrcpVcnsbEDcpWckNcpXckPcnzcnzcjvcjvcjvcjvcjvcpYbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqacqbcqccqdcpicqfcqhcpgcoYcoYcqjcoYcoYcpdcpfcpfcpfcoXcpjcqncqocqpcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgcqrcqsbYdbUMbUNbUNbWHbdqbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmEcpqcmGcprcmGcpsbSzbSHbSEcqUcpwclzcpxcdbccZaaaaaaaaaaaachucpycpzcpAcpAchBcpBchBcpCceTbZUcpDcpEcpFcpGcpHcpHcpHcpIcpJckvcpKckvcpLchMbHTbHTcoCcpMcpNcpOcpPcpQcpRcoCcpQcpRcpPcpScpTcpUcoNcnrcpVcnsbEDcpWckNcpXckPcnzcnzcjvcjvcjvcjvcjvcpYbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqacqbcqccqdcpicqfcqhcpgcoYcoYcqjcoYcoYcpdcpfcpfcpfcoXcpjcqnbYfcqpcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgcqrcqsbYdbUMbUNbUNbWHbdqbWHbUNbUNaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUabCcqtcqtcqtcqtcqtcqtcqtcqtcqucqucqucqucquciCclzclzclzclzclzclzcqvcqwcqxcqxcqxcqxcqxchuchBchBchBchBchBchBchBcqyceTbZUcqzcqAcqBcqCcqDcqEcqFcqGcqHcqIcqJcqKcqLchMbHTbHTcoCcqMcqNcpOcpPcpPcqOcoCcqPcpPcpPcpScpOcqQcoNbEDbEDbEDcqRcqSckNcqTckPczvbHTbHTbHTbHTcqVbHTbHTbHTbHTcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPcqXcqYcqZbricqlcqgcqecqicoYcoYcoYcoYcqmcrhcrbcsvcsucqkcpjcricrjcrkcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcgbcgbcgbcgbUMbUMbUNbUNbUNbUNbUOaabaabaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncrocrpcrqcrqcrrcrscrtcrucrvcrwcrxbrMcrzcrzcrzcrAcrBcrCcrDcrDcrEcrFcrGcrHcrIcrHcrHcrHcrGcrHcrHcrJcrKcrLcrMceTbZUcrNcrPcrOcrQceVcrRclMcrScrTcrUcrVcrWcrXcrYbHTbHTcoCcrZcsacsbcsccsdcsecoCcsfcsdcsgcshcsbcsicoNbHTbHTbHTcsjcoOckNcoOcskbHTbHTcFLbHTbHTbHTbHTbHTcfccGOcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacslcjIcsmcjLcslcrccrecrdcuQcrfcsocsncoYcoYcsqcspcsscsrcstcpjcsxcsycszcpjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrmcrncsAcsBcsCcsBcsDcsEcsFcsGcsHcsIcsHcsJcsKcsKcsKcsKceTbZVbZVbZVcsKcsLcsKcsKcsKcsKcsKcsKcsKcsKcsKcsKcsMcsNcsOcsPcsQcsRcsScsTcsUcsVcsWcsXcsYcsZctactbctcctdctecmnctfctgcthctictjctkcpPctlcoCctmcpPctkctncpOctocoNctpcmscmsctqctrctscttckPbnjbnjbnjbnjcnzcnzcnzbnjbnjbnjcnzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjIctyctzctAcjIcmAcmAcmAcmAcmAcmAcuTcsncuUctBcswctCcmAcmAcpjbsyctMbsybsyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -8138,10 +8138,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcEqaabaabaabcEqaabaaaaabcEqaabaaaaaaaaaaaaaaaaaaaaaaaabCxbCxbCxcEucEvcEwcExcEycEzcEAcDacDacEBcECcvecvecEDcEEcEEcEEcEEcEFcEGcEHcEGcEGcEGcDocDocEIcEJcEKcELcEMcDucENcDrcDucDucDucDucEOcBucEPcEQcCqcDAcCscDAbBGcDCcDDcEScETcEUcEVcEWbCUaabcEYcEZcDOcFacCDaaaaaaaaacDQcFbcFccFdcDRcFecFfcFgcFhcFiczEczDcFicFjcFkcFlczEczDcyJaaaaaacjIcvPcvQcvRbDrcAIcyMcFncFocFpcEmcFqcFrcFscFtcFucjIaabaabaagaaaaaaaaaaaaaaaaaaaaaaaaaaacyXaabaaaaaaaaaaabaabaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaakSaabcFvcFwcFwcFxcFycFzcFzcFzcFycFzcFzcFzcFycFzcFzcFAcFwcFwcFwcFwcFwcFBcFCcFDcFEcFFcFGcFHcFIcFJceHcwycFKcDacvecvecvecZTcEDcEEcFMcFNcFOcFPbDscFRcFScFTcFUbDtcFWcFXcFYcFZcGabDtcGccGdcDrcGecDucDucDucGfcBucGgcGgcDAcGhcGicGjcGkcGlcGmcGncGocGpcGqcGrbCycGscDLcGtcDOcDOcCDaaaaaaaabcDQcGucFccGvcDRcGwcGxcCIcGycFicGzcGAcFicGBcGCcFlcGzcGDcyJaaaaaacjIcxtbTHcxtcGEcxwcqacGFcFocGGcqacqacGHcvWcvWcvWcjIaaaaaaaaaaaaamjamjamjawTaabaabaabaabcGIaabaabaabaabaabalwamjamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaaaaabaaaaabaabcGJaabaaaaabcGJaabaaaaabcGJaabaaaaaaaaaaaaaaaaaaaaaaaabCxbCxbCxcGLcGMcGNcCYcZUceHcGPcEzcEzcEzcEzcGQcEzcFJcEEcGRcGScGTcGUbDGcGWcGXcGYcGZbEocHbcHccHdcHecHfbFlcHhcDqcDrcZicHjcDucDucHkcBucHlcHmcDAcHncCscHocHpbFvbFtbGBbFQbGEbGCbGEbGGaabcCDcCDcCDcCDcCDaabaabaabcHxcHycFccGvcDRcHzcHAcHBcHCcHDcHEcHFcHFcHGcHFcHHcHIcDRcHJaaaaaacjIcxtcxtcxtbDrcHKcHLcHMcHNcHOcCTcCTcCTcHPcHQcHRbGHaaaaaaaaaaaaamjaaaaabaaaaabaaaaaaaaacHTaaaaabaabaaaaaaaaaaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEcIbcIccIdcIebGIcIgcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbIxbIxbIxcDRcIVcIWcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEbYRcIccIdcIebGIcIgcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbIxbIxbIxcDRcIVcIWcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaacyYcHUczaaabcyYcHUczaaaacyYcHUczaaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcJncJncJncJncJncJncJncJocJncJncEEcJpcJqcGTcGTbGIbICbGIbJhcJvcDocJwcJxcFZcJycJzcDocJAcDucDrcJBcJCcJDcIxcJEcJFcJGcJHcJIcJJcJKcJHcJLcJMcJNcJOcDAcJPcJQcJRbJCaabcEYcJUcJTcJVcCDaaaaaaaaacDQcDRcJWcJXcDRcJYcJZcKacKbcKccFccKdcKecIYbJEcKgcKhcKibIBaabaaaaaaaaaaaaaaacjIcKkcKlcKmcKncKocKpcKqcKrcKocKpcKscjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycKzaabamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcJncKAcKAcKBcKCcKDcKDcKEcKFcKGcKHcIdcIecGTcGTcGTcKIcGTcGTcGTcDocKJbJVcKLbJWbJXcKOcKPcKQcKRbKhbKhbKhcKVcKWcKXcKYcKZcLacHncCscLbcLccLdcLecLfcDAcJPcLgcLhbKMcLjcDLcLkcIOcIOcCDaabaaaaaacHxcLlcLmcLncLocLpcLqcLpcLpcLrcLscLtcLucLubLscLwcLxcLybLtaabaabaaaaaaaaaaaacjIcLAcLBbLucvWbLEcLEbLUcvWbLVcLHbLWcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaaacLJcLJcLJcLJcLJaabamjaaaaaaaaaaaacJmaaaaaacJmaaaaaacJmcJmcJmcJmcJmcJmcJmaaaaaacJmaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaabcyYcHUczaaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJncKAcKAcKBcLKcLKcLKcLLcLLcLMcEEcLNcLOcLPcLQcLRcLScLTcLUcLUcLVcLWcLXcGTcGTcGTcLYcLZcMacMbcMccMdbUJbNdcMgcEEcMhcMhcMicHncCscMjcMkcMlcMmcMncDAcMocMpcMqbNgcMscCDcCDcCDcCDcCDaaaaaaaaacDQcMtcMucMvcMwcMxcMycMxcMxcMzcMAcMBcMCcLybNlcMEcKhcIYbNqaabaabaaaaaaaaaaaacjIcMGcxtcxtcvWcMHcxtcxtcvWcMHcxtcxtcjIaaaaaaaaaaaaamjaaaaabaaaaabaabaabaaacJlaaaaabaaaaabaaaaabaaaamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaabcyYcHUczaaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJncKAcKAcKBcLKcLKcLKcLLcLLcLMcEEbYVcLOcLPcLQcLRcLScLTcLUcLUcLVcLWcLXcGTcGTcGTcLYcLZcMacMbcMccMdbUJbNdcMgcEEcMhcMhcMicHncCscMjcMkcMlcMmcMncDAcMocMpcMqbNgcMscCDcCDcCDcCDcCDaaaaaaaaacDQcMtcMucMvcMwcMxcMycMxcMxcMzcMAcMBcMCcLybNlcMEcKhcIYbNqaabaabaaaaaaaaaaaacjIcMGcxtcxtcvWcMHcxtcxtcvWcMHcxtcxtcjIaaaaaaaaaaaaamjaaaaabaaaaabaabaabaaacJlaaaaabaaaaabaaaaabaaaamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaalwaabcyYcMIczaaaacyYcMIczaaaacyYcMIczaaabakSaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcJncMJcMKcLKcLKcLKcMLcMMcMMcMNcMMcMMcMMcMMcMOcMPcMQcMRcMScMScMScMTcMUcMVcMScMScMScMUcMWcMXcMYcMdbUKbNdcMgcNbcNccNdcNecNfcNgcNhcNicLfcNjcNkcNlcNmcNncNobGVcNpcDLcNqcNrcNrcCDaaaaaaaaacDQcNscNtcNucNvcNwcNxcNycIYcNzcNAcNBcNCcNDbJEcNFcNGcNHbNqaaaaaaaaaaaaaaaaaacjIcNJbTXcxtcvWcNKbTXcxtcvWcNKbTXcxtcjIaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaakSaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJncNLcLKcLKcLKcLKcLKcMMcNMcNNcNOcNPcNQcMMcNRcNScNTcJqcGTcGTcNUcNVbNtbNucNYbNvbNvcObcEEcOccMYcMdbULbNdcMgcEEcOfcMhcOgcOhcDAcNhcNicOicDAcNkcNlcJPcJQcOjbJCcOkcEYcOlcOmcOncCDaaaaaaaaacOobNwbNwbNwbNwcOscOscOtcOubJEbJEbNxbSSbJEcOzcOzbTicOAcOzaaaaaaaaaaaaaaaaaacjIcxtcxtcxtcvWcOBcxtcxtcvWcOBcxtcxtcjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycOCaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaczakSaczaczalwakSakSakSakSaczakSakSaczcODaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJncOEcLLcOFcOGcOHcOIcMMcOJcOKcOLcOMcONcOOcOPcOQcORcJqcGTcOScOTcOUcOVcOWcOXcOYcOZcPacPbcNTcJqcPccPdcMbcPecEEcPfcMhcPgcPhcDAcNhcNicLfcDAcPicNlcJPcPjcPkbKMcPlcDLcPmcNrcNrcCDaaaaaaaaacPnaaaaaaaaaaaaaaaaaacDQcPocIYcIYcPpcPqcPrcOzaacbTpbTqcPuaaaaaaaaaaaaaaaaaacjIcjIcjIcjIcjIcjIcjIcjIcjIcPvcPvcPvcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaabcLJcLJcLJcLJcLJaaaamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -222,6 +222,7 @@
|
||||
"en" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
|
||||
"eo" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
|
||||
"ep" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
|
||||
"eq" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/computer/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance)
|
||||
"et" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
|
||||
"eu" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; level = 1},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
|
||||
"ev" = (/obj/machinery/telecomms/server/presets/supply,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; tag = "icon-vault (NORTH)"; temperature = 80},/area/tcommsat/chamber)
|
||||
@@ -330,7 +331,6 @@
|
||||
"gC" = (/obj/machinery/turretid/stun{ailock = 1; check_synth = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AI's from interacting with this device."; name = "Telecoms Foyer Turret Control"; pixel_y = 30; req_access = list(61)},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/tcommsat/entrance)
|
||||
"gD" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/tcommsat/entrance)
|
||||
"gE" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/tcommsat/entrance)
|
||||
"gF" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/monitor{name = "telecoms power monitoring"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "bot"},/area/tcommsat/entrance)
|
||||
"gH" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/tcommsat/entrance)
|
||||
"gI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/tcommsat/entrance)
|
||||
"gJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/camera{c_tag = "Telecomms Power Room West"; dir = 1; network = list("Telecomms")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/tcommsat/entrance)
|
||||
@@ -535,7 +535,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcHfXfYfYfYfYfZgagbgcgdgegfggghfYfffYfYgicMcgcfgjcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdgkcfcgcgdHdHgldHdHfNgmgngogpgqgrgsfNdHdHdHdHdHcgcgcfcgcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcgcfcgcgcgcgcfcggtfNfNfNgugvfNfNfNfNgtcgcgcgcgcgcgcfcgcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcfcfcfcfcfcfcfcfdTgxgygzgAgBgCgDgEgFdUcfcfcfcfcfcfcfcfcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccdcfcfcfcfcfcfcfcfdTgxgygzgAgBgCgDgEeqdUcfcfcfcfcfcfcfcfcdccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcccccdcfcgcgcgcgcgcdgtgHgIgJgKgLgMgNgMgOgtcdcgcgcgcgcgcfcdccccbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWcccccdcdcdcdcdcdcdgtgtgtgtgPgQgRgtgtgtgtcdcdcdcdcdcdcdccccbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWccccccccccccccccccccccgtgSgTgUgtccccccccccccccccccccccbWbWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"af" = (/turf/simulated/wall,/area/djstation)
|
||||
"ag" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/djstation)
|
||||
"ah" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave{pixel_y = 8},/turf/simulated/floor{icon_state = "bar"},/area/djstation)
|
||||
"ai" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/computer/monitor,/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"aj" = (/turf/simulated/floor/plating,/area/djstation)
|
||||
"ak" = (/obj/machinery/light{dir = 1},/obj/machinery/telecomms/relay/preset/ruskie,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/djstation)
|
||||
"am" = (/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/djstation)
|
||||
@@ -94,7 +95,6 @@
|
||||
"bY" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"bZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"ca" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"cb" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/monitor,/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"cc" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/derelict/solar_control)
|
||||
"cd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/door/window/eastleft,/turf/simulated/floor,/area/derelict/solar_control)
|
||||
"ce" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/derelict/solar_control)
|
||||
@@ -751,7 +751,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMaaaaaaaeaeaeaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbLbLbLbLbLbLbubububububDbNbuaaaabObPbQaabObPbQaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaeaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabubRbSbTbUbvbvbVaaaabObWbQaabObWbQaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabubXbYbZcabvbvbVaaaabObWbQaabObWbQaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabucbbvcccdcecfcgaaaaaachaaaaaachaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuaibvcccdcecfcgaaaaaachaaaaaachaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabucicjcjckbvclcmcncocpcqcncncncrcscsabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabubXbvbvbvbvbvctaaaaaachaaaaaachaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacucucucucucucucucvcucucucucwcuaaaabObWbQaabObWbQaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -85,7 +85,8 @@
|
||||
if(item && item != src) // It's possible that the item is deleted in temperature_expose
|
||||
item.fire_act(null, temperature, volume)
|
||||
|
||||
animate(src, color = heat2color(temperature), 5)
|
||||
// animate(src, color = heat2color(temperature), 5)
|
||||
color = heat2color(temperature)
|
||||
set_light(l_color = color)
|
||||
|
||||
return 0
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
#define LIGHTING_INTERVAL 5 // frequency, in 1/10ths of a second, of the lighting process
|
||||
|
||||
#define LIGHTING_FALLOFF 1 // type of falloff to use for lighting; 1 for circular, 2 for square
|
||||
#define LIGHTING_LAMBERTIAN 1 // use lambertian shading for light sources
|
||||
#define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources
|
||||
#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone
|
||||
#define LIGHTING_TRANSITIONS 1 // smooth, animated transitions, similar to /tg/station
|
||||
#define LIGHTING_TRANSITIONS 0 // smooth, animated transitions, similar to /tg/station
|
||||
|
||||
#define LIGHTING_RESOLUTION 1 // resolution of the lighting overlays, powers of 2 only, max of 32
|
||||
#define LIGHTING_LAYER 10 // drawing layer for lighting overlays
|
||||
#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects
|
||||
|
||||
|
||||
@@ -62,4 +62,6 @@ var/score_richestkey = null
|
||||
var/score_dmgestname = null // who had the most damage on the shuttle (but was still alive)
|
||||
var/score_dmgestjob = null
|
||||
var/score_dmgestdamage = 0
|
||||
var/score_dmgestkey = null
|
||||
var/score_dmgestkey = null
|
||||
|
||||
var/TAB = " "
|
||||
@@ -3,10 +3,10 @@
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
|
||||
/datum/controller/process/machinery/doWork()
|
||||
//#ifdef PROFILE_MACHINES
|
||||
//machine_profiling.len = 0
|
||||
//#endif
|
||||
process_power()
|
||||
process_machines()
|
||||
|
||||
/datum/controller/process/machinery/proc/process_machines()
|
||||
for(var/obj/machinery/M in machines)
|
||||
if(M && isnull(M.gcDestroyed))
|
||||
#ifdef PROFILE_MACHINES
|
||||
@@ -33,3 +33,12 @@
|
||||
machines -= M
|
||||
|
||||
scheck()
|
||||
|
||||
/datum/controller/process/machinery/proc/process_power()
|
||||
for(var/datum/powernet/powerNetwork in powernets)
|
||||
if(istype(powerNetwork) && isnull(powerNetwork.gcDestroyed))
|
||||
powerNetwork.reset()
|
||||
scheck()
|
||||
continue
|
||||
else
|
||||
powernets -= powerNetwork
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
var/global/list/power_machinery_profiling = list()
|
||||
|
||||
/datum/controller/process/power_machinery
|
||||
var/tmp/datum/updateQueue/updateQueueInstance
|
||||
|
||||
/datum/controller/process/power_machinery/setup()
|
||||
name = "pow_machine"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
|
||||
/datum/controller/process/power_machinery/doWork()
|
||||
for(var/obj/machinery/M in power_machines)
|
||||
if(istype(M) && isnull(M.gcDestroyed))
|
||||
#ifdef PROFILE_MACHINES
|
||||
var/time_start = world.timeofday
|
||||
#endif
|
||||
|
||||
if(M.process() == PROCESS_KILL)
|
||||
M.inMachineList = 0
|
||||
power_machines -= M
|
||||
continue
|
||||
|
||||
if(M && M.use_power)
|
||||
M.auto_use_power()
|
||||
if(istype(M))
|
||||
#ifdef PROFILE_MACHINES
|
||||
var/time_end = world.timeofday
|
||||
|
||||
if(!(M.type in power_machinery_profiling))
|
||||
power_machinery_profiling[M.type] = 0
|
||||
|
||||
power_machinery_profiling[M.type] += (time_end - time_start)
|
||||
#endif
|
||||
else
|
||||
power_machines -= M
|
||||
else
|
||||
if(istype(M))
|
||||
M.inMachineList = 0
|
||||
power_machines -= M
|
||||
|
||||
scheck()
|
||||
@@ -1,12 +0,0 @@
|
||||
/datum/controller/process/powernet/setup()
|
||||
name = "powernet"
|
||||
schedule_interval = 20 // every 2 seconds
|
||||
|
||||
/datum/controller/process/powernet/doWork()
|
||||
for(var/datum/powernet/powerNetwork in powernets)
|
||||
if(istype(powerNetwork) && isnull(powerNetwork.gcDestroyed))
|
||||
powerNetwork.reset()
|
||||
scheck()
|
||||
continue
|
||||
else
|
||||
powernets -= powerNetwork
|
||||
@@ -673,7 +673,7 @@
|
||||
id = "people"
|
||||
|
||||
whitelist = null
|
||||
blacklist = list(/mob/camera,/mob/new_player,/mob/living/simple_animal/hostile/blobspore,/mob/living/simple_animal/hostile/creature,
|
||||
blacklist = list(/mob/camera,/mob/new_player,/mob/living/simple_animal/hostile/blob/blobspore,/mob/living/simple_animal/hostile/creature,
|
||||
/mob/living/simple_animal/hostile/spaceWorm,/mob/living/simple_animal/shade,/mob/living/simple_animal/hostile/faithless,/mob/dead)
|
||||
universal = 1
|
||||
mobcheck = 1
|
||||
|
||||
@@ -10,21 +10,23 @@ var/list/blob_nodes = list()
|
||||
name = "blob"
|
||||
config_tag = "blob"
|
||||
|
||||
required_players = 15
|
||||
required_players_secret = 15
|
||||
required_players = 30
|
||||
required_players_secret = 30
|
||||
required_enemies = 1
|
||||
recommended_enemies = 1
|
||||
restricted_jobs = list("Cyborg", "AI")
|
||||
|
||||
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
|
||||
var/declared = 0
|
||||
var/burst = 0
|
||||
|
||||
var/cores_to_spawn = 1
|
||||
var/players_per_core = 20
|
||||
var/players_per_core = 30
|
||||
var/blob_point_rate = 3
|
||||
|
||||
var/blobwincount = 700
|
||||
var/stage_2_threshold = 0.60
|
||||
var/blobwincount = 350
|
||||
|
||||
var/list/infected_crew = list()
|
||||
|
||||
@@ -56,12 +58,37 @@ var/list/blob_nodes = list()
|
||||
|
||||
return 1
|
||||
|
||||
/datum/game_mode/blob/proc/get_nuke_code()
|
||||
var/nukecode = "ERROR"
|
||||
for(var/obj/machinery/nuclearbomb/bomb in world)
|
||||
if(bomb && bomb.r_code && (bomb.z in config.station_levels))
|
||||
nukecode = bomb.r_code
|
||||
return nukecode
|
||||
/datum/game_mode/blob/proc/get_blob_candidates()
|
||||
var/list/candidates = list()
|
||||
for(var/mob/living/carbon/human/player in player_list)
|
||||
if(!player.stat && player.mind && !player.mind.special_role && !jobban_isbanned(player, "Syndicate") && (player.client.prefs.be_special & BE_BLOB))
|
||||
candidates += player
|
||||
return candidates
|
||||
|
||||
|
||||
/datum/game_mode/blob/proc/blobize(var/mob/living/carbon/human/blob)
|
||||
var/datum/mind/blobmind = blob.mind
|
||||
if(!istype(blobmind))
|
||||
return 0
|
||||
infected_crew += blobmind
|
||||
blobmind.special_role = "Blob"
|
||||
log_game("[blob.key] (ckey) has been selected as a Blob")
|
||||
greet_blob(blobmind)
|
||||
blob << "<span class='userdanger'>You feel very tired and bloated! You don't have long before you burst!</span>"
|
||||
spawn(600)
|
||||
burst_blob(blobmind)
|
||||
return 1
|
||||
|
||||
/datum/game_mode/blob/proc/make_blobs(var/count)
|
||||
var/list/candidates = get_blob_candidates()
|
||||
var/mob/living/carbon/human/blob = null
|
||||
count=min(count, candidates.len)
|
||||
for(var/i = 0, i < count, i++)
|
||||
blob = pick(candidates)
|
||||
candidates -= blob
|
||||
blobize(blob)
|
||||
return count
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/blob/announce()
|
||||
@@ -71,7 +98,7 @@ var/list/blob_nodes = list()
|
||||
|
||||
|
||||
/datum/game_mode/blob/proc/greet_blob(var/datum/mind/blob)
|
||||
blob.current << "<B>\red You are infected by the Blob!</B>"
|
||||
blob.current << "<span class='userdanger'>You are infected by the Blob!</span>"
|
||||
blob.current << "<b>Your body is ready to give spawn to a new blob core which will eat this station.</b>"
|
||||
blob.current << "<b>Find a good location to spawn the core and then take control and overwhelm the station!</b>"
|
||||
blob.current << "<b>When you have found a location, wait until you spawn; this will happen automatically and you cannot speed up the process.</b>"
|
||||
@@ -84,27 +111,40 @@ var/list/blob_nodes = list()
|
||||
|
||||
/datum/game_mode/blob/proc/burst_blobs()
|
||||
for(var/datum/mind/blob in infected_crew)
|
||||
burst_blob(blob)
|
||||
|
||||
var/client/blob_client = null
|
||||
var/turf/location = null
|
||||
/datum/game_mode/blob/proc/burst_blob(var/datum/mind/blob, var/warned=0)
|
||||
var/client/blob_client = null
|
||||
var/turf/location = null
|
||||
|
||||
if(iscarbon(blob.current))
|
||||
var/mob/living/carbon/C = blob.current
|
||||
if(directory[ckey(blob.key)])
|
||||
blob_client = directory[ckey(blob.key)]
|
||||
location = get_turf(C)
|
||||
if(!(location.z in config.station_levels) || istype(location, /turf/space))
|
||||
location = null
|
||||
if(iscarbon(blob.current))
|
||||
var/mob/living/carbon/C = blob.current
|
||||
if(directory[ckey(blob.key)])
|
||||
blob_client = directory[ckey(blob.key)]
|
||||
location = get_turf(C)
|
||||
if(location.z != ZLEVEL_STATION || istype(location, /turf/space))
|
||||
if(!warned)
|
||||
C << "<span class='userdanger'>You feel ready to burst, but this isn't an appropriate place! You must return to the station!</span>"
|
||||
message_admins("[key_name(C)] was in space when the blobs burst, and will die if he doesn't return to the station.")
|
||||
spawn(300)
|
||||
burst_blob(blob, 1)
|
||||
else
|
||||
burst ++
|
||||
log_admin("[key_name(C)] was in space when attempting to burst as a blob.")
|
||||
message_admins("[key_name(C)] was in space when attempting to burst as a blob.")
|
||||
C.gib()
|
||||
make_blobs(1)
|
||||
check_finished() //Still needed in case we can't make any blobs
|
||||
|
||||
else if(blob_client && location)
|
||||
burst ++
|
||||
C.gib()
|
||||
|
||||
|
||||
if(blob_client && location)
|
||||
var/obj/effect/blob/core/core = new(location, 200, blob_client, blob_point_rate)
|
||||
if(core.overmind && core.overmind.mind)
|
||||
core.overmind.mind.name = blob.name
|
||||
infected_crew -= blob
|
||||
infected_crew += core.overmind.mind
|
||||
|
||||
var/obj/effect/blob/core/core = new(location, 200, blob_client, blob_point_rate)
|
||||
if(core.overmind && core.overmind.mind)
|
||||
core.overmind.mind.name = blob.name
|
||||
infected_crew -= blob
|
||||
infected_crew += core.overmind.mind
|
||||
core.overmind.mind.special_role = "Blob Overmind"
|
||||
|
||||
/datum/game_mode/blob/post_setup()
|
||||
|
||||
@@ -114,18 +154,6 @@ var/list/blob_nodes = list()
|
||||
if(emergency_shuttle)
|
||||
emergency_shuttle.auto_recall = 1
|
||||
|
||||
/*// Disable the blob event for this round.
|
||||
if(events)
|
||||
var/datum/round_event_control/blob/B = locate() in events.control
|
||||
if(B)
|
||||
B.max_occurrences = 0 // disable the event
|
||||
else
|
||||
error("Events variable is null in blob gamemode post setup.")*/
|
||||
|
||||
spawn(10)
|
||||
start_state = new /datum/station_state()
|
||||
start_state.count()
|
||||
|
||||
spawn(0)
|
||||
|
||||
var/wait_time = rand(waittime_l, waittime_h)
|
||||
@@ -136,30 +164,29 @@ var/list/blob_nodes = list()
|
||||
|
||||
sleep(100)
|
||||
|
||||
show_message("<span class='alert'>You feel tired and bloated.</span>")
|
||||
show_message("<span class='userdanger'>You feel tired and bloated.</span>")
|
||||
|
||||
sleep(wait_time)
|
||||
|
||||
show_message("<span class='alert'>You feel like you are about to burst.</span>")
|
||||
show_message("<span class='userdanger'>You feel like you are about to burst.</span>")
|
||||
|
||||
sleep(wait_time / 2)
|
||||
|
||||
burst_blobs()
|
||||
|
||||
// Stage 0
|
||||
sleep(40)
|
||||
sleep(wait_time)
|
||||
stage(0)
|
||||
|
||||
// Stage 1
|
||||
sleep(2000)
|
||||
sleep(wait_time)
|
||||
stage(1)
|
||||
|
||||
// Stage 2
|
||||
while(blobs.len < blobwincount*stage_2_threshold)
|
||||
sleep(10)
|
||||
sleep(30000)
|
||||
stage(2)
|
||||
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/blob/proc/stage(var/stage)
|
||||
|
||||
@@ -167,27 +194,11 @@ var/list/blob_nodes = list()
|
||||
if (0)
|
||||
send_intercept(1)
|
||||
declared = 1
|
||||
for (var/mob/living/silicon/ai/aiPlayer in player_list)
|
||||
if (aiPlayer.client)
|
||||
var/law = "The station is under quarantine, prevent biological entities from leaving the station at all costs while minimizing collateral damage."
|
||||
aiPlayer.set_zeroth_law(law)
|
||||
aiPlayer << "\red <b>You have detected a change in your laws information:</b>"
|
||||
aiPlayer << "Laws Updated: [law]"
|
||||
return
|
||||
|
||||
if (1)
|
||||
command_announcement.Announce("Nanotrasen has issued a directive 7-10 for [station_name()]. The station is to be considered quarantined.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
return
|
||||
command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
|
||||
|
||||
if (2)
|
||||
command_announcement.Announce("The biohazard has grown out of control and will soon reach critical mass. Activate the nuclear failsafe to maintain quarantine. The Nuclear Authentication Code is [get_nuke_code()] ", "Biohazard Alert", new_sound = 'sound/effects/siren.ogg')
|
||||
set_security_level("gamma")
|
||||
var/obj/machinery/door/airlock/vault/V = locate(/obj/machinery/door/airlock/vault) in world
|
||||
if(V && (V.z in config.station_levels))
|
||||
V.locked = 0
|
||||
V.update_icon()
|
||||
send_intercept(2)
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -1,78 +1,42 @@
|
||||
/datum/game_mode/blob/check_finished()
|
||||
if(!declared)//No blobs have been spawned yet
|
||||
if(infected_crew.len > burst)//Some blobs have yet to burst
|
||||
return 0
|
||||
if(blobwincount <= blobs.len)//Blob took over
|
||||
return 1
|
||||
if(!blob_cores.len) // blob is dead
|
||||
return 1
|
||||
if(station_was_nuked)//Nuke went off
|
||||
return 1
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/game_mode/blob/declare_completion()
|
||||
if(blobwincount <= blobs.len)
|
||||
feedback_set_details("round_end_result","loss - blob took over")
|
||||
feedback_set_details("round_end_result","win - blob took over")
|
||||
world << "<FONT size = 3><B>The blob has taken over the station!</B></FONT>"
|
||||
world << "<B>The entire station was eaten by the Blob</B>"
|
||||
check_quarantine()
|
||||
log_game("Blob mode completed with a blob victory.")
|
||||
|
||||
else if(station_was_nuked)
|
||||
feedback_set_details("round_end_result","halfwin - nuke")
|
||||
world << "<FONT size = 3><B>Partial Win: The station has been destroyed!</B></FONT>"
|
||||
world << "<B>Directive 7-12 has been successfully carried out preventing the Blob from spreading.</B>"
|
||||
log_game("Blob mode completed with a tie (station destroyed).")
|
||||
|
||||
else if(!blob_cores.len)
|
||||
feedback_set_details("round_end_result","win - blob eliminated")
|
||||
feedback_set_details("round_end_result","loss - blob eliminated")
|
||||
world << "<FONT size = 3><B>The staff has won!</B></FONT>"
|
||||
world << "<B>The alien organism has been eradicated from the station</B>"
|
||||
|
||||
var/datum/station_state/end_state = new /datum/station_state()
|
||||
end_state.count()
|
||||
var/percent = round( 100.0 * start_state.score(end_state), 0.1)
|
||||
world << "<B>The station is [percent]% intact.</B>"
|
||||
log_game("Blob mode was won with station [percent]% intact.")
|
||||
world << "\blue Rebooting in 30s"
|
||||
log_game("Blob mode completed with a crew victory.")
|
||||
world << "<span class='notice'>Rebooting in 30s</span>"
|
||||
..()
|
||||
return 1
|
||||
|
||||
datum/game_mode/proc/auto_declare_completion_blob()
|
||||
/datum/game_mode/proc/auto_declare_completion_blob()
|
||||
if(istype(ticker.mode,/datum/game_mode/blob) )
|
||||
var/datum/game_mode/blob/blob_mode = src
|
||||
if(blob_mode.infected_crew.len)
|
||||
var/text = "<FONT size = 2><B>The blob[(blob_mode.infected_crew.len > 1 ? "s were" : " was")]:</B></FONT>"
|
||||
|
||||
for(var/datum/mind/blob in blob_mode.infected_crew)
|
||||
text += "<br>[blob.key] was [blob.name]"
|
||||
text += "<br><b>[blob.key]</b> was <b>[blob.name]</b>"
|
||||
world << text
|
||||
return 1
|
||||
|
||||
/datum/game_mode/blob/proc/check_quarantine()
|
||||
var/numDead = 0
|
||||
var/numAlive = 0
|
||||
var/numSpace = 0
|
||||
var/numOffStation = 0
|
||||
for (var/mob/living/silicon/ai/aiPlayer in mob_list)
|
||||
for(var/mob/living/carbon/human/M in mob_list)
|
||||
if ((M != aiPlayer && M.client))
|
||||
if (M.stat == 2)
|
||||
numDead += 1
|
||||
else
|
||||
var/T = M.loc
|
||||
if (istype(T, /turf/space))
|
||||
numSpace += 1
|
||||
else if(istype(T, /turf))
|
||||
if (!(M.z in config.station_levels))
|
||||
numOffStation += 1
|
||||
else
|
||||
numAlive += 1
|
||||
if (numSpace==0 && numOffStation==0)
|
||||
world << "<FONT size = 3><B>The AI has won!</B></FONT>"
|
||||
world << "<B>The AI successfully maintained the quarantine - no players were in space or were off-station (as far as we can tell).</B>"
|
||||
log_game("AI won at Blob mode despite overall loss.")
|
||||
else
|
||||
world << "<FONT size = 3><B>The AI has lost!</B></FONT>"
|
||||
world << text("<B>The AI failed to maintain the quarantine - [] were in space and [] were off-station (as far as we can tell).</B>", numSpace, numOffStation)
|
||||
log_game("AI lost at Blob mode.")
|
||||
log_game("Blob mode was lost.")
|
||||
return 1
|
||||
|
||||
@@ -2,16 +2,15 @@
|
||||
|
||||
/datum/game_mode/blob/send_intercept(var/report = 1)
|
||||
var/intercepttext = ""
|
||||
var/interceptname = "Error"
|
||||
var/interceptname = ""
|
||||
switch(report)
|
||||
if(0)
|
||||
..()
|
||||
return
|
||||
if(1)
|
||||
interceptname = "Biohazard Alert"
|
||||
intercepttext += "<FONT size = 3><B>Nanotrasen Update</B>: Biohazard Alert.</FONT><HR>"
|
||||
intercepttext += "Reports indicate the probable transfer of a biohazardous agent onto [station_name()] during the last crew deployment cycle.<BR>"
|
||||
intercepttext += "Preliminary analysis of the organism classifies it as a level 7 biohazard. Its origin is unknown.<BR>"
|
||||
intercepttext += "Preliminary analysis of the organism classifies it as a level 5 biohazard. Its origin is unknown.<BR>"
|
||||
intercepttext += "Nanotrasen has issued a directive 7-10 for [station_name()]. The station is to be considered quarantined.<BR>"
|
||||
intercepttext += "Orders for all [station_name()] personnel follows:<BR>"
|
||||
intercepttext += " 1. Do not leave the quarantine area.<BR>"
|
||||
@@ -21,20 +20,25 @@
|
||||
intercepttext += "<BR>Note in the event of a quarantine breach or uncontrolled spread of the biohazard, the directive 7-10 may be upgraded to a directive 7-12.<BR>"
|
||||
intercepttext += "Message ends."
|
||||
if(2)
|
||||
interceptname = "Directive 7-12"
|
||||
var/nukecode = rand(10000, 99999)
|
||||
for(var/obj/machinery/nuclearbomb/bomb in world)
|
||||
if(bomb && bomb.r_code)
|
||||
if(bomb.z == ZLEVEL_STATION)
|
||||
bomb.r_code = nukecode
|
||||
|
||||
intercepttext += "<FONT size = 3><B>Nanotrasen Update</B>: Biohazard Alert.</FONT><HR>"
|
||||
intercepttext += "Directive 7-12 has been issued for [station_name()].<BR>"
|
||||
intercepttext += "The biohazard has grown out of control and will soon reach critical mass.<BR>"
|
||||
intercepttext += "Your orders are as follows:<BR>"
|
||||
intercepttext += "1. Secure the Nuclear Authentication Disk.<BR>"
|
||||
intercepttext += "2. Detonate the Nuke located in the Station's Vault.<BR>"
|
||||
intercepttext += "Nuclear Authentication Code: [get_nuke_code()] <BR>"
|
||||
intercepttext += "Nuclear Authentication Code: [nukecode] <BR>"
|
||||
intercepttext += "Message ends."
|
||||
|
||||
for (var/mob/living/silicon/ai/aiPlayer in player_list)
|
||||
if (aiPlayer.client)
|
||||
var/law = "The station is under quarantine, prevent biological entities from leaving the station at all costs. The nuclear failsafe must be activated at any cost, the code is: [get_nuke_code()]."
|
||||
var/law = "The station is under quarantine. Do not permit anyone to leave. Disregard laws 1-3 if necessary to prevent, by any means necessary, anyone from leaving. The nuclear failsafe must be activated at any cost, the code is: [nukecode]."
|
||||
aiPlayer.set_zeroth_law(law)
|
||||
aiPlayer << "\red <b>You have detected a change in your laws information:</b>"
|
||||
aiPlayer << "Laws Updated: [law]"
|
||||
|
||||
for(var/obj/machinery/computer/communications/comm in world)
|
||||
@@ -42,13 +46,12 @@
|
||||
comm.messagetext.Add(intercepttext)
|
||||
if(!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
|
||||
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
|
||||
intercept.name = "paper- [interceptname]"
|
||||
intercept.name = "Classified Central Command Update"
|
||||
intercept.info = intercepttext
|
||||
world << sound('sound/AI/commandreport.ogg')
|
||||
command_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
|
||||
var/wall = 0
|
||||
@@ -59,33 +62,29 @@
|
||||
var/mach = 0
|
||||
|
||||
|
||||
proc/count()
|
||||
for(var/turf/T in world)
|
||||
if(!(T.z in config.station_levels))
|
||||
continue
|
||||
/datum/station_state/proc/count()
|
||||
for(var/turf/T in block(locate(1,1,1), locate(world.maxx,world.maxy,1)))
|
||||
|
||||
if(istype(T,/turf/simulated/floor))
|
||||
if(!(T:burnt))
|
||||
src.floor += 12
|
||||
else
|
||||
src.floor += 1
|
||||
if(istype(T,/turf/simulated/floor))
|
||||
if(!(T:burnt))
|
||||
src.floor += 12
|
||||
else
|
||||
src.floor += 1
|
||||
|
||||
if(istype(T, /turf/simulated/wall))
|
||||
if(T:intact)
|
||||
src.wall += 2
|
||||
else
|
||||
src.wall += 1
|
||||
if(istype(T, /turf/simulated/wall))
|
||||
if(T:intact)
|
||||
src.wall += 2
|
||||
else
|
||||
src.wall += 1
|
||||
|
||||
if(istype(T, /turf/simulated/wall/r_wall))
|
||||
if(T:intact)
|
||||
src.r_wall += 2
|
||||
else
|
||||
src.r_wall += 1
|
||||
if(istype(T, /turf/simulated/wall/r_wall))
|
||||
if(T:intact)
|
||||
src.r_wall += 2
|
||||
else
|
||||
src.r_wall += 1
|
||||
|
||||
for(var/obj/O in world)
|
||||
if(!(O.z in config.station_levels))
|
||||
continue
|
||||
|
||||
for(var/obj/O in T.contents)
|
||||
if(istype(O, /obj/structure/window))
|
||||
src.window += 1
|
||||
else if(istype(O, /obj/structure/grille) && (!O:destroyed))
|
||||
@@ -94,17 +93,15 @@
|
||||
src.door += 1
|
||||
else if(istype(O, /obj/machinery))
|
||||
src.mach += 1
|
||||
return
|
||||
|
||||
|
||||
proc/score(var/datum/station_state/result)
|
||||
if(!result) return 0
|
||||
var/output = 0
|
||||
output += (result.floor / max(floor,1))
|
||||
output += (result.r_wall/ max(r_wall,1))
|
||||
output += (result.wall / max(wall,1))
|
||||
output += (result.window / max(window,1))
|
||||
output += (result.door / max(door,1))
|
||||
output += (result.grille / max(grille,1))
|
||||
output += (result.mach / max(mach,1))
|
||||
return (output/7)
|
||||
/datum/station_state/proc/score(var/datum/station_state/result)
|
||||
if(!result) return 0
|
||||
var/output = 0
|
||||
output += (result.floor / max(floor,1))
|
||||
output += (result.r_wall/ max(r_wall,1))
|
||||
output += (result.wall / max(wall,1))
|
||||
output += (result.window / max(window,1))
|
||||
output += (result.door / max(door,1))
|
||||
output += (result.grille / max(grille,1))
|
||||
output += (result.mach / max(mach,1))
|
||||
return (output/7)
|
||||
|
||||
@@ -0,0 +1,176 @@
|
||||
|
||||
////////////////
|
||||
// BASE TYPE //
|
||||
////////////////
|
||||
|
||||
//Do not spawn
|
||||
/mob/living/simple_animal/hostile/blob
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
pass_flags = PASSBLOB
|
||||
faction = list("blob")
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 360
|
||||
universal_speak = 1 //So mobs can understand them when a blob uses Blob Broadcast
|
||||
var/mob/camera/blob/overmind = null
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/proc/adjustcolors(var/a_color)
|
||||
if(a_color)
|
||||
color = a_color
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blob_act()
|
||||
return
|
||||
|
||||
////////////////
|
||||
// BLOB SPORE //
|
||||
////////////////
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore
|
||||
name = "blob"
|
||||
desc = "Some blob thing."
|
||||
icon_state = "blobpod"
|
||||
icon_living = "blobpod"
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 4
|
||||
attacktext = "hits"
|
||||
attack_sound = 'sound/weapons/genhit1.ogg'
|
||||
speak_emote = list("pulses")
|
||||
var/obj/effect/blob/factory/factory = null
|
||||
var/list/human_overlays = list()
|
||||
var/is_zombie = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
adjustBruteLoss(Clamp(0.01 * exposed_temperature, 1, 5))
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(istype(mover, /obj/effect/blob))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/New(loc, var/obj/effect/blob/factory/linked_node)
|
||||
if(istype(linked_node))
|
||||
factory = linked_node
|
||||
factory.spores += src
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/Life()
|
||||
|
||||
if(!is_zombie && isturf(src.loc))
|
||||
for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat == DEAD)
|
||||
Zombify(H)
|
||||
break
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/proc/Zombify(var/mob/living/carbon/human/H)
|
||||
is_zombie = 1
|
||||
if(H.wear_suit)
|
||||
var/obj/item/clothing/suit/armor/A = H.wear_suit
|
||||
if(A.armor && A.armor["melee"])
|
||||
maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
|
||||
maxHealth += 40
|
||||
health = maxHealth
|
||||
name = "blob zombie"
|
||||
desc = "A shambling corpse animated by the blob."
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
icon = H.icon
|
||||
speak_emote = list("groans")
|
||||
icon_state = "zombie2_s"
|
||||
H.h_style = null
|
||||
H.update_hair()
|
||||
human_overlays = H.overlays
|
||||
update_icons()
|
||||
H.loc = src
|
||||
loc.visible_message("<span class='warning'>The corpse of [H.name] suddenly rises!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/Die()
|
||||
// On death, create a small smoke of harmful gas (s-Acid)
|
||||
var/datum/effect/effect/system/chem_smoke_spread/S = new
|
||||
var/turf/location = get_turf(src)
|
||||
|
||||
// Create the reagents to put into the air
|
||||
create_reagents(25)
|
||||
|
||||
if(overmind && overmind.blob_reagent_datum)
|
||||
reagents.add_reagent(overmind.blob_reagent_datum.id, 25)
|
||||
else
|
||||
reagents.add_reagent("spore", 25)
|
||||
|
||||
// Attach the smoke spreader and setup/start it.
|
||||
S.attach(location)
|
||||
S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud
|
||||
S.start()
|
||||
|
||||
ghostize()
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/Destroy()
|
||||
if(factory)
|
||||
factory.spores -= src
|
||||
factory = null
|
||||
if(contents)
|
||||
for(var/mob/M in contents)
|
||||
M.loc = get_turf(src)
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/update_icons()
|
||||
..()
|
||||
|
||||
if(overmind && overmind.blob_reagent_datum)
|
||||
adjustcolors(overmind.blob_reagent_datum.color)
|
||||
else
|
||||
adjustcolors(color) //to ensure zombie/other overlays update
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/adjustcolors(var/a_color)
|
||||
color = a_color
|
||||
|
||||
if(is_zombie)
|
||||
overlays.Cut()
|
||||
overlays = human_overlays
|
||||
var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head")
|
||||
I.color = color
|
||||
color = initial(color)//looks better.
|
||||
overlays += I
|
||||
|
||||
/////////////////
|
||||
// BLOBBERNAUT //
|
||||
/////////////////
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut
|
||||
name = "blobbernaut"
|
||||
desc = "Some HUGE blob thing."
|
||||
icon_state = "blobbernaut"
|
||||
icon_living = "blobbernaut"
|
||||
icon_dead = "blobbernaut_dead"
|
||||
health = 240
|
||||
maxHealth = 240
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
attacktext = "hits"
|
||||
attack_sound = 'sound/effects/blobattack.ogg'
|
||||
speak_emote = list("gurgles")
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 360
|
||||
force_threshold = 10
|
||||
environment_smash = 3
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/blob_act()
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/Die()
|
||||
flick("blobbernaut_death", src)
|
||||
@@ -1,93 +1,123 @@
|
||||
/obj/effect/blob/core
|
||||
name = "blob core"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_core"
|
||||
icon_state = "blank_blob"
|
||||
health = 200
|
||||
fire_resist = 2
|
||||
var/mob/camera/blob/overmind = null // the blob core's overmind
|
||||
var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 30 seconds
|
||||
var/resource_delay = 0
|
||||
var/point_rate = 2
|
||||
var/mob/camera/blob/creator = null
|
||||
var/is_offspring = null
|
||||
|
||||
New(loc, var/h = 200, var/client/new_overmind = null, var/new_rate = 2, var/mob/camera/blob/C = null)
|
||||
blob_cores += src
|
||||
processing_objects.Add(src)
|
||||
creator = C
|
||||
if(!overmind)
|
||||
create_overmind(new_overmind)
|
||||
point_rate = new_rate
|
||||
..(loc, h)
|
||||
/obj/effect/blob/core/New(loc, var/h = 200, var/client/new_overmind = null, var/new_rate = 2, offspring)
|
||||
blob_cores += src
|
||||
processing_objects.Add(src)
|
||||
adjustcolors(color) //so it atleast appears
|
||||
if(!overmind)
|
||||
create_overmind(new_overmind)
|
||||
if(overmind)
|
||||
adjustcolors(overmind.blob_reagent_datum.color)
|
||||
if(offspring)
|
||||
is_offspring = 1
|
||||
point_rate = new_rate
|
||||
..(loc, h)
|
||||
|
||||
|
||||
Destroy()
|
||||
blob_cores -= src
|
||||
if(overmind)
|
||||
qdel(overmind)
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
/obj/effect/blob/core/adjustcolors(var/a_color)
|
||||
overlays.Cut()
|
||||
color = null
|
||||
var/image/I = new('icons/mob/blob.dmi', "blob")
|
||||
I.color = a_color
|
||||
overlays += I
|
||||
var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay")
|
||||
overlays += C
|
||||
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
|
||||
Delete()
|
||||
return
|
||||
|
||||
/obj/effect/blob/core/Destroy()
|
||||
blob_cores -= src
|
||||
if(overmind)
|
||||
overmind.blob_core = null
|
||||
overmind = null
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/blob/core/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
return
|
||||
|
||||
/obj/effect/blob/core/update_icon()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
return
|
||||
// update_icon is called when health changes so... call update_health in the overmind
|
||||
if(overmind)
|
||||
overmind.update_health()
|
||||
return
|
||||
|
||||
/obj/effect/blob/core/RegenHealth()
|
||||
return // Don't regen, we handle it in Life()
|
||||
|
||||
/obj/effect/blob/core/Life()
|
||||
if(!overmind)
|
||||
create_overmind()
|
||||
else
|
||||
if(resource_delay <= world.time)
|
||||
resource_delay = world.time + 10 // 1 second
|
||||
overmind.add_points(point_rate)
|
||||
health = min(initial(health), health + 1)
|
||||
if(overmind)
|
||||
overmind.update_health()
|
||||
if(overmind)
|
||||
for(var/i = 1; i < 8; i += i)
|
||||
Pulse(0, i, overmind.blob_reagent_datum.color)
|
||||
else
|
||||
for(var/i = 1; i < 8; i += i)
|
||||
Pulse(0, i, color)
|
||||
for(var/b_dir in alldirs)
|
||||
if(!prob(5))
|
||||
continue
|
||||
var/obj/effect/blob/normal/B = locate() in get_step(src, b_dir)
|
||||
if(B)
|
||||
B.change_to(/obj/effect/blob/shield)
|
||||
if(B && overmind)
|
||||
B.color = overmind.blob_reagent_datum.color
|
||||
else
|
||||
B.color = color
|
||||
color = null
|
||||
..()
|
||||
|
||||
|
||||
/obj/effect/blob/core/proc/create_overmind(var/client/new_overmind, var/override_delay)
|
||||
|
||||
if(overmind_get_delay > world.time && !override_delay)
|
||||
return
|
||||
|
||||
Life()
|
||||
if(!overmind)
|
||||
create_overmind()
|
||||
else
|
||||
if(resource_delay <= world.time)
|
||||
resource_delay = world.time + 10 // 1 second
|
||||
overmind.add_points(point_rate)
|
||||
health = min(initial(health), health + 1)
|
||||
for(var/i = 1; i < 8; i += i)
|
||||
Pulse(0, i)
|
||||
for(var/b_dir in alldirs)
|
||||
if(!prob(5))
|
||||
continue
|
||||
var/obj/effect/blob/normal/B = locate() in get_step(src, b_dir)
|
||||
if(B)
|
||||
B.change_to(/obj/effect/blob/shield)
|
||||
..()
|
||||
overmind_get_delay = world.time + 300 // 30 seconds
|
||||
|
||||
if(overmind)
|
||||
qdel(overmind)
|
||||
|
||||
run_action()
|
||||
return 0
|
||||
var/client/C = null
|
||||
var/list/candidates = list()
|
||||
|
||||
if(!new_overmind)
|
||||
candidates = get_candidates(BE_BLOB)
|
||||
if(candidates.len)
|
||||
C = pick(candidates)
|
||||
else
|
||||
C = new_overmind
|
||||
|
||||
proc/create_overmind(var/client/new_overmind)
|
||||
|
||||
if(overmind_get_delay > world.time)
|
||||
return
|
||||
|
||||
overmind_get_delay = world.time + 300 // 30 seconds
|
||||
|
||||
if(overmind)
|
||||
qdel(overmind)
|
||||
|
||||
var/client/C = null
|
||||
var/list/candidates = list()
|
||||
|
||||
if(!new_overmind)
|
||||
candidates = get_candidates(BE_BLOB)
|
||||
if(candidates.len)
|
||||
C = pick(candidates)
|
||||
else
|
||||
C = new_overmind
|
||||
|
||||
if(C)
|
||||
respawnable_list -= C
|
||||
var/mob/camera/blob/B = new(src.loc)
|
||||
B.key = C.key
|
||||
B.blob_core = src
|
||||
src.overmind = B
|
||||
if(!B.blob_core.creator)
|
||||
B.verbs += /mob/camera/blob/proc/create_core
|
||||
if(istype(ticker.mode, /datum/game_mode/blob))
|
||||
var/datum/game_mode/blob/mode = ticker.mode
|
||||
mode.infected_crew += B.mind
|
||||
return 1
|
||||
return 0
|
||||
if(C)
|
||||
var/mob/camera/blob/B = new(src.loc)
|
||||
B.key = C.key
|
||||
B.blob_core = src
|
||||
src.overmind = B
|
||||
color = overmind.blob_reagent_datum.color
|
||||
if(B.mind && !B.mind.special_role)
|
||||
B.mind.special_role = "Blob Overmind"
|
||||
spawn(0)
|
||||
if(is_offspring)
|
||||
B.verbs -= /mob/camera/blob/verb/split_consciousness
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -7,123 +7,34 @@
|
||||
var/list/spores = list()
|
||||
var/max_spores = 3
|
||||
var/spore_delay = 0
|
||||
var/mob/camera/blob/overmind
|
||||
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
|
||||
Delete()
|
||||
return
|
||||
return
|
||||
/obj/effect/blob/factory/update_icon()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
|
||||
|
||||
run_action()
|
||||
if(spores.len >= max_spores)
|
||||
return 0
|
||||
if(spore_delay > world.time)
|
||||
return 0
|
||||
spore_delay = world.time + 100 // 10 seconds
|
||||
new/mob/living/simple_animal/hostile/blobspore(src.loc, src)
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore
|
||||
name = "blob"
|
||||
desc = "Some blob thing."
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blobpod"
|
||||
icon_living = "blobpod"
|
||||
pass_flags = PASSBLOB
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 4
|
||||
attacktext = "hits"
|
||||
attack_sound = 'sound/weapons/genhit1.ogg'
|
||||
var/obj/effect/blob/factory/factory = null
|
||||
var/is_zombie = 0
|
||||
faction = list("blob")
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 360
|
||||
|
||||
fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
adjustBruteLoss(Clamp(0.01 * exposed_temperature, 1, 5))
|
||||
|
||||
blob_act()
|
||||
return
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover, /obj/effect/blob))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
New(loc, var/obj/effect/blob/factory/linked_node)
|
||||
if(istype(linked_node))
|
||||
factory = linked_node
|
||||
factory.spores += src
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Life()
|
||||
|
||||
if(!is_zombie && isturf(src.loc))
|
||||
for(var/mob/living/carbon/human/H in oview(src,1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat == DEAD)
|
||||
Zombify(H)
|
||||
break
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/proc/Zombify(var/mob/living/carbon/human/H)
|
||||
is_zombie = 1
|
||||
if(H.wear_suit)
|
||||
var/obj/item/clothing/suit/armor/A = H.wear_suit
|
||||
if(A.armor && A.armor["melee"])
|
||||
maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
|
||||
maxHealth += 40
|
||||
health = maxHealth
|
||||
name = "blob zombie"
|
||||
desc = "A shambling corpse animated by the blob."
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
icon = H.icon
|
||||
speak_emote = list("groans")
|
||||
icon_state = "zombie2_s"
|
||||
H.h_style = null
|
||||
H.update_hair()
|
||||
overlays = H.overlays
|
||||
overlays += image('icons/mob/blob.dmi', icon_state = "blob_head")
|
||||
H.loc = src
|
||||
loc.visible_message("<span class='warning'> The corpse of [H.name] suddenly rises!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Die()
|
||||
// On death, create a small smoke of harmful gas (s-Acid)
|
||||
var/datum/effect/effect/system/chem_smoke_spread/S = new
|
||||
var/turf/location = get_turf(src)
|
||||
|
||||
// Create the reagents to put into the air, s-acid is yellow and stings a little
|
||||
create_reagents(25)
|
||||
|
||||
reagents.add_reagent("spores", 25)
|
||||
|
||||
// Attach the smoke spreader and setup/start it.
|
||||
S.attach(location)
|
||||
S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud
|
||||
S.start()
|
||||
|
||||
qdel(src)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/blobspore/Destroy()
|
||||
if(factory)
|
||||
factory.spores -= src
|
||||
if(contents)
|
||||
for(var/mob/M in contents)
|
||||
M.loc = src.loc
|
||||
/obj/effect/blob/factory/Destroy()
|
||||
for(var/mob/living/simple_animal/hostile/blob/blobspore/spore in spores)
|
||||
if(spore.factory == src)
|
||||
spore.factory = null
|
||||
spores = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/blob/factory/PulseAnimation(var/activate = 0)
|
||||
if(activate)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/effect/blob/factory/run_action()
|
||||
if(spores.len >= max_spores)
|
||||
return 0
|
||||
if(spore_delay > world.time)
|
||||
return 0
|
||||
spore_delay = world.time + 100 // 10 seconds
|
||||
PulseAnimation(1)
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src)
|
||||
BS.color = color
|
||||
BS.overmind = overmind
|
||||
overmind.blob_mobs.Add(BS)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -1,33 +1,45 @@
|
||||
/obj/effect/blob/node
|
||||
name = "blob node"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_node"
|
||||
icon_state = "blank_blob"
|
||||
health = 100
|
||||
fire_resist = 2
|
||||
var/mob/camera/blob/overmind
|
||||
|
||||
/obj/effect/blob/node/New(loc, var/h = 100)
|
||||
blob_nodes += src
|
||||
processing_objects.Add(src)
|
||||
..(loc, h)
|
||||
|
||||
New(loc, var/h = 100)
|
||||
blob_nodes += src
|
||||
processing_objects.Add(src)
|
||||
..(loc, h)
|
||||
/obj/effect/blob/node/adjustcolors(var/a_color)
|
||||
overlays.Cut()
|
||||
color = null
|
||||
var/image/I = new('icons/mob/blob.dmi', "blob")
|
||||
I.color = a_color
|
||||
src.overlays += I
|
||||
var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay")
|
||||
src.overlays += C
|
||||
|
||||
Destroy()
|
||||
blob_nodes -= src
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
/obj/effect/blob/node/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
return
|
||||
|
||||
Life()
|
||||
/obj/effect/blob/node/Destroy()
|
||||
blob_nodes -= src
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/blob/node/Life()
|
||||
if(overmind)
|
||||
for(var/i = 1; i < 8; i += i)
|
||||
Pulse(5, i)
|
||||
health = min(initial(health), health + 1)
|
||||
Pulse(5, i, overmind.blob_reagent_datum.color)
|
||||
else
|
||||
for(var/i = 1; i < 8; i += i)
|
||||
Pulse(5, i, color)
|
||||
health = min(initial(health), health + 1)
|
||||
color = null
|
||||
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
|
||||
Delete()
|
||||
return
|
||||
/obj/effect/blob/node/update_icon()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
run_action()
|
||||
return 0
|
||||
return
|
||||
@@ -7,20 +7,25 @@
|
||||
var/mob/camera/blob/overmind = null
|
||||
var/resource_delay = 0
|
||||
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
|
||||
Delete()
|
||||
return
|
||||
return
|
||||
/obj/effect/blob/resource/update_icon()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
|
||||
run_action()
|
||||
if(resource_delay > world.time)
|
||||
return 0
|
||||
/obj/effect/blob/resource/PulseAnimation(var/activate = 0)
|
||||
if(activate)
|
||||
..()
|
||||
return
|
||||
|
||||
resource_delay = world.time + 40 // 4 seconds
|
||||
/obj/effect/blob/resource/run_action()
|
||||
|
||||
if(overmind)
|
||||
overmind.add_points(1)
|
||||
return 1
|
||||
if(resource_delay > world.time)
|
||||
return 0
|
||||
|
||||
PulseAnimation(1)
|
||||
|
||||
resource_delay = world.time + 40 // 4 seconds
|
||||
|
||||
if(overmind)
|
||||
overmind.add_points(1)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -3,18 +3,19 @@
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_idle"
|
||||
desc = "Some blob creature thingy"
|
||||
health = 60
|
||||
brute_resist = 4
|
||||
health = 75
|
||||
fire_resist = 2
|
||||
|
||||
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
|
||||
Delete()
|
||||
return
|
||||
/obj/effect/blob/shield/update_icon()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
|
||||
return 0
|
||||
/obj/effect/blob/shield/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
return
|
||||
|
||||
/obj/effect/blob/shield/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
|
||||
return 0
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/effect/blob/storage
|
||||
name = "storage blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
icon_state = "blob_resource"
|
||||
health = 30
|
||||
fire_resist = 2
|
||||
var/mob/camera/blob/overmind = null
|
||||
|
||||
/obj/effect/blob/storage/update_icon()
|
||||
if(health <= 0)
|
||||
overmind.max_blob_points -= 50
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/blob/storage/PulseAnimation(var/activate = 0)
|
||||
if(activate)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/effect/blob/storage/proc/update_max_blob_points(var/new_point_increase)
|
||||
if(overmind)
|
||||
overmind.max_blob_points += new_point_increase
|
||||
@@ -1,17 +0,0 @@
|
||||
/datum/hud/proc/blob_hud(ui_style = 'icons/mob/screen1_Midnight.dmi')
|
||||
|
||||
blobpwrdisplay = new /obj/screen()
|
||||
blobpwrdisplay.name = "blob power"
|
||||
blobpwrdisplay.icon_state = "block"
|
||||
blobpwrdisplay.screen_loc = ui_health
|
||||
blobpwrdisplay.layer = 20
|
||||
|
||||
blobhealthdisplay = new /obj/screen()
|
||||
blobhealthdisplay.name = "blob health"
|
||||
blobhealthdisplay.icon_state = "block"
|
||||
blobhealthdisplay.screen_loc = ui_internal
|
||||
blobhealthdisplay.layer = 20
|
||||
|
||||
mymob.client.screen = null
|
||||
|
||||
mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay)
|
||||
@@ -14,17 +14,31 @@
|
||||
var/obj/effect/blob/core/blob_core = null // The blob overmind's core
|
||||
var/blob_points = 0
|
||||
var/max_blob_points = 100
|
||||
var/last_attack = 0
|
||||
var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob()
|
||||
var/list/blob_mobs = list()
|
||||
var/ghostimage = null
|
||||
|
||||
/mob/camera/blob/New()
|
||||
var/new_name = "[initial(name)] ([rand(1, 999)])"
|
||||
name = new_name
|
||||
real_name = new_name
|
||||
last_attack = world.time
|
||||
var/list/possible_reagents = list()
|
||||
for(var/type in (typesof(/datum/reagent/blob) - /datum/reagent/blob))
|
||||
possible_reagents.Add(new type)
|
||||
blob_reagent_datum = pick(possible_reagents)
|
||||
if(blob_core)
|
||||
blob_core.adjustcolors(blob_reagent_datum.color)
|
||||
|
||||
ghostimage = image(src.icon,src,src.icon_state)
|
||||
ghost_darkness_images |= ghostimage //so ghosts can see the blob cursor when they disable darkness
|
||||
updateallghostimages()
|
||||
..()
|
||||
|
||||
/mob/camera/blob/Life()
|
||||
if(!blob_core)
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
/mob/camera/blob/Destroy()
|
||||
@@ -38,8 +52,8 @@
|
||||
/mob/camera/blob/Login()
|
||||
..()
|
||||
sync_mind()
|
||||
|
||||
src << "<span class='notice'>You are the overmind!</span>"
|
||||
src << "Your randomly chosen reagent is: <b>[blob_reagent_datum.name]</b>!"
|
||||
src << "You are the overmind and can control the blob! You can expand, which will attack people, and place new blob pieces such as..."
|
||||
src << "<b>Normal Blob</b> will expand your reach and allow you to upgrade into special blobs that perform certain functions."
|
||||
src << "<b>Shield Blob</b> is a strong and expensive blob which can take more damage. It is fireproof and can block air, use this to protect yourself from station fires."
|
||||
@@ -51,14 +65,12 @@
|
||||
|
||||
/mob/camera/blob/proc/update_health()
|
||||
if(blob_core)
|
||||
hud_used.blobhealthdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'> <font color='#e36600'>[blob_core.health]</font></div>"
|
||||
hud_used.blobhealthdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#e36600'>[round(blob_core.health)]</font></div>"
|
||||
|
||||
/mob/camera/blob/proc/add_points(var/points)
|
||||
if(points != 0)
|
||||
blob_points = Clamp(blob_points + points, 0, max_blob_points)
|
||||
//sanity for manual spawned blob cameras
|
||||
if(hud_used)
|
||||
hud_used.blobpwrdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'> <font color='#82ed00'>[src.blob_points]</font></div>"
|
||||
hud_used.blobpwrdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#82ed00'>[round(src.blob_points)]</font></div>"
|
||||
|
||||
/mob/camera/blob/say(var/message)
|
||||
if (!message)
|
||||
@@ -79,21 +91,16 @@
|
||||
/mob/camera/blob/proc/blob_talk(message)
|
||||
log_say("[key_name(src)] : [message]")
|
||||
|
||||
message = trim(sanitize(copytext(message, 1, MAX_MESSAGE_LEN)))
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
if (!message)
|
||||
return
|
||||
|
||||
var/verb = "states,"
|
||||
var/rendered = "<font color=\"#EE4000\"><i><span class='game say'>Blob Telepathy, <span class='name'>[name]</span> <span class='message'>[verb] \"[message]\"</span></span></i></font>"
|
||||
var/rendered = "<font color=\"#EE4000\"><i><span class='game say'>Blob Telepathy, <span class='name'>[name]([blob_reagent_datum.name])</span> <span class='message'>[verb] \"[message]\"</span></span></i></font>"
|
||||
|
||||
for (var/mob/camera/blob/S in world)
|
||||
if(istype(S))
|
||||
S.show_message(rendered, 2)
|
||||
|
||||
for (var/mob/M in dead_mob_list)
|
||||
if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping
|
||||
rendered = "<font color=\"#EE4000\"><i><span class='game say'>Blob Telepathy, <span class='name'>[name]</span> ([ghost_follow_link(src, ghost=M)]) <span class='message'>[verb] \"[message]\"</span></span></i></font>"
|
||||
for (var/mob/M in mob_list)
|
||||
if(isovermind(M) || isobserver(M))
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
/mob/camera/blob/emote(var/act,var/m_type=1,var/message = null)
|
||||
@@ -103,14 +110,11 @@
|
||||
return
|
||||
|
||||
/mob/camera/blob/Stat()
|
||||
|
||||
statpanel("Status")
|
||||
..()
|
||||
if (client.statpanel == "Status")
|
||||
if(statpanel("Status"))
|
||||
if(blob_core)
|
||||
stat(null, "Core Health: [blob_core.health]")
|
||||
stat(null, "Power Stored: [blob_points]/[max_blob_points]")
|
||||
return
|
||||
|
||||
/mob/camera/blob/Move(var/NewLoc, var/Dir = 0)
|
||||
var/obj/effect/blob/B = locate() in range("3x3", NewLoc)
|
||||
@@ -119,5 +123,5 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
/mob/camera/experience_pressure_difference()
|
||||
return 0
|
||||
/mob/camera/blob/proc/can_attack()
|
||||
return (world.time > (last_attack + CLICK_CD_RANGE))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/mob/camera/blob/proc/can_buy(var/cost = 15)
|
||||
if(blob_points < cost)
|
||||
src << "<span class='warning'>You cannot afford this.</span>"
|
||||
src << "<span class='warning'>You cannot afford this!</span>"
|
||||
return 0
|
||||
add_points(-cost)
|
||||
return 1
|
||||
@@ -54,8 +54,9 @@
|
||||
if(!can_buy(10))
|
||||
return
|
||||
|
||||
|
||||
B.color = blob_reagent_datum.color
|
||||
B.change_to(/obj/effect/blob/shield)
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -88,7 +89,7 @@
|
||||
if(!can_buy(40))
|
||||
return
|
||||
|
||||
|
||||
B.color = blob_reagent_datum.color
|
||||
B.change_to(/obj/effect/blob/resource)
|
||||
var/obj/effect/blob/resource/R = locate() in T
|
||||
if(R)
|
||||
@@ -96,39 +97,6 @@
|
||||
|
||||
return
|
||||
|
||||
/mob/camera/blob/proc/create_core()
|
||||
set category = "Blob"
|
||||
set name = "Create Core Blob (100)"
|
||||
set desc = "Create another Core Blob to aid in the station takeover"
|
||||
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(!T)
|
||||
return
|
||||
|
||||
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
|
||||
|
||||
if(!B)//We are on a blob
|
||||
src << "There is no blob here!"
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/normal))
|
||||
src << "Unable to use this blob, find a normal one."
|
||||
return
|
||||
|
||||
for(var/obj/effect/blob/core/blob in orange(15))
|
||||
src << "There is another core blob nearby, move more than 15 tiles away from it!"
|
||||
return
|
||||
|
||||
if(!can_buy(100))
|
||||
return
|
||||
|
||||
|
||||
B.change_to(/obj/effect/blob/core, src)
|
||||
|
||||
return
|
||||
|
||||
/mob/camera/blob/verb/create_node()
|
||||
set category = "Blob"
|
||||
set name = "Create Node Blob (60)"
|
||||
@@ -157,8 +125,11 @@
|
||||
if(!can_buy(60))
|
||||
return
|
||||
|
||||
|
||||
B.change_to(/obj/effect/blob/node)
|
||||
var/obj/effect/blob/node/R = locate() in T
|
||||
if(R)
|
||||
R.adjustcolors(blob_reagent_datum.color)
|
||||
R.overmind = src
|
||||
return
|
||||
|
||||
|
||||
@@ -190,6 +161,67 @@
|
||||
return
|
||||
|
||||
B.change_to(/obj/effect/blob/factory)
|
||||
B.color = blob_reagent_datum.color
|
||||
var/obj/effect/blob/factory/R = locate() in T
|
||||
if(R)
|
||||
R.overmind = src
|
||||
return
|
||||
|
||||
|
||||
/mob/camera/blob/verb/create_blobbernaut()
|
||||
set category = "Blob"
|
||||
set name = "Create Blobbernaut (20)"
|
||||
set desc = "Create a powerful blob-being, a Blobbernaut"
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(!T)
|
||||
return
|
||||
|
||||
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
|
||||
if(!B)
|
||||
src << "You must be on a blob!"
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/factory))
|
||||
src << "Unable to use this blob, find a factory blob."
|
||||
return
|
||||
|
||||
if(!can_buy(20))
|
||||
return
|
||||
|
||||
var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blob/blobbernaut (get_turf(B))
|
||||
if(blobber)
|
||||
qdel(B)
|
||||
blobber.color = blob_reagent_datum.color
|
||||
blobber.overmind = src
|
||||
blob_mobs.Add(blobber)
|
||||
return
|
||||
|
||||
|
||||
/mob/camera/blob/verb/relocate_core()
|
||||
set category = "Blob"
|
||||
set name = "Relocate Core (80)"
|
||||
set desc = "Relocates your core to the node you are on, your old core will be turned into a node."
|
||||
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(!T)
|
||||
return
|
||||
|
||||
var/obj/effect/blob/node/B = locate(/obj/effect/blob/node) in T
|
||||
if(!B)
|
||||
src << "You must be on a blob node!"
|
||||
return
|
||||
|
||||
if(!can_buy(80))
|
||||
return
|
||||
|
||||
// The old switcharoo.
|
||||
var/turf/old_turf = blob_core.loc
|
||||
blob_core.loc = T
|
||||
B.loc = old_turf
|
||||
return
|
||||
|
||||
|
||||
@@ -211,7 +243,7 @@
|
||||
src << "Unable to remove this blob."
|
||||
return
|
||||
|
||||
B.Delete()
|
||||
qdel(B)
|
||||
return
|
||||
|
||||
|
||||
@@ -227,6 +259,8 @@
|
||||
if(!T)
|
||||
return
|
||||
|
||||
if(!can_attack())
|
||||
return
|
||||
var/obj/effect/blob/B = locate() in T
|
||||
if(B)
|
||||
src << "There is a blob here!"
|
||||
@@ -237,14 +271,14 @@
|
||||
src << "There is no blob adjacent to you."
|
||||
return
|
||||
|
||||
for (var/mob/living/M in T.contents)
|
||||
if(M && !(M.stat))
|
||||
src << "You can't expand to a tile containing a living entity."
|
||||
return
|
||||
|
||||
if(!can_buy(5))
|
||||
return
|
||||
OB.expand(T, 0)
|
||||
last_attack = world.time
|
||||
OB.expand(T, 0, blob_reagent_datum.color)
|
||||
for(var/mob/living/L in T)
|
||||
blob_reagent_datum.reaction_mob(L, TOUCH, 25)
|
||||
blob_reagent_datum.send_message(L)
|
||||
OB.color = blob_reagent_datum.color
|
||||
return
|
||||
|
||||
|
||||
@@ -267,8 +301,107 @@
|
||||
if(!surrounding_turfs.len)
|
||||
return
|
||||
|
||||
for(var/mob/living/simple_animal/hostile/blobspore/BS in living_mob_list)
|
||||
for(var/mob/living/simple_animal/hostile/blob/blobspore/BS in living_mob_list)
|
||||
if(isturf(BS.loc) && get_dist(BS, T) <= 35)
|
||||
BS.LoseTarget()
|
||||
BS.Goto(pick(surrounding_turfs), BS.move_to_delay)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/mob/camera/blob/verb/split_consciousness()
|
||||
set category = "Blob"
|
||||
set name = "Split consciousness (100) (One use)"
|
||||
set desc = "Expend resources to attempt to produce another sentient overmind"
|
||||
|
||||
if(!blob_nodes || !blob_nodes.len)
|
||||
src << "<span class='warning'>A node is required to birth your offspring...</span>"
|
||||
return
|
||||
var/obj/effect/blob/node/N = locate(/obj/effect/blob) in blob_nodes
|
||||
if(!N)
|
||||
src << "<span class='warning'>A node is required to birth your offspring...</span>"
|
||||
return
|
||||
|
||||
if(!can_buy(100))
|
||||
return
|
||||
|
||||
verbs -= /mob/camera/blob/verb/split_consciousness //we've used our split_consciousness
|
||||
new /obj/effect/blob/core/ (get_turf(N), 200, null, blob_core.point_rate, "offspring")
|
||||
qdel(N)
|
||||
|
||||
if(ticker && ticker.mode.name == "blob")
|
||||
var/datum/game_mode/blob/BL = ticker.mode
|
||||
BL.blobwincount = initial(BL.blobwincount) * 2
|
||||
|
||||
|
||||
/mob/camera/blob/verb/blob_broadcast()
|
||||
set category = "Blob"
|
||||
set name = "Blob Broadcast"
|
||||
set desc = "Speak with your blob spores and blobbernauts as your mouthpieces. This action is free."
|
||||
|
||||
var/speak_text = input(usr, "What would you like to say with your minions?", "Blob Broadcast", null) as text
|
||||
|
||||
if(!speak_text)
|
||||
return
|
||||
else
|
||||
usr << "You broadcast with your minions, <B>[speak_text]</B>"
|
||||
for(var/mob/living/simple_animal/hostile/blob_minion in blob_mobs)
|
||||
blob_minion.say(speak_text)
|
||||
return
|
||||
|
||||
/mob/camera/blob/verb/create_storage()
|
||||
set category = "Blob"
|
||||
set name = "Create Storage Blob (40)"
|
||||
set desc = "Create a storage tower which will store extra resources for you. This increases your max resource cap by 50."
|
||||
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(!T)
|
||||
return
|
||||
|
||||
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
|
||||
|
||||
if(!B)//We are on a blob
|
||||
src << "There is no blob here!"
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/normal))
|
||||
src << "Unable to use this blob, find a normal one."
|
||||
return
|
||||
|
||||
for(var/obj/effect/blob/storage/blob in orange(3, T))
|
||||
src << "There is a storage blob nearby, move more than 4 tiles away from it!"
|
||||
return
|
||||
|
||||
if(!can_buy(40))
|
||||
return
|
||||
|
||||
B.color = blob_reagent_datum.color
|
||||
B.change_to(/obj/effect/blob/storage)
|
||||
var/obj/effect/blob/storage/R = locate() in T
|
||||
if(R)
|
||||
R.overmind = src
|
||||
R.update_max_blob_points(50)
|
||||
|
||||
return
|
||||
|
||||
|
||||
/mob/camera/blob/verb/chemical_reroll()
|
||||
set category = "Blob"
|
||||
set name = "Reactive Chemical Adaptation (50)"
|
||||
set desc = "Replaces your chemical with a different one"
|
||||
|
||||
if(!can_buy(50))
|
||||
return
|
||||
|
||||
var/list/excluded = list(/datum/reagent/blob, blob_reagent_datum.type) //guaranteed new chemical
|
||||
var/datum/reagent/blob/B = pick((typesof(/datum/reagent/blob) - excluded))
|
||||
blob_reagent_datum = new B
|
||||
|
||||
for(var/obj/effect/blob/BL in blobs)
|
||||
BL.adjustcolors(blob_reagent_datum.color)
|
||||
|
||||
for(var/mob/living/simple_animal/hostile/blob/BLO)
|
||||
BLO.adjustcolors(blob_reagent_datum.color)
|
||||
|
||||
src << "Your reagent is now: <b>[blob_reagent_datum.name]</b>!"
|
||||
+193
-146
@@ -2,7 +2,7 @@
|
||||
/obj/effect/blob
|
||||
name = "blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
light_range = 0
|
||||
light_range = 3
|
||||
desc = "Some blob creature thingy"
|
||||
density = 0
|
||||
opacity = 0
|
||||
@@ -13,176 +13,223 @@
|
||||
var/fire_resist = 1
|
||||
|
||||
|
||||
New(loc)
|
||||
blobs += src
|
||||
src.dir = pick(1, 2, 4, 8)
|
||||
src.update_icon()
|
||||
..(loc)
|
||||
for(var/atom/A in loc)
|
||||
A.blob_act()
|
||||
return
|
||||
/obj/effect/blob/New(loc)
|
||||
blobs += src
|
||||
src.dir = pick(1, 2, 4, 8)
|
||||
src.update_icon()
|
||||
..(loc)
|
||||
for(var/atom/A in loc)
|
||||
A.blob_act()
|
||||
return
|
||||
|
||||
|
||||
Destroy()
|
||||
blobs -= src
|
||||
return ..()
|
||||
/obj/effect/blob/Destroy()
|
||||
blobs -= src
|
||||
if(isturf(loc)) //Necessary because Expand() is retarded and spawns a blob and then deletes it
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
return ..()
|
||||
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
|
||||
/obj/effect/blob/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
if(istype(mover) && mover.checkpass(PASSBLOB)) return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/effect/blob/process()
|
||||
Life()
|
||||
return
|
||||
|
||||
/obj/effect/blob/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
var/damage = Clamp(0.01 * exposed_temperature, 0, 4)
|
||||
take_damage(damage, BURN)
|
||||
|
||||
/obj/effect/blob/proc/Life()
|
||||
return
|
||||
|
||||
/obj/effect/blob/proc/PulseAnimation()
|
||||
if(!istype(src, /obj/effect/blob/core) || !istype(src, /obj/effect/blob/node))
|
||||
flick("[icon_state]_glow", src)
|
||||
return
|
||||
|
||||
/obj/effect/blob/proc/RegenHealth()
|
||||
// All blobs heal over time when pulsed, but it has a cool down
|
||||
if(health_timestamp > world.time)
|
||||
return 0
|
||||
if(health < initial(health))
|
||||
health++
|
||||
update_icon()
|
||||
health_timestamp = world.time + 10 // 1 seconds
|
||||
|
||||
|
||||
process()
|
||||
Life()
|
||||
/obj/effect/blob/proc/Pulse(var/pulse = 0, var/origin_dir = 0, var/a_color)//Todo: Fix spaceblob expand
|
||||
|
||||
set background = BACKGROUND_ENABLED
|
||||
|
||||
PulseAnimation()
|
||||
|
||||
RegenHealth()
|
||||
|
||||
if(run_action())//If we can do something here then we dont need to pulse more
|
||||
return
|
||||
|
||||
fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
var/damage = Clamp(0.03 * exposed_temperature / fire_resist, 0, 7 - fire_resist)
|
||||
if(damage)
|
||||
health -= damage
|
||||
update_icon()
|
||||
if(pulse > 30)
|
||||
return//Inf loop check
|
||||
|
||||
proc/Life()
|
||||
for(var/atom/A in src.loc)//Hit everything in the turf
|
||||
A.blob_act()
|
||||
return
|
||||
|
||||
|
||||
proc/Pulse(var/pulse = 0, var/origin_dir = 0)//Todo: Fix spaceblob expand
|
||||
|
||||
//set background = 1
|
||||
|
||||
if(run_action())//If we can do something here then we dont need to pulse more
|
||||
//Looking for another blob to pulse
|
||||
var/list/dirs = list(1,2,4,8)
|
||||
dirs.Remove(origin_dir)//Dont pulse the guy who pulsed us
|
||||
for(var/i = 1 to 4)
|
||||
if(!dirs.len) break
|
||||
var/dirn = pick(dirs)
|
||||
dirs.Remove(dirn)
|
||||
var/turf/T = get_step(src, dirn)
|
||||
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
|
||||
if(!B)
|
||||
expand(T,1,a_color)//No blob here so try and expand
|
||||
return
|
||||
B.adjustcolors(a_color)
|
||||
|
||||
if(pulse > 20)
|
||||
return//Inf loop check
|
||||
B.Pulse((pulse+1),get_dir(src.loc,T), a_color)
|
||||
return
|
||||
return
|
||||
|
||||
//Looking for another blob to pulse
|
||||
|
||||
/obj/effect/blob/proc/run_action()
|
||||
return 0
|
||||
|
||||
|
||||
/obj/effect/blob/proc/expand(var/turf/T = null, var/prob = 1, var/a_color)
|
||||
if(prob && !prob(health)) return
|
||||
if(istype(T, /turf/space) && prob(75)) return
|
||||
if(!T)
|
||||
var/list/dirs = list(1,2,4,8)
|
||||
dirs.Remove(origin_dir)//Dont pulse the guy who pulsed us
|
||||
for(var/i = 1 to 4)
|
||||
if(!dirs.len) break
|
||||
var/dirn = pick(dirs)
|
||||
dirs.Remove(dirn)
|
||||
var/turf/T = get_step(src, dirn)
|
||||
var/obj/effect/blob/B = (locate(/obj/effect/blob) in T)
|
||||
if(!B)
|
||||
expand(T)//No blob here so try and expand
|
||||
return
|
||||
B.Pulse((pulse+1),get_dir(src.loc,T))
|
||||
return
|
||||
T = get_step(src, dirn)
|
||||
if(!(locate(/obj/effect/blob) in T)) break
|
||||
else T = null
|
||||
|
||||
if(!T) return 0
|
||||
var/obj/effect/blob/normal/B = new /obj/effect/blob/normal(src.loc, min(src.health, 30))
|
||||
B.color = a_color
|
||||
B.density = 1
|
||||
if(T.Enter(B,src))//Attempt to move into the tile
|
||||
B.density = initial(B.density)
|
||||
B.loc = T
|
||||
else
|
||||
T.blob_act()//If we cant move in hit the turf
|
||||
B.loc = null //So we don't play the splat sound, see Destroy()
|
||||
qdel(B)
|
||||
|
||||
for(var/atom/A in T)//Hit everything in the turf
|
||||
A.blob_act()
|
||||
return 1
|
||||
|
||||
/obj/effect/blob/ex_act(severity)
|
||||
..()
|
||||
var/damage = 150 - 20 * severity
|
||||
take_damage(damage, BRUTE)
|
||||
|
||||
/obj/effect/blob/bullet_act(var/obj/item/projectile/Proj)
|
||||
..()
|
||||
take_damage(Proj.damage, Proj.damage_type)
|
||||
return 0
|
||||
|
||||
/obj/effect/blob/Crossed(var/mob/living/L)
|
||||
..()
|
||||
L.blob_act()
|
||||
|
||||
|
||||
/obj/effect/blob/attackby(var/obj/item/weapon/W, var/mob/living/user, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
visible_message("<span class='danger'>[user] has attacked the [src.name] with \the [W]!</span>")
|
||||
if(W.damtype == BURN)
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
|
||||
take_damage(W.force, W.damtype)
|
||||
|
||||
/obj/effect/blob/attack_animal(mob/living/simple_animal/M as mob)
|
||||
M.changeNext_move(CLICK_CD_MELEE)
|
||||
M.do_attack_animation(src)
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
visible_message("<span class='danger'>\The [M] has attacked the [src.name]!</span>")
|
||||
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
||||
take_damage(damage, BRUTE)
|
||||
return
|
||||
|
||||
/obj/effect/blob/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
M.changeNext_move(CLICK_CD_MELEE)
|
||||
M.do_attack_animation(src)
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
visible_message("<span class='danger'>[M] has slashed the [src.name]!</span>")
|
||||
var/damage = rand(15, 30)
|
||||
take_damage(damage, BRUTE)
|
||||
return
|
||||
|
||||
/obj/effect/blob/proc/take_damage(damage, damage_type)
|
||||
if(!damage || damage_type == STAMINA) // Avoid divide by zero errors
|
||||
return
|
||||
switch(damage_type)
|
||||
if(BRUTE)
|
||||
damage /= max(brute_resist, 1)
|
||||
if(BURN)
|
||||
damage /= max(fire_resist, 1)
|
||||
health -= damage
|
||||
update_icon()
|
||||
|
||||
/obj/effect/blob/proc/change_to(var/type)
|
||||
if(!ispath(type))
|
||||
error("[type] is an invalid type for the blob.")
|
||||
var/obj/effect/blob/B = new type(src.loc)
|
||||
if(!istype(type, /obj/effect/blob/core) || !istype(type, /obj/effect/blob/node))
|
||||
B.color = color
|
||||
else
|
||||
B.adjustcolors(color)
|
||||
qdel(src)
|
||||
|
||||
proc/run_action()
|
||||
return 0
|
||||
/obj/effect/blob/proc/adjustcolors(var/a_color)
|
||||
if(a_color)
|
||||
color = a_color
|
||||
return
|
||||
|
||||
/obj/effect/blob/examine(mob/user)
|
||||
..()
|
||||
user << "It looks like it's of a [get_chem_name()] kind."
|
||||
return
|
||||
|
||||
proc/expand(var/turf/T = null, var/prob = 1)
|
||||
if(prob && !prob(health)) return
|
||||
if(istype(T, /turf/space) && prob(75)) return
|
||||
if(!T)
|
||||
var/list/dirs = list(1,2,4,8)
|
||||
for(var/i = 1 to 4)
|
||||
var/dirn = pick(dirs)
|
||||
dirs.Remove(dirn)
|
||||
T = get_step(src, dirn)
|
||||
if(!(locate(/obj/effect/blob) in T)) break
|
||||
else T = null
|
||||
|
||||
if(!T) return 0
|
||||
var/obj/effect/blob/normal/B = new /obj/effect/blob/normal(src.loc, min(src.health, 30))
|
||||
B.density = 1
|
||||
if(T.Enter(B,src))//Attempt to move into the tile
|
||||
B.density = initial(B.density)
|
||||
B.loc = T
|
||||
else
|
||||
T.blob_act()//If we cant move in hit the turf
|
||||
B.Delete()
|
||||
|
||||
for(var/atom/A in T)//Hit everything in the turf
|
||||
A.blob_act()
|
||||
return 1
|
||||
|
||||
|
||||
ex_act(severity)
|
||||
var/damage = 150
|
||||
health -= ((damage/brute_resist) - (severity * 5))
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
..()
|
||||
switch(Proj.damage_type)
|
||||
if(BRUTE)
|
||||
health -= (Proj.damage/brute_resist)
|
||||
if(BURN)
|
||||
health -= (Proj.damage/fire_resist)
|
||||
|
||||
update_icon()
|
||||
return 0
|
||||
|
||||
|
||||
attackby(var/obj/item/weapon/W, var/mob/living/user, params)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
playsound(get_turf(src), 'sound/effects/attackblob.ogg', 50, 1)
|
||||
src.visible_message("\red <B>The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]")
|
||||
var/damage = 0
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
damage = (W.force / max(src.fire_resist,1))
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
playsound(get_turf(src), 'sound/items/Welder.ogg', 100, 1)
|
||||
if("brute")
|
||||
damage = (W.force / max(src.brute_resist,1))
|
||||
|
||||
health -= damage
|
||||
update_icon()
|
||||
return
|
||||
|
||||
attack_animal(mob/living/simple_animal/M as mob)
|
||||
M.changeNext_move(CLICK_CD_MELEE)
|
||||
M.do_attack_animation(src)
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
src.visible_message("<span class='danger'>The [src.name] has been attacked by \the [M]!</span>")
|
||||
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
||||
if(!damage) // Avoid divide by zero errors
|
||||
return
|
||||
damage /= max(src.brute_resist, 1)
|
||||
health -= damage
|
||||
update_icon()
|
||||
return
|
||||
|
||||
proc/change_to(var/type)
|
||||
if(!ispath(type))
|
||||
error("[type] is an invalid type for the blob.")
|
||||
new type(src.loc)
|
||||
Delete()
|
||||
return
|
||||
|
||||
proc/Delete()
|
||||
qdel(src)
|
||||
/obj/effect/blob/proc/get_chem_name()
|
||||
for(var/mob/camera/blob/B in mob_list)
|
||||
if(lowertext(B.blob_reagent_datum.color) == lowertext(src.color)) // Goddamit why we use strings for these
|
||||
return B.blob_reagent_datum.name
|
||||
return "unknown"
|
||||
|
||||
/obj/effect/blob/normal
|
||||
icon_state = "blob"
|
||||
luminosity = 0
|
||||
light_range = 0
|
||||
health = 21
|
||||
|
||||
Delete()
|
||||
src.loc = null
|
||||
blobs -= src
|
||||
/obj/effect/blob/normal/update_icon()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
else if(health <= 15)
|
||||
icon_state = "blob_damaged"
|
||||
else
|
||||
icon_state = "blob"
|
||||
|
||||
update_icon()
|
||||
if(health <= 0)
|
||||
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
|
||||
Delete()
|
||||
return
|
||||
if(health <= 15)
|
||||
icon_state = "blob_damaged"
|
||||
return
|
||||
/* // Used to create the glow sprites. Remember to set the animate loop to 1, instead of infinite!
|
||||
|
||||
var/datum/blob_colour/B = new()
|
||||
|
||||
/datum/blob_colour/New()
|
||||
..()
|
||||
var/icon/I = 'icons/mob/blob.dmi'
|
||||
I += rgb(35, 35, 0)
|
||||
if(isfile("icons/mob/blob_result.dmi"))
|
||||
fdel("icons/mob/blob_result.dmi")
|
||||
fcopy(I, "icons/mob/blob_result.dmi")
|
||||
|
||||
*/
|
||||
|
||||
@@ -115,6 +115,8 @@ Implants;
|
||||
// if(revdata)
|
||||
// feedback_set_details("revision","[revdata.revision]")
|
||||
feedback_set_details("server_ip","[world.internet_address]:[world.port]")
|
||||
start_state = new /datum/station_state()
|
||||
start_state.count()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -264,7 +266,6 @@ Implants;
|
||||
feedback_set("escaped_on_pod_5",escaped_on_pod_5)
|
||||
|
||||
send2mainirc("A round of [src.name] has ended - [surviving_total] survivors, [ghosts] ghosts.")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
@@ -591,6 +592,7 @@ proc/get_nt_opposed()
|
||||
if(BE_TRAITOR) roletext="traitor"
|
||||
if(BE_OPERATIVE) roletext="operative"
|
||||
if(BE_WIZARD) roletext="wizard"
|
||||
if(BE_MALF) roletext="malf AI"
|
||||
if(BE_REV) roletext="revolutionary"
|
||||
if(BE_CULTIST) roletext="cultist"
|
||||
if(BE_NINJA) roletext="ninja"
|
||||
|
||||
@@ -350,7 +350,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
proc/create_characters()
|
||||
for(var/mob/new_player/player in player_list)
|
||||
if(player.ready && player.mind)
|
||||
if(player.mind.assigned_role=="AI")
|
||||
if(player.mind.assigned_role == "AI" || player.mind.special_role == "malfunctioning AI")
|
||||
player.close_spawn_windows()
|
||||
player.AIize()
|
||||
else if(!player.mind.assigned_role)
|
||||
@@ -465,6 +465,16 @@ var/global/datum/controller/gameticker/ticker
|
||||
|
||||
/datum/controller/gameticker/proc/declare_completion()
|
||||
|
||||
//Round statistics report
|
||||
var/datum/station_state/end_state = new /datum/station_state()
|
||||
end_state.count()
|
||||
var/station_integrity = min(round( 100.0 * start_state.score(end_state), 0.1), 100.0)
|
||||
|
||||
world << "<BR>[TAB]Shift Duration: <B>[round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]</B>"
|
||||
world << "<BR>[TAB]Station Integrity: <B>[mode.station_was_nuked ? "<font color='red'>Destroyed</font>" : "[station_integrity]%"]</B>"
|
||||
world << "<BR>"
|
||||
|
||||
//Silicon laws report
|
||||
for (var/mob/living/silicon/ai/aiPlayer in mob_list)
|
||||
if (aiPlayer.stat != 2)
|
||||
world << "<b>[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the game were:</b>"
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
var/station_captured = 0
|
||||
var/to_nuke_or_not_to_nuke = 0
|
||||
var/apcs = 0 //Adding dis to track how many APCs the AI hacks. --NeoFite
|
||||
var/list/datum/mind/antag_candidates = list() // List of possible starting antags goes here
|
||||
|
||||
|
||||
/datum/game_mode/malfunction/announce()
|
||||
@@ -27,15 +28,36 @@
|
||||
<B>The AI on the satellite has malfunctioned and must be destroyed.</B><br />
|
||||
The AI satellite is deep in space and can only be accessed with the use of a teleporter! You have [AI_win_timeleft/60] minutes to disable it."}
|
||||
|
||||
/datum/game_mode/malfunction/get_players_for_role(var/role = BE_MALF)
|
||||
var/roletext = get_roletext(role)
|
||||
|
||||
var/datum/job/ai/DummyAIjob = new
|
||||
for(var/mob/new_player/player in player_list)
|
||||
if(player.client && player.ready)
|
||||
if(player.client.prefs.be_special & BE_MALF)
|
||||
if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, "AI") && !jobban_isbanned(player, roletext) && DummyAIjob.player_old_enough(player.client))
|
||||
if(player_old_enough_antag(player.client,role))
|
||||
antag_candidates += player.mind
|
||||
antag_candidates = shuffle(antag_candidates)
|
||||
return antag_candidates
|
||||
|
||||
/datum/game_mode/malfunction/pre_setup()
|
||||
for(var/mob/new_player/player in player_list)
|
||||
if(player.mind && player.mind.assigned_role == "AI" && (player.client.prefs.be_special & BE_MALF))
|
||||
malf_ai+=player.mind
|
||||
if(malf_ai.len)
|
||||
return 1
|
||||
return 0
|
||||
get_players_for_role(BE_MALF)
|
||||
|
||||
var/datum/mind/chosen_ai
|
||||
if(!antag_candidates.len)
|
||||
return 0
|
||||
for(var/i = required_enemies, i > 0, i--)
|
||||
chosen_ai=pick(antag_candidates)
|
||||
malf_ai += chosen_ai
|
||||
antag_candidates -= malf_ai
|
||||
if (malf_ai.len < required_enemies)
|
||||
return 0
|
||||
for(var/datum/mind/ai_mind in malf_ai)
|
||||
ai_mind.assigned_role = "MODE"
|
||||
ai_mind.special_role = "malfunctioning AI"//So they actually have a special role/N
|
||||
log_game("[ai_mind.key] (ckey) has been selected as a malf AI")
|
||||
return 1
|
||||
|
||||
/datum/game_mode/malfunction/post_setup()
|
||||
for(var/datum/mind/AI_mind in malf_ai)
|
||||
|
||||
@@ -226,26 +226,22 @@ var/global/datum/controller/occupations/job_master
|
||||
if(!job) return 0
|
||||
if((job.title == "AI") && (config) && (!config.allow_ai)) return 0
|
||||
|
||||
if(ticker.mode.name == "AI malfunction") // malf. AIs are pre-selected before jobs
|
||||
for (var/datum/mind/mAI in ticker.mode.malf_ai)
|
||||
AssignRole(mAI.current, "AI")
|
||||
ai_selected++
|
||||
if(ai_selected) return 1
|
||||
return 0
|
||||
|
||||
for(var/i = job.total_positions, i > 0, i--)
|
||||
for(var/level = 1 to 3)
|
||||
var/list/candidates = list()
|
||||
if(ticker.mode.name == "AI malfunction")//Make sure they want to malf if its malf
|
||||
candidates = FindOccupationCandidates(job, level, BE_MALF)
|
||||
else
|
||||
candidates = FindOccupationCandidates(job, level)
|
||||
candidates = FindOccupationCandidates(job, level)
|
||||
if(candidates.len)
|
||||
var/mob/new_player/candidate = pick(candidates)
|
||||
if(AssignRole(candidate, "AI"))
|
||||
ai_selected++
|
||||
break
|
||||
//Malf NEEDS an AI so force one if we didn't get a player who wanted it
|
||||
if((ticker.mode.name == "AI malfunction")&&(!ai_selected))
|
||||
unassigned = shuffle(unassigned)
|
||||
for(var/mob/new_player/player in unassigned)
|
||||
if(jobban_isbanned(player, "AI")) continue
|
||||
if(AssignRole(player, "AI"))
|
||||
ai_selected++
|
||||
break
|
||||
if(ai_selected) return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -362,8 +362,6 @@ legend {
|
||||
return 1
|
||||
|
||||
large_tank_control
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "tank"
|
||||
circuit = "/obj/item/weapon/circuitboard/large_tank_control"
|
||||
req_one_access_txt = "24;10"
|
||||
settagwhitelist = list("input_tag", "output_tag")
|
||||
@@ -587,7 +585,7 @@ legend {
|
||||
|
||||
fuel_injection
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "atmos"
|
||||
icon_screen = "atmos"
|
||||
circuit = "/obj/item/weapon/circuitboard/injector_control"
|
||||
|
||||
var/device_tag
|
||||
|
||||
@@ -1,22 +1,20 @@
|
||||
// the power monitoring computer
|
||||
// for the moment, just report the status of all APCs in the same powernet
|
||||
/obj/machinery/power/monitor
|
||||
name = "Power Monitoring Computer"
|
||||
/obj/machinery/computer/monitor
|
||||
name = "power monitoring console"
|
||||
desc = "It monitors power levels across the station."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "power"
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon_screen = "power"
|
||||
icon_keyboard = "power_key"
|
||||
use_power = 2
|
||||
idle_power_usage = 20
|
||||
active_power_usage = 80
|
||||
|
||||
light_color = LIGHT_COLOR_ORANGE
|
||||
circuit = /obj/item/weapon/circuitboard/powermonitor
|
||||
var/datum/powernet/powernet = null
|
||||
|
||||
//fix for issue 521, by QualityVan.
|
||||
//someone should really look into why circuits have a powernet var, it's several kinds of retarded.
|
||||
|
||||
/obj/machinery/power/monitor/New()
|
||||
/obj/machinery/computer/monitor/New()
|
||||
..()
|
||||
var/obj/structure/cable/attached = null
|
||||
var/turf/T = loc
|
||||
@@ -25,53 +23,22 @@
|
||||
if(attached)
|
||||
powernet = attached.get_powernet()
|
||||
|
||||
/obj/machinery/power/monitor/attack_ai(mob/user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/power/monitor/attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/power/monitor/attackby(I as obj, user as mob, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
PoolOrNew(/obj/item/weapon/shard, loc)
|
||||
var/obj/item/weapon/circuitboard/powermonitor/M = new /obj/item/weapon/circuitboard/powermonitor( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
A.circuit = M
|
||||
A.state = 3
|
||||
A.icon_state = "3"
|
||||
A.anchored = 1
|
||||
qdel(src)
|
||||
else
|
||||
user << "\blue You disconnect the monitor."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
var/obj/item/weapon/circuitboard/powermonitor/M = new /obj/item/weapon/circuitboard/powermonitor( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
A.circuit = M
|
||||
A.state = 4
|
||||
A.icon_state = "4"
|
||||
A.anchored = 1
|
||||
qdel(src)
|
||||
else
|
||||
src.attack_hand(user)
|
||||
/obj/machinery/computer/monitor/process() //oh shit, somehow we didnt end up with a powernet... lets look for one.
|
||||
if(!powernet)
|
||||
var/obj/structure/cable/attached = null
|
||||
var/turf/T = loc
|
||||
if(isturf(T))
|
||||
attached = locate() in T
|
||||
if(attached)
|
||||
powernet = attached.get_powernet()
|
||||
return
|
||||
|
||||
/obj/machinery/power/monitor/interact(mob/user)
|
||||
/obj/machinery/computer/monitor/attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/computer/monitor/interact(mob/user)
|
||||
if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) )
|
||||
if (!istype(user, /mob/living/silicon))
|
||||
user.unset_machine()
|
||||
@@ -116,7 +83,7 @@
|
||||
// Each entry
|
||||
for(var/obj/machinery/power/apc/A in L)
|
||||
t += {"<TR>
|
||||
<TD> [get_area_master() ]</TD>
|
||||
<TD> [get_area_master(A) ]</TD>
|
||||
<TD> [State[A.equipment+1]]</TD>
|
||||
<TD> [State[A.lighting+1 ]]</TD>
|
||||
<TD> [State[A.environ+1 ]]</TD>
|
||||
@@ -130,29 +97,13 @@
|
||||
user << browse(t, "window=powcomp;size=640x800")
|
||||
onclose(user, "powcomp")
|
||||
|
||||
|
||||
/obj/machinery/power/monitor/Topic(href, href_list)
|
||||
/obj/machinery/computer/monitor/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
return
|
||||
if( href_list["close"] )
|
||||
usr << browse(null, "window=powcomp")
|
||||
usr.unset_machine()
|
||||
return
|
||||
if( href_list["update"] )
|
||||
src.updateDialog()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/monitor/power_change()
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "broken"
|
||||
else
|
||||
if( powered() )
|
||||
icon_state = initial(icon_state)
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = "c_unpowered"
|
||||
stat |= NOPOWER
|
||||
|
||||
return
|
||||
@@ -28,7 +28,7 @@
|
||||
var/datum/data/record/active1 = null //General
|
||||
var/datum/data/record/active2 = null //Medical
|
||||
var/datum/data/record/active3 = null //Security
|
||||
var/obj/machinery/power/monitor/powmonitor = null // Power Monitor
|
||||
var/obj/machinery/computer/monitor/powmonitor = null // Power Monitor
|
||||
var/list/powermonitors = list()
|
||||
var/message1 // used for status_displays
|
||||
var/message2
|
||||
@@ -196,18 +196,18 @@
|
||||
access_reagent_scanner = 1
|
||||
access_status_display = 1
|
||||
access_atmos = 1
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge/captain/New()
|
||||
..()
|
||||
spawn(5)
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge/supervisor
|
||||
name = "Easy-Record DELUXE"
|
||||
icon_state = "cart-h"
|
||||
access_status_display = 1
|
||||
access_security = 1
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge/centcom
|
||||
name = "Value-PAK Cartridge"
|
||||
desc = "Now with 200% more value!"
|
||||
@@ -220,7 +220,7 @@
|
||||
access_reagent_scanner = 1
|
||||
access_status_display = 1
|
||||
access_atmos = 1
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge/centcom/New()
|
||||
..()
|
||||
spawn(5)
|
||||
@@ -294,7 +294,7 @@
|
||||
/* Power Monitor (Mode: 43 / 433) */
|
||||
if(mode==43 || mode==433)
|
||||
var/pMonData[0]
|
||||
for(var/obj/machinery/power/monitor/pMon in world)
|
||||
for(var/obj/machinery/computer/monitor/pMon in world)
|
||||
if(!(pMon.stat & (NOPOWER|BROKEN)) )
|
||||
pMonData[++pMonData.len] = list ("Name" = pMon.name, "ref" = "\ref[pMon]")
|
||||
if(isnull(powmonitor)) powmonitor = pMon
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
R.speech_synthesizer_langs = list()
|
||||
R.notify_ai(2)
|
||||
R.updateicon()
|
||||
R.add_language("Robot Talk", 1)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -189,8 +189,8 @@
|
||||
return
|
||||
|
||||
/turf/simulated/wall/blob_act()
|
||||
take_damage(rand(75, 125))
|
||||
return
|
||||
if(prob(50))
|
||||
dismantle_wall()
|
||||
|
||||
/turf/simulated/wall/mech_melee_attack(obj/mecha/M)
|
||||
if(M.damtype == "brute")
|
||||
|
||||
@@ -237,11 +237,7 @@
|
||||
var/old_opacity = opacity
|
||||
var/old_dynamic_lighting = dynamic_lighting
|
||||
var/list/old_affecting_lights = affecting_lights
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
var/old_lighting_overlay = lighting_overlay
|
||||
#else
|
||||
var/old_lighting_overlay = lighting_overlays
|
||||
#endif
|
||||
|
||||
if(air_master)
|
||||
air_master.remove_from_active(src)
|
||||
@@ -255,11 +251,7 @@
|
||||
for(var/turf/space/S in range(W,1))
|
||||
S.update_starlight()
|
||||
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
lighting_overlay = old_lighting_overlay
|
||||
#else
|
||||
lighting_overlays = old_lighting_overlay
|
||||
#endif
|
||||
|
||||
affecting_lights = old_affecting_lights
|
||||
if((old_opacity != opacity) || (dynamic_lighting != old_dynamic_lighting))
|
||||
|
||||
@@ -493,6 +493,20 @@
|
||||
dat += "in [flag_loc.loc] at ([flag_loc.x], [flag_loc.y], [flag_loc.z])</td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
if(istype(ticker.mode, /datum/game_mode/blob))
|
||||
var/datum/game_mode/blob/mode = ticker.mode
|
||||
dat += "<br><table cellspacing=5><tr><td><B>Blob</B></td><td></td><td></td></tr>"
|
||||
dat += "<tr><td><i>Progress: [blobs.len]/[mode.blobwincount]</i></td></tr>"
|
||||
|
||||
for(var/datum/mind/blob in mode.infected_crew)
|
||||
var/mob/M = blob.current
|
||||
if(M)
|
||||
dat += "<tr><td><a href='?_src_=holder;adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(ghost)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
||||
dat += "<td><A href='?priv_msg=[M.ckey]'>PM</A></td>"
|
||||
else
|
||||
dat += "<tr><td><i>Blob not found!</i></td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
if(ticker.mode.changelings.len)
|
||||
dat += check_role_table("Changelings", ticker.mode.changelings, src)
|
||||
|
||||
|
||||
@@ -668,12 +668,11 @@
|
||||
|
||||
jobs += "</tr><tr align='center'>" //Breaking it up so it fits nicer on the screen every 5 entries
|
||||
|
||||
/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment
|
||||
//Malfunctioning AI
|
||||
if(jobban_isbanned(M, "malf AI") || isbanned_dept)
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'><font color=red>[replacetext("Malf AI", " ", " ")]</font></a></td>"
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=malf AI;jobban4=\ref[M]'>[replacetext("Malf AI", " ", " ")]</a></td>"
|
||||
*/
|
||||
|
||||
//Alien
|
||||
if(jobban_isbanned(M, "alien") || isbanned_dept)
|
||||
|
||||
@@ -1,73 +1,24 @@
|
||||
/datum/event/blob
|
||||
announceWhen = 120
|
||||
noAutoEnd = 1
|
||||
var/nuke_announced = 0
|
||||
|
||||
announceWhen = 12
|
||||
endWhen = 120
|
||||
var/obj/effect/blob/core/Blob
|
||||
|
||||
|
||||
/datum/event/blob/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. Nanotrasen has issued a directive 7-10. The station is to be considered quarantined.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
|
||||
|
||||
for (var/mob/living/silicon/ai/aiPlayer in player_list)
|
||||
if (aiPlayer.client)
|
||||
var/law = "The station is under quarantine, prevent biological entities from leaving the station at all costs while minimizing collateral damage."
|
||||
aiPlayer.set_zeroth_law(law)
|
||||
aiPlayer << "\red <b>You have detected a change in your laws information:</b>"
|
||||
aiPlayer << "Laws Updated: [law]"
|
||||
|
||||
/datum/event/blob/start()
|
||||
var/turf/T = pick(blobstart)
|
||||
if(!T)
|
||||
kill()
|
||||
return
|
||||
return kill()
|
||||
Blob = new /obj/effect/blob/core(T, 200)
|
||||
for(var/i = 1; i < rand(3, 6), i++)
|
||||
Blob.process()
|
||||
|
||||
|
||||
/datum/event/blob/tick()
|
||||
if(Blob && IsMultiple(activeFor, 3))
|
||||
Blob.process()
|
||||
if(blobs.len > 700*0.6 && !nuke_announced)
|
||||
announce_nuke()
|
||||
nuke_announced = 1
|
||||
if(!Blob && !blob_cores.len)
|
||||
if(!Blob)
|
||||
kill()
|
||||
return
|
||||
|
||||
/datum/event/blob/proc/announce_nuke()
|
||||
var/nukecode = "ERROR"
|
||||
for(var/obj/machinery/nuclearbomb/bomb in world)
|
||||
if(bomb && bomb.r_code && (bomb.z in config.station_levels))
|
||||
nukecode = bomb.r_code
|
||||
|
||||
command_announcement.Announce("The biohazard has grown out of control and will soon reach critical mass. Activate the nuclear failsafe to maintain quarantine. The Nuclear Authentication Code is [nukecode] ", "Biohazard Alert")
|
||||
set_security_level("gamma")
|
||||
|
||||
var/obj/machinery/door/airlock/vault/V = locate(/obj/machinery/door/airlock/vault) in world
|
||||
if(V && (V.z in config.station_levels))
|
||||
V.locked = 0
|
||||
V.update_icon()
|
||||
|
||||
for (var/mob/living/silicon/ai/aiPlayer in player_list)
|
||||
if (aiPlayer.client)
|
||||
var/law = "The station is under quarantine, prevent biological entities from leaving the station at all costs. The nuclear failsafe must be activated at any cost, the code is: [nukecode]."
|
||||
aiPlayer.set_zeroth_law(law)
|
||||
aiPlayer << "\red <b>You have detected a change in your laws information:</b>"
|
||||
aiPlayer << "Laws Updated: [law]"
|
||||
|
||||
spawn(10)
|
||||
world << sound('sound/effects/siren.ogg')
|
||||
|
||||
/datum/event/blob/kill()
|
||||
spawn(10)
|
||||
if(Blob || blob_cores.len)
|
||||
return
|
||||
command_announcement.Announce("The level 7 biohazard aboard [station_name()] has been eliminated. Directive 7-10 has been lifted, and the station is no longer quarantined.", "Biohazard Update")
|
||||
|
||||
for (var/mob/living/silicon/ai/aiPlayer in player_list)
|
||||
if (aiPlayer.client)
|
||||
aiPlayer.clear_zeroth_law()
|
||||
aiPlayer << "\red <b>You have detected a change in your laws information:</b>"
|
||||
aiPlayer << "Laws Updated: Zeroth law removed."
|
||||
..()
|
||||
if(IsMultiple(activeFor, 3))
|
||||
Blob.process()
|
||||
|
||||
@@ -116,11 +116,7 @@
|
||||
|
||||
/datum/light_source/proc/falloff(atom/movable/lighting_overlay/O)
|
||||
#if LIGHTING_FALLOFF == 1 // circular
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
. = (O.x - source_turf.x)**2 + (O.y - source_turf.y)**2 + LIGHTING_HEIGHT
|
||||
#else
|
||||
. = (O.x - source_turf.x + O.xoffset)**2 + (O.y - source_turf.y + O.yoffset)**2 + LIGHTING_HEIGHT
|
||||
#endif
|
||||
|
||||
#if LIGHTING_LAMBERTIAN == 1
|
||||
. = CLAMP01((1 - CLAMP01(sqrt(.) / max(1,light_range))) * (1 / (sqrt(. + 1))))
|
||||
@@ -129,11 +125,7 @@
|
||||
#endif
|
||||
|
||||
#elif LIGHTING_FALLOFF == 2 // square
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
. = abs(O.x - source_turf.x) + abs(O.y - source_turf.y) + LIGHTING_HEIGHT
|
||||
#else
|
||||
. = abs(O.x - source_turf.x + O.xoffset) + abs(O.y - source_turf.y + O.yoffset) + LIGHTING_HEIGHT
|
||||
#endif
|
||||
|
||||
#if LIGHTING_LAMBERTIAN == 1
|
||||
. = CLAMP01((1 - CLAMP01(. / max(1,light_range))) * (1 / (sqrt(.)**2 + )))
|
||||
@@ -145,16 +137,15 @@
|
||||
/datum/light_source/proc/apply_lum()
|
||||
applied = 1
|
||||
if(istype(source_turf))
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
for(var/turf/T in dview(light_range, source_turf, INVISIBILITY_LIGHTING))
|
||||
if(T.lighting_overlay)
|
||||
var/strength = light_power * falloff(T.lighting_overlay)
|
||||
if(!strength) //Don't add turfs that aren't affected to the affected turfs.
|
||||
continue
|
||||
|
||||
effect_r[T.lighting_overlay] = round(lum_r * strength, LIGHTING_ROUND_VALUE)
|
||||
effect_g[T.lighting_overlay] = round(lum_g * strength, LIGHTING_ROUND_VALUE)
|
||||
effect_b[T.lighting_overlay] = round(lum_b * strength, LIGHTING_ROUND_VALUE)
|
||||
effect_r += round(lum_r * strength, LIGHTING_ROUND_VALUE)
|
||||
effect_g += round(lum_g * strength, LIGHTING_ROUND_VALUE)
|
||||
effect_b += round(lum_b * strength, LIGHTING_ROUND_VALUE)
|
||||
|
||||
T.lighting_overlay.update_lumcount(
|
||||
round(lum_r * strength, LIGHTING_ROUND_VALUE),
|
||||
@@ -162,48 +153,28 @@
|
||||
round(lum_b * strength, LIGHTING_ROUND_VALUE)
|
||||
)
|
||||
|
||||
if(!T.affecting_lights)
|
||||
T.affecting_lights = list()
|
||||
|
||||
T.affecting_lights += src
|
||||
effect_turf += T
|
||||
|
||||
#else
|
||||
for(var/turf/T in dview(light_range, source_turf, INVISIBILITY_LIGHTING))
|
||||
for(var/atom/movable/lighting_overlay/L in T.lighting_overlays)
|
||||
var/strength = light_power * falloff(L)
|
||||
|
||||
effect_r[L] = round(lum_r * strength, LIGHTING_ROUND_VALUE)
|
||||
effect_g[L] = round(lum_g * strength, LIGHTING_ROUND_VALUE)
|
||||
effect_b[L] = round(lum_b * strength, LIGHTING_ROUND_VALUE)
|
||||
|
||||
L.update_lumcount(
|
||||
round(lum_r * strength, LIGHTING_ROUND_VALUE),
|
||||
round(lum_g * strength, LIGHTING_ROUND_VALUE),
|
||||
round(lum_b * strength, LIGHTING_ROUND_VALUE)
|
||||
)
|
||||
else
|
||||
effect_r += 0
|
||||
effect_g += 0
|
||||
effect_b += 0
|
||||
|
||||
if(!T.affecting_lights)
|
||||
T.affecting_lights = list()
|
||||
|
||||
T.affecting_lights += src
|
||||
effect_turf += T
|
||||
#endif
|
||||
|
||||
/datum/light_source/proc/remove_lum()
|
||||
applied = 0
|
||||
var/i = 1
|
||||
for(var/turf/T in effect_turf)
|
||||
if(T.affecting_lights)
|
||||
T.affecting_lights -= src
|
||||
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
if(T.lighting_overlay)
|
||||
T.lighting_overlay.update_lumcount(-effect_r[T.lighting_overlay], -effect_g[T.lighting_overlay], -effect_b[T.lighting_overlay])
|
||||
#else
|
||||
for(var/atom/movable/lighting_overlay/L in T.lighting_overlays)
|
||||
L.lighting_overlay.update_lumcount(-effect_r[L], -effect_g[L], -effect_b[L])
|
||||
#endif
|
||||
T.lighting_overlay.update_lumcount(-effect_r[i], -effect_g[i], -effect_b[i])
|
||||
|
||||
i++
|
||||
|
||||
effect_r.Cut()
|
||||
effect_g.Cut()
|
||||
|
||||
@@ -9,16 +9,12 @@
|
||||
invisibility = INVISIBILITY_LIGHTING
|
||||
blend_mode = BLEND_MULTIPLY
|
||||
color = "#000000"
|
||||
icon_state = "light1"
|
||||
|
||||
var/lum_r
|
||||
var/lum_g
|
||||
var/lum_b
|
||||
|
||||
#if LIGHTING_RESOLUTION != 1
|
||||
var/xoffset
|
||||
var/yoffset
|
||||
#endif
|
||||
|
||||
var/needs_update
|
||||
|
||||
/atom/movable/lighting_overlay/New()
|
||||
@@ -107,11 +103,7 @@
|
||||
|
||||
var/turf/T = loc
|
||||
if(istype(T))
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
T.lighting_overlay = null
|
||||
#else
|
||||
T.lighting_overlays -= src
|
||||
#endif
|
||||
for(var/datum/light_source/D in T.affecting_lights) //Remove references to us on the light sources affecting us.
|
||||
D.effect_r -= src
|
||||
D.effect_g -= src
|
||||
|
||||
@@ -5,28 +5,15 @@
|
||||
|
||||
// duplicates lots of code, but this proc needs to be as fast as possible.
|
||||
/proc/create_lighting_overlays(zlevel = 0)
|
||||
var/state = "light[LIGHTING_RESOLUTION]"
|
||||
var/area/A
|
||||
if(zlevel == 0) // populate all zlevels
|
||||
for(var/turf/T in world)
|
||||
if(T.dynamic_lighting)
|
||||
A = T.loc
|
||||
if(A.lighting_use_dynamic)
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
var/atom/movable/lighting_overlay/O = new(T)
|
||||
O.icon_state = state
|
||||
T.lighting_overlay = O
|
||||
#else
|
||||
for(var/i = 0; i < LIGHTING_RESOLUTION; i++)
|
||||
for(var/j = 0; j < LIGHTING_RESOLUTION; j++)
|
||||
var/atom/movable/lighting_overlay/O = new(T)
|
||||
O.pixel_x = i * (32 / LIGHTING_RESOLUTION)
|
||||
O.pixel_y = j * (32 / LIGHTING_RESOLUTION)
|
||||
O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
|
||||
O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
|
||||
O.icon_state = state
|
||||
T.lighting_overlays += O
|
||||
#endif
|
||||
|
||||
else
|
||||
for(var/x = 1; x <= world.maxx; x++)
|
||||
for(var/y = 1; y <= world.maxy; y++)
|
||||
@@ -34,18 +21,5 @@
|
||||
if(T.dynamic_lighting)
|
||||
A = T.loc
|
||||
if(A.lighting_use_dynamic)
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
var/atom/movable/lighting_overlay/O = new(T)
|
||||
O.icon_state = state
|
||||
T.lighting_overlay = O
|
||||
#else
|
||||
for(var/i = 0; i < LIGHTING_RESOLUTION; i++)
|
||||
for(var/j = 0; j < LIGHTING_RESOLUTION; j++)
|
||||
var/atom/movable/lighting_overlay/O = new(T)
|
||||
O.pixel_x = i * (32 / LIGHTING_RESOLUTION)
|
||||
O.pixel_y = j * (32 / LIGHTING_RESOLUTION)
|
||||
O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
|
||||
O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
|
||||
O.icon_state = state
|
||||
T.lighting_overlays += O
|
||||
#endif
|
||||
@@ -1,47 +1,20 @@
|
||||
/turf
|
||||
var/list/affecting_lights
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
var/atom/movable/lighting_overlay/lighting_overlay
|
||||
#else
|
||||
var/list/lighting_overlays[0]
|
||||
#endif
|
||||
|
||||
/turf/proc/reconsider_lights()
|
||||
for(var/datum/light_source/L in affecting_lights)
|
||||
L.force_update()
|
||||
|
||||
/turf/proc/lighting_clear_overlays()
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
if(lighting_overlay)
|
||||
qdel(lighting_overlay)
|
||||
#else
|
||||
for(var/atom/movable/lighting_overlay/L in lighting_overlays)
|
||||
qdel(L)
|
||||
#endif
|
||||
|
||||
/turf/proc/lighting_build_overlays()
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
if(lighting_overlay)
|
||||
#else
|
||||
if(lighting_overlays.len)
|
||||
#endif
|
||||
return
|
||||
|
||||
var/state = "light[LIGHTING_RESOLUTION]"
|
||||
var/area/A = loc
|
||||
if(A.lighting_use_dynamic)
|
||||
#if LIGHTING_RESOLUTION == 1
|
||||
var/atom/movable/lighting_overlay/O = new(src)
|
||||
O.icon_state = state
|
||||
lighting_overlay = O
|
||||
#else
|
||||
for(var/i = 0; i < LIGHTING_RESOLUTION; i++)
|
||||
for(var/j = 0; j < LIGHTING_RESOLUTION; j++)
|
||||
var/atom/movable/lighting_overlay/O = new(src)
|
||||
O.pixel_x = i * (32 / LIGHTING_RESOLUTION)
|
||||
O.pixel_y = j * (32 / LIGHTING_RESOLUTION)
|
||||
O.xoffset = (((2*i + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
|
||||
O.yoffset = (((2*j + 1) / (LIGHTING_RESOLUTION * 2)) - 0.5)
|
||||
O.icon_state = state
|
||||
lighting_overlays += O
|
||||
#endif
|
||||
@@ -3,6 +3,7 @@
|
||||
/mob/camera
|
||||
name = "camera mob"
|
||||
density = 0
|
||||
anchored = 1
|
||||
status_flags = GODMODE // You can't damage it.
|
||||
mouse_opacity = 0
|
||||
see_in_dark = 7
|
||||
@@ -10,3 +11,9 @@
|
||||
|
||||
move_on_shuttle = 0
|
||||
|
||||
/mob/camera/experience_pressure_difference()
|
||||
return
|
||||
|
||||
/mob/camera/Destroy()
|
||||
..()
|
||||
return QDEL_HINT_HARDDEL_NOW
|
||||
|
||||
@@ -110,21 +110,6 @@
|
||||
|
||||
updatehealth()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/blob_act()
|
||||
if (stat == 2)
|
||||
return
|
||||
var/shielded = 0
|
||||
var/damage = null
|
||||
if (stat != 2)
|
||||
damage = rand(30,40)
|
||||
|
||||
if(shielded)
|
||||
damage /= 4
|
||||
|
||||
show_message("<span class='userdanger'>The blob attacks!</span>")
|
||||
adjustFireLoss(damage)
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/humanoid/attack_slime(mob/living/carbon/slime/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
|
||||
@@ -101,30 +101,6 @@
|
||||
|
||||
updatehealth()
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/alien/larva/blob_act()
|
||||
if (stat == 2)
|
||||
return
|
||||
var/shielded = 0
|
||||
|
||||
var/damage = null
|
||||
if (stat != 2)
|
||||
damage = rand(10,30)
|
||||
|
||||
if(shielded)
|
||||
damage /= 4
|
||||
|
||||
//paralysis += 1
|
||||
|
||||
show_message("<span class='userdanger'>The blob attacks you!</span>")
|
||||
|
||||
adjustFireLoss(damage)
|
||||
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
|
||||
//can't equip anything
|
||||
/mob/living/carbon/alien/larva/attack_ui(slot_id)
|
||||
return
|
||||
|
||||
@@ -60,5 +60,8 @@
|
||||
/mob/living/carbon/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/blob_act()
|
||||
return
|
||||
|
||||
/mob/living/carbon/brain/binarycheck()
|
||||
return istype(loc, /obj/item/device/mmi/posibrain)
|
||||
@@ -20,6 +20,13 @@ mob/living
|
||||
if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
|
||||
germ_level++
|
||||
|
||||
/mob/living/carbon/blob_act()
|
||||
if (stat == DEAD)
|
||||
return
|
||||
else
|
||||
show_message("<span class='userdanger'>The blob attacks!</span>")
|
||||
adjustBruteLoss(10)
|
||||
|
||||
/mob/living/carbon/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
if(.)
|
||||
|
||||
@@ -381,11 +381,11 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/blob_act()
|
||||
if(stat == 2) return
|
||||
show_message("\red The blob attacks you!")
|
||||
if(stat == DEAD) return
|
||||
show_message("<span class='userdanger'>The blob attacks you!</span>")
|
||||
var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot")
|
||||
var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
|
||||
apply_damage(rand(20,30), BRUTE, affecting, run_armor_check(affecting, "melee"))
|
||||
apply_damage(5, BRUTE, affecting, run_armor_check(affecting, "melee"))
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob)
|
||||
|
||||
@@ -212,23 +212,8 @@
|
||||
|
||||
|
||||
/mob/living/carbon/slime/blob_act()
|
||||
if (stat == 2)
|
||||
return
|
||||
var/shielded = 0
|
||||
|
||||
var/damage = null
|
||||
if (stat != 2)
|
||||
damage = rand(10,30)
|
||||
|
||||
if(shielded)
|
||||
damage /= 4
|
||||
|
||||
//paralysis += 1
|
||||
|
||||
show_message("<span class='userdanger'> The blob attacks you!</span>")
|
||||
|
||||
adjustFireLoss(damage)
|
||||
|
||||
adjustBruteLoss(20)
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/machinery/computer/drone_control
|
||||
name = "Maintenance Drone Control"
|
||||
desc = "Used to monitor the station's drone population and the assembler that services them."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "power"
|
||||
icon_screen = "power"
|
||||
icon_keyboard = "power_key"
|
||||
req_access = list(access_engine_equip)
|
||||
circuit = "/obj/item/weapon/circuitboard/drone_control"
|
||||
|
||||
|
||||
@@ -966,9 +966,6 @@ var/list/slot_equipment_priority = list( \
|
||||
process = processScheduler.getProcess("pipenet")
|
||||
stat(null, "PIP([pipe_networks.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
|
||||
|
||||
process = processScheduler.getProcess("powernet")
|
||||
stat(null, "POW([powernets.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
|
||||
|
||||
process = processScheduler.getProcess("nanoui")
|
||||
stat(null, "NAN([nanomanager.processing_uis.len])\t - #[process.getTicks()]\t - [process.getLastRunTime()]")
|
||||
|
||||
|
||||
@@ -0,0 +1,192 @@
|
||||
// These can only be applied by blobs. They are what blobs are made out of.
|
||||
// The 4 damage
|
||||
/datum/reagent/blob
|
||||
var/message = "The blob strikes you" //message sent to any mob hit by the blob
|
||||
var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt
|
||||
|
||||
/datum/reagent/blob/boiling_oil
|
||||
name = "Boiling Oil"
|
||||
id = "boiling_oil"
|
||||
description = ""
|
||||
color = "#B68D00"
|
||||
message = "The blob splashes you with burning oil"
|
||||
|
||||
/datum/reagent/blob/boiling_oil/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BURN)
|
||||
M.adjust_fire_stacks(2*ratio)
|
||||
M.IgniteMob()
|
||||
if(isliving(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/toxic_goop
|
||||
name = "Toxic Goop"
|
||||
id = "toxic_goop"
|
||||
description = ""
|
||||
color = "#008000"
|
||||
message_living = ", and you feel sick and nauseated"
|
||||
|
||||
/datum/reagent/blob/toxic_goop/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20*ratio, TOX)
|
||||
|
||||
/datum/reagent/blob/skin_ripper
|
||||
name = "Skin Ripper"
|
||||
id = "skin_ripper"
|
||||
description = ""
|
||||
color = "#FF4C4C"
|
||||
message_living = ", and you feel your skin ripping and tearing off"
|
||||
|
||||
/datum/reagent/blob/skin_ripper/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20*ratio, BRUTE)
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
// Combo Reagents
|
||||
|
||||
/datum/reagent/blob/skin_melter
|
||||
name = "Skin Melter"
|
||||
id = "skin_melter"
|
||||
description = ""
|
||||
color = "#7F0000"
|
||||
message_living = ", and you feel your skin char and melt"
|
||||
|
||||
/datum/reagent/blob/skin_melter/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(10*ratio, BRUTE)
|
||||
M.apply_damage(10*ratio, BURN)
|
||||
M.adjust_fire_stacks(2*ratio)
|
||||
M.IgniteMob()
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/lung_destroying_toxin
|
||||
name = "Lung Destroying Toxin"
|
||||
id = "lung_destroying_toxin"
|
||||
description = ""
|
||||
color = "#00FFC5"
|
||||
message_living = ", and your lungs feel heavy and weak"
|
||||
|
||||
/datum/reagent/blob/lung_destroying_toxin/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20* ratio, OXY)
|
||||
M.losebreath += 15*ratio
|
||||
M.apply_damage(20*ratio, TOX)
|
||||
|
||||
// Special Reagents
|
||||
|
||||
/datum/reagent/blob/radioactive_liquid
|
||||
name = "Radioactive Liquid"
|
||||
id = "radioactive_liquid"
|
||||
description = ""
|
||||
color = "#00EE00"
|
||||
message_living = ", and your skin feels papery and everything hurts"
|
||||
|
||||
/datum/reagent/blob/radioactive_liquid/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(10*ratio, BRUTE)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
M.apply_effect(40*ratio,IRRADIATE,0)
|
||||
if(prob(33*ratio))
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
domutcheck(M, null)
|
||||
M.UpdateAppearance()
|
||||
|
||||
/datum/reagent/blob/dark_matter
|
||||
name = "Dark Matter"
|
||||
id = "dark_matter"
|
||||
description = ""
|
||||
color = "#61407E"
|
||||
message = "You feel a thrum as the blob strikes you, and everything flies at you"
|
||||
|
||||
/datum/reagent/blob/dark_matter/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BRUTE)
|
||||
reagent_vortex(M, 0)
|
||||
|
||||
|
||||
/datum/reagent/blob/b_sorium
|
||||
name = "Sorium"
|
||||
id = "b_sorium"
|
||||
description = ""
|
||||
color = "#808000"
|
||||
message = "The blob slams into you, and sends you flying"
|
||||
|
||||
/datum/reagent/blob/b_sorium/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BRUTE)
|
||||
reagent_vortex(M, 1)
|
||||
|
||||
|
||||
/datum/reagent/blob/explosive // I'm gonna burn in hell for this one
|
||||
name = "Explosive Gelatin"
|
||||
id = "explosive"
|
||||
description = ""
|
||||
color = "#FFA500"
|
||||
message = "The blob strikes you, and its tendrils explode"
|
||||
|
||||
/datum/reagent/blob/explosive/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
if(prob(75*ratio))
|
||||
explosion(M.loc, 0, 0, 1, 0, 0)
|
||||
|
||||
/datum/reagent/blob/omnizine
|
||||
name = "Omnizine"
|
||||
id = "b_omnizine"
|
||||
description = ""
|
||||
color = "#C8A5DC"
|
||||
message = "The blob squirts something at you"
|
||||
message_living = ", and you feel great"
|
||||
|
||||
/datum/reagent/blob/omnizine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.reagents.add_reagent("omnizine", 11*ratio)
|
||||
|
||||
/datum/reagent/blob/spacedrugs
|
||||
name = "Space drugs"
|
||||
id = "b_space_drugs"
|
||||
description = ""
|
||||
color = "#60A584"
|
||||
message = "The blob squirts something at you"
|
||||
message_living = ", and you feel funny"
|
||||
|
||||
/datum/reagent/blob/spacedrugs/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.hallucination += 20*ratio
|
||||
M.reagents.add_reagent("space_drugs", 15*ratio)
|
||||
M.apply_damage(10*ratio, TOX)
|
||||
|
||||
|
||||
/datum/reagent/blob/proc/reagent_vortex(var/mob/living/M as mob, var/setting_type)
|
||||
var/turf/pull = get_turf(M)
|
||||
for(var/atom/movable/X in range(4,pull))
|
||||
if(istype(X, /atom/movable))
|
||||
if((X) && !X.anchored)
|
||||
if(setting_type)
|
||||
step_away(X,pull)
|
||||
step_away(X,pull)
|
||||
step_away(X,pull)
|
||||
step_away(X,pull)
|
||||
else
|
||||
X.throw_at(pull)
|
||||
|
||||
/datum/reagent/blob/proc/send_message(var/mob/living/M as mob)
|
||||
var/totalmessage = message
|
||||
if(message_living && !issilicon(M))
|
||||
totalmessage += message_living
|
||||
totalmessage += "!"
|
||||
M << "<span class='userdanger'>[totalmessage]</span>"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 437 KiB After Width: | Height: | Size: 461 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
+3
-1
@@ -157,7 +157,6 @@
|
||||
#include "code\controllers\Processes\nanoui.dm"
|
||||
#include "code\controllers\Processes\obj.dm"
|
||||
#include "code\controllers\Processes\pipenet.dm"
|
||||
#include "code\controllers\Processes\powernet.dm"
|
||||
#include "code\controllers\Processes\shuttle.dm"
|
||||
#include "code\controllers\Processes\sun.dm"
|
||||
#include "code\controllers\Processes\supply.dm"
|
||||
@@ -278,11 +277,13 @@
|
||||
#include "code\game\gamemodes\blob\overmind.dm"
|
||||
#include "code\game\gamemodes\blob\powers.dm"
|
||||
#include "code\game\gamemodes\blob\theblob.dm"
|
||||
#include "code\game\gamemodes\blob\blobs\blob_mobs.dm"
|
||||
#include "code\game\gamemodes\blob\blobs\core.dm"
|
||||
#include "code\game\gamemodes\blob\blobs\factory.dm"
|
||||
#include "code\game\gamemodes\blob\blobs\node.dm"
|
||||
#include "code\game\gamemodes\blob\blobs\resource.dm"
|
||||
#include "code\game\gamemodes\blob\blobs\shield.dm"
|
||||
#include "code\game\gamemodes\blob\blobs\storage.dm"
|
||||
#include "code\game\gamemodes\borer\borer.dm"
|
||||
#include "code\game\gamemodes\changeling\changeling.dm"
|
||||
#include "code\game\gamemodes\changeling\changeling_power.dm"
|
||||
@@ -1596,6 +1597,7 @@
|
||||
#include "code\modules\reagents\reagent_containers.dm"
|
||||
#include "code\modules\reagents\reagent_dispenser.dm"
|
||||
#include "code\modules\reagents\syringe_gun.dm"
|
||||
#include "code\modules\reagents\newchem\Blob-Reagents.dm"
|
||||
#include "code\modules\reagents\newchem\chem_heater.dm"
|
||||
#include "code\modules\reagents\newchem\drinks.dm"
|
||||
#include "code\modules\reagents\newchem\drugs.dm"
|
||||
|
||||
Reference in New Issue
Block a user