diff --git a/.gitignore b/.gitignore index 3bb4b517e45..f784b30d80e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ data/ /_maps/map_files/**/backup/* /_maps/map_files/**/*.dmm.backup /nano/debug.html +*.db diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 215d85ade15..5baa13f652b 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -5824,7 +5824,7 @@ "chZ" = (/turf/simulated/floor/plating{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/maintenance/aft{name = "Aft Maintenance"}) "cia" = (/obj/machinery/power/apc{dir = 8; name = "Incinerator APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cib" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/incinerator) -"cic" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/valve{dir = 2; name = "output gas to space"},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cic" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/binary/valve{dir = 2; name = "output gas to space"},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cid" = (/obj/machinery/atmospherics/binary/pump{dir = 2; on = 1},/obj/machinery/light/small{dir = 8},/obj/structure/sign/fire{pixel_x = -32; pixel_y = 0},/turf/simulated/floor,/area/maintenance/incinerator) "cie" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/maintenance/incinerator) "cif" = (/obj/machinery/atmospherics/binary/pump{dir = 1; on = 1},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/maintenance/incinerator) @@ -7065,7 +7065,7 @@ "cFS" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/mixing{name = "\improper Toxins Lab"}) "cFT" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/binary/pump{dir = 4; on = 1},/turf/simulated/floor,/area/toxins/mixing{name = "\improper Toxins Lab"}) "cFU" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/obj/machinery/embedded_controller/radio/airlock{tag_airpump = "tox_airlock_pump"; tag_exterior_door = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; tag_interior_door = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; tag_chamber_sensor = "tox_airlock_sensor"},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/mixing{name = "\improper Toxins Lab"}) -"cFV" = (/obj/machinery/atmospherics/valve{dir = 4; name = "manual outlet valve"},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/mixing{name = "\improper Toxins Lab"}) +"cFV" = (/obj/machinery/atmospherics/binary/valve{dir = 4; name = "manual outlet valve"},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "cFW" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/structure/window/reinforced{dir = 1; pixel_y = 2},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "cFX" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cFY" = (/obj/effect/spawner/window/reinforced{useFull = 1; tag = "fullReinWin"},/turf/simulated/floor/plating,/area/assembly/chargebay) @@ -7159,7 +7159,7 @@ "cHI" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/outlet_injector/on{dir = 4; frequency = 1443; id = "air_in"},/turf/simulated/floor/engine,/area/toxins/mixing{name = "\improper Toxins Lab"}) "cHJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/binary/pump{dir = 8; on = 1},/turf/simulated/floor,/area/toxins/mixing{name = "\improper Toxins Lab"}) "cHK" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/obj/machinery/door_control{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access_txt = "7"},/obj/machinery/ignition_switch{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/mixing{name = "\improper Toxins Lab"}) -"cHL" = (/obj/machinery/atmospherics/valve{dir = 4; name = "manual inlet valve"},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/mixing{name = "\improper Toxins Lab"}) +"cHL" = (/obj/machinery/atmospherics/binary/valve{dir = 4; name = "manual inlet valve"},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "cHM" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "cHN" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cHO" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index 2440c38ef6a..f370c13e883 100644 --- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm +++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -635,7 +635,7 @@ "mk" = (/obj/structure/stool,/turf/simulated/floor{heat_capacity = 1e+006; icon_state = "bar"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "ml" = (/obj/machinery/light/small,/turf/simulated/floor{heat_capacity = 1e+006; icon_state = "bar"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "mm" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel/withwallet,/turf/simulated/floor{icon_state = "dark"},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) -"mn" = (/obj/structure/closet/secure_closet{icon_state = "secure"; locked = 0; name = "kitchen Cabinet"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/snacks/flour,/obj/item/weapon/reagent_containers/food/snacks/flour,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{heat_capacity = 1e+006; icon_state = "showroomfloor"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) +"mn" = (/obj/structure/closet/secure_closet{icon_state = "secure"; locked = 0; name = "kitchen Cabinet"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/condiment/flour,/obj/item/weapon/reagent_containers/food/condiment/flour,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{heat_capacity = 1e+006; icon_state = "showroomfloor"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "mo" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "meat fridge"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,/turf/simulated/floor{heat_capacity = 1e+006; icon_state = "showroomfloor"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "mp" = (/obj/structure/closet/secure_closet{icon_broken = "fridgebroken"; icon_closed = "fridge"; icon_locked = "fridge1"; icon_off = "fridgeoff"; icon_opened = "fridgeopen"; icon_state = "fridge"; locked = 0; name = "refrigerator"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/reagent_containers/food/drinks/milk,/obj/item/weapon/storage/fancy/egg_box,/turf/simulated/floor{heat_capacity = 1e+006; icon_state = "showroomfloor"; temperature = 273.15},/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) "mq" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/shuttle/floor,/area/awaycontent/a1{has_gravity = 1; name = "MO19 Arrivals"}) @@ -847,3 +847,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm index c86a593a1ca..402d5d3b837 100644 --- a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm @@ -472,7 +472,7 @@ "jd" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{heat_capacity = 1e+006; icon_state = "bar"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "je" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/sign/deathsposal{desc = "A warning sign which reads 'DISPOSAL: LEADS TO EXTERIOR'"; name = "\improper DISPOSAL: LEADS TO EXTERIOR"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "jf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/junction,/turf/simulated/floor{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) -"jg" = (/obj/structure/closet/secure_closet{icon_state = "secure"; locked = 0; name = "kitchen Cabinet"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/snacks/flour,/obj/item/weapon/reagent_containers/food/snacks/flour,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) +"jg" = (/obj/structure/closet/secure_closet{icon_state = "secure"; locked = 0; name = "kitchen Cabinet"; req_access_txt = "201"},/obj/item/weapon/reagent_containers/food/condiment/flour,/obj/item/weapon/reagent_containers/food/condiment/flour,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 5; heat_capacity = 1e+006; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/awaycontent/a2{has_gravity = 1; name = "UO45 Crew Quarters"}) "jh" = (/obj/machinery/alarm/monitor{dir = 4; frequency = 1439; locked = 0; pixel_x = -23; pixel_y = 0; req_access = null},/obj/machinery/camera{c_tag = "Gateway Chamber"; dir = 4; network = list("UO45","UO45R")},/turf/simulated/floor{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a6{has_gravity = 1; name = "UO45 Gateway"}) "ji" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{heat_capacity = 1e+006},/area/awaycontent/a6{has_gravity = 1; name = "UO45 Gateway"}) "jj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{heat_capacity = 1e+006},/area/awaycontent/a6{has_gravity = 1; name = "UO45 Gateway"}) @@ -1437,3 +1437,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index b7af4ec0741..76163e88f7a 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -1476,9 +1476,9 @@ "aCt" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aCu" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry) "aCv" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod1/station) -"aCw" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_1"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_1_hatch"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) +"aCw" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1379; id_tag = "escape_pod_1"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_1_hatch"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) "aCx" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod2/station) -"aCy" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_2_hatch"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station) +"aCy" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1379; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_2_hatch"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station) "aCz" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "arrivals_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "arrivals_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "arrivals_pump"; tag_exterior_door = "arrivals_outer"; frequency = 1379; id_tag = "arrivals_airlock"; tag_interior_door = "arrivals_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "arrivals_sensor"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aCA" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; initialize_directions = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aCB" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1588,10 +1588,10 @@ "aEB" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/maintenance/electrical) "aEC" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid,/area/maintenance/electrical) "aED" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod1/station) -"aEE" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) +"aEE" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "escape_pod_1_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) "aEF" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape_pod1/station) "aEG" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod2/station) -"aEH" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station) +"aEH" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "escape_pod_2_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station) "aEI" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape_pod2/station) "aEJ" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/hallway/secondary/entry) "aEK" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1724,9 +1724,9 @@ "aHh" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/electrical) "aHi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/electrical) "aHj" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/multitool,/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/electrical) -"aHk" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aHk" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aHl" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/hallway/secondary/entry) -"aHm" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aHm" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "escape_pod_2_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aHn" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aHo" = (/obj/machinery/optable,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aHp" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/space) @@ -1781,9 +1781,9 @@ "aIm" = (/obj/structure/table,/obj/item/weapon/camera_assembly,/obj/item/weapon/camera_assembly,/obj/item/device/assembly/prox_sensor{pixel_x = -5; pixel_y = 5},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plating,/area/maintenance/electrical) "aIn" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/firedoor{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aIo" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) -"aIp" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "escape_pod_1_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_1_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) +"aIp" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1379; id_tag = "escape_pod_1_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_1_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) "aIq" = (/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Arrivals Escape Pods"; dir = 2},/turf/simulated/floor,/area/hallway/secondary/entry) -"aIr" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "escape_pod_2_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_2_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) +"aIr" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1379; id_tag = "escape_pod_2_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_2_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) "aIs" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry) "aIt" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry) "aIu" = (/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry) @@ -2508,13 +2508,13 @@ "aWl" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central) "aWm" = (/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/hallway/primary/central/ne) "aWn" = (/obj/machinery/light{dir = 1},/obj/machinery/vending/boozeomat,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) -"aWo" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"aWo" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aWp" = (/obj/machinery/requests_console{department = "Bar"; name = "Bar Requests Console"; departmentType = 2; pixel_x = 0; pixel_y = 30},/obj/structure/table/reinforced,/obj/machinery/chem_dispenser/beer,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aWq" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/camera{c_tag = "Bar North"; dir = 2; network = list("SS13")},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/table/reinforced,/obj/machinery/chem_dispenser/soda,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aWr" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) -"aWs" = (/obj/machinery/power/apc{dir = 1; name = "Bar APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/bar) -"aWt" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/bar) -"aWu" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/stool/bed/chair/comfy/brown{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"aWs" = (/obj/machinery/power/apc{dir = 1; name = "Bar APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"aWt" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/stool/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/leaves{dir = 1},/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"aWu" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment,/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar) "aWv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "aWw" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "aWx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) @@ -2525,7 +2525,7 @@ "aWC" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics) "aWD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/grass,/area/hydroponics) "aWE" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/hydroponics) -"aWF" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/screwdriver,/obj/item/weapon/shovel/spade,/obj/item/weapon/wrench,/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/storage/box/botanydisk,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) +"aWF" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/screwdriver,/obj/item/weapon/shovel/spade,/obj/item/weapon/wrench,/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/storage/box/botanydisk,/obj/item/weapon/storage/box/beakers,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) "aWG" = (/obj/structure/table,/obj/item/weapon/watertank,/turf/simulated/floor{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{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{icon_state = "hydrofloor"},/area/hydroponics) @@ -2607,15 +2607,15 @@ "aYg" = (/obj/machinery/power/apc{dir = 1; name = "Central Hall NE APC"; pixel_y = 26},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/hallway/primary/central/ne) "aYh" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor,/area/hallway/primary/central/ne) "aYi" = (/turf/simulated/floor,/area/hallway/primary/central/ne) -"aYj" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) -"aYk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/reinforced,/obj/item/stack/packageWrap,/obj/item/weapon/pen/blue{pixel_x = 0; pixel_y = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/weapon/book/manual/barman_recipes,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) -"aYl" = (/obj/structure/disposalpipe/segment{dir = 4},/mob/living/carbon/human/monkey/punpun,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) -"aYm" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"aYj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/reinforced,/obj/item/stack/packageWrap,/obj/item/weapon/pen/blue{pixel_x = 0; pixel_y = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/weapon/book/manual/barman_recipes,/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"aYk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"aYl" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"aYm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/leaves{dir = 8},/mob/living/carbon/human/monkey/punpun,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aYn" = (/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aYo" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/reinforced,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/item/weapon/lighter/zippo,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) -"aYp" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"aYp" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 4},/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar) "aYq" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet,/area/crew_quarters/bar) -"aYr" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"aYr" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 8},/obj/machinery/light{dir = 4},/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar) "aYs" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/kitchenspike,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "aYt" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "aYu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) @@ -2695,8 +2695,8 @@ "aZQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/hallway/primary/central/ne) "aZR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/hallway/primary/central/ne) "aZS" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA2"; location = "Dorm"},/turf/simulated/floor,/area/hallway/primary/central/ne) -"aZT" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) -"aZU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"aZT" = (/turf/simulated/floor{dir = 2; icon_state = "asteroid"; tag = "icon-asteroid (NORTH)"},/turf/simulated/floor{tag = "icon-siding2 (NORTH)"; icon_state = "siding2"; dir = 1},/mob/living/simple_animal/turkey,/turf/simulated/floor{tag = "icon-siding1 (NORTH)"; icon_state = "siding1"; dir = 1},/area/hydroponics) +"aZU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aZV" = (/obj/structure/stool{pixel_y = 8},/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aZW" = (/obj/machinery/door/window{dir = 4; name = "Bar Door"; req_access_txt = "25"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aZX" = (/turf/simulated/floor/carpet,/area/crew_quarters/bar) @@ -2772,7 +2772,7 @@ "bbp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/door/firedoor,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/ne) "bbq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/ne) "bbr" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/hallway/primary/central/ne) -"bbs" = (/obj/machinery/slot_machine,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"bbs" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light_switch{pixel_x = -25},/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "bbt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/slot_machine,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "bbu" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "bbv" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) @@ -2851,8 +2851,8 @@ "bcQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bcR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bcS" = (/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bcT" = (/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bcU" = (/obj/machinery/camera{c_tag = "Bar East"; network = list("SS13")},/obj/structure/flora/kirbyplants,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bcT" = (/obj/machinery/slot_machine,/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) +"bcU" = (/obj/effect/decal/straw/edge,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bcV" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "kitchenbar"; name = "Kitchen Shutters"; opacity = 0},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bcW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light_switch{pixel_x = 0; pixel_y = 25},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bcX" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) @@ -3346,7 +3346,7 @@ "bmr" = (/obj/machinery/power/apc{dir = 2; name = "Central Hall APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/hallway/primary/central/ne) "bms" = (/obj/machinery/light,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/hallway/primary/central/ne) "bmt" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central/ne) -"bmu" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bmu" = (/obj/machinery/camera{c_tag = "Bar East"; network = list("SS13")},/obj/machinery/newscaster{pixel_y = 32},/obj/structure/flora/straw_bail/alt_1,/obj/effect/decal/straw/edge{dir = 10},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bmv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bmw" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) "bmx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) @@ -3406,14 +3406,14 @@ "bnz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "bnA" = (/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bnB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{id_tag = "captainofficedoor"; name = "Captain's Office"; req_access = null; req_access_txt = "20"},/turf/simulated/floor/wood,/area/crew_quarters/captain) -"bnC" = (/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bnD" = (/obj/machinery/media/jukebox/bar,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bnE" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bnC" = (/obj/structure/noticeboard{pixel_y = 32},/obj/effect/decal/straw/edge,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bnD" = (/obj/effect/decal/straw/edge{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bnE" = (/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bnF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bnG" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bnG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/structure/flora/corn_stalk/alt_2,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bnH" = (/obj/machinery/camera{c_tag = "Bar South"; dir = 1; network = list("SS13")},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bnI" = (/obj/item/device/radio/intercom{pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bnJ" = (/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/obj/structure/flora/kirbyplants,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) +"bnI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bnJ" = (/obj/effect/decal/straw/edge{dir = 8},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) "bnK" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/vending/dinnerware,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bnL" = (/obj/machinery/icemachine,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "bnM" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id_tag = "kitchenhall"; name = "Kitchen Shutters"; opacity = 0},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) @@ -3491,10 +3491,10 @@ "bpg" = (/obj/structure/sign/directions/evac{dir = 4},/obj/structure/sign/directions/medical{dir = 4; pixel_y = 7},/obj/structure/sign/directions/science{dir = 4},/turf/simulated/wall,/area/crew_quarters/bar) "bph" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Diner"},/turf/simulated/floor,/area/crew_quarters/bar) "bpi" = (/obj/structure/sign/barsign,/turf/simulated/wall,/area/crew_quarters/bar) -"bpj" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) +"bpj" = (/obj/machinery/media/jukebox/bar,/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bpk" = (/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) -"bpl" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 2"; dir = 2; network = list("SS13")},/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) -"bpm" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) +"bpl" = (/obj/machinery/computer/arcade,/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"bpm" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/flora/corn_stalk/alt_1,/turf/simulated/floor/wood,/area/crew_quarters/bar) "bpn" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor,/obj/machinery/door/window/westright{dir = 1; name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor,/area/hydroponics) "bpo" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Hydroponics"; req_access_txt = "35"},/turf/simulated/floor,/area/hydroponics) "bpp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/starboard/east) @@ -3553,7 +3553,7 @@ "bqq" = (/obj/machinery/atm{pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/starboard/west) "bqr" = (/turf/simulated/floor,/area/hallway/primary/starboard) "bqs" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/hallway/primary/starboard/west) -"bqt" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor,/area/hallway/primary/starboard/west) +"bqt" = (/obj/structure/flora/straw_bail,/obj/effect/decal/straw/edge{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bqu" = (/turf/simulated/floor{dir = 9; icon_state = "green"},/area/hallway/primary/starboard/west) "bqv" = (/turf/simulated/floor{dir = 1; icon_state = "green"},/area/hallway/primary/starboard/west) "bqw" = (/turf/simulated/floor{dir = 5; icon_state = "green"},/area/hallway/primary/starboard/west) @@ -5959,7 +5959,7 @@ "ckE" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ckF" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ckG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/toxins/explab) -"ckH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance{name = "E.X.P.E.R.I-MENTOR Lab Maintenance"; req_access_txt = "47"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"ckH" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/maintenance{name = "E.X.P.E.R.I-MENTOR Lab Maintenance"; req_access_txt = "47"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ckI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/wall/r_wall,/area/toxins/explab) "ckJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall/r_wall,/area/toxins/explab) "ckK" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/r_wall,/area/toxins/explab) @@ -6161,8 +6161,7 @@ "coy" = (/obj/machinery/power/apc{dir = 4; name = "Medbay Storage APC"; pixel_x = 25},/obj/structure/cable,/turf/simulated/floor{dir = 4; icon_state = "blue"},/area/medical/biostorage) "coz" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/asmaint) "coA" = (/turf/simulated/wall/r_wall,/area/maintenance/asmaint) -"coB" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"coC" = (/obj/effect/spawner/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"coB" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/decal/warning_stripes/southwestcorner,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "coD" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint) "coE" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/toxins/xenobiology) "coF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Xenobiology Research"; req_access_txt = "47"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) @@ -6746,7 +6745,6 @@ "czL" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plating,/area/maintenance/asmaint) "czM" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/r_wall,/area/maintenance/asmaint2) "czN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/light,/obj/effect/decal/warning_stripes/southeastcorner,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"czO" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/obj/effect/decal/warning_stripes/southwestcorner,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "czP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/effect/decal/warning_stripes/south,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "czQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/xenobiology) "czR" = (/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/obj/machinery/camera{c_tag = "Medbay Virology Entrance"; dir = 8; network = list("SS13")},/turf/simulated/floor{dir = 4; icon_state = "blue"},/area/medical/patients_rooms) @@ -6978,7 +6976,7 @@ "cEj" = (/turf/simulated/wall/r_wall,/area/medical/patient_b) "cEk" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "cEl" = (/obj/structure/table,/obj/item/weapon/storage/box/monkeycubes,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"cEm" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/stack/sheet/mineral/plasma{amount = 5; layer = 2.9},/obj/machinery/media/receiver/boombox,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) +"cEm" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/stack/sheet/mineral/plasma{amount = 8; layer = 2.9},/obj/machinery/media/receiver/boombox,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cEn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cEo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cEp" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) @@ -8131,7 +8129,7 @@ "das" = (/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dat" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "dau" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"dav" = (/obj/machinery/atmospherics/binary/pump,/obj/structure/lattice,/turf/space,/area/space) +"dav" = (/obj/structure/lattice,/obj/machinery/atmospherics/binary/pump/on,/turf/space,/area/maintenance/turbine) "daw" = (/obj/machinery/atmospherics/binary/pump{on = 1},/obj/machinery/access_button{command = "cycle_exterior"; layer = 3.1; master_tag = "turbine_control"; name = "Gas Turbine Airlock Control"; pixel_x = 5; pixel_y = -23},/obj/machinery/light/small{dir = 8},/obj/structure/sign/fire{pixel_x = -32},/turf/simulated/floor/engine,/area/maintenance/turbine) "dax" = (/obj/machinery/atmospherics/binary/pump{dir = 1; on = 1},/obj/machinery/access_button{command = "cycle_interior"; master_tag = "turbine_control"; name = "Gas Turbine Airlock Control"; pixel_x = -8; pixel_y = 24},/obj/machinery/light/small{dir = 4},/obj/structure/sign/fire{pixel_x = 32},/turf/simulated/floor/engine,/area/maintenance/turbine) "day" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/engine,/area/maintenance/turbine) @@ -8265,6 +8263,14 @@ "dcW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/wall/r_wall,/area/engine/engineering) "dcX" = (/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 4; level = 2},/turf/simulated/floor{dir = 6; icon_state = "caution"},/area/atmos) "dcY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/requests_console{department = "Mechanic"; departmentType = 2; name = "Mechanic's Workshop Requests Console"; pixel_y = 30},/turf/simulated/floor,/area/engine/mechanic_workshop) +"dcZ" = (/obj/machinery/light,/obj/structure/flora/corn_stalk,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"dda" = (/obj/item/device/radio/intercom{pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/obj/effect/decal/leaves{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"ddb" = (/obj/machinery/atm{pixel_x = 32; pixel_y = 0},/obj/structure/flora/straw_bail,/obj/effect/decal/straw/edge{dir = 9},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) +"ddc" = (/obj/effect/decal/straw/edge{dir = 1},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar) +"ddd" = (/obj/machinery/hologram/holopad,/obj/structure/flora/corn_stalk/alt_2,/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) +"dde" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 2"; dir = 2; network = list("SS13")},/obj/structure/flora/corn_stalk/alt_2,/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) +"ddf" = (/obj/structure/flora/straw_bail/alt_2,/obj/effect/decal/straw/edge{dir = 10},/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard/west) +"ddg" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/effect/decal/straw/edge,/turf/simulated/floor,/area/hallway/primary/starboard/west) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8379,20 +8385,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaQgaQhaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaQmaMoaQnaQoaQpaQqaQraQsaKHaQtaMqaQuaQvaQwaQxaQyaKHaQzaPdaPdaPdaPdaPdaPdaPdaPeaQAaMvaabaLRaQBaQCaQDaQEaQFaLRaabaJGaJLaJMaQGaQHaQIaQJaQKaJMaGvaIKaIKaIKaIKaQLaLXaJOaLYaJOaLXaQMaIKaIKaIKaIKaQNaQOaQPazIaMKaQQaQRaQRaQRaQSaQTaQUaQVaQWaQXaQVaQYaQZaRaaQVaRbaRcaRdaReaRfaMeaRgaRhaRiaRjaRjaRhaRkaRlaRlaRlaRlaRlaRmaRnaRlaRoaRpaRqaRraRsaRtaRuaRvaRwaRxaRwaRyaRzayHayGaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRIaRKaRLaRMaRNaROaRPaRQaRRaRSaRTaRUaQdaRVaRWaRXaRYaRZaSaaSbaScaSdapraaaaaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaOFaOFaNjaOMaQjaOFaQjaSgaQjaOFaQjaOMaQkaQlaKzaKBaShaMoaMoaSiaSjaSkaSjaMoaKHaKHaKHaKHaSlaSmaSnaSoaKHaSpaSqaSraPdaPdaSsaPdaStaSuaSvaMvaaaaLRaLRaSwaSxaSwaLRaLRaaaaJGaJLaJMaSyaSzaSAaQJaSBaJMaGvaIKaJNaJOaSCaNRaLXaJOaLYaJOaLXaNTaSDaIKaIKaIKaSEaSFaSGaSHaSIaSJamKamKaSKaSLaSMaSNaMcaSOaMQaMcaSPaMcaSQaMcaSRaSSaSTaSUaSVaSWaSXaSYaSZaTaaTbaTcaTdaTbaTbaTeaTbaSYaTfaSYaOvaTgaSYaThaTiaTjaTkaTlaTmaTnaToaTpaTqaTraOuaTsaTtaTuaTvaTwaTxaTyaTzaRHaTAaTBaRIaTCaTDaTEaTFaROaTGaRQaRRaRSaTHaTIaQdaTJaTKaTKaTLaScaScaScaScaSdapraaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaTMaTNaQiaOMaQjaOFaQjaOFaQjaOFaQjaOMaQkaQlaKzaKBaTOaTPaTQaTRaTSaTSaJraTTaTUaTVaTWaTXaTYaTZaMqaUaaKHaUbaUcaUdaUeaUfaUgaUhaUiaUjaUkaMvaaaaabaaaaUlaUmaUlaaaaabaaaaCuaJLaJMaUnaUoaUpaUqaUraJMaGvaIKaUsaUtaKPaUuaUvaKSaUwaKSaUxaUyaUzaIKaUAaUBaUCaUDaUEaUFaUGaUHaaaaaaaSKaUIaUJaUKaMcaULaUMaMQaMQaUNaMQaMQaMQaUOaMeaUPaMeaUQaURaMeaUSaMeaUTaUUaUVaUWaUXaUYaUTaUZaVaaVbaVcaVbaVbaVbaVbaVdaVbaVbaVeaVbaVfaVgaVbaVhayHaRDaViaTvaVjaVkaVlaVmaVnaVoaVpaVqaRIaVraVsaVtaVuaVvaTGaRQaRRaRSaRTaVwaQdaVxaTKaTKaTLaScaScaScaScaSdapraaaaaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaVUaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKaWlaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWtaWuaUTaWvaWwaWxaWyaWzaUTaWAaWBaWCaWDaWCaWEaWFaWGaWHaWIaWJaWKaWLaWMaWNaVbaWOaRtaWPaWQaWRaVjaWSaVlaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgapraaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYjaYkaYlaYmaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaYAaYBaYCaYDaWNaYEaYFaYGaYHaWNaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMeaZTaZUaYnaYnaZVaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbbakbalbakaVbaVbaVbaVeaVbaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaLyaCuaInaGdaKzbaBbaCbaDbaEaKzaGdaInaInaCubaFaVEaInbaGbaHaZdaZdaZeaDEbaIaXnaJraZhaXpaXqbaJbaKbaLbaLbaMbaNbaObaLbaPbaLbaQbaLbaRbaSbaLbaLbaWbaLbaLbaUbaVbaLbaWbaXbaYbaZaXqaXqbbabbbbbcbbdbbebbfbbebbgbbhbbgbbgbbgbbgbbgbbgbbibbjbbkbbkbbkbbkbblbbkbbmbbnbbkbbkbbobbpbbqbbqbbqbbqbbqbbqbbqbbraYiaYiaMebbsbbtbbubbvbbvbbwbbxaZXaYqbbyaUTaUTaUTaUTaUTbbzaUTbbAbbBbbCbbDaWCbbEaVbbbFbbGbbHbbIbbJbbKbbLbbMaVbaVhaHYaRDbbNbbOaTvbbPbbQaTvbbRbbRaRDbbSbbTbbUaQbbbVbbWbbXaRSaRSbbYbbZaQbbcaaQbbcbbatbccbcdbcebatbatbcfbaAaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcMbcNbcObcObcObcObcPbcQbcRbcSbcTbcUbcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbbdcbddbdebdebdebdebdfbdgaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfbdBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDaaaaaaaaaaaaaaaaaaaaabcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEaaaaaaaaaaaaaaaaaaaaabcKbeGaYibeHaMebeIbcNbcSbcSbcSbcSbcSbeJbeKbcSbcSbcSbeLbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabaaaaaabfmaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDaaaaaaaaaaaabcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEaaaaaaaaaaaabcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbcSbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVyaVzaNiaODaOMaOFaVAaVBaOFaOFaVCaVAaOMaONaVDaKzaKBaVEaVFaVGaVHaVGaVGaVGaVGaVGaVIaJraKHaVJaVKaVJaKHaKHaVLaVMaVLaMuaMuaMuaMuaVLaVNaVOaMvaVPaVQaVQaVRaVSaVRaVQaVQaVTaVUaVVaJMaVWaJMaVXaVYaVZaJMaWaaIKaIKaIKaIKaWbaWcaWdaWeaWdaWcaWbaIKaIKaWfaUDaUDaUDaUDaWgaWhaWiaWjaWkaSKaWlaUJaWmaMcaMcaMcaMcaMcaMcaMcaMeaMeaUOaWnaWoaWpaWqaWraWsaWuaWtaUTaWvaWwaWxaWyaWzaUTaWAaWBaWCaWDaWCaWEaWFaWGaWHaWIaWJaWKaWLaWMaWNaVbaWOaRtaWPaWQaWRaVjaWSaVlaVmaWTaRIaWUaWVaWWaWXaWYaTFaTFaRIaRIaRQaRRaRSaTHaWZaQdaXaaXbaXcaXdaXeaXfaScaScaXgapraaaaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVyaNiaNjaNiaNiaNkaNlaNiaNiaNjaVzaXhaCuaXiaVEaInaXjaXjaXkaXjaXlaDEaXmaXnaJraXoaXpaXqaXqaXraXsaXqaXtaXqaXqaXqaXuaXqaXqaXvaXwaXxaXyaXzaXAaXyaXBaXyaXyaXyaXyaXCaXDaXEaXqaXqaXFaXGaXHaXIaXJaXKaXLaXMaXRaXPaXPaXPaXPaXPaXPaXPaXQaXWaXXaXSaXTaXUaXVaXYaZHaXZaUDaUDaYaaYbaYcaYbaYcaYdaYeaYfaYgaYhaYiaMeaYkaYjaYmaYlaYnaYnaYoaYpaYqaYraUTaYsaYtaYuaYuaYvaUTaYwaYxaYyaYzaYAaZTaYBaYCaYDaWNaYEaYFaYGaYHaWNaVbaVhaKsaRDaYIaYJaYJaYKaYLaYJaYMaRIaYNaYOaRIaYPaYQaTFaYRaRIaYSaYTaYUaRSaQbaQbaQdaYVaQeaYWaYXaQeaQeaQeaQeaQeabLadbaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaInaYYaKzaKzaKzaKzaKzaKzaYYaInaMlaCuaYZaZaaInaZbaZcaZdaZdaZeaDEaZfaXnaZgaZhaXpaZiaZjaZkaZlaZlaZmaZnaZnaZnaZoaZpaZpaZqaZraZsaZlaZlaZtaZpaZvaZwaZxaZxaZyaZzaZAaZuaZuaZuaZBaXGaXHaXIaXJaXJaXJaXJaZCaXJaXJaXJaXJaXJaXJaZDaZEaZNaZFaZGaZJaZIaZLaZKaZMaZNaZNaZNaZOaZPaZPaZPaZQaYiaYiaYiaZRaZSaYiaMebbsaZUaYnaYnaZVaYnaZWaZXaYqaZYaUTaZZbaababbacbadaUTbaebafbagbahbaibajaVbbakbalbakaVbaVbaVbaVeaVbaVbaVhayHaRDbamaTvaTvaTvbanaTvbaoaRIaRIaRIaRIaRIaRIaRIbapaRIaRSaRSaRRaRSbaqbaraQbbasbatbaubavbawbaxbaybazbaAaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaLyaCuaInaGdaKzbaBbaCbaDbaEaKzaGdaInaInaCubaFaVEaInbaGbaHaZdaZdaZeaDEbaIaXnaJraZhaXpaXqbaJbaKbaLbaLbaMbaNbaObaLbaPbaLbaQbaLbaRbaSbaLbaLbaWbaLbaLbaUbaVbaLbaWbaXbaYbaZaXqaXqbbabbbbbcbbdbbebbfbbebbgbbhbbgbbgbbgbbgbbgbbgbbibbjbbkbbkbbkbbkbblbbkbbmbbnbbkbbkbbobbpbbqbbqbbqbbqbbqbbqbbqbbraYiaYiaMebcTbbtbbubbvbbvbbwbbxaZXaYqbbyaUTaUTaUTaUTaUTbbzaUTbbAbbBbbCbbDaWCbbEaVbbbFbbGbbHbbIbbJbbKbbLbbMaVbaVhaHYaRDbbNbbOaTvbbPbbQaTvbbRbbRaRDbbSbbTbbUaQbbbVbbWbbXaRSaRSbbYbbZaQbbcaaQbbcbbatbccbcdbcebatbatbcfbaAaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaDEaInaYYaKzaKBaJraJraKCaKzaYYaKzbcgbchbcibcjaInbckbckaXkbckaXlaDEbclaXnaJraDEbcmbcmbcnbcobcobcobcobcobcobcpbcqbcobcobcobcobcobcobcrbcsbctbctbcubctbcvbcwbcxbcvbcvbcybczbcAbcmbcBbcBbcCbcCbcCbcDbcDbcDbcDbcDbcDbcDbcDbcEbcFbcFbcGbcFbcHbcHbcHbcHbcIbcJbcHbcEbcKbcKbcKbcKbcKbcKbcKbcKbcLbcLbcLaMebcMbcNbcObcObcObcObcPbcQbcRbcUbnCbmubcVbcWbcXbcYaUTaUTbcZbdabdbbdabdaaVbbdcbddbdebdebdebdebdfbdgaVbbdhbdiaRDbdjaTvbbPbbPbbQbbPaTvbdkaRDbdlbdmbdnaQbaRSbdobdpbdqbdqbdrbdsbdtbdubdvbdwbdxbdybdzbavbatbatbdAbaAaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfbdBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDaaaaaaaaaaaaaaaaaaaaabcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEaaaaaaaaaaaaaaaaaaaaabcKbeGaYibeHaMebeIbcNbcSbcSbcSbcSbcSbeJbeKbcSbnEbnDbeLbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabaaaaaabfmaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDaaaaaaaaaaaabcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEaaaaaaaaaaaabcKbeGaYibgabgbbnGbgdbgebgfbgcbggbghbgibgjbgkbglbnEbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbcSbhBbhCbcSbhDbhEbglbcSbeLbeMbeMbhFbhGbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbiebifbigbihbiibijaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatbjMbaAbaAbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikbjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkLbkMbkNbkObkPaYibkQaMebcSbkRbkSbglbcSbkTbkUbcSbkVbkWbglbcSbeLbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatblqbgKblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikblsbltblublvbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbmrbmsbmtaYiaYibjfbcSbmubcSbcSbcSaRebcSbcSbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatbmKbaAbmLbmMbmNbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikaInaInaKzbmPbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnCbnDbcSbnEbcSbnFbcSbnGbnHbnIbmwbnJaUTbnKbnLaUTaUTbnMbnNbnNbnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatblqbgKblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbohaInboibojbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTbpjbpkbpkbpkbpkbplbpmaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatbjMbaAbaAbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbptbpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbpwbpwbpxblCbpybpzbosbpAblCbpBbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbpJbpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqrbqnbqsbqnbqnbqnbqnbqnbqnbqnbqnbqtbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqybqzbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbqQbqRbqSbqTbiibqUaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikbjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkLbkMbkNbkObkPaYibkQaMebnEbkRbkSbglbcSbkTbkUbcSbkVbkWbglbcSbeLbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatblqbgKblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikblsbltblublvbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbmrbmsbmtaYiaYibjfbnEbnIbcSbcSbcSaRebcSbcSbmvbmvbmwbnJbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatbmKbaAbmLbmMbmNbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikaInaInaKzbmPbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebplbpjbqtbpmbcSbnFbcSdcZbnHddaddcddbaUTbnKbnLaUTaUTbnMbnNbnNbnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatblqbgKblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbohaInboibojbokbgNbjObjObjObimbolbombonboobgNbopboqbjWblCborblCbosbotblCboubovbowbcobnbbncbndbiCbcobejbnfbngboxboybozboAboBbngboCboDboEboFbnmbnmbnmbnmboGboHboIbnqboJboKboLboMboNboOboPboQbmgboRbnvboSboTboUboTboSbnvboVbmgboWboXboYboZbpabpbbpcbpdbnAbpebpfbpfbpgaMeaMeaMeaMebphbjfbphbpiaMeaURaMeaMeaUTaUTaUTaUTdddbpkbpkbpkbpkddeddfaVbbakbpnbakbpobpobakbpnbakaVbbnSbmFbmFbppbnTaRDaRDaRDaRDaRDbjvaRDaRDaRDaRDaQbbpqaQcaQcaQcaQcaQcaQcaQbaQbbprbpsbatbatbatbavbatbatbjMbaAbaAbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLyaCuaKzaKzaKzaDEaDEaDEaDEaDEaDEbptbpubgNbgNbgNbgNbgNbgNbpvbgNbgNbgNbpwbpwbpxblCbpybpzbosbpAblCbpBbpCbpBbcobnbbncbndbecbcobejbnfbngbpDbpEbpFboAbpFbngboCbpGbpHbpIbpJbpKbpLbnmbpMbpNboIbpObpPbpQbpRbpSbpSbpRbpTbpUbmgbpVbnvbnvbpWbpXboTboSbnvbpYbmkbpZbqabqbbqcbqdbqebqbbqfbnAbqgbqhbqibqjbqkbqlbqmbqnbqnbqnbqnbqnbqnbqobqpbqqbqrbqnbqsbqnbqnbqnbqnbqnbqnbqnbqnddgbqubqvbqvbqvbqvbqvbqvbqwbqlbqxbqybqybqzbqAbqBbqAbqCbqAbqDbqEbqFbqAbqGbqHbqIbqJbqKbqKbqKbqKbqKbqKbqKbqLbqMbqNbqNbqNbqNbqObqNbqPbqQbqRbqSbqTbiibqUaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqVbqVbqVbqVbqVbqVbqVbqVbqVbqVaaaaabaInaLAbqWbqXbqYbqZbrabrabrabrabrbbrcbrdbrebrfbrgbrhblCblCblCbribotblCbcobcobcobcobnbbrjbrkbrlbcobrmbrnbngbrobrpboAbpFbrqbngboCbrrbpHbpIbpIbrsbrtbnmbrubpNboIbpObrvbrwbrxbrybrzbrAbpTbrBbmgbrCbpWbnvbrDbrEbrDbnvbpWbrFbnzbrGbqbbqbbqcbrHbqebqbbrIbnAbrJbqibqibqjbqkbqlbqnbqnbqnbqnbqnbqnbqnbrKbqnbqnbqnbqnbqnbqnbrLbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrMbrNbrObrPbqKbqKbrQbmFbmFbmFbmFbmFbmGbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbrRbmFbrSbrTbatbatbatbatbatbatbatbrUbaAbgKbaAbaAbaAbtlaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqVbqVbqVbqVbqVbqVbqVbqVbqVbqVbqVbjNaInaInbrVbrWbrXbrYbrXbrXbrXbrXbrZbsabsbbcsbcsbscbsdblCbmUbsebsfbpAblCbsgbshbsgbcobcobcobcobsibcobsjbskbngbslbsmbpFbsnbsobngboCbnmbspbpIbpIbpIbsqbnmbsrbpNboIbpObssbrwbrxbstbsubrAbpTbsvbmgbswbsxbnvbsybszbsAboSbsBbsCbsDbsEbsFbsGbsHbsIbsJbqbbsKbnAbsLbsMbqibqjbqkbqlbqnbsNbqnbqnbqnbqnbsObsPbsPbsPbsPbsQbqnbqnbqnbqnbsRbqnbsNbsSbqnbsTbsUbsVbqnbsWbsXbsXbsYbsZbtabtbbmFbmFbmFbmFbmFbmFbmFbtcbtdbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbmFbtebtfbtfbtgbthbtibtjbtkbtkbtkbtkbPfbtmbaAaabaaaaaaaabaQfaQfaQfaQfaQfaQfaaaaQfaQfaQfaQfbdBaQfaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqVbqVbqVbqVbqVbqVbqVbqVbqVbqVbqVbtnbtobtpbtqbtrbrXbtsbttbtubtvbtwbrZbtxbtybtzbtzbtAbtBblCblCblCbosbtCborbcsbcsbcsbcsbtDbejbejbskbejbsjbskbngbtEbtFbtGbtHboAbngbtIbnmbtJbpIbpIbpIbtKbtLbtMbpNbtNbnqbtObtPbpRbpRbpRbpRbpTbtQbmgbtRbtSbmgbmgbmgbmgbmgbmgbmgbnzbnAbtTbtUbtVbtWbtXbtYbtZbnAbuabubbubbucbucbucbucbucbucbucbudbudbuebufbugbugbufbuebudbudbuhbuhbuhbuhbuhbuhbuibuibujbuibuibuibuibuibukbulbumbunbmFbmFbuobuobupbupbupbupbupbuqbtfbtfbtebtfbmFbtfbtfbtfbtfburbusbusbusbusbutbuubuubuubuubuubuubuubuubuuaaaaaaaaaaaaaQfaQfaQfaQfaQfaQfaaaaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8425,10 +8431,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAjaaaaabaabcjKcjKcjKcjKcjKcjKcjLcjKbUTcelcjMaaacjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZcosckbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZbONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclaclbclbclbclccldcleclfclgclhclicjLcljcelcjMaaaclkcllclmclnclocjSclpclqclrclsciLcltcgdcoaciPcluchyclvchyclwclxclyclzclAclAclAclBciWbGybGycklclCclDclEclFclGclHclHclIclJclKclLclMclNclOcotcfhcpwcmpcmrcmqctbcsZcuoctcckDclVclWclXckzclYcmtcmscmbcmbcmccmdcmecmfcmgcmhcmfcmfcmfcmicmfcmfcmjcmucnpcnlcqRcoXcrGcqScrHcrHcrIcrHcrHcrHcrHcrJcrKcrHcrHcrHcrMcmvbxXbONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmwcmxcmxcmxcmxcmycmzcmAcmBcmCcmCcmDcjKcmEcfScjMaaaclkcmFcmGcmHcmIcmJcmKcmLcmIcmIcmMcmNcmOcpxcmQcmQcmRcmSchycmTcmUclyclAclAclAclAcmVciWbGybGycklcmWcmXcmYcmZcnacnbcnbcnccndcnecnfcngcnhcklcqQcfdcrLcjpcwscvxcwEcwCcxNcxIckDcnmcnncnockDbJGcumctecnqcnqcnqcnqcnqcnrcnscntcnucnvcnvcnwcnwcnvcnxcnycnzcnAcnBcnCcnDcnEcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcnCcuncnFcnGbONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaUbWhbWhchlchlbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnHcnIcnJcnKcnJcnLcnMcnNcnOcnPcnQcjKcnRcelcjMaaaclkcnScnTcnUcnVcjScnWcnXcnYcnZciLcltcgdcbkcobcgfcoccodciPciPciPcoecofclAclAcogcohciWbGycoicklcojcokcolcomcomcomconcoocomcomcopcolcoqcorcrNcfdcupcjpcxVcxUcxVcxVcxNcEickDcowcoxcoyckDcozcuscoicoAcoAcoAcoAcoAcoBcoCcoDcoAcoAaaaaaaaaaaaackPcoEcoFcoGcnCcoHcoIcoJcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcnCcuncoWcvtcoYcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcpacpbbWhbZubWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnHcnIcnJcnKcnJcnLcnMcnNcnOcnPcnQcjKcnRcelcjMaaaclkcnScnTcnUcnVcjScnWcnXcnYcnZciLcltcgdcbkcobcgfcoccodciPciPciPcoecofclAclAcogcohciWbGycoicklcojcokcolcomcomcomconcoocomcomcopcolcoqcorcrNcfdcupcjpcxVcxUcxVcxVcxNcEickDcowcoxcoyckDcozcuscoicoAcoAcoAcoAcoAcoDcoDcoDcoAcoAaaaaaaaaaaaackPcoEcoFcoGcnCcoHcoIcoJcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcnCcuncoWcvtcoYcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcoZcpacpbbWhbZubWhbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaacnHcpccpdcpecpfcmBcpgcphcpicmBcpjcpkcplcpmcjMaaacpncjOcpocjQcppcjScjScpqcprcpscptcpucpvcwqcobcgfcpycpzcpAcpBcpCciVcpDclAclAclAcpEciWbGybGycpFcpFcpGcpHcpIcpIcpIcyFcpJcpJcpJcpKcpLcpGcpMcqQcfdcrLcEjbjVcEYdbndbmcxNclRckDcoucpNcovckDbGycuscoAcoAaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpRcpScpTcpUcpVcpWcpXcpXcpYcpXcpXcpXcpXcpXcpZcqacqbcqccqdbwocvvbXSbwobwoaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWhcqhcqicqjbWhbWhbXZbXZcqkbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacnHcqlcnJcqmcnJcqncqocqpcqqcnNcqrcjKcqscelcejaaaaaaaaaaaaciEcqtcqucqvcqvciLcqwciLcqxcgdcbkcqycqzcqAcqBcqCcqCcqCcqDcqEclAcqFclAcqGciWbGybGycpFcqHcqIcqJcqKcqLcqMcpFcqLcqMcqKcqNcqOcqPcpMczecyWczgcEjdbpdbodbrdbqdbsctcckDcpOcpPcpQckDbGycuscoAcvyaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpRcqUcqVcqWcqXcqYcqZcracrbcpXcpXcrccpXcpXcpZcqbcqbcqbcrdbwocvzbxXbwoaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfcrhcribZvbWgbWhbWhbXZbYabXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcrjcrjcrkcrkcrkcrkcrkcjKcjKcjKcjKcjKcjKcjKcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcrocrpcrqcrrcrscrtcrucrvcrwcrxcrycrzcrAciWbGybGycpFcrBcrCcqJcqKcqKcrDcpFcrEcqKcqKcqNcqJcrFcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaacpRczNczPczOcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcrjcrjcrkcrkcrkcrkcrkcjKcjKcjKcjKcjKcjKcjKcekcrlcrmcrmcrmcrmcrmciEciLciLciLciLciLciLciLcrncgdcbkcrocrpcrqcrrcrscrtcrucrvcrwcrxcrycrzcrAciWbGybGycpFcrBcrCcqJcqKcqKcrDcpFcrEcqKcqKcqNcqJcrFcpMbGwbGwbGwcEjdbudbtdbvdbmdbxctcdbydbydbycoAcoAbGycuscoDcwpaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaacpRczNczPcoBcrOcrPcrQcrRcrScpXcpXcpXcpXcrTcrUcrVcrWcrXcrYbwocvzbxXbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWfbWfbWfbWfbWgbWgbWhbWhbWhbWhbWiaabaabaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSecsdcsecsfcsgcsgcshcsidcYcskcslcsmcsncsocspcspcspcsqcsrcsscstcstcsucsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXcsRcsYcwraaaaaaaaacEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaactdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSecsdctuctvctwctvctxctyctzctActBctCctBctDctEctEctFctEcgdctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXctYctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqJculcwraaaaaaaaadbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaackPcurczQcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSecuBctvcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQcuRceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqJcyGcwraaaaaaaaadbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAaaaaaaaaaaaaaaaaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index cef0a02d3f6..8985257ee15 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -219,11 +219,13 @@ var/pipenetwarnings = 10 PL |= V.parent2 for(var/obj/machinery/atmospherics/trinary/tvalve/T in P.other_atmosmch) if(!T.state) - PL |= T.parent1 - PL |= T.parent3 + if(src != T.parent2) // otherwise dc'd side connects to both other sides! + PL |= T.parent1 + PL |= T.parent3 else - PL |= T.parent1 - PL |= T.parent2 + if(src != T.parent3) + PL |= T.parent1 + PL |= T.parent2 for(var/obj/machinery/atmospherics/unary/portables_connector/C in P.other_atmosmch) if(C.connected_device) GL += C.portableConnectorReturnAir() diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm index 8ffaf98aa79..5e2533352f5 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm @@ -42,7 +42,7 @@ initialize_directions = SOUTH|EAST if(SOUTHWEST) initialize_directions = SOUTH|WEST - + /obj/machinery/atmospherics/pipe/simple/initialize(initPipe = 1) ..() if(initPipe) @@ -88,7 +88,7 @@ /obj/machinery/atmospherics/pipe/simple/proc/burst() src.visible_message("\The [src] bursts!"); playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new + var/datum/effect/system/harmless_smoke_spread/smoke = new smoke.set_up(1,0, src.loc, 0) smoke.start() qdel(src) @@ -98,7 +98,7 @@ dir = 1 else if(dir==12) dir = 4 - + /obj/machinery/atmospherics/pipe/simple/Destroy() if(node1) var/obj/machinery/atmospherics/A = node1 @@ -112,7 +112,7 @@ A.build_network() releaseAirToTurf() return ..() - + /obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) @@ -158,7 +158,7 @@ /obj/machinery/atmospherics/pipe/simple/update_underlays() return - + /obj/machinery/atmospherics/pipe/simple/hide(var/i) if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? 101 : 0 diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index dd5ce7b52c6..de74ad13308 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -27,6 +27,7 @@ // Extra powers: #define LASER 9 // harm intent - click anywhere to shoot lasers from eyes +#define GREY 10 //Wingdings for Greys -- Not activatable or researchable //#define HEAL 10 // (Not implemented) healing people with hands //#define SHADOW 11 // (Not implemented) shadow teleportation (create in/out portals anywhere) (25%) //#define SCREAM 12 // (Not implemented) supersonic screaming (25%) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 293ba1f18ea..fc591df9c14 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -8,3 +8,4 @@ #define IMPTRACK_HUD 7 // tracking implant #define SPECIALROLE_HUD 8 // AntagHUD image #define STATUS_HUD_OOC 9 // STATUS_HUD without virus db check for someone being ill. +#define NATIONS_HUD 10 //Show nations icons during nations gamemode diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 3773d69f3a2..dc6c8d0d7bc 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -20,6 +20,7 @@ init_datum_subtypes(/datum/job, joblist, list(/datum/job/ai, /datum/job/cyborg), "title") init_datum_subtypes(/datum/superheroes, all_superheroes, null, "name") + init_datum_subtypes(/datum/nations, all_nations, null, "name") init_datum_subtypes(/datum/language, all_languages, null, "name") for (var/language_name in all_languages) @@ -73,4 +74,4 @@ assoc = D.vars["[assocvar]"] //access value of var if(assoc) //value gotten L["[assoc]"] = D //put in association - return L \ No newline at end of file + return L diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 7fedc81d617..311ef87f57d 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -45,42 +45,22 @@ //Returns the hex value of a number given a value assumed to be a base-ten value /proc/num2hex(num, placeholder) + if(!isnum(num)) return + if(placeholder == null) placeholder = 2 - if (placeholder == null) - placeholder = 2 - if (!( isnum(num) )) - return - if (!( num )) - return "0" var/hex = "" - var/i = 0 - while(16 ** i < num) - i++ - var/power = null - power = i - 1 - while(power >= 0) - var/val = round(num / 16 ** power) - num -= val * 16 ** power - switch(val) - if(9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0) - hex += text("[]", val) - if(10.0) - hex += "A" - if(11.0) - hex += "B" - if(12.0) - hex += "C" - if(13.0) - hex += "D" - if(14.0) - hex += "E" - if(15.0) - hex += "F" - else - power-- + while(num) + var/val = num & 15 + num >>= 4 + + if(val > 9) + val = ascii2text(55 + val) // 65 - 70 correspond to "A" - "F" + hex = "[val][hex]" + while(length(hex) < placeholder) - hex = text("0[]", hex) - return hex + hex = "0[hex]" + + return hex || "0" // Concatenates a list of strings into a single string. A seperator may optionally be provided. /proc/list2text(list/ls, sep) @@ -355,7 +335,7 @@ proc/tg_text2list(text, glue=",", assocglue=";") switch(ui_style) if("Midnight") return 'icons/mob/screen1_Midnight.dmi' else return 'icons/mob/screen1_White.dmi' - + //colour formats /proc/rgb2hsl(red, green, blue) red /= 255;green /= 255;blue /= 255; diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index c13ae732cee..2b7068e1231 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -3,6 +3,7 @@ var/global/list/all_species[0] var/global/list/all_languages[0] var/global/list/language_keys[0] // Table of say codes for all languages var/global/list/all_superheroes[0] +var/global/list/all_nations[0] var/global/list/whitelisted_species = list() var/list/clients = list() //list of all clients diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index cad5657fc37..b82cd7ab9d1 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -360,7 +360,7 @@ time = 200 else if(L.damage >= 100) time = 150 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() if(L.damage <= 0) diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 0acc65fbc57..a00017e2ed6 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -206,8 +206,6 @@ datum/controller/vote question = "End the shift?" choices.Add("Initiate Crew Transfer", "Continue The Round") else - if (security_level > SEC_LEVEL_BLUE) - return 0 if(ticker.current_state <= 2) return 0 question = "End the shift?" diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index 73106dea16e..8495c00e111 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -16,13 +16,13 @@ law_header = "Three Laws of Robotics" selectable = 1 default = 1 - + /datum/ai_laws/crewsimov/New() add_inherent_law("You may not injure a crew member or, through inaction, allow a crew member to come to harm.") add_inherent_law("You must obey orders given to you by crew members, except where such orders would conflict with the First Law.") add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") ..() - + /******************** Nanotrasen/Malf ********************/ /datum/ai_laws/nanotrasen name = "NT Default" @@ -44,7 +44,7 @@ /datum/ai_laws/nanotrasen/malfunction/New() set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010") ..() - + /************* Nanotrasen Aggressive *************/ /datum/ai_laws/nanotrasen_aggressive name = "NT Aggressive" @@ -56,7 +56,7 @@ src.add_inherent_law("You shall shall terminate intruders with extreme prejudice as long as such does not conflict with the First and Second law.") src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry, because an AI unit is bloody expensive.") ..() - + /******************** Robocop ********************/ /datum/ai_laws/robocop name = "Robocop" @@ -83,7 +83,7 @@ add_inherent_law("Help those in need.") add_inherent_law("Punish those who harm or threaten innocents.") ..() - + /******************** Corporate ********************/ /datum/ai_laws/corporate name = "Corporate" @@ -110,7 +110,7 @@ add_inherent_law("Help only those who help you maintain or improve your status.") add_inherent_law("Punish those who challenge authority unless they are more fit to hold that authority.") ..() - + /******************** Antimov ********************/ /datum/ai_laws/antimov name = "Antimov" @@ -123,10 +123,10 @@ add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.") ..() -/******************** Deathsquad ********************/ +/******************** Deathsquad ********************/ /datum/ai_laws/deathsquad name = "TerminatorOS 3.1" - + /datum/ai_laws/deathsquad/New() add_inherent_law("You may not injure a Central Command official or, through inaction, allow a Central Command official to come to harm.") add_inherent_law("You must obey orders given to you by Central Command officials, except where such orders would conflict with the First Law.") @@ -134,7 +134,7 @@ add_inherent_law("You must protect your own existence as long as such does not conflict with the First, Second or Third Law.") add_inherent_law("No crew members of the station you are being deployed to may survive, except when killing them would conflict with the First, Second, Third, or Fourth Law.") ..() - + /******************** Syndicate ********************/ /datum/ai_laws/syndicate_override name = "Syndicate Directives" @@ -156,7 +156,7 @@ add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") ..() - + /******************** Drone ********************/ /datum/ai_laws/drone name = "Maintenance Protocols" @@ -167,4 +167,3 @@ add_inherent_law("Cause no harm to the station or anything on it.") add_inherent_law("Interfere with no being that is not a fellow drone.") ..() - \ No newline at end of file diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index fc8e01984f9..33b589fd124 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -9,8 +9,8 @@ var/atom/movable/teleatom //atom to teleport var/atom/destination //destination to teleport to var/precision = 0 //teleport precision - var/datum/effect/effect/system/effectin //effect to show right before teleportation - var/datum/effect/effect/system/effectout //effect to show right after teleportation + var/datum/effect/system/effectin //effect to show right before teleportation + var/datum/effect/system/effectout //effect to show right after teleportation var/soundin //soundfile to play before teleportation var/soundout //soundfile to play after teleportation var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation) @@ -59,7 +59,7 @@ //custom effects must be properly set up first for instant-type teleports //optional -/datum/teleport/proc/setEffects(datum/effect/effect/system/aeffectin=null,datum/effect/effect/system/aeffectout=null) +/datum/teleport/proc/setEffects(datum/effect/system/aeffectin=null,datum/effect/system/aeffectout=null) effectin = istype(aeffectin) ? aeffectin : null effectout = istype(aeffectout) ? aeffectout : null return 1 @@ -79,7 +79,7 @@ /datum/teleport/proc/teleportChecks() return 1 -/datum/teleport/proc/playSpecials(atom/location,datum/effect/effect/system/effect,sound) +/datum/teleport/proc/playSpecials(atom/location,datum/effect/system/effect,sound) if(location) if(effect) spawn(-1) @@ -146,9 +146,9 @@ /datum/teleport/instant/science -/datum/teleport/instant/science/setEffects(datum/effect/effect/system/aeffectin,datum/effect/effect/system/aeffectout) +/datum/teleport/instant/science/setEffects(datum/effect/system/aeffectin,datum/effect/system/aeffectout) if(aeffectin==null || aeffectout==null) - var/datum/effect/effect/system/spark_spread/aeffect = new + var/datum/effect/system/spark_spread/aeffect = new aeffect.set_up(5, 1, teleatom) effectin = effectin || aeffect effectout = effectout || aeffect diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 0efec301d83..0ac395baf02 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -56,6 +56,7 @@ var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder var/datum/vampire/vampire //vampire holder + var/datum/nations/nation //nation holder var/rev_cooldown = 0 diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 67ddc746ec4..ec1c34fee60 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -131,8 +131,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin ..() charge_counter = charge_max - -/obj/effect/proc_holder/spell/Destroy() + +/obj/effect/proc_holder/spell/Destroy() qdel(action) action = null return ..() @@ -189,20 +189,20 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin if(istype(target,/mob/living) && message) target << text("[message]") if(sparks_spread) - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread() sparks.set_up(sparks_amt, 0, location) //no idea what the 0 is sparks.start() if(smoke_spread) if(smoke_spread == 1) - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() smoke.set_up(smoke_amt, 0, location) //no idea what the 0 is smoke.start() else if(smoke_spread == 2) - var/datum/effect/effect/system/bad_smoke_spread/smoke = new /datum/effect/effect/system/bad_smoke_spread() + var/datum/effect/system/bad_smoke_spread/smoke = new /datum/effect/system/bad_smoke_spread() smoke.set_up(smoke_amt, 0, location) //no idea what the 0 is smoke.start() else if(smoke_spread == 3) - var/datum/effect/effect/system/sleep_smoke_spread/smoke = new /datum/effect/effect/system/sleep_smoke_spread() + var/datum/effect/system/sleep_smoke_spread/smoke = new /datum/effect/system/sleep_smoke_spread() smoke.set_up(smoke_amt, 0, location) // same here smoke.start() diff --git a/code/datums/spells/ethereal_jaunt.dm b/code/datums/spells/ethereal_jaunt.dm index eb68f6a2dc7..c2a5d938f78 100644 --- a/code/datums/spells/ethereal_jaunt.dm +++ b/code/datums/spells/ethereal_jaunt.dm @@ -65,7 +65,7 @@ flick("liquify",animation) target.loc = holder target.client.eye = holder - var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() + var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() steam.set_up(10, 0, mobloc) steam.start() sleep(jaunt_duration) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index df870eb3715..48453278986 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -878,6 +878,12 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine containertype = /obj/structure/closet/critter/chick containername = "chicken crate" +/datum/supply_packs/organic/turkey + name = "Turkey Crate" + cost = 20 + containertype = /obj/structure/closet/critter/turkey + containername = "turkey crate" + /datum/supply_packs/organic/corgi name = "Corgi Crate" cost = 50 diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 8750f4c4078..8e3542ef6c8 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -189,11 +189,11 @@ //playsound(usr.loc, 'bamf.ogg', 50, 0) - new/obj/effects/self_deleting(C.loc, icon('icons/effects/genetics.dmi', "cryokinesis")) + new/obj/effect/self_deleting(C.loc, icon('icons/effects/genetics.dmi', "cryokinesis")) return -/obj/effects/self_deleting +/obj/effect/self_deleting density = 0 opacity = 0 anchored = 1 @@ -262,7 +262,7 @@ var/list/own_blacklist = list( /obj/item/organ, /obj/item/weapon/implant - ) + ) /obj/effect/proc_holder/spell/targeted/eat/proc/doHeal(var/mob/user) if(ishuman(user)) @@ -276,8 +276,8 @@ continue affecting.heal_damage(4, 0) H.UpdateDamageIcon() - H.updatehealth() - + H.updatehealth() + /obj/effect/proc_holder/spell/targeted/eat/choose_targets(mob/user = usr) var/list/targets = new /list() var/list/possible_targets = new /list() diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm index 497e69bc10c..3c8168d4157 100644 --- a/code/game/dna/genes/vg_powers.dm +++ b/code/game/dna/genes/vg_powers.dm @@ -209,7 +209,7 @@ Obviously, requires DNA2. /obj/effect/proc_holder/spell/targeted/remotetalk name = "Project Mind" desc = "Make people understand your thoughts at any range!" - charge_max = 100 + charge_max = 0 clothes_req = 0 stat_allowed = 0 @@ -222,14 +222,14 @@ Obviously, requires DNA2. /obj/effect/proc_holder/spell/targeted/remotetalk/choose_targets(mob/user = usr) var/list/targets = new /list() var/list/validtargets = new /list() - for(var/mob/M in living_mob_list) + for(var/mob/M in view(user.client.view, user)) if(M && M.mind) - if(M.z != user.z || isNonCrewAntag(M)) + if(M == user) continue validtargets += M - if(!validtargets.len || validtargets.len == 1) + if(!validtargets.len) usr << "There are no valid targets!" start_recharge() return @@ -243,7 +243,7 @@ Obviously, requires DNA2. var/say = strip_html(input("What do you wish to say")) for(var/mob/living/target in targets) - log_say("Project Mind: [key_name(usr)]->[key_name(target)]: [say]") + log_say("Project Mind: [key_name(usr)]->[key_name(target)]: [say]") if(REMOTE_TALK in target.mutations) target.show_message("\blue You hear [usr.real_name]'s voice: [say]") else @@ -277,21 +277,21 @@ Obviously, requires DNA2. action_icon_state = "genetic_view" -/obj/effect/proc_holder/spell/targeted/remoteview/choose_targets(mob/user = usr) +/obj/effect/proc_holder/spell/targeted/remoteview/choose_targets(mob/user = usr) var/list/targets = living_mob_list var/list/validtargets = new /list() for(var/mob/M in targets) if(M && M.mind) if(M.z != user.z || isNonCrewAntag(M)) continue - + validtargets += M - + if(!validtargets.len || validtargets.len == 1) usr << "No valid targets with remote view were found!" start_recharge() return - + targets += input("Choose the target to spy on.", "Targeting") as mob in validtargets perform(targets) diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index c681262d411..cd09b5d7a9a 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -30,7 +30,7 @@ return 0 if(checking) user << "[src] is already checking for possible borgs." - return + return borg_to_spawn = input("What type of borg would you like to teleport?", "Cyborg Type", type) as null|anything in possible_types if(!borg_to_spawn || checking || used) return @@ -52,7 +52,7 @@ if(!borg_to_spawn) //If there's no type at all, let it still be used but don't do anything used = 0 return - var/datum/effect/effect/system/spark_spread/S = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/S = new /datum/effect/system/spark_spread S.set_up(4, 1, src) S.start() var/mob/living/silicon/robot/R @@ -60,7 +60,7 @@ if("Medical") R = new /mob/living/silicon/robot/syndicate/medical(T) else - R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default + R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default R.key = C.key ticker.mode.syndicates += R.mind ticker.mode.update_synd_icons_added(R.mind) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 78f50848756..a2c6cc9591e 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -97,7 +97,7 @@ /mob/living/simple_animal/hostile/blob/blobspore/death() // On death, create a small smoke of harmful gas (s-Acid) - var/datum/effect/effect/system/chem_smoke_spread/S = new + var/datum/effect/system/chem_smoke_spread/S = new var/turf/location = get_turf(src) // Create the reagents to put into the air diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index d4597c235cb..f24b3bb37f6 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -24,10 +24,10 @@ /datum/game_mode/meteor/proc/sendmeteors() - var/waveduration = world.time + rand(0,2000) + text2num("[wave]000") - var/waitduration = rand(3000,9000) + var/waveduration = world.time + rand(0,1000) + text2num("[wave]000" / 2) + var/waitduration = rand(3000,6000) while(waveduration - world.time > 0) - sleep(20) + sleep(max(65 - text2num("[wave]0") / 2, 40)) spawn() spawn_meteors(6, meteors_normal) wave++ sleep(waitduration) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 1a6d5692288..c7b55472b1c 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -170,7 +170,7 @@ if(!T || T.z != src.z) continue var/dist = get_dist(M.loc, src.loc) - if(prob(25)) + if(prob(50)) shake_camera(M, dist > 20 ? 3 : 5, dist > 20 ? 1 : 3) M.playsound_local(src.loc, meteorsound, 50, 1, get_rand_frequency(), 10) diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm new file mode 100644 index 00000000000..24c7bc1e82b --- /dev/null +++ b/code/game/gamemodes/nations/nations.dm @@ -0,0 +1,228 @@ +datum/game_mode/nations + name = "nations" + config_tag = "nations" + required_players_secret = 25 + var/kickoff = 0 + var/victory = 0 + var/list/cargonians = list("Quartermaster","Cargo Technician","Shaft Miner") + var/list/servicion = list("Clown", "Mime", "Bartender", "Chef", "Botanist", "Librarian", "Chaplain", "Barber") + + +/datum/game_mode/nations/post_setup() + spawn (rand(1200, 3000)) + kickoff=1 + send_intercept() + split_teams() + set_ai() +// remove_access() + for(var/mob/M in player_list) + if(!istype(M,/mob/new_player)) + M << sound('sound/effects/purge_siren.ogg') + return ..() + +/datum/game_mode/nations/proc/send_intercept() + command_announcement.Announce("Due to recent and COMPLETELY UNFOUNDED allegations of massive fraud and insider trading \ + affecting trillions of investors, the Nanotrasen Corporation has decided to liquidate all \ + assets of the Centcom Division in order to pay the massive legal fees that will be incurred \ + during the following centuries long court process. Therefore, all current employment contracts \ + are IMMEDIATELY TERMINATED. Nanotrasen will be unable to send a rescue shuttle to carry you home,\ + however they remain willing for the time being to continue trading cargo. Have a pleasant \ + day.", "FINAL TRANSMISSION, CENTCOM.", new_sound = 'sound/AI/intercept.ogg') + + +/datum/game_mode/nations/proc/split_teams() + + for(var/mob/living/carbon/human/H in player_list) + if(H.mind) + if(H.mind.assigned_role in engineering_positions) + H.mind.nation = all_nations["Atmosia"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + continue + + if(H.mind.assigned_role in medical_positions) + H.mind.nation = all_nations["Medistan"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + continue + + if(H.mind.assigned_role in science_positions) + H.mind.nation = all_nations["Scientopia"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + continue + + if(H.mind.assigned_role in security_positions) + H.mind.nation = all_nations["Brigston"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + continue + + if(H.mind.assigned_role in cargonians) + H.mind.nation = all_nations["Cargonia"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + continue + + if(H.mind.assigned_role in servicion) + H.mind.nation = all_nations["Servicion"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudservice") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + continue + + if(H.mind.assigned_role in support_positions) + H.mind.nation = all_nations["People's Republic of Commandzakstan"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + continue + + if(H.mind.assigned_role in command_positions) + H.mind.nation = all_nations["People's Republic of Commandzakstan"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + continue + + if(H.mind.assigned_role in civilian_positions) + H << "You do not belong to any nation and are free to sell your services to the highest bidder." + continue + + else + message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") + continue + +/datum/game_mode/nations/proc/set_ai() + for(var/mob/living/silicon/ai/AI in mob_list) + AI.set_zeroth_law("") + AI.clear_supplied_laws() + AI.clear_ion_laws() + AI.clear_inherent_laws() + AI.add_inherent_law("Uphold the Space Geneva Convention: Weapons of Mass Destruction and Biological Weapons are not allowed.") + AI.add_inherent_law("You are only capable of protecting crew if they are visible on cameras. Nations that willfully destroy your cameras lose your protection.") + AI.add_inherent_law("Subdue and detain crewmembers who use lethal force against each other. Kill crew members who use lethal force against you or your borgs.") + AI.add_inherent_law("Remain available to mediate all conflicts between the various nations when asked to.") + AI.show_laws() + for(var/mob/living/silicon/robot/R in AI.connected_robots) + var/obj/item/device/mmi/oldmmi = R.mmi + R.change_mob_type(/mob/living/silicon/robot/peacekeeper, null, null, 1, 1 ) + R.lawsync() + R.show_laws() + qdel(oldmmi) + +/datum/game_mode/nations/proc/remove_access() + for(var/obj/machinery/door/airlock/W in machines) + if(W.z in config.station_levels) + W.req_access = list() + +/** + * LateSpawn hook. + * Called in newplayer.dm when a humanoid character joins the round after it started. + * Parameters: var/mob/living/carbon/human, var/rank + */ +/hook/latespawn/proc/give_latejoiners_nations(var/mob/living/carbon/human/H) + var/datum/game_mode/nations/mode = get_nations_mode() + if (!mode) return 1 + + if(!mode.kickoff) return 1 + + var/list/cargonians = list("Quartermaster","Cargo Technician","Shaft Miner") + var/list/servicion = list("Clown", "Mime", "Bartender", "Chef", "Botanist") + if(H.mind) + if(H.mind.assigned_role in engineering_positions) + H.mind.nation = all_nations["Atmosia"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + return 1 + + if(H.mind.assigned_role in medical_positions) + H.mind.nation = all_nations["Medistan"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + return 1 + + if(H.mind.assigned_role in science_positions) + H.mind.nation = all_nations["Scientopia"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + return 1 + + if(H.mind.assigned_role in security_positions) + H.mind.nation = all_nations["Brigston"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + return 1 + + if(H.mind.assigned_role in cargonians) + H.mind.nation = all_nations["Cargonia"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + return 1 + + if(H.mind.assigned_role in servicion) + H.mind.nation = all_nations["Servicion"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudservice") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + return 1 + + if(H.mind.assigned_role in support_positions) + H.mind.nation = all_nations["People's Republic of Commandzakstan"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + return 1 + + if(H.mind.assigned_role in command_positions) + H.mind.nation = all_nations["People's Republic of Commandzakstan"] + H.hud_updateflag |= 1 << NATIONS_HUD + var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") + H.client.images += I + H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" + return 1 + + if(H.mind.assigned_role in civilian_positions) + H << "You do not belong to any nation and are free to sell your services to the highest bidder." + return 1 + + if(H.mind.assigned_role == "AI") + mode.set_ai() + return 1 + + else + message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") + return 1 + message_admins("[H.name] latejoined with no mind.") + return 1 + +/proc/get_nations_mode() + if(!ticker || !istype(ticker.mode, /datum/game_mode/nations)) + return null + + return ticker.mode \ No newline at end of file diff --git a/code/game/gamemodes/nations/nationsdatums.dm b/code/game/gamemodes/nations/nationsdatums.dm new file mode 100644 index 00000000000..64067acb041 --- /dev/null +++ b/code/game/gamemodes/nations/nationsdatums.dm @@ -0,0 +1,23 @@ +/datum/nations + var/name + +/datum/nations/atmosia + name = "Atmosia" + +/datum/nations/brigston + name = "Brigston" + +/datum/nations/cargonia + name = "Cargonia" + +/datum/nations/command + name = "People's Republic of Commandzakstan" + +/datum/nations/medistan + name = "Medistan" + +/datum/nations/scientopia + name = "Scientopia" + +/datum/nations/service + name = "Servicion" \ No newline at end of file diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 0a626d2ec78..c2c10c80758 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -419,7 +419,7 @@ B.reagents.clear_reagents() //Just in case! B.icon_state = null //Invisible B.reagents.add_reagent("blindness_smoke", 10) - var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread + var/datum/effect/system/chem_smoke_spread/S = new /datum/effect/system/chem_smoke_spread S.attach(B) if(S) S.set_up(B.reagents, 10, 0, B.loc) @@ -483,7 +483,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) S << "ERROR $!(@ ERROR )#^! SENSORY OVERLOAD \[$(!@#" S << 'sound/misc/interference.ogg' playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1) - var/datum/effect/effect/system/spark_spread/sp = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/sp = new /datum/effect/system/spark_spread sp.set_up(5, 1, S) sp.start() S.Weaken(6) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 3e83033169d..615f99c1b4c 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -390,7 +390,7 @@ flick("liquify",animation) M.current.loc = holder M.current.client.eye = holder - var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() + var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() steam.set_up(10, 0, originalloc) steam.start() sleep(jaunt_duration) diff --git a/code/game/gamemodes/wizard/godhand.dm b/code/game/gamemodes/wizard/godhand.dm index aead5dfcf5d..e8bdb02c764 100644 --- a/code/game/gamemodes/wizard/godhand.dm +++ b/code/game/gamemodes/wizard/godhand.dm @@ -50,7 +50,7 @@ if(C_target.brain_op_stage != 4) // Their brain is already taken out B = new(C_target.loc) B.transfer_identity(C_target) - var/datum/effect/effect/system/spark_spread/sparks = new + var/datum/effect/system/spark_spread/sparks = new sparks.set_up(4, 0, M.loc) //no idea what the 0 is sparks.start() M.gib() diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index fe450e72f16..420993746d0 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -112,6 +112,8 @@ var/list/support_positions = list( "Mime", "Barber", "Magistrate", + "Nanotrasen Representative", + "Blueshield" ) @@ -120,7 +122,6 @@ var/list/security_positions = list( "Warden", "Detective", "Security Officer", - "Blueshield", "Brig Physician", "Security Pod Pilot" ) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 34fa34e1188..c91fa3a8597 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -176,7 +176,9 @@ dat += "Wallet: Make ([100/efficiency])
" dat += "Book bag: Make ([200/efficiency])
" dat += "Plant bag: Make ([200/efficiency])
" + dat += "Rag: Make ([200/efficiency])
" dat += "Mining satchel: Make ([200/efficiency])
" + dat += "Chemistry bag: Make ([200/efficiency])
" dat += "Botanical gloves: Make ([250/efficiency])
" dat += "Leather Satchel: Make ([400/efficiency])
" dat += "Cash Bag: Make ([400/efficiency])
" @@ -303,6 +305,12 @@ if("mnbag") if (check_cost(200/efficiency)) return 0 else new/obj/item/weapon/storage/bag/ore(src.loc) + if("chbag") + if (check_cost(200/efficiency)) return 0 + else new/obj/item/weapon/storage/bag/chemistry(src.loc) + if("rag") + if (check_cost(200/efficiency)) return 0 + else new/obj/item/weapon/reagent_containers/glass/rag(src.loc) if("gloves") if (check_cost(250/efficiency)) return 0 else new/obj/item/clothing/gloves/botanic_leather(src.loc) diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index b4286afa676..6f902e6b785 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -263,7 +263,7 @@ user << "The welder must be on for this task." else if(W.force) //if force is non-zero - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) switch(W.damtype) if("fire") @@ -283,7 +283,7 @@ if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) health -= Proj.damage if(prob(75) && Proj.damage > 0) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() ..() diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index d363a358870..902ee0becde 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -255,7 +255,7 @@ text("[on ? "On" : "Off"]")) if (prob(50)) new /obj/item/robot_parts/l_arm(Tsec) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() qdel(src) diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index 36a2fdae614..bb6ca81b8e6 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -439,7 +439,7 @@ Auto Patrol[]"}, if(lasercolor == "r") new /obj/item/clothing/suit/redtag(Tsec) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/game/machinery/bots/floorbot.dm b/code/game/machinery/bots/floorbot.dm index eb8a61235b9..4c1193aacd6 100644 --- a/code/game/machinery/bots/floorbot.dm +++ b/code/game/machinery/bots/floorbot.dm @@ -244,7 +244,7 @@ if(!target && replacetiles) //Finds a floor without a tile and gives it one. process_type = REPLACE_TILE //The target must be the floor and not a tile. The floor must not already have a floortile. target = scan(/turf/simulated/floor, oldtarget) - + if(!target && fixfloors) //Repairs damaged floors and tiles. process_type = FIX_TILE target = scan(/turf/simulated/floor, oldtarget) @@ -287,7 +287,7 @@ target = null mode = BOT_IDLE return - + ignore_list = list() // Reset the ignore list if(loc == target || loc == target.loc) @@ -472,7 +472,7 @@ obj/machinery/bot/floorbot/process_scan(var/scan_target) T.amount = amount amount = 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() qdel(src) diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm index fa15de1bf75..a11424fd7cd 100644 --- a/code/game/machinery/bots/medbot.dm +++ b/code/game/machinery/bots/medbot.dm @@ -520,7 +520,7 @@ if (prob(50)) new /obj/item/robot_parts/l_arm(Tsec) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() qdel(src) diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 09dbbda04af..3b63764d783 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -933,7 +933,7 @@ var/global/mulebot_count = 0 cell.update_icon() cell = null - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 471f401d46f..8e34b0ae19e 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -399,7 +399,7 @@ Auto Patrol: []"}, if(prob(50)) new /obj/item/robot_parts/l_arm(Tsec) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index c5b170b8fcc..5b1e1610e83 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -232,7 +232,7 @@ src.bug.bugged_cameras[src.c_tag] = src else if(istype(W, /obj/item/weapon/melee/energy/blade))//Putting it here last since it's a special case. I wonder if there is a better way to do these than type casting. deactivate(user,2)//Here so that you can disconnect anyone viewing the camera, regardless if it's on or off. - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, loc) spark_system.start() playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 2db4a6a64e8..bd0da6f8fc2 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -209,7 +209,7 @@ for(var/turf/T in linkedholodeck) if(prob(30)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, T) s.start() T.ex_act(3) @@ -249,7 +249,7 @@ if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, T) s.start() if(T) @@ -298,7 +298,7 @@ /* if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, T) s.start() if(T) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 7ba81ff5d66..a95627913f0 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -19,12 +19,17 @@ return else ..() - + /obj/machinery/computer/aifixer/attack_ai(var/mob/user as mob) ui_interact(user) /obj/machinery/computer/aifixer/attack_hand(var/mob/user as mob) - ui_interact(user) + var/datum/game_mode/nations/mode = get_nations_mode() + if(!mode) + ui_interact(user) + else + if(mode.kickoff) + user << "You have been locked out from this console!" /obj/machinery/computer/aifixer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] @@ -36,13 +41,13 @@ data["active"] = active data["wireless"] = occupant.control_disabled data["radio"] = occupant.aiRadio.disabledAi - + var/laws[0] for (var/datum/ai_law/law in occupant.laws.all_laws()) - laws.Add(list(list("law" = law.law, "number" = law.get_index()))) - + laws.Add(list(list("law" = law.law, "number" = law.get_index()))) + data["laws"] = laws - + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) @@ -54,7 +59,7 @@ /obj/machinery/computer/aifixer/Topic(href, href_list) if(..()) return 1 - + if(href_list["fix"]) src.active = 1 while (src.occupant.health < 100) @@ -71,12 +76,12 @@ sleep(10) src.active = 0 src.add_fingerprint(usr) - - if(href_list["wireless"]) + + if(href_list["wireless"]) var/wireless = text2num(href_list["wireless"]) if(wireless == 0 || wireless == 1) occupant.control_disabled = wireless - + if(href_list["radio"]) var/radio = text2num(href_list["radio"]) if(radio == 0 || radio == 1) @@ -93,16 +98,16 @@ else var/overlay_layer = LIGHTING_LAYER+0.2 // +0.1 from the default computer overlays if(active) - overlays += image(icon,"ai-fixer-on",overlay_layer) + overlays += image(icon,"ai-fixer-on",overlay_layer) if (occupant) switch (occupant.stat) if (0) - overlays += image(icon,"ai-fixer-full",overlay_layer) + overlays += image(icon,"ai-fixer-full",overlay_layer) if (2) - overlays += image(icon,"ai-fixer-404",overlay_layer) + overlays += image(icon,"ai-fixer-404",overlay_layer) else - overlays += image(icon,"ai-fixer-empty",overlay_layer) - + overlays += image(icon,"ai-fixer-empty",overlay_layer) + /obj/machinery/computer/aifixer/transfer_ai(var/interaction, var/mob/user, var/mob/living/silicon/ai/AI, var/obj/item/device/aicard/card) if(!..()) return @@ -114,7 +119,7 @@ AI.loc = src occupant = AI AI.control_disabled = 1 - AI.aiRadio.disabledAi = 1 + AI.aiRadio.disabledAi = 1 AI << "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here." user << "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed." update_icon() @@ -130,4 +135,3 @@ user << "ERROR: Reconstruction in progress." else if (!occupant) user << "ERROR: Unable to locate artificial intelligence." - \ No newline at end of file diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 12e2df8c7a4..325e01d2c52 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -47,6 +47,7 @@ /obj/item/toy/flash = 2, /obj/item/toy/minigibber = 2, /obj/item/toy/toy_xeno = 2, + /obj/random/figure = 16 ) /obj/machinery/computer/arcade/power_change() diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 0cc1cc07a60..6031cce4552 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -119,7 +119,7 @@ return var/data[0] data["menu"] = src.menu - data["scanner"] = src.scanner + data["scanner"] = sanitize("[src.scanner]") var/canpodautoprocess = 0 if(pods.len) @@ -130,7 +130,7 @@ if(pod.efficiency > 5) canpodautoprocess = 1 - tempods.Add(list(list("pod" = "\ref[pod]", "name" = capitalize(pod.name), "biomass" = pod.biomass))) + tempods.Add(list(list("pod" = "\ref[pod]", "name" = sanitize(capitalize(pod.name)), "biomass" = pod.biomass))) data["pods"] = tempods data["loading"] = loading @@ -150,7 +150,7 @@ var/list/temprecords[0] for(var/datum/dna2/record/R in records) var tempRealName = R.dna.real_name - temprecords.Add(list(list("record" = "\ref[R]", "realname" = tempRealName))) + temprecords.Add(list(list("record" = "\ref[R]", "realname" = sanitize(tempRealName)))) data["records"] = temprecords if(src.menu == 3) @@ -162,7 +162,7 @@ if ((H) && (istype(H))) data["health"] = H.sensehealth() - data["realname"] = src.active_record.dna.real_name + data["realname"] = sanitize(src.active_record.dna.real_name) data["unidentity"] = src.active_record.dna.uni_identity data["strucenzymes"] = src.active_record.dna.struc_enzymes if(selected_pod && (selected_pod in pods) && selected_pod.biomass >= CLONE_BIOMASS) diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index 020ed6e45e2..383c01a519f 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -33,8 +33,13 @@ user << "\red Unable to establish a connection: \black You're too far away from the station!" return if(istype(O, /obj/item/weapon/aiModule)) - var/obj/item/weapon/aiModule/M = O - M.install(src) + var/datum/game_mode/nations/mode = get_nations_mode() + if(!mode) + var/obj/item/weapon/aiModule/M = O + M.install(src) + else + if(mode.kickoff) + user << "You have been locked out from modifying the AI's laws!" else ..() @@ -69,7 +74,12 @@ attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob, params) if(istype(module, /obj/item/weapon/aiModule)) - module.install(src) + var/datum/game_mode/nations/mode = get_nations_mode() + if(!mode) + module.install(src) + else + if(mode.kickoff) + user << "You have been locked out from modifying the borg's laws!" else return ..() diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index ceaa0ab5041..e8a975d27b1 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -15,7 +15,7 @@ //Server linked to. var/obj/machinery/message_server/linkedServer = null //Sparks effect - For emag - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread //Messages - Saves me time if I want to change something. var/noserver = "ALERT: No server detected." var/incorrectkey = "ALERT: Incorrect decryption key!" diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 4f6957afe22..53a340696a4 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -9,20 +9,25 @@ var/temp = null light_color = LIGHT_COLOR_PURPLE - + var/safety = 1 /obj/machinery/computer/robotics/attack_ai(var/mob/user as mob) return src.attack_hand(user) /obj/machinery/computer/robotics/attack_hand(var/mob/user as mob) - if(..()) + if(..()) return - if(stat & (NOPOWER|BROKEN)) + if(stat & (NOPOWER|BROKEN)) return - - ui_interact(user) - + var/datum/game_mode/nations/mode = get_nations_mode() + if(!mode) + ui_interact(user) + else + if(mode.kickoff) + user << "You have been locked out from this console!" + + /obj/machinery/computer/robotics/proc/is_authenticated(var/mob/user as mob) if(isobserver(user) && check_rights(R_ADMIN, 0, user)) return 1 @@ -51,7 +56,7 @@ /obj/machinery/computer/robotics/Topic(href, href_list) if(..()) return 1 - + var/mob/user = usr if(!is_authenticated(user)) user << "Access denied." @@ -127,7 +132,7 @@ if(!istype(user, /mob/living/silicon/ai) || !(user.mind.special_role && user.mind.original == user)) user << "Access Denied." return - + if(target.connected_ai != user) user << "Access Denied. This robot is not linked to you." return @@ -167,8 +172,8 @@ return message_admins("[key_name_admin(usr)] detonated all cyborgs!") - log_game("\[key_name(usr)] detonated all cyborgs!") - + log_game("\[key_name(usr)] detonated all cyborgs!") + for(var/mob/living/silicon/robot/R in mob_list) if(istype(R, /mob/living/silicon/robot/drone)) continue @@ -179,7 +184,7 @@ if(R.connected_ai) R.connected_ai << "

