diff --git a/_maps/map_files220/generic/centcomm.dmm b/_maps/map_files220/generic/centcomm.dmm index 736eabcf9013..16eb9d504758 100644 --- a/_maps/map_files220/generic/centcomm.dmm +++ b/_maps/map_files220/generic/centcomm.dmm @@ -27,6 +27,11 @@ icon_state = "darkbrown" }, /area/centcom/ss220/admin3) +"aaR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/kirbyplants, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "aaU" = ( /obj/effect/turf_decal/plaque{ layer = 3 @@ -88,6 +93,23 @@ icon_state = "darkyellowfull" }, /area/syndicate_mothership/cargo) +"acb" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/flashlight{ + pixel_y = 12 + }, +/obj/item/flashlight{ + pixel_y = 6 + }, +/obj/item/flashlight, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "acl" = ( /obj/structure/urinal{ pixel_y = 28 @@ -134,6 +156,10 @@ }, /turf/simulated/floor/wood/oak, /area/syndicate_mothership) +"acW" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/floor/plating/asteroid/ancient/airless, +/area/space/nearstation/centcom) "adf" = ( /turf/simulated/floor/plasteel{ icon_state = "black"; @@ -169,6 +195,14 @@ /obj/machinery/computer/shuttle/sit, /turf/simulated/floor/carpet, /area/syndicate_mothership/control) +"aeZ" = ( +/obj/machinery/economy/vending/boozeomat, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "aff" = ( /obj/machinery/computer/card/centcom{ dir = 1 @@ -287,6 +321,12 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"ajq" = ( +/obj/structure/shuttle/engine/huge{ + dir = 4 + }, +/turf/simulated/floor/indestructible/transparent_floor, +/area/shuttle/vox) "ajH" = ( /turf/simulated/wall/mineral/titanium, /area/shuttle/transport) @@ -359,6 +399,17 @@ }, /turf/simulated/floor/carpet/black, /area/syndicate_mothership/elite_squad) +"ams" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "amP" = ( /obj/structure/table/wood, /turf/simulated/floor/wood/fancy/oak, @@ -425,6 +476,13 @@ icon_state = "darkredalt" }, /area/centcom/ss220/admin3) +"aoY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/economy/vending/tool/free{ + color = "#e67e7e" + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "apf" = ( /obj/structure/table/reinforced{ color = "#444444" @@ -459,6 +517,18 @@ /obj/effect/turf_decal/woodsiding, /turf/simulated/floor/transparent/glass/titanium/plasma, /area/centcom/ss220/admin2) +"apB" = ( +/obj/machinery/airlock_controller/access_controller{ + ext_door_link_id = "voxeast_door_ext"; + int_door_link_id = "voxeast_door_int"; + pixel_x = -24; + req_access_txt = "152"; + ext_button_link_id = "voxeast_btn_ext"; + int_button_link_id = "voxeast_btn_int" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "apF" = ( /obj/structure/rack, /obj/item/reagent_containers/spray/cleaner{ @@ -606,6 +676,29 @@ "atu" = ( /turf/simulated/wall/indestructible/wood, /area/ninja/holding) +"atP" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "atT" = ( /turf/simulated/floor/plating{ icon = 'icons/turf/floors.dmi'; @@ -711,6 +804,14 @@ /obj/effect/turf_decal/delivery/red, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) +"awe" = ( +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "awj" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -850,6 +951,11 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/shuttle/administration) +"aAn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/remains/mouse, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "aAs" = ( /obj/effect/turf_decal/siding/brown/corner{ dir = 8 @@ -937,6 +1043,19 @@ /obj/item/autosurgeon/organ/syndicate, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/control) +"aDo" = ( +/obj/machinery/recharger, +/obj/structure/table/reinforced{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "aDC" = ( /obj/machinery/computer/syndicate_depot/teleporter, /turf/simulated/floor/plasteel{ @@ -978,6 +1097,18 @@ icon_state = "darkred" }, /area/syndicate_mothership/elite_squad) +"aEy" = ( +/obj/structure/chair/brass{ + color = "#f700ff"; + dir = 8 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "aER" = ( /obj/structure/reagent_dispensers/fueltank/chem/west, /turf/simulated/floor/plasteel{ @@ -1177,6 +1308,18 @@ }, /turf/simulated/floor/wood, /area/ghost_bar) +"aKN" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 8; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "aKO" = ( /obj/structure/flora/junglebush, /turf/simulated/floor/grass/jungle, @@ -1197,6 +1340,11 @@ /obj/effect/turf_decal/box/white, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"aLe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "aLl" = ( /obj/structure/chair/sofa, /turf/simulated/floor/plasteel{ @@ -1342,6 +1490,19 @@ icon_state = "darkbluefull" }, /area/centcom/ss220/command) +"aQw" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/briefcase/inflatable, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "aQA" = ( /obj/structure/closet/secure_closet/personal, /turf/simulated/floor/plasteel{ @@ -1572,6 +1733,20 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin1) +"aWr" = ( +/obj/structure/table/tray{ + color = "#73d1cb" + }, +/obj/item/storage/surgical_tray{ + pixel_y = 8 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "aWC" = ( /obj/structure/table/wood, /obj/item/food/grown/geranium, @@ -1584,6 +1759,27 @@ icon_state = "whiteblue" }, /area/centcom/ss220/medbay) +"aWK" = ( +/turf/simulated/wall/mineral/plastitanium/nosmooth{ + icon_state = "plastitanium_wall-0"; + icon = 'icons/turf/walls/plastitanium_wall.dmi' + }, +/area/vox_base) +"aWM" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/storage/briefcase/inflatable{ + pixel_y = 4 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_y = -2 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_y = -8 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "aWR" = ( /obj/structure/rack, /obj/item/clothing/suit/wizrobe/marisa, @@ -1728,6 +1924,14 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin2) +"aZE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "baa" = ( /obj/structure/light_fake/small{ dir = 1 @@ -1750,6 +1954,20 @@ /obj/item/stack/sheet/mineral/plasma/fifty, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"bay" = ( +/obj/effect/decal/remains/mouse, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = -1; + pixel_x = -9 + }, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "baD" = ( /obj/structure/railing/cap/reversed{ dir = 4 @@ -1854,6 +2072,23 @@ icon_state = "dark" }, /area/syndicate_mothership/jail) +"bdL" = ( +/obj/machinery/light, +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/grenade/plastic/c4, +/obj/item/grenade/plastic/c4{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/grenade/plastic/c4{ + pixel_x = 8; + pixel_y = -4 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "bed" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 1; @@ -1889,6 +2124,12 @@ /obj/structure/chair/sofa/bench/left, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/bar) +"bfi" = ( +/obj/structure/lattice, +/turf/simulated/floor/plating/airless{ + icon_state = "asteroidplating" + }, +/area/space/nearstation/centcom) "bfH" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/effect/spawner/window, @@ -2194,6 +2435,12 @@ /obj/structure/flora/rock/jungle, /turf/simulated/floor/indestructible/grass/no_creep, /area/centcom/ss220/admin1) +"bml" = ( +/obj/structure/musician/piano{ + dir = 4 + }, +/turf/space, +/area/space/nearstation/centcom) "bmv" = ( /obj/structure/shuttle/engine/propulsion, /turf/simulated/floor/plating/airless, @@ -2251,6 +2498,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) +"boe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/walllocker/firelocker/north, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "bof" = ( /obj/structure/table/glass/reinforced/titanium{ color = "#dbc921"; @@ -2440,6 +2696,19 @@ /obj/structure/flora/ausbushes/lavendergrass, /turf/simulated/wall/indestructible/rock/mineral, /area/syndicate_mothership/outside) +"bsv" = ( +/obj/structure/sink/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurplecorners"; + dir = 1; + nitrogen = 103.984 + }, +/area/vox_base) "bsx" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/effect/turf_decal/siding/black{ @@ -2476,6 +2745,25 @@ /obj/machinery/economy/vending/cigarette/free, /turf/simulated/floor/mineral/plastitanium, /area/centcom/ss220/general) +"btm" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/spawner/lootdrop/trash, +/obj/item/food/disk{ + pixel_x = -8 + }, +/obj/item/trash/disk{ + pixel_x = 14; + pixel_y = 5 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "bts" = ( /obj/structure/platform/corner{ dir = 8; @@ -2498,6 +2786,16 @@ "buT" = ( /turf/simulated/floor/wood/oak, /area/centcom/ss220/park) +"bvo" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/pneumatic_cannon, +/obj/item/pneumatic_cannon{ + pixel_x = 10 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "bvE" = ( /obj/structure/statue/sandstone/assistant{ anchored = 1; @@ -2627,6 +2925,10 @@ /obj/effect/decal/nanotrasen_logo/n1, /turf/simulated/floor/carpet/black, /area/centcom/ss220/park) +"bzY" = ( +/obj/machinery/computer/security/camera_bug, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "bAr" = ( /obj/structure/railing{ dir = 4 @@ -3709,6 +4011,12 @@ /obj/structure/closet/wardrobe/xenos, /turf/simulated/floor/mineral/plastitanium/red, /area/ghost_bar) +"bYH" = ( +/obj/structure/bed/mattress/dirty, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "bYX" = ( /obj/effect/spawner/window, /obj/structure/flora/ausbushes/sparsegrass, @@ -3785,6 +4093,22 @@ }, /turf/simulated/floor/carpet/black, /area/ghost_bar) +"caQ" = ( +/obj/structure/table/reinforced/brass, +/obj/item/hand_valuer{ + pixel_x = -6 + }, +/obj/item/hand_valuer{ + pixel_x = 4 + }, +/obj/machinery/recharger, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "caZ" = ( /obj/machinery/sleeper, /turf/simulated/floor/plasteel{ @@ -3887,6 +4211,24 @@ icon_state = "darkbrown" }, /area/centcom/ss220/admin3) +"ceb" = ( +/obj/structure/table/wood/fancy/purple, +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lamp/bananalamp{ + pixel_y = 20; + pixel_x = -14 + }, +/obj/item/pizzabox{ + icon_state = "pizzabox_open" + }, +/obj/item/book/manual/nuclear{ + pixel_x = 5 + }, +/obj/item/food/disk{ + pixel_x = -8 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "cex" = ( /turf/simulated/floor/plasteel{ dir = 10; @@ -3907,6 +4249,20 @@ icon_state = "browncorner" }, /area/shuttle/escape) +"cfi" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/lighter/zippo/fluff/duckchan, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) +"cfF" = ( +/obj/effect/landmark/damageturf, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "cgi" = ( /obj/docking_port/stationary{ dwidth = 1; @@ -4133,6 +4489,26 @@ icon_state = "dark_small" }, /area/centcom/ss220/admin3) +"cle" = ( +/obj/machinery/door/airlock/survival_pod/glass{ + hackProof = 1; + aiControlDisabled = 1; + name = "vox door"; + req_access_txt = "152"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/fans/tiny, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) +"clB" = ( +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "clI" = ( /obj/structure/table/glass, /obj/item/storage/fancy/donut_box, @@ -4390,6 +4766,21 @@ /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/command) +"csa" = ( +/obj/structure/shuttle/engine/platform{ + dir = 1; + layer = 2.9 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) +"csj" = ( +/obj/structure/table/wood/fancy/purple, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "csH" = ( /obj/machinery/door/airlock/multi_tile/glass{ name = "Badmin's Bar" @@ -4480,6 +4871,35 @@ /obj/structure/flora/ausbushes/leafybush, /turf/simulated/floor/grass, /area/centcom/ss220/evac) +"cvb" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/harpoon{ + pixel_y = 5 + }, +/obj/item/harpoon{ + pixel_x = 4; + pixel_y = -2 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) +"cvY" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4; + icon_state = "heater3x3"; + tag = "icon-heater (NORTH)" + }, +/obj/structure/window/plasmareinforced{ + color = "red"; + dir = 8 + }, +/obj/structure/shuttle/engine/platform{ + dir = 4; + layer = 2.9 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "cwb" = ( /obj/machinery/recharger/wallcharger/upgraded{ pixel_x = 4; @@ -4549,6 +4969,18 @@ icon_state = "dark" }, /area/syndicate_mothership/elite_squad) +"czq" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/obj/machinery/atmospherics/portable/canister/nitrogen, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "czB" = ( /obj/structure/rack, /obj/item/storage/fancy/crayons, @@ -4556,6 +4988,11 @@ icon_state = "cafeteria" }, /area/ninja/holding) +"cAa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "cAh" = ( /obj/machinery/economy/vending/dinnerware, /obj/structure/curtain/black{ @@ -4589,6 +5026,22 @@ icon_state = "darkneutralfull" }, /area/syndicate_mothership/infteam) +"cBD" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/item/reagent_containers/syringe/dart/medical/tainted, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = -5; + pixel_x = 6 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "cBN" = ( /obj/docking_port/stationary/transit{ dwidth = 1; @@ -4599,6 +5052,31 @@ }, /turf/space/transit, /area/space/centcomm) +"cBU" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) +"cBW" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/sleeper/upgraded{ + dir = 2; + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "cCt" = ( /obj/structure/platform{ dir = 8; @@ -4641,6 +5119,20 @@ }, /turf/simulated/floor/carpet/red, /area/centcom/ss220/bar) +"cEo" = ( +/obj/machinery/door/window/reinforced/normal{ + dir = 4; + req_access_txt = "152"; + name = "vox glassdoor" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "cEr" = ( /obj/machinery/light/spot{ dir = 1 @@ -4653,6 +5145,13 @@ }, /turf/simulated/floor/carpet/black, /area/syndicate_mothership/jail) +"cEx" = ( +/obj/machinery/access_button{ + autolink_id = "voxwest_btn_int"; + req_one_access_txt = "152" + }, +/turf/simulated/wall/mineral/plastitanium, +/area/shuttle/vox) "cEC" = ( /obj/structure/flora/ausbushes/leafybush, /obj/structure/flora/ausbushes/ppflowers, @@ -4825,6 +5324,18 @@ }, /turf/simulated/floor/carpet/black, /area/wizard_station) +"cJQ" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/item/storage/box/legal_loot/amount_5, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "cKt" = ( /obj/structure/light_fake/spot{ dir = 1 @@ -4926,6 +5437,20 @@ /obj/item/kirbyplants, /turf/simulated/floor/wood/parquet, /area/centcom/ss220/admin2) +"cMb" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "cMg" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/item/paper_bin/nanotrasen{ @@ -5141,6 +5666,23 @@ icon_state = "rampbottom" }, /area/syndicate_mothership) +"cUx" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/item/storage/box/legal_loot/amount_5, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/spawner/lootdrop/trash, +/obj/item/trash/doshik{ + pixel_y = -14; + pixel_x = 7 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "cUy" = ( /turf/simulated/floor/plasteel/dark{ dir = 10; @@ -5154,6 +5696,10 @@ }, /turf/simulated/floor/wood, /area/ghost_bar) +"cUQ" = ( +/obj/structure/decorative_structures/metal/statue/metal_angel, +/turf/simulated/wall/indestructible/fakeglass/brass, +/area/vox_base) "cUU" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/lavendergrass, @@ -5248,6 +5794,22 @@ icon_state = "darkredcornersalt" }, /area/centcom/ss220/admin3) +"cYs" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4; + icon_state = "heater3x3_side"; + tag = "icon-heater (NORTH)" + }, +/obj/structure/window/plasmareinforced{ + color = "red"; + dir = 8 + }, +/obj/structure/shuttle/engine/platform{ + dir = 4; + layer = 2.9 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "cYE" = ( /obj/effect/turf_decal/siding/wood/neutral{ dir = 1 @@ -5458,6 +6020,28 @@ icon_state = "navybluealt" }, /area/syndicate_mothership/control) +"dca" = ( +/obj/structure/shuttle/engine/platform{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/plasmareinforced{ + color = "red" + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0; + layer = 2.5 + }, +/obj/structure/shuttle/engine/heater{ + dir = 1 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "dce" = ( /obj/structure/dresser, /obj/structure/light_fake{ @@ -5653,6 +6237,28 @@ icon_state = "dark" }, /area/syndicate_mothership) +"dgm" = ( +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/structure/table{ + color = "#73d1cb" + }, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/brute{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "dgI" = ( /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -5767,6 +6373,12 @@ /obj/machinery/light/spot, /turf/simulated/floor/wood/fancy/cherry, /area/shuttle/trade/sol) +"dkA" = ( +/obj/structure/mopbucket/full, +/obj/item/mop/advanced, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "dkB" = ( /obj/structure/table/reinforced{ color = "#996633" @@ -5933,6 +6545,10 @@ color = "#f63d3d" }, /area/syndicate_mothership/elite_squad) +"dpd" = ( +/obj/structure/window/full/shuttle/survival_pod, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "dpn" = ( /obj/effect/turf_decal/stripes/red, /obj/structure/light_fake, @@ -6009,6 +6625,25 @@ /obj/effect/turf_decal/delivery/white/hollow, /turf/simulated/floor/mineral/plastitanium, /area/syndicate_mothership/elite_squad) +"dqM" = ( +/obj/structure/closet/crate/freezer{ + color = "#73d1cb" + }, +/obj/item/reagent_containers/iv_bag/blood/vox, +/obj/item/reagent_containers/iv_bag/blood/vox, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet/walllocker/medlocker/west{ + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "dqP" = ( /obj/structure/fans/tiny/invisible, /obj/structure/light_fake{ @@ -6327,6 +6962,20 @@ icon_state = "darkyellowalt" }, /area/syndicate_mothership/cargo) +"dzm" = ( +/obj/structure/fluff/drake_statue{ + pixel_x = 0; + color = "yellow"; + name = "Статуя Великому Ящеру"; + desc = "Когда-то племена ящеров поклонялись огромному ящеру, вселяющий ужас во всех неугодных. Но некий Русс его сразил. О былом величии Великого Ящера теперь напоминают только такие статуи, которые уже успели растащить коллекционеры-чаелюбы, не оставив ничего аборигенам." + }, +/turf/simulated/floor/mineral/gold/fancy, +/area/vox_base) +"dzv" = ( +/obj/effect/landmark/damageturf, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/space/nearstation/centcom) "dzI" = ( /obj/structure/table/wood, /obj/item/food/sliceable/chocolatecake, @@ -6468,6 +7117,11 @@ /obj/item/flag/nt, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/general) +"dBL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "dCc" = ( /obj/item/gun/projectile/automatic/shotgun/bulldog{ pixel_x = -3; @@ -6482,6 +7136,19 @@ /obj/structure/rack/gunrack, /turf/simulated/floor/mineral/plastitanium, /area/syndicate_mothership/elite_squad) +"dCg" = ( +/obj/structure/chair/brass{ + color = "#f700ff"; + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "dCq" = ( /obj/effect/turf_decal/siding/black{ dir = 1 @@ -6596,6 +7263,13 @@ icon_state = "darkblue" }, /area/centcom/ss220/evac) +"dFd" = ( +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = -5 + }, +/turf/space, +/area/space/nearstation/centcom) "dFl" = ( /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/transport) @@ -6787,6 +7461,17 @@ icon_state = "darkyellowaltstrip" }, /area/syndicate_mothership/control) +"dKo" = ( +/obj/structure/closet/walllocker/firelocker/south, +/obj/effect/turf_decal/box/red, +/obj/item/reagent_containers/pill/random_drugs, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "dKp" = ( /obj/structure/statue/cyberiad/s, /obj/effect/turf_decal/woodsiding, @@ -6917,6 +7602,14 @@ icon_state = "barber" }, /area/shuttle/administration) +"dOb" = ( +/obj/machinery/economy/vending/suitdispenser/free, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "dOg" = ( /obj/structure/sign/vacuum/external, /turf/simulated/wall/indestructible/riveted, @@ -7036,6 +7729,18 @@ }, /turf/simulated/floor/mineral/plastitanium, /area/syndicate_mothership/elite_squad) +"dRX" = ( +/obj/structure/statue/silver/secborg{ + icon = 'icons/mob/robots.dmi'; + icon_state = "Service2"; + dir = 8; + pixel_x = -11; + pixel_y = 2; + name = "робот-пианист в глубоком космосе"; + desc = "Статуя робота во фраке сидящего за пианино в открытом космосе. Судя по всему он здесь уже давно. И у него отличный металлический блестящий зад." + }, +/turf/space, +/area/space/nearstation/centcom) "dRY" = ( /obj/structure/statue/cyberiad/e, /turf/simulated/floor/grass/jungle, @@ -7271,6 +7976,28 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"dZt" = ( +/obj/structure/shuttle/engine/heater{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0; + layer = 2 + }, +/obj/structure/window/plasmareinforced{ + color = "purple" + }, +/obj/structure/window/plasmareinforced{ + color = "purple"; + dir = 8 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "dZw" = ( /obj/machinery/door/airlock/command/glass{ name = "Escape Shuttle Cockpit"; @@ -7359,6 +8086,16 @@ }, /turf/simulated/floor/plating, /area/syndicate_mothership/infteam) +"ebI" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/tank/jetpack/improvised, +/obj/item/clothing/suit/space/vox/pressure, +/obj/item/clothing/head/helmet/space/vox/pressure, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "ebN" = ( /obj/machinery/computer/secure_data{ dir = 1 @@ -7374,6 +8111,26 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/bar) +"ecx" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/spawner/lootdrop/trash, +/obj/item/food/disk{ + pixel_x = -8 + }, +/obj/item/food/disk{ + pixel_x = 6 + }, +/obj/item/trash/disk, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "edj" = ( /obj/machinery/door/poddoor/preopen{ id_tag = "CC_Cargo_Turret"; @@ -7457,6 +8214,23 @@ "egO" = ( /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"ehI" = ( +/obj/machinery/airlock_controller/access_controller{ + ext_button_link_id = "voxwest_btn_ext"; + ext_door_link_id = "voxwest_door_ext"; + int_button_link_id = "voxwest_btn_int"; + int_door_link_id = "voxwest_door_int"; + pixel_x = 24; + req_access_txt = "152" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "ehR" = ( /turf/simulated/floor/transparent/glass/reinforced, /area/centcom/ss220/admin2) @@ -7743,6 +8517,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) +"eqm" = ( +/obj/machinery/atmospherics/unary/tank/nitrogen{ + dir = 4 + }, +/obj/effect/landmark/damageturf, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/box/red, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "eqp" = ( /obj/structure/flora/junglebush/large, /turf/simulated/floor/indestructible/grass/no_creep, @@ -7898,6 +8681,14 @@ icon_state = "dark" }, /area/syndicate_mothership/jail) +"etm" = ( +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "etr" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes/dromedaryco{ @@ -7936,6 +8727,14 @@ icon_state = "dark_herringbone" }, /area/centcom/ss220/command) +"eul" = ( +/obj/machinery/kitchen_machine/grill/upgraded, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + nitrogen = 103.984 + }, +/area/vox_base) "eup" = ( /obj/structure/table/wood, /obj/item/grenade/smokebomb{ @@ -8005,6 +8804,14 @@ /obj/structure/flora/ausbushes/lavendergrass, /turf/simulated/floor/indestructible/grass, /area/syndicate_mothership/outside) +"ewQ" = ( +/obj/machinery/economy/vending/clothing/free, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "exn" = ( /obj/structure/sink/directional/west, /obj/structure/mirror{ @@ -8136,6 +8943,10 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin1) +"eyO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "ezj" = ( /obj/machinery/computer/borgupload, /turf/simulated/floor/plasteel{ @@ -8380,12 +9191,36 @@ icon_state = "neutralcorner" }, /area/shuttle/escape) +"eGx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery/white/hollow/right, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "eGy" = ( /obj/structure/closet/secure_closet/personal, /turf/simulated/floor/plasteel{ icon_state = "black" }, /area/centcom/ss220/evac) +"eGz" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/obj/machinery/atmospherics/portable/canister/nitrogen, +/obj/effect/decal/remains/mouse, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "eGK" = ( /obj/machinery/door/airlock/centcom{ id_tag = "CC_Cargo_Interior_1"; @@ -8659,6 +9494,9 @@ }, /turf/simulated/floor/wood/fancy/oak, /area/centcom/ss220/admin1) +"eMr" = ( +/turf/space, +/area/shuttle/vox) "eMy" = ( /obj/machinery/door/airlock/public{ name = "Дормы" @@ -9145,6 +9983,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"eZY" = ( +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "faa" = ( /obj/structure/table/reinforced, /obj/item/stamp/syndicate{ @@ -9377,6 +10224,12 @@ icon_state = "dark_herringbone" }, /area/centcom/ss220/admin2) +"fer" = ( +/obj/structure/table/wood/fancy/purple, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/officetoys, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "ffa" = ( /turf/simulated/floor/plasteel{ icon_state = "black" @@ -9388,6 +10241,30 @@ icon_state = "darkredalt" }, /area/centcom/ss220/admin3) +"ffo" = ( +/obj/structure/curtain/open/shower{ + anchored = 1 + }, +/obj/effect/turf_decal/miscellaneous/plumbing{ + dir = 1 + }, +/obj/machinery/shower{ + pixel_y = 20 + }, +/obj/effect/turf_decal/siding/thinplating/end, +/obj/machinery/door_control/no_emag/west{ + id = "vox_shower"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4; + pixel_x = 28; + pixel_y = -5 + }, +/obj/item/soap/nanotrasen, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/spawner/vox_raider, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "ffq" = ( /obj/structure/light_fake/small{ dir = 4 @@ -9488,6 +10365,29 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin2) +"fhG" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/glasses/hud/security/sunglasses/fluff/voxxyhud{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/clothing/glasses/hud/security/sunglasses/fluff/voxxyhud{ + pixel_x = 6 + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "fie" = ( /obj/structure/flora/rock/jungle, /turf/simulated/floor/grass/jungle, @@ -9547,6 +10447,12 @@ "fjg" = ( /turf/space/transit/horizontal, /area/space/centcomm) +"fjm" = ( +/turf/simulated/wall/indestructible/fakeglass/brass{ + color = "#ff00fb"; + name = "витрина" + }, +/area/vox_base) "fjx" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/rock/jungle, @@ -9624,6 +10530,21 @@ color = "#f63d3d" }, /area/syndicate_mothership/elite_squad) +"flq" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/chair/brass{ + color = "#f700ff"; + dir = 4 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "fls" = ( /obj/structure/chair/sofa/bench/right, /turf/simulated/floor/plasteel{ @@ -9637,6 +10558,30 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate_elite) +"fmf" = ( +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "fmj" = ( /obj/structure/table/wood, /obj/effect/turf_decal/delivery/white/hollow, @@ -9720,6 +10665,24 @@ "fmJ" = ( /turf/simulated/floor/carpet, /area/centcom/ss220/park) +"fmN" = ( +/obj/structure/closet/crate/secure/bin{ + anchored = 1; + color = "#00eafa" + }, +/obj/effect/turf_decal/box/red, +/obj/effect/spawner/lootdrop/trash, +/obj/item/jammer{ + pixel_x = 4 + }, +/obj/item/food/doshik, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "fmQ" = ( /obj/structure/light_fake/small{ dir = 8 @@ -9821,6 +10784,18 @@ icon_state = "dark_large" }, /area/centcom/ss220/command) +"fpA" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "fpM" = ( /obj/effect/turf_decal/plaque, /obj/structure/marker_beacon/spotlight/yellow, @@ -10128,6 +11103,14 @@ /obj/item/book/random, /turf/simulated/floor/carpet/red, /area/centcom/ss220/park) +"fwx" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + dir = 1; + nitrogen = 103.984 + }, +/area/vox_base) "fwQ" = ( /obj/structure/closet/crate/internals, /obj/item/tank/internals/oxygen/red, @@ -10154,6 +11137,12 @@ /obj/effect/spawner/window/plastitanium, /turf/simulated/floor/plating, /area/syndicate_mothership/cargo) +"fxi" = ( +/obj/structure/sign/poster/official/fruit_bowl, +/turf/simulated/wall/indestructible/syndicate{ + smoothing_flags = 2 + }, +/area/vox_base) "fxn" = ( /obj/item/kirbyplants, /turf/simulated/floor/mineral/plastitanium, @@ -10203,6 +11192,12 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/admin2) +"fyy" = ( +/obj/effect/landmark/damageturf, +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/plastic, +/turf/simulated/floor/plating/nitrogen, +/area/space/nearstation/centcom) "fyC" = ( /obj/structure/flora/rock/jungle, /obj/structure/flora/junglebush, @@ -10317,6 +11312,12 @@ /obj/structure/chair/comfy/corp, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin3) +"fAz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "fAH" = ( /obj/structure/ore_box, /obj/effect/turf_decal/stripes/line{ @@ -10364,6 +11365,31 @@ icon_state = "cafeteria" }, /area/ninja/holding) +"fBP" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/spawner/lootdrop/trash, +/obj/item/food/doshik_spicy{ + pixel_x = -3 + }, +/obj/item/food/doshik{ + pixel_y = 1; + pixel_x = 3 + }, +/obj/item/food/doshik{ + pixel_y = -6; + pixel_x = 5 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "fBZ" = ( /obj/machinery/kitchen_machine/grill/upgraded, /turf/simulated/floor/plating{ @@ -10460,6 +11486,24 @@ }, /turf/simulated/floor/grass/jungle, /area/centcom/ss220/park) +"fEh" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/item/grenade/smokebomb, +/obj/item/grenade/smokebomb{ + pixel_x = -9 + }, +/obj/item/grenade/smokebomb{ + pixel_x = 9 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "fEC" = ( /obj/machinery/door/window/reinforced/normal{ req_access = list(106) @@ -10573,6 +11617,16 @@ /obj/machinery/newscaster/directional/west, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/admin2) +"fJa" = ( +/obj/item/kirbyplants, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "fJl" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 6 @@ -10679,6 +11733,10 @@ /obj/structure/light_fake/small, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/infteam) +"fMG" = ( +/obj/effect/landmark/spawner/vox_raider, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "fMH" = ( /turf/simulated/floor/beach/away/coastline{ dir = 5; @@ -10920,6 +11978,16 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate_sit) +"fSe" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/poster/random_contraband{ + pixel_x = -26; + pixel_y = -5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "fSO" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -10962,6 +12030,21 @@ /obj/structure/flora/biolumini/flower, /turf/simulated/floor/indestructible/grass/no_creep, /area/centcom/ss220/admin1) +"fUj" = ( +/obj/machinery/defibrillator_mount/loaded{ + pixel_y = 26 + }, +/obj/machinery/sleeper/upgraded{ + dir = 2; + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "fUq" = ( /obj/effect/decal/nanotrasen_logo/n1, /turf/simulated/floor/plasteel/dark, @@ -10984,6 +12067,12 @@ }, /turf/simulated/floor/mineral/plastitanium, /area/shuttle/syndicate) +"fVa" = ( +/turf/simulated/wall/mineral/plastitanium, +/area/shuttle/vox) +"fVc" = ( +/turf/simulated/wall/mineral/gold, +/area/vox_base) "fVd" = ( /obj/effect/turf_decal/siding/black{ dir = 4 @@ -11002,9 +12091,17 @@ }, /area/syndicate_mothership) "fVA" = ( -/obj/effect/mob_spawn/human/corpse/clown/corpse, +/obj/effect/mob_spawn/human/corpse/clown/corpse{ + description = "Он почти добрался до монетки" + }, /turf/simulated/floor/plating/asteroid/ancient/airless, /area/space/nearstation/centcom) +"fVS" = ( +/obj/machinery/economy/vending/tool/free{ + color = "#e67e7e" + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "fVW" = ( /turf/simulated/floor/beach/away/coastline{ water_overlay_image = null @@ -11043,6 +12140,15 @@ /obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/wall/mineral/titanium, /area/shuttle/transport) +"fYh" = ( +/obj/structure/chair/brass, +/obj/item/toy/plushie/voxplushie{ + desc = "Мини-прималис. Главное в воксе - держать клюв Кирпичом. Игрушка сшитая основателем камневидного базирования в перерыве между рейдами."; + name = "Кирпич"; + color = "#ff78f4" + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "fYj" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/ausbushes/ppflowers, @@ -11167,6 +12273,9 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin2) +"gch" = ( +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "gcj" = ( /obj/effect/light_emitter/colored{ light_color = "#FFFFF"; @@ -11237,6 +12346,14 @@ name = "sand" }, /area/syndicate_mothership/outside) +"geI" = ( +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "gfa" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 @@ -11312,6 +12429,15 @@ /obj/machinery/economy/vending/snack/free, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/park) +"ggv" = ( +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "ggQ" = ( /obj/item/kirbyplants, /obj/structure/extinguisher_cabinet/directional/north, @@ -11546,6 +12672,9 @@ /obj/effect/landmark/spawner/roundstart_observer, /turf/simulated/floor/wood/fancy/cherry, /area/wizard_station) +"gqf" = ( +/turf/simulated/wall/indestructible/opsglass/limited_smooth, +/area/vox_base) "gqH" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -11597,6 +12726,18 @@ icon_state = "darkredalt" }, /area/centcom/ss220/supply) +"gsV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/arrows/black{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "gsX" = ( /obj/structure/chair/comfy/corp, /obj/effect/turf_decal/tile/neutral/full{ @@ -11604,6 +12745,24 @@ }, /turf/simulated/floor/carpet/royalblack, /area/centcom/ss220/admin2) +"gtr" = ( +/obj/item/reagent_containers/glass/bucket/wooden{ + pixel_x = 9; + pixel_y = -2; + name = "сральное ведро"; + desc = "Омерзительно. Им кто-то недавно пользовался?!" + }, +/obj/item/paper/crumpled{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/item/poster/random_contraband{ + pixel_x = -26; + pixel_y = -5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium, +/area/shuttle/vox) "gty" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -11905,6 +13064,16 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/admin2) +"gBF" = ( +/obj/machinery/light, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "gBL" = ( /turf/simulated/floor/plasteel/dark{ dir = 9; @@ -12150,6 +13319,13 @@ }, /turf/simulated/floor/carpet/black, /area/syndicate_mothership/infteam) +"gJa" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurplefull"; + nitrogen = 103.984 + }, +/area/vox_base) "gJs" = ( /obj/structure/reagent_dispensers/beerkeg{ desc = "Собственность Шерлока Субботина" @@ -12168,6 +13344,11 @@ icon_state = "grimy" }, /area/trader_station/sol) +"gJK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/spawner/vox_raider, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "gJM" = ( /obj/effect/turf_decal/arrows/white{ color = "#6697cc"; @@ -12257,6 +13438,17 @@ /obj/effect/spawner/window, /turf/simulated/floor/indestructible/grass/no_creep, /area/centcom/ss220/admin1) +"gLD" = ( +/obj/machinery/sleeper/upgraded{ + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "gLU" = ( /obj/effect/baseturf_helper{ baseturf = /turf/simulated/floor/indestructible @@ -12341,6 +13533,14 @@ icon_state = "navybluealt" }, /area/syndicate_mothership/control) +"gNf" = ( +/obj/machinery/economy/vending/cigarette/free, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "gNr" = ( /obj/machinery/recharger/wallcharger/upgraded{ pixel_x = 32 @@ -12535,6 +13735,28 @@ icon_state = "rampbottom" }, /area/syndicate_mothership) +"gTQ" = ( +/obj/structure/window/plasmareinforced{ + color = "red"; + dir = 1 + }, +/obj/structure/shuttle/engine/platform{ + layer = 2.9 + }, +/obj/structure/shuttle/engine/heater{ + icon_state = "heater3x3" + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 2; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0; + layer = 2.5 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "gTR" = ( /obj/machinery/photocopier, /obj/structure/light_fake{ @@ -12786,6 +14008,20 @@ }, /turf/simulated/floor/plasteel, /area/centcom/ss220/supply) +"gZh" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/survival_pod/glass, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium, +/area/shuttle/vox) "gZt" = ( /obj/structure/chair/stool{ dir = 1 @@ -13144,6 +14380,27 @@ icon_state = "darkyellow" }, /area/centcom/ss220/admin3) +"hiv" = ( +/obj/structure/table/reinforced{ + color = "#cc52c0" + }, +/obj/effect/spawner/lootdrop/officetoys{ + pixel_x = -5; + pixel_y = 6 + }, +/obj/item/paper_bin{ + pixel_x = 10 + }, +/obj/item/flashlight/pen{ + pixel_x = 9 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "hiI" = ( /obj/structure/sign/poster/official/random/west, /turf/simulated/floor/plasteel/dark{ @@ -13276,6 +14533,18 @@ }, /turf/simulated/floor/carpet/red, /area/centcom/ss220/admin2) +"hnb" = ( +/obj/effect/spawner/window/plastitanium, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 2; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating/nitrogen, +/area/shuttle/vox) "hnu" = ( /obj/machinery/cryopod/offstation{ icon_state = "sleeper_s"; @@ -13540,6 +14809,18 @@ icon_state = "dark" }, /area/syndicate_mothership) +"hsg" = ( +/obj/structure/table{ + color = "#73d1cb" + }, +/obj/effect/spawner/lootdrop/officetoys, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "hsh" = ( /turf/simulated/wall/indestructible/fakeglass, /area/ninja/holding) @@ -13674,6 +14955,28 @@ icon_state = "darkneutralfull" }, /area/syndicate_mothership) +"hxK" = ( +/obj/structure/window/plasmareinforced{ + color = "red"; + dir = 1 + }, +/obj/structure/shuttle/engine/platform{ + layer = 2.9 + }, +/obj/structure/shuttle/engine/heater{ + icon_state = "heater3x3_side_inv" + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 2; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0; + layer = 2.5 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "hxM" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/effect/spawner/window, @@ -13756,6 +15059,25 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin2) +"hyM" = ( +/obj/structure/table/wood/fancy/purple, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin, +/obj/item/flashlight/pen, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) +"hzk" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 8; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/effect/spawner/window/plastitanium, +/turf/simulated/floor/plating/nitrogen, +/area/shuttle/vox) "hzD" = ( /obj/structure/light_fake{ dir = 8 @@ -13788,9 +15110,30 @@ icon_state = "whiteblue" }, /area/centcom/ss220/medbay) +"hAS" = ( +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "hBd" = ( /turf/simulated/floor/beach/away/sand, /area/ninja/holding) +"hBr" = ( +/obj/item/restraints/handcuffs/cable/pink{ + pixel_x = -7; + pixel_y = 2 + }, +/obj/item/restraints/handcuffs/cable/pink, +/obj/item/restraints/handcuffs/cable/pink{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium, +/area/shuttle/vox) "hBJ" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel/dark{ @@ -14335,6 +15678,13 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/court) +"hNm" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "hNH" = ( /obj/machinery/porta_turret/syndicate/interior, /obj/structure/window/plasmareinforced{ @@ -14848,6 +16198,10 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"ici" = ( +/obj/structure/decorative_structures/metal/statue/moon, +/turf/simulated/wall/indestructible/fakeglass/brass, +/area/vox_base) "icv" = ( /turf/simulated/floor/plasteel/stairs/right{ color = "gray"; @@ -14884,6 +16238,46 @@ icon_state = "grimy" }, /area/centcom/ss220/park) +"ieq" = ( +/obj/item/storage/bag/cash, +/obj/item/coin/gold{ + pixel_x = -10; + pixel_y = -6 + }, +/obj/item/coin/gold{ + pixel_x = -6; + pixel_y = -9 + }, +/obj/item/coin/gold{ + pixel_x = 8; + pixel_y = -5 + }, +/obj/item/coin/gold{ + pixel_y = -7 + }, +/obj/item/coin/gold{ + pixel_x = 6; + pixel_y = -10 + }, +/obj/item/coin/gold{ + pixel_x = 12; + pixel_y = -9 + }, +/obj/item/instrument/violin/golden{ + pixel_y = -31; + desc = "Золотая виолончель великого рок-виолончель музыканта. Говорят её до сих пор ищут целыми системами!"; + name = "золотая рок-виолончель" + }, +/obj/item/card/id/representative_ussp{ + pixel_x = -32; + pixel_y = -24 + }, +/obj/item/card/id/representative_tsf{ + pixel_x = -32; + pixel_y = -38 + }, +/turf/simulated/floor/mineral/gold/fancy, +/area/vox_base) "ieu" = ( /turf/simulated/floor/carpet, /area/centcom/ss220/general) @@ -14970,6 +16364,9 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/supply) +"ifS" = ( +/turf/simulated/floor/indestructible/transparent_floor, +/area/shuttle/vox) "igF" = ( /obj/machinery/door/airlock/external{ id_tag = "s_docking_airlock"; @@ -14984,6 +16381,18 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin3) +"igT" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/portable/canister/nitrogen, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "ihB" = ( /obj/structure/chair/sofa/corp/corner{ dir = 8 @@ -14995,6 +16404,24 @@ icon_state = "darkyellowcornersalt" }, /area/syndicate_mothership/cargo) +"iid" = ( +/obj/structure/table{ + color = "#73d1cb" + }, +/obj/item/storage/firstaid/brute{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/toxin, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "iiq" = ( /obj/effect/turf_decal/woodsiding{ dir = 4 @@ -15773,6 +17200,26 @@ }, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) +"iws" = ( +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/pill/random_drugs, +/obj/item/stack/vox_cash/c500{ + pixel_x = 9 + }, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = -1; + pixel_x = -9 + }, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = -5 + }, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = -9; + pixel_x = 9 + }, +/turf/simulated/floor/plating/nitrogen, +/area/space/nearstation/centcom) "iwE" = ( /obj/machinery/computer/nonfunctional, /turf/simulated/floor/plasteel{ @@ -16016,6 +17463,24 @@ icon_state = "darkbluecornersalt" }, /area/centcom/ss220/admin1) +"iID" = ( +/obj/machinery/optable{ + color = "#73d1cb" + }, +/obj/machinery/defibrillator_mount/loaded{ + pixel_y = 26 + }, +/obj/item/organ/internal/brain, +/obj/structure/light_fake/small{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "iIH" = ( /turf/simulated/floor/carpet/blue, /area/centcom/ss220/admin2) @@ -16026,6 +17491,33 @@ }, /turf/simulated/wall/indestructible/fakeglass, /area/centcom/ss220/admin2) +"iIS" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/glasses/welding{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/clothing/glasses/welding{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/item/clothing/glasses/welding{ + pixel_x = 4; + pixel_y = -3 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "iJa" = ( /obj/structure/table/reinforced, /obj/item/borg/upgrade/selfrepair, @@ -16166,6 +17658,16 @@ }, /turf/simulated/floor/carpet/black, /area/ghost_bar) +"iLB" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/machinery/atmospherics/portable/canister/nitrogen, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "iLT" = ( /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ @@ -16354,6 +17856,18 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin1) +"iRh" = ( +/obj/effect/spawner/window/plastitanium, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating/nitrogen, +/area/shuttle/vox) "iRB" = ( /obj/effect/turf_decal/delivery/blue/hollow, /turf/simulated/floor/plasteel{ @@ -16632,6 +18146,19 @@ icon_state = "darkyellowalt" }, /area/syndicate_mothership/cargo) +"jcq" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) +"jdg" = ( +/obj/structure/closet/abductor, +/obj/structure/light_fake/spot{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "jdv" = ( /obj/item/flag/nt{ layer = 4 @@ -17015,6 +18542,17 @@ /obj/structure/table/wood, /turf/simulated/floor/plating/asteroid/ancient, /area/ghost_bar) +"jov" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery/white/hollow/left, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "joz" = ( /obj/structure/bookcase/manuals, /obj/item/book/manual/random, @@ -17080,6 +18618,18 @@ }, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin2) +"jpv" = ( +/obj/machinery/bodyscanner{ + dir = 4; + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "jpN" = ( /obj/structure/flora/ausbushes/lavendergrass, /turf/simulated/floor/grass, @@ -17285,6 +18835,22 @@ "jvG" = ( /turf/simulated/floor/transparent/glass/reinforced, /area/centcom/ss220/admin1) +"jvH" = ( +/obj/structure/shuttle/engine/heater{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0; + layer = 2 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "jvO" = ( /obj/structure/closet/secure_closet/engineering_welding, /obj/item/extinguisher/mini, @@ -17429,11 +18995,29 @@ dir = 1 }, /area/syndicate_mothership/jail) +"jBs" = ( +/obj/structure/closet/coffin, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "jBE" = ( /obj/structure/light_fake, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/general) +"jBF" = ( +/obj/machinery/door/airlock/survival_pod/glass{ + hackProof = 1; + aiControlDisabled = 1; + name = "vox door"; + req_access_txt = "152"; + dir = 4 + }, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "jBO" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -17450,6 +19034,16 @@ icon_state = "darkneutralfull" }, /area/syndicate_mothership/infteam) +"jCK" = ( +/obj/machinery/door/window/reinforced/reversed{ + dir = 1; + req_access_txt = "152"; + name = "vox glassdoor"; + color = "red" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "jCR" = ( /obj/structure/chair/stool{ dir = 1 @@ -17486,6 +19080,15 @@ icon_state = "darkbrown" }, /area/syndicate_mothership/jail) +"jDZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "jEd" = ( /obj/structure/platform{ dir = 8; @@ -17739,6 +19342,18 @@ }, /turf/simulated/floor/mineral/plastitanium, /area/syndicate_mothership/elite_squad) +"jJB" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "jJQ" = ( /obj/machinery/economy/vending/toyliberationstation, /turf/simulated/floor/carpet/black, @@ -17927,6 +19542,15 @@ /obj/item/candle/eternal/wizard, /turf/simulated/floor/carpet/red, /area/wizard_station) +"jNl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + dir = 1; + nitrogen = 103.984 + }, +/area/vox_base) "jNn" = ( /obj/structure/chair/office/dark, /obj/effect/landmark/spawner/aroomwarp, @@ -17986,6 +19610,11 @@ }, /turf/simulated/floor/carpet/red, /area/centcom/ss220/bar) +"jOL" = ( +/obj/item/trash/snack_bowl, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "jPg" = ( /obj/effect/turf_decal/box/white/corners{ dir = 1 @@ -18026,6 +19655,16 @@ }, /turf/simulated/floor/carpet, /area/centcom/ss220/court) +"jRj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "jRv" = ( /obj/machinery/economy/vending/chinese/free, /turf/simulated/floor/plasteel{ @@ -18050,6 +19689,52 @@ /obj/item/book/manual/wiki/security_space_law/black, /turf/simulated/floor/carpet/black, /area/centcom/ss220/court) +"jTd" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + req_access = null + }, +/obj/item/food/grown/banana, +/obj/item/food/grown/banana, +/obj/item/food/grown/wheat, +/obj/item/food/grown/wheat, +/obj/item/food/grown/vanillapod, +/obj/item/food/grown/vanillapod, +/obj/item/food/grown/sugarcane, +/obj/item/food/grown/sugarcane, +/obj/item/food/grown/oat, +/obj/item/food/grown/oat, +/obj/item/food/grown/grapes, +/obj/item/food/grown/grapes, +/obj/item/food/grown/corn, +/obj/item/food/grown/corn, +/obj/item/food/grown/chili, +/obj/item/food/grown/chili, +/obj/item/food/grown/carrot, +/obj/item/food/grown/apple, +/obj/item/food/grown/ambrosia/vulgaris, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/pill/random_drugs, +/obj/item/reagent_containers/pill/random_drugs, +/obj/item/reagent_containers/pill/random_drugs, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurplecorners"; + dir = 8; + nitrogen = 103.984 + }, +/area/vox_base) +"jTn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) +"jTY" = ( +/obj/structure/chair/brass, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "jUj" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/wood, @@ -18226,6 +19911,10 @@ icon_state = "darkyellowfull" }, /area/syndicate_mothership/cargo) +"jZi" = ( +/obj/structure/lattice, +/turf/simulated/floor/plating/asteroid/ancient/airless, +/area/space/nearstation/centcom) "jZq" = ( /obj/structure/table/wood, /obj/machinery/door/window/classic/reversed{ @@ -18471,6 +20160,29 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/admin2) +"kfT" = ( +/obj/machinery/cell_charger, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/item/pickaxe, +/obj/structure/closet/walllocker/firelocker/east, +/obj/structure/table/reinforced{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/mineral/sandbags, +/obj/item/stack/sheet/mineral/sandbags, +/obj/item/stack/sheet/mineral/sandbags, +/obj/item/stack/sheet/mineral/sandbags, +/obj/item/stack/sheet/mineral/sandbags, +/obj/item/stack/sheet/mineral/sandbags, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "khe" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -18500,6 +20212,22 @@ }, /turf/simulated/floor/wood, /area/ghost_bar) +"khX" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/item/reagent_containers/syringe/dart/medical/tainted, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = -5; + pixel_x = 6 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "kin" = ( /obj/structure/rack, /obj/item/camera, @@ -18534,6 +20262,10 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate_elite) +"kjd" = ( +/obj/structure/decorative_structures/metal/statue/golden_disk, +/turf/simulated/wall/indestructible/fakeglass/brass, +/area/vox_base) "kjH" = ( /obj/structure/table/wood/fancy/black, /obj/structure/chair/stool/bar{ @@ -18562,6 +20294,16 @@ icon_state = "darkbluealtstrip" }, /area/syndicate_mothership/elite_squad) +"kkr" = ( +/obj/machinery/door/window/reinforced/normal{ + dir = 1; + req_access_txt = "152"; + name = "vox glassdoor"; + color = "red" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "kkM" = ( /obj/effect/turf_decal/siding/wood/neutral{ dir = 8 @@ -18770,6 +20512,11 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"koY" = ( +/obj/structure/bed/mattress/dirty, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "kpq" = ( /obj/structure/dresser, /turf/simulated/floor/carpet/green, @@ -18796,6 +20543,15 @@ icon_state = "showroomfloor" }, /area/wizard_station) +"kpY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "kqe" = ( /obj/structure/statue/delta/nw, /turf/simulated/floor/grass/jungle, @@ -18924,6 +20680,12 @@ icon_state = "darkblue" }, /area/centcom/ss220/bar) +"kuG" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/ashtray/glass, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "kuJ" = ( /obj/effect/turf_decal/siding/wood/neutral{ dir = 8 @@ -18967,6 +20729,9 @@ icon_state = "dark" }, /area/syndicate_mothership/control) +"kvB" = ( +/turf/space, +/area/space/nearstation/centcom) "kvF" = ( /turf/simulated/floor/plasteel/dark{ dir = 8; @@ -19575,6 +21340,21 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/bar) +"kJj" = ( +/obj/machinery/light, +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/item/grenade/smokebomb{ + pixel_x = 5 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "kJF" = ( /obj/machinery/optable, /obj/machinery/light/directional/west, @@ -19643,6 +21423,14 @@ /obj/structure/flora/biolumini/lamp, /turf/simulated/floor/indestructible/grass/no_creep, /area/centcom/ss220/admin1) +"kLm" = ( +/obj/machinery/economy/vending/shoedispenser/free, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "kLu" = ( /obj/structure/table/glass, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -19776,6 +21564,18 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/wizard_station) +"kOk" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 8; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/effect/spawner/window/shuttle/survival_pod, +/turf/simulated/floor/plating/nitrogen, +/area/shuttle/vox) "kOy" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 @@ -19815,6 +21615,15 @@ }, /turf/simulated/floor/carpet/black, /area/syndicate_mothership/control) +"kPP" = ( +/obj/structure/window/full/shuttle/survival_pod, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "kPR" = ( /obj/structure/bed{ dir = 4 @@ -19902,6 +21711,10 @@ icon_state = "darkbluecorners" }, /area/centcom/ss220/bar) +"kSf" = ( +/obj/structure/decorative_structures/metal/statue/sun, +/turf/simulated/wall/indestructible/fakeglass/brass, +/area/vox_base) "kSs" = ( /obj/structure/rack/holorack, /obj/item/clothing/shoes/cowboy/white{ @@ -19966,6 +21779,15 @@ /obj/structure/light_fake, /turf/simulated/floor/wood/fancy/cherry, /area/trader_station/sol) +"kTa" = ( +/obj/machinery/vox_shop, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "kTj" = ( /obj/structure/railing, /turf/simulated/floor/plasteel/stairs/left{ @@ -20084,6 +21906,10 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"kVc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/space/nearstation/centcom) "kVz" = ( /obj/machinery/economy/vending/cigarette/free, /turf/simulated/floor/plasteel/dark, @@ -20370,6 +22196,15 @@ icon_state = "whiteblue" }, /area/centcom/ss220/medbay) +"lea" = ( +/obj/structure/light_fake/spot{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/tank/nitrogen{ + dir = 4 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "lek" = ( /obj/machinery/icemachine{ dir = 4 @@ -20423,6 +22258,21 @@ }, /turf/simulated/wall/indestructible/opsglass, /area/syndicate_mothership/control) +"lfF" = ( +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/rack{ + color = "#e67e7e" + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "lfO" = ( /obj/structure/table/wood, /obj/item/card/id/prisoner/random, @@ -20498,6 +22348,18 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/bar) +"lhZ" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "lid" = ( /obj/structure/bed/dogbed/pet, /turf/simulated/floor/carpet/purple, @@ -20689,6 +22551,16 @@ icon_state = "dark" }, /area/syndicate_mothership) +"lof" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "lol" = ( /turf/simulated/floor/plasteel/dark{ icon_state = "darkredalt" @@ -20751,6 +22623,16 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/supply) +"lqb" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "lqf" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -20962,6 +22844,14 @@ icon_state = "freezerfloor" }, /area/syndicate_mothership/elite_squad) +"ltP" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "ltU" = ( /obj/item/storage/box/drinkingglasses, /obj/structure/sign/poster/contraband/random{ @@ -21292,6 +23182,15 @@ "lAC" = ( /turf/simulated/floor/indestructible/grass/no_creep, /area/syndicate_mothership/outside) +"lAL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "lAY" = ( /obj/structure/chair/comfy/shuttle{ dir = 1 @@ -21517,6 +23416,11 @@ /obj/structure/sign/greencross, /turf/simulated/wall/mineral/titanium, /area/shuttle/escape) +"lJQ" = ( +/obj/effect/landmark/damageturf, +/obj/item/flag/species/vox, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "lJY" = ( /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) @@ -21667,12 +23571,30 @@ }, /turf/simulated/floor/indestructible/grass, /area/syndicate_mothership/outside) +"lMC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "lMG" = ( /turf/simulated/floor/plasteel/dark{ dir = 4; icon_state = "vault" }, /area/centcom/ss220/bar) +"lMK" = ( +/obj/structure/table/wood/fancy/purple, +/obj/item/ashtray/glass, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "lMN" = ( /obj/effect/decal/syndie_logo{ icon_state = "logo19" @@ -21851,6 +23773,16 @@ }, /turf/simulated/floor/beach/away/water/deep, /area/centcom/ss220/admin1) +"lRa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/light_fake/small{ + dir = 4 + }, +/obj/machinery/computer/shuttle/vox{ + dir = 8 + }, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "lRh" = ( /obj/structure/rack, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot, @@ -21976,6 +23908,13 @@ /obj/structure/chair/comfy/shuttle, /turf/simulated/floor/mineral/plastitanium, /area/shuttle/assault_pod/nanotrasen) +"lTC" = ( +/obj/machinery/cryopod/offstation{ + dir = 4; + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "lTL" = ( /turf/simulated/floor/plasteel{ dir = 6; @@ -22068,6 +24007,20 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/syndicate_mothership/control) +"lWQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/obj/structure/closet/crate/secure/bin{ + anchored = 1; + color = "#996633" + }, +/obj/item/storage/belt/chameleon, +/obj/item/clothing/glasses/meson{ + pixel_x = 5 + }, +/obj/item/food/doshik_spicy, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "lWU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/curtain/black{ @@ -22121,6 +24074,9 @@ icon_state = "darkyellowalt" }, /area/syndicate_mothership/cargo) +"lXs" = ( +/turf/simulated/wall/indestructible/opsglass, +/area/vox_base) "lXw" = ( /obj/structure/statue/elwycco{ layer = 4; @@ -22225,6 +24181,14 @@ icon_state = "dark" }, /area/syndicate_mothership) +"mci" = ( +/obj/machinery/door/airlock/silver{ + name = "Уборная"; + id_tag = "vox_shower"; + color = "#804482" + }, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "mcm" = ( /obj/structure/closet/crate/secure/bin{ color = "#36373a"; @@ -22329,6 +24293,31 @@ /obj/effect/turf_decal/stripes/red/box, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"mfF" = ( +/obj/structure/table/glass{ + color = "#73d1cb" + }, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/bodybag, +/obj/item/reagent_containers/syringe/dart/medical{ + pixel_x = -5; + pixel_y = 10 + }, +/obj/item/reagent_containers/syringe/dart/medical{ + pixel_x = 2; + pixel_y = 7 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "mgd" = ( /obj/structure/sign/vacuum, /turf/simulated/wall/indestructible/riveted, @@ -22354,6 +24343,18 @@ /obj/effect/landmark/spawner/aroomwarp, /turf/simulated/floor/indestructible/grass/no_creep, /area/centcom/ss220/admin1) +"mgM" = ( +/obj/item/kirbyplants, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "mgU" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "101"; @@ -22510,6 +24511,17 @@ icon_state = "dark" }, /area/syndicate_mothership) +"mkZ" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/spawner/lootdrop/crate_spawner, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "mlh" = ( /obj/structure/window/reinforced{ dir = 8 @@ -22780,6 +24792,24 @@ /obj/effect/spawner/lootdrop/trash, /turf/simulated/floor/plating, /area/centcom/ss220/supply) +"mqD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/survival_pod/glass, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 2; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "mqM" = ( /obj/effect/decal/syndie_logo, /turf/simulated/floor/mineral/plastitanium, @@ -22813,6 +24843,22 @@ icon_state = "darkred" }, /area/syndicate_mothership/elite_squad) +"mrT" = ( +/obj/structure/shuttle/engine/heater{ + dir = 4; + icon_state = "heater3x3_side_inv"; + tag = "icon-heater (NORTH)" + }, +/obj/structure/window/plasmareinforced{ + color = "red"; + dir = 8 + }, +/obj/structure/shuttle/engine/platform{ + dir = 4; + layer = 2.9 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "mrZ" = ( /obj/structure/weightmachine/weightlifter, /turf/simulated/floor/plasteel/dark{ @@ -22833,6 +24879,15 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin1) +"msA" = ( +/obj/machinery/computer/shuttle/vox, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "msE" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/machinery/computer/med_data/laptop, @@ -22886,6 +24941,20 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/general) +"mvZ" = ( +/obj/item/reagent_containers/glass/bucket/wooden{ + pixel_x = 9; + pixel_y = -2; + name = "сральное ведро"; + desc = "Омерзительно. Им кто-то недавно пользовался?!" + }, +/obj/item/paper/crumpled{ + pixel_x = -9; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "mwa" = ( /obj/structure/table/glass, /obj/structure/window/reinforced, @@ -23093,6 +25162,19 @@ }, /turf/simulated/floor/mineral/plastitanium, /area/centcom/ss220/general) +"mCM" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/harpoon{ + pixel_y = 5 + }, +/obj/item/harpoon{ + pixel_x = 4; + pixel_y = -2 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "mDm" = ( /obj/structure/chair/sofa/corp, /turf/simulated/floor/plasteel/dark{ @@ -23133,6 +25215,19 @@ icon_state = "dark_large" }, /area/centcom/ss220/command) +"mER" = ( +/obj/structure/table/reinforced/brass, +/obj/item/storage/box/alienhandcuffs, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) +"mFq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) +"mFE" = ( +/obj/machinery/atmospherics/unary/tank/nitrogen, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "mFZ" = ( /turf/simulated/floor/mineral/titanium, /area/shuttle/syndicate) @@ -23395,6 +25490,15 @@ icon_state = "grimy" }, /area/syndicate_mothership) +"mNT" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/vox, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "mNX" = ( /obj/structure/table/reinforced, /obj/item/stack/cable_coil, @@ -23512,6 +25616,47 @@ icon_state = "rampbottom" }, /area/syndicate_mothership/outside) +"mRZ" = ( +/obj/docking_port/mobile{ + dwidth = 13; + height = 18; + id = "vox_shuttle"; + name = "scavenger shuttle"; + width = 19; + dir = 2; + pixel_y = -5 + }, +/obj/docking_port/stationary{ + dwidth = 13; + height = 18; + id = "vox_shuttle_away"; + name = "Scavenger Base"; + width = 19; + dir = 2; + pixel_y = 11 + }, +/obj/machinery/door/airlock/hatch{ + id_tag = "voxwest_door_ext"; + req_access_txt = "152"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "mSA" = ( /turf/simulated/wall/indestructible/fakeglass, /area/ninja/outpost) @@ -23606,6 +25751,16 @@ /obj/machinery/atmospherics/portable/canister/oxygen, /turf/simulated/floor/mineral/plastitanium, /area/shuttle/syndicate) +"mVH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "mVM" = ( /obj/structure/light_fake/spot{ dir = 8 @@ -23751,6 +25906,13 @@ icon_state = "dark" }, /area/shuttle/syndicate) +"mZL" = ( +/obj/machinery/light, +/obj/machinery/economy/vending/tool/free{ + color = "#e67e7e" + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "mZW" = ( /obj/structure/light_fake/small, /obj/structure/table, @@ -23825,6 +25987,18 @@ /obj/machinery/status_display/supply_display, /turf/simulated/wall/indestructible/riveted, /area/centcom/ss220/supply) +"nbC" = ( +/obj/structure/table/reinforced/brass, +/obj/machinery/chem_dispenser/soda/upgraded, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurplecorners"; + dir = 4; + nitrogen = 103.984 + }, +/area/vox_base) "nbL" = ( /turf/simulated/floor/mech_bay_recharge_floor, /area/shuttle/escape) @@ -23836,6 +26010,13 @@ /obj/structure/fans/tiny, /turf/simulated/floor/wood/fancy/cherry, /area/trader_station/sol) +"nbO" = ( +/obj/machinery/access_button{ + autolink_id = "voxeast_btn_ext"; + req_access_txt = "152" + }, +/turf/simulated/wall/mineral/plastitanium, +/area/shuttle/vox) "ncb" = ( /obj/machinery/photocopier, /turf/simulated/floor/plasteel/dark, @@ -23852,6 +26033,9 @@ icon_state = "darkblue" }, /area/centcom/ss220/bar) +"ncE" = ( +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "ncH" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "burst_r" @@ -23910,6 +26094,15 @@ /obj/effect/turf_decal/delivery/red, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) +"ndQ" = ( +/obj/structure/table/wood/fancy/purple, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "neF" = ( /obj/item/gun/rocketlauncher, /obj/item/gun/rocketlauncher, @@ -24060,6 +26253,12 @@ icon_state = "whiteblue" }, /area/centcom/ss220/medbay) +"niw" = ( +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/remains/mouse, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "niG" = ( /obj/structure/table, /obj/item/ashtray/glass, @@ -24103,6 +26302,20 @@ icon_state = "darkneutralfull" }, /area/syndicate_mothership) +"nkr" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/syringe/dart/medical/tainted, +/obj/item/reagent_containers/syringe/dart/medical/tainted, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "nks" = ( /turf/simulated/floor/plasteel/dark{ icon_state = "darkredcornersalt"; @@ -24394,6 +26607,23 @@ /obj/structure/table/wood/fancy/black, /turf/simulated/floor/carpet/black, /area/syndicate_mothership/control) +"npU" = ( +/obj/item/stack/cable_coil, +/obj/structure/table{ + color = "#73d1cb" + }, +/obj/item/storage/firstaid/fire{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/regular, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "nqg" = ( /turf/simulated/floor/plasteel/dark{ dir = 8; @@ -24448,6 +26678,16 @@ icon_state = "darkbluealt" }, /area/centcom/ss220/bar) +"nsk" = ( +/obj/structure/lattice, +/obj/item/card/emag{ + pixel_y = -54; + pixel_x = 31; + name = "странный емаг"; + desc = "Это полностью функционирующий емаг. Его даже можно взять в руки, но он находится будто не здесь..." + }, +/turf/space, +/area/space/nearstation/centcom) "nsJ" = ( /obj/machinery/economy/vending/nta/blue, /turf/simulated/floor/plasteel/dark, @@ -24597,6 +26837,11 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/bar) +"nxO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "nyb" = ( /obj/structure/flora/junglebush/large{ pixel_y = -8 @@ -24913,6 +27158,14 @@ /obj/machinery/computer/crew/advanced, /turf/simulated/floor/carpet, /area/centcom/ss220/admin3) +"nGR" = ( +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "nHq" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel/dark{ @@ -24981,6 +27234,15 @@ icon_state = "navyblue" }, /area/centcom/ss220/admin3) +"nIz" = ( +/obj/effect/landmark/spawner/vox_raider, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + dir = 1; + nitrogen = 103.984 + }, +/area/vox_base) "nIC" = ( /turf/simulated/floor/plasteel/dark{ dir = 5; @@ -25037,6 +27299,14 @@ icon_state = "navybluealt" }, /area/syndicate_mothership/control) +"nLH" = ( +/obj/machinery/cooker/deepfryer/upgraded, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + nitrogen = 103.984 + }, +/area/vox_base) "nMa" = ( /turf/simulated/floor/beach/away/coastline{ water_overlay_image = null @@ -25153,6 +27423,10 @@ "nNr" = ( /turf/simulated/floor/plating/asteroid/ancient/airless, /area/space/nearstation/centcom) +"nNs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "nNB" = ( /obj/structure/platform/corner{ dir = 1; @@ -25162,6 +27436,20 @@ icon_state = "dark_herringbone" }, /area/centcom/ss220/command) +"nNK" = ( +/obj/machinery/door/airlock/survival_pod/glass{ + hackProof = 1; + aiControlDisabled = 1; + name = "vox door"; + req_access_txt = "152"; + dir = 8 + }, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "nNP" = ( /obj/structure/light_fake/small, /turf/simulated/floor/plating{ @@ -25285,6 +27573,40 @@ /obj/item/bio_chip_implanter, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"nQy" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) +"nQM" = ( +/obj/structure/window/plasmareinforced{ + color = "red"; + dir = 1 + }, +/obj/structure/shuttle/engine/platform{ + layer = 2.9 + }, +/obj/structure/shuttle/engine/heater{ + icon_state = "heater3x3_side" + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 2; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0; + layer = 2.5 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) +"nQU" = ( +/turf/simulated/mineral/ancient/outer, +/area/space/centcomm) "nRk" = ( /obj/machinery/kitchen_machine/oven/upgraded, /turf/simulated/floor/plating{ @@ -25538,6 +27860,16 @@ icon_state = "navyblue" }, /area/centcom/ss220/admin3) +"nYD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "nZe" = ( /obj/structure/chair/sofa/bench/right{ cover_color = "#68452a"; @@ -25782,6 +28114,12 @@ }, /turf/simulated/floor/plating, /area/centcom/ss220/admin2) +"oiF" = ( +/obj/structure/bed/mattress/dirty, +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium, +/area/shuttle/vox) "oiH" = ( /obj/machinery/light/spot{ dir = 1 @@ -25978,6 +28316,12 @@ icon_state = "bot" }, /area/shuttle/escape) +"opf" = ( +/obj/machinery/cryopod/offstation{ + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "opo" = ( /obj/structure/table/wood, /obj/item/book/random, @@ -26069,6 +28413,18 @@ "oqS" = ( /turf/space, /area/centcom/ss220/command) +"oqU" = ( +/obj/item/clothing/suit/space/vox/pressure, +/obj/item/clothing/head/helmet/space/vox/pressure, +/obj/item/clothing/suit/space/vox/pressure, +/obj/item/clothing/head/helmet/space/vox/pressure, +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "orn" = ( /turf/simulated/wall/mineral/plastitanium, /area/shuttle/syndicate) @@ -26090,6 +28446,23 @@ icon_state = "dark" }, /area/shuttle/syndicate) +"orO" = ( +/obj/structure/window/reinforced{ + color = "red"; + dir = 1 + }, +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/harpoon{ + pixel_y = 5 + }, +/obj/item/harpoon{ + pixel_x = 4; + pixel_y = -2 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "orV" = ( /obj/machinery/door/airlock/centcom{ name = "Шаттл Нанотрейзен"; @@ -26111,6 +28484,15 @@ icon_state = "whitebluefull" }, /area/centcom/ss220/medbay) +"oss" = ( +/obj/machinery/vox_trader, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "osy" = ( /obj/structure/filingcabinet/chestdrawer, /obj/structure/light_fake/small{ @@ -26149,6 +28531,24 @@ icon_state = "dark" }, /area/syndicate_mothership/cargo) +"oup" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/item/grenade/smokebomb{ + pixel_x = -9 + }, +/obj/item/grenade/smokebomb, +/obj/item/grenade/smokebomb{ + pixel_x = 9 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "ouy" = ( /obj/structure/flora/grass/jungle, /turf/simulated/floor/grass/jungle, @@ -26259,6 +28659,18 @@ }, /turf/simulated/floor/mineral/plastitanium, /area/syndicate_mothership/infteam) +"owv" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/item/storage/box/legal_loot/amount_2, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "owz" = ( /obj/structure/holosign/barrier/engineering, /turf/simulated/floor/plating, @@ -26489,6 +28901,20 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/syndicate_mothership/jail) +"oDt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/walllocker/firelocker/north, +/obj/effect/turf_decal/box/red, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "oDu" = ( /obj/structure/railing, /turf/simulated/floor/indestructible/grass/no_creep, @@ -26508,6 +28934,25 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/admin2) +"oDY" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "voxeast_door_int"; + locked = 1; + req_access_txt = "152"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "oEb" = ( /obj/structure/bookcase{ name = "Forbidden Knowledge" @@ -26535,6 +28980,18 @@ }, /turf/space/transit/horizontal, /area/space/centcomm) +"oFc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/arrows/black{ + pixel_y = 16 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "oFt" = ( /obj/structure/railing{ dir = 4 @@ -26667,6 +29124,13 @@ /obj/item/flashlight/lamp/green, /turf/simulated/floor/carpet/red, /area/centcom/ss220/park) +"oHz" = ( +/obj/structure/chair/brass{ + dir = 8 + }, +/obj/effect/landmark/spawner/vox_raider, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "oHR" = ( /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -26688,6 +29152,11 @@ icon_state = "dark" }, /area/syndicate_mothership/control) +"oIh" = ( +/turf/simulated/wall/indestructible/fakeglass/brass{ + color = "#4b5582" + }, +/area/space/nearstation/centcom) "oIw" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -26709,6 +29178,17 @@ icon_state = "darkbluealt" }, /area/centcom/ss220/bar) +"oIZ" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "oJf" = ( /obj/structure/table/wood, /obj/item/paper_bin{ @@ -26737,6 +29217,14 @@ /obj/item/deck/unum, /turf/simulated/floor/carpet/green, /area/ghost_bar) +"oJG" = ( +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "oJS" = ( /obj/structure/flora/rock/pile/largejungle, /turf/simulated/floor/grass/jungle, @@ -26859,6 +29347,10 @@ }, /turf/simulated/floor/mineral/plastitanium, /area/shuttle/syndicate) +"oMl" = ( +/obj/structure/lattice, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "oMN" = ( /obj/structure/table/glass, /obj/item/folder{ @@ -26883,6 +29375,11 @@ /obj/structure/flora/ausbushes/pointybush, /turf/simulated/floor/grass, /area/centcom/ss220/evac) +"oNF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/flashlight/lantern, +/turf/simulated/floor/plating/nitrogen, +/area/space/nearstation/centcom) "oOA" = ( /obj/structure/table/glass, /obj/item/paper_bin/nanotrasen{ @@ -27004,6 +29501,13 @@ }, /turf/simulated/floor/wood/oak, /area/syndicate_mothership) +"oRm" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 1; + icon_state = "propulsion_l" + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "oRq" = ( /obj/effect/decal/syndie_logo{ icon_state = "logo13" @@ -27117,6 +29621,26 @@ /obj/effect/turf_decal/box/white, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"oUa" = ( +/obj/machinery/door_control{ + id = "voxshutters"; + name = "vox remote shutter control"; + req_access = list(152); + wires = 1; + pixel_x = 28; + pixel_y = 27 + }, +/obj/structure/chair/brass{ + color = "#f700ff"; + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "oUn" = ( /turf/simulated/floor/wood/fancy/oak, /area/centcom/ss220/park) @@ -27161,6 +29685,25 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin2) +"oWc" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "voxeast_door_ext"; + locked = 1; + req_access_txt = "152"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "oWk" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/effect/spawner/lootdrop/CCfood/meat, @@ -27190,6 +29733,17 @@ dir = 8 }, /area/centcom/ss220/admin2) +"oWx" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/landmark/damageturf, +/obj/machinery/light, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "oWC" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/effect/spawner/window, @@ -27215,6 +29769,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"oXw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "oXz" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ @@ -27232,6 +29795,25 @@ icon_state = "darkbluefull" }, /area/centcom/ss220/admin3) +"oXX" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/lusty_xenomorph{ + pixel_y = 31 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/spawner/vox_raider, +/obj/effect/decal/cleanable/blood/slime, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) +"oXY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/light_fake/small{ + dir = 8 + }, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "oYc" = ( /obj/effect/turf_decal/siding/wood/neutral{ dir = 6 @@ -27369,6 +29951,29 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin1) +"paK" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 2; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "paM" = ( /obj/structure/railing/corner{ dir = 8 @@ -27504,6 +30109,24 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/general) +"peV" = ( +/obj/structure/light_fake/small{ + dir = 8 + }, +/obj/item/reagent_containers/glass/bucket/wooden{ + pixel_x = -8; + pixel_y = -11; + name = "сральное ведро"; + desc = "Омерзительно. Им кто-то недавно пользовался?!" + }, +/obj/item/reagent_containers/glass/beaker/waterbottle{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/blood/slime, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "peW" = ( /obj/structure/platform{ dir = 1; @@ -27923,6 +30546,13 @@ /obj/item/mod/control/pre_equipped/research, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"puH" = ( +/obj/structure/chair/brass{ + dir = 4 + }, +/obj/effect/landmark/spawner/vox_raider, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "puM" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -27941,6 +30571,23 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) +"pvI" = ( +/obj/item/stack/cable_coil, +/obj/structure/table{ + color = "#73d1cb" + }, +/obj/item/storage/firstaid/fire{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/regular, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "pvL" = ( /turf/simulated/floor/grass/jungle, /area/wizard_station) @@ -28011,7 +30658,9 @@ /turf/simulated/floor/grass/jungle, /area/centcom/ss220/park) "pxm" = ( -/obj/item/coin/antagtoken, +/obj/item/coin/antagtoken{ + desc = "Он здесь, но так далеко! Эта монетка точно даст мне антага! Но как же до неё добраться из гост-бара?.." + }, /turf/simulated/floor/plating/asteroid/ancient/airless, /area/space/nearstation/centcom) "pxu" = ( @@ -28036,6 +30685,17 @@ color = "#f63d3d" }, /area/syndicate_mothership) +"pyk" = ( +/obj/machinery/computer/operating{ + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "pyA" = ( /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/plasteel/dark, @@ -28059,6 +30719,28 @@ }, /turf/simulated/floor/indestructible/grass/no_creep, /area/centcom/ss220/admin1) +"pzo" = ( +/obj/item/reagent_containers/drinks/cans/beer{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/reagent_containers/drinks/cans/beer{ + pixel_y = 4; + pixel_x = 2 + }, +/obj/item/reagent_containers/drinks/cans/beer{ + pixel_x = 10; + pixel_y = 4 + }, +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ + pixel_x = -8 + }, +/obj/item/reagent_containers/drinks/cans/beer{ + pixel_x = 8 + }, +/turf/simulated/floor/plating/asteroid/ancient/airless, +/area/space/nearstation/centcom) "pzE" = ( /obj/effect/turf_decal/box/white/corners{ dir = 1 @@ -28127,6 +30809,15 @@ }, /turf/space/transit/horizontal, /area/space/centcomm) +"pBy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "pBC" = ( /obj/structure/chair/comfy/shuttle/dark{ dir = 1 @@ -28144,6 +30835,18 @@ icon_state = "cafeteria" }, /area/ninja/holding) +"pCb" = ( +/obj/structure/chair/brass{ + color = "#f700ff"; + dir = 4 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "pCf" = ( /obj/effect/turf_decal/miscellaneous/goldensiding/corner{ dir = 5 @@ -28415,7 +31118,9 @@ }, /area/syndicate_mothership/jail) "pLx" = ( -/obj/effect/decal/remains/human, +/obj/effect/decal/remains/human{ + desc = "Он попросил приоткрыть окошко." + }, /turf/simulated/floor/plating/asteroid/ancient/airless, /area/space/nearstation/centcom) "pLC" = ( @@ -28645,6 +31350,13 @@ /obj/effect/spawner/window/plastitanium, /turf/simulated/floor/plating, /area/shuttle/syndicate) +"pQG" = ( +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "pQT" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -29010,6 +31722,17 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/supply) +"pZI" = ( +/obj/machinery/computer/security/camera_bug{ + dir = 8 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "pZL" = ( /obj/structure/closet/crate/trashcart{ name = "Специальная доставка с ЦК" @@ -29121,6 +31844,18 @@ }, /turf/simulated/floor/plating/abductor, /area/abductor_ship) +"qcX" = ( +/obj/effect/spawner/window/shuttle/survival_pod, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 2; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/plating/nitrogen, +/area/shuttle/vox) "qcZ" = ( /obj/machinery/computer/crew{ dir = 1 @@ -29129,6 +31864,22 @@ icon_state = "darkbrown" }, /area/centcom/ss220/supply) +"qdh" = ( +/obj/item/clothing/suit/space/vox/pressure, +/obj/item/clothing/head/helmet/space/vox/pressure, +/obj/item/clothing/suit/space/vox/pressure, +/obj/item/clothing/head/helmet/space/vox/pressure, +/obj/structure/window/reinforced{ + color = "red"; + dir = 1 + }, +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "qdr" = ( /obj/structure/rack, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar, @@ -29283,6 +32034,16 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin1) +"qjV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "qjW" = ( /obj/machinery/cryopod/offstation, /turf/simulated/floor/plasteel/dark{ @@ -29862,6 +32623,31 @@ "qBQ" = ( /turf/simulated/wall/indestructible/riveted, /area/centcom/ss220/park) +"qBV" = ( +/obj/structure/closet/secure_closet/freezer/fridge/open, +/obj/item/food/grown/potato, +/obj/item/food/grown/potato, +/obj/item/food/grown/whitebeet, +/obj/item/food/grown/whitebeet, +/obj/item/food/grown/tomato, +/obj/item/food/grown/tomato, +/obj/item/food/grown/rice, +/obj/item/food/grown/rice, +/obj/item/food/grown/icepepper, +/obj/item/food/grown/icepepper, +/obj/item/food/grown/citrus/lemon, +/obj/item/food/grown/citrus/lime, +/obj/item/food/grown/citrus/orange, +/obj/item/food/grown/cherries, +/obj/item/food/grown/apple, +/obj/item/food/grown/ambrosia/deus, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + dir = 8; + nitrogen = 103.984 + }, +/area/vox_base) "qCH" = ( /obj/machinery/porta_turret/syndicate/pod, /turf/simulated/wall/mineral/plastitanium, @@ -30099,6 +32885,10 @@ /obj/structure/flora/ausbushes/palebush, /turf/simulated/floor/grass, /area/centcom/ss220/evac) +"qIh" = ( +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "qIv" = ( /obj/structure/chair/sofa/right, /obj/structure/curtain/black{ @@ -30142,6 +32932,12 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin3) +"qJy" = ( +/obj/structure/light_fake/spot{ + dir = 4 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "qJP" = ( /obj/structure/holohoop{ dir = 8 @@ -30304,6 +33100,14 @@ name = "floor" }, /area/syndicate_mothership/elite_squad) +"qOt" = ( +/obj/machinery/economy/vending/autodrobe/free, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "qPk" = ( /obj/docking_port/stationary{ area_type = /area/syndicate_mothership; @@ -30368,6 +33172,11 @@ /obj/item/food/applepie, /turf/simulated/floor/mineral/plastitanium, /area/centcom/ss220/supply) +"qQO" = ( +/turf/simulated/wall/indestructible/syndicate{ + smoothing_flags = 2 + }, +/area/vox_base) "qRh" = ( /obj/machinery/conveyor/west{ id = "QMLoad2" @@ -30509,6 +33318,16 @@ }, /turf/simulated/floor/plating, /area/centcom/ss220/bar) +"qUo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/access_button{ + autolink_id = "voxwest_btn_ext"; + req_one_access_txt = "152"; + pixel_x = 27; + pixel_y = -26 + }, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "qUK" = ( /obj/machinery/door/airlock/bathroom, /turf/simulated/floor/wood/fancy/cherry, @@ -30528,6 +33347,16 @@ icon_state = "brown" }, /area/centcom/ss220/supply) +"qVv" = ( +/obj/machinery/atmospherics/portable/canister/nitrogen, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "qVw" = ( /turf/simulated/floor/carpet/lone, /area/centcom/ss220/bar) @@ -30854,6 +33683,12 @@ }, /turf/simulated/floor/plasteel/dark, /area/ninja/outpost) +"rdL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/obj/machinery/light, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "rdO" = ( /obj/effect/turf_decal/siding/wood/neutral{ dir = 9 @@ -31715,6 +34550,23 @@ /obj/effect/landmark/spawner/tradergearmajor, /turf/simulated/floor/carpet/royalblue, /area/shuttle/trade/sol) +"rvM" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/obj/item/storage/briefcase/inflatable{ + pixel_y = 4 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_y = -2 + }, +/obj/item/storage/briefcase/inflatable{ + pixel_y = -8 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "rvV" = ( /obj/structure/closet/secure_closet/security, /obj/item/clothing/suit/armor/bulletproof, @@ -31800,6 +34652,10 @@ icon_state = "darkred" }, /area/centcom/ss220/supply) +"rxQ" = ( +/obj/machinery/atmospherics/portable/canister/nitrogen, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "rxS" = ( /obj/structure/platform{ layer = 3.1 @@ -31921,6 +34777,15 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin2) +"rBQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "rBX" = ( /turf/simulated/floor/plasteel/dark{ dir = 5; @@ -32130,6 +34995,15 @@ }, /turf/simulated/floor/wood/oak, /area/centcom/ss220/park) +"rJk" = ( +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "rJo" = ( /obj/effect/turf_decal/siding/wood/neutral{ dir = 8 @@ -32224,6 +35098,22 @@ /obj/machinery/washing_machine, /turf/simulated/floor/wood/oak, /area/syndicate_mothership) +"rML" = ( +/obj/structure/table/reinforced/brass, +/obj/item/hand_valuer{ + pixel_x = -6 + }, +/obj/item/hand_valuer{ + pixel_x = 4 + }, +/obj/machinery/cell_charger, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "rND" = ( /obj/structure/chair/sofa/corp/right{ dir = 8 @@ -32342,6 +35232,27 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/syndicate_mothership/elite_squad) +"rOK" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/spawner/lootdrop/trash, +/obj/item/grenade/smokebomb, +/obj/item/grenade/smokebomb{ + pixel_x = 9 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "rPb" = ( /obj/structure/curtain/open/shower/security{ pixel_y = -32 @@ -32700,9 +35611,18 @@ }, /turf/simulated/floor/wood/parquet, /area/centcom/ss220/admin2) +"rWl" = ( +/obj/structure/table/wood/fancy/purple, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "rWF" = ( /turf/simulated/wall/mineral/plastitanium, /area/shuttle/specops) +"rWN" = ( +/turf/simulated/wall/mineral/plastitanium, +/area/vox_base) "rXd" = ( /obj/machinery/poolcontroller/invisible, /turf/simulated/floor/beach/away/water, @@ -33046,6 +35966,42 @@ icon_state = "dark" }, /area/centcom/ss220/jail) +"sgd" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/vox) +"sgh" = ( +/obj/item/storage/bag/cash, +/obj/item/coin/antagtoken{ + pixel_y = -11 + }, +/obj/item/coin/antagtoken{ + pixel_y = -4; + pixel_x = -8 + }, +/obj/item/coin/antagtoken{ + pixel_y = -4; + pixel_x = 8 + }, +/obj/item/clothing/head/lordadmiralhat{ + pixel_y = 8; + name = "адмиральская шляпа"; + desc = "Шляпа снятая с головы самого адмирала флота НТ. Или ССП? ТСФ? Не важно. Она снята с головы о-о-очень важной шишки." + }, +/obj/item/clothing/gloves/ring/gold/blessed{ + pixel_y = -32; + name = "золотое кольцо всевластия"; + desc = "Кольцо отобранное у группы карликов на Лаваленде. История не важна. Главное - что оно было для них важно и оно блестит!" + }, +/obj/item/food/fathersoup{ + pixel_x = 32; + pixel_y = -30; + name = "великий суп"; + desc = "Этот великий суп был приготовлен самим Bat'Ya, ценящийся всеми сословиями. Но даже от одного только взгляда на него - у вас уже слезятся глаза. Ты его не сможешь доесть, даже не пытайся."; + antable = 0; + bitesize = 0.01 + }, +/turf/simulated/floor/mineral/gold/fancy, +/area/vox_base) "sgp" = ( /obj/structure/urinal{ pixel_y = 28 @@ -33058,6 +36014,12 @@ /obj/structure/dresser, /turf/simulated/floor/carpet/blue, /area/centcom/ss220/park) +"sgw" = ( +/obj/item/restraints/handcuffs, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "sgM" = ( /obj/structure/light_fake, /turf/simulated/floor/mineral/plastitanium, @@ -33094,6 +36056,14 @@ icon_state = "dark" }, /area/centcom/ss220/jail) +"shm" = ( +/obj/structure/dresser, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "shq" = ( /turf/simulated/floor/plasteel/dark{ icon_state = "dark_large" @@ -33441,6 +36411,22 @@ icon_state = "black" }, /area/centcom/ss220/park) +"sqS" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror{ + pixel_y = -29 + }, +/obj/structure/light_fake/small{ + dir = 4 + }, +/obj/item/reagent_containers/glass/bucket{ + pixel_x = -11; + pixel_y = 4 + }, +/obj/effect/landmark/damageturf, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "srn" = ( /turf/simulated/floor/wood/oak, /area/syndicate_mothership) @@ -33640,10 +36626,37 @@ icon_state = "darkblue" }, /area/centcom/ss220/evac) +"szw" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/trash/snack_bowl, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium, +/area/shuttle/vox) "szK" = ( /obj/machinery/computer/camera_advanced, /turf/simulated/floor/carpet/black, /area/syndicate_mothership/control) +"sAK" = ( +/obj/structure/closet/crate/freezer{ + color = "#73d1cb" + }, +/obj/item/organ/internal/heart/vox, +/obj/item/organ/internal/heart/vox, +/obj/item/organ/internal/kidneys/vox, +/obj/item/organ/internal/kidneys/vox, +/obj/item/organ/internal/liver/vox, +/obj/item/organ/internal/liver/vox, +/obj/item/organ/internal/lungs/vox, +/obj/item/organ/internal/lungs/vox, +/obj/item/organ/internal/eyes/vox, +/obj/item/organ/internal/eyes/vox, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "sAM" = ( /obj/structure/table/wood{ color = "#996633" @@ -33703,6 +36716,15 @@ icon_state = "dark" }, /area/syndicate_mothership/cargo) +"sCG" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "sCI" = ( /obj/machinery/computer/security{ dir = 4; @@ -33840,6 +36862,26 @@ icon_state = "dark" }, /area/syndicate_mothership) +"sGe" = ( +/obj/machinery/kitchen_machine/oven/upgraded, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + nitrogen = 103.984 + }, +/area/vox_base) +"sHc" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/spawner/lootdrop/trash, +/obj/item/reagent_containers/syringe/dart/medical/tainted, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "sHJ" = ( /obj/effect/turf_decal/siding/wood/neutral/corner{ dir = 4 @@ -34054,6 +37096,15 @@ }, /turf/simulated/floor/carpet/royalblack, /area/centcom/ss220/bar) +"sLa" = ( +/obj/item/kirbyplants, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "sLl" = ( /obj/structure/chair/sofa/bench/right{ cover_color = "#68452a" @@ -34137,6 +37188,15 @@ icon_state = "darkredalt" }, /area/centcom/ss220/admin3) +"sMV" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "sNl" = ( /obj/structure/table/wood{ color = "#996633" @@ -34216,6 +37276,13 @@ }, /turf/simulated/floor/carpet/red, /area/syndicate_mothership/control) +"sOM" = ( +/obj/machinery/access_button{ + autolink_id = "voxeast_btn_int"; + req_one_access_txt = "152" + }, +/turf/simulated/wall/mineral/plastitanium, +/area/shuttle/vox) "sPa" = ( /obj/machinery/door/window/brigdoor{ color = "red"; @@ -34354,6 +37421,14 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/bar) +"sSw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "sTn" = ( /obj/machinery/door/window{ dir = 8; @@ -34545,6 +37620,26 @@ icon_state = "white" }, /area/centcom/ss220/medbay) +"sYY" = ( +/obj/structure/closet/crate/freezer{ + color = "#73d1cb" + }, +/obj/item/reagent_containers/iv_bag/blood/vox, +/obj/item/reagent_containers/iv_bag/blood/vox, +/obj/structure/closet/walllocker/medlocker/east{ + color = "#73d1cb" + }, +/obj/structure/light_fake/small{ + dir = 4 + }, +/obj/effect/turf_decal/box/white, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "sYZ" = ( /turf/simulated/floor/carpet/green, /area/centcom/ss220/bar) @@ -34628,6 +37723,16 @@ }, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/supply) +"tap" = ( +/obj/machinery/iv_drip, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "tax" = ( /obj/machinery/porta_turret/centcom/pulse, /turf/simulated/floor/plasteel/dark{ @@ -34638,6 +37743,30 @@ /obj/machinery/economy/vending/snack/free, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/evac) +"taL" = ( +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -8; + pixel_y = 5 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = -8 + }, +/obj/item/kitchen/knife, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 5 + }, +/obj/machinery/reagentgrinder{ + desc = "Used to grind things up into raw materials and liquids."; + pixel_y = 5 + }, +/obj/structure/table/reinforced/brass, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + dir = 4; + nitrogen = 103.984 + }, +/area/vox_base) "taV" = ( /obj/structure/light_fake, /obj/item/kirbyplants, @@ -34711,6 +37840,17 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin2) +"tcm" = ( +/obj/structure/window/reinforced{ + color = "red"; + dir = 1 + }, +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/storage/box/alienhandcuffs, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "tcq" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/iv_bag/blood/random, @@ -34769,6 +37909,16 @@ water_overlay_image = null }, /area/syndicate_mothership/outside) +"tdA" = ( +/obj/effect/spawner/lootdrop/trash, +/obj/effect/landmark/damageturf, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "tdR" = ( /obj/structure/shuttle/engine/platform{ layer = 2.9; @@ -34841,6 +37991,16 @@ color = "#f63d3d" }, /area/syndicate_mothership/infteam) +"thl" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/spawner/lootdrop/crate_spawner, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "thD" = ( /obj/structure/table/holotable/wood{ color = "#996633" @@ -35051,6 +38211,24 @@ icon_state = "darkneutralfull" }, /area/syndicate_mothership) +"tph" = ( +/obj/structure/table/glass{ + color = "#73d1cb" + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = 2 + }, +/obj/item/clothing/glasses/hud/health{ + pixel_x = -6; + pixel_y = 8 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "tpj" = ( /obj/machinery/computer/shuttle/sst, /turf/simulated/floor/carpet, @@ -35238,6 +38416,20 @@ icon_state = "dark_herringbone" }, /area/centcom/ss220/admin1) +"ttP" = ( +/obj/machinery/door/airlock/survival_pod/glass{ + hackProof = 1; + aiControlDisabled = 1; + name = "vox door"; + req_access_txt = "152" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "ttZ" = ( /obj/machinery/economy/vending/cigarette/free, /turf/simulated/floor/plasteel/dark, @@ -35323,6 +38515,16 @@ }, /turf/simulated/floor/carpet/red, /area/centcom/ss220/park) +"twD" = ( +/obj/structure/table/reinforced/brass, +/obj/machinery/chem_dispenser/beer/upgraded, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + dir = 4; + nitrogen = 103.984 + }, +/area/vox_base) "twY" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/effect/turf_decal/siding/black{ @@ -35388,6 +38590,13 @@ icon_state = "darkbluefull" }, /area/centcom/ss220/admin3) +"tzg" = ( +/obj/structure/light_fake/spot{ + dir = 1 + }, +/obj/structure/closet/walllocker/firelocker/north, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "tzm" = ( /obj/machinery/door_control/no_emag{ id = "СС_BD_Shitspawn_Exterior_1"; @@ -35513,12 +38722,28 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate_elite) +"tBp" = ( +/obj/structure/shuttle/engine/huge, +/turf/simulated/floor/indestructible/transparent_floor, +/area/shuttle/vox) "tBr" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate) +"tBB" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/effect/spawner/window/shuttle/survival_pod, +/turf/simulated/floor/plating/nitrogen, +/area/shuttle/vox) "tBT" = ( /obj/structure/rack/holorack, /obj/item/storage/box/syndie_kit/chameleon{ @@ -35591,6 +38816,13 @@ icon_state = "darkneutralfull" }, /area/syndicate_mothership) +"tCy" = ( +/obj/structure/shuttle/engine/platform{ + dir = 8; + layer = 2.9 + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "tCJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -35641,6 +38873,15 @@ icon_state = "dark" }, /area/syndicate_mothership) +"tEQ" = ( +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "tFj" = ( /obj/item/flag/syndi, /turf/simulated/floor/plasteel{ @@ -35714,6 +38955,9 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/bar) +"tIm" = ( +/turf/simulated/wall/indestructible/rock, +/area/space/nearstation/centcom) "tIq" = ( /obj/machinery/door_control/no_emag/south{ emagged = 1; @@ -35937,6 +39181,31 @@ /obj/item/kirbyplants, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/admin2) +"tNJ" = ( +/obj/item/circular_saw, +/obj/structure/table{ + color = "#73d1cb" + }, +/obj/item/scalpel, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = 10; + pixel_x = -3 + }, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = 7; + pixel_x = 2 + }, +/obj/item/reagent_containers/syringe/dart/medical/tainted{ + pixel_y = 3; + pixel_x = 7 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "tOi" = ( /obj/effect/turf_decal/siding/wood/neutral/corner{ dir = 4 @@ -36091,6 +39360,24 @@ }, /turf/simulated/floor/plating/abductor, /area/abductor_ship) +"tSO" = ( +/obj/machinery/bodyscanner{ + dir = 1; + color = "#73d1cb" + }, +/obj/machinery/light/directional/south, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) +"tSQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/light_fake/small, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "tTd" = ( /obj/structure/curtain/black{ pixel_y = -32; @@ -36128,6 +39415,19 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin3) +"tUs" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/flashlight{ + pixel_y = 12 + }, +/obj/item/flashlight{ + pixel_y = 6 + }, +/obj/item/flashlight, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "tUK" = ( /obj/structure/mecha_wreckage/durand/old{ icon = 'modular_ss220/objects/icons/mecha.dmi'; @@ -36465,6 +39765,19 @@ icon_state = "darkredalt" }, /area/centcom/ss220/jail) +"ucY" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/item/toy/plushie/voxplushie, +/obj/effect/spawner/lootdrop/maintenance/two, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "udq" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -36663,6 +39976,29 @@ /obj/machinery/ai_status_display, /turf/simulated/wall/mineral/titanium, /area/shuttle/escape) +"ukJ" = ( +/obj/machinery/atmospherics/unary/tank/nitrogen{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) +"ukU" = ( +/obj/machinery/optable{ + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "ulb" = ( /obj/structure/table/wood/fancy/orange, /obj/machinery/door/poddoor/shutters{ @@ -36693,6 +40029,11 @@ }, /turf/simulated/floor/wood/oak, /area/syndicate_mothership) +"ulE" = ( +/obj/machinery/washing_machine, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "ulG" = ( /obj/structure/rack, /obj/effect/turf_decal/box, @@ -36995,6 +40336,11 @@ icon_state = "darkbluefull" }, /area/centcom/ss220/bar) +"usV" = ( +/obj/item/pickaxe, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/space/nearstation/centcom) "utc" = ( /obj/structure/bed/roller, /turf/simulated/floor/plasteel{ @@ -37092,6 +40438,31 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood/oak, /area/syndicate_mothership) +"uwQ" = ( +/obj/structure/sink/directional/south{ + color = "#73d1cb"; + dir = 2; + pixel_y = 23 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) +"uwT" = ( +/obj/structure/shuttle/engine/platform{ + layer = 2.9 + }, +/obj/structure/shuttle/engine/propulsion{ + dir = 1; + icon_state = "propulsion_l" + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) "uxb" = ( /obj/machinery/economy/vending/nta/engineer, /turf/simulated/floor/plasteel/dark{ @@ -37240,6 +40611,13 @@ icon_state = "darkbluealt" }, /area/centcom/ss220/admin1) +"uBu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "uBy" = ( /obj/structure/rack, /obj/item/storage/firstaid/ert{ @@ -37322,6 +40700,17 @@ icon_state = "rampbottom" }, /area/syndicate_mothership/cargo) +"uEp" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/portable/canister/nitrogen, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "uEs" = ( /obj/machinery/porta_turret/syndicate/interior, /obj/structure/window/plasmareinforced{ @@ -37386,6 +40775,14 @@ }, /turf/simulated/floor/grass/no_creep, /area/centcom/ss220/general) +"uGJ" = ( +/obj/structure/table/reinforced/brass, +/obj/item/card/id/prisoner/random, +/obj/item/card/id/prisoner/random, +/obj/item/card/id/prisoner/random, +/obj/item/card/id/prisoner/random, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "uGR" = ( /obj/structure/chair/comfy/red, /turf/simulated/floor/carpet/arcade, @@ -37421,6 +40818,15 @@ icon_state = "vault" }, /area/shuttle/escape) +"uIw" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/turf/simulated/floor/plasteel/dark/nitrogen, +/area/vox_base) "uIx" = ( /obj/structure/table/wood, /obj/item/grenade/syndieminibomb{ @@ -37454,6 +40860,23 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/wizard_station) +"uIM" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/effect/turf_decal/delivery/hollow, +/obj/machinery/door/poddoor/shutters{ + density = 0; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "uJb" = ( /obj/structure/curtain/open/shower/security{ color = "#222222" @@ -37578,6 +41001,32 @@ color = "#f63d3d" }, /area/syndicate_mothership/infteam) +"uMP" = ( +/obj/structure/lattice, +/obj/machinery/porta_turret/syndicate{ + faction = "Vox"; + name = "vox turret"; + eprojectile = /obj/item/projectile/beam/disabler; + projectile = /obj/item/projectile/beam/disabler + }, +/turf/simulated/floor/plating/airless, +/area/shuttle/vox) +"uMU" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 8; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/structure/closet/walllocker/firelocker/north, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) +"uNc" = ( +/obj/structure/closet/abductor, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "uNg" = ( /obj/effect/decal/syndie_logo{ icon_state = "logo18" @@ -37671,6 +41120,15 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/syndicate_mothership/elite_squad) +"uPr" = ( +/obj/structure/table/reinforced/brass, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/three_course_meal, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurplefull"; + nitrogen = 103.984 + }, +/area/vox_base) "uPs" = ( /obj/effect/decal/syndie_logo{ icon_state = "logo8" @@ -37723,6 +41181,22 @@ icon_state = "dark_herringbone" }, /area/centcom/ss220/command) +"uRe" = ( +/obj/item/reagent_containers/glass/beaker/waterbottle{ + pixel_x = -10; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium, +/area/shuttle/vox) +"uRr" = ( +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "uRG" = ( /obj/structure/table, /turf/simulated/floor/carpet/royalblack, @@ -37736,6 +41210,19 @@ icon_state = "dark_herringbone" }, /area/centcom/ss220/command) +"uRJ" = ( +/obj/machinery/door/window/reinforced/reversed{ + dir = 4; + req_access_txt = "152"; + name = "vox glassdoor" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "uRK" = ( /obj/structure/chair/sofa/right{ dir = 1 @@ -37831,6 +41318,16 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin2) +"uVh" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "uVv" = ( /obj/structure/curtain/black{ pixel_x = 32 @@ -37999,6 +41496,31 @@ icon_state = "navyblue" }, /area/centcom/ss220/admin3) +"uZt" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "voxwest_door_int"; + locked = 1; + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "vaw" = ( /obj/effect/turf_decal/siding/wood/neutral/corner{ dir = 8 @@ -38006,6 +41528,10 @@ /obj/effect/turf_decal/siding/wood/neutral/corner, /turf/simulated/floor/wood/fancy/oak, /area/centcom/ss220/admin1) +"vaH" = ( +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "vbb" = ( /obj/machinery/door/airlock/hatch/syndicate/command{ name = "Тюрьма" @@ -38145,6 +41671,9 @@ }, /turf/simulated/floor/wood/oak, /area/syndicate_mothership) +"vfg" = ( +/turf/simulated/wall/indestructible/rock, +/area/vox_base) "vfs" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -38512,6 +42041,10 @@ /obj/structure/sign/poster/contraband/syndicate_recruitment, /turf/simulated/wall/indestructible/riveted, /area/ghost_bar) +"vpi" = ( +/obj/effect/spawner/lootdrop/trash, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "vpo" = ( /turf/space/transit/horizontal{ dir = 4 @@ -38722,6 +42255,34 @@ icon_state = "darkredcornersalt" }, /area/syndicate_mothership/jail) +"vsS" = ( +/obj/structure/closet/cabinet, +/obj/item/multitool/ai_detect{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/multitool/ai_detect{ + pixel_x = -1 + }, +/obj/item/screwdriver/nuke, +/obj/item/clothing/suit/poncho/green, +/obj/item/clothing/suit/poncho/green, +/obj/item/clothing/suit/poncho/green, +/obj/item/clothing/suit/poncho/green, +/obj/item/clothing/suit/poncho/green, +/obj/item/clothing/suit/poncho/green, +/obj/item/clothing/head/sombrero/green, +/obj/item/clothing/head/sombrero/green, +/obj/item/clothing/head/sombrero/green, +/obj/item/clothing/head/sombrero/green, +/obj/item/clothing/head/sombrero/green, +/obj/item/clothing/head/sombrero/green, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "vti" = ( /obj/effect/turf_decal/box/corners{ dir = 1 @@ -39361,6 +42922,22 @@ }, /turf/simulated/floor/carpet/black, /area/centcom/ss220/admin1) +"vHn" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/structure/closet/crate/trashcart, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/landmark/damageturf, +/obj/item/clothing/glasses/meson{ + pixel_x = 5 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "vHq" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4 @@ -39370,6 +42947,15 @@ icon_state = "dark" }, /area/syndicate_mothership/cargo) +"vHs" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/toy/plushie/voxplushie, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 + }, +/obj/item/reagent_containers/pill/random_drugs, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/shuttle/vox) "vHw" = ( /turf/simulated/floor/plasteel/dark{ dir = 6; @@ -39506,6 +43092,19 @@ icon_state = "brown" }, /area/centcom/ss220/supply) +"vMH" = ( +/obj/structure/closet/walllocker/firelocker/north, +/obj/effect/turf_decal/box/red, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "vML" = ( /obj/structure/chair/sofa/bench/left, /turf/simulated/floor/plasteel{ @@ -39710,6 +43309,14 @@ icon_state = "bot" }, /area/shuttle/escape) +"vSp" = ( +/obj/machinery/processor, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurplecorners"; + nitrogen = 103.984 + }, +/area/vox_base) "vSv" = ( /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/mineral/plastitanium/red, @@ -39732,6 +43339,16 @@ icon_state = "white" }, /area/ninja/holding) +"vUt" = ( +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/obj/item/tank/internals/nitrogen, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "vUB" = ( /obj/effect/turf_decal/delivery/red, /obj/effect/decal/cleanable/dirt, @@ -39845,6 +43462,12 @@ icon_state = "dark" }, /area/syndicate_mothership/cargo) +"vXj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "vXk" = ( /obj/machinery/light/spot{ dir = 4 @@ -39886,6 +43509,11 @@ /obj/structure/flora/tree/jungle, /turf/simulated/floor/indestructible/grass/no_creep, /area/centcom/ss220/admin1) +"vYv" = ( +/turf/simulated/wall/indestructible/fakeglass/brass{ + color = "#4b5582" + }, +/area/vox_base) "vYw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wood/neutral{ @@ -39946,6 +43574,21 @@ icon_state = "darkblue" }, /area/centcom/ss220/bar) +"war" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/computer/operating{ + dir = 1; + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "wat" = ( /obj/structure/bookcase, /turf/simulated/floor/plasteel/dark, @@ -40252,6 +43895,17 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin1) +"wiT" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "wjg" = ( /turf/simulated/wall/indestructible/riveted, /area/centcom/ss220/admin1) @@ -40262,6 +43916,13 @@ }, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/infteam) +"wjj" = ( +/obj/structure/chair/brass{ + dir = 1 + }, +/obj/effect/landmark/spawner/vox_raider, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "wjq" = ( /obj/structure/sign/flag/nanotrasen{ icon = 'icons/obj/lavaland/artefacts.dmi'; @@ -40560,6 +44221,13 @@ icon_state = "dark" }, /area/syndicate_mothership/control) +"wrO" = ( +/obj/structure/window/reinforced{ + color = "red"; + dir = 1 + }, +/turf/simulated/wall/mineral/titanium/survival/pod, +/area/shuttle/vox) "wrP" = ( /obj/effect/decal/syndie_logo{ icon_state = "logo18" @@ -40584,6 +44252,28 @@ }, /turf/simulated/floor/carpet/red, /area/centcom/ss220/admin2) +"wsM" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 1; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "wsQ" = ( /obj/structure/light_fake{ dir = 4 @@ -41598,6 +45288,10 @@ "wOK" = ( /turf/simulated/floor/wood/oak, /area/syndicate_mothership/infteam) +"wOL" = ( +/obj/structure/reagent_dispensers/beerkeg/nuke, +/turf/simulated/floor/plating/asteroid/ancient/airless, +/area/space/nearstation/centcom) "wOX" = ( /obj/machinery/economy/vending/tool/free, /obj/effect/turf_decal/siding/brown{ @@ -41667,6 +45361,17 @@ /obj/structure/flora/tree/jungle, /turf/simulated/floor/indestructible/grass, /area/syndicate_mothership/outside) +"wRz" = ( +/obj/structure/table/reinforced{ + color = "#cc52c0" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ff78f4"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "wRA" = ( /obj/structure/light_fake/spot{ dir = 8 @@ -42322,6 +46027,14 @@ icon_state = "cafeteria" }, /area/centcom/ss220/supply) +"xjm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurplefull"; + nitrogen = 103.984 + }, +/area/vox_base) "xjv" = ( /obj/structure/table/reinforced, /obj/item/storage/box/syndidonkpockets, @@ -42350,6 +46063,17 @@ }, /turf/simulated/floor/wood/fancy/cherry, /area/centcom/ss220/admin2) +"xjQ" = ( +/obj/effect/turf_decal/delivery/hollow, +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/mineral/plastitanium{ + color = "#fff894"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "xjY" = ( /obj/structure/light_fake{ dir = 1 @@ -42439,6 +46163,9 @@ /obj/item/dice/d20, /turf/simulated/floor/carpet/black, /area/trader_station/sol) +"xlp" = ( +/turf/simulated/floor/mineral/gold/fancy, +/area/vox_base) "xlM" = ( /obj/machinery/door/airlock/external{ aiControlDisabled = 1; @@ -42455,6 +46182,11 @@ }, /turf/simulated/floor/plasteel/dark, /area/shuttle/administration) +"xmO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/flag/species/vox, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "xmT" = ( /obj/effect/turf_decal/siding/black{ dir = 4 @@ -42482,6 +46214,13 @@ icon_state = "darkred" }, /area/syndicate_mothership/infteam) +"xnz" = ( +/obj/machinery/access_button{ + autolink_id = "voxwest_btn_ext"; + req_one_access_txt = "152" + }, +/turf/simulated/wall/mineral/plastitanium, +/area/shuttle/vox) "xnV" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/item/clothing/mask/muzzle{ @@ -42628,6 +46367,15 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin1) +"xqb" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "xqe" = ( /obj/effect/turf_decal/box/white, /obj/item/ammo_box/magazine/m50, @@ -42658,6 +46406,23 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/ss220/admin1) +"xqR" = ( +/obj/machinery/optable{ + color = "#73d1cb" + }, +/obj/machinery/defibrillator_mount/loaded{ + pixel_y = 26 + }, +/obj/structure/light_fake/small{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "xqX" = ( /obj/structure/table/glass, /obj/item/clipboard{ @@ -42958,6 +46723,19 @@ }, /turf/simulated/floor/plating, /area/shuttle/supply) +"xzN" = ( +/obj/machinery/door/airlock/hatch{ + req_access_txt = "152"; + name = "vox hatch"; + aiControlDisabled = 1; + hackProof = 1 + }, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "xAj" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "SST_outside" @@ -43017,6 +46795,18 @@ /obj/structure/light_fake/small, /turf/simulated/floor/carpet/royalblack, /area/centcom/ss220/admin2) +"xCT" = ( +/obj/structure/bed/mattress/dirty, +/obj/item/reagent_containers/glass/beaker/waterbottle{ + pixel_x = -10; + pixel_y = -3 + }, +/obj/structure/light_fake/small{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark, +/area/vox_base) "xCV" = ( /obj/structure/chair/sofa/corp/right{ dir = 1 @@ -43080,6 +46870,15 @@ icon_state = "darkbluealt" }, /area/centcom/ss220/bar) +"xEf" = ( +/obj/machinery/kitchen_machine/microwave/upgraded, +/obj/structure/table/reinforced/brass, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + nitrogen = 103.984 + }, +/area/vox_base) "xEu" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/effect/spawner/lootdrop/CCfood/meat, @@ -43136,6 +46935,11 @@ icon_state = "navyblue" }, /area/centcom/ss220/admin3) +"xFW" = ( +/obj/structure/chair/brass, +/obj/effect/landmark/spawner/vox_raider, +/turf/simulated/floor/mineral/plastitanium/red/nitrogen, +/area/vox_base) "xGd" = ( /obj/structure/flora/junglebush/large, /turf/simulated/floor/grass/jungle, @@ -43348,6 +47152,27 @@ }, /turf/simulated/floor/plating, /area/centcom/ss220/admin2) +"xJQ" = ( +/obj/item/storage/toolbox/electrical{ + pixel_y = 7 + }, +/obj/item/storage/toolbox/emergency{ + pixel_y = 1 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = -3 + }, +/obj/structure/rack{ + color = "#e67e7e" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/mineral/plastitanium{ + color = "#ffae00"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/shuttle/vox) "xKy" = ( /obj/structure/chair/stool, /obj/effect/decal/syndie_logo{ @@ -43476,9 +47301,28 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/north, /turf/simulated/floor/wood, /area/ghost_bar) +"xOJ" = ( +/obj/machinery/economy/vending/hatdispenser/free, +/turf/simulated/floor/mineral/plastitanium{ + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "xOS" = ( /turf/simulated/floor/carpet/royalblack, /area/centcom/ss220/bar) +"xOV" = ( +/obj/machinery/door/poddoor/shutters{ + density = 0; + icon_state = "open"; + id_tag = "voxshutters"; + name = "Blast Shutters"; + opacity = 0 + }, +/obj/effect/spawner/window/plastitanium, +/turf/simulated/floor/plating/nitrogen, +/area/shuttle/vox) "xPo" = ( /obj/structure/sign/securearea{ pixel_y = -32 @@ -43506,6 +47350,33 @@ /obj/structure/weightmachine/stacklifter, /turf/simulated/floor/wood/oak, /area/centcom/ss220/park) +"xQx" = ( +/obj/structure/closet/secure_closet/freezer/meat/open, +/obj/item/food/raw_bacon, +/obj/item/food/raw_bacon, +/obj/item/food/raw_bacon, +/obj/item/food/raw_bacon, +/obj/item/food/sausage, +/obj/item/food/sausage, +/obj/item/food/rawcutlet, +/obj/item/food/rawcutlet, +/obj/item/food/rawcutlet, +/obj/item/food/catfishmeat, +/obj/item/food/catfishmeat, +/obj/item/food/catfishmeat, +/obj/item/food/catfishmeat, +/obj/item/food/rawcutlet, +/obj/item/food/rawcutlet, +/obj/item/food/rawcutlet, +/obj/item/food/spaghetti, +/obj/item/food/spaghetti, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/dark/nitrogen{ + icon_state = "darkpurple"; + dir = 8; + nitrogen = 103.984 + }, +/area/vox_base) "xRf" = ( /obj/structure/flora/ausbushes/brflowers, /obj/structure/flora/ausbushes/sunnybush, @@ -43521,6 +47392,13 @@ }, /turf/simulated/floor/indestructible/grass/no_creep, /area/centcom/ss220/admin1) +"xRK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/trash, +/obj/effect/landmark/damageturf, +/obj/item/flag/species/vox, +/turf/simulated/floor/plating/nitrogen, +/area/vox_base) "xSw" = ( /obj/machinery/conveyor/north{ id = "SFBQMLoad2" @@ -43849,6 +47727,14 @@ icon_state = "dark_large" }, /area/centcom/ss220/admin1) +"xZU" = ( +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "xZY" = ( /turf/simulated/floor/plasteel/dark{ icon_state = "darkpurple"; @@ -43911,6 +47797,18 @@ }, /turf/simulated/wall/indestructible/riveted, /area/centcom/ss220/admin2) +"yaX" = ( +/obj/machinery/sleeper/upgraded{ + dir = 4; + color = "#73d1cb" + }, +/turf/simulated/floor/mineral/plastitanium{ + color = "#00ffea"; + nitrogen = 103.984; + oxygen = 0; + name = "vox floor" + }, +/area/vox_base) "ybt" = ( /turf/simulated/floor/plating, /area/centcom/ss220/bar) @@ -80181,11 +84079,11 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm +tIm +tIm adJ adJ adJ @@ -80436,15 +84334,15 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm +vfg +oXX +dkA +tIm +tIm +tIm adJ adJ adJ @@ -80693,26 +84591,26 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +qQO +ulE +cfF +jcq +qQO +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm adJ adJ adJ @@ -80950,27 +84848,27 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +qQO +ffo +aAn +sqS +qQO +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +nNr +nNr +tIm +tIm +tIm +tIm adJ adJ adJ @@ -81205,31 +85103,31 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm +tIm +vfg +qQO +mci +qQO +qQO +qQO +qQO +qQO +qQO +tIm +tIm +tIm +nNr +jZi +jZi +nNr +tIm +tIm +tIm +tIm +tIm adJ adJ adJ @@ -81461,34 +85359,34 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +qQO +qQO +qQO +qQO +qQO +vaH +lea +qQO +bYH +peV +koY +qQO +tIm +tIm +tIm +jZi +sQi +kvB +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm adJ adJ adJ @@ -81717,36 +85615,36 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +qQO +qQO +lTC +lTC +lTC +lXs +mFq +aZE +lXs +jOL +sgw +fSe +qQO +usV +tIm +tIm +sQi +kvB +kvB +tIm +kvB +nNr +tIm +tIm +tIm +tIm +tIm +tIm adJ adJ adJ @@ -81974,38 +85872,38 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +qQO +jdg +fMG +mFq +gJK +gch +mFq +mFq +qQO +dpd +cle +dpd +qQO +dzv +tIm +tIm +kvB +kvB +kvB +kvB +kvB +kvB +nNr +nNr +tIm +nNr +tIm +tIm +tIm +tIm adJ adJ adJ @@ -82230,40 +86128,40 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm +qQO +uNc +mFq +gJK +mFq +mFq +mFq +mFq +qQO +fAz +mFq +vXj +qQO +dzv +dzv +oIh +kvB +kvB +bml +dFd +kvB +kvB +kvB +tIm +tIm +nNr +nNr +nNr +tIm +tIm +tIm adJ adJ adJ @@ -82486,42 +86384,42 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm +tIm +qQO +qQO +opf +opf +opf +lXs +gch +mFq +xqb +mFq +mFq +aLe +uIw +kVc +fyy +oIh +kvB +kvB +dRX +kvB +kvB +kvB +sQi +sQi +kvB +kvB +nNr +nNr +nNr +tIm +tIm +tIm adJ adJ adJ @@ -82743,43 +86641,43 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +jZi +jZi +jZi +qQO +qQO +qQO +qQO +qQO +tzg +mFq +qQO +xmO +mFq +tSQ +qQO +kVc +oNF +oIh +kvB +kvB +kvB +kvB +kvB +sQi +sQi +kvB +kvB +nNr +nNr +tIm +tIm +tIm +tIm +tIm +tIm adJ adJ adJ @@ -83000,43 +86898,43 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +jZi +sQi +sQi +jZi +qQO +uGJ +fhG +jBs +lXs +mFq +mFq +qQO +dpd +cle +dpd +qQO +dzv +tIm +tIm +kvB +kvB +kvB +kvB +tIm +kvB +kvB +nNr +nNr +tIm +tIm +tIm +nNr +tIm +tIm +tIm +tIm adJ adJ adJ @@ -83257,44 +87155,44 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +sQi +sQi +kvB +kvB +nsk +lXs +bzY +jTY +gch +xqb +mFq +vaH +lXs +niw +jOL +koY +qQO +dzv +iws +tIm +tIm +kvB +kvB +tIm +tIm +sQi +sQi +tIm +tIm +tIm +tIm +nNr +nNr +tIm +nNr +nNr +tIm +tIm adJ adJ adJ @@ -83508,50 +87406,50 @@ adJ adJ adJ adJ +fYV +fYV +fYV +sQi +sQi +sQi +sQi +kvB +kvB +fYV +fYV +qQO +mER +qJy +gch +lXs +mFq +vaH +qQO +xCT +fSe +mvZ +qQO +oIh +oIh +tIm +sQi +sQi +sQi +tIm adJ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +nNr +nNr +nNr +nNr +nNr +nNr +tIm +tIm adJ adJ adJ @@ -83764,6 +87662,32 @@ adJ adJ adJ adJ +fYV +fYV +fYV +nNr +kvB +sQi +sQi +sQi +sQi +fYV +fYV +fYV +qQO +qQO +qQO +qQO +qQO +cMb +lXs +qQO +qQO +lXs +qQO +qQO +nNr +nNr adJ adJ adJ @@ -83777,38 +87701,12 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm +nNr +tIm +tIm adJ adJ adJ @@ -84020,6 +87918,32 @@ adJ adJ adJ adJ +fYV +fYV +fYV +nNr +nNr +sQi +sQi +kvB +kvB +sQi +jZi +fYV +fYV +fYV +fYV +fYV +fYV +rWN +ltP +tdA +rWN +tIm +bfi +bfi +jZi +nNr adJ adJ adJ @@ -84036,36 +87960,10 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm +tIm adJ adJ adJ @@ -84276,6 +88174,30 @@ adJ adJ adJ adJ +fYV +fYV +fYV +fYV +nNr +jZi +jZi +fYV +fYV +nNr +kvB +sQi +jZi +nNr +nNr +nNr +fYV +fYV +rWN +ltP +lMC +rWN +tIm +jZi adJ adJ adJ @@ -84296,33 +88218,9 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm adJ adJ adJ @@ -84532,6 +88430,30 @@ adJ adJ adJ adJ +fYV +fYV +fYV +qQO +qQO +lXs +lXs +qQO +qQO +fYV +nNr +nNr +kvB +sQi +sQi +kvB +kvB +kvB +bfi +lXs +ltP +ltP +lXs +bfi adJ adJ adJ @@ -84554,32 +88476,8 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm adJ adJ adJ @@ -84789,6 +88687,29 @@ adJ adJ adJ adJ +fYV +qQO +qQO +qQO +cUQ +caQ +rML +ici +qQO +fYV +fYV +nNr +kvB +kvB +sQi +sQi +kvB +sQi +bfi +lXs +etm +lMC +lXs adJ adJ adJ @@ -84810,33 +88731,10 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +bnh +bnh +sQi +tIm adJ adJ adJ @@ -85046,54 +88944,54 @@ adJ adJ adJ adJ +fYV +qQO +cBU +xjQ +eGz +sCG +nGR +khX +qQO +qQO +qQO +lXs +lXs +qQO +qQO +qQO +sQi +jZi +bIN +lXs +pQG +lMC +lXs +adJ +uMP +fVa +fVa +fVa +hzk +fVa +hzk +fVa +fVa +fVa +hzk +hzk +fVa +fVa +fVa +fVa +uMP adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +bnh +bnh +bnh +bnh +jZi +tIm adJ adJ adJ @@ -85303,54 +89201,54 @@ adJ adJ adJ adJ +fYV +qQO +vMH +sCG +sCG +sCG +sCG +btm +qQO +tUs +fVS +mCM +mCM +aoY +aWM +qQO +vfg +nNr +vfg +rWN +ltP +ltP +rWN adJ adJ +uwT +dca +owv +cUx +rOK +nkr +cJQ +hnb +iIS +xJQ +fmf +ukJ +hxK +csa +ifS +ifS adJ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +tIm adJ adJ adJ @@ -85560,54 +89458,54 @@ adJ adJ adJ adJ +fYV +qQO +oup +iLB +iLB +pBy +pBy +oWx +qQO +acb +ltP +mCM +mCM +geI +rvM +qQO +vfg +vYv +vfg +rWN +mVH +pQG +rWN +adJ +adJ +uwT +dca +hAS +rBQ +rBQ +rBQ +rBQ +paK +jDZ +jDZ +jDZ +qVv +gTQ +csa +tBp +ifS adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +nNr +tIm adJ adJ adJ @@ -85817,54 +89715,54 @@ adJ adJ adJ adJ +fYV +qQO +qQO +qQO +fjm +jov +pBy +pBy +kPP +lWQ +pQG +ltP +lMC +lMC +aaR +qQO +vfg +xRK +eqm +rWN +lXs +xzN +aWK +fVa +fVa +fVa +sgd +rBQ +mkZ +ucY +rBQ +ams +hnb +aDo +kfT +aQw +igT +nQM +csa +ifS +ifS adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +nNr +tIm adJ adJ adJ @@ -86074,54 +89972,54 @@ adJ adJ adJ adJ +fYV +fVc +dzm +ieq +fjm +oss +gsV +pBy +ttP +ltP +ltP +ltP +ltP +lMC +etm +sMV +oXY +nNs +sSw +sMV +nNs +nNs +gqf +xnz +ggv +rBQ +uZt +rBQ +rBQ +rBQ +rBQ +kJj +fVa +fVa +fVa +hzk +fVa +fVa +fVa +fVa +uMP adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +bnh +bnh +bnh +jZi +tIm +tIm adJ adJ adJ @@ -86331,54 +90229,54 @@ adJ adJ adJ adJ +fYV +fVc +xlp +sgh +fjm +kTa +oFc +pBy +ttP +ltP +ltP +ltP +ltP +ltP +pQG +sMV +cAa +nNs +qIh +lXs +cAa +qUo +lof +mRZ +fpA +ehI +cEx +ams +jJB +thl +rBQ +cBD +fVa +hsg +dgm +pvI +dqM +jpv +tNJ +fVa +fVa adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +bnh +bnh +jZi +tIm +tIm adJ adJ adJ @@ -86588,54 +90486,54 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +fYV +qQO +qQO +qQO +fjm +eGx +pBy +clB +kPP +vpi +lMC +ltP +ltP +ltP +aaR +qQO +vfg +lJQ +vfg +rWN +nNs +lRa +aWK +fVa +fVa +fVa +fVa +fVa +fVa +xOV +uIM +xOV +fVa +fUj +oJG +oXw +oXw +oXw +oXw +ukU +fVa +adJ +adJ +adJ +adJ +tIm +tIm +tIm adJ adJ adJ @@ -86845,54 +90743,54 @@ adJ adJ adJ adJ +fYV +qQO +fEh +ecx +fBP +pBy +pBy +wiT +qQO +ebI +ebI +ltP +ltP +ebI +ebI +qQO +vfg +vYv +vfg +rWN +sMV +rWN +aWK +fVa +hiv +dCg +flq +pCb +fVa +wRz +awe +tEQ +qcX +cBW +lhZ +uRJ +cEo +oIZ +oIZ +war +fVa adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +tIm +tIm adJ adJ adJ @@ -87102,54 +91000,54 @@ adJ adJ adJ adJ +fYV +qQO +oDt +sCG +rJk +sCG +qjV +uEp +qQO +ebI +ebI +etm +ltP +ebI +ebI +qQO +vfg +bfi +jZi +vfg +nNs +vfg +adJ +iRh +mNT +kpY +kpY +kpY +atP +kpY +kpY +kpY +mqD +ncE +eyO +dBL +eyO +orO +cvb +bvo +fVa adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +tIm +tIm adJ adJ adJ @@ -87359,54 +91257,54 @@ adJ adJ adJ adJ +fYV +qQO +iLB +vHn +czq +qjV +nGR +sHc +qQO +boe +ltP +lMC +lMC +ltP +rdL +lXs +bfi +jZi +kvB +vYv +cAa +vYv +adJ +iRh +msA +oUa +kpY +kpY +wsM +kpY +kpY +kpY +mqD +eyO +dBL +ncE +eyO +jCK +eyO +ncE +hnb adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +nNr +tIm adJ adJ adJ @@ -87616,54 +91514,54 @@ adJ adJ adJ adJ +fYV +qQO +qQO +qQO +kjd +caQ +rML +kSf +qQO +vUt +lqb +pQG +etm +lqb +vUt +lXs +bfi +sQi +kvB +vYv +nNs +vYv +adJ +fVa +fVa +pZI +kpY +kpY +fVa +wRz +awe +gBF +qcX +lfF +eyO +eyO +dBL +tcm +bdL +mZL +fVa adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +nNr +tIm +tIm adJ adJ adJ @@ -87873,54 +91771,54 @@ adJ adJ adJ adJ +fYV +fYV +fYV +qQO +qQO +lXs +lXs +qQO +qQO +kPP +kPP +jBF +nNK +kPP +kPP +qQO +tIm +kvB +kvB +vfg +nNs +vfg adJ adJ +oRm +dZt +aEy +aEy +fVa +fVa +xOV +fVa +fVa +rxQ +eyO +eyO +eyO +kkr +eyO +ncE +hnb adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm +tIm adJ adJ adJ @@ -88129,55 +92027,55 @@ adJ adJ adJ adJ +fYV +fYV +fYV +fYV +fYV +jZi +kvB +nNr +tIm +xOJ +uRr +sLa +clB +clB +fJa +jTn +qOt +tIm +nNr +qQO +qQO +sMV +qQO +qQO +adJ +uMP +fVa +xOV +xOV +fVa +oMl +oMl +oRm +jvH +mFE +uBu +dBL +ncE +qdh +oqU +oqU +fVa adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +tIm +tIm adJ adJ adJ @@ -88386,55 +92284,55 @@ adJ adJ adJ adJ +fYV +fYV +fYV +jZi +jZi +sQi +sQi +kvB +tIm +dOb +ltP +ltP +clB +clB +ltP +ltP +ewQ +tIm +tIm +qQO +iid +xZU +npU +qQO +adJ +adJ +oMl +oMl +oMl +oMl +oMl +fVa +fVa +fVa +sgd +uMU +aKN +aKN +wrO +kOk +kOk +fVa adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +tIm +tIm adJ adJ adJ @@ -88642,56 +92540,56 @@ adJ adJ adJ adJ +fYV +fYV +fYV +nNr +nNr +kvB +sQi +sQi +bfi +tIm +kLm +ltP +pBy +pBy +pBy +pBy +ltP +shm +tIm +tIm +qQO +uwQ +lAL +sAK +qQO +adJ +adJ +adJ +adJ +oMl +eMr +oMl +nbO +hNm +apB +oDY +eyO +eyO +eyO +gZh +szw +uRe +fVa adJ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +tIm adJ adJ adJ @@ -88899,56 +92797,56 @@ adJ adJ adJ adJ +fYV +fYV +fYV +jZi +nNr +qQO +qQO +lXs +lXs +qQO +aeZ +pBy +pBy +mFq +mFq +pBy +pBy +vsS +tIm +nNr +lXs +pyk +lAL +tph +lXs adJ adJ adJ adJ +oMl +eMr +oMl +oWc +eyO +eyO +sOM +nQy +nxO +dBL +tBB +hBr +gtr +fVa adJ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm adJ adJ adJ @@ -89156,56 +93054,56 @@ adJ adJ adJ adJ +fYV +jZi +sQi +sQi +jZi +qQO +vSp +taL +twD +nbC +lMK +clB +mFq +puH +puH +mFq +nYD +qQO +tIm +nNr +qQO +iID +jRj +aWr +qQO adJ adJ +oMl +oMl +fVa +fVa +fVa +fVa +mFE +vHs +fVa +mrT +cvY +cYs +fVa +oiF +fVa +fVa adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm adJ adJ adJ @@ -89415,54 +93313,54 @@ adJ adJ adJ adJ +sQi +sQi +bfi +lXs +xEf +xjm +xjm +fwx +cfi +clB +xFW +rWl +fer +wjj +dKo +qQO +nNr +jZi +qQO +tap +lAL +tSO +qQO adJ adJ adJ adJ +oMl +uMP +fVa +fVa +fVa +fVa +fVa +tCy +tCy +tCy +fVa +fVa +fVa +uMP adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +tIm +tIm +tIm adJ adJ adJ @@ -89672,54 +93570,54 @@ adJ adJ adJ adJ +fYV +nNr +bfi +lXs +sGe +xjm +uPr +nIz +csj +pBy +fYh +hyM +rWl +wjj +clB +lXs +bfi +sQi +qQO +xqR +xZU +aWr +qQO adJ adJ adJ adJ adJ adJ +oMl +uMP +fVa +fVa +fVa +ifS +ajq +ifS +fVa +uMP +oMl adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +tIm +tIm +tIm adJ adJ adJ @@ -89928,6 +93826,33 @@ adJ adJ adJ adJ +fYV +fYV +fYV +bIN +lXs +eul +gJa +uPr +jNl +ndQ +pBy +xFW +kuG +ceb +wjj +clB +lXs +bfi +sQi +lXs +pyk +lAL +mfF +lXs +bfi +bnh +bnh adJ adJ adJ @@ -89945,38 +93870,11 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +bnh +nNr +tIm +tIm +tIm adJ adJ adJ @@ -90186,54 +94084,54 @@ adJ adJ adJ adJ +fYV +fYV +fYV +fxi +nLH +xjm +gJa +fwx +csj +pBy +mFq +oHz +oHz +mFq +pBy +qQO +vYv +vYv +qQO +yaX +lAL +yaX +qQO +bfi +jZi +bnh +bnh +bnh adJ adJ adJ adJ adJ +bnh adJ adJ adJ +bnh adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +bnh +bnh +nNr +acW +tIm +tIm adJ adJ adJ @@ -90443,6 +94341,31 @@ adJ adJ adJ adJ +fYV +fYV +fYV +qQO +jTd +qBV +xQx +bsv +ltP +pBy +pBy +mFq +gch +pBy +pBy +uVh +cAa +nNs +uVh +lAL +lAL +bay +lXs +tIm +bfi adJ adJ adJ @@ -90450,47 +94373,22 @@ adJ adJ adJ adJ +bnh +bnh adJ adJ adJ +bnh +bnh adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +nNr +nNr +acW +acW +tIm adJ adJ adJ @@ -90701,53 +94599,53 @@ adJ adJ adJ adJ +fYV +fYV +qQO +qQO +lXs +lXs +qQO +gNf +uRr +sLa +fmN +eZY +mgM +uRr +qQO +vYv +vYv +qQO +gLD +sYY +gLD +qQO +nNr +nNr +nNr adJ +nNr +nNr adJ adJ adJ +bnh +bnh adJ adJ adJ +bnh +bnh adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +nNr +nNr +nNr +pzo +acW +tIm adJ adJ adJ @@ -90959,52 +94857,52 @@ adJ adJ adJ adJ +fYV +fYV +bfi +bfi +bIN +qQO +qQO +qQO +qQO +lXs +lXs +qQO +qQO +qQO +bfi +sQi +qQO +lXs +qQO +lXs +qQO +tIm +nNr +nNr +nNr +nNr +nNr +nNr +nNr +tIm +tIm +bnh adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +bnh +tIm +tIm +tIm +tIm +tIm +acW +pzo +wOL +tIm +tIm adJ adJ adJ @@ -91213,55 +95111,55 @@ adJ adJ adJ adJ +fYV adJ adJ adJ +sQi +sQi +nNr +nNr adJ adJ adJ +sQi +sQi +sQi +fYV +fYV +fYV +bfi +bfi +sQi adJ +sQi +sQi +sQi +tIm +tIm +tIm +tIm +nNr +nNr +tIm +tIm +tIm +tIm +tIm adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm adJ adJ adJ @@ -91469,56 +95367,56 @@ adJ adJ adJ adJ +fYV +fYV +sQi +sQi +sQi +sQi +sQi +kvB +fYV adJ +fYV +jZi +sQi +sQi adJ adJ +fYV adJ +nNr +jZi +jZi adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +jZi +bfi +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +nNr +nNr +nNr +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm +tIm adJ adJ adJ @@ -91726,15 +95624,55 @@ adJ adJ adJ adJ +fYV +fYV +fYV +fYV +fYV +fYV +fYV +fYV +fYV +fYV +fYV +jZi +sQi adJ adJ adJ adJ adJ adJ +sQi +sQi adJ adJ adJ +nNr +jZi +bfi +nNr +adJ +adJ +adJ +adJ +nNr +nNr +jZi +tIm +tIm +nNr +tIm +tIm +nNr +nNr +nNr +adJ +adJ +nNr +nNr +nNr +nNr adJ adJ adJ @@ -91745,46 +95683,6 @@ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ "} (186,1,1) = {" adJ @@ -91991,46 +95889,46 @@ bQD bQD bQD bQD +fYV +fYV +fYV +fYV +jZi adJ adJ adJ adJ adJ adJ +sQi +sQi adJ adJ adJ adJ +sQi +sQi +sQi adJ adJ adJ adJ adJ adJ +sQi +jZi +tIm +tIm +tIm +nNr +nNr adJ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr +nNr adJ adJ adJ @@ -92251,42 +96149,42 @@ bQD adJ adJ adJ +fYV +fYV adJ adJ adJ adJ adJ adJ +sQi +sQi adJ adJ adJ +sQi +sQi +sQi +sQi +sQi adJ adJ adJ adJ +sQi +sQi +nNr +nNr +nNr +nNr +nNr adJ adJ adJ adJ adJ adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ +nNr adJ adJ adJ @@ -92515,22 +96413,22 @@ adJ adJ nNr nNr -nNr -adJ -adJ -adJ -adJ -adJ -adJ +jZi +sQi +sQi adJ -nNr fYV -nNr fYV +sQi adJ +jZi +fYV +bfi +fYV adJ -nNr -nNr +sQi +jZi +jZi adJ adJ adJ @@ -92763,7 +96661,7 @@ lOn kKi bQD adJ -adJ +nQU adJ adJ adJ @@ -92773,20 +96671,20 @@ nNr fYV fYV fYV +jZi +sQi +sQi nNr +fYV +fYV adJ adJ -adJ -adJ -adJ -adJ -adJ -nNr -nNr +bfi +bIN fYV fYV -nNr -nNr +bfi +jZi fYV nNr adJ @@ -93020,7 +96918,7 @@ lOn kKi bQD adJ -adJ +nQU adJ adJ adJ @@ -93031,19 +96929,19 @@ fYV fYV fYV fYV -nNr +jZi adJ adJ adJ adJ pLx nNr -nNr -nNr -nNr -nNr -nNr -nNr +bIN +bIN +bIN +bIN +bIN +bfi nNr fYV nNr @@ -93277,8 +97175,8 @@ lOn kKi bQD adJ -adJ -adJ +nQU +nQU adJ nNr nNr @@ -93288,7 +97186,7 @@ fYV fYV fYV fYV -nNr +jZi nNr adJ adJ @@ -93298,8 +97196,8 @@ nNr fYV fYV fYV -nNr -nNr +bIN +bIN fYV nNr fYV @@ -93534,266 +97432,266 @@ kKi kKi bQD adJ +nQU +nQU +adJ +nNr +nNr +nNr +fYV +fYV +fYV +fYV +fYV +fYV +nNr +nNr +nNr +nNr +nNr +fYV +fYV +fYV +fYV +fYV +fYV +fYV +fYV +fYV +fYV +nNr +adJ +adJ +adJ +adJ +adJ +adJ +adJ adJ adJ adJ -nNr -nNr -nNr -fYV -fYV -fYV -fYV -fYV -fYV -nNr -nNr -nNr -nNr -nNr -fYV -fYV -fYV -fYV -fYV -fYV -fYV -fYV -fYV -fYV -nNr -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -"} -(193,1,1) = {" -adJ -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -fjg -adJ -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -vpo -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -adJ -bQD -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -kKi -bQD -adJ -adJ -adJ -adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +"} +(193,1,1) = {" +adJ +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +fjg +adJ +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +vpo +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +adJ +bQD +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +kKi +bQD +adJ +nQU +nQU +adJ adJ nNr adJ @@ -94048,9 +97946,9 @@ kKi kKi bQD adJ -adJ -adJ -adJ +nQU +nQU +nQU adJ adJ adJ @@ -94305,7 +98203,7 @@ kKi kKi bQD adJ -adJ +nQU adJ adJ adJ diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index cc0404313f92..5752cef569da 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -59,6 +59,7 @@ #define ANTAG_HUD_ZOMBIE 22 // SS220 EDIT - START #define ANTAG_HUD_BLOOD_BROTHER 23 +#define ANTAG_HUD_VOX_RAIDER 24 // SS220 EDIT - END // Notification action types diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 4e95d97f77c2..041d0f438a67 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -567,6 +567,7 @@ sections["traitor"] = memory_edit_traitor() // SS220 EDIT - START sections["blood_brother"] = memory_edit_blood_brother() + sections["vox_raider"] = memory_edit_vox_raider() // SS220 EDIT - END if(!issilicon(current)) /** CULT ***/ diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 6654de33853a..2c225d28fc1d 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -21,6 +21,12 @@ Make Vampires
Make Abductor Team (Requires Ghosts)
"} + // SS220 ADD - Start + dat += {" + Make Blood Brothers Team
+ Make Vox Raiders
+ "} + // SS220 ASS - End usr << browse(dat, "window=oneclickantag;size=400x400") return diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm index c300570b0dd0..fc4e91bc9369 100644 --- a/code/modules/mob/living/carbon/human/species/vox.dm +++ b/code/modules/mob/living/carbon/human/species/vox.dm @@ -99,6 +99,7 @@ ..() updatespeciescolor(H) H.update_icons() + H.faction |= list("Vox") /datum/species/vox/updatespeciescolor(mob/living/carbon/human/H, owner_sensitive = 1) //Handling species-specific skin-tones for the Vox race. if(H.dna.species.bodyflags & HAS_ICON_SKIN_TONE) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 28d21843b858..592a4e093aa3 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -191,7 +191,7 @@ /obj/item/projectile/bullet/meteorshot/New() ..() - SpinAnimation() + SpinAnimation(5) /obj/item/projectile/bullet/mime damage = 40 diff --git a/config/example/config.toml b/config/example/config.toml index 7956ba0c4353..be0849868295 100644 --- a/config/example/config.toml +++ b/config/example/config.toml @@ -1123,5 +1123,15 @@ tag = "blood_brothers" "Solar Federation General", ] +[[antag_mix_gamemode_configuration.antag_scenarios_configuration]] +tag = "vox_raiders" + +[antag_mix_gamemode_configuration.antag_scenarios_configuration.params] +"required_players" = 45 +"cost" = 45 +"weight" = 1 +"antag_cap" = 4 +"team_size" = 4 +"candidates_required" = 2 ################################################################ diff --git a/icons/mob/hud/antaghud.dmi b/icons/mob/hud/antaghud.dmi index 1958ee5ea135..89fcc70782c9 100644 Binary files a/icons/mob/hud/antaghud.dmi and b/icons/mob/hud/antaghud.dmi differ diff --git a/modular_ss220/_defines220/_defines220.dme b/modular_ss220/_defines220/_defines220.dme index 3c297f31f9fb..a3d87dc8cf52 100644 --- a/modular_ss220/_defines220/_defines220.dme +++ b/modular_ss220/_defines220/_defines220.dme @@ -6,7 +6,7 @@ #include "code/signals_mob/signals_mob_main.dm" #include "code/signals_mob/signals_mob_silicon.dm" #include "code/signals_mob/signals_mob_simple.dm" -#include "code/role_preferences.dm" +#include "code/antagonists.dm" #include "code/gamemode.dm" #include "code/signals_keybindings.dm" #include "code/signals_obj.dm" diff --git a/modular_ss220/_defines220/code/antagonists.dm b/modular_ss220/_defines220/code/antagonists.dm new file mode 100644 index 000000000000..9ec47589ae1a --- /dev/null +++ b/modular_ss220/_defines220/code/antagonists.dm @@ -0,0 +1,6 @@ +#define ROLE_BLOOD_BROTHER "blood brother" +#define ROLE_VOX_RAIDER "vox raider" + +#define VOX_RAID_FREQ 1220 + +GLOBAL_LIST_EMPTY(raider_spawn) diff --git a/modular_ss220/_defines220/code/gamemode.dm b/modular_ss220/_defines220/code/gamemode.dm index 555859244f6c..239da29ff7b3 100644 --- a/modular_ss220/_defines220/code/gamemode.dm +++ b/modular_ss220/_defines220/code/gamemode.dm @@ -1 +1,4 @@ #define SPECIAL_ROLE_BLOOD_BROTHER "Blood Brother" +#define SPECIAL_ROLE_VOX_RAIDER "Vox Raider" + +#define isvoxcash(W) (istype(W, /obj/item/stack/vox_cash)) diff --git a/modular_ss220/_defines220/code/role_preferences.dm b/modular_ss220/_defines220/code/role_preferences.dm deleted file mode 100644 index d65f3c910f61..000000000000 --- a/modular_ss220/_defines220/code/role_preferences.dm +++ /dev/null @@ -1 +0,0 @@ -#define ROLE_BLOOD_BROTHER "blood brother" diff --git a/modular_ss220/antagonists/_antagonists.dm b/modular_ss220/antagonists/_antagonists.dm index ed703929a3bd..6efc0791e1b8 100644 --- a/modular_ss220/antagonists/_antagonists.dm +++ b/modular_ss220/antagonists/_antagonists.dm @@ -1,8 +1,23 @@ /datum/modpack/antagonists name = "Антагонисты и режимы" desc = "Добавляет новые режимы и антагонистов." - author = "Gaxeer, dj-34" + author = "Gaxeer, dj-34, PhantomRU" /datum/modpack/antagonists/initialize() - GLOB.special_roles |= ROLE_BLOOD_BROTHER GLOB.huds += new/datum/atom_hud/antag/hidden() + GLOB.special_roles |= ROLE_BLOOD_BROTHER + + GLOB.huds += new/datum/atom_hud/antag() + GLOB.special_roles |= ROLE_VOX_RAIDER + + SSradio.ANTAG_FREQS |= list(VOX_RAID_FREQ) + + SSradio.radiochannels |= list( + //"Special Ops" = DTH_FREQ, + "VoxCom" = VOX_RAID_FREQ, + ) + + GLOB.department_radio_keys |= list( + ":VR" = "VoxCom", "#VR" = "VoxCom", ".VR" = "VoxCom", + ":vr" = "VoxCom", "#vr" = "VoxCom", ".vr" = "VoxCom", + ) diff --git a/modular_ss220/antagonists/_antagonists_vox_raiders.dme b/modular_ss220/antagonists/_antagonists_vox_raiders.dme new file mode 100644 index 000000000000..3d5856d7d9b5 --- /dev/null +++ b/modular_ss220/antagonists/_antagonists_vox_raiders.dme @@ -0,0 +1,62 @@ +//#include "_antagonists.dm" + +// Antag Mix +// #include "code/antag_mix/antag_mix.dm" +// #include "code/antag_mix/scenarios/antag_scenario.dm" +// #include "code/antag_mix/scenarios/antag_team_scenario.dm" +// #include "code/antag_mix/scenarios/minor_scenarios.dm" +#include "code/antag_mix/scenarios/major_scenarios.dm" +// #include "code/configuration/antag_mix_configuration.dm" +// #include "code/mind/memory_edit.dm" +#include "code/antag_datum.dm" +#include "code/objectives.dm" +#include "code/completion.dm" + +// Objects +#include "code/landmarks.dm" +#include "code/radio.dm" +#include "code/guns/dartgun_ammo.dm" +#include "code/guns/dartgun.dm" +#include "code/guns/spikegun_ammo.dm" +#include "code/guns/spikegun.dm" +#include "code/guns/biogun_ammo.dm" +#include "code/guns/biogun.dm" + +// Blood Brothers +//#include "code/blood_brothers/blood_brothers_datum.dm" +//#include "code/blood_brothers/blood_brothers_team.dm" + +// Vox Raiders +#include "code/vox_raider/vox_raider_datum.dm" +#include "code/vox_raider/vox_raider_mode.dm" +#include "code/vox_raider/vox_raider_team.dm" + +// Vox Raiders - Objects +#include "code/vox_raider/objects/vox_cash.dm" +#include "code/vox_raider/objects/packs/vox_shop_defines.dm" +#include "code/vox_raider/objects/vox_shop.dm" +#include "code/vox_raider/objects/vox_trade_instrument.dm" +#include "code/vox_raider/objects/vox_trade.dm" +#include "code/vox_raider/objects/vox_objects.dm" +#include "code/vox_raider/clothing/vox_backpack.dm" +#include "code/vox_raider/clothing/vox_clothing.dm" +#include "code/vox_raider/clothing/vox_gloves.dm" +#include "code/vox_raider/clothing/vox_outfit.dm" +#include "code/vox_raider/clothing/vox_shoes.dm" +#include "code/vox_raider/clothing/vox_suit_armor.dm" +#include "code/vox_raider/clothing/vox_suit_rig.dm" + +// Vox Raiders - Packs +#include "code/vox_raider/objects/packs/vox_shop_pack.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_bio.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_clothes.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_consumables.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_equipment.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_goods.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_medicine.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_melee.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_merc.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_raider.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_dart.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_spike.dm" +#include "code/vox_raider/objects/packs/vox_shop_pack_kit.dm" diff --git a/modular_ss220/antagonists/code/antag_datum.dm b/modular_ss220/antagonists/code/antag_datum.dm new file mode 100644 index 000000000000..30da48284bec --- /dev/null +++ b/modular_ss220/antagonists/code/antag_datum.dm @@ -0,0 +1,40 @@ +/datum/antagonist/proc/make_body(loc_spawn, datum/mind/mind, try_use_preference = FALSE, species_name = null, list/possible_species) + var/datum/character_save/character + var/mob/living/carbon/human/H = mind.current + if(!H) + H = new + H.forceMove(get_turf(loc_spawn)) + var/new_name = H.real_name + + var/client/client = mind.current.client + if(try_use_preference && client && client.prefs && length(client.prefs.character_saves)) + var/temp_species_name = species_name + if(!temp_species_name) + if(length(possible_species)) + temp_species_name = pick(possible_species) + else + temp_species_name = "Human" + for(var/datum/character_save/temp_character in client.prefs.character_saves) + if(temp_character.species == temp_species_name) + character = temp_character + species_name = temp_species_name + new_name = random_name(character.gender, character.species) + break + + if(!character) + // Randomize appearance + character = new + if(!species_name) + species_name = pick(get_safe_species()) + character.species = species_name + new_name = random_name(H.gender, species_name) + character.randomise() + + character.copy_to(H) + H.rename_character(H.real_name, new_name) + + // species + H.cleanSE() //No fat/blind/colourblind/epileptic/whatever ops. + H.overeatduration = 0 + H.flavor_text = null + H.update_body() diff --git a/modular_ss220/antagonists/code/antag_mix/antag_mix.dm b/modular_ss220/antagonists/code/antag_mix/antag_mix.dm index 842375a5842e..c71469c3957b 100644 --- a/modular_ss220/antagonists/code/antag_mix/antag_mix.dm +++ b/modular_ss220/antagonists/code/antag_mix/antag_mix.dm @@ -7,6 +7,8 @@ var/max_antag_fraction = 1 /// How much budget has left var/budget = 0 + /// Scenarious for choose + var/list/datum/antag_scenario/list_scenarios = list() /// List of scenarios chosen on `pre_setup` stage, and which will be applied on `post_setup` var/list/datum/antag_scenario/executed_scenarios = list() @@ -14,10 +16,11 @@ /datum/game_mode/antag_mix/New() . = ..() apply_configuration() + list_scenarios = subtypesof(/datum/antag_scenario) /datum/game_mode/antag_mix/pre_setup() - var/list/datum/antag_scenario/possible_scenarios = subtypesof(/datum/antag_scenario) + var/list/datum/antag_scenario/possible_scenarios = list_scenarios var/list/mob/new_player/ready_players = get_ready_players() var/ready_players_amount = length(ready_players) @@ -26,6 +29,7 @@ var/list/datum/antag_scenario/acceptable_scenarios = initialize_acceptable_scenarios(possible_scenarios, ready_players_amount) if(!length(acceptable_scenarios)) + log_antag_mix("Invalid game mode pre setup antag_mix - acceptable scenarios.") return FALSE budget = calculate_budget(ready_players_amount) @@ -97,7 +101,7 @@ if(!length(drafted_scenarios) || (current_antag_fraction >= max_antag_fraction)) break - var/datum/antag_scenario/picked_scenario = pickweight(drafted_scenarios) + var/datum/antag_scenario/picked_scenario = length(drafted_scenarios) == 1 ? drafted_scenarios[1] : pickweight(drafted_scenarios) if(picked_scenario.cost > budget_left) drafted_scenarios.Remove(picked_scenario) continue @@ -114,11 +118,17 @@ log_antag_mix("Scenario '[picked_scenario.name]' with: cost '[picked_scenario.cost]', weight '[picked_scenario.weight]' was picked [picked_scenarios[picked_scenario]] times") log_antag_mix("Antagonist fraction is '[current_antag_fraction]'") + if(picked_scenario.execution_once) + drafted_scenarios.Remove(picked_scenario) + if(!length(picked_scenarios)) log_antag_mix("No antag scenarios were picked. Let another game mode roll.") return FALSE for(var/picked_scenario in picked_scenarios) + log_debug("Antag mix picked scenario: [picked_scenario], spend budget [picked_scenarios[picked_scenario] - 1] times, left budget: [budget_left], players ready: [players_ready_amount]") + //var/scaled_times_picked = length(picked_scenarios) > 1 ? picked_scenarios[picked_scenario] - 1 : 1 + //spend_budget(pre_execute_scenario(picked_scenario, scaled_times_picked, players_ready_amount)) spend_budget(pre_execute_scenario(picked_scenario, picked_scenarios[picked_scenario] - 1, players_ready_amount)) if(budget != budget_left && current_antag_fraction < max_antag_fraction && length(drafted_scenarios)) @@ -134,13 +144,15 @@ /datum/game_mode/antag_mix/proc/pre_execute_scenario(datum/antag_scenario/scenario_to_pre_execute, scaled_times, players_ready_amount) if(!scenario_to_pre_execute) + log_antag_mix("Scenario '[scenario_to_pre_execute.name]' can't pre execute.") return 0 + log_antag_mix("Scenario '[scenario_to_pre_execute.name]' params: scaled_times [scaled_times]; players_ready_amount: [players_ready_amount]") scenario_to_pre_execute.trim_candidates() scenario_to_pre_execute.scaled_times = scaled_times if(!scenario_to_pre_execute.pre_execute(players_ready_amount)) - log_antag_mix("Scenario '[scenario_to_pre_execute.name]' failed to pre execute") + log_antag_mix("Scenario '[scenario_to_pre_execute.name]' failed to pre execute.") return 0 executed_scenarios |= scenario_to_pre_execute diff --git a/modular_ss220/antagonists/code/antag_mix/scenarios/antag_scenario.dm b/modular_ss220/antagonists/code/antag_mix/scenarios/antag_scenario.dm index 8064fab91231..211792b72c83 100644 --- a/modular_ss220/antagonists/code/antag_mix/scenarios/antag_scenario.dm +++ b/modular_ss220/antagonists/code/antag_mix/scenarios/antag_scenario.dm @@ -29,6 +29,8 @@ var/antag_cap = 1 /// How many possible candidates are required for this scenario to be executed var/candidates_required = 1 + /// Will the scenario be selected repeatedly or only once? + var/execution_once = FALSE /// Jobs that can't be chosen for the scenario var/list/restricted_roles = list() /// Jobs that can't be chosen for the scenario if 'GLOB.configuration.gamemode.prevent_mindshield_antags' is TRUE @@ -40,6 +42,17 @@ /// List of players that were drafted to be antagonists of this scenario var/list/datum/mind/assigned = list() + /// Is the antagonist chosen from the station's crew? + var/is_crew_antag = TRUE + /// Spawn antagonist at landmark name + var/obj/effect/landmark/spawner/landmark_type = /obj/effect/landmark/spawner/xeno + /// What species can be used for the antagonist + var/list/possible_species = list("Human") + /// Recommended species at prefs to increase the chance of getting a role for RP-experienced players + var/list/recommended_species_active_pref + /// Multiplication modifier that increases the chance of landing by N times + var/recommended_species_mod = 0 + /datum/antag_scenario/New() if(abstract) stack_trace("Instantiation of abstract antag scenarios is prohibited.") @@ -47,7 +60,6 @@ apply_configuration() - /** * Gets configuration params from [GLOB.configuration.antag_mix_gamemode.params_by_scenario], * which are grouped by `config_tag` property of `/datum/antag_scenario`. @@ -101,11 +113,15 @@ /datum/antag_scenario/proc/pre_execute(population) var/assigned_before = length(assigned) var/calculated_antag_cap = get_total_antag_cap(population) + modif_chance_recommended_species() + for(var/i in 1 to calculated_antag_cap) if(!length(candidates)) + log_debug("Antag scenario 'candidates' null length") break - var/mob/new_player/chosen = pick_n_take(candidates) + var/mob/new_player/chosen = pickweight(candidates) + candidates.Remove(chosen) // We will check if something bad happened with candidates here. if(!chosen || !chosen.mind) @@ -116,8 +132,15 @@ var/datum/mind/chosen_mind = chosen.mind assigned |= chosen_mind chosen_mind.special_role = antag_special_role + if(!is_crew_antag) + chosen_mind.assigned_role = antag_special_role chosen_mind.restricted_roles |= restricted_roles + var/string_names = "" + for(var/mob/new_player/i in assigned) + string_names += "[i.name](ckey:[i.ckey]), " + log_debug("pre_execute: calculated_antag_cap = [calculated_antag_cap]; assigned_before = [assigned_before]; length(candidates): [length(candidates)]; assigned: [string_names];") + return length(assigned) - assigned_before > 0 /** @@ -127,7 +150,8 @@ /datum/antag_scenario/proc/execute() for(var/datum/mind/assignee as anything in assigned) assignee.add_antag_datum(antag_datum) - + if(!is_crew_antag && !try_make_characters(assigned)) + return FALSE return TRUE /** @@ -178,3 +202,68 @@ if(candidate_mind.assigned_role in restricted_roles) candidates.Remove(candidate) + + +/** + * Create a character if the antagonist should not have a body initially. +*/ +/datum/antag_scenario/proc/try_make_characters(list/datum/mind/assigned) + if(!length(assigned)) + error("Invalid antag scenario - try make characters: Not enough assigned candidates.") + return FALSE + + var/list/landmarks = GLOB.raider_spawn.Copy() + + if(!length(landmarks)) + landmarks = list() + for(var/landmark in GLOB.latejoin) + landmarks.Add(landmark) + + if(!length(landmarks)) + error("Invalid antag scenario - try make characters: Not enough landmarks.") + return FALSE + + var/list/temp_landmarks = list() + for(var/datum/mind/mind in assigned) + if(!length(temp_landmarks)) + temp_landmarks = landmarks.Copy() + var/picked_landmark = pick(temp_landmarks) + temp_landmarks.Remove(picked_landmark) + var/turf/loc_spawn = get_turf(picked_landmark) + + make_character(mind, loc_spawn) + equip_character(mind) + mind.current.dna.species.after_equip_job(null, mind.current) + + return TRUE + +/** + * Сreate characters if the antagonist is not from the crew. +*/ +/datum/antag_scenario/proc/make_character(datum/mind/mind, turf/loc_spawn) + var/picked_species = pick(possible_species) + var/datum/antagonist/temp_antag_datum = locate(antag_datum) in mind.antag_datums + temp_antag_datum.make_body(loc_spawn, mind, TRUE, picked_species, possible_species) + +/datum/antag_scenario/proc/equip_character(datum/mind/mind) + return TRUE +/** + * Recommended species increase the chance of getting a role for RP-experienced players +*/ +/datum/antag_scenario/proc/modif_chance_recommended_species() + if(!length(candidates)) + return + + if(!recommended_species_mod) + return + + if(!length(recommended_species_active_pref)) + return + + for(var/mob/new_player/candidate in candidates) + var/list/datum/character_save/characters = candidate.client.prefs.character_saves + for(var/datum/character_save/character in characters) + if(character.species in recommended_species_active_pref) + candidates[candidate] = recommended_species_mod + else + candidates[candidate] = 1 diff --git a/modular_ss220/antagonists/code/antag_mix/scenarios/antag_team_scenario.dm b/modular_ss220/antagonists/code/antag_mix/scenarios/antag_team_scenario.dm index 40bddc27db76..b79ed269ae21 100644 --- a/modular_ss220/antagonists/code/antag_mix/scenarios/antag_team_scenario.dm +++ b/modular_ss220/antagonists/code/antag_mix/scenarios/antag_team_scenario.dm @@ -14,47 +14,67 @@ var/max_teams = FLOOR((get_total_antag_cap(population) / team_size), 1) message_admins("Max teams: [max_teams]") if(!max_teams) + log_debug("Max teams: ERROR; team_size: [team_size]; antag_cap: [get_total_antag_cap(population)]; population: [population]") return FALSE + var/string_candidates = "" + for(var/mob/new_player/i in candidates) + string_candidates += "[i.name](ckey:[i.ckey]), " + log_debug("Antag scenario candidates: [string_candidates]") + var/teams_before = length(picked_teams) + modif_chance_recommended_species() for(var/i in 1 to max_teams) + log_debug("Antag scenario team №[i] 'candidates' team_size: [team_size]; antag_cap: [get_total_antag_cap(population)]; population: [population]") var/list/datum/mind/members = list() for(var/j in 1 to team_size) if(!length(candidates)) + //log_debug("\[BREAK\] Antag scenario team №[i], size №[j] 'candidates' null length") break - var/mob/new_player/team_member = pick_n_take(candidates) + var/mob/new_player/team_member = pickweight(candidates) + candidates.Remove(team_member) if(!team_member || !team_member.mind) error("For some reason 'null' or mindless candidate was present in [type] 'candidates' list") continue var/datum/mind/chosen_mind = team_member.mind chosen_mind.special_role = antag_special_role + if(!is_crew_antag) + chosen_mind.assigned_role = antag_special_role chosen_mind.restricted_roles |= restricted_roles members += chosen_mind assigned |= chosen_mind - message_admins("Members: [json_encode(members)]") + var/string_names = "" + for(var/datum/mind/m in members) + string_names += "[m.name](ckey:[ckey(m.key)]), " + log_debug("Antag Team Scenario pre_execute team №[i]: members: [string_names];") + // If for some reason, not enough members were found - we will try again - if(team_size > length(members)) + if(team_size > length(members) && length(candidates) > 0) max_teams++ + message_admins("New Antag Team Required №[max_teams]- team_size: [team_size]; length(members): [length(members)]") continue - message_admins("Picked team of: [json_encode(members)]") picked_teams += list(members) + log_debug("Antag Team Scenario pre_execute: length(picked_teams)([length(picked_teams)]) - teams_before([teams_before]): [length(picked_teams) - teams_before]") return length(picked_teams) - teams_before > 0 /datum/antag_scenario/team/execute() for(var/list/team_members in picked_teams) if(!length(team_members)) + error("Invalid antag scenario team execute - not enough team_members.") continue message_admins("Creating team of [json_encode(team_members)]") var/datum/team/new_team = new antag_team(team_members, FALSE) for(var/datum/mind/team_member as anything in new_team.members) team_member.add_antag_datum(antag_datum, new_team) + if(!is_crew_antag) + try_make_characters(new_team.members) return TRUE diff --git a/modular_ss220/antagonists/code/antag_mix/scenarios/major_scenarios.dm b/modular_ss220/antagonists/code/antag_mix/scenarios/major_scenarios.dm new file mode 100644 index 000000000000..44efb1b899a4 --- /dev/null +++ b/modular_ss220/antagonists/code/antag_mix/scenarios/major_scenarios.dm @@ -0,0 +1,31 @@ +/datum/antag_scenario/team/vox_raiders + name = "Vox Raider" + config_tag = "vox_raiders" + abstract = FALSE + antag_role = ROLE_VOX_RAIDER + antag_special_role = SPECIAL_ROLE_VOX_RAIDER + antag_datum = /datum/antagonist/vox_raider + required_players = 45 + cost = 45 + candidates_required = 2 + antag_team = /datum/team/vox_raiders + weight = 1 + antag_cap = 4 // 1 команда на сценарий из 2-4 воксов + team_size = 4 + candidates_required = 2 + execution_once = TRUE + + is_crew_antag = FALSE + landmark_type = /obj/effect/landmark/spawner/vox_raider + possible_species = list("Vox") + recommended_species_active_pref = list("Vox") + recommended_species_mod = 8 + + +/datum/antag_scenario/team/vox_raiders/equip_character(datum/mind/mind) + . = ..() + var/mob/living/carbon/human/H = mind.current + if(H) + H.equipOutfit(/datum/outfit/vox) + H.faction = list("Vox") + mind.offstation_role = TRUE diff --git a/modular_ss220/antagonists/code/completion.dm b/modular_ss220/antagonists/code/completion.dm new file mode 100644 index 000000000000..6659dc602ab9 --- /dev/null +++ b/modular_ss220/antagonists/code/completion.dm @@ -0,0 +1,85 @@ +/datum/controller/subsystem/ticker/declare_completion() + . = ..() + var/list/end_of_round_info = list() + end_of_round_info += mode.get_extra_end_of_round_antagonist_statistics() + if(!length(end_of_round_info)) + return + to_chat(world, chat_box_purple(end_of_round_info.Join("
"))) + +/datum/game_mode/proc/get_extra_end_of_round_antagonist_statistics() + . = list() + . += auto_declare_completion_vox_raiders() + listclearnulls(.) + +/datum/game_mode/proc/auto_declare_completion_vox_raiders() + if(!length(vox_raiders)) + return + + var/list/text = list("
Прогресс Вокс'ов:") + var/obj/machinery/vox_trader/trader = locate() in GLOB.machines + if(!trader) + text += "
" + return text.Join("") + trader.synchronize_traders_stats() + + text += "

Всего заработано Кикиридитов: [trader.all_values_sum]" + + var/precious_count = 0 + var/biggest_index + for(var/I in trader.precious_collected_dict) + var/value = trader.precious_collected_dict[I]["value"] + var/count = trader.precious_collected_dict[I]["count"] + precious_count += count + if(!biggest_index || trader.precious_collected_dict[biggest_index]["value"] <= value) + biggest_index = I + text += "
Самый дорогой проданный товар: \ +
[biggest_index] ([trader.precious_collected_dict[biggest_index]["value"]]), \ + всего продано [trader.precious_collected_dict[biggest_index]["count"]] штук." + + text += "

Собраны доступы:
" + var/list/checked_accesses = list() + var/list/region_codes = list( + REGION_GENERAL, REGION_SECURITY, REGION_MEDBAY, REGION_RESEARCH, + REGION_ENGINEERING, REGION_SUPPLY, REGION_COMMAND, REGION_CENTCOMM + ) + for(var/code in region_codes) + var/list/region_accesses + if(code != REGION_CENTCOMM) + region_accesses = get_region_accesses(code) + else + region_accesses = list(ACCESS_CENT_GENERAL) + for(var/access in trader.collected_access_list) + if(access in region_accesses) + region_accesses.Remove(access) + checked_accesses["[code]"] = region_accesses + var/access_count = 0 + for(var/code in region_codes) + if(length(checked_accesses["[code]"]) > 0) + continue + switch(code) + if(REGION_GENERAL) + text += "Собраны все общественные и сервисные доступы!" + if(REGION_SECURITY) + text += "
Собраны все доступы службы безопасности!" + if(REGION_MEDBAY) + text += "
Собраны все доступы медицинского отдела!" + if(REGION_RESEARCH) + text += "
Собраны все доступы научного отдела!" + if(REGION_ENGINEERING) + text += "
Собраны все инженерные доступы!" + if(REGION_SUPPLY) + text += "
Собраны все доступы отдела снабжения!" + if(REGION_COMMAND) + text += "
Собраны все командные доступы!" + if(REGION_CENTCOMM) + text += "
Получен особый доступ к Центральному Командованию!" + access_count++ + if(!access_count) + text += "
Ни одного полного отдела доступов!" + + text += "

Собраны технологии:" + for(var/i in trader.collected_tech_dict) + text += "
[i]: [trader.collected_tech_dict[i]]" + + text += "
" + return text.Join("") diff --git a/modular_ss220/antagonists/code/guns/biogun.dm b/modular_ss220/antagonists/code/guns/biogun.dm new file mode 100644 index 000000000000..c0261847946d --- /dev/null +++ b/modular_ss220/antagonists/code/guns/biogun.dm @@ -0,0 +1,167 @@ +/obj/item/gun/throw/biogun + name = "biogun" + desc = "Метатель живых био-ядер." + icon = 'modular_ss220/antagonists/icons/guns/vox_guns.dmi' + lefthand_file = 'modular_ss220/antagonists/icons/guns/inhands/guns_lefthand.dmi' + righthand_file = 'modular_ss220/antagonists/icons/guns/inhands/guns_righthand.dmi' + icon_state = "biogun" + item_state = "spike_long" + var/inhand_charge_sections = 3 + w_class = WEIGHT_CLASS_HUGE + max_capacity = 3 + projectile_speed = 2 + projectile_range = 30 + valid_projectile_type = /obj/item/biocore + var/is_vox_private = FALSE + +/obj/item/gun/throw/biogun/pickup(mob/user) + . = ..() + if(!is_vox_private) + is_vox_private = TRUE + to_chat(user, span_notice("Оружие инициализировало вас, более никто кроме Воксов не сможет им воспользоваться.")) + +/obj/item/gun/throw/biogun/afterattack(atom/target, mob/living/user, flag, params) + if(is_vox_private && !isvox(user)) + if(prob(20)) + to_chat(user, span_notice("Оружие отказывается с вами работать и не активируется.")) + return FALSE + . = ..() + +/obj/item/gun/throw/biogun/Initialize(mapload) + . = ..() + update_icon() + +/obj/item/gun/throw/biogun/process_chamber() + . = ..() + update_icon() + +/obj/item/gun/throw/biogun/update_icon_state() + . = ..() + var/num = length(loaded_projectiles) + (to_launch ? 1 : 0) + var/inhand_ratio = CEILING((num / max_capacity) * inhand_charge_sections, 1) + var/new_item_state = "[initial(item_state)][inhand_ratio]" + item_state = new_item_state + +/obj/item/gun/throw/biogun/update_overlays() + . = ..() + var/num = length(loaded_projectiles) + (to_launch ? 1 : 0) + if(num) + num = min(num, max_capacity) + . += "[icon_state]_charge[num]" + +/obj/item/gun/throw/biogun/notify_ammo_count() + update_icon() + var/amount = get_ammocount() + if(get_ammocount() >= 1) + return span_notice("[src] заряжен [amount]/[max_capacity].") + return span_notice("[src] разряжен.") + + +// ============== Существа ============== + +/mob/living/simple_animal/hostile/viscerator/vox + name = "vox viscerator" + icon = 'modular_ss220/antagonists/icons/objects/critter.dmi' + faction = list("Vox") + mob_biotypes = MOB_ROBOTIC + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = -1, CLONE = -1, STAMINA = 0, OXY = 0) + can_be_on_fire = FALSE + fire_damage = 1 + unsuitable_atmos_damage = 0 + mob_size = MOB_SIZE_TINY + flying = FALSE + melee_damage_lower = 10 + melee_damage_upper = 15 + +/mob/living/simple_animal/hostile/viscerator/vox/Process_Spacemove(movement_dir) + return TRUE + +/mob/living/simple_animal/hostile/viscerator/vox/stamina + name = "stakikamka" + desc = "Небольшое биомеханическое проворное существо на высоких ножках, мешающее и изматывающее тех, кому оно не понравилось." + icon_state = "stamina" + icon_living = "stamina" + density = FALSE + obj_damage = 0 + speed = 0.25 + melee_damage_type = STAMINA + melee_damage_lower = 5 + melee_damage_upper = 20 + attacktext = "утомляет" + +/mob/living/simple_animal/hostile/viscerator/vox/stamina/death(gibbed) + if(prob(30)) + xgibs(loc) + . = ..() + +/mob/living/simple_animal/hostile/viscerator/vox/acid + name = "acikikid" + desc = "Небольшое биомеханическое крабоподобное существо из пасти которого стекает кислота, которую тот наматывает на свои маленькие острые клешни." + icon_state = "acid" + icon_living = "acid" + health = 50 + maxHealth = 50 + obj_damage = 20 + melee_damage_type = BURN + melee_damage_lower = 10 + melee_damage_upper = 30 + attacktext = "выжигает" + mob_size = MOB_SIZE_SMALL + +/mob/living/simple_animal/hostile/viscerator/vox/acid/death(gibbed) + xgibs(loc) + . = ..() + +/mob/living/simple_animal/hostile/viscerator/vox/kusaka + name = "kusakika" + desc = "Маленькое биомеханическое существо с острыми клыкам с половину его тела." + icon_state = "kusaka" + icon_living = "kusaka" + density = FALSE + speed = 0.5 + obj_damage = 0 + melee_damage_lower = 5 + melee_damage_upper = 10 + armour_penetration_flat = 30 + attacktext = "кусает" + +/mob/living/simple_animal/hostile/viscerator/vox/kusaka/death(gibbed) + if(prob(20)) + robogibs(loc) + . = ..() + +/mob/living/simple_animal/hostile/viscerator/vox/taran + name = "tarakikan" + desc = "Весомое пластинчатое биомеханическое существо." + icon_state = "taran" + icon_living = "taran" + speed = 2 + health = 100 + maxHealth = 100 + obj_damage = 50 + melee_damage_lower = 10 + melee_damage_upper = 20 + armour_penetration_flat = 20 + attacktext = "таранит" + mob_size = MOB_SIZE_HUMAN + +/mob/living/simple_animal/hostile/viscerator/vox/taran/death(gibbed) + robogibs(loc) + . = ..() + +/mob/living/simple_animal/hostile/viscerator/vox/tox + name = "toxikikic" + desc = "Маленькое биомеханическое иглоподобное существо." + icon_state = "tox" + icon_living = "tox" + density = FALSE + melee_damage_type = TOX + melee_damage_lower = 5 + melee_damage_upper = 15 + armour_penetration_flat = 80 + attacktext = "вонзается" + +/mob/living/simple_animal/hostile/viscerator/vox/tox/death(gibbed) + xgibs(loc) + . = ..() diff --git a/modular_ss220/antagonists/code/guns/biogun_ammo.dm b/modular_ss220/antagonists/code/guns/biogun_ammo.dm new file mode 100644 index 000000000000..6610a3d229bc --- /dev/null +++ b/modular_ss220/antagonists/code/guns/biogun_ammo.dm @@ -0,0 +1,87 @@ +/obj/item/biocore + name = "biocore" + desc = "Острое биоядро с живым организмом внутри. Оно пульсирует и ответно реагирует толчками на каждые взаимодействия." + icon = 'modular_ss220/antagonists/icons/guns/vox_guns.dmi' + icon_state = "biocore" + item_state = "cottoncandy_purple" + + var/mob/living/mob_spawner_type = /mob/living/simple_animal/hostile/creature + var/spawn_amount = 1 // сколько в одном ядре + var/is_spin = TRUE + + // Дополнительные эффекты при втыкании в гуманоида + var/stun = 0 + var/weaken = 5 SECONDS + var/knockdown = 2 SECONDS + var/paralyze = 0 + var/irradiate = 0 + var/stutter = 5 SECONDS + var/slur = 0 + var/eyeblur = 0 + var/drowsy = 0 + var/stamina = 30 + var/jitter = 10 SECONDS + throwforce = 20 + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/biocore/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) + playsound(loc,'sound/weapons/bolathrow.ogg', 50, TRUE) + . = ..() + +/obj/item/biocore/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + spawn_mobs() + hurt_impact(hit_atom) + +/obj/item/biocore/AltClick(mob/user) + . = ..() + spawn_mobs() + +/obj/item/biocore/proc/spawn_mobs() + var/turf/T = get_turf(src) + for(var/i in 1 to spawn_amount) + var/atom/movable/x = new mob_spawner_type(T) + x.admin_spawned = admin_spawned + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(x, pick(NORTH,SOUTH,EAST,WEST)) + do_sparks(5, TRUE, T) + qdel(src) + +/obj/item/biocore/proc/hurt_impact(atom/hit_atom) + if(isliving(hit_atom)) + var/mob/living/L = hit_atom + L.apply_effects(stun, weaken, knockdown, paralyze, irradiate, slur, stutter, eyeblur, drowsy, 0, stamina, jitter) + + +// ============== Ядра ============== + +/obj/item/biocore/viscerator + name = "biocore (viscerator)" + spawn_amount = 3 + mob_spawner_type = /mob/living/simple_animal/hostile/viscerator/vox + +/obj/item/biocore/stamina + name = "biocore (stakikamka)" + spawn_amount = 3 + mob_spawner_type = /mob/living/simple_animal/hostile/viscerator/vox/stamina + +/obj/item/biocore/acid + name = "biocore (acikikid)" + spawn_amount = 1 + mob_spawner_type = /mob/living/simple_animal/hostile/viscerator/vox/acid + +/obj/item/biocore/kusaka + name = "biocore (kusakika)" + spawn_amount = 4 + mob_spawner_type = /mob/living/simple_animal/hostile/viscerator/vox/kusaka + +/obj/item/biocore/taran + name = "biocore (tarakikan)" + spawn_amount = 1 + mob_spawner_type = /mob/living/simple_animal/hostile/viscerator/vox/taran + +/obj/item/biocore/tox + name = "biocore (toxikikic)" + spawn_amount = 3 + mob_spawner_type = /mob/living/simple_animal/hostile/viscerator/vox/tox diff --git a/modular_ss220/antagonists/code/guns/dartgun.dm b/modular_ss220/antagonists/code/guns/dartgun.dm new file mode 100644 index 000000000000..6fa13e5b3cdf --- /dev/null +++ b/modular_ss220/antagonists/code/guns/dartgun.dm @@ -0,0 +1,164 @@ +/obj/item/gun/syringe/dart_gun + name = "dart gun" + desc = "Компактный метатель дротиков для доставки химических коктейлей." + icon = 'modular_ss220/antagonists/icons/guns/vox_guns.dmi' + lefthand_file = 'modular_ss220/antagonists/icons/guns/inhands/guns_lefthand.dmi' + righthand_file = 'modular_ss220/antagonists/icons/guns/inhands/guns_righthand.dmi' + icon_state = "dartgun" + item_state = "dartgun" + var/cartridge_overlay = "dartgun_cartridge_overlay" + max_syringes = 5 + var/list/valid_cartridge_types = list( + /obj/item/storage/dart_cartridge, + /obj/item/storage/dart_cartridge/combat, + /obj/item/storage/dart_cartridge/drugs, + /obj/item/storage/dart_cartridge/medical, + /obj/item/storage/dart_cartridge/pain, + ) + var/valid_dart_type = /obj/item/reagent_containers/syringe/dart + var/obj/item/storage/dart_cartridge/cartridge_loaded + var/pixel_y_overlay_div = 5 // сколько у нас делений для спрайта оверлея ("Позиций") + var/pixel_y_overlay_offset = 2 // на сколько пикселей смещаем оверлей при полном делении + var/is_vox_private = FALSE + +/obj/item/gun/syringe/dart_gun/pickup(mob/user) + . = ..() + if(!is_vox_private) + is_vox_private = TRUE + to_chat(user, span_notice("Оружие инициализировало вас, более никто кроме Воксов не сможет им воспользоваться.")) + +/obj/item/gun/syringe/dart_gun/afterattack(atom/target, mob/living/user, flag, params) + if(is_vox_private && !isvox(user)) + if(prob(20)) + to_chat(user, span_notice("Оружие отказывается с вами работать и не активируется.")) + return FALSE + . = ..() + +/obj/item/gun/syringe/dart_gun/Destroy() + qdel(cartridge_loaded) + . = ..() + +/obj/item/gun/syringe/dart_gun/update_overlays() + . = ..() + if(cartridge_loaded) + var/pixel_y_offset = 0 + var/num = length(syringes) + if(num) + pixel_y_offset = -(pixel_y_overlay_div - pixel_y_overlay_div * num / max_syringes) * pixel_y_overlay_offset + . += image(icon = icon, icon_state = cartridge_overlay, pixel_y = pixel_y_offset) + if(cartridge_loaded.overlay_state_color) + . += image(icon = icon, icon_state = "[cartridge_overlay]_[cartridge_loaded.overlay_state_color]", pixel_y = pixel_y_offset) + . += icon_state + +/obj/item/gun/syringe/dart_gun/attackby(obj/item/A, mob/user, params, show_msg) + if(cartridge_loaded) + for(var/hold_type in cartridge_loaded.can_hold) + if(!istype(A, hold_type)) + continue + if(insert_syringe_to_cartridge(A) && user && user.unEquip(A)) + to_chat(user, span_notice("Вы загрузили [A] в [cartridge_loaded] в [src]!")) + return ..() + to_chat(user, "Картридж [src] полон!") + return FALSE + else + for(var/cartridge_type in valid_cartridge_types) + if(istype(A, cartridge_type)) + if("[A.type]" != "[cartridge_type]") // Исключаем сабтипы + continue + if(user && !user.unEquip(A)) + return TRUE + to_chat(user, span_notice("Вы вставили [A] в [src]!")) + cartridge_load(A) + return ..() + if(!chambered.BB && istype(A, valid_dart_type) && length(syringes) < max_syringes) + return ..() + if(user) + to_chat(user, "[A] не вмещается в [src]!") + return TRUE + +/obj/item/gun/syringe/dart_gun/proc/insert_syringe_to_cartridge(obj/item/syringe) + if(length(syringes) >= max_syringes) + return FALSE + syringe.forceMove(cartridge_loaded) + syringes.Add(syringe) + process_chamber() + return TRUE + +/obj/item/gun/syringe/dart_gun/proc/cartridge_load(obj/item/A, mob/user) + A.forceMove(src) + cartridge_loaded = A + for(var/obj/item/I in A.contents) + syringes.Add(I) + process_chamber() + +/obj/item/gun/syringe/dart_gun/proc/cartridge_unload(mob/user) + if(!cartridge_loaded) + return FALSE + user.put_in_hands(cartridge_loaded) + //user.unEquip(cartridge_loaded) + syringes.Cut() + cartridge_loaded.update_icon() + cartridge_loaded = null + update_icon() + +/obj/item/gun/syringe/dart_gun/attack_self(mob/living/user) + if(cartridge_loaded) + playsound(src, 'modular_ss220/antagonists/sound/guns/m79_unload.ogg', 50, 1) + to_chat(user, span_notice("Вы выгрузили [cartridge_loaded] с [src].")) + cartridge_unload(user) + process_chamber() + return TRUE + return ..() + +/obj/item/gun/syringe/dart_gun/process_chamber() + . = ..() + if(!cartridge_loaded) + update_icon() + return + + // Вышвыриваем картридж + if(!length(syringes)) + var/turf/current_turf = get_turf(src) + cartridge_loaded.forceMove(current_turf) + cartridge_loaded.throw_at(target = current_turf, range = 3, speed = 1) + cartridge_loaded.pixel_x = rand(-10, 10) + cartridge_loaded.pixel_y = rand(-4, 16) + cartridge_loaded.update_icon() + cartridge_loaded = null + update_icon() + playsound(src, 'modular_ss220/antagonists/sound/guns/m79_break_open.ogg', 50, 1) + return + + playsound(src, 'modular_ss220/antagonists/sound/guns/m79_reload.ogg', 50, 1) + update_icon() + + +// ============== Шприцеметы ============== + +/obj/item/gun/syringe/dart_gun/extended + name = "extended dart gun" + desc = "Расширенный метатель дротиков и шприцов для доставки химических коктейлей." + icon_state = "dartgun_ext" + valid_cartridge_types = list( + /obj/item/storage/dart_cartridge, + /obj/item/storage/dart_cartridge/combat, + /obj/item/storage/dart_cartridge/drugs, + /obj/item/storage/dart_cartridge/medical, + /obj/item/storage/dart_cartridge/pain, + /obj/item/storage/dart_cartridge/extended + ) + +/obj/item/gun/syringe/dart_gun/big + name = "capacious dart gun" + desc = "Вместительный метатель дротиков для доставки химических коктейлей." + icon_state = "dartgun_big" + max_syringes = 10 + valid_cartridge_types = list( + /obj/item/storage/dart_cartridge, + /obj/item/storage/dart_cartridge/combat, + /obj/item/storage/dart_cartridge/drugs, + /obj/item/storage/dart_cartridge/medical, + /obj/item/storage/dart_cartridge/pain, + /obj/item/storage/dart_cartridge/big, + /obj/item/storage/dart_cartridge/big/random + ) diff --git a/modular_ss220/antagonists/code/guns/dartgun_ammo.dm b/modular_ss220/antagonists/code/guns/dartgun_ammo.dm new file mode 100644 index 000000000000..907c494b7197 --- /dev/null +++ b/modular_ss220/antagonists/code/guns/dartgun_ammo.dm @@ -0,0 +1,217 @@ +/obj/item/storage/dart_cartridge + name = "dart cartridge" + desc = "Подставка для дротиков." + icon = 'modular_ss220/antagonists/icons/guns/ammo.dmi' + icon_state = "darts-0" + var/icon_state_base = "darts" + var/overlay_state = "darts_overlay" + var/overlay_state_color + item_state = "rcdammo" + origin_tech = "materials=2" + storage_slots = 5 + can_hold = list( + /obj/item/reagent_containers/syringe/dart + ) + var/list/dart_fill_types = list() // Каким дротиком заполним? + var/dart_fill_num = 5 // Сколько дротиков заполним + var/dart_overlay_num = 5 // Максимальное отображение дротиков на оверлее + +/obj/item/storage/dart_cartridge/update_icon() + . = ..() + var/num = length(contents) + if(!num) + icon_state = "[icon_state_base]-0" + else if(num > dart_overlay_num) + icon_state = "[icon_state_base]-[dart_overlay_num]" + else + icon_state = "[icon_state_base]-[num]" + return TRUE + +/obj/item/storage/dart_cartridge/update_overlays() + . = ..() + if(overlay_state_color) + . += "[overlay_state]_[overlay_state_color]" + +/obj/item/storage/dart_cartridge/populate_contents() + if(length(dart_fill_types)) + for(var/i in 1 to dart_fill_num+1) //На один больше чтобы фулл заряжался + 1 внутрь + var/dart_type = length(dart_fill_types) == 1? dart_fill_types[1] : pick(dart_fill_types) + new dart_type(src) + update_icon() + + +/obj/item/reagent_containers/syringe/dart + name = "dart" + desc = "Дротик содержащий химические коктейли." + icon = 'modular_ss220/antagonists/icons/objects/dart.dmi' + amount_per_transfer_from_this = 15 + volume = 15 + + +// ============= Картриджи ============= + +/obj/item/storage/dart_cartridge/extended + name = "extended dart cartridge" + desc = "Расширенная подставка для дротиков и шприцов." + overlay_state_color = "ext" + can_hold = list( + /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/syringe/dart + ) + +/obj/item/storage/dart_cartridge/big + name = "capacious dart cartridge" + desc = "Увеличенная подставка для дротиков." + overlay_state_color = "big" + storage_slots = 10 + dart_fill_num = 10 + +/obj/item/storage/dart_cartridge/combat + name = "combat dart cartridge" + desc = "Подставка для боевых дротиков для нанесения повреждений." + overlay_state_color = "red" + dart_fill_types = list(/obj/item/reagent_containers/syringe/dart/combat) + +/obj/item/storage/dart_cartridge/medical + name = "medical dart cartridge" + overlay_state_color = "teal" + desc = "Подставка для полезных дротиков для восстановления." + dart_fill_types = list( + /obj/item/reagent_containers/syringe/dart/medical, + /obj/item/reagent_containers/syringe/dart/medical, + /obj/item/reagent_containers/syringe/dart/medical, + /obj/item/reagent_containers/syringe/dart/medical/tainted, + /obj/item/reagent_containers/syringe/dart/medical/tainted, + /obj/item/reagent_containers/syringe/dart/medical/heal, + ) + +/obj/item/storage/dart_cartridge/pain + name = "pain dart cartridge" + overlay_state_color = "yellow" + desc = "Подставка для вредных дротиков, приносящих боль и страдания." + dart_fill_types = list(/obj/item/reagent_containers/syringe/dart/pain) + +/obj/item/storage/dart_cartridge/drugs + name = "drugs dart cartridge" + overlay_state_color = "purple" + desc = "Подставка для вредных дротиков-наркотиков." + dart_fill_types = list(/obj/item/reagent_containers/syringe/dart/drugs) + +/obj/item/storage/dart_cartridge/big/random + name = "big random dart cartridge" + desc = "Случайный набор дротиков с химикатами." + dart_fill_types = list( + /obj/item/reagent_containers/syringe/dart/combat, + /obj/item/reagent_containers/syringe/dart/medical, + /obj/item/reagent_containers/syringe/dart/pain, + /obj/item/reagent_containers/syringe/dart/drugs, + /obj/item/reagent_containers/syringe/dart/pancuronium, + /obj/item/reagent_containers/syringe/dart/sarin, + /obj/item/reagent_containers/syringe/dart/capulettium, + /obj/item/reagent_containers/syringe/dart/bioterror, + /obj/item/reagent_containers/syringe/dart/heparin, + /obj/item/reagent_containers/syringe/dart/calomel, + /obj/item/reagent_containers/syringe/dart/epinephrine, + /obj/item/reagent_containers/syringe/dart/charcoal, + /obj/item/reagent_containers/syringe/dart/antiviral + ) + +// ============= Шприцы ============= + +/obj/item/reagent_containers/syringe/dart/combat + name = "combat dart" + desc = "Боевой дротик, заставляющий цель потерять равновесие и впоследствии обездвижиться." + list_reagents = list("space_drugs" = 5, "ether" = 5, "haloperidol" = 5) + +/obj/item/reagent_containers/syringe/dart/pain + name = "pain dart" + desc = "Зудящий порошок с примесью гистамина для страданий." + list_reagents = list("itching_powder" = 10, "histamine" = 5) + +/obj/item/reagent_containers/syringe/dart/drugs + name = "pain dart" + desc = "Отвратительная смесь наркотиков, вызывающая галлюцинации, потерю координации и рассудка." + list_reagents = list( + "space_drugs" = 5, "lsd" = 5, "fliptonium" = 2, "jenkem" = 2, "happiness" = 1) + +/obj/item/reagent_containers/syringe/dart/antiviral + name = "dart (spaceacillin)" + desc = "Содержит противовирусные вещества." + list_reagents = list("spaceacillin" = 15) + +/obj/item/reagent_containers/syringe/dart/charcoal + name = "dart (charcoal)" + desc = "Содержит древесный уголь для лечения токсинов и повреждений от них." + list_reagents = list("charcoal" = 15) + +/obj/item/reagent_containers/syringe/dart/epinephrine + name = "dart (Epinephrine)" + desc = "Содержит адреналин для стабилизации пациентов." + list_reagents = list("epinephrine" = 15) + +/obj/item/reagent_containers/syringe/dart/calomel + name = "dart (calomel)" + desc = "Содержит токсичный каломель для очистки от других веществ в организме." + list_reagents = list("calomel" = 15) + +/obj/item/reagent_containers/syringe/dart/heparin + name = "dart (heparin)" + desc = "Содержит гепарин, антикоагулянт крови." + list_reagents = list("heparin" = 15) + +/obj/item/reagent_containers/syringe/dart/bioterror + name = "bioterror dart" + desc = "Содержит несколько парализующих реагентов." + list_reagents = list("neurotoxin" = 5, "capulettium" = 5, "sodium_thiopental" = 5) + +/obj/item/reagent_containers/syringe/dart/capulettium + name = "capulettium dart" + desc = "Для упокоения целей." + list_reagents = list("capulettium" = 15) + +/obj/item/reagent_containers/syringe/dart/sarin + name = "toxin dart" + desc = "Смертельный нейротоксин в малых дозах." + list_reagents = list("sarin" = 15) + +/obj/item/reagent_containers/syringe/dart/pancuronium + name = "pancuronium dart" + desc = "Мощный парализующий яд" + list_reagents = list("pancuronium" = 15) + + +// ============= Шприцы - Медицинские ============= + +/obj/item/reagent_containers/syringe/dart/medical + name = "medical dart" + desc = "Медицинский дротик для восстановления большинства повреждений." + list_reagents = list("silver_sulfadiazine" = 5, "styptic_powder" = 5, "charcoal" = 5) + +// 1 уровень +/obj/item/reagent_containers/syringe/dart/medical/tainted + name = "tainted medical dart" + desc = "На вид будто этой капсулой зачерпнули из первичного бульона. Непонятно кто это сделал, но кажется оно должно лечить. Пахнет мерзко." + list_reagents = list("menthol" = 3, "doctorsdelight" = 3, "synthnsoda" = 3, "tomatojuice" = 3, "milk" = 3) + +// 2 уровень +/obj/item/reagent_containers/syringe/dart/medical/heal + name = "heal medical dart" + desc = "Медицинский дротик для лечения тяжелых травм." + list_reagents = list("silver_sulfadiazine" = 5, "styptic_powder" = 5, "synthflesh" = 5) + +/obj/item/reagent_containers/syringe/dart/medical/stabilizing + name = "stabilizing medical dart" + desc = "Медицинский дротик для стабилизации пациента." + list_reagents = list("epinephrine" = 5, "salineglucosevirusfood" = 5, "weak_omnizine" = 5) + +// 3 уровень (1 час) +/obj/item/reagent_containers/syringe/dart/medical/advanced + name = "advanced medical dart" + desc = "Медицинский дротик стимулирующий быструю регенерацию." + list_reagents = list("bicaridine" = 5, "kelotane" = 5, "omnizine" = 5) + +// 4 уровень (2 час) +/obj/item/reagent_containers/syringe/dart/medical/combat + name = "combat medical dart" + desc = "передовой дротик с эксперементальными стимулянтами." + list_reagents = list("combatlube" = 5, "surge_plus" = 5, "syndicate_nanites" = 5) diff --git a/modular_ss220/antagonists/code/guns/spikegun.dm b/modular_ss220/antagonists/code/guns/spikegun.dm new file mode 100644 index 000000000000..f09f4fd4ae35 --- /dev/null +++ b/modular_ss220/antagonists/code/guns/spikegun.dm @@ -0,0 +1,115 @@ +/// Шипомет перезаряжаемый через "вокс батарейки" +/obj/item/gun/energy/spike + name = "\improper Vox spike gun" + desc = "Оружие причудливой формы с яркими пурпурными энергетическими светочами. Рукоять предназначена для когтистой руки. Выстреливает энергетическими кристаллами." + icon = 'modular_ss220/antagonists/icons/guns/vox_guns.dmi' + lefthand_file = 'modular_ss220/antagonists/icons/guns/inhands/guns_lefthand.dmi' + righthand_file = 'modular_ss220/antagonists/icons/guns/inhands/guns_righthand.dmi' + icon_state = "spike" + item_state = "spike" + charge_sections = 4 + inhand_charge_sections = 4 + w_class = WEIGHT_CLASS_NORMAL + fire_sound_text = "air gap" + can_suppress = FALSE + burst_size = 3 // выстреливает всегда очередью + shaded_charge = TRUE + can_charge = FALSE + charge_delay = 4 + cell_type = /obj/item/stock_parts/cell/vox_spike + ammo_type = list(/obj/item/ammo_casing/energy/vox_spike) + var/can_reload = TRUE + var/is_vox_private = FALSE + +/obj/item/gun/energy/spike/pickup(mob/user) + . = ..() + if(!is_vox_private) + is_vox_private = TRUE + to_chat(user, span_notice("Оружие инициализировало вас, более никто кроме Воксов не сможет им воспользоваться.")) + +/obj/item/gun/energy/spike/afterattack(atom/target, mob/living/user, flag, params) + if(is_vox_private && !isvox(user)) + if(prob(20)) + to_chat(user, span_notice("Оружие отказывается с вами работать и не активируется.")) + return FALSE + . = ..() + +/obj/item/gun/energy/spike/emp_act() + return + +// Перезарядка батареями +/obj/item/gun/energy/spike/attackby(obj/item/I, mob/user, params) + if(can_reload && istype(I, cell_type) && user && user.unEquip(I)) + to_chat(user, span_notice("Вы заменили [I] в [src]!")) + if(cell) + user.put_in_hands(cell) + I.forceMove(src) + cell = I + on_recharge() + update_icon() + playsound(src, 'modular_ss220/antagonists/sound/guns/m79_break_open.ogg', 50, 1) + return TRUE + . = ..() + +/obj/item/gun/energy/spike/update_icon_state() + . = ..() + var/inhand_ratio = CEILING((cell.charge / cell.maxcharge) * inhand_charge_sections, 1) + var/new_item_state = "[initial(item_state)][inhand_ratio]" + item_state = new_item_state + + +/// Самозаряжаемый шипомет, шипы чуть-чуть слабее, но зато самовосстанавливаются и лучше проходят через броню. +/obj/item/gun/energy/spike/long + name = "\improper Vox spike longgun" + desc = "Оружие причудливой формы с яркими пурпурными энергетическими светочами. Рукоять предназначена для когтистой руки. Выстреливает длинными энергетическими самовосстановимыми кристаллами с увеличенной проникающей способностью." + icon_state = "spike_long" + item_state = "spike_long" + charge_sections = 6 + inhand_charge_sections = 6 + selfcharge = TRUE + charge_delay = 4 + ammo_type = list(/obj/item/ammo_casing/energy/vox_spike/long) + +/obj/item/gun/energy/spike/long/process() + if(selfcharge) + if(charge_tick < charge_delay) + return ..() + playsound(src, 'modular_ss220/antagonists/sound/guns/m79_reload.ogg', 25, 1) + . = ..() + + +/// Шипомет заряжаемый за счет нутриентов ВОКСа или крови и мяса гуманоида другой расы. Сильные и болезненные шипы, но всего 4. +/// Батарея несъемная. +/obj/item/gun/energy/spike/bio + name = "\improper Vox spike biogun" + desc = "Оружие причудливой формы с шипами-трубками для нанизывания на руку. Рукоять предназначена для когтистой руки и имеет заостренные полые шипы. Выстреливает большими энергетическими распадающимися заостренными кристаллами, выматывающие цель и рикошетящую о поверхность." + icon_state = "spike_bio" + item_state = "spike_bio" + w_class = WEIGHT_CLASS_HUGE + charge_sections = 4 + inhand_charge_sections = 4 + ammo_type = list(/obj/item/ammo_casing/energy/vox_spike/big) + selfcharge = TRUE + can_reload = FALSE + charge_delay = 8 + var/nutrition_cost = 20 // Сколько нутриентов тратится за 1 тик + var/brute_cost = 5 // Цена за то что ты не вокс + var/stamine_cost = 20 // Цена за то что ты не вокс + +/obj/item/gun/energy/spike/bio/process() + if(selfcharge) + if(!ishuman(loc)) + return FALSE + if(charge_tick < charge_delay) + return ..() + var/mob/living/carbon/human/user = loc + if(user.nutrition <= NUTRITION_LEVEL_HYPOGLYCEMIA) + return ..() + user.adjust_nutrition(-nutrition_cost) + if(!isvox(user)) + user.adjustBruteLoss(brute_cost) + user.adjustStaminaLoss(stamine_cost) + playsound(src, 'modular_ss220/antagonists/sound/guns/m79_reload.ogg', 25, 1) + + . = ..() + diff --git a/modular_ss220/antagonists/code/guns/spikegun_ammo.dm b/modular_ss220/antagonists/code/guns/spikegun_ammo.dm new file mode 100644 index 000000000000..1a66e3165386 --- /dev/null +++ b/modular_ss220/antagonists/code/guns/spikegun_ammo.dm @@ -0,0 +1,64 @@ +/obj/item/stock_parts/cell/vox_spike + name = "\improper vox spike power cell" + desc = "Зарядная пурпурная светящаяся стандартная ячейка для шипометов." + icon = 'modular_ss220/antagonists/icons/guns/ammo.dmi' + icon_state = "spike_cell" + maxcharge = 1000 + + +/obj/item/ammo_casing/energy/vox_spike + name = "шип" + desc = "Маленький самозаряжающийся кристаллический шип испускающий энергетический вайб." + muzzle_flash_effect = null + e_cost = 100 + delay = 3 //and delay has to be stored here on energy guns + select_name = "spike" + fire_sound = 'modular_ss220/antagonists/sound/guns/gun_es4.ogg' + projectile_type = /obj/item/projectile/bullet/vox_spike + e_cost = 25 // 1000 / (50*3) = ~13 выстрелов + +/obj/item/projectile/bullet/vox_spike + name = "шип" + desc = "Маленький самозаряжающийся кристаллический шип испускающий энергетический вайб." + icon_state = "magspear" + armour_penetration_flat = 20 + damage = 7 + knockdown = 0 + var/bleed_loss = 5 + +/obj/item/projectile/bullet/vox_spike/on_hit(atom/target, blocked = 0) + if((blocked < 100) && ishuman(target)) + var/mob/living/carbon/human/H = target + H.bleed(bleed_loss) + . = ..() + + +/obj/item/ammo_casing/energy/vox_spike/long + projectile_type = /obj/item/projectile/bullet/vox_spike/long + e_cost = 50 // 1000 / (50*3) = 6 выстрелов + +/obj/item/projectile/bullet/vox_spike/long + damage = 5 + armour_penetration_flat = 60 + jitter = 1 SECONDS + forcedodge = 3 + bleed_loss = 3 + + +/obj/item/ammo_casing/energy/vox_spike/big + projectile_type = /obj/item/projectile/bullet/vox_spike/big + e_cost = 80 // 1000 / (80*3) = 4 выстрела + +/obj/item/projectile/bullet/vox_spike/big + damage = 15 + stamina = 50 + stutter = 2 SECONDS + jitter = 4 SECONDS + speed = 2 + bleed_loss = 10 + + tile_dropoff = 1 //how much damage should be decremented as the bullet moves + tile_dropoff_s = 2.5 //same as above but for stamina + + ricochets_max = 3 + ricochet_chance = 50 diff --git a/modular_ss220/antagonists/code/landmarks.dm b/modular_ss220/antagonists/code/landmarks.dm new file mode 100644 index 000000000000..b0626d724dc9 --- /dev/null +++ b/modular_ss220/antagonists/code/landmarks.dm @@ -0,0 +1,8 @@ +/obj/effect/landmark/spawner/vox_raider + name = "Vox Raider" + icon = 'modular_ss220/antagonists/icons/landmark.dmi' + icon_state = "vox_raider" + +/obj/effect/landmark/spawner/vox_raider/Initialize(mapload) + . = ..() + GLOB.raider_spawn += src diff --git a/modular_ss220/antagonists/code/mind/memory_edit.dm b/modular_ss220/antagonists/code/mind/memory_edit.dm index fbae99d8eeba..0b4c90df1250 100644 --- a/modular_ss220/antagonists/code/mind/memory_edit.dm +++ b/modular_ss220/antagonists/code/mind/memory_edit.dm @@ -1,13 +1,3 @@ -/datum/mind/proc/memory_edit_blood_brother() - . = _memory_edit_header("blood brother") - if(has_antag_datum(/datum/antagonist/blood_brother)) - . += "BLOOD BROTHER|Remove" - else - . += "Make Blood Brother" - - . += _memory_edit_role_enabled(ROLE_BLOOD_BROTHER) - - /datum/mind/proc/clear_antag_datum(datum/antagonist/antag_datum_to_clear) if(!has_antag_datum(antag_datum_to_clear)) return @@ -27,8 +17,131 @@ if("clear") clear_antag_datum(/datum/antagonist/blood_brother) if("make") - var/datum/antagonist/blood_brother/brother_antag_datum = new - if(!brother_antag_datum.admin_add(usr, src)) - qdel(brother_antag_datum) + var/datum/antagonist/blood_brother/antag_datum = new + if(!antag_datum.admin_add(usr, src)) + qdel(antag_datum) + + if(href_list["vox_raider"]) + switch(href_list["vox_raider"]) + if("clear") + clear_antag_datum(/datum/antagonist/vox_raider) + if("make") + var/datum/antagonist/vox_raider/antag_datum = new + if(!antag_datum.admin_add(usr, src)) + qdel(antag_datum) + if("landmark") + var/picked_landmark = pick(GLOB.raider_spawn) + var/turf/loc_spawn = get_turf(picked_landmark) + current.forceMove(loc_spawn) . = ..() + +/datum/mind/proc/memory_edit_blood_brother() + . = _memory_edit_header("blood brother") + if(has_antag_datum(/datum/antagonist/blood_brother)) + . += "BLOOD BROTHER|Remove" + else + . += "Make Blood Brother" + + . += _memory_edit_role_enabled(ROLE_BLOOD_BROTHER) + +/datum/mind/proc/memory_edit_vox_raider() + . = _memory_edit_header("vox raider") + if(has_antag_datum(/datum/antagonist/vox_raider)) + . += "VOX RAIDER|Remove" + . += "
To Vox Base." + else + . += "Make Vox Raider" + + . += _memory_edit_role_enabled(ROLE_VOX_RAIDER) + +// Если ОФФы добавят нового антагониста с разумом, то потребуется смещение (кто-нибудь дайте мне разума) +// Используется в /datum/admins/proc/one_click_antag() +/datum/admins/Topic(href, href_list) + . = ..() + if(href_list["makeAntag"]) + switch(href_list["makeAntag"]) + if("8") + log_admin("[key_name(usr)] has spawned a blood brothers.") + if(!makeBloodBrothersTeam()) + to_chat(usr, "К сожалению, недостаточно кандидатов.") + if("9") + log_admin("[key_name(usr)] has spawned a vox raiders.") + if(!makeVoxRaidersTeam()) + to_chat(usr, "К сожалению, недостаточно кандидатов.") + + +/datum/admins/proc/makeBloodBrothersTeam() + var/confirm = alert("Создать новую команду?", "Подтверждение", "Да", "Нет") + if(confirm != "Да") + return FALSE + + var/amount = input("Размер команды (1-20)?", "Подтверждение") + if(!amount || amount > 20 || amount <= 0) + return FALSE + + var/datum/game_mode/antag_mix/temp = new + if(GLOB.configuration.gamemode.prevent_mindshield_antags) + temp.restricted_jobs += temp.protected_jobs + var/datum/antagonist/blood_brother/antag_datum = new + var/list/mob/living/carbon/human/candidates = list() + for(var/mob/living/carbon/human/applicant in GLOB.player_list) + if(CandCheck(ROLE_BLOOD_BROTHER, applicant, temp)) + candidates += applicant + if(!length(candidates)) + return FALSE + qdel(antag_datum) + + var/num = min(length(candidates), amount) + var/list/assigned = list() + for(var/i = 0, i < num, i++) + if(i >= amount) + break + var/H = pick(candidates) + assigned.Add(H) + candidates.Remove(H) + + new /datum/team/blood_brothers_team(assigned, TRUE) + + log_admin("[key_name(owner)] tried making Blood Brothers with One-Click-Antag") + message_admins("[key_name_admin(owner)] tried making Blood Brothers with One-Click-Antag") + + +/datum/admins/proc/makeVoxRaidersTeam() + var/confirm = alert("Создать новую команду?", "Подтверждение", "Да", "Нет") + if(confirm != "Да") + return FALSE + + var/amount = input("Размер команды (1-20)?", "Подтверждение") + if(!amount || amount > 20 || amount <= 0) + return FALSE + + var/datum/game_mode/antag_mix/temp = new + if(GLOB.configuration.gamemode.prevent_mindshield_antags) + temp.restricted_jobs += temp.protected_jobs + + var/datum/antagonist/vox_raider/antag_datum = new + var/list/mob/living/carbon/human/candidates = list() + for(var/mob/living/carbon/human/applicant in GLOB.player_list) + if(CandCheck(ROLE_VOX_RAIDER, applicant, temp)) + candidates += applicant + if(!length(candidates)) + return FALSE + + var/num = min(length(candidates), amount) + var/list/assigned = list() + for(var/i = 0, i < num, i++) + if(i >= amount) + break + var/H = pick(candidates) + assigned.Add(H) + candidates.Remove(H) + + antag_datum.offer_to_equip(owner, assigned) + qdel(antag_datum) + + new /datum/team/vox_raiders(assigned, TRUE) + + log_admin("[key_name(owner)] tried making Vox Raiders with One-Click-Antag") + message_admins("[key_name_admin(owner)] tried making Vox Raiders with One-Click-Antag") + return TRUE diff --git a/modular_ss220/antagonists/code/objectives.dm b/modular_ss220/antagonists/code/objectives.dm new file mode 100644 index 000000000000..8eb3bc18ac00 --- /dev/null +++ b/modular_ss220/antagonists/code/objectives.dm @@ -0,0 +1,119 @@ +/datum/objective/raider_steal + name = "Raider theft" + needs_target = FALSE + /// Сколько ценностей надо украсть + var/precious_amount = 30 + /// На сколько ценность должна быть "цена" чтобы её засчитать + var/precious_value = 200 + /// Сколько нужно украсть дополнительных ценностей в зависимости от количества людей в игре + var/dynamic_amount = 10 + /// Каждый X игроков добавляем доп. число ценностей + var/dynamic_player = 15 + +/datum/objective/raider_steal/update_explanation_text() + explanation_text = "Соберите [precious_amount] ценностей, у каждой из которых цена минимум на [precious_value] кикиридитов. Все ценности должны быть приняты Расчичетчикиком." + +/datum/objective/raider_steal/New(text, datum/team/team_to_join) + . = ..() + generate_amount_goal() + +/datum/objective/raider_steal/proc/generate_amount_goal() + var/num = 1 + for(var/mob/new_player/P in GLOB.player_list) + if(P.client && P.ready) + num++ + precious_amount += round((num / dynamic_player) * dynamic_amount) + update_explanation_text() + return precious_amount + +/datum/objective/raider_steal/check_completion() + var/list_count = 0 + var/obj/machinery/vox_trader/trader = locate() in GLOB.machines + if(!trader) + return + trader.synchronize_traders_stats() + for(var/I in trader.precious_collected_dict) + list_count += trader.precious_collected_dict[I]["count"] + if(list_count >= precious_amount) + return TRUE + return FALSE + +/datum/objective/raider_entirety_steal + name = "Raider entirety theft" + needs_target = FALSE + /// Общая сумма ценностей + var/precious_value = 50000 + /// Сколько нужно украсть дополнительных ценностей на каждого игрока + var/dynamic_value = 750 + +/datum/objective/raider_entirety_steal/update_explanation_text() + explanation_text = "Соберите ценностей на сумму [precious_value]. Все ценности должны быть приняты Расчичетчикиком." + +/datum/objective/raider_entirety_steal/New(text, datum/team/team_to_join) + . = ..() + generate_value_goal() + +/datum/objective/raider_entirety_steal/proc/generate_value_goal() + var/num = 1 + var/precious_amount + for(var/mob/new_player/P in GLOB.player_list) + if(P.client && P.ready) + num++ + precious_amount += num * dynamic_value + update_explanation_text() + return precious_amount + +/datum/objective/raider_entirety_steal/check_completion() + var/value_sum = 0 + for(var/obj/machinery/vox_trader/trader in GLOB.machines) + value_sum += trader.all_values_sum + if(value_sum >= precious_value) + return TRUE + return FALSE + + +/datum/objective/raider_collection_access + name = "Raider access collect" + needs_target = FALSE + /// Сколько доступов надо украсть + var/access_amount + +/datum/objective/raider_collection_access/update_explanation_text() + explanation_text = "Соберите [access_amount] уникальных доступов. Все доступы должны быть приняты Расчичетчикиком." + +/datum/objective/raider_collection_access/New(text, datum/team/team_to_join) + . = ..() + access_amount = length(get_all_accesses()) + update_explanation_text() + +/datum/objective/raider_collection_access/check_completion() + for(var/obj/machinery/vox_trader/trader in GLOB.machines) + if(length(trader.collected_access_list) >= access_amount) + return TRUE + return FALSE + + +/datum/objective/raider_collection_tech + name = "Raider technology collect" + needs_target = FALSE + var/tech_amount = 9 // Всего в игре технологий (12): 9 обычных, 1 комбат, 1 нелегал, 1 абдуктор. + var/tech_min_level = 7 // 7-8 - максимум для обычных технологий, не считая гейтов и т.п. + +/datum/objective/raider_collection_tech/update_explanation_text() + explanation_text = "Соберите [tech_amount] уникальных технологий [tech_min_level] или больше уровня. Все технологии должны быть приняты Расчичетчикиком." + +/datum/objective/raider_collection_tech/New(text, datum/team/team_to_join) + . = ..() + update_explanation_text() + +/datum/objective/raider_collection_tech/check_completion() + for(var/obj/machinery/vox_trader/trader in GLOB.machines) + if(length(trader.collected_tech_dict)) + var/count = 0 + for(var/tech in trader.collected_tech_dict) + if(trader.collected_tech_dict[tech] >= tech_min_level) + count++ + if(count >= tech_amount) + return TRUE + return FALSE + diff --git a/modular_ss220/antagonists/code/radio.dm b/modular_ss220/antagonists/code/radio.dm new file mode 100644 index 000000000000..a87c28d54dfd --- /dev/null +++ b/modular_ss220/antagonists/code/radio.dm @@ -0,0 +1,40 @@ +// =============== FREQUENCE =============== +// Часть модуля кода частот в /datum/modpack/antagonists/initialize() + + +/datum/controller/subsystem/blackbox/LogBroadcast(freq) + if(sealed) + return + switch(freq) + if(VOX_RAID_FREQ) + record_feedback("tally", "radio_usage", 1, "voxcom") + . = ..() + + +// =============== HEADSETS =============== + +/obj/item/radio/headset/vox + name = "vox headset" + desc = "Наушник дальней связи для поддержания связи со стаей." + origin_tech = "syndicate=3" + ks1type = /obj/item/encryptionkey/vox + requires_tcomms = FALSE + instant = TRUE // Work instantly if there are no comms + freqlock = TRUE + frequency = VOX_RAID_FREQ + +/obj/item/radio/headset/vox/alt + name = "vox protect headset" + desc = "Наушник дальней связи для поддержания связи со стаей. Защищает ушные раковины от громких звуков" + icon_state = "com_headset_alt" + item_state = "com_headset_alt" + origin_tech = "syndicate=3" + flags = EARBANGPROTECT + +/obj/item/encryptionkey/vox + name = "syndicate encryption key" + icon = 'modular_ss220/antagonists/icons/trader_machine.dmi' + icon_state = "vox_key" + channels = list("VoxCom" = 1, "Syndicate" = 1) + origin_tech = "syndicate=3" + syndie = TRUE diff --git a/modular_ss220/antagonists/code/vox_raider/clothing/vox_backpack.dm b/modular_ss220/antagonists/code/vox_raider/clothing/vox_backpack.dm new file mode 100644 index 000000000000..c4ce076ac509 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/clothing/vox_backpack.dm @@ -0,0 +1,105 @@ +/obj/item/storage/backpack/vox + name = "vox backpack" + desc = "Рюкзак воксов из плотно переплетенного синтетического волокна. Хорошо защищает спину носителя при побегах и вмещает достаточно добра." + icon_state = "backpack_vox" + item_color = "backpack_vox" + item_state = "backpack_vox" + //var/list/species_restricted = list("Vox") + icon = 'modular_ss220/antagonists/icons/clothing/obj_storage.dmi' + icon_override = 'modular_ss220/antagonists/icons/clothing/mob/back.dmi' + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/back.dmi' + ) + lefthand_file = 'modular_ss220/antagonists/icons/clothing/inhands/clothing_lefthand.dmi' + righthand_file = 'modular_ss220/antagonists/icons/clothing/inhands/clothing_righthand.dmi' + armor = list(MELEE = 5, BULLET = 5, LASER = 15, ENERGY = 10, BOMB = 10, RAD = 30, FIRE = 60, ACID = 50) + resistance_flags = FIRE_PROOF + origin_tech = "syndicate=1" + max_combined_w_class = 35 + +/obj/item/storage/backpack/satchel_flat/vox + name = "vox satchel" + desc = "Ранец воксов из синтетического волокна. Компактный, из-за чего его можно отлично прятать." + icon_state = "satchel_vox" + item_color = "satchel_vox" + item_state = "satchel_vox" + icon = 'modular_ss220/antagonists/icons/clothing/obj_storage.dmi' + icon_override = 'modular_ss220/antagonists/icons/clothing/mob/back.dmi' + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/back.dmi' + ) + lefthand_file = 'modular_ss220/antagonists/icons/clothing/inhands/clothing_lefthand.dmi' + righthand_file = 'modular_ss220/antagonists/icons/clothing/inhands/clothing_righthand.dmi' + resistance_flags = FIRE_PROOF + origin_tech = "syndicate=1" + max_combined_w_class = 25 + +/obj/item/storage/backpack/duffel/vox + name = "vox duffelbag" + desc = "Сумка воксов из синтетического волокна. Емкий, вмещает много добра." + icon_state = "duffel_vox" + item_color = "duffel_vox" + item_state = "duffel_vox" + icon = 'modular_ss220/antagonists/icons/clothing/obj_storage.dmi' + icon_override = 'modular_ss220/antagonists/icons/clothing/mob/back.dmi' + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/back.dmi' + ) + lefthand_file = 'modular_ss220/antagonists/icons/clothing/inhands/clothing_lefthand.dmi' + righthand_file = 'modular_ss220/antagonists/icons/clothing/inhands/clothing_righthand.dmi' + silent = TRUE + zip_time = 2 + resistance_flags = FIRE_PROOF + origin_tech = "syndicate=1" + max_combined_w_class = 45 + allow_same_size = TRUE + cant_hold = list(/obj/item/storage/backpack) + +// Belts + +/obj/item/storage/belt/vox + name = "vox belt" + desc = "Удобный пояс с петельками для ношения всячины." + icon_state = "securitybelt" + item_state = "security" + origin_tech = "syndicate=1" + max_w_class = WEIGHT_CLASS_NORMAL + resistance_flags = FIRE_PROOF + use_item_overlays = TRUE // Will show the tools on the sprite + storage_slots = 7 + max_combined_w_class = 25 + can_hold = list( + /obj/item/crowbar, + /obj/item/screwdriver, + /obj/item/weldingtool, + /obj/item/wirecutters, + /obj/item/wrench, + /obj/item/multitool, + /obj/item/grenade, + /obj/item/flash, + /obj/item/kitchen/knife/combat, + /obj/item/melee/baton, + /obj/item/melee/classic_baton, + /obj/item/flashlight, + /obj/item/restraints/legcuffs/bola, + /obj/item/restraints/handcuffs, + /obj/item/biocore, + /obj/item/stock_parts/cell/vox_spike, + /obj/item/jammer + ) + +/obj/item/storage/belt/vox/bio + name = "bio-vox belt" + desc = "Удобный пояс с плетенными кармашками для ношения ядер, взрывчатки и шприцов." + icon_state = "assaultbelt" + item_state = "assault" + storage_slots = 21 + max_combined_w_class = 45 + can_hold = list( + /obj/item/grenade, + /obj/item/flash, + /obj/item/storage/dart_cartridge, + /obj/item/biocore, + /obj/item/reagent_containers/iv_bag/blood, + /obj/item/reagent_containers/syringe + ) diff --git a/modular_ss220/antagonists/code/vox_raider/clothing/vox_clothing.dm b/modular_ss220/antagonists/code/vox_raider/clothing/vox_clothing.dm new file mode 100644 index 000000000000..143a879c9593 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/clothing/vox_clothing.dm @@ -0,0 +1,77 @@ +/obj/item/clothing/under/vox/jumpsuit + name = "vox jumpsuit" + desc = "Рабочая одежда вокса." + icon_state = "vox-jumpsuit" + item_color = "vox-jumpsuit" + item_state = "syndicate-black" + species_restricted = list("Vox") + icon = 'modular_ss220/antagonists/icons/clothing/obj_under.dmi' + icon_override = 'modular_ss220/antagonists/icons/clothing/mob/vox/uniform.dmi' + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/uniform.dmi' + ) + body_parts_covered = LEGS + +/obj/item/clothing/under/vox/jumpsuit/red + name = "vox work jumpsuit" + icon_state = "vox-jumpsuit_red" + item_color = "vox-jumpsuit_red" + +/obj/item/clothing/under/vox/jumpsuit/teal + name = "vox teal jumpsuit" + icon_state = "vox-jumpsuit_teal" + item_color = "vox-jumpsuit_teal" + +/obj/item/clothing/under/vox/jumpsuit/blue + name = "vox blue jumpsuit" + icon_state = "vox-jumpsuit_blue" + item_color = "vox-jumpsuit_blue" + +/obj/item/clothing/under/vox/jumpsuit/green + name = "vox green jumpsuit" + icon_state = "vox-jumpsuit_green" + item_color = "vox-jumpsuit_green" + +/obj/item/clothing/under/vox/jumpsuit/yellow + name = "vox yellow jumpsuit" + icon_state = "vox-jumpsuit_yellow" + item_color = "vox-jumpsuit_yellow" + +/obj/item/clothing/under/vox/jumpsuit/purple + name = "vox purple jumpsuit" + icon_state = "vox-jumpsuit_purple" + item_color = "vox-jumpsuit_purple" + +// ================ +// loadout +/datum/gear/racial/vox_jumpsuit + display_name = "vox work jumpsuit" + description = "These loose clothes are optimized for the labors of the lower castes onboard the arkships. Large openings in the top allow for breathability while the pants are durable yet flexible enough to not restrict movement." + path = /obj/item/clothing/under/vox/jumpsuit + slot = SLOT_HUD_JUMPSUIT + +/datum/gear/racial/vox_jumpsuit/red + display_name = "vox red jumpsuit" + path = /obj/item/clothing/under/vox/jumpsuit/red + +/datum/gear/racial/vox_jumpsuit/teal + display_name = "vox teal jumpsuit" + path = /obj/item/clothing/under/vox/jumpsuit/teal + +/datum/gear/racial/vox_jumpsuit/blue + display_name = "vox blue jumpsuit" + path = /obj/item/clothing/under/vox/jumpsuit/blue + +/datum/gear/racial/vox_jumpsuit/green + display_name = "vox green jumpsuit" + path = /obj/item/clothing/under/vox/jumpsuit/green + +/datum/gear/racial/vox_jumpsuit/yellow + display_name = "vox yellow jumpsuit" + path = /obj/item/clothing/under/vox/jumpsuit/yellow + +/datum/gear/racial/vox_jumpsuit/purple + display_name = "vox purple jumpsuit" + path = /obj/item/clothing/under/vox/jumpsuit/purple + +// ================ diff --git a/modular_ss220/antagonists/code/vox_raider/clothing/vox_gloves.dm b/modular_ss220/antagonists/code/vox_raider/clothing/vox_gloves.dm new file mode 100644 index 000000000000..4f4422ab5ab6 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/clothing/vox_gloves.dm @@ -0,0 +1,37 @@ +/obj/item/clothing/gloves/vox + name = "vox gauntlets" + desc = "Плотные рукавицы причудливой формы с когтями." + icon_state = "gloves-vox" + item_state = "gloves-vox" + item_color = "gloves-vox" + icon = 'modular_ss220/antagonists/icons/clothing/obj_gloves.dmi' + species_restricted = list("Vox") + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/gloves.dmi') + strip_delay = 8 SECONDS + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + armor = list(MELEE = 30, BULLET = 0, LASER = 10, ENERGY = 10, BOMB = 0, RAD = 0, FIRE = 200, ACID = 50) + +/obj/item/clothing/gloves/color/yellow/vox + name = "insulated vox gauntlets" + desc = "Плотные изоляционные рукавицы причудливой формы с когтями." + icon_state = "gloves-vox-insulated" + item_state = "gloves-vox" + item_color = "gloves-vox-insulated" + icon = 'modular_ss220/antagonists/icons/clothing/obj_gloves.dmi' + species_restricted = list("Vox") + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/gloves.dmi') + strip_delay = 8 SECONDS + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + siemens_coefficient = 0 + permeability_coefficient = 0.05 + armor = list(MELEE = 30, BULLET = 0, LASER = 25, ENERGY = 25, BOMB = 0, RAD = 0, FIRE = 200, ACID = 50) diff --git a/modular_ss220/antagonists/code/vox_raider/clothing/vox_outfit.dm b/modular_ss220/antagonists/code/vox_raider/clothing/vox_outfit.dm new file mode 100644 index 000000000000..813b55e7ea97 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/clothing/vox_outfit.dm @@ -0,0 +1,156 @@ +// Outfit +/datum/outfit/vox + name = "Vox Crew" + uniform = /obj/item/clothing/under/vox/jumpsuit + gloves = /obj/item/clothing/gloves/vox + shoes = /obj/item/clothing/shoes/roman/vox + l_ear = /obj/item/radio/headset/vox + id = /obj/item/card/id/syndicate/vox + l_pocket = /obj/item/melee/classic_baton/telescopic + + back = /obj/item/storage/backpack/vox + backpack_contents = list( + /obj/item/clothing/mask/breath/vox/respirator = 1, + /obj/item/tank/internals/emergency_oxygen/double/vox = 1, + /obj/item/flashlight = 1, + /obj/item/flash = 1, + /obj/item/clothing/suit/space/vox/pressure = 1, + /obj/item/clothing/head/helmet/space/vox/pressure = 1, + ) + +/datum/outfit/vox/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + var/choosen = rand(1, 8) + switch(choosen) + if(1) + uniform = /obj/item/clothing/under/vox/jumpsuit/red + if(2) + uniform = /obj/item/clothing/under/vox/jumpsuit/teal + if(3) + uniform = /obj/item/clothing/under/vox/jumpsuit/blue + if(4) + uniform = /obj/item/clothing/under/vox/jumpsuit/green + if(5) + uniform = /obj/item/clothing/under/vox/jumpsuit/yellow + if(6) + uniform = /obj/item/clothing/under/vox/jumpsuit/purple + else + uniform = /obj/item/clothing/under/vox/jumpsuit + + if(prob(5)) + uniform = /obj/item/clothing/suit/hooded/vox_robes + + if(prob(50)) + back = /obj/item/storage/backpack/satchel_flat/vox + if(prob(25)) + back = /obj/item/storage/backpack/duffel/vox + +/datum/outfit/vox/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + + var/obj/item/card/id/I = H.wear_id + if(istype(I)) + apply_to_card(I, H, list(ACCESS_MAINT_TUNNELS, ACCESS_VOX, ACCESS_EXTERNAL_AIRLOCKS), "Vox Skipjack Crew", "data") + + if(internals_slot) + H.internal = H.get_item_by_slot(internals_slot) + H.update_action_buttons_icon() + +/obj/item/card/id/syndicate/vox + name = "vox data card" + icon_state = "data" + +// ==================== Raiders ==================== +/datum/outfit/vox/raider + name = "vox raider" + suit = /obj/item/clothing/suit/space/hardsuit/vox + suit_store = /obj/item/tank/internals/emergency_oxygen/double/vox + gloves = /obj/item/clothing/gloves/color/yellow/vox + shoes = /obj/item/clothing/shoes/magboots/vox + l_ear = /obj/item/radio/headset/vox/alt + +/datum/outfit/vox/raider/trooper + name = "vox raider trooper" + suit = /obj/item/clothing/suit/space/hardsuit/vox/trooper + shoes = /obj/item/clothing/shoes/magboots/vox/combat + +/datum/outfit/vox/raider/scout + name = "vox raider scout" + suit = /obj/item/clothing/suit/space/hardsuit/vox/scout + shoes = /obj/item/clothing/shoes/magboots/vox/scout + +/datum/outfit/vox/raider/medic + name = "vox raider medic" + suit = /obj/item/clothing/suit/space/hardsuit/vox/medic + +/datum/outfit/vox/raider/mechanic + name = "vox raider mechanic" + suit = /obj/item/clothing/suit/space/hardsuit/vox/mechanic + shoes = /obj/item/clothing/shoes/magboots/vox/heavy + +/datum/outfit/vox/raider/heavy + name = "vox raider heavy" + suit = /obj/item/clothing/suit/space/hardsuit/vox/heavy + shoes = /obj/item/clothing/shoes/magboots/vox/heavy + + +// ==================== Mercenaries ==================== +/datum/outfit/vox/merc + name = "vox mercenary" + suit = /obj/item/clothing/suit/armor/vox_merc + head = /obj/item/clothing/head/helmet/vox_merc + gloves = /obj/item/clothing/gloves/color/yellow/vox + shoes = /obj/item/clothing/shoes/magboots/vox + l_ear = /obj/item/radio/headset/vox/alt + +/datum/outfit/vox/merc/storm + name = "vox mercenary stormtrooper" + suit = /obj/item/clothing/suit/armor/vox_merc/stormtrooper + head = /obj/item/clothing/head/helmet/vox_merc/stormtrooper + shoes = /obj/item/clothing/shoes/magboots/vox/combat + +/datum/outfit/vox/merc/fieldmedic + name = "vox mercenary field medic" + suit = /obj/item/clothing/suit/armor/vox_merc/fieldmedic + head = /obj/item/clothing/head/helmet/vox_merc/fieldmedic + +/datum/outfit/vox/merc/bomber + name = "vox mercenary bomber" + suit = /obj/item/clothing/suit/armor/vox_merc/bomber + head = /obj/item/clothing/head/helmet/vox_merc/bomber + shoes = /obj/item/clothing/shoes/magboots/vox/heavy + +/datum/outfit/vox/merc/laminar + name = "vox mercenary laminar" + suit = /obj/item/clothing/suit/armor/vox_merc/laminar + head = /obj/item/clothing/head/helmet/vox_merc/laminar + +/datum/outfit/vox/merc/laminar/scout + name = "vox mercenary laminar scout" + suit = /obj/item/clothing/suit/armor/vox_merc/laminar/scout + shoes = /obj/item/clothing/shoes/magboots/vox/scout + +/datum/outfit/vox/merc/stealth + name = "vox mercenary stealth" + suit = /obj/item/clothing/suit/armor/vox_merc/stealth + head = /obj/item/clothing/head/helmet/vox_merc/stealth + + +// ==================== Other ==================== +/datum/outfit/vox/carapace + name = "Vox Carapace" + uniform = /obj/item/clothing/suit/hooded/vox_robes + suit = /obj/item/clothing/suit/space/vox/carapace + gloves = /obj/item/clothing/gloves/color/yellow/vox + shoes = /obj/item/clothing/shoes/magboots/vox + head = /obj/item/clothing/head/helmet/space/vox/carapace + mask = /obj/item/clothing/mask/gas/syndicate + glasses = /obj/item/clothing/glasses/thermal/monocle + l_ear = /obj/item/radio/headset/vox/alt + +/datum/outfit/vox/carapace/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + uniform = /obj/item/clothing/suit/hooded/vox_robes + back = /obj/item/storage/backpack/vox diff --git a/modular_ss220/antagonists/code/vox_raider/clothing/vox_shoes.dm b/modular_ss220/antagonists/code/vox_raider/clothing/vox_shoes.dm new file mode 100644 index 000000000000..3e0c44608138 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/clothing/vox_shoes.dm @@ -0,0 +1,50 @@ +/obj/item/clothing/shoes/roman/vox + name = "vox sandals" + desc = "Синтетические обертки подходящие для большинства типов ног." + +/obj/item/clothing/shoes/magboots/vox + name = "vox magclaws" + desc = "Тяжелые бронированные налапочники для когтистых лап причудливой формы." + item_state = "boots-vox" + icon_state = "boots-vox" + icon = 'modular_ss220/antagonists/icons/clothing/obj_shoes.dmi' + species_restricted = list("Vox") + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/feet.dmi') + w_class = WEIGHT_CLASS_NORMAL + armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 50, RAD = 0, FIRE = 115, ACID = 50) + strip_delay = 7 SECONDS + resistance_flags = NONE + slowdown = 0 + slowdown_passive = 0 + slowdown_active = 1 + +/obj/item/clothing/shoes/magboots/vox/combat + name = "vox combat magclaws" + desc = "Боевые бронированные налапочники для когтистых лап причудливой формы с улучшенным сцеплением с поверхностью." + item_state = "boots-vox-combat" + icon_state = "boots-vox-combat" + permeability_coefficient = 0.01 + armor = list(MELEE = 50, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 80, RAD = 50, FIRE = 450, ACID = 50) + strip_delay = 10 SECONDS + slowdown_active = SHOES_SLOWDOWN+0.5 + +/obj/item/clothing/shoes/magboots/vox/heavy + name = "vox heavy magclaws" + desc = "Тяжелые бронированные налапочники для когтистых лап причудливой формы для ведения боевых действий и защит нижних конечностей от всевозможных угроз." + item_state = "boots-vox-heavy" + icon_state = "boots-vox-heavy" + body_parts_covered = FEET|LEGS + permeability_coefficient = 0.01 + armor = list(MELEE = 115, BULLET = 50, LASER = 75, ENERGY = 50, BOMB = 200, RAD = 200, FIRE = 450, ACID = 200) + strip_delay = 14 SECONDS + slowdown_passive = SHOES_SLOWDOWN+1 + slowdown_active = SHOES_SLOWDOWN+3 + +/obj/item/clothing/shoes/magboots/vox/scout + name = "vox scout magclaws" + desc = "Легкие налапочники для когтистых лап причудливой формы с продвинутым сцеплением с поверхностью для ускорение передвижения." + item_state = "boots-vox-combat" + icon_state = "boots-vox-combat" + slowdown_passive = -0.25 + slowdown_active = 0 diff --git a/modular_ss220/antagonists/code/vox_raider/clothing/vox_suit_armor.dm b/modular_ss220/antagonists/code/vox_raider/clothing/vox_suit_armor.dm new file mode 100644 index 000000000000..1d19d795bd49 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/clothing/vox_suit_armor.dm @@ -0,0 +1,223 @@ +// Броня ВОКСов. +// Дает хорошие защитные свойства, но не позволяет держать давление космоса. + +/obj/item/clothing/suit/armor/vox_merc + name = "vox mercenary vest" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением." + icon_state = "vox-merc" + item_color = "vox-merc" + item_state = "armor" + blood_overlay_type = "armor" + species_restricted = list("Vox") + icon = 'modular_ss220/antagonists/icons/clothing/obj_suit.dmi' + icon_override = 'modular_ss220/antagonists/icons/clothing/mob/vox/suit.dmi' + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/suit.dmi' + ) + allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, + /obj/item/melee/energy/sword, /obj/item/shield/energy, + /obj/item/restraints/handcuffs, /obj/item/tank/internals) + body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + heat_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list(MELEE = 35, BULLET = 50, LASER = 20, ENERGY = 20, BOMB = 25, RAD = 80, FIRE = 50, ACID = 50) + strip_delay = 8 SECONDS + put_on_delay = 6 SECONDS + +/obj/item/clothing/head/helmet/vox_merc + name = "vox mercenary helmet" + desc = "Специализированный шлем воксов-наемников." + icon_state = "vox-merc" + item_color = "vox-merc" + species_restricted = list("Vox") + icon = 'modular_ss220/antagonists/icons/clothing/obj_head.dmi' + icon_override = 'modular_ss220/antagonists/icons/clothing/mob/vox/head.dmi' + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/head.dmi' + ) + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list(MELEE = 35, BULLET = 50, LASER = 20, ENERGY = 20, BOMB = 25, RAD = 80, FIRE = 50, ACID = 50) + flags = HEADBANGPROTECT | BLOCKHEADHAIR + flags_inv = HIDEMASK | HIDEEARS + flags_cover = HEADCOVERSEYES + cold_protection = HEAD + heat_protection = HEAD + dog_fashion = null + + +// Storm Trooper + +/obj/item/clothing/suit/armor/vox_merc/stormtrooper + name = "vox mercenary storm vest" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + \nШтурмовой бронекостюм воксов разработан под их структуру тела и прикрывает наиболее уязвимые места, превосходно защищает носителя от огнестрельного вооружения и ближних атак." + icon_state = "vox-merc-stormtrooper" + item_color = "vox-merc-stormtrooper" + w_class = WEIGHT_CLASS_BULKY + armor = list(MELEE = 115, BULLET = 115, LASER = 50, ENERGY = 30, BOMB = 15, RAD = 80, FIRE = 50, ACID = 50) + strip_delay = 12 SECONDS + put_on_delay = 8 SECONDS + slowdown = 1 + +/obj/item/clothing/head/helmet/vox_merc/stormtrooper + name = "vox mercenary helmet" + icon_state = "vox-merc-stormtrooper" + item_color = "vox-merc-stormtrooper" + armor = list(MELEE = 115, BULLET = 115, LASER = 50, ENERGY = 30, BOMB = 15, RAD = 80, FIRE = 50, ACID = 50) + + +// Field Medic + +/obj/item/clothing/suit/armor/vox_merc/fieldmedic + name = "vox mercenary field medic vest" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + \nМедицинский полевой костюм предназначен для защиты владельца от биологических угроз, радиации и кислотной атмосферы. Дает слабую защиту от внешне поступаемых энергетических снарядов, равномерно рассеивая остаточную энергию. Костюм абсолютно не предназначен для защиты в ближнем бою или от взрывчатых веществ за счет свое внутреннего строения, повреждающий носителя от осколков костюма при нарушении целостности. Имеет хранилище для ношения аптечек и контейнеров с химикатами." + icon_state = "vox-merc-fieldmedic" + item_color = "vox-merc-fieldmedic" + armor = list(MELEE = -15, BULLET = 20, LASER = 50, ENERGY = 40, BOMB = -15, RAD = INFINITY, FIRE = 80, ACID = INFINITY) + strip_delay = 6 SECONDS + put_on_delay = 4 SECONDS + allowed = list(/obj/item/flashlight, /obj/item/storage/firstaid, + /obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, + /obj/item/melee/energy/sword, /obj/item/shield/energy, + /obj/item/restraints/handcuffs, /obj/item/tank/internals, + /obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, + /obj/item/reagent_containers/applicator, /obj/item/healthanalyzer, /obj/item/flashlight/pen, + /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/robotanalyzer) + +/obj/item/clothing/head/helmet/vox_merc/fieldmedic + name = "vox mercenary field medic helmet" + icon_state = "vox-merc-fieldmedic" + item_color = "vox-merc-fieldmedic" + armor = list(MELEE = -15, BULLET = 20, LASER = 50, ENERGY = 40, BOMB = -15, RAD = INFINITY, FIRE = 80, ACID = INFINITY) + flags_inv = HIDEMASK + flags = HEADBANGPROTECT + +// Bomber + +/obj/item/clothing/suit/armor/vox_merc/bomber + name = "vox mercenary bomber vest" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + \nОсобый разработанный штурмовой тяжелый костюм для действий в условиях крайне взрывоопасной атмосферы. Абсолютная жаростойкость, повышенная стойкость к кислотным жидкостям и лазерному воздействию делают эту броню основной для воксов действующих внутри активно разрушающихся комплексов и кораблей." + icon_state = "vox-merc-bomber" + item_color = "vox-merc-bomber" + armor = list(MELEE = 80, BULLET = 20, LASER = 115, ENERGY = 75, BOMB = 200, RAD = 115, FIRE = INFINITY, ACID = 150) + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + strip_delay = 12 SECONDS + put_on_delay = 8 SECONDS + slowdown = 1.5 + +/obj/item/clothing/head/helmet/vox_merc/bomber + name = "vox mercenary bomber helmet" + icon_state = "vox-merc-bomber" + item_color = "vox-merc-bomber" + armor = list(MELEE = 80, BULLET = 20, LASER = 115, ENERGY = 75, BOMB = 200, RAD = 115, FIRE = INFINITY, ACID = 150) + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + + +// Laminar + +/obj/item/clothing/suit/armor/vox_merc/laminar + name = "vox mercenary laminar vest" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + \nКомпактный и мобильный костюм отлично помещается в рюкзаке, сформирован из легких пластин позволяющий получить хорошие защитные свойства в совокупности с удобством для носителя, не мешающий его передвижению. Но, в отличии от других моделей, не дает приемлимых защитных параметров от воздействий внешней агрессивной среды и не защищает руки." + icon_state = "vox-merc-laminar" + item_color = "vox-merc-laminar" + w_class = WEIGHT_CLASS_SMALL + body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | FEET // Руки уязвимые зоны. + cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET + heat_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET + armor = list(MELEE = 20, BULLET = 20, LASER = 40, ENERGY = 40, BOMB = 15, RAD = 20, FIRE = 20, ACID = 20) + strip_delay = 2 SECONDS + put_on_delay = 1 SECONDS + +/obj/item/clothing/head/helmet/vox_merc/laminar + name = "vox mercenary laminar helmet" + icon_state = "vox-merc-laminar" + item_color = "vox-merc-laminar" + w_class = WEIGHT_CLASS_SMALL + armor = list(MELEE = 20, BULLET = 20, LASER = 40, ENERGY = 40, BOMB = 15, RAD = 20, FIRE = 20, ACID = 20) + flags_inv = HIDEEARS|HIDEEYES + +/obj/item/clothing/suit/armor/vox_merc/laminar/scout + name = "vox mercenary laminar scout vest" + desc = "Компактный и мобильный костюм сформированный из лёгких пластин и за счет их особого размещения, увеличивает погашение импульсов перенаправляя их в ускорение носителя, но взамен теряя значимые защитные свойства. " + armor = list(MELEE = 20, BULLET = 20, LASER = 10, ENERGY = 40, BOMB = 40, RAD = 20, FIRE = 20, ACID = 20) + slowdown = -0.35 + + +// Stealth + +// Crew Steath Suit +/obj/item/clothing/suit/armor/vox_merc/stealth + name = "vox mercenary stealth suit" + desc = "Специализированный маскировочный костюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + Костюм с маскировочной системой, напрямую связанная с телом носителя. При снимании костюма возможно ощущение легкого недомогания." + icon_state = "vox-merc-stealth" + item_color = "vox-merc-stealth" + blood_overlay_type = "suit" + armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 15, RAD = INFINITY, FIRE = INFINITY, ACID = 80) + strip_delay = 6 SECONDS + put_on_delay = 4 SECONDS + var/datum/spell/disguise_self/vox/disguise_spell + +/datum/spell/disguise_self/vox + name = "Маскировка" + desc = "Замаскируйтесь под члена экипажа с его голосом в текущей зоне. \ + Внимательный осмотр выдаст вас. Если повредить маскировку - она сбросится." + invocation = "none" + invocation_type = "none" + +/obj/item/clothing/suit/armor/vox_merc/stealth/equipped(mob/living/user, slot) + ..() + if(isvox(user) && slot == SLOT_HUD_OUTER_SUIT) + disguise_spell = new(null) + user.AddSpell(disguise_spell) + +/obj/item/clothing/suit/armor/vox_merc/stealth/dropped(mob/user) + . = ..() + if(user && disguise_spell) + user.RemoveSpell(disguise_spell) + QDEL_NULL(disguise_spell) + // сбрасываем спел нанеся чутка урон + SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMAGE, 5, BRUTE) + +/obj/item/clothing/suit/armor/vox_merc/stealth/Destroy() + . = ..() + if(disguise_spell) + QDEL_NULL(disguise_spell) + +// Smoke Helmet +/obj/item/clothing/head/helmet/vox_merc/stealth + name = "vox mercenary stealth helmet" + desc = "Специализированный шлем воксов-наемников со встроенной системой дымогенератора." + icon_state = "vox-merc-stealth" + item_color = "vox-merc-stealth" + armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 15, RAD = INFINITY, FIRE = INFINITY, ACID = 80) + flags = HEADBANGPROTECT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES + var/datum/spell/smoke/smoke_spell + +/datum/spell/smoke + name = "Дымовой занавес" + desc = "Выпустить дымовую занавесу скрывающее поле зрение всех находящихся в нём в ближайшей зоне." + +/obj/item/clothing/head/helmet/vox_merc/stealth/equipped(mob/living/user, slot) + ..() + if(isvox(user) && slot == SLOT_HUD_HEAD) + smoke_spell = new(null) + user.AddSpell(smoke_spell) + +/obj/item/clothing/head/helmet/vox_merc/stealth/dropped(mob/user) + . = ..() + if(user && smoke_spell) + user.RemoveSpell(smoke_spell) + QDEL_NULL(smoke_spell) + +/obj/item/clothing/head/helmet/vox_merc/stealth/Destroy() + . = ..() + if(smoke_spell) + QDEL_NULL(smoke_spell) diff --git a/modular_ss220/antagonists/code/vox_raider/clothing/vox_suit_rig.dm b/modular_ss220/antagonists/code/vox_raider/clothing/vox_suit_rig.dm new file mode 100644 index 000000000000..f15518d75707 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/clothing/vox_suit_rig.dm @@ -0,0 +1,174 @@ +// РИГи ВОКСов. +// Дают приемлимые защитные свойства, позволяют держать давление космоса. + +/obj/item/clothing/suit/space/hardsuit/vox + name = "vox raider hardsuit" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников." + icon_state = "vox-raider" + item_color = "vox-raider" + item_state = "rig_suit" + species_restricted = list("Vox") + icon = 'modular_ss220/antagonists/icons/clothing/obj_suit.dmi' + icon_override = 'modular_ss220/antagonists/icons/clothing/mob/vox/suit.dmi' + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/suit.dmi' + ) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, + /obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, + /obj/item/melee/energy/sword, /obj/item/shield/energy, + /obj/item/restraints/handcuffs) + body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + heat_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list(MELEE = 75, BULLET = 50, LASER = 30, ENERGY = 20, BOMB = 25, RAD = 115, FIRE = 80, ACID = 200) + strip_delay = 8 SECONDS + put_on_delay = 6 SECONDS + slowdown = 0 + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/vox + +/obj/item/clothing/head/helmet/space/hardsuit/vox + name = "vox raider helmet" + desc = "Специализированный космический шлем воксов-рейдеров." + icon_state = "vox-raider" + item_color = "vox-raider" + species_restricted = list("Vox") + icon = 'modular_ss220/antagonists/icons/clothing/obj_head.dmi' + icon_override = 'modular_ss220/antagonists/icons/clothing/mob/vox/head.dmi' + sprite_sheets = list( + "Vox" = 'modular_ss220/antagonists/icons/clothing/mob/vox/head.dmi' + ) + flags = HEADBANGPROTECT | BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL + resistance_flags = FIRE_PROOF | ACID_PROOF + armor = list(MELEE = 75, BULLET = 50, LASER = 30, ENERGY = 20, BOMB = 25, RAD = 115, FIRE = 80, ACID = 200) + +/obj/item/clothing/head/helmet/space/hardsuit/vox/toggle_light(mob/user) + on = !on + icon_state = "[initial(icon_state)][on ? "_light" : ""]" + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.update_inv_head() + + if(on) + set_light(brightness_on) + else + set_light(0) + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtons() + +// Space Trooper + +/obj/item/clothing/suit/space/hardsuit/vox/trooper + name = "vox raider trooper hardsuit" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nКостюм космического штурмовика рейдеров с защитой от огнестрела и колюще-режущего." + icon_state = "vox-raider-trooper" + item_color = "vox-raider-trooper" + armor = list(MELEE = 75, BULLET = 50, LASER = 30, ENERGY = 20, BOMB = 25, RAD = 115, FIRE = 80, ACID = 200) + strip_delay = 12 SECONDS + put_on_delay = 8 SECONDS + slowdown = 1 + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/vox/trooper + +/obj/item/clothing/head/helmet/space/hardsuit/vox/trooper + name = "vox raider trooper helmet" + icon_state = "vox-raider-trooper" + item_color = "vox-raider-trooper" + armor = list(MELEE = 75, BULLET = 50, LASER = 30, ENERGY = 20, BOMB = 25, RAD = 115, FIRE = 80, ACID = 200) + + +/obj/item/clothing/suit/space/hardsuit/vox/scout + name = "vox raider scout hardsuit" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nКостюм разведчика не сковывает движение и помогает владельцу удобней двигаться в условиях невесомости." + icon_state = "vox-raider-scout" + item_color = "vox-raider-scout" + armor = list(MELEE = 10, BULLET = 20, LASER = 30, ENERGY = 30, BOMB = 15, RAD = 115, FIRE = 80, ACID = 200) + strip_delay = 6 SECONDS + put_on_delay = 4 SECONDS + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/vox/scout + slowdown = -0.25 + +/obj/item/clothing/head/helmet/space/hardsuit/vox/scout + name = "vox raider scout helmet" + icon_state = "vox-raider-scout" + item_color = "vox-raider-scout" + armor = list(MELEE = 10, BULLET = 20, LASER = 30, ENERGY = 30, BOMB = 15, RAD = 115, FIRE = 80, ACID = 200) + + +// Medic + +/obj/item/clothing/suit/space/hardsuit/vox/medic + name = "vox raider medic hardsuit" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nКостюм для работы в условиях отдаленности от опасностей. Более подвижен и обладает приемлимыми свойствами защиты от воздействий различного рода снарядов, но из-за своей структуры способен нанести вред носителю при взрывных воздействиях или колющих атак. Костюм отлично выдерживает радиационный фон и кислотное воздействие и биологическими угрозами. Имеет хранилище для ношения аптечек контейнеров с химикатами." + icon_state = "vox-raider-medic" + item_color = "vox-raider-medic" + armor = list(MELEE = -30, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = -30, RAD = INFINITY, FIRE = 120, ACID = INFINITY) + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/vox/medic + allowed = list(/obj/item/flashlight, /obj/item/storage/firstaid, + /obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, + /obj/item/melee/energy/sword, /obj/item/shield/energy, + /obj/item/restraints/handcuffs, /obj/item/tank/internals, + /obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, + /obj/item/reagent_containers/applicator, /obj/item/healthanalyzer, /obj/item/flashlight/pen, + /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/robotanalyzer) + +/obj/item/clothing/head/helmet/space/hardsuit/vox/medic + name = "vox raider medic helmet" + icon_state = "vox-raider-medic" + item_color = "vox-raider-medic" + armor = list(MELEE = -30, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = -30, RAD = INFINITY, FIRE = 120, ACID = INFINITY) + + +// Mechanic + +/obj/item/clothing/suit/space/hardsuit/vox/mechanic + name = "vox raider mechanic hardsuit" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nКостюм для работы в условиях крайне опасных и недружелюбных атмосфер. За счет своей структуры и технологии рассеивания тепла, костюм обладает хорошей защитой от энергетического оружия." + icon_state = "vox-raider-mechanic" + item_color = "vox-raider-mechanic" + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + armor = list(MELEE = 20, BULLET = 20, LASER = 75, ENERGY = 50, BOMB = 150, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) + slowdown = 2 + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/vox/mechanic + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/rcd, /obj/item/rpd, + /obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, + /obj/item/melee/energy/sword, /obj/item/shield/energy, + /obj/item/restraints/handcuffs, /obj/item/tank/internals) + +/obj/item/clothing/head/helmet/space/hardsuit/vox/mechanic + name = "vox raider mechanic helmet" + icon_state = "vox-raider-mechanic" + item_color = "vox-raider-mechanic" + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + armor = list(MELEE = 20, BULLET = 20, LASER = 75, ENERGY = 50, BOMB = 150, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) + + +// Heavy - Воксомех + +/obj/item/clothing/suit/space/hardsuit/vox/heavy + name = "vox raider heavy hardsuit" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nТяжелый огнеупорный и взрывостойкий костюм рейдеров с превосходной защитой от энергетического оружия и колюще-режущих и приемлимой от огнестрела. Костюм был разработан для противостояния механизированным силам в условиях космического пространства. К сожалению, его вес и ресиверы не настолько совершены, из-за чего он уступает в скорости." + icon_state = "vox-raider-heavy" + item_color = "vox-raider-heavy" + w_class = WEIGHT_CLASS_HUGE + armor = list(MELEE = 115, BULLET = 80, LASER = 150, ENERGY = 80, BOMB = 200, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + slowdown = 3 // Даже черепаха быстрее чем это ведро. + strip_delay = 20 SECONDS + put_on_delay = 10 SECONDS + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/vox/heavy + +/obj/item/clothing/head/helmet/space/hardsuit/vox/heavy + name = "vox raider heavy helmet" + icon_state = "vox-raider-heavy" + item_color = "vox-raider-heavy" + armor = list(MELEE = 115, BULLET = 80, LASER = 115, ENERGY = 80, BOMB = 200, RAD = INFINITY, FIRE = INFINITY, ACID = INFINITY) + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_defines.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_defines.dm new file mode 100644 index 000000000000..1c1beff53cc4 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_defines.dm @@ -0,0 +1,16 @@ +// CATEGORY +#define VOX_PACK_CLOTHES "Одежда" +#define VOX_PACK_EQUIPMENT "Снаряжение" +#define VOX_PACK_RAIDER "Наборы Рейдера" +#define VOX_PACK_MERCENARIES "Наборы Наемника" +#define VOX_PACK_CONSUMABLES "Расходники" +#define VOX_PACK_GOODS "Товары" +#define VOX_PACK_MEDICINE "Медицина" +#define VOX_PACK_MISC "Разное" +#define VOX_PACK_KIT "Полные Наборы" + +// Weapons +#define VOX_PACK_SPIKE "Шипометы" +#define VOX_PACK_DART "Дротики" +#define VOX_PACK_BIO "Биооружие" +#define VOX_PACK_MELEE "Ближний Контакт" diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack.dm new file mode 100644 index 000000000000..9135cf5f724a --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack.dm @@ -0,0 +1,57 @@ +/datum/vox_pack + var/name = "DEBUG Vox Pack" + var/desc = "Описание отсутствует. Сообщите разработчику." + var/reference = null + var/cost = -1 // -1 = hide + var/is_need_trader_cost = TRUE // Is need an additional cost on top of the cost from the “trader machine” + var/time_until_available = 0 // How long does it take from the start of the round? In MINUTES + var/limited_stock = -1 // Can you only buy so many? -1 allows for infinite purchases + var/purchased = 0 // How much have you already bought? + var/discount_div = 0 // Процент скидки на паки за покупку набора + var/amount = 1 + var/category = VOX_PACK_MISC + var/list/contains = list() + +/datum/vox_pack/New() + . = ..() + update_pack() + +/datum/vox_pack/proc/update_pack() + if(discount_div <= 0) + return + cost = round(initial(cost) * discount_div) + +/datum/vox_pack/proc/get_items_list() + var/list/items_list = list() + for(var/typepath in contains) + if(!typepath) + continue + for(var/i in 1 to amount) + items_list.Add(typepath) + return items_list + +/datum/vox_pack/proc/check_possible_buy(amount) + if(limited_stock >= 0 && (purchased + amount > limited_stock)) + return FALSE + return TRUE + +/datum/vox_pack/proc/check_time_available() + var/round_time_minutes = ROUND_TIME + if(round_time_minutes < time_until_available MINUTES) + return FALSE + return TRUE + +/datum/vox_pack/proc/get_time_available() + var/t = SSticker.time_game_started + time_until_available MINUTES + return "[round(t / 36000)]:[add_zero(num2text(t / 600 % 60), 2)]" + +/datum/vox_pack/proc/get_time_left() + var/t = SSticker.time_game_started + time_until_available MINUTES - ROUND_TIME + return "[round(t / 36000)]:[add_zero(num2text(t / 600 % 60), 2)]:[add_zero(num2text(t / 10 % 60), 2)]" + +/datum/vox_pack/proc/description() + if(!desc) + desc = replacetext(desc, "\n", "
") + if(!check_time_available()) + desc += " \[Заказ возможен после [get_time_available()] от начала рейда.\]" + return desc diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_bio.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_bio.dm new file mode 100644 index 000000000000..aec2c8e8bd02 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_bio.dm @@ -0,0 +1,56 @@ +/datum/vox_pack/bio + name = "DEBUG Bio Vox Pack" + category = VOX_PACK_BIO + time_until_available = 45 + +// ============== GUNS ============== +/datum/vox_pack/bio/gun + name = "Биомёт" + desc = "Компактный метатель биоядер-снарядов. Вмещает в себя 3 острых биоядра одновременно, выстреливая их поочереди, вонзая в плоть цели, а после вылупляя, выпуская биомеханическую тварь для последующей помощи Воксам." + reference = "B_G" + cost = 2000 + contains = list(/obj/item/gun/throw/biogun) + +// ============== AMMO ============== + +/datum/vox_pack/bio/core + name = "Биоядро (Потрошитель х3)" + desc = "Переписанная машина синдиката на служении Воксам." + reference = "B_B_VISC" + cost = 400 + contains = list(/obj/item/biocore/viscerator) + +/datum/vox_pack/bio/core/stamine + name = "Биоядро (Стакикамка х3)" + desc = "Биомеханизм изматывающий своих жертв." + reference = "B_B_STAM" + cost = 300 + contains = list(/obj/item/biocore/stamina) + +/datum/vox_pack/bio/core/acid + name = "Биоядро (Асикикид х1)" + desc = "Кислотный жгущий биомеханизм." + reference = "B_B_ACID" + cost = 200 + contains = list(/obj/item/biocore/acid) + +/datum/vox_pack/bio/core/kusaka + name = "Биоядро (Кусакика х4)" + desc = "Кусачий маленький биомеханизм." + reference = "B_B_KUS" + cost = 300 + contains = list(/obj/item/biocore/kusaka) + +/datum/vox_pack/bio/core/taran + name = "Биоядро (Таракикан х1)" + desc = "Броневой биомеханизм, приспособленный для вышибания дверей." + reference = "B_B_TAT" + cost = 400 + contains = list(/obj/item/biocore/taran) + +/datum/vox_pack/bio/core/tox + name = "Биоядро (Токсикикик х3)" + desc = "Иглоподобный биомеханизм для впрыскивания токсин." + reference = "B_B_TOX" + cost = 300 + contains = list(/obj/item/biocore/tox) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_clothes.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_clothes.dm new file mode 100644 index 000000000000..fcbbd103c624 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_clothes.dm @@ -0,0 +1,213 @@ +/datum/vox_pack/clothes + name = "DEBUG Clothes Vox Pack" + category = VOX_PACK_CLOTHES + + +// ============== JUMSUIT ============== + +/datum/vox_pack/clothes/jumpsuit + name = "Рабочая одежда" + desc = "Одежда воксов предназначенная только для них." + reference = "C_J" + cost = 15 + contains = list(/obj/item/clothing/under/vox/jumpsuit) + +/datum/vox_pack/clothes/jumpsuit/red + name = "Рабочая одежда - Красная" + reference = "C_JR" + contains = list(/obj/item/clothing/under/vox/jumpsuit/red) + +/datum/vox_pack/clothes/jumpsuit/teal + name = "Рабочая одежда - Бирюза" + reference = "C_JT" + contains = list(/obj/item/clothing/under/vox/jumpsuit/teal) + +/datum/vox_pack/clothes/jumpsuit/blue + name = "Рабочая одежда - Синий" + reference = "C_JB" + contains = list(/obj/item/clothing/under/vox/jumpsuit/blue) + +/datum/vox_pack/clothes/jumpsuit/green + name = "Рабочая одежда - Зеленый" + reference = "C_JG" + contains = list(/obj/item/clothing/under/vox/jumpsuit/green) + +/datum/vox_pack/clothes/jumpsuit/yellow + name = "Рабочая одежда - Желтый" + reference = "C_JY" + contains = list(/obj/item/clothing/under/vox/jumpsuit/yellow) + +/datum/vox_pack/clothes/jumpsuit/purple + name = "Рабочая одежда - Фиолетовый" + reference = "C_JP" + contains = list(/obj/item/clothing/under/vox/jumpsuit/purple) + + +// ============== SHOES ============== + +/datum/vox_pack/clothes/shoes + name = "Обувка" + desc = "Синтетические обертки подходящие для большинства типов ног." + reference = "C_SH" + cost = 15 + contains = list(/obj/item/clothing/shoes/roman/vox) + + +// ============== MAGBOOTS ============== +/datum/vox_pack/clothes/magboots + name = "Магнитные Налапочники" + desc = "Когтистые плотные налапочники с небольшой защитой для лап." + reference = "C_SH_M" + cost = 200 + contains = list(/obj/item/clothing/shoes/magboots/vox) + +/datum/vox_pack/clothes/magboots/scout + name = "Магнитные Налапочники Разведки" + desc = "Легкие когтистые налапочники с продвинутым сцеплением с поверхностью для ускорение передвижения." + reference = "C_SH_MS" + cost = 1000 + contains = list(/obj/item/clothing/shoes/magboots/vox/scout) + +/datum/vox_pack/clothes/magboots/combat + name = "Боевые Магнитные Налапочники" + desc = "Боевые бронированные когтистые налапочники с улучшенным сцеплением с поверхностью." + reference = "C_SH_MC" + cost = 2000 + time_until_available = 45 + contains = list(/obj/item/clothing/shoes/magboots/vox/combat) + +/datum/vox_pack/clothes/magboots/heavy + name = "Тяжелые Магнитные Налапочники" + desc = "Тяжелые бронированные когтистые налапочники для ведения боевых действий и защит нижних конечностей от всевозможных угроз." + reference = "C_SH_MH" + cost = 4000 + time_until_available = 60 + contains = list(/obj/item/clothing/shoes/magboots/vox/heavy) + + +// ============== GLOVES ============== +/datum/vox_pack/clothes/gloves + name = "Рукавицы" + desc = "Плотные рукавицы с когтями с защитой кистей." + reference = "C_GL" + cost = 400 + contains = list(/obj/item/clothing/gloves/vox) + +/datum/vox_pack/clothes/gloves/insulated + name = "Изоляционные Рукавицы" + desc = "Плотные изоляционные рукавицы с когтями." + reference = "C_GL_I" + cost = 2000 + contains = list(/obj/item/clothing/gloves/color/yellow/vox) + + +// ============== GLASSES ============== + +/datum/vox_pack/clothes/eye_night + name = "Очки Ночного Видения" + desc = "Очки позволяющие видеть в кромешной темноте." + reference = "C_EYE_NI" + cost = 300 + contains = list(/obj/item/clothing/glasses/night) + +/datum/vox_pack/clothes/eye_meson + name = "Мезонный Глаз" + desc = "Мезонный кибернетический глаз с системой вставки в глазной разъем. Полностью заменяет функционирующий глаз или его полость. \ + ВНИМАНИЕ! Глаз возможно удалить только хирургическим путем. Из-за своего размера - не позволяет надевать прочие приблуды на глаза, заменяя очки." + reference = "C_EYE_ME" + cost = 1000 + contains = list(/obj/item/clothing/glasses/meson/cyber/vox) + +/datum/vox_pack/clothes/eye_thermal + name = "Термальный Глаз" + desc = "Термальный кибернетический глаз с системой вставки в глазной разъем. Полностью заменяет функционирующий глаз или его полость. \ + ВНИМАНИЕ! Глаз возможно удалить только хирургическим путем. Из-за своего размера - не позволяет надевать прочие приблуды на глаза, заменяя очки." + reference = "C_EYE_TH" + cost = 4500 + time_until_available = 45 + contains = list(/obj/item/clothing/glasses/thermal/cyber/vox) + +/datum/vox_pack/clothes/sechud + name = "Дисплей Службы Безопасности" + desc = "Очки с защитой для глаз и с доступом в системы базы данных службы безопасности." + reference = "C_EYE_SEC" + cost = 3500 + time_until_available = 45 + contains = list(/obj/item/clothing/glasses/hud/security/sunglasses/fluff/voxxyhud) + +/datum/vox_pack/clothes/healthhud + name = "Медицинский Дисплей" + desc = "Очки для контроля жизненных показателей." + reference = "C_EYE_HEALTH" + cost = 1000 + time_until_available = 45 + contains = list(/obj/item/clothing/glasses/hud/health) + + +// ============== EARS ============== + +/datum/vox_pack/clothes/radio + name = "Наушники" + desc = "Наушник дальней связи для поддержания связи со стаей." + reference = "C_RAD" + cost = 100 + contains = list(/obj/item/radio/headset/vox) + +/datum/vox_pack/clothes/radio/alt + name = "Защитные наушники" + desc = "Наушник дальней связи для поддержания связи со стаей. Защищает ушные раковины от громких звуков" + reference = "C_RAD_ALT" + cost = 500 + time_until_available = 60 + contains = list(/obj/item/radio/headset/vox/alt) + + +// ============== Space Suits ============== +/datum/vox_pack/clothes/pressure + name = "Скафандр" + desc = "Защитный костюм для работы во враждебной атмосфере с приемлимыми защитными свойствами и полной защитой от давления." + reference = "C_PR" + cost = 100 + contains = list( + /obj/item/clothing/suit/space/vox/pressure, + /obj/item/clothing/head/helmet/space/vox/pressure + ) + + +// ============== STORAGE ============== + +/datum/vox_pack/clothes/backpack + name = "Рюкзак" + desc = "Рюкзак из плотно переплетенного синтетического волокна. Хорошо защищает спину носителя при побегах и вмещает достаточно добра." + reference = "C_BP" + cost = 200 + contains = list(/obj/item/storage/backpack/vox) + +/datum/vox_pack/clothes/backpack/duffel + name = "Сумка" + desc = "Сумка из синтетического волокна. Емкий, вмещает много добра." + reference = "C_BPD" + cost = 300 + contains = list(/obj/item/storage/backpack/duffel/vox) + +/datum/vox_pack/clothes/backpack/satchel + name = "Ранец" + desc = "Ранец из синтетического волокна. Компактный, из-за чего его можно отлично прятать." + reference = "C_BPS" + cost = 150 + contains = list(/obj/item/storage/backpack/satchel_flat/vox) + + +/datum/vox_pack/clothes/belt + name = "Пояс Рейдера" + desc = "Пояс вмещающий в себя инструменты и запасные батареи. Вмещает 7 предметов." + reference = "C_BELT" + cost = 1000 + contains = list(/obj/item/storage/belt/vox) + +/datum/vox_pack/clothes/belt/bio + name = "Пояс Био-Рейдера" + desc = "Пояс вмещающий в себя биоядра, дротики и взрывчатку. Вмещает 21 тяжелых предметов." + reference = "C_BELT_BIO" + cost = 1300 + contains = list(/obj/item/storage/belt/vox/bio) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_consumables.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_consumables.dm new file mode 100644 index 000000000000..9f6a5ad25f4c --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_consumables.dm @@ -0,0 +1,51 @@ +/datum/vox_pack/consumables + name = "DEBUG Consumables Vox Pack" + category = VOX_PACK_CONSUMABLES + + +// MISC + +/datum/vox_pack/consumables/food + name = "Варево" + desc = "Лучше чем ничего." + reference = "CO_FOOD" + cost = 5 + contains = list(/obj/item/food/soup/stew) + +/datum/vox_pack/consumables/flare + name = "Фальшфейер" + desc = "Пиротехнический огонь." + reference = "CO_FLARE" + cost = 15 + contains = list(/obj/item/flashlight/flare) + + +// EXPLOSIVES + +/datum/vox_pack/consumables/smoke + name = "Дымовая граната" + desc = "Для создания плотных дымовых завес." + reference = "CO_SMOKE" + cost = 40 + contains = list(/obj/item/grenade/smokebomb) + +/datum/vox_pack/consumables/c4 + name = "C4" + desc = "Взрывчатка для создания аккуратных дыр." + reference = "CO_C4" + cost = 250 + contains = list(/obj/item/grenade/plastic/c4) + +/datum/vox_pack/consumables/x4 + name = "X4" + desc = "Осколочно-фугасный заряд. Безопасен для подрывника." + reference = "CO_X4" + cost = 450 + contains = list(/obj/item/grenade/plastic/c4/x4) + +/datum/vox_pack/consumables/t4 + name = "T4" + desc = "Заряд термита, пробивающий стены. Неэффективен против шлюзов." + reference = "CO_T4" + cost = 700 + contains = list(/obj/item/grenade/plastic/c4/thermite) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_dart.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_dart.dm new file mode 100644 index 000000000000..bb7a9a42c3d3 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_dart.dm @@ -0,0 +1,89 @@ +/datum/vox_pack/dart + name = "DEBUG Dart Vox Pack" + category = VOX_PACK_DART + +// ============== GUNS ============== + +/datum/vox_pack/dart/gun + name = "Дротикомет" + desc = "Компактный метатель дротиков для доставки химических коктейлей. Вмещает 5(+1) дротиков. Никто кроме Воксов не сможет взять его в руки." + reference = "D_G" + cost = 500 + contains = list(/obj/item/gun/syringe/dart_gun) + +/datum/vox_pack/dart/gun/ext + name = "Расширенный Дротикомет" + desc = "Расширенный метатель дротиков и шприцов для доставки химических коктейлей. Вмещает 5(+1) дротиков и шприцов. Никто кроме Воксов не сможет взять его в руки." + reference = "D_GE" + cost = 2000 + contains = list(/obj/item/gun/syringe/dart_gun/extended) + +/datum/vox_pack/dart/gun/big + name = "Вместительный Дротикомет" + desc = "Вместительный метатель дротиков для доставки химических коктейлей. Вмещает 10(+1) дротиков. Никто кроме Воксов не сможет взять его в руки." + reference = "D_GB" + cost = 3000 + contains = list(/obj/item/gun/syringe/dart_gun/big) + + +// ============== AMMO ============== + +/datum/vox_pack/dart/cartridge + name = "Картридж (5+1)" + desc = "Подставка для дротиков. Пустая." + reference = "D_C" + cost = 25 + contains = list(/obj/item/storage/dart_cartridge) + +/datum/vox_pack/dart/cartridge/extended + name = "Картридж (5+1)" + desc = "Расширенная подставка для дротиков и шприцов. Пустая." + reference = "D_C_EXT" + cost = 50 + contains = list(/obj/item/storage/dart_cartridge/extended) + +/datum/vox_pack/dart/cartridge/big + name = "Картридж (10+1)" + desc = "Увеличенная подставка для дротиков. Пустая." + reference = "D_C_BIG" + cost = 100 + contains = list(/obj/item/storage/dart_cartridge/big) + +/datum/vox_pack/dart/cartridge/combat + name = "Картридж (5+1) - Боевой" + desc = "Подставка с боевыми дротиками для нанесения повреждений." + reference = "D_C_COM" + cost = 400 + time_until_available = 45 + contains = list(/obj/item/storage/dart_cartridge/combat) + +/datum/vox_pack/dart/cartridge/medical + name = "Картридж (5+1) - Медицинский" + desc = "Подставка с полезными дротиками для восстановления телесных повреждений." + reference = "D_C_MED" + cost = 300 + contains = list(/obj/item/storage/dart_cartridge/medical) + +/datum/vox_pack/dart/cartridge/pain + name = "Картридж (5+1) - Болевой" + desc = "Подставка с вредными дротиками, приносящие боль и страдания." + reference = "D_C_PAIN" + cost = 400 + time_until_available = 30 + contains = list(/obj/item/storage/dart_cartridge/pain) + +/datum/vox_pack/dart/cartridge/drugs + name = "Картридж (5+1) - Наркотический" + desc = "Подставка для вредных дротиков-наркотиков." + reference = "D_C_DRUG" + cost = 300 + time_until_available = 30 + contains = list(/obj/item/storage/dart_cartridge/drugs) + +/datum/vox_pack/dart/cartridge/random + name = "Картридж (10+1) - ???" + desc = "Случайный набор дротиков с химикатами." + reference = "D_C_RAND" + cost = 1000 + time_until_available = 60 + contains = list(/obj/item/storage/dart_cartridge/big/random) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_equipment.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_equipment.dm new file mode 100644 index 000000000000..7c7ef328d21d --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_equipment.dm @@ -0,0 +1,77 @@ +/datum/vox_pack/equipment + name = "DEBUG Equipment Vox Pack" + category = VOX_PACK_EQUIPMENT + + +// ============== Misc ============== +/datum/vox_pack/equipment/card + name = "Идентификационная Карта" + desc = "Карта для идентификации, смены образов и воровства доступов." + reference = "E_CARD" + cost = 150 + contains = list(/obj/item/card/id/syndicate/vox) + +/datum/vox_pack/equipment/hand_valuer + name = "Оценщик" + desc = "Позволяет узнать ценность товаров. Не забудьте его активировать о Расчичетчикик." + reference = "E_VALUER" + cost = 100 + contains = list(/obj/item/hand_valuer) + +/datum/vox_pack/equipment/mask + name = "Дыхательная Маска" + desc = "С встроенной трубкой для дыхания" + reference = "E_MASK" + cost = 25 + contains = list(/obj/item/clothing/mask/breath/vox) + +/datum/vox_pack/equipment/nitrogen + name = "Дыхательный Балон" + desc = "Сдвоенный дыхательный балон наполненный нитрогеном." + reference = "E_NITR" + cost = 50 + contains = list(/obj/item/tank/internals/emergency_oxygen/double/vox) + +/datum/vox_pack/equipment/flag + name = "Флаг" + desc = "С ним ценности еще ценнее." + reference = "E_FLAG" + cost = 100 + contains = list(/obj/item/flag/vox_raider) + +// TECH + +/datum/vox_pack/equipment/jammer + name = "Глушилка" + desc = "Глушитель связи." + reference = "E_JAM" + cost = 500 + contains = list(/obj/item/jammer) + +/datum/vox_pack/equipment/jammer + name = "Глушилка" + desc = "Глушитель связи." + reference = "E_JAM" + cost = 500 + contains = list(/obj/item/jammer) + +/datum/vox_pack/equipment/ai_detector + name = "Детектор" + desc = "Детектор искусственного интеллекта замаскированного под мультиметр." + reference = "E_AI" + cost = 250 + contains = list(/obj/item/multitool/ai_detect) + +/datum/vox_pack/equipment/stealth + name = "Имплантер Маскировки" + desc = "Имплантер для скрытых операций и краж." + reference = "E_BCI_S" + cost = 2000 + contains = list(/obj/item/bio_chip_implanter/stealth) + +/datum/vox_pack/equipment/freedom + name = "Имплантер Свободы" + desc = "Имплантер скоротечно изменяющий структуру костей для освобождения от сдерживающих факторов." + reference = "E_BCI_F" + cost = 1500 + contains = list(/obj/item/bio_chip_implanter/freedom) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_goods.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_goods.dm new file mode 100644 index 000000000000..945555700e68 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_goods.dm @@ -0,0 +1,275 @@ +/datum/vox_pack/goods + name = "DEBUG Goods Vox Pack" + category = VOX_PACK_GOODS + is_need_trader_cost = FALSE + var/obj/random_subtype + +/datum/vox_pack/goods/New() + . = ..() + if(!random_subtype) + return + var/list/possible_types = list(random_subtype) + subtypesof(random_subtype) + var/choosen_type = pick(possible_types) + contains.Add(choosen_type) + +/datum/vox_pack/goods/figure + name = "Фигурка" + desc = "Случайный товар для продажи." + reference = "G_FIG" + cost = 25 + random_subtype = /obj/item/toy/figure + +/datum/vox_pack/goods/mech + name = "Механоид" + desc = "Случайный товар для продажи." + reference = "G_MECH" + cost = 25 + random_subtype = /obj/item/toy/figure/mech + +/datum/vox_pack/goods/plushie + name = "Плюшка" + desc = "Случайный товар для продажи." + reference = "G_PLUSH" + cost = 25 + random_subtype = /obj/item/toy/plushie + +/datum/vox_pack/goods/therapy + name = "Плюшка-Обнимашка" + desc = "Случайный товар для продажи." + reference = "G_THER" + cost = 25 + random_subtype = /obj/item/toy/therapy + +/datum/vox_pack/goods/carp_plushie + name = "Плюшка-Карпушка" + desc = "Случайный товар для продажи." + reference = "G_CARP" + cost = 25 + random_subtype = /obj/item/toy/plushie/carpplushie + +/datum/vox_pack/goods/food + name = "Еда" + desc = "Случайный товар для продажи." + reference = "G_CARP" + cost = 50 + random_subtype = /obj/item/food + +/datum/vox_pack/goods/toy + name = "Игрушка" + desc = "Случайный товар для продажи." + reference = "G_TOY" + cost = 100 + random_subtype = /obj/item/toy + +/datum/vox_pack/goods/bikehorn + name = "Гудок" + desc = "Случайный товар для продажи." + reference = "G_HORN" + cost = 100 + random_subtype = /obj/item/bikehorn + +/datum/vox_pack/goods/beach_ball + name = "Мяч" + desc = "Случайный товар для продажи." + reference = "G_BALL" + cost = 100 + random_subtype = /obj/item/beach_ball + +/datum/vox_pack/goods/instrument + name = "Музыкальный Инструмент" + desc = "Случайный товар для продажи." + reference = "G_MINS" + cost = 100 + random_subtype = /obj/item/instrument + +/datum/vox_pack/goods/soap + name = "Мыло" + desc = "Случайный товар для продажи." + reference = "G_SOAP" + cost = 25 + random_subtype = /obj/item/soap + +/datum/vox_pack/goods/lighter + name = "Зажигалка" + desc = "Случайный товар для продажи." + reference = "G_LIGH" + cost = 75 + random_subtype = /obj/item/lighter + +/datum/vox_pack/goods/flag + name = "Флаг" + desc = "Случайный товар для продажи." + reference = "G_FLAG" + cost = 50 + random_subtype = /obj/item/flag + +/datum/vox_pack/goods/id_skin + name = "Наклейка на карту" + desc = "Случайный товар для продажи." + reference = "G_IDS" + cost = 50 + random_subtype = /obj/item/id_skin + +/datum/vox_pack/goods/drugs + name = "Наркотики" + desc = "Мясу понравится этот товар." + reference = "G_DRUG" + cost = 200 + contains = list(/obj/item/storage/pill_bottle/random_drug_bottle) + +/datum/vox_pack/goods/enforser + name = "Пистолет Энфорсер (резина)" + desc = "Мясу понравится этот товар." + reference = "G_ENF" + cost = 1000 + contains = list(/obj/item/gun/projectile/automatic/pistol/enforcer, + /obj/item/ammo_box/magazine/enforcer, + /obj/item/ammo_box/magazine/enforcer, + /obj/item/ammo_box/magazine/enforcer, + ) + +/datum/vox_pack/goods/space + name = "Космический Старый Костюм \"NasaVoid\" - Красный" + desc = "Мясу понравится этот товар." + reference = "G_SP" + cost = 200 + contains = list( + /obj/item/clothing/head/helmet/space/nasavoid, + /obj/item/clothing/suit/space/nasavoid, + ) + +/datum/vox_pack/goods/space/green + name = "Космический Старый Костюм \"NasaVoid\" - Зеленый" + desc = "Мясу понравится этот товар." + reference = "G_SP_G" + cost = 200 + contains = list( + /obj/item/clothing/head/helmet/space/nasavoid/green, + /obj/item/clothing/suit/space/nasavoid/green, + ) + +/datum/vox_pack/goods/space/ntblue + name = "Космический Старый Костюм \"NasaVoid\" - NT Синий" + desc = "Мясу понравится этот товар." + reference = "G_SP_NTB" + cost = 250 + contains = list( + /obj/item/clothing/head/helmet/space/nasavoid/ntblue, + /obj/item/clothing/suit/space/nasavoid/ntblue, + ) + +/datum/vox_pack/goods/space/purple + name = "Космический Старый Костюм \"NasaVoid\" - Фиолетовый" + desc = "Мясу понравится этот товар." + reference = "G_SP_P" + cost = 200 + contains = list( + /obj/item/clothing/head/helmet/space/nasavoid/purple, + /obj/item/clothing/suit/space/nasavoid/purple, + ) + +/datum/vox_pack/goods/space/yellow + name = "Космический Старый Костюм \"NasaVoid\" - Желтый" + desc = "Мясу понравится этот товар." + reference = "G_SP_Y" + cost = 200 + contains = list( + /obj/item/clothing/head/helmet/space/nasavoid/yellow, + /obj/item/clothing/suit/space/nasavoid/yellow, + ) + +/datum/vox_pack/goods/space/ltblue + name = "Космический Старый Костюм \"NasaVoid\" - Светло-синий" + desc = "Мясу понравится этот товар." + reference = "G_SP_LTB" + cost = 200 + contains = list( + /obj/item/clothing/head/helmet/space/nasavoid/ltblue, + /obj/item/clothing/suit/space/nasavoid/ltblue, + ) + +/datum/vox_pack/goods/telescopic + name = "Телескопическая дубинка" + desc = "Мясу понравится этот товар." + reference = "G_TEL" + cost = 300 + contains = list(/obj/item/melee/classic_baton/telescopic) + +/datum/vox_pack/goods/clown_gun + name = "Клоунская Хлопушка" + desc = "Мясу понравится этот товар." + reference = "G_CL_GUN" + cost = 100 + contains = list(/obj/item/gun/energy/clown) + +/datum/vox_pack/goods/clown + name = "Клоунское Снаряжение" + desc = "Мясу повеселится от этого товара." + reference = "G_CL_EQ" + cost = 500 + contains = list( + /obj/item/clothing/mask/gas/clown_hat, + /obj/item/clothing/shoes/clown_shoes, + /obj/item/clothing/under/rank/civilian/clown, + /obj/item/pda/clown, + /obj/item/flag/clown, + /obj/item/id_skin/clown, + /obj/item/bikehorn, + /obj/item/storage/backpack/clown, + /obj/item/food/grown/banana, + /obj/item/stamp/clown, + /obj/item/toy/crayon/rainbow, + /obj/item/storage/fancy/crayons, + /obj/item/reagent_containers/spray/waterflower, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana, + ) + +/datum/vox_pack/goods/clown/sec + name = "Клоунское Снаряжение Безопасности" + desc = "Мясо будет унижено этим товаром." + reference = "G_CL_EQS" + cost = 1000 + contains = list( + /obj/item/clothing/under/rank/security/officer/clown, + /obj/item/clothing/suit/armor/vest/security, + /obj/item/clothing/shoes/clown_shoes, + /obj/item/clothing/head/helmet, + /obj/item/clothing/mask/gas/clown_hat, + /obj/item/clothing/gloves/color/red, + /obj/item/flag/clown, + /obj/item/id_skin/clown, + /obj/item/pda/clown, + /obj/item/bikehorn, + /obj/item/gun/energy/clown/security, + /obj/item/food/grown/banana, + /obj/item/stamp/clown, + /obj/item/toy/crayon/rainbow, + /obj/item/storage/fancy/crayons, + /obj/item/reagent_containers/spray/waterflower, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana, + /obj/item/instrument/bikehorn, + /obj/item/restraints/handcuffs/toy, + /obj/item/restraints/handcuffs/toy, + /obj/item/storage/backpack/clown, + ) + +/datum/vox_pack/goods/clown_grenade + name = "Клоунская Граната" + desc = "Мясу понравится этот товар." + reference = "G_CL_GR" + cost = 200 + contains = list(/obj/item/grenade/clusterbuster/honk) + +/datum/vox_pack/goods/clown_grenade/evil + name = "Клоунская Злая Граната" + desc = "Мясу НЕ понравится этот товар." + reference = "G_CL_GRE" + cost = 500 + contains = list(/obj/item/grenade/clown_grenade) + +/datum/vox_pack/goods/clown_bomba + name = "Клоунская Бомба" + desc = "Мясу НЕ понравится этот товар." + reference = "G_CL_BOMBA" + cost = 80000 + contains = list(/obj/item/grenade/clusterbuster/honk) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_kit.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_kit.dm new file mode 100644 index 000000000000..dde4e9c5d6f5 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_kit.dm @@ -0,0 +1,385 @@ +// Цельные наборы +/datum/vox_pack/kit + name = "DEBUG Kit Vox Pack" + category = VOX_PACK_KIT + is_need_trader_cost = FALSE + discount_div = 0.85 // Процент скидки на паки за покупку набора + var/list/packs_list = list() // Паки которые мы используем для инициализации текущего пака и его цены + var/list/contains_addition = list() // Дополнительные предметы в наборе + +/datum/vox_pack/kit/update_pack() + if(discount_div <= 0) + return FALSE + var/temp_cost = initial(cost) + contains.Cut() + if(length(contains_addition)) + contains |= contains_addition + + for(var/i in packs_list) + var/datum/vox_pack/pack = new i + temp_cost += pack.cost + contains |= pack.contains.Copy() + if(pack.limited_stock >= 0) + limited_stock = min(limited_stock, pack.limited_stock) + if(!time_until_available && pack.time_until_available) + time_until_available = max(time_until_available, pack.time_until_available) + + cost = round(temp_cost * discount_div) + return TRUE + +// ============== Дешевые Наборы ============== + +/datum/vox_pack/kit/lamilar + name = "Лёгкий Набор" + desc = "Дешевый и лёгкий набор снаряжения, производящийся в промышленных масштабах и рекомендуемый каждому начинающему и опытному воксу при отсутствии средств." + reference = "K_LAM" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/lamilar, + /datum/vox_pack/clothes/magboots, + /datum/vox_pack/clothes/gloves, + ) + discount_div = 0.65 + + // !!!!!!!!! TEST + contains_addition = list( + /obj/item/roller/holo, + /obj/item/roller/holo, + /obj/item/roller/holo, + ) + +/datum/vox_pack/kit/pressure + name = "Космический Набор" + desc = "Дешевый набор для перемещения в космосе. Отличное дополнение к полевым наборам." + reference = "K_PRES" + cost = 100 + packs_list = list( + /datum/vox_pack/clothes/pressure, + /datum/vox_pack/equipment/mask, + /datum/vox_pack/equipment/nitrogen, + ) + +// ============== Наборы Наемников ============== + +/datum/vox_pack/kit/stormtrooper + name = "Штурмовой Набор" + desc = "Набор штурмовика для сражения при нормальной атмосфере." + reference = "K_STR" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/stormtrooper, + /datum/vox_pack/clothes/magboots/combat, + /datum/vox_pack/clothes/gloves, + /datum/vox_pack/clothes/sechud, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/clothes/belt, + /datum/vox_pack/spike/gun, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/bio/core/taran, + ) + +/datum/vox_pack/kit/fieldmedic + name = "Набор Полевого Медика" + desc = "Всё для оказания первой помощи, хирургического вмешательства и защиты самого медика." + reference = "K_FM" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/fieldmedic, + /datum/vox_pack/clothes/magboots, + /datum/vox_pack/clothes/gloves, + /datum/vox_pack/clothes/healthhud, + /datum/vox_pack/medicine/blood, + /datum/vox_pack/medicine/blood, + /datum/vox_pack/medicine/blood, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/stabilizing, + /datum/vox_pack/medicine/dart/stabilizing, + ) + contains_addition = list( + /obj/item/storage/firstaid/adv, + /obj/item/storage/firstaid/toxin, + /obj/item/storage/firstaid/surgery, + /obj/item/roller/holo, + ) + discount_div = 0.65 + +/datum/vox_pack/kit/field_scout + name = "Набор Полевого Разведчика" + desc = "Набор для разведывательных действий в благоприятных условиях." + reference = "K_FSCT" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/lamilar/scout, + /datum/vox_pack/clothes/magboots/scout, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/equipment/ai_detector, + /datum/vox_pack/equipment/stealth, + /datum/vox_pack/consumables/t4, + /datum/vox_pack/consumables/t4, + ) + discount_div = 0.65 + +/datum/vox_pack/kit/bomber + name = "Набор Подрывника" + desc = "Набор медвежатника для собственной защиты и вскрытия защищенного." + reference = "K_BOM" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/bomber, + /datum/vox_pack/clothes/magboots/heavy, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/clothes/belt/bio, + /datum/vox_pack/consumables/c4, + /datum/vox_pack/consumables/c4, + /datum/vox_pack/consumables/c4, + /datum/vox_pack/consumables/c4, + /datum/vox_pack/consumables/c4, + /datum/vox_pack/consumables/c4, + /datum/vox_pack/consumables/x4, + /datum/vox_pack/consumables/x4, + /datum/vox_pack/consumables/t4, + /datum/vox_pack/consumables/t4, + /datum/vox_pack/melee/inflatable, + /datum/vox_pack/melee/inflatable, + /datum/vox_pack/melee/inflatable, + ) + contains_addition = list( + /obj/item/clothing/glasses/hud/diagnostic/sunglasses, + ) + discount_div = 0.5 + + +// ============== Наборы Рейдеров ============== + +/datum/vox_pack/kit/trooper + name = "Набор Космического Штурмовика" + desc = "Набор для штурма космических кораблей и станций." + reference = "K_TROOP" + cost = 100 + packs_list = list( + /datum/vox_pack/raider/trooper, + /datum/vox_pack/clothes/magboots/combat, + /datum/vox_pack/clothes/gloves, + /datum/vox_pack/clothes/sechud, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/spike/gun/long, + /datum/vox_pack/clothes/belt, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/consumables/c4, + /datum/vox_pack/consumables/c4, + /datum/vox_pack/consumables/c4, + ) + contains_addition = list( + /obj/item/clothing/mask/breath/vox/respirator, + /obj/item/tank/internals/emergency_oxygen/double/vox, + ) + +/datum/vox_pack/kit/scout + name = "Набор Космического Разведчика" + desc = "Набор для проведения разведки в неблагоприятных условиях." + reference = "K_SSCT" + cost = 100 + packs_list = list( + /datum/vox_pack/raider/scout, + /datum/vox_pack/clothes/magboots/scout, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/equipment/ai_detector, + /datum/vox_pack/equipment/jammer, + ) + contains_addition = list( + /obj/item/clothing/mask/breath/vox/respirator, + /obj/item/tank/internals/emergency_oxygen/double/vox, + ) + discount_div = 0.65 + +/datum/vox_pack/kit/medic + name = "Набор Космического Медика" + desc = "Набор для скорого оказания помощи в неблагоприятных условиях и защиты носителя." + reference = "K_MEDIC" + cost = 100 + packs_list = list( + /datum/vox_pack/raider/medic, + /datum/vox_pack/clothes/magboots, + /datum/vox_pack/clothes/gloves, + /datum/vox_pack/clothes/healthhud, + /datum/vox_pack/dart/gun, + /datum/vox_pack/clothes/belt/bio, + /datum/vox_pack/dart/cartridge/medical, + /datum/vox_pack/dart/cartridge/medical, + /datum/vox_pack/dart/cartridge/medical, + /datum/vox_pack/dart/cartridge/medical, + /datum/vox_pack/dart/cartridge/medical, + /datum/vox_pack/dart/cartridge/medical, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/heal, + /datum/vox_pack/medicine/dart/stabilizing, + /datum/vox_pack/medicine/dart/stabilizing, + ) + discount_div = 0.65 + contains_addition = list( + /obj/item/clothing/mask/breath/vox, + /obj/item/tank/internals/emergency_oxygen/double/vox, + /obj/item/roller/holo, + ) + +/datum/vox_pack/kit/mechanic + name = "Набор Механика" + desc = "Набор первичного необходимого для ремонта вышедшего из строя оборудования в условиях боя." + reference = "K_MECH" + cost = 100 + packs_list = list( + /datum/vox_pack/raider/mechanic, + /datum/vox_pack/clothes/magboots/heavy, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/equipment/jammer, + /datum/vox_pack/equipment/ai_detector, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/melee/inflatable, + /datum/vox_pack/melee/inflatable, + /datum/vox_pack/melee/inflatable, + ) + contains_addition = list( + /obj/item/clothing/glasses/hud/diagnostic/night, + /obj/item/clothing/mask/breath/vox, + /obj/item/tank/internals/emergency_oxygen/double/vox, + /obj/item/storage/belt/utility/full, + /obj/item/storage/firstaid/machine, + /obj/item/clothing/glasses/welding, + ) + discount_div = 0.65 + +/datum/vox_pack/kit/heavy + name = "Тяжелый Набор" + desc = "Полный набор тяжелого костюма для работы в условиях переизбыточной опасности." + reference = "K_HEAVY" + cost = 100 + packs_list = list( + /datum/vox_pack/raider/heavy, + /datum/vox_pack/clothes/magboots/heavy, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/clothes/sechud, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/clothes/belt + ) + contains_addition = list( + /obj/item/clothing/mask/breath/vox/respirator, + /obj/item/tank/internals/emergency_oxygen/double/vox, + /obj/item/clothing/glasses/thermal/monocle, + ) + +// ============== Наборы Киг-Йар ============== +// Наборы с щитами и "полезными невостребованными вещами" для востребования покупки. + +/datum/vox_pack/kit/kigyar + name = "Набор Киг-Йар" + desc = "Набор стрелка Киг-Йар для ведения боевых действий на средних дистанциях." + time_until_available = 30 + discount_div = 0.5 + reference = "K_KIG" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/lamilar, + /datum/vox_pack/clothes/magboots/scout, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/melee/dropwall, + /datum/vox_pack/melee/dropwall, + /datum/vox_pack/melee/shield, + /datum/vox_pack/spike/gun, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/clothes/eye_night, + ) + +/datum/vox_pack/kit/kigyar/long + name = "Набор Киг-Йар Пронзателя" + desc = "Набор Киг-Йар для ведения боевых действий сквозь укрытия." + reference = "K_KIG_LONG" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/lamilar/scout, + /datum/vox_pack/clothes/magboots/scout, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/melee/dropwall, + /datum/vox_pack/melee/shield, + /datum/vox_pack/spike/gun/long, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + /datum/vox_pack/spike/cell, + ) + contains_addition = list( + /obj/item/clothing/glasses/thermal/monocle, + ) + +/datum/vox_pack/kit/kigyar/bio + name = "Набор Киг-Йар Биоштурмовика" + desc = "Набор Киг-Йар для ведения боевых действий в ближнем бою" + reference = "K_KIG_BIO" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/bomber, + /datum/vox_pack/clothes/magboots/combat, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/melee/shield, + /datum/vox_pack/spike/gun/bio, + /datum/vox_pack/consumables/food, + /datum/vox_pack/consumables/food, + /datum/vox_pack/consumables/food, + /datum/vox_pack/consumables/food, + /datum/vox_pack/consumables/food, + /datum/vox_pack/consumables/food, + ) + contains_addition = list( + /obj/item/clothing/glasses/sunglasses/big, + ) + +/datum/vox_pack/kit/kigyar/biotech + name = "Набор Киг-Йар Биотехника" + desc = "Набор Киг-Йар хозяина биоядер." + reference = "K_KIG_BIOTECH" + cost = 100 + packs_list = list( + /datum/vox_pack/mercenary/fieldmedic, + /datum/vox_pack/clothes/magboots/scout, + /datum/vox_pack/clothes/radio/alt, + /datum/vox_pack/clothes/gloves/insulated, + /datum/vox_pack/melee/shield, + /datum/vox_pack/bio/gun, + /datum/vox_pack/clothes/belt/bio, + /datum/vox_pack/bio/core/kusaka, + /datum/vox_pack/bio/core/kusaka, + /datum/vox_pack/bio/core/kusaka, + /datum/vox_pack/bio/core/kusaka, + /datum/vox_pack/bio/core/taran, + /datum/vox_pack/bio/core/tox, + /datum/vox_pack/bio/core/tox, + /datum/vox_pack/bio/core/acid, + /datum/vox_pack/bio/core/acid, + ) + contains_addition = list( + /obj/item/clothing/glasses/sunglasses/big, + ) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_medicine.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_medicine.dm new file mode 100644 index 000000000000..1b2a23af660c --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_medicine.dm @@ -0,0 +1,58 @@ +/datum/vox_pack/medicine + name = "DEBUG Medicine Vox Pack" + category = VOX_PACK_MEDICINE + +/datum/vox_pack/medicine/blood + name = "Кровь" + desc = "Кровь предназначенная для переливания Воксам." + reference = "MED_BLOOD" + cost = 200 + contains = list(/obj/item/reagent_containers/iv_bag/blood/vox) + +/datum/vox_pack/medicine/dart + name = "Медицинский дротик" + desc = "Дротик наполненный медикаментами от слабых повреждений." + reference = "MED_DART" + cost = 25 + contains = list(/obj/item/reagent_containers/syringe/dart/medical) + +// 1 уровень +/datum/vox_pack/medicine/dart/tainted + name = "Медицинский дротик - Просрочен" + desc = "Просроченный и списанный медицинский дротик." + reference = "MED_DART_TA" + cost = 10 + contains = list(/obj/item/reagent_containers/syringe/dart/medical/tainted) + +// 2 уровень +/datum/vox_pack/medicine/dart/heal + name = "Медицинский дротик - Лечебный" + desc = "Медицинский дротик для лечения тяжелых травм." + reference = "MED_DART_HE" + cost = 60 + contains = list(/obj/item/reagent_containers/syringe/dart/medical/heal) + +/datum/vox_pack/medicine/dart/stabilizing + name = "Медицинский дротик - Стабилизирующий" + desc = "Медицинский дротик для стабилизации пациента." + reference = "MED_DART_ST" + cost = 80 + contains = list(/obj/item/reagent_containers/syringe/dart/medical/stabilizing) + +// 3 уровень (1 час) +/datum/vox_pack/medicine/dart/advanced + name = "Медицинский дротик - Продвинутый регенеративный" + desc = "Медицинский дротик стимулирующий быструю регенерацию." + reference = "MED_DART_AD" + time_until_available = 60 + cost = 200 + contains = list(/obj/item/reagent_containers/syringe/dart/medical/advanced) + +// 4 уровень (2 час) +/datum/vox_pack/medicine/dart/combat + name = "Медицинский дротик - Боевой стимулянт" + desc = "передовой дротик с эксперементальными стимулянтами." + reference = "MED_DART_CO" + cost = 450 + time_until_available = 120 + contains = list(/obj/item/reagent_containers/syringe/dart/medical/combat) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_melee.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_melee.dm new file mode 100644 index 000000000000..fce78cdf25bb --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_melee.dm @@ -0,0 +1,89 @@ + +/datum/vox_pack/melee + name = "DEBUG Melee Vox Pack" + category = VOX_PACK_MELEE + +// ============== Гарпун ============== + +/datum/vox_pack/melee/harpoon + name = "Гарпун" + desc = "Инструмент для охоты на космических китов." + reference = "MEL_HARP" + cost = 100 + contains = list(/obj/item/harpoon) + +// ============== Щиты ============== + +/datum/vox_pack/melee/shield + name = "Энергощит" + desc = "Энергетический компактный ручной щит, пособный отражать энергетические снаряды, но не может блокировать прямые воздействия." + reference = "MEL_SH" + cost = 4000 + contains = list(/obj/item/shield/energy) + + +// ============== Мечи ============== + +/datum/vox_pack/melee/sword + name = "Энергосабля" + desc = "Энергетическая сабля для абордажей кораблей." + reference = "MEL_SW" + cost = 4000 + time_until_available = 45 + contains = list(/obj/item/melee/energy/sword/pirate) + +/datum/vox_pack/melee/sword/purple + name = "Энергомеч (Фиолетовый)" + desc = "Энергетический меч для прижигания ран отрубленных конечностей неприятеля. Цвет решительности, цвет Рейдеров. Классика Воксов." + reference = "MEL_SWP" + cost = 8000 + time_until_available = 120 + contains = list(/obj/item/melee/energy/sword/saber/purple) + +/datum/vox_pack/melee/sword/blue + name = "Энергомеч (Синий)" + desc = "Энергетический меч для прижигания ран отрубленных конечностей неприятеля. Цвет силы и стойкости. Его носят бастионы мира Воксов." + reference = "MEL_SWB" + cost = 10000 + time_until_available = 120 + contains = list(/obj/item/melee/energy/sword/saber/blue) + +/datum/vox_pack/melee/sword/green + name = "Энергомеч (Зелёный)" + desc = "Энергетический меч для прижигания ран отрубленных конечностей неприятеля. Цвет миротворцев, тех, кто не любит насилие и причиняет его с большой неохотой. С этим мечом причиняют добро и наносят радость." + reference = "MEL_SWG" + cost = 10000 + time_until_available = 120 + contains = list(/obj/item/melee/energy/sword/saber/green) + +/datum/vox_pack/melee/sword/red + name = "Энергомеч (Красный)" + desc = "Энергетический меч для прижигания ран отрубленных конечностей неприятеля. Цвет ненависти, гнева и злого злодейства злыхх злыдней. Безвкусица." + reference = "MEL_SWR" + cost = 12000 + time_until_available = 120 + contains = list(/obj/item/melee/energy/sword/saber/red) + +/datum/vox_pack/melee/fly + name = "Уничтожитель насекомых" + desc = "Всеми признанный лучший уничтожитель нианов и киданов." + reference = "MEL_FLY" + cost = 150 + contains = list(/obj/item/melee/flyswatter) + + +// ============== Раскладываемое ============== + +/datum/vox_pack/melee/dropwall + name = "Генератор щита" + desc = "Щитовой развертываемый генератор, активирующий временное укрытие, которое блокирует снаряды и взрывы с определенного направления, в то же время позволяя остальным снарядам свободно проходить сзади." + reference = "MEL_DW" + cost = 500 + contains = list(/obj/item/grenade/barrier/dropwall) + +/datum/vox_pack/melee/inflatable + name = "Надувной Набор" + desc = "Развертываемый надувной набор для заделывания разгерметизаций." + reference = "MEL_IFL" + cost = 200 + contains = list(/obj/item/storage/briefcase/inflatable) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_merc.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_merc.dm new file mode 100644 index 000000000000..52a1848b5afc --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_merc.dm @@ -0,0 +1,69 @@ +/datum/vox_pack/mercenary + name = "DEBUG Mercenary Vox Pack" + category = VOX_PACK_MERCENARIES + time_until_available = 10 + +/datum/vox_pack/mercenary/lamilar + name = "Ламилярный Костюм" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + \nКомпактный и мобильный костюм отлично помещается в рюкзаке, сформирован из легких пластин позволяющий получить хорошие защитные свойства в совокупности с удобством для носителя, не мешающий его передвижению. Но, в отличии от других моделей, не дает приемлимых защитных параметров от воздействий внешней агрессивной среды и не защищает руки." + reference = "M_LAM" + cost = 500 + contains = list( + /obj/item/clothing/suit/armor/vox_merc/laminar, + /obj/item/clothing/head/helmet/vox_merc/laminar + ) + +/datum/vox_pack/mercenary/stormtrooper + name = "Штурмовой Бронекостюм" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + \nШтурмовой бронекостюм воксов разработан под их структуру тела и прикрывает наиболее уязвимые места, превосходно защищает носителя от огнестрельного вооружения и ближних атак." + reference = "M_STR" + cost = 2500 + contains = list( + /obj/item/clothing/suit/armor/vox_merc/stormtrooper, + /obj/item/clothing/head/helmet/vox_merc/stormtrooper + ) + +/datum/vox_pack/mercenary/fieldmedic + name = "Медицинский Полевой Костюм" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + \nМедицинский полевой костюм предназначен для защиты владельца от биологических угроз, радиации и кислотной атмосферы. Дает слабую защиту от внешне поступаемых энергетических снарядов, равномерно рассеивая остаточную энергию. Костюм абсолютно не предназначен для защиты в ближнем бою или от взрывчатых веществ за счет свое внутреннего строения, повреждающий носителя от осколков костюма при нарушении целостности. Имеет хранилище для ношения аптечек и контейнеров с химикатами." + reference = "M_FMC" + cost = 1000 + contains = list( + /obj/item/clothing/suit/armor/vox_merc/fieldmedic, + /obj/item/clothing/head/helmet/vox_merc/fieldmedic + ) + +/datum/vox_pack/mercenary/lamilar/scout + name = "Ламилярный Костюм Разведчика" + desc = "Компактный и мобильный костюм сформированный из лёгких пластин и за счет их особого размещения, увеличивает погашение импульсов перенаправляя их в ускорение носителя, но взамен теряя значимые защитные свойства. " + reference = "M_LAM_S" + cost = 1000 + contains = list( + /obj/item/clothing/suit/armor/vox_merc/laminar/scout, + /obj/item/clothing/head/helmet/vox_merc/laminar + ) + +/datum/vox_pack/mercenary/bomber + name = "Взрывозащитный Костюм" + desc = "Специализированный бронекостюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + \nОсобый разработанный штурмовой тяжелый костюм для действий в условиях крайне взрывоопасной атмосферы. Абсолютная жаростойкость, повышенная стойкость к кислотным жидкостям и лазерному воздействию делают эту броню основной для воксов действующих внутри активно разрушающихся комплексов и кораблей." + reference = "M_BOM" + cost = 1500 + contains = list( + /obj/item/clothing/suit/armor/vox_merc/bomber, + /obj/item/clothing/head/helmet/vox_merc/bomber + ) + +/datum/vox_pack/mercenary/stealth + name = "Маскировочный Костюм" + desc = "Специализированный маскировочный костюм воксов-наемников. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными для большинства атмосфер с приемлимым давлением. \ + Предназначен для скрытых операций." + reference = "M_STE" + cost = 4500 + contains = list( + /obj/item/clothing/suit/armor/vox_merc/stealth, + /obj/item/clothing/head/helmet/vox_merc/stealth, + ) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_raider.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_raider.dm new file mode 100644 index 000000000000..dcdb8d2aff13 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_raider.dm @@ -0,0 +1,58 @@ +/datum/vox_pack/raider + name = "DEBUG Raider Vox Pack" + category = VOX_PACK_RAIDER + +/datum/vox_pack/raider/trooper + name = "Скафандр Штурмовика" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nКостюм космического штурмовика рейдеров с защитой от огнестрела и колюще-режущего." + reference = "R_TRR" + cost = 6000 + time_until_available = 60 + contains = list( + /obj/item/clothing/suit/space/hardsuit/vox/trooper + ) + +/datum/vox_pack/raider/scout + name = "Скафандр Разведчика" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nКостюм разведчика не сковывает движение и помогает владельцу удобней двигаться в условиях невесомости." + reference = "R_SCT" + cost = 4000 + time_until_available = 45 + contains = list( + /obj/item/clothing/suit/space/hardsuit/vox/scout + ) + +/datum/vox_pack/raider/medic + name = "Скафандр Медика" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nКостюм для работы в условиях отдаленности от опасностей. Более подвижен и обладает приемлимыми свойствами защиты от воздействий различного рода снарядов, но из-за своей структуры способен нанести вред носителю при взрывных воздействиях или колющих атак. Костюм отлично выдерживает радиационный фон и кислотное воздействие и биологическими угрозами. Имеет хранилище для ношения аптечек контейнеров с химикатами." + reference = "R_MED" + cost = 3500 + time_until_available = 45 + contains = list( + /obj/item/clothing/suit/space/hardsuit/vox/medic + ) + +/datum/vox_pack/raider/mechanic + name = "Скафандр Механика" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nКостюм для работы в условиях крайне опасных и недружелюбных атмосфер. За счет своей структуры и технологии рассеивания тепла, костюм обладает хорошей защитой от энергетического оружия." + reference = "R_MEC" + cost = 4000 + time_until_available = 45 + contains = list( + /obj/item/clothing/suit/space/hardsuit/vox/mechanic + ) + +/datum/vox_pack/raider/heavy + name = "Тяжелый Бронескафандр" + desc = "Специализированный космический защитный костюм воксов-рейдеров. Синтетический материал используемый в костюмах воксов позволяет тем действовать в неблагоприятных для них окружающих условиях, делая их костюмы универсальными. За счет иной структуры, костюм рейдеров уступает в защитных свойствах костюму наемников. \ + \nТяжелый огнеупорный и взрывостойкий костюм рейдеров с превосходной защитой от энергетического оружия и колюще-режущих и приемлимой от огнестрела. Костюм был разработан для противостояния механизированным силам в условиях космического пространства. К сожалению, его вес и ресиверы не настолько совершены, из-за чего он уступает в скорости." + reference = "R_HEV" + cost = 20000 + time_until_available = 90 + contains = list( + /obj/item/clothing/suit/space/hardsuit/vox/heavy + ) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_spike.dm b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_spike.dm new file mode 100644 index 000000000000..d6de59e5165d --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/packs/vox_shop_pack_spike.dm @@ -0,0 +1,40 @@ +/datum/vox_pack/spike + name = "DEBUG Spike Vox Pack" + category = VOX_PACK_SPIKE + + +// ============== GUNS ============== + +/datum/vox_pack/spike/gun + name = "Шипомет" + desc = "Стандартный универсальный шипомет, перезаряжаемый через съемные батареи. Выстреливает энергетическими кристаллами. Никто кроме Воксов не сможет взять его в руки." + reference = "S_G" + cost = 1300 + time_until_available = 45 + contains = list(/obj/item/gun/energy/spike) + +/datum/vox_pack/spike/gun/long + name = "Длинный Шипомет" + desc = "Точное оружие с самовосстанавливающимися снарядами способное пронизить шипами сразу несколько целей по пути полета. Выстреливает длинными энергетическими кристаллами с увеличенной проникающей способностью, за счет снижения смертоносности. Подходит для толп противников. Никто кроме Воксов не сможет взять его в руки." + reference = "S_GL" + cost = 1800 + time_until_available = 60 + contains = list(/obj/item/gun/energy/spike/long) + +/datum/vox_pack/spike/gun/bio + name = "Био Шипомет" + desc = "Оружие восстанавливающее снаряды за счет нутриентов носителя-Вокса, но пожирает другие виды органиков при попытке его использования. Выстреливает большими энергетическими заостренными кристаллами, выматывающие цель. Подходит для сражения с одиночной целью на ближних дистанциях. Никто кроме Воксов не сможет взять его в руки. Чем дальше летит снаряд, тем больше он теряет в своей скорости и эффективности." + reference = "S_GB" + cost = 3000 + time_until_available = 60 + contains = list(/obj/item/gun/energy/spike/bio) + +// ============== AMMO ============== + +/datum/vox_pack/spike/cell + name = "Зарядная Ячейка" + desc = "Стандартная зарядная ячейка подходящая под большинство шипометов." + reference = "S_C" + cost = 100 + time_until_available = 45 + contains = list(/obj/item/stock_parts/cell/vox_spike) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/vox_cash.dm b/modular_ss220/antagonists/code/vox_raider/objects/vox_cash.dm new file mode 100644 index 000000000000..014b30b14ede --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/vox_cash.dm @@ -0,0 +1,68 @@ +/obj/item/stack/vox_cash + name = "Кикиридиты" + desc = "Криптографический чип доступа к адресам транзакций рассчетных средств воксов." + icon = 'modular_ss220/antagonists/icons/trader_machine.dmi' + icon_state = "vox_key" + hitsound = "swing_hit" + force = 1 + throwforce = 1 + throw_speed = 1 + throw_range = 7 + w_class = WEIGHT_CLASS_TINY + max_amount = MAX_STACKABLE_CASH*10 + merge_type = /obj/item/stack/vox_cash + +/obj/item/stack/vox_cash/proc/rename_amount() + name = "[initial(name)] ([get_amount()])" + +/obj/item/stack/vox_cash/Initialize(mapload, new_amount, merge) + . = ..() + rename_amount() + +/obj/item/stack/vox_cash/merge(obj/item/stack/S) + . = ..() + rename_amount() + +/obj/item/stack/vox_cash/use(used, check = TRUE) + . = ..() + rename_amount() + +/obj/item/stack/vox_cash/add(newamount) + . = ..() + rename_amount() + +/obj/item/stack/vox_cash/c5 + amount = 5 + +/obj/item/stack/vox_cash/c10 + amount = 10 + +/obj/item/stack/vox_cash/c20 + amount = 20 + +/obj/item/stack/vox_cash/c50 + amount = 50 + +/obj/item/stack/vox_cash/c100 + amount = 100 + +/obj/item/stack/vox_cash/c200 + amount = 200 + +/obj/item/stack/vox_cash/c500 + amount = 500 + +/obj/item/stack/vox_cash/c1000 + amount = 1000 + +/obj/item/stack/vox_cash/c10000 + amount = 10000 + +/obj/item/stack/vox_cash/c25000 + amount = 25000 + +/obj/item/stack/vox_cash/c50000 + amount = 50000 + +/obj/item/stack/vox_cash/c100000 + amount = 100000 diff --git a/modular_ss220/antagonists/code/vox_raider/objects/vox_objects.dm b/modular_ss220/antagonists/code/vox_raider/objects/vox_objects.dm new file mode 100644 index 000000000000..2e39ace29cba --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/vox_objects.dm @@ -0,0 +1,26 @@ +/obj/item/clothing/glasses/meson/cyber/vox + name = "Мезонный Глаз Воксов" + desc = "Мезонный кибернетический глаз с системой вставки в глазной разъем. Полностью заменяет функционирующий глаз или его полость. \ + ВНИМАНИЕ! Глаз возможно удалить только хирургическим путем. Из-за своего размера - не позволяет надевать прочие приблуды на глаза, заменяя очки." + flags = 0 + +/obj/item/clothing/glasses/meson/cyber/vox/equipped(mob/user, slot, initial) + . = ..() + if(slot == SLOT_HUD_GLASSES) + flags = NODROP + else + flags = initial(flags) + +/obj/item/clothing/glasses/thermal/cyber/vox + name = "Термальный Глаз Воксов" + desc = "Термальный кибернетический глаз с системой вставки в глазной разъем. Полностью заменяет функционирующий глаз или его полость. \ + ВНИМАНИЕ! Глаз возможно удалить только хирургическим путем. Из-за своего размера - не позволяет надевать прочие приблуды на глаза, заменяя очки." + flags = 0 + +/obj/item/clothing/glasses/thermal/cyber/vox/equipped(mob/user, slot, initial) + . = ..() + if(slot == SLOT_HUD_GLASSES) + flags = NODROP + else + flags = initial(flags) + diff --git a/modular_ss220/antagonists/code/vox_raider/objects/vox_shop.dm b/modular_ss220/antagonists/code/vox_raider/objects/vox_shop.dm new file mode 100644 index 000000000000..fa338bc08ef9 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/vox_shop.dm @@ -0,0 +1,296 @@ +/obj/machinery/vox_shop + name = "Киконсоль Закиказов" + desc = "Технология связывающая воксов на дальних рубежах." + icon = 'modular_ss220/antagonists/icons/trader_machine.dmi' + icon_state = "shop" + max_integrity = 5000 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + anchored = TRUE + density = TRUE + var/cash_stored = 0 + + var/list/packs_cats = list() // Категории по предметам - ui_static_data + var/list/packs_items = list() // Все доступные предметы + + var/list/cart_list + var/list/cart_data + + +// ============ DATA ============ + +/obj/machinery/vox_shop/Initialize(mapload) + . = ..() + generate_pack_items() + generate_pack_lists() + +/obj/machinery/vox_shop/proc/generate_pack_items() + var/list/shop_items = list() + var/obj/machinery/vox_trader/trader = locate() in GLOB.machines + for(var/path in subtypesof(/datum/vox_pack)) + var/datum/vox_pack/pack = new path + if(pack.cost < 0) + continue + if(pack.is_need_trader_cost) + var/list/pack_contents = list() + for(var/object_type in pack.contains) + var/obj/O = new object_type() + pack_contents.Add(O) + var/pack_trader_cost = trader.get_value(null, pack_contents, TRUE) + QDEL_LIST_CONTENTS(pack_contents) + pack.cost += pack_trader_cost + if(!shop_items[pack.category]) + shop_items[pack.category] = list() + shop_items[pack.category] += pack + + packs_items = shop_items + +/obj/machinery/vox_shop/proc/generate_pack_lists() + var/list/cats = list() + for(var/category in packs_items) + cats[++cats.len] = list("cat" = category, "items" = list()) + for(var/datum/vox_pack/pack in packs_items[category]) + cats[cats.len]["items"] += list(list( + "name" = sanitize(pack.name), + "desc" = sanitize(pack.description()), + "cost" = pack.cost, + "obj_path" = pack.reference + )) + packs_items[pack.reference] = pack + + packs_cats = cats + SStgui.update_uis(src) + + +// ======= Interaction ========== + +/obj/machinery/vox_shop/attack_hand(mob/user) + if(!check_usable(user)) + return + add_fingerprint(user) + ui_interact(user) + +/obj/machinery/vox_shop/proc/check_usable(mob/user) + . = FALSE + if(issilicon(user)) + return + if(!isvox(user)) + to_chat(user, span_notice("Вы осматриваете [src] и не понимаете как оно работает и куда сувать свои пальцы...")) + return + return TRUE + +/obj/machinery/vox_shop/attack_ai(mob/user) + return FALSE + +/obj/machinery/vox_shop/attackby(obj/item/O, mob/user, params) + if(isvoxcash(O)) + user.do_attack_animation(src) + insert_cash(O, user) + return TRUE + . = ..() + +/obj/machinery/vox_shop/proc/insert_cash(obj/item/stack/vox_cash, mob/user) + visible_message("[user] загрузил [vox_cash] в [src].") + cash_stored += vox_cash.amount + vox_cash.use(vox_cash.amount) + return TRUE + +/// Размещение предметов в отдельные емкости +/obj/machinery/vox_shop/proc/make_container(mob/user, list/typepath_objects) + var/is_heavy = FALSE + var/list/objs_for_contain = list() + + // Создаем объекты + for(var/typepath in typepath_objects) + var/obj/obj = new typepath() + objs_for_contain.Add(obj) + if(is_heavy) + continue + if(isitem(obj)) + var/obj/item/item = obj + if(item.w_class >= WEIGHT_CLASS_NORMAL) + is_heavy = TRUE + + // Размещаем по емкостям + if(length(objs_for_contain) > 2) + var/container_type = is_heavy ? /obj/structure/closet/crate/trashcart : /obj/item/storage/box + var/obj/container = new container_type(get_turf(src)) + for(var/obj/obj in objs_for_contain) + obj.forceMove(container) + else if(length(objs_for_contain)) + for(var/obj/obj as anything in objs_for_contain) + if(isitem(obj)) + if(!user.put_in_any_hand_if_possible(obj) && ishuman(user)) + var/mob/living/carbon/human/H = user + H.equip_or_collect(obj, SLOT_HUD_IN_BACKPACK) + else + obj.forceMove(get_turf(src)) + + do_sparks(5, 1, get_turf(src)) + + +// ============= UI ============= + +/obj/machinery/vox_shop/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Shop", name) + ui.open() + +/obj/machinery/vox_shop/ui_data(mob/user) + var/list/data = list() + + data["cash"] = cash_stored + data["cart"] = generate_tgui_cart() + data["cart_price"] = calculate_cart_cash() + + var/list/vox_raider_members = list() + for(var/datum/team/vox_raiders/team in subtypesof(/datum/team/vox_raiders)) + vox_raider_members.Add(team.members) + data["vox_members"] = vox_raider_members + // data["crewmembers"] = GLOB.crew_repository.health_data(viewing_current_z_level) + // data["critThreshold"] = HEALTH_THRESHOLD_CRIT + + return data + +/obj/machinery/vox_shop/ui_static_data(mob/user) + var/list/static_data = list() + + if(!packs_cats || !packs_items) + generate_pack_lists(user) + //static_data["packs"] = packs_items + static_data["cats"] = packs_cats + + return static_data + +/obj/machinery/vox_shop/ui_act(action, list/params, datum/tgui/ui) + if(..()) + return + + . = TRUE + + switch(action) + if("add_to_cart") + add_to_cart(params, ui.user) + + if("remove_from_cart") + remove_from_cart(params) + + if("set_cart_item_quantity") + set_cart_item_quantity(params) + + if("purchase_cart") + if(!LAZYLEN(cart_list)) + return + var/cart_cash = calculate_cart_cash() + if(cart_cash > cash_stored) + to_chat(ui.user, "[src] недостаточно кикиридитов! Неси больше!") + return + + var/list/bought_typepath_objects = list() + for(var/reference in cart_list) + var/datum/vox_pack/pack = packs_items[reference] + var/amount = cart_list[reference] + if(amount <= 0) + continue + var/list/purchase_list = mass_purchase(pack, pack ? pack.reference : "", amount) + if(!length(purchase_list)) + to_chat(ui.user, span_warning("[pack.name] - превысил допустимое возможное количество для покупки.")) + return + bought_typepath_objects += purchase_list + + // Обновляем количество купленного товара + for(var/reference in cart_list) + var/datum/vox_pack/pack = packs_items[reference] + if(pack.limited_stock < 0) + continue + var/amount = pack.purchased + cart_list[reference] + pack.purchased += amount + + // Завершение покупки + make_container(ui.user, bought_typepath_objects) + cash_stored -= cart_cash + empty_cart() + SStgui.update_uis(src) + + if("empty_cart") + empty_cart() + + +// ========== UI Procs ========== + +/obj/machinery/vox_shop/proc/mass_purchase(datum/vox_pack/pack, reference, amount = 1) + if(!pack) + return + if(amount <= 0) + return + if(!pack.check_possible_buy(amount)) + return + if(!pack.check_time_available()) + return + var/list/bought_objects = list() + for(var/i in 1 to amount) + var/list/items_list = pack.get_items_list() + if(!length(items_list)) + break + bought_objects += items_list + return bought_objects + +/obj/machinery/vox_shop/proc/calculate_cart_cash() + . = 0 + for(var/reference in cart_list) + var/datum/vox_pack/item = packs_items[reference] + var/amount = cart_list[reference] + . += item.cost * amount + +/obj/machinery/vox_shop/proc/generate_tgui_cart(update = FALSE) + if(!update) + return cart_data + + if(!length(cart_list)) + cart_list = null + cart_data = null + return cart_data + + cart_data = list() + for(var/reference in cart_list) + var/datum/vox_pack/pack = packs_items[reference] + cart_data += list(list( + "name" = sanitize(pack.name), + "desc" = sanitize(pack.description()), + "cost" = pack.cost, + "obj_path" = pack.reference, + "amount" = cart_list[reference], + "limit" = pack.limited_stock, + "is_time_available" = pack.check_time_available() + )) + +/obj/machinery/vox_shop/proc/add_to_cart(params, mob/user) + var/item = params["item"] + var/amount = 1 + var/datum/vox_pack/pack = packs_items[item] + if(LAZYIN(cart_list, item)) + amount += cart_list[item] + if(!pack.check_possible_buy(amount)) + to_chat(user, span_warning("[pack.name] больше невозможно купить!")) + return + if(!pack.check_time_available()) + to_chat(user, span_warning("[pack.name] будет доступен к покупке в [pack.get_time_available()], осталось [pack.get_time_left()]")) + return + LAZYSET(cart_list, item, max(amount, 1)) + generate_tgui_cart(TRUE) + +/obj/machinery/vox_shop/proc/remove_from_cart(params) + LAZYREMOVE(cart_list, params["item"]) + generate_tgui_cart(TRUE) + +/obj/machinery/vox_shop/proc/empty_cart() + cart_list = null + generate_tgui_cart(TRUE) + +/obj/machinery/vox_shop/proc/set_cart_item_quantity(params) + var/amount = text2num(params["quantity"]) + if(amount <= 0) + remove_from_cart(params) + return + LAZYSET(cart_list, params["item"], max(amount, 0)) + generate_tgui_cart(TRUE) diff --git a/modular_ss220/antagonists/code/vox_raider/objects/vox_trade.dm b/modular_ss220/antagonists/code/vox_raider/objects/vox_trade.dm new file mode 100644 index 000000000000..70a741e8fa97 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/vox_trade.dm @@ -0,0 +1,576 @@ +/obj/machinery/vox_trader + name = "Расчичетчикик" + desc = "Приемная и расчетная связная машина для ценностей. Проста также как еда воксов." + icon = 'modular_ss220/antagonists/icons/trader_machine.dmi' + icon_state = "trader-idle-off" + var/icon_state_on = "trader-idle" + max_integrity = 5000 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + anchored = TRUE + density = FALSE + + var/cooldown = 3 SECONDS + var/is_trading_now = FALSE + + var/list/connected_instruments = list() + + // Забавные взаимодействия + var/angry_count = 0 + var/list/blacklist_users = list() + + // Данные для подсчета драгоценностей выполнения задачи. + // Обновляются при первом взаимодействии если есть воксы-рейдеры. + var/precious_collected_dict = list() + var/all_values_sum = 0 + var/precious_value + var/collected_access_list = list() + var/collected_tech_dict = list() + + // Списки запрещенных для продажи товаров, инициализируется через отдельный PROC, а не тут + var/list/blacklist_objects = list() + + // ========= МНОЖИТЕЛИ ========= + + // произведения за параметры + var/tech_mult = 6 + var/weight_mult = 3 + var/force_mult = 5 + + // делители за параметры + var/armor_div = 10 + var/stack_div = 8 + var/temp_div = 5 + var/no_unique_tech_div = 4 + var/denomination_div = 5 + + // дополнительные бонусы + var/integrity_reward = 5 + var/electroprotect_reward = 50 + var/permeability_reward = 20 + var/highrisk_reward = 2500 + var/valuable_highrisk_reward = 5000 + var/value_access_reward = 100 + var/valuable_access_reward = 500 + var/unique_tech_level_reward = 300 // учитываем также множитель за технологии + var/stock_parts_rating_reward = 50 + + // дополнительные списки + var/list/highrisk_list = list() + var/list/valuable_highrisk_list = list( + /obj/item/areaeditor/blueprints/ce, + /obj/item/disk/nuclear, + /obj/item/clothing/suit/armor/reactive, + /obj/item/documents, + ) + var/list/valuable_access_list = list() // определяется при инициализации + var/list/valuable_tech_list = list("bluespace", "syndicate", "combat", "abductor") + + // дополнительные суммы за ценности + var/list/valuable_objects_dict = list( + /obj/machinery/nuclearbomb = 5000, // Ядро внутри является хайриском, оно дороже и учитывается при продаже. ~12.5k + /obj/item/mod/core = 1000, + /obj/item/mod = 300, + /obj/machinery/power/port_gen = 800, + /obj/machinery/power = 600, + /obj/machinery/the_singularitygen/tesla = 8000, + /obj/machinery/the_singularitygen = 6000, + /obj/structure/particle_accelerator = 3000, + /obj/machinery/power/emitter = 500, + /obj/machinery/atmospherics/supermatter_crystal = 15000, + /obj/machinery/satellite/meteor_shield = 1200, + /obj/item/circuitboard/computer/sat_control = 2000, + /obj/item/dna_probe = 150, + /obj/item/circuitboard/machine/dna_vault = 3000, + /obj/item/circuitboard/machine/bluespace_tap = 4500, + /obj/item/circuitboard/machine/bsa = 800, + /obj/machinery/snow_machine = 750, + /obj/structure/toilet/material/bluespace = 5000, + /obj/structure/toilet/material/captain = 3500, + /obj/structure/toilet/material/king = 2250, + /obj/structure/toilet/material/gold = 1250, + /obj/structure/toilet = 250, + /obj/machinery/shower = 150, + /obj/structure/urinal = 150, + ) + var/list/valuable_guns_dict = list( + /obj/item/gun/energy/taser = 300, + /obj/item/gun/energy/disabler = 100, + /obj/item/gun/energy/lasercannon = 400, + + /obj/item/gun/energy/gun/blueshield = 300, + /obj/item/gun/energy/gun/nuclear = 300, + /obj/item/gun/energy/gun/advtaser = 500, + /obj/item/gun/energy/gun = 150, + + /obj/item/gun/energy/pulse = 3000, + /obj/item/gun/energy/ionrifle = 1000, + /obj/item/gun/energy/decloner = 500, + /obj/item/gun/energy/floragun = 500, + /obj/item/gun/energy/meteorgun = 500, + /obj/item/gun/energy/mindflayer = 500, + /obj/item/gun/energy/wormhole_projector = 800, + /obj/item/gun/energy/laser/instakill = 10000, + /obj/item/gun/energy/plasmacutter/adv = 300, + /obj/item/gun/energy/laser = 200, + + /obj/item/gun/magic/staff = 10000, + /obj/item/gun/magic/wand = 5000, + /obj/item/gun/magic = 2000, + + /obj/item/gun/projectile/automatic/toy = 10, + /obj/item/gun/projectile/automatic/lasercarbine = 800, + /obj/item/gun/projectile/automatic/laserrifle = 1000, + /obj/item/gun/projectile/automatic/pistol = 300, + /obj/item/gun/projectile/automatic/l6_saw = 3000, + /obj/item/gun/projectile/automatic/sniper_rifle = 2000, + /obj/item/gun/projectile/automatic = 500, + /obj/item/gun/projectile = 300, + + /obj/item/gun/rocketlauncher = 1000, + /obj/item/gun/medbeam = 2000, + /obj/item/gun/throw/crossbow = 300, + /obj/item/gun/syringe = 200, + ) + // ============================= + +/obj/machinery/vox_trader/Initialize(mapload) + . = ..() + for(var/theft_type in subtypesof(/datum/theft_objective)) + highrisk_list += new theft_type + valuable_access_list += get_region_accesses(REGION_COMMAND) + get_all_centcom_access() + get_all_syndicate_access() + get_all_misc_access() + +/obj/machinery/vox_trader/attack_hand(mob/user) + if(!try_trade(user)) + . = ..() + +/obj/machinery/vox_trader/attacked_by(obj/item/I, mob/living/user) + . = ..() + if(istype(I, /obj/item/hand_valuer)) + var/obj/item/hand_valuer/valuer = I + valuer.connect(user, src) + +/obj/machinery/vox_trader/attack_ai(mob/user) + return FALSE // Ха-ха, глупая железяка не понимает как пользоваться технологиями ВОКСов! + +/obj/machinery/vox_trader/proc/check_usable(mob/user) + . = FALSE + if(issilicon(user)) + return + if(!isvox(user)) + to_chat(user, span_notice("Вы осматриваете [src] и не понимаете как оно работает и куда сувать свои пальцы...")) + return + if(is_trading_now) + to_chat(user, span_warning("[src] обрабатываем и пересчитывает ценности. Ожидайте.")) + return + if(length(blacklist_users) && (user in blacklist_users)) + to_chat(user, span_warning("Вы пытаетесь связаться с [src], но никто не отзывается.")) + return + return TRUE + +/obj/machinery/vox_trader/proc/sparks() + do_sparks(5, 1, get_turf(src)) + +/obj/machinery/vox_trader/proc/try_trade(mob/user) + if(!check_usable(user)) + return FALSE + add_fingerprint(user) + user.do_attack_animation(src) + trade_start() + addtimer(CALLBACK(src, PROC_REF(do_trade), user), cooldown) + return TRUE + +/obj/machinery/vox_trader/proc/do_trade(mob/user) + var/list/items_list = get_trade_contents(user) + INVOKE_ASYNC(src, PROC_REF(make_cash), user, items_list) + +/obj/machinery/vox_trader/proc/make_cash(mob/user, list/items_list) + if(!src || QDELETED(src)) + return + + var/values_sum = get_value(user, items_list) + + if(values_sum <= 10) + if(values_sum <= 0) + angry_count++ + switch(angry_count) + if(3) + atom_say(span_warning("Вами очень недовольны. Где товар?!")) + if(4) + atom_say(span_warning("Вами ОЧЕНЬ недовольны... Нам нужен реальный товар!")) + if(5) + atom_say(span_warning("Отправляй товар!")) + if(6) + atom_say(span_warning("Что ты щелкаешь как дятел?!")) + if(7) + atom_say(span_warning("Или ты будешь отправлять товар или не будешь больше отправлять ничего!")) + if(8) + atom_say(span_warning("Я не буду с тобой торговать пока ты не дашь товар!")) + if(9) + atom_say(span_warning("Ты шутки шутишь? Товар. Последнее предупреждение.")) + if(10) + atom_say(span_warning("[user.name], [src] больше не будет с вами торговать!")) + blacklist_users.Add(user) // Докикикировался. + else + atom_say(span_warning("Вами недовольны. Где товар?")) + else + atom_say(span_notice("Расчет окончен. Средства отправлены на транспортные погашения.")) + trade_cancel() + return + if(values_sum > 100) + all_values_sum += values_sum + atom_say(span_greenannounce("Расчет окончен. [values_sum > 2000 ? "Крайне ценно!" : "Ценно!"] Ваша доля [values_sum]")) + else + atom_say(span_notice("Расчет окончен. Вы бы еще консервных банок насобирали! Ваша доля [values_sum]")) + + angry_count = 0 + trade_cancel() + beam() + new /obj/item/stack/vox_cash(get_turf(src), values_sum) + +/obj/machinery/vox_trader/proc/trade_start() + is_trading_now = TRUE + icon_state = icon_state_on + sparks() + playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, 1) + try_update_blacklist() + +/obj/machinery/vox_trader/proc/trade_cancel() + is_trading_now = FALSE + icon_state = initial(icon_state) + sparks() + +/obj/machinery/vox_trader/proc/beam() + playsound(get_turf(src), 'sound/weapons/contractorbatonhit.ogg', 25, TRUE) + flick("trader-beam", src) + +/obj/machinery/vox_trader/proc/get_value(mob/user, list/items_list, is_visuale_only = FALSE) + var/values_sum = 0 + var/values_sum_precious = 0 // считаем сумму без скидки, например для хайрисков и уникальных доступов. Оцень ценных вещей. + var/accepted_access = list() + + // проверка для бонусной диалоговой строки + var/is_weight = FALSE + var/is_equip = FALSE + var/is_tech = FALSE + var/is_tech_valuable = FALSE + var/is_tech_unique = FALSE + var/is_access_unique = FALSE + + for(var/obj/I in items_list) + if(I.anchored) + continue + + if(isspacecash(I) || isvoxcash(I)) // воксам не нужны деньги мяса. + continue + + var/temp_values_sum = 0 + var/temp_values_sum_precious = 0 + + // целостность объекта + if(I.obj_integrity > 0) + temp_values_sum += round((I.obj_integrity / I.max_integrity) * integrity_reward) + + if(length(I.armor)) + var/temp_val = 0 + var/list/armor_list = I.armor.getList() + for(var/param in armor_list) + var/param_value = armor_list[param] == INFINITY ? 500 : armor_list[param] + if(param_value == 0) + continue + var/div = 1 + if(param in list(FIRE, ACID)) + div = armor_div // избегаем легких очков за часто встречаемые свойства. + temp_val += div > 1 ? round(param_value / div) : temp_val + if(temp_val) + temp_values_sum += temp_val + is_equip = TRUE + + if(I.force || I.throwforce) + temp_values_sum += round((I.force + I.throwforce) * force_mult + (throw_speed * throw_range)) + + if(istype(I, /obj/item/disk/tech_disk)) + var/obj/item/disk/tech_disk/disk = I + if(disk.tech_id) + I.origin_tech = "[disk.tech_id]=[disk.tech_level]" + + if(I.origin_tech) + var/list/tech_list = params2list(I.origin_tech) + for(var/tech in tech_list) + var/temp_mult = 1 + var/tech_value = text2num(tech_list[tech]) + if(tech in collected_tech_dict) + if(collected_tech_dict[tech] < tech_value) + temp_values_sum_precious += unique_tech_level_reward * (tech_value - collected_tech_dict[tech]) + if(!is_visuale_only) + collected_tech_dict[tech] = tech_value + is_tech_unique = TRUE + else + temp_values_sum_precious += unique_tech_level_reward * tech_value + if(!is_visuale_only) + collected_tech_dict += list("[tech]" = tech_value) + is_tech_unique = TRUE + if(tech in valuable_tech_list) + temp_mult = tech_value + is_tech_valuable = TRUE + var/excess_mult = text2num(tech_value) > 7 ? 2 : 1 // переизбыток + temp_values_sum += round(tech_value * temp_mult * excess_mult) + is_tech = TRUE + + if(istype(I, /obj/item/stack)) + var/obj/item/stack/stack = I + var/point_value = 1 + if(istype(I, /obj/item/stack/sheet)) + var/obj/item/stack/sheet/sheet = stack + point_value += sheet.point_value + temp_values_sum *= round(stack.amount / stack_div * point_value) + + if(istype(I, /obj/item/card/id)) + var/obj/item/card/id/id = I + for(var/access in id.access) + if(access in collected_access_list) + continue + if(access in valuable_access_list) + temp_values_sum_precious += valuable_access_reward + is_access_unique = TRUE + else + temp_values_sum_precious += value_access_reward + accepted_access += access + + if(isitem(I)) + var/temp_value = 0 + var/obj/item/item = I + temp_value += temp_values_sum / item.toolspeed + if(item.max_heat_protection_temperature) + temp_value += item.max_heat_protection_temperature / temp_div + if(item.siemens_coefficient) + temp_value += electroprotect_reward * (1 - item.siemens_coefficient) + if(item.permeability_coefficient) + temp_value += permeability_reward * (1 - item.permeability_coefficient) + if(item.w_class) + temp_value += item.w_class * weight_mult + if(item.w_class >= WEIGHT_CLASS_BULKY) + is_weight = TRUE + temp_values_sum += round(temp_value) + + if(istype(I, /obj/item/stock_parts)) + var/obj/item/stock_parts/part = I + temp_values_sum += part.rating * stock_parts_rating_reward + + for(var/datum/theft_objective/objective in highrisk_list) + if(!istype(I, objective.typepath)) + continue + var/temp_value = highrisk_reward + if(objective.special_equipment) + temp_value *= 2 + if(objective.protected_jobs) + for(var/job in objective.protected_jobs) + switch(job) + if("Captain", "Head Of Security") + temp_value *= 2 + else + temp_value *= 1.5 + temp_values_sum_precious += temp_value + + if(I in valuable_highrisk_list) + temp_values_sum_precious += valuable_highrisk_reward + + for(var/valuable_type in valuable_objects_dict) + if(!istype(I, valuable_type)) + continue + temp_values_sum_precious += valuable_objects_dict[valuable_type] + break + + if(istype(I, /obj/item/gun)) + for(var/valuable_type in valuable_guns_dict) + if(!istype(I, valuable_type)) + continue + temp_values_sum_precious += valuable_guns_dict[valuable_type] + break + + temp_values_sum /= denomination_div // деноминируем + + //Оцениваем драгоценность для задания + if(!is_visuale_only) + precious_grading(user, I, temp_values_sum + temp_values_sum_precious) + + // ____________________________ + // Завершаем рассчет + values_sum += temp_values_sum + values_sum_precious += temp_values_sum_precious + + if(!is_visuale_only && (temp_values_sum + temp_values_sum_precious) >= 0) + var/obj/O = I + if(ismob(O.loc)) // Cyborg Parts, wearing clothes, but not contents + var/mob/M = O + M.unEquip(I) + qdel(I) + + var/addition_text = "" + if(length(accepted_access)) + if(!is_visuale_only) // Заносим наши принятые доступы + collected_access_list += accepted_access + addition_text += span_boldnotice("\nОценка имеющихся доступов: \n") + for(var/access in accepted_access) + var/access_desc = get_access_desc(access) + if(!access_desc) + continue + addition_text += span_notice("[access_desc]; ") + if(is_access_unique) + addition_text += span_good("\nИмеются ценные доступы. Очень ценно!") + if(is_weight) + addition_text += span_notice("\nТяжесть - значит надежность.") + if(is_equip) + addition_text += span_notice("\nХорошее снаряжение. Ценно.") + if(is_tech) + addition_text += span_notice("\nТехнологии - ценно!") + if(is_tech_unique) + addition_text += span_notice("\nНовые технологии! Очень ценно! Необходимо!") + if(is_tech_valuable) + addition_text += span_notice("\nЦенные технологии! Крайне ценно!") + + if(!is_visuale_only && is_tech_unique) + update_shops() + addition_text += span_notice("\nЦены на некоторые товары снижены!") + + if(user && addition_text != "") + to_chat(user, chat_box_notice(addition_text)) + + values_sum -= values_sum % 10 // забираем процентик в семью + values_sum += values_sum_precious // Даем бонус за особые ценности + return round(values_sum) + +/obj/machinery/vox_trader/proc/precious_grading(mob/user, obj/O, value) + if(!user) + return + if(!correct_precious_value(user)) + return + update_precious_collected_dict(O.name, value) + +/obj/machinery/vox_trader/proc/correct_precious_value(mob/user) + if(precious_value) + return TRUE + if(!user) + return FALSE + var/list/objectives = user.mind?.get_all_objectives() + if(!length(objectives)) + return FALSE + var/datum/objective/raider_steal/objective = locate() in objectives + precious_value = objective.precious_value + return TRUE + +/obj/machinery/vox_trader/proc/update_precious_collected_dict(object_name, object_value) + if(!correct_precious_value()) + return + if(object_value >= precious_value) + var/precious_data = precious_collected_dict[object_name] + if(!precious_data) + precious_collected_dict[object_name] = list("count" = 1, "value" = object_value) + else + precious_data["count"]++ + precious_data["value"] = max(precious_data["value"], object_value) + +/obj/machinery/vox_trader/proc/synchronize_traders_stats() + for(var/obj/machinery/vox_trader/trader in GLOB.machines) + if(trader == src) + continue + + all_values_sum += trader.all_values_sum + + for(var/access in trader.collected_access_list) + if(access in collected_access_list) + continue + collected_access_list += access + + for(var/tech in trader.collected_tech_dict) + if(tech in collected_tech_dict) + collected_tech_dict[tech][1] = max(collected_tech_dict[tech][1], trader.collected_tech_dict[tech][1]) + continue + collected_tech_dict += tech + + for(var/dict in trader.precious_collected_dict) + update_precious_collected_dict(trader.precious_collected_dict[dict], trader.precious_collected_dict[dict]["value"]) + +/obj/machinery/vox_trader/proc/get_trade_contents(mob/user) + var/turf/current_turf = get_turf(src) + var/list/items_list = current_turf.GetAllContents(7) + + for(var/I in items_list) + for(var/blacklist_object in blacklist_objects) + if(istype(I, blacklist_object)) + items_list.Remove(I) + continue + if(istype(I, /obj/item/organ)) // Inner organs + var/obj/item/organ/organ = I + if(organ.owner) + items_list.Remove(I) + continue + if(isobj(I)) + var/obj/O = I + if(ismob(O.loc)) // Cyborg Parts, wearing clothes, but not contents + items_list.Remove(I) + continue + if(isliving(I)) + var/mob/living/M = I + items_list.Remove(I) + if(isvox(M)) + make_new_vox_raider(user, M) + continue + send_to_station(M) + + return items_list + +/obj/machinery/vox_trader/proc/send_to_station(mob/living/M) + M.Sleeping(16 SECONDS) + M.setOxyLoss(0) + M.adjustBruteLoss(-25) + M.adjustFireLoss(-25) + M.adjustToxLoss(-50) + M.forceMove(pick(GLOB.latejoin)) + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.Silence(6 SECONDS) + C.clear_restraints() + to_chat(C, span_warning("Вы ощущаете как ваши мозги были промыты. \ + Вы всё еще не можете прийти в себя и отрывками вспоминаете что неизвестные похители вас. \ + Неизвестно сколько они продержали вас у себя и что с вами делали... \ + Но вы чувствуете себя будто обновленным.")) + +/obj/machinery/vox_trader/proc/make_new_vox_raider(mob/user, mob/living/M) + if(!M.mind) + return FALSE + + var/datum/antagonist/vox_raider/antag = locate() in M.mind.antag_datums + if(antag) + return FALSE + for(var/datum/antagonist/A as anything in user.mind.antag_datums) + var/datum/team/team = A.get_team() + if(team) + team.add_member(M.mind, TRUE) + break + + return TRUE + +/obj/machinery/vox_trader/proc/update_shops() + for(var/obj/machinery/vox_shop/shop in GLOB.machines) + shop.generate_pack_items() + shop.generate_pack_lists() + +/obj/machinery/vox_trader/proc/try_update_blacklist() + if(length(blacklist_objects)) + return + var/obj/machinery/vox_shop/shop = locate() in GLOB.machines + if(!shop) + return + + var/list/all_objects = list() + + for(var/category in shop.packs_items) + for(var/datum/vox_pack/pack in shop.packs_items[category]) + if(category == VOX_PACK_KIT) + continue + var/list/items_list = pack.get_items_list() + if(!length(items_list)) + break + all_objects += items_list + + blacklist_objects = all_objects diff --git a/modular_ss220/antagonists/code/vox_raider/objects/vox_trade_instrument.dm b/modular_ss220/antagonists/code/vox_raider/objects/vox_trade_instrument.dm new file mode 100644 index 000000000000..a78292d90763 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/objects/vox_trade_instrument.dm @@ -0,0 +1,40 @@ +/obj/item/hand_valuer + name = "ручной оценщик" + desc = "Приспособление воксов для оценки стоимости объекта." + icon = 'modular_ss220/antagonists/icons/trader_machine.dmi' + icon_state = "valuer" + item_state = "camera_bug" + var/obj/machinery/vox_trader/connected_trader + +/obj/item/hand_valuer/examine(mob/user) + . = ..() + if(!isvox(user)) + . += span_notice("Выглядит непонятно. Как воксы этим пользуются?") + +/obj/item/hand_valuer/afterattack(atom/target, mob/user, proximity, params) + if(!proximity) + return + + if(!isvox(user)) + to_chat(user, span_warning("Кажется вы тыкаете не той стороной... Или [name] не работает? Да как воксы этим пользуются?!")) + return + + if(!connected_trader) + to_chat(user, span_warning("Невозможно получить сведения с оценочной базы данных. Подключите устройство.")) + return + + if(!isobj(target)) + to_chat(user, span_notice("Данный объект не поддается оценке.")) + return + + if(!connected_trader.check_usable(user)) + return + + var/value = connected_trader.get_value(user, list(target), TRUE) + to_chat(user, chat_box_notice(span_green("Ценность [target.name]: [value]"))) + +/obj/item/hand_valuer/proc/connect(mob/living/user, obj/machinery/vox_trader/input_trader) + to_chat(user, span_green("Устройство [connected_trader ? "пере" : ""]инициализировано в системе.")) + playsound(src, 'modular_ss220/antagonists/sound/guns/m79_unload.ogg', 50, 1) + icon_state = "[initial(icon_state)]-on" + connected_trader = input_trader diff --git a/modular_ss220/antagonists/code/vox_raider/vox_raider_datum.dm b/modular_ss220/antagonists/code/vox_raider/vox_raider_datum.dm new file mode 100644 index 000000000000..b906b61023b7 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/vox_raider_datum.dm @@ -0,0 +1,152 @@ +/datum/antagonist/vox_raider + name = "Vox Raider" + roundend_category = "vox raiders" + job_rank = ROLE_VOX_RAIDER + special_role = SPECIAL_ROLE_VOX_RAIDER + antag_hud_name = "hudvoxraider" + antag_hud_type = ANTAG_HUD_VOX_RAIDER + wiki_page_name = "vox_raiders" + var/datum/team/vox_raiders/raiders_team = null + +/datum/antagonist/vox_raider/add_owner_to_gamemode() + SSticker.mode.vox_raiders |= owner + if(owner.current && !("Vox" in owner.current.faction)) + owner.current.faction |= list("Vox") + +/datum/antagonist/vox_raider/remove_owner_from_gamemode() + SSticker.mode.vox_raiders -= owner + +/datum/antagonist/vox_raider/greet() + . = ..() + SEND_SOUND(owner.current, sound('modular_ss220/antagonists/sound/ambience/antag/vox_raiders_intro.ogg')) + + . += {"Вы Вокс Рейдер, вы и ваша стая нашли станцию Нанотрейзен имеющую ценности. + Раздобудьте эти ценности любым доступным способом: торговлей, кражей, договорами. + Главное помните, не допустите своей гибели или гибели членов стаи. Ценные блестяшки не стоят мертвого собрата. + \nВы можете заказывать товары и снаряжение в Киконсоле Закиказов. + \nСдавайте ценности в Расчичетчикик. + \nКовчег выделил вам товары которые могут потенциально заинтересовать экипаж станции. + Разумеется не за бесплатно, выберите что вам действительно нужно и закажите это."} + + var/raider_names = get_raider_names_text() + if(raider_names) + . += "Оберегай собратьев и помогай стае: [raider_names]. Только стая важна!" + antag_memory += "Ваша стая:: [raider_names]
" + + . += "Нужно больше ценностей!" + +/datum/antagonist/vox_raider/create_team(datum/team/vox_raiders/team) + if(!istype(team)) + error("Wrong team type passed to [type].") + return + + raiders_team = team + return raiders_team + +/datum/antagonist/vox_raider/get_team() + return raiders_team + +/datum/antagonist/vox_raider/proc/get_raider_names_text() + PRIVATE_PROC(TRUE) + var/datum/team/vox_raiders/team = get_team() + if(!istype(team)) + return "" + + return team.get_raider_names_text(owner) + +/datum/antagonist/vox_raider/proc/admin_add(admin, datum/mind/new_antag) + if(!new_antag) + return FALSE + + if(new_antag.has_antag_datum(/datum/antagonist/vox_raider)) + alert(admin, "Кандидат уже Вокс Рейдер") + return FALSE + + if(!can_be_owned(new_antag)) + alert(admin, "Кандидат не может быть Вокс Рейдером") + return FALSE + + switch(alert(admin, "Создать новую команду или добавить в существующую?", "Воксы Рейдеры", "Создать", "Добавить", "Закрыть")) + if("Создать") + return create_new_vox_raiders_team(admin, new_antag) + if("Добавить") + return add_to_existing_vox_raiders_team(admin, new_antag) + + return FALSE + +/datum/antagonist/vox_raider/proc/create_new_vox_raiders_team(admin, datum/mind/first_raider) + PRIVATE_PROC(TRUE) + var/list/choices = list() + for(var/mob/living/alive_living_mob in GLOB.alive_mob_list) + var/datum/mind/mind_to_check = alive_living_mob.mind + if(!mind_to_check || mind_to_check == first_raider || !can_be_owned(mind_to_check)) + continue + + choices["[mind_to_check.name]([alive_living_mob.ckey])"] = mind_to_check + + sortTim(choices, GLOBAL_PROC_REF(cmp_text_asc)) + + var/list/candidates_list = list(first_raider) + while(TRUE) + if(!length(choices)) + break + var/choice = tgui_input_list(admin, "Выберите кандидата, если вы завершили выбор, то закройте окно.", "Добавить нового вокс рейдера", choices) + if(!choice) + break + var/datum/mind/mind = choices[choice] + if(!mind) + stack_trace("Chosen second vox raider `[choice]` was `null` for some reason") + choices.Remove(choice) + candidates_list.Add(mind) + + var/datum/team/vox_raiders/team = new(candidates_list, FALSE) + for(var/datum/mind/mind in candidates_list) + if(isnull(mind.add_antag_datum(src, team))) + error("Antag datum couldn't be granted to new raider [mind.name] in `/datum/antagonist/vox_raider/proc/create_new_vox_raiders_team`") + alert(admin, "Кандидат [mind.name] не был выбран для `Vox Raider` по каким-то причинам. Попробуйте еще раз.") + + offer_to_equip(admin, candidates_list) + + log_admin("[key_name(admin)] made vox raiders.") + return TRUE + +/datum/antagonist/vox_raider/proc/add_to_existing_vox_raiders_team(admin, datum/mind/raider_to_add) + PRIVATE_PROC(TRUE) + var/list/choices = list() + for(var/datum/team/vox_raiders/team in GLOB.antagonist_teams) + var/list/member_ckeys = team.get_member_ckeys() + choices["[team.name][length(member_ckeys) ? "([member_ckeys.Join(", ")])" : ""]"] = team + + if(!length(choices)) + alert(admin, "Команда Воксов-Рейдеров не найдена. Попробуйте создать новую.") + return FALSE + + sortTim(choices, GLOBAL_PROC_REF(cmp_text_asc)) + var/choice = tgui_input_list(admin, "Выбор команды Воксов-Рейдеров.", "Команда Воксов-Рейдеров", choices) + if(!choice) + return FALSE + + offer_to_equip(admin, list(raider_to_add)) + + var/datum/team/vox_raiders/team = choices[choice] + if(!team) + stack_trace("Chosen vox raiders team `[choice]` was `null` for some reason.") + + return !isnull(raider_to_add.add_antag_datum(src, team)) + +/datum/antagonist/vox_raider/proc/offer_to_equip(admin, list/candidates_list, visualsOnly) + if(!length(candidates_list)) + return + var/choice = (alert(admin, "Снарядить в стандартную экипировку?", "Снаряжение", "Да", "Нет")) + if(!choice || choice == "Нет") + return + for(var/datum/mind/mind in candidates_list) + if(!isvox(mind.current)) + make_body(mind.current, mind, TRUE, "Vox") + var/mob/living/carbon/human/H = mind.current + if(mind.current) + H.equipOutfit(/datum/outfit/vox, visualsOnly) + +/datum/antagonist/vox_raider/make_body(spawn_loc, datum/mind/mind, try_use_preference = FALSE, species_name = null, list/possible_species) + . = ..() + mind.store_memory(" Я Вокс-Рейдер, основа моя: беречь стаю, тащить ценности. .") diff --git a/modular_ss220/antagonists/code/vox_raider/vox_raider_mode.dm b/modular_ss220/antagonists/code/vox_raider/vox_raider_mode.dm new file mode 100644 index 000000000000..328da0db7ccc --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/vox_raider_mode.dm @@ -0,0 +1,20 @@ +/datum/game_mode + var/list/datum/mind/vox_raiders = list() + +/datum/game_mode/antag_mix/vox_raider + name = "Vox Raiders" + config_tag = "vox_raiders" + required_players = 45 + +/datum/game_mode/antag_mix/vox_raider/New() + . = ..() + list_scenarios = list(/datum/antag_scenario/team/vox_raiders) + + var/datum/antag_scenario/antag_datum = /datum/antag_scenario/team/vox_raiders + required_players = initial(antag_datum.required_players) + +/datum/game_mode/antag_mix/vox_raider/announce() + to_chat(world, "The current game mode is - Vox Raiders!") + to_chat(world, "Поблизости сектора [world.name] обнаружен корабль воксов!") + to_chat(world, "Воксы - всей стаей падки на блестяшки и ценности, с ними можно выгодно поторговаться. Но больше ценностей они ценят друг друга.") + to_chat(world, "Экипаж - следите за воксами внимательно, в том числе и за теми кто на станции, не допустите потерю дорогостоящего оборудования!") diff --git a/modular_ss220/antagonists/code/vox_raider/vox_raider_team.dm b/modular_ss220/antagonists/code/vox_raider/vox_raider_team.dm new file mode 100644 index 000000000000..07f5746aa4a5 --- /dev/null +++ b/modular_ss220/antagonists/code/vox_raider/vox_raider_team.dm @@ -0,0 +1,79 @@ +/datum/team/vox_raiders + name = "Vox Raiders" + antag_datum_type = /datum/antagonist/vox_raider + +/datum/team/vox_raiders/New(list/starting_members, add_antag_datum) + . = ..() + forge_objectives() + +/datum/team/vox_raiders/proc/forge_objectives() + PRIVATE_PROC(TRUE) + // Основная цель + add_team_objective(new /datum/objective/raider_steal()) + //Коллекционная цель + var/list/possible_collect_objective_types = list( + /datum/objective/raider_entirety_steal, + /datum/objective/raider_collection_access, + /datum/objective/raider_collection_tech + ) + var/picked_collect_objective_type = pick(possible_collect_objective_types) + add_team_objective(new picked_collect_objective_type()) + // Конечная цель + add_team_objective(new /datum/objective/survive( + {"Не допустите гибели вас и остальных Воксов из команды. Избегайте смерти влекущие за собой расходы стае."})) + +/datum/team/vox_raiders/handle_adding_member(datum/mind/new_member) + . = ..() + update_name() + +/datum/team/vox_raiders/handle_removing_member(datum/mind/member, force = FALSE) + . = ..() + update_name() + +/datum/team/vox_raiders/proc/update_name() + PRIVATE_PROC(TRUE) + var/new_name = get_raider_names_text() + if(!new_name) + name = initial(name) + return + + name = "[initial(name)] of [new_name]" + +/datum/team/vox_raiders/proc/get_raider_names_text(datum/mind/raider_to_exclude) + var/list/raider_names = list() + for(var/datum/mind/raider as anything in members) + if(raider == raider_to_exclude) + continue + + raider_names += raider.name + + return raider_names.Join(", ") + +/datum/team/vox_raiders/on_round_end() + . = ..() + var/list/to_send = list() + for(var/datum/team/vox_raiders/team in GLOB.antagonist_teams) + if(!objective_holder) + continue + var/teamwin = 1 + to_send += "
Стая [name]" + for(var/datum/objective/objective in objective_holder.objectives) + if(!objective.check_completion()) + teamwin = 0 + if(teamwin) + to_send += "
Стая успешно завершила свои цели!" + else + to_send += "
Стая провалилась!" + var/num_survive = length(members) + for(var/datum/mind/mind in members) + if(!mind.current || mind.current.stat==DEAD) + num_survive-- + if(num_survive == length(members)) + to_send += "
Вся стая выжила!" + else if(num_survive <= 0) + to_send += "
Вся стая погибла!" + else + to_send += "
У стаи есть потери!" + if(!length(to_send)) + return + to_chat(world, to_send.Join("
")) diff --git a/modular_ss220/antagonists/icons/clothing/inhands/clothing_lefthand.dmi b/modular_ss220/antagonists/icons/clothing/inhands/clothing_lefthand.dmi new file mode 100644 index 000000000000..fecc6c113693 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/inhands/clothing_lefthand.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/inhands/clothing_righthand.dmi b/modular_ss220/antagonists/icons/clothing/inhands/clothing_righthand.dmi new file mode 100644 index 000000000000..2a4608a2d897 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/inhands/clothing_righthand.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/mob/back.dmi b/modular_ss220/antagonists/icons/clothing/mob/back.dmi new file mode 100644 index 000000000000..9fdf14d5e256 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/mob/back.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/mob/vox/back.dmi b/modular_ss220/antagonists/icons/clothing/mob/vox/back.dmi new file mode 100644 index 000000000000..e27f3e388542 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/mob/vox/back.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/mob/vox/feet.dmi b/modular_ss220/antagonists/icons/clothing/mob/vox/feet.dmi new file mode 100644 index 000000000000..b7549f7b9195 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/mob/vox/feet.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/mob/vox/gloves.dmi b/modular_ss220/antagonists/icons/clothing/mob/vox/gloves.dmi new file mode 100644 index 000000000000..fee1a6f4b311 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/mob/vox/gloves.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/mob/vox/head.dmi b/modular_ss220/antagonists/icons/clothing/mob/vox/head.dmi new file mode 100644 index 000000000000..d1cc375be132 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/mob/vox/head.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/mob/vox/suit.dmi b/modular_ss220/antagonists/icons/clothing/mob/vox/suit.dmi new file mode 100644 index 000000000000..ff192faa4f2b Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/mob/vox/suit.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/mob/vox/uniform.dmi b/modular_ss220/antagonists/icons/clothing/mob/vox/uniform.dmi new file mode 100644 index 000000000000..f93b5db3ff06 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/mob/vox/uniform.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/obj_gloves.dmi b/modular_ss220/antagonists/icons/clothing/obj_gloves.dmi new file mode 100644 index 000000000000..f44a43eefb9a Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/obj_gloves.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/obj_head.dmi b/modular_ss220/antagonists/icons/clothing/obj_head.dmi new file mode 100644 index 000000000000..26a102acb37f Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/obj_head.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/obj_shoes.dmi b/modular_ss220/antagonists/icons/clothing/obj_shoes.dmi new file mode 100644 index 000000000000..dedf8f9c9db5 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/obj_shoes.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/obj_storage.dmi b/modular_ss220/antagonists/icons/clothing/obj_storage.dmi new file mode 100644 index 000000000000..6d20cdf64e64 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/obj_storage.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/obj_suit.dmi b/modular_ss220/antagonists/icons/clothing/obj_suit.dmi new file mode 100644 index 000000000000..ed50984b34e4 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/obj_suit.dmi differ diff --git a/modular_ss220/antagonists/icons/clothing/obj_under.dmi b/modular_ss220/antagonists/icons/clothing/obj_under.dmi new file mode 100644 index 000000000000..691efeb15702 Binary files /dev/null and b/modular_ss220/antagonists/icons/clothing/obj_under.dmi differ diff --git a/modular_ss220/antagonists/icons/flag.dmi b/modular_ss220/antagonists/icons/flag.dmi new file mode 100644 index 000000000000..0c777e5df60a Binary files /dev/null and b/modular_ss220/antagonists/icons/flag.dmi differ diff --git a/modular_ss220/antagonists/icons/guns/ammo.dmi b/modular_ss220/antagonists/icons/guns/ammo.dmi new file mode 100644 index 000000000000..777d90745500 Binary files /dev/null and b/modular_ss220/antagonists/icons/guns/ammo.dmi differ diff --git a/modular_ss220/antagonists/icons/guns/inhands/guns_lefthand.dmi b/modular_ss220/antagonists/icons/guns/inhands/guns_lefthand.dmi new file mode 100644 index 000000000000..94ba073d3547 Binary files /dev/null and b/modular_ss220/antagonists/icons/guns/inhands/guns_lefthand.dmi differ diff --git a/modular_ss220/antagonists/icons/guns/inhands/guns_righthand.dmi b/modular_ss220/antagonists/icons/guns/inhands/guns_righthand.dmi new file mode 100644 index 000000000000..95a206aa9e61 Binary files /dev/null and b/modular_ss220/antagonists/icons/guns/inhands/guns_righthand.dmi differ diff --git a/modular_ss220/antagonists/icons/guns/vox_guns.dmi b/modular_ss220/antagonists/icons/guns/vox_guns.dmi new file mode 100644 index 000000000000..78cd6d492c6e Binary files /dev/null and b/modular_ss220/antagonists/icons/guns/vox_guns.dmi differ diff --git a/modular_ss220/antagonists/icons/hud.dmi b/modular_ss220/antagonists/icons/hud.dmi new file mode 100644 index 000000000000..c10534ebed76 Binary files /dev/null and b/modular_ss220/antagonists/icons/hud.dmi differ diff --git a/modular_ss220/antagonists/icons/landmark.dmi b/modular_ss220/antagonists/icons/landmark.dmi new file mode 100644 index 000000000000..40512d2511a2 Binary files /dev/null and b/modular_ss220/antagonists/icons/landmark.dmi differ diff --git a/modular_ss220/antagonists/icons/objects/critter.dmi b/modular_ss220/antagonists/icons/objects/critter.dmi new file mode 100644 index 000000000000..6e09f54898a8 Binary files /dev/null and b/modular_ss220/antagonists/icons/objects/critter.dmi differ diff --git a/modular_ss220/antagonists/icons/objects/dart.dmi b/modular_ss220/antagonists/icons/objects/dart.dmi new file mode 100644 index 000000000000..5708a3015663 Binary files /dev/null and b/modular_ss220/antagonists/icons/objects/dart.dmi differ diff --git a/modular_ss220/antagonists/icons/trader_machine.dmi b/modular_ss220/antagonists/icons/trader_machine.dmi new file mode 100644 index 000000000000..46abdac3568a Binary files /dev/null and b/modular_ss220/antagonists/icons/trader_machine.dmi differ diff --git a/modular_ss220/antagonists/sound/ambience/antag/vox_raiders_intro.ogg b/modular_ss220/antagonists/sound/ambience/antag/vox_raiders_intro.ogg new file mode 100644 index 000000000000..40cc2323cc87 Binary files /dev/null and b/modular_ss220/antagonists/sound/ambience/antag/vox_raiders_intro.ogg differ diff --git a/modular_ss220/antagonists/sound/guns/gun_es4.ogg b/modular_ss220/antagonists/sound/guns/gun_es4.ogg new file mode 100644 index 000000000000..54210c02fa60 Binary files /dev/null and b/modular_ss220/antagonists/sound/guns/gun_es4.ogg differ diff --git a/modular_ss220/antagonists/sound/guns/m79_break_open.ogg b/modular_ss220/antagonists/sound/guns/m79_break_open.ogg new file mode 100644 index 000000000000..bf6bd477e556 Binary files /dev/null and b/modular_ss220/antagonists/sound/guns/m79_break_open.ogg differ diff --git a/modular_ss220/antagonists/sound/guns/m79_reload.ogg b/modular_ss220/antagonists/sound/guns/m79_reload.ogg new file mode 100644 index 000000000000..59b165cbbb80 Binary files /dev/null and b/modular_ss220/antagonists/sound/guns/m79_reload.ogg differ diff --git a/modular_ss220/antagonists/sound/guns/m79_shoot.ogg b/modular_ss220/antagonists/sound/guns/m79_shoot.ogg new file mode 100644 index 000000000000..bcb22fb04a9c Binary files /dev/null and b/modular_ss220/antagonists/sound/guns/m79_shoot.ogg differ diff --git a/modular_ss220/antagonists/sound/guns/m79_unload.ogg b/modular_ss220/antagonists/sound/guns/m79_unload.ogg new file mode 100644 index 000000000000..1bff50bbfb2a Binary files /dev/null and b/modular_ss220/antagonists/sound/guns/m79_unload.ogg differ diff --git a/modular_ss220/cyrillic_fixes/_cyrillic_fixes.dm b/modular_ss220/cyrillic_fixes/_cyrillic_fixes.dm index 63abee23d8d1..9f46f751dce6 100644 --- a/modular_ss220/cyrillic_fixes/_cyrillic_fixes.dm +++ b/modular_ss220/cyrillic_fixes/_cyrillic_fixes.dm @@ -21,9 +21,11 @@ Busy letters by radio(eng): c e h i l m n p r s t u w x z + vr Busy letters by radio(rus): б г д е ё з к р с т у ц ч ш ы ь я Э + мк Busy symbols by radio: ~ , $ _ - + * @@ -65,6 +67,10 @@ ":З" = "AI Private", "#З" = "AI Private", "№З" = "AI Private", ".З" = "AI Private", ":Ё" = "cords", "#Ё" = "cords", "№Ё" = "cords", ".Ё" = "cords", + // modular_ss220/antagonists/code/antagonist_radio.dm + ":МК" = "VoxCom", "#МК" = "VoxCom", "№МК" = "VoxCom", ".МК" = "VoxCom", + ":мк" = "VoxCom", "#мк" = "VoxCom", "№мк" = "VoxCom", ".мк" = "VoxCom", + // Russian symbols no case // None yet. diff --git a/modular_ss220/maps220/_maps220.dm b/modular_ss220/maps220/_maps220.dm index f1bb7a01302a..06c31e1beb24 100644 --- a/modular_ss220/maps220/_maps220.dm +++ b/modular_ss220/maps220/_maps220.dm @@ -1,4 +1,4 @@ /datum/modpack/ss220maps name = "SS220 Maps" desc = "Наши карты, код к ним и вспомогательные ресурсы." - author = "Aylong220, dj-34" + author = "Aylong220, dj-34, PhantomRU" diff --git a/modular_ss220/maps220/_maps220.dme b/modular_ss220/maps220/_maps220.dme index ea07fa149115..f95749cef1ca 100644 --- a/modular_ss220/maps220/_maps220.dme +++ b/modular_ss220/maps220/_maps220.dme @@ -1,5 +1,6 @@ #include "_maps220.dm" +#include "code/Areas/shuttle.dm" #include "code/RandomRuins/gateway/gateway_areas.dm" #include "code/RandomRuins/gateway/gateway_turfs.dm" #include "code/RandomRuins/lavaland/lavaland_areas.dm" diff --git a/modular_ss220/maps220/code/Areas/shuttle.dm b/modular_ss220/maps220/code/Areas/shuttle.dm new file mode 100644 index 000000000000..2588b7204d2e --- /dev/null +++ b/modular_ss220/maps220/code/Areas/shuttle.dm @@ -0,0 +1,4 @@ +/area/shuttle/vox + name = "Vox Shuttle" + icon_state = "shuttle" + parallax_move_direction = SOUTH diff --git a/modular_ss220/maps220/code/RandomRuins/space/space_areas.dm b/modular_ss220/maps220/code/RandomRuins/space/space_areas.dm index 96f71e02324b..680923c0380c 100644 --- a/modular_ss220/maps220/code/RandomRuins/space/space_areas.dm +++ b/modular_ss220/maps220/code/RandomRuins/space/space_areas.dm @@ -98,3 +98,10 @@ /area/ruin/space/spacehotelv1/barber name = "Hotel Barber" icon_state = "awaycontent22" + +/area/vox_base + name = "Vox Base" + icon_state = "purple" + requires_power = FALSE + report_alerts = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED diff --git a/modular_ss220/maps220/code/mobs.dm b/modular_ss220/maps220/code/mobs.dm index 50e697b4afdc..1223c1990b94 100644 --- a/modular_ss220/maps220/code/mobs.dm +++ b/modular_ss220/maps220/code/mobs.dm @@ -215,7 +215,7 @@ loot = list(/obj/effect/spawner/lootdrop/maintenance = 1) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 5, "max_n2" = 0) unsuitable_atmos_damage = 7.5 - faction = list("vox") + faction = list("Vox") check_friendly_fire = TRUE status_flags = CANPUSH del_on_death = TRUE diff --git a/modular_ss220/modular_ss220.dme b/modular_ss220/modular_ss220.dme index 53c82fc422f6..e43ed32d54a8 100644 --- a/modular_ss220/modular_ss220.dme +++ b/modular_ss220/modular_ss220.dme @@ -79,6 +79,7 @@ #include "species/_species.dme" #include "species_whitelist/_species_whitelist.dme" #include "antagonists/_antagonists.dme" +#include "antagonists/_antagonists_vox_raiders.dme" #include "uplink_items/_uplink_items.dme" #include "shuttles/_shuttles.dme" #include "redis220/_redis220.dme" diff --git a/modular_ss220/objects/_objects.dme b/modular_ss220/objects/_objects.dme index df38bb801967..e5e6c1e77d09 100644 --- a/modular_ss220/objects/_objects.dme +++ b/modular_ss220/objects/_objects.dme @@ -36,6 +36,7 @@ #include "code/plastic_chair.dm" #include "code/platform.dm" #include "code/posters.dm" +#include "code/shuttle.dm" #include "code/smartfridge.dm" #include "code/tribune.dm" #include "code/key.dm" diff --git a/modular_ss220/objects/code/flag.dm b/modular_ss220/objects/code/flag.dm index 3b9501d41c94..1a6439244ec3 100644 --- a/modular_ss220/objects/code/flag.dm +++ b/modular_ss220/objects/code/flag.dm @@ -5,3 +5,11 @@ icon_state = "flag_group" lefthand_file = 'modular_ss220/objects/icons/inhands/flags_lefthand.dmi' righthand_file = 'modular_ss220/objects/icons/inhands/flags_righthand.dmi' + +/obj/item/flag/vox_raider + name = "флаг вокс рейдеров" + desc = "Флаг одной из небезызвестных организаций, вершащие кражи и грабежи в космосе для наживы." + icon = 'modular_ss220/objects/icons/flag.dmi' + icon_state = "flag_vox_raider" + lefthand_file = 'modular_ss220/objects/icons/inhands/flags_lefthand.dmi' + righthand_file = 'modular_ss220/objects/icons/inhands/flags_righthand.dmi' diff --git a/modular_ss220/objects/code/shuttle.dm b/modular_ss220/objects/code/shuttle.dm new file mode 100644 index 000000000000..f64ceb72f7f0 --- /dev/null +++ b/modular_ss220/objects/code/shuttle.dm @@ -0,0 +1,25 @@ +/obj/machinery/computer/shuttle/vox + name = "Scavenger console" + desc = "Консоль контроля полета шаттла мусорщиков." + shuttleId = "vox_shuttle" + possible_destinations = "vox_shuttle_home;vox_shuttle_away;vox_shuttle_custom" + req_access = list(ACCESS_VOX) + resistance_flags = INDESTRUCTIBLE + flags = NODECONSTRUCT + +/obj/machinery/computer/shuttle/vox/attack_ai(mob/user) + return + +/obj/machinery/computer/camera_advanced/shuttle_docker/vox + name = "Scavenger navigation computer" + desc = "Консоль навигации шаттла мусорщиков." + icon_screen = "navigation" + icon_keyboard = "med_key" + shuttleId = "vox_shuttle" + shuttlePortId = "vox_shuttle_custom" + view_range = 13 + x_offset = 0 + y_offset = 0 + resistance_flags = INDESTRUCTIBLE + flags = NODECONSTRUCT + access_mining = FALSE diff --git a/modular_ss220/objects/icons/flag.dmi b/modular_ss220/objects/icons/flag.dmi index 9156d84e97b4..82cd49360f01 100644 Binary files a/modular_ss220/objects/icons/flag.dmi and b/modular_ss220/objects/icons/flag.dmi differ diff --git a/modular_ss220/species/code/mob/living/carbon/human/human_mob.dm b/modular_ss220/species/code/mob/living/carbon/human/human_mob.dm index 8ec36c538506..35e30e02d5b6 100644 --- a/modular_ss220/species/code/mob/living/carbon/human/human_mob.dm +++ b/modular_ss220/species/code/mob/living/carbon/human/human_mob.dm @@ -1,3 +1,7 @@ +/mob/living/carbon/human/vox/Initialize(mapload) + . = ..(mapload, /datum/species/vox) + faction |= list("Vox") + /mob/living/carbon/human/nucleation/Initialize(mapload) . = ..(mapload, /datum/species/nucleation)