Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into DemonicUpdate

This commit is contained in:
Aurorablade
2016-03-12 00:57:54 -05:00
60 changed files with 1337 additions and 873 deletions
+39 -29
View File
@@ -2254,8 +2254,8 @@
"aRr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aRs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall,/area/maintenance/fsmaint2)
"aRt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aRu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aRv" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aRu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aRv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aRw" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aRx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/lattice,/turf/space,/area/space)
"aRy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -2348,13 +2348,13 @@
"aTh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j1s"; sortType = 21; tag = "icon-pipe-j1s (EAST)"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j2s"; sortType = 17},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall,/area/maintenance/fsmaint2)
"aTo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/fsmaint2)
"aTp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/wall,/area/maintenance/fsmaint2)
"aTq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/fsmaint2)
"aTk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j2s"; sortType = 17},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall,/area/hydroponics)
"aTo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/hydroponics)
"aTp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/wall,/area/hydroponics)
"aTq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/hydroponics)
"aTr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aTs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/library)
"aTt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/wall,/area/library)
@@ -2528,10 +2528,10 @@
"aWF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWG" = (/obj/structure/table,/obj/item/weapon/watertank,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWH" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/hydroponics)
"aWJ" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/structure/closet/secure_closet/hydroponics,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWL" = (/obj/machinery/alarm{pixel_y = 24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/camera{c_tag = "Hydroponics Storage"; network = list("SS13")},/obj/structure/table,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 0; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWL" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/wall,/area/hydroponics)
"aWM" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWN" = (/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aWO" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -2628,10 +2628,10 @@
"aYB" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Hydroponics Pasture"; req_access_txt = "35"},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYD" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYE" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = -31},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYE" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/camera{c_tag = "Hydroponics Storage"; network = list("SS13")},/obj/structure/table,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 0; pixel_y = 3},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/closet/secure_closet/hydroponics,/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYH" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = -31},/obj/machinery/light,/obj/machinery/atmospherics/binary/valve{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"aYI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/wood,/area/library)
"aYJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
"aYK" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
@@ -2787,7 +2787,7 @@
"bbE" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/grass,/area/hydroponics)
"bbF" = (/obj/machinery/botany/editor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"bbG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"bbH" = (/obj/machinery/seed_extractor,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"bbH" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"bbI" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"bbJ" = (/obj/machinery/vending/hydroseeds,/obj/machinery/camera{c_tag = "Hydroponics North"; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"bbK" = (/obj/machinery/biogenerator,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
@@ -3187,7 +3187,7 @@
"bjo" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"bjp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen)
"bjq" = (/obj/machinery/processor,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"bjr" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"bjr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"bjs" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"bjt" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"bju" = (/turf/simulated/wall,/area/hallway/primary/starboard/east)
@@ -7180,6 +7180,7 @@
"cId" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cIe" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/photocopier/faxmachine{department = "Chief Engineer's Office"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cIf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cIg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"cIh" = (/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/plasteel,/area/engine/equipmentstorage)
"cIi" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage)
"cIj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/engine/equipmentstorage)
@@ -7732,6 +7733,7 @@
"cSK" = (/obj/machinery/light/spot,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate)
"cSL" = (/obj/machinery/light/small{dir = 8},/obj/machinery/power/emitter,/turf/simulated/floor/plating,/area/storage/secure)
"cSM" = (/obj/machinery/power/emitter,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/storage/secure)
"cSN" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"cSO" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cSP" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering)
"cSQ" = (/obj/machinery/field/generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/space)
@@ -8023,6 +8025,7 @@
"cYq" = (/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2)
"cYr" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4; level = 2},/turf/simulated/wall/r_wall,/area/maintenance/turbine)
"cYs" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 5; tag = "icon-intact-y (NORTHWEST)"},/turf/simulated/wall/r_wall,/area/maintenance/turbine)
"cYt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics)
"cYu" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitegreencorner"},/area/medical/virology)
"cYv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating,/area/maintenance/turbine)
"cYw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine)
@@ -8071,6 +8074,8 @@
"cZn" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/latexballon,/turf/simulated/floor/plating,/area/maintenance/asmaint)
"cZo" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cZp" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; tag = ""},/obj/structure/window/reinforced/tinted,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"cZq" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/hydroponics)
"cZr" = (/obj/machinery/seed_extractor,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"cZs" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine)
"cZt" = (/obj/machinery/atmospherics/binary/valve,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine)
"cZu" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/turbine)
@@ -8222,6 +8227,7 @@
"dck" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/medical/patients_rooms)
"dcl" = (/obj/structure/sign/securearea{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"dcm" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "blue"},/area/medical/patients_rooms)
"dcn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "green"},/area/hydroponics)
"dco" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/decal/warning_stripes/south,/turf/simulated/floor/plasteel,/area/engine/engineering)
"dcp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor/plasteel,/area/engine/engineering)
"dcq" = (/obj/effect/decal/warning_stripes/south,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 0; icon_state = "blue"},/area/medical/patients_rooms)
@@ -8709,6 +8715,10 @@
"dlE" = (/obj/structure/table,/obj/structure/bedsheetbin{pixel_x = -1; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
"dlF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/surgery)
"dlG" = (/obj/machinery/camera{c_tag = "Aft Starboard Solar Access"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"dlH" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/hydroponics)
"dlI" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 8},/area/hydroponics)
"dlJ" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/obj/machinery/atmospherics/unary/portables_connector{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/hydroponics)
"dlK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor/plasteel,/area/hydroponics)
(1,1,1) = {"
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
@@ -8820,18 +8830,18 @@ bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbi
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaKAaKzaKzaKzaKzaKzaKzaKAaInaMlaCuaMmaMnaMoaMoaMoaMoaMoaMoaMpaKHaLHaMqaLJaMraMqaMqaLHaKHaMsaMtaMuaMuaMuaMuaMuaMuaMuaMuaMvbikaLRaMwaMxaMyaMzaMAaLRbikaJGaJLaJMaMBaMCaMDaMEaLSaJMaGvaIKaMFaMFaKPaMGaMHaKSaKTaKSaMHaMIaMJaKOaKOaIKaJZaxqaKaazIaMKaBRaMLaCZaDaaDbaEgaMbaMcaMMaMNaMOaMOaMcaMPaMQaMRaMeaMSaMTaMUaMeaMVayGbikaMWaMXaMXaMXaMXaMXaMYbikayGayHaMZaNaayJayJayGayGayJayJaNbaNcayJayGazxayGayGayJayJaNdaNeayGayGayGaHYaMiayHaDxayHaMjazwayKaFSayGaNfaNgaNfayGayGayGaabaabaabaabaabaabaabaabbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNhaNiaNjaNiaNiaNkaNlaNiaNiaNjaNmaNnaCuaKBaNoaMoaNpaNqaNraNsaNtaNuaKHaLHaMqaLJaNvaMqaMqaLHaKHaNwaNxaNyaNzaNAaNBaNCaNDaNEaNFaMvaabaLRaNGaNHaNIaNJaNKaLRaabaJGaJLaJMaNLaNMaNNaNOaNPaJMaGvaIKaJNaJOaNQaNRaLXaJOaNSaJOaLXaNTaNUaJOaJYaIKaJZaxqaNVazIaKbaEeaEfaCZaDaaDbaNWaNXaMcaNYaMQaMQaMQaNZaOaaObaOcaMeaOdaOeaOfaOgaOhazxbikbikbikbikbikbikbikbikbikayGaOiaOjaOkaOlaOmayGaEtayHaHVaDxayHayGbikayGayHayHayHayHaDxaOnaOoaOpaOpaOpaOpaOqaOraOsaOtaOuaOvaOuaOwaOxaOxaOyaOzaOAaOBaOCaOCbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaNhaNmaNiaODaOEaOFaOGaOHaOIaOJaOKaOLaOMaONaOOaKzaKBaOPaMoaOQaORaOSaOTaOSaOUaKHaOVaMqaOWaOXaOYaOXaOZaPaaPbaPcaPdaPdaPdaPdaPdaPdaPeaPfaMvbikaLRaPgaNHaPhaNJaPiaLRbikaJGaJLaJMaPjaPkaPlaPmaPnaJMaGvaIKaPoaPoaKPaPpaMHaKSaPqaKSaMHaPraKWaPsaPsaIKaPtazUaPuazIaKbaEeaPvaPvaPvaPvaPwaPxaPyaPzaPAaPBaPBaPBaPCaPBaPDaPEaPFaPGaPHaPEaPIaPJazxayGayGayGayGayGayGayGayGayGayGayGayGaBMayGayGayGayGayHaDxaOiazvaabazvayHaPLaPMaPNaPOaPPaPQaPRaPRaPRaPRaPSaPTaPUaPVaPWaPXaPWaPYaPWaPWaPZaQaaQbaQbaQcaQdaQeaQeaQeaQeaQeaQeaQeaQeaQeabLadbbikbikbikbikbikbikbikaaabdBaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaPdaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRtaRuaRvaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaRQaRRaRSaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdaprbikbikbikbikbikbikbikaaabfmbifbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaSsaPdaStaSuaSvaMvbikaLRaLRaSwaSxaSwaLRaLRbikaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaSWaSXaSYaSZaTaaTbaTcaTdaTbaTbaTeaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTkaTlaTmaTnaToaTpaTqaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIaTCaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikaaabfmbigbijbihbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqcoCaKHaUbaUcaUdaUeaUfaUgaUhaUiaUjaUkaMvbikaabbikaUlaUmaUlbikaabbikaCuaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHbikbikaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTaUZaVaaVbaVcaVbaVbaVbaVbaVdaVbaVbaVeaVbaVfaVgaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikbdBblqbjMbmKbjMbqQbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaVUaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKaWlaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWuaWtaUTaWvaWwaWxaWyaWzaUTaWAaWBaWCaWDaWCaWEaWFaWGaWHaWIaWJaWKaWLaWMaWNaVbaWOaRtaWPaWQaWRaVjaWSaVlaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgaprbikbikbikbikbikaaabfmbqRbmKbmKbmKbqSbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkaYjaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYDaWNaYEaYFaYGaYHaWNaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbbikbikbikbikbqUbqTbqVbmKbmKbrUbthbmKbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMebbsaZUaYnaYnaZVaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbbakbalbakaVbaVbaVbaVeaVbaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAbikbikbikbikaaabtibtjbtibtibtibtkbtibtlbtibtjbtiaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaLyaCuaInaGdaKzbaBbaCbaDbaEaKzaGdaInaInaCubaFaVEaInbaGbaHaZdaZdaZeaDEbaIaXnaJraZhaXpaXqbaJbaKbaLbaLbaMbaNbaObaLbaPbaLbaQbaLbaRbaSbaLbaLbaWbaLbaLbaUbaVbaLbaWbaXbaYbaZaXqaXqbbabbbbbcbbdbbebbfbbebbgbbhbbgbbgbbgbbgbbgbbgbbibbjbbkbbkbbkbbkbblbbkbbmbbnbbkbbkbbobbpbbqbbqbbqbbqbbqbbqbbqbbraYiaYiaMebcTbbtbbubbvbbvbbwbbxaZXaYqbbyaUTaUTaUTaUTaUTbbzaUTbbAbbBbbCbbDaWCbbEaVbbbFbbGbbHbbIbbJbbKbbLbbMaVbaVhaHYaRDbbNbbOaTvbbPbbQaTvbbRbbRaRDbbSbbTbbUaQbbbVbbWbbXaRSaRSbbYbbZaQbbcaaQbbcbbatbccbcdbcebatbatbcfbaAbikbikbikbikbqUbtmbwlbutbwmbtmbmKbutbwmbtmbwlbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcMbcNbcObcObcObcObcPbcQbcRbmwbcUaZTbcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbbdcbddbdebdebdebdebdfbdgaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAbikbikbikbikbqUbwnbmKbutbBQbtmbmKbutbBQbtmbmKbFmbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDbikbikbikbikbikbikbikbcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEbikbikbikbikbikbikbikbcKbeGaYibeHaMebeIbcNbmwbmwbmwbmwbmwbeJbeKbmwbmwbmwbnMbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabbikbikaabbdBbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDbikbikbikbikbcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEbikbikbikbikbcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbmwbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAbqUbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbmwbhBbhCbmwbhDbhEbglbmwbnMbeMbeMbhFbcSbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbKnbIzbPfbNjbiibPfddJbmKbmKbmKbmKbmKbmKbmKbmKbmKbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbltbltblubltbltbltblvbltbltbmPaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbmwbjgbmwbmwbmwbjhbjibmwbhDbjjbglbmwbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatddAbaAbaAbaAbaAbgKbqUddBbmKbutbwmbtmbmKbutbwmbtmbmKddCbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaPdaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRvaRuaTkaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaRQaRRaRSaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdaprbikbikbikbikbikbikbikaaabfmbifbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaSsaPdaStaSuaSvaMvbikaLRaLRaSwaSxaSwaLRaLRbikaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaSWaSXaSYaSZaTaaTbaTcaTdaTbaTbaTeaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTmaTlaToaTnaTqaTpaWIaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIaTCaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikaaabfmbigbijbihbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqcoCaKHaUbaUcaUdaUeaUfaUgaUhaUiaUjaUkaMvbikaabbikaUlaUmaUlbikaabbikaCuaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHbikbikaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTaUZaVaaVbaVcaVbaVbaVbaVbaVdaWLaVbaVeaYEaVfaVgaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdaprbikbikbikbikbikbikbdBblqbjMbmKbjMbqQbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaVUaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKaWlaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWuaWtaUTaWvaWwaWxaWyaWzaUTaWAaWBaWCaWDaWCaWEaWFaWGaWHaYFaWJaWKaYGaWMaWNaVbaWOaRtaWPaWQaWRaVjaWSaVlaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgaprbikbikbikbikbikaaabfmbqRbmKbmKbmKbqSbieaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkaYjaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYDbbHaYHcIgbjrcYtcSNaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbbikbikbikbikbqUbqTbqVbmKbmKbrUbthbmKbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMebbsaZUaYnaYnaZVaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbbakbalcZqaVbaVbaVbaVeaVbaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAbikbikbikbikaaabtibtjbtibtibtibtkbtibtlbtibtjbtiaQfbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaLyaCuaInaGdaKzbaBbaCbaDbaEaKzaGdaInaInaCubaFaVEaInbaGbaHaZdaZdaZeaDEbaIaXnaJraZhaXpaXqbaJbaKbaLbaLbaMbaNbaObaLbaPbaLbaQbaLbaRbaSbaLbaLbaWbaLbaLbaUbaVbaLbaWbaXbaYbaZaXqaXqbbabbbbbcbbdbbebbfbbebbgbbhbbgbbgbbgbbgbbgbbgbbibbjbbkbbkbbkbbkbblbbkbbmbbnbbkbbkbbobbpbbqbbqbbqbbqbbqbbqbbqbbraYiaYiaMebcTbbtbbubbvbbvbbwbbxaZXaYqbbyaUTaUTaUTaUTaUTbbzaUTbbAbbBbbCbbDaWCbbEaVbbbFbbGcZrbbIbbJbbKbbLbbMaVbaVhaHYaRDbbNbbOaTvbbPbbQaTvbbRbbRaRDbbSbbTbbUaQbbbVbbWbbXaRSaRSbbYbbZaQbbcaaQbbcbbatbccbcdbcebatbatbcfbaAbikbikbikbikbqUbtmbwlbutbwmbtmbmKbutbwmbtmbwlbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcMbcNbcObcObcObcObcPbcQbcRbmwbcUaZTbcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbbdcbdddcnbdebdebdebdfbdgaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAbikbikbikbikbqUbwnbmKbutbBQbtmbmKbutbBQbtmbmKbFmbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDbikbikbikbikbikbikbikbcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEbikbikbikbikbikbikbikbcKbeGaYibeHaMebeIbcNbmwbmwbmwbmwbmwbeJbeKbmwbmwbmwbnMbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWdlHbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabbikbikaabbdBbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbdBbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDbikbikbikbikbcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEbikbikbikbikbcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbmwbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvdlHbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAbqUbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbmwbhBbhCbmwbhDbhEbglbmwbnMbeMbeMbhFbcSbhHbhIbhJbhKbhLbeMbhMbgubhNdlHbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbKnbIzbPfbNjbiibPfddJbmKbmKbmKbmKbmKbmKbmKbmKbmKbmKbutbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbltbltblubltbltbltblvbltbltbmPaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbmwbjgbmwbmwbmwbjhbjibmwbhDbjjbglbmwbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbdlJdlIdlKbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatddAbaAbaAbaAbaAbgKbqUddBbmKbutbwmbtmbmKbutbwmbtmbmKddCbqUbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikblsbohbptbojbpwbpwbqWbpwbpwbpwbqWblubjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkMbkLbkObkObkPaYibkQaMebmwbkRbkSbglbmwbkTbkUbmwbkVbkWbglbmwbnMbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatddDbgKblrblrblrbaAbwmbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbwmbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbqYbqXbqXbqXbqXbqXbqXbqXbqXbqXbqXbqZbraaGdbraaJrbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbkNbmsbmtaYiaYibjfbmwbnCbmwbmwbmwaRebmwbmwbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatddEbaAbmLbmMbmNbaAbBQbtmbmKbutbBQbtmbmKbutbBQbtmbmKbutbBQbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
bikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbrcbrbbrebrdbrfbrfbrgbrfbrfbrfbrgbluaInaInaKzbrVbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnEbnDcakbnGbmwbnFbmwbnIbnHbnJbmwbpjaUTbnKbnLaUTaUTczObnNddybnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatddDbgKblrblrblrbaAbGVbtmbmKbutbGVbtmbmKbutbGVbtmbmKbutbGVbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbikbik
+57 -27
View File
@@ -726,9 +726,12 @@
"nX" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/turf/simulated/wall,/area/mine/explored)
"nY" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/research_outpost/tempstorage)
"nZ" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/research_outpost/gearstore)
"oa" = (/turf/simulated/wall/r_wall,/area/mine/podbay)
"ob" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/research_outpost/gearstore)
"oc" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/mine/podbay)
"od" = (/obj/machinery/conveyor{dir = 2; id = "anominerals"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/research_outpost/tempstorage)
"oe" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored)
"of" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/mine/explored)
"og" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible{dir = 6; level = 1},/turf/simulated/floor/plating,/area/research_outpost/iso1)
"oh" = (/obj/structure/plasticflaps/mining,/obj/machinery/conveyor{dir = 1; id = "iso1"},/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/research_outpost/iso1)
"oi" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible{dir = 10},/turf/simulated/floor/plating,/area/research_outpost/iso1)
@@ -750,6 +753,12 @@
"oy" = (/obj/machinery/door/window/westleft,/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored)
"oz" = (/obj/structure/transit_tube{tag = "icon-N-S"; icon_state = "N-S"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel/airless,/area/mine/explored)
"oA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/mine/explored)
"oB" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless{icon_state = "circuit"},/area/mine/explored)
"oC" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/engine,/area/mine/podbay)
"oD" = (/obj/machinery/door_control{desc = "A remote control-switch for the pod doors."; id = "minepodbay"; name = "Pod Door Control"; pixel_x = 0; pixel_y = 24; req_access_txt = "0"; req_one_access_txt = "48;70"},/turf/simulated/floor/engine,/area/mine/podbay)
"oE" = (/obj/machinery/camera{c_tag = "Mining Outpost Starboard Connector"; network = list("Mining Outpost")},/turf/simulated/floor/engine,/area/mine/podbay)
"oF" = (/obj/structure/spacepoddoor,/turf/simulated/floor/engine,/area/mine/podbay)
"oG" = (/obj/machinery/firealarm{pixel_y = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/mine/podbay)
"oH" = (/obj/machinery/disposal/deliveryChute{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/research_outpost/tempstorage)
"oI" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plating,/area/research_outpost/maint)
"oJ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plating,/area/research_outpost/maint)
@@ -776,6 +785,8 @@
"pe" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-closed (EAST)"},/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/plasteel/airless,/area/mine/explored)
"pf" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space)
"pg" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/gearstore)
"ph" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/engine/vacuum,/area/mine/podbay)
"pi" = (/turf/simulated/floor/engine,/area/mine/podbay)
"pj" = (/obj/structure/transit_tube{tag = "icon-D-SE"; icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2)
"pk" = (/obj/structure/transit_tube{tag = "icon-W-NE"; icon_state = "W-NE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"pl" = (/obj/item/weapon/rack_parts,/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/mine/abandoned)
@@ -791,6 +802,9 @@
"pv" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore)
"pw" = (/turf/simulated/floor/mech_bay_recharge_floor/airless,/area/research_outpost/gearstore)
"px" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore)
"py" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/turf/simulated/floor/engine,/area/mine/podbay)
"pz" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor/engine,/area/mine/podbay)
"pA" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/mine/podbay)
"pB" = (/obj/machinery/door/window/westleft,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored)
"pC" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"; tag = "icon-opening (EAST)"},/obj/structure/transit_tube_pod,/obj/effect/decal/warning_stripes/yellow/hollow,/turf/simulated/floor/plasteel/airless,/area/mine/explored)
"pD" = (/turf/simulated/wall/r_wall,/area/mine/explored)
@@ -808,12 +822,18 @@
"pP" = (/obj/machinery/door/window/westleft{dir = 2},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored)
"pQ" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/research_outpost/gearstore)
"pR" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/research_outpost/gearstore)
"pS" = (/obj/machinery/power/apc{dir = 8; name = "Mining Station Podbay APC"; pixel_x = -27; pixel_y = 2},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/engine,/area/mine/podbay)
"pT" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/engine,/area/mine/podbay)
"pU" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/engine,/area/mine/podbay)
"pV" = (/obj/structure/spacepoddoor,/obj/machinery/door/poddoor/three_tile_ver{id_tag = "minepodbay"; req_one_access_txt = "48;70"},/turf/simulated/floor/engine,/area/mine/podbay)
"pW" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/turf/simulated/wall/r_wall,/area/mine/explored)
"pX" = (/obj/effect/glowshroom,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"pY" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned)
"pZ" = (/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned)
"qa" = (/obj/machinery/door/airlock/external{name = "Mining Bridge"; req_access_txt = "65"},/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"; tag = "icon-asteroidfloor"},/area/research_outpost/gearstore)
"qb" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/airless,/area/mine/explored)
"qc" = (/obj/effect/decal/warning_stripes/north,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plasteel,/area/mine/podbay)
"qd" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/mine/podbay)
"qe" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = -32},/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"; tag = ""},/area/mine/explored)
"qf" = (/obj/structure/transit_tube{tag = "icon-D-NE"; icon_state = "D-NE"},/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel/airless,/area/mine/explored)
"qg" = (/obj/structure/transit_tube{tag = "icon-E-NW"; icon_state = "E-NW"},/turf/simulated/wall/r_wall,/area/mine/explored)
@@ -826,7 +846,9 @@
"qn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/explored)
"qo" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored)
"qp" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (SOUTHWEST)"; icon_state = "asteroidwarning"; dir = 10},/area/mine/explored)
"qq" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 22; pixel_y = 0},/turf/simulated/floor/plasteel{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/mine/podbay)
"qr" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (SOUTHEAST)"; icon_state = "asteroidwarning"; dir = 6},/area/mine/explored)
"qs" = (/obj/effect/decal/warning_stripes/north,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/podbay)
"qt" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
"qu" = (/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning (NORTHEAST)"; icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
"qv" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = -32; pixel_y = -32},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
@@ -1109,7 +1131,7 @@
"vM" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"vN" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"vO" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"vP" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/mine/eva)
"vP" = (/turf/simulated/wall/r_wall,/area/mine/eva)
"vQ" = (/turf/simulated/wall,/area/mine/eva)
"vR" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/mine/eva)
"vS" = (/obj/structure/table,/obj/item/weapon/shovel,/turf/simulated/floor/plasteel,/area/mine/west_outpost)
@@ -1169,7 +1191,7 @@
"wU" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/mining{name = "Mining Station Storage"; req_access_txt = "48"},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"wV" = (/obj/machinery/alarm{pixel_y = 24},/obj/machinery/portable_atmospherics/scrubber,/obj/machinery/camera{c_tag = "Mining Outpost Starboard Connector"; network = list("Mining Outpost")},/turf/simulated/floor/plasteel,/area/mine/lobby)
"wW" = (/turf/simulated/floor/plasteel,/area/mine/lobby)
"wX" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/mine/lobby)
"wX" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/mine/eva)
"wY" = (/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plating,/area/mine/eva)
"wZ" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/item/device/gps/mining{gpstag = "MINE2"},/obj/item/device/gps/mining{gpstag = "MINE1"},/obj/item/device/gps/mining,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -3},/turf/simulated/floor/plasteel,/area/mine/eva)
"xa" = (/turf/simulated/floor/plasteel,/area/mine/eva)
@@ -1194,7 +1216,7 @@
"xt" = (/obj/structure/sink{pixel_y = 30},/obj/machinery/light/small,/obj/structure/mirror{pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/mine/living_quarters)
"xu" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock{name = "Toilet"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/mine/living_quarters)
"xv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"xw" = (/obj/machinery/power/apc{dir = 1; name = "Mining Station Port Wing APC"; pixel_x = 1; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"xw" = (/obj/machinery/computer/podtracker,/turf/simulated/floor/plasteel,/area/mine/podbay)
"xx" = (/obj/machinery/camera{c_tag = "Mining Outpost Crew Area Hallway"; network = list("Mining Outpost")},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"xy" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"xz" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
@@ -1203,7 +1225,7 @@
"xC" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/mine/living_quarters)
"xD" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/mine/lobby)
"xE" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "warning"},/area/mine/lobby)
"xF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/lobby)
"xF" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{tag = "icon-stage_stairs"; icon_state = "stage_stairs"},/area/mine/podbay)
"xG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/lobby)
"xH" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/firedoor{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA"; req_access_txt = "54"},/turf/simulated/floor/plasteel,/area/mine/eva)
"xI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/eva)
@@ -1282,7 +1304,7 @@
"zd" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"})
"ze" = (/obj/structure/table/reinforced,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"})
"zf" = (/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/machinery/power/apc{dir = 1; name = "Mining Station Mech Bay APC"; pixel_x = 1; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"})
"zg" = (/obj/machinery/mech_bay_recharge_port,/turf/simulated/floor/plating,/area/mine/production)
"zg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/podbay)
"zh" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/mine/production{name = "Mining Station Mech Bay"})
"zi" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/plasteel,/area/mine/production{name = "Mining Station Mech Bay"})
"zj" = (/turf/simulated/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
@@ -1319,7 +1341,7 @@
"zO" = (/obj/machinery/camera{c_tag = "Mining Outpost Port Exterior Airlock"; dir = 4; network = list("Mining Outpost")},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "mining_west_pump"},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/mine/living_quarters)
"zP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/mine/living_quarters)
"zQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "mining_west_pump"},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/mine/living_quarters)
"zR" = (/obj/machinery/door/airlock/external{id_tag = "mining_away"; name = "Mining Dock Airlock"; req_access_txt = "48"},/turf/simulated/floor/plasteel,/area/mine/production)
"zR" = (/turf/simulated/wall/r_wall,/area/mine/lobby)
"zS" = (/obj/machinery/power/apc{dir = 8; name = "Mining Station Starboard Wing APC"; pixel_x = -27; pixel_y = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/mine/lobby)
"zT" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/lobby)
"zU" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/mine/lobby)
@@ -1353,6 +1375,9 @@
"Aw" = (/obj/machinery/power/apc{dir = 1; name = "Mining Station External APC"; pixel_x = 1; pixel_y = 25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
"Ax" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
"Ay" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel/airless{tag = "icon-asteroidwarning"; icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
"Az" = (/obj/machinery/door/firedoor{dir = 2},/obj/machinery/door/airlock/glass_mining{name = "Mining Station Pod Bay"; req_access_txt = "54"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel,/area/mine/lobby)
"AA" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/mine/lobby)
"AB" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/mine/lobby)
"AC" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/lobby)
"AD" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Mining Shuttle Airlock"; dir = 8; network = list("Mining Outpost")},/turf/simulated/floor/plasteel,/area/mine/lobby)
"AE" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"})
@@ -1363,6 +1388,7 @@
"AJ" = (/obj/machinery/alarm{pixel_y = 25},/obj/structure/closet/crate/bin{name = "Garbage bin"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"})
"AK" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"})
"AL" = (/obj/machinery/door/firedoor,/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/mine/living_quarters{name = "Mining Station Break Room"})
"AM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/lobby)
"AN" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel,/area/mine/lobby)
"AO" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/mine/lobby)
"AP" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Mining Break Room"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/lobby)
@@ -1372,6 +1398,7 @@
"AT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"})
"AU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"})
"AV" = (/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"})
"AW" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel,/area/mine/living_quarters)
"AX" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/mine/lobby)
"AY" = (/obj/machinery/door/firedoor,/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/mine/lobby)
"AZ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; level = 1},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters{name = "Mining Station Break Room"})
@@ -1417,6 +1444,9 @@
"BN" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production)
"BO" = (/obj/machinery/telepad_cargo,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/mine/production)
"BP" = (/obj/docking_port/stationary{dir = 2; dwidth = 2; height = 18; id = "skipjack_z5"; name = "south of asteroid"; width = 19},/turf/space,/area/space)
"BQ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/mine/lobby)
"BR" = (/obj/machinery/mech_bay_recharge_port,/turf/simulated/floor/plating,/area/mine/production{name = "Mining Station Mech Bay"})
"BS" = (/obj/machinery/door/airlock/external{id_tag = "mining_away"; name = "Mining Dock Airlock"; req_access_txt = "48"},/turf/simulated/floor/plasteel,/area/mine/lobby)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1586,40 +1616,40 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbjacacacacaaaaaaaaaaaaaaaaacacaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaeaepOpOukukukukukukukuluhujaaaaaaaaaaaaacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjumumumumumumumbjacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafoVoVoVafafaeaeaeaeqCnWnlafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbjacacaaaaaaaaaaaaaaaaaaaaaeaeaeaeufunununununununuoupujaaaaaaaaaaaaacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjumuqurusutuuumbjacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaafafafoVoVoVoVafafafaeaeaeqCaeafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbjacacacacaaaaaaaaaaaaaaaaafaeaeaepOpOqoqoqoqoqoqouvuhuwuaaaaaaaaaaaafacacbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjumuxuyuzuAuBumbjbjacacacaaaaaaaaaaaaaaaaaaaaaaaaaaafafafoVoVoVoVafafafaeaeaeqCaeafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaacacacaaaaaaaaaaaaafafafaeaeaeaeaaaaaaaaaaaauguhujaaaaaaaeaeaeafacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjoeuCuDbjuEumumumuFumumumbjbjacacacaaaaaaaaaaaaaaaaaaaaaaaaafafafafoVoVoVoVafafafaeaeaeqCaeafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaacacafafaeaeaeaaaaaaaaaaaaaauguhujaaaeaeaeaeaeafafacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjuGuDuHbjuEuIuJuEuKuEafafacacacacacaaaaaaaaaaaaaaaaaaaaaaafafafafoVoVoVoVoVafafafafaeaeqCaeaeafafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafafaeaeaaaaaaaaaaaaaauLuhujaeaeaeaeaeaeaeafacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjoenlacuEuMuNuOuPuEaeafafacacacacaaaaaaaaaaaaaaaaaaaaafafafafoVoVoVoVoVoVafafafafaeaeqCaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaapOufpOaeaeaeaeaeaeaeafafacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjuQbjacuEuEuEuEuRuEaeaeafafnlafafaaaaaaaaaaaaaaaaaaaaaaafafafoVoVoVafafafafafafafafaeqCaeaeaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacbjacacaaaaaaaaaaaaaaaaaaaeaepOoepOaeaeaeaeaeaeaeaeafacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjuSbjbjuEuIuTuEuUuVaeaeaeaeuWaeafafaaaaaaaaaaaaaaaaaaaaafafafafafafafnlnlnlnlnlnlafaeqCaeaeaeaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaaaaaacacbjbjacaaaaaaaaaaaaaaaaaaaeaeaeaeoeoeoeoeuXuXuXaeaeaeafacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjuSbjbjuEuMuNuYuKuVaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaafafafafafafnluZvavbvbvcaeaeqCaeaeaeaeaeaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaccsacacacacaaaaaaaaaaaaaaacacacbjbjacaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaevdvevfaeaeaeafacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjacacacafafafafafafafacacacacacacacacbjbjbjbjbjbjbjbjbjbjuEvguEuEuEuEuEuEuKuVaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafafnlvhvivivivjaerTqtquaeaeaeaeaeaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacbjbjacaaaaaaaaaeaevkvkvkvkvkvkvlvlvlvkvmvkvkvkaeaeaeafacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacafafaeaeaeaeaeafafafafafacacacacacacacbjbjbjbjuEuEuEuEvnvovpuEuIvquEvruEuEuEuVuVuVuEaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafnlvsvtvtvtvuaeqpqyqraeaeaeaeaeaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacacacaaaaafaeaeaevkvvvwvxvyvzvAvBvCvDvEvFvGvyquaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacafafaeaeaeaeaeaeaeaeaeaeafafafafafacacacacbjbjbjuEvHvIvJvKvIvIuEuMuNvLuKuEvMvNvOvOvOuVaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafaeaeaeaeaeaeaeaevPvQvRvRvQvQaeaeaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaacacacaaaaacafaeaeaevkvSvTvUvyvTvVvTvTvWvXvYvGvZwaaeaeaeaeaeafafafacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjacacafafnlaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafacacacacacacuEwbvIwcwdwewfuEuEuEuEuKuEvMwgwgwgwhuVaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaevPwiwjwjwkvQaewlaeaeaenWnlafafafoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacafaeaeaevkwmvTvTwnvTvVwovTvTvywpwqvyqraeaeaeaeaeaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjacacafafaeuWaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafacacacuEwrwswtvIwuwvwwwhwxwywzuEwAwgwBwCwDuVaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaewEwEwFwFvPwGwHwIwJvQvQvQvQaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacafafaeaevkwKvTwLvEwMwNwOvTvkvkvkvkvkvmrTquaeaeaeaeaeaeaeaeafafafacacacacacbjbjbjbjbjbjbjacacacafaeaeaeaeaeaeaeaeaeaeaerTquaeaeaeaeaeaeaeaeaeafafacacwPuEuEuEwQuEuEwRwSwTwRwSuEuEuEuEuEwUuEuEuVuVaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaewFwFwVwWwXwYwZxaxaxbxcxdxexcquaeaeaenmafafafoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkxfxgxhvyxixjxkxlxmxnxoxpxqxrtTtUrsrsrsrsrsqLaeaeaeaeafafafacacacacacbjbjbjacacacacafafaeaetRrsrsrsrsrsrsrsrstTtUrsrsrsrsqLaeaeaeaeaeafacacacacacwQxsxtxuwgwDxvwhwDwwxwxxxywhwDwgxzxAuVuVuVxBxCxCxCxCxCxCxCxDxDxDxDxDxDxDwFwFwFxEwWxFxGxHxIxaxaxJxKxLxMxNxOaeaeaenmafafafoVoVoVoVoVoVafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaacacacaaaaaaaaaaaaafafafaeaeaeaeaaaaaaaaaaaauguhujaaaaaaaeaeaeafacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjoeuCuDbjuEumumumuFumumumbjbjacacacaaaaaaaaaaaaaaaaaaaaaaaaafafafafoVoVnlnlnlnlnlnlaeaeqCaeafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaacacafafaeaeaeaaaaaaaaaaaaaauguhujaaaeaeaeaeaeafafacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjuGuDuHbjuEuIuJuEuKuEafafacacacacacaaaaaaaaaaaaaaaaaaaaaaafafafafoVoVoVnluZvavbvbvcaeaeqCaeaeafafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafafaeaeaaaaaaaaaaaaaauLuhujaeaeaeaeaeaeaeafacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjoenlacuEuMuNuOuPuEaeafafacacacacaaaaaaaaaaaaaaaaaaaaafafafafoVoVoVoVnlvhvivivivjaeaeqCaeaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaapOufpOaeaeaeaeaeaeaeafafacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjuQbjacuEuEuEuEuRuEaeaeafafnlafafaaaaaaaaaaaaaaaaaaaaaaafafafoVoVoVafnlvsvtvtvtvuaeaeqCaeaeaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacbjacacaaaaaaaaaaaaaaaaaaaeaepOoepOaeaeaeaeaeaeaeaeafacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjuSbjbjuEuIuTuEuUuVaeaeaeaeuWaeafafaaaaaaaaaaaaaaaaaaaaafafafafafafafaeaeaeaeoaoaoaoaocoaoBofaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaaaaaacacbjbjacaaaaaaaaaaaaaaaaaaaeaeaeaeoeoeoeoeuXuXuXaeaeaeafacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjuSbjbjuEuMuNuYuKuVaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaafafafafafafaeaeaeaeoaoCoEoDoGoFphaeaeaeaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaccsacacacacaaaaaaaaaaaaaaacacacbjbjacaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaevdvevfaeaeaeafacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjacacacafafafafafafafacacacacacacacacbjbjbjbjbjbjbjbjbjbjuEvguEuEuEuEuEuEuKuVaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafafaeaeaeaeoapipzpypAoFphaeaeaeaeaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacbjbjacaaaaaaaaaeaevkvkvkvkvkvkvlvlvlvkvmvkvkvkaeaeaeafacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacafafaeaeaeaeaeafafafafafacacacacacacacbjbjbjbjuEuEuEuEvnvovpuEuIvquEvruEuEuEuVuVuVuEaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafafaeaeaeaeoapSpUpTpApVphaeaeaeaeaeaeaeaeafafafafafoVoVoVoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaacacacacacaaaaafaeaeaevkvvvwvxvyvzvAvBvCvDvEvFvGvyquaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacafafaeaeaeaeaeaeaeaeaeaeafafafafafacacacacbjbjbjuEvHvIvJvKvIvIuEuMuNvLuKuEvMvNvOvOvOuVaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaafafafaeaeaeaeqdqcqsqqwXvPvRvRvQvQaeaeaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaacacacaaaaacafaeaeaevkvSvTvUvyvTvVvTvTvWvXvYvGvZwaaeaeaeaeaeafafafacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjacacafafnlaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafacacacacacacuEwbvIwcwdwewfuEuEuEuEuKuEvMwgwgwgwhuVaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeqdxwzgxFwXwiwjwjwkvQaewlaeaeaenWnlafafafoVoVoVoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaacafaeaeaevkwmvTvTwnvTvVwovTvTvywpwqvyqraeaeaeaeaeaeaeafafafafacacacacacacbjbjbjbjbjbjbjbjbjacacafafaeuWaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafacacacuEwrwswtvIwuwvwwwhwxwywzuEwAwgwBwCwDuVaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaezRzRAAAzwXwGwHwIwJvQvQvQvQaeaeaeaeafafafafoVoVoVoVoVoVoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacafafaeaevkwKvTwLvEwMwNwOvTvkvkvkvkvkvmrTquaeaeaeaeaeaeaeaeafafafacacacacacbjbjbjbjbjbjbjacacacafaeaeaeaeaeaeaeaeaeaeaerTquaeaeaeaeaeaeaeaeaeafafacacwPuEuEuEwQuEuEwRwSwTwRwSuEuEuEuEuEwUuEuEuVuVaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaewFwFwVAMABwYwZxaxaxbxcxdxexcquaeaeaenmafafafoVoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkxfxgxhvyxixjxkxlxmxnxoxpxqxrtTtUrsrsrsrsrsqLaeaeaeaeafafafacacacacacbjbjbjacacacacafafaeaetRrsrsrsrsrsrsrsrstTtUrsrsrsrsqLaeaeaeaeaeafacacacacacwQxsxtxuwgwDxvwhwDwwAWxxxywhwDwgxzxAuVuVuVxBxCxCxCxCxCxCxCxDxDxDxDxDxDxDwFwFwFxEwWBQxGxHxIxaxaxJxKxLxMxNxOaeaeaenmafafafoVoVoVoVoVoVafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafaeaevkvkvkvkvkxPxQxRvkvkxSvkvkvkvkqpqraeaeaeaeaeqCaeaeaeaeafaeafafacacacacacacacacacacafafaeaeaeqCaeaeaeaeaeaeaeaeqpqraeaeaeaeqCaeaeaeaeaeafafnlafafacuEuEuEuEwgwDxTxUxVwyxWxXxXxYxYxZxXyaybxXybycycycycycycycycydydydydydydydyeyfyeygyfyhyiyjykylymynxcyoypxcqraeaeaeaeafafafafoVoVoVoVoVafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafaeaeaeaeaevkyqyrysytvkyuyvoeaeaeaeaeaeqEaeaeaeqKrsrsqLaeaeaeaeafacacacacacacacacacacafaeaetRrstSaeaeaeaeafaeaeqEaeaeaeaeaeaeqCaeaeaeaeaeaeaeuWaeafafafafafuEwgywyxyyyyyxyzyAyByyyyyCyxyDyEyEyEyFyFyFyFyFyFyFyFyGyGyGyGyGyGyHyIyIyIyJyKyLyMyNyOyPyOyOyOyOyOyOyQaeaeaeaenmafafafoVoVoVoVafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafaeaeaeaevkyRySyTyUvkaeaeaeaeaeaeafafnlafaeaeaeaeaeqCaeaeaeaeaeafacacacacacafafafafafaetRtSaeaeaeafafafafafafnlaeaeaeaeaeaeqCaeaeaeaeaeaeaeaeaeaeaeafafuEuEwRyVwRuEuEyWyXyYuEuEuEyZwRuEuVaeaeaeaaaaaaaaagaaaaaaagaaaaaaaaaaagaawFwFwWzazbzczdzezfzgzhziyOvbzjaeaeaeaeaeafafafoVoVoVoVafafafoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacafafaeaeaeaevkyRySyTyUvkaeaeaeaeaeaeafafnlafaeaeaeaeaeqCaeaeaeaeaeafacacacacacafafafafafaetRtSaeaeaeafafafafafafnlaeaeaeaeaeaeqCaeaeaeaeaeaeaeaeaeaeaeafafuEuEwRyVwRuEuEyWyXyYuEuEuEyZwRuEuVaeaeaeaaaaaaaaagaaaaaaagaaaaaaaaaaagaawFwFwWzazbzczdzezfBRzhziyOvbzjaeaeaeaeaeafafafoVoVoVoVafafafoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafaeaeaevkvkvkvkvkvkaeaeafafafafafacacafafaeaeaeaeqCaeaeaeaeaeaeafafafafafafaeaeaeaeaeqCaeaeafafafacacacacacafaeaeaeaeaeaeqCaeaeaerTquaeaeaeaeaeaeaeafuEzkzlzmznuEzozpzqzrzsuEztzuzvuEaeaeaeaeaeaeaaaaagaaaaaaagagagagagagagagagwEzwzxzyzzzAzAzBzCzCzDzEzFvjaeaeaeaeaeafafafoVoVoVafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafaeaeaeaeaeaeaeaeaeaeaeafacacacacacacacafafaeaeaeqKrsrsrsqLaeaeaeaeaeaeaeaeaeaeaeaeaeqCaeafafacacacacacacacafafaeaeaeaeaeqKrsrsrstTtUrsrsrsqLaeaeaeaeuEzGzHzIzJuEzKzLzLzMzNuEzOzPzQuEaeaeaeaeaeaeagagagagagagagaaaaaaaaaaagaaaawEzSzTzUzVzWzXzYzCzCzDzEzFvjaeaeaeaeafafafafoVoVafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafaeaeaeaeaeaeaeaeaeaeaeafacacacacacacacafafaeaeaeqKrsrsrsqLaeaeaeaeaeaeaeaeaeaeaeaeaeqCaeafafacacacacacacacafafaeaeaeaeaeqKrsrsrstTtUrsrsrsqLaeaeaeaeuEzGzHzIzJuEzKzLzLzMzNuEzOzPzQuEaeaeaeaeaeaeagagagagagagagaaaaaaaaaaagaaaawEzSzTzUzVzWzXzWzCzCzDzEzFvjaeaeaeaeafafafafoVoVafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafaeaeaeaeaeaeaeaeaeafafafacacacacacacacacafafafaeaeaeaeaeqKqLaeaerTquaeaetRrsrsrsrsrstSaeafacacacacbjbjbjacacafafafaeaeaeaeaeaeaeqpqraeaeaeqCaeaeaeaewPuEuEuEuEuEzZAaAbAczNuEuEAdwRwPaeaeaeaeaeaeaaaaagaaaaaaagaaaaaaaaaaagaawFwFAeAfAgyOAhAiAjAkzhziyOvtvuaeaeaeaeafafafoVoVoVafafafafoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacafafafafaeaeaeaeafafafacacacacacacacacacacacacafafafaeqEaeaeqKrsrstTtUrsrstSaeaeaeaeaeaeaeafacacacbjbjbjbjbjacacacafafafafaeaeaeaeaeaeaeaeaeqKrsrsqLaeaeaeaeaeaewPuEuEuEuEuEwPzFAlAmAnaeaeaeaeaeaaaaaaagaaaaaaagaaaaaaaaaaAowFApAqArAsAtwEAuAvAuAuAuAuAuAutNaeaeaeafafafafoVoVafafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafacacacacacacacacacacacacacacacacafafnlafaeaeaeaeqpqraeaeaeaeqEaeafafafafafacacbjbjbjbjbjbjbjacacacacacafafafafafafafafaeaeaeaeaeqCaeaeaeaeaeaeaeaeqpAwAxAxAxAxAyqraeaeaeaeaeaeagagagagagagagagaaaaaaaahMhgwWzRwWwWAsADwEAEAFAGAHAIAJAKALaeaeaeaeafafafafoVoVafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacafafafafafafacacacacacacacacacacacacacacacacafafnlafaeaeaeaeqpqraeaeaeaeqEaeafafafafafacacbjbjbjbjbjbjbjacacacacacafafafafafafafafaeaeaeaeaeqCaeaeaeaeaeaeaeaeqpAwAxAxAxAxAyqraeaeaeaeaeaeagagagagagagagagaaaaaaaahMhgwWBSwWwWAsADwEAEAFAGAHAIAJAKALaeaeaeaeafafafafoVoVafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacacbjbjbjbjbjbjacacacacacacafafaeaeaeaeaeaeaeaeaenlafafacacacacacbjbjbjbjbjbjbjbjacacacacacacacacacacacacafafaeaeaeaeqCaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaagaaaaaaaaaawFwFwFACwWANAOAPAQARASATAUAVAVALaeaeaerCnlafafafoVafafafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacbjbjbjbjbjbjbjbjbjbjbjacacacacacacafafafaeaeaeafafafafafacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacafaeaeaeaeqKrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsrsqLaeaeaeaeaeaeaaaaaaaaaaagaaaaaaaaaaagaawFwFwWAsAXAYAZBaAVAVBbBbBcAuaeaeaeaeafafafafafafafafoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacafafafafafacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeqCaerTquaeaeaenlnlaaaaaaagaaaaaaaaaaagaaaawEBdAszUBeAVAVAVBfBgBgBhALaeaeaeaeafafafafafoVafafoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeqKrstTtUrsrsrsBiBjBkBkBkBkBkBkBkBkBkBkBkBkBlBmBnBowEBpBqBrAVBsBsAVALaeaeafafafafafoVoVoVafoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeqKrstTtUrsrsrsBiBjBkBkBkBkBkBkBkBkBkBkBkBkBlBmBnBowEBpBqBrAVBsBsAVALaeaeaeafafafafoVoVoVafoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacafafafaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeqpqraeaeaenlnlagaaaaaaaaaaaaaaaaaaaaaaBtBtBuBvBtAuAuAuALALALALAuaeaeafafafafoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacafafafafafafafafafafnltNaeaeaeaeaeaeaeaeaeaeaeaeaeaeagaaaaaaaaaaaaaaaaaaaaaaBtBwBxByBzBABBBtaeaeaeaeaeaeaeafafafafoVoVoVoVoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacafaeaeaeaeaeaeaeaeaeaeaeaeaeqEaeaeaaaaaaaaaaaaaaaaaaaaaaBtBCBDBEBFzYBGBtaeaeaeaeaeaeafafafafoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacafaeaeaeaeaeaeaeaeaeaeaeaeaeqEaeaeaaaaaaaaaaaaaaaaaaaaaaBtBCBDBEBFzYBGBtaeaeaeaeaeaeaeafafafoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacafaeaeaeaeaeaeaeaeaeaeaeaeafnlafafaaaaaaaaaaaaaaaaaaaaaaBtBHBIBJBKzYBLBtaeaeaeaenWnlafafafoVoVoVoVoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacafafaeaeaeaeaeaeaeaeaeafacacafafafaaaaaaaaaaaaaaaaaaaaaaBtBMBNBNBNBNBOBtaeaeaeaeaeafafafoVoVoVoVoVoVoVafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacafafafafafafafafafafafacacacafafafaaaaaaaaaaaaaaaaaaaaBtBtBtBtBtBtBtBtaeaeaeaeafafafoVoVoVoVoVoVoVafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaeaeaeaeaeueaeaeaeafafafafafafoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacbjbjbjbjbjacacaaaaaaaaaaaaaaaaaaaaaeaeaeafnlafafafafafafafafoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaaaaaaaeaeafafafafafafafafafafoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeafafafafoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacacacacacacacacacacbjbjbjbjbjacacaaaaaaaaaaaaaaaaaaaaaeaeaeaeueaeaeaeaeafafafafoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaaaaaaaeaeafafnlafafafafafafafoVoVoVoVoVoVafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjcsbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaaaaaaaaaeaeafafafafafafoVoVoVoVoVoVoVafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaaaaaaaaaaaeaeafafafafoVoVoVoVoVoVoVafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjbjacacacaaaaaaaaaaaaaaaaaaaaaaaaaeaeafafafoVoVoVoVoVafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-14
View File
@@ -1,17 +1,3 @@
// Vampire power defines
#define VAMP_REJUV 1
#define VAMP_GLARE 2
#define VAMP_HYPNO 3
#define VAMP_SHAPE 4
#define VAMP_VISION 5
#define VAMP_DISEASE 6
#define VAMP_CLOAK 7
#define VAMP_BATS 8
#define VAMP_SCREAM 9
#define VAMP_JAUNT 10
#define VAMP_SLAVE 11
#define VAMP_BLINK 12
#define VAMP_FULL 13
///////////////////ORGAN DEFINES///////////////////
// Organ defines.
@@ -177,6 +177,10 @@
if(cost)
shuttle_master.techLevels[tech.id] = tech.level
shuttle_master.points += cost
for(var/mob/M in player_list)
if(M.mind)
for(var/datum/job_objective/further_research/objective in M.mind.job_objectives)
objective.unit_completed(cost)
msg += "<span class='good'>+[cost]</span>: [tech.name] - new data.<br>"
// Sell max reliablity designs
+3 -2
View File
@@ -886,9 +886,10 @@
if(src in ticker.mode.vampires)
ticker.mode.vampires -= src
special_role = null
current.remove_vampire_powers()
if(vampire)
vampire.remove_vampire_powers()
qdel(vampire)
ticker.mode.update_vampire_icons_removed(src)
if(vampire) qdel(vampire)
current << "<FONT color='red' size = 3><B>You grow weak and lose your powers! You are no longer a vampire and are stuck in your current form!</B></FONT>"
log_admin("[key_name(usr)] has de-vampired [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-vampired [key_name_admin(current)]")
+3 -4
View File
@@ -88,10 +88,9 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
user << "Not when you're incapacitated."
return 0
if(ishuman(user))
if(user.is_muzzled())
user << "Mmmf mrrfff!"
return 0
if(ishuman(user) && (invocation_type == "whisper" || invocation_type == "shout") && user.is_muzzled())
user << "Mmmf mrrfff!"
return 0
var/obj/effect/proc_holder/spell/noclothes/spell = locate() in (user.spell_list | (user.mind ? user.mind.spell_list : list()))
if(clothes_req && !(spell && istype(spell)))//clothes check
if(!istype(user, /mob/living/carbon/human))
+50
View File
@@ -924,6 +924,56 @@ var/list/uplink_items = list()
cost = 2
gamemodes = list(/datum/game_mode/nuclear)
// Cybernetics
/datum/uplink_item/cyber_implants
category = "Cybernetic Implants"
surplus = 0
gamemodes = list(/datum/game_mode/nuclear)
/datum/uplink_item/cyber_implants/spawn_item(turf/loc, obj/item/device/uplink/U)
if(item)
if(findtext(item, /obj/item/organ/internal/cyberimp))
return new /obj/item/weapon/storage/box/cyber_implants(loc, item)
else
return ..()
/datum/uplink_item/cyber_implants/thermals
name = "Thermal Vision Implant"
desc = "These cybernetic eyes will give you thermal vision. Comes with an automated implanting tool."
reference = "CIT"
item = /obj/item/organ/internal/cyberimp/eyes/thermals
cost = 8
/datum/uplink_item/cyber_implants/xray
name = "X-Ray Vision Implant"
desc = "These cybernetic eyes will give you X-ray vision. Comes with an automated implanting tool."
reference = "CIX"
item = /obj/item/organ/internal/cyberimp/eyes/xray
cost = 10
/datum/uplink_item/cyber_implants/antistun
name = "CNS Rebooter Implant"
desc = "This implant will help you get back up on your feet faster after being stunned. \
Comes with an automated implanting tool."
reference = "CIAS"
item = /obj/item/organ/internal/cyberimp/brain/anti_stun
cost = 12
/datum/uplink_item/cyber_implants/reviver
name = "Reviver Implant"
desc = "This implant will attempt to revive you if you lose consciousness. Comes with an automated implanting tool."
reference = "CIR"
item = /obj/item/organ/internal/cyberimp/chest/reviver
cost = 8
/datum/uplink_item/cyber_implants/bundle
name = "Cybernetic Implants Bundle"
desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. \
Comes with an automated implanting tool."
reference = "CIB"
item = /obj/item/weapon/storage/box/cyber_implants/bundle
cost = 40
// POINTLESS BADASSERY
/datum/uplink_item/badass
+3 -2
View File
@@ -114,17 +114,18 @@
msg="We see that you completed [newunits] new unit[newunits>1?"s":""] for Task #[count]! "
pay=objective.completion_payment * newunits
objective.units_compensated += newunits
objective.is_completed() // So we don't get many messages regarding completion
else if(!objective.completed)
if(objective.is_completed())
pay=objective.completion_payment
msg="Task #[count] completed! "
if(pay>0)
if(M.mind.initial_account)
M.mind.initial_account.money += objective.completion_payment
M.mind.initial_account.money += pay
var/datum/transaction/T = new()
T.target_name = "[command_name()] Payroll"
T.purpose = "Payment"
T.amount = objective.completion_payment
T.amount = pay
T.date = current_date_string
T.time = worldtime2text()
T.source_terminal = "\[CLASSIFIED\] Terminal #[rand(111,333)]"
+162 -195
View File
@@ -37,7 +37,6 @@
var/vampire_amount = 4
/datum/game_mode/vampire/announce()
world << "<B>The current game mode is - Vampires!</B>"
world << "<B>There are Vampires from Space Transylvania on the station, keep your blood close and neck safe!</B>"
@@ -171,7 +170,8 @@
return
/datum/game_mode/proc/grant_vampire_powers(mob/living/carbon/vampire_mob)
if(!istype(vampire_mob)) return
if(!istype(vampire_mob))
return
vampire_mob.make_vampire()
/datum/game_mode/proc/greet_vampire(var/datum/mind/vampire, var/you_are=1)
@@ -200,188 +200,131 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
var/mob/living/owner = null
var/gender = FEMALE
var/iscloaking = 0 // handles the vampire cloak toggle
var/list/powers = list() // list of available powers and passives, see defines in setup.dm
var/list/powers = list() // list of available powers and passives
var/mob/living/carbon/human/draining // who the vampire is draining of blood
var/nullified = 0 //Nullrod makes them useless for a short while.
var/upgradedRegen = 0
var/list/upgrade_tiers = list(
/obj/effect/proc_holder/spell/vampire/self/rejuvenate = 0,
/obj/effect/proc_holder/spell/vampire/targetted/hypnotise = 0,
/obj/effect/proc_holder/spell/vampire/mob_aoe/glare = 0,
/datum/vampire_passive/vision = 100,
/obj/effect/proc_holder/spell/vampire/self/shapeshift = 100,
/obj/effect/proc_holder/spell/vampire/self/cloak = 150,
/obj/effect/proc_holder/spell/vampire/targetted/disease = 150,
/obj/effect/proc_holder/spell/vampire/bats = 200,
/obj/effect/proc_holder/spell/vampire/self/screech = 200,
/datum/vampire_passive/regen = 200,
/obj/effect/proc_holder/spell/vampire/shadowstep = 250,
/obj/effect/proc_holder/spell/vampire/self/jaunt = 300,
/obj/effect/proc_holder/spell/vampire/targetted/enthrall = 300,
/datum/vampire_passive/full = 500)
/datum/vampire/New(gend = FEMALE)
gender = gend
/datum/vampire/proc/force_add_ability(path)
var/spell = new path(owner)
if(istype(spell, /obj/effect/proc_holder/spell))
owner.mind.AddSpell(spell)
powers += spell
/datum/vampire/proc/get_ability(path)
for(var/P in powers)
var/datum/power = P
if(power.type == path)
return power
return null
/datum/vampire/proc/add_ability(path)
if(!get_ability(path))
force_add_ability(path)
/datum/vampire/proc/remove_ability(path)
var/A = get_ability(path)
if(A)
powers -= A
owner.mind.spell_list.Remove(A)
qdel(A)
/mob/proc/make_vampire()
if(!mind) return
if(!mind)
return
var/datum/vampire/vamp
if(!mind.vampire)
mind.vampire = new /datum/vampire(gender)
mind.vampire.owner = src
verbs += /client/vampire/proc/vampire_rejuvinate
verbs += /client/vampire/proc/vampire_hypnotise
verbs += /client/vampire/proc/vampire_glare
//testing purposes REMOVE BEFORE PUSH TO MASTER
/*for(var/handler in typesof(/client/proc))
if(findtext("[handler]","vampire_"))
verbs += handler*/
for(var/i = 1; i <= 3; i++) // CHANGE TO 3 RATHER THAN 12 AFTER TESTING IS DONE
if(!(i in mind.vampire.powers))
mind.vampire.powers.Add(i)
vamp = new /datum/vampire(gender)
vamp.owner = src
mind.vampire = vamp
else
vamp = mind.vampire
vamp.powers.Cut()
vamp.check_vampire_upgrade(0)
for(var/n in mind.vampire.powers)
switch(n)
if(VAMP_SHAPE)
verbs += /client/vampire/proc/vampire_shapeshift
if(VAMP_VISION)
continue
if(VAMP_DISEASE)
verbs += /client/vampire/proc/vampire_disease
if(VAMP_CLOAK)
verbs += /client/vampire/proc/vampire_cloak
if(VAMP_BATS)
verbs += /client/vampire/proc/vampire_bats
if(VAMP_SCREAM)
verbs += /client/vampire/proc/vampire_screech
if(VAMP_JAUNT)
verbs += /client/vampire/proc/vampire_jaunt
if(VAMP_BLINK)
verbs += /client/vampire/proc/vampire_shadowstep
if(VAMP_SLAVE)
verbs += /client/vampire/proc/vampire_enthrall
if(VAMP_FULL)
continue
/mob/proc/remove_vampire_powers()
for(var/handler in typesof(/client/vampire/proc))
if(findtext("[handler]","vampire_"))
verbs -= handler
/datum/vampire/proc/remove_vampire_powers()
for(var/P in powers)
remove_ability(P)
owner.alpha = 255
/mob/proc/handle_bloodsucking(mob/living/carbon/human/H)
src.mind.vampire.draining = H
/datum/vampire/proc/handle_bloodsucking(mob/living/carbon/human/H)
draining = H
var/blood = 0
var/bloodtotal = 0 //used to see if we increased our blood total
var/bloodusable = 0 //used to see if we increased our blood usable
src.attack_log += text("\[[time_stamp()]\] <font color='red'>Bit [src.name] ([src.ckey]) in the neck and draining their blood</font>")
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been bit in the neck by [src.name] ([src.ckey])</font>")
log_attack("[src.name] ([src.ckey]) bit [H.name] ([H.ckey]) in the neck")
src.visible_message("\red <b>[src.name] bites [H.name]'s neck!<b>", "\red <b>You bite [H.name]'s neck and begin to drain their blood.", "\blue You hear a soft puncture and a wet sucking noise")
if(!iscarbon(src))
var/old_bloodtotal = 0 //used to see if we increased our blood total
var/old_bloodusable = 0 //used to see if we increased our blood usable
owner.attack_log += text("\[[time_stamp()]\] <font color='red'>Bit [H] ([H.ckey]) in the neck and draining their blood</font>")
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been bit in the neck by [owner] ([owner.ckey])</font>")
log_attack("[owner] ([owner.ckey]) bit [H] ([H.ckey]) in the neck")
owner.visible_message("<span class='danger'>[owner] bites [H]'s neck!</span>", "<span class='danger'>You bite [H]'s neck and begin to drain their blood.</span>", "<span class='notice'>You hear a soft puncture and a wet sucking noise.</span>")
if(!iscarbon(owner))
H.LAssailant = null
else
H.LAssailant = src
while(do_mob(src, H, 50))
if(!mind.vampire || !(mind in ticker.mode.vampires))
src << "\red Your fangs have disappeared!"
return 0
bloodtotal = src.mind.vampire.bloodtotal
bloodusable = src.mind.vampire.bloodusable
H.LAssailant = owner
while(do_mob(owner, H, 50))
if(!(owner.mind in ticker.mode.vampires))
owner << "<span class='warning'>Your fangs have disappeared!</span>"
return
old_bloodtotal = bloodtotal
old_bloodusable = bloodusable
if(!H.vessel.get_reagent_amount("blood"))
src << "\red They've got no blood left to give."
src << "<span class='warning'>They've got no blood left to give.</span>"
break
if(H.stat < 2) //alive
if(H.stat < DEAD)
blood = min(20, H.vessel.get_reagent_amount("blood")) // if they have less than 20 blood, give them the remnant else they get 20 blood
src.mind.vampire.bloodtotal += blood/2 //divide by 2 to counted the double suction since removing cloneloss -Melandor0
src.mind.vampire.bloodusable += blood/2
//H.adjust CloneLoss(10) No cloneloss -Melandor0
bloodtotal += blood / 2 //divide by 2 to counted the double suction since removing cloneloss -Melandor0
bloodusable += blood / 2
else
blood = min(5, H.vessel.get_reagent_amount("blood")) // The dead only give 5 bloods
src.mind.vampire.bloodtotal += blood
if(bloodtotal != src.mind.vampire.bloodtotal)
src << "\blue <b>You have accumulated [src.mind.vampire.bloodtotal] [src.mind.vampire.bloodtotal > 1 ? "units" : "unit"] of blood[src.mind.vampire.bloodusable != bloodusable ?", and have [src.mind.vampire.bloodusable] left to use" : "."]"
check_vampire_upgrade(mind)
H.vessel.remove_reagent("blood",25)
if(ishuman(src))
var/mob/living/carbon/human/V = src
V.nutrition = min(450,V.nutrition+(blood/2))
bloodtotal += blood
if(old_bloodtotal != bloodtotal)
owner << "<span class='notice'><b>You have accumulated [bloodtotal] [bloodtotal > 1 ? "units" : "unit"] of blood[bloodusable != old_bloodusable ? ", and have [bloodusable] left to use" : ""].</b></span>"
check_vampire_upgrade()
H.vessel.remove_reagent("blood", 25)
if(ishuman(owner))
var/mob/living/carbon/human/V = owner
V.nutrition = min(450, V.nutrition + (blood / 2))
src.mind.vampire.draining = null
src << "\blue You stop draining [H.name] of blood."
return 1
draining = null
owner << "<span class='notice'>You stop draining [H.name] of blood.</span>"
/mob/proc/check_vampire_upgrade(datum/mind/v)
if(!v) return
if(!v.vampire) return
var/datum/vampire/vamp = v.vampire
var/list/old_powers = vamp.powers.Copy()
/datum/vampire/proc/check_vampire_upgrade(announce = 1)
var/list/old_powers = powers.Copy()
// This used to be a switch statement.
// Don't use switch statements for shit like this, since blood can be any random-ass value.
// if(100) requires the blood to be at EXACTLY 100 units to trigger.
// if(blud >= 100) activates when blood is at or over 100 units.
// TODO: Make this modular.
for(var/ptype in upgrade_tiers)
var/level = upgrade_tiers[ptype]
if(bloodtotal >= level)
add_ability(ptype)
// TIER 1
if(vamp.bloodtotal >= 100)
if(!(VAMP_VISION in vamp.powers))
vamp.powers.Add(VAMP_VISION)
if(!(VAMP_SHAPE in vamp.powers))
vamp.powers.Add(VAMP_SHAPE)
if(announce)
announce_new_power(old_powers)
// TIER 2
if(vamp.bloodtotal >= 150)
if(!(VAMP_CLOAK in vamp.powers))
vamp.powers.Add(VAMP_CLOAK)
if(!(VAMP_DISEASE in vamp.powers))
vamp.powers.Add(VAMP_DISEASE)
// TIER 3
if(vamp.bloodtotal >= 200)
if(!(VAMP_BATS in vamp.powers))
vamp.powers.Add(VAMP_BATS)
if(!(VAMP_SCREAM in vamp.powers))
vamp.powers.Add(VAMP_SCREAM)
if(!(vamp.upgradedRegen)) // to prevent spamming
src << "<span class='notice'>Your rejuvination abilities have improved and will now heal you over time when used.</span>"
vamp.upgradedRegen = 1
// TIER 3.5 (/vg/)
if(vamp.bloodtotal >= 250)
if(!(VAMP_BLINK in vamp.powers))
vamp.powers.Add(VAMP_BLINK)
// TIER 4
if(vamp.bloodtotal >= 300)
if(!(VAMP_JAUNT in vamp.powers))
vamp.powers.Add(VAMP_JAUNT)
if(!(VAMP_SLAVE in vamp.powers))
vamp.powers.Add(VAMP_SLAVE)
// TIER 5
if(vamp.bloodtotal >= 500)
if(!(VAMP_FULL in vamp.powers))
vamp.powers.Add(VAMP_FULL)
announce_new_power(old_powers, vamp.powers)
/mob/proc/announce_new_power(list/old_powers, list/new_powers)
for(var/n in new_powers)
if(!(n in old_powers))
switch(n)
if(VAMP_SHAPE)
src << "\blue You have gained the shapeshifting ability, at the cost of stored blood you can change your form permanently."
verbs += /client/vampire/proc/vampire_shapeshift
if(VAMP_VISION)
src << "\blue Your vampiric vision has improved."
//no verb
if(VAMP_DISEASE)
src << "\blue You have gained the Diseased Touch ability which causes those you touch to die shortly after unless treated medically."
verbs += /client/vampire/proc/vampire_disease
if(VAMP_CLOAK)
src << "\blue You have gained the Cloak of Darkness ability which when toggled makes you near invisible in the shroud of darkness."
verbs += /client/vampire/proc/vampire_cloak
if(VAMP_BATS)
src << "\blue You have gained the Summon Bats ability."
verbs += /client/vampire/proc/vampire_bats // work in progress
if(VAMP_SCREAM)
src << "\blue You have gained the Chriopteran Screech ability which stuns anything with ears in a large radius and shatters glass in the process."
verbs += /client/vampire/proc/vampire_screech
if(VAMP_JAUNT)
src << "\blue You have gained the Mist Form ability which allows you to take on the form of mist for a short period and pass over any obstacle in your path."
verbs += /client/vampire/proc/vampire_jaunt
if(VAMP_SLAVE)
src << "\blue You have gained the Enthrall ability which at a heavy blood cost allows you to enslave a human that is not loyal to any other for a random period of time."
verbs += /client/vampire/proc/vampire_enthrall
if(VAMP_BLINK)
src << "\blue You have gained the ability to shadowstep, which makes you disappear into nearby shadows at the cost of blood."
verbs += /client/vampire/proc/vampire_shadowstep
if(VAMP_FULL)
src << "\blue You have reached your full potential and are no longer weak to the effects of anything holy and your vision has been improved greatly."
//no verb
/datum/vampire/proc/announce_new_power(list/old_powers)
for(var/p in powers)
if(!(p in old_powers))
if(istype(p, /obj/effect/proc_holder/spell/vampire))
var/obj/effect/proc_holder/spell/vampire/power = p
owner << "<span class='notice'>[power.gain_desc]</span>"
else if(istype(p, /datum/vampire_passive))
var/datum/vampire_passive/power = p
owner << "<span class='notice'>[power.gain_desc]</span>"
//prepare for copypaste
/datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind)
@@ -411,55 +354,79 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
//world << "Removed [vampire_mind.current.name] from vampire shit"
vampire_mind.current << "\red <FONT size = 3><B>The fog clouding your mind clears. You remember nothing from the moment you were enthralled until now.</B></FONT>"
/mob/living/carbon/human/proc/check_sun()
var/ax = x
var/ay = y
/datum/vampire/proc/check_sun()
var/ax = owner.x
var/ay = owner.y
for(var/i = 1 to 20)
ax += sun.dx
ay += sun.dy
var/turf/T = locate( round(ax,0.5),round(ay,0.5),z)
var/turf/T = locate(round(ax, 0.5), round(ay, 0.5), owner.z)
if(T.x == 1 || T.x==world.maxx || T.y==1 || T.y==world.maxy)
if(T.x == 1 || T.x == world.maxx || T.y == 1 || T.y == world.maxy)
break
if(T.density)
return
vamp_burn()
/mob/living/carbon/human/proc/handle_vampire()
if(hud_used)
if(!hud_used.vampire_blood_display)
hud_used.vampire_hud()
hud_used.vampire_blood_display.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[mind.vampire.bloodusable]</font></div>"
/datum/vampire/proc/handle_vampire()
if(owner.hud_used)
var/datum/hud/hud = owner.hud_used
if(!hud.vampire_blood_display)
hud.vampire_hud()
hud.vampire_blood_display.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[bloodusable]</font></div>"
handle_vampire_cloak()
if(istype(loc, /turf/space))
if(istype(owner.loc, /turf/space))
check_sun()
if(istype(loc.loc, /area/chapel) && !(VAMP_FULL in src.mind.vampire.powers))
if(istype(owner.loc.loc, /area/chapel) && !get_ability(/datum/vampire_passive/full))
vamp_burn()
mind.vampire.nullified = max(0, mind.vampire.nullified - 1)
nullified = max(0, nullified - 1)
mob/living/carbon/human/proc/vamp_burn()
if(prob(35))
switch(health)
if(80 to 100)
src << "\red Your skin flakes away..."
if(60 to 80)
src << "<span class='warning'>Your skin sizzles!</span>"
if((-INFINITY) to 60)
if(!on_fire)
src << "<b>\red Your skin catches fire!</b>"
else
src << "<b>\red You continue to burn!</b>"
fire_stacks += 5
IgniteMob()
emote("scream")
/datum/vampire/proc/handle_vampire_cloak()
if(!ishuman(owner))
owner.alpha = 255
return
var/turf/simulated/T = get_turf(owner)
var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
var/light_available
if(L)
light_available = L.get_clamped_lum(0.5) * 10
else
switch(health)
light_available = 10
if(!istype(T))
return 0
if(!iscloaking)
owner.alpha = 255
return 0
if(light_available <= 2)
owner.alpha = round((255 * 0.15))
return 1
else
owner.alpha = round((255 * 0.80))
/datum/vampire/proc/vamp_burn()
if(prob(35))
switch(owner.health)
if(80 to 100)
owner << "<span class='warning'>Your skin flakes away...</span>"
if(60 to 80)
owner << "<span class='warning'>Your skin sizzles!</span>"
if((-INFINITY) to 60)
fire_stacks++
IgniteMob()
adjustFireLoss(3)
return
if(!owner.on_fire)
owner << "<span class='danger'>Your skin catches fire!</span>"
else
owner << "<span class='danger'>You continue to burn!</span>"
owner.fire_stacks += 5
owner.IgniteMob()
owner.emote("scream")
else
switch(owner.health)
if((-INFINITY) to 60)
owner.fire_stacks++
owner.IgniteMob()
owner.adjustFireLoss(3)
return
+448 -408
View File
@@ -1,296 +1,307 @@
//This should hold all the vampire related powers
/obj/effect/proc_holder/spell/vampire
panel = "Vampire"
school = "vampire"
clothes_req = 0
range = 1
charge_max = 1800
action_background_icon_state = "bg_vampire"
var/required_blood = 0
var/gain_desc = null
/mob/proc/vampire_power(required_blood=0, max_stat=0)
/obj/effect/proc_holder/spell/vampire/New()
..()
if(!gain_desc)
gain_desc = "You have gained \the [src] ability."
if(!src.mind) return 0
if(!ishuman(src))
src << "<span class='warning'>You are in too weak of a form to do this!</span>"
/obj/effect/proc_holder/spell/vampire/cast_check(skipcharge = 0, mob/living/user = usr)
if(!user.mind)
return 0
if(!ishuman(user))
user << "<span class='warning'>You are in too weak of a form to do this!</span>"
return 0
var/datum/vampire/vampire = src.mind.vampire
var/datum/vampire/vampire = user.mind.vampire
if(!vampire)
log_to_dd("[src] has vampire verbs but isn't a vampire.")
return 0
var/fullpower = (VAMP_FULL in vampire.powers)
var/fullpower = vampire.get_ability(/datum/vampire_passive/full)
if(src.stat > max_stat)
src << "<span class='warning'>You are incapacitated.</span>"
if(user.stat >= DEAD)
user << "<span class='warning'>Not when you're dead!</span>"
return 0
if(vampire.nullified)
if(!fullpower)
src << "<span class='warning'>Something is blocking your powers!</span>"
return 0
if(vampire.nullified && !fullpower)
user << "<span class='warning'>Something is blocking your powers!</span>"
return 0
if(vampire.bloodusable < required_blood)
src << "<span class='warning'>You require at least [required_blood] units of usable blood to do that!</span>"
user << "<span class='warning'>You require at least [required_blood] units of usable blood to do that!</span>"
return 0
//chapel check
if(istype(loc.loc, /area/chapel))
if(!fullpower)
src << "<span class='warning'>Your powers are useless on this holy ground.</span>"
return 0
return 1
if(istype(loc.loc, /area/chapel) && !fullpower)
user << "<span class='warning'>Your powers are useless on this holy ground.</span>"
return 0
return ..()
/mob/proc/vampire_affected(datum/mind/M)
/obj/effect/proc_holder/spell/vampire/can_cast(mob/user = usr)
if(!user.mind)
return 0
if(!ishuman(user))
return 0
var/datum/vampire/vampire = user.mind.vampire
if(!vampire)
return 0
var/fullpower = vampire.get_ability(/datum/vampire_passive/full)
if(user.stat >= DEAD)
return 0
if(vampire.nullified && !fullpower)
return 0
if(vampire.bloodusable < required_blood)
return 0
if(istype(loc.loc, /area/chapel) && !fullpower)
return 0
return ..()
/obj/effect/proc_holder/spell/vampire/proc/affects(mob/target, mob/user = usr)
//Other vampires aren't affected
if(mind && mind.vampire) return 0
if(target.mind && target.mind.vampire)
return 0
//Vampires who have reached their full potential can affect nearly everything
if(M && M.vampire && (VAMP_FULL in M.vampire.powers))
if(user.mind.vampire.get_ability(/datum/vampire_passive/full))
return 1
//Chaplains are resistant to vampire powers
if(mind && mind.assigned_role == "Chaplain")
if(target.mind && target.mind.assigned_role == "Chaplain")
return 0
return 1
/mob/proc/vampire_can_reach(mob/M as mob, active_range = 1)
if(M.loc == src.loc) return 1 //target and source are in the same thing
if(!isturf(src.loc) || !isturf(M.loc)) return 0 //One is inside, the other is outside something.
if(Adjacent(M))//if(AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, active_range)) //If a path exists, good!
return 1
return 0
/obj/effect/proc_holder/spell/vampire/proc/can_reach(mob/M as mob)
if(M.loc == usr.loc)
return 1 //target and source are in the same thing
return M in oview_or_orange(range, usr, selection_type)
/mob/proc/vampire_active(required_blood=0, max_stat=0, active_range=1)
var/pass = vampire_power(required_blood, max_stat)
if(!pass) return
var/datum/vampire/vampire = mind.vampire
if(!vampire) return
var/list/victims = list()
for(var/mob/living/carbon/C in view(active_range))
victims += C
var/mob/living/carbon/T = input(src, "Victim?") as null|anything in victims
/obj/effect/proc_holder/spell/vampire/before_cast(list/targets)
// sanity check before we cast
if(!usr.mind || !usr.mind.vampire)
targets.Cut()
return
if(!T) return
if(!(T in view(active_range))) return
if(!vampire_can_reach(T, active_range)) return
if(!vampire_power(required_blood, max_stat)) return
return T
if(!required_blood)
return
/client/vampire/proc/vampire_rejuvinate()
set category = "Abilities"
set name = "Rejuvinate "
set desc= "Flush your system with spare blood to remove any incapacitating effects"
var/datum/mind/M = usr.mind
if(!M) return
if(M.current.vampire_power(0, 1))
M.current.SetWeakened(0)
M.current.SetStunned(0)
M.current.SetParalysis(0)
M.current.adjustStaminaLoss(-75)
//M.vampire.bloodusable -= 10
M.current << "\blue You flush your system with clean blood and remove any incapacitating effects."
spawn(1)
if(M.vampire.bloodtotal >= 200)
for(var/i = 0; i < 5; i++)
M.current.adjustBruteLoss(-2)
M.current.adjustOxyLoss(-5)
M.current.adjustToxLoss(-2)
M.current.adjustFireLoss(-2)
sleep(35)
M.current.verbs -= /client/vampire/proc/vampire_rejuvinate
spawn(200)
M.current.verbs += /client/vampire/proc/vampire_rejuvinate
// enforce blood
var/datum/vampire/vampire = usr.mind.vampire
/client/vampire/proc/vampire_hypnotise()
set category = "Abilities"
set name = "Hypnotise (20)"
set desc= "A piercing stare that incapacitates your victim for a good length of time."
var/datum/mind/M = usr.mind
if(!M) return
if(required_blood <= vampire.bloodusable)
vampire.bloodusable -= required_blood
else
// stop!!
targets.Cut()
var/mob/living/carbon/C = M.current.vampire_active(20, 0, 1)
if(targets.len)
usr << "<span class='notice'><b>You have [vampire.bloodusable] left to use.</b></span>"
if(!C) return
M.current.visible_message("<span class='warning'>[M]'s eyes flash briefly as he stares into [C.name]'s eyes</span>")
M.current.remove_vampire_blood(20)
M.current.verbs -= /client/vampire/proc/vampire_hypnotise
spawn(1800)
M.current.verbs += /client/vampire/proc/vampire_hypnotise
if(do_mob(M.current, C, 50))
if(C.mind && C.mind.vampire)
M.current << "\red Your piercing gaze fails to knock out [C.name]."
C << "\blue [M.current]'s feeble gaze is ineffective."
return
/obj/effect/proc_holder/spell/vampire/targetted/choose_targets(mob/user = usr)
var/list/possible_targets[0]
for(var/mob/living/carbon/C in oview_or_orange(range, user, selection_type))
possible_targets += C
var/mob/living/carbon/T = input(user, "Choose your victim.", name) as null|mob in possible_targets
if(!T || !can_reach(T))
revert_cast(user)
return
perform(list(T))
/obj/effect/proc_holder/spell/vampire/self/choose_targets(mob/user = usr)
perform(list(user))
/obj/effect/proc_holder/spell/vampire/mob_aoe/choose_targets(mob/user = usr)
var/list/targets[0]
for(var/mob/living/carbon/C in oview_or_orange(range, user, selection_type))
targets += C
if(!targets.len)
revert_cast(user)
return
perform(targets)
/datum/vampire_passive
var/gain_desc
/datum/vampire_passive/New()
..()
if(!gain_desc)
gain_desc = "You have gained \the [src] ability."
////////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/effect/proc_holder/spell/vampire/self/rejuvenate
name = "Rejuvenate"
desc= "Flush your system with spare blood to remove any incapacitating effects."
action_icon_state = "vampire_rejuvinate"
charge_max = 200
stat_allowed = 1
/obj/effect/proc_holder/spell/vampire/self/rejuvenate/cast()
var/mob/living/U = usr
usr.SetWeakened(0)
usr.SetStunned(0)
usr.SetParalysis(0)
U.adjustStaminaLoss(-75)
usr << "<span class='notice'>You flush your system with clean blood and remove any incapacitating effects.</span>"
spawn(1)
if(usr.mind.vampire.get_ability(/datum/vampire_passive/regen))
for(var/i = 1 to 5)
U.adjustBruteLoss(-2)
U.adjustOxyLoss(-5)
U.adjustToxLoss(-2)
U.adjustFireLoss(-2)
sleep(35)
/obj/effect/proc_holder/spell/vampire/targetted/hypnotise
name = "Hypnotise (20)"
desc= "A piercing stare that incapacitates your victim for a good length of time."
action_icon_state = "vampire_hypnotise"
required_blood = 20
/obj/effect/proc_holder/spell/vampire/targetted/hypnotise/cast(list/targets)
for(var/mob/living/target in targets)
usr.visible_message("<span class='warning'>[usr]'s eyes flash briefly as he stares into [target]'s eyes</span>")
if(do_mob(usr, target, 50))
if(!affects(target))
usr << "<span class='warning'>Your piercing gaze fails to knock out [target].</span>"
target << "\blue [usr]'s feeble gaze is ineffective."
else
usr << "<span class='warning'>Your piercing gaze knocks out [target].</span>"
target << "<span class='warning'>You find yourself unable to move and barely able to speak.</span>"
target.Weaken(10)
target.Stun(10)
target.stuttering = 10
else
M.current << "\red Your piercing gaze knocks out [C.name]."
C << "\red You find yourself unable to move and barely able to speak"
C.Weaken(10)
C.Stun(10)
C.stuttering = 10
else
M.current << "\red You broke your gaze."
revert_cast(usr)
usr << "<span class='warning'>You broke your gaze.</span>"
/obj/effect/proc_holder/spell/vampire/targetted/disease
name = "Diseased Touch (100)"
desc = "Touches your victim with infected blood giving them the Shutdown Syndrome which quickly shutsdown their major organs resulting in a quick painful death."
gain_desc = "You have gained the Diseased Touch ability which causes those you touch to die shortly after unless treated medically."
action_icon_state = "vampire_disease"
required_blood = 100
/obj/effect/proc_holder/spell/vampire/targetted/disease/cast(list/targets)
for(var/mob/living/carbon/target in targets)
usr << "<span class='warning'>You stealthily infect [target] with your diseased touch.</span>"
target.help_shake_act(usr)
if(!affects(target))
usr << "<span class='warning'>They seem to be unaffected.</span>"
continue
var/datum/disease2/disease/shutdown = new /datum/disease2/disease
var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder
var/datum/disease2/effect/organs/vampire/O = new /datum/disease2/effect/organs/vampire
holder.effect += O
holder.chance = 10
shutdown.infectionchance = 100
shutdown.antigen |= text2num(pick(ANTIGENS))
shutdown.antigen |= text2num(pick(ANTIGENS))
shutdown.spreadtype = "None"
shutdown.uniqueID = rand(0,10000)
shutdown.effects += holder
shutdown.speed = 1
shutdown.stage = 2
shutdown.clicks = 185
infect_virus2(target, shutdown, 0)
/obj/effect/proc_holder/spell/vampire/mob_aoe/glare
name = "Glare"
desc = "A scary glare that incapacitates people for a short while around you."
action_icon_state = "vampire_glare"
charge_max = 300
stat_allowed = 1
/obj/effect/proc_holder/spell/vampire/mob_aoe/glare/cast(list/targets)
usr.visible_message("<span class='warning'><b>[usr]'s eyes emit a blinding flash!</span>")
if(istype(usr:glasses, /obj/item/clothing/glasses/sunglasses/blindfold))
usr << "<span class='warning'>You're blindfolded!</span>"
return
for(var/mob/living/target in targets)
if(!affects(target))
continue
target.Stun(5)
target.Weaken(5)
target.stuttering = 20
target << "<span class='warning'>You are blinded by [usr]'s glare.</span>"
/client/vampire/proc/vampire_disease()
set category = "Abilities"
set name = "Diseased Touch (100)"
set desc = "Touches your victim with infected blood giving them the Shutdown Syndrome which quickly shutsdown their major organs resulting in a quick painful death."
var/datum/mind/M = usr.mind
if(!M) return
/obj/effect/proc_holder/spell/vampire/self/shapeshift
name = "Shapeshift (50)"
desc = "Changes your name and appearance at the cost of 50 blood and has a cooldown of 3 minutes."
gain_desc = "You have gained the shapeshifting ability, at the cost of stored blood you can change your form permanently."
action_icon_state = "genetic_poly"
required_blood = 50
var/mob/living/carbon/C = M.current.vampire_active(100, 0, 1)
if(!C) return
if(!M.current.vampire_can_reach(C, 1))
M.current << "\red <b>You cannot touch [C.name] from where you are standing!"
return
M.current << "\red You stealthily infect [C.name] with your diseased touch."
/*var/t_him = "it"
if (src.gender == MALE)
t_him = "him"
else if (src.gender == FEMALE)
t_him = "her"
M.current.visible_message("\blue [M] shakes [src] trying to wake [t_him] up!" )
playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)*/
C.help_shake_act(M.current) // i use da colon
if(!C.vampire_affected(M))
M.current << "\red They seem to be unaffected."
return
var/datum/disease2/disease/shutdown = new /datum/disease2/disease
var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder
var/datum/disease2/effect/organs/vampire/O = new /datum/disease2/effect/organs/vampire
holder.effect += O
holder.chance = 10
shutdown.infectionchance = 100
shutdown.antigen |= text2num(pick(ANTIGENS))
shutdown.antigen |= text2num(pick(ANTIGENS))
shutdown.spreadtype = "None"
shutdown.uniqueID = rand(0,10000)
shutdown.effects += holder
shutdown.speed = 1
shutdown.stage = 2
shutdown.clicks = 185
infect_virus2(C,shutdown,0)
M.current.remove_vampire_blood(100)
M.current.verbs -= /client/vampire/proc/vampire_disease
spawn(1800) M.current.verbs += /client/vampire/proc/vampire_disease
/obj/effect/proc_holder/spell/vampire/self/shapeshift/cast()
usr.visible_message("<span class='warning'>[usr] transforms!</span>")
usr.client.prefs.real_name = usr.generate_name()
usr.client.prefs.random_character()
usr.client.prefs.copy_to(usr)
usr.regenerate_icons()
/client/vampire/proc/vampire_glare()
set category = "Abilities"
set name = "Glare"
set desc= "A scary glare that incapacitates people for a short while around you."
var/datum/mind/M = usr.mind
if(!M) return
if(M.current.vampire_power(0, 1))
M.current.visible_message("\red <b>[M.current]'s eyes emit a blinding flash!")
//M.vampire.bloodusable -= 10
M.current.verbs -= /client/vampire/proc/vampire_glare
spawn(300)
M.current.verbs += /client/vampire/proc/vampire_glare
if(istype(M.current:glasses, /obj/item/clothing/glasses/sunglasses/blindfold))
M.current << "<span class='warning'>You're blindfolded!</span>"
return
for(var/mob/living/carbon/C in view(1))
if(!C.vampire_affected(M)) continue
if(!M.current.vampire_can_reach(C, 1)) continue
C.Stun(5)
C.Weaken(5)
C.stuttering = 20
C << "\red You are blinded by [M.current]'s glare"
/obj/effect/proc_holder/spell/vampire/self/screech
name = "Chiroptean Screech (30)"
desc = "An extremely loud shriek that stuns nearby humans and breaks windows as well."
gain_desc = "You have gained the Chriopteran Screech ability which stuns anything with ears in a large radius and shatters glass in the process."
action_icon_state = "vampire_screech"
required_blood = 30
/client/vampire/proc/vampire_shapeshift()
set category = "Abilities"
set name = "Shapeshift (50)"
set desc = "Changes your name and appearance at the cost of 50 blood and has a cooldown of 3 minutes."
var/datum/mind/M = usr.mind
if(!M) return
if(M.current.vampire_power(50, 0))
M.current.visible_message("<span class='warning'>[M.current.name] transforms!</span>")
M.current.client.prefs.real_name = M.current.generate_name() //random_name(M.current.gender)
M.current.client.prefs.random_character()
M.current.client.prefs.copy_to(M.current)
M.current.regenerate_icons()
M.current.remove_vampire_blood(50)
M.current.verbs -= /client/vampire/proc/vampire_shapeshift
spawn(1800) M.current.verbs += /client/vampire/proc/vampire_shapeshift
/obj/effect/proc_holder/spell/vampire/self/screech/cast()
usr.visible_message("<span class='warning'>[usr] lets out an ear piercing shriek!</span>", "<span class='warning'>You let out a loud shriek.</span>", "<span class='warning'>You hear a loud painful shriek!</span>")
for(var/mob/living/carbon/C in hearers(4))
if(C == usr)
continue
if(ishuman(C) && (C:l_ear || C:r_ear) && istype((C:l_ear || C:r_ear), /obj/item/clothing/ears/earmuffs))
continue
if(!affects(C))
continue
C << "<span class='warning'><font size='3'><b>You hear a ear piercing shriek and your senses dull!</font></b></span>"
C.Weaken(4)
C.ear_deaf = 20
C.stuttering = 20
C.Stun(4)
C.Jitter(150)
for(var/obj/structure/window/W in view(4))
W.destroy()
playsound(usr.loc, 'sound/effects/creepyshriek.ogg', 100, 1)
/client/vampire/proc/vampire_screech()
set category = "Abilities"
set name = "Chiroptean Screech (30)"
set desc = "An extremely loud shriek that stuns nearby humans and breaks windows as well."
var/datum/mind/M = usr.mind
if(!M) return
if(M.current.vampire_power(30, 0))
M.current.visible_message("\red [M.current.name] lets out an ear piercing shriek!", "\red You let out a loud shriek.", "\red You hear a loud painful shriek!")
for(var/mob/living/carbon/C in hearers(4, M.current))
if(C == M.current) continue
if(ishuman(C) && (C:l_ear || C:r_ear) && istype((C:l_ear || C:r_ear), /obj/item/clothing/ears/earmuffs)) continue
if(!C.vampire_affected(M)) continue
C << "<span class='warning'><font size='3'><b>You hear a ear piercing shriek and your senses dull!</font></b></span>"
C.Weaken(4)
C.ear_deaf = 20
C.stuttering = 20
C.Stun(4)
C.Jitter(150)
for(var/obj/structure/window/W in view(4))
W.destroy()
playsound(M.current.loc, 'sound/effects/creepyshriek.ogg', 100, 1)
M.current.remove_vampire_blood(30)
M.current.verbs -= /client/vampire/proc/vampire_screech
spawn(1800) M.current.verbs += /client/vampire/proc/vampire_screech
/obj/effect/proc_holder/spell/vampire/targetted/enthrall
name = "Enthrall (300)"
desc = "You use a large portion of your power to sway those loyal to none to be loyal to you only."
gain_desc = "You have gained the Enthrall ability which at a heavy blood cost allows you to enslave a human that is not loyal to any other for a random period of time."
action_icon_state = "vampire_enthrall"
required_blood = 300
/client/vampire/proc/vampire_enthrall()
set category = "Abilities"
set name = "Enthrall (300)"
set desc = "You use a large portion of your power to sway those loyal to none to be loyal to you only."
var/datum/mind/M = usr.mind
if(!M) return
var/mob/living/carbon/C = M.current.vampire_active(300, 0, 1)
if(!C) return
M.current.visible_message("\red [M.current.name] bites [C.name]'s neck!", "\red You bite [C.name]'s neck and begin the flow of power.")
C << "<span class='warning'>You feel the tendrils of evil invade your mind.</span>"
if(!ishuman(C))
M.current << "\red You can only enthrall humans"
return
/obj/effect/proc_holder/spell/vampire/targetted/enthrall/cast(list/targets)
for(var/mob/living/target in targets)
usr.visible_message("<span class='warning'>[usr] bites [target]'s neck!</span>", "<span class='warning'>You bite [target]'s neck and begin the flow of power.</span>")
target << "<span class='warning'>You feel the tendrils of evil invade your mind.</span>"
if(!ishuman(target))
usr << "<span class='warning'>You can only enthrall humans.</span>"
break
if(do_mob(usr, target, 50))
if(can_enthrall(usr, target))
handle_enthrall(usr, target)
else
revert_cast(usr)
usr << "<span class='warning'>You or your target either moved or you dont have enough usable blood.</span>"
if(do_mob(M.current, C, 50))
if(M.current.can_enthrall(C) && M.current.vampire_power(300, 0)) // recheck
M.current.handle_enthrall(C)
M.current.remove_vampire_blood(300)
M.current.verbs -= /client/vampire/proc/vampire_enthrall
spawn(1800) M.current.verbs += /client/vampire/proc/vampire_enthrall
else
M.current << "\red You or your target either moved or you dont have enough usable blood."
return
/client/vampire/proc/vampire_cloak()
set category = "Abilities"
set name = "Cloak of Darkness (toggle)"
set desc = "Toggles whether you are currently cloaking yourself in darkness."
var/datum/mind/M = usr.mind
if(!M) return
if(M.current.vampire_power(0, 0))
M.vampire.iscloaking = !M.vampire.iscloaking
M.current << "\blue You will now be [M.vampire.iscloaking ? "hidden" : "seen"] in darkness."
/mob/proc/handle_vampire_cloak()
if(!mind || !mind.vampire || !ishuman(src))
alpha = 255
return
var/turf/simulated/T = get_turf(src)
var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
var/light_available
if(L)
light_available = L.get_clamped_lum(0.5)*10
else
light_available = 10
if(!istype(T))
return 0
if(!mind.vampire.iscloaking)
alpha = 255
return 0
if(light_available <= 2)
alpha = round((255 * 0.15))
return 1
else
alpha = round((255 * 0.80))
/mob/proc/can_enthrall(mob/living/carbon/C)
/obj/effect/proc_holder/spell/vampire/targetted/enthrall/proc/can_enthrall(mob/living/user, mob/living/carbon/C)
var/enthrall_safe = 0
for(var/obj/item/weapon/implant/loyalty/L in C)
if(L && L.implanted)
@@ -301,197 +312,226 @@
enthrall_safe = 1
break
if(!C)
log_to_dd("something bad happened on enthralling a mob src is [src] [src.key] \ref[src]")
log_to_dd("something bad happened on enthralling a mob, attacker is [user] [user.key] \ref[user]")
return 0
if(!C.mind)
src << "\red [C.name]'s mind is not there for you to enthrall."
user << "<span class='warning>[C.name]'s mind is not there for you to enthrall.</span>"
return 0
if(enthrall_safe || ( C.mind in ticker.mode.vampires )||( C.mind.vampire )||( C.mind in ticker.mode.vampire_enthralled ))
C.visible_message("\red [C] seems to resist the takeover!", "\blue You feel a familiar sensation in your skull that quickly dissipates.")
C.visible_message("<span class='warning'>[C] seems to resist the takeover!</span>", "<span class='notice'>You feel a familiar sensation in your skull that quickly dissipates.</span>")
return 0
if(!C.vampire_affected(mind))
C.visible_message("\red [C] seems to resist the takeover!", "\blue Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil")
if(!affects(C))
C.visible_message("<span class='warning'>[C] seems to resist the takeover!</span>", "<span class='notice'>Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil.</span>")
if(!ishuman(C))
src << "\red You can only enthrall humans!"
user << "<span class='warning'>You can only enthrall humans!</span>"
return 0
return 1
/mob/proc/handle_enthrall(mob/living/carbon/human/H as mob)
/obj/effect/proc_holder/spell/vampire/targetted/enthrall/proc/handle_enthrall(mob/living/user, mob/living/carbon/human/H as mob)
if(!istype(H))
src << "<b>\red SOMETHING WENT WRONG, YELL AT POMF OR NEXIS</b>"
return 0
var/ref = "\ref[src.mind]"
var/ref = "\ref[user.mind]"
if(!(ref in ticker.mode.vampire_thralls))
ticker.mode.vampire_thralls[ref] = list(H.mind)
else
ticker.mode.vampire_thralls[ref] += H.mind
ticker.mode.update_vampire_icons_added(H.mind)
ticker.mode.update_vampire_icons_added(src.mind)
var/datum/mindslaves/slaved = src.mind.som
ticker.mode.update_vampire_icons_added(user.mind)
var/datum/mindslaves/slaved = user.mind.som
H.mind.som = slaved
slaved.serv += H
slaved.add_serv_hud(src.mind,"vampire")//handles master servent icons
slaved.add_serv_hud(H.mind,"vampthrall")
slaved.add_serv_hud(user.mind, "vampire")//handles master servent icons
slaved.add_serv_hud(H.mind, "vampthrall")
ticker.mode.vampire_enthralled.Add(H.mind)
ticker.mode.vampire_enthralled[H.mind] = src.mind
ticker.mode.vampire_enthralled[H.mind] = user.mind
H.mind.special_role = "VampThrall"
H << "<b>\red You have been Enthralled by [name]. Follow their every command.</b>"
src << "\red You have successfully Enthralled [H.name]. <i>If they refuse to do as you say just adminhelp.</i>"
log_admin("[ckey(src.key)] has mind-slaved [ckey(H.key)].")
H << "<span class='danger'>You have been Enthralled by [user]. Follow their every command.</span>"
src << "<span class='warning'>You have successfully Enthralled [H]. <i>If they refuse to do as you say just adminhelp.</i></span>"
log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].")
/client/vampire/proc/vampire_bats()
set category = "Abilities"
set name = "Summon Bats (75)"
set desc = "You summon a pair of space bats who attack nearby targets until they or their target is dead."
var/datum/mind/M = usr.mind
if(!M) return
if(M.current.vampire_power(75, 0))
var/list/turf/locs = new
var/number = 0
for(var/direction in alldirs) //looking for bat spawns
if(locs.len == 2) //we found 2 locations and thats all we need
break
var/turf/T = get_step(M.current,direction) //getting a loc in that direction
if(AStar(M.current.loc, T, /turf/proc/AdjacentTurfs, /turf/proc/Distance, 1, simulated_only = 0)) // if a path exists, so no dense objects in the way its valid salid
locs += T
if(locs.len)
for(var/turf/tospawn in locs)
number++
new /mob/living/simple_animal/hostile/scarybat(tospawn, M.current)
if(number != 2) //if we only found one location, spawn one on top of our tile so we dont get stacked bats
new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current)
else // we had no good locations so make two on top of us
new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current)
new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current)
M.current.remove_vampire_blood(75)
M.current.verbs -= /client/vampire/proc/vampire_bats
spawn(1200) M.current.verbs += /client/vampire/proc/vampire_bats
/obj/effect/proc_holder/spell/vampire/self/cloak
name = "Cloak of Darkness"
desc = "Toggles whether you are currently cloaking yourself in darkness."
gain_desc = "You have gained the Cloak of Darkness ability which when toggled makes you near invisible in the shroud of darkness."
action_icon_state = "vampire_cloak"
charge_max = 10
/client/vampire/proc/vampire_jaunt()
//AHOY COPY PASTE INCOMING
set category = "Abilities"
set name = "Mist Form (30)"
set desc = "You take on the form of mist for a short period of time."
/obj/effect/proc_holder/spell/vampire/self/cloak/New()
..()
update_name()
/obj/effect/proc_holder/spell/vampire/self/cloak/proc/update_name()
var/mob/living/user = loc
if(!ishuman(user) || !user.mind || !user.mind.vampire)
return
name = "[initial(name)] ([user.mind.vampire.iscloaking ? "Deactivate" : "Activate"])"
/obj/effect/proc_holder/spell/vampire/self/cloak/cast()
var/datum/vampire/V = usr.mind.vampire
V.iscloaking = !V.iscloaking
update_name()
usr << "<span class='notice'>You will now be [V.iscloaking ? "hidden" : "seen"] in darkness.</span>"
/obj/effect/proc_holder/spell/vampire/bats
name = "Summon Bats (75)"
desc = "You summon a pair of space bats who attack nearby targets until they or their target is dead."
gain_desc = "You have gained the Summon Bats ability."
action_icon_state = "vampire_bats"
charge_max = 1200
required_blood = 75
var/num_bats = 2
/obj/effect/proc_holder/spell/vampire/bats/choose_targets(mob/user = usr)
var/list/turf/locs = new
for(var/direction in alldirs) //looking for bat spawns
if(locs.len == num_bats) //we found 2 locations and thats all we need
break
var/turf/T = get_step(usr, direction) //getting a loc in that direction
if(AStar(usr.loc, T, /turf/proc/AdjacentTurfs, /turf/proc/Distance, 1, simulated_only = 0)) // if a path exists, so no dense objects in the way its valid salid
locs += T
// pad with player location
for(var/i = locs.len + 1 to num_bats)
locs += user.loc
perform(locs)
/obj/effect/proc_holder/spell/vampire/bats/cast(list/targets)
for(var/T in targets)
new /mob/living/simple_animal/hostile/scarybat(T, usr)
/obj/effect/proc_holder/spell/vampire/self/jaunt
name = "Mist Form (30)"
desc = "You take on the form of mist for a short period of time."
gain_desc = "You have gained the Mist Form ability which allows you to take on the form of mist for a short period and pass over any obstacle in your path."
action_icon_state = "jaunt"
charge_max = 600
required_blood = 30
var/jaunt_duration = 50 //in deciseconds
var/datum/mind/M = usr.mind
if(!M) return
if(M.current.vampire_power(30, 0))
if(M.current.buckled) M.current.buckled.unbuckle_mob()
spawn(0)
var/originalloc = get_turf(M.current.loc)
var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt( originalloc )
var/atom/movable/overlay/animation = new /atom/movable/overlay( originalloc )
animation.name = "water"
animation.density = 0
animation.anchored = 1
animation.icon = 'icons/mob/mob.dmi'
animation.icon_state = "liquify"
animation.layer = 5
animation.master = holder
M.current.ExtinguishMob()
if(M.current.buckled)
M.current.buckled.unbuckle_mob()
flick("liquify",animation)
M.current.loc = holder
M.current.client.eye = holder
var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread()
steam.set_up(10, 0, originalloc)
steam.start()
sleep(jaunt_duration)
var/mobloc = get_turf(M.current.loc)
if(get_area(mobloc) == /area/security/armoury/gamma)
M << "A strange energy repels you!"
mobloc = originalloc
animation.loc = mobloc
steam.location = mobloc
steam.start()
M.current.canmove = 0
sleep(20)
flick("reappear",animation)
sleep(5)
if(!M.current.Move(mobloc))
for(var/direction in list(1,2,4,8,5,6,9,10))
var/turf/T = get_step(mobloc, direction)
if(T)
if(M.current.Move(T))
break
M.current.canmove = 1
M.current.client.eye = M.current
qdel(animation)
qdel(holder)
M.current.remove_vampire_blood(30)
M.current.verbs -= /client/vampire/proc/vampire_jaunt
spawn(600) M.current.verbs += /client/vampire/proc/vampire_jaunt
/obj/effect/proc_holder/spell/vampire/self/jaunt/cast()
if(usr.buckled)
usr.buckled.unbuckle_mob()
spawn(0)
var/mob/living/U = usr
var/originalloc = get_turf(usr.loc)
var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt(originalloc)
var/atom/movable/overlay/animation = new /atom/movable/overlay(originalloc)
animation.name = "water"
animation.density = 0
animation.anchored = 1
animation.icon = 'icons/mob/mob.dmi'
animation.icon_state = "liquify"
animation.layer = 5
animation.master = holder
U.ExtinguishMob()
if(usr.buckled)
usr.buckled.unbuckle_mob()
flick("liquify", animation)
usr.forceMove(holder)
usr.client.eye = holder
var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread()
steam.set_up(10, 0, originalloc)
steam.start()
sleep(jaunt_duration)
var/mobloc = get_turf(usr.loc)
if(get_area(mobloc) == /area/security/armoury/gamma)
usr << "A strange energy repels you!"
mobloc = originalloc
animation.loc = mobloc
steam.location = mobloc
steam.start()
usr.canmove = 0
sleep(20)
flick("reappear",animation)
sleep(5)
if(!usr.Move(mobloc))
for(var/direction in list(1,2,4,8,5,6,9,10))
var/turf/T = get_step(mobloc, direction)
if(T)
if(usr.Move(T))
break
usr.canmove = 1
usr.client.eye = usr
qdel(animation)
qdel(holder)
// Blink for vamps
// Less smoke spam.
/client/vampire/proc/vampire_shadowstep()
set category = "Abilities"
set name = "Shadowstep (30)"
set desc = "Vanish into the shadows."
var/datum/mind/M = usr.mind
if(!M) return
/obj/effect/proc_holder/spell/vampire/shadowstep
name = "Shadowstep (30)"
desc = "Vanish into the shadows."
gain_desc = "You have gained the ability to shadowstep, which makes you disappear into nearby shadows at the cost of blood."
action_icon_state = "blink"
charge_max = 20
required_blood = 30
// Teleport radii
var/inner_tele_radius = 0
var/outer_tele_radius = 6
// Maximum lighting_lumcount.
var/max_lum = 1
if(M.current.vampire_power(30, 0))
if(M.current.buckled) M.current.buckled.unbuckle_mob()
spawn(0)
var/list/turfs = new/list()
for(var/turf/T in range(usr,outer_tele_radius))
if(T in range(usr,inner_tele_radius)) continue
if(istype(T,/turf/space)) continue
if(T.density) continue
if(T.x>world.maxx-outer_tele_radius || T.x<outer_tele_radius) continue //putting them at the edge is dumb
if(T.y>world.maxy-outer_tele_radius || T.y<outer_tele_radius) continue
/obj/effect/proc_holder/spell/vampire/shadowstep/choose_targets(mob/user = usr)
var/list/turfs = new/list()
for(var/turf/T in range(user, outer_tele_radius))
if(T in range(user, inner_tele_radius))
continue
if(istype(T, /turf/space))
continue
if(T.density)
continue
if(T.x > world.maxx-outer_tele_radius || T.x < outer_tele_radius)
continue //putting them at the edge is dumb
if(T.y > world.maxy-outer_tele_radius || T.y < outer_tele_radius)
continue
var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
var/lightingcount = L.get_clamped_lum(0.5)*10
var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
var/lightingcount = L.get_clamped_lum(0.5) * 10
// LIGHTING CHECK
if(lightingcount > max_lum) continue
turfs += T
// LIGHTING CHECK
if(lightingcount > max_lum)
continue
turfs += T
if(!turfs.len)
usr << "\red You cannot find darkness to step to."
return
var/turf/picked = pick(turfs)
if(!picked || !isturf(picked))
return
M.current.ExtinguishMob()
if(M.current.buckled)
M.current.buckled.unbuckle_mob()
var/atom/movable/overlay/animation = new /atom/movable/overlay( get_turf(usr) )
animation.name = usr.name
animation.density = 0
animation.anchored = 1
animation.icon = usr.icon
animation.alpha = 127
animation.layer = 5
//animation.master = src
usr.loc = picked
spawn(10)
qdel(animation)
M.current.remove_vampire_blood(30)
M.current.verbs -= /client/vampire/proc/vampire_shadowstep
spawn(20)
M.current.verbs += /client/vampire/proc/vampire_shadowstep
/mob/proc/remove_vampire_blood(amount = 0)
var/bloodold
if(!mind || !mind.vampire)
if(!turfs.len)
revert_cast(user)
user << "\red You cannot find darkness to step to."
return
bloodold = mind.vampire.bloodusable
mind.vampire.bloodusable = max(0, (mind.vampire.bloodusable - amount))
if(bloodold != mind.vampire.bloodusable)
src << "\blue <b>You have [mind.vampire.bloodusable] left to use.</b>"
perform(turfs)
/obj/effect/proc_holder/spell/vampire/shadowstep/cast(list/targets)
if(usr.buckled)
usr.buckled.unbuckle_mob()
spawn(0)
var/turf/picked = pick(targets)
if(!picked || !isturf(picked))
return
var/mob/living/U = usr
U.ExtinguishMob()
if(usr.buckled)
usr.buckled.unbuckle_mob()
var/atom/movable/overlay/animation = new /atom/movable/overlay(get_turf(usr))
animation.name = usr.name
animation.density = 0
animation.anchored = 1
animation.icon = usr.icon
animation.alpha = 127
animation.layer = 5
//animation.master = src
usr.forceMove(picked)
spawn(10)
qdel(animation)
/datum/vampire_passive/regen
gain_desc = "Your rejuvination abilities have improved and will now heal you over time when used."
/datum/vampire_passive/vision
gain_desc = "Your vampiric vision has improved."
/datum/vampire_passive/full
gain_desc = "You have reached your full potential and are no longer weak to the effects of anything holy and your vision has been improved greatly."
+2 -3
View File
@@ -20,7 +20,7 @@
// All science-y guys get bonuses for maxing out their tech.
required_objectives=list(
/datum/job_objective/maximize_research
/datum/job_objective/further_research
)
equip(var/mob/living/carbon/human/H)
@@ -58,7 +58,7 @@
// All science-y guys get bonuses for maxing out their tech.
required_objectives=list(
/datum/job_objective/maximize_research
/datum/job_objective/further_research
)
equip(var/mob/living/carbon/human/H)
@@ -94,7 +94,6 @@
required_objectives=list(
/datum/job_objective/make_cyborg,
// /datum/job_objective/make_mommi,
/datum/job_objective/make_ripley
)
+11 -22
View File
@@ -3,31 +3,20 @@
/////////////////////////////////////////////////////////////////////////////////////////
// MAXIMUM SCIENCE
/datum/job_objective/maximize_research
completion_payment = 1000
/datum/job_objective/further_research
completion_payment = 5
per_unit = 1
/datum/job_objective/maximize_research/get_description()
var/desc = "Maximize all legal research tech levels."
/datum/job_objective/further_research/get_description()
var/desc = "Research tech levels, and have cargo ship them to centcomm."
desc += "([units_completed] completed.)"
return desc
/datum/job_objective/maximize_research/check_for_completion()
var/obj/machinery/r_n_d/server/server = null
for(var/obj/machinery/r_n_d/server/serber in machines)
if(serber.name == "Core R&D Server")
server = serber
break
if(!server)
return 0
for(var/datum/tech/T in server.files.possible_tech)
if(T.max_level==0) // Ignore illegal tech, etc
continue
var/datum/tech/KT = locate(T.type, server.files.known_tech)
if(!KT)
return 0 // Obviously haven't maxed everything if we don't know a tech.
if(KT.level<T.max_level)
return 0
return 1
for(var/tech in shuttle_master.techLevels)
if(shuttle_master.techLevels[tech] > 0)
return 1
return 0
/////////////////////////////////////////////////////////////////////////////////////////
// Robotics
@@ -51,6 +40,6 @@
per_unit = 1
/datum/job_objective/make_ripley/get_description()
var/desc = "Make a Ripley."
var/desc = "Make a Ripley or Firefighter."
desc += "([units_completed] created.)"
return desc
+21 -1
View File
@@ -858,4 +858,24 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stack/cable_coil = 1)
/obj/item/stack/cable_coil = 1)
/obj/item/weapon/circuitboard/botany_extractor
name = "circuit board (Lysis-Isolation Centrifuge)"
build_path = /obj/machinery/botany/extractor
board_type = "machine"
origin_tech = "biotech=3;programming=3"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/botany_editor
name = "circuit board (Bioballistic Delivery System)"
build_path = /obj/machinery/botany/editor
board_type = "machine"
origin_tech = "biotech=3;programming=3"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
+42 -29
View File
@@ -30,6 +30,9 @@
var/electrified_until = 0 // World time when the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
var/main_power_lost_until = 0 //World time when main power is restored.
var/backup_power_lost_until = -1 //World time when backup power is restored.
var/electrified_timer = null
var/main_power_timer = null
var/backup_power_timer = null
var/spawnPowerRestoreRunning = 0
var/welded = null
var/locked = 0
@@ -208,30 +211,17 @@
desc = "And they said I was crazy."
icon = 'icons/obj/doors/Dooruranium.dmi'
mineral = "uranium"
var/last_event = 0
var/event_step = 20
/obj/machinery/door/airlock/process()
// Deliberate no call to parent.
if(main_power_lost_until > 0 && world.time >= main_power_lost_until)
regainMainPower()
if(backup_power_lost_until > 0 && world.time >= backup_power_lost_until)
regainBackupPower()
else if(electrified_until > 0 && world.time >= electrified_until)
electrify(0)
/obj/machinery/door/airlock/uranium/process()
if(world.time > last_event+20)
if(prob(50))
radiate()
last_event = world.time
/obj/machinery/door/airlock/uranium/New()
..()
addtimer(src, "radiate", event_step)
/obj/machinery/door/airlock/uranium/proc/radiate()
for(var/mob/living/L in range (3,src))
L.apply_effect(15,IRRADIATE,0)
return
if(prob(50))
for(var/mob/living/L in range (3,src))
L.apply_effect(15,IRRADIATE,0)
addtimer(src, "radiate", event_step)
/obj/machinery/door/airlock/plasma
name = "plasma airlock"
@@ -338,6 +328,15 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/Destroy()
qdel(wires)
wires = null
if(main_power_timer)
deltimer(main_power_timer)
main_power_timer = null
if(backup_power_timer)
deltimer(backup_power_timer)
backup_power_timer = null
if(electrified_timer)
deltimer(electrified_timer)
electrified_timer = null
return ..()
/obj/machinery/door/airlock/bumpopen(mob/living/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite
@@ -399,10 +398,13 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/proc/loseMainPower()
main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
if(main_power_lost_until > 0)
main_power_timer = addtimer(src, "regainMainPower", SecondsToTicks(60), 1)
// If backup power is permanently disabled then activate in 10 seconds if possible, otherwise it's already enabled or a timer is already running
if(backup_power_lost_until == -1 && !backupPowerCablesCut())
backup_power_lost_until = world.time + SecondsToTicks(10)
backup_power_timer = addtimer(src, "regainBackupPower", SecondsToTicks(10), 1)
// Disable electricity if required
if(electrified_until && isAllPowerLoss())
@@ -410,12 +412,16 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/proc/loseBackupPower()
backup_power_lost_until = backupPowerCablesCut() ? -1 : world.time + SecondsToTicks(60)
if(backup_power_lost_until > 0)
backup_power_timer = addtimer(src, "regainBackupPower", SecondsToTicks(60), 1)
// Disable electricity if required
if(electrified_until && isAllPowerLoss())
electrify(0)
/obj/machinery/door/airlock/proc/regainMainPower()
main_power_timer = null
if(!mainPowerCablesCut())
main_power_lost_until = 0
// If backup power is currently active then disable, otherwise let it count down and disable itself later
@@ -424,22 +430,28 @@ About the new airlock wires panel:
update_icon()
/obj/machinery/door/airlock/proc/regainBackupPower()
backup_power_timer = null
if(!backupPowerCablesCut())
// Restore backup power only if main power is offline, otherwise permanently disable
backup_power_lost_until = main_power_lost_until == 0 ? -1 : 0
update_icon()
/obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0)
if(electrified_timer)
deltimer(electrified_timer)
electrified_timer = null
var/message = ""
if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY) && arePowerSystemsOn())
if(isWireCut(AIRLOCK_WIRE_ELECTRIFY) && arePowerSystemsOn())
message = text("The electrification wire is cut - Door permanently electrified.")
src.electrified_until = -1
electrified_until = -1
else if(duration && !arePowerSystemsOn())
message = text("The door is unpowered - Cannot electrify the door.")
src.electrified_until = 0
electrified_until = 0
else if(!duration && electrified_until != 0)
message = "The door is now un-electrified."
src.electrified_until = 0
electrified_until = 0
else if(duration) //electrify door for the given duration seconds
if(usr)
shockedby += text("\[[time_stamp()]\] - [usr](ckey:[usr.ckey])")
@@ -447,7 +459,8 @@ About the new airlock wires panel:
else
shockedby += text("\[[time_stamp()]\] - EMP)")
message = "The door is now electrified [duration == -1 ? "permanently" : "for [duration] second\s"]."
src.electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration)
electrified_until = duration == -1 ? -1 : world.time + SecondsToTicks(duration)
electrified_timer = addtimer(src, "electrify", SecondsToTicks(duration), 1, 0)
if(feedback && message)
usr << message
@@ -686,23 +699,23 @@ About the new airlock wires panel:
usr << text("The electrification wire is cut - Door permanently electrified.")
else if(!activate && electrified_until != 0)
usr << "The door is now un-electrified."
src.electrified_until = 0
electrify(0)
else if(activate) //electrify door for 30 seconds
shockedby += text("\[[time_stamp()]\][usr](ckey:[usr.ckey])")
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Electrified the [name] at [x] [y] [z]</font>")
usr << "The door is now electrified for thirty seconds."
src.electrified_until = world.time + SecondsToTicks(30)
electrify(30)
if("electrify_permanently")
if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
usr << text("The electrification wire is cut - Cannot electrify the door.")
else if(!activate && electrified_until != 0)
usr << "The door is now un-electrified."
src.electrified_until = 0
electrify(0)
else if(activate)
shockedby += text("\[[time_stamp()]\][usr](ckey:[usr.ckey])")
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Electrified the [name] at [x] [y] [z]</font>")
usr << "The door is now electrified."
electrified_until = -1
electrify(-1)
if("open")
if(src.welded)
usr << text("The airlock has been welded shut!")
+7 -3
View File
@@ -9,10 +9,11 @@ obj/machinery/door/airlock
var/cur_command = null //the command the door is currently attempting to complete
obj/machinery/door/airlock/process()
..()
if (arePowerSystemsOn())
if(arePowerSystemsOn() && cur_command)
spawn()
execute_current_command()
else
return PROCESS_KILL
obj/machinery/door/airlock/receive_signal(datum/signal/signal)
if (!arePowerSystemsOn()) return //no power
@@ -33,8 +34,11 @@ obj/machinery/door/airlock/proc/execute_current_command()
return
do_command(cur_command)
if (command_completed(cur_command))
if(command_completed(cur_command))
cur_command = null
else
if(!(src in machines))
addAtProcessing()
obj/machinery/door/airlock/proc/do_command(var/command)
switch(command)
+7 -8
View File
@@ -65,7 +65,6 @@
// if it's less than 0, open door, reset timer
// update the door_timer window and the icon
/obj/machinery/door_timer/process()
if(stat & (NOPOWER|BROKEN)) return
if(timing)
@@ -73,22 +72,20 @@
// (no seriously there's gotta be a better way to do this)
var/timeleft = timeleft()
if(timeleft > 1e5)
src.releasetime = 0
releasetime = 0
if(world.timeofday > src.releasetime)
Radio.autosay("Timer has expired. Releasing prisoner.", src.name, "Security", list(src.z))
if(world.timeofday > releasetime)
Radio.autosay("Timer has expired. Releasing prisoner.", name, "Security", list(z))
timer_end() // open doors, reset timer, clear status screen
timing = 0
. = PROCESS_KILL
src.updateUsrDialog()
src.update_icon()
else
timer_end()
return
return PROCESS_KILL
// has the door power situation changed, if so update icon.
/obj/machinery/door_timer/power_change()
@@ -106,6 +103,8 @@
// Set releasetime
releasetime = world.timeofday + timetoset
if(!(src in machines))
addAtProcessing()
for(var/obj/machinery/door/window/brigdoor/door in targets)
if(door.density) continue
+7 -2
View File
@@ -142,7 +142,7 @@ FIRE ALARM
alarm()
time = 0
timing = 0
processing_objects.Remove(src)
processing_objects -= src
updateDialog()
last_process = world.timeofday
@@ -244,9 +244,14 @@ FIRE ALARM
else if(href_list["alarm"])
alarm()
else if(href_list["time"])
var/oldTiming = timing
timing = text2num(href_list["time"])
last_process = world.timeofday
processing_objects.Add(src)
if(oldTiming != timing)
if(timing)
processing_objects += src
else
processing_objects -= src
else if(href_list["tp"])
var/tp = text2num(href_list["tp"])
time += tp
+38 -20
View File
@@ -47,37 +47,55 @@ var/datum/announcement/minor/slotmachine_announcement = new(do_log = 0)
if(operation == 1) // Play
if (working == 1)
return
if (!account || account.money < 5)
if (!account || account.money < 10)
return
if(!account.charge(5, transaction_purpose = "Bet", dest_name = name))
if(!account.charge(10, transaction_purpose = "Bet", dest_name = name))
return
plays += 1
working = 1
icon_state = "slots-on"
var/roll = rand(1,10000)
var/roll = rand(1,1350)
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
spawn(30)
spawn(25)
if (roll == 1)
visible_message("<b>[src]</b> says, 'JACKPOT! [usr.name] has won two hundred and fifty thousand credits!'")
slotmachine_announcement.Announce("Congratulations to [usr.name] on winning the jackpot of two hundred and fifty thousand credits!", "Jackpot Winner")
result = "JACKPOT! You win two hundred and fifty thousand credits!"
visible_message("<b>[src]</b> says, 'JACKPOT! [usr.name] has won a MILLION CREDITS!'")
slotmachine_announcement.Announce("Congratulations to [usr.name] on winning the Jackpot of ONE MILLION CREDITS!", "Jackpot Winner")
result = "JACKPOT! You win one million credits!"
resultlvl = "highlight"
win_money(250000, 'sound/effects/engine_alert2.ogg')
else if (roll > 1 && roll <= 10)
visible_message("<b>[src]</b> says, 'Big Winner! [usr.name] has won five thousand credits!'")
result = "Big Winner! You win five thousand credits!"
win_money(1000000, 'sound/goonstation/misc/airraid_loop.ogg')
else if (roll > 1 && roll <= 5)
visible_message("<b>[src]</b> says, 'Big Winner! [usr.name] has won a hundred thousand credits!'")
slotmachine_announcement.Announce("Congratulations to [usr.name] on winning a hundred thousand credits!", "Big Winner")
result = "Big Winner! You win a hundred thousand credits!"
resultlvl = "good"
win_money(5000)
else if (roll > 10 && roll <= 100)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won five hundred credits!'")
result = "You win five hundred credits!"
win_money(100000, 'sound/goonstation/misc/klaxon.ogg')
else if (roll > 5 && roll <= 25)
visible_message("<b>[src]</b> says, 'Big Winner! [usr.name] has won ten thousand credits!'")
result = "You win ten thousand credits!"
resultlvl = "good"
win_money(500)
else if (roll > 100 && roll <= 1000)
result = "You win 5 credits!"
win_money(10000, 'sound/goonstation/misc/klaxon.ogg')
else if (roll > 25 && roll <= 50)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won a thousand credits!'")
result = "You win a thousand credits!"
resultlvl = "good"
win_money(5)
win_money(1000, 'sound/goonstation/misc/bell.ogg')
else if (roll > 50 && roll <= 100)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won a hundred credits!'")
result = "You win a hundred credits!"
resultlvl = "good"
win_money(100, 'sound/goonstation/misc/bell.ogg')
else if (roll > 100 && roll <= 200)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won fifty credits!'")
result = "You win fifty credits!"
resultlvl = "good"
win_money(50)
else if (roll > 200 && roll <= 500)
visible_message("<b>[src]</b> says, 'Winner! [usr.name] has won ten credits!'")
result = "You win ten credits!"
resultlvl = "good"
win_money(10)
else
visible_message("<b>[src]</b> says, 'No Luck!'")
result = "<span class='warning'>No luck!</span>"
resultlvl = "average"
working = 0
@@ -85,7 +103,7 @@ var/datum/announcement/minor/slotmachine_announcement = new(do_log = 0)
/obj/machinery/slot_machine/proc/win_money(amt, sound='sound/machines/ping.ogg')
if(sound)
playsound(loc, sound, 50)
playsound(loc, sound, 55, 1)
if(!account)
return
@@ -97,6 +97,7 @@
/datum/construction/reversible/mecha/ripley
result = "/obj/mecha/working/ripley"
taskpath = /datum/job_objective/make_ripley
steps = list(
//1
list("key"=/obj/item/weapon/weldingtool,
@@ -585,6 +586,7 @@
/datum/construction/reversible/mecha/firefighter
result = "/obj/mecha/working/ripley/firefighter"
taskpath = /datum/job_objective/make_ripley
steps = list(
//1
list("key"=/obj/item/weapon/weldingtool,
+1 -1
View File
@@ -55,7 +55,7 @@
if(M.mind)
if(M.mind.vampire)
if(ishuman(M))
if(!(VAMP_FULL in M.mind.vampire.powers))
if(!M.mind.vampire.get_ability(/datum/vampire_passive/full))
M << "<span class='warning'>The nullrod's power interferes with your own!</span>"
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
..()
+67 -3
View File
@@ -17,13 +17,13 @@
firstloc = get_step(my_atom, NORTH)
secondloc = get_step(firstloc,EAST)
if(SOUTH)
firstloc = get_step(my_atom, SOUTH)
firstloc = get_turf(my_atom)
secondloc = get_step(firstloc,EAST)
if(EAST)
firstloc = get_step(my_atom, EAST)
secondloc = get_step(firstloc,NORTH)
if(WEST)
firstloc = get_step(my_atom, WEST)
firstloc = get_turf(my_atom)
secondloc = get_step(firstloc,NORTH)
olddir = dir
var/proj_type = text2path(projectile_type)
@@ -48,6 +48,7 @@
var/obj/spacepod/my_atom
var/obj/item/device/spacepod_equipment/weaponry/weapon_system // weapons system
var/obj/item/device/spacepod_equipment/misc/misc_system // misc system
var/obj/item/device/spacepod_equipment/cargo/cargo_system // cargo system
//var/obj/item/device/spacepod_equipment/engine/engine_system // engine system
//var/obj/item/device/spacepod_equipment/shield/shield_system // shielding system
@@ -59,6 +60,10 @@
/obj/item/device/spacepod_equipment
name = "equipment"
var/obj/spacepod/my_atom
/obj/item/device/spacepod_equipment/proc/removed(var/mob/user) // So that you can unload cargo when you remove the module
return
// base item for spacepod weapons
/obj/item/device/spacepod_equipment/weaponry
@@ -98,6 +103,34 @@
shot_cost = 600
fire_sound = 'sound/weapons/Laser.ogg'
// MINING LASERS
/obj/item/device/spacepod_equipment/weaponry/mining_laser_basic
name = "weak mining laser system"
desc = "A weak mining laser system for space pods, fires bursts of energy that cut through rock"
icon_state = "pod_taser"
projectile_type = "/obj/item/projectile/kinetic"
shot_cost = 300
fire_delay = 14
fire_sound = 'sound/weapons/Kenetic_accel.ogg'
/obj/item/device/spacepod_equipment/weaponry/mining_laser
name = "mining laser system"
desc = "A mining laser system for space pods, fires bursts of energy that cut through rock"
icon_state = "pod_m_laser"
projectile_type = "/obj/item/projectile/kinetic/super"
shot_cost = 250
fire_delay = 10
fire_sound = 'sound/weapons/Kenetic_accel.ogg'
/obj/item/device/spacepod_equipment/weaponry/mining_laser_hyper
name = "enhanced mining laser system"
desc = "An enhanced mining laser system for space pods, fires bursts of energy that cut through rock"
icon_state = "pod_w_laser"
projectile_type = "/obj/item/projectile/kinetic/hyper"
shot_cost = 200
fire_delay = 8
fire_sound = 'sound/weapons/Kenetic_accel.ogg'
//base item for spacepod misc equipment (tracker)
/obj/item/device/spacepod_equipment/misc
name = "pod misc"
@@ -121,4 +154,35 @@
enabled = 1
user.show_message("<span class='notice'>You enable \the [src]'s power.</span>")
else
..()
..()
/obj/item/device/spacepod_equipment/cargo
name = "pod cargo"
desc = "You shouldn't be seeing this"
icon = 'icons/goonstation/pods/ship.dmi'
icon_state = "blank"
/obj/item/device/spacepod_equipment/cargo/proc/passover(var/obj/item/I)
return
/obj/item/device/spacepod_equipment/cargo/proc/unload()
return
/obj/item/device/spacepod_equipment/cargo/ore
name = "\improper spacepod ore storage system"
desc = "An ore storage system for spacepods. Scoops up any ore you drive over."
icon_state = "pod_locator"
var/obj/structure/ore_box/box
/obj/item/device/spacepod_equipment/cargo/ore/passover(var/obj/item/I)
if(box && istype(I,/obj/item/weapon/ore))
I.forceMove(box)
/obj/item/device/spacepod_equipment/cargo/ore/unload()
if(box)
box.forceMove(get_turf(my_atom))
box = null
/obj/item/device/spacepod_equipment/cargo/ore/removed(var/mob/user)
. = ..()
unload()
+72 -14
View File
@@ -74,6 +74,8 @@
spacepods_list += src
/obj/spacepod/Destroy()
if (equipment_system.cargo_system)
equipment_system.cargo_system.removed(null)
qdel(equipment_system)
equipment_system = null
qdel(battery)
@@ -283,6 +285,17 @@
equipment_system.misc_system = W
equipment_system.misc_system.my_atom = src
return
if(istype(W, /obj/item/device/spacepod_equipment/cargo))
if(equipment_system.cargo_system)
user << "<span class='notice'>The pod already has a cargo system, remove it first.</span>"
return
else
user << "<span class='notice'>You insert \the [W] into the cargo system.</span>"
user.drop_item(W)
W.forceMove(src)
equipment_system.cargo_system = W
equipment_system.cargo_system.my_atom = src
return
if(istype(W, /obj/item/weapon/weldingtool))
if(!hatch_open)
@@ -316,6 +329,8 @@
possible.Add("Weapon System")
if(equipment_system.misc_system)
possible.Add("Misc. System")
if(equipment_system.cargo_system)
possible.Add("Cargo System")
/* Not yet implemented
if(equipment_system.engine_system)
possible.Add("Engine System")
@@ -332,6 +347,7 @@
SPE = equipment_system.weapon_system
if(user.put_in_any_hand_if_possible(SPE))
user << "<span class='notice'>You remove \the [SPE] from the equipment system.</span>"
SPE.removed(user)
SPE.my_atom = null
equipment_system.weapon_system = null
else
@@ -340,10 +356,20 @@
SPE = equipment_system.misc_system
if(user.put_in_any_hand_if_possible(SPE))
user << "<span class='notice'>You remove \the [SPE] from the equipment system.</span>"
SPE.removed(user)
SPE.my_atom = null
equipment_system.misc_system = null
else
user << "<span class='warning'>You need an open hand to do that.</span>"
if("Cargo System")
SPE = equipment_system.cargo_system
if(user.put_in_any_hand_if_possible(SPE))
user << "<span class='notice'>You remove \the [SPE] from the equipment system.</span>"
SPE.removed(user)
SPE.my_atom = null
equipment_system.cargo_system = null
else
user << "<span class='warning'>You need an open hand to do that.</span>"
/*
if("engine system")
SPE = equipment_system.engine_system
@@ -481,24 +507,40 @@
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
return 1
/obj/spacepod/MouseDrop_T(mob/M, mob/user)
if(!isliving(M))
return
/obj/spacepod/MouseDrop_T(atom/A, mob/user)
if(istype(A,/mob))
var/mob/M = A
if(!isliving(M))
return
occupant_sanity_check()
occupant_sanity_check()
if(M != user && M.stat == DEAD && allow2enter)
if(occupant2 && !occupant)
usr << "<span class='danger'><b>You can't put a corpse into the driver's seat!</b></span>"
return 0
if(!occupant2)
visible_message("<span class='danger'>[user.name] starts loading [M.name] into the pod!</span>")
sleep(10)
moved_other_inside(M)
if(M != user && M.stat == DEAD && allow2enter)
if(occupant2 && !occupant)
usr << "<span class='danger'><b>You can't put a corpse into the driver's seat!</b></span>"
return 0
if(!occupant2)
visible_message("<span class='danger'>[user.name] starts loading [M.name] into the pod!</span>")
sleep(10)
moved_other_inside(M)
if(M == user)
enter_pod(user)
if(M == user)
enter_pod(user)
if(istype(A, /obj/structure/ore_box)) // For loading ore boxes
var/obj/structure/ore_box/O = A
if(equipment_system.cargo_system && istype(equipment_system.cargo_system,/obj/item/device/spacepod_equipment/cargo/ore))
var/obj/item/device/spacepod_equipment/cargo/ore/C = equipment_system.cargo_system
if(!C.box)
user << "<span class='notice'>You begin loading \the [O] into \the [src]'s [equipment_system.cargo_system]</span>"
if(do_after(user, 40, target = src))
C.box = O
O.forceMove(C)
user << "<span class='notice'>You load \the [O] into \the [src]'s [equipment_system.cargo_system]!</span>"
else
user << "<span class='warning'>You fail to load \the [O] into \the [src]'s [equipment_system.cargo_system]</span>"
else
user << "<span class='warning'>\The [src] already has \an [C.box]</span>"
/obj/spacepod/verb/enter_pod(mob/user = usr)
set category = "Object"
@@ -686,6 +728,17 @@
return
equipment_system.weapon_system.fire_weapons()
/obj/spacepod/verb/unload()
if(!CheckIfOccupant2(usr))
set name = "Unload Cargo"
set desc = "Unloads the cargo"
set category = "Spacepod"
set src = usr.loc
if(!equipment_system.cargo_system)
usr << "<span class='warning'>\The [src] has no cargo system!</span>"
return
equipment_system.cargo_system.unload()
/obj/spacepod/verb/toggleLights()
set name = "Toggle Lights"
set category = "Spacepod"
@@ -785,6 +838,11 @@
moveship = 0
if(moveship)
Move(get_step(src, direction), direction)
if(equipment_system.cargo_system)
for (var/turf/T in locs)
for (var/obj/item/I in T.contents)
equipment_system.cargo_system.passover(I)
else
if(!battery)
user << "<span class='warning'>No energy cell detected.</span>"
+8 -15
View File
@@ -4,20 +4,20 @@
#define PLANTS_PER_TICK 500 // Cap on number of plant segments processed.
#define PLANT_TICK_TIME 75 // Number of ticks between the plant processor cycling.
// Debug for testing seed genes.
// Debug for testing seed genes (less useful now that the obfuscation is gone, but still might be useful for the future.
/client/proc/show_plant_genes()
set category = "Debug"
set name = "Show Plant Genes"
set desc = "Prints the round's plant gene masks."
set desc = "Prints the round's plant gene tags."
if(!holder) return
if(!plant_controller || !plant_controller.gene_tag_masks)
usr << "Gene masks not set."
if(!plant_controller || !plant_controller.gene_tag_list)
usr << "Gene tags not set."
return
for(var/mask in plant_controller.gene_tag_masks)
usr << "[mask]: [plant_controller.gene_tag_masks[mask]]"
for(var/gene_tag in plant_controller.gene_tag_list)
usr << "[gene_tag]"
var/global/datum/controller/plants/plant_controller // Set in New().
@@ -28,7 +28,7 @@ var/global/datum/controller/plants/plant_controller // Set in New().
var/list/product_descs = list() // Stores generated fruit descs.
var/list/plant_queue = list() // All queued plants.
var/list/seeds = list() // All seed data stored here.
var/list/gene_tag_masks = list() // Gene obfuscation for delicious trial and error goodness.
var/list/gene_tag_list = list() // List of gene tags for xenobotany fun
var/list/plant_icon_cache = list() // Stores images of growth, fruits and seeds.
var/list/plant_sprites = list() // List of all harvested product sprites.
var/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages.
@@ -83,18 +83,11 @@ var/global/datum/controller/plants/plant_controller // Set in New().
S.update_seed()
//Might as well mask the gene types while we're at it.
var/list/used_masks = list()
var/list/plant_traits = ALL_GENES
while(plant_traits && plant_traits.len)
var/gene_tag = pick(plant_traits)
var/gene_mask = "[uppertext(num2hex(rand(0,255)))]"
while(gene_mask in used_masks)
gene_mask = "[uppertext(num2hex(rand(0,255)))]"
used_masks += gene_mask
plant_traits -= gene_tag
gene_tag_masks[gene_tag] = gene_mask
gene_tag_list.Add(gene_tag)
// Proc for creating a random seed type.
/datum/controller/plants/proc/create_random_seed(var/survive_on_station)
+47 -7
View File
@@ -136,6 +136,26 @@
var/datum/seed/genetics // Currently scanned seed genetic structure.
var/degradation = 0 // Increments with each scan, stops allowing gene mods after a certain point.
var/degrade_lower = 20
var/degrade_upper = 60
/obj/machinery/botany/extractor/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/botany_extractor(null)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/botany/extractor/RefreshParts()
var/tier = 1
for (var/obj/item/weapon/stock_parts/scanning_module/S in component_parts)
tier = S.rating
degrade_lower = 25 - (tier * 5) //Tier 1: 20, Tier 4: 5
degrade_upper = 70 - (tier * 10) //Tier 1: 60, Tier 4: 30
/obj/machinery/botany/extractor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
@@ -144,8 +164,8 @@
var/list/data = list()
var/list/geneMasks[0]
for(var/gene_tag in plant_controller.gene_tag_masks)
geneMasks.Add(list(list("tag" = gene_tag, "mask" = plant_controller.gene_tag_masks[gene_tag])))
for(var/gene_tag in plant_controller.gene_tag_list)
geneMasks.Add(gene_tag)
data["geneMasks"] = geneMasks
data["activity"] = active
@@ -242,11 +262,11 @@
if(!genetics.roundstart)
loaded_disk.genesource += " (variety #[genetics.uid])"
loaded_disk.name += " ([plant_controller.gene_tag_masks[href_list["get_gene"]]], #[genetics.uid])"
loaded_disk.desc += " The label reads \'gene [plant_controller.gene_tag_masks[href_list["get_gene"]]], sampled from [genetics.display_name]\'."
loaded_disk.name += " ([href_list["get_gene"]], #[genetics.uid])"
loaded_disk.desc += " The label reads \'[href_list["get_gene"]] gene, sampled from [genetics.display_name]\'."
eject_disk = 1
degradation += rand(20,60)
degradation += rand(degrade_lower, degrade_upper)
if(degradation >= 100)
failed_task = 1
genetics = null
@@ -267,6 +287,26 @@
icon_state = "traitgun"
disk_needs_genes = 1
var/degrade_lower = 5
var/degrade_upper = 10
/obj/machinery/botany/editor/New()
..()
component_parts = list()
component_parts += new /obj/item/weapon/circuitboard/botany_editor(null)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/botany/editor/RefreshParts()
var/tier = 1
for (var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
tier = M.rating
degrade_lower = 6 - tier //Tier 1: 5, Tier 4: 1
degrade_upper = 11 - tier //Tier 1: 10, Tier 4: 6
/obj/machinery/botany/editor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
@@ -288,7 +328,7 @@
for(var/datum/plantgene/P in loaded_disk.genes)
if(data["locus"] != "") data["locus"] += ", "
data["locus"] += "[plant_controller.gene_tag_masks[P.genetype]]"
data["locus"] += "[plant_controller.gene_tag_list[P.genetype]]"
else
data["disk"] = 0
@@ -329,7 +369,7 @@
for(var/datum/plantgene/gene in loaded_disk.genes)
seed.seed.apply_gene(gene)
seed.modified += rand(5,10)
seed.modified += rand(degrade_lower, degrade_upper)
usr.set_machine(src)
src.add_fingerprint(usr)
+4 -1
View File
@@ -64,4 +64,7 @@
name = "North Mining Outpost"
/area/mine/west_outpost
name = "West Mining Outpost"
name = "West Mining Outpost"
/area/mine/podbay
name = "Mining Podbay"
+6 -2
View File
@@ -62,6 +62,7 @@
var/obj/item/weapon/holder/H = new holder_type(loc)
src.forceMove(H)
H.name = name
if(istype(H, /obj/item/weapon/holder/mouse)) H.icon_state = icon_state
if(desc) H.desc = desc
H.attack_hand(grabber)
@@ -73,13 +74,11 @@
//Mob specific holders.
/obj/item/weapon/holder/diona
name = "diona nymph"
desc = "It's a tiny plant critter."
icon_state = "nymph"
/obj/item/weapon/holder/drone
name = "maintenance drone"
desc = "It's a small maintenance robot."
icon_state = "drone"
@@ -88,3 +87,8 @@
name = "pAI"
desc = "It's a little robot."
icon_state = "pai"
/obj/item/weapon/holder/mouse
name = "mouse"
desc = "It's a small, disease-ridden rodent."
icon_state = "mouse_gray"
@@ -98,7 +98,6 @@
src.brainmob << "<b>You are a positronic brain, brought into existence on [station_name()].</b>"
src.brainmob << "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>"
src.brainmob << "<b>Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.</b>"
src.brainmob << "<b>Use say :b to speak to other artificial intelligences.</b>"
src.brainmob.mind.assigned_role = "Positronic Brain"
var/turf/T = get_turf_or_move(src.loc)
@@ -200,4 +199,4 @@
/obj/item/device/mmi/posibrain/ipc
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. The speaker switch is set to 'off'."
silenced = 1
silenced = 1
@@ -135,7 +135,7 @@
M << "<span class='warning'>Blood from a monkey is useless!</span>"
return 0
//we're good to suck the blood, blaah
M.handle_bloodsucking(src)
M.mind.vampire.handle_bloodsucking(src)
add_logs(src, M, "vampirebit")
msg_admin_attack("[key_name_admin(M)] vampirebit [key_name_admin(src)]")
return
+1 -1
View File
@@ -88,7 +88,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
pulse = handle_pulse()
if(mind && mind.vampire)
handle_vampire()
mind.vampire.handle_vampire()
if(life_tick == 1)
regenerate_icons() // Make sure the inventory updates
@@ -423,14 +423,12 @@
H.see_invisible = SEE_INVISIBLE_LIVING
if(H.mind && H.mind.vampire)
if((VAMP_VISION in H.mind.vampire.powers) && (!(VAMP_FULL in H.mind.vampire.powers)))
H.sight |= SEE_MOBS
else if(VAMP_FULL in H.mind.vampire.powers)
if(H.mind.vampire.get_ability(/datum/vampire_passive/full))
H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
H.see_in_dark = 8
H.see_invisible = SEE_INVISIBLE_MINIMUM
else if(H.mind.vampire.get_ability(/datum/vampire_passive/vision))
H.sight |= SEE_MOBS
if(XRAY in H.mutations)
H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
@@ -453,8 +453,8 @@
set name = "Regrow Limbs"
set desc = "Regrow one of your missing limbs at the cost of a large amount of hunger"
#define SLIMEPERSON_HUNGERCOST 125
#define SLIMEPERSON_MINHUNGER 300
#define SLIMEPERSON_HUNGERCOST 50
#define SLIMEPERSON_MINHUNGER 250
#define SLIMEPERSON_REGROWTHDELAY 450 // 45 seconds
if(stat || paralysis || stunned)
@@ -620,12 +620,13 @@
has_organ = list(
"nutrient channel" = /obj/item/organ/internal/liver/diona,
"neural strata" = /obj/item/organ/internal/heart/diona,
"receptor node" = /obj/item/organ/internal/eyes/diona,
"receptor node" = /obj/item/organ/internal/diona_receptor,
"gas bladder" = /obj/item/organ/internal/brain/diona,
"polyp segment" = /obj/item/organ/internal/kidneys/diona,
"anchoring ligament" = /obj/item/organ/internal/appendix/diona
)
vision_organ = /obj/item/organ/internal/diona_receptor
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/diona/chest),
"groin" = list("path" = /obj/item/organ/external/diona/groin),
@@ -30,6 +30,7 @@
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
can_hide = 1
holder_type = /obj/item/weapon/holder/mouse
/mob/living/simple_animal/mouse/handle_automated_speech()
..()
@@ -63,7 +64,6 @@
icon_dead = "mouse_[mouse_color]_dead"
desc = "It's a small [mouse_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
/mob/living/simple_animal/mouse/proc/splat()
src.health = 0
src.stat = DEAD
@@ -73,6 +73,11 @@
if(client)
client.time_died_as_mouse = world.time
/mob/living/simple_animal/mouse/attack_hand(mob/living/carbon/human/M as mob)
if(M.a_intent == I_HELP)
get_scooped(M)
..()
//make mice fit under tables etc? this was hacky, and not working
/*
/mob/living/simple_animal/mouse/Move(var/dir)
@@ -264,44 +264,40 @@
M.stuttering = 0
M.confused = 0
return
if(ishuman(M) && M.mind) .
if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80))
switch(data)
if(1 to 4)
M << "<span class = 'warning'>Something sizzles in your veins!</span>"
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
if(5 to 12)
M << "<span class = 'danger'>You feel an intense burning inside of you!</span>"
M.adjustFireLoss(1)
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
if(13 to INFINITY)
M << "<span class = 'danger'>You suddenly ignite in a holy fire!</span>"
for(var/mob/O in viewers(M, null))
O.show_message(text("<span class = 'danger'>[] suddenly bursts into flames!<span>", M), 1)
M.fire_stacks = min(5,M.fire_stacks + 3)
M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard?
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
if(ishuman(M) && M.mind && M.mind.vampire && !M.mind.vampire.get_ability(/datum/vampire_passive/full) && prob(80))
switch(data)
if(1 to 4)
M << "<span class = 'warning'>Something sizzles in your veins!</span>"
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
if(5 to 12)
M << "<span class = 'danger'>You feel an intense burning inside of you!</span>"
M.adjustFireLoss(1)
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
if(13 to INFINITY)
M << "<span class = 'danger'>You suddenly ignite in a holy fire!</span>"
for(var/mob/O in viewers(M, null))
O.show_message(text("<span class = 'danger'>[] suddenly bursts into flames!<span>", M), 1)
M.fire_stacks = min(5,M.fire_stacks + 3)
M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard?
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
..()
return
/datum/reagent/holywater/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
// Vampires have their powers weakened by holy water applied to the skin.
if(ishuman(M))
if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers))
var/mob/living/carbon/human/H=M
if(method == TOUCH)
if(H.wear_mask)
H << "\red Your mask protects you from the holy water!"
return
else if(H.head)
H << "\red Your helmet protects you from the holy water!"
return
else
M << "<span class='warning'>Something holy interferes with your powers!</span>"
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
return
if(ishuman(M) && M.mind && M.mind.vampire && !M.mind.vampire.get_ability(/datum/vampire_passive/full))
var/mob/living/carbon/human/H=M
if(method == TOUCH)
if(H.wear_mask)
H << "\red Your mask protects you from the holy water!"
return
else if(H.head)
H << "\red Your helmet protects you from the holy water!"
return
else
M << "<span class='warning'>Something holy interferes with your powers!</span>"
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
/datum/reagent/holywater/reaction_turf(var/turf/simulated/T, var/volume)
@@ -500,4 +500,24 @@
build_type = IMPRINTER
materials = list(MAT_GLASS=1000, "sacid"=20)
build_path = /obj/item/weapon/circuitboard/prize_counter
category = list("Misc. Machinery")
category = list("Misc. Machinery")
/datum/design/botany_extractor
name = "Machine Design (Lysis-Isolation Centrifuge)"
desc = "The circuit board for a lysis-isolation centrifuge."
id = "botany_extractor"
req_tech = list("biotech" = 3, "programming" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS=1000, "sacid"=20)
build_path = /obj/item/weapon/circuitboard/botany_extractor
category = list("Hydroponics Machinery")
/datum/design/botany_editor
name = "Machine Design (Bioballistic Delivery System)"
desc = "The circuit board for a bioballistic delivery system."
id = "botany_editor"
req_tech = list("biotech" = 3, "programming" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS=1000, "sacid"=20)
build_path = /obj/item/weapon/circuitboard/botany_editor
category = list("Hydroponics Machinery")
@@ -124,6 +124,39 @@
category = list("Pod_Weaponry")
materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000)
locked = 1
/datum/design/pod_mining_laser_basic
construction_time = 200
name = "Basic Mining Laser"
desc = "Allows for the construction of a weak mining laser"
id = "pod_mining_laser_basic"
req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2, "magnets" = 3, "combat" = 2)
build_type = PODFAB
materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 2000, MAT_URANIUM = 2000)
build_path = /obj/item/device/spacepod_equipment/weaponry/mining_laser_basic
category = list("Pod_Weaponry")
/datum/design/pod_mining_laser
construction_time = 200
name = "Mining Laser"
desc = "Allows for the construction of a mining laser."
id = "pod_mining_laser"
req_tech = list("materials" = 6, "powerstorage" = 6, "engineering" = 5, "magnets" = 6, "combat" = 4)
build_type = PODFAB
materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000)
build_path = /obj/item/device/spacepod_equipment/weaponry/mining_laser
category = list("Pod_Weaponry")
/datum/design/pod_mining_laser_hyper
construction_time = 200
name = "Enhanced Mining Laser"
desc = "Allows for the construction of an enhanced mining laser."
id = "pod_mining_laser_hyper"
req_tech = list("materials" = 7, "powerstorage" = 6, "engineering" = 5, "magnets" = 6, "combat" = 4)
build_type = PODFAB
materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 4000, MAT_GOLD = 4000, MAT_DIAMOND = 4000)
build_path = /obj/item/device/spacepod_equipment/weaponry/mining_laser_hyper
category = list("Pod_Weaponry")
//////////////////////////////////////////
//////SPACEPOD MISC. ITEMS////////////////
//////////////////////////////////////////
@@ -137,4 +170,15 @@
build_type = PODFAB
materials = list(MAT_METAL=5000)
build_path = /obj/item/device/spacepod_equipment/misc/tracker
category = list("Pod_Parts")
/datum/design/pod_cargo_ore
construction_time = 100
name = "Spacepod Ore Storage Module"
desc = "Allows for the construction of a Space Pod Ore Storage Module."
id = "podcargo_ore"
req_tech = list("materials" = 3)
build_type = PODFAB
materials = list(MAT_METAL=20000, MAT_GLASS=2000)
build_path = /obj/item/device/spacepod_equipment/cargo/ore
category = list("Pod_Parts")
@@ -188,7 +188,7 @@
desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry."
icon_state = "chest_implant"
implant_color = "#006607"
hunger_threshold = 250
hunger_threshold = 300
poison_amount = 10
origin_tech = "materials=5;programming=3;biotech=5"
@@ -328,18 +328,27 @@
holder = new /obj/item/weapon/gun/energy/laser/mounted(src)
//BOX O' IMPLANTS
/obj/item/weapon/storage/box/cyber_implants
name = "boxed cybernetic implants"
name = "boxed cybernetic implant"
desc = "A sleek, sturdy box."
icon_state = "cyber_implants"
/obj/item/weapon/storage/box/cyber_implants/New(loc, implant)
..()
new /obj/item/device/autoimplanter(src)
if(ispath(implant))
new implant(src)
/obj/item/weapon/storage/box/cyber_implants/bundle
name = "boxed cybernetic implants"
var/list/boxed = list(/obj/item/organ/internal/cyberimp/eyes/xray,/obj/item/organ/internal/cyberimp/eyes/thermals,
/obj/item/organ/internal/cyberimp/brain/anti_stun, /obj/item/organ/internal/cyberimp/chest/reviver)
var/amount = 5
/obj/item/weapon/storage/box/cyber_implants/New()
/obj/item/weapon/storage/box/cyber_implants/bundle/New()
..()
var/i
var/implant
for(i = 0, i < amount, i++)
while(contents.len <= amount + 1) // +1 for the autoimplanter.
implant = pick(boxed)
new implant(src)
@@ -0,0 +1,35 @@
/obj/item/device/autoimplanter
name = "autoimplanter"
desc = "A device that automatically injects a cyber-implant into the user without the hassle of extensive surgery. It has a slot to insert implants and a screwdriver slot for removing accidentally added implants."
icon_state = "autoimplanter"
item_state = "walkietalkie"//left as this so as to intentionally not have inhands
w_class = 2
var/obj/item/organ/internal/cyberimp/storedorgan
/obj/item/device/autoimplanter/attack_self(mob/user)//when the object it used...
if(!storedorgan)
user << "<span class='notice'>[src] currently has no implant stored.</span>"
return
storedorgan.insert(user)//insert stored organ into the user
user.visible_message("<span class='notice'>[user] presses a button on [src], and you hear a short mechanical noise.</span>", "<span class='notice'>You feel a sharp sting as [src] plunges into your body.</span>")
playsound(get_turf(user), 'sound/weapons/circsawhit.ogg', 50, 1)
storedorgan = null
/obj/item/device/autoimplanter/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/organ/internal/cyberimp))
if(storedorgan)
user << "<span class='notice'>[src] already has an implant stored.</span>"
return
if(!user.drop_item())
return
I.forceMove(src)
storedorgan = I
user << "<span class='notice'>You insert the [I] into [src].</span>"
else if(istype(I, /obj/item/weapon/screwdriver))
if(!storedorgan)
user << "<span class='notice'>There's no implant in [src] for you to remove.</span>"
else
storedorgan.forceMove(get_turf(user))
storedorgan = null
user << "<span class='notice'>You remove the [storedorgan] from [src].</span>"
playsound(get_turf(user), 'sound/items/Screwdriver.ogg', 50, 1)
@@ -76,6 +76,8 @@
return ..()
/obj/item/organ/internal/proc/prepare_eat()
if(robotic)
return //no eating cybernetic implants!
var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new
S.name = name
S.desc = desc
@@ -185,7 +185,7 @@
parent_organ = "groin"
slot = "appendix"
/obj/item/organ/internal/eyes/diona
/obj/item/organ/internal/diona_receptor
name = "receptor node"
organ_tag = "eyes"
icon = 'icons/mob/alien.dmi'
@@ -150,7 +150,7 @@
name = "xeno resin organ"//...there tiger....
parent_organ = "mouth"
icon_state = "liver-x"
slot = "hivenode"
slot = "spinner"
origin_tech = "biotech=5;materials=4"
alien_powers = list(/mob/living/carbon/alien/humanoid/proc/resin)
+3 -3
View File
@@ -199,12 +199,12 @@
// Dethrall Shadowling //
//////////////////////////////////////////////////////////////////
/datum/surgery/remove_thrall
name = "clense contaminations"//RENAME MEH
steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
name = "cleanse contaminations"//RENAME MEH
steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/dethrall,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
possible_locs = list("head")
/datum/surgery/remove_thrall/synth
name = "clense contaminations"//RENAME MEH
name = "cleanse contaminations"//RENAME MEH
steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/internal/dethrall,/datum/surgery_step/robotics/external/close_hatch)
possible_locs = list("chest")
+1 -2
View File
@@ -502,7 +502,6 @@ Stamos
Sagan
Hawking
Dawkins
Goebbles
McShain
McDonohugh
Power
@@ -617,4 +616,4 @@ Mikhaylov
Pavlov
Semenov
Andreev
Alekseev
Alekseev
@@ -0,0 +1,4 @@
author: taukausanake
delete-after: True
changes:
- rscadd: "Mice can now be picked up like diona"
@@ -0,0 +1,6 @@
author: Crazylemon64
delete-after: True
changes:
- rscadd: "Science members now get compensated when they ship tech disks to centcomm."
- rscdel: "Science crew are no longer paid when they \"max\" research."
- bugfix: "Roboticists now get credit for making RIPLEYs and Firefighters"
@@ -0,0 +1,5 @@
author: Crazylemon64
delete-after: True
changes:
- tweak: "Slime people can now regrow limbs on a more lax nutrition requirement"
- tweak: "Enhances the nutripump+ to let slime people regrow limbs with it active"
@@ -0,0 +1,4 @@
author: Fox McCloud
delete-after: True
changes:
- rscadd: "Updates slot machines to have higher jackpots and more payouts with more interesting sounds"
@@ -0,0 +1,5 @@
author: Fox McCloud
delete-after: True
changes:
- rscadd: "Adds X-Ray, Thermal, Anti-tun, and Reviver implants to the nuke ops uplink (augments come with one auto-implanter)
rcsadd: Adds in augment auto-implanter, which inserts and implant without surgery"
@@ -0,0 +1,7 @@
author: Tastyfish
delete-after: True
changes:
- tweak: "Vampire abilities are now in their own Vampire tab, as well being action buttons at the top, like spells."
- bugfix: "Cloning a vampire no longer makes them lose their abilities."
- bugfix: "Vampires can no longer hypnotize chaplains."
- bugfix: "Being a full vampire (500+ total blood) actually makes you immune to holy water reliably now."
@@ -0,0 +1,4 @@
author: Fethas
delete-after: True
changes:
- bugfix: "Hopefully fixes issues with diona eyes"
@@ -0,0 +1,6 @@
author: FalseIncarnate
delete-after: True
changes:
- tweak: "Xeno-botany is now more user-friendly, and less random letters/numbers."
- rscadd: "Hydroponics now has a connector hooked up to the isolation tray and a new connector in their back room for those strange plants that like spewing plasma or eating nitrogen."
- rscadd: "You can now (finally) build the xeno-botany machines, and science can print off their respective boards."
@@ -0,0 +1,7 @@
author: monster860
delete-after: True
changes:
- rscadd: "Mining station now has a podbay."
- rscadd: "Ore scooping module for the spacepod."
- rscadd: "Three mining lasers for spacepod: Basic, normal, and burst."
- bugfix: "Shooting weapons south or west of spacepod will actually hit adjacent targets now, and won't shoot through walls anymore."
@@ -0,0 +1,4 @@
author: Fethas
delete-after: True
changes:
- bugfix: "Though shalt not eat robotic organs..including cybernetic implants.."
@@ -0,0 +1,4 @@
author: Fethas
delete-after: True
changes:
- bugfix: "ITS SURGERY_STEP/DETHRALL NOT SURGERY_STEP/INTERNAL/DETHRALL"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 141 KiB

+2 -2
View File
@@ -26,10 +26,10 @@ Used In File(s): \code\modules\hydroponics\seed_machines.dm
{{for data.geneMasks}}
<div class="item">
<div class="itemLabel">
{{:value.mask}}
{{:value}}
</div>
<div class="itemContent">
{{:helper.link('Extract', 'arrow-circle-down', {'get_gene' : value.tag}, null)}}
{{:helper.link('Extract', 'arrow-circle-down', {'get_gene' : value}, null)}}
</div>
</div>
{{empty}}
+1
View File
@@ -1872,6 +1872,7 @@
#include "code\modules\surgery\tools.dm"
#include "code\modules\surgery\organs\augments_eyes.dm"
#include "code\modules\surgery\organs\augments_internal.dm"
#include "code\modules\surgery\organs\autoimplanter.dm"
#include "code\modules\surgery\organs\blood.dm"
#include "code\modules\surgery\organs\body_egg.dm"
#include "code\modules\surgery\organs\helpers.dm"
Binary file not shown.
Binary file not shown.
Binary file not shown.