From a8e4d99256758090db02182932c4717c62e6d60d Mon Sep 17 00:00:00 2001 From: silencer-pl <103842328+silencer-pl@users.noreply.github.com> Date: Thu, 29 Aug 2024 17:16:46 -0400 Subject: [PATCH] vendor and gamemode setup --- code/_globalvars/misc.dm | 2 +- .../configuration/entries/general.dm | 2 +- code/controllers/subsystem/mapping.dm | 2 +- code/controllers/subsystem/ticker.dm | 2 +- .../colonialmarines/ai/colonialmarines_ai.dm | 4 +- .../ai/colonialmarines_ai_nospawn.dm | 4 +- .../vending/vendor_types/pve/pve_clothes.dm | 53 ++++ .../vending/vendor_types/pve/pve_guns.dm | 248 ++++++++++++++++++ code/game/objects/items/misc.dm | 23 ++ code/modules/clothing/under/marine_uniform.dm | 16 ++ colonialmarines.dme | 2 + icons/obj/items/items.dmi | Bin 73318 -> 73462 bytes 12 files changed, 350 insertions(+), 8 deletions(-) create mode 100644 code/game/machinery/vending/vendor_types/pve/pve_clothes.dm create mode 100644 code/game/machinery/vending/vendor_types/pve/pve_guns.dm diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 74f3149610..9e60bd8c9f 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -5,7 +5,7 @@ GLOBAL_VAR_INIT(perf_flags, NO_FLAGS) GLOBAL_LIST_INIT(bitflags, list((1<<0), (1<<1), (1<<2), (1<<3), (1<<4), (1<<5), (1<<6), (1<<7), (1<<8), (1<<9), (1<<10), (1<<11), (1<<12), (1<<13), (1<<14), (1<<15), (1<<16), (1<<17), (1<<18), (1<<19), (1<<20), (1<<21), (1<<22), (1<<23))) -GLOBAL_VAR_INIT(master_mode, "Distress Signal: Lowpop") +GLOBAL_VAR_INIT(master_mode, "Xenosurge") GLOBAL_VAR_INIT(timezoneOffset, 0) diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index a499bc769c..eb5e62bb03 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -256,7 +256,7 @@ Voting // Gamemode to auto-switch to at the start of the round /datum/config_entry/string/gamemode_default - config_entry_value = "Distress Signal: Lowpop" + config_entry_value = "Xenosurge" /datum/config_entry/number/rounds_until_hard_restart config_entry_value = -1 // -1 is disabled by default, 0 is every round, x is after so many rounds diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index be6709f08c..259a02ae0e 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -197,7 +197,7 @@ SUBSYSTEM_DEF(mapping) /datum/controller/subsystem/mapping/proc/Loadship(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE, override_map_path = "maps/") LoadGroup(errorList, name, path, files, traits, default_traits, silent, override_map_path = override_map_path) - GLOB.gamemode_roles["Distress Signal: Lowpop"] = GLOB.platoon_to_role_list[MAIN_SHIP_PLATOON] + GLOB.gamemode_roles["Xenosurge"] = GLOB.platoon_to_role_list[MAIN_SHIP_PLATOON] /datum/controller/subsystem/mapping/proc/Loadground(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE, override_map_path = "maps/") LoadGroup(errorList, name, path, files, traits, default_traits, silent, override_map_path = override_map_path) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index d3cb19c40e..b6b50508ed 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -327,7 +327,7 @@ SUBSYSTEM_DEF(ticker) if(mode) GLOB.master_mode = SSmapping.configs[GROUND_MAP].force_mode ? SSmapping.configs[GROUND_MAP].force_mode : mode else - GLOB.master_mode = "Distress Signal: Lowpop" + GLOB.master_mode = "Xenosurge" log_game("Saved mode is '[GLOB.master_mode]'") diff --git a/code/game/gamemodes/colonialmarines/ai/colonialmarines_ai.dm b/code/game/gamemodes/colonialmarines/ai/colonialmarines_ai.dm index 9fe36dec66..1b049decb0 100644 --- a/code/game/gamemodes/colonialmarines/ai/colonialmarines_ai.dm +++ b/code/game/gamemodes/colonialmarines/ai/colonialmarines_ai.dm @@ -1,6 +1,6 @@ /datum/game_mode/colonialmarines/ai - name = "Distress Signal: Lowpop" - config_tag = "Distress Signal: Lowpop" + name = "Xenosurge" + config_tag = "Xenosurge" required_players = 0 votable = TRUE diff --git a/code/game/gamemodes/colonialmarines/ai/colonialmarines_ai_nospawn.dm b/code/game/gamemodes/colonialmarines/ai/colonialmarines_ai_nospawn.dm index 51af666117..84bcc430a0 100644 --- a/code/game/gamemodes/colonialmarines/ai/colonialmarines_ai_nospawn.dm +++ b/code/game/gamemodes/colonialmarines/ai/colonialmarines_ai_nospawn.dm @@ -1,6 +1,6 @@ /datum/game_mode/colonialmarines/ai/no_spawn - name = "Distress Signal: Lowpop (No Spawn)" - config_tag = "Distress Signal: Lowpop (No Spawn)" + name = "Xenosurge (No Spawn)" + config_tag = "Xenosurge (No Spawn)" flags_round_type = MODE_INFESTATION|MODE_NO_LATEJOIN|MODE_NO_SPAWN|MODE_NO_XENO_EVOLVE votable = FALSE diff --git a/code/game/machinery/vending/vendor_types/pve/pve_clothes.dm b/code/game/machinery/vending/vendor_types/pve/pve_clothes.dm new file mode 100644 index 0000000000..a965d67f14 --- /dev/null +++ b/code/game/machinery/vending/vendor_types/pve/pve_clothes.dm @@ -0,0 +1,53 @@ +/obj/structure/machinery/cm_vending/clothing/pve/standard + name = "\improper UAR Personal Uniform Rack" + desc = "A secure personal uniform storage sollution, much like the bigger dispensers, but linked to a smaller, local storage" + req_access = list() + vendor_role = list() + vend_flags = VEND_CLUTTER_PROTECTION | VEND_UNIFORM_AUTOEQUIP + +/obj/structure/machinery/cm_vending/pve/standard/get_listed_products(mob/user) + return list( + list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), + list("Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY), + list("Headset", 0, /obj/item/device/radio/headset/almayer/mmpo, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), + list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY), + list("UNIFORM (CHOOSE 1)", 0, null, null, null), + list("Standard", 0, /obj/item/clothing/under/marine/standard, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + list("Medic", 0, /obj/item/clothing/under/marine/medic/standard, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + list("Engineer", 0, /obj/item/clothing/under/marine/engineer/standard, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + list("Engineer - alternative", 0, /obj/item/clothing/under/marine/engineer/darker, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + list("Radio Officer", 0, /obj/item/clothing/under/marine/rto/standard, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + list("Sniper", 0, /obj/item/clothing/under/marine/sniper/standard, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + list("Vehicle Operator", 0, /obj/item/clothing/under/marine/tanker/standard, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), + ) + +/obj/structure/machinery/cm_vending/sorted/pve/uniform + name = "\improper UAR Armor Vendor" + desc = "An automated supply rack hooked up to a big storage of standard marine uniforms. Can be accessed by the Requisitions Officer and Cargo Techs." + icon_state = "clothing" + req_access = list() + req_one_access = list() + hackable = TRUE + vend_flags = VEND_CLUTTER_PROTECTION | VEND_UNIFORM_AUTOEQUIP + vendor_theme = VENDOR_THEME_USCM + + listed_products = list( + + list("STANDARD HELMETS", -1, null, null), + list("M10 Pattern Marine Helmet - No camo", 20, /obj/item/clothing/head/helmet/marine/grey, VENDOR_ITEM_RECOMMENDED), + list("M10 Pattern Marine Helmet - Jungle camo", 20, /obj/item/clothing/head/helmet/marine/jungle, VENDOR_ITEM_REGULAR), + list("M10 Pattern Marine Helmet - Snow camo", 20, /obj/item/clothing/head/helmet/marine/snow, VENDOR_ITEM_REGULAR), + list("M10 Pattern Marine Helmet - Desert camo", 20, /obj/item/clothing/head/helmet/marine/desert, VENDOR_ITEM_REGULAR), + list("SPECIALIZED HELMETS", -1, null, null), + list("M10 Pattern Technician Helmet", 20, /obj/item/clothing/head/helmet/marine/tech, VENDOR_ITEM_REGULAR), + list("M10 Pattern Corspman Helmet", 20, /obj/item/clothing/head/helmet/marine/medic, VENDOR_ITEM_REGULAR), + list("STANDARD ARMOR", -1, null, null), + list("M3 Pattern Carrier Marine Armor", 20, /obj/item/clothing/suit/storage/marine/carrier, VENDOR_ITEM_RECOMMENDED), + list("M3 Pattern Padded Marine Armor", 20, /obj/item/clothing/suit/storage/marine/padded, VENDOR_ITEM_REGULAR), + list("M3 Pattern Padless Marine Armor", 20, /obj/item/clothing/suit/storage/marine/padless, VENDOR_ITEM_REGULAR), + list("M3 Pattern Ridged Marine Armor", 20, /obj/item/clothing/suit/storage/marine/padless_lines, VENDOR_ITEM_REGULAR), + list("M3 Pattern Skull Marine Armor", 20, /obj/item/clothing/suit/storage/marine/skull, VENDOR_ITEM_REGULAR), + list("SPECIALIZED ARMOR", -1, null, null), + list("M3-EOD Pattern Heavy Armor", 20, /obj/item/clothing/suit/storage/marine/heavy, VENDOR_ITEM_REGULAR), + list("M3-L Pattern Light Armor", 20, /obj/item/clothing/suit/storage/marine/light, VENDOR_ITEM_REGULAR), + ) diff --git a/code/game/machinery/vending/vendor_types/pve/pve_guns.dm b/code/game/machinery/vending/vendor_types/pve/pve_guns.dm new file mode 100644 index 0000000000..328e7c7b6e --- /dev/null +++ b/code/game/machinery/vending/vendor_types/pve/pve_guns.dm @@ -0,0 +1,248 @@ +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/guns + name = "\improper UAR Automated Weapons Rack" + desc = "An automated weapon rack hooked up to a big storage of standard-issue weapons." + icon_state = "guns" + req_access = list() + req_one_access = list() + hackable = TRUE + vend_flags = VEND_CLUTTER_PROTECTION | VEND_TO_HAND + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/guns/ui_state(mob/user) + return GLOB.not_incapacitated_and_adjacent_strict_state + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/guns/populate_product_list(scale) + listed_products = list( + list("PRIMARY FIREARMS", -1, null, null), + list("M4RA Battle Rifle", 20, /obj/item/weapon/gun/rifle/m4ra, VENDOR_ITEM_REGULAR), + list("M37A2 Pump Shotgun", 20, /obj/item/weapon/gun/shotgun/pump, VENDOR_ITEM_REGULAR), + list("M39 Submachine Gun", 20, /obj/item/weapon/gun/smg/m39, VENDOR_ITEM_REGULAR), + list("M41A Pulse Rifle MK2", 20, /obj/item/weapon/gun/rifle/m41a, VENDOR_ITEM_RECOMMENDED), + list("XM88 Heavy Rifle", 20, /obj/item/weapon/gun/lever_action/xm88, VENDOR_ITEM_REGULAR), + list("SIDEARMS", -1, null, null), + list("88 Mod 4 Combat Pistol", 20, /obj/item/weapon/gun/pistol/mod88, VENDOR_ITEM_REGULAR), + list("M44 Combat Revolver", 20, /obj/item/weapon/gun/revolver/m44, VENDOR_ITEM_REGULAR), + list("M4A3 Service Pistol", 20, /obj/item/weapon/gun/pistol/m4a3, VENDOR_ITEM_RECOMMENDED), + list("M82F Flare Gun", 20, /obj/item/weapon/gun/flare, VENDOR_ITEM_REGULAR), + list("UTILITIES", -1, null, null), + list("M5 Bayonet", 20, /obj/item/attachable/bayonet, VENDOR_ITEM_RECOMMENDED), + ) + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/attachies + name = "\improper UAR Automated Weapon Attachments Rack" + desc = "An automated weapon rack hooked up to a big storage of standard-issue weapons." + icon_state = "req_attach" + req_access = list() + req_one_access = list() + hackable = TRUE + vend_flags = VEND_CLUTTER_PROTECTION | VEND_TO_HAND + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/attachies/ui_state(mob/user) + return GLOB.not_incapacitated_and_adjacent_strict_state + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/attachies/populate_product_list(scale) + listed_products = list( + list("BARREL", -1, null, null), + list("Extended Barrel", 20, /obj/item/attachable/extended_barrel, VENDOR_ITEM_REGULAR), + list("M5 Bayonet", 20, /obj/item/attachable/bayonet, VENDOR_ITEM_REGULAR), + list("Recoil Compensator", 20, /obj/item/attachable/compensator, VENDOR_ITEM_REGULAR), + list("Suppressor", 20, /obj/item/attachable/suppressor, VENDOR_ITEM_REGULAR), + + list("RAIL", -1, null, null), + list("Magnetic Harness", 20, /obj/item/attachable/magnetic_harness, VENDOR_ITEM_REGULAR), + list("Rail Flashlight", 20, /obj/item/attachable/flashlight, VENDOR_ITEM_REGULAR), + list("S4 2x Telescopic Mini-Scope", 20, /obj/item/attachable/scope/mini, VENDOR_ITEM_REGULAR), + list("S5 Red-Dot Sight", 20, /obj/item/attachable/reddot, VENDOR_ITEM_REGULAR), + list("S6 Reflex Sight", 20, /obj/item/attachable/reflex, VENDOR_ITEM_REGULAR), + list("S8 4x Telescopic Scope", 20, /obj/item/attachable/scope, VENDOR_ITEM_REGULAR), + list("XS-9 targeting relay", 20, /obj/item/attachable/scope/mini/xm88, VENDOR_ITEM_REGULAR), + + list("UNDERBARREL", -1, null, null), + list("Angled Grip", 20, /obj/item/attachable/angledgrip, VENDOR_ITEM_REGULAR), + list("Bipod", 20, /obj/item/attachable/bipod, VENDOR_ITEM_REGULAR), + list("Burst Fire Assembly", 20, /obj/item/attachable/burstfire_assembly, VENDOR_ITEM_REGULAR), + list("Gyroscopic Stabilizer", 20, /obj/item/attachable/gyro, VENDOR_ITEM_REGULAR), + list("Laser Sight", 20, /obj/item/attachable/lasersight, VENDOR_ITEM_REGULAR), + list("Mini Flamethrower", 20, /obj/item/attachable/attached_gun/flamer, VENDOR_ITEM_REGULAR), + list("XM-VESG-1 Flamer Nozzle", 20, /obj/item/attachable/attached_gun/flamer_nozzle, VENDOR_ITEM_REGULAR), + list("U7 Underbarrel Shotgun", 20, /obj/item/attachable/attached_gun/shotgun, VENDOR_ITEM_REGULAR), + list("Underbarrel Extinguisher", 20, /obj/item/attachable/attached_gun/extinguisher, VENDOR_ITEM_REGULAR), + list("Underbarrel Flashlight Grip", 20, /obj/item/attachable/flashlight/grip, VENDOR_ITEM_REGULAR), + list("Underslung Grenade Launcher", 20, /obj/item/attachable/attached_gun/grenade, VENDOR_ITEM_REGULAR), + list("Vertical Grip", 20, /obj/item/attachable/verticalgrip, VENDOR_ITEM_REGULAR), + + list("STOCK", -1, null, null), + list("M37 Wooden Stock", 20, /obj/item/attachable/stock/shotgun, VENDOR_ITEM_REGULAR), + list("M39 Arm Brace", 20, /obj/item/attachable/stock/smg/collapsible/brace, VENDOR_ITEM_REGULAR), + list("M39 Folding Stock", 20, /obj/item/attachable/stock/smg/collapsible, VENDOR_ITEM_REGULAR), + list("M39 Stock", 20, /obj/item/attachable/stock/smg, VENDOR_ITEM_REGULAR), + list("M41A Solid Stock", 20, /obj/item/attachable/stock/rifle, VENDOR_ITEM_REGULAR), + list("M41A Folding Stock", 20, /obj/item/attachable/stock/rifle/collapsible, VENDOR_ITEM_REGULAR), + list("M44 Magnum Sharpshooter Stock", 20, /obj/item/attachable/stock/revolver, VENDOR_ITEM_REGULAR), + list("XM88 padded stock", 20, /obj/item/attachable/stock/xm88, VENDOR_ITEM_REGULAR) + ) + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/extra_munitions/ + name = "\improper UAR Automated Explosive, Incendiary and Support Munitions Rack" + desc = "An automated weapon rack hooked up to a big storage of standard-issue weapons." + icon_state = "plate" + req_access = list() + req_one_access = list() + hackable = TRUE + vend_flags = VEND_CLUTTER_PROTECTION | VEND_TO_HAND + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/extra_munitions/ui_state(mob/user) + return GLOB.not_incapacitated_and_adjacent_strict_state + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/extra_munitions/populate_product_list(scale) + listed_products = list( + list("LAUNCHERS/FLAMETHROWERS", -1, null, null), + list("M240 Incinerator Unit", 20, /obj/item/storage/box/guncase/flamer, VENDOR_ITEM_REGULAR), + list("M240 Incinerator Tank", 100, /obj/item/ammo_magazine/flamer_tank, VENDOR_ITEM_REGULAR), + list("M79 Grenade Launcher", 20, /obj/item/storage/box/guncase/m79, VENDOR_ITEM_REGULAR), + list("EXPLOSIVES", -1, null, null), + list("M15 Fragmentation Grenade", 20, /obj/item/explosive/grenade/high_explosive/m15, VENDOR_ITEM_REGULAR), + list("M20 Claymore Anti-Personnel Mine", 20, /obj/item/explosive/mine, VENDOR_ITEM_REGULAR), + list("M40 HEDP Grenade", 20, /obj/item/explosive/grenade/high_explosive, VENDOR_ITEM_REGULAR), + list("M40 HIDP Incendiary Grenade", 20, /obj/item/explosive/grenade/incendiary, VENDOR_ITEM_REGULAR), + list("M40 HPDP White Phosphorus Smoke Grenade", 20, /obj/item/explosive/grenade/phosphorus, VENDOR_ITEM_REGULAR), + list("M40 HSDP Smoke Grenade", 20, /obj/item/explosive/grenade/smokebomb, VENDOR_ITEM_REGULAR), + list("M74 AGM-Frag Airburst Grenade", 20, /obj/item/explosive/grenade/high_explosive/airburst, VENDOR_ITEM_REGULAR), + list("M74 AGM-Icendiary Airburst Grenade", 20, /obj/item/explosive/grenade/incendiary/airburst, VENDOR_ITEM_REGULAR), + list("M74 AGM-Smoke Airburst Grenade", 20, /obj/item/explosive/grenade/smokebomb/airburst, VENDOR_ITEM_REGULAR), + list("M74 AGM-Star Shell", 20, /obj/item/explosive/grenade/high_explosive/airburst/starshell, VENDOR_ITEM_REGULAR), + list("M74 AGM-Hornet Shell", 20, /obj/item/explosive/grenade/high_explosive/airburst/hornet_shell, VENDOR_ITEM_REGULAR), + list("M40 HIRR Baton Slug", 20, /obj/item/explosive/grenade/slug/baton, VENDOR_ITEM_REGULAR), + list("M40 MFHS Metal Foam Grenade", 20, /obj/item/explosive/grenade/metal_foam, VENDOR_ITEM_REGULAR), + list("Plastic Explosives", 20, /obj/item/explosive/plastic, VENDOR_ITEM_REGULAR), + list("Breaching Charge", 20, /obj/item/explosive/plastic/breaching_charge, VENDOR_ITEM_REGULAR), + ) + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/ammo/ + name = "\improper UAR Automated Ammunition Rack" + desc = "An automated weapon rack hooked up to a big storage of standard-issue weapons." + icon_state = "req_guns" + req_access = list() + req_one_access = list() + hackable = TRUE + vend_flags = VEND_CLUTTER_PROTECTION | VEND_TO_HAND + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/ammo/ui_state(mob/user) + return GLOB.not_incapacitated_and_adjacent_strict_state + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/ammo/populate_product_list(scale) + listed_products = list( + list("PRIMARY AMMUNITION", -1, null, null), + list("Box Of Buckshot Shells", 200, /obj/item/ammo_magazine/shotgun/buckshot, VENDOR_ITEM_REGULAR), + list("Box Of Flechette Shells", 200, /obj/item/ammo_magazine/shotgun/flechette, VENDOR_ITEM_REGULAR), + list("Box Of Shotgun Slugs", 200, /obj/item/ammo_magazine/shotgun/slugs, VENDOR_ITEM_REGULAR), + list("M4RA Magazine (10x24mm)", 200, /obj/item/ammo_magazine/rifle/m4ra, VENDOR_ITEM_REGULAR), + list("M4RA AP Magazine (10x24mm)", 200, /obj/item/ammo_magazine/rifle/m4ra/ap, VENDOR_ITEM_RECOMMENDED), + list("M41A MK2 Magazine (10x24mm)", 200, /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR), + list("M41A MK2 AP Magazine (10x24mm)", 200, /obj/item/ammo_magazine/rifle/ap, VENDOR_ITEM_RECOMMENDED), + list("M41A MK2 Extended Magazine (10x24mm)", 200, /obj/item/ammo_magazine/rifle/extended, VENDOR_ITEM_REGULAR), + list("M39 HV Magazine (10x20mm)", 200, /obj/item/ammo_magazine/smg/m39, VENDOR_ITEM_REGULAR), + list("M39 AP Magazine (10x20mm)", 200, /obj/item/ammo_magazine/smg/m39/ap, VENDOR_ITEM_RECOMMENDED), + list("M39 Extended Magazine (10x20mm)", 200 + 3, /obj/item/ammo_magazine/smg/m39/extended, VENDOR_ITEM_REGULAR), + list("XM88 .458 bullets box (.458 x 300)", 200, /obj/item/ammo_magazine/lever_action/xm88, VENDOR_ITEM_REGULAR), + list("SECONDARY AMMUNITION", -1, null, null), + list("M44 Speed Loader (.44)", 200, /obj/item/ammo_magazine/revolver, VENDOR_ITEM_REGULAR), + list("M44 Heavy Speed Loader (.44)", 200, /obj/item/ammo_magazine/revolver/heavy, VENDOR_ITEM_REGULAR), + list("M44 Marksman Speed Loader (.44)", 200, /obj/item/ammo_magazine/revolver/marksman, VENDOR_ITEM_REGULAR), + list("M4A3 Magazine (9mm)", 200, /obj/item/ammo_magazine/pistol, VENDOR_ITEM_REGULAR), + list("M4A3 AP Magazine (9mm)", 200, /obj/item/ammo_magazine/pistol/ap, VENDOR_ITEM_RECOMMENDED), + list("M4A3 HP Magazine (9mm)", 200, /obj/item/ammo_magazine/pistol/hp, VENDOR_ITEM_REGULAR), + list("88 Mod 4 Magazine (9mm)", 200, /obj/item/ammo_magazine/pistol/mod88/normalpoint, VENDOR_ITEM_REGULAR), + ) + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/accesories/ + name = "\improper UAR Automated Accesories Rack" + desc = "An automated weapon rack hooked up to a big storage of standard-issue weapons." + icon_state = "intel_gear" + req_access = list() + req_one_access = list() + hackable = TRUE + vend_flags = VEND_CLUTTER_PROTECTION | VEND_TO_HAND + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/accesories/ui_state(mob/user) + return GLOB.not_incapacitated_and_adjacent_strict_state + +/obj/structure/machinery/cm_vending/sorted/cargo_guns/pve/accesories/populate_product_list(scale) + listed_products = list( + list("WEBBINGS", -1, null, null), + list("Black Webbing Vest", 20, /obj/item/clothing/accessory/storage/black_vest, VENDOR_ITEM_REGULAR), + list("Brown Webbing Vest", 20, /obj/item/clothing/accessory/storage/black_vest/brown_vest, VENDOR_ITEM_REGULAR), + list("Shoulder Holster", 20, /obj/item/clothing/accessory/storage/holster, VENDOR_ITEM_REGULAR), + list("Webbing", 20, /obj/item/clothing/accessory/storage/webbing, VENDOR_ITEM_REGULAR), + list("Knife Webbing", 20, /obj/item/clothing/accessory/storage/knifeharness, VENDOR_ITEM_REGULAR), + list("Drop Pouch", 20, /obj/item/clothing/accessory/storage/droppouch, VENDOR_ITEM_REGULAR), + + list("BACKPACKS", -1, null, null), + list("Lightweight IMP Backpack", 20, /obj/item/storage/backpack/marine, VENDOR_ITEM_REGULAR), + list("Shotgun Scabbard", 20, /obj/item/storage/large_holster/m37, VENDOR_ITEM_REGULAR), + list("Pyrotechnician G4-1 Fueltank", 20, /obj/item/storage/backpack/marine/engineerpack/flamethrower/kit, VENDOR_ITEM_REGULAR), + list("Technician Welderpack", 20, /obj/item/storage/backpack/marine/engineerpack, VENDOR_ITEM_REGULAR), + list("Mortar Shell Backpack", 20, /obj/item/storage/backpack/marine/mortarpack, VENDOR_ITEM_REGULAR), + list("Technician Welder-Satchel", 20, /obj/item/storage/backpack/marine/engineerpack/satchel, VENDOR_ITEM_REGULAR), + list("IMP Ammo Rack", 20, /obj/item/storage/backpack/marine/ammo_rack, VENDOR_ITEM_REGULAR), + list("Radio Telephone Pack", 20, /obj/item/storage/backpack/marine/satchel/rto, VENDOR_ITEM_REGULAR), + list("Parachute", 20, /obj/item/parachute, VENDOR_ITEM_REGULAR), + + list("BELTS", -1, null, null), + list("G8-A General Utility Pouch", 20, /obj/item/storage/backpack/general_belt, VENDOR_ITEM_REGULAR), + list("M276 Ammo Load Rig", 20, /obj/item/storage/belt/marine, VENDOR_ITEM_REGULAR), + list("M276 General Pistol Holster Rig", 20, /obj/item/storage/belt/gun/m4a3, VENDOR_ITEM_REGULAR), + list("M276 Knife Rig", 20, /obj/item/storage/belt/knifepouch, VENDOR_ITEM_REGULAR), + list("M276 M39 Holster Rig", 20, /obj/item/storage/belt/gun/m39, VENDOR_ITEM_REGULAR), + list("M276 M40 Grenade Rig", 20, /obj/item/storage/belt/grenade, VENDOR_ITEM_REGULAR), + list("M276 M44 Holster Rig", 20, /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR), + list("M276 M82F Holster Rig", 20, /obj/item/storage/belt/gun/flaregun, VENDOR_ITEM_REGULAR), + list("M276 Shotgun Shell Loading Rig", 20, /obj/item/storage/belt/shotgun, VENDOR_ITEM_REGULAR), + list("M276 Mortar Operator Belt", 20, /obj/item/storage/belt/gun/mortarbelt, VENDOR_ITEM_REGULAR), + list("M300 pattern .458 SOCOM loading rig", 20, /obj/item/storage/belt/shotgun/xm88, VENDOR_ITEM_REGULAR), + + list("POUCHES", -1, null, null), + list("Autoinjector Pouch", 20, /obj/item/storage/pouch/autoinjector, VENDOR_ITEM_REGULAR), + list("Medical Kit Pouch", 20, /obj/item/storage/pouch/medkit, VENDOR_ITEM_REGULAR), + list("First-Aid Pouch (Full)", 20, /obj/item/storage/pouch/firstaid/full, VENDOR_ITEM_REGULAR), + list("First Responder Pouch", 20, /obj/item/storage/pouch/first_responder, VENDOR_ITEM_REGULAR), + list("Syringe Pouch", 20, /obj/item/storage/pouch/syringe, VENDOR_ITEM_REGULAR), + list("Tools Pouch (Full)", 20, /obj/item/storage/pouch/tools/full, VENDOR_ITEM_REGULAR), + list("Construction Pouch", 20, /obj/item/storage/pouch/construction, VENDOR_ITEM_REGULAR), + list("Electronics Pouch", 20, /obj/item/storage/pouch/electronics, VENDOR_ITEM_REGULAR), + list("Explosive Pouch", 20, /obj/item/storage/pouch/explosive, VENDOR_ITEM_REGULAR), + list("Flare Pouch (Full)", 20, /obj/item/storage/pouch/flare/full, VENDOR_ITEM_REGULAR), + list("Sling Pouch", 20, /obj/item/storage/pouch/sling, VENDOR_ITEM_REGULAR), + list("Machete Pouch (Full)", 20, /obj/item/storage/pouch/machete/full, VENDOR_ITEM_REGULAR), + list("Bayonet Pouch", 20, /obj/item/storage/pouch/bayonet, VENDOR_ITEM_REGULAR), + list("Medium General Pouch", 20, /obj/item/storage/pouch/general/medium, VENDOR_ITEM_REGULAR), + list("Magazine Pouch", 20, /obj/item/storage/pouch/magazine, VENDOR_ITEM_REGULAR), + list("Shotgun Shell Pouch", 20, /obj/item/storage/pouch/shotgun, VENDOR_ITEM_REGULAR), + list("Sidearm Pouch", 20, /obj/item/storage/pouch/pistol, VENDOR_ITEM_REGULAR), + list("Large Pistol Magazine Pouch", 20, /obj/item/storage/pouch/magazine/pistol/large, VENDOR_ITEM_REGULAR), + list("Fuel Tank Strap Pouch", 20, /obj/item/storage/pouch/flamertank, VENDOR_ITEM_REGULAR), + list("Large General Pouch", 20, /obj/item/storage/pouch/general/large, VENDOR_ITEM_REGULAR), + list("Large Magazine Pouch", 20, /obj/item/storage/pouch/magazine/large, VENDOR_ITEM_REGULAR), + list("Large Shotgun Shell Pouch", 20, /obj/item/storage/pouch/shotgun/large, VENDOR_ITEM_REGULAR), + + list("MISCELLANEOUS", -1, null, null), + list("TacMap Viewer", 20, /obj/item/tacmap_view, VENDOR_ITEM_RECOMMENDED), + list("Combat Flashlight", 20, /obj/item/device/flashlight/combat, VENDOR_ITEM_REGULAR), + list("Entrenching Tool", 20, /obj/item/tool/shovel/etool/folded, VENDOR_ITEM_REGULAR), + list("Gas Mask", 20, /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR), + list("Machete Scabbard (Full)", 20, /obj/item/storage/large_holster/machete/full, VENDOR_ITEM_REGULAR), + list("MB-6 Folding Barricades (x3)", 20, /obj/item/stack/folding_barricade/three, VENDOR_ITEM_REGULAR), + list("Motion Detector", 20, /obj/item/device/motiondetector, VENDOR_ITEM_REGULAR), + list("Binoculars", 20, /obj/item/device/binoculars, VENDOR_ITEM_REGULAR), + list("Rangefinder", 20, /obj/item/device/binoculars/range, VENDOR_ITEM_REGULAR), + list("Laser Designator", 20, /obj/item/device/binoculars/range/designator, VENDOR_ITEM_REGULAR), + list("Welding Goggles", 20, /obj/item/clothing/glasses/welding, VENDOR_ITEM_REGULAR), + list("Fire Extinguisher (Portable)", 20, /obj/item/tool/extinguisher/mini, VENDOR_ITEM_REGULAR), + ) + + + + + + + + diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm index 1bdcab2ac6..a7dc476f0c 100644 --- a/code/game/objects/items/misc.dm +++ b/code/game/objects/items/misc.dm @@ -403,3 +403,26 @@ return harness.try_extract(H) + +/obj/item/tacmap_view + name = "Tactical Map tablet" + desc = "A device to access the tactical map feed. Standard issue for all Marines." + icon_state = "tacmap" + var/datum/tacmap/map + var/minimap_type = MINIMAP_FLAG_USCM + var/faction = FACTION_MARINE + +/obj/item/tacmap_view/Initialize() + . = ..() + + map = new /datum/tacmap/drawing(src, minimap_type) + + +/obj/item/tacmap_view/Destroy() + QDEL_NULL(map) + return ..() + +/obj/item/tacmap_view/attack_self(mob/user) + . = ..() + + map.tgui_interact(user) diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index 5e07f87a93..30a38fbc1d 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -50,6 +50,7 @@ /obj/item/clothing/under/marine/standard flags_atom = NO_SNOW_TYPE + suit_restricted = null /obj/item/clothing/under/marine/medic name = "\improper UACM corpsman uniform" @@ -60,6 +61,7 @@ /obj/item/clothing/under/marine/medic/standard flags_atom = NO_SNOW_TYPE + suit_restricted = null /obj/item/clothing/under/marine/engineer name = "\improper UACM combat technician uniform" @@ -70,11 +72,13 @@ /obj/item/clothing/under/marine/engineer/standard flags_atom = NO_SNOW_TYPE + suit_restricted = null /obj/item/clothing/under/marine/engineer/darker icon_state = "d_marine_engineer" worn_state = "d_marine_engineer" flags_atom = NO_SNOW_TYPE + suit_restricted = null /obj/item/clothing/under/marine/rto name = "\improper UACM radio telephone operator uniform" @@ -83,11 +87,19 @@ item_state = "marine_rto" specialty = "marine Radio Telephone Operator" +/obj/item/clothing/under/marine/rto/standard + flags_atom = NO_SNOW_TYPE + suit_restricted = null + /obj/item/clothing/under/marine/sniper name = "\improper UACM sniper uniform" flags_jumpsuit = FALSE specialty = "UACM Sniper" +/obj/item/clothing/under/marine/sniper/standard + flags_atom = NO_SNOW_TYPE + suit_restricted = null + /obj/item/clothing/under/marine/tanker name = "\improper UACM tanker uniform" icon_state = "marine_tanker" @@ -95,6 +107,10 @@ flags_jumpsuit = FALSE specialty = "UACM tanker" +/obj/item/clothing/under/marine/tanker/standard + flags_atom = NO_SNOW_TYPE + suit_restricted = null + /obj/item/clothing/under/marine/tanker/New(loc, new_protection = list(MAP_ICE_COLONY = ICE_PLANET_MIN_COLD_PROT), override_icon_state = list(MAP_ICE_COLONY = "s_marine_tanker")) diff --git a/colonialmarines.dme b/colonialmarines.dme index d814088a41..2803571baa 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -975,6 +975,8 @@ #include "code\game\machinery\vending\vendor_types\crew\staff_officer_armory.dm" #include "code\game\machinery\vending\vendor_types\crew\synthetic.dm" #include "code\game\machinery\vending\vendor_types\crew\vehicle_crew.dm" +#include "code\game\machinery\vending\vendor_types\pve\pve_clothes.dm" +#include "code\game\machinery\vending\vendor_types\pve\pve_guns.dm" #include "code\game\machinery\vending\vendor_types\squad_prep\squad_engineer.dm" #include "code\game\machinery\vending\vendor_types\squad_prep\squad_leader.dm" #include "code\game\machinery\vending\vendor_types\squad_prep\squad_medic.dm" diff --git a/icons/obj/items/items.dmi b/icons/obj/items/items.dmi index 860acb3e3416df23619b0e55d0c9082daffd0656..c951e31444577695867973a7b631600858f62241 100644 GIT binary patch delta 9878 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