diff --git a/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm b/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm index 05d2bc5fa6a018..279f49de98cdf5 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm @@ -298,6 +298,7 @@ /obj/machinery/door/poddoor{ id = "bridgelockdown" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/bridge) "ek" = ( @@ -325,11 +326,6 @@ }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/quarters) -"ev" = ( -/obj/structure/lattice, -/mob, -/turf/template_noop, -/area/template_noop) "ex" = ( /obj/machinery/door/airlock/survival_pod/glass, /obj/structure/fans/tiny, @@ -420,6 +416,13 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, +/obj/machinery/button/door/directional/north{ + id = "freighterchief"; + name = "Door lock"; + pixel_y = -24; + specialfunctions = 4; + normaldoorcontrol = 1 + }, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/bridge) "fS" = ( @@ -552,6 +555,13 @@ "is" = ( /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/utility) +"iv" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "freighterwlockdown" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/cargodise_freighter/kitchen) "iz" = ( /obj/machinery/suit_storage_unit/standard_unit, /obj/effect/turf_decal/tile/brown/half{ @@ -640,6 +650,12 @@ /area/ruin/space/has_grav/cargodise_freighter/kitchen) "jp" = ( /obj/effect/mob_spawn/ghost_role/human/lostcargoqm, +/obj/machinery/button/door/directional/east{ + pixel_x = 32; + pixel_y = 4; + name = "Freighter Windows Blastdoors"; + id = "freighterwlockdown" + }, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/bridge) "jC" = ( @@ -713,6 +729,9 @@ /area/ruin/space/has_grav/cargodise_freighter/quarters) "kF" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "freighterwlockdown" + }, /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/primaryhall) "kH" = ( @@ -828,6 +847,7 @@ /obj/structure/cable, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/hydroponics) "mq" = ( @@ -877,6 +897,9 @@ /area/ruin/space/has_grav/cargodise_freighter/quarters) "ne" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "freighterwlockdown" + }, /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/quarters) "nu" = ( @@ -976,6 +999,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/quarters) "oV" = ( @@ -1065,6 +1089,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/utility) "qG" = ( @@ -1321,6 +1346,9 @@ /area/ruin/space/has_grav/cargodise_freighter/trauma) "ux" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "freighterwlockdown" + }, /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/bridge) "vb" = ( @@ -1502,6 +1530,10 @@ "xC" = ( /obj/structure/bed/double, /obj/item/bedsheet/qm/double, +/obj/machinery/button/door/directional/east{ + name = "Bridge/Armory Blastdoors"; + id = "bridgelockdown" + }, /turf/open/floor/carpet/orange, /area/ruin/space/has_grav/cargodise_freighter/bridge) "xE" = ( @@ -1587,6 +1619,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/mining) "yW" = ( @@ -1808,6 +1841,15 @@ /obj/machinery/chem_master/condimaster, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/cargodise_freighter/kitchen) +"BY" = ( +/obj/machinery/button/door/directional/east{ + pixel_x = 32; + pixel_y = 4; + name = "Freighter Windows Blastdoors"; + id = "freighterwlockdown" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/cargodise_freighter/bridge) "BZ" = ( /obj/machinery/griddle, /turf/open/floor/iron/kitchen, @@ -1823,6 +1865,7 @@ /obj/machinery/door/poddoor{ id = "cargolockdown" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/cargo) "Cj" = ( @@ -1947,6 +1990,9 @@ "Er" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/door/poddoor{ + id = "freighterwlockdown" + }, /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/hydroponics) "Et" = ( @@ -2000,6 +2046,7 @@ /obj/machinery/door/poddoor{ id = "bridgelockdown" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/vault) "EP" = ( @@ -2007,7 +2054,9 @@ /area/ruin/space/has_grav/cargodise_freighter/bridge) "ES" = ( /obj/structure/rack/gunrack, -/obj/item/gun/ballistic/automatic/lanca, +/obj/item/gun/ballistic/automatic/sol_rifle/marksman{ + pixel_y = 8 + }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/cargodise_freighter/vault) "Fb" = ( @@ -2101,6 +2150,9 @@ "GD" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/door/poddoor{ + id = "freighterwlockdown" + }, /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/trauma) "GL" = ( @@ -2135,6 +2187,7 @@ /obj/structure/cable, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/trauma) "Hk" = ( @@ -2316,6 +2369,7 @@ /obj/machinery/door/poddoor{ id = "cargolockdown" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/mining) "Jy" = ( @@ -2326,6 +2380,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/vault) "Jz" = ( @@ -2340,6 +2395,7 @@ name = "Kitchen Storage" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "JD" = ( @@ -2381,6 +2437,10 @@ /area/ruin/space/has_grav/cargodise_freighter/primaryhall) "Kr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/curtain/bounty/start_closed{ + name = "dark curtains"; + pixel_y = 32 + }, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "Kt" = ( @@ -2434,6 +2494,10 @@ /area/ruin/space/has_grav/cargodise_freighter/kitchen) "Lk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/curtain/bounty/start_closed{ + name = "dark curtains"; + pixel_y = 32 + }, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "Ll" = ( @@ -2573,6 +2637,9 @@ /area/ruin/space/has_grav/cargodise_freighter/utility) "Ns" = ( /obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "freighterwlockdown" + }, /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/cargo) "Nt" = ( @@ -2620,15 +2687,18 @@ /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/space/has_grav/cargodise_freighter/quarters) "NZ" = ( -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Freighter Boss's Quarters"; + id_tag = "freighterchief" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, /obj/machinery/door/poddoor{ id = "bridgelockdown" }, +/obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/bridge) "Oa" = ( @@ -2702,6 +2772,10 @@ "OY" = ( /obj/structure/rack/gunrack, /obj/item/gun/ballistic/rifle/boltaction, +/obj/item/gun/ballistic/automatic/lanca{ + pixel_x = -1; + pixel_y = -5 + }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/cargodise_freighter/vault) "Pa" = ( @@ -2763,7 +2837,7 @@ "Qn" = ( /obj/machinery/button/door/directional/north{ id = "bridgelockdown"; - name = "Bridge Blastdoors"; + name = "Bridge/Armory Blastdoors"; pixel_y = -24 }, /mob/living/simple_animal/hostile/looter/ranged/space/laser, @@ -2817,6 +2891,11 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /obj/structure/rack/shelf, /obj/effect/spawner/random/entertainment/money_large, +/obj/machinery/button/door/directional/north{ + id = "bridgelockdown"; + name = "Bridge/Armory Blastdoors"; + pixel_y = -24 + }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/bridge) "Sc" = ( @@ -3015,6 +3094,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ cycle_id = "lostfreighter" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/cargodise_freighter/mining) "Vn" = ( @@ -3151,6 +3231,19 @@ dir = 1 }, /area/ruin/space/has_grav/cargodise_freighter/primaryhall) +"WM" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Bridge" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + id = "bridgelockdown" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/cargodise_freighter/bridge) "WN" = ( /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plating, @@ -3255,6 +3348,7 @@ /obj/machinery/door/poddoor{ id = "cargolockdown" }, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/cargo) "Yf" = ( @@ -3363,9 +3457,15 @@ /area/ruin/space/has_grav/cargodise_freighter/kitchen) "Ze" = ( /obj/machinery/door/airlock/command/glass{ - name = "Freighter Boss's Quarters" + name = "Freighter Boss's Quarters"; + id_tag = "freighterchief" }, /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + id = "bridgelockdown" + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/qm, +/obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/bridge) "Zg" = ( @@ -3419,6 +3519,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "ZV" = ( @@ -3934,7 +4035,7 @@ Gh Gh Gh JQ -ev +Ef Ef Ef Yr @@ -4142,7 +4243,7 @@ Gh Gh Gh Gh -hr +iv Lk xw JN @@ -4306,7 +4407,7 @@ Gh Gh Gh Gh -hr +iv Kr Ny JN @@ -5340,7 +5441,7 @@ vh vh kX kX -NZ +WM ux ei kX @@ -5752,7 +5853,7 @@ kX Wt WT Oj -WT +BY dy kX Gh diff --git a/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm b/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm index 546bceef8db01c..cb580078b5bac3 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm @@ -7438,15 +7438,9 @@ "Ht" = ( /obj/effect/turf_decal/trimline/dark_red/line, /obj/effect/turf_decal/trimline/dark_red/mid_joiner, -/obj/machinery/computer/shuttle{ - desc = "A shuttle terminal which allows a connection to the DS-2 forward base's supply shuttle."; - icon_keyboard = "syndie_key"; - icon_screen = "syndishuttle"; - light_color = "#FA8282"; +/obj/machinery/computer/shuttle/interdyne_cargo{ name = "syndicate cargo shuttle terminal"; - possible_destinations = "IP-DS-2"; - req_access = list("syndicate"); - shuttleId = "syndie_cargo" + desc = "A shuttle terminal which allows a connection to the DS-2 forward base's supply shuttle." }, /turf/open/floor/iron/dark/textured_large, /area/ruin/space/has_grav/nova/des_two/bridge) diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 0c3c231b5f225b..ce38db0e1dbeba 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -672,6 +672,11 @@ "cY" = ( /obj/effect/decal/cleanable/robot_debris, /obj/structure/alien/weeds, +/obj/structure/closet/crate/secure/centcom{ + name = "secure centcom crate(ECC board)"; + req_one_access = list("command","away_engineering") + }, +/obj/item/circuitboard/computer/communications/old, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "cZ" = ( @@ -1327,7 +1332,7 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) "fK" = ( -/obj/machinery/door/airlock/security/glass, +/obj/machinery/door/airlock/security/old/glass, /obj/machinery/door/poddoor{ id = "ancient" }, @@ -1463,6 +1468,8 @@ /obj/structure/alien/weeds, /obj/effect/gibspawner/human, /obj/machinery/light/small/broken/directional/west, +/obj/item/paper/paperslip/corporate/fluff/safe_code/charlie_safe, +/obj/effect/decal/remains/human, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "gz" = ( @@ -1741,10 +1748,10 @@ /area/ruin/space/ancientstation/charlie/hall) "hV" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, +/obj/machinery/computer/broken, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) "hY" = ( @@ -2169,6 +2176,9 @@ /obj/machinery/light/small/directional/east, /obj/item/paper/fluff/ruins/oldstation, /obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/broken/cryo{ + dir = 4 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "jE" = ( @@ -2470,7 +2480,7 @@ dir = 6 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/ghost_role/human/oldsci, +/obj/structure/showcase/machinery/oldpod, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) @@ -2521,7 +2531,7 @@ /area/ruin/space/ancientstation/charlie/hall) "kZ" = ( /obj/structure/table/reinforced, -/obj/item/healthanalyzer{ +/obj/item/healthanalyzer/advanced{ desc = "A prototype hand-held body scanner able to distinguish vital signs of the subject."; name = "prototype health analyzer" }, @@ -3100,6 +3110,8 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "ny" = ( @@ -3622,6 +3634,10 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"qw" = ( +/obj/structure/closet/secure_closet/old_med, +/turf/template_noop, +/area/template_noop) "qx" = ( /obj/machinery/door/airlock/external/glass/ruin, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -3911,13 +3927,13 @@ /area/ruin/space/ancientstation/delta/hall) "sM" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 }, +/obj/machinery/computer/broken/comlog{ + dir = 1 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) "sP" = ( @@ -4061,11 +4077,11 @@ /area/ruin/space/ancientstation/charlie/kitchen) "ua" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 }, +/obj/machinery/computer/broken, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) "uj" = ( @@ -4190,8 +4206,8 @@ "uS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/garbage, +/obj/structure/closet, +/obj/item/storage/backpack/medic, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "uT" = ( @@ -4435,7 +4451,7 @@ /area/ruin/space/ancientstation/delta/hall) "wt" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old{ +/obj/machinery/computer/broken/sec{ dir = 1 }, /turf/open/floor/iron/white/textured, @@ -4479,13 +4495,13 @@ /area/ruin/space/ancientstation/beta/supermatter) "wJ" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, /obj/machinery/light/directional/west, +/obj/machinery/computer/broken/atm{ + dir = 4 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "wK" = ( @@ -5315,6 +5331,15 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/diagonal, /area/ruin/space/ancientstation/beta/gravity) +"CS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/safe/floor/charlie_captain, +/obj/item/card/id/away/old/captains_spare, +/obj/item/clothing/suit/space/nasavoid/captain, +/obj/item/clothing/head/helmet/space/nasavoid/captain, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/bridge) "CU" = ( /obj/machinery/air_sensor/oxygen_tank{ chamber_id = "beta-o2" @@ -5913,7 +5938,9 @@ /area/ruin/space/ancientstation/charlie/hall) "Hr" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/card/id/away/old/robo, +/obj/item/card/id/away/old/robo{ + name = "ID" + }, /obj/effect/decal/cleanable/glass, /turf/open/floor/plating{ initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15" @@ -6450,10 +6477,10 @@ /area/ruin/space/ancientstation/beta/atmos) "Kk" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old{ +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/broken/acc{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_machine, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) @@ -6500,6 +6527,14 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"KG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/computer/broken/acc, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/bridge) "KH" = ( /obj/structure/lattice, /turf/template_noop, @@ -7295,7 +7330,7 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) "PC" = ( -/obj/machinery/door/airlock/security/glass, +/obj/machinery/door/airlock/security/old/glass, /obj/machinery/door/poddoor{ id = "ancient" }, @@ -7308,8 +7343,8 @@ /area/ruin/space/ancientstation/charlie/sec) "PD" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/broken/comlog, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) "PG" = ( @@ -7320,7 +7355,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/obj/machinery/computer/old{ +/obj/machinery/computer/broken/eng{ dir = 4 }, /turf/open/floor/iron, @@ -7892,6 +7927,18 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"TX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mob_spawn/ghost_role/human/oldmed, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/dorms) "TZ" = ( /obj/structure/table/glass, /obj/item/reagent_containers/cup/bottle/copper{ @@ -8416,10 +8463,10 @@ /area/ruin/space/ancientstation/beta/gravity) "XX" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, +/obj/machinery/computer/broken/acc, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) "XY" = ( @@ -8544,14 +8591,24 @@ }, /obj/structure/cable, /obj/structure/broken_flooring/pile/directional/north, +/obj/effect/decal/remains/human{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/item/tank/internals/emergency_oxygen/empty, +/obj/item/clothing/suit/space/damaged_captain, +/obj/item/clothing/head/helmet/space/damaged_captain{ + pixel_y = 6; + pixel_x = -5 + }, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/hall) "YF" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 8 }, +/obj/machinery/computer/broken, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) "YH" = ( @@ -8632,9 +8689,9 @@ /area/ruin/space/ancientstation/charlie/hall) "Zb" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/item/paper/fluff/ruins/oldstation/damagereport, /obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/broken/com, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) "Ze" = ( @@ -9915,7 +9972,7 @@ aa aa aa aa -aa +qw aa aa aa @@ -12770,7 +12827,7 @@ Qg Fv kr bN -ln +TX bN kp pk @@ -12808,7 +12865,7 @@ aS AA ax aW -aI +CS aQ bm qr @@ -12873,7 +12930,7 @@ aa NW NW nO -hV +KG aX hV bn diff --git a/_maps/RandomZLevels/blackmesa.dmm b/_maps/RandomZLevels/blackmesa.dmm index 55a3032e83f7dd..f302fd4796e0d1 100644 --- a/_maps/RandomZLevels/blackmesa.dmm +++ b/_maps/RandomZLevels/blackmesa.dmm @@ -1723,7 +1723,6 @@ /area/awaymission/black_mesa/security_outpost) "awI" = ( /obj/item/gun_maintenance_supplies, -/obj/structure/cable, /turf/open/floor/iron, /area/awaymission/black_mesa/security_outpost) "awL" = ( @@ -1995,7 +1994,6 @@ /obj/item/radio/intercom/directional/west{ pixel_y = 5 }, -/obj/structure/cable, /turf/open/floor/iron, /area/awaymission/black_mesa/security_outpost) "aAq" = ( @@ -5465,7 +5463,6 @@ /obj/item/storage/medkit/emergency, /obj/item/keycard/stockroom, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/item/crowbar/makeshift, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/science_internal) "dIH" = ( @@ -5821,6 +5818,16 @@ planetary_atmos = 1 }, /area/awaymission/black_mesa/lambda_teleporter) +"eoL" = ( +/obj/machinery/button/door/directional/south{ + id = "chemiguess"; + name = "Science Lockdown"; + normaldoorcontrol = 1; + pixel_y = -37; + specialfunctions = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/black_mesa/science_labs) "eoM" = ( /obj/structure/chair/sofa/corp{ dir = 1 @@ -5959,16 +5966,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/hecu_zone_camp) -"eEM" = ( -/obj/machinery/power/apc/auto_name/directional/south{ - auto_name = 0 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/misc/ironsand/black_mesa, -/area/awaymission/black_mesa/hecu_zone_camp) "eFZ" = ( /obj/effect/turf_decal/stripes, /obj/structure/table, @@ -6936,10 +6933,6 @@ icon_state = "bus" }, /area/awaymission/black_mesa/black_ops_bus) -"gEm" = ( -/obj/structure/cable, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) "gEA" = ( /obj/effect/decal/cleanable/blood/tracks, /obj/structure/cable, @@ -7209,7 +7202,6 @@ /area/awaymission/black_mesa/science_decon_room) "hfm" = ( /obj/machinery/autolathe/hacked, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/science_labs) "hfP" = ( @@ -7806,10 +7798,6 @@ /obj/structure/closet/crate/bin, /turf/open/floor/iron/textured, /area/awaymission/black_mesa/hecu_zone_atrium) -"ipH" = ( -/obj/item/stock_parts/power_store/cell/high, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) "iqc" = ( /obj/machinery/light/warm/directional/west, /turf/open/floor/iron/textured, @@ -8072,7 +8060,6 @@ /obj/effect/spawner/random/decoration/glowstick, /obj/effect/spawner/random/decoration/glowstick, /obj/effect/spawner/random/decoration/glowstick, -/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/hecu_zone_camp) "iOl" = ( @@ -8325,10 +8312,6 @@ /obj/effect/spawner/liquids_spawner, /turf/open/floor/iron/pool, /area/awaymission/black_mesa/deep_sci_feesh) -"jle" = ( -/obj/structure/cable, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/science_labs) "jlI" = ( /obj/structure/rack/shelf, /obj/item/assembly/signaler, @@ -8665,11 +8648,6 @@ /obj/item/ammo_box/magazine/g18, /turf/open/floor/carpet/blue, /area/awaymission/black_mesa/high_security_hallway) -"jPw" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/structure/cable, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) "jPD" = ( /obj/effect/mob_spawn/corpse/human/hecu_zombie, /turf/open/floor/iron/textured, @@ -8838,7 +8816,6 @@ /area/awaymission/black_mesa/science_labs) "kfR" = ( /obj/machinery/hypnochair, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/science_labs) "khd" = ( @@ -9154,15 +9131,6 @@ /obj/item/knife/combat/throwing, /turf/open/floor/iron/smooth, /area/awaymission/black_mesa/dorm_computers) -"kOP" = ( -/obj/item/ammo_box/magazine/mp5, -/obj/machinery/power/apc/auto_name/directional/south{ - auto_name = 0 - }, -/obj/machinery/power/terminal, -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) "kPC" = ( /obj/effect/random_mob_placer/xen/zombie, /obj/effect/turf_decal/tile/yellow/fourcorners, @@ -9238,7 +9206,6 @@ id_tag = "chemiguess" }, /obj/effect/mapping_helpers/airlock/locked, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/science_labs) "kWg" = ( @@ -9960,11 +9927,6 @@ /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev, /turf/open/floor/plating, /area/awaymission/black_mesa/resonant_chamber) -"mnN" = ( -/obj/item/ammo_box/magazine/g18, -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) "mnS" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/line, /obj/structure/chair/sofa/bench{ @@ -10313,19 +10275,6 @@ "ncO" = ( /turf/closed/indestructible/rock/xen, /area/awaymission/black_mesa/xen/village_hallway) -"ndu" = ( -/obj/structure/table, -/obj/item/paper, -/obj/structure/alien/weeds/xen, -/obj/machinery/power/apc/auto_name/directional/north{ - auto_name = 0 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/mapping_helpers/apc/cell_10k, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/entrance_large_office) "ndA" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -10591,11 +10540,6 @@ /obj/effect/baseturf_helper/black_mesa, /turf/closed/wall/r_wall, /area/awaymission/black_mesa/high_security_sec_point) -"nyS" = ( -/obj/effect/decal/cleanable/blood/footprints, -/obj/structure/cable, -/turf/open/floor/iron, -/area/awaymission/black_mesa/security_outpost) "nyU" = ( /obj/structure/closet/crate/large, /turf/open/floor/plating, @@ -10760,7 +10704,6 @@ /area/awaymission/black_mesa/hecu_zone_test_chambers) "nOK" = ( /obj/machinery/door/airlock/science, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/science_labs) "nPg" = ( @@ -11435,10 +11378,6 @@ /obj/machinery/light/cold, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/resonant_chamber) -"pjt" = ( -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/awaymission/black_mesa/science_labs) "pjD" = ( /obj/structure/table, /obj/item/knife/plastic, @@ -12214,7 +12153,6 @@ name = "solid thing" }, /obj/item/storage/box/beakers/variety, -/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/science_labs) "qLg" = ( @@ -12800,7 +12738,6 @@ "rLR" = ( /obj/machinery/light/cold/directional/east, /obj/structure/closet/crate/engineering/electrical, -/obj/item/wrench/bolter, /turf/open/floor/iron/textured_large, /area/awaymission/black_mesa/black_ops_bus) "rMt" = ( @@ -12913,7 +12850,6 @@ /obj/item/stack/sheet/glass{ amount = 30 }, -/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/textured_large, /area/awaymission/black_mesa/black_ops_eng_storage) "rVo" = ( @@ -13911,16 +13847,6 @@ /obj/effect/mob_spawn/corpse/human/scientist_zombie, /turf/open/floor/iron/dark/textured_large, /area/awaymission/black_mesa/black_ops_bus) -"tYH" = ( -/obj/machinery/power/apc/auto_name/directional/north{ - auto_name = 0 - }, -/obj/effect/mapping_helpers/apc/cell_10k, -/obj/machinery/power/terminal{ - dir = 1 - }, -/turf/open/floor/iron/textured_large, -/area/awaymission/black_mesa/black_ops_eng_storage) "tZd" = ( /obj/effect/mob_spawn/corpse/human/scientist_zombie, /turf/open/floor/iron/smooth, @@ -14021,12 +13947,6 @@ /obj/structure/table, /obj/machinery/light/cold, /obj/item/storage/toolbox/mechanical, -/obj/machinery/power/apc/auto_name/directional/south{ - auto_name = 0 - }, -/obj/machinery/power/terminal, -/obj/item/wrench/bolter, -/obj/structure/cable, /turf/open/floor/iron/dark, /area/awaymission/black_mesa/science_labs) "ump" = ( @@ -14040,11 +13960,6 @@ }, /turf/open/floor/iron/textured, /area/awaymission/black_mesa/black_ops_button) -"uoe" = ( -/obj/structure/closet/crate/large, -/obj/item/wrench/bolter, -/turf/open/floor/plating, -/area/awaymission/black_mesa/science_tunnel) "uot" = ( /obj/machinery/light/cold/directional/north, /obj/machinery/chem_master, @@ -14299,8 +14214,6 @@ /obj/structure/railing{ dir = 9 }, -/obj/machinery/power/smes/super/full, -/obj/structure/cable, /turf/open/floor/iron/textured_large, /area/awaymission/black_mesa/science_labs) "uOn" = ( @@ -14732,7 +14645,6 @@ /obj/structure/sign/departments/science/alt{ pixel_x = -31 }, -/obj/structure/cable, /turf/open/floor/iron/textured, /area/awaymission/black_mesa/science_labs) "vAB" = ( @@ -15954,11 +15866,6 @@ "xPM" = ( /turf/open/floor/iron/textured, /area/awaymission/black_mesa/black_ops_hall) -"xQD" = ( -/obj/machinery/power/terminal, -/obj/structure/cable, -/turf/open/floor/iron/textured, -/area/awaymission/black_mesa/science_labs) "xQH" = ( /obj/structure/table, /obj/structure/sign/warning/no_smoking/circle/directional/north, @@ -44284,7 +44191,7 @@ gdr gdr wAJ dsI -eEM +gdr ugW lXv lXv @@ -47502,7 +47409,7 @@ rTN aSV aHK asd -kOP +axn aVW aNo aNo @@ -48016,7 +47923,7 @@ arT aXH amW azp -mnN +ayQ aVW aGj aYJ @@ -48273,7 +48180,7 @@ aOc aOc aHd aAp -aOc +aSV abo aoy aaO @@ -48529,7 +48436,7 @@ axn aIp aQe aTL -nyS +aQe aTo aVW aGj @@ -49301,7 +49208,7 @@ tLu aLz aHK aFx -ipH +aSV aVW aNo arz @@ -52785,8 +52692,8 @@ uKX iar iar uKX -nzT -nzT +gdr +gdr nzT nzT nzT @@ -69745,7 +69652,7 @@ ozz lEm lEm ozz -uoe +lwG lwG hjV xEP @@ -69925,7 +69832,7 @@ arz aNo aNo qiU -tYH +nqs nqs nqs nqs @@ -73664,7 +73571,7 @@ arz arz aNo kyP -ndu +fNm wHR sJT vmK @@ -76179,13 +76086,13 @@ eKW iYD rbu qXZ -pjt +rfj nOK -pjt -jle -jle -jle -jle +rfj +rSl +rSl +rSl +rSl kfR rbu aNo @@ -76436,7 +76343,7 @@ eKW rbu rbu bEa -pjt +eoL rbu lgz fgR @@ -76947,10 +76854,10 @@ wbL maZ eKW eKW -gEm -jPw +eKW +khG vAi -gEm +eKW khG qNk eKW @@ -77204,7 +77111,7 @@ wbL maZ eKW eKW -gEm +eKW eKW eKW eKW @@ -77460,7 +77367,7 @@ rbu mYF ycb eKW -xQD +eKW uOe rbu rbu diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 036dfc69e82cd0..f8c69104d60523 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -88,6 +88,8 @@ #define SECHUD_SYNDICATE "hudsyndicate" #define SECHUD_SYNDICATE_INTERDYNE "hudsyndicateinterdyne" #define SECHUD_SYNDICATE_INTERDYNE_HEAD "hudsyndicateinterdynehead" +#define SECHUD_INTERDYNE_GREEN "hudinterdynegreen" +#define SECHUD_INTERDYNE_GREEN_HEAD "hudinterdynegreenhead" #define SECHUD_ASSISTANT "hudassistant" #define SECHUD_ATMOSPHERIC_TECHNICIAN "hudatmospherictechnician" diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 9d04f72ec8e2f9..4a347b92fc3351 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -33,6 +33,12 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) /// Whether syndicate mode is enabled or not. var/syndicate = FALSE + /// Whether away mode is enabled or not. + var/away = FALSE + + /// Whether 911 can be called or not. + var/can_call_911 = TRUE + /// The current state of the UI var/state = STATE_MAIN @@ -190,7 +196,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) message.answered = answer_index message.answer_callback.InvokeAsync() if ("callShuttle") - if (!authenticated(user) || syndicate) + if (!authenticated(user) || syndicate || away) return var/reason = trim(params["reason"], MAX_MESSAGE_LEN) if (length(reason) < CALL_SHUTTLE_REASON_LENGTH) @@ -239,7 +245,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) return LAZYREMOVE(messages, LAZYACCESS(messages, message_index)) if ("makePriorityAnnouncement") - if (!authenticated_as_silicon_or_captain(user) && !syndicate) + if (!authenticated_as_silicon_or_captain(user) && !syndicate && !away) return make_announcement(user) if ("messageAssociates") @@ -258,6 +264,9 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) else if(syndicate) message_syndicate(message, user) to_chat(user, span_danger("Message transmitted to Syndicate Command.")) + else if(away) + message_centcom(message, user) + to_chat(user, span_danger("Message transmitted to Nanotrasen Navy.")) else message_centcom(message, user) to_chat(user, span_notice("Message transmitted to Central Command.")) @@ -301,10 +310,12 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) state = STATE_MAIN if ("recallShuttle") // AIs cannot recall the shuttle - if (!authenticated(user) || HAS_SILICON_ACCESS(user) || syndicate) + if (!authenticated(user) || HAS_SILICON_ACCESS(user) || syndicate || away) return SSshuttle.cancelEvac(user) if ("requestNukeCodes") + if (away) + return if (!authenticated_as_non_silicon_captain(user)) return if (!COOLDOWN_FINISHED(src, important_action_cooldown)) @@ -449,7 +460,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) to_chat(user, span_warning("The safe code has already been requested and is being delivered to your station!")) return - if(SSjob.safe_code_requested) + if(SSjob.safe_code_requested || away) to_chat(user, span_warning("The safe code has already been requested and delivered to your station!")) return @@ -465,18 +476,30 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) minor_announce("Due to staff shortages, your station has been approved for delivery of access codes to secure the Captain's Spare ID. Delivery via drop pod at [get_area(pod_location)]. ETA 120 seconds.") // NOVA EDIT ADDITION START if ("callThePolice") + if(!can_call_911) + to_chat(user, span_warning("Error, unable to contact emergency response team!")) + return if(!pre_911_check(usr)) return calling_911(usr, "Marshals", EMERGENCY_RESPONSE_POLICE) if ("callTheCatmos") + if(!can_call_911) + to_chat(user, span_warning("Error, unable to contact emergency response team!")) + return if(!pre_911_check(usr)) return calling_911(usr, "Advanced Atmospherics", EMERGENCY_RESPONSE_ATMOS) if ("callTheParameds") + if(!can_call_911) + to_chat(user, span_warning("Error, unable to contact emergency response team!")) + return if(!pre_911_check(usr)) return calling_911(usr, "EMTs", EMERGENCY_RESPONSE_EMT) if("callThePizza") + if(!can_call_911) + to_chat(user, span_warning("Error, unable to contact emergency response team!")) + return if(!(obj_flags & EMAGGED)) return if(!pre_911_check(usr)) @@ -593,7 +616,13 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) data["authorizeName"] = authorize_name data["canLogOut"] = !HAS_SILICON_ACCESS(user) data["shuttleCanEvacOrFailReason"] = SSshuttle.canEvac() - if(syndicate) + if(away) + data["away"] = TRUE + data["canMessageAssociates"] = TRUE + data["canRequestNuke"] = FALSE + if(!away) + data["away"] = FALSE + if(syndicate||away) data["shuttleCanEvacOrFailReason"] = "You cannot summon the shuttle from this console!" if (authenticated_as_non_silicon_captain(user)) @@ -629,7 +658,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) if (SSshuttle.emergency.mode != SHUTTLE_IDLE && SSshuttle.emergency.mode != SHUTTLE_RECALL) data["shuttleCalled"] = TRUE - data["shuttleRecallable"] = SSshuttle.canRecall() || syndicate + data["shuttleRecallable"] = SSshuttle.canRecall() || syndicate || away if (SSshuttle.emergencyCallAmount) data["shuttleCalledPreviously"] = TRUE @@ -719,7 +748,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) /obj/machinery/computer/communications/proc/has_communication() var/turf/current_turf = get_turf(src) var/z_level = current_turf.z - if(syndicate) + if(syndicate||away) return TRUE return is_station_level(z_level) || is_centcom_level(z_level) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 7454f185511505..12daa2d466ab39 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -13,6 +13,7 @@ var/finished_recharging = FALSE var/static/list/allowed_devices = typecacheof(list( + /obj/item/gun/microfusion, /obj/item/gun/energy, /obj/item/melee/baton/security, /obj/item/ammo_box/magazine/recharge, diff --git a/code/modules/bitrunning/bitrunoutfits.dm b/code/modules/bitrunning/bitrunoutfits.dm index 6deb10503aa075..7c7f2acc040a9b 100644 --- a/code/modules/bitrunning/bitrunoutfits.dm +++ b/code/modules/bitrunning/bitrunoutfits.dm @@ -4,6 +4,7 @@ shoes = /obj/item/clothing/shoes/sneakers/black belt = /obj/item/bitrunning_host_monitor id = /obj/item/card/id/advanced + back = /obj/item/storage/backpack /datum/outfit/bitrunning/cop name = "alcoholic cop" @@ -12,6 +13,7 @@ shoes = /obj/item/clothing/shoes/discoshoes suit = /obj/item/clothing/suit/discoblazer id = /obj/item/card/id/advanced + back = /obj/item/storage/backpack /datum/outfit/bitrunning/kim name = "Kimball" @@ -20,6 +22,7 @@ shoes = /obj/item/clothing/shoes/kim suit = /obj/item/clothing/suit/kimjacket id = /obj/item/card/id/advanced + back = /obj/item/storage/backpack /datum/outfit/bitrunning/mail name = "Mailman" @@ -27,3 +30,4 @@ uniform = /obj/item/clothing/under/misc/mailman shoes = /obj/item/clothing/shoes/sneakers/black id = /obj/item/card/id/advanced + back = /obj/item/storage/backpack diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index 506a4d9d9e473e..bb9a8215d328cc 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -24,7 +24,7 @@ flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF resistance_flags = NONE dog_fashion = null - slowdown = 0.5 + slowdown = 0 sound_vary = TRUE equip_sound = 'sound/items/handling/helmet/helmet_equip1.ogg' pickup_sound = 'sound/items/handling/helmet/helmet_pickup1.ogg' @@ -59,7 +59,7 @@ /obj/item/tank/internals, /obj/item/tank/jetpack/oxygen/captain, ) - slowdown = 0.5 + slowdown = 1 armor_type = /datum/armor/suit_space flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL|HIDETAUR //NOVA EDIT CHANGE - ADDED HIDETAIL, HIDETAUR. ADDED HIDESEXTOY TO PREVENT VISUAL BUGS. cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS diff --git a/code/modules/clothing/spacesuits/softsuit.dm b/code/modules/clothing/spacesuits/softsuit.dm index 3bbb6d0bd0f906..4661ad3535086f 100644 --- a/code/modules/clothing/spacesuits/softsuit.dm +++ b/code/modules/clothing/spacesuits/softsuit.dm @@ -16,14 +16,14 @@ name = "Engineering Void Helmet" desc = "A CentCom engineering dark red space suit helmet. While old and dusty, it still gets the job done." icon_state = "void" - slowdown = 2 + slowdown = 0 /obj/item/clothing/suit/space/nasavoid/old name = "Engineering Voidsuit" icon_state = "void" inhand_icon_state = "void_suit" desc = "A CentCom engineering dark red space suit. Age has degraded the suit making it difficult to move around in." - slowdown = 2 + slowdown = 4 allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/multitool) //EVA suit @@ -73,7 +73,7 @@ inhand_icon_state = "syndicate-helm-orange" //resprite? armor_type = /datum/armor/space_fragile strip_delay = 65 - slowdown = 1 + slowdown = 0 /obj/item/clothing/suit/space/fragile name = "emergency space suit" @@ -81,7 +81,7 @@ var/torn = FALSE icon_state = "syndicate-orange" inhand_icon_state = "syndicate-orange" - slowdown = 1 + slowdown = 2 armor_type = /datum/armor/space_fragile strip_delay = 65 diff --git a/code/modules/mob/living/silicon/ai/_preferences.dm b/code/modules/mob/living/silicon/ai/_preferences.dm index 10958b2adc4f55..fb41b742d695c8 100644 --- a/code/modules/mob/living/silicon/ai/_preferences.dm +++ b/code/modules/mob/living/silicon/ai/_preferences.dm @@ -103,6 +103,7 @@ GLOBAL_LIST_INIT(ai_core_display_screens, sort_list(list( "Triumvirate-M", "Triumvirate", "Weird", + "rat" ))) /// A form of resolve_ai_icon that is guaranteed to never sleep. diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 8edcaff7715f00..2e148c4b0ba93e 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -19,7 +19,7 @@ /obj/item/mod/module/magnetic_harness/Initialize(mapload) . = ..() if(!guns_typecache) - guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe)) + guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe, /obj/item/gun/microfusion)) /obj/item/mod/module/magnetic_harness/on_install() var/obj/item/clothing/suit = mod.get_part_from_slot(ITEM_SLOT_OCLOTHING) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 18e8de72101706..03c6b0257696b7 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -764,13 +764,13 @@ name = "emergency space helmet" icon_state = "syndicate-helm-orange" inhand_icon_state = "syndicate-helm-orange" - slowdown = 1.5 + slowdown = 0 /obj/item/clothing/suit/space/orange name = "emergency space suit" icon_state = "syndicate-orange" inhand_icon_state = "syndicate-orange" - slowdown = 1.5 + slowdown = 3 /obj/item/pickaxe/emergency name = "emergency disembarkation tool" diff --git a/icons/mob/silicon/ai.dmi b/icons/mob/silicon/ai.dmi index df9059fb09e6af..92ca401c3bc647 100644 Binary files a/icons/mob/silicon/ai.dmi and b/icons/mob/silicon/ai.dmi differ diff --git a/modular_nova/master_files/code/datums/id_trim/syndicate.dm b/modular_nova/master_files/code/datums/id_trim/syndicate.dm index 248446a0daa321..74f96d87450d52 100644 --- a/modular_nova/master_files/code/datums/id_trim/syndicate.dm +++ b/modular_nova/master_files/code/datums/id_trim/syndicate.dm @@ -95,6 +95,7 @@ department_color = COLOR_LIME subdepartment_color = COLOR_VERY_DARK_LIME_GREEN threat_modifier = 2 // Interdyne is allowed on station, so this'll get beepskys off them. + sechud_icon_state = SECHUD_INTERDYNE_GREEN /datum/id_trim/syndicom/nova/interdyne/shaftminer assignment = "Interdyne Shaft Miner" @@ -104,3 +105,4 @@ trim_state = "trim_deckofficer" department_color = COLOR_VERY_DARK_LIME_GREEN access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER) + sechud_icon_state = SECHUD_INTERDYNE_GREEN_HEAD diff --git a/modular_nova/master_files/icons/mob/huds/hud.dmi b/modular_nova/master_files/icons/mob/huds/hud.dmi index 22aedb9faa500d..9ae11b221bf3a2 100644 Binary files a/modular_nova/master_files/icons/mob/huds/hud.dmi and b/modular_nova/master_files/icons/mob/huds/hud.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/hats.dmi b/modular_nova/master_files/icons/obj/clothing/hats.dmi index 64f133fe5bdeba..3fc5da5618a7dd 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/hats.dmi and b/modular_nova/master_files/icons/obj/clothing/hats.dmi differ diff --git a/modular_nova/modules/blueshield/code/blueshield.dm b/modular_nova/modules/blueshield/code/blueshield.dm index f3c8060084b724..2dd06d0146c2f0 100644 --- a/modular_nova/modules/blueshield/code/blueshield.dm +++ b/modular_nova/modules/blueshield/code/blueshield.dm @@ -88,19 +88,20 @@ name ="modified hellfire laser gun" desc = "A lightly overtuned version of NT's Hellfire Laser rifle, scratches showing its age and the fact it has definitely been owned before. This one is more energy efficient without sacrificing damage." icon_state = "hellgun" + pin = /obj/item/firing_pin/implant/mindshield ammo_type = list(/obj/item/ammo_casing/energy/laser/hellfire/blueshield) /obj/item/choice_beacon/blueshield name = "gunset beacon" desc = "A single use beacon to deliver a gunset of your choice. Please only call this in your office" - company_source = "Sol Defense Contracting" + company_source = "Sol and Nanotrasen collaboration in defense" company_message = span_bold("Supply Pod incoming, please stand by.") /obj/item/choice_beacon/blueshield/generate_display_names() var/static/list/selectable_gun_types = list( "Takbok Revolver Set" = /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/takbok, "Custom Hellfire Laser Rifle" = /obj/item/gun/energy/laser/hellgun/blueshield, - "Bogseo Submachinegun Gunset" = /obj/item/storage/toolbox/guncase/nova/xhihao_large_case/bogseo, + "Blueshield's CMG-2 Gunset" = /obj/item/storage/toolbox/guncase/nova/blueshield_cmg, ) return selectable_gun_types diff --git a/modular_nova/modules/events/code/event_spawner.dm b/modular_nova/modules/events/code/event_spawner.dm index e8f14abfd703db..b73219b69d27da 100644 --- a/modular_nova/modules/events/code/event_spawner.dm +++ b/modular_nova/modules/events/code/event_spawner.dm @@ -1,6 +1,7 @@ /obj/character_event_spawner icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi' icon_state = "cryopod" + anchored = 1 var/list/species_whitelist var/list/gender_whitelist @@ -13,7 +14,7 @@ var/flavor_text = "" var/list/additional_equipment var/disappear_after_spawn - var/infinite = TRUE + var/infinite = FALSE var/used = FALSE /obj/character_event_spawner/attack_ghost(mob/user) diff --git a/modular_nova/modules/gunhud/code/gun_hud_component.dm b/modular_nova/modules/gunhud/code/gun_hud_component.dm index 129e1967a0e016..03318be697b7ae 100644 --- a/modular_nova/modules/gunhud/code/gun_hud_component.dm +++ b/modular_nova/modules/gunhud/code/gun_hud_component.dm @@ -166,6 +166,43 @@ oth_h = "h9" hud.set_hud(backing_color, oth_o, oth_t, oth_h, indicator) + else if(istype(parent, /obj/item/gun/microfusion)) + var/obj/item/gun/microfusion/parent_gun = parent + if(!parent_gun.phase_emitter) + hud.icon_state = "microfusion_counter_no_emitter" + hud.maptext = null + return + if(parent_gun.phase_emitter.damaged) + hud.icon_state = "microfusion_counter_damaged" + hud.maptext = null + return + if(!parent_gun.cell) + hud.icon_state = "microfusion_counter_no_emitter" + hud.maptext = null + return + if(!parent_gun.cell.charge) + hud.icon_state = "microfusion_counter_no_emitter" + hud.maptext = null + return + var/phase_emitter_state = parent_gun.phase_emitter.get_heat_icon_state() + hud.icon_state = "microfusion_counter_[phase_emitter_state]" + hud.cut_overlays() + hud.maptext_x = -12 + var/obj/item/ammo_casing/energy/shot = parent_gun.microfusion_lens + var/battery_percent = FLOOR(clamp(parent_gun.cell.charge / parent_gun.cell.maxcharge, 0, 1) * 100, 1) + var/shot_cost_percent = FLOOR(clamp(shot.e_cost / parent_gun.cell.maxcharge, 0, 1) * 100, 1) + if(battery_percent > 99 || shot_cost_percent > 99) + hud.maptext_x = -12 + else + hud.maptext_x = -8 + if(!parent_gun.can_shoot()) + hud.icon_state = "microfusion_counter_no_emitter" + return + if(battery_percent <= 25) + hud.maptext = span_maptext("
[battery_percent]%
[shot_cost_percent]%
") + return + hud.maptext = span_maptext("
[battery_percent]%
[shot_cost_percent]%
") + /obj/item/gun/ballistic/Initialize(mapload) . = ..() AddComponent(/datum/component/ammo_hud) diff --git a/modular_nova/modules/kahraman_equipment/code/clothing/armor_datums.dm b/modular_nova/modules/kahraman_equipment/code/clothing/armor_datums.dm index aa887a848c30d9..d4aeb725081b79 100644 --- a/modular_nova/modules/kahraman_equipment/code/clothing/armor_datums.dm +++ b/modular_nova/modules/kahraman_equipment/code/clothing/armor_datums.dm @@ -28,3 +28,14 @@ fire = 100 acid = ARMOR_LEVEL_MID wound = WOUND_ARMOR_WEAK + +/datum/armor/colonist_mask + melee = ARMOR_LEVEL_TINY + bullet = ARMOR_LEVEL_TINY + laser = 5 + energy = ARMOR_LEVEL_WEAK + bomb = ARMOR_LEVEL_MID + bio = 100 + fire = 100 + acid = ARMOR_LEVEL_MID + wound = WOUND_ARMOR_WEAK diff --git a/modular_nova/modules/kahraman_equipment/code/clothing/clothing.dm b/modular_nova/modules/kahraman_equipment/code/clothing/clothing.dm index 1dc8316b7090aa..7550992e6b1fca 100644 --- a/modular_nova/modules/kahraman_equipment/code/clothing/clothing.dm +++ b/modular_nova/modules/kahraman_equipment/code/clothing/clothing.dm @@ -206,6 +206,7 @@ worn_icon_digi = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_digi.dmi' worn_icon_teshari = 'modular_nova/modules/kahraman_equipment/icons/clothes/clothing_worn_teshari.dmi' worn_icon_state = "mask" + armor_type = /datum/armor/colonist_mask flags_inv = HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT /obj/item/clothing/mask/gas/atmos/frontier_colonist/Initialize(mapload) diff --git a/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm b/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm index c522d63a971d41..2329c721c74ee7 100644 --- a/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm +++ b/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm @@ -1,77 +1,77 @@ /datum/loadout_item/toys/miafoxplush name = "Mia's fox plushie" item_path = /obj/item/toy/plush/nova/donator/fox/mia - ckeywhitelist = list("fuzlet") + //ckeywhitelist = list("fuzlet") /datum/loadout_item/toys/teasefoxplush name = "Teasable fox plushie" item_path = /obj/item/toy/plush/nova/donator/fox/kailyn - ckeywhitelist = list("ratraus") + //ckeywhitelist = list("ratraus") /datum/loadout_item/pocket_items/drawingtablet name = "Drawing Tablet" item_path = /obj/item/canvas/drawingtablet - donator_only = TRUE + //donator_only = TRUE /datum/loadout_item/pocket_items/stellar_bouquet name = "Stellar Bouquet" item_path = /obj/item/bouquet/stellar - ckeywhitelist = list("thedragmeme") + //ckeywhitelist = list("thedragmeme") /datum/loadout_item/under/jumpsuit/paddedunder name = "Feathered Serenity Suit" item_path = /obj/item/clothing/under/padded - ckeywhitelist = list("thedragmeme") + //ckeywhitelist = list("thedragmeme") /datum/loadout_item/under/jumpsuit/paddedunder/alt name = "Feathered Serenity Dress" item_path = /obj/item/clothing/under/padded/alt - ckeywhitelist = list("snailomi") + //ckeywhitelist = list("snailomi") /datum/loadout_item/neck/padded name = "Feathered Serenity Cloak" item_path = /obj/item/clothing/neck/padded - ckeywhitelist = list("thedragmeme", "SomeNetwork") + //ckeywhitelist = list("thedragmeme") /datum/loadout_item/neck/padded/alt name = "Feathered Serenity Cloak" item_path = /obj/item/clothing/neck/padded/alt - ckeywhitelist = list("snailomi") + //ckeywhitelist = list("snailomi") /datum/loadout_item/neck/padded/security name = "Vanguard Cloak" item_path = /obj/item/clothing/neck/padded/security - ckeywhitelist = list("actualvanguard") + //ckeywhitelist = list("actualvanguard") /datum/loadout_item/gloves/padded name = "Serenity Gloves" item_path = /obj/item/clothing/gloves/padded - ckeywhitelist = list("thedragmeme", "snailomi") + //ckeywhitelist = list("thedragmeme", "snailomi") /datum/loadout_item/shoes/padded name = "Serenity Boots" item_path = /obj/item/clothing/shoes/jackboots/padded - ckeywhitelist = list("thedragmeme") + //ckeywhitelist = list("thedragmeme") /datum/loadout_item/under/jumpsuit/long_skirtleneck name = "Tacticool Skirtleneck (Long)" item_path = /obj/item/clothing/under/syndicate/tacticool/skirt/long - ckeywhitelist = list("HollandaiseSauce", "Latinfishy", "Tf4") + //ckeywhitelist = list("HollandaiseSauce", "Latinfishy", "Tf4") /datum/loadout_item/suit/ryddid name = "The Ryddid" item_path = /obj/item/clothing/suit/jacket/ryddid - ckeywhitelist = list("grunnyyy") + //ckeywhitelist = list("grunnyyy") /datum/loadout_item/under/jumpsuit/draculass name = "Draculass Dress" item_path = /obj/item/clothing/under/costume/draculass - ckeywhitelist = list("grunnyyy", "joe_duhan") + //ckeywhitelist = list("grunnyyy", "joe_duhan") /datum/loadout_item/neck/grunnyyycloak name = "Black and Red cloak" item_path = /obj/item/clothing/neck/cloak/grunnyyy - ckeywhitelist = list("grunnyyy") + //ckeywhitelist = list("grunnyyy") /datum/loadout_item/gloves/hypnoring_coffee name = "Hypnodemon's Ring" @@ -86,65 +86,66 @@ /datum/loadout_item/shoes/rax_armadyne_boots name = "Tactical Boots" item_path = /obj/item/clothing/shoes/combat/rax - ckeywhitelist = list("raxraus") + restricted_roles = list(JOB_BLUESHIELD, JOB_NT_REP, JOB_CAPTAIN, JOB_VETERAN_ADVISOR, JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) + //ckeywhitelist = list("raxraus") /datum/loadout_item/suit/rax_peacekeeper_jacket name = "Peacekeeper jacket" item_path = /obj/item/clothing/suit/armor/vest/warden/rax - ckeywhitelist = list("raxraus") + //ckeywhitelist = list("raxraus") restricted_roles = list(JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/under/jumpsuit/rax_banded_uniform name = "Banded Uniform" item_path = /obj/item/clothing/under/rank/security/rax - ckeywhitelist = list("raxraus") + //ckeywhitelist = list("raxraus") restricted_roles = list(JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/head/goldengoggles name = "Steampunk Goggles" item_path = /obj/item/clothing/glasses/welding/steampunk_goggles - ckeywhitelist = list("goldenalpharex") + //ckeywhitelist = list("goldenalpharex") /datum/loadout_item/under/jumpsuit/plasmaman_jax name = "XuraCorp Biohazard Underfitting" item_path = /obj/item/clothing/under/plasmaman/jax2 - ckeywhitelist = list("candlejax") + //ckeywhitelist = list("candlejax") restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_SCIENCE_GUARD, JOB_VIROLOGIST, JOB_GENETICIST) /datum/loadout_item/mask/cmcp_mask name = "CMCP Mask" item_path = /obj/item/clothing/mask/gas/CMCP_mask - ckeywhitelist = list("candlejax") + //ckeywhitelist = list("candlejax") /datum/loadout_item/head/anahelm name = "Azulean's Enviro-Helmet" item_path = /obj/item/clothing/head/helmet/space/plasmaman/candlejax2 - ckeywhitelist = list("candlejax") + //ckeywhitelist = list("candlejax") /datum/loadout_item/under/jumpsuit/emissionsuit name = "Emission's Suit" item_path = /obj/item/clothing/under/plasmaman/candlejax - ckeywhitelist = list("candlejax") + //ckeywhitelist = list("candlejax") /datum/loadout_item/mask/divemask_koru name = "S.O.K.O. Gaiter" item_path = /obj/item/clothing/mask/gas/signalis_gaiter - ckeywhitelist = list("koruu", "foxyandiknowit", "candlejax", "shyelf", "opportunerover22") + //ckeywhitelist = list("koruu", "foxyandiknowit", "candlejax", "shyelf", "opportunerover22") /datum/loadout_item/under/jumpsuit/divesuit_koru name = "S.O.K.O. Bodysuit" item_path = /obj/item/clothing/under/bodysuit_koruu - ckeywhitelist = list("koruu", "foxyandiknowit", "candlejax", "shyelf", "opportunerover22") + //ckeywhitelist = list("koruu", "foxyandiknowit", "candlejax", "shyelf", "opportunerover22") /datum/loadout_item/under/jumpsuit/anasuit name = "Azulean's Enviro-Suit" item_path = /obj/item/clothing/under/plasmaman/candlejax2 - ckeywhitelist = list("candlejax") + //ckeywhitelist = list("candlejax") /datum/loadout_item/mask/composite_filtration name = "Composite Filtration Mask" item_path = /obj/item/clothing/mask/gas/psycho_malice - ckeywhitelist = list("snakebittenn", "chillylobster", "candlejax", "theooz", "alvcyktor") + //ckeywhitelist = list("snakebittenn", "chillylobster", "candlejax", "theooz", "alvcyktor") /datum/loadout_item/suit/jacket abstract_type = /datum/loadout_item/suit/jacket @@ -152,32 +153,32 @@ /datum/loadout_item/suit/jacket/cherno name = "Blue-Silvered Coat" item_path = /obj/item/clothing/suit/jacket/cherno - ckeywhitelist = list("cherno00") + //ckeywhitelist = list("cherno00") /datum/loadout_item/head/avipilot name = "Smuggler's Flying Cap" item_path = /obj/item/clothing/head/avipilot - ckeywhitelist = list("slippyjoe") + //ckeywhitelist = list("slippyjoe") /datum/loadout_item/shoes/britches_shoes name = "Britches' shoes" item_path = /obj/item/clothing/shoes/clown_shoes/britches - ckeywhitelist = list("bloodrite") + //ckeywhitelist = list("bloodrite") /datum/loadout_item/under/jumpsuit/britches_dress name = "Britches' dress" item_path = /obj/item/clothing/under/rank/civilian/clown/britches - ckeywhitelist = list("bloodrite") + //ckeywhitelist = list("bloodrite") /datum/loadout_item/mask/britches_mask name = "Britches' mask" item_path = /obj/item/clothing/mask/gas/britches - ckeywhitelist = list("bloodrite") + //ckeywhitelist = list("bloodrite") /datum/loadout_item/mask/luchador_mask name = "Mask of El Red Templar" item_path = /obj/item/clothing/mask/luchador/enzo - ckeywhitelist = list("enzoman") + //ckeywhitelist = list("enzoman") /datum/loadout_item/mask/nightlight_mask name = "FIR-36 Rebreather" @@ -190,7 +191,7 @@ /datum/loadout_item/mask/caligram_visage_mask name = "Caligram Visage Mask" item_path = /obj/item/clothing/mask/gas/caligram_visage_mask - ckeywhitelist = list("farsightednightlight") + //ckeywhitelist = list("farsightednightlight") /datum/loadout_item/head/caligram_cap_tan name = "Caligram Tan Softcap" @@ -228,89 +229,89 @@ /datum/loadout_item/suit/brasspriest name = "Brasspriest Coat" item_path = /obj/item/clothing/suit/jacket/brasspriest - ckeywhitelist = list("ChillyLobster") + //ckeywhitelist = list("ChillyLobster") /datum/loadout_item/suit/hydrogenrobes name = "Metallic-Hydrogen robes" item_path = /obj/item/clothing/suit/jacket/hydrogenrobes - ckeywhitelist = list("ChillyLobster") + //ckeywhitelist = list("ChillyLobster") /datum/loadout_item/suit/wetsuit_norm name = "Fitted Wetsuit" item_path = /obj/item/clothing/under/wetsuit_norm - ckeywhitelist = list("ChillyLobster") + //ckeywhitelist = list("ChillyLobster") /datum/loadout_item/mask/wolf_mask name = "Wolf mask" item_path = /obj/item/clothing/mask/animal/wolf - ckeywhitelist = list("theooz") + //ckeywhitelist = list("theooz") /datum/loadout_item/head/drake_skull name = "Skull of an ashdrake" item_path = /obj/item/clothing/head/drake_skull - ckeywhitelist = list("random516") + //ckeywhitelist = list("random516") /datum/loadout_item/gloves/blutigen_wraps name = "Blutigen Wraps" item_path = /obj/item/clothing/gloves/fingerless/blutigen_wraps - ckeywhitelist = list("random516") + //ckeywhitelist = list("random516") /datum/loadout_item/suit/blutigen_kimono name = "Blutigen Kimono" item_path = /obj/item/clothing/suit/blutigen_kimono - ckeywhitelist = list("random516") + //ckeywhitelist = list("random516") /datum/loadout_item/under/jumpsuit/blutigen_undergarment name = "Dragon Undergarment" item_path = /obj/item/clothing/under/custom/blutigen_undergarment - ckeywhitelist = list("random516") + //ckeywhitelist = list("random516") /datum/loadout_item/under/jumpsuit/captain_dress name = "Captain's Dress" item_path = /obj/item/clothing/under/rank/captain/dress - ckeywhitelist = list("netrakyram") + //ckeywhitelist = list("netrakyram") restricted_roles = list(JOB_CAPTAIN) /datum/loadout_item/under/jumpsuit/netra_dress name = "Black and Silver Armored Dress" item_path = /obj/item/clothing/under/rank/blueshield/netra - ckeywhitelist = list("netrakyram") + //ckeywhitelist = list("netrakyram") restricted_roles = list(JOB_CAPTAIN, JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY) /datum/loadout_item/gloves/netra_gloves name = "Black and Silver Gloves" item_path = /obj/item/clothing/gloves/netra - ckeywhitelist = list("netrakyram") + //ckeywhitelist = list("netrakyram") /datum/loadout_item/shoes/metra_boots name = "Polished Jackboots" item_path = /obj/item/clothing/shoes/jackboots/netra - ckeywhitelist = list("netrakyram") + //ckeywhitelist = list("netrakyram") /datum/loadout_item/neck/kiaracloak name = "Kiara's cloak" item_path = /obj/item/clothing/neck/cloak/inferno - ckeywhitelist = list("inferno707") + //ckeywhitelist = list("inferno707") /datum/loadout_item/neck/kiaracollar name = "Kiara's collar" item_path = /obj/item/clothing/neck/inferno_collar - ckeywhitelist = list("inferno707") + //ckeywhitelist = list("inferno707") /datum/loadout_item/pocket_items/kiaramedal name = "Insignia of Steele" item_path = /obj/item/clothing/accessory/medal/steele - ckeywhitelist = list("inferno707") + //ckeywhitelist = list("inferno707") /datum/loadout_item/mask/hheart name = "The Hollow Heart" item_path = /obj/item/clothing/mask/hheart - ckeywhitelist = list("inferno707") + //ckeywhitelist = list("inferno707") /datum/loadout_item/toys/darksabre name = "Dark Sabre" item_path = /obj/item/toy/darksabre - ckeywhitelist = list("inferno707") + //ckeywhitelist = list("inferno707") /datum/loadout_item/pocket_items/darksabresheath name = "Dark Sabre Sheath" @@ -320,207 +321,207 @@ /datum/loadout_item/pocket_items/darkarmor name = "Dark Armor" item_path = /obj/item/clothing/suit/armor/vest/darkcarapace - ckeywhitelist = list("inferno707") + //ckeywhitelist = list("inferno707") /datum/loadout_item/neck/zuliecloak name = "Project: Zul-E" item_path = /obj/item/clothing/suit/hooded/cloak/zuliecloak - ckeywhitelist = list("asky") + //ckeywhitelist = list("asky") /datum/loadout_item/pocket_items/brightcosmos name = "Bright Cosmos cigar" item_path = /obj/item/holocigarette/cigar - ckeywhitelist = list("lyricalpaws") + //ckeywhitelist = list("lyricalpaws") /datum/loadout_item/under/jumpsuit/lannese name = "Lannese Dress" item_path = /obj/item/clothing/under/custom/lannese - ckeywhitelist = list("kathrinbailey") + //ckeywhitelist = list("kathrinbailey") /datum/loadout_item/under/jumpsuit/lannese/vambrace name = "Lannese Dress w/ Vambraces" item_path = /obj/item/clothing/under/custom/lannese/vambrace - ckeywhitelist = list("kathrinbailey") + //ckeywhitelist = list("kathrinbailey") /datum/loadout_item/suit/scraparmour name = "Scrap Armor" item_path = /obj/item/clothing/suit/scraparmour - ckeywhitelist = list("hackertdog") + //ckeywhitelist = list("hackertdog") /datum/loadout_item/under/jumpsuit/mechanic name = "Mechanic's Overalls" item_path = /obj/item/clothing/under/misc/nova/mechanic - ckeywhitelist = list("cypressb") + //ckeywhitelist = list("cypressb") /datum/loadout_item/under/jumpsuit/mikubikini name = "starlight singer bikini" item_path = /obj/item/clothing/under/mikubikini - ckeywhitelist = list("grandvegeta") + //ckeywhitelist = list("grandvegeta") /datum/loadout_item/suit/mikujacket name = "starlight singer jacket" item_path = /obj/item/clothing/suit/mikujacket - ckeywhitelist = list("grandvegeta") + //ckeywhitelist = list("grandvegeta") /datum/loadout_item/head/mikuhair name = "starlight singer hair" item_path = /obj/item/clothing/head/mikuhair - ckeywhitelist = list("grandvegeta") + //ckeywhitelist = list("grandvegeta") /datum/loadout_item/gloves/mikugloves name = "starlight singer gloves" item_path = /obj/item/clothing/gloves/mikugloves - ckeywhitelist = list("grandvegeta") + //ckeywhitelist = list("grandvegeta") /datum/loadout_item/shoes/mikulegging name = "starlight singer bikini" item_path = /obj/item/clothing/shoes/sneakers/mikuleggings - ckeywhitelist = list("grandvegeta") + //ckeywhitelist = list("grandvegeta") /datum/loadout_item/suit/delta_coat name = "Grey Winter Hoodie" item_path = /obj/item/clothing/suit/jacket/delta - ckeywhitelist = list("deltatri") + //ckeywhitelist = list("deltatri") /datum/loadout_item/head/hubertcc name = "CC Ensign's cap" item_path = /obj/item/clothing/head/nanotrasen_consultant/hubert - ckeywhitelist = list("hackertdog") + //ckeywhitelist = list("hackertdog") restricted_roles = list(JOB_NT_REP) /datum/loadout_item/suit/hubertcc name = "CC Ensign's armoured vest" item_path = /obj/item/clothing/suit/armor/vest/nanotrasen_consultant/hubert - ckeywhitelist = list("hackertdog") + //ckeywhitelist = list("hackertdog") restricted_roles = list(JOB_NT_REP) /datum/loadout_item/under/jumpsuit/hubertcc name = "CC Ensign's uniform" item_path = /obj/item/clothing/under/rank/nanotrasen_consultant/hubert - ckeywhitelist = list("hackertdog") + //ckeywhitelist = list("hackertdog") restricted_roles = list(JOB_NT_REP) /datum/loadout_item/head/frostyushanka name = "Blue Ushanka" item_path = /obj/item/clothing/head/costume/ushanka/frosty - ckeywhitelist = list("cherno00") + //ckeywhitelist = list("cherno00") /datum/loadout_item/neck/silvercross name = "Silver Cross" item_path = /obj/item/clothing/neck/cross - ckeywhitelist = list("m97screwsyourparents") + //ckeywhitelist = list("m97screwsyourparents") /datum/loadout_item/suit/occult_coat name = "Occult Collector's Coat" item_path = /obj/item/clothing/suit/hooded/occult - ckeywhitelist = list("gamerguy14948") + //ckeywhitelist = list("gamerguy14948") /datum/loadout_item/under/jumpsuit/occult_outfit name = "Occult Collector's Outfit" item_path = /obj/item/clothing/under/occult - ckeywhitelist = list("gamerguy14948") + //ckeywhitelist = list("gamerguy14948") /datum/loadout_item/belts/trinket_belt name = "Trinket Belt" item_path = /obj/item/storage/belt/fannypack/occult - ckeywhitelist = list("gamerguy14948") + //ckeywhitelist = list("gamerguy14948") /datum/loadout_item/toys/voodooplush name = "Voodoo Doll" item_path = /obj/item/toy/plush/nova/donator/voodoo - ckeywhitelist = list("gamerguy14948") + //ckeywhitelist = list("gamerguy14948") /datum/loadout_item/mask/octusvox name = "Sinister Visor" item_path = /obj/item/clothing/mask/breath/vox/octus - ckeywhitelist = list("octus") + //ckeywhitelist = list("octus") /datum/loadout_item/glasses/roseglasses name = "Rose-Colored Glasses" item_path = /obj/item/clothing/glasses/rosecolored - ckeywhitelist = list("1ceres", "irrigoimport", "zeskorion", "wizardlywoz", "duckymomo", "samarai1000", "funkyfetusstrikesback", "m97screwsyourparents", "lynxqueen", "kaynite", "mahalia", "sapphoqueer", "emmakisst", "ceasethebridge", "valorthix" ) + //ckeywhitelist = list("1ceres", "irrigoimport", "zeskorion", "wizardlywoz", "duckymomo", "samarai1000", "funkyfetusstrikesback", "m97screwsyourparents", "lynxqueen", "kaynite", "mahalia", "sapphoqueer", "emmakisst", "ceasethebridge", "valorthix" ) /datum/loadout_item/pocket_items/fuzzy_huglicense name = "License To Hug" item_path = /obj/item/card/fuzzy_license - ckeywhitelist = list("fuzlet") + //ckeywhitelist = list("fuzlet") /datum/loadout_item/suit/gorlex_harness name = "Engine Technician Harness" item_path = /obj/item/clothing/suit/jacket/gorlex_harness - ckeywhitelist = list("1ceres") + //ckeywhitelist = list("1ceres") /datum/loadout_item/pocket_items/korpstech_poster name = "Korpstech Poster" item_path = /obj/item/poster/korpstech - ckeywhitelist = list("1ceres") + //ckeywhitelist = list("1ceres") /datum/loadout_item/glasses/roseeyepatch name = "Rose-Colored Eyepatch" item_path = /obj/item/clothing/glasses/eyepatch/rosecolored - ckeywhitelist = list("kaynite") + //ckeywhitelist = list("kaynite") /datum/loadout_item/suit/tenrai_coat name = "Tenrai Coat" item_path = /obj/item/clothing/suit/toggle/labcoat/nova/tenrai - ckeywhitelist = list("cimika") + //ckeywhitelist = list("cimika") /datum/loadout_item/neck/fluffycloak name = "Fluffy Cloak" item_path = /obj/item/clothing/neck/cloak/fluffycloak - ckeywhitelist = list("realwinterfrost") + //ckeywhitelist = list("realwinterfrost") /datum/loadout_item/mask/larpswat name = "Foam Force SWAT Mask" item_path = /obj/item/clothing/mask/gas/larpswat - ckeywhitelist = list("erdinyobarboza") + //ckeywhitelist = list("erdinyobarboza") /datum/loadout_item/toys/zappplush name = "Lil' Zapp Plushie" item_path = /obj/item/toy/plush/nova/donator/zapp - donator_only = TRUE + //donator_only = TRUE /datum/loadout_item/pocket_items/tacticalbrush name = "Tactical Brush" item_path = /obj/item/hairbrush/tactical - ckeywhitelist = list("weredoggo") + //ckeywhitelist = list("weredoggo") /datum/loadout_item/neck/fishpendant name = "Fish Pendant" item_path = /obj/item/clothing/neck/fishpendant - ckeywhitelist = list("cimika") + //ckeywhitelist = list("cimika") /datum/loadout_item/toys/immovable_rod_plush name = "Immovable Rod Plushie" item_path = /obj/item/toy/plush/nova/donator/immovable_rod - ckeywhitelist = list("tobjv") + //ckeywhitelist = list("tobjv") /datum/loadout_item/toys/tesh_plush name = "Squish-Me-Tesh Plush" item_path = /obj/item/toy/plush/nova/donator/tesh - ckeywhitelist = list("tobjv") + //ckeywhitelist = list("tobjv") /datum/loadout_item/under/jumpsuit/redhosneck name = "Black and Red Turtleneck" item_path = /obj/item/clothing/under/rank/security/head_of_security/alt/roselia - ckeywhitelist = list("ultimarifox") + //ckeywhitelist = list("ultimarifox") restricted_roles = list(JOB_HEAD_OF_SECURITY) /datum/loadout_item/glasses/redgigagar name = "Red-tinted Giga HUD Gar Glasses" item_path = /obj/item/clothing/glasses/hud/security/sunglasses/gars/giga/roselia - ckeywhitelist = list("ultimarifox") + //ckeywhitelist = list("ultimarifox") restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER) /datum/loadout_item/toys/roselia_plush name = "Obscene Sergal Plushie" item_path = /obj/item/toy/plush/nova/donator/roselia - ckeywhitelist = list("ultimarifox") + //ckeywhitelist = list("ultimarifox") /datum/loadout_item/accessory/mercbadge name = "Jade Badge" item_path = /obj/item/clothing/accessory/badge/holo/jade - ckeywhitelist = list("konstyantyn") + //ckeywhitelist = list("konstyantyn") /datum/loadout_item/toys/plushe_winrow name = "Dark and Brooding Lizard Plushie" @@ -533,32 +534,32 @@ /datum/loadout_item/suit/rainbowcoat name = "Rainbow Coat" item_path = /obj/item/clothing/suit/toggle/rainbowcoat - ckeywhitelist = list("dudewithatude") + //ckeywhitelist = list("dudewithatude") /datum/loadout_item/head/recruiter_cap name = "Recruiter's Cap" item_path = /obj/item/clothing/head/recruiter_cap - ckeywhitelist = list("m97screwsyourparents") + //ckeywhitelist = list("m97screwsyourparents") /datum/loadout_item/suit/recruiter_jacket name = "Recruiter's Jacket" item_path = /obj/item/clothing/suit/toggle/recruiter_jacket - ckeywhitelist = list("m97screwsyourparents") + //ckeywhitelist = list("m97screwsyourparents") /datum/loadout_item/under/jumpsuit/recruiter_uniform name = "Recruiter's Uniform" item_path = /obj/item/clothing/under/recruiter_uniform - ckeywhitelist = list("m97screwsyourparents") + //ckeywhitelist = list("m97screwsyourparents") /datum/loadout_item/pocket_items/hypno_watch name = "Pocket Watch" item_path = /obj/item/clothing/accessory/hypno_watch - ckeywhitelist = list("slippyjoe") + //ckeywhitelist = list("slippyjoe") /datum/loadout_item/under/jumpsuit/nt_idol name = "NT Idol's Skirt" item_path = /obj/item/clothing/under/nt_idol_skirt - ckeywhitelist = list("tetrako") + //ckeywhitelist = list("tetrako") restricted_roles = list(JOB_NT_REP) //Chunko Fops were donated by SlippyJoe, who requested they are usable by everyone @@ -566,157 +567,157 @@ /datum/loadout_item/toys/CFBonnie name = "Chunko Fop: Blue Bunny Plushie" item_path = /obj/item/toy/plush/nova/donator/chunko/bonnie - donator_only = TRUE + //donator_only = TRUE /datum/loadout_item/toys/CFAndrew name = "Chunko Fop: Green Bunny Plushie" item_path = /obj/item/toy/plush/nova/donator/chunko/andrew - donator_only = TRUE + //donator_only = TRUE /datum/loadout_item/toys/CFInessa name = "Chunko Fop: Medical Bear Plushie" item_path = /obj/item/toy/plush/nova/donator/chunko/inessa - donator_only = TRUE + //donator_only = TRUE /datum/loadout_item/toys/plushie_chiara name = "Commanding Fox Plushie" item_path = /obj/item/toy/plush/nova/donator/plushie_chiara - ckeywhitelist = list("srq", "superlagg") + //ckeywhitelist = list("srq", "superlagg") /datum/loadout_item/toys/plushie_dan name = "Comfy Fox Plushie" item_path = /obj/item/toy/plush/nova/donator/plushie_dan - ckeywhitelist = list("srq", "superlagg") + //ckeywhitelist = list("srq", "superlagg") /datum/loadout_item/under/jumpsuit/bubbly_clown name = "Bubbly Clown Dress" item_path = /obj/item/clothing/under/bubbly_clown/skirt restricted_roles = list(JOB_CLOWN) - ckeywhitelist = list("boisterousbeebz", "aether217") + //ckeywhitelist = list("boisterousbeebz", "aether217") /datum/loadout_item/pocket_items/marsoc_coin name = "MARSOC Challenge Coin" item_path = /obj/item/coin/donator/marsoc - ckeywhitelist = list("sweetsoulbrother") + //ckeywhitelist = list("sweetsoulbrother") /datum/loadout_item/toys/plushie_jeanne name = "Masked Roboticist Plushie" item_path = /obj/item/toy/plush/nova/donator/plushie_jeanne -// ckeywhitelist = list("klb100") // Asked it to be public. +// //ckeywhitelist = list("klb100") // Asked it to be public. /datum/loadout_item/under/jumpsuit/tactichill name = "Tactichill Jacket" item_path = /obj/item/clothing/under/tactichill - ckeywhitelist = list("kaynite") + //ckeywhitelist = list("kaynite") /datum/loadout_item/suit/techpriest name = "Techpriest Robes" item_path = /obj/item/clothing/suit/hooded/techpriest - ckeywhitelist = list("imthinkingarbys") + //ckeywhitelist = list("imthinkingarbys") /datum/loadout_item/toys/plushie_azyre name = "Handsome Chef Plushie" item_path = /obj/item/toy/plush/nova/donator/plushie_azyre - ckeywhitelist = list("dalaoazure") + //ckeywhitelist = list("dalaoazure") /datum/loadout_item/pocket_items/khicigs name = "Kitsuhana Singularity Cigarettes" item_path = /obj/item/storage/fancy/cigarettes/khi - ckeywhitelist = list("ultimarifox") + //ckeywhitelist = list("ultimarifox") /datum/loadout_item/shoes/dragheels name = "Fancy Heels (dragmeme)" item_path = /obj/item/clothing/shoes/fancy_heels/drag - ckeywhitelist = list("thedragmeme", "snailomi") + //ckeywhitelist = list("thedragmeme", "snailomi") /datum/loadout_item/under/jumpsuit/bimpcap name = "Formal Matte Black Captain Uniform" item_path = /obj/item/clothing/under/bimpcap restricted_roles = list(JOB_CAPTAIN) - ckeywhitelist = list("razurath") + //ckeywhitelist = list("razurath") /datum/loadout_item/toys/plushie_razurath name = "Science Shark Plushie" item_path = /obj/item/toy/plush/nova/donator/plushie_razurath - ckeywhitelist = list("razurath") + //ckeywhitelist = list("razurath") /datum/loadout_item/toys/plushie_razurath/second name = "Dwarf Shark Plushie" item_path = /obj/item/toy/plush/nova/donator/plushie_razurath/second - ckeywhitelist = list("razurath") + //ckeywhitelist = list("razurath") /datum/loadout_item/toys/plushie_elofy name = "Bumbling Wolfgirl Plushie" item_path = /obj/item/toy/plush/nova/donator/plushie_elofy - //ckeywhitelist = list("october23") // Asked it to be public. + ////ckeywhitelist = list("october23") // Asked it to be public. /datum/loadout_item/suit/elofy name = "Solar Admiral Coat" item_path = /obj/item/clothing/suit/armor/hos/elofy - ckeywhitelist = list("october23") + //ckeywhitelist = list("october23") restricted_roles = list(JOB_HEAD_OF_SECURITY) /datum/loadout_item/head/elofy name = "Solar Admiral Hat" item_path = /obj/item/clothing/head/hats/hos/elofy - ckeywhitelist = list("october23") + //ckeywhitelist = list("october23") restricted_roles = list(JOB_HEAD_OF_SECURITY) /datum/loadout_item/gloves/elofy name = "Solar Admiral Gloves" item_path = /obj/item/clothing/gloves/elofy - ckeywhitelist = list("october23") + //ckeywhitelist = list("october23") /datum/loadout_item/shoes/elofy name = "Solar Admiral Boots" item_path = /obj/item/clothing/shoes/jackboots/elofy - ckeywhitelist = list("october23") + //ckeywhitelist = list("october23") /datum/loadout_item/pocket_items/transponder name = "Broken Helian Transponder" item_path = /obj/item/donator/transponder - ckeywhitelist = list("glacii") + //ckeywhitelist = list("glacii") /datum/loadout_item/glasses/goldaviator name = "Purple and Gold Aviators" item_path = /obj/item/clothing/glasses/gold_aviators - ckeywhitelist = list("nikohyena") + //ckeywhitelist = list("nikohyena") /datum/loadout_item/under/jumpsuit/goldenkimono name = "Short-Sleeved Kimono" item_path = /obj/item/clothing/under/costume/nova/kimono/sigmar - ckeywhitelist = list("sigmaralkahest") + //ckeywhitelist = list("sigmaralkahest") /datum/loadout_item/suit/blackraincoat name = "Black Open-Faced Raincoat" item_path = /obj/item/clothing/suit/hooded/sigmarcoat - ckeywhitelist = list("sigmaralkahest") + //ckeywhitelist = list("sigmaralkahest") /datum/loadout_item/toys/plushy_syntax1112 name = "Lop Bunny Plushie" item_path = /obj/item/toy/plush/nova/donator/plushie_syntax1112 - ckeywhitelist = list("syntax1112") + //ckeywhitelist = list("syntax1112") /datum/loadout_item/gloves/hypnoring_nuke name = "Suspiciously Glossy Ring" item_path = /obj/item/clothing/gloves/ring/hypno/nuke - ckeywhitelist = list("sonicgotnuked") + //ckeywhitelist = list("sonicgotnuked") /datum/loadout_item/head/somerandomowl name = "Starry Witch Hat" item_path = /obj/item/clothing/head/costume/owlhat - ckeywhitelist = list("somerandomowl") + //ckeywhitelist = list("somerandomowl") /datum/loadout_item/head/razurathhat name = "Golden Nanotrasen Officer Cap" item_path = /obj/item/clothing/head/razurathhat - ckeywhitelist = list("razurath") + //ckeywhitelist = list("razurath") /datum/loadout_item/suit/razurathcoat name = "Golden Nanotrasen Officer Coat" item_path = /obj/item/clothing/suit/razurathcoat - ckeywhitelist = list("razurath") + //ckeywhitelist = list("razurath") /datum/loadout_item/pocket_items/masvedishcigar name = "Holocigar" @@ -726,88 +727,89 @@ /datum/loadout_item/suit/lt3_armor name = "Silver Jacket Mk II" item_path = /obj/item/clothing/suit/armor/skyy - ckeywhitelist = list("lt3") + //ckeywhitelist = list("lt3") restricted_roles = list(JOB_HEAD_OF_PERSONNEL, JOB_NT_REP) /datum/loadout_item/suit/lt3_jacket name = "Silver Jacket" item_path = /obj/item/clothing/suit/jacket/skyy - ckeywhitelist = list("lt3") + //ckeywhitelist = list("lt3") /datum/loadout_item/under/miscellaneous/lt3_jeans name = "Silver Jeans" item_path = /obj/item/clothing/under/pants/skyy - ckeywhitelist = list("lt3") + //ckeywhitelist = list("lt3") /datum/loadout_item/gloves/lt3_gloves name = "Charcoal Fingerless Gloves" item_path = /obj/item/clothing/gloves/skyy - ckeywhitelist = list("lt3") + //ckeywhitelist = list("lt3") /datum/loadout_item/toys/switchcomb name = "Switchblade Comb" item_path = /obj/item/hairbrush/switchblade - ckeywhitelist = list("stonetear") + //ckeywhitelist = list("stonetear") /datum/loadout_item/suit/colorblockhoodie name = "Color-Block Hoodie" item_path = /obj/item/clothing/suit/hooded/colorblockhoodie - ckeywhitelist = list("lolpopomg101") + //ckeywhitelist = list("lolpopomg101") /datum/loadout_item/inhand/officialcat name = "Official Cat Stamp" item_path = /obj/item/stamp/cat - ckeywhitelist = list("kathrinbailey") + //ckeywhitelist = list("kathrinbailey") /datum/loadout_item/inhand/sqn_box name = "A curious box of things." item_path = /obj/item/storage/box/donator/sqn - ckeywhitelist = list("sqnztb") + //ckeywhitelist = list("sqnztb") /datum/loadout_item/under/jumpsuit/noble_gambeson name = "Noble Gambeson" item_path = /obj/item/clothing/under/rank/civilian/chaplain/divine_archer/noble - ckeywhitelist = list("grasshand") + //ckeywhitelist = list("grasshand") /datum/loadout_item/shoes/noble_boots name = "Noble Boots" item_path = /obj/item/clothing/shoes/jackboots/noble - ckeywhitelist = list("grasshand") + //ckeywhitelist = list("grasshand") /datum/loadout_item/suit/nobility_dresscoat name = "Nobility Dresscoat" item_path = /obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator - ckeywhitelist = list("nikotheguydude") + //ckeywhitelist = list("nikotheguydude") /datum/loadout_item/suit/anubite_headpiece name = "Anubite Headpiece" item_path = /obj/item/clothing/head/anubite - ckeywhitelist = list("vexcint") + //ckeywhitelist = list("vexcint") /datum/loadout_item/under/formal/dragon_maid name = "Dragon Maid Uniform" item_path = /obj/item/clothing/under/costume/dragon_maid - ckeywhitelist = list("sigmaralkahest") + //ckeywhitelist = list("sigmaralkahest") /datum/loadout_item/head/catear_headphone name = "Cat-Ear Headphones" item_path = /obj/item/instrument/piano_synth/headphones/catear_headphone - ckeywhitelist = list("dtfe") + //ckeywhitelist = list("dtfe") /datum/loadout_item/neck/trenchcoat - name = "Secure Trenchcoat" + name = "Graceful Trenchcoat" item_path = /obj/item/clothing/neck/trenchcoat - ckeywhitelist = list("Smol42") + //ckeywhitelist = list("Smol42", "Awers855") /datum/loadout_item/under/jumpsuit/old_qm_jumpskirt name = "Old Quartermaster's Jumpskirt" item_path = /obj/item/clothing/under/rank/cargo/qm/skirt/old - ckeywhitelist = list("jasohavents") + //ckeywhitelist = list("jasohavents") /datum/loadout_item/pocket_items/toaster_implant name = "Toaster Implant" item_path = /obj/item/implanter/toaster - ckeywhitelist = list("jasohavents") + restricted_roles = list(JOB_CLOWN) + //ckeywhitelist = list("jasohavents") /datum/loadout_item/under/miscellaneous/rem name = "M.I.A. Limiter" @@ -827,34 +829,34 @@ /datum/loadout_item/inhand/pet/mrfluff_mothroach name = "Mr. Fluff" item_path = /obj/item/clothing/head/mob_holder/pet/donator/centralsmith - ckeywhitelist = list("centralsmith") + //ckeywhitelist = list("centralsmith") /datum/loadout_item/under/jumpsuit/techpants name = "Techwear Pants" item_path = /obj/item/clothing/under/techpants - ckeywhitelist = list("alvcyktor", "snakebittenn") + //ckeywhitelist = list("alvcyktor", "snakebittenn") /datum/loadout_item/inhand/drop_pouch name = "Drop Pouch" item_path = /obj/item/storage/backpack/satchel/drop_pouch - ckeywhitelist = list("alvcyktor", "snakebittenn") + //ckeywhitelist = list("alvcyktor", "snakebittenn") /datum/loadout_item/inhand/melonseva name = "Sundowner SEVA" item_path = /obj/item/clothing/suit/hooded/seva/melon - ckeywhitelist = list("deadmonwonderland") + //ckeywhitelist = list("deadmonwonderland") restricted_roles = list(JOB_SHAFT_MINER) /datum/loadout_item/suit/desminus name = "Jómsvíking Coat" item_path = /obj/item/clothing/suit/toggle/desminus - ckeywhitelist = list("desminus", "junglerat", "deadmonwonderland") + //ckeywhitelist = list("desminus", "junglerat", "deadmonwonderland") /datum/loadout_item/suit/desminus2 name = "Elderwood Garment" item_path = /obj/item/clothing/suit/toggle/desminus2 - ckeywhitelist = list("desminus", "junglerat", "deadmonwonderland") + //ckeywhitelist = list("desminus", "junglerat", "deadmonwonderland") /datum/loadout_item/pocket_items/akarimod name = "Akari's MOD Refitter" @@ -864,22 +866,22 @@ /datum/loadout_item/pocket_items/mrsanderp_cookbook name = "Riva Family Cookbook" item_path = /obj/item/book/granter/crafting_recipe/mrsanderp_donator_cookbook - ckeywhitelist = list("mrsanderp") + //ckeywhitelist = list("mrsanderp") /datum/loadout_item/under/jumpsuit/half_leotard name = "One-Sleeved Leotard" item_path = /obj/item/clothing/under/pants/half_leotard_cosmiclaer - ckeywhitelist = list("cosmiclaer") + //ckeywhitelist = list("cosmiclaer") /datum/loadout_item/under/jumpsuit/shendyt name = "Shendyt" item_path = /obj/item/clothing/under/costume/shendyt - ckeywhitelist = list("hyperhazel") + //ckeywhitelist = list("hyperhazel") /datum/loadout_item/pocket_items/jumperbox name = "Jumper Conversation Kit Box" item_path = /obj/item/mod/skin_applier/jumper - ckeywhitelist = list("bonkaitheroris") + //ckeywhitelist = list("bonkaitheroris") /datum/loadout_item/pocket_items/starfruit_seed name = "Primidine Starfruit Seed" @@ -889,4 +891,4 @@ /datum/loadout_item/suit/butter name = "Butter Costume" item_path = /obj/item/clothing/suit/costume/butter - ckeywhitelist = list("drpmstr", "pyritechimera") + //ckeywhitelist = list("drpmstr", "pyritechimera") diff --git a/modular_nova/modules/mapping/code/areas/away_content.dm b/modular_nova/modules/mapping/code/areas/away_content.dm index d17fdef65a443e..ebda142eb1ffd5 100644 --- a/modular_nova/modules/mapping/code/areas/away_content.dm +++ b/modular_nova/modules/mapping/code/areas/away_content.dm @@ -5,6 +5,8 @@ /area/awaymission/black_mesa name = "Black Mesa Inside" + requires_power = FALSE + always_unpowered = FALSE /area/awaymission/black_mesa/entrance name = "Black Mesa Entrance" diff --git a/modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm b/modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm index 03aa2bd1c222e9..40820246fbc71a 100644 --- a/modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm +++ b/modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm @@ -11,6 +11,9 @@ /obj/structure/closet/freighterammo/PopulateContents() . = ..() + new /obj/item/ammo_box/magazine/c40sol_rifle(src) + new /obj/item/ammo_box/magazine/c40sol_rifle(src) + new /obj/item/ammo_box/magazine/c40sol_rifle(src) new /obj/item/ammo_box/magazine/lanca(src) new /obj/item/ammo_box/magazine/lanca(src) new /obj/item/ammo_box/magazine/lanca(src) @@ -25,7 +28,7 @@ /obj/structure/closet/secure_closet/personal/cabinet/freighterboss/PopulateContents() . = ..() - new /obj/item/gun/ballistic/automatic/sol_rifle/marksman(src) + new /obj/item/gun/ballistic/automatic/cfa_rifle(src) new /obj/item/storage/pouch/ammo(src) new /obj/item/clothing/suit/armor/bulletproof(src) new /obj/item/storage/belt/utility/syndicate(src) @@ -33,6 +36,7 @@ new /obj/item/clothing/gloves/combat(src) new /obj/item/storage/backpack/duffelbag/syndie(src) new /obj/item/radio(src) - new /obj/item/ammo_box/magazine/c40sol_rifle(src) - new /obj/item/ammo_box/magazine/c40sol_rifle(src) - new /obj/item/ammo_box/magazine/c40sol_rifle(src) + new /obj/item/wrench/bolter(src) + new /obj/item/ammo_box/magazine/cm68(src) + new /obj/item/ammo_box/magazine/cm68(src) + new /obj/item/ammo_box/magazine/cm68(src) diff --git a/modular_nova/modules/mapping/code/mob_spawns.dm b/modular_nova/modules/mapping/code/mob_spawns.dm index 1db6b46f0cabec..9d6078f15bdc61 100644 --- a/modular_nova/modules/mapping/code/mob_spawns.dm +++ b/modular_nova/modules/mapping/code/mob_spawns.dm @@ -384,6 +384,16 @@ //Lost Space Truckers: Six people stranded in deep space aboard a cargo freighter. They must survive their marooning and cooperate. +//HEADSETS// +/obj/item/radio/headset/headset_frontier_colonist/cargodise + name = "Freight Crew radio headset" + keyslot = /obj/item/encryptionkey/headset_mining + +/obj/item/radio/headset/headset_frontier_colonist/cargodise/qm + name = "Freight Chief radio headset" + keyslot2 = /obj/item/encryptionkey/headset_com + command = TRUE + /obj/effect/mob_spawn/ghost_role/human/lostcargo name = "freighter cryo crew pod" prompt_name = "a lost cargo tech" @@ -405,6 +415,7 @@ name = "Freighter Crew" uniform = /obj/item/clothing/under/rank/cargo/tech/nova/casualman shoes = /obj/item/clothing/shoes/workboots + ears = /obj/item/radio/headset/headset_frontier_colonist/cargodise back = /obj/item/storage/backpack id = /obj/item/card/id/away/freightcrew @@ -439,6 +450,7 @@ name = "Freighter Excavator" uniform = /obj/item/clothing/under/rank/cargo/tech/nova/gorka shoes = /obj/item/clothing/shoes/workboots/mining + ears = /obj/item/radio/headset/headset_frontier_colonist/cargodise back = /obj/item/storage/backpack backpack_contents = list(/obj/item/flashlight/seclite=1,\ /obj/item/knife/combat/survival=1, @@ -481,6 +493,7 @@ name = "Freighter Boss" uniform = /obj/item/clothing/under/rank/cargo/tech/nova/turtleneck shoes = /obj/item/clothing/shoes/workboots + ears = /obj/item/radio/headset/headset_frontier_colonist/cargodise/qm neck = /obj/item/clothing/neck/cloak/qm back = /obj/item/storage/backpack backpack_contents = list( diff --git a/modular_nova/modules/specialist_armor/code/hardened.dm b/modular_nova/modules/specialist_armor/code/hardened.dm index 88d61ab068c6c7..e482f0b2eea2b6 100644 --- a/modular_nova/modules/specialist_armor/code/hardened.dm +++ b/modular_nova/modules/specialist_armor/code/hardened.dm @@ -27,8 +27,8 @@ . = ..() if(istype(hitby, /obj/projectile)) - var/obj/projectile/incoming_projectile = hitby - incoming_projectile.armour_penetration = 0 +/* var/obj/projectile/incoming_projectile = hitby + incoming_projectile.armour_penetration = 0 */ playsound(owner, SFX_RICOCHET, BLOCK_SOUND_VOLUME, vary = TRUE) /obj/item/clothing/suit/armor/sf_hardened/examine_more(mob/user) @@ -75,8 +75,8 @@ . = ..() if(istype(hitby, /obj/projectile)) - var/obj/projectile/incoming_projectile = hitby - incoming_projectile.armour_penetration = 0 +/* var/obj/projectile/incoming_projectile = hitby + incoming_projectile.armour_penetration = 0 */ playsound(src, SFX_RICOCHET, BLOCK_SOUND_VOLUME, vary = TRUE) /obj/item/clothing/head/helmet/toggleable/sf_hardened/examine_more(mob/user) diff --git a/modular_ss220/modules/access_upgrader/code/upgrader.dm b/modular_ss220/modules/access_upgrader/code/upgrader.dm new file mode 100644 index 00000000000000..860b3292f94f68 --- /dev/null +++ b/modular_ss220/modules/access_upgrader/code/upgrader.dm @@ -0,0 +1,45 @@ +/obj/item/circuitboard/computer/id_upgrader + name = "Generic ID Upgrade Machine circuit" + greyscale_colors = CIRCUIT_COLOR_GENERIC + build_path = /obj/machinery/computer/id_upgrader + +/obj/machinery/computer/id_upgrader + name = "ID Upgrade Machine" + desc = "An old computer, that can add access to the card." + icon = 'modular_ss220/modules/access_upgrader/icons/pass.dmi' + density = FALSE + icon_state = "guest" + icon_screen = "pass" + circuit = /obj/item/circuitboard/computer/id_upgrader + var/list/access_to_give = list(ACCESS_AWAY_GENERAL) + +/obj/machinery/computer/id_upgrader/attackby(obj/item/I, mob/user, params) + if(I.GetID()) + var/obj/item/card/id/D = I.GetID() + if(!access_to_give.len) + to_chat(user, "This machine appears to be configured incorrectly.") + return + var/did_upgrade = 0 + var/list/id_access = D.GetAccess() + for(var/this_access in access_to_give) + if(!(this_access in id_access)) + D.access |= this_access + did_upgrade = 1 + if(did_upgrade) + add_fingerprint(user) + to_chat(user, "An access type was added to your ID card.") + else + to_chat(user, "Your ID card already has all the access this machine can give.") + return + return ..() + +/obj/machinery/computer/id_upgrader/away_sec + name = "ID Upgrade Machine" + desc = "An old computer, that can add access a the card" + circuit = /obj/item/circuitboard/computer/id_upgrader/away_sec + access_to_give = list(ACCESS_AWAY_SEC) + +/obj/item/circuitboard/computer/id_upgrader/away_sec + name = "Old Security ID Upgrade Machine circuit" + greyscale_colors = CIRCUIT_COLOR_GENERIC + build_path = /obj/machinery/computer/id_upgrader/away_sec diff --git a/modular_ss220/modules/access_upgrader/icons/pass.dmi b/modular_ss220/modules/access_upgrader/icons/pass.dmi new file mode 100644 index 00000000000000..b8cdd06d1a14e9 Binary files /dev/null and b/modular_ss220/modules/access_upgrader/icons/pass.dmi differ diff --git a/modular_ss220/modules/cargo/code/_changes.dm b/modular_ss220/modules/cargo/code/_changes.dm new file mode 100644 index 00000000000000..78d143c0ed69f0 --- /dev/null +++ b/modular_ss220/modules/cargo/code/_changes.dm @@ -0,0 +1,173 @@ +/obj/item/clothing/head/helmet/sf_peacekeeper + armor_type = /datum/armor/suit_armor + +/obj/item/clothing/suit/armor/sf_peacekeeper + armor_type = /datum/armor/suit_armor + +/datum/supply_pack/imports/wt550 + name = "WT-550 Autorifle Crate" + desc = "" + hidden = FALSE + access = ACCESS_ARMORY + access_view = ACCESS_ARMORY + cost = CARGO_CRATE_VALUE * 14 + contains = list( + /obj/item/gun/ballistic/automatic/wt550 = 2, + /obj/item/ammo_box/magazine/wt550m9 = 2, + ) + crate_name = "emergency centcom crate(WT-550 Autorifle)" + crate_type = /obj/structure/closet/crate/secure/centcom + +/datum/supply_pack/imports/wt550ammo + name = "WT-550 Ammo Crate" + desc = "" + hidden = FALSE + access = ACCESS_SECURITY + access_view = ACCESS_ARMORY + cost = CARGO_CRATE_VALUE * 8 + contains = list( + /obj/item/ammo_box/magazine/wt550m9 = 2, + /obj/item/ammo_box/magazine/wt550m9/wtap = 2, + /obj/item/ammo_box/magazine/wt550m9/wtic = 2, + ) + crate_name = "emergency centcom crate(Ammo: WT-550 Autorifle)" + crate_type = /obj/structure/closet/crate/secure/centcom + +/datum/supply_pack/security/armory/shotguns + name = "Riot Shotguns Crate" + desc = "Three 12ga riot shotguns, with matching bandoliers for each." + cost = CARGO_CRATE_VALUE * 10 + contains = list( + /obj/item/gun/ballistic/shotgun/riot = 3, + /obj/item/storage/belt/bandolier = 3, + ) + crate_name = "Riot Shotgun Crate" + + +/datum/supply_pack/security/armory/flak_vest + name = "Peacekeeper flak vests 'Gordyn' Crate" + crate_name = "peacekeeper flak vests crate" + desc = "Contains three SolFed-made flak peacekeeper vests 'Gordyn'." + cost = CARGO_CRATE_VALUE * 3 + access = ACCESS_SECURITY + contains = list( + /obj/item/clothing/suit/armor/vest/det_suit/sol = 3, + ) + +/datum/supply_pack/security/armory/hardened_emt_armor + name = "Hardened emt Armor Kit Crate" + crate_name = "hardened armor kit crate" + desc = "Contains three sets of SolFed-made hardened emt body armor and matching helmets." + access = ACCESS_BRIG + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/clothing/head/helmet/toggleable/sf_hardened/emt = 3, + /obj/item/clothing/suit/armor/sf_hardened/emt = 3, + ) + +/datum/supply_pack/security/armory/soft_branded_armor + name = "Soft Peacekeeper Armor Kit Crate" + crate_name = "soft peacekeeper armor kit crate" + desc = "Contains three sets of SolFed-made soft peacekeeper body armor and matching helmets." + access = ACCESS_SECURITY + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/clothing/head/helmet/sf_peacekeeper = 3, + /obj/item/clothing/suit/armor/sf_peacekeeper = 3, + ) + +/datum/supply_pack/security/armory/gunkit + cost = CARGO_CRATE_VALUE * 5.4 + access = ACCESS_WEAPONS + access_view = ACCESS_ARMORY + access_any = list(ACCESS_COMMAND, ACCESS_ARMORY) + +/datum/supply_pack/security/armory/gunkit/hell + name = "Experimental gunkit Crate(hellfire)" + desc = "Contains one hellfire crafting gunkit. Requires Command or Armory access to open." + contains = list(/obj/item/weaponcrafting/gunkit/hellgun) + crate_name = "experimental gunkit crate(hellfire)" + +/datum/supply_pack/security/armory/gunkit/tesla + name = "Experimental gunkit Crate(tesla)" + desc = "Contains one tesla crafting gunkit. Requires Command or Armory access to open." + contains = list(/obj/item/weaponcrafting/gunkit/tesla) + crate_name = "experimental gunkit crate(tesla)" + +/datum/supply_pack/security/armory/gunkit/ion + name = "Experimental gunkit Crate(ion)" + desc = "Contains one ion crafting gunkit. Requires Command or Armory access to open." + contains = list(/obj/item/weaponcrafting/gunkit/ion) + crate_name = "experimental gunkit crate(ion)" + +/datum/supply_pack/security/armory/gunkit/xray + name = "Experimental gunkit Crate(xray)" + desc = "Contains one xray crafting gunkit. Requires Command or Armory access to open." + contains = list(/obj/item/weaponcrafting/gunkit/xray) + crate_name = "experimental gunkit crate(xray)" + +/obj/effect/spawner/armory_spawn/shotguns + guns = list( + /obj/item/gun/ballistic/shotgun/riot, + /obj/item/gun/ballistic/shotgun/riot, + /obj/item/gun/ballistic/shotgun/riot, + ) + +/obj/effect/spawner/armory_spawn/mod_lasers_big + guns = list( + /obj/item/gun/microfusion/mcr01, + /obj/item/gun/microfusion/mcr01, + /obj/item/gun/microfusion/mcr01, + ) + +/obj/effect/spawner/armory_spawn/mod_lasers_small + guns = list( + /obj/item/gun/energy/laser, + /obj/item/gun/energy/laser, + /obj/item/gun/energy/laser, + ) + +/obj/effect/spawner/armory_spawn/smg + vertical_guns = TRUE + guns = list( + /obj/item/gun/ballistic/automatic/wt550, + /obj/item/gun/ballistic/automatic/wt550, + /obj/item/gun/ballistic/automatic/wt550, // replace with /obj/item/gun/ballistic/automatic/battle_rifle later + ) + +/datum/supply_pack/security/ammo + special = FALSE + +/datum/supply_pack/security/securityclothes + special = FALSE + +/datum/supply_pack/security/armory/ballistic + special = FALSE + +/datum/supply_pack/security/armory/thermal + special = FALSE + +/datum/supply_pack/imports/russian + special = FALSE + +/datum/supply_pack/security/armory/sacrificial_armor + special = TRUE + hidden = TRUE + +/datum/supply_pack/security/armory/renoster + special = TRUE + hidden = TRUE + +/datum/supply_pack/security/armory/short_mod_laser + special = TRUE + hidden = TRUE + +/datum/supply_pack/security/armory/big_mod_laser + special = TRUE + hidden = TRUE + +/datum/supply_pack/security/armory/sindano + special = TRUE + hidden = TRUE + + diff --git a/modular_ss220/modules/cargo/code/akh_frontier1984.dm b/modular_ss220/modules/cargo/code/akh_frontier1984.dm new file mode 100644 index 00000000000000..8ebf390a26cdb2 --- /dev/null +++ b/modular_ss220/modules/cargo/code/akh_frontier1984.dm @@ -0,0 +1,97 @@ +/datum/armament_entry/company_import/akh_frontier + category = FRONTIER_EQUIPMENT_NAME + company_bitflag = CARGO_COMPANY_FRONTIER_EQUIPMENT + +// Tools that you could use the rapid fabricator for, but you're too lazy to actually do that + +/datum/armament_entry/company_import/akh_frontier/basic + subcategory = "Hand-Held Equipment" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/akh_frontier/basic/fock + item_type = /obj/item/multitool/fock + cost = PAYCHECK_COMMAND * 4 + contraband = TRUE + +/datum/armament_entry/company_import/akh_frontier/basic/omni_drill + item_type = /obj/item/screwdriver/omni_drill + +/datum/armament_entry/company_import/akh_frontier/basic/arc_welder + item_type = /obj/item/weldingtool/electric/arc_welder + +/datum/armament_entry/company_import/akh_frontier/basic/compact_drill + item_type = /obj/item/pickaxe/drill/compact + +// Flatpacked fabricator and related upgrades + +/datum/armament_entry/company_import/akh_frontier/deployables_fab + subcategory = "Deployable Fabrication Equipment" + +/datum/armament_entry/company_import/akh_frontier/deployables_fab/rapid_construction_fabricator + item_type = /obj/item/flatpacked_machine + cost = CARGO_CRATE_VALUE * 6 + +/datum/armament_entry/company_import/akh_frontier/deployables_fab/foodricator + item_type = /obj/item/flatpacked_machine/organics_ration_printer + cost = CARGO_CRATE_VALUE * 2 + +// Various smaller appliances than the deployable machines below + +/datum/armament_entry/company_import/akh_frontier/appliances + subcategory = "Appliances" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/akh_frontier/appliances/charger + item_type = /obj/item/wallframe/cell_charger_multi + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/akh_frontier/appliances/wall_heater + item_type = /obj/item/wallframe/wall_heater + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/akh_frontier/appliances/water_synth + item_type = /obj/item/flatpacked_machine/water_synth + +/datum/armament_entry/company_import/akh_frontier/appliances/hydro_synth + item_type = /obj/item/flatpacked_machine/hydro_synth + +/datum/armament_entry/company_import/akh_frontier/appliances/sustenance_dispenser + item_type = /obj/item/flatpacked_machine/sustenance_machine + cost = PAYCHECK_COMMAND * 2 + +// Flatpacked, ready to deploy machines + +/datum/armament_entry/company_import/akh_frontier/deployables_misc + subcategory = "Deployable General Equipment" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/akh_frontier/deployables_misc/arc_furnace + item_type = /obj/item/flatpacked_machine/arc_furnace + +/datum/armament_entry/company_import/akh_frontier/deployables_misc/co2_cracker + item_type = /obj/item/flatpacked_machine/co2_cracker + +/datum/armament_entry/company_import/akh_frontier/deployables_misc/recycler + item_type = /obj/item/flatpacked_machine/recycler + +// Flatpacked, ready to deploy machines for power related activities + +/datum/armament_entry/company_import/akh_frontier/deployables + subcategory = "Deployable Power Equipment" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/akh_frontier/deployables/turbine + item_type = /obj/item/flatpacked_machine/wind_turbine + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/akh_frontier/deployables/solids_generator + item_type = /obj/item/flatpacked_machine/fuel_generator + +/datum/armament_entry/company_import/akh_frontier/deployables/stirling_generator + item_type = /obj/item/flatpacked_machine/stirling_generator + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/akh_frontier/deployables/rtg + item_type = /obj/item/flatpacked_machine/rtg + cost = PAYCHECK_COMMAND * 2 + restricted = TRUE diff --git a/modular_ss220/modules/cargo/code/deforest_medical1984.dm b/modular_ss220/modules/cargo/code/deforest_medical1984.dm new file mode 100644 index 00000000000000..dc07265302e439 --- /dev/null +++ b/modular_ss220/modules/cargo/code/deforest_medical1984.dm @@ -0,0 +1,293 @@ +/datum/armament_entry/company_import/deforest + category = DEFOREST_MEDICAL_NAME + company_bitflag = CARGO_COMPANY_DEFOREST + +// Precompiled first aid kits, ready to go if you don't want to bother getting individual items + +/datum/armament_entry/company_import/deforest/first_aid_kit + subcategory = "First-Aid Kits" + +/datum/armament_entry/deforest/first_aid_kit/civil_defense/comfort + item_type = /obj/item/storage/medkit/civil_defense/comfort/stocked + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/first_aid_kit/civil_defense + item_type = /obj/item/storage/medkit/civil_defense/stocked + cost = PAYCHECK_COMMAND * 2.5 + +/datum/armament_entry/company_import/deforest/first_aid_kit/frontier + item_type = /obj/item/storage/medkit/frontier/stocked + cost = PAYCHECK_COMMAND * 3.5 + +/datum/armament_entry/company_import/deforest/first_aid_kit/combat_surgeon + item_type = /obj/item/storage/medkit/combat_surgeon/stocked + cost = PAYCHECK_COMMAND * 3.5 + +/datum/armament_entry/company_import/deforest/first_aid_kit/robo_repair + item_type = /obj/item/storage/medkit/robotic_repair/stocked + cost = PAYCHECK_COMMAND * 3.5 + +/datum/armament_entry/company_import/deforest/first_aid_kit/robo_repair_super + item_type = /obj/item/storage/medkit/robotic_repair/preemo/stocked + cost = PAYCHECK_COMMAND * 8 + +/datum/armament_entry/company_import/deforest/first_aid_kit/first_responder + item_type = /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked + cost = PAYCHECK_COMMAND * 10.5 + +/datum/armament_entry/company_import/deforest/first_aid_kit/orange_satchel + item_type = /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked + cost = PAYCHECK_COMMAND * 9.5 + +/datum/armament_entry/company_import/deforest/first_aid_kit/technician_satchel + item_type = /obj/item/storage/backpack/duffelbag/deforest_paramedic/stocked + cost = PAYCHECK_COMMAND * 11.75 + +// Basic first aid supplies like gauze, sutures, mesh, so on + +/datum/armament_entry/company_import/deforest/first_aid + subcategory = "First-Aid Consumables" + +/datum/armament_entry/company_import/deforest/first_aid/coagulant + item_type = /obj/item/stack/medical/suture/coagulant + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/suture + item_type = /obj/item/stack/medical/suture + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/medicated_sutures + item_type = /obj/item/stack/medical/suture/medicated + cost = PAYCHECK_LOWER * 1.6 + +/datum/armament_entry/company_import/deforest/first_aid/red_sun + item_type = /obj/item/stack/medical/ointment/red_sun + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/ointment + item_type = /obj/item/stack/medical/ointment + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/mesh + item_type = /obj/item/stack/medical/mesh + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/advanced_mesh + item_type = /obj/item/stack/medical/mesh/advanced + cost = PAYCHECK_LOWER * 1.6 + +/datum/armament_entry/company_import/deforest/first_aid/sterile_gauze + item_type = /obj/item/stack/medical/gauze/sterilized + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/amollin + item_type = /obj/item/storage/pill_bottle/painkiller + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/deforest/first_aid/robo_patch + item_type = /obj/item/reagent_containers/pill/robotic_patch/synth_repair + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/deforest/first_aid/bandaid + item_type = /obj/item/storage/box/bandages + cost = PAYCHECK_CREW * 1.5 + +/datum/armament_entry/company_import/deforest/first_aid/subdermal_splint + item_type = /obj/item/stack/medical/wound_recovery + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/first_aid/rapid_coagulant + item_type = /obj/item/stack/medical/wound_recovery/rapid_coagulant + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/first_aid/robofoam + item_type = /obj/item/stack/medical/wound_recovery/robofoam + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/first_aid/super_robofoam + item_type = /obj/item/stack/medical/wound_recovery/robofoam_super + cost = PAYCHECK_COMMAND * 4 + +// Autoinjectors for healing + +/datum/armament_entry/company_import/deforest/medpens + subcategory = "Medical Autoinjectors" + cost = PAYCHECK_LOWER * 3 + +/datum/armament_entry/company_import/deforest/medpens/occuisate + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/occuisate + +/datum/armament_entry/company_import/deforest/medpens/morpital + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/morpital + +/datum/armament_entry/company_import/deforest/medpens/lipital + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/lipital + +/datum/armament_entry/company_import/deforest/medpens/meridine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/meridine + +/datum/armament_entry/company_import/deforest/medpens/calopine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/calopine + +/datum/armament_entry/company_import/deforest/medpens/coagulants + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants + +/datum/armament_entry/company_import/deforest/medpens/lepoturi + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi + +/datum/armament_entry/company_import/deforest/medpens/psifinil + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/psifinil + +/datum/armament_entry/company_import/deforest/medpens/halobinin + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/halobinin + +/datum/armament_entry/company_import/deforest/medpens/robo_solder + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/robot_liquid_solder + +/datum/armament_entry/company_import/deforest/medpens/robo_cleaner + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/robot_system_cleaner + +/datum/armament_entry/company_import/deforest/medpens/pentibinin + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/pentibinin + contraband = TRUE + +// Autoinjectors for fighting + +/datum/armament_entry/company_import/deforest/medpens_stim + subcategory = "Stimulant Autoinjectors" + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/medpens_stim/adrenaline + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline + +/datum/armament_entry/company_import/deforest/medpens_stim/synephrine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/synephrine + +/datum/armament_entry/company_import/deforest/medpens_stim/krotozine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/krotozine + +/datum/armament_entry/company_import/deforest/medpens_stim/aranepaine + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/aranepaine + contraband = TRUE + +/datum/armament_entry/company_import/deforest/medpens_stim/synalvipitol + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol + contraband = TRUE + +/datum/armament_entry/company_import/deforest/medpens_stim/twitch + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/twitch + cost = PAYCHECK_COMMAND * 3 + contraband = TRUE + +/datum/armament_entry/company_import/deforest/medpens_stim/demoneye + item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/demoneye + cost = PAYCHECK_COMMAND * 3 + contraband = TRUE + +// Equipment, from defibs to scanners to surgical tools + +/datum/armament_entry/company_import/deforest/equipment + subcategory = "Medical Equipment" + +/datum/armament_entry/company_import/deforest/equipment/treatment_zone_projector + item_type = /obj/item/holosign_creator/medical/treatment_zone + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/equipment/health_analyzer + item_type = /obj/item/healthanalyzer + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/equipment/loaded_defib + item_type = /obj/item/defibrillator/loaded + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/deforest/equipment/surgical_tools + item_type = /obj/item/surgery_tray/full + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/deforest/equipment/advanced_health_analyer + item_type = /obj/item/healthanalyzer/advanced + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/penlite_defib_mount + item_type = /obj/item/wallframe/defib_mount/charging + cost = PAYCHECK_CREW * 3 + +/datum/armament_entry/company_import/deforest/equipment/advanced_scalpel + item_type = /obj/item/scalpel/advanced + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/advanced_retractor + item_type = /obj/item/retractor/advanced + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/advanced_cautery + item_type = /obj/item/cautery/advanced + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/equipment/medigun_upgrade + item_type = /obj/item/device/custom_kit/medigun_fastcharge + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/equipment/hypospray_upgrade + item_type = /obj/item/device/custom_kit/deluxe_hypo2 + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/equipment/afad + item_type = /obj/item/gun/medbeam/afad + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/deforest/equipment/medstation + item_type = /obj/item/wallframe/frontier_medstation + cost = PAYCHECK_COMMAND * 5 + +// Advanced implants, some of these can be printed but this is a way to get them before tech if you REALLY wanted + +/datum/armament_entry/company_import/deforest/cyber_implants + subcategory = "Cybernetic Implants" + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/cyber_implants/razorwire + name = "Razorwire Spool Implant" + item_type = /obj/item/organ/internal/cyberimp/arm/razorwire + +/datum/armament_entry/company_import/deforest/cyber_implants/shell_launcher + name = "Shell Launch System Implant" + item_type = /obj/item/organ/internal/cyberimp/arm/shell_launcher + +/datum/armament_entry/company_import/deforest/cyber_implants/sandy + name = "Qani-Laaca Sensory Computer Implant" + item_type = /obj/item/organ/internal/cyberimp/sensory_enhancer + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/deforest/cyber_implants/hackerman + name = "Binyat Wireless Hacking System Implant" + item_type = /obj/item/organ/internal/cyberimp/hackerman_deck + cost = PAYCHECK_COMMAND * 10 + contraband = TRUE + +// Modsuit Modules from the medical category, here instead of in Nakamura because nobody buys from this company + +/datum/armament_entry/company_import/deforest/medical_modules + subcategory = "MOD Medical Modules" + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/deforest/medical_modules/injector + name = "MOD injector module" + item_type = /obj/item/mod/module/injector + +/datum/armament_entry/company_import/deforest/medical_modules/organizer + name = "MOD organizer module" + item_type = /obj/item/mod/module/organizer + +/datum/armament_entry/company_import/deforest/medical_modules/patient_transport + name = "MOD patient transport module" + item_type = /obj/item/mod/module/criminalcapture/patienttransport + +/datum/armament_entry/company_import/deforest/medical_modules/thread_ripper + name = "MOD thread ripper module" + item_type = /obj/item/mod/module/thread_ripper + +/datum/armament_entry/company_import/deforest/medical_modules/surgical_processor + name = "MOD surgical processor module" + item_type = /obj/item/mod/module/surgical_processor diff --git a/modular_ss220/modules/cargo/code/jarnsmiour1984.dm b/modular_ss220/modules/cargo/code/jarnsmiour1984.dm new file mode 100644 index 00000000000000..8ed7c3385ad166 --- /dev/null +++ b/modular_ss220/modules/cargo/code/jarnsmiour1984.dm @@ -0,0 +1,66 @@ +/datum/armament_entry/company_import/blacksteel + category = BLACKSTEEL_FOUNDATION_NAME + company_bitflag = CARGO_COMPANY_BLACKSTEEL + +// A collection of melee weapons fitting the company's more exotic feeling weapon selection + +/datum/armament_entry/company_import/blacksteel/blade + subcategory = "Bladed Weapons" + +/datum/armament_entry/company_import/blacksteel/blade/hunting_knife + item_type = /obj/item/knife/hunting + cost = PAYCHECK_CREW * 2 + +/datum/armament_entry/company_import/blacksteel/blade/survival_knife + item_type = /obj/item/knife/combat/survival + cost = PAYCHECK_CREW * 2 + +/datum/armament_entry/company_import/blacksteel/blade/bowie_knife + item_type = /obj/item/storage/belt/bowie_sheath + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/blacksteel/blade/shamshir_sabre + item_type = /obj/item/storage/belt/sabre/cargo + cost = PAYCHECK_COMMAND * 3 + +// Forging tools, blacksteel company sells the tools and materials they use as well! + +/datum/armament_entry/company_import/blacksteel/forging_tools + subcategory = "Premium Forging Equipment" + +/datum/armament_entry/company_import/blacksteel/forging_tools/billows + item_type = /obj/item/forging/billow + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/blacksteel/forging_tools/hammer + item_type = /obj/item/forging/hammer + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/blacksteel/forging_tools/tongs + item_type = /obj/item/forging/tongs + cost = PAYCHECK_LOWER + +// Fancy sounding and looking bars of metal that most definitely aren't just common metals with a fancy sounding name + +/datum/armament_entry/company_import/blacksteel/forging_metals + subcategory = "Premium Metal Supplies" + +/datum/armament_entry/company_import/blacksteel/forging_metals/fake_cobalt + item_type = /obj/item/stack/sheet/cobolterium/three + description = "A three-pack of our finest cobolterium alloy, with an unmatched regal blue color for creating the strongest metalworks from." + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/blacksteel/forging_metals/fake_copper + item_type = /obj/item/stack/sheet/copporcitite/three + description = "A three-pack of our finest copporcitite alloy, with a powerful, fiery orange color for creating the strongest metalworks from." + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/blacksteel/forging_metals/fake_really_blue_aluminum + item_type = /obj/item/stack/sheet/tinumium/three + description = "A three-pack of our finest tinumium alloy, with a mystical faded blue color for creating the strongest metalworks from." + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/blacksteel/forging_metals/fake_brass + item_type = /obj/item/stack/sheet/brussite/three + description = "A three-pack of our finest brussite alloy, with a robust yellow color for creating the strongest metalworks from." + cost = PAYCHECK_CREW diff --git a/modular_ss220/modules/cargo/code/kahraman_industries1984.dm b/modular_ss220/modules/cargo/code/kahraman_industries1984.dm new file mode 100644 index 00000000000000..11cf2249e590ea --- /dev/null +++ b/modular_ss220/modules/cargo/code/kahraman_industries1984.dm @@ -0,0 +1,122 @@ +/datum/armament_entry/company_import/kahraman + category = KAHRAMAN_INDUSTRIES_NAME + company_bitflag = CARGO_COMPANY_KAHRAMAN + +/// Kahraman-made machines +/datum/armament_entry/company_import/kahraman/machinery + subcategory = "Machinery" + +/datum/armament_entry/company_import/kahraman/machinery/biogenerator + item_type = /obj/item/flatpacked_machine/organics_printer + description = "An advanced machine seen in frontier outposts and colonies capable of turning organic plant matter into \ + reagents and items of use that a fabricator can't typically make." + cost = CARGO_CRATE_VALUE * 3 + +/datum/armament_entry/company_import/kahraman/machinery/ore_thumper + item_type = /obj/item/flatpacked_machine/ore_thumper + description = "A frame with a heavy block of metal suspended atop a pipe. \ + Must be deployed outdoors and given a wired power connection. \ + Forces pressurized gas into the ground which brings up buried resources." + cost = CARGO_CRATE_VALUE * 5 + +/datum/armament_entry/company_import/kahraman/machinery/gps_beacon + item_type = /obj/item/flatpacked_machine/gps_beacon + description = "A packed GPS beacon, can be deployed and anchored into the ground to \ + provide and unobstructed homing beacon for wayward travelers across the galaxy." + cost = PAYCHECK_LOWER + +// Occupational health and safety? Never heard of her. + +/datum/armament_entry/company_import/kahraman/ppe + subcategory = "Protective Equipment" + +/datum/armament_entry/company_import/kahraman/ppe/hazard_mod + name = "Frontier Hazard Compressed Modsuit" + item_type = /obj/item/mod/control/pre_equipped/frontier_colonist + description = "The pinnacle of frontier cheap technology. Suits such as these are made \ + specifically for the rare emergency that creates a hazard environment that other \ + equipment just can't quite handle. Compressed enough to fit in your backpack when not in use." + cost = PAYCHECK_COMMAND * 6.5 + +/datum/armament_entry/company_import/kahraman/ppe/civilian_mod + name = "Civilian Miniaturized Belt Modsuit" + item_type = /obj/item/mod/control/pre_equipped/civilian + description = "A non spaceproof belt Modsuit made for civilian operations and Modsuit training \ + this convenient frame allows the user to enjoy most Modsuit Modules without having to rely \ + on a heavy backpack control unit, making its operation less taxing and convenient for the \ + average user." + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/kahraman/ppe/gas_mask + item_type = /obj/item/clothing/mask/gas/atmos/frontier_colonist + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/kahraman/ppe/headset + item_type = /obj/item/radio/headset/headset_frontier_colonist + cost = PAYCHECK_COMMAND * 1.5 + +/datum/armament_entry/company_import/kahraman/ppe/flak_vest + item_type = /obj/item/clothing/suit/frontier_colonist_flak + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/kahraman/ppe/tanker_helmet + item_type = /obj/item/clothing/head/frontier_colonist_helmet + cost = PAYCHECK_COMMAND + +// Work clothing + +/datum/armament_entry/company_import/kahraman/work_clothing + subcategory = "Clothing" + +/datum/armament_entry/company_import/kahraman/work_clothing/jumpsuit + item_type = /obj/item/clothing/under/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/jacket + item_type = /obj/item/clothing/suit/jacket/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/jacket_short + item_type = /obj/item/clothing/suit/jacket/frontier_colonist/short + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/med_jacket + item_type = /obj/item/clothing/suit/jacket/frontier_colonist/medical + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/ballcap + item_type = /obj/item/clothing/head/soft/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/med_ballcap + item_type = /obj/item/clothing/head/soft/frontier_colonist/medic + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/booties + item_type = /obj/item/clothing/shoes/jackboots/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/work_clothing/gloves + item_type = /obj/item/clothing/gloves/frontier_colonist + cost = PAYCHECK_CREW + +// "Equipment", so storage items and whatnot + +/datum/armament_entry/company_import/kahraman/storage_equipment + subcategory = "Personal Equipment" + +/datum/armament_entry/company_import/kahraman/storage_equipment/backpack + item_type = /obj/item/storage/backpack/industrial/frontier_colonist + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/storage_equipment/satchel + item_type = /obj/item/storage/backpack/industrial/frontier_colonist/satchel + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/storage_equipment/messenger + item_type = /obj/item/storage/backpack/industrial/frontier_colonist/messenger + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/kahraman/storage_equipment/belt + item_type = /obj/item/storage/belt/utility/frontier_colonist + cost = PAYCHECK_CREW diff --git a/modular_ss220/modules/cargo/code/microstar_energy1984.dm b/modular_ss220/modules/cargo/code/microstar_energy1984.dm new file mode 100644 index 00000000000000..e0ade187e5b3dc --- /dev/null +++ b/modular_ss220/modules/cargo/code/microstar_energy1984.dm @@ -0,0 +1,53 @@ +/datum/armament_entry/company_import/microstar + category = MICROSTAR_ENERGY_NAME + company_bitflag = CARGO_COMPANY_MICROSTAR + +// Basic lethal/disabler beam weapons + +/datum/armament_entry/company_import/microstar/basic_energy_weapons + subcategory = "Basic Energy Smallarms" + +/datum/armament_entry/company_import/microstar/basic_energy_weapons/mini_egun + item_type = /obj/item/gun/energy/e_gun/mini + cost = PAYCHECK_COMMAND * 10 + +// Preset 'loadout' kits built around a barrel attachment + +/datum/armament_entry/company_import/microstar/mcr_attachments + subcategory = "Microfusion Attachment Kits" + cost = PAYCHECK_COMMAND * 10 + +/datum/armament_entry/company_import/microstar/mcr_attachments/hellfire + name = "microfusion hellfire kit" + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire + +/datum/armament_entry/company_import/microstar/mcr_attachments/scatter + name = "microfusion scatter kit" + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/scatter + +/datum/armament_entry/company_import/microstar/mcr_attachments/lance + name = "microfusion lance kit" + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/lance + +/datum/armament_entry/company_import/microstar/mcr_attachments/repeater + name = "microfusion repeater kit" + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/repeater + +/datum/armament_entry/company_import/microstar/mcr_attachments/tacticool + name = "microfusion suppressor kit" + item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool + contraband = TRUE + +// Improved phase emitters, cells, and cell attachments + +/datum/armament_entry/company_import/microstar/mcr_upgrades + subcategory = "Microfusion Upgrade Kits" + +/datum/armament_entry/company_import/microstar/mcr_upgrades/enhanced_part_kit + name = "microfusion enhanced parts" + item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/enhanced + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/microstar/mcr_upgrades/capacity_booster + item_type = /obj/item/microfusion_cell_attachment/overcapacity + cost = PAYCHECK_COMMAND * 2 diff --git a/modular_ss220/modules/cargo/code/nakamura_modsuits1984.dm b/modular_ss220/modules/cargo/code/nakamura_modsuits1984.dm new file mode 100644 index 00000000000000..d73bff7e4d7e8c --- /dev/null +++ b/modular_ss220/modules/cargo/code/nakamura_modsuits1984.dm @@ -0,0 +1,204 @@ +/datum/armament_entry/company_import/nakamura_modsuits + category = NAKAMURA_ENGINEERING_MODSUITS_NAME + company_bitflag = CARGO_COMPANY_NAKAMURA_MODSUITS + +// MOD cores + +/datum/armament_entry/company_import/nakamura_modsuits/core + subcategory = "MOD Core Modules" + +/datum/armament_entry/company_import/nakamura_modsuits/core/standard + item_type = /obj/item/mod/core/standard + cost = PAYCHECK_CREW * 2 + +/datum/armament_entry/company_import/nakamura_modsuits/core/plasma + item_type = /obj/item/mod/core/plasma + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/core/ethereal + item_type = /obj/item/mod/core/ethereal + cost = PAYCHECK_CREW + +// MOD plating + +/datum/armament_entry/company_import/nakamura_modsuits/plating + subcategory = "MOD External Plating" + +/datum/armament_entry/company_import/nakamura_modsuits/plating/standard + name = "MOD Standard Plating" + item_type = /obj/item/mod/construction/plating + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/plating/medical + name = "MOD Medical Plating" + item_type = /obj/item/mod/construction/plating/medical + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/nakamura_modsuits/plating/engineering + name = "MOD Engineering Plating" + item_type = /obj/item/mod/construction/plating/engineering + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/nakamura_modsuits/plating/atmospherics + name = "MOD Atmospherics Plating" + item_type = /obj/item/mod/construction/plating/atmospheric + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/nakamura_modsuits/plating/security + name = "MOD Security Plating" + item_type = /obj/item/mod/construction/plating/security + cost = PAYCHECK_COMMAND * 2 + restricted = TRUE + +/datum/armament_entry/company_import/nakamura_modsuits/plating/clown + name = "MOD CosmoHonk (TM) Plating" + item_type = /obj/item/mod/construction/plating/cosmohonk + cost = PAYCHECK_COMMAND * 2 + contraband = TRUE + +// MOD modules + +// Protection, so shielding and whatnot + +/datum/armament_entry/company_import/nakamura_modsuits/protection_modules + subcategory = "MOD Protection Modules" + +/datum/armament_entry/company_import/nakamura_modsuits/protection_modules/welding + item_type = /obj/item/mod/module/welding + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/protection_modules/longfall + item_type = /obj/item/mod/module/longfall + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/protection_modules/rad_protection + item_type = /obj/item/mod/module/rad_protection + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/protection_modules/emp_shield + item_type = /obj/item/mod/module/emp_shield + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/protection_modules/armor_plates + item_type = /obj/item/mod/module/armor_booster/retractplates + cost = PAYCHECK_COMMAND * 3 + restricted = TRUE + contraband = TRUE + +// Utility modules, general purpose stuff that really anyone might want + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules + subcategory = "MOD Utility Modules" + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/flashlight + item_type = /obj/item/mod/module/flashlight + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/regulator + item_type = /obj/item/mod/module/thermal_regulator + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/mouthhole + item_type = /obj/item/mod/module/mouthhole + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/signlang + item_type = /obj/item/mod/module/signlang_radio + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/plasma_stabilizer + item_type = /obj/item/mod/module/plasma_stabilizer + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/basic_storage + item_type = /obj/item/mod/module/storage + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/expanded_storage + item_type = /obj/item/mod/module/storage/large_capacity + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/retract_plates + item_type = /obj/item/mod/module/plate_compression + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/nakamura_modsuits/utility_modules/magnetic_deploy + item_type = /obj/item/mod/module/springlock/contractor + cost = PAYCHECK_COMMAND * 2 + +// Mobility modules, jetpacks and stuff + +/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules + subcategory = "MOD Mobility Modules" + +/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/tether + item_type = /obj/item/mod/module/tether + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/magboot + item_type = /obj/item/mod/module/magboot + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/jetpack + item_type = /obj/item/mod/module/jetpack + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/pathfinder + item_type = /obj/item/mod/module/pathfinder + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/disposals + item_type = /obj/item/mod/module/disposal_connector + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/sphere + item_type = /obj/item/mod/module/sphere_transform + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/atrocinator + item_type = /obj/item/mod/module/atrocinator + cost = PAYCHECK_COMMAND * 2 + contraband = TRUE + +// Novelty modules, goofy stuff that's rare/unprintable, but doesn't fit in any of the above categories + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules + subcategory = "MOD Novelty Modules" + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/waddle + item_type = /obj/item/mod/module/waddle + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/bike_horn + item_type = /obj/item/mod/module/bikehorn + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/microwave_beam + item_type = /obj/item/mod/module/microwave_beam + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/tanner + item_type = /obj/item/mod/module/tanner + cost = PAYCHECK_CREW + contraband = TRUE + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/rave + item_type = /obj/item/mod/module/visor/rave + cost = PAYCHECK_CREW + contraband = TRUE + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/hat_stabilizer + item_type = /obj/item/mod/module/hat_stabilizer + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/kinesis + item_type = /obj/item/mod/module/anomaly_locked/kinesis/prebuilt/locked + cost = PAYCHECK_COMMAND * 15 + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/antigrav + item_type = /obj/item/mod/module/anomaly_locked/antigrav/prebuilt/locked + cost = PAYCHECK_COMMAND * 15 + +/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/teleporter + item_type = /obj/item/mod/module/anomaly_locked/teleporter/prebuilt/locked + cost = PAYCHECK_COMMAND * 20 diff --git a/modular_ss220/modules/cargo/code/nri_military_surplus1984.dm b/modular_ss220/modules/cargo/code/nri_military_surplus1984.dm new file mode 100644 index 00000000000000..e4e740ac1140f5 --- /dev/null +++ b/modular_ss220/modules/cargo/code/nri_military_surplus1984.dm @@ -0,0 +1,107 @@ +/datum/armament_entry/company_import/nri_surplus + category = NRI_SURPLUS_COMPANY_NAME + company_bitflag = CARGO_COMPANY_NRI_SURPLUS + +// Various NRI clothing items + +/datum/armament_entry/company_import/nri_surplus/clothing + subcategory = "Clothing Supplies" + +/datum/armament_entry/company_import/nri_surplus/clothing/uniform + item_type = /obj/item/clothing/under/syndicate/rus_army/cin_surplus/random_color + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/belt + item_type = /obj/item/storage/belt/military/cin_surplus/random_color + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/backpack + item_type = /obj/item/storage/backpack/industrial/cin_surplus/random_color + cost = PAYCHECK_CREW + + +/datum/armament_entry/company_import/nri_surplus/clothing/police_uniform + item_type = /obj/item/clothing/under/colonial/nri_police + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/police_cloak + item_type = /obj/item/clothing/neck/cloak/colonial/nri_police + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/police_cap + item_type = /obj/item/clothing/head/hats/colonial/nri_police + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/clothing/police_mask + item_type = /obj/item/clothing/mask/gas/nri_police + cost = PAYCHECK_CREW*2 + + +/datum/armament_entry/company_import/nri_surplus/armor + subcategory = "Armor Supplies" + cost = PAYCHECK_COMMAND * 2 + contraband = TRUE + +/datum/armament_entry/company_import/nri_surplus/armor/cin_helmet + item_type = /obj/item/clothing/head/helmet/cin_surplus_helmet/random_color + +/datum/armament_entry/company_import/nri_surplus/armor/cin_vest + item_type = /obj/item/clothing/suit/armor/vest/cin_surplus_vest + +/datum/armament_entry/company_import/nri_surplus/armor/police_vest + item_type = /obj/item/clothing/head/helmet/nri_police + +/datum/armament_entry/company_import/nri_surplus/armor/police_helmet + item_type = /obj/item/clothing/suit/armor/vest/nri_police + +/datum/armament_entry/company_import/nri_surplus/misc + subcategory = "Miscellaneous Supplies" + +/datum/armament_entry/company_import/nri_surplus/misc/flares + item_type = /obj/item/storage/box/nri_flares + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nri_surplus/misc/binoculars + item_type = /obj/item/binoculars + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/misc/screwdriver_pen + item_type = /obj/item/pen/screwdriver + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/misc/trench_tool + item_type = /obj/item/trench_tool + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/nri_surplus/misc/food_replicator + description = "A widespread technology previously used by far colonies on the NRI's borders, over time being shifted from the foundation of colonies \ + to a simple disaster relief solution. It can turn spoiled or inedible plant matter into food, medical supplies, and other general items. \ + These particular units were displaced during a stock count in an NRI warehouse." + item_type = /obj/item/circuitboard/machine/biogenerator/food_replicator + cost = CARGO_CRATE_VALUE * 9 + +/datum/armament_entry/company_import/nri_surplus/misc/nri_flag + item_type = /obj/item/sign/flag/nri + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo + subcategory = "Firearm Magazines" + contraband = TRUE + cost = PAYCHECK_CREW * 2 + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/plasma_battery + item_type = /obj/item/ammo_box/magazine/recharge/plasma_battery + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/miecz + item_type = /obj/item/ammo_box/magazine/miecz/spawns_empty + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/sakhno + item_type = /obj/item/ammo_box/strilka310 + cost = PAYCHECK_CREW * 6 + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/lanca + item_type = /obj/item/ammo_box/magazine/lanca/spawns_empty + +/datum/armament_entry/company_import/nri_surplus/firearm_ammo/amr_magazine + item_type = /obj/item/ammo_box/magazine/wylom + cost = PAYCHECK_CREW * 8 diff --git a/modular_ss220/modules/cargo/code/put_a_donk_on_it1984.dm b/modular_ss220/modules/cargo/code/put_a_donk_on_it1984.dm new file mode 100644 index 00000000000000..b17ba4e548b102 --- /dev/null +++ b/modular_ss220/modules/cargo/code/put_a_donk_on_it1984.dm @@ -0,0 +1,149 @@ +/datum/armament_entry/company_import/donk + category = DONK_CO_NAME + company_bitflag = CARGO_COMPANY_DONK + +// Donk Co foods, like donk pockets and ready donk + +/datum/armament_entry/company_import/donk/food + subcategory = "Microwave Foods" + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/donk/food/ready_donk + item_type = /obj/item/food/ready_donk + +/datum/armament_entry/company_import/donk/food/ready_donkhiladas + item_type = /obj/item/food/ready_donk/donkhiladas + +/datum/armament_entry/company_import/donk/food/ready_donk_n_cheese + item_type = /obj/item/food/ready_donk/mac_n_cheese + +/datum/armament_entry/company_import/donk/food/pockets + item_type = /obj/item/storage/box/donkpockets + +/datum/armament_entry/company_import/donk/food/berry_pockets + item_type = /obj/item/storage/box/donkpockets/donkpocketberry + +/datum/armament_entry/company_import/donk/food/honk_pockets + item_type = /obj/item/storage/box/donkpockets/donkpockethonk + +/datum/armament_entry/company_import/donk/food/pizza_pockets + item_type = /obj/item/storage/box/donkpockets/donkpocketpizza + +/datum/armament_entry/company_import/donk/food/spicy_pockets + item_type = /obj/item/storage/box/donkpockets/donkpocketspicy + +/datum/armament_entry/company_import/donk/food/teriyaki_pockets + item_type = /obj/item/storage/box/donkpockets/donkpocketteriyaki + +// Random donk toy items, fake jumpsuits, balloons, so on + +// Donk merch gives you more interest than other items, buy donk bling and get company interest faster! + +/datum/armament_entry/company_import/donk/merch + subcategory = "Donk Co. Merchandise" + +/datum/armament_entry/company_import/donk/merch/donk_carpet + item_type = /obj/item/stack/tile/carpet/donk/thirty + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/donk/merch/tacticool_turtleneck + item_type = /obj/item/clothing/under/syndicate/tacticool + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/donk/merch/tacticool_turtleneck_skirt + item_type = /obj/item/clothing/under/syndicate/tacticool/skirt + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/donk/merch/fake_centcom_turtleneck + item_type = /obj/item/clothing/under/rank/centcom/officer/replica + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/donk/merch/fake_centcom_turtleneck_skirt + item_type = /obj/item/clothing/under/rank/centcom/officer_skirt/replica + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/donk/merch/snack_rig + item_type = /obj/item/storage/belt/military/snack + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/donk/merch/fake_syndie_suit + item_type = /obj/item/storage/box/fakesyndiesuit + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/donk/merch/valid_bloon + item_type = /obj/item/toy/balloon/arrest + cost = PAYCHECK_CREW + +// Donksoft weapons + +/datum/armament_entry/company_import/donk/foamforce + subcategory = "Foam Force (TM) Blasters" + contraband = TRUE + +/datum/armament_entry/company_import/donk/foamforce/foam_shotgun + item_type = /obj/item/gun/ballistic/shotgun/toy + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/donk/foamforce/foam_crossbow + item_type = /obj/item/gun/ballistic/shotgun/toy/crossbow + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/donk/foamforce/foam_pistol + item_type = /obj/item/gun/ballistic/automatic/pistol/toy + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/donk/foamforce/foam_smg + item_type = /obj/item/gun/ballistic/automatic/toy + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/donk/foamforce/foam_c20 + item_type = /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/donk/foamforce/foam_turret + item_type = /obj/item/storage/toolbox/emergency/turret/mag_fed/toy/pre_filled + cost = PAYCHECK_COMMAND * 6 + +/datum/armament_entry/company_import/donk/foamforce/foam_lmg + item_type = /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted + cost = PAYCHECK_COMMAND * 10 + +/datum/armament_entry/company_import/donk/mod_modules + subcategory = "Donk Co. MOD modules" + contraband = TRUE + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/donk/mod_modules/dart_collector_safe + item_type = /obj/item/mod/module/recycler/donk/safe + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/donk/mod_modules/dart_collector + item_type = /obj/item/mod/module/recycler/donk + restricted = TRUE + cost = PAYCHECK_COMMAND * 4 + +/datum/armament_entry/company_import/donk/foamforce_ammo + subcategory = "Foam Force (TM) Dart Accessories" + contraband = TRUE + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/donk/foamforce_ammo/darts + item_type = /obj/item/ammo_box/foambox + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/donk/foamforce_ammo/riot_darts + item_type = /obj/item/ammo_box/foambox/riot + restricted = TRUE + cost = PAYCHECK_COMMAND * 1.5 + +/datum/armament_entry/company_import/donk/foamforce_ammo/pistol_mag + item_type = /obj/item/ammo_box/magazine/toy/pistol + +/datum/armament_entry/company_import/donk/foamforce_ammo/smg_mag + item_type = /obj/item/ammo_box/magazine/toy/smg + +/datum/armament_entry/company_import/donk/foamforce_ammo/smgm45_mag + item_type = /obj/item/ammo_box/magazine/toy/smgm45 + +/datum/armament_entry/company_import/donk/foamforce_ammo/m762_mag + item_type = /obj/item/ammo_box/magazine/toy/m762 diff --git a/modular_ss220/modules/cargo/code/sol_defence1984.dm b/modular_ss220/modules/cargo/code/sol_defence1984.dm new file mode 100644 index 00000000000000..1baea07916972d --- /dev/null +++ b/modular_ss220/modules/cargo/code/sol_defence1984.dm @@ -0,0 +1,61 @@ +/datum/armament_entry/company_import/sol_defense + category = SOL_DEFENSE_DEFENSE_NAME + company_bitflag = CARGO_COMPANY_SOL_DEFENSE + +// Beautiful SolFed clothing + +/datum/armament_entry/company_import/sol_defense/clothing + subcategory = "Surplus Clothing" + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/sol_defense/clothing/peacekeeper + item_type = /obj/item/clothing/under/sol_peacekeeper + +/datum/armament_entry/company_import/sol_defense/clothing/emt + item_type = /obj/item/clothing/under/sol_emt + +/datum/armament_entry/company_import/sol_defense/misc + subcategory = "Miscellaneous Supplies" + +/datum/armament_entry/company_import/sol_defense/misc/sol_flag + item_type = /obj/item/sign/flag/terragov + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/sol_defense/armor + subcategory = "Ballistic Armor" + contraband = TRUE + cost = PAYCHECK_CREW * 3 + +/datum/armament_entry/company_import/sol_defense/armor/slim_vest + name = "type I vest - slim" + item_type = /obj/item/clothing/suit/armor/vest + +/datum/armament_entry/company_import/sol_defense/magazines + subcategory = "Magazines" + contraband = TRUE + cost = PAYCHECK_CREW * 2 + +/datum/armament_entry/company_import/sol_defense/magazines/c35_mag + item_type = /obj/item/ammo_box/magazine/c35sol_pistol/starts_empty + +/datum/armament_entry/company_import/sol_defense/magazines/c35_extended + item_type = /obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty + +/datum/armament_entry/company_import/sol_defense/magazines/c585_mag + item_type = /obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty + +/datum/armament_entry/company_import/sol_defense/magazines/sol_rifle_short + item_type = /obj/item/ammo_box/magazine/c40sol_rifle/starts_empty + +/datum/armament_entry/company_import/sol_defense/magazines/sol_rifle_standard + item_type = /obj/item/ammo_box/magazine/c40sol_rifle/standard/starts_empty + cost = PAYCHECK_CREW * 3 + +/datum/armament_entry/company_import/sol_defense/magazines/sol_grenade_standard + item_type = /obj/item/ammo_box/magazine/c980_grenade/starts_empty + cost = PAYCHECK_CREW * 4 + +/datum/armament_entry/company_import/sol_defense/magazines/sol_grenade_drum + item_type = /obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty + cost = PAYCHECK_CREW * 6 + diff --git a/modular_ss220/modules/cargo/code/vitezstvi_ammo1984.dm b/modular_ss220/modules/cargo/code/vitezstvi_ammo1984.dm new file mode 100644 index 00000000000000..98f7dd4f11aabf --- /dev/null +++ b/modular_ss220/modules/cargo/code/vitezstvi_ammo1984.dm @@ -0,0 +1,190 @@ +/datum/armament_entry/company_import/vitezstvi + category = VITEZSTVI_AMMO_NAME + company_bitflag = CARGO_COMPANY_VITEZSTVI_AMMO + +// Ammo bench and the lethals disk + +/datum/armament_entry/company_import/vitezstvi/ammo_bench + subcategory = "Ammunition Manufacturing Equipment" + +/datum/armament_entry/company_import/vitezstvi/ammo_bench/bench_itself + item_type = /obj/item/circuitboard/machine/ammo_workbench + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/vitezstvi/ammo_bench/ammo_disk + item_type = /obj/item/disk/ammo_workbench/advanced + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/vitezstvi/ammo_bench/bullet_drive + item_type = /obj/item/circuitboard/machine/dish_drive/bullet + cost = PAYCHECK_COMMAND * 2 + +// Weapon accessories + +/datum/armament_entry/company_import/vitezstvi/accessory + subcategory = "Weapon Accessories" + +/datum/armament_entry/company_import/vitezstvi/accessory/suppressor + item_type = /obj/item/suppressor/standard + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/vitezstvi/accessory/small_case + item_type = /obj/item/storage/toolbox/guncase/nova/pistol/empty + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/vitezstvi/accessory/large_case + item_type = /obj/item/storage/toolbox/guncase/nova/empty + cost = PAYCHECK_COMMAND * 2 + +// Boxes of non-shotgun ammo + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes + subcategory = "Ammunition Boxes" + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal + contraband = TRUE + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/cal_9mm + item_type = /obj/item/ammo_box/c9mm + contraband = FALSE + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/hp_9mm + item_type = /obj/item/ammo_box/c9mm/hp + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/rubber_9mm + item_type = /obj/item/ammo_box/c9mm/rubber + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/cal_10mm + item_type = /obj/item/ammo_box/c10mm + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/hp_10mm + item_type = /obj/item/ammo_box/c10mm/hp + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/rubber_10mm + item_type = /obj/item/ammo_box/c10mm/rubber + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/cal_310 + item_type = /obj/item/ammo_box/c310_cargo_box + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/rubber_310 + item_type = /obj/item/ammo_box/c310_cargo_box/rubber + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/ap_310 + item_type = /obj/item/ammo_box/c310_cargo_box/piercing + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/cesarzowa + item_type = /obj/item/ammo_box/c27_54cesarzowa + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/rubber_cesarzowa + item_type = /obj/item/ammo_box/c27_54cesarzowa/rubber + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/sol35 + item_type = /obj/item/ammo_box/c35sol + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/sol35_disabler + item_type = /obj/item/ammo_box/c35sol/incapacitator + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/sol35_ripper + item_type = /obj/item/ammo_box/c35sol/ripper + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/sol40 + item_type = /obj/item/ammo_box/c40sol + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/sol40_disabler + item_type = /obj/item/ammo_box/c40sol/fragmentation + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/sol40_flame + item_type = /obj/item/ammo_box/c40sol/incendiary + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/sol40_pierce + item_type = /obj/item/ammo_box/c40sol/pierce + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/trappiste585 + item_type = /obj/item/ammo_box/c585trappiste + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/trappiste585_disabler + item_type = /obj/item/ammo_box/c585trappiste/incapacitator + +/datum/armament_entry/company_import/vitezstvi/ammo_boxes/lethal/trappiste585_hp + item_type = /obj/item/ammo_box/c585trappiste/hollowpoint + +// Revolver speedloaders + +/datum/armament_entry/company_import/vitezstvi/speedloader + subcategory = "Speedloaders" + cost = PAYCHECK_CREW + +/datum/armament_entry/company_import/vitezstvi/speedloader/detective_lethal + item_type = /obj/item/ammo_box/c38 + +/datum/armament_entry/company_import/vitezstvi/speedloader/detective_dumdum + item_type = /obj/item/ammo_box/c38/dumdum + +/datum/armament_entry/company_import/vitezstvi/speedloader/detective_bouncy + item_type = /obj/item/ammo_box/c38/match + +// Shotgun boxes + +/datum/armament_entry/company_import/vitezstvi/shot_shells + subcategory = "Shotgun Shells" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/vitezstvi/shot_shells/lethal + contraband = TRUE + +/datum/armament_entry/company_import/vitezstvi/shot_shells/lethal/slugs + item_type = /obj/item/ammo_box/advanced/s12gauge + +/datum/armament_entry/company_import/vitezstvi/shot_shells/lethal/buckshot + item_type = /obj/item/ammo_box/advanced/s12gauge/buckshot + +/datum/armament_entry/company_import/vitezstvi/shot_shells/beanbag_slugs + item_type = /obj/item/ammo_box/advanced/s12gauge/bean + +/datum/armament_entry/company_import/vitezstvi/shot_shells/rubbershot + item_type = /obj/item/ammo_box/advanced/s12gauge/rubber + +/datum/armament_entry/company_import/vitezstvi/shot_shells/lethal/magnum_buckshot + item_type = /obj/item/ammo_box/advanced/s12gauge/magnum + +/datum/armament_entry/company_import/vitezstvi/shot_shells/lethal/express_buckshot + item_type = /obj/item/ammo_box/advanced/s12gauge/express + +/datum/armament_entry/company_import/vitezstvi/shot_shells/hunter_slug + item_type = /obj/item/ammo_box/advanced/s12gauge/hunter + +/datum/armament_entry/company_import/vitezstvi/shot_shells/lethal/flechettes + item_type = /obj/item/ammo_box/advanced/s12gauge/flechette + +/datum/armament_entry/company_import/vitezstvi/shot_shells/hornet_nest + item_type = /obj/item/ammo_box/advanced/s12gauge/beehive + +/datum/armament_entry/company_import/vitezstvi/shot_shells/stardust + item_type = /obj/item/ammo_box/advanced/s12gauge/antitide + +/datum/armament_entry/company_import/vitezstvi/shot_shells/confetti + item_type = /obj/item/ammo_box/advanced/s12gauge/honkshot + +// Boxes of kiboko launcher ammo + +/datum/armament_entry/company_import/vitezstvi/grenade_shells + subcategory = "Grenade Shells" + cost = PAYCHECK_COMMAND + +/datum/armament_entry/company_import/vitezstvi/grenade_shells/practice + item_type = /obj/item/ammo_box/c980grenade + +/datum/armament_entry/company_import/vitezstvi/grenade_shells/smoke + item_type = /obj/item/ammo_box/c980grenade/smoke + +/datum/armament_entry/company_import/vitezstvi/grenade_shells/riot + item_type = /obj/item/ammo_box/c980grenade/riot + +/datum/armament_entry/company_import/vitezstvi/grenade_shells/shrapnel + item_type = /obj/item/ammo_box/c980grenade/shrapnel + contraband = TRUE + +/datum/armament_entry/company_import/vitezstvi/grenade_shells/phosphor + item_type = /obj/item/ammo_box/c980grenade/shrapnel/phosphor + contraband = TRUE diff --git a/modular_ss220/modules/loadout_addiction/code/accessory.dm b/modular_ss220/modules/loadout_addiction/code/accessory.dm new file mode 100644 index 00000000000000..ca596242eb6b79 --- /dev/null +++ b/modular_ss220/modules/loadout_addiction/code/accessory.dm @@ -0,0 +1,3 @@ +/datum/loadout_item/accessory/armband_red + name = "Red Armband" + item_path = /obj/item/clothing/accessory/armband diff --git a/modular_ss220/modules/old_station/code/_defines.dm b/modular_ss220/modules/old_station/code/_defines.dm new file mode 100644 index 00000000000000..5e0f2d876afac1 --- /dev/null +++ b/modular_ss220/modules/old_station/code/_defines.dm @@ -0,0 +1,120 @@ +//sechud defines +#define SECHUD_OLD_CAPTAIN "hudoldcaptain" +#define SECHUD_OLD_SEC "hudoldsec" +#define SECHUD_OLD_ENG "hudoldeng" +#define SECHUD_OLD_SCI "hudoldsci" +#define SECHUD_OLD_MED "hudoldmed" + +// safe code +GLOBAL_LIST_EMPTY(safes) + +/obj/structure/safe + var/known_by = list() + +/obj/structure/safe/proc/get_combination() + return jointext(tumblers, ", ") + +/obj/structure/safe/Initialize(mapload) + . = ..() + GLOB.safes += src + +/obj/structure/safe/Destroy() + GLOB.safes -= src + return ..() + +/obj/item/paper/paperslip/corporate/fluff/safe_code + name = "safe codes" + default_raw_text = "

Safe Codes

" + var/owner + +/obj/item/paper/paperslip/corporate/fluff/safe_code/Initialize(mapload) + . = ..() + for(var/safe in GLOB.safes) + var/obj/structure/safe/S = safe + if(owner in S.known_by) + default_raw_text = "
The combination for the safe located in the [get_area(S)] is: [S.get_combination()]
" + update_icon() + add_raw_text(default_raw_text) + update_appearance() + +//charlie bridge safe and code +/obj/structure/safe/floor/charlie_captain + number_of_tumblers = 3 + known_by = list("charlie") + +/obj/item/paper/paperslip/corporate/fluff/safe_code/charlie_safe + name = "emergency bridge safe code" + owner = "charlie" + +// suits and armor datums + +/datum/armor/clothing_under/retro + acid = 70 + bio = 60 + bomb = 15 + bullet = 5 + energy = 5 + fire = 80 + laser = 5 + melee = 10 + wound = 15 + consume = 0 + +/datum/armor/clothing_under/retro/sec + acid = 10 + bio = 10 + bomb = 0 + bullet = 5 + energy = 0 + fire = 40 + laser = 0 + melee = 10 + wound = 10 + consume = 0 + +/datum/armor/clothing_under/retro/eng + acid = 40 + bio = 10 + bomb = 15 + bullet = 0 + energy = 0 + fire = 80 + laser = 5 + melee = 0 + wound = 10 + consume = 0 + +/datum/armor/clothing_under/retro/sci + acid = 70 + bio = 20 + bomb = 5 + bullet = 0 + energy = 5 + fire = 20 + laser = 0 + melee = 0 + wound = 5 + consume = 0 + +/datum/armor/clothing_under/retro/med + acid = 30 + bio = 60 + bomb = 0 + bullet = 0 + energy = 0 + fire = 10 + laser = 0 + melee = 0 + wound = 15 + consume = 0 + +/datum/armor/damaged_captain_space + melee = 30 + bullet = 20 + laser = 20 + energy = 15 + bomb = 5 + bio = 0 + fire = 0 + acid = 0 + wound = 5 diff --git a/modular_ss220/modules/old_station/code/oldstation.dm b/modular_ss220/modules/old_station/code/oldstation.dm new file mode 100644 index 00000000000000..463843fad21b55 --- /dev/null +++ b/modular_ss220/modules/old_station/code/oldstation.dm @@ -0,0 +1,390 @@ +// old trims overrides and new one's + +/datum/id_trim/away/old/sci + sechud_icon_state = SECHUD_OLD_SCI + +/datum/id_trim/away/old/robo + sechud_icon_state = SECHUD_ROBOTICIST + +/datum/id_trim/away/old/equipment + sechud_icon_state = SECHUD_STATION_ENGINEER + +/datum/id_trim/away/old/eng + sechud_icon_state = SECHUD_OLD_ENG + +/datum/id_trim/away/old/sec + sechud_icon_state = SECHUD_OLD_SEC + access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_SEC, ACCESS_WEAPONS) + +// new medic +/datum/id_trim/away/old/med + access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MEDICAL) + assignment = "Charlie Station Medic" + sechud_icon_state = SECHUD_OLD_MED + +// charlie captain's spare(cool id card with (probably)all necessary access +/datum/id_trim/away/old/captain + access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINTENANCE, ACCESS_AWAY_SUPPLY, ACCESS_AWAY_MEDICAL, ACCESS_AWAY_SCIENCE, ACCESS_AWAY_ENGINEERING, ACCESS_AWAY_SEC, ACCESS_AWAY_COMMAND, ACCESS_ENGINEERING, ACCESS_ENGINE_EQUIP, ACCESS_CONSTRUCTION, ACCESS_ROBOTICS, ACCESS_ORDNANCE, ACCESS_RESEARCH, ACCESS_MEDICAL, ACCESS_SECURITY, ACCESS_COMMAND, ACCESS_WEAPONS) + assignment = "Charlie Station Captain" + sechud_icon_state = SECHUD_OLD_CAPTAIN + big_pointer = TRUE + +// id overrides + +/obj/item/card/id/away/old + name = "\proper a perfectly generic identification ID" + desc = "A perfectly generic clip on ID Badge. Looks like it could use some flavor." + icon= 'modular_ss220/modules/old_station/icons/card.dmi' + icon_state = "retro" + +/obj/item/card/id/away/old/sec + name = "Charlie Station Security Officer's ID" + desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. You can make out this one is encoded for the \"Security Dept\"." + icon_state = "retro_sec" + trim = /datum/id_trim/away/old/sec + +/obj/item/card/id/away/old/sci + name = "Charlie Station Scientist's ID" + desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. You can make out this one is encoded for the \"Science Dept\"." + icon_state = "retro_sci" + trim = /datum/id_trim/away/old/sci + +/obj/item/card/id/away/old/eng + name = "Charlie Station Engineer's ID" + desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. You can make out this one is encoded for the \"Engineering Dept\"." + icon_state = "retro_eng" + trim = /datum/id_trim/away/old/eng + +/obj/item/card/id/away/old/equipment + name = "Engineering Equipment Access" + desc = "A special ID Badge that allows access to engineering equipment." + trim = /datum/id_trim/away/old/equipment + +/obj/item/card/id/away/old/robo + name = "Delta Station Roboticist's ID" + desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. You can make out this one is encoded for the \"Science Dept\". This one allows access to bots maintenance protocols." + icon_state = "retro_sci" + trim = /datum/id_trim/away/old/robo + +//medic id +/obj/item/card/id/away/old/med + name = "Charlie Station Medical ID" + desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. This one is encoded for the \"Medical Dept\"." + icon_state = "retro_med" + trim = /datum/id_trim/away/old/med + +// captain space id(in safe) +/obj/item/card/id/away/old/captains_spare + name = "Charlie Station Spare Captain's ID" + desc = "A clip on ID Badge, has one of those fancy new magnetic strips built in. This one is encoded for the \"High Command Dept\"." + icon_state = "retro_nt" + trim = /datum/id_trim/away/old/captain + +// communications computer +/obj/machinery/computer/communications/old + name = "charlie station communications console" + icon_screen = "comm_monitor" + icon_keyboard = "med_key" + light_color = LIGHT_COLOR_GREEN + circuit = /obj/item/circuitboard/computer/communications/old + away = TRUE + can_call_911 = FALSE + req_access = null + req_one_access = list(ACCESS_AWAY_COMMAND, ACCESS_COMMAND) + +/obj/item/circuitboard/computer/communications/old + name = "Station Communications" + greyscale_colors = CIRCUIT_COLOR_COMMAND + build_path = /obj/machinery/computer/communications/old + +/obj/machinery/computer/communications/old/can_buy_shuttles(mob/user) + return FALSE + +/obj/machinery/computer/communications/old/authenticated_as_silicon_or_captain(mob/user) + return FALSE + +/obj/machinery/computer/communications/old/can_send_messages_to_other_sectors(mob/user) + return FALSE + +// comps overrides +//this because ds2/blackmarket maybe can spawn in sector, and try to steal data +/obj/machinery/computer/rdservercontrol + req_access = list() + req_one_access = list(ACCESS_RD, ACCESS_AWAY_SCIENCE) + +//this because apc control can be deconstucted relocated from eng to other place +/obj/machinery/computer/apc_control + req_access = list() + req_one_access = list(ACCESS_CE, ACCESS_AWAY_ENGINEERING) + +/obj/machinery/computer/apc_control/away + req_one_access = list() + +// misc computers for decoration +/obj/machinery/computer/broken + name = "broken computer" + desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages." + circuit = /obj/item/circuitboard/computer/broken + icon_screen = "generic" + icon_keyboard = "generic_key" + +/obj/item/circuitboard/computer/broken + build_path = /obj/machinery/computer/broken + +/obj/machinery/computer/broken/cryo + name = "old cryogenic oversight console" + desc = "An interface between crew and the cryogenic storage oversight systems. This one looks broken." + icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi' + icon_state = "cellconsole_1" + pixel_x = 32 + icon_screen = null + icon_keyboard = null + circuit = /obj/item/circuitboard/computer + +/obj/machinery/computer/broken/acc + icon_screen = "accounts" + icon_keyboard = "id_key" + +/obj/machinery/computer/broken/com + icon_screen = "comm_monitor" + icon_keyboard = "med_key" + +/obj/machinery/computer/broken/comlog + icon_screen = "comm_logs" + icon_keyboard = "tech_key" + +/obj/machinery/computer/broken/sec + icon_screen = "security" + icon_keyboard = "security_key" + +/obj/machinery/computer/broken/eng + icon_screen = "command" + icon_keyboard = "power_key" + +/obj/machinery/computer/broken/atm + icon_screen = "alert:2" + icon_keyboard = "atmos_key" + +// suits +/obj/item/clothing/under/retro + desc = "A generic retro jumpsuit." + name = "generic retro uniform" + icon = 'modular_ss220/modules/old_station/icons/suit.dmi' + icon_state = "retro_sec" + worn_icon = 'modular_ss220/modules/old_station/icons/suitworn.dmi' + can_adjust = FALSE + armor_type = /datum/armor/clothing_under/retro + + +/obj/item/clothing/under/retro/sec + desc = "A (now) retro corporate security jumpsuit." + name = "retro security officer's uniform" + icon_state = "retro_sec" + armor_type = /datum/armor/clothing_under/retro/sec + +/obj/item/clothing/under/retro/eng + desc = "A (now) retro engineering uniform and overall combo. It's coated with oil, dust, and grit." + name = "retro engineering uniform" + icon_state = "retro_eng" + armor_type = /datum/armor/clothing_under/retro/eng + +/obj/item/clothing/under/retro/sci + desc = "A (now) retro faded polo and set of distinct white slacks. What a ridiculous tie." + name = "retro scientist's uniform" + icon_state = "retro_sci" + armor_type = /datum/armor/clothing_under/retro/sci + +/obj/item/clothing/under/retro/med + desc = "A (now) retro medical uniform. The high-vis stripes are faded and unreflective." + name = "retro doctor's uniform" + icon_state = "retro_med" + armor_type = /datum/armor/clothing_under/retro/med + + +//damaged captains armor +/obj/item/clothing/head/helmet/space/damaged_captain + name = "damaged captain's space helmet" + icon = 'modular_ss220/modules/old_station/icons/spacehelm.dmi' + worn_icon = 'modular_ss220/modules/old_station/icons/spacehelmworn.dmi' + lefthand_file = 'modular_ss220/modules/old_station/icons/spacehelm_l.dmi' + righthand_file = 'modular_ss220/modules/old_station/icons/spacehelm_r.dmi' + icon_state = "broken-cap" + inhand_icon_state = "broken-cap" + desc = "A whole once special helmet designed for only the most fashionable of military figureheads, now it's a piece of damaged junk, and no longer provides what it used to." + flags_inv = HIDEEARS| HIDEEYES + clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT + cold_protection = 0 + min_cold_protection_temperature = 0 + heat_protection = 0 + slowdown = 0 + max_heat_protection_temperature = 0 + flags_cover = 0 + flash_protect = FLASH_PROTECTION_WELDER + tint = 2 + armor_type = /datum/armor/damaged_captain_space + +/obj/item/clothing/suit/space/damaged_captain + name = "damaged captain's space suit" + desc = "A old, bulky, heavy-duty piece of exclusive Nanotrasen armor. But... this suit not in charge anymore." + icon = 'modular_ss220/modules/old_station/icons/spacesuit.dmi' + worn_icon = 'modular_ss220/modules/old_station/icons/spacesuitworn.dmi' + lefthand_file = 'modular_ss220/modules/old_station/icons/spacesuit_l.dmi' + righthand_file = 'modular_ss220/modules/old_station/icons/spacesuit_r.dmi' + icon_state = "broken-cap" + inhand_icon_state = "broken-cap" + armor_type = /datum/armor/damaged_captain_space + flags_inv = null + clothing_flags = 0 + slowdown = 4 + cell = null + cold_protection = 0 + min_cold_protection_temperature = null + heat_protection = 0 + max_heat_protection_temperature = null + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/tank/jetpack/oxygen/captain, + /obj/item/flashlight, + /obj/item/gun/energy, + /obj/item/gun/ballistic, + /obj/item/melee/baton, + /obj/item/restraints/handcuffs, + ) + +// emergency captain suit(in safe, doesnt provide too much slowdown) +/obj/item/clothing/head/helmet/space/nasavoid/captain + name = "Fancy Retro Void Helmet" + desc = "A old but high tech, NASA Centcom branch designed space suit helmet. Used for emergency situations. This one is tagged - \"emergency captain's space helmet\"." + icon = 'modular_ss220/modules/old_station/icons/spacehelm.dmi' + worn_icon = 'modular_ss220/modules/old_station/icons/spacehelmworn.dmi' + icon_state = "void-cap" + lefthand_file = 'modular_ss220/modules/old_station/icons/spacehelm_l.dmi' + righthand_file = 'modular_ss220/modules/old_station/icons/spacehelm_r.dmi' + inhand_icon_state = "void-cap" + slowdown = 0 + +/obj/item/clothing/suit/space/nasavoid/captain + name = "Fancy NASA Void Suit" + desc = "A old but high tech, NASA Centcom branch designed space suit. Used for emergency situations. This one is tagged - \"emergency captain's space suit\". This one made from wear-resistant materials, despite its old appearance, it has not degraded." + icon = 'modular_ss220/modules/old_station/icons/spacesuit.dmi' + worn_icon = 'modular_ss220/modules/old_station/icons/spacesuitworn.dmi' + icon_state = "void-cap" + lefthand_file = 'modular_ss220/modules/old_station/icons/spacesuit_l.dmi' + righthand_file = 'modular_ss220/modules/old_station/icons/spacesuit_r.dmi' + inhand_icon_state = "void-cap" + slowdown = 1 + +// outfit override +/datum/outfit/oldsec + name = "Ancient Security" + id = /obj/item/card/id/away/old/sec + uniform = /obj/item/clothing/under/retro/sec + gloves = /obj/item/clothing/gloves/fingerless + shoes = /obj/item/clothing/shoes/jackboots + l_pocket = /obj/item/assembly/flash/handheld + r_pocket = /obj/item/restraints/handcuffs + +/datum/outfit/oldeng + name = "Ancient Engineer" + id = /obj/item/card/id/away/old/eng + uniform = /obj/item/clothing/under/retro/eng + gloves = /obj/item/clothing/gloves/color/fyellow/old + shoes = /obj/item/clothing/shoes/workboots + l_pocket = /obj/item/tank/internals/emergency_oxygen + +/datum/outfit/oldsci + name = "Ancient Scientist" + id = /obj/item/card/id/away/old/sci + uniform = /obj/item/clothing/under/retro/sci + gloves = /obj/item/clothing/gloves/color/white + shoes = /obj/item/clothing/shoes/laceup + l_pocket = /obj/item/stack/medical/bruise_pack + +//medic outfit +/datum/outfit/oldmed + name = "Ancient Medic" + id = /obj/item/card/id/away/old/med + uniform = /obj/item/clothing/under/retro/med + gloves = /obj/item/clothing/gloves/latex + shoes = /obj/item/clothing/shoes/sneakers/white + l_pocket = /obj/item/stack/medical/ointment + r_pocket = /obj/item/stack/medical/bruise_pack + + +//post equip code +/datum/outfit/oldsec/post_equip(mob/living/carbon/human/nt, visualsOnly = FALSE) + var/obj/item/card/id/id_card = nt.wear_id + if(istype(id_card)) + id_card.registered_name = nt.real_name + id_card.update_label() + id_card.update_icon() + + return ..() + +/datum/outfit/oldeng/post_equip(mob/living/carbon/human/nt, visualsOnly = FALSE) + var/obj/item/card/id/id_card = nt.wear_id + if(istype(id_card)) + id_card.registered_name = nt.real_name + id_card.update_label() + id_card.update_icon() + + return ..() + +/datum/outfit/oldsci/post_equip(mob/living/carbon/human/nt, visualsOnly = FALSE) + var/obj/item/card/id/id_card = nt.wear_id + if(istype(id_card)) + id_card.registered_name = nt.real_name + id_card.update_label() + id_card.update_icon() + + return ..() + +/datum/outfit/oldmed/post_equip(mob/living/carbon/human/nt, visualsOnly = FALSE) + var/obj/item/card/id/id_card = nt.wear_id + if(istype(id_card)) + id_card.registered_name = nt.real_name + id_card.update_label() + id_card.update_icon() + + return ..() + +//medic spawner + +/obj/effect/mob_spawn/ghost_role/human/oldmed + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise an medical uniform underneath the built up ice. The machine is attempting to wake up its occupant." + prompt_name = "a medical doctor" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper" + mob_species = /datum/species/human + you_are_text = "You are a medical doctor working for Nanotrasen, stationed onboard a state of the art research station." + flavour_text = "You vaguely recall rushing into a cryogenics pod due to an oncoming radiation storm. The last thing \ + you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." + important_text = "Work as a team with your fellow survivors and do not abandon them." + outfit = /datum/outfit/oldmed + spawner_job_path = /datum/job/ancient_crew + +/obj/effect/mob_spawn/ghost_role/human/oldmed/Destroy() + new/obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +// medic closet(for beta station) + +/obj/structure/closet/secure_closet/old_med + name = "medical closet" + desc = "Filled with medical junk." + icon_state = "med" + req_access = list(ACCESS_AWAY_MEDICAL) + +/obj/structure/closet/secure_closet/old_med/PopulateContents() + ..() + new /obj/item/clothing/head/utility/surgerycap(src) + new /obj/item/clothing/gloves/latex/nitrile(src) + new /obj/item/clothing/mask/breath/medical(src) + new /obj/item/reagent_containers/hypospray/medipen/atropine(src) + new /obj/item/clothing/head/bio_hood/general(src) + new /obj/item/clothing/suit/bio_suit/general(src) + new /obj/item/clothing/suit/toggle/labcoat/medical(src) + new /obj/item/storage/box/masks(src) diff --git a/modular_ss220/modules/old_station/icons/card.dmi b/modular_ss220/modules/old_station/icons/card.dmi new file mode 100644 index 00000000000000..594f0ec12bff9a Binary files /dev/null and b/modular_ss220/modules/old_station/icons/card.dmi differ diff --git a/modular_ss220/modules/old_station/icons/spacehelm.dmi b/modular_ss220/modules/old_station/icons/spacehelm.dmi new file mode 100644 index 00000000000000..b5a52c079f8b5f Binary files /dev/null and b/modular_ss220/modules/old_station/icons/spacehelm.dmi differ diff --git a/modular_ss220/modules/old_station/icons/spacehelm_l.dmi b/modular_ss220/modules/old_station/icons/spacehelm_l.dmi new file mode 100644 index 00000000000000..4351366f0a9add Binary files /dev/null and b/modular_ss220/modules/old_station/icons/spacehelm_l.dmi differ diff --git a/modular_ss220/modules/old_station/icons/spacehelm_r.dmi b/modular_ss220/modules/old_station/icons/spacehelm_r.dmi new file mode 100644 index 00000000000000..feb26a2dcc31dc Binary files /dev/null and b/modular_ss220/modules/old_station/icons/spacehelm_r.dmi differ diff --git a/modular_ss220/modules/old_station/icons/spacehelmworn.dmi b/modular_ss220/modules/old_station/icons/spacehelmworn.dmi new file mode 100644 index 00000000000000..e556f69ce5b570 Binary files /dev/null and b/modular_ss220/modules/old_station/icons/spacehelmworn.dmi differ diff --git a/modular_ss220/modules/old_station/icons/spacesuit.dmi b/modular_ss220/modules/old_station/icons/spacesuit.dmi new file mode 100644 index 00000000000000..3db902f6bf37fe Binary files /dev/null and b/modular_ss220/modules/old_station/icons/spacesuit.dmi differ diff --git a/modular_ss220/modules/old_station/icons/spacesuit_l.dmi b/modular_ss220/modules/old_station/icons/spacesuit_l.dmi new file mode 100644 index 00000000000000..42343ba2cfd1d7 Binary files /dev/null and b/modular_ss220/modules/old_station/icons/spacesuit_l.dmi differ diff --git a/modular_ss220/modules/old_station/icons/spacesuit_r.dmi b/modular_ss220/modules/old_station/icons/spacesuit_r.dmi new file mode 100644 index 00000000000000..931387803b7a75 Binary files /dev/null and b/modular_ss220/modules/old_station/icons/spacesuit_r.dmi differ diff --git a/modular_ss220/modules/old_station/icons/spacesuitworn.dmi b/modular_ss220/modules/old_station/icons/spacesuitworn.dmi new file mode 100644 index 00000000000000..45c7c6761aac62 Binary files /dev/null and b/modular_ss220/modules/old_station/icons/spacesuitworn.dmi differ diff --git a/modular_ss220/modules/old_station/icons/suit.dmi b/modular_ss220/modules/old_station/icons/suit.dmi new file mode 100644 index 00000000000000..03ccffeca0b5ca Binary files /dev/null and b/modular_ss220/modules/old_station/icons/suit.dmi differ diff --git a/modular_ss220/modules/old_station/icons/suitworn.dmi b/modular_ss220/modules/old_station/icons/suitworn.dmi new file mode 100644 index 00000000000000..c3131d224f1139 Binary files /dev/null and b/modular_ss220/modules/old_station/icons/suitworn.dmi differ diff --git a/modular_ss220/modules/return_prs/black_mesa/code/drops.dm b/modular_ss220/modules/return_prs/black_mesa/code/drops.dm index 30ab8bf0cf0a27..d31aa776fd74b0 100644 --- a/modular_ss220/modules/return_prs/black_mesa/code/drops.dm +++ b/modular_ss220/modules/return_prs/black_mesa/code/drops.dm @@ -1,8 +1,8 @@ /obj/effect/spawner/random/hecu_smg name = "HECU SMG drops" spawn_all_loot = FALSE - loot = list(/obj/item/gun/ballistic/automatic/sol_smg = 15, - /obj/item/ammo_box/magazine/c35sol_pistol/stendo = 25, + loot = list(/obj/item/gun/ballistic/automatic/p90 = 15, + /obj/item/ammo_box/magazine/p90 = 25, /obj/item/clothing/mask/gas/hecu2 = 15, /obj/item/clothing/head/helmet = 15, /obj/item/clothing/suit/armor/vest = 15, diff --git a/modular_ss220/modules/return_prs/black_mesa/hev_suit/code/hev_suit.dm b/modular_ss220/modules/return_prs/black_mesa/hev_suit/code/hev_suit.dm index c9d5d5711dbecf..0149a40c34f054 100644 --- a/modular_ss220/modules/return_prs/black_mesa/hev_suit/code/hev_suit.dm +++ b/modular_ss220/modules/return_prs/black_mesa/hev_suit/code/hev_suit.dm @@ -34,7 +34,10 @@ desc = "The Mark IV HEV suit helmet." icon = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmeq.dmi' worn_icon = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet.dmi' - icon_state = "hev" + worn_icon_muzzled = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet_m.dmi' + icon_state = "hev-IV" + base_icon_state = "hev" + inhand_icon_state = "syndicate-helm-orange" armor_type = /datum/armor/space_hev_suit obj_flags = NO_MAT_REDEMPTION resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE|ACID_PROOF|INDESTRUCTIBLE|FREEZE_PROOF @@ -46,6 +49,12 @@ slowdown = 0 max_heat_protection_temperature = 25000 min_cold_protection_temperature = 2 + var/has_flashlight = TRUE + +/obj/item/clothing/head/helmet/space/hev_suit/Initialize(mapload) + . = ..() + if(has_flashlight) + AddComponent(/datum/component/seclite_attachable, starting_light = new /obj/item/flashlight/seclite(src), light_icon_state = "IV", is_light_removable = FALSE) /datum/armor/space_hev_suit melee = 20 @@ -88,6 +97,7 @@ clothing_flags = STOPSPRESSUREDAMAGE|THICKMATERIAL|SNUG_FIT|LAVAPROTECT max_heat_protection_temperature = 25000 min_cold_protection_temperature = 2 + var/radio_key = /obj/item/encryptionkey ///Whether or not the suit is activated/activating. var/activated = FALSE @@ -190,6 +200,7 @@ /obj/item/clothing/suit/space/hev_suit/Initialize(mapload) . = ..() internal_radio = new(src) + internal_radio.keyslot = new radio_key internal_radio.subspace_transmission = TRUE internal_radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud. internal_radio.recalculateChannels() @@ -568,14 +579,6 @@ current_user.adjustStaminaLoss(-heal_amount) healing_current_cooldown = world.time + health_static_cooldown * 2 - if(new_oxyloss) - if(use_hev_power(HEV_POWERUSE_HEAL)) - current_user.adjustOxyLoss(-heal_amount) - healing_current_cooldown = world.time + health_static_cooldown - send_message("ADRENALINE ADMINISTERED", HEV_COLOR_BLUE) - send_hev_sound(morphine_sound) - return - if(new_bruteloss) if(use_hev_power(HEV_POWERUSE_HEAL)) current_user.adjustBruteLoss(-heal_amount) @@ -592,6 +595,14 @@ send_hev_sound(wound_sound) return + if(new_oxyloss) + if(use_hev_power(HEV_POWERUSE_HEAL)) + current_user.adjustOxyLoss(-heal_amount) + healing_current_cooldown = world.time + health_static_cooldown + send_message("ADRENALINE ADMINISTERED", HEV_COLOR_BLUE) + send_hev_sound(morphine_sound) + return + if(new_toxloss) if(use_hev_power(HEV_POWERUSE_HEAL)) current_user.adjustToxLoss(-heal_amount) @@ -693,7 +704,8 @@ if(current_internals_tank) REMOVE_TRAIT(current_internals_tank, TRAIT_NODROP, "hev_trait") if(current_user) - send_message("SYSTEMS DEACTIVATED", HEV_COLOR_RED) + if(activating||activated) + send_message("SYSTEMS DEACTIVATED", HEV_COLOR_RED) REMOVE_TRAIT(current_user, list(TRAIT_GUNFLIP,TRAIT_GUN_NATURAL), "hev_trait") UnregisterSignal(current_user, list( COMSIG_ATOM_ACID_ACT, @@ -718,6 +730,7 @@ icon = 'modular_ss220/modules/return_prs/black_mesa/icons/misc/hecucloth.dmi' worn_icon = 'modular_ss220/modules/return_prs/black_mesa/icons/misc/hecumob.dmi' worn_icon_digi = 'modular_ss220/modules/return_prs/black_mesa/icons/misc/hecumob_muzzled.dmi' + inhand_icon_state = "blueshift_helmet" icon_state = "hecu_helm" armor_type = /datum/armor/hev_suit_pcv flags_inv = HIDEHAIR @@ -731,6 +744,7 @@ visor_flags_inv = null visor_flags = null slowdown = 0 + has_flashlight = FALSE uses_advanced_reskins = TRUE unique_reskin = list( "Basic" = list( @@ -782,6 +796,7 @@ worn_icon = 'modular_ss220/modules/return_prs/black_mesa/icons/misc/hecumob.dmi' worn_icon_digi = 'modular_ss220/modules/return_prs/black_mesa/icons/misc/hecumob_digi.dmi' icon_state = "hecu_vest" + inhand_icon_state = "swat_suit" armor_type = /datum/armor/hev_suit_pcv flags_inv = null allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) @@ -790,6 +805,8 @@ resistance_flags = FIRE_PROOF|ACID_PROOF|FREEZE_PROOF clothing_flags = SNUG_FIT show_hud = FALSE + radio_key = /obj/item/encryptionkey/headset_faction + radio_channel = RADIO_CHANNEL_FACTION uses_advanced_reskins = TRUE unique_reskin = list( "Basic" = list( @@ -836,6 +853,7 @@ blood_toxins_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/blood_toxins.ogg' biohazard_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/biohazard_detected.ogg' chemical_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/chemical_detected.ogg' + radiation_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/radiation_detected.ogg' minor_fracture_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/minor_fracture.ogg' major_fracture_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/major_fracture.ogg' diff --git a/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmeq.dmi b/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmeq.dmi index 39081d3cde41f0..8399331b08f73b 100644 Binary files a/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmeq.dmi and b/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmeq.dmi differ diff --git a/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet.dmi b/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet.dmi index a5ec571f9214cf..5b3cf94355d4ba 100644 Binary files a/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet.dmi and b/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet.dmi differ diff --git a/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet_m.dmi b/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet_m.dmi new file mode 100644 index 00000000000000..ba7ed78f92f3ba Binary files /dev/null and b/modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet_m.dmi differ diff --git a/modular_ss220/modules/return_prs/gunsgalore/code/guns/akm.dm b/modular_ss220/modules/return_prs/gunsgalore/code/guns/akm.dm index f48ea22d0bdbca..833aaba5f0db15 100644 --- a/modular_ss220/modules/return_prs/gunsgalore/code/guns/akm.dm +++ b/modular_ss220/modules/return_prs/gunsgalore/code/guns/akm.dm @@ -12,6 +12,7 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/akm can_suppress = FALSE fire_delay = 2 + burst_size = 1 actions_types = list() worn_icon = 'modular_ss220/modules/return_prs/gunsgalore/icons/guns/gunsgalore_back.dmi' worn_icon_state = "akm" @@ -103,6 +104,11 @@ worn_icon_state = "akm_civ" recoil = 0.2 +/obj/item/gun/ballistic/automatic/akm/civvie/Initialize(mapload) + . = ..() + + qdel(GetComponent(/datum/component/automatic_fire)) + /obj/item/gun/ballistic/automatic/akm/nri name = "\improper KV-62 carbine" desc = "A modified version of the most iconic human firearm ever made, re-engineered for better weight, handling, and accuracy, chambered in the NRI's 5.6mm ammo. 'НРИ - Оборонная Коллегия' is etched on the bolt." diff --git a/modular_ss220/modules/return_prs/gunsgalore/icons/guns/gunsgalore_items.dmi b/modular_ss220/modules/return_prs/gunsgalore/icons/guns/gunsgalore_items.dmi index 86b67c1447aa6e..357a2777df93b0 100644 Binary files a/modular_ss220/modules/return_prs/gunsgalore/icons/guns/gunsgalore_items.dmi and b/modular_ss220/modules/return_prs/gunsgalore/icons/guns/gunsgalore_items.dmi differ diff --git a/modular_ss220/modules/return_prs/microfusion/code/_microfusion_defines.dm b/modular_ss220/modules/return_prs/microfusion/code/_microfusion_defines.dm new file mode 100644 index 00000000000000..6b98dd2d43103e --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/_microfusion_defines.dm @@ -0,0 +1,31 @@ +/// Returned when the phase emtiter process is successful. +#define SHOT_SUCCESS "success" +/// Returned when a gun is fired but there is no phase emitter. +#define SHOT_FAILURE_NO_EMITTER "no phase emitter!" + +// Slot defines for the gun. +/// The gun barrel slot. +#define GUN_SLOT_BARREL "barrel" +/// The gun underbarrel slot. +#define GUN_SLOT_UNDERBARREL "underbarrel" +/// The gun rail slot. +#define GUN_SLOT_RAIL "rail" +/// Unique slots, can hold as many as you want. +#define GUN_SLOT_UNIQUE "unique" +/// Camo slot. Because why would you put four overlapping camos on your gun? +#define GUN_SLOT_CAMO "camo" + +/// Techweb defines +#define TECHWEB_NODE_BASIC_MICROFUSION "basic_microfusion" +#define TECHWEB_NODE_ENHANCED_MICROFUSION "enhanced_microfusion" +#define TECHWEB_NODE_ADVANCED_MICROFUSION "advanced_microfusion" +#define TECHWEB_NODE_BLUESPACE_MICROFUSION "bluespace_microfusion" +#define TECHWEB_NODE_QUANTUM_MICROFUSION "quantum_microfusion" +#define TECHWEB_NODE_ILLEGAL_MICROFUSION "illegal_microfusion" +#define TECHWEB_NODE_CLOWN_MICROFUSION "clown_microfusion" + +/// Gun defines (spare, if off's delete original) +/* +#define COMPANY_MICRON "It has [span_cyan("Micron Control Sys.")] cut into it." + +*/ \ No newline at end of file diff --git a/modular_ss220/modules/return_prs/microfusion/code/cargo_stuff.dm b/modular_ss220/modules/return_prs/microfusion/code/cargo_stuff.dm new file mode 100644 index 00000000000000..b4461b637c72ce --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/cargo_stuff.dm @@ -0,0 +1,212 @@ +/datum/supply_pack/security/armory/mcr01adv + name = "MCR-01 advanced Microfusion Crate" + desc = "Micron Control Systems Incorporated supplied MCR-01 Microfusion weapons platform. Comes with 4 advanced guns!" + cost = CARGO_CRATE_VALUE * 20 + contains = list( + /obj/item/gun/microfusion/mcr01/advanced, + /obj/item/gun/microfusion/mcr01/advanced, + /obj/item/gun/microfusion/mcr01/advanced, + /obj/item/gun/microfusion/mcr01/advanced, + ) + crate_name = "MCR-01 Microfusion Crate" + +/datum/supply_pack/goody/mcr01basic + name = "MCR-01 Microfusion Single-Pack" + desc = "Micron Control Systems Incorporated supplied MCR-01 Microfusion weapons platform. Comes with 1 basic gun!" + cost = CARGO_CRATE_VALUE * 6 + access_view = ACCESS_WEAPONS + contains = list( + /obj/item/gun/microfusion/mcr01, + ) + +/datum/supply_pack/goody/mcr01surplus + name = "MCR-01 Microfusion? Single-Pack" + desc = "Micron Contral Sistems Incarparated supplies MCR-001 Microfysion weapons platform. Comes with 1 Er#*or# gun!" + cost = CARGO_CRATE_VALUE * 4 + contraband = TRUE + contains = list( + /obj/item/gun/microfusion/mcr01/surplus, + ) + + +/datum/supply_pack/security/microadvanced + name = "Assorted Microfusion Advanced Upgrade Crate" + desc = "Micron Control Systems Incorporated supplied Microfusion cells and emitters!" + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/microfusion_phase_emitter/advanced, + /obj/item/microfusion_phase_emitter/advanced, + /obj/item/stock_parts/power_store/cell/microfusion/advanced, + /obj/item/stock_parts/power_store/cell/microfusion/advanced, + ) + crate_name = "Microfusion Upgrade Crate (Advanced)" + +/datum/supply_pack/security/microbluespace + name = "Assorted Microfusion Bluespace Upgrade Crate" + desc = "Micron Control Systems Incorporated supplied Microfusion cells and emitters!" + cost = CARGO_CRATE_VALUE * 30 + contains = list( + /obj/item/microfusion_phase_emitter/bluespace, + /obj/item/microfusion_phase_emitter/bluespace, + /obj/item/stock_parts/power_store/cell/microfusion/bluespace, + /obj/item/stock_parts/power_store/cell/microfusion/bluespace, + ) + crate_name = "Microfusion Upgrade Crate (Bluespace)" + +/datum/supply_pack/security/mcr01_attachments_a + name = "MCR-01 Military Attachments Crate Type A" + desc = "Micron Control Systems Incorporated supplied MCR-01 Military spec attachments! This crate comes with two utilitarian repeater loadout." + cost = CARGO_CRATE_VALUE * 14 + contains = list( + /obj/item/microfusion_gun_attachment/grip, + /obj/item/microfusion_gun_attachment/grip, + /obj/item/microfusion_gun_attachment/rail, + /obj/item/microfusion_gun_attachment/rail, + /obj/item/microfusion_gun_attachment/barrel/repeater, + /obj/item/microfusion_gun_attachment/barrel/repeater, + ) + crate_name = "MCR-01 Military Attachments Crate Type A" + +/datum/supply_pack/security/mcr01_attachments_cell + name = "MCR-01 Military Cell Attachments Crate" + desc = "Micron Control Systems Incorporated supplied MCR-01 Military cell attachments! This crate comes with three overcapacity and stabiliser attachment." + cost = CARGO_CRATE_VALUE * 20 + contains = list( + /obj/item/microfusion_cell_attachment/overcapacity, + /obj/item/microfusion_cell_attachment/overcapacity, + /obj/item/microfusion_cell_attachment/overcapacity, + /obj/item/microfusion_cell_attachment/stabiliser, + /obj/item/microfusion_cell_attachment/stabiliser, + /obj/item/microfusion_cell_attachment/stabiliser, + ) + crate_name = "MCR-01 Military Cell Attachments Crate" + +/datum/supply_pack/security/mcr01_attachments_protocell + name = "MCR-01 Military Prototype Cell Attachment Crate" + desc = "Micron Control Systems Incorporated supplied MCR-01 Prototype Military cell attachments! This crate comes with one prototype self charge attachment." + cost = CARGO_CRATE_VALUE * 40 + contains = list( + /obj/item/microfusion_cell_attachment/selfcharging, + ) + crate_name = "MCR-01 Military Prototype Cell Attachments Crate" + +/datum/supply_pack/security/mcr01_attachments_type_b + name = "MCR-01 Military Attachments Crate Type B" + desc = "Micron Control Systems Incorporated supplied MCR-01 Military spec attachments! This crate comes in a mixed specialist loadout." + cost = CARGO_CRATE_VALUE * 16 + contains = list( + /obj/item/microfusion_gun_attachment/grip, + /obj/item/microfusion_gun_attachment/grip, + /obj/item/microfusion_gun_attachment/grip, + /obj/item/microfusion_gun_attachment/barrel/scatter, + /obj/item/microfusion_gun_attachment/barrel/scatter, + /obj/item/microfusion_gun_attachment/barrel/scatter, + /obj/item/microfusion_gun_attachment/scope, + /obj/item/microfusion_gun_attachment/barrel/lance, + ) + crate_name = "MCR-01 Military Attachments Crate Type B" + + +/datum/supply_pack/security/mcr01_attachments_h + name = "HCR-01 Military Attachments Crate Type H" + desc = "Honkicron Clownery Systems Inhonkorated supplied HCR-01 Clownery spec attachments! This crate oddly smells of bananas." + cost = CARGO_CRATE_VALUE * 20 + contraband = TRUE + contains = list( + /obj/item/microfusion_gun_attachment/barrel/honk, + /obj/item/microfusion_gun_attachment/barrel/honk, + /obj/item/microfusion_gun_attachment/barrel/honk, + /obj/item/microfusion_gun_attachment/camo/honk, + /obj/item/microfusion_gun_attachment/camo/honk, + /obj/item/microfusion_gun_attachment/camo/honk, + /obj/item/food/pie/cream, + /obj/item/food/pie/cream, + /obj/item/food/pie/cream, + ) + crate_name = "MCR-01 Military Attachments Crate Type H" + +/obj/item/storage/briefcase/secure/white/mcr_loadout + name = "Microfusion Attachment Kit" + +/obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire + +/obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/hellfire = 1, + /obj/item/microfusion_gun_attachment/rail = 1, + /obj/item/microfusion_gun_attachment/grip = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_loadout/scatter + +/obj/item/storage/briefcase/secure/white/mcr_loadout/scatter/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/scatter = 1, + /obj/item/microfusion_gun_attachment/rail = 1, + /obj/item/microfusion_gun_attachment/grip = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_loadout/lance + +/obj/item/storage/briefcase/secure/white/mcr_loadout/lance/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/lance = 1, + /obj/item/microfusion_gun_attachment/scope = 1, + /obj/item/microfusion_gun_attachment/heatsink = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_loadout/repeater + +/obj/item/storage/briefcase/secure/white/mcr_loadout/repeater/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/repeater = 1, + /obj/item/microfusion_gun_attachment/rail = 1, + /obj/item/microfusion_gun_attachment/heatsink = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool + +/obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool/PopulateContents() + var/static/items_inside = list( + /obj/item/microfusion_gun_attachment/barrel/suppressor = 1, + /obj/item/microfusion_gun_attachment/rail = 1, + /obj/item/microfusion_gun_attachment/grip = 1, + /obj/item/microfusion_gun_attachment/camo = 1, + ) + generate_items_inside(items_inside,src) + +// Phase emitter and cell upgrades + +/obj/item/storage/briefcase/secure/white/mcr_parts + name = "Microfusion Parts Kit" + +/obj/item/storage/briefcase/secure/white/mcr_parts/enhanced + +/obj/item/storage/briefcase/secure/white/mcr_parts/enhanced/PopulateContents() + var/static/items_inside = list( + /obj/item/stock_parts/power_store/cell/microfusion/enhanced = 1, + /obj/item/microfusion_phase_emitter/enhanced = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_parts/advanced + +/obj/item/storage/briefcase/secure/white/mcr_parts/advanced/PopulateContents() + var/static/items_inside = list( + /obj/item/stock_parts/power_store/cell/microfusion/advanced = 1, + /obj/item/microfusion_phase_emitter/advanced = 1, + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/briefcase/secure/white/mcr_parts/bluespace + +/obj/item/storage/briefcase/secure/white/mcr_parts/bluespace/PopulateContents() + var/static/items_inside = list( + /obj/item/stock_parts/power_store/cell/microfusion/bluespace = 1, + /obj/item/microfusion_phase_emitter/bluespace = 1, + ) + generate_items_inside(items_inside,src) diff --git a/modular_ss220/modules/return_prs/microfusion/code/gun_types.dm b/modular_ss220/modules/return_prs/microfusion/code/gun_types.dm new file mode 100644 index 00000000000000..e110efef8f4158 --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/gun_types.dm @@ -0,0 +1,81 @@ +/obj/item/gun/microfusion/mcr01 + name = "MCR-01" + desc = "An advanced, modular energy weapon produced by Micron Control Systems. These cutting edge weapons differ from traditional beam weaponry in producing individual bolts, as well as being customizable to the user's preferences." + icon_state = "mcr01" + inhand_icon_state = "mcr01" + shaded_charge = TRUE + +/obj/item/gun/microfusion/mcr01/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_MICRON) + +/obj/item/gun/microfusion/mcr01/surplus + name = "MCR-01?" + cell_type = /obj/item/stock_parts/power_store/cell/microfusion/makeshift + phase_emitter_type = /obj/item/microfusion_phase_emitter/makeshift + +/obj/item/gun/microfusion/mcr01/enhanced + name = "enhanced MCR-01" + cell_type = /obj/item/stock_parts/power_store/cell/microfusion/enhanced + phase_emitter_type = /obj/item/microfusion_phase_emitter/enhanced + +/obj/item/gun/microfusion/mcr01/advanced + name = "advanced MCR-01" + cell_type = /obj/item/stock_parts/power_store/cell/microfusion/advanced + phase_emitter_type = /obj/item/microfusion_phase_emitter/advanced + + +/obj/item/gun/microfusion/mcr01/bluespace + name = "elite MCR-01" + cell_type = /obj/item/stock_parts/power_store/cell/microfusion/bluespace + phase_emitter_type = /obj/item/microfusion_phase_emitter/bluespace + +/obj/item/gun/microfusion/mcr01/nanocarbon + name = "Nanocarbon Destroyer" + desc = "The pinnacle of the Nanocarbon weapon line. This weapon is the ultimate in power and performance. It is capable of firing a wide variety of beams, including a wide range of energy types, and is capable of firing a wide variety of frequencies." + icon_state = "mcr01" + inhand_icon_state = "mcr01" + shaded_charge = TRUE + phase_emitter_type = /obj/item/microfusion_phase_emitter/nanocarbon + cell_type = /obj/item/stock_parts/power_store/cell/microfusion/nanocarbon + attachments = list( + /obj/item/microfusion_gun_attachment/barrel/pulse, + /obj/item/microfusion_gun_attachment/grip, + /obj/item/microfusion_gun_attachment/rail, + /obj/item/microfusion_gun_attachment/camo, + ) + +//For syndicate uplink. +/obj/item/gun/microfusion/mcr01/syndie + name = "SCR-01" + desc = "A Syndicate brand copy of the MCR-01. It comes with a proprietary suppressor and some tactical attachments." + cell_type = /obj/item/stock_parts/power_store/cell/microfusion/advanced + phase_emitter_type = /obj/item/microfusion_phase_emitter/advanced + attachments = list( + /obj/item/microfusion_gun_attachment/barrel/suppressor, + /obj/item/microfusion_gun_attachment/grip, + /obj/item/microfusion_gun_attachment/rail, + /obj/item/microfusion_gun_attachment/camo/syndicate, + ) + + +/obj/item/storage/box/ammo_box/microfusion/advanced + name = "advanced microfusion cell container" + desc = "A box filled with microfusion cells." + +/obj/item/storage/box/ammo_box/microfusion/advanced/PopulateContents() + new /obj/item/stock_parts/power_store/cell/microfusion/advanced(src) + new /obj/item/stock_parts/power_store/cell/microfusion/advanced(src) + new /obj/item/stock_parts/power_store/cell/microfusion/advanced(src) + +/* +* MICROFUSION SPAWNERS +*/ + +/obj/effect/spawner/armory_spawn/microfusion + guns = list( + /obj/item/gun/microfusion/mcr01, + /obj/item/gun/microfusion/mcr01, + /obj/item/gun/microfusion/mcr01, + /obj/item/gun/microfusion/mcr01, + ) + diff --git a/modular_ss220/modules/return_prs/microfusion/code/microfusion_cell.dm b/modular_ss220/modules/return_prs/microfusion/code/microfusion_cell.dm new file mode 100644 index 00000000000000..25c0b52ada7132 --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/microfusion_cell.dm @@ -0,0 +1,239 @@ +/* +MICROFUSION CELL SYSTEM + +Microfusion cells are small battery units that house controlled nuclear fusion within, and that fusion is converted into useable energy. + +They cannot be charged as standard, and require upgrades to do so. + +These are basically advanced cells. +*/ + +/// The amount of cell charge drained during a drain failure. +#define MICROFUSION_CELL_DRAIN_FAILURE STANDARD_CELL_CHARGE * 0.5 +/// The heavy EMP range for when a cell suffers an EMP failure. +#define MICROFUSION_CELL_EMP_HEAVY_FAILURE 2 +/// The light EMP range for when a cell suffers an EMP failure. +#define MICROFUSION_CELL_EMP_LIGHT_FAILURE 4 +/// The radiation range for when a cell suffers a radiation failure. +#define MICROFUSION_CELL_RADIATION_RANGE_FAILURE 1 + +/// The lower most time for a microfusion cell meltdown. +#define MICROFUSION_CELL_FAILURE_LOWER (10 SECONDS) +/// The upper most time for a microfusion cell meltdown. +#define MICROFUSION_CELL_FAILURE_UPPER (15 SECONDS) + + + +/obj/item/stock_parts/power_store/cell/microfusion //Just a standard cell. + name = "microfusion cell" + desc = "A standard-issue microfusion cell, produced by Micron Control Systems. For safety reasons, they cannot be charged unless they are inside of a compatible Micron Control Systems firearm." + icon = 'modular_ss220/modules/return_prs/microfusion/icons/microfusion_cells.dmi' + charging_icon = "mf_in" //This is stored in cell.dmi in the aesthetics module + icon_state = "microfusion" + w_class = WEIGHT_CLASS_NORMAL + maxcharge = STANDARD_CELL_CHARGE //12 shots + chargerate = 0 //MF cells should be unable to recharge if they are not currently inside of an MCR + microfusion_readout = TRUE + empty = TRUE //MF cells should start empty + charge_light_type = "microfusion" + + /// A hard referenced list of upgrades currently attached to the weapon. + var/list/attachments = list() + /// Are we melting down? For icon stuffs. + var/meltdown = FALSE + /// How many upgrades can you have on this cell? + var/max_attachments = 1 + /// Hard ref to the parent gun. + var/obj/item/gun/microfusion/parent_gun + /// Do we play an alarm when empty? + var/empty_alarm = TRUE + /// What sound do we play when empty? + var/empty_alarm_sound = 'sound/items/weapons/gun/general/empty_alarm.ogg' + /// Do we have the self charging upgrade? + var/self_charging = FALSE + /// The probability of the cell failing, either through being makeshift or being used in something it shouldn't + var/fail_prob = 10 + +/obj/item/stock_parts/power_store/cell + /// Is this cell stabilised? (used in microfusion guns) + var/stabilised = FALSE + /// Do we show the microfusion readout instead of KJ? + var/microfusion_readout = FALSE + +/obj/item/stock_parts/power_store/cell/microfusion/Initialize(mapload) + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/stock_parts/power_store/cell/microfusion/Destroy() + if(attachments.len) + for(var/obj/item/iterating_item as anything in attachments) + iterating_item.forceMove(get_turf(src)) + attachments = null + parent_gun = null + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/stock_parts/power_store/cell/microfusion/attackby(obj/item/attacking_item, mob/living/user, params) + if(istype(attacking_item, /obj/item/microfusion_cell_attachment)) + add_attachment(attacking_item, user) + return + return ..() + +/obj/item/stock_parts/power_store/cell/microfusion/attack_self(mob/user) + if(charge) + cell_removal_discharge() + return ..() + +/obj/item/stock_parts/power_store/cell/microfusion/emp_act(severity) + . = ..() + var/prob_percent = charge / 100 * severity + if(prob(prob_percent) && !meltdown && !stabilised) + process_instability() + +/obj/item/stock_parts/power_store/cell/microfusion/use(amount, force = FALSE) + if(!parent_gun) // If an MCR cell is used in anything that's not an MCR, you might have problems + if(prob(fail_prob)) + process_instability() + if(charge >= amount) + var/check_if_empty = charge - amount + if(check_if_empty < amount && empty_alarm && !self_charging) + playsound(src, empty_alarm_sound, 50) + return ..() + +/obj/item/stock_parts/power_store/cell/microfusion/proc/process_instability() + var/seconds_to_explode = rand(MICROFUSION_CELL_FAILURE_LOWER, MICROFUSION_CELL_FAILURE_UPPER) + meltdown = TRUE + say("Malfunction in [seconds_to_explode / 10] seconds!") + playsound(src, 'sound/machines/warning-buzzer.ogg', 30, FALSE, FALSE) + add_filter("rad_glow", 2, list("type" = "outline", "color" = "#ff5e0049", "size" = 2)) + addtimer(CALLBACK(src, PROC_REF(process_failure)), seconds_to_explode) + +/obj/item/stock_parts/power_store/cell/microfusion/proc/process_failure() + remove_filter("rad_glow") + playsound(src, 'sound/effects/spray.ogg', 70) + switch(rand(1, 4)) + if(1) // Charge drain + charge = clamp(charge - MICROFUSION_CELL_DRAIN_FAILURE, 0, maxcharge) + if(2) // Explosion + explode() + if(3) // Emp pulse + empulse(get_turf(src), 2, 4, FALSE) // 2 Heavy, 4 Light + if(4) // Deathly radiation pulse + radiation_pulse(src, 2, RAD_MEDIUM_INSULATION, 30) + meltdown = FALSE + +/obj/item/stock_parts/power_store/cell/microfusion/update_overlays() + . = ..() + for(var/obj/item/microfusion_cell_attachment/microfusion_cell_attachment as anything in attachments) + . += microfusion_cell_attachment.attachment_overlay_icon_state + +/obj/item/stock_parts/power_store/cell/microfusion/screwdriver_act(mob/living/user, obj/item/tool) + if(!attachments.len) + balloon_alert(user, "no attachments!") + return + remove_attachments() + playsound(src, 'sound/items/tools/screwdriver.ogg', 70, TRUE) + balloon_alert(user, "attachments removed") + +/obj/item/stock_parts/power_store/cell/microfusion/process(seconds_per_tick) + for(var/obj/item/microfusion_cell_attachment/microfusion_cell_attachment as anything in attachments) + microfusion_cell_attachment.process_attachment(src, seconds_per_tick) + +/obj/item/stock_parts/power_store/cell/microfusion/examine(mob/user) + . = ..() + . += span_notice("It can hold [max_attachments] attachment(s).") + . += span_warning("Inserting this into anything other than a microfusion rifle might be a terrible idea.") + if(attachments.len) + for(var/obj/item/microfusion_cell_attachment/microfusion_cell_attachment as anything in attachments) + . += span_notice("It has a [microfusion_cell_attachment.name] installed.") + . += span_notice("Use a screwdriver to remove the attachments.") + . += span_notice("Using this in hand will discharge the cell, if there is any inside of it preventing insertion into microfusion guns.") + +/obj/item/stock_parts/power_store/cell/microfusion/proc/add_attachment(obj/item/microfusion_cell_attachment/microfusion_cell_attachment, mob/living/user, obj/item/gun/microfusion/microfusion_gun) + if(attachments.len >= max_attachments) + balloon_alert(user, "can't attach more!") + return FALSE + if(is_type_in_list(microfusion_cell_attachment, attachments)) + balloon_alert(user, "already installed!") + return FALSE + attachments += microfusion_cell_attachment + microfusion_cell_attachment.forceMove(src) + microfusion_cell_attachment.add_attachment(src) + balloon_alert(user, "installed attachment") + playsound(src, 'sound/effects/structure_stress/pop2.ogg', 70, TRUE) + update_appearance() + return TRUE + +/obj/item/stock_parts/power_store/cell/microfusion/proc/remove_attachments() + for(var/obj/item/microfusion_cell_attachment/microfusion_cell_attachment in attachments) + microfusion_cell_attachment.remove_attachment(src) + microfusion_cell_attachment.forceMove(get_turf(src)) + attachments -= microfusion_cell_attachment + update_appearance() + +/obj/item/stock_parts/power_store/cell/microfusion/proc/inserted_into_weapon() + chargerate = STANDARD_CELL_CHARGE * 0.2 + +/obj/item/stock_parts/power_store/cell/microfusion/proc/cell_removal_discharge() + chargerate = 0 + charge = 0 + do_sparks(4, FALSE, src) + update_appearance() + +/datum/crafting_recipe/makeshift/microfusion_cell + name = "Makeshift Microfusion Cell" + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_WELDER) + result = /obj/item/stock_parts/power_store/cell/microfusion/makeshift + reqs = list( + /obj/item/trash/can = 1, + /obj/item/stack/sheet/iron = 1, + /obj/item/stack/cable_coil = 1, + ) + time = 12 SECONDS + category = CAT_MISC + +//WHY WOULD YOU MAKE THIS? +/obj/item/stock_parts/power_store/cell/microfusion/makeshift + name = "makeshift microfusion cell" + desc = "An... Apparatus, comprised of an everyday aluminum can with several civilian-grade batteries tightly packed together and plugged in. This vaguely resembles a microfusion cell, if you tilt your head to a precise fifty degree angle. While the effects on enemy combatants may be dubious, it will certainly do incredible damage to the gun's warranty. What the hell were you thinking when you came up with this?" + icon_state = "microfusion_makeshift" + maxcharge = STANDARD_CELL_CHARGE * 0.5 + max_attachments = 0 + +/obj/item/stock_parts/power_store/cell/microfusion/makeshift/use(amount, force = FALSE) + if(prob(fail_prob)) + process_instability() + return ..() + +/obj/item/stock_parts/power_store/cell/microfusion/enhanced + name = "enhanced microfusion cell" + desc = "A second generation microfusion cell, weighing about the same as the standard-issue cell and having the same space for attachments; however, it has a higher capacity." + icon_state = "microfusion_enhanced" + maxcharge = STANDARD_CELL_CHARGE * 1.4 + +/obj/item/stock_parts/power_store/cell/microfusion/advanced + name = "advanced microfusion cell" + desc = "A third generation microfusion cell, boasting a much higher shot count. Additionally, these come with support for up to three modifications to the cell itself." + icon_state = "microfusion_advanced" + maxcharge = STANDARD_CELL_CHARGE * 1.5 + max_attachments = 3 + +/obj/item/stock_parts/power_store/cell/microfusion/bluespace + name = "bluespace microfusion cell" + desc = "A fourth generation microfusion cell, employing bluespace technology to store power in a medium that's bigger on the inside. This has the highest capacity of any man-portable cell, and has flexibility for four different attachments to the cell itself." + icon_state = "microfusion_bluespace" + maxcharge = STANDARD_CELL_CHARGE * 1.6 + max_attachments = 4 + +/obj/item/stock_parts/power_store/cell/microfusion/nanocarbon + name = "nanocarbon fusion cell" + desc = "This cell combines both top-of-the-line nanotech and advanced microfusion power to brute force the most common issue of Nanotrasen Asset Protection operatives, ammunition, through sheer volume. Intended for use with Nanotrasen-brand capacitor arrays only. Warranty void if dropped in toilet." + icon_state = "microfusion_nanocarbon" + maxcharge = STANDARD_CELL_CHARGE * 60 // Wanted to put 69 here to fit with the 420 but eh this werks too + max_attachments = 420 + + +#undef MICROFUSION_CELL_DRAIN_FAILURE + +#undef MICROFUSION_CELL_FAILURE_LOWER +#undef MICROFUSION_CELL_FAILURE_UPPER diff --git a/modular_ss220/modules/return_prs/microfusion/code/microfusion_cell_attachments.dm b/modular_ss220/modules/return_prs/microfusion/code/microfusion_cell_attachments.dm new file mode 100644 index 00000000000000..33aeeb25c6b723 --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/microfusion_cell_attachments.dm @@ -0,0 +1,110 @@ +/* +MICROFUSION CELL UPGRADE ATTACHMENTS + +For adding unique abilities to microfusion cells. These cannot directly interact with the gun. +*/ + +/obj/item/microfusion_cell_attachment + name = "microfusion cell attachment" + desc = "broken" + icon = 'modular_ss220/modules/return_prs/microfusion/icons/microfusion_cells.dmi' + w_class = WEIGHT_CLASS_NORMAL + /// The overlay that will be automatically added, must be in the cells icon. + var/attachment_overlay_icon_state + /// Does this attachment process with the cell? + var/processing_attachment = FALSE + + +/obj/item/microfusion_cell_attachment/proc/add_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell) + SHOULD_CALL_PARENT(TRUE) + START_PROCESSING(SSobj, microfusion_cell) + return + +/obj/item/microfusion_cell_attachment/proc/process_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell, seconds_per_tick) + return PROCESS_KILL + +/obj/item/microfusion_cell_attachment/proc/remove_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell) + SHOULD_CALL_PARENT(TRUE) + STOP_PROCESSING(SSobj, microfusion_cell) + return + +/* +OVERCAPACITY ATTACHMENT + +Increases the cell capacity by a set percentage. +*/ +/obj/item/microfusion_cell_attachment/overcapacity + name = "overcapacity microfusion cell attachment" + desc = "An attachment which increases the capacity of the microfusion cell it's attached to. These are an additional, smaller capacitor, using a system to automatically switch from the cell to the capacitor as it's depleted, maximizing the weapon's charge." + icon_state = "attachment_overcapacity" + attachment_overlay_icon_state = "microfusion_overcapacity" + /// How much the attachment increases the cell's capacity by, as a percentage + var/capacity_increase = 20 + /// The initial capacity of the cell before this upgrade is added! + var/initial_charge_capacity = 0 + +/obj/item/microfusion_cell_attachment/overcapacity/add_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell) + . = ..() + initial_charge_capacity = microfusion_cell.maxcharge + var/capacity_to_add = microfusion_cell.maxcharge / 100 * capacity_increase + microfusion_cell.maxcharge += capacity_to_add + +/obj/item/microfusion_cell_attachment/overcapacity/remove_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell) + . = ..() + microfusion_cell.charge = min(microfusion_cell.charge, initial_charge_capacity) + microfusion_cell.maxcharge = initial_charge_capacity + initial_charge_capacity = 0 + +/* +STABILISER ATTACHMENT + +The cell is stable and will not emit sparks when firing. +*/ + +/obj/item/microfusion_cell_attachment/stabiliser + name = "stabilising microfusion cell attachment" + desc = "A stabilizer system attachment combining a grounding system with additional containment coils for self-charging purposes, this gives additional safety to the cell it's attached to; preventing both sparks and leakage." + icon_state = "attachment_stabiliser" + attachment_overlay_icon_state = "microfusion_stabiliser" + +/obj/item/microfusion_cell_attachment/stabiliser/add_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell) + . = ..() + microfusion_cell.stabilised = TRUE + +/obj/item/microfusion_cell_attachment/stabiliser/remove_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell) + . = ..() + microfusion_cell.stabilised = FALSE + +/* +SELFCHARGE ATTACHMENT + +The cell will charge itself. +If the cell isn't stabilised by a stabiliser, it may emit a radiation pulse. +*/ +/obj/item/microfusion_cell_attachment/selfcharging + name = "self-charging microfusion cell attachment" + desc = "While microfusion cells are normally shipped without their fuel source, this attachment comes with fifteen grams of hydrogen fuel; allowing the cell to sustain a small, yet active reaction to self-charge. These can keep going for weeks to months in ideal conditions, making them more than enough for most campaigns." + icon_state = "attachment_selfcharge" + attachment_overlay_icon_state = "microfusion_selfcharge" + /// The amount of charge this cell will passively gain! + var/self_charge_amount = STANDARD_CELL_CHARGE*(0.02) + +/obj/item/microfusion_cell_attachment/selfcharging/examine(mob/user) + . = ..() + . += span_warning("WARNING: May cause radiation burns and weapon instability if not stabilized with recommended attachment!") + +/obj/item/microfusion_cell_attachment/selfcharging/add_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell) + . = ..() + microfusion_cell.self_charging = TRUE + +/obj/item/microfusion_cell_attachment/selfcharging/remove_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell) + . = ..() + microfusion_cell.self_charging = FALSE + +/obj/item/microfusion_cell_attachment/selfcharging/process_attachment(obj/item/stock_parts/power_store/cell/microfusion/microfusion_cell, seconds_per_tick) + if(microfusion_cell.charge < microfusion_cell.maxcharge) + microfusion_cell.charge = clamp(microfusion_cell.charge + (self_charge_amount * seconds_per_tick), 0, microfusion_cell.maxcharge) + if(microfusion_cell.parent_gun) + microfusion_cell.parent_gun.update_appearance() + if(!microfusion_cell.stabilised && SPT_PROB(1, seconds_per_tick)) + radiation_pulse(src, 1, RAD_MEDIUM_INSULATION) \ No newline at end of file diff --git a/modular_ss220/modules/return_prs/microfusion/code/microfusion_designs.dm b/modular_ss220/modules/return_prs/microfusion/code/microfusion_designs.dm new file mode 100644 index 00000000000000..8caa3ee2ba8ac8 --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/microfusion_designs.dm @@ -0,0 +1,431 @@ +#define RND_CATEGORY_MICROFUSION_WEAPONS "/Weaponry (Microfusion)" +#define RND_MICROFUSION_CELLS "/Cells" +#define RND_MICROFUSION_CELL_ATTACHMENTS "/Cell Attachments" +#define RND_MICROFUSION_EMITTERS "/Phase Emitters" +// god forgive me +#define RND_MICROFUSION_ATTACHMENT "/Attachments" +#define RND_MICROFUSION_ATTACHMENT_BARREL " (Barrel)" +#define RND_MICROFUSION_ATTACHMENT_UNDERBARREL " (Underbarrel)" +#define RND_MICROFUSION_ATTACHMENT_RAIL " (Rail)" +#define RND_MICROFUSION_ATTACHMENT_UNIQUE " (Cosmetic)" + +// BASE FOR MCR DESIGNS +/datum/design/microfusion + name = "Microfusion Part" + build_type = PROTOLATHE | AWAY_LATHE + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + construction_time = 10 SECONDS //dunno if this is for mechfabs or what but I'll keep this anyway + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS, + ) + +// EMITTERS + +/datum/design/microfusion/phase_emitter + name = "Placeholder Microfusion Phase Emitter" + desc = "You shouldn't see this. Still, odd how there's no basic phase emitter design, despite how redundant it'd be." + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_EMITTERS, + ) + +/datum/design/microfusion/phase_emitter/enhanced + name = "Enhanced Microfusion Phase Emitter" + desc = "The core of a microfusion projection weapon, produces the laser." + id = "enhanced_microfusion_phase_emitter" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_phase_emitter/enhanced + +/datum/design/microfusion/phase_emitter/advanced + name = "Advanced Microfusion Phase Emitter" + id = "advanced_microfusion_phase_emitter" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_phase_emitter/advanced + +/datum/design/microfusion/phase_emitter/bluespace + name = "Bluespace Microfusion Phase Emitter" + id = "bluespace_microfusion_phase_emitter" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_phase_emitter/bluespace + +// CELLS + +/datum/design/microfusion/cell + name = "Microfusion Cell" + desc = "A microfusion cell. There's a basic type defined next to this, right?" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELLS, + ) + +/datum/design/microfusion/cell/basic + name = "Basic Microfusion Cell" + desc = "A basic microfusion cell with a capacity of 1200 MF and and 1 attachment point." + id = "basic_microfusion_cell" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/stock_parts/power_store/cell/microfusion + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELLS, + ) + +/datum/design/microfusion/cell/enhanced + name = "Enhanced Microfusion Cell" + desc = "An enhanced microfusion cell with a capacity of 1500 MF and 1 attachment point." + id = "enhanced_microfusion_cell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2, + ) + build_path = /obj/item/stock_parts/power_store/cell/microfusion/enhanced + +/datum/design/microfusion/cell/advanced + name = "Advanced Microfusion Cell" + desc = "An advanced microfusion cell with a capacity of 1700 MF and 3 attachment points." + id = "advanced_microfusion_cell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/stock_parts/power_store/cell/microfusion/advanced + +/datum/design/microfusion/cell/bluespace + name = "Bluespace Microfusion Cell" + desc = "A bluespace microfusion cell with a capacity of 2000 MF and 3 attachment points." + id = "bluespace_microfusion_cell" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/stock_parts/power_store/cell/microfusion/bluespace + +// CELL UPGRADES +/datum/design/microfusion/cell_attachment + name = "Placeholder Cell Attachment" + desc = "You shouldn't be seeing this." + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELL_ATTACHMENTS, + ) + +/datum/design/microfusion/cell_attachment/stabilising + name = "Stabilising Microfusion Cell Attachment" + desc = "Stabilises the internal fusion reaction of microfusion cells, preventing sparks during firing and occasional radiation pulses when used in tandem with a self-charging attachment." + id = "microfusion_cell_attachment_stabiliser" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_cell_attachment/stabiliser + +/datum/design/microfusion/cell_attachment/overcapacity + name = "Overcapacity Microfusion Cell Attachment" + desc = "An attachment for microfusion cells that increases MF capacity." + id = "microfusion_cell_attachment_overcapacity" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 4, + ) + build_path = /obj/item/microfusion_cell_attachment/overcapacity + +/datum/design/microfusion/cell_attachment/selfcharging + name = "Self-Charging Microfusion Cell Attachment" + desc = "Contains a small amount of infinitely decaying nuclear material, causing the fusion reaction to be self sustaining. WARNING: May cause radiation burns if not stabilised." + id = "microfusion_cell_attachment_selfcharging" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_cell_attachment/selfcharging + +/datum/design/microfusion/attachment + name = "Placeholder MCR Attachment" + desc = "You *really* shouldn't be seeing this. Now in different attachment flavors! The Req line will hate you." + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT, + ) + +// RAIL MODS + +/datum/design/microfusion/attachment/rail_slot/rail + name = "Microfusion Weapon Rail" + desc = "A carrying handle/rail system for any additional attachments, such as a seclite and/or bayonet." + id = "microfusion_gun_attachment_rail" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/rail + +/datum/design/microfusion/attachment/rail_slot/scope + name = "Microfusion Weapon Scope" + desc = "A scope. For microfusion weapon platforms, probably." + id = "microfusion_gun_attachment_scope" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/scope + +// UNDERBARREL MODS + +/datum/design/microfusion/attachment/underbarrel + name = "Placeholder Microfusion Underbarrel Slot Attachment" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_UNDERBARREL, + ) + +/datum/design/microfusion/attachment/underbarrel/grip + name = "Microfusion Weapon Grip" + desc = "A grip. For microfusion weapon platforms, ostensibly." + id = "microfusion_gun_attachment_grip" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/grip + +/datum/design/microfusion/attachment/underbarrel/heatsink + name = "Phase Emitter Heatsink" + desc = "A heatsink attachment for your microfusion weapon. Massively increases cooling potential." + id = "microfusion_gun_attachment_heatsink" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/heatsink + +// BARREL MODS (there's a lot) + +/datum/design/microfusion/attachment/barrel + name = "Placeholder Microfusion Barrel Slot Attachment" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_BARREL, + ) + +/datum/design/microfusion/attachment/barrel/suppressor + name = "Suppressor Lens Attachment" + desc = "An experimental barrel attachment that dampens the soundwave of the emitter, suppressing the report. Does not make the lasers themselves more stealthy, as they are lasers." + id = "microfusion_gun_attachment_suppressor" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/suppressor + +/datum/design/microfusion/attachment/barrel/honk + name = "Bananium Phase Emitter \"Upgrade\"" + desc = "Makes your lasers into the greatest clowning tool ever made. HONK!" + id = "microfusion_gun_attachment_honk" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bananium = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/honk + +/datum/design/microfusion/attachment/barrel/lance + name = "Lance Induction Carriage" + desc = "Turns the gun into a designated marksman rifle." + id = "microfusion_gun_attachment_lance" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/lance + +// EMITTER UPGRADES (they're still barrel upgrades, though) + +/datum/design/microfusion/attachment/barrel/scatter + name = "Diffuser Microfusion Lens Attachment" + desc = "Splits the microfusion laser beam entering the lens." + id = "microfusion_gun_attachment_scatter" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/scatter + + +/datum/design/microfusion/attachment/barrel/scatter/max + name = "Crystalline Diffuser Microfusion Lens Attachment" + desc = "Splits the microfusion laser beam entering the lens even more." + id = "microfusion_gun_attachment_scattermax" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/scatter/max + +/datum/design/microfusion/attachment/barrel/superheat + name = "Superheating Phase Emitter Upgrade" + desc = "Superheats the beam, causing targets to ignite." + id = "microfusion_gun_attachment_superheat" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/superheat + +/datum/design/microfusion/attachment/barrel/hellfire + name = "Hellfire Phase Emitter Upgrade" + desc = "Overheats the beam, causing nastier wounds and higher damage." + id = "microfusion_gun_attachment_hellfire" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/hellfire + +/datum/design/microfusion/attachment/barrel/repeater + name = "Repeating Phase Emitter Upgrade" + desc = "Upgrades the central phase emitter to repeat twice." + id = "microfusion_gun_attachment_repeater" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/repeater + + +/datum/design/microfusion/attachment/barrel/repeater/penetrator + name = "Focused Repeating Phase Emitter Upgrade" + desc = "Upgrades the central phase emitter to repeat twice and penetrate armor." + id = "microfusion_gun_attachment_penetrator" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/repeater/penetrator + +/datum/design/microfusion/attachment/barrel/xray + name = "Phase Inverter Emitter Array" + desc = "Experimental technology that inverts the central phase emitter causing the wave frequency to shift into X-rays that pierce solid objects. CAUTION: Phase emitter heats up very quickly." + id = "microfusion_gun_attachment_xray" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/barrel/xray + +// COSMETICS + +/datum/design/microfusion/attachment/unique + name = "Placeholder Microfusion Unique/Cosmetic Attachment" + category = list( + RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_UNIQUE, + ) + +/datum/design/microfusion/attachment/unique/rgb + name = "Phase Emitter Spectrograph" + desc = "An attachment hooked up to the phase emitter, allowing the user to adjust the color of the beam outputted. This has seen widespread use by various factions capable of getting their hands on microfusion weapons, whether as a calling card or simply for entertainment." + id = "microfusion_gun_attachment_rgb" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/rgb + +/datum/design/microfusion/attachment/unique/camo_black + name = "Black Camo Microfusion Frame" + desc = "A frame modification for the MCR-10, changing the color of the gun to black." + id = "microfusion_gun_attachment_black_camo" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/camo + +/datum/design/microfusion/attachment/unique/camo_nanotrasen + name = "Nanotrasen Camo Microfusion Frame" + desc = "A frame modification for the MCR-01, changing the color of the gun to blue." + id = "microfusion_gun_attachment_nt_camo" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/camo/nanotrasen + +/datum/design/microfusion/attachment/unique/camo_syndicate + name = "Blood Red Camo Microfusion Frame" + desc = "A frame modification for the MCR-01, changing the color of the gun to a slick blood red." + id = "microfusion_gun_attachment_syndi_camo" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/camo/syndicate + +/datum/design/microfusion/attachment/unique/camo_bananium + name = "Bananium Microfusion Frame" + desc = "A frame modification for the MCR-01, plating the gun in bananium." + id = "microfusion_gun_attachment_honk_camo" + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/bananium = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/microfusion_gun_attachment/camo/honk diff --git a/modular_ss220/modules/return_prs/microfusion/code/microfusion_energy_master.dm b/modular_ss220/modules/return_prs/microfusion/code/microfusion_energy_master.dm new file mode 100644 index 00000000000000..d5b40bf1536840 --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/microfusion_energy_master.dm @@ -0,0 +1,778 @@ +#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.4 + +// Master file for cell loadable energy guns. PROCS ONLY YOU MONKEYS! +// This file is a copy/paste of _energy.dm with extensive modification. + +/obj/item/gun/microfusion + name = "prototype detatchable cell energy projection aparatus" + desc = "The coders have obviously failed to realise this is broken." + icon = 'modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun40x32.dmi' + icon_state = "mcr01" + inhand_icon_state = "mcr01" + lefthand_file = 'modular_ss220/modules/return_prs/microfusion/icons/guns_lefthand.dmi' + righthand_file = 'modular_ss220/modules/return_prs/microfusion/icons/guns_righthand.dmi' + weapon_weight = WEAPON_HEAVY + w_class = WEIGHT_CLASS_BULKY + obj_flags = UNIQUE_RENAME + ammo_x_offset = 2 + + /// What type of power cell this uses + var/obj/item/stock_parts/power_store/cell/microfusion/cell + /// The cell we will spawn with + var/cell_type = /obj/item/stock_parts/power_store/cell/microfusion + /// The cell type we check when inserting a cell + var/base_cell_type = /obj/item/stock_parts/power_store/cell/microfusion + /// If the weapon has custom icons for individual ammo types it can switch between. ie disabler beams, taser, laser/lethals, ect. + var/modifystate = FALSE + /// How many charge sections do we have? + var/charge_sections = 4 + /// if this gun uses a stateful charge bar for more detail + var/shaded_charge = FALSE + /// Should we give an overlay to empty guns? + var/display_empty = TRUE + /// whether the gun's cell drains the cyborg user's cell to recharge + var/dead_cell = FALSE + + // MICROFUSION SPECIFIC VARS + + /// The microfusion lens used for generating the beams. + var/obj/item/ammo_casing/energy/laser/microfusion/microfusion_lens + /// The time it takes for someone to (tactically) reload this gun. In deciseconds. + var/tactical_reload_time = 4 SECONDS + /// The time it takes for someone to normally reload this gun. In deciseconds. + var/normal_reload_time = 2 SECONDS + /// The sound played when you insert a cell. + var/sound_cell_insert = 'modular_ss220/modules/return_prs/microfusion/sound/mag_insert.ogg' + /// Should the insertion sound played vary? + var/sound_cell_insert_vary = TRUE + /// The volume at which we will play the insertion sound. + var/sound_cell_insert_volume = 50 + /// The sound played when you remove a cell. + var/sound_cell_remove = 'modular_ss220/modules/return_prs/microfusion/sound/mag_insert.ogg' + /// Should the removal sound played vary? + var/sound_cell_remove_vary = TRUE + /// The volume at which we will play the removal sound. + var/sound_cell_remove_volume = 50 + /// A list of attached upgrades + var/list/attachments = list() + /// The starting phase emitter in this weapon. + var/phase_emitter_type = /obj/item/microfusion_phase_emitter + /// The base emitter type that we check when putting a new emitter in. + var/base_phase_emitter_type = /obj/item/microfusion_phase_emitter + /// The phase emitter that this gun currently has. + var/obj/item/microfusion_phase_emitter/phase_emitter + /// The amount of heat produced per shot + var/heat_per_shot = 100 + /// The heat dissipation bonus granted by the weapon. + var/heat_dissipation_bonus = 0 + /// What slots does this gun have? + var/attachment_slots = list(GUN_SLOT_BARREL, GUN_SLOT_UNDERBARREL, GUN_SLOT_RAIL, GUN_SLOT_UNIQUE, GUN_SLOT_CAMO) + /// Our base firedelay. + var/base_fire_delay = 0 + /// Do we use more power because of attachments? + var/extra_power_usage = 0 + /// Spread from attachments. + var/attachment_spread = 0 + /// Recoil from attachments. + var/attachment_recoil = 0 + +/obj/item/gun/microfusion/emp_act(severity) + . = ..() + if(!(. & EMP_PROTECT_CONTENTS)) + cell.use(round(cell.charge / severity)) + chambered = null //we empty the chamber + recharge_newshot() //and try to charge a new shot + update_appearance() + +/obj/item/gun/microfusion/get_cell() + return cell + +/obj/item/gun/microfusion/Initialize(mapload) + . = ..() + if(cell_type) + cell = new cell_type(src) + else + cell = new(src) + cell.parent_gun = src + cell.chargerate = STANDARD_CELL_CHARGE * 0.2 + if(!dead_cell) + cell.give(cell.maxcharge) + if(phase_emitter_type) + phase_emitter = new phase_emitter_type(src) + else + phase_emitter = new(src) + phase_emitter.parent_gun = src + update_microfusion_lens() + recharge_newshot(TRUE) + AddElement(/datum/element/update_icon_updates_onmob) + update_appearance() + AddComponent(/datum/component/ammo_hud) + RegisterSignal(src, COMSIG_ITEM_RECHARGED, PROC_REF(instant_recharge)) + base_fire_delay = fire_delay + START_PROCESSING(SSobj, src) + for(var/type in attachments) + attachments -= type + var/obj/item/microfusion_gun_attachment/attachment = new type(src) + add_attachment(attachment) + +/obj/item/gun/microfusion/give_gun_safeties() + AddComponent(/datum/component/gun_safety) + +/obj/item/gun/microfusion/add_weapon_description() + AddElement(/datum/element/weapon_description, attached_proc = PROC_REF(add_notes_energy)) + +/obj/item/gun/microfusion/add_seclight_point() + return + +/obj/item/gun/microfusion/Destroy() + if(microfusion_lens) + QDEL_NULL(microfusion_lens) + if(cell) + cell.parent_gun = null + QDEL_NULL(cell) + if(attachments.len) + for(var/obj/item/iterating_item in attachments) + qdel(iterating_item) + attachments = null + if(phase_emitter) + QDEL_NULL(phase_emitter) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/gun/microfusion/Exited(atom/movable/gone, direction) + . = ..() + if(gone == cell) + cell = null + update_appearance() + else if(gone == phase_emitter) + phase_emitter = null + update_appearance() + +/obj/item/gun/microfusion/can_shoot() + return !QDELETED(cell) ? (cell.charge >= microfusion_lens.e_cost) : FALSE + +/obj/item/gun/microfusion/recharge_newshot() + if (!microfusion_lens || !cell || !phase_emitter) + return + chambered = microfusion_lens + if(!chambered.loaded_projectile) + chambered.newshot() + +/obj/item/gun/microfusion/handle_chamber() + if(chambered && !chambered.loaded_projectile && cell) //if loaded_projectile is null, i.e the shot has been fired... + var/obj/item/ammo_casing/energy/shot = chambered + cell.use(shot.e_cost + extra_power_usage)//... drain the cell + chambered = null //either way, released the prepared shot + recharge_newshot() //try to charge a new shot + +/obj/item/gun/microfusion/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) + if(!chambered && can_shoot()) + process_chamber() // If the gun was drained and then recharged, load a new shot. + return ..() + +/obj/item/gun/microfusion/process(seconds_per_tick) + for(var/obj/item/microfusion_gun_attachment/attached as anything in attachments) + attached.process_attachment(src, seconds_per_tick) + +/obj/item/gun/microfusion/update_icon_state() + var/skip_inhand = initial(inhand_icon_state) //only build if we aren't using a preset inhand icon + var/skip_worn_icon = initial(worn_icon_state) //only build if we aren't using a preset worn icon + + if(skip_inhand && skip_worn_icon) //if we don't have either, don't do the math. + return ..() + + var/ratio = get_charge_ratio() + var/temp_icon_to_use = initial(icon_state) + if(modifystate) + temp_icon_to_use += "[microfusion_lens.select_name]" + + temp_icon_to_use += "[ratio]" + if(!skip_inhand) + inhand_icon_state = temp_icon_to_use + if(!skip_worn_icon) + worn_icon_state = temp_icon_to_use + return ..() + +/obj/item/gun/microfusion/update_overlays() + . = ..() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) //update the ammo hud since it's heavily dependent on the gun's state + if(!phase_emitter) + . += "[icon_state]_phase_emitter_missing" + else if(phase_emitter.damaged) + . += "[icon_state]_phase_emitter_damaged" + else if(cell) + var/ratio = get_charge_ratio() + if(ratio == 0 && display_empty) + . += "[icon_state]_empty" + else if(shaded_charge) + . += "[icon_state]_charge[ratio]_[phase_emitter.icon_state]" + else + . += "[icon_state]_phase_emitter_missing" + + + for(var/obj/item/microfusion_gun_attachment/microfusion_gun_attachment in attachments) + . += "[icon_state]_[microfusion_gun_attachment.attachment_overlay_icon_state]" + + +/obj/item/gun/microfusion/ignition_effect(atom/to_ignite, mob/living/user) + if(!can_shoot() || !microfusion_lens) + shoot_with_empty_chamber() + . = "" + else + var/obj/projectile/energy/loaded_projectile = microfusion_lens.loaded_projectile + if(!loaded_projectile) + . = "" + else if(!loaded_projectile.damage || loaded_projectile.damage_type == STAMINA) + user.visible_message(span_danger("[user] tries to light [to_ignite.loc == user ? "[user.p_their()] [to_ignite.name]" : to_ignite] with [src], but it doesn't do anything. Dumbass.")) + playsound(user, microfusion_lens.fire_sound, 50, TRUE) + playsound(user, loaded_projectile.hitsound, 50, TRUE) + cell.use(microfusion_lens.e_cost) + . = "" + else if(loaded_projectile.damage_type != BURN) + user.visible_message(span_danger("[user] tries to light [to_ignite.loc == user ? "[user.p_their()] [to_ignite.name]" : to_ignite] with [src], but only succeeds in utterly destroying it. Dumbass.")) + playsound(user, microfusion_lens.fire_sound, 50, TRUE) + playsound(user, loaded_projectile.hitsound, 50, TRUE) + cell.use(microfusion_lens.e_cost) + qdel(to_ignite) + . = "" + else + playsound(user, microfusion_lens.fire_sound, 50, TRUE) + playsound(user, loaded_projectile.hitsound, 50, TRUE) + cell.use(microfusion_lens.e_cost) + . = span_danger("[user] casually lights [to_ignite.loc == user ? "[user.p_their()] [to_ignite.name]" : to_ignite] with [src]. Damn.") + +/obj/item/gun/microfusion/attackby(obj/item/attacking_item, mob/user, params) + . = ..() + if (.) + return + if(istype(attacking_item, base_cell_type)) + insert_cell(user, attacking_item) + if(istype(attacking_item, /obj/item/microfusion_gun_attachment)) + add_attachment(attacking_item, user) + if(istype(attacking_item, base_phase_emitter_type)) + insert_emitter(attacking_item, user) + +/obj/item/gun/microfusion/process_chamber(empty_chamber, from_firing, chamber_next_round) + . = ..() + if(!cell?.stabilised && prob(40)) + do_sparks(2, FALSE, src) //Microfusion guns create sparks! + +/obj/item/gun/microfusion/attack_hand(mob/user, list/modifiers) + if(loc == user && user.is_holding(src) && cell) + eject_cell(user) + return + return ..() + +/obj/item/gun/microfusion/crowbar_act(mob/living/user, obj/item/tool) + if(!phase_emitter) + balloon_alert(user, "no phase emitter!") + return + playsound(src, 'sound/items/tools/crowbar.ogg', 70, TRUE) + remove_emitter() + +/obj/item/gun/microfusion/click_alt(mob/user) + var/obj/item/microfusion_gun_attachment/to_remove = input(user, "Please select what part you'd like to remove.", "Remove attachment") as null|obj in sort_names(attachments) + if(!to_remove) + return CLICK_ACTION_BLOCKING + remove_attachment(to_remove, user) + return CLICK_ACTION_SUCCESS + +/obj/item/gun/microfusion/proc/remove_all_attachments() + if(attachments.len) + for(var/obj/item/microfusion_gun_attachment/attachment in attachments) + attachment.remove_attachment(src) + attachment.forceMove(get_turf(src)) + attachments -= attachment + update_appearance() + +/obj/item/gun/microfusion/examine(mob/user) + . = ..() + if(attachments.len) + for(var/obj/item/microfusion_gun_attachment/microfusion_gun_attachment in attachments) + . += span_notice("It has a [microfusion_gun_attachment.name] installed.") + . += span_notice("Alt+click it to remove an upgrade.") + if(phase_emitter) + . += span_notice("It has a [phase_emitter.name] installed, at [phase_emitter.get_heat_percent()]% heat capacity.") + . += span_notice("The [phase_emitter.name] is at [phase_emitter.integrity]% integrity.") + . += span_notice("The [phase_emitter.name] will thermal throttle at [phase_emitter.throttle_percentage]% heat capacity.") + . += span_notice("Use a crowbar to remove the phase emitter.") + else + . += span_danger("It does not have a phase emitter installed!") + + if(cell) + . += span_notice("It has a [cell.name] installed, with a capacity of [cell.charge]/[cell.maxcharge] MF.") + +/obj/item/gun/microfusion/suicide_act(mob/living/user) + if (istype(user) && can_shoot() && can_trigger_gun(user) && user.get_bodypart(BODY_ZONE_HEAD)) + user.visible_message(span_suicide("[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!")) + sleep(2.5 SECONDS) + if(user.is_holding(src)) + user.visible_message(span_suicide("[user] melts [user.p_their()] face off with [src]!")) + playsound(loc, fire_sound, 50, TRUE, -1) + cell.use(microfusion_lens.e_cost) + update_appearance() + return(FIRELOSS) + else + user.visible_message(span_suicide("[user] panics and starts choking to death!")) + return(OXYLOSS) + else + user.visible_message(span_suicide("[user] is pretending to melt [user.p_their()] face off with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + playsound(src, dry_fire_sound, 30, TRUE) + return (OXYLOSS) + +// To maintain modularity, I am moving this proc override here. +/obj/item/gun/microfusion/fire_gun(atom/target, mob/living/user, flag, params) + + // check to see if the emitter prevents us from firing before anything else + var/attempted_shot = process_emitter() + if(attempted_shot != SHOT_SUCCESS) + if(attempted_shot) + balloon_alert(user, attempted_shot) + return + + . = ..() + +// To maintain modularity, I am moving this proc override here. +/obj/item/gun/microfusion/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) + var/base_bonus_spread = 0 + if(user) + var/list/bonus_spread_values = list(base_bonus_spread, bonus_spread) + SEND_SIGNAL(user, COMSIG_MOB_FIRED_GUN, src, target, params, zone_override, bonus_spread_values) + base_bonus_spread = bonus_spread_values[MIN_BONUS_SPREAD_INDEX] + bonus_spread = bonus_spread_values[MAX_BONUS_SPREAD_INDEX] + + SEND_SIGNAL(src, COMSIG_GUN_FIRED, user, target, params, zone_override) + + add_fingerprint(user) + + if(semicd) + return + + //Vary by at least this much + var/randomized_bonus_spread = rand(base_bonus_spread, bonus_spread) + var/randomized_gun_spread = spread ? rand(0, spread) : 0 + var/total_random_spread = max(0, randomized_bonus_spread + randomized_gun_spread) + var/burst_spread_mult = rand() + + var/modified_delay = fire_delay + if(phase_emitter) + modified_delay = phase_emitter.fire_delay + if(user && HAS_TRAIT(user, TRAIT_DOUBLE_TAP)) + modified_delay = ROUND_UP(fire_delay * 0.5) + + if(burst_size > 1) + firing_burst = TRUE + for(var/i = 1 to burst_size) + addtimer(CALLBACK(src, PROC_REF(process_burst), user, target, message, params, zone_override, total_random_spread, burst_spread_mult, i), modified_delay * (i - 1)) + else + if(chambered) + if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. + if(chambered.harmful) // Is the bullet chambered harmful? + balloon_alert(user, "lethally chambered!") + return + var/calculated_spread = round((rand(0, 1) - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * total_random_spread) + before_firing(target,user) + process_microfusion() + if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, calculated_spread, src)) + shoot_with_empty_chamber(user) + return + else + if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot + shoot_live_shot(user, 1, target, message) + else + shoot_live_shot(user, 0, target, message) + else + shoot_with_empty_chamber(user) + return + process_chamber() + update_appearance() + semicd = TRUE + var/fire_delay_to_add = 0 + if(phase_emitter) + fire_delay_to_add = phase_emitter.fire_delay + addtimer(CALLBACK(src, PROC_REF(reset_semicd)), fire_delay + fire_delay_to_add) + + if(user) + user.update_held_items() + SSblackbox.record_feedback("tally", "gun_fired", 1, type) + + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) + + return TRUE + +// Same goes for this! +/obj/item/gun/microfusion/process_burst( + mob/living/user, + atom/target, + message = TRUE, + params = null, + zone_override = "", + random_spread = 0, + burst_spread_mult = 0, + iteration = 0, + ) + + if(!user || !firing_burst) + firing_burst = FALSE + return FALSE + if(!can_shoot()) + firing_burst = FALSE + return FALSE + if(!chambered) + process_chamber() // Ditto. + if(!issilicon(user)) + if(iteration > 1 && !(user.is_holding(src))) //for burst firing + firing_burst = FALSE + return FALSE + if(chambered?.loaded_projectile) + if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. + if(chambered.harmful) // Is the bullet chambered harmful? + balloon_alert(user, "lethally chambered!") + return + var/calculated_spread + if(randomspread) + calculated_spread = round((rand(0, 1) - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (random_spread)) + else //Smart spread + calculated_spread = round((((burst_spread_mult/burst_size) * iteration) - (0.5 + (burst_spread_mult * 0.25))) * (random_spread)) + before_firing(target,user) + process_microfusion() + if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, calculated_spread, src)) + shoot_with_empty_chamber(user) + firing_burst = FALSE + return FALSE + else + if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot + shoot_live_shot(user, 1, target, message) + else + shoot_live_shot(user, 0, target, message) + if (iteration >= burst_size) + firing_burst = FALSE + else + shoot_with_empty_chamber(user) + firing_burst = FALSE + return FALSE + process_chamber() + update_appearance() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) + return TRUE + +/obj/item/gun/microfusion/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message) + if(recoil) + shake_camera(user, recoil + 1, recoil) + + var/sound_freq_to_add = 0 + + if(phase_emitter && phase_emitter.sound_freq > 1) + sound_freq_to_add = phase_emitter.sound_freq + + if(suppressed) + playsound(user, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = sound_freq_to_add, falloff_distance = 0) + else + playsound(user, fire_sound, fire_sound_volume, vary_fire_sound, frequency = sound_freq_to_add) + if(message) + if(pointblank) + user.visible_message(span_danger("[user] fires [src] point blank at [pbtarget]!"), \ + span_danger("You fire [src] point blank at [pbtarget]!"), \ + span_hear("You hear a gunshot!"), COMBAT_MESSAGE_RANGE, pbtarget) + to_chat(pbtarget, span_userdanger("[user] fires [src] point blank at you!")) + if(pb_knockback > 0 && ismob(pbtarget)) + var/mob/PBT = pbtarget + var/atom/throw_target = get_edge_target_turf(PBT, user.dir) + PBT.throw_at(throw_target, pb_knockback, 2) + else + user.visible_message(span_danger("[user] fires [src]!"), \ + span_danger("You fire [src]!"), \ + span_hear("You hear a gunshot!"), COMBAT_MESSAGE_RANGE) + if(user.resting) + user.Immobilize(20, TRUE) + + phase_emitter.add_heat(heat_per_shot) + + if(phase_emitter.current_heat > phase_emitter.max_heat) + if(ishuman(user)) + var/mob/living/carbon/human/human = user + var/obj/item/bodypart/affecting = human.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + if(affecting?.receive_damage( 0, 5 )) // 1 burn damage + to_chat(user, span_warning("[src] burns your hand, it's too hot!")) + +/obj/item/gun/microfusion/proc/process_microfusion() + if(attachments.len) + for(var/obj/item/microfusion_gun_attachment/attachment in attachments) + attachment.process_fire(src, chambered) + return TRUE + +/obj/item/gun/microfusion/proc/process_emitter() + if(!phase_emitter) + return SHOT_FAILURE_NO_EMITTER + var/phase_emitter_process = phase_emitter.check_emitter() + if(phase_emitter_process != SHOT_SUCCESS) + return phase_emitter_process + return SHOT_SUCCESS + +/obj/item/gun/microfusion/proc/instant_recharge() + SIGNAL_HANDLER + if(!cell) + return + cell.charge = cell.maxcharge + recharge_newshot() + update_appearance() + +///Used by update_icon_state() and update_overlays() +/obj/item/gun/microfusion/proc/get_charge_ratio() + return can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 + // Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if its power cell is removed. + +/** + * + * Outputs type-specific weapon stats for energy-based firearms based on its firing modes + * and the stats of those firing modes. Esoteric firing modes like ion are currently not supported + * but can be added easily + * + */ +/obj/item/gun/microfusion/proc/add_notes_energy() + var/list/readout = list() + // Make sure there is something to actually retrieve + if(!microfusion_lens) + return + var/obj/projectile/exam_proj + readout += "Our heroic interns have shown that one can theoretically stay standing after..." + exam_proj = initial(microfusion_lens?.projectile_type) + + if(!istype(exam_proj)) + return readout.Join("\n") + + if(exam_proj.damage > 0) // Don't divide by 0!!!!! + readout += "[span_warning("[HITS_TO_CRIT(exam_proj.damage * microfusion_lens.pellets)] shot\s")] on [span_warning("[microfusion_lens.select_name]")] mode before collapsing from [exam_proj.damage_type == STAMINA ? "immense pain" : "their wounds"]." + if(exam_proj.stamina > 0) // In case a projectile does damage AND stamina damage (Energy Crossbow) + readout += "[span_warning("[HITS_TO_CRIT(exam_proj.stamina * microfusion_lens.pellets)] shot\s")] on [span_warning("[microfusion_lens.select_name]")] mode before collapsing from immense pain." + else + readout += "a theoretically infinite number of shots on [span_warning("[microfusion_lens.select_name]")] mode." + + return readout.Join("\n") // Sending over the singular string, rather than the whole list + +/obj/item/gun/microfusion/proc/update_microfusion_lens() + if(!microfusion_lens) + microfusion_lens = new(src) + fire_sound = microfusion_lens.fire_sound + fire_sound_volume = microfusion_lens.fire_sound_volume + fire_delay = microfusion_lens.delay + +// Cell, emitter and upgrade interactions + +/obj/item/gun/microfusion/proc/remove_emitter(mob/user) + playsound(src, sound_cell_insert, 50, TRUE) + phase_emitter.forceMove(get_turf(src)) + if(user) + user.put_in_hands(phase_emitter) + balloon_alert(user, "removed phase emitter") + phase_emitter.parent_gun = null + phase_emitter = null + update_appearance() + +/obj/item/gun/microfusion/proc/insert_emitter(obj/item/microfusion_phase_emitter/inserting_phase_emitter, mob/living/user) + if(phase_emitter) + balloon_alert(user, "already one installed!") + return FALSE + balloon_alert(user, "inserted phase emitter") + playsound(src, sound_cell_remove, 50, TRUE) + inserting_phase_emitter.forceMove(src) + phase_emitter = inserting_phase_emitter + phase_emitter.parent_gun = src + update_appearance() + + +/// Try to insert the cell into the gun, if successful, return TRUE +/obj/item/gun/microfusion/proc/insert_cell(mob/user, obj/item/stock_parts/power_store/cell/microfusion/inserting_cell, display_message = TRUE) + var/hotswap = FALSE + if(cell) + hotswap = TRUE + var/obj/item/stock_parts/power_store/cell/old_cell = cell + + if(inserting_cell.charge) + balloon_alert(user, "can't insert a charged cell!") + return FALSE + if(display_message) + balloon_alert(user, "cell inserted") + if(hotswap) + eject_cell(user, FALSE, FALSE) + if(sound_cell_insert) + playsound(src, sound_cell_insert, sound_cell_insert_volume, sound_cell_insert_vary) + cell = inserting_cell + inserting_cell.forceMove(src) + inserting_cell.inserted_into_weapon() + cell.parent_gun = src + if(old_cell) + user.put_in_hands(old_cell) + recharge_newshot() + update_appearance() + return TRUE + + +/// Ejecting a cell. +/obj/item/gun/microfusion/proc/eject_cell(mob/user, display_message = TRUE, put_in_hands = TRUE) + var/obj/item/stock_parts/power_store/cell/microfusion/old_cell = cell + old_cell.cell_removal_discharge() + old_cell.forceMove(get_turf(src)) + if(user) + if(put_in_hands) + user.put_in_hands(old_cell) + if(display_message) + balloon_alert(user, "cell removed") + if(sound_cell_remove) + playsound(src, sound_cell_remove, sound_cell_remove_volume, sound_cell_remove_vary) + old_cell.update_appearance() + old_cell.parent_gun = null + cell = null + update_appearance() + +/// Attatching an upgrade. +/obj/item/gun/microfusion/proc/add_attachment(obj/item/microfusion_gun_attachment/microfusion_gun_attachment, mob/living/user) + if(is_type_in_list(microfusion_gun_attachment, attachments)) + if(user) + balloon_alert(user, "already has one!") + return FALSE + if(!(microfusion_gun_attachment.slot in attachment_slots)) + if(user) + balloon_alert(user, "can't install!") + return FALSE + for(var/obj/item/microfusion_gun_attachment/iterating_attachment in attachments) + if(is_type_in_list(microfusion_gun_attachment, iterating_attachment.incompatible_attachments)) + balloon_alert(user, "not compatible with [iterating_attachment]!") + return FALSE + if(iterating_attachment.slot != GUN_SLOT_UNIQUE && iterating_attachment.slot == microfusion_gun_attachment.slot) + if(user) + balloon_alert(user, "slot full!") + return FALSE + attachments += microfusion_gun_attachment + microfusion_gun_attachment.forceMove(src) + microfusion_gun_attachment.run_attachment(src) + if(user) + balloon_alert(user, "installed attachment") + playsound(src, 'sound/effects/structure_stress/pop2.ogg', 70, TRUE) + return TRUE + +/obj/item/gun/microfusion/proc/remove_attachment(obj/item/microfusion_gun_attachment/microfusion_gun_attachment, mob/living/user) + balloon_alert(user, "removed attachment") + playsound(src, 'sound/items/tools/screwdriver.ogg', 70) + microfusion_gun_attachment.forceMove(get_turf(src)) + attachments -= microfusion_gun_attachment + microfusion_gun_attachment.remove_attachment(src) + user?.put_in_hands(microfusion_gun_attachment) + update_appearance() + +// UI CONTROL + +/obj/item/gun/microfusion/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MicrofusionGunControl") + ui.open() + +/obj/item/gun/microfusion/ui_data(mob/user) + var/list/data = list() + + data["gun_name"] = name + data["gun_desc"] = desc + data["gun_heat_dissipation"] = heat_dissipation_bonus + + if(phase_emitter) + data["has_emitter"] = TRUE + data["phase_emitter_data"] = list( + "type" = capitalize(phase_emitter.name), + "integrity" = phase_emitter.integrity, + "current_heat" = phase_emitter.current_heat, + "throttle_percentage" = phase_emitter.throttle_percentage, + "heat_dissipation_per_tick" = phase_emitter.heat_dissipation_per_tick, + "max_heat" = phase_emitter.max_heat, + "damaged" = phase_emitter.damaged, + "hacked" = phase_emitter.hacked, + "heat_percent" = phase_emitter.get_heat_percent(), + "process_time" = phase_emitter.fire_delay, + "cooling_system" = phase_emitter.cooling_system, + "cooling_system_rate" = phase_emitter.cooling_system_rate, + ) + else + data["has_emitter"] = FALSE + + if(cell) + var/list/attachments = list() + for(var/obj/item/microfusion_cell_attachment/attachment in cell.attachments) + attachments += attachment.name + data["has_cell"] = TRUE + data["cell_data"] = list( + "type" = capitalize(cell.name), + "charge" = cell.charge, + "max_charge" = cell.maxcharge, + "status" = cell.meltdown, + "attachments" = attachments, + ) + else + data["has_cell"] = FALSE + + + + if(attachments.len) + data["has_attachments"] = TRUE + data["attachments"] = list() + for(var/obj/item/microfusion_gun_attachment/attachment in attachments) + var/list/attachment_functions = attachment.get_modify_data() + var/has_modifications = FALSE + if(attachment_functions?.len > 0) + has_modifications = TRUE + data["attachments"] += list(list( + "name" = uppertext(attachment.name), + "desc" = attachment.desc, + "slot" = capitalize(attachment.slot), + "information" = attachment.get_information_data(), + "has_modifications" = has_modifications, + "modify" = attachment_functions, + "ref" = REF(attachment), + )) + + else + data["has_attachments"] = FALSE + + return data + +/obj/item/gun/microfusion/ui_act(action, list/params) + . = ..() + if(.) + return + + switch(action) + if("eject_cell") + if(!cell) + return + eject_cell(usr) + if("overclock_emitter") + if(!phase_emitter) + return + if(!phase_emitter.hacked) + return + phase_emitter.set_overclock(usr) + if("eject_emitter") + if(!phase_emitter) + return + remove_emitter(usr) + if("remove_attachment") + var/obj/item/microfusion_gun_attachment/to_remove = locate(params["attachment_ref"]) in src + if(!to_remove) + return + remove_attachment(to_remove, usr) + if("modify_attachment") + var/obj/item/microfusion_gun_attachment/to_modify = locate(params["attachment_ref"]) in src + if(!to_modify) + return + to_modify.run_modify_data(params["modify_ref"], usr, src) + if("toggle_cooling_system") + if(!phase_emitter) + return + phase_emitter.toggle_cooling_system(usr) + +/// Recalculates the spread, based on attachment-provided values. +/obj/item/gun/microfusion/proc/recalculate_spread() + spread = max(0, attachment_spread) + +/// Recalculates the recoil, based on attachment-provided values. +/obj/item/gun/microfusion/proc/recalculate_recoil() + recoil = max(0, attachment_recoil) diff --git a/modular_ss220/modules/return_prs/microfusion/code/microfusion_gun_attachments.dm b/modular_ss220/modules/return_prs/microfusion/code/microfusion_gun_attachments.dm new file mode 100644 index 00000000000000..8815711cb70ec0 --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/microfusion_gun_attachments.dm @@ -0,0 +1,572 @@ +/** +*MICROFUSION GUN UPGRADE ATTACHMENTS +*For adding unique abilities to microfusion guns, these can directly interact with the gun! +*/ + +/obj/item/microfusion_gun_attachment + name = "microfusion gun attachment" + desc = "If you see this yell at a coder" + icon = 'modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun_attachments.dmi' + w_class = WEIGHT_CLASS_NORMAL + /// The attachment overlay icon state. + var/attachment_overlay_icon_state + /// Any incompatible upgrade types. + var/list/incompatible_attachments = list() + /// The added heat produced by having this module installed. + var/heat_addition = 0 + /// The slot this attachment is installed in. + var/slot = GUN_SLOT_UNIQUE + /// How much extra power do we use? + var/power_usage = 0 + /// Spread adjustment. Moved up to the base attachment type because of barrel mods and grips being in separate slots. + var/spread_adjust + /// Recoil adjustment. Also moved up to base attachment because of barrel mods and grips being in separate slots. + var/recoil_adjust + +/obj/item/microfusion_gun_attachment/examine(mob/user) + . = ..() + . += "Compatible slot: [slot]." + +/obj/item/microfusion_gun_attachment/proc/run_attachment(obj/item/gun/microfusion/microfusion_gun) + SHOULD_CALL_PARENT(TRUE) + microfusion_gun.heat_per_shot += heat_addition + microfusion_gun.update_appearance() + microfusion_gun.extra_power_usage += power_usage + microfusion_gun.chambered?.refresh_shot() + if(spread_adjust) + microfusion_gun.attachment_spread += spread_adjust + microfusion_gun.recalculate_spread() + if(recoil_adjust) + microfusion_gun.attachment_recoil += recoil_adjust + microfusion_gun.recalculate_recoil() + return + +/obj/item/microfusion_gun_attachment/proc/process_attachment(obj/item/gun/microfusion/microfusion_gun, seconds_per_tick) + return + +//Firing the gun right before we let go of it, tis is called. +/obj/item/microfusion_gun_attachment/proc/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) + return + +/obj/item/microfusion_gun_attachment/proc/remove_attachment(obj/item/gun/microfusion/microfusion_gun) + SHOULD_CALL_PARENT(TRUE) + microfusion_gun.heat_per_shot -= heat_addition + microfusion_gun.update_appearance() + microfusion_gun.extra_power_usage -= power_usage + microfusion_gun.chambered?.refresh_shot() + if(spread_adjust) + microfusion_gun.attachment_spread -= spread_adjust + microfusion_gun.recalculate_spread() + if(recoil_adjust) + microfusion_gun.attachment_recoil -= recoil_adjust + microfusion_gun.recalculate_recoil() + return + +/* +Returns a list of modifications of this attachment, it must return a list within a list list(list()). +All of the following must be returned. +list(list("title" = "Toggle [toggle ? "OFF" : "ON"]", "icon" = "power-off", "color" = "blue" "reference" = "toggle_on_off")) +title - The title of the modification button +icon - The icon of the modification button +color - The color of the modification button +reference - The reference of the modification button, this is used to call the proc when the run modify data proc is called. +*/ +/obj/item/microfusion_gun_attachment/proc/get_modify_data() + return + +/obj/item/microfusion_gun_attachment/proc/run_modify_data(params, mob/living/user, obj/item/gun/microfusion/microfusion_gun) + return + +/obj/item/microfusion_gun_attachment/proc/get_information_data() + return + +// base type for the barrel mods because i got Really Tired of re-re-redefined variables +/obj/item/microfusion_gun_attachment/barrel + slot = GUN_SLOT_BARREL + /// If this isn't null, we're replacing our next loaded projectile with this type. + var/projectile_override + /// If this isn't null, on attachment, this becomes the new fire sound. + var/new_fire_sound + /// If this isn't null or zero, adds this fire delay to the gun. + var/delay_to_add + /// If this isn't null or zero, adds this burst to the gun's burst size. + var/burst_to_add + +/obj/item/microfusion_gun_attachment/barrel/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) + . = ..() + if(projectile_override) + chambered.loaded_projectile = new projectile_override + +/obj/item/microfusion_gun_attachment/barrel/run_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + if(new_fire_sound) + microfusion_gun.fire_sound = new_fire_sound + if(delay_to_add) + microfusion_gun.fire_delay += delay_to_add + if(burst_to_add) + microfusion_gun.burst_size += burst_to_add + +/obj/item/microfusion_gun_attachment/barrel/remove_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + if(new_fire_sound) + microfusion_gun.fire_sound = microfusion_gun.chambered?.fire_sound + if(delay_to_add) + microfusion_gun.fire_delay -= delay_to_add + if(burst_to_add) + microfusion_gun.burst_size -= burst_to_add + +/* +SCATTER ATTACHMENT + +Turns the gun into a shotgun. +*/ +/obj/item/microfusion_gun_attachment/barrel/scatter + name = "diffuser microfusion lens upgrade" + desc = "A diffusing lens system capable of splitting one beam into three." + icon_state = "attachment_scatter" + attachment_overlay_icon_state = "attachment_scatter" + slot = GUN_SLOT_BARREL + projectile_override = /obj/projectile/beam/laser/microfusion/scatter + /// How many pellets are we going to add to the existing amount on the gun? + var/pellets_to_add = 2 + /// The variation in pellet scatter. + var/variance_to_add = 20 + +/obj/item/microfusion_gun_attachment/barrel/scatter/run_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + microfusion_gun.microfusion_lens.pellets += pellets_to_add + microfusion_gun.microfusion_lens.variance += variance_to_add + +/obj/item/microfusion_gun_attachment/barrel/scatter/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) + . = ..() + chambered.loaded_projectile?.damage = chambered.loaded_projectile.damage / chambered.pellets + +/obj/item/microfusion_gun_attachment/barrel/scatter/remove_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + microfusion_gun.microfusion_lens.pellets -= pellets_to_add + microfusion_gun.microfusion_lens.variance -= variance_to_add + +/* +CRYSTALLINE SCATTER ATTACHMENT + +An overclocked shotgun. +*/ + +/obj/item/microfusion_gun_attachment/barrel/scatter/max + name = "crystalline diffuser microfusion lens upgrade" + desc = "An experimental diffusing lens system capable of splitting one beam into seven. However, it imparts recoil and causes an increased power draw." + icon_state = "attachment_scattermax" + attachment_overlay_icon_state = "attachment_scattermax" + slot = GUN_SLOT_BARREL + pellets_to_add = 6 + variance_to_add = 25 + recoil_adjust = 1 + spread_adjust = 15 + projectile_override = /obj/projectile/beam/laser/microfusion/scatter/max + power_usage = 20 + +/* +SUPERHEAT ATTACHMENT + +Lasers set the target on fire. +*/ + +/obj/item/microfusion_gun_attachment/barrel/superheat + name = "superheating phase emitter upgrade" + desc = "A barrel attachment hooked to the phase emitter, this adjusts the beam's wavelength to carry an intense wave of heat; causing targets to ignite." + icon_state = "attachment_superheat" + attachment_overlay_icon_state = "attachment_superheat" + heat_addition = 90 + slot = GUN_SLOT_BARREL + projectile_override = /obj/projectile/beam/laser/microfusion/superheated + new_fire_sound = 'modular_ss220/modules/return_prs/microfusion/sound/vaporize.ogg' + +/* +HELLFIRE ATTACHMENT + +Makes the gun shoot hellfire lasers. +*/ +/obj/item/microfusion_gun_attachment/barrel/hellfire + name = "hellfire emitter upgrade" + desc = "A barrel attachment hooked to the phase emitter, this adjusts the beam's wavelength to carry an extra wave of heat; causing nastier wounds and more damage." + icon_state = "attachment_hellfire" + attachment_overlay_icon_state = "attachment_hellfire" + heat_addition = 50 + power_usage = 20 + slot = GUN_SLOT_BARREL + projectile_override = /obj/projectile/beam/laser/microfusion/hellfire + new_fire_sound = 'modular_ss220/modules/return_prs/microfusion/sound/melt.ogg' + +/* +REPEATER ATTACHMENT + +The gun can fire volleys of shots. +*/ +/obj/item/microfusion_gun_attachment/barrel/repeater + name = "repeating phase emitter upgrade" + desc = "This barrel attachment upgrades the central phase emitter to fire off two beams in quick succession. While offering an increased rate of fire, the heat output and recoil rises too." + icon_state = "attachment_repeater" + attachment_overlay_icon_state = "attachment_repeater" + heat_addition = 40 + slot = GUN_SLOT_BARREL + spread_adjust = 15 + recoil_adjust = 1 + burst_to_add = 1 + delay_to_add = 5 + projectile_override = /obj/projectile/beam/laser/microfusion/repeater + +/* +FOCUSED REPEATER ATTACHMENT + +The gun can fire volleys of shots that penetrate armor. +*/ + +/obj/item/microfusion_gun_attachment/barrel/repeater/penetrator + name = "focused repeating phase emitter upgrade" + desc = "A focused variant of the repeating phase controller. It allows the lasers to penetrate armor however this results in higher power usage." + icon_state = "attachment_penetrator" + attachment_overlay_icon_state = "attachment_penetrator" + power_usage = 20 + slot = GUN_SLOT_BARREL + projectile_override = /obj/projectile/beam/laser/microfusion/penetrator + power_usage = 80 // A price to pay to penetrate through armor + +/* +X-RAY ATTACHMENT + +The gun can fire X-RAY shots. +*/ +/obj/item/microfusion_gun_attachment/barrel/xray + name = "quantum phase inverter array" //Yes quantum makes things sound cooler. + desc = "An experimental barrel attachment that modifies the central phase emitter, causing the wave frequency to shift into X-ray. \ + Capable of penetrating both glass and solid matter with ease; though, unlike a more traditional x-ray laser gun, \ + the bolts don't carry a greater effect against armor, due to going through the target and doing more minimal internal damage. \ + These attachments are power-hungry and overheat easily, though engineers have deemed the costs necessary drawbacks." + icon_state = "attachment_xray" + slot = GUN_SLOT_BARREL + attachment_overlay_icon_state = "attachment_xray" + heat_addition = 90 + power_usage = 50 + new_fire_sound = 'modular_ss220/modules/return_prs/microfusion/sound/incinerate.ogg' + projectile_override = /obj/projectile/beam/laser/microfusion/xray + +/obj/item/microfusion_gun_attachment/barrel/xray/examine(mob/user) + . = ..() + . += span_warning("CAUTION: Phase emitter heats up extremely quickly, sustained fire not recommended!") + +/* +SUPPRESSOR ATTACHMENT + +Makes operators operate operatingly. +*/ + +/obj/item/microfusion_gun_attachment/barrel/suppressor + name = "laser suppressor" // sure it makes no sense but its cool + desc = "An experimental barrel attachment that dampens the soundwave of the emitter, making the laser shots far more stealthy. Best paired with black camo." + icon_state = "attachment_suppressor" + slot = GUN_SLOT_BARREL + attachment_overlay_icon_state = "attachment_suppressor" + +/obj/item/microfusion_gun_attachment/barrel/suppressor/run_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + microfusion_gun.suppressed = TRUE + +/obj/item/microfusion_gun_attachment/barrel/suppressor/remove_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + microfusion_gun.suppressed = null + +/* +BIKEHORN ATTACHMENT + +HONK!! Does subpar stamina damage but slips people. +*/ + +/obj/item/microfusion_gun_attachment/barrel/honk + name = "bananium phase emitter upgrade" + desc = "An honksperimental barrel attachment that makes your lasers funnier." + icon_state = "attachment_honk" + attachment_overlay_icon_state = "attachment_honk" + delay_to_add = 2 SECONDS + new_fire_sound = 'sound/items/bikehorn.ogg' + projectile_override = /obj/projectile/beam/laser/microfusion/honk + +/obj/item/microfusion_gun_attachment/barrel/honk/examine(mob/user) + . = ..() + . += span_warning("CAUTION: The gun you are about to handle is extremely funny!") + +/* +LANCE ATTACHMENT + +The gun fires fast heavy lasers but takes a long time to fire. +*/ +/obj/item/microfusion_gun_attachment/barrel/lance + name = "lance induction carriage" + desc = "A modification kit that turns the MCR into a designated marksman rifle. Fired beams boast greater firepower and speed, \ + but the enhanced throughput is very draining on the cell, as well as generating an extreme amount of heat. \ + Users are advised to make their shots count." + icon = 'icons/obj/weapons/improvised.dmi' + icon_state = "kitsuitcase" + incompatible_attachments = list(/obj/item/microfusion_gun_attachment/camo, /obj/item/microfusion_gun_attachment/camo/nanotrasen, /obj/item/microfusion_gun_attachment/camo/honk) + attachment_overlay_icon_state = "attachment_lance" + heat_addition = 150 + power_usage = 100 + delay_to_add = 2.5 SECONDS + new_fire_sound = 'sound/items/weapons/lasercannonfire.ogg' + projectile_override = /obj/projectile/beam/laser/microfusion/lance + +/obj/item/microfusion_gun_attachment/barrel/lance/examine(mob/user) + . = ..() + . += span_warning("CAUTION: Phase emitter heats up extremely quickly!") + +/* +PULSE ATTACHMENT + +The gun can fire PULSE shots. +*/ +/obj/item/microfusion_gun_attachment/barrel/pulse + name = "pulse induction carriage" + desc = "A cutting-edge bluespace capacitor array and distributing lens overhaul produced in laboratories by Nanotrasen scientists that allow microfusion rifles to fire military-grade pulse rounds. Comes equipped with cyclic cooling to ensure maximum combat efficiency, a munitions counter, and an extra-secure drop cage for the power source. May shorten trigger lifetime." + icon_state = "attachment_pulse" + attachment_overlay_icon_state = "attachment_pulse" + heat_addition = 150 + power_usage = 50 + projectile_override = /obj/projectile/beam/pulse + burst_to_add = 2 + delay_to_add = 2 + +/obj/item/microfusion_gun_attachment/barrel/pulse/examine(mob/user) + . = ..() + . += span_warning("CAUTION: Phase emitter heats up extremely quickly, sustained fire not recommended!") + +/* +GRIP ATTACHMENT + +Greatly reduces recoil and spread. +*/ +/obj/item/microfusion_gun_attachment/grip + name = "grip attachment" + desc = "A simple grip that increases accuracy." + icon_state = "attachment_grip" + attachment_overlay_icon_state = "attachment_grip" + slot = GUN_SLOT_UNDERBARREL + spread_adjust = -10 + recoil_adjust = -1 + +/* +HEATSINK ATTACHMENT + +"Greatly increases the phase emitter cooling rate." +*/ +/obj/item/microfusion_gun_attachment/heatsink + name = "phase emitter heatsink" + desc = "Greatly increases the phase emitter cooling rate." + icon_state = "attachment_heatsink" + attachment_overlay_icon_state = "attachment_heatsink" + slot = GUN_SLOT_UNDERBARREL + /// Cooling bonus. + var/cooling_rate_increase = 50 + +/obj/item/microfusion_gun_attachment/heatsink/run_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + microfusion_gun.heat_dissipation_bonus += cooling_rate_increase + +/obj/item/microfusion_gun_attachment/heatsink/remove_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + microfusion_gun.heat_dissipation_bonus -= cooling_rate_increase + +/* +RGB ATTACHMENT + +Enables you to change the light color of the laser. +*/ +/obj/item/microfusion_gun_attachment/rgb + name = "phase emitter spectrograph" + desc = "An attachment hooked up to the phase emitter, allowing the user to adjust the color of the beam outputted. This has seen widespread use by various factions capable of getting their hands on microfusion weapons, whether as a calling card or simply for entertainment." + icon_state = "attachment_rgb" + attachment_overlay_icon_state = "attachment_rgb" + /// What color are we changing the sprite to? + var/color_to_apply = COLOR_MOSTLY_PURE_RED + +/obj/item/microfusion_gun_attachment/rgb/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) + . = ..() + chambered?.loaded_projectile.icon_state = "laser_greyscale" + chambered?.loaded_projectile.color = color_to_apply + chambered?.loaded_projectile.light_color = color_to_apply + +/obj/item/microfusion_gun_attachment/rgb/proc/select_color(mob/living/user) + var/new_color = input(user, "Please select your new projectile color", "Laser color", color_to_apply) as null|color + + if(!new_color) + return + + color_to_apply = new_color + +/obj/item/microfusion_gun_attachment/rgb/attack_self(mob/user, modifiers) + . = ..() + select_color(user) + +/obj/item/microfusion_gun_attachment/rgb/get_modify_data() + return list(list("title" = "Change Color", "icon" = "wrench", "reference" = "color", "color" = "blue")) + +/obj/item/microfusion_gun_attachment/rgb/run_modify_data(params, mob/living/user) + if(params == "color") + select_color(user) + +/* +RAIL ATTACHMENT + +Allows for flashlights bayonets and adds 1 slot to equipment. +*/ +/obj/item/microfusion_gun_attachment/rail + name = "gun rail attachment" + desc = "A simple set of rails that attaches to weapon hardpoints. Allows for 3 more attachment slots and the instillation of a flashlight or bayonet." + icon_state = "attachment_rail" + attachment_overlay_icon_state = "attachment_rail" + slot = GUN_SLOT_RAIL + +/obj/item/microfusion_gun_attachment/rail/run_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + microfusion_gun.AddComponent(/datum/component/seclite_attachable, \ + light_overlay_icon = 'modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun40x32.dmi', \ + light_overlay = "flight") + microfusion_gun = TRUE + +/obj/item/microfusion_gun_attachment/rail/remove_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + var/component_to_delete = microfusion_gun.GetComponent(/datum/component/seclite_attachable) + if(component_to_delete) + qdel(component_to_delete) +// microfusion_gun = initial(microfusion_gun) + if(microfusion_gun) + microfusion_gun.forceMove(get_turf(microfusion_gun)) + microfusion_gun = null + microfusion_gun.update_appearance() + microfusion_gun.remove_all_attachments() + +/* +SCOPE ATTACHMENT + +Allows for a scope to be attached to the gun. +*/ + +/obj/item/microfusion_gun_attachment/scope + name = "scope attachment" + desc = "A simple telescopic scope, allowing for long-ranged use of the weapon. However, these do not provide any night vision." + icon_state = "attachment_scope" + attachment_overlay_icon_state = "attachment_scope" + slot = GUN_SLOT_RAIL + +/obj/item/microfusion_gun_attachment/scope/run_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + if(microfusion_gun.GetComponent(/datum/component/scope)) + return + microfusion_gun.AddComponent(/datum/component/scope, range_modifier = 1.5) + +/obj/item/microfusion_gun_attachment/scope/remove_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + var/datum/component_datum = microfusion_gun.GetComponent(/datum/component/scope) + if(component_datum) + qdel(component_datum) + +/* +BLACK CAMO ATTACHMENT + +Allows for a black camo to be applied to the gun. +All tactical, all the time. +*/ + +/obj/item/microfusion_gun_attachment/camo + name = "black camo microfusion frame" + desc = "A frame modification for the MCR-01, changing the color of the gun to black." + slot = GUN_SLOT_CAMO + icon_state = "attachment_black" + attachment_overlay_icon_state = "attachment_black" + +/* +HONK CAMO ATTACHMENT + +Allows for a clown camo to be applied to the gun. +HONK!! +*/ +/obj/item/microfusion_gun_attachment/camo/honk + name = "bananium microfusion frame" + desc = "A frame modification for the MCR-01, plating the gun in bananium." + icon_state = "attachment_honk_camo" + attachment_overlay_icon_state = "attachment_honk_camo" + +/* +SYNDIE CAMO ATTACHMENT + +Allows for a blood red camo to be applied to the gun. +Totally not property of a hostile corporation. +*/ +/obj/item/microfusion_gun_attachment/camo/syndicate + name = "blood red camo microfusion frame" + desc = "A frame modification for the MCR-01, changing the color of the gun to a slick blood red." + icon_state = "attachment_syndi_camo" + attachment_overlay_icon_state = "attachment_syndi_camo" + +/* +NANOTRASEN CAMO ATTACHMENT + +Allows for an official blue camo to be applied to the gun. +Hail Nanotrasen. +*/ +/obj/item/microfusion_gun_attachment/camo/nanotrasen + name = "\improper Nanotrasen brand microfusion frame" + desc = "A frame modification for the MCR-01, changing the color of the gun to blue." + icon_state = "attachment_nt_camo" + attachment_overlay_icon_state = "attachment_nt_camo" + + +/* +UNDERCHARGER ATTACHMENT + +Massively decreases the output beam of the phase emitter. +Converts shots to STAMINA damage. +*/ +/obj/item/microfusion_gun_attachment/undercharger + name = "phase emitter undercharger" + desc = "An underbarrel system hooked to the phase emitter, this allows the weapon to also fire an electron bolt, producing a short-lived underpowered electric charge capable of stunning targets. These shots are less demanding on the weapon, leading to an increase in cooling rate." + icon_state = "attachment_undercharger" + attachment_overlay_icon_state = "attachment_undercharger" + incompatible_attachments = list(/obj/item/microfusion_gun_attachment/barrel/scatter, /obj/item/microfusion_gun_attachment/barrel/scatter/max, /obj/item/microfusion_gun_attachment/camo/honk) + slot = GUN_SLOT_UNDERBARREL + var/toggle = FALSE + var/cooling_rate_increase = 10 + /// The projectile we override + var/projectile_override = /obj/projectile/beam/microfusion_disabler + +/obj/item/microfusion_gun_attachment/undercharger/get_modify_data() + return list(list("title" = "Turn [toggle ? "OFF" : "ON"]", "icon" = "power-off", "color" = "[toggle ? "red" : "green"]", "reference" = "toggle_on_off")) + +/obj/item/microfusion_gun_attachment/undercharger/run_modify_data(params, mob/living/user, obj/item/gun/microfusion/microfusion_gun) + if(params == "toggle_on_off") + toggle(microfusion_gun, user) + +/obj/item/microfusion_gun_attachment/undercharger/proc/toggle(obj/item/gun/microfusion/microfusion_gun, mob/user) + if(toggle) + toggle = FALSE + microfusion_gun.heat_dissipation_bonus += cooling_rate_increase + else + toggle = TRUE + microfusion_gun.heat_dissipation_bonus -= cooling_rate_increase + + if(user) + to_chat(user, span_notice("You toggle [src] [toggle ? "ON" : "OFF"].")) + +/obj/item/microfusion_gun_attachment/undercharger/run_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + microfusion_gun.fire_sound = 'modular_ss220/modules/return_prs/microfusion/sound/burn.ogg' + +/obj/item/microfusion_gun_attachment/undercharger/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) + . = ..() + if(toggle) + chambered.loaded_projectile = new projectile_override + +/obj/item/microfusion_gun_attachment/undercharger/remove_attachment(obj/item/gun/microfusion/microfusion_gun) + . = ..() + if(toggle) + toggle = FALSE + microfusion_gun.heat_dissipation_bonus += cooling_rate_increase + microfusion_gun.fire_sound = microfusion_gun.chambered?.fire_sound diff --git a/modular_ss220/modules/return_prs/microfusion/code/microfusion_techweb.dm b/modular_ss220/modules/return_prs/microfusion/code/microfusion_techweb.dm new file mode 100644 index 00000000000000..d5166fcaf5e101 --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/microfusion_techweb.dm @@ -0,0 +1,118 @@ +/datum/techweb_node/basic_microfusion + id = TECHWEB_NODE_BASIC_MICROFUSION + starting_node = TRUE + display_name = "Basic Microfusion Technology" + description = "Basic microfusion technology allowing for basic microfusion designs." + design_ids = list( + "basic_microfusion_cell", + ) + +//Enhanced microfusion +/datum/techweb_node/enhanced_microfusion + id = TECHWEB_NODE_ENHANCED_MICROFUSION + display_name = "Enhanced Microfusion Technology" + description = "Enhanced microfusion technology allowing for upgraded basic microfusion!" + prereq_ids = list( + TECHWEB_NODE_BASIC_MICROFUSION, + TECHWEB_NODE_ENERGY_MANIPULATION, + TECHWEB_NODE_PARTS, + ) + design_ids = list( + "enhanced_microfusion_cell", + "enhanced_microfusion_phase_emitter", + "microfusion_gun_attachment_black_camo", + "microfusion_gun_attachment_nt_camo", + "microfusion_gun_attachment_heatsink", + "microfusion_gun_attachment_rgb", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +//Advanced microfusion +/datum/techweb_node/advanced_microfusion + id = TECHWEB_NODE_ADVANCED_MICROFUSION + display_name = "Advanced Microfusion Technology" + description = "Advanced microfusion technology allowing for advanced microfusion!" + prereq_ids = list( + TECHWEB_NODE_ENHANCED_MICROFUSION, + TECHWEB_NODE_PARTS_ADV, + ) + design_ids = list( + "advanced_microfusion_cell", + "microfusion_cell_attachment_overcapacity", + "microfusion_cell_attachment_stabiliser", + "microfusion_gun_attachment_scatter", + "microfusion_gun_attachment_hellfire", + "advanced_microfusion_phase_emitter", + "microfusion_gun_attachment_lance", + "microfusion_gun_attachment_grip", + "microfusion_gun_attachment_rail", + "microfusion_gun_attachment_scope", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + + +// Bluespace microfusion +/datum/techweb_node/bluespace_microfusion + id = TECHWEB_NODE_BLUESPACE_MICROFUSION + display_name = "Bluespace Microfusion Technology" + description = "Bluespace tinkering plus microfusion technology!" + prereq_ids = list( + TECHWEB_NODE_ADVANCED_MICROFUSION, + TECHWEB_NODE_PARTS_BLUESPACE, + TECHWEB_NODE_BEAM_WEAPONS, + TECHWEB_NODE_ELECTRIC_WEAPONS, + TECHWEB_NODE_FUSION, + ) + design_ids = list( + "bluespace_microfusion_cell", + "microfusion_gun_attachment_repeater", + "bluespace_microfusion_phase_emitter", + "microfusion_cell_attachment_selfcharging", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +// Quantum microfusion +/datum/techweb_node/quantum_microfusion + id = TECHWEB_NODE_QUANTUM_MICROFUSION + display_name = "Quantum Microfusion Technology" + description = "Bleeding edge microfusion tech, making use of the latest in materials and components, bluespace or otherwise." + prereq_ids = list( + TECHWEB_NODE_BLUESPACE_MICROFUSION, + TECHWEB_NODE_ALIENTECH, + ) + design_ids = list( + "microfusion_gun_attachment_xray", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + +// Warcrime microfusion +/datum/techweb_node/illegal_microfusion + id = TECHWEB_NODE_ILLEGAL_MICROFUSION + display_name = "Illegal Microfusion Technology" + description = "Microfusion tech that has previously been banned by SolFed. I love the smell of plasma in the mornings." + prereq_ids = list( + TECHWEB_NODE_ADVANCED_MICROFUSION, + TECHWEB_NODE_SYNDICATE_BASIC, + ) + design_ids = list( + "microfusion_gun_attachment_superheat", + "microfusion_gun_attachment_scattermax", + "microfusion_gun_attachment_penetrator", + "microfusion_gun_attachment_syndi_camo", + "microfusion_gun_attachment_suppressor", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +// clown microfusion. | This exists to not make this non modular +/datum/techweb_node/clown_microfusion + id = TECHWEB_NODE_CLOWN_MICROFUSION + display_name = "Honkicron Clownery Systems Technology" + description = "Microfusion tech that is proprietary tech of Honkicron Clownery Systems. HONK!!" + prereq_ids = list( + TECHWEB_NODE_BASIC_MICROFUSION, + ) + design_ids = list( + "microfusion_gun_attachment_honk", + "microfusion_gun_attachment_honk_camo", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) //Its normally supposed to be in clown tech so diff --git a/modular_ss220/modules/return_prs/microfusion/code/phase_emitter.dm b/modular_ss220/modules/return_prs/microfusion/code/phase_emitter.dm new file mode 100644 index 00000000000000..039c208100df97 --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/phase_emitter.dm @@ -0,0 +1,257 @@ +/* +* PHASE EMITTERS +*/ + +/// The error message returned when the phase emitter is processed but damaged. +#define PHASE_FAILURE_DAMAGED "PHASE EMITTER: Emitter damaged!" +/// The error message returned when the phase emitter has reached it's htermal throttle. +#define PHASE_FAILURE_THROTTLE "PHASE EMITTER: Thermal throttle active!" + +/// The heat dissipation bonus of an emitter being in space! +#define PHASE_HEAT_DISSIPATION_BONUS_SPACE 30 +/// The heat dissipation bonus of an emitter being in air! +#define PHASE_HEAT_DISSIPATION_BONUS_AIR 10 + +/* +* Basically the heart of the gun, can be upgraded. +*/ +/obj/item/microfusion_phase_emitter + name = "basic microfusion phase emitter" + desc = "A first-generation phase emitter, this is the core of the weapon and the source of the beam." + icon = 'modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun_attachments.dmi' + icon_state = "phase_emitter" + base_icon_state = "phase_emitter" + w_class = WEIGHT_CLASS_NORMAL + /// Max heat before it breaks + var/max_heat = 2000 + /// Current heat level + var/current_heat = 0 + /// Thermal throttle percentage + var/throttle_percentage = 80 + /// How much heat it dissipates passively + var/heat_dissipation_per_tick = 30 + /// Active cooling system + var/cooling_system = FALSE + /// How quickly does the active cooling system cool - 1/1 ratio of cell charge to cooling point + var/cooling_system_rate = 30 + /// What is our dynamic integrity? + var/integrity = 100 + /// Are we fucked? + var/damaged = FALSE + /// Hard ref to the gun. + var/obj/item/gun/microfusion/parent_gun + /// Are we "hacked" thus allowing overclocking? + var/hacked = FALSE + /// The fire delay this emitter adds to the gun. + var/fire_delay = 0 + /// The sound playback speed, used for overheating sound effects on fire. + var/sound_freq = 0 + + +/obj/item/microfusion_phase_emitter/Initialize(mapload) + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/microfusion_phase_emitter/Destroy() + parent_gun = null + return ..() + +/obj/item/microfusion_phase_emitter/process(seconds_per_tick) + if(current_heat == 0) + return + var/calculated_heat_dissipation_per_tick = heat_dissipation_per_tick + if(isspaceturf(get_turf(src))) + calculated_heat_dissipation_per_tick += PHASE_HEAT_DISSIPATION_BONUS_SPACE // Passive cooling in space boost! + if(parent_gun) + calculated_heat_dissipation_per_tick += parent_gun.heat_dissipation_bonus + else + calculated_heat_dissipation_per_tick += PHASE_HEAT_DISSIPATION_BONUS_AIR //We get some passive cooling from being out of the gun. + if(cooling_system && parent_gun && parent_gun.cell && parent_gun.cell.use(cooling_system_rate)) + calculated_heat_dissipation_per_tick += cooling_system_rate + + current_heat = clamp(current_heat - (calculated_heat_dissipation_per_tick * seconds_per_tick) * 0.5, 0, INFINITY) + if(current_heat > max_heat) + integrity = integrity - current_heat / 1000 * seconds_per_tick * 0.5 + + process_fire_delay_and_sound() + + if(integrity <= 0) + kill() + update_appearance() + parent_gun?.update_appearance() + +/obj/item/microfusion_phase_emitter/proc/toggle_cooling_system(mob/user) + if(!parent_gun) + return + if(!cooling_system && !parent_gun.cell) + if(user) + to_chat(user, span_warning("You need a cell to turn on the cooling system.")) + return + + if(cooling_system) + cooling_system = FALSE + else + cooling_system = TRUE + + if(user) + to_chat(user, span_notice("You toggle the cooling system [cooling_system ? "ON" : "OFF"].")) + +/obj/item/microfusion_phase_emitter/multitool_act(mob/living/user, obj/item/tool) + if(hacked) + to_chat(user, span_warning("[src] is already unlocked!")) + return + to_chat(user, span_notice("You begin to override the thermal overclock safety...")) + if(do_after(user, 5 SECONDS, src)) + hacked = TRUE + to_chat(user, span_notice("You override the thermal overclock safety.")) + +/obj/item/microfusion_phase_emitter/proc/set_overclock(mob/living/user) + if(!hacked) + return + var/new_throttle = clamp(input(user, "Please input a new thermal throttle percentage(0-300):", "Phase Emitter Overclock") as null|num, 1, 300) + + to_chat(user, span_notice("Thermal throttle percent set to: [new_throttle].")) + + if(new_throttle > 100) + to_chat(user, span_danger("WARNING: You have input a throttle percentage of more than 100, this may cause emitter damage.")) + + throttle_percentage = new_throttle + +/obj/item/microfusion_phase_emitter/update_icon_state() + . = ..() + + if(damaged) + icon_state = "[base_icon_state]_damaged" + else + switch(get_heat_percent()) + if(40 to 69) + icon_state = "[base_icon_state]_hot" + if(70 to INFINITY) + icon_state = "[base_icon_state]_critical" + else + icon_state = base_icon_state + +/obj/item/microfusion_phase_emitter/proc/process_fire_delay_and_sound() + var/fire_delay_to_add = 0 + if(integrity < 100) + fire_delay_to_add = fire_delay_to_add + (100 - integrity) / 10 + + if(current_heat > max_heat) + fire_delay_to_add = fire_delay_to_add + (current_heat - max_heat) / 100 //Holy shit this emitter is tanking + + fire_delay = round(fire_delay_to_add, 1.45) + +/obj/item/microfusion_phase_emitter/proc/get_heat_icon_state() + switch(get_heat_percent()) + if(40 to 69) + return "hot" + if(70 to INFINITY) + return "critical" + else + return "normal" + +/obj/item/microfusion_phase_emitter/examine(mob/user) + . = ..() + if(damaged) + . += span_danger("It is damaged beyond repair.") + else + . += span_notice("It has a thermal rating of: [max_heat] C") + . += span_notice("It dissipates heat at: [heat_dissipation_per_tick] C") + . += span_notice("Heat capacity: [get_heat_percent()]%") + . += span_notice("Integrity: [integrity]%") + . += span_notice("Thermal throttle: [throttle_percentage]%") + . += span_notice("Cooling system: [cooling_system ? "enabled, cooling at [cooling_system_rate] C/s" : "disabled"].") + +/obj/item/microfusion_phase_emitter/proc/get_heat_percent() + return round(current_heat / max_heat * 100) + +/obj/item/microfusion_phase_emitter/proc/check_emitter() + if(damaged) + return PHASE_FAILURE_DAMAGED + if(get_heat_percent() >= throttle_percentage) + return PHASE_FAILURE_THROTTLE + return SHOT_SUCCESS + +/obj/item/microfusion_phase_emitter/proc/add_heat(heat_to_add) + current_heat += heat_to_add + update_appearance() + +/obj/item/microfusion_phase_emitter/proc/kill() + damaged = TRUE + name = "damaged [name]" + playsound(src, 'modular_ss220/modules/return_prs/microfusion/sound/overheat.ogg', 70) + say("ERROR: Integrity failure!") + STOP_PROCESSING(SSobj, src) + +/datum/crafting_recipe/makeshift/microfusion_phase_emitter + name = "Makeshift Microfusion Phase Emitter" + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_WELDER, TOOL_MULTITOOL, TOOL_CROWBAR) + result = /obj/item/microfusion_phase_emitter/makeshift + reqs = list( + /obj/item/stack/rods = 2, + /obj/item/stack/sheet/iron = 2, + /obj/item/shard = 2, + /obj/item/stack/cable_coil = 2, + ) + time = 20 SECONDS + category = CAT_MISC + +/obj/item/microfusion_phase_emitter/makeshift + name = "makeshift microfusion phase emitter" + desc = "An... Apparatus, While the effects on enemy combatants may be dubious, it will certainly do incredible damage to the gun's warranty. What the hell were you thinking when you came up with this?" + max_heat = 400 + throttle_percentage = 100 + heat_dissipation_per_tick = 10 + cooling_system_rate = 15 + integrity = 50 + color = "#503702" + +/obj/item/microfusion_phase_emitter/enhanced + name = "enhanced microfusion phase emitter" + desc = "A second-generation phase emitter, this one is made of more robust materials which allow for a higher capacity for heat, a faster dissipation and cooling of it, and more capacity for thermal throttling." + max_heat = 2500 + throttle_percentage = 85 + heat_dissipation_per_tick = 40 + cooling_system_rate = 40 + integrity = 120 + color = "#ffffcc" + +/obj/item/microfusion_phase_emitter/advanced + name = "advanced microfusion phase emitter" + desc = "A third-generation phase emitter, boasting a high capacity for heat, greater dissipation and cooling, and is built using higher-grade materials for more durability." + max_heat = 3000 + throttle_percentage = 90 + heat_dissipation_per_tick = 50 + cooling_system_rate = 50 + integrity = 150 + color = "#99ffcc" + +/obj/item/microfusion_phase_emitter/bluespace + name = "bluespace microfusion phase emitter" + desc = "A fourth-generation phase emitter, utilizing a bluespace medium to store and manage heat, allowing for much cooler temperatures than realspace would allow. This is made of nothing but the latest materials, leading to the highest durability of any phase emitter on the market." + max_heat = 3500 + throttle_percentage = 95 + heat_dissipation_per_tick = 60 + cooling_system_rate = 60 + integrity = 200 + color = "#66ccff" + +/obj/item/microfusion_phase_emitter/nanocarbon + name = "nanocarbon microfusion phase emitter" + desc = "An experimental phase emitter, made of nanocarbon, which is the most durable material on the market. It is capable of storing and managing heat, and is capable of cooling at a much higher rate than the other phase emitters." + max_heat = 15000 + throttle_percentage = 95 + heat_dissipation_per_tick = 130 + cooling_system_rate = 60 + integrity = 500 + color = "#6966ff" + + +#undef PHASE_FAILURE_DAMAGED +#undef PHASE_FAILURE_THROTTLE + +#undef PHASE_HEAT_DISSIPATION_BONUS_SPACE +#undef PHASE_HEAT_DISSIPATION_BONUS_AIR + +#undef SHOT_SUCCESS +#undef SHOT_FAILURE_NO_EMITTER diff --git a/modular_ss220/modules/return_prs/microfusion/code/projectiles.dm b/modular_ss220/modules/return_prs/microfusion/code/projectiles.dm new file mode 100644 index 00000000000000..41c47cd2b09fab --- /dev/null +++ b/modular_ss220/modules/return_prs/microfusion/code/projectiles.dm @@ -0,0 +1,103 @@ +/obj/item/ammo_casing + ///What volume should the sound play at? + var/fire_sound_volume = 50 + +/obj/item/ammo_casing/energy/laser/microfusion + name = "microfusion energy lens" + projectile_type = /obj/projectile/beam/laser/microfusion + e_cost = LASER_SHOTS(12, STANDARD_CELL_CHARGE) + select_name = "laser" + fire_sound = 'modular_ss220/modules/return_prs/microfusion/sound/laser_1.ogg' + fire_sound_volume = 100 + +/obj/item/ammo_casing/proc/refresh_shot() + loaded_projectile = new projectile_type(src, src) + +/obj/projectile/beam/laser/microfusion + name = "microfusion laser" + icon = 'modular_ss220/modules/return_prs/microfusion/icons/projectiles.dmi' + damage = 25 + +/obj/projectile/beam/microfusion_disabler + name = "microfusion disabler laser" + icon = 'modular_ss220/modules/return_prs/microfusion/icons/projectiles.dmi' + icon_state = "disabler" + damage = 41 + damage_type = STAMINA + armor_flag = ENERGY + hitsound = 'sound/items/weapons/tap.ogg' + eyeblur = 0 + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + light_color = LIGHT_COLOR_BLUE + tracer_type = /obj/effect/projectile/tracer/disabler + muzzle_type = /obj/effect/projectile/muzzle/disabler + impact_type = /obj/effect/projectile/impact/disabler + +/obj/projectile/beam/laser/microfusion/superheated + name = "superheated microfusion laser" + icon_state = "laser_greyscale" + damage = 20 //Trading damage for fire stacks + color = LIGHT_COLOR_FIRE + light_color = LIGHT_COLOR_FIRE + +/obj/projectile/beam/laser/microfusion/superheated/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(isliving(target)) + var/mob/living/living = target + living.adjust_fire_stacks(2) + living.ignite_mob() + +/obj/projectile/beam/laser/microfusion/hellfire + name = "hellfire microfusion laser" + icon_state = "laser_greyscale" + wound_bonus = 0 + damage = 25 // Basically a hellfire beam + speed = 0.6 + color = LIGHT_COLOR_FLARE + light_color = LIGHT_COLOR_FLARE + +/obj/projectile/beam/laser/microfusion/scatter + name = "scatter microfusion laser" + damage = 30 // This damage is split into pellet amount + +/obj/projectile/beam/laser/microfusion/scatter/max + name = "scatter microfusion laser" + damage = 45 // This damage is split into pellet amount + +/obj/projectile/beam/laser/microfusion/repeater + damage = 12.5 + +/obj/projectile/beam/laser/microfusion/penetrator + name = "focused microfusion laser" + damage = 20 + armour_penetration = 50 + +/obj/projectile/beam/laser/microfusion/lance + name = "lance microfusion laser" + damage = 50 // We're turning the gun into a heavylaser + tracer_type = /obj/effect/projectile/tracer/heavy_laser + muzzle_type = /obj/effect/projectile/muzzle/heavy_laser + impact_type = /obj/effect/projectile/impact/heavy_laser + speed = 0.4 + +/obj/projectile/beam/laser/microfusion/xray + name = "x-ray microfusion laser" + icon_state = "laser_greyscale" + color = COLOR_GREEN + light_color = COLOR_GREEN + projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS + +/obj/projectile/beam/laser/microfusion/honk + name = "funny microfusion laser" + icon_state = "laser_greyscale" + color = COLOR_VIVID_YELLOW + light_color = COLOR_VIVID_YELLOW + damage_type = STAMINA + damage = 25 + armor_flag = ENERGY + hitsound = 'sound/misc/slip.ogg' + impact_type = /obj/effect/projectile/impact/disabler + +/obj/projectile/beam/laser/microfusion/honk/Initialize(mapload) + . = ..() + AddComponent(/datum/component/slippery, 20) diff --git a/modular_ss220/modules/return_prs/microfusion/icons/guns_lefthand.dmi b/modular_ss220/modules/return_prs/microfusion/icons/guns_lefthand.dmi new file mode 100644 index 00000000000000..6690df96ac0be9 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/icons/guns_lefthand.dmi differ diff --git a/modular_ss220/modules/return_prs/microfusion/icons/guns_righthand.dmi b/modular_ss220/modules/return_prs/microfusion/icons/guns_righthand.dmi new file mode 100644 index 00000000000000..47f36b05d48dd8 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/icons/guns_righthand.dmi differ diff --git a/modular_ss220/modules/return_prs/microfusion/icons/microfusion_cells.dmi b/modular_ss220/modules/return_prs/microfusion/icons/microfusion_cells.dmi new file mode 100644 index 00000000000000..10d19a08544dba Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/icons/microfusion_cells.dmi differ diff --git a/modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun40x32.dmi b/modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun40x32.dmi new file mode 100644 index 00000000000000..792aa8327d1924 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun40x32.dmi differ diff --git a/modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun_attachments.dmi b/modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun_attachments.dmi new file mode 100644 index 00000000000000..82ea78ddeb1cad Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/icons/microfusion_gun_attachments.dmi differ diff --git a/modular_ss220/modules/return_prs/microfusion/icons/projectiles.dmi b/modular_ss220/modules/return_prs/microfusion/icons/projectiles.dmi new file mode 100644 index 00000000000000..c3ee49a1e79c33 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/icons/projectiles.dmi differ diff --git a/modular_ss220/modules/return_prs/microfusion/sound/burn.ogg b/modular_ss220/modules/return_prs/microfusion/sound/burn.ogg new file mode 100644 index 00000000000000..ea37d14ccc12f9 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/sound/burn.ogg differ diff --git a/modular_ss220/modules/return_prs/microfusion/sound/incinerate.ogg b/modular_ss220/modules/return_prs/microfusion/sound/incinerate.ogg new file mode 100644 index 00000000000000..38f7846d7abcb2 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/sound/incinerate.ogg differ diff --git a/modular_ss220/modules/return_prs/microfusion/sound/laser_1.ogg b/modular_ss220/modules/return_prs/microfusion/sound/laser_1.ogg new file mode 100644 index 00000000000000..285f74416d93cd Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/sound/laser_1.ogg differ diff --git a/modular_ss220/modules/return_prs/microfusion/sound/mag_insert.ogg b/modular_ss220/modules/return_prs/microfusion/sound/mag_insert.ogg new file mode 100644 index 00000000000000..53460ebf14dde4 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/sound/mag_insert.ogg differ diff --git a/modular_ss220/modules/return_prs/microfusion/sound/melt.ogg b/modular_ss220/modules/return_prs/microfusion/sound/melt.ogg new file mode 100644 index 00000000000000..45a847ad35f841 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/sound/melt.ogg differ diff --git a/modular_ss220/modules/return_prs/microfusion/sound/overheat.ogg b/modular_ss220/modules/return_prs/microfusion/sound/overheat.ogg new file mode 100644 index 00000000000000..3585471bf9b958 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/sound/overheat.ogg differ diff --git a/modular_ss220/modules/return_prs/microfusion/sound/vaporize.ogg b/modular_ss220/modules/return_prs/microfusion/sound/vaporize.ogg new file mode 100644 index 00000000000000..0ba30857973373 Binary files /dev/null and b/modular_ss220/modules/return_prs/microfusion/sound/vaporize.ogg differ diff --git a/modular_ss220/modules/return_prs/novaya_ert/code/voskhod.dm b/modular_ss220/modules/return_prs/novaya_ert/code/voskhod.dm new file mode 100644 index 00000000000000..ff21bb4d30c1b3 --- /dev/null +++ b/modular_ss220/modules/return_prs/novaya_ert/code/voskhod.dm @@ -0,0 +1,172 @@ +#define NRI_POWERUSE_HIT 100 +#define NRI_POWERUSE_HEAL 150 + +#define NRI_COOLDOWN_HEAL (10 SECONDS) +#define NRI_COOLDOWN_RADS (20 SECONDS) +#define NRI_COOLDOWN_ACID (20 SECONDS) + +#define NRI_HEAL_AMOUNT 10 +#define NRI_BLOOD_REPLENISHMENT 20 + +/obj/item/clothing/suit/space/hev_suit/nri + name = "\improper VOSKHOD powered combat armor" + desc = "A hybrid set of space-resistant armor built on a modified mass-produced Nomex-Aerogel flight suit, polyurea coated durathread-lined light plasteel plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." + icon = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/hevsuiteq.dmi' + worn_icon = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/hevsuit.dmi' + worn_icon_digi = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/hevsuit_digi.dmi' + worn_icon_teshari = 'modular_ss220/modules/return_prs/novaya_ert/icons/tesha.dmi' + icon_state = "nri_soldier" + armor_type = /datum/armor/hev_suit_nri + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL + allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) + cell = /obj/item/stock_parts/power_store/cell/bluespace + actions_types = list(/datum/action/item_action/hev_toggle/nri, /datum/action/item_action/hev_toggle_notifs/nri, /datum/action/item_action/toggle_spacesuit) + resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF + clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT + clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED) + + activation_song = null //No nice song. + radio_key = /obj/item/encryptionkey/headset_cent + radio_channel = RADIO_CHANNEL_CENTCOM + + armor_unpowered = /datum/armor/hev_suit_nri + armor_powered = /datum/armor/hev_suit_nri/powered + heal_amount = NRI_HEAL_AMOUNT + blood_replenishment = NRI_BLOOD_REPLENISHMENT + health_static_cooldown = NRI_COOLDOWN_HEAL + rads_static_cooldown = NRI_COOLDOWN_RADS + acid_static_cooldown = NRI_COOLDOWN_ACID + suit_name = "VOSKHOD" + first_use = FALSE //No nice song. + + logon_sound = null + armor_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/02_powerarmor_on.ogg' + atmospherics_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/03_atmospherics_on.ogg' + vitalsigns_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/04_vitalsigns_on.ogg' + automedic_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/05_automedic_on.ogg' + weaponselect_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/06_weaponselect_on.ogg' + munitions_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/07_munitionview_on.ogg' + communications_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/08_communications_on.ogg' + safe_day_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/09_safe_day.ogg' + + batt_50_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/power_level_is_fifty.ogg' + batt_40_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/power_level_is_fourty.ogg' + batt_30_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/power_level_is_thirty.ogg' + batt_20_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/power_level_is_twenty.ogg' + batt_10_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/power_level_is_ten.ogg' + + near_death_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/near_death.ogg' + health_critical_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/health_critical.ogg' + health_dropping_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/health_dropping2.ogg' + + blood_loss_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/blood_loss.ogg' + blood_toxins_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/blood_toxins.ogg' + biohazard_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/biohazard_detected.ogg' + chemical_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/chemical_detected.ogg' + radiation_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/radiation_detected.ogg' + + minor_fracture_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/minor_fracture.ogg' + major_fracture_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/major_fracture.ogg' + minor_lacerations_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/minor_lacerations.ogg' + major_lacerations_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/major_lacerations.ogg' + + morphine_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/morphine_shot.ogg' + wound_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/wound_sterilized.ogg' + antitoxin_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/antitoxin_shot.ogg' + antidote_sound = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/sound/pcv/antidote_shot.ogg' + + + +/datum/armor/hev_suit_nri + melee = 25 + bullet = 25 + laser = 25 + energy = 25 + bomb = 25 + bio = 25 + fire = 30 + acid = 30 + wound = 30 + consume = 10 + +/datum/armor/hev_suit_nri/powered + melee = 40 + bullet = 50 + laser = 30 + energy = 40 + bomb = 60 + bio = 75 + fire = 50 + acid = 50 + wound = 50 + consume = 40 + +/obj/item/clothing/head/helmet/space/hev_suit/nri + name = "\improper VOSKHOD powered combat armor helmet" + desc = "A composite graphene-plasteel helmet with a ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." + icon = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmeq.dmi' + worn_icon = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet.dmi' + worn_icon_muzzled = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet_m.dmi' + worn_icon_teshari = 'modular_ss220/modules/return_prs/black_mesa/hev_suit/icons/helmet_m.dmi' + icon_state = "nri_soldier" + armor_type = /datum/armor/hev_suit_nri + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + obj_flags = null + supports_variations_flags = CLOTHING_SNOUTED_VARIATION + resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF + clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCK_GAS_SMOKE_EFFECT|HEADINTERNALS + clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED) + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flash_protect = FLASH_PROTECTION_WELDER + visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR + visor_flags = STOPSPRESSUREDAMAGE + slowdown = 0 + has_flashlight = FALSE + +/obj/item/clothing/head/helmet/space/hev_suit/nri/captain + name = "\improper VOSKHOD-2 powered combat armor helmet" + desc = "A black composite polyurea coated graphene-plastitanium helmet with durathread inner padding, complete with a deployable airtight tinted plasmaglass visor and a kevlar-lined respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." + icon_state = "nri_captain" + +/obj/item/clothing/head/helmet/space/hev_suit/nri/medic + name = "\improper VOSKHOD-KH powered combat armor helmet" + desc = "A combat medic's composite graphene-titanium helmet with bio-resistant padding, complete with a deployable airtight polycarbonate visor and optimized respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." + icon_state = "nri_medic" + +/obj/item/clothing/head/helmet/space/hev_suit/nri/engineer + name = "\improper VOSKHOD-IN powered combat armor helmet" + desc = "A composite tungsten-plasteel helmet with a lead-lined ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." + icon_state = "nri_engineer" + +/datum/action/item_action/hev_toggle/nri + name = "Toggle VOSKHOD Suit" + button_icon = 'modular_ss220/modules/return_prs/novaya_ert/icons/toggles.dmi' + button_icon_state = "system_off" + +/datum/action/item_action/hev_toggle_notifs/nri + name = "Toggle VOSKHOD Suit Notifications" + button_icon = 'modular_ss220/modules/return_prs/novaya_ert/icons/toggles.dmi' + button_icon_state = "sound_VOICE_AND_TEXT" + +/obj/item/clothing/suit/space/hev_suit/nri/captain + name = "\improper VOSKHOD-2 powered combat armor" + desc = "A unique hybrid set of space-resistant armor made for high-ranking NRI operatives, built on a proprietary durathread padded, Akulan made Larr'Takh silk utility uniform. Polyurea coated hexagraphene-lined plastitanium plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." + icon_state = "nri_captain" + +/obj/item/clothing/suit/space/hev_suit/nri/medic + name = "\improper VOSKHOD-KH powered combat armor" + desc = "A hybrid set of space-resistant armor built on a modified mass-produced Dipolyester-Aerogel surgeon field jumpsuit, polyurea coated titanium plates hinder mobility as little as possible while the onboard life support system aids the user in combat and provides additional medical functions. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." + icon_state = "nri_medic" + +/obj/item/clothing/suit/space/hev_suit/nri/engineer + name = "\improper VOSKHOD-IN powered combat armor" + desc = "A hybrid set of space-resistant armor built on a modified Nanotrasen heavy-duty engineering undersuit, polyurea coated lead-lined light plasteel plates hinder mobility as little as possible and offer additional radiation protection while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." + icon_state = "nri_engineer" + +#undef NRI_POWERUSE_HIT +#undef NRI_POWERUSE_HEAL +#undef NRI_COOLDOWN_HEAL +#undef NRI_COOLDOWN_RADS +#undef NRI_COOLDOWN_ACID +#undef NRI_HEAL_AMOUNT +#undef NRI_BLOOD_REPLENISHMENT diff --git a/modular_ss220/modules/return_prs/novaya_ert/icons/tesha.dmi b/modular_ss220/modules/return_prs/novaya_ert/icons/tesha.dmi new file mode 100644 index 00000000000000..9e950d6c171fa2 Binary files /dev/null and b/modular_ss220/modules/return_prs/novaya_ert/icons/tesha.dmi differ diff --git a/modular_ss220/modules/return_prs/novaya_ert/icons/toggles.dmi b/modular_ss220/modules/return_prs/novaya_ert/icons/toggles.dmi index ec7c2f26282211..beaf7201f90d9e 100644 Binary files a/modular_ss220/modules/return_prs/novaya_ert/icons/toggles.dmi and b/modular_ss220/modules/return_prs/novaya_ert/icons/toggles.dmi differ diff --git a/modular_ss220/modules/return_prs/sec_haul/code/cmg.dm b/modular_ss220/modules/return_prs/sec_haul/code/cmg.dm new file mode 100644 index 00000000000000..9b1857ec0543b8 --- /dev/null +++ b/modular_ss220/modules/return_prs/sec_haul/code/cmg.dm @@ -0,0 +1,154 @@ +/obj/item/gun/ballistic/automatic/cmg + name = "\improper NT CMG-2 PDW" + desc = "A bullpup, two-round burst PDW chambered in 9x25mm, developed by Nanotrasen R&D and based on a licensed Scarborough Arms design. \ + It features a folding stock and comes pre-attached with a dot sight. Unfortunately, the recoil management system reduces the \ + stopping power of individual rounds, but the manufacturer insists that quirk can be mitigated by not missing." + icon_state = "cmg1" + icon = 'modular_ss220/modules/return_prs/sec_haul/icons/guns.dmi' + inhand_icon_state = "c20r" + selector_switch_icon = TRUE + accepted_magazine_type = /obj/item/ammo_box/magazine/multi_sprite/cmg + fire_delay = 2 + burst_size = 2 + pin = /obj/item/firing_pin/implant/mindshield + mag_display = TRUE + mag_display_ammo = TRUE + empty_indicator = TRUE + w_class = WEIGHT_CLASS_BULKY + projectile_damage_multiplier = 0.5 + // raw outputs: + // lethal: 30 * 0.5 = 15 + // AP: 27 * 0.5 = 13.5 + // HP: 40 * 0.5 = 20 + // INC: 15 * 0.5 = 7.5 + // rubber: 5 * 0.5 = 2.5 brute, 25 * 0.5 = 12.5 stam + // IHDF: 30 * 0.5 = 15 stam + + /// what sound do we play when finished adjusting the stock? + var/folding_sound = 'sound/items/weapons/batonextend.ogg' + /// is our stock collapsed? + var/folded = FALSE + /// how long does it take to extend/collapse the stock + var/toggle_time = 1 SECONDS + /// what's our spread with our extended stock (mild varedit compatibility I Guess)? + var/unfolded_spread = 0 + /// what's our spread with a folded stock (see above comment)? + var/folded_spread = 20 + +/obj/item/gun/ballistic/automatic/cmg/examine(mob/user) + . = ..() + . += span_notice("Ctrl-click to [folded ? "extend" : "collapse"] the stock.") + +/obj/item/gun/ballistic/automatic/cmg/item_ctrl_click(mob/user) + if((!user.is_holding(src)) || (item_flags & IN_STORAGE)) + return CLICK_ACTION_BLOCKING + toggle_stock(user) + +/obj/item/gun/ballistic/automatic/cmg/proc/toggle_stock(mob/user, var/forced) + if(!user && forced) // for the possible case of having every shipped CMG be pre-folded + folded = !folded + update_fold_stats() + return + balloon_alert(user, "[folded ? "extending" : "collapsing"] stock...") + if(!do_after(user, toggle_time)) + balloon_alert(user, "interrupted!") + return + folded = !folded + update_fold_stats() + balloon_alert(user, "stock [folded ? "collapsed" : "extended"]") + playsound(src.loc, folding_sound, 30, 1) + +/obj/item/gun/ballistic/automatic/cmg/proc/update_fold_stats() + if(folded) + spread = folded_spread + if(suppressed) + w_class = WEIGHT_CLASS_BULKY + else + w_class = WEIGHT_CLASS_NORMAL + else + spread = unfolded_spread + if(suppressed) + w_class = WEIGHT_CLASS_HUGE + else + w_class = WEIGHT_CLASS_BULKY + update_icon() + +/obj/item/gun/ballistic/automatic/cmg/update_overlays() + . = ..() + . += "[icon_state]-stock[folded ? "_in" : "_out"]" + +/obj/item/gun/ballistic/automatic/cmg/Initialize(mapload) + . = ..() + AddComponent(/datum/component/automatic_fire, 0.4 SECONDS) + +/obj/item/gun/ballistic/automatic/cmg/add_seclight_point() + AddComponent(/datum/component/seclite_attachable, \ + light_overlay_icon = 'icons/obj/weapons/guns/flashlights.dmi', \ + light_overlay = "flight", \ + overlay_x = 24, \ + overlay_y = 10) + +/obj/item/gun/ballistic/automatic/cmg/give_manufacturer_examine() + AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN) + +/obj/item/gun/ballistic/automatic/cmg/add_bayonet_point() + AddComponent(/datum/component/bayonet_attachable, offset_x = 26, offset_y = 10) + +/obj/item/ammo_box/magazine/multi_sprite/cmg + name = "9x25mm lethal PDW magazine" + icon = 'modular_ss220/modules/return_prs/sec_haul/icons/mags.dmi' + icon_state = "g11_lethal" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = CALIBER_9MM + max_ammo = 24 + multiple_sprites = AMMO_BOX_FULL_EMPTY + +/obj/item/ammo_box/magazine/multi_sprite/cmg/empty + name = "9x25mm PDW magazine" + icon_state = "g11" + start_empty = 1 + +/obj/item/ammo_box/magazine/multi_sprite/cmg/hp + name = "9x25mm hollow-point PDW magazine" + icon_state = "g11_hollowpoint" + ammo_type = /obj/item/ammo_casing/c9mm/hp + +/obj/item/ammo_box/magazine/multi_sprite/cmg/ap + name = "9x25mm armor-piercing PDW magazine" + icon_state = "g11_ap" + ammo_type = /obj/item/ammo_casing/c9mm/ap + +/obj/item/ammo_box/magazine/multi_sprite/cmg/fire + name = "9x25mm incendiary PDW magazine" + icon_state = "g11_incendiary" + ammo_type = /obj/item/ammo_casing/c9mm/fire + +/obj/item/ammo_box/magazine/multi_sprite/cmg/ihdf + name = "9x25mm IHDF PDW magazine" + icon_state = "g11_ihdf" + ammo_type = /obj/item/ammo_casing/c9mm/ihdf + +/obj/item/ammo_box/magazine/multi_sprite/cmg/rubber + name = "9x25mm rubber PDW magazine" + icon_state = "g11_rubber" + ammo_type = /obj/item/ammo_casing/c9mm/rubber + +/obj/item/gun/ballistic/automatic/cmg/nomag + spawnwithmagazine = FALSE + +/obj/item/suppressor/nanotrasen + name = "NT-S suppressor" + desc = "A Nanotrasen brand small-arms suppressor, including a large NT logo stamped on the side." + +/obj/item/storage/toolbox/guncase/nova/blueshield_cmg + name = "Blueshield's CMG-2 guncase" + +/obj/item/storage/toolbox/guncase/nova/blueshield_cmg/PopulateContents() + new /obj/item/gun/ballistic/automatic/cmg/nomag(src) + new /obj/item/ammo_box/magazine/multi_sprite/cmg/rubber(src) + new /obj/item/ammo_box/magazine/multi_sprite/cmg/rubber(src) + new /obj/item/ammo_box/magazine/multi_sprite/cmg(src) + new /obj/item/ammo_box/magazine/multi_sprite/cmg(src) + new /obj/item/suppressor/nanotrasen(src) + + diff --git a/modular_ss220/modules/return_prs/sec_haul/icons/guns.dmi b/modular_ss220/modules/return_prs/sec_haul/icons/guns.dmi new file mode 100644 index 00000000000000..634d78f1527427 Binary files /dev/null and b/modular_ss220/modules/return_prs/sec_haul/icons/guns.dmi differ diff --git a/modular_ss220/modules/return_prs/sec_haul/icons/mags.dmi b/modular_ss220/modules/return_prs/sec_haul/icons/mags.dmi new file mode 100644 index 00000000000000..7849871a87acdd Binary files /dev/null and b/modular_ss220/modules/return_prs/sec_haul/icons/mags.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 9dc8aedb0f7ff1..62c151a2da3f87 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7344,16 +7344,6 @@ #include "modular_nova\modules\company_imports\code\armament_component.dm" #include "modular_nova\modules\company_imports\code\company_datums.dm" #include "modular_nova\modules\company_imports\code\armament_datums\_armament_basetype.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\akh_frontier.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\deforest_medical.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\jarnsmiour.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\kahraman_industries.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\microstar_energy.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\nakamura_modsuits.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\nri_military_surplus.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\put_a_donk_on_it.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\sol_defense.dm" -#include "modular_nova\modules\company_imports\code\armament_datums\vitezstvi_ammo.dm" #include "modular_nova\modules\company_imports\code\datums\cargo_order.dm" #include "modular_nova\modules\company_imports\code\datums\cargo_pack.dm" #include "modular_nova\modules\company_imports\code\datums\hud.dm" @@ -8752,8 +8742,20 @@ #include "modular_nova\modules\xenoarchartifacts\obj\particle_battery.dm" #include "modular_nova\modules\xenoarchartifacts\obj\wave_scanner.dm" #include "modular_ss220\master_files_skyrat\code\modules\client\preferences\emote_panel.dm" +#include "modular_ss220\modules\access_upgrader\code\upgrader.dm" #include "modular_ss220\modules\auto_cryo\autocryo.dm" #include "modular_ss220\modules\auto_cryo\autocryo_config.dm" +#include "modular_ss220\modules\cargo\code\_changes.dm" +#include "modular_ss220\modules\cargo\code\akh_frontier1984.dm" +#include "modular_ss220\modules\cargo\code\deforest_medical1984.dm" +#include "modular_ss220\modules\cargo\code\jarnsmiour1984.dm" +#include "modular_ss220\modules\cargo\code\kahraman_industries1984.dm" +#include "modular_ss220\modules\cargo\code\microstar_energy1984.dm" +#include "modular_ss220\modules\cargo\code\nakamura_modsuits1984.dm" +#include "modular_ss220\modules\cargo\code\nri_military_surplus1984.dm" +#include "modular_ss220\modules\cargo\code\put_a_donk_on_it1984.dm" +#include "modular_ss220\modules\cargo\code\sol_defence1984.dm" +#include "modular_ss220\modules\cargo\code\vitezstvi_ammo1984.dm" #include "modular_ss220\modules\cyrillic_key_fixes\code\client_procs.dm" #include "modular_ss220\modules\cyrillic_key_fixes\code\communication.dm" #include "modular_ss220\modules\cyrillic_key_fixes\code\keybindings.dm" @@ -8762,7 +8764,10 @@ #include "modular_ss220\modules\discord\new_player.dm" #include "modular_ss220\modules\discord\verb.dm" #include "modular_ss220\modules\events\round_event.dm" +#include "modular_ss220\modules\loadout_addiction\code\accessory.dm" #include "modular_ss220\modules\new_world_topics\world_topic.dm" +#include "modular_ss220\modules\old_station\code\_defines.dm" +#include "modular_ss220\modules\old_station\code\oldstation.dm" #include "modular_ss220\modules\paradise_keybindings\code\keybinding\admin.dm" #include "modular_ss220\modules\paradise_keybindings\code\keybinding\artificial_intelligence.dm" #include "modular_ss220\modules\paradise_keybindings\code\keybinding\carbon.dm" @@ -8839,6 +8844,19 @@ #include "modular_ss220\modules\return_prs\gunsgalore\code\guns\ppsh.dm" #include "modular_ss220\modules\return_prs\gunsgalore\code\guns\scar.dm" #include "modular_ss220\modules\return_prs\gunsgalore\code\guns\stg.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\_microfusion_defines.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\cargo_stuff.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\gun_types.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\microfusion_cell.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\microfusion_cell_attachments.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\microfusion_designs.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\microfusion_energy_master.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\microfusion_gun_attachments.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\microfusion_techweb.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\phase_emitter.dm" +#include "modular_ss220\modules\return_prs\microfusion\code\projectiles.dm" +#include "modular_ss220\modules\return_prs\novaya_ert\code\voskhod.dm" +#include "modular_ss220\modules\return_prs\sec_haul\code\cmg.dm" #include "modular_ss220\modules\shutdown\shutdown_config.dm" #include "modular_ss220\modules\translations\code\customer_ru.dm" #include "modular_ss220\modules\tts\code\_tts_defines.dm" diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx index 0dbaa45344864a..4a76ef03c69038 100644 --- a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx @@ -259,6 +259,7 @@ const PageMain = (props) => { canToggleEngineeringOverride, // NOVA EDIT - Engineering Override emagged, syndicate, + away, emergencyAccess, engineeringOverride, // NOVA EDIT - Engineering Override importantActionReady, @@ -404,7 +405,7 @@ const PageMain = (props) => { )} {/* NOVA EDIT ADDITION END */} - {!syndicate && ( + {!syndicate && !away && (