From b77b2974e3f6048e57ede7278f9e4ccfd210ee2a Mon Sep 17 00:00:00 2001 From: Red <47158596+Red-byte3D@users.noreply.github.com> Date: Thu, 20 Jun 2024 00:11:24 +0300 Subject: [PATCH] STEEL DIVISON (Re-introduces 200 pop locked tank) [CODE BOUNTY] (#6304) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # About the pull request Re-introduces the tank and tank crew back into the game, unlocking at 200 pop. # Explain why it's good for the game to do list re-introduce VC ✅ re-introduce Tank ✅ re-introduce tank attachements ✅ Make crewmen start with gear preset ✅ add pop lock ✅ fix bugs ✅ crew man / tank crew consistency ✅ crawl / ledge ✅
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: balance: Re-adds Vehicle Crewmen balance: Tank now unlocks at 200 pop. balance: Re-adds tank and its attachements back to the tank-bay. balance: You can no longer have the ARC & TANK in the same round. if the arc is bought the tank is unavailable and vice versa. /:cl: --------- Co-authored-by: InsaneRed Co-authored-by: InsaneRed <47158596+InsaneRed@users.noreply.github.com> Co-authored-by: Git-Nivrak <59925169+Git-Nivrak@users.noreply.github.com> Co-authored-by: harryob <55142896+harryob@users.noreply.github.com> --- code/__DEFINES/job.dm | 4 +- code/__DEFINES/mode.dm | 8 +- code/__HELPERS/job.dm | 1 + code/datums/factions/uscm.dm | 4 +- .../colonialmarines/whiskey_outpost.dm | 2 +- .../jobs/job/command/auxiliary/tank_crew.dm | 28 +++++++ code/game/jobs/role_authority.dm | 1 - .../vending/vendor_types/crew/vehicle_crew.dm | 74 +++---------------- code/game/supplyshuttle.dm | 11 +-- .../character_traits/biology_traits.dm | 2 +- code/modules/client/preferences.dm | 4 +- code/modules/cm_marines/marines_consoles.dm | 1 + code/modules/cm_tech/implements/tank.dm | 2 +- .../modules/cm_tech/techs/marine/tier1/arc.dm | 13 ++++ code/modules/cm_tech/techtree.dm | 1 + code/modules/gear_presets/other.dm | 4 +- code/modules/gear_presets/uscm.dm | 4 +- .../mob/new_player/preferences_setup.dm | 2 + code/modules/vehicles/apc/apc.dm | 2 +- code/modules/vehicles/apc/apc_command.dm | 2 +- code/modules/vehicles/apc/apc_medical.dm | 2 +- .../vehicles/hardpoints/armor/snowplow.dm | 2 +- .../vehicles/hardpoints/holder/tank_turret.dm | 2 +- .../vehicles/hardpoints/wheels/treads.dm | 4 +- .../interior/interactable/vehicle_locker.dm | 2 +- code/modules/vehicles/tank/tank.dm | 35 ++++++++- colonialmarines.dme | 1 + 27 files changed, 120 insertions(+), 98 deletions(-) create mode 100644 code/game/jobs/job/command/auxiliary/tank_crew.dm diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 5b295e68069f..bedc8234d9c9 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -77,13 +77,13 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST) #define JOB_AUXILIARY_OFFICER "Auxiliary Support Officer" #define JOB_CAS_PILOT "Gunship Pilot" #define JOB_DROPSHIP_PILOT "Dropship Pilot" +#define JOB_TANK_CREW "Tank Crew" #define JOB_DROPSHIP_CREW_CHIEF "Dropship Crew Chief" -#define JOB_CREWMAN "Vehicle Crewman" #define JOB_INTEL "Intelligence Officer" #define JOB_DROPSHIP_ROLES /datum/timelock/dropship #define JOB_DROPSHIP_ROLES_LIST list(JOB_DROPSHIP_CREW_CHIEF, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT) #define JOB_AUXILIARY_ROLES /datum/timelock/auxiliary -#define JOB_AUXILIARY_ROLES_LIST list(JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_INTEL) +#define JOB_AUXILIARY_ROLES_LIST list(JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_INTEL, JOB_TANK_CREW) #define JOB_POLICE "Military Police" #define JOB_WARDEN "Military Warden" diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index ca35fadd396b..4c3a658ff421 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -120,12 +120,12 @@ //================================================= //Role defines, specifically lists of roles for job bans, crew manifests and the like. -GLOBAL_LIST_INIT(ROLES_COMMAND, list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_POLICE, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_REQUISITION, JOB_CHIEF_ENGINEER, JOB_CMO, JOB_CHIEF_POLICE, JOB_SEA, JOB_SYNTH, JOB_WARDEN)) +GLOBAL_LIST_INIT(ROLES_COMMAND, list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_TANK_CREW, JOB_DROPSHIP_CREW_CHIEF, JOB_POLICE, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_REQUISITION, JOB_CHIEF_ENGINEER, JOB_CMO, JOB_CHIEF_POLICE, JOB_SEA, JOB_SYNTH, JOB_WARDEN)) //Marine roles -#define ROLES_OFFICERS list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_SYNTH, JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE) +#define ROLES_OFFICERS list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_TANK_CREW, JOB_DROPSHIP_CREW_CHIEF, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_SYNTH, JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE) GLOBAL_LIST_INIT(ROLES_CIC, list(JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO)) -GLOBAL_LIST_INIT(ROLES_AUXIL_SUPPORT, list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT)) +GLOBAL_LIST_INIT(ROLES_AUXIL_SUPPORT, list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_TANK_CREW, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT)) GLOBAL_LIST_INIT(ROLES_MISC, list(JOB_SYNTH, JOB_WORKING_JOE, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_MESS_SERGEANT, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH)) GLOBAL_LIST_INIT(ROLES_POLICE, list(JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE)) GLOBAL_LIST_INIT(ROLES_ENGINEERING, list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH)) @@ -153,7 +153,7 @@ GLOBAL_LIST_INIT(ROLES_UNASSIGNED, list(JOB_SQUAD_MARINE)) JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE #define BLURB_USCM_FLIGHT JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF #define BLURB_USCM_MP JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE -#define BLURB_USCM_ENGI JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_WO_PILOT +#define BLURB_USCM_ENGI JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_TANK_CREW, JOB_WO_PILOT #define BLURB_USCM_MEDICAL JOB_CMO, JOB_RESEARCHER, JOB_DOCTOR, JOB_NURSE, JOB_WO_CMO, JOB_WO_RESEARCHER, JOB_WO_DOCTOR #define BLURB_USCM_REQ JOB_CHIEF_REQUISITION, JOB_CARGO_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION #define BLURB_USCM_WY JOB_CORPORATE_LIAISON diff --git a/code/__HELPERS/job.dm b/code/__HELPERS/job.dm index ec36a485333c..51cc496feeae 100644 --- a/code/__HELPERS/job.dm +++ b/code/__HELPERS/job.dm @@ -34,6 +34,7 @@ JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, + JOB_TANK_CREW, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_ENGINEER, diff --git a/code/datums/factions/uscm.dm b/code/datums/factions/uscm.dm index 927b6f937b8a..f7c49321f305 100644 --- a/code/datums/factions/uscm.dm +++ b/code/datums/factions/uscm.dm @@ -24,9 +24,9 @@ if(JOB_GENERAL) marine_rk = "general" if(JOB_CAS_PILOT) marine_rk = "gp" if(JOB_DROPSHIP_PILOT) marine_rk = "dp" + if(JOB_TANK_CREW) marine_rk = "tc" if(JOB_INTEL) marine_rk = "io" if(JOB_DROPSHIP_CREW_CHIEF) marine_rk = "dcc" - if(JOB_CREWMAN) marine_rk = "tc" if(JOB_MARINE_RAIDER) marine_rk = "soc" if(JOB_MARINE_RAIDER_SL) marine_rk = "soctl" if(JOB_MARINE_RAIDER_CMD) marine_rk = "soccmd" @@ -100,6 +100,8 @@ border_rk = "command" if(JOB_POLICE) marine_rk = "mp" + if(JOB_TANK_CREW) + marine_rk = "tc" if(JOB_WARDEN) marine_rk = "warden" border_rk = "command" diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm index c5b25d3e1538..e7a43debb5fc 100644 --- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm +++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm @@ -18,7 +18,7 @@ /datum/job/civilian/synthetic/whiskey = JOB_SYNTH, /datum/job/command/warrant/whiskey = JOB_CHIEF_POLICE, /datum/job/command/bridge/whiskey = JOB_SO, - /datum/job/command/tank_crew/whiskey = JOB_CREWMAN, + /datum/job/command/tank_crew/whiskey = JOB_TANK_CREW, /datum/job/command/police/whiskey = JOB_POLICE, /datum/job/command/pilot/whiskey = JOB_CAS_PILOT, /datum/job/logistics/requisition/whiskey = JOB_CHIEF_REQUISITION, diff --git a/code/game/jobs/job/command/auxiliary/tank_crew.dm b/code/game/jobs/job/command/auxiliary/tank_crew.dm new file mode 100644 index 000000000000..88b289d48ace --- /dev/null +++ b/code/game/jobs/job/command/auxiliary/tank_crew.dm @@ -0,0 +1,28 @@ +/datum/job/command/tank_crew + title = JOB_TANK_CREW + total_positions = 2 + spawn_positions = 2 + allow_additional = TRUE + scaled = TRUE + supervisors = "the acting commanding officer" + flags_startup_parameters = ROLE_ADD_TO_DEFAULT + gear_preset = /datum/equipment_preset/uscm/tank + entry_message_body = "Your job is to operate and maintain the ship's armored vehicles. You are in charge of representing the armored presence amongst the marines during the operation, as well as maintaining and repairing your own vehicles." + +/datum/job/command/tank_crew/set_spawn_positions(count) + if (length(GLOB.clients) >= 200) + spawn_positions = 2 + else + spawn_positions = 0 + +/datum/job/command/tank_crew/get_total_positions(latejoin = FALSE) + if(SStechtree.trees[TREE_MARINE].get_node(/datum/tech/arc).unlocked) + return 0 + if(length(GLOB.clients) >= 200 || total_positions_so_far > 0) + return 2 + + return 0 + +/obj/effect/landmark/start/tank_crew + name = JOB_TANK_CREW + job = /datum/job/command/tank_crew diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index 58c9ad5b5092..a9017e2cc8d3 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -61,7 +61,6 @@ GLOBAL_VAR_INIT(players_preassigned, 0) /datum/job/special/uaac, /datum/job/special/uaac/tis, /datum/job/special/uscm, - /datum/job/command/tank_crew //Rip VC ) var/squads_all[] = typesof(/datum/squad) - /datum/squad var/castes_all[] = subtypesof(/datum/caste_datum) diff --git a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm index 0586f4b72fa5..53853f7d4e8b 100644 --- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm +++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm @@ -7,7 +7,7 @@ icon_state = "vehicle_gear" req_access = list(ACCESS_MARINE_CREWMAN) - vendor_role = list(JOB_CREWMAN) + vendor_role = list(JOB_TANK_CREW) bound_width = 64 unslashable = TRUE @@ -56,30 +56,27 @@ UnregisterSignal(SSdcs, COMSIG_GLOB_VEHICLE_ORDERED) if(!selected_vehicle) - selected_vehicle = "APC" // The whole thing seems to be based upon the assumption you unlock tank as an override, defaulting to APC - if(selected_vehicle == "APC") - available_categories &= ~(VEHICLE_ARMOR_AVAILABLE|VEHICLE_INTEGRAL_AVAILABLE) //APC lacks these, so we need to remove these flags to be able to access spare parts section + selected_vehicle = "TANK" // The whole thing seems to be based upon the assumption you unlock tank as an override, defaulting to APC + if(selected_vehicle == "TANK") + available_categories &= ~(VEHICLE_INTEGRAL_AVAILABLE) //APC lacks these, so we need to remove these flags to be able to access spare parts section + marine_announcement("A tank is being sent up to reinforce this operation.") /obj/structure/machinery/cm_vending/gear/vehicle_crew/get_listed_products(mob/user) var/list/display_list = list() if(!user) display_list += GLOB.cm_vending_vehicle_crew_tank - display_list += GLOB.cm_vending_vehicle_crew_tank_spare display_list += GLOB.cm_vending_vehicle_crew_apc - display_list += GLOB.cm_vending_vehicle_crew_apc_spare return display_list if(selected_vehicle == "TANK") if(available_categories) display_list = GLOB.cm_vending_vehicle_crew_tank - else - display_list = GLOB.cm_vending_vehicle_crew_tank_spare else if(selected_vehicle == "ARC") display_list = GLOB.cm_vending_vehicle_crew_arc - else if(selected_vehicle == "APC") + else if(selected_vehicle == "TANK") if(available_categories) display_list = GLOB.cm_vending_vehicle_crew_apc else //APC stuff costs more to prevent 4000 points spent on shitton of ammunition @@ -150,64 +147,11 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_tank, list( list("Overdrive Enhancer", 0, /obj/item/hardpoint/support/overdrive_enhancer, VEHICLE_SUPPORT_AVAILABLE, VENDOR_ITEM_RECOMMENDED), list("ARMOR", 0, null, null, null), - list("Ballistic Armor", 0, /obj/item/hardpoint/armor/ballistic, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_RECOMMENDED), - list("Caustic Armor", 0, /obj/item/hardpoint/armor/caustic, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_REGULAR), - list("Concussive Armor", 0, /obj/item/hardpoint/armor/concussive, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_REGULAR), - list("Paladin Armor", 0, /obj/item/hardpoint/armor/paladin, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_REGULAR), list("Snowplow", 0, /obj/item/hardpoint/armor/snowplow, VEHICLE_ARMOR_AVAILABLE, VENDOR_ITEM_REGULAR), list("TREADS", 0, null, null, null), list("Reinforced Treads", 0, /obj/item/hardpoint/locomotion/treads/robust, VEHICLE_TREADS_AVAILABLE, VENDOR_ITEM_REGULAR), - list("Treads", 0, /obj/item/hardpoint/locomotion/treads, VEHICLE_TREADS_AVAILABLE, VENDOR_ITEM_RECOMMENDED))) - -GLOBAL_LIST_INIT(cm_vending_vehicle_crew_tank_spare, list( - list("SPARE PARTS SELECTION:", 0, null, null, null), - - list("INTEGRAL PARTS", 0, null, null, null), - list("M34A2-A Multipurpose Turret", 500, /obj/item/hardpoint/holder/tank_turret, null, VENDOR_ITEM_REGULAR), - - list("SUPPORT AMMUNITION", 0, null, null, null), - list("Turret Smoke Screen Magazine", 50, /obj/item/ammo_magazine/hardpoint/turret_smoke, null, VENDOR_ITEM_REGULAR), - - list("PRIMARY WEAPON", 0, null, null, null), - list("AC3-E Autocannon", 200, /obj/item/hardpoint/primary/autocannon, null, VENDOR_ITEM_REGULAR), - list("DRG-N Offensive Flamer Unit", 200, /obj/item/hardpoint/primary/flamer, null, VENDOR_ITEM_REGULAR), - list("LTAA-AP Minigun", 200, /obj/item/hardpoint/primary/minigun, null, VENDOR_ITEM_REGULAR), - list("LTB Cannon", 400, /obj/item/hardpoint/primary/cannon, null, VENDOR_ITEM_RECOMMENDED), - - list("PRIMARY AMMUNITION", 0, null, null, null), - list("AC3-E Autocannon Magazine", 100, /obj/item/ammo_magazine/hardpoint/ace_autocannon, null, VENDOR_ITEM_REGULAR), - list("DRG-N Offensive Flamer Unit Fuel Tank", 100, /obj/item/ammo_magazine/hardpoint/primary_flamer, null, VENDOR_ITEM_REGULAR), - list("LTAA-AP Minigun Magazine", 100, /obj/item/ammo_magazine/hardpoint/ltaaap_minigun, null, VENDOR_ITEM_REGULAR), - list("LTB Cannon Magazine", 100, /obj/item/ammo_magazine/hardpoint/ltb_cannon, null, VENDOR_ITEM_REGULAR), - - list("SECONDARY WEAPON", 0, null, null, null), - list("M92T Grenade Launcher", 200, /obj/item/hardpoint/secondary/grenade_launcher, null, VENDOR_ITEM_REGULAR), - list("M56 Cupola", 200, /obj/item/hardpoint/secondary/m56cupola, null, VENDOR_ITEM_REGULAR), - list("LZR-N Flamer Unit", 200, /obj/item/hardpoint/secondary/small_flamer, null, VENDOR_ITEM_REGULAR), - list("TOW Launcher", 300, /obj/item/hardpoint/secondary/towlauncher, null, VENDOR_ITEM_REGULAR), - - list("SECONDARY AMMUNITION", 0, null, null, null), - list("M92T Grenade Launcher Magazine", 50, /obj/item/ammo_magazine/hardpoint/tank_glauncher, null, VENDOR_ITEM_REGULAR), - list("M56 Cupola Magazine", 50, /obj/item/ammo_magazine/hardpoint/m56_cupola, null, VENDOR_ITEM_REGULAR), - list("LZR-N Flamer Unit Fuel Tank", 50, /obj/item/ammo_magazine/hardpoint/secondary_flamer, null, VENDOR_ITEM_REGULAR), - list("TOW Launcher Magazine", 50, /obj/item/ammo_magazine/hardpoint/towlauncher, null, VENDOR_ITEM_REGULAR), - - list("SUPPORT MODULE", 0, null, null, null), - list("Artillery Module", 300, /obj/item/hardpoint/support/artillery_module, null, VENDOR_ITEM_REGULAR), - list("Integrated Weapons Sensor Array", 200, /obj/item/hardpoint/support/weapons_sensor, null, VENDOR_ITEM_REGULAR), - list("Overdrive Enhancer", 200, /obj/item/hardpoint/support/overdrive_enhancer, null, VENDOR_ITEM_REGULAR), - - list("ARMOR", 0, null, null, null), - list("Ballistic Armor", 300, /obj/item/hardpoint/armor/ballistic, null, VENDOR_ITEM_REGULAR), - list("Caustic Armor", 300, /obj/item/hardpoint/armor/caustic, null, VENDOR_ITEM_REGULAR), - list("Concussive Armor", 300, /obj/item/hardpoint/armor/concussive, null, VENDOR_ITEM_REGULAR), - list("Paladin Armor", 300, /obj/item/hardpoint/armor/paladin, null, VENDOR_ITEM_REGULAR), - list("Snowplow", 200, /obj/item/hardpoint/armor/snowplow, null, VENDOR_ITEM_REGULAR), - - list("TREADS", 0, null, null, null), - list("Reinforced Treads", 200, /obj/item/hardpoint/locomotion/treads/robust, null, VENDOR_ITEM_REGULAR), - list("Treads", 200, /obj/item/hardpoint/locomotion/treads, null, VENDOR_ITEM_REGULAR))) + list("Treads", 0, /obj/item/hardpoint/locomotion/treads, VEHICLE_TREADS_AVAILABLE, VENDOR_ITEM_REGULAR))) GLOBAL_LIST_INIT(cm_vending_vehicle_crew_apc, list( list("STARTING KIT SELECTION:", 0, null, null, null), @@ -261,7 +205,7 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_arc, list( desc = "An automated weapon rack hooked up to a small storage of standard-issue weapons. Can be accessed only by the Vehicle Crewmen." icon_state = "guns" req_access = list(ACCESS_MARINE_CREWMAN) - vendor_role = list(JOB_CREWMAN) + vendor_role = list(JOB_TANK_CREW) vend_flags = VEND_CLUTTER_PROTECTION | VEND_LIMITED_INVENTORY | VEND_TO_HAND listed_products = list( @@ -400,7 +344,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_vehicle_crew, list( name = "\improper ColMarTech Vehicle Crewman Equipment Rack" desc = "An automated rack hooked up to a colossal storage of Vehicle Crewmen standard-issue equipment." req_access = list(ACCESS_MARINE_CREWMAN) - vendor_role = list(JOB_CREWMAN) + vendor_role = list(JOB_TANK_CREW) /obj/structure/machinery/cm_vending/clothing/vehicle_crew/get_listed_products(mob/user) return GLOB.cm_vending_clothing_vehicle_crew diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 3e61939cb1ca..c1d0352766a6 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -1323,9 +1323,9 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new()) req_access = list(ACCESS_MARINE_CREWMAN) circuit = /obj/item/circuitboard/computer/supplycomp/vehicle // Can only retrieve one vehicle per round - var/spent = TRUE - var/tank_unlocked = FALSE - var/list/allowed_roles = list(JOB_CREWMAN) + var/spent = FALSE + var/tank_unlocked = TRUE + var/list/allowed_roles = list(JOB_TANK_CREW) var/list/vehicles @@ -1384,9 +1384,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new()) . = ..() vehicles = list( - new /datum/vehicle_order/apc(), - new /datum/vehicle_order/apc/med(), - new /datum/vehicle_order/apc/cmd(), + new /datum/vehicle_order/tank/plain ) if(!GLOB.VehicleElevatorConsole) @@ -1477,7 +1475,6 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new()) if(VO?.has_vehicle_lock()) return - spent = TRUE ordered_vehicle = new VO.ordered_vehicle(middle_turf) SSshuttle.vehicle_elevator.request(SSshuttle.getDock("almayer vehicle")) diff --git a/code/modules/character_traits/biology_traits.dm b/code/modules/character_traits/biology_traits.dm index a78dd0d38464..2220f8f82fd2 100644 --- a/code/modules/character_traits/biology_traits.dm +++ b/code/modules/character_traits/biology_traits.dm @@ -82,7 +82,7 @@ /datum/character_trait/biology/bad_leg/New() . = ..() // Not on definition as several lists are added - inapplicable_roles = list(JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_INTEL, JOB_ORDNANCE_TECH, JOB_MARINE) + JOB_SQUAD_ROLES_LIST + JOB_MARINE_RAIDER_ROLES_LIST + JOB_ERT_GRUNT_LIST + inapplicable_roles = list(JOB_CAS_PILOT, JOB_DROPSHIP_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_TANK_CREW, JOB_INTEL, JOB_ORDNANCE_TECH, JOB_MARINE) + JOB_SQUAD_ROLES_LIST + JOB_MARINE_RAIDER_ROLES_LIST + JOB_ERT_GRUNT_LIST bad_cane_roles = list(JOB_SURVIVOR, JOB_STOWAWAY) fancy_cane_roles = list(JOB_CO_SURVIVOR, CORPORATE_SURVIVOR, JOB_CMO, JOB_CORPORATE_LIAISON, JOB_SEA, JOB_CHIEF_ENGINEER) + JOB_COMMAND_ROLES_LIST inapplicable_species = list(SPECIES_SYNTHETIC, SPECIES_YAUTJA) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 12111e12be3a..1971deba6356 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -667,7 +667,7 @@ GLOBAL_LIST_INIT(bgstate_options, list( * * width - Screen' width. * * height - Screen's height. */ -/datum/preferences/proc/SetChoices(mob/user, limit = 20, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750) +/datum/preferences/proc/SetChoices(mob/user, limit = 21, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750) if(!GLOB.RoleAuthority) return @@ -785,7 +785,7 @@ GLOBAL_LIST_INIT(bgstate_options, list( * * width - Screen' width. * * height - Screen's height. */ -/datum/preferences/proc/set_job_slots(mob/user, limit = 20, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750) +/datum/preferences/proc/set_job_slots(mob/user, limit = 21, list/splitJobs = list(JOB_CHIEF_REQUISITION, JOB_WO_CMO), width = 950, height = 750) if(!GLOB.RoleAuthority) return diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm index 6d1aba4aca70..93ef0e21e8cb 100644 --- a/code/modules/cm_marines/marines_consoles.dm +++ b/code/modules/cm_marines/marines_consoles.dm @@ -942,6 +942,7 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor) JOB_DROPSHIP_PILOT = 23, JOB_DROPSHIP_CREW_CHIEF = 24, JOB_INTEL = 25, + JOB_TANK_CREW = 26, // 30-39: Security JOB_CHIEF_POLICE = 30, JOB_PROVOST_TML = 30, diff --git a/code/modules/cm_tech/implements/tank.dm b/code/modules/cm_tech/implements/tank.dm index ec1b81e9f675..9cd8a5c6a804 100644 --- a/code/modules/cm_tech/implements/tank.dm +++ b/code/modules/cm_tech/implements/tank.dm @@ -18,7 +18,7 @@ name = "tank coupon" desc = "We're done playing! This coupon allows the ship crew to retrieve a complete Longstreet tank from Vehicle ASRS. Make sure to send the ASRS lift down so it can be retrieved. One use only. LTB not included. Comes with free friendly fire." vehicle_type = /datum/vehicle_order/tank/broken - vehicle_category = "TANK" + vehicle_category = "LONGSTREET" /obj/item/vehicle_coupon/attack_self(mob/user) if(QDELETED(src)) diff --git a/code/modules/cm_tech/techs/marine/tier1/arc.dm b/code/modules/cm_tech/techs/marine/tier1/arc.dm index dc02762cc5f0..1e3a193626c4 100644 --- a/code/modules/cm_tech/techs/marine/tier1/arc.dm +++ b/code/modules/cm_tech/techs/marine/tier1/arc.dm @@ -12,6 +12,19 @@ flags = TREE_FLAG_MARINE + +/datum/tech/arc/can_unlock(mob/unlocking_mob) + . = ..() + + var/obj/structure/machinery/cm_vending/gear/vehicle_crew/gearcomp = GLOB.VehicleGearConsole + + if(gearcomp.selected_vehicle == "TANK") + to_chat(unlocking_mob, SPAN_WARNING ("A vehicle has already been selected for this operation.")) + return FALSE + + return TRUE + + /datum/tech/arc/on_unlock() . = ..() diff --git a/code/modules/cm_tech/techtree.dm b/code/modules/cm_tech/techtree.dm index 689600fcc5f2..fbad30478081 100644 --- a/code/modules/cm_tech/techtree.dm +++ b/code/modules/cm_tech/techtree.dm @@ -180,6 +180,7 @@ /// `tech`: a typepath to a tech /datum/techtree/proc/get_node(tech) + RETURN_TYPE(/datum/tech) return techs_by_type[tech] /datum/techtree/proc/on_node_gained(obj/structure/resource_node/RN) diff --git a/code/modules/gear_presets/other.dm b/code/modules/gear_presets/other.dm index 9e4ca1472f08..9ea05749fe0d 100644 --- a/code/modules/gear_presets/other.dm +++ b/code/modules/gear_presets/other.dm @@ -881,8 +881,8 @@ flags = EQUIPMENT_PRESET_EXTRA idtype = /obj/item/card/id/dogtag - assignment = JOB_CREWMAN - rank = JOB_CREWMAN + assignment = JOB_TANK_CREW + rank = JOB_TANK_CREW paygrade = PAY_SHORT_ME4 role_comm_title = "CRMN" minimum_age = 30 diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm index c17aa2af3633..4b018eea1d50 100644 --- a/code/modules/gear_presets/uscm.dm +++ b/code/modules/gear_presets/uscm.dm @@ -161,8 +161,8 @@ ACCESS_MARINE_CHARLIE, ACCESS_MARINE_DELTA, ) - assignment = JOB_CREWMAN - rank = JOB_CREWMAN + assignment = JOB_TANK_CREW + rank = JOB_TANK_CREW paygrade = PAY_SHORT_ME4 role_comm_title = "CRMN" minimum_age = 30 diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 93c991d26c29..4c2c83d18257 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -260,6 +260,8 @@ return /datum/equipment_preset/uscm/intel/full if(JOB_CAS_PILOT) return /datum/equipment_preset/uscm_ship/gp/full + if(JOB_TANK_CREW) + return /datum/equipment_preset/uscm/tank/full if(JOB_DROPSHIP_PILOT) return /datum/equipment_preset/uscm_ship/dp/full if(JOB_DROPSHIP_CREW_CHIEF) diff --git a/code/modules/vehicles/apc/apc.dm b/code/modules/vehicles/apc/apc.dm index 78219e439832..b7d35f21fbe3 100644 --- a/code/modules/vehicles/apc/apc.dm +++ b/code/modules/vehicles/apc/apc.dm @@ -87,7 +87,7 @@ GLOBAL_LIST_EMPTY(command_apc_list) /obj/vehicle/multitile/apc/load_role_reserved_slots() var/datum/role_reserved_slots/RRS = new RRS.category_name = "Crewmen" - RRS.roles = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) + RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) RRS.total = 2 role_reserved_slots += RRS diff --git a/code/modules/vehicles/apc/apc_command.dm b/code/modules/vehicles/apc/apc_command.dm index 54647279ec3b..8d056daec2ea 100644 --- a/code/modules/vehicles/apc/apc_command.dm +++ b/code/modules/vehicles/apc/apc_command.dm @@ -68,7 +68,7 @@ /obj/vehicle/multitile/apc/command/load_role_reserved_slots() var/datum/role_reserved_slots/RRS = new RRS.category_name = "Crewmen" - RRS.roles = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) + RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) RRS.total = 2 role_reserved_slots += RRS diff --git a/code/modules/vehicles/apc/apc_medical.dm b/code/modules/vehicles/apc/apc_medical.dm index f8809bedaa73..7d462e7da27b 100644 --- a/code/modules/vehicles/apc/apc_medical.dm +++ b/code/modules/vehicles/apc/apc_medical.dm @@ -32,7 +32,7 @@ /obj/vehicle/multitile/apc/medical/load_role_reserved_slots() var/datum/role_reserved_slots/RRS = new RRS.category_name = "Crewmen" - RRS.roles = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) + RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) RRS.total = 2 role_reserved_slots += RRS diff --git a/code/modules/vehicles/hardpoints/armor/snowplow.dm b/code/modules/vehicles/hardpoints/armor/snowplow.dm index 84e589658029..a1b1a9dc800c 100644 --- a/code/modules/vehicles/hardpoints/armor/snowplow.dm +++ b/code/modules/vehicles/hardpoints/armor/snowplow.dm @@ -6,7 +6,7 @@ disp_icon = "tank" disp_icon_state = "snowplow" - health = 600 + health = 150 activatable = 1 /obj/item/hardpoint/armor/snowplow/livingmob_interact(mob/living/M) diff --git a/code/modules/vehicles/hardpoints/holder/tank_turret.dm b/code/modules/vehicles/hardpoints/holder/tank_turret.dm index bdf106aecac3..2a01098de523 100644 --- a/code/modules/vehicles/hardpoints/holder/tank_turret.dm +++ b/code/modules/vehicles/hardpoints/holder/tank_turret.dm @@ -27,7 +27,7 @@ slot = HDPT_TURRET // big beefy chonk of metal - health = 750 + health = 450 damage_multiplier = 0.05 accepted_hardpoints = list( diff --git a/code/modules/vehicles/hardpoints/wheels/treads.dm b/code/modules/vehicles/hardpoints/wheels/treads.dm index b718d1c8e897..dd819ea2af03 100644 --- a/code/modules/vehicles/hardpoints/wheels/treads.dm +++ b/code/modules/vehicles/hardpoints/wheels/treads.dm @@ -8,7 +8,7 @@ slot = HDPT_TREADS - health = 500 + health = 300 //with this settings, takes 3 tiles to reach top speed move_delay = 3.8 @@ -20,7 +20,7 @@ name = "Reinforced Treads" desc = "These treads are made of a tougher material and are more durable. However, the extra weight slows the tank down slightly." - health = 750 + health = 500 acid_resistant = TRUE move_max_momentum = 5 //same top speed, but takes 5 tiles to reach it diff --git a/code/modules/vehicles/interior/interactable/vehicle_locker.dm b/code/modules/vehicles/interior/interactable/vehicle_locker.dm index 5571995594f0..1ad6fb5bb8df 100644 --- a/code/modules/vehicles/interior/interactable/vehicle_locker.dm +++ b/code/modules/vehicles/interior/interactable/vehicle_locker.dm @@ -15,7 +15,7 @@ unslashable = TRUE indestructible = TRUE - var/list/role_restriction = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) + var/list/role_restriction = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) var/obj/item/storage/internal/container diff --git a/code/modules/vehicles/tank/tank.dm b/code/modules/vehicles/tank/tank.dm index 147e359471df..1cc1174c43fe 100644 --- a/code/modules/vehicles/tank/tank.dm +++ b/code/modules/vehicles/tank/tank.dm @@ -90,7 +90,7 @@ /obj/vehicle/multitile/tank/load_role_reserved_slots() var/datum/role_reserved_slots/RRS = new RRS.category_name = "Crewmen" - RRS.roles = list(JOB_CREWMAN, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) + RRS.roles = list(JOB_TANK_CREW, JOB_WO_CREWMAN, JOB_UPP_CREWMAN, JOB_PMC_CREWMAN) RRS.total = 2 role_reserved_slots += RRS @@ -165,6 +165,39 @@ return TRUE +/obj/vehicle/multitile/tank/MouseDrop_T(mob/dropped, mob/user) + . = ..() + if((dropped != user) || !isxeno(user)) + return + + if(health > 0) + to_chat(user, SPAN_XENO("We can't jump over [src] until it is destroyed!")) + return + + var/turf/current_turf = get_turf(user) + var/dir_to_go = get_dir(current_turf, src) + for(var/i in 1 to 3) + current_turf = get_step(current_turf, dir_to_go) + if(!(current_turf in locs)) + break + + if(current_turf.density) + to_chat(user, SPAN_XENO("The path over [src] is obstructed!")) + return + + // Now we check to make sure the turf on the other side of the tank isn't dense too + current_turf = get_step(current_turf, dir_to_go) + if(current_turf.density) + to_chat(user, SPAN_XENO("The path over [src] is obstructed!")) + return + + to_chat(user, SPAN_XENO("We begin to jump over [src]...")) + if(!do_after(user, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE)) + to_chat(user, SPAN_XENO("We stop jumping over [src].")) + return + + user.forceMove(current_turf) + to_chat(user, SPAN_XENO("We jump to the other side of [src].")) /* ** PRESETS SPAWNERS */ diff --git a/colonialmarines.dme b/colonialmarines.dme index 69ed0d259384..5193cd3571cb 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -806,6 +806,7 @@ #include "code\game\jobs\job\command\auxiliary\dropship_pilot.dm" #include "code\game\jobs\job\command\auxiliary\intel.dm" #include "code\game\jobs\job\command\auxiliary\senior.dm" +#include "code\game\jobs\job\command\auxiliary\tank_crew.dm" #include "code\game\jobs\job\command\cic\captain.dm" #include "code\game\jobs\job\command\cic\executive.dm" #include "code\game\jobs\job\command\cic\staffofficer.dm"