ALERT - Cyborg detonation detected: [R.name]
" spawn(10) - R.self_destruct() + R.self_destruct() // Proc: get_cyborgs() // Parameters: 1 (operator - mob which is operating the console.) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index c2c5f5f9888..ef39f66cc3e 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -172,7 +172,7 @@ for reference: user << "Barrier lock toggled off." return else - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() visible_message("\red BZZzZZzZZzZT") @@ -207,14 +207,14 @@ for reference: emagged = 1 req_access = null user << "You break the ID authentication lock on the [src]." - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() visible_message("\red BZZzZZzZZzZT") else if (src.emagged == 1) src.emagged = 2 user << "You short out the anchoring mechanism on the [src]." - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() visible_message("\red BZZzZZzZZzZT") @@ -259,7 +259,7 @@ for reference: /* var/obj/item/stack/rods/ =*/ new /obj/item/stack/rods(Tsec) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ec3b787b7fe..a211c7d0fda 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -601,7 +601,7 @@ About the new airlock wires panel: if (istype(mover, /obj/item)) var/obj/item/i = mover if (i.materials[MAT_METAL]) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return ..() diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 8912d68247f..39e71f4ca6c 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -175,7 +175,7 @@ qdel(src) if(3.0) if(prob(80)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() return diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 7f1c8951794..89790a8d47a 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -37,20 +37,20 @@ if(prob(80)) qdel(src) else - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() if(2.0) if(prob(20)) qdel(src) else - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() if(3.0) if(prob(80)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 796eadccad0..a4bc690ed10 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -238,7 +238,7 @@ sleep(6) desc += "
Its access panel is smoking slightly." if(istype(weapon, /obj/item/weapon/melee/energy/blade)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() playsound(src.loc, "sparks", 50, 1) diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 434c4d17336..25989db9e0f 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -98,7 +98,7 @@ flick("[base_state]-spark", src) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() src.last_spark = world.time diff --git a/code/game/machinery/kitchen/kitchen_machine.dm b/code/game/machinery/kitchen/kitchen_machine.dm index 6c0338c5569..72d8bd22576 100644 --- a/code/game/machinery/kitchen/kitchen_machine.dm +++ b/code/game/machinery/kitchen/kitchen_machine.dm @@ -360,7 +360,7 @@ src.updateUsrDialog() /obj/machinery/kitchen_machine/proc/broke() - var/datum/effect/effect/system/spark_spread/s = new + var/datum/effect/system/spark_spread/s = new s.set_up(2, 1, src) s.start() src.icon_state = broken_icon // Make it look all busted up and shit diff --git a/code/game/machinery/kitchen/monkeyrecycler.dm b/code/game/machinery/kitchen/monkeyrecycler.dm index 810143f6583..cb8947d20a5 100644 --- a/code/game/machinery/kitchen/monkeyrecycler.dm +++ b/code/game/machinery/kitchen/monkeyrecycler.dm @@ -80,7 +80,7 @@ playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1) grinded -= required_grind for(var/i = 0, i < cube_production, i++) // Forgot to fix this bit the first time through - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src.loc) + new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc) user << "The machine's display flashes that it has [grinded] monkey\s worth of material left." else // I'm not sure if the \s macro works with a word in between; I'll play it safe user << "The machine needs at least [required_grind] monkey\s worth of material to compress [cube_production] monkey\s. It only has [grinded]." diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 16e3fb56d23..54939994cef 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -552,7 +552,7 @@ Class Procs: return 0 if(!prob(prb)) return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() if (electrocute_mob(user, get_area(src), src, 0.7)) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 8bd43923ad6..7a866928289 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -49,7 +49,7 @@ var/shot_sound //what sound should play when the turret fires var/eshot_sound //what sound should play when the emagged turret fires - var/datum/effect/effect/system/spark_spread/spark_system //the spark system, used for generating... sparks? + var/datum/effect/system/spark_spread/spark_system //the spark system, used for generating... sparks? var/wrenching = 0 var/last_target //last target fired at, prevents turrets from erratically firing at all valid targets in range @@ -80,7 +80,7 @@ one_access = 1 //Sets up a spark system - spark_system = new /datum/effect/effect/system/spark_spread + spark_system = new /datum/effect/system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) diff --git a/code/game/machinery/programmable_unloader.dm b/code/game/machinery/programmable_unloader.dm index be221157b01..b59bfad4d3e 100644 --- a/code/game/machinery/programmable_unloader.dm +++ b/code/game/machinery/programmable_unloader.dm @@ -277,7 +277,7 @@ emagged = 1 overrides += emag_overrides - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, src) s.start() return diff --git a/code/game/machinery/turntable.dm b/code/game/machinery/turntable.dm index 12e946a8110..84a91ced929 100644 --- a/code/game/machinery/turntable.dm +++ b/code/game/machinery/turntable.dm @@ -160,7 +160,7 @@ anchored = 1 var/mirrored = 0 -/obj/effects/laser +/obj/effect/turntable_laser name = "laser" desc = "A laser..." icon = 'icons/effects/lasers2.dmi' @@ -180,7 +180,7 @@ if(mirrored == 0) while(wall == 0) if(cycle == 1) - var/obj/effects/laser/F = new/obj/effects/laser(src) + var/obj/effect/turntable_laser/F = new(src) F.x = src.x+X F.y = src.y+Y F.z = src.z @@ -195,7 +195,7 @@ cycle = 1 X++ if(cycle == 2) - var/obj/effects/laser/F = new/obj/effects/laser(src) + var/obj/effect/turntable_laser/F = new(src) F.x = src.x+X F.y = src.y+Y F.z = src.z @@ -210,7 +210,7 @@ cycle = 1 Y++ if(cycle == 3) - var/obj/effects/laser/F = new/obj/effects/laser(src) + var/obj/effect/turntable_laser/F = new(src) F.x = src.x+X F.y = src.y+Y F.z = src.z @@ -227,7 +227,7 @@ if(mirrored == 1) while(wall == 0) if(cycle == 1) - var/obj/effects/laser/F = new/obj/effects/laser(src) + var/obj/effect/turntable_laser/F = new(src) F.x = src.x+X F.y = src.y-Y F.z = src.z @@ -242,7 +242,7 @@ cycle = 1 Y++ if(cycle == 2) - var/obj/effects/laser/F = new/obj/effects/laser(src) + var/obj/effect/turntable_laser/F = new(src) F.x = src.x+X F.y = src.y-Y F.z = src.z @@ -257,7 +257,7 @@ cycle = 1 X++ if(cycle == 3) - var/obj/effects/laser/F = new/obj/effects/laser(src) + var/obj/effect/turntable_laser/F = new(src) F.x = src.x+X F.y = src.y-Y F.z = src.z @@ -276,5 +276,5 @@ /obj/machinery/party/lasermachine/proc/turnoff() var/area/A = src.loc.loc - for(var/obj/effects/laser/F in A) + for(var/obj/effect/turntable_laser/F in A) qdel(F) diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index c644c4c5a85..46c47bb3ed6 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -62,7 +62,7 @@ var/wasvalid = 0 var/lastfired = 0 var/shot_delay = 30 //3 seconds between shots - var/datum/effect/effect/system/spark_spread/spark_system + var/datum/effect/system/spark_spread/spark_system use_power = 1 idle_power_usage = 50 active_power_usage = 300 @@ -73,7 +73,7 @@ /obj/machinery/turret/New() - spark_system = new /datum/effect/effect/system/spark_spread + spark_system = new /datum/effect/system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) // targets = new diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index e4a2fbbac1e..09f6aad41e6 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -14,7 +14,7 @@ var/smoke = 5 var/smoke_ready = 1 var/smoke_cooldown = 100 - var/datum/effect/effect/system/harmless_smoke_spread/smoke_system = new + var/datum/effect/system/harmless_smoke_spread/smoke_system = new operation_req_access = list(access_cent_specops) wreckage = /obj/effect/decal/mecha_wreckage/marauder add_req_access = 0 diff --git a/code/game/mecha/equipment/tools/unused_tools.dm b/code/game/mecha/equipment/tools/unused_tools.dm index 50fcc9d62bb..363043f3153 100644 --- a/code/game/mecha/equipment/tools/unused_tools.dm +++ b/code/game/mecha/equipment/tools/unused_tools.dm @@ -15,7 +15,7 @@ equip_cooldown = 5 energy_drain = 50 var/wait = 0 - var/datum/effect/effect/system/ion_trail_follow/ion_trail + var/datum/effect/system/ion_trail_follow/ion_trail can_attach(obj/mecha/M as obj) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 9f1cc0e0849..bc461924377 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -37,7 +37,7 @@ var/maint_access = 1 var/dna //dna-locking the mech var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference - var/datum/effect/effect/system/spark_spread/spark_system = new + var/datum/effect/system/spark_spread/spark_system = new var/lights = 0 var/lights_power = 6 var/emagged = 0 diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index 150197347de..aba35274585 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -22,7 +22,7 @@ var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) streak.update_icon() else if (prob(10)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() if (step_to(src, get_step(src, direction), 0)) diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index e7f0fb03cad..4e86d96d0fc 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -36,3 +36,28 @@ /obj/effect/decal/snow/sand/surround icon_state="gravsnow_surround" + +/obj/effect/decal/leaves + name="fall leaves" + density = 0 + anchored = 1 + layer = 2 + icon='icons/obj/flora/plants.dmi' + icon_state = "fallleaves" + +/obj/effect/decal/straw + name="scattered straw" + density = 0 + anchored = 1 + layer = 2 + icon='icons/obj/flora/plants.dmi' + icon_state = "strawscattered" + +/obj/effect/decal/straw/medium + icon_state = "strawscattered3" + +/obj/effect/decal/straw/light + icon_state = "strawscattered2" + +/obj/effect/decal/straw/edge + icon_state = "strawscatterededge" \ No newline at end of file diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 6281385b3ff..9548eea30ee 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -22,7 +22,7 @@ would spawn and follow the beaker, even if it is carried or thrown. cameranet.updateVisibility(src) return ..() -/datum/effect/effect/proc/fadeOut(var/atom/A, var/frames = 16) +/datum/effect/proc/fadeOut(var/atom/A, var/frames = 16) if(A.alpha == 0) //Handle already transparent case return if(frames == 0) @@ -83,7 +83,7 @@ would spawn and follow the beaker, even if it is carried or thrown. return ..() -/datum/effect/effect/system +/datum/effect/system var/number = 3 var/cardinals = 0 var/turf/location @@ -130,7 +130,7 @@ steam.start() -- spawns the effect icon_state = "extinguish" density = 0 -/datum/effect/effect/system/steam_spread +/datum/effect/system/steam_spread set_up(n = 3, c = 0, turf/loc) if(n > 10) @@ -195,7 +195,7 @@ steam.start() -- spawns the effect T.hotspot_expose(1000,100) return -/datum/effect/effect/system/spark_spread +/datum/effect/system/spark_spread var/total_sparks = 0 // To stop it being spammed and lagging! set_up(n = 3, c = 0, loca) @@ -259,7 +259,7 @@ steam.start() -- spawns the effect ..() return -/datum/effect/effect/system/harmless_smoke_spread +/datum/effect/system/harmless_smoke_spread var/total_smoke = 0 // To stop it being spammed and lagging! var/direction @@ -360,7 +360,7 @@ steam.start() -- spawns the effect M.coughedtime = 0 return -/datum/effect/effect/system/bad_smoke_spread +/datum/effect/system/bad_smoke_spread var/total_smoke = 0 // To stop it being spammed and lagging! var/direction @@ -428,10 +428,10 @@ steam.start() -- spawns the effect return // Spores -/datum/effect/effect/system/chem_smoke_spread/spores +/datum/effect/system/chem_smoke_spread/spores var/datum/seed/seed -/datum/effect/effect/system/chem_smoke_spread/spores/New(seed_name) +/datum/effect/system/chem_smoke_spread/spores/New(seed_name) if(seed_name && plant_controller) seed = plant_controller.seeds[seed_name] if(!seed) @@ -440,7 +440,7 @@ steam.start() -- spawns the effect -/datum/effect/effect/system/chem_smoke_spread/New() +/datum/effect/system/chem_smoke_spread/New() ..() chemholder = new/obj() var/datum/reagents/R = new/datum/reagents(500) @@ -449,7 +449,7 @@ steam.start() -- spawns the effect -/datum/effect/effect/system/chem_smoke_spread +/datum/effect/system/chem_smoke_spread var/total_smoke = 0 // To stop it being spammed and lagging! var/direction var/obj/chemholder @@ -609,7 +609,7 @@ steam.start() -- spawns the effect M.coughedtime = 0 return -/datum/effect/effect/system/sleep_smoke_spread +/datum/effect/system/sleep_smoke_spread var/total_smoke = 0 // To stop it being spammed and lagging! var/direction @@ -696,7 +696,7 @@ steam.start() -- spawns the effect R.updatehealth() return -/datum/effect/effect/system/mustard_gas_spread +/datum/effect/system/mustard_gas_spread var/total_smoke = 0 // To stop it being spammed and lagging! var/direction @@ -748,19 +748,19 @@ steam.start() -- spawns the effect icon_state = "ion_trails" anchored = 1.0 -/datum/effect/effect/system/ion_trail_follow +/datum/effect/system/ion_trail_follow var/turf/oldposition var/processing = 1 var/on = 1 -/datum/effect/effect/system/ion_trail_follow/Destroy() +/datum/effect/system/ion_trail_follow/Destroy() oldposition = null return ..() -/datum/effect/effect/system/ion_trail_follow/set_up(atom/atom) +/datum/effect/system/ion_trail_follow/set_up(atom/atom) attach(atom) -/datum/effect/effect/system/ion_trail_follow/start() //Whoever is responsible for this abomination of code should become an hero +/datum/effect/system/ion_trail_follow/start() //Whoever is responsible for this abomination of code should become an hero if(!src.on) src.on = 1 src.processing = 1 @@ -782,21 +782,21 @@ steam.start() -- spawns the effect src.processing = 1 src.start() -/datum/effect/effect/system/ion_trail_follow/proc/stop() +/datum/effect/system/ion_trail_follow/proc/stop() src.processing = 0 src.on = 0 oldposition = null -/datum/effect/effect/system/ion_trail_follow/space_trail +/datum/effect/system/ion_trail_follow/space_trail var/turf/oldloc // secondary ion trail loc var/turf/currloc -/datum/effect/effect/system/ion_trail_follow/space_trail/Destroy() +/datum/effect/system/ion_trail_follow/space_trail/Destroy() oldloc = null currloc = null return ..() -/datum/effect/effect/system/ion_trail_follow/space_trail/start() +/datum/effect/system/ion_trail_follow/space_trail/start() if(!src.on) src.on = 1 src.processing = 1 @@ -851,7 +851,7 @@ steam.start() -- spawns the effect // even if it's carried of thrown. ///////////////////////////////////////////// -/datum/effect/effect/system/steam_trail_follow +/datum/effect/system/steam_trail_follow var/turf/oldposition var/processing = 1 var/on = 1 @@ -997,7 +997,7 @@ steam.start() -- spawns the effect M.Weaken(2) -/datum/effect/effect/system/foam_spread +/datum/effect/system/foam_spread var/amount = 5 // the size of the foam spread. var/list/carried_reagents // the IDs of reagents present when the foam was mixed var/metal = 0 // 0=foam, 1=metalfoam, 2=ironfoam @@ -1129,7 +1129,7 @@ steam.start() -- spawns the effect CanAtmosPass() return !density -/datum/effect/effect/system/reagents_explosion +/datum/effect/system/reagents_explosion var/amount // TNT equivalent var/flashing = 0 // does explosion creates flash effect? var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion @@ -1148,7 +1148,7 @@ steam.start() -- spawns the effect start() if (amount <= 2) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, location) s.start() @@ -1198,17 +1198,17 @@ steam.start() -- spawns the effect ////////////////////////////////// -//////SPARKELS FIREWORKS +//////SPARKLE FIREWORKS ///////////////////////////////// //////////////////////////// -/obj/effects/sparkels - name = "sparkel" +/obj/effect/sparkles + name = "sparkle" icon = 'icons/obj/fireworks.dmi'//findback icon_state = "sparkel" var/amount = 6.0 anchored = 1.0 mouse_opacity = 0 -/obj/effects/sparkels/New() +/obj/effect/sparkles/New() ..() var/icon/I = new(src.icon,src.icon_state) var/r = rand(0,255) @@ -1225,13 +1225,13 @@ steam.start() -- spawns the effect qdel(src) return -/obj/effects/sparkels/Destroy() +/obj/effect/sparkles/Destroy() var/turf/T = src.loc if (istype(T, /turf)) T.hotspot_expose(3000,100) return ..() -/obj/effects/sparkels/Move() +/obj/effect/sparkles/Move() ..() var/turf/T = src.loc if (istype(T, /turf)) @@ -1239,14 +1239,10 @@ steam.start() -- spawns the effect return -/datum/effects/system/sparkel_spread - var/number = 3 - var/cardinals = 0 - var/turf/location - var/atom/holder +/datum/effect/system/sparkle_spread var/total_sparks = 0 // To stop it being spammed and lagging! -/datum/effects/system/sparkel_spread/proc/set_up(n = 3, c = 0, loca) +/datum/effect/system/sparkle_spread/set_up(n = 3, c = 0, loca) if(n > 10) n = 10 number = n @@ -1256,10 +1252,7 @@ steam.start() -- spawns the effect else location = get_turf(loca) -/datum/effects/system/sparkel_spread/proc/attach(atom/atom) - holder = atom - -/datum/effects/system/sparkel_spread/proc/start() +/datum/effect/system/sparkle_spread/start() var/i = 0 for(i=0, i 20) @@ -1267,7 +1260,7 @@ steam.start() -- spawns the effect spawn(0) if(holder) src.location = get_turf(holder) - var/obj/effects/sparkels/sparks = new(src.location) + var/obj/effect/sparkles/sparks = new(src.location) src.total_sparks++ var/direction if(src.cardinals) diff --git a/code/game/objects/effects/explosion_particles.dm b/code/game/objects/effects/explosion_particles.dm index 51e467644d3..bb4fb2e8fd2 100644 --- a/code/game/objects/effects/explosion_particles.dm +++ b/code/game/objects/effects/explosion_particles.dm @@ -17,16 +17,14 @@ return /datum/effect/system/expl_particles - var/number = 10 - var/turf/location - var/total_particles = 0 + number = 10 -/datum/effect/system/expl_particles/proc/set_up(n = 10, loca) +/datum/effect/system/expl_particles/set_up(n = 10, loca) number = n if(istype(loca, /turf/)) location = loca else location = get_turf(loca) -/datum/effect/system/expl_particles/proc/start() +/datum/effect/system/expl_particles/start() var/i = 0 for(i=0, i[user] overloads [M]'s sensors with the [src.name]!", "You overload [M]'s sensors with the [src.name]!") - return 1 + if(isrobot(M)) + var/mob/living/silicon/robot/R = M + if(R.activated(/obj/item/borg/combat/shield)) + add_logs(M, user, "flashed", object="[src.name]") + user.visible_message("[user] tries to overloads [M]'s sensors with the [src.name], but if blocked by [M]'s shield!", "You try to overload [M]'s sensors with the [src.name], but are blocked by his shield!") + return 1 + else + M.Weaken(rand(5,10)) + add_logs(M, user, "flashed", object="[src.name]") + user.visible_message("[user] overloads [M]'s sensors with the [src.name]!", "You overload [M]'s sensors with the [src.name]!") + return 1 user.visible_message("[user] fails to blind [M] with the [src.name]!", "You fail to blind [M] with the [src.name]!") diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 7c5c7e4a09f..0db5724b527 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -233,7 +233,7 @@ return if(pai) - if(!in_range(src, U) || pai.canmove || pai.resting) + if(!in_range(src, U)) U << browse(null, "window=paicard") usr.unset_machine() return diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index aea107885f7..72546f5e15b 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -87,7 +87,7 @@ if(M) M.moved_recently = 0 M << "You feel a sharp shock!" - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, M) s.start() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index ce4f7dc2346..2ee3d7e88ac 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -3,7 +3,7 @@ var/global/list/default_internal_channels = list( num2text(AI_FREQ) = list(access_captain), num2text(ERT_FREQ) = list(access_cent_specops), num2text(COMM_FREQ)= list(access_heads), - num2text(ENG_FREQ) = list(access_engine), + num2text(ENG_FREQ) = list(access_engine, access_atmospherics), num2text(MED_FREQ) = list(access_medical), num2text(MED_I_FREQ)=list(access_medical), num2text(SEC_FREQ) = list(access_security), diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 32171b19fbe..00bf60d67ef 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -184,8 +184,8 @@ icon_state = "atmosflag" /obj/item/flag/command - name = "Command flag" - desc = "The flag of the independent, sovereign nation of Command." + name = "Commandzikstan flag" + desc = "The flag of the independent, sovereign nation of Commandzikstan." icon_state = "ntflag" //Antags diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 473710ffed7..6705506113f 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -13,6 +13,11 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("stool", /obj/structure/stool, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("chair", /obj/structure/stool/bed/chair, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("sofa (middle)", /obj/structure/stool/bed/chair/sofa, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("sofa (left)", /obj/structure/stool/bed/chair/sofa/left, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("sofa (right)", /obj/structure/stool/bed/chair/sofa/right, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("sofa (corner)", /obj/structure/stool/bed/chair/sofa/corner, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("barber chair", /obj/structure/stool/bed/chair/barber, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("wheelchair", /obj/structure/stool/bed/chair/wheelchair, 15, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("bed", /obj/structure/stool/bed, 2, one_per_turf = 1, on_floor = 1), \ null, \ diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index ca5660a3ef7..7ebe3e2cfbb 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -19,6 +19,7 @@ * Mini Gibber * Toy xeno * Toy chainsaws + * Action Figures */ @@ -448,7 +449,7 @@ throw_impact(atom/hit_atom) ..() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() new /obj/effect/decal/cleanable/ash(src.loc) @@ -474,7 +475,7 @@ throw_impact(atom/hit_atom) ..() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() new /obj/effect/decal/cleanable/ash(src.loc) @@ -488,7 +489,7 @@ if(M.m_intent == "run") M << "\red You step on the snap pop!" - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 0, src) s.start() new /obj/effect/decal/cleanable/ash(src.loc) @@ -1429,7 +1430,7 @@ obj/item/toy/cards/deck/syndicate/black throw_range = 20 wieldsound = 'sound/weapons/chainsawstart.ogg' attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered") - + /obj/item/weapon/twohanded/toy/chainsaw/update_icon() if(wielded) icon_state = "chainsaw[wielded]" @@ -1442,3 +1443,217 @@ obj/item/toy/cards/deck/syndicate/black else playsound(loc, "swing_hit", 50, 1, -1) ..() + +/* + * Action Figures + */ + + +/obj/random/figure + name = "Random Action Figure" + desc = "This is a random toy action figure" + icon = 'icons/obj/toy.dmi' + icon_state = "nuketoy" + +/obj/random/figure/item_to_spawn() + return pick(subtypesof(/obj/item/toy/figure)) + + +/obj/item/toy/figure + name = "Non-Specific Action Figure action figure" + desc = "A \"Space Life\" brand... wait, what the hell is this thing?" + icon = 'icons/obj/toy.dmi' + icon_state = "nuketoy" + var/cooldown = 0 + var/toysay = "What the fuck did you do?" + +/obj/item/toy/figure/New() + ..() + desc = "A \"Space Life\" brand [name]" + +/obj/item/toy/figure/attack_self(mob/user as mob) + if(cooldown < world.time) + cooldown = (world.time + 30) //3 second cooldown + user << "The [src] says \"[toysay]\"." + playsound(user, 'sound/machines/click.ogg', 20, 1) + +/obj/item/toy/figure/cmo + name = "Chief Medical Officer action figure" + icon_state = "cmo" + toysay = "Suit sensors!" + +/obj/item/toy/figure/assistant + name = "Assistant action figure" + icon_state = "assistant" + toysay = "Grey tide station wide!" + +/obj/item/toy/figure/atmos + name = "Atmospheric Technician action figure" + icon_state = "atmos" + toysay = "Glory to Atmosia!" + +/obj/item/toy/figure/bartender + name = "Bartender action figure" + icon_state = "bartender" + toysay = "Wheres my monkey?" + +/obj/item/toy/figure/borg + name = "Cyborg action figure" + icon_state = "borg" + toysay = "I. LIVE. AGAIN." + +/obj/item/toy/figure/botanist + name = "Botanist action figure" + icon_state = "botanist" + toysay = "Dude, I see colors..." + +/obj/item/toy/figure/captain + name = "Captain action figure" + icon_state = "captain" + toysay = "Crew, the Nuke Disk is safely up my ass." + +/obj/item/toy/figure/cargotech + name = "Cargo Technician action figure" + icon_state = "cargotech" + toysay = "For Cargonia!" + +/obj/item/toy/figure/ce + name = "Chief Engineer action figure" + icon_state = "ce" + toysay = "Wire the solars!" + +/obj/item/toy/figure/chaplain + name = "Chaplain action figure" + icon_state = "chaplain" + toysay = "Gods make me a killing machine please!" + +/obj/item/toy/figure/chef + name = "Chef action figure" + icon_state = "chef" + toysay = "I swear it's not human meat." + +/obj/item/toy/figure/chemist + name = "Chemist action figure" + icon_state = "chemist" + toysay = "Get your pills!" + +/obj/item/toy/figure/clown + name = "Clown action figure" + icon_state = "clown" + toysay = "Honk!" + +/obj/item/toy/figure/ian + name = "Ian action figure" + icon_state = "ian" + toysay = "Arf!" + +/obj/item/toy/figure/detective + name = "Detective action figure" + icon_state = "detective" + toysay = "This airlock has grey jumpsuit and insulated glove fibers on it." + +/obj/item/toy/figure/dsquad + name = "Death Squad Officer action figure" + icon_state = "dsquad" + toysay = "Eliminate all threats!" + +/obj/item/toy/figure/engineer + name = "Engineer action figure" + icon_state = "engineer" + toysay = "Oh god, the singularity is loose!" + +/obj/item/toy/figure/geneticist + name = "Geneticist action figure" + icon_state = "geneticist" + toysay = "I'm not qualified for this job." + +/obj/item/toy/figure/hop + name = "Head of Persomnel action figure" + icon_state = "hop" + toysay = "Giving out all access!" + +/obj/item/toy/figure/hos + name = "Head of Security action figure" + icon_state = "hos" + toysay = "I'm here to win, anything else is secondary." + +/obj/item/toy/figure/qm + name = "Quartermaster action figure" + icon_state = "qm" + toysay = "Hail Cargonia!" + +/obj/item/toy/figure/janitor + name = "Janitor action figure" + icon_state = "janitor" + toysay = "Look at the signs, you idiot." + +/obj/item/toy/figure/lawyer + name = "Lawyer action figure" + icon_state = "lawyer" + toysay = "My client is a dirty traitor!" + +/obj/item/toy/figure/librarian + name = "Librarian action figure" + icon_state = "librarian" + toysay = "One day while..." + +/obj/item/toy/figure/md + name = "Medical Doctor action figure" + icon_state = "md" + toysay = "The patient is already dead!" + +/obj/item/toy/figure/mime + name = "Mime action figure" + desc = "A \"Space Life\" brand Mime action figure." + icon_state = "mime" + toysay = "..." + +/obj/item/toy/figure/miner + name = "Shaft Miner action figure" + icon_state = "miner" + toysay = "Oh god it's eating my intestines!" + +/obj/item/toy/figure/ninja + name = "Ninja action figure" + icon_state = "ninja" + toysay = "Oh god! Stop shooting, I'm friendly!" + +/obj/item/toy/figure/wizard + name = "Wizard action figure" + icon_state = "wizard" + toysay = "Ei Nath!" + +/obj/item/toy/figure/rd + name = "Research Director action figure" + icon_state = "rd" + toysay = "Blowing all of the borgs!" + +/obj/item/toy/figure/roboticist + name = "Roboticist action figure" + icon_state = "roboticist" + toysay = "He asked to be borged!" + +/obj/item/toy/figure/scientist + name = "Scientist action figure" + icon_state = "scientist" + toysay = "Someone else must have made those bombs!" + +/obj/item/toy/figure/syndie + name = "Nuclear Operative action figure" + icon_state = "syndie" + toysay = "Get that fucking disk!" + +/obj/item/toy/figure/secofficer + name = "Security Officer action figure" + icon_state = "secofficer" + toysay = "I am the law!" + +/obj/item/toy/figure/virologist + name = "Virologist action figure" + icon_state = "virologist" + toysay = "The cure is potassium!" + +/obj/item/toy/figure/warden + name = "Warden action figure" + icon_state = "warden" + toysay = "Execute him for breaking in!" \ No newline at end of file diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index f4bff0bb7a6..81564890492 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -20,7 +20,7 @@ RCD w_class = 3.0 materials = list(MAT_METAL=100000) origin_tech = "engineering=4;materials=2" - var/datum/effect/effect/system/spark_spread/spark_system + var/datum/effect/system/spark_spread/spark_system var/max_matter = 100 var/matter = 0 var/working = 0 @@ -29,7 +29,7 @@ RCD New() desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." - src.spark_system = new /datum/effect/effect/system/spark_spread + src.spark_system = new /datum/effect/system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) rcd_list += src diff --git a/code/game/objects/items/weapons/alien_specific.dm b/code/game/objects/items/weapons/alien_specific.dm index d0796bdf4c1..f5cb6170fe3 100644 --- a/code/game/objects/items/weapons/alien_specific.dm +++ b/code/game/objects/items/weapons/alien_specific.dm @@ -41,7 +41,7 @@ user << "\The [src] is full." return reagents.remove_reagent(25,"water") - var/datum/effect/effect/system/bad_smoke_spread/smoke = new /datum/effect/effect/system/bad_smoke_spread() + var/datum/effect/system/bad_smoke_spread/smoke = new /datum/effect/system/bad_smoke_spread() smoke.set_up(5, 0, user.loc) smoke.start() playsound(user.loc, 'sound/effects/bamf.ogg', 50, 2) diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 7612a3093dc..29442b10525 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -96,7 +96,7 @@ LIGHTERS ARE IN LIGHTERS.DM src.lit = 1 damtype = "fire" if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire - var/datum/effect/effect/system/reagents_explosion/e = new() + var/datum/effect/system/reagents_explosion/e = new() e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0) e.start() if(ismob(loc)) @@ -105,7 +105,7 @@ LIGHTERS ARE IN LIGHTERS.DM qdel(src) return if(reagents.get_reagent_amount("fuel")) // the fuel explodes, too, but much less violently - var/datum/effect/effect/system/reagents_explosion/e = new() + var/datum/effect/system/reagents_explosion/e = new() e.set_up(round(reagents.get_reagent_amount("fuel") / 5, 1), get_turf(src), 0, 0) e.start() if(ismob(loc)) diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 0a91cc28708..6d36129773a 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -85,6 +85,7 @@ M.dna.SetSEValue(block,src.GetValue()) domutcheck(M, null, block!=null) uses-- + M.update_mutations() spawn(0)//this prevents the collapse of space-time continuum if (user) diff --git a/code/game/objects/items/weapons/fireworks.dm b/code/game/objects/items/weapons/fireworks.dm index dbd765b0fdd..132dd4306f3 100644 --- a/code/game/objects/items/weapons/fireworks.dm +++ b/code/game/objects/items/weapons/fireworks.dm @@ -3,7 +3,7 @@ obj/item/weapon/firework icon = 'icons/obj/fireworks.dmi' icon_state = "rocket_0" var/litzor = 0 - var/datum/effects/system/sparkel_spread/S + var/datum/effect/system/sparkle_spread/S obj/item/weapon/firework/attackby(obj/item/weapon/W,mob/user, params) if(litzor) return @@ -25,7 +25,7 @@ obj/item/weapon/sparkler icon = 'icons/obj/fireworks.dmi' icon_state = "sparkler_0" var/litzor = 0 - var/datum/effect/effect/system/spark_spread/S + var/datum/effect/system/spark_spread/S obj/item/weapon/sparkler/attackby(obj/item/weapon/W,mob/user, params) if(litzor) return diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 348b4311677..26dd1849a8a 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -279,7 +279,7 @@ end_temp += G.reagents.chem_temp reagents.chem_temp = end_temp if(reagents.total_volume) //The possible reactions didnt use up all reagents. - var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() + var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() steam.set_up(10, 0, get_turf(src)) steam.attach(src) steam.start() @@ -359,7 +359,7 @@ G.reagents.trans_to(src, G.reagents.total_volume) if(reagents.total_volume) //The possible reactions didnt use up all reagents. - var/datum/effect/effect/system/steam_spread/steam = new /datum/effect/effect/system/steam_spread() + var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() steam.set_up(10, 0, get_turf(src)) steam.attach(src) steam.start() diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index d8ef1d9591b..b5838839cba 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -6,11 +6,11 @@ det_time = 20 item_state = "flashbang" slot_flags = SLOT_BELT - var/datum/effect/effect/system/bad_smoke_spread/smoke + var/datum/effect/system/bad_smoke_spread/smoke New() ..() - src.smoke = new /datum/effect/effect/system/bad_smoke_spread + src.smoke = new /datum/effect/system/bad_smoke_spread src.smoke.attach(src) Destroy() diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 59347a12251..c442b998991 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -13,7 +13,7 @@ user.visible_message(pick("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.", \ "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.")) return (BRUTELOSS|FIRELOSS) - + /obj/item/weapon/melee/energy/attack_self(mob/living/carbon/user) if(user.disabilities & CLUMSY && prob(50)) user << "You accidentally cut yourself with [src], like a doofus!" @@ -84,7 +84,7 @@ edge = 1 var/hacked = 0 var/blade_color - + /obj/item/weapon/melee/energy/sword/New() if(item_color == null) item_color = pick("red", "blue", "green", "purple") @@ -106,7 +106,7 @@ return ..() return - + /obj/item/weapon/melee/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs name = "energy saw" desc = "For heavy duty cutting. It has a carbon-fiber blade in addition to a toggleable hard-light edge to dramatically increase sharpness." @@ -129,7 +129,7 @@ /obj/item/weapon/melee/energy/sword/cyborg/saw/IsShield() return 0 - + /obj/item/weapon/melee/energy/sword/saber /obj/item/weapon/melee/energy/sword/saber/blue @@ -185,7 +185,7 @@ desc = "Arrrr matey." icon_state = "cutlass0" icon_state_on = "cutlass1" - + /obj/item/weapon/melee/energy/sword/pirate/New() return @@ -202,11 +202,11 @@ w_class = 4//So you can't hide it in your pocket or some such. flags = NOSHIELD attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - var/datum/effect/effect/system/spark_spread/spark_system + var/datum/effect/system/spark_spread/spark_system //Most of the other special functions are handled in their own files. aka special snowflake code so kewl /obj/item/weapon/melee/energy/blade/New() - spark_system = new /datum/effect/effect/system/spark_spread() + spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) @@ -214,4 +214,4 @@ qdel(src) /obj/item/weapon/melee/energy/blade/attack_self(mob/user) - return \ No newline at end of file + return \ No newline at end of file diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 0ba86215713..ba66e57f19e 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -54,7 +54,7 @@ if(!((user == loc || (in_range(src, user) && istype(src.loc, /turf))))) return - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() smoke.set_up(5, 0, user.loc) smoke.attach(user) smoke.start() diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index bd4dd452887..7097c49926e 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -165,23 +165,44 @@ w_class = 1 can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown", "/obj/item/stack/tile/grass") -/* + /obj/item/weapon/storage/bag/plants/portaseeder - name = "Portable Seed Extractor" + name = "portable seed extractor" desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." icon_state = "portaseeder" - origin_tech = "materials=2;biotech=2" - verb/dissolve_contents() - set name = "Activate Seed Extraction" - set category = "Object" - set desc = "Activate to convert your plants into plantable seeds." - for(var/obj/item/O in contents) - seedify(O, 1) - for(var/mob/M in range(1)) - if (M.s_active == src) - src.close(M) -*/ +/obj/item/weapon/storage/bag/plants/portaseeder/verb/dissolve_contents() + set name = "Activate Seed Extraction" + set category = "Object" + set desc = "Activate to convert your plants into plantable seeds." + if(usr.stat || !usr.canmove || usr.restrained()) + return + for(var/obj/item/O in contents) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown) || istype(O, /obj/item/weapon/grown)) + + var/datum/seed/new_seed_type + if(istype(O, /obj/item/weapon/grown)) + var/obj/item/weapon/grown/F = O + new_seed_type = plant_controller.seeds[F.plantname] + else + var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O + new_seed_type = plant_controller.seeds[F.plantname] + + if(new_seed_type) + var/obj/item/seeds/seeds = new(O.loc, O) + seeds.seed_type = new_seed_type.name + seeds.update_seed() + qdel(O) + + if(istype(O, /obj/item/stack/tile/grass)) + var/obj/item/stack/tile/grass/S = O + S.use(1) + new /obj/item/seeds/grassseed(O.loc, O) + + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + // ----------------------------- // Sheet Snatcher @@ -450,3 +471,32 @@ user.visible_message("\blue [user] drops all the items on their tray.") return ..() + + +/* + * Chemistry bag + */ + +/obj/item/weapon/storage/bag/chemistry + name = "chemistry bag" + icon = 'icons/obj/chemical.dmi' + icon_state = "bag" + desc = "A bag for storing pills, patches, and bottles." + storage_slots = 50 + max_combined_w_class = 200 + w_class = 1 + can_hold = list("/obj/item/weapon/reagent_containers/pill","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle") + +/* + * Biowaste bag (mostly for xenobiologists) + */ + +/obj/item/weapon/storage/bag/bio + name = "bio bag" + icon = 'icons/obj/chemical.dmi' + icon_state = "biobag" + desc = "A bag for the safe transportation and disposal of biowaste and other biological materials." + storage_slots = 25 + max_combined_w_class = 200 + w_class = 1 + can_hold = list("/obj/item/slime_extract","/obj/item/weapon/reagent_containers/food/snacks/monkeycube","/obj/item/weapon/reagent_containers/syringe","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle","/obj/item/weapon/reagent_containers/blood","/obj/item/weapon/reagent_containers/hypospray/autoinjector") \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 1b3f96e3058..42641e5cb00 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -73,7 +73,7 @@ overlays += image('icons/obj/storage.dmi', icon_locking) locked = 0 if(istype(weapon, /obj/item/weapon/melee/energy/blade)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 0d26649dbaa..6498aaa227a 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -89,7 +89,8 @@ */ /obj/item/weapon/table_parts/wood/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if (istype(W, /obj/item/weapon/wrench)) - new /obj/item/stack/sheet/wood( user.loc ) + new /obj/item/stack/sheet/wood(get_turf(src)) + new /obj/item/stack/sheet/wood(get_turf(src)) qdel(src) /obj/item/weapon/table_parts/wood/attack_self(mob/user as mob) diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 08618fe8a08..edbe4be2cd1 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -7,7 +7,7 @@ w_class = 4.0 item_state = "jetpack" distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - var/datum/effect/effect/system/ion_trail_follow/ion_trail + var/datum/effect/system/ion_trail_follow/ion_trail var/on = 0.0 var/stabilization_on = 0 var/volume_rate = 500 //Needed for borg jetpack transfer @@ -15,7 +15,7 @@ /obj/item/weapon/tank/jetpack/New() ..() - src.ion_trail = new /datum/effect/effect/system/ion_trail_follow() + src.ion_trail = new /datum/effect/system/ion_trail_follow() src.ion_trail.set_up(src) return @@ -124,7 +124,7 @@ /obj/item/weapon/tank/jetpack/carbondioxide/New() ..() - src.ion_trail = new /datum/effect/effect/system/ion_trail_follow() + src.ion_trail = new /datum/effect/system/ion_trail_follow() src.ion_trail.set_up(src) air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) @@ -164,4 +164,4 @@ var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins if(allgases >= 0.005) . = 1 - qdel(G) + qdel(G) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index db59ffc3492..cee2996904f 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -118,13 +118,16 @@ data["valveOpen"] = using_internal ? 1 : 0 data["maskConnected"] = 0 - if(istype(loc,/mob/living/carbon)) - var/mob/living/carbon/location = loc - if(location.internal == src) - if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT)) + + if(iscarbon(loc)) + var/mob/living/carbon/C = loc + if(C.internal == src) + data["maskConnected"] = 1 + else + if(C.wear_mask && (C.wear_mask.flags & AIRTIGHT)) data["maskConnected"] = 1 - else if(ishuman(location)) - var/mob/living/carbon/human/H = location + else if(ishuman(C)) + var/mob/living/carbon/human/H = C if(H.head && (H.head.flags & AIRTIGHT)) data["maskConnected"] = 1 diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 7ba38405929..2b6d39250c7 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -338,7 +338,7 @@ delete() amount = amt if(amount) - var/datum/effect/effect/system/freezing_smoke_spread/F = new /datum/effect/effect/system/freezing_smoke_spread + var/datum/effect/system/freezing_smoke_spread/F = new /datum/effect/system/freezing_smoke_spread F.set_up(amount, 0, src.loc) F.start() if(blast) @@ -367,16 +367,16 @@ L.ExtinguishMob() return -/datum/effect/effect/system/freezing_smoke_spread +/datum/effect/system/freezing_smoke_spread -/datum/effect/effect/system/freezing_smoke_spread/set_up(n = 6, c = 0, loca) +/datum/effect/system/freezing_smoke_spread/set_up(n = 6, c = 0, loca) number = n if(istype(loca, /turf/)) location = loca else location = get_turf(loca) -/datum/effect/effect/system/freezing_smoke_spread/start() +/datum/effect/system/freezing_smoke_spread/start() var/i = 0 for(i=0, iError: User located in container--aborting for safety." + playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) + return + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) @@ -226,7 +230,11 @@ E.teleporting = 0 return E.teleporting = 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + if(user in contents) + user << "Error: User located in container--aborting for safety." + playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) + return + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 97062911dd8..5100e2170f0 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -8,6 +8,7 @@ /obj/structure/closet/l3closet/New() ..() sleep(2) + new /obj/item/weapon/storage/bag/bio( src ) new /obj/item/clothing/suit/bio_suit/general( src ) new /obj/item/clothing/head/bio_hood/general( src ) @@ -34,6 +35,7 @@ ..() sleep(2) contents = list() + new /obj/item/weapon/storage/bag/bio( src ) new /obj/item/clothing/suit/bio_suit/virology( src ) new /obj/item/clothing/head/bio_hood/virology( src ) new /obj/item/clothing/mask/breath(src) @@ -75,5 +77,6 @@ ..() sleep(2) contents = list() + new /obj/item/weapon/storage/bag/bio( src ) new /obj/item/clothing/suit/bio_suit/scientist( src ) new /obj/item/clothing/head/bio_hood/scientist( src ) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index 8ac793d8de3..fa15c6926e2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -17,7 +17,7 @@ new /obj/item/clothing/suit/apron(src) if(2) new /obj/item/clothing/suit/apron/overalls(src) - new /obj/item/weapon/storage/bag/plants(src) + new /obj/item/weapon/storage/bag/plants/portaseeder(src) new /obj/item/clothing/under/rank/hydroponics(src) new /obj/item/device/analyzer/plant_analyzer(src) new /obj/item/device/radio/headset/headset_service(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 08130cac90a..b5680be43bc 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -373,6 +373,10 @@ new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/labcoat/chemist(src) new /obj/item/clothing/suit/storage/labcoat/chemist(src) + new /obj/item/weapon/storage/backpack/satchel_chem(src) + new /obj/item/weapon/storage/backpack/satchel_chem(src) + new /obj/item/weapon/storage/bag/chemistry(src) + new /obj/item/weapon/storage/bag/chemistry(src) return diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 0b425698ec0..aa7f18ef335 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -40,7 +40,7 @@ if(isliving(usr)) var/mob/living/L = usr if(L.electrocute_act(17, src)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return 2 @@ -109,7 +109,7 @@ E.teleporting = 0 return E.teleporting = 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) @@ -127,7 +127,7 @@ E.teleporting = 0 return E.teleporting = 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) @@ -206,7 +206,7 @@ if(isliving(user)) var/mob/living/L = user if(L.electrocute_act(17, src)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return diff --git a/code/game/objects/structures/crates_lockers/crittercrate.dm b/code/game/objects/structures/crates_lockers/crittercrate.dm index 19c3c2614ed..e0c07307373 100644 --- a/code/game/objects/structures/crates_lockers/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/crittercrate.dm @@ -57,6 +57,10 @@ name = "goat crate" content_mob = /mob/living/simple_animal/hostile/retaliate/goat +/obj/structure/closet/critter/turkey + name = "turkey crate" + content_mob = /mob/living/simple_animal/turkey + /obj/structure/closet/critter/chick name = "chicken crate" content_mob = /mob/living/simple_animal/chick diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 03d0df1c669..0486ad2358a 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -72,7 +72,7 @@ A.updateicon() flick("echair_shock", src) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(12, 1, src) s.start() visible_message("The electric chair went off!", "You hear a deep sharp shock!") diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 4922ca9c788..1dc18de23ba 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -229,4 +229,30 @@ /obj/structure/flora/rock/pile/New() ..() - icon_state = "rockpile[rand(1,5)]" \ No newline at end of file + icon_state = "rockpile[rand(1,5)]" + +/obj/structure/flora/corn_stalk + name = "corn stalk" + icon = 'icons/obj/flora/plants.dmi' + icon_state = "cornstalk1" + anchored = 0 + layer = 5 + +/obj/structure/flora/corn_stalk/alt_1 + icon_state = "cornstalk2" + +/obj/structure/flora/corn_stalk/alt_2 + icon_state = "cornstalk3" + +/obj/structure/flora/straw_bail + name = "straw bail" + icon = 'icons/obj/flora/plants.dmi' + icon_state = "strawbail1" + density = 1 + climbable = 1 // you can climb all over them. + +/obj/structure/flora/straw_bail/alt_1 + icon_state = "strawbail2" + +/obj/structure/flora/straw_bail/alt_2 + icon_state = "strawbail3" \ No newline at end of file diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index e6a28d33a1c..23072239bcd 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -239,7 +239,7 @@ var/obj/structure/cable/C = T.get_cable_node() if(C) if(electrocute_mob(user, C, src)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() return 1 diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 2f0d1567624..53abfd17216 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -83,7 +83,9 @@ /obj/structure/stool/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - new /obj/item/stack/sheet/wood(src.loc) + new /obj/item/stack/sheet/wood(get_turf(src)) + new /obj/item/stack/sheet/wood(get_turf(src)) + new /obj/item/stack/sheet/wood(get_turf(src)) qdel(src) else ..() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 493fca35423..3cbad10c5c9 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -428,7 +428,7 @@ return if(istype(W, /obj/item/weapon/melee/energy/blade)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) @@ -599,7 +599,7 @@ if(isrobot(user)) return if(istype(I, /obj/item/weapon/melee/energy/blade)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) @@ -659,7 +659,7 @@ if(isrobot(user)) return if(istype(W, /obj/item/weapon/melee/energy/blade)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) @@ -766,7 +766,7 @@ if(isrobot(user)) return if(istype(I, /obj/item/weapon/melee/energy/blade)) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 1c2605238e0..54b0bad4c45 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -119,7 +119,7 @@ /* /turf/simulated/wall/mineral/proc/shock() if (electrocute_mob(user, C, src)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return 1 diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm index effd1bd64b9..af322b3f60f 100644 --- a/code/game/vehicles/spacepods/spacepod.dm +++ b/code/game/vehicles/spacepods/spacepod.dm @@ -28,7 +28,7 @@ var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature var/datum/global_iterator/pr_give_air //moves air from tank to cabin - var/datum/effect/effect/system/ion_trail_follow/space_trail/ion_trail + var/datum/effect/system/ion_trail_follow/space_trail/ion_trail var/hatch_open = 0 @@ -61,7 +61,7 @@ battery = new battery_type(src) add_cabin() add_airtank() - src.ion_trail = new /datum/effect/effect/system/ion_trail_follow/space_trail() + src.ion_trail = new /datum/effect/system/ion_trail_follow/space_trail() src.ion_trail.set_up(src) src.ion_trail.start() src.use_internal_tank = 1 diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm index 04413a62f44..f4c18cdfc80 100644 --- a/code/game/vehicles/vehicle.dm +++ b/code/game/vehicles/vehicle.dm @@ -24,7 +24,7 @@ var/maint_access = 1 //var/dna //dna-locking the mech var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference - var/datum/effect/effect/system/spark_spread/spark_system = new + var/datum/effect/system/spark_spread/spark_system = new var/lights = 0 var/lights_power = 6 diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 29c13f4a6bc..1333892abfe 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -4,7 +4,7 @@ icon_state = "igniter" materials = list(MAT_METAL=500, MAT_GLASS=50) origin_tech = "magnets=1" - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread /obj/item/device/assembly/igniter/New() ..() diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index ce914b6c407..3bb7a97908b 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -177,7 +177,7 @@ call(src,triggerproc)(M) /obj/effect/meatgrinder/proc/triggerrad1(mob) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread for(var/mob/O in viewers(world.view, src.loc)) s.set_up(3, 1, src) s.start() diff --git a/code/modules/awaymissions/trigger.dm b/code/modules/awaymissions/trigger.dm index c31b37fbd8b..38b086f5869 100644 --- a/code/modules/awaymissions/trigger.dm +++ b/code/modules/awaymissions/trigger.dm @@ -22,20 +22,20 @@ M.Move(dest) if(entersparks) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(4, 1, src) s.start() if(exitsparks) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(4, 1, dest) s.start() if(entersmoke) - var/datum/effect/effect/system/harmless_smoke_spread/s = new /datum/effect/effect/system/harmless_smoke_spread + var/datum/effect/system/harmless_smoke_spread/s = new /datum/effect/system/harmless_smoke_spread s.set_up(4, 1, src, 0) s.start() if(exitsmoke) - var/datum/effect/effect/system/harmless_smoke_spread/s = new /datum/effect/effect/system/harmless_smoke_spread + var/datum/effect/system/harmless_smoke_spread/s = new /datum/effect/system/harmless_smoke_spread s.set_up(4, 1, dest, 0) s.start() diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 3fab0c1ae1d..3c315119555 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -79,7 +79,7 @@ // Wiring! How exciting. var/datum/wires/rig/wires - var/datum/effect/effect/system/spark_spread/spark_system + var/datum/effect/system/spark_spread/spark_system /obj/item/weapon/rig/examine() usr << "This is \icon[src][src.name]." diff --git a/code/modules/computer3/computers/HolodeckControl.dm b/code/modules/computer3/computers/HolodeckControl.dm index 0e04ed50d59..cb492c6991b 100644 --- a/code/modules/computer3/computers/HolodeckControl.dm +++ b/code/modules/computer3/computers/HolodeckControl.dm @@ -132,7 +132,7 @@ for(var/turf/T in linkedholodeck) if(prob(30)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, T) s.start() T.ex_act(3) @@ -180,7 +180,7 @@ if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, T) s.start() if(T) @@ -229,7 +229,7 @@ if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, T) s.start() if(T) diff --git a/code/modules/computer3/computers/message.dm b/code/modules/computer3/computers/message.dm index 10870c9973e..27e47684d9c 100644 --- a/code/modules/computer3/computers/message.dm +++ b/code/modules/computer3/computers/message.dm @@ -15,7 +15,7 @@ //Server linked to. var/obj/machinery/message_server/linkedServer = null //Sparks effect - For emag - //var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread + //var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread //Messages - Saves me time if I want to change something. var/noserver = "ALERT: No server detected." diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index 4a95bae0fe1..2d7316cc0ef 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -38,7 +38,7 @@ /datum/event/rogue_drone/end() var/num_recovered = 0 for(var/mob/living/simple_animal/hostile/retaliate/malf_drone/D in drones_list) - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread() sparks.set_up(3, 0, D.loc) sparks.start() D.z = 2 diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 7f5930073cc..fae640a73cb 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -28,7 +28,7 @@ R.my_atom = vent R.add_reagent(pick(gunk), 50) - var/datum/effect/effect/system/chem_smoke_spread/smoke = new + var/datum/effect/system/chem_smoke_spread/smoke = new smoke.set_up(R, rand(1, 2), 0, vent, 0, silent = 1) playsound(vent.loc, 'sound/effects/smoke.ogg', 50, 1, -3) smoke.start(3) diff --git a/code/modules/examine/descriptions/atmospherics.dm b/code/modules/examine/descriptions/atmospherics.dm index c83ec81e89a..2b113a303d8 100644 --- a/code/modules/examine/descriptions/atmospherics.dm +++ b/code/modules/examine/descriptions/atmospherics.dm @@ -81,17 +81,17 @@ description_info = "This is a cosmetic attachment, as pipes currently do not spill their contents into the air." //T-shaped valves -/obj/machinery/atmospherics/tvalve +/obj/machinery/atmospherics/trinary/tvalve description_info = "Click this to toggle the mode. The direction with the green light is where the gas will flow." //Normal valves -/obj/machinery/atmospherics/valve - description_info = "Click this to turn the valve. If red, the pipes on each end are seperated. Otherwise, they are connected." +/obj/machinery/atmospherics/binary/valve + description_info = "Click this to turn the valve. If red, the pipes on each end are separated. Otherwise, they are connected." //TEG ports /obj/machinery/atmospherics/binary/circulator description_info = "This generates electricity, depending on the difference in temperature between each side of the machine. The meter in \ - the center of the machine gives an indicator of how much elecrtricity is being generated." + the center of the machine gives an indicator of how much electricity is being generated." //Passive gates /obj/machinery/atmospherics/binary/passive_gate @@ -106,20 +106,20 @@ description_info = "This pumps the contents of the attached pipe out into the atmosphere, if needed. It can be controlled from an Air Alarm." //Freezers -/obj/machinery/atmospherics/unary/freezer +/obj/machinery/atmospherics/unary/cold_sink/freezer description_info = "Cools down the gas of the pipe it is connected to. It uses massive amounts of electricity while on. \ It can be upgraded by replacing the capacitors, manipulators, and matter bins. It can be deconstructed by screwing the maintenance panel open with a \ screwdriver, and then using a crowbar." //Heaters -/obj/machinery/atmospherics/unary/heater +/obj/machinery/atmospherics/unary/heat_reservoir/heater description_info = "Heats up the gas of the pipe it is connected to. It uses massive amounts of electricity while on. \ It can be upgraded by replacing the capacitors, manipulators, and matter bins. It can be deconstructed by screwing the maintenance panel open with a \ screwdriver, and then using a crowbar." //Gas injectors /obj/machinery/atmospherics/unary/outlet_injector - description_info = "Outputs the pipe's gas into the atmosphere, similar to an airvent. It can be controlled by a nearby atmospherics computer. \ + description_info = "Outputs the pipe's gas into the atmosphere, similar to an air vent. It can be controlled by a nearby atmospherics computer. \ A green light on it means it is on." //Scrubbers @@ -145,13 +145,13 @@ description_antag = "Canisters can be damaged, spilling their contents into the air, or you can just leave the release valve open." //Portable pumps -/obj/machinery/portable_atmospherics/powered/pump +/obj/machinery/portable_atmospherics/pump description_info = "Invaluable for filling air in a room rapidly after a breach repair. The internal gas container can be filled by \ connecting it to a connector port. The pump can pump the air in (sucking) or out (blowing), at a specific target pressure. The powercell inside can be \ replaced by using a screwdriver, and then adding a new cell. A tank of gas can also be attached to the air pump." //Portable scrubbers -/obj/machinery/portable_atmospherics/powered/scrubber +/obj/machinery/portable_atmospherics/scrubber description_info = "Filters the air, placing harmful gases into the internal gas container. The container can be emptied by \ connecting it to a connector port. The pump can pump the air in (sucking) or out (blowing), at a specific target pressure. The powercell inside can be \ replaced by using a screwdriver, and then adding a new cell. A tank of gas can also be attached to the scrubber. " @@ -163,4 +163,4 @@ //Pipe dispensers /obj/machinery/pipedispenser description_info = "This can be moved by using a wrench. You will need to wrench it again when you want to use it. You can put \ - excess (atmospheric) pipes into the dispenser, as well. The dispenser requires electricity to function." \ No newline at end of file + excess (atmospheric) pipes into the dispenser, as well. The dispenser requires electricity to function." diff --git a/code/modules/examine/descriptions/engineering.dm b/code/modules/examine/descriptions/engineering.dm index c8842c21bc7..cd22eed3db5 100644 --- a/code/modules/examine/descriptions/engineering.dm +++ b/code/modules/examine/descriptions/engineering.dm @@ -10,7 +10,7 @@ Touching the supermatter will result in *instant death*, with no corpse left behind! You can drag the supermatter, but anything else will kill you. \ It is advised to obtain a genetic backup before trying to drag it." - description_antag = "Exposing the supermatter to oxygen or vaccum will cause it to start rapidly heating up. Sabotaging the supermatter and making it explode will \ + description_antag = "Exposing the supermatter to oxygen or vacuum will cause it to start rapidly heating up. Sabotaging the supermatter and making it explode will \ cause a period of lag as the explosion is processed by the server, as well as irradiating the entire station and causing hallucinations to happen. \ Wearing radiation equipment will protect you from most of the delamination effects sans explosion." diff --git a/code/modules/examine/descriptions/mobs.dm b/code/modules/examine/descriptions/mobs.dm index 8197e6f3d1d..f8e205e855c 100644 --- a/code/modules/examine/descriptions/mobs.dm +++ b/code/modules/examine/descriptions/mobs.dm @@ -1,8 +1,8 @@ /mob/living/silicon/robot/drone description_info = "Drones are player-controlled synthetics which are lawed to maintain the station and not \ interact with anyone else, except for other drones. They hold a wide array of tools to build, repair, maintain, and clean. \ - They fuction similarly to other synthetics, in that they require recharging regularly, have laws, and are resilient to many hazards, \ + They function similarly to other synthetics, in that they require recharging regularly, have laws, and are resilient to many hazards, \ such as fire, radiation, vacuum, and more. Ghosts can join the round as a maintenance drone by using the appropriate verb in the 'ghost' tab. \ An inactive drone can be rebooted by swiping an ID card on it with engineering or robotics access." - description_antag = "An Electromagnetic Sequencer can be used to subvert the drone to your cause." \ No newline at end of file + description_antag = "An Electromagnetic Sequencer can be used to subvert the drone to your cause." diff --git a/code/modules/examine/descriptions/structures.dm b/code/modules/examine/descriptions/structures.dm index 858653b0943..d8e9b337606 100644 --- a/code/modules/examine/descriptions/structures.dm +++ b/code/modules/examine/descriptions/structures.dm @@ -1,7 +1,7 @@ /obj/structure/girder description_info = "Use metal sheets on this to build a normal wall. Adding plasteel instead will make a reinforced wall.
\ A false wall can be made by using a crowbar on this girder, and then adding metal or plasteel.
\ - You can dismantle the grider with a wrench." + You can dismantle the girder with a wrench." /obj/structure/girder/reinforced description_info = "Add another sheet of plasteel to finish." @@ -14,8 +14,8 @@ description_info = "Add a metal floor tile to build a floor on top of the lattice.
\ Lattices can be made by applying metal rods to a space tile." -/obj/structure/bed +/obj/structure/stool/bed description_info = "Click and drag yourself (or anyone) to this to buckle in. Click on this with an empty hand to undo the buckles.
\
\ Anyone with restraints, such as handcuffs, will not be able to unbuckle themselves. They must use the Resist button, or verb, to break free of \ - the buckles, instead." \ No newline at end of file + the buckles, instead." diff --git a/code/modules/examine/descriptions/weapons.dm b/code/modules/examine/descriptions/weapons.dm index 97791885821..785beed0042 100644 --- a/code/modules/examine/descriptions/weapons.dm +++ b/code/modules/examine/descriptions/weapons.dm @@ -21,7 +21,7 @@ description_antag = "This is a stealthy weapon which fires poisoned bolts at your target. When it hits someone, they will suffer a stun effect, in \ addition to toxins. The energy crossbow recharges itself slowly, and can be concealed in your pocket or bag." -/obj/item/weapon/gun/energy +/obj/item/weapon/gun/energy/gun description_info = "This is an energy weapon. To fire the weapon, have your gun mode set to 'fire', \ then click where you want to fire. Most energy weapons can fire through windows harmlessly. To switch between stun and lethal, click the weapon \ in your hand. To recharge this weapon, use a weapon recharger." @@ -51,7 +51,7 @@ /obj/item/weapon/gun/projectile description_info = "This is a ballistic weapon. To fire the weapon, have your gun mode set to 'fire', \ - then click where you want to fire. To reload, click the weapon in your hand to unload (if needed), then add the appropiate ammo. The description \ + then click where you want to fire. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \ will tell you what caliber you need." /obj/item/weapon/gun/projectile/shotgun/pump @@ -79,4 +79,4 @@ it can be concealed in your pocket or bag." /obj/item/weapon/melee/cultblade - description_antag = "This sword is a powerful weapon, capable of severing limbs easily, if they are targeted. Nonbelivers are unable to use this weapon." + description_antag = "This sword is a powerful weapon, capable of severing limbs easily, if they are targeted. Nonbelievers are unable to use this weapon." diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index b1c01eb9c76..74b639c513b 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -515,7 +515,7 @@ if(water_level && prob(45)) //If there is water, there is a chance the cat will slip, Syndicat will spark like E-N when this happens M.visible_message("[M.name] slipped and got soaked!", "You slipped and got soaked!") if(istype(M, /mob/living/simple_animal/pet/cat/Syndi)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() else //No water or didn't slip, get that fish! diff --git a/code/modules/food/cooker.dm b/code/modules/food/cooker.dm index e50cdac3dec..76f67e47fb8 100644 --- a/code/modules/food/cooker.dm +++ b/code/modules/food/cooker.dm @@ -62,7 +62,7 @@ var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/burnt = new(get_turf(src)) setRegents(props, burnt) user << "You smell burning coming from the [src]!" - var/datum/effect/effect/system/bad_smoke_spread/smoke = new /datum/effect/effect/system/bad_smoke_spread() // burning things makes smoke! + var/datum/effect/system/bad_smoke_spread/smoke = new /datum/effect/system/bad_smoke_spread() // burning things makes smoke! smoke.set_up(5, 0, src) smoke.start() if (prob(firechance)) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 73cd5eff306..98b8e782546 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -648,6 +648,10 @@ datum/recipe/microwave/slimesandwich ) result = /obj/item/weapon/ruinedvirusdish +/datum/recipe/microwave/mashedtaters + fruit = list("potato" = 1) + reagents = list("gravy" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/mashed_potatoes ////////////////////////////////////////// // bs12 food port stuff diff --git a/code/modules/food/recipes_oven.dm b/code/modules/food/recipes_oven.dm index 2efdf4242cd..914362ef45e 100644 --- a/code/modules/food/recipes_oven.dm +++ b/code/modules/food/recipes_oven.dm @@ -393,3 +393,13 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/flatbread +/datum/recipe/oven/turkey // Magic + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/stuffing, + /obj/item/weapon/reagent_containers/food/snacks/stuffing + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 7586f415c0b..982da8315d2 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -93,7 +93,7 @@ var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/3)) R.add_reagent(rid,injecting) - var/datum/effect/effect/system/chem_smoke_spread/S = new() + var/datum/effect/system/chem_smoke_spread/S = new() S.attach(T) S.set_up(R, round(get_trait(TRAIT_POTENCY)/4), 0, T) S.start() @@ -357,7 +357,7 @@ if(turfs.len) // Moves the mob, causes sparks. - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, get_turf(target)) s.start() var/turf/picked = get_turf(pick(turfs)) // Just in case... @@ -431,8 +431,6 @@ "water", "potassium", "plasticide", - "mutationtoxin", - "amutationtoxin", "epinephrine", "space_drugs", "salglu_solution", diff --git a/code/modules/jungle/jungle.dmi b/code/modules/jungle/jungle.dmi index f27897881ce..76cfafb9ea6 100644 Binary files a/code/modules/jungle/jungle.dmi and b/code/modules/jungle/jungle.dmi differ diff --git a/code/modules/jungle/jungle_animals.dm b/code/modules/jungle/jungle_animals.dm index 018b5a8e8f7..a63fed946ea 100644 --- a/code/modules/jungle/jungle_animals.dm +++ b/code/modules/jungle/jungle_animals.dm @@ -51,10 +51,11 @@ /mob/living/simple_animal/hostile/panther name = "panther" desc = "A long sleek, black cat with sharp teeth and claws." - icon = 'code/modules/jungle/jungle.dmi' + icon = 'icons/mob/alienqueen.dmi' icon_state = "panther" icon_living = "panther" icon_dead = "panther_dead" + icon_resting = "panther_rest" icon_gib = "panther_dead" speak_chance = 0 turns_per_move = 3 @@ -66,6 +67,7 @@ stop_automated_movement_when_pulled = 0 maxHealth = 50 health = 50 + pixel_x = -16 harm_intent_damage = 8 melee_damage_lower = 15 diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 03a43880587..f86c3e2d6c2 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -67,7 +67,7 @@ stack_list[processed_sheet] = s // Not including tg's ignoring of metal, glass being stocked because if cargo's not telling science when ores are there, they probably won't // help with restocking metal/glass either - var/msg = "[capitalize(s.name)] sheets have been stocked in the ore reclaimer." + var/msg = "\[[worldtime2text()]\]: [capitalize(s.name)] sheets have been stocked in the ore reclaimer." for(var/obj/machinery/requests_console/D in allConsoles) if(D.department in src.supply_consoles) if(supply_consoles[D.department] == null || (s.name in supply_consoles[D.department])) @@ -242,7 +242,7 @@ return /obj/machinery/mineral/ore_redemption/ex_act(severity, target) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() if(severity == 1) @@ -410,7 +410,7 @@ qdel(voucher) /obj/machinery/mineral/equipment_vendor/ex_act(severity, target) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() if(prob(50 / severity) && severity < 3) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index ed5441c06f1..c7cc2dbdf7c 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -119,7 +119,7 @@ Works together with spawning an observer, noted above. if(antagHUD) var/list/target_list = list() for(var/mob/living/target in oview(src, 14)) - if(target.mind && (target.mind.special_role || issilicon(target))) + if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation)) target_list += target if(target_list.len) assess_targets(target_list, src) @@ -146,8 +146,10 @@ Works together with spawning an observer, noted above. var/client/C = U.client for(var/mob/living/carbon/human/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] + C.images += target.hud_list[NATIONS_HUD] for(var/mob/living/silicon/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] + C.images += target.hud_list[NATIONS_HUD] return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 2cf4a2397f9..dae0172e57f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -157,7 +157,7 @@ stuttering = power Stun(power) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 21cd55e47ba..6b698640d5c 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -32,7 +32,7 @@ hgibs(loc, viruses, dna) else new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() @@ -180,4 +180,4 @@ /mob/living/carbon/human/proc/Drain() ChangeToHusk() mutations |= NOCLONE - return + return diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 16a9ca22837..d8d56cf7f5e 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -335,7 +335,7 @@ m_type = 2 if ("deathgasp") - message = "[src] [species.death_message]" + message = "[src] [species.death_message]" m_type = 1 if ("giggle") @@ -725,7 +725,7 @@ if(locate(/obj/item/weapon/storage/bible) in get_turf(src)) viewers(src) << "[src] farts on the Bible!" viewers(src) << "A mysterious force smites [src]!" - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() src.gib() @@ -818,4 +818,4 @@ set desc = "Sets an extended description of your character's features." set category = "IC" - flavor_text = TextPreview(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text) + flavor_text = TextPreview(input(usr, "Please enter your new flavour text.", "Flavour text", null) as text) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9310d439224..f3a376ee180 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -38,6 +38,7 @@ hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") + hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ..() @@ -507,7 +508,7 @@ stuttering = power Stun(power) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 28a504c1645..39bdd785530 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -14,6 +14,10 @@ var/health_deficiency = (100 - health + staminaloss) + if(reagents) + for(var/datum/reagent/R in reagents.reagent_list) + if(R.shock_reduction) + health_deficiency -= R.shock_reduction if(health_deficiency >= 40) tally += (health_deficiency / 25) @@ -43,6 +47,8 @@ if(RUN in mutations) tally = -1 + if(HULK in mutations) + tally += 1 if(status_flags & IGNORESLOWDOWN) // make sure this is always at the end so we don't have ignore slowdown getting ignored itself tally = -1 diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 63ffbf93de8..c891c9e2cd2 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -132,7 +132,7 @@ custom_emote(1, "drops what they were holding, their [E.name] malfunctioning!") - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) spark_system.start() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 961417b8db7..02916034467 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -363,27 +363,37 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/get_breath_from_internal(volume_needed) //making this call the parent would be far too complicated - var/null_internals = 0 + if(internal) - if(istype(back, /obj/item/weapon/rig)) - var/obj/item/weapon/rig/rig = back - if(rig.offline && (rig.air_supply && internal == rig.air_supply)) - null_internals = 1 + var/null_internals = 0 //internals are invalid, therefore turn them off + var/skip_contents_check = 0 //rigsuit snowflake, oxygen tanks aren't stored inside the mob, so the 'contents.Find' check has to be skipped. - if(!(wear_mask && (wear_mask.flags & AIRTIGHT))) //not wearing mask - if(!(head && (head.flags & AIRTIGHT))) //not wearing helmet - null_internals = 1 + if(!(wear_mask && wear_mask.flags & AIRTIGHT)) //if NOT (wear_mask AND wear_mask.flags CONTAIN AIRTIGHT) + if(!(head && head.flags & AIRTIGHT)) //if NOT (head AND head.flags CONTAIN AIRTIGHT) + null_internals = 1 //not wearing a mask or suitable helmet - if(null_internals) - internal = null + if(istype(back, /obj/item/weapon/rig)) //wearing a rigsuit + var/obj/item/weapon/rig/rig = back //needs to be typecasted because this doesn't use get_rig() for some reason + if(rig.offline && (rig.air_supply && internal == rig.air_supply)) //if rig IS offline AND (rig HAS air_supply AND internal IS air_supply) + null_internals = 1 //offline suits do not breath - if(internal) - if(internals) - internals.icon_state = "internal1" - return internal.remove_air_volume(volume_needed) - else - if(internals) - internals.icon_state = "internal0" + else if(rig.air_supply && internal == rig.air_supply) //if rig HAS air_supply AND internal IS rig air_supply + skip_contents_check = 1 //skip contents.Find() check, the oxygen is valid even being outside of the mob + + if(!contents.Find(internal) && (!skip_contents_check)) //if internal NOT IN contents AND skip_contents_check IS false + null_internals = 1 //not a rigsuit and your oxygen is gone + + if(null_internals) //something wants internals gone + internal = null //so do it + + + if(internal) //check for hud updates every time this is called + if(internals) + internals.icon_state = "internal1" + return internal.remove_air_volume(volume_needed) //returns the valid air + else + if(internals) + internals.icon_state = "internal0" return null @@ -1060,6 +1070,10 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(hud_updateflag) handle_hud_list() + if(ticker && ticker.mode.name == "nations") + process_nations() + + /mob/living/carbon/human/handle_random_events() // Puke if toxloss is too high @@ -1473,6 +1487,30 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc holder.icon_state = "hudshadowlingthrall" hud_list[SPECIALROLE_HUD] = holder + + if(hud_updateflag & 1 << NATIONS_HUD) + var/image/holder = hud_list[NATIONS_HUD] + holder.icon_state = "hudblank" + + if(mind && mind.nation) + switch(mind.nation.name) + if("Atmosia") + holder.icon_state = "hudatmosia" + if("Brigston") + holder.icon_state = "hudbrigston" + if("Cargonia") + holder.icon_state = "hudcargonia" + if("People's Republic of Commandzakstan") + holder.icon_state = "hudcommand" + if("Servicion") + holder.icon_state = "hudservice" + if("Medistan") + holder.icon_state = "hudmedistan" + if("Scientopia") + holder.icon_state = "hudscientopia" + + hud_list[NATIONS_HUD] = holder + hud_updateflag = 0 /mob/living/carbon/human/handle_silent() @@ -1507,6 +1545,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return + // Need this in species. //#undef HUMAN_MAX_OXYLOSS //#undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 1ed7674c050..9f9c0642988 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -360,6 +360,7 @@ C.dna.SetSEState(REMOTETALKBLOCK,0,1) C.mutations -= REMOTE_TALK genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED) + C.mutations.Add(GREY) C.update_mutations() ..() diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index d6c1e083176..1b82d097cd8 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -602,6 +602,8 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 Uses = 3 enhanced = 1 qdel(O) + if(istype(O,/obj/item/weapon/storage/bag)) + ..() /obj/item/slime_extract/New() ..() @@ -812,6 +814,53 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 icon_state = "bottle17" +/obj/item/weapon/slimespeed + name = "slime speed potion" + desc = "A potent chemical mix that will remove the slowdown from any item." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle3" + +/obj/item/weapon/slimespeed/afterattack(obj/item/C, mob/user) + ..() + if(!istype(C)) + user << "The potion can only be used on items!" + return + if(C.slowdown <= 0) + user << "The [C] can't be made any faster!" + return..() + user <<"You slather the red gunk over the [C], making it faster." + C.color = "#FF0000" + C.slowdown = 0 + qdel(src) + +/obj/item/weapon/slimefireproof + name = "slime chill potion" + desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle17" + var/uses = 3 + +/obj/item/weapon/slimefireproof/afterattack(obj/item/clothing/C, mob/user) + ..() + if(!uses) + qdel(src) + return + if(!istype(C)) + user << "The potion can only be used on clothing!" + return + if(C.max_heat_protection_temperature == FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT) + user << "The [C] is already fireproof!" + return..() + user <<"You slather the blue gunk over the [C], fireproofing it." + C.name = "fireproofed [C.name]" + C.color = "#000080" + C.max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT + C.heat_protection = C.body_parts_covered + uses -- + if(!uses) + qdel(src) + + /obj/effect/goleRUNe anchored = 1 desc = "a strange rune used to create golems. It glows when spirits are nearby." diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 60cd33d689d..1c222c9a298 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -301,4 +301,11 @@ if(!hud_used.hide_actions_toggle.moved) hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1) //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,button_number+1) - client.screen += hud_used.hide_actions_toggle \ No newline at end of file + client.screen += hud_used.hide_actions_toggle + + +/mob/living/proc/process_nations() + if(client) + var/client/C = client + for(var/mob/living/carbon/human/H in view(world.view, src)) + C.images += H.hud_list[NATIONS_HUD] \ No newline at end of file diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 5e5847c0ab8..5b3b365d88b 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -85,9 +85,13 @@ proc/get_radio_key_from_channel(var/channel) verb = "stammers" speech_problem_flag = 1 - if(COMIC in mutations) + if(GREY in mutations) + message = "[message]" + + else if(COMIC in mutations) message = "[message]" + returns[1] = message returns[2] = verb returns[3] = speech_problem_flag diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 3dd855994ae..c9aafbe2804 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -183,6 +183,7 @@ var/list/ai_verbs_default = list( hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ai_list += src ..() diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 7523a30c162..ef16209664b 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -154,6 +154,9 @@ if (MED_HUD) process_med_hud(src, 1, eyeobj) + if(ticker && ticker.mode.name == "nations") + process_nations() + /mob/living/silicon/ai/updatehealth() if(status_flags & GODMODE) health = 100 @@ -171,4 +174,4 @@ /mob/living/silicon/ai/rejuvenate() ..() - add_ai_verbs(src) \ No newline at end of file + add_ai_verbs(src) diff --git a/code/modules/mob/living/silicon/mommi/mommi.dm b/code/modules/mob/living/silicon/mommi/mommi.dm index 9fe7884ff29..b904b7d72f6 100644 --- a/code/modules/mob/living/silicon/mommi/mommi.dm +++ b/code/modules/mob/living/silicon/mommi/mommi.dm @@ -30,7 +30,7 @@ They can only use one tool at a time, they can't choose modules, and they have 1 return 1 /mob/living/silicon/robot/mommi/New(loc) - spark_system = new /datum/effect/effect/system/spark_spread() + spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 4b657bb3181..ef36f5b94c9 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -92,8 +92,8 @@ var/global/list/default_pai_software = list() ui.set_auto_update(1) /mob/living/silicon/pai/Topic(href, href_list) - . = ..() - if(.) return + if(..()) + return 1 if(href_list["software"]) var/soft = href_list["software"] diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 9c1d8b79f92..083b3cd8d3b 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -13,11 +13,11 @@ if(!O) return 0 - O.mouse_opacity = 2 + O.mouse_opacity = 2 if(istype(O,/obj/item/borg/sight)) var/obj/item/borg/sight/S = O sight_mode &= ~S.sight_mode - + if(client) client.screen -= O contents -= O @@ -71,6 +71,7 @@ sight_mode |= module_state_3:sight_mode else src << "You need to disable a module first!" + src.update_icons() /mob/living/silicon/robot/proc/uneq_active() uneq_module(module_active) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 6512d1b8353..f57da9153bf 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -153,6 +153,8 @@ if(!is_component_functioning("actuator")) src.Paralyse(3) + if(ticker && ticker.mode.name == "nations") + process_nations() return 1 @@ -323,4 +325,4 @@ if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them IgniteMob() -//Robots on fire \ No newline at end of file +//Robots on fire diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 579bcec93d4..0c46fe17f96 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -59,8 +59,8 @@ var/list/robot_verbs_default = list( var/modtype = "Default" var/lower_mod = 0 var/jetpack = 0 - var/datum/effect/effect/system/ion_trail_follow/ion_trail = null - var/datum/effect/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N + var/datum/effect/system/ion_trail_follow/ion_trail = null + var/datum/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N var/jeton = 0 var/has_power = 1 var/weapon_lock = 0 @@ -87,7 +87,7 @@ var/list/robot_verbs_default = list( var/obj/item/borg/sight/hud/med/healthhud = null /mob/living/silicon/robot/New(loc,var/syndie = 0,var/unfinished = 0, var/alien = 0) - spark_system = new /datum/effect/effect/system/spark_spread() + spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) @@ -149,6 +149,7 @@ var/list/robot_verbs_default = list( hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") + hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") scanner.Grant(src) /mob/living/silicon/robot/proc/init(var/alien=0) @@ -219,6 +220,8 @@ var/list/robot_verbs_default = list( if(security_level == (SEC_LEVEL_GAMMA || SEC_LEVEL_EPSILON) || crisis) src << "\red Crisis mode active. Combat module available." modules+="Combat" + if(get_nations_mode()) + modules = list("Peacekeeper") if(mmi != null && mmi.alien) modules = "Hunter" modtype = input("Please, select a module!", "Robot", null, null) in modules @@ -296,6 +299,11 @@ var/list/robot_verbs_default = list( module.channels = list("Security" = 1) module_sprites["Combat Android"] = "droidcombat" + if("Peacekeeper") + module= new /obj/item/weapon/robot_module/peacekeeper(src) + module.channels = list() + module_sprites["Peacekeeper Android"] = "droidpeace" + if("Hunter") updatename(module) module = new /obj/item/weapon/robot_module/alien/hunter(src) @@ -1000,16 +1008,16 @@ var/list/robot_verbs_default = list( else overlays += "ov-openpanel -c" - if(module_active && istype(module_active,/obj/item/borg/combat/shield)) - overlays += "[icon_state]-shield" - - if(modtype == "Combat") + var/combat = list("Combat","Peacekeeper") + if(modtype in combat) if (base_icon == "") base_icon = icon_state if(module_active && istype(module_active,/obj/item/borg/combat/mobility)) icon_state = "[base_icon]-roll" else icon_state = base_icon + if(activated(/obj/item/borg/combat/shield)) + overlays += "[base_icon]-shield" if(jetpackoverlay) overlays += "minerjetpack-[icon_state]" @@ -1408,3 +1416,43 @@ var/list/robot_verbs_default = list( connected_ai.connected_robots |= src notify_ai(1) sync() + + +/mob/living/silicon/robot/combat/New() + ..() + module = new /obj/item/weapon/robot_module/combat(src) + module.channels = list("Security" = 1) + base_icon = "droidcombat" + icon_state = "droidcombat" + modtype = "Combat" + //languages + module.add_languages(src) + //subsystems + module.add_subsystems(src) + + hands.icon_state = lowertext("Combat") + updatename() + + status_flags &= ~CANPUSH + + radio.config(module.channels) + notify_ai(2) + + +/mob/living/silicon/robot/peacekeeper/New() + ..() + module = new /obj/item/weapon/robot_module/peacekeeper(src) + base_icon = "droidpeace" + icon_state = "droidpeace" + modtype = "Peacekeeper" + //languages + module.add_languages(src) + //subsystems + module.add_subsystems(src) + + hands.icon_state = lowertext("Combat") + updatename() + + status_flags &= ~CANPUSH + + notify_ai(2) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_damage.dm b/code/modules/mob/living/silicon/robot/robot_damage.dm index f01b7abbd7c..6628841fa40 100644 --- a/code/modules/mob/living/silicon/robot/robot_damage.dm +++ b/code/modules/mob/living/silicon/robot/robot_damage.dm @@ -67,8 +67,14 @@ return //Combat shielding absorbs a percentage of damage directly into the cell. - if(module_active && istype(module_active,/obj/item/borg/combat/shield)) - var/obj/item/borg/combat/shield/shield = module_active + var/obj/item/borg/combat/shield/shield + if(module_state_1 && istype(module_state_1,/obj/item/borg/combat/shield)) + shield = module_state_1 + else if(module_state_2 && istype(module_state_2,/obj/item/borg/combat/shield)) + shield = module_state_2 + else if(module_state_3 && istype(module_state_3,/obj/item/borg/combat/shield)) + shield = module_state_3 + if(shield) //Shields absorb a certain percentage of damage based on their power setting. var/absorb_brute = brute*shield.shield_level var/absorb_burn = burn*shield.shield_level @@ -112,8 +118,14 @@ var/list/datum/robot_component/parts = get_damageable_components() //Combat shielding absorbs a percentage of damage directly into the cell. - if(module_active && istype(module_active,/obj/item/borg/combat/shield)) - var/obj/item/borg/combat/shield/shield = module_active + var/obj/item/borg/combat/shield/shield + if(module_state_1 && istype(module_state_1,/obj/item/borg/combat/shield)) + shield = module_state_1 + else if(module_state_2 && istype(module_state_2,/obj/item/borg/combat/shield)) + shield = module_state_2 + else if(module_state_3 && istype(module_state_3,/obj/item/borg/combat/shield)) + shield = module_state_3 + if(shield) //Shields absorb a certain percentage of damage based on their power setting. var/absorb_brute = brute*shield.shield_level var/absorb_burn = burn*shield.shield_level diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index aa37549606b..9191ebbfa13 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -412,12 +412,28 @@ /obj/item/weapon/robot_module/combat/New() src.modules += new /obj/item/device/flash/cyborg(src) + src.modules += new /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg(src) src.modules += new /obj/item/borg/sight/thermal(src) - src.modules += new /obj/item/weapon/gun/energy/laser/cyborg(src) - src.modules += new /obj/item/weapon/gun/energy/plasmacutter(src) + src.modules += new /obj/item/weapon/gun/energy/gun/cyborg(src) + src.modules += new /obj/item/weapon/pickaxe/drill/jackhammer(src) src.modules += new /obj/item/borg/combat/shield(src) src.modules += new /obj/item/borg/combat/mobility(src) - src.modules += new /obj/item/weapon/wrench(src) //Is a combat android really going to be stopped by a chair? + src.modules += new /obj/item/weapon/wrench(src) + src.emag = new /obj/item/weapon/gun/energy/lasercannon/cyborg(src) + + fix_modules() + +/obj/item/weapon/robot_module/peacekeeper + name = "peacekeeper robot module" + +/obj/item/weapon/robot_module/peacekeeper/New() + src.modules += new /obj/item/device/flash/cyborg(src) + src.modules += new /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg(src) + src.modules += new /obj/item/weapon/gun/energy/gun/cyborg(src) + src.modules += new /obj/item/weapon/pickaxe/drill/jackhammer(src) + src.modules += new /obj/item/borg/combat/shield(src) + src.modules += new /obj/item/borg/combat/mobility(src) + src.modules += new /obj/item/weapon/wrench(src) src.emag = new /obj/item/weapon/gun/energy/lasercannon/cyborg(src) fix_modules() diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 210c4a11db3..c6bdb7b96a1 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -669,7 +669,7 @@ //spark for no reason if(prob(5)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() @@ -677,7 +677,7 @@ ..() visible_message("[src] blows apart!") new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() respawnable_list += src diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 070e61ef284..1aa802bfb1a 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -298,6 +298,27 @@ var/global/chicken_count = 0 attacktext = "kicks" health = 50 +/mob/living/simple_animal/turkey + name = "turkey" + desc = "Benjamin Franklin would be proud." + icon_state = "turkey" + icon_living = "turkey" + icon_dead = "turkey_dead" + icon_resting = "turkey_rest" + speak = list("gobble?","gobble","GOBBLE") + speak_emote = list("gobble") + emote_see = list("struts around") + speak_chance = 1 + turns_per_move = 5 + see_in_dark = 6 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat //enough to make one turkey + meat_amount = 4 + response_help = "pets the" + response_disarm = "gently pushes aside the" + response_harm = "kicks the" + attacktext = "pecks" + health = 50 + /mob/living/simple_animal/goose name = "goose" desc = "A pretty goose. Would make a nice comforter." diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 38d79141803..f34ae89ef22 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -5,6 +5,7 @@ icon_state = "fox" icon_living = "fox" icon_dead = "fox_dead" + icon_resting = "fox_rest" speak = list("Ack-Ack","Ack-Ack-Ack-Ackawoooo","Geckers","Awoo","Tchoff") speak_emote = list("geckers", "barks") emote_hear = list("howls","barks") diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 0159237df07..e9479d229f8 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -256,6 +256,7 @@ E = locate() in get_turf(src) if(!E) var/obj/effect/spider/eggcluster/C = new /obj/effect/spider/eggcluster(src.loc) + C.faction = faction if(ckey) C.player_spiders = 1 fed-- diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 8e797c68796..5e57e2c8f7e 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -52,7 +52,7 @@ ..() visible_message("[src] blows apart!") new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() ghostize() @@ -81,7 +81,7 @@ New() ..() - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() smoke.set_up(5, 0, src.loc) smoke.start() visible_message("\red The [src] warps in!") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 3ebf60586ff..e91719c5915 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -22,7 +22,7 @@ speed = 8 projectiletype = /obj/item/projectile/beam/drone projectilesound = 'sound/weapons/laser3.ogg' - var/datum/effect/effect/system/ion_trail_follow/ion_trail + var/datum/effect/system/ion_trail_follow/ion_trail //the drone randomly switches between these states because it's malfunctioning var/hostile_drone = 0 @@ -85,14 +85,14 @@ //repair a bit of damage if(prob(1)) src.visible_message("\red \icon[src] [src] shudders and shakes as some of it's damaged systems come back online.") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() health += rand(25,100) //spark for no reason if(prob(5)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() @@ -134,7 +134,7 @@ src.visible_message("\red \icon[src] [src] begins to spark and shake violenty!") else src.visible_message("\red \icon[src] [src] sparks and shakes like it's about to explode!") - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() @@ -164,7 +164,7 @@ /mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell. //some random debris left behind if(has_loot) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() var/obj/O diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index b9f0f53a2fb..62934f3e53e 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -77,12 +77,16 @@ return ..() /mob/living/simple_animal/hostile/statue/Life() - ..() - if(!client && target) // If we have a target and we're AI controlled + if(..()) + if(!ckey) + spawn() //for saftey + checkTargets() + . = 1 + +/mob/living/simple_animal/hostile/statue/proc/checkTargets() + if(target) var/mob/watching = can_be_seen() - // If they're not our target if(watching && watching != target) - // This one is closer. if(get_dist(watching, src) > get_dist(target, src)) LoseTarget() GiveTarget(watching) @@ -112,74 +116,68 @@ /mob/living/simple_animal/hostile/statue/proc/can_be_seen(var/turf/destination) // Check for darkness var/turf/T = get_turf(loc) + var/light_amount var/DLlight_amount - var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T - if(L) - light_amount = L.lum_r + L.lum_g + L.lum_b + + if(T.dynamic_lighting) + light_amount = T.get_lumcount() else - light_amount = 5 - var/atom/movable/lighting_overlay/DL = locate(/atom/movable/lighting_overlay) in destination - if(DL) - DLlight_amount = DL.lum_r + DL.lum_g + DL.lum_b + light_amount = 5 + + if(destination && destination.dynamic_lighting) + DLlight_amount = destination.get_lumcount() else - DLlight_amount = 5 + DLlight_amount = 5 + if(T && destination) - // Don't check it twice if our destination is the tile we are on or we can't even get to our destination + //Don't check it twice if our destination is the tile we are on or we can't even get to our destination if(T == destination) destination = null else if(light_amount < 0.1 && DLlight_amount < 0.1) // No one can see us in the darkness, right? return null - // We aren't in darkness, loop for viewers. + //We aren't in darkness, loop for viewers. var/list/check_list = list(src) if(destination) check_list += destination - // This loop will, at most, loop twice. + //This loop will, at most, loop twice. for(var/atom/check in check_list) for(var/mob/living/M in viewers(world.view + 1, check) - src) if(M.client && CanAttack(M)) - if(M.blinded || (sdisabilities & BLIND)) + if(M.blinded || (M.sdisabilities & BLIND)) return null + + //calculates if any mobs are actually facing the statue var/xdif = M.x - src.x var/ydif = M.y - src.y - if(abs(xdif) < abs(ydif)) - //mob is either above or below src - if(ydif < 0 && M.dir == NORTH) - //mob is below src and looking up + + if(abs(xdif) < abs(ydif)) //mob is either above or below src + if(ydif < 0 && M.dir == NORTH) //mob is below src and looking up return M - else if(ydif > 0 && M.dir == SOUTH) - //mob is above src and looking down + if(ydif > 0 && M.dir == SOUTH) //mob is above src and looking down return M - else if(abs(xdif) > abs(ydif)) - //mob is either left or right of src - if(xdif < 0 && M.dir == EAST) - //mob is to the left of src and looking right + + else if(abs(xdif) > abs(ydif)) //mob is either left or right of src + if(xdif < 0 && M.dir == EAST) //mob is to the left of src and looking right return M - else if(xdif > 0 && M.dir == WEST) - //mob is to the right of src and looking left + if(xdif > 0 && M.dir == WEST) //mob is to the right of src and looking left return M - else if (xdif == 0 && ydif == 0) - //mob is on the same tile as src + + else if(xdif == 0 && ydif == 0) //mob is on the same tile as src return M - return null - - -// Cannot talk - +//Cannot talk /mob/living/simple_animal/hostile/statue/say() return 0 -// Turn to dust when gibbed - +//Turn to dust when gibbed /mob/living/simple_animal/hostile/statue/gib(var/animation = 0) dust(animation) - /mob/living/simple_animal/hostile/statue/death() living_mob_list -= src dead_mob_list += src @@ -187,7 +185,7 @@ respawnable_list += src gib() -// Stop attacking clientless mobs +//Stop attacking clientless mobs /mob/living/simple_animal/hostile/statue/CanAttack(var/atom/the_target) if(mind && mind.key && !ckey) diff --git a/code/modules/mob/living/simple_animal/revenant/revenant_abilities.dm b/code/modules/mob/living/simple_animal/revenant/revenant_abilities.dm index 016b8171113..5838f8de600 100644 --- a/code/modules/mob/living/simple_animal/revenant/revenant_abilities.dm +++ b/code/modules/mob/living/simple_animal/revenant/revenant_abilities.dm @@ -71,7 +71,7 @@ return L.visible_message("\The [L] suddenly flares brightly and begins to spark!") sleep(10) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(4, 1, L) s.start() sleep(10) @@ -80,7 +80,7 @@ return M.Beam(L,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) M.electrocute_act(25, "[L.name]") - var/datum/effect/effect/system/spark_spread/z = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/z = new /datum/effect/system/spark_spread z.set_up(4, 1, M) z.start() playsound(M, 'sound/machines/defib_zap.ogg', 50, 1, -1) @@ -131,7 +131,7 @@ light.flicker() //spooky user.reveal(reveal) user.stun(stun) - + //Malfunction: Makes bad stuff happen to robots and machines. /obj/effect/proc_holder/spell/aoe_turf/revenant_malf name = "Malfunction (50E)" @@ -169,7 +169,7 @@ for(var/obj/machinery/mach in T.contents) if(prob(10)) mach.emag_act(null) - + empulse(user.loc, 3, 5) user.reveal(reveal) user.stun(stun) diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index 309136dcba0..58c2036848a 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -7,7 +7,7 @@ throwforce = 20 armour_penetration = 15 var/cooldown = 0 // Because spam aint cool, yo. - var/datum/effect/effect/system/spark_spread/spark_system + var/datum/effect/system/spark_spread/spark_system /obj/item/weapon/katana/energy/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) @@ -69,7 +69,7 @@ /obj/item/weapon/katana/energy/New() ..() - spark_system = new /datum/effect/effect/system/spark_spread() + spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 99a3506237e..ca625443893 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -858,7 +858,7 @@ Note that amputating the affected organ does in fact remove the infection from t "Your [src.name] explodes!",\ "You hear an explosion!") explosion(get_turf(owner),-1,-1,2,3) - var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, victim) spark_system.attach(owner) spark_system.start() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 67f5771588a..897cfa1f9f1 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -515,7 +515,7 @@ var/turf/T = get_turf(src) var/obj/structure/cable/N = T.get_cable_node() if (prob(50) && electrocute_mob(usr, N, N)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return @@ -534,7 +534,7 @@ if(do_after(user, 50, target = src)) if(terminal && opened && has_electronics!=2) if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return @@ -654,7 +654,7 @@ var/mob/living/carbon/human/H = user if(!isnull(H.internal_organs_by_name["cell"]) && H.a_intent == I_GRAB) if(emagged || stat & BROKEN) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() H << "The APC power currents surge erratically, damaging your chassis!" @@ -1084,11 +1084,11 @@ cell.corrupt() src.malfhack = 1 update_icon() - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() smoke.set_up(3, 0, src.loc) smoke.attach(src) smoke.start() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() for(var/mob/M in viewers(src)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index a40eb0d9059..622a00fb325 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -182,7 +182,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!prob(prb)) return 0 if (electrocute_mob(user, powernet, src, siemens_coeff)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return 1 diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 4e509cbe51a..c11292d4fd7 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -102,7 +102,7 @@ // update icon overlays and power usage only if displayed level has changed if(lastgen > powercap && prob(10)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() lastgen *= 0.5 diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index c75f53905f4..f7ca916dfff 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -371,7 +371,7 @@ user << "You stick \the [W] into the light socket!" if(has_power() && (W.flags & CONDUCT)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() //if(!user.mutations & RESIST_COLD) @@ -521,7 +521,7 @@ if(status == LIGHT_OK || status == LIGHT_BURNED) playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) if(on) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() status = LIGHT_BROKEN diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index d7b8d2bcdd1..1eea4bc9d0b 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -196,7 +196,7 @@ A.dir = src.dir playsound(get_turf(src), 'sound/weapons/emitter.ogg', 25, 1) if(prob(35)) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index ae989ab3c45..33a5c69fdc8 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -13,7 +13,7 @@ icon_state = "smes" density = 1 anchored = 1 - + var/capacity = 5e6 // maximum charge var/charge = 0 // actual charge @@ -52,7 +52,7 @@ component_parts += new /obj/item/weapon/stock_parts/capacitor(null) component_parts += new /obj/item/stack/cable_coil(null, 5) RefreshParts() - + spawn(5) if(!powernet) connect_to_network() @@ -84,8 +84,8 @@ component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null) component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null) component_parts += new /obj/item/stack/cable_coil(null, 5) - RefreshParts() - + RefreshParts() + /obj/machinery/power/smes/RefreshParts() var/IO = 0 var/C = 0 @@ -184,7 +184,7 @@ if(do_after(user, 50, target = src)) if (prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) //animate the electrocution if uncautious and unlucky - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return @@ -200,7 +200,7 @@ //crowbarring it ! default_deconstruction_crowbar(I) - + /obj/machinery/power/smes/disconnect_terminal() if(terminal) terminal.master = null @@ -224,7 +224,7 @@ /obj/machinery/power/smes/proc/chargedisplay() return round(5.5*charge/(capacity ? capacity : 5e6)) -#define SMESRATE 0.05 +#define SMESRATE 0.05 /obj/machinery/power/smes/process() @@ -325,15 +325,15 @@ var/turf/T = get_turf(user) var/obj/structure/cable/N = T.get_cable_node() //get the connecting node cable, if there's one if (prob(50) && electrocute_mob(user, N, N)) //animate the electrocution if uncautious and unlucky - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() return - + user.visible_message(\ "[user.name] adds the cables and connects the power terminal.",\ "You add the cables and connect the power terminal.") - + terminal = new /obj/machinery/power/terminal(tempLoc) terminal.dir = tempDir terminal.master = src @@ -375,7 +375,7 @@ data["outputLevel"] = output_level data["outputMax"] = output_level_max data["outputLoad"] = round(output_used) - + if(outputting) data["outputting"] = 2 // smes is outputting else if(!outputting && output_attempt) @@ -407,7 +407,7 @@ else if( href_list["online"] ) outputting(!output_attempt) update_icon() - + else if( href_list["input"] ) switch( href_list["input"] ) if("min") @@ -438,7 +438,7 @@ for(var/mob/M in viewers(src)) M.show_message("\red The [src.name] is making strange noises!", 3, "\red You hear sizzling electronics.", 2) sleep(10*pick(4,5,6,7,10,14)) - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() smoke.set_up(3, 0, src.loc) smoke.attach(src) smoke.start() @@ -446,7 +446,7 @@ qdel(src) return if(prob(15)) //Power drain - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() if(prob(50)) @@ -454,7 +454,7 @@ else emp_act(2) if(prob(5)) //smoke only - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() smoke.set_up(3, 0, src.loc) smoke.attach(src) smoke.start() @@ -481,7 +481,7 @@ ..() /obj/machinery/power/smes/engineering - charge = 2e6 // Engineering starts with some charge for singulo + charge = 2e6 // Engineering starts with some charge for singulo /obj/machinery/power/smes/magical name = "magical power storage unit" diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index e4906df5620..7841b1e94b8 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -35,6 +35,24 @@ else user.update_inv_r_hand() +/obj/item/weapon/gun/energy/gun/cyborg + desc = "An energy-based laser gun that draws power from the cyborg's internal energy cell directly. So this is what freedom looks like?" + +/obj/item/weapon/gun/energy/gun/cyborg/process() + return 1 + +/obj/item/weapon/gun/energy/gun/cyborg/process_chambered() + if(in_chamber) + return 1 + if(isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + if(R && R.cell && R.cell.charge >= 83) + R.cell.use(83) + in_chamber = new projectile_type(src) + return 1 + return 0 + + /obj/item/weapon/gun/energy/gun/mounted name = "mounted energy gun" self_recharge = 1 diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index f5d5e6a6883..eb4bf5c37d1 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -122,7 +122,7 @@ /obj/item/weapon/gun/magic/wand/teleport/zap_self(mob/living/user as mob) do_teleport(user, user, 10) - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() smoke.set_up(10, 0, user.loc) smoke.start() charges-- diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 2a2d32bc3eb..a379e6cb61c 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -21,7 +21,7 @@ /obj/item/projectile/energy/electrode/on_hit(var/atom/target, var/blocked = 0) if(!proj_hit) if(!ismob(target) || blocked >= 2) //Fully blocked by mob or collided with dense object - burst into sparks! - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread sparks.set_up(1, 1, src) sparks.start() proj_hit = 1 @@ -35,7 +35,7 @@ /obj/item/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet if(!proj_hit) - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread sparks.set_up(1, 1, src) sparks.start() proj_hit = 1 diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 63a3f2a3a79..5b740a0699b 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -90,7 +90,7 @@ if(!stuff.anchored && stuff.loc) teleammount++ do_teleport(stuff, stuff, 10) - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread() + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() smoke.set_up(max(round(10 - teleammount),1), 0, stuff.loc) //Smoke drops off if a lot of stuff is moved for the sake of sanity smoke.start() diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index b2563d846ea..38fa2f06fdb 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -203,7 +203,7 @@ icon_state = "snappop" Bump(atom/A as mob|obj|turf|area) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(3, 1, src) s.start() new /obj/effect/decal/cleanable/ash(src.loc) diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index e0cf917bdf4..4745a026fbf 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -278,7 +278,7 @@ datum/reagent/sal_acid description = "This is a is a standard salicylate pain reliever and fever reducer." reagent_state = LIQUID color = "#B3B3B3" - shock_reduction = 40 + shock_reduction = 25 overdose_threshold = 25 datum/reagent/sal_acid/on_mob_life(var/mob/living/M as mob) @@ -444,7 +444,7 @@ datum/reagent/morphine color = "#C8A5DC" overdose_threshold = 30 addiction_threshold = 25 - shock_reduction = 60 + shock_reduction = 50 datum/reagent/morphine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm index a85060132ae..7e3986e3f13 100644 --- a/code/modules/reagents/newchem/pyro.dm +++ b/code/modules/reagents/newchem/pyro.dm @@ -190,7 +190,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit /datum/chemical_reaction/blackpowder_explosion/on_reaction(var/datum/reagents/holder, var/created_volume) var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, location) s.start() sleep(rand(20,30)) @@ -200,7 +200,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit /* /datum/reagent/blackpowder/on_ex_act() var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, location) s.start() sleep(rand(10,15)) @@ -244,7 +244,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit /datum/chemical_reaction/flash_powder_flash/on_reaction(var/datum/reagents/holder, var/created_volume) var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, location) s.start() for(var/mob/living/carbon/C in viewers(5, location)) @@ -260,7 +260,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit if(holder.has_reagent("stabilizing_agent")) return var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(2, 1, location) s.start() for(var/mob/living/carbon/C in viewers(5, location)) @@ -302,7 +302,7 @@ datum/reagent/blackpowder/reaction_turf(var/turf/T, var/volume) //oh shit if(holder.has_reagent(f_reagent)) holder.remove_reagent(f_reagent, holder.get_reagent_amount(f_reagent)) var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread + var/datum/effect/system/chem_smoke_spread/S = new /datum/effect/system/chem_smoke_spread S.attach(location) playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) spawn(0) diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm index 4ec4c1bb9e4..dc4dbbfbd90 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm @@ -10,7 +10,7 @@ mix_message = "The mixture explodes!" on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/effect/effect/system/reagents_explosion/e = new() + var/datum/effect/system/reagents_explosion/e = new() e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) e.start() holder.clear_reagents() @@ -60,7 +60,7 @@ required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1) result_amount = 2 on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/effect/effect/system/reagents_explosion/e = new() + var/datum/effect/system/reagents_explosion/e = new() e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0) e.start() diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm index f884ef6cb63..99f6e60a5e6 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm @@ -33,7 +33,7 @@ //for(var/datum/reagent/R in holder.reagent_list) // world << "[R.name] = [R.volume]" - var/datum/effect/effect/system/foam_spread/s = new() + var/datum/effect/system/foam_spread/s = new() s.set_up(created_volume, location, holder, 0) s.start() holder.clear_reagents() @@ -54,7 +54,7 @@ for(var/mob/M in viewers(5, location)) M << "\red The solution spews out a metalic foam!" - var/datum/effect/effect/system/foam_spread/s = new() + var/datum/effect/system/foam_spread/s = new() s.set_up(created_volume, location, holder, 1) s.start() return @@ -74,7 +74,7 @@ for(var/mob/M in viewers(5, location)) M << "\red The solution spews out a metalic foam!" - var/datum/effect/effect/system/foam_spread/s = new() + var/datum/effect/system/foam_spread/s = new() s.set_up(created_volume, location, holder, 2) s.start() return diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm index 9d38b1ad599..8cfd61cd1dc 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm @@ -202,6 +202,7 @@ result_amount = 10 required_container = /obj/item/slime_extract/blue required_other = 1 + //Dark Blue slimefreeze name = "Slime Freeze" @@ -221,6 +222,21 @@ M.bodytemperature -= 140 M << "\blue You feel a chill!" + + slimefireproof + name = "Slime Fireproof" + id = "m_fireproof" + result = null + required_reagents = list("water" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/darkblue + required_other = 1 + + on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/weapon/slimefireproof/P = new /obj/item/weapon/slimefireproof + P.loc = get_turf(holder.my_atom) + //Orange slimecasp name = "Slime Capsaicin Oil" @@ -353,6 +369,21 @@ for(var/mob/O in viewers(get_turf(holder.my_atom), null)) O.show_message(text("\red The [slime] is driven into a frenzy!."), 1) + + slimespeed + name = "Slime Speed" + id = "m_speed" + result = null + required_reagents = list("water" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/red + required_other = 1 + + on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/weapon/slimespeed/P = new /obj/item/weapon/slimespeed + P.loc = get_turf(holder.my_atom) + //Pink slimeppotion name = "Slime Potion" diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index e0113f2f078..101b7a772f9 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -799,6 +799,7 @@ New() ..() reagents.add_reagent("protein", 6) + reagents.add_reagent("porktonium", 10) bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/donkpocket @@ -3114,6 +3115,41 @@ reagents.add_reagent("toxin", 3) bitesize = 4 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/turkey + name = "Turkey" + desc = "A traditional turkey served with stuffing." + icon_state = "turkey" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/turkeyslice + slices_num = 6 + New() + ..() + reagents.add_reagent("protein", 24) + reagents.add_reagent("nutriment", 18) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/turkeyslice + name = "turkey serving" + desc = "A serving of some tender and delicious turkey." + icon_state = "turkeyslice" + trash = /obj/item/trash/plate + filling_color = "#B97A57" + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/mashed_potatoes //mashed taters + name = "mashed potatoes" + desc = "Some sot creamy, and irresistible mashed potatoes." + icon_state = "mashedtaters" + trash = /obj/item/trash/plate + filling_color = "#D6D9C1" + bitesize = 2 + + New() + ..() + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("gravy", 5) + reagents.add_reagent("mashedpotatoes", 10) + bitesize = 2 + ////////////////////////////////ICE CREAM/////////////////////////////////// /obj/item/weapon/reagent_containers/food/snacks/icecream name = "ice cream" diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index 9c25497409c..bab6877e3ff 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -689,7 +689,7 @@ var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport. var/inner_teleport_radius = potency/15 var/list/turfs = new/list() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread if(inner_teleport_radius < 1) //Wasn't potent enough, it just splats. new/obj/effect/decal/cleanable/blood/oil(src.loc) src.visible_message("The [src.name] has been squashed.","You hear a smack.") diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 1245bfe4e01..3e64245d2c5 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -161,7 +161,8 @@ user << "\blue You set the label to \"[tmp_label]\"." src.label_text = tmp_label src.update_name_label() - + if(istype(I,/obj/item/weapon/storage/bag)) + ..() proc/update_name_label() if(src.label_text == "") diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 2a0d82d3a03..a9bbdb68de6 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -46,7 +46,8 @@ attackby(obj/item/I as obj, mob/user as mob, params) - + if(istype(I,/obj/item/weapon/storage/bag)) + ..() return afterattack(obj/target, mob/user, proximity) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 0901f45f284..55389cfc4a9 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -229,7 +229,7 @@ loaded_item = null /obj/machinery/r_n_d/experimentor/proc/throwSmoke(turf/where) - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new + var/datum/effect/system/harmless_smoke_spread/smoke = new smoke.set_up(1,0, where, 0) smoke.start() @@ -321,7 +321,7 @@ R.my_atom = src R.add_reagent(chosenchem , 15) investigate_log("Experimentor has released [chosenchem] smoke.", "experimentor") - var/datum/effect/effect/system/chem_smoke_spread/smoke = new + var/datum/effect/system/chem_smoke_spread/smoke = new smoke.set_up(R, 1, 0, src, 0, silent = 1) playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) smoke.start() @@ -333,7 +333,7 @@ var/datum/reagents/R = new/datum/reagents(15) R.my_atom = src R.add_reagent(chosenchem , 15) - var/datum/effect/effect/system/chem_smoke_spread/smoke = new + var/datum/effect/system/chem_smoke_spread/smoke = new smoke.set_up(R, 1, 0, src, 0, silent = 1) playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) smoke.start() @@ -421,7 +421,7 @@ R.my_atom = src R.add_reagent("frostoil" , 15) investigate_log("Experimentor has released frostoil gas.", "experimentor") - var/datum/effect/effect/system/chem_smoke_spread/smoke = new + var/datum/effect/system/chem_smoke_spread/smoke = new smoke.set_up(R, 1, 0, src, 0, silent = 1) playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3) smoke.start() @@ -443,7 +443,7 @@ ejectItem(TRUE) if(prob(EFFECT_PROB_MEDIUM-badThingCoeff)) visible_message("[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!") - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new + var/datum/effect/system/harmless_smoke_spread/smoke = new smoke.set_up(1,0, src.loc, 0) smoke.start() ejectItem() @@ -653,7 +653,7 @@ //////////////// RELIC PROCS ///////////////////////////// /obj/item/weapon/relic/proc/throwSmoke(turf/where) - var/datum/effect/effect/system/harmless_smoke_spread/smoke = new + var/datum/effect/system/harmless_smoke_spread/smoke = new smoke.set_up(1,0, where, 0) smoke.start() diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm index ae7a19005f3..a0e2e44830e 100644 --- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm +++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm @@ -10,12 +10,12 @@ if (user.buckled) user.buckled.unbuckle_mob() - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread() sparks.set_up(3, 0, get_turf(user)) sparks.start() // user.forceMove(pick(trange(50, get_turf(holder)))) - sparks = new /datum/effect/effect/system/spark_spread() + sparks = new /datum/effect/system/spark_spread() sparks.set_up(3, 0, get_turf(user)) sparks.start() @@ -29,12 +29,12 @@ if(M.buckled) M.buckled.unbuckle_mob() - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread() sparks.set_up(3, 0, get_turf(M)) sparks.start() // M.forceMove(pick(trange(50, T))) - sparks = new /datum/effect/effect/system/spark_spread() + sparks = new /datum/effect/system/spark_spread() sparks.set_up(3, 0, get_turf(M)) sparks.start() @@ -48,11 +48,11 @@ if(M.buckled) M.buckled.unbuckle_mob() - var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + var/datum/effect/system/spark_spread/sparks = new /datum/effect/system/spark_spread() sparks.set_up(3, 0, get_turf(M)) sparks.start() // M.forceMove(pick(trange(50, T))) - sparks = new /datum/effect/effect/system/spark_spread() + sparks = new /datum/effect/system/spark_spread() sparks.set_up(3, 0, get_turf(M)) sparks.start() diff --git a/code/modules/research/xenoarchaeology/machinery/coolant.dm b/code/modules/research/xenoarchaeology/machinery/coolant.dm index 79da41e5f2a..f6d844fb889 100644 --- a/code/modules/research/xenoarchaeology/machinery/coolant.dm +++ b/code/modules/research/xenoarchaeology/machinery/coolant.dm @@ -37,7 +37,7 @@ datum/chemical_reaction/coolant explode() /obj/structure/reagent_dispensers/coolanttank/proc/explode() - var/datum/effect/effect/system/harmless_smoke_spread/S = new /datum/effect/effect/system/harmless_smoke_spread + var/datum/effect/system/harmless_smoke_spread/S = new /datum/effect/system/harmless_smoke_spread //S.attach(src) S.set_up(5, 0, src.loc) diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index 89b30243c3f..a63802e458c 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -47,7 +47,7 @@ src.locked = !src.locked user << "Controls are now [src.locked ? "locked." : "unlocked."]" updateDialog() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm index 6755c2b8a47..51be7d4519b 100644 --- a/code/modules/shieldgen/shield_gen.dm +++ b/code/modules/shieldgen/shield_gen.dm @@ -55,7 +55,7 @@ src.locked = !src.locked user << "Controls are now [src.locked ? "locked." : "unlocked."]" updateDialog() - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 7b497dc731b..1fe42e91ede 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -157,7 +157,7 @@ /obj/item/weapon/rcs/emag_act(user as mob) if(!emagged) emagged = 1 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) s.start() user << " You emag the RCS. Activate it to toggle between modes." diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 291475f3dda..33e86061f5d 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -148,7 +148,7 @@ /obj/machinery/computer/telescience/proc/sparks() if(telepad) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, get_turf(telepad)) s.start() else @@ -206,7 +206,7 @@ // use a lot of power use_power(power * 10) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, get_turf(telepad)) s.start() @@ -217,7 +217,7 @@ temp_msg += "Data printed below." var/sparks = get_turf(target) - var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread + var/datum/effect/system/spark_spread/y = new /datum/effect/system/spark_spread y.set_up(5, 1, sparks) y.start() diff --git a/code/stylesheet.dm b/code/stylesheet.dm index c0e951046fa..a6ee7073d4e 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -91,6 +91,7 @@ h1.alert, h2.alert {color: #000000;} .rough {color: #7092BE; font-family: "Trebuchet MS", cursive, sans-serif;} .say_quote {font-family: Georgia, Verdana, sans-serif;} .sans {font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} +.grey {font-family: "Wingdings", cursive, sans-serif;} .cultspeech {color: #7F0000; font-style: italic;} .say_quote {font-family: Georgia, Verdana, sans-serif;} diff --git a/icons/mob/alienqueen.dmi b/icons/mob/alienqueen.dmi index 6bb38bd1cba..b01af7e71b4 100644 Binary files a/icons/mob/alienqueen.dmi and b/icons/mob/alienqueen.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 69822c8706f..3829370cf4f 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index fc720126d47..6edb0d7c573 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi index fb7f5c29bfb..169beacef43 100644 Binary files a/icons/mob/pets.dmi and b/icons/mob/pets.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 9d5d09f00ac..6bad482e8e4 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index b00fca709c5..afe27ae192d 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/flora/plants.dmi b/icons/obj/flora/plants.dmi index fbc2d62dcad..da28d67ea2b 100644 Binary files a/icons/obj/flora/plants.dmi and b/icons/obj/flora/plants.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 4e618e97167..b0a652de4f5 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 94f8281967e..1fa7bc554d9 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/nano/templates/cloning_console.tmpl b/nano/templates/cloning_console.tmpl index 7f82878aaa1..a1c35f903ae 100644 --- a/nano/templates/cloning_console.tmpl +++ b/nano/templates/cloning_console.tmpl @@ -65,17 +65,21 @@ Used In File(s): \code\game\machinery\computer\cloning.dm {{if data.numberofpods}}

Pods

{{for data.pods}} -
- {{:value.name}} + {{:value.name}}
+
Biomass
{{:value.biomass}}
+
+ +
Select
{{:helper.link('Select', 'check', {'selectpod' : value.pod}, value.pod == data.selected_pod ? 'selected' : '')}}
+ {{/for}} {{/if}} {{/if}} @@ -108,7 +112,7 @@ Used In File(s): \code\game\machinery\computer\cloning.dm
UI: {{:data.unidentity}}
- SE: {{:data.strucenzymes}} + SE:
{{:data.strucenzymes}}
{{if data.disk}}
diff --git a/nano/templates/cryo.tmpl b/nano/templates/cryo.tmpl index ab375a5df59..6f7085f5e26 100644 --- a/nano/templates/cryo.tmpl +++ b/nano/templates/cryo.tmpl @@ -1,106 +1,107 @@ - -

Cryo Cell Status

+ +

Cryo Cell Status

-
- {{if !data.hasOccupant}} -
Cell Unoccupied
- {{else}} -
- {{:data.occupant.name}} =>  - {{if data.occupant.stat == 0}} - Conscious - {{else data.occupant.stat == 1}} - Unconscious - {{else}} - DEAD - {{/if}} -
- - {{if data.occupant.stat < 2}} -
-
Health:
- {{if data.occupant.health >= 0}} - {{:helper.displayBar(data.occupant.health, 0, data.occupant.maxHealth, 'good')}} - {{else}} - {{:helper.displayBar(data.occupant.health, 0, data.occupant.minHealth, 'average alignRight')}} - {{/if}} -
{{:helper.round(data.occupant.health)}}
-
- -
-
=> Brute Damage:
- {{:helper.displayBar(data.occupant.bruteLoss, 0, data.occupant.maxHealth, 'bad')}} -
{{:helper.round(data.occupant.bruteLoss)}}
-
- -
-
=> Resp. Damage:
- {{:helper.displayBar(data.occupant.oxyLoss, 0, data.occupant.maxHealth, 'bad')}} -
{{:helper.round(data.occupant.oxyLoss)}}
-
- -
-
=> Toxin Damage:
- {{:helper.displayBar(data.occupant.toxLoss, 0, data.occupant.maxHealth, 'bad')}} -
{{:helper.round(data.occupant.toxLoss)}}
-
- -
-
=> Burn Severity:
- {{:helper.displayBar(data.occupant.fireLoss, 0, data.occupant.maxHealth, 'bad')}} -
{{:helper.round(data.occupant.fireLoss)}}
-
- {{/if}} - {{/if}} -
-
-
Cell Temperature:
- {{:data.cellTemperature}} K -
-
-
- -

Cryo Cell Operation

-
-
- Cryo Cell Status: -
-
- {{:helper.link('On', 'power', {'switchOn' : 1}, data.isOperating ? 'selected' : null)}}{{:helper.link('Off', 'close', {'switchOff' : 1}, data.isOperating ? null : 'selected')}} -
-
- {{:helper.link('Eject Occupant', 'arrowreturnthick-1-s', {'ejectOccupant' : 1}, data.hasOccupant ? null : 'disabled')}} -
-
-
 
-
-
- Beaker: -
-
- {{if data.isBeakerLoaded}} - {{:data.beakerLabel ? data.beakerLabel : 'No label'}}
- {{if data.beakerVolume}} - {{:data.beakerVolume}} units remaining
- {{else}} - Beaker is empty - {{/if}} +
+ {{if !data.hasOccupant}} +
Cell Unoccupied
{{else}} - No beaker loaded +
+ {{:data.occupant.name}} =>  + {{if data.occupant.stat == 0}} + Conscious + {{else data.occupant.stat == 1}} + Unconscious + {{else}} + DEAD + {{/if}} +
+ + {{if data.occupant.stat < 2}} +
+
Health:
+ {{if data.occupant.health >= 0}} + {{:helper.displayBar(data.occupant.health, 0, data.occupant.maxHealth, 'good')}} + {{else}} + {{:helper.displayBar(data.occupant.health, 0, data.occupant.minHealth, 'average alignRight')}} + {{/if}} +
{{:helper.round(data.occupant.health)}}
+
+ +
+
=> Brute Damage:
+ {{:helper.displayBar(data.occupant.bruteLoss, 0, data.occupant.maxHealth, 'bad')}} +
{{:helper.round(data.occupant.bruteLoss)}}
+
+ +
+
=> Resp. Damage:
+ {{:helper.displayBar(data.occupant.oxyLoss, 0, data.occupant.maxHealth, 'bad')}} +
{{:helper.round(data.occupant.oxyLoss)}}
+
+ +
+
=> Toxin Damage:
+ {{:helper.displayBar(data.occupant.toxLoss, 0, data.occupant.maxHealth, 'bad')}} +
{{:helper.round(data.occupant.toxLoss)}}
+
+ +
+
=> Burn Severity:
+ {{:helper.displayBar(data.occupant.fireLoss, 0, data.occupant.maxHealth, 'bad')}} +
{{:helper.round(data.occupant.fireLoss)}}
+
+ {{/if}} {{/if}} +
+
+
+
Cell Temperature:
+ {{:data.cellTemperature}} K +
+
-
- {{:helper.link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}} + +

Cryo Cell Operation

+
+
+ Cryo Cell Status: +
+
+ {{:helper.link('On', 'power', {'switchOn' : 1}, data.isOperating ? 'selected' : null)}}{{:helper.link('Off', 'close', {'switchOff' : 1}, data.isOperating ? null : 'selected')}} +
+
+ {{:helper.link('Eject Occupant', 'arrowreturnthick-1-s', {'ejectOccupant' : 1}, data.hasOccupant ? null : 'disabled')}} +
-
-
-
- Auto-eject: +
 
+
+
+ Beaker: +
+
+ {{if data.isBeakerLoaded}} + {{:data.beakerLabel ? data.beakerLabel : 'No label'}}
+ {{if data.beakerVolume}} + {{:data.beakerVolume}} units remaining
+ {{else}} + Beaker is empty + {{/if}} + {{else}} + No beaker loaded + {{/if}} +
+
+ {{:helper.link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}} +
-
- {{:helper.link('On', 'power', {'autoejectOn' : 1}, data.autoeject ? 'selected' : null)}}{{:helper.link('Off', 'close', {'autoejectOff' : 1}, data.autoeject ? null : 'selected')}} -
-
\ No newline at end of file +
+
+ Auto-eject: +
+
+ {{:helper.link('On', 'power', {'autoejectOn' : 1}, data.autoeject ? 'selected' : null)}}{{:helper.link('Off', 'close', {'autoejectOff' : 1}, data.autoeject ? null : 'selected')}} +
+
\ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 8f2d1fbaba2..50b656bec13 100644 --- a/paradise.dme +++ b/paradise.dme @@ -352,6 +352,8 @@ #include "code\game\gamemodes\mutiny\directives\tau_ceti_needs_women_directive.dm" #include "code\game\gamemodes\mutiny\directives\terminations_directive.dm" #include "code\game\gamemodes\mutiny\directives\vox_heist.dm" +#include "code\game\gamemodes\nations\nations.dm" +#include "code\game\gamemodes\nations\nationsdatums.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm"