From 699a8c97bb69ae6b8e6ee57dbf76f2701501cd03 Mon Sep 17 00:00:00 2001 From: githubuser4141 <61243846+githubuser4141@users.noreply.github.com> Date: Sat, 25 May 2024 17:09:04 +1200 Subject: [PATCH 1/2] yes. --- code/__DEFINES/armor.dm | 104 ++ code/__DEFINES/construction.dm | 2 + .../recipes/recipes_weapon_and_ammo.dm | 26 - .../recipes/{ => vehicles}/vehicle_parts.dm | 0 .../recipes/vehicles/vehicle_weapons.dm | 64 + code/game/mecha/combat/combat.dm | 1 - code/game/mecha/combat/gygax.dm | 1 - code/game/mecha/combat/marauder.dm | 3 - code/game/mecha/combat/phazon.dm | 1297 ----------------- code/game/mecha/equipment/mecha_equipment.dm | 50 +- .../game/mecha/equipment/tools/other_tools.dm | 8 +- .../equipment/weapons/fallout/ballistic.dm | 33 + .../mecha/equipment/weapons/fallout/energy.dm | 27 + .../mecha/equipment/weapons/mecha_ammo.dm | 2 +- code/game/mecha/equipment/weapons/weapons.dm | 61 +- code/game/mecha/fallout/armored.dm | 44 + code/game/mecha/fallout/birds.dm | 272 ++++ code/game/mecha/fallout/buggies.dm | 159 ++ code/game/mecha/fallout/carriages.dm | 95 ++ code/game/mecha/fallout/cars.dm | 97 ++ code/game/mecha/fallout/pickuptrucks.dm | 103 ++ code/game/mecha/fallout/trucks.dm | 108 ++ code/game/mecha/mecha.dm | 12 +- code/game/mecha/mecha_topic.dm | 29 +- code/game/mecha/medical/medical.dm | 4 +- code/game/mecha/working/ripley.dm | 12 +- hailmary.dme | 12 +- icons/mecha/armoredjeep.dmi | Bin 0 -> 4695 bytes icons/mecha/mecha_equipment.dmi | Bin 18986 -> 20452 bytes 29 files changed, 1208 insertions(+), 1418 deletions(-) rename code/datums/components/crafting/recipes/{ => vehicles}/vehicle_parts.dm (100%) create mode 100644 code/datums/components/crafting/recipes/vehicles/vehicle_weapons.dm create mode 100644 code/game/mecha/equipment/weapons/fallout/ballistic.dm create mode 100644 code/game/mecha/equipment/weapons/fallout/energy.dm create mode 100644 code/game/mecha/fallout/armored.dm create mode 100644 code/game/mecha/fallout/birds.dm create mode 100644 code/game/mecha/fallout/buggies.dm create mode 100644 code/game/mecha/fallout/carriages.dm create mode 100644 code/game/mecha/fallout/cars.dm create mode 100644 code/game/mecha/fallout/pickuptrucks.dm create mode 100644 code/game/mecha/fallout/trucks.dm create mode 100644 icons/mecha/armoredjeep.dmi diff --git a/code/__DEFINES/armor.dm b/code/__DEFINES/armor.dm index 790d19d3988..35ffad15606 100644 --- a/code/__DEFINES/armor.dm +++ b/code/__DEFINES/armor.dm @@ -1055,3 +1055,107 @@ GLOBAL_LIST_INIT(all_armor_types, list( "acid" = 0, \ "wound" = 0, \ "damage_threshold" = 10) + +/* VEHICLE ARMOR VALUES +* +* +********/ + +/* + * Uncovered vehicle 'armor', for buggies or bicycles + * * * * * * * * * * * */ +#define ARMOR_VALUE_VEHICLE_BUGGY list(\ + "melee" = 20, \ + "bullet" = 10, \ + "laser" = 10, \ + "energy" = 5, \ + "bomb" = 0, \ + "bio" = 50, \ + "rad" = 25, \ + "fire" = 50, \ + "acid" = 50, \ + "wound" = 50, \ + "damage_threshold" = 0) + +/* + * Light duty vehicles like regular cars + * * * * * * * * * * * */ +#define ARMOR_VALUE_VEHICLE_CAR list(\ + "melee" = 30, \ + "bullet" = 15, \ + "laser" = 15, \ + "energy" = 5, \ + "bomb" = 10, \ + "bio" = 50, \ + "rad" = 25, \ + "fire" = 50, \ + "acid" = 50, \ + "wound" = 50, \ + "damage_threshold" = 3) + +/* + * Heavy-duty vehicles like trucks + * Built tough to withstand more abuse + * * * * * * * * * * * */ +#define ARMOR_VALUE_VEHICLE_TRUCK list(\ + "melee" = 45, \ + "bullet" = 20, \ + "laser" = 20, \ + "energy" = 10, \ + "bomb" = 25, \ + "bio" = 50, \ + "rad" = 25, \ + "fire" = 50, \ + "acid" = 50, \ + "wound" = 50, \ + "damage_threshold" = 5) + +/* + * Light vehicles with DIY armor added to vulnerable areas + * * * * * * * * * * * */ +#define ARMOR_VALUE_VEHICLE_ARMORED_LIGHT list(\ + "melee" = 50, \ + "bullet" = 25, \ + "laser" = 20, \ + "energy" = 20, \ + "bomb" = 35, \ + "bio" = 50, \ + "rad" = 50, \ + "fire" = 50, \ + "acid" = 50, \ + "wound" = 50, \ + "damage_threshold" = 8) + +/* + * Heavy vehicles with a significant amount of armor added + * Generally, purpose-built to withstand a decent amount of attacks + * * * * * * * * * * * */ +#define ARMOR_VALUE_VEHICLE_ARMORED list(\ + "melee" = 65, \ + "bullet" = 40, \ + "laser" = 40, \ + "energy" = 35, \ + "bomb" = 35, \ + "bio" = 50, \ + "rad" = 50, \ + "fire" = 50, \ + "acid" = 50, \ + "wound" = 50, \ + "damage_threshold" = 10) + +/* + * Very sturdy vehicles designed for frontline combat + * Expected to survive a lot of attacks and dish out punishment + * * * * * * * * * * * */ +#define ARMOR_VALUE_VEHICLE_TANK list(\ + "melee" = 75, \ + "bullet" = 55, \ + "laser" = 55, \ + "energy" = 50, \ + "bomb" = 50, \ + "bio" = 50, \ + "rad" = 50, \ + "fire" = 50, \ + "acid" = 50, \ + "wound" = 50, \ + "damage_threshold" = 12) \ No newline at end of file diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 7951b190e02..daf0a9e6b6b 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -120,6 +120,8 @@ //#define CAT_EXPLOSIVE "Explosives" #define CAT_VEHICLES "Vehicles" #define CAT_VEHICLEPARTS "Vehicle Parts" +#define CAT_VEHICLEWEAPONS "Vehicle Weapons" +#define CAT_VEHICLEAMMO "Vehicle Ammo" #define RCD_FLOORWALL 1 #define RCD_AIRLOCK 2 diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm index a2358423242..eace9775c9b 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -567,19 +567,6 @@ category = CAT_WEAPONRY subcategory = CAT_AMMO -/datum/crafting_recipe/lmgammo - name = "LMG Ammo for vehicules" - result = /obj/item/mecha_ammo/lmg/craftable - reqs = list(/obj/item/stack/crafting/metalparts = 5, - /obj/item/stack/sheet/prewar = 5, - /obj/item/ammo_box/a556 = 2, - /obj/item/stack/sheet/mineral/titanium = 1, - ) - tools = list(TOOL_AWORKBENCH) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - ///////////////// ///GUN CRAFTING// ///////////////// @@ -681,19 +668,6 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/gun/HMGvehicule - name = "Improvised HMG (for vehicules)" - result = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/hobo - reqs = list(/obj/item/gun/ballistic/automatic/autopipe = 2, - /obj/item/stack/crafting/metalparts = 10, - /obj/item/stack/sheet/prewar = 8, - /obj/item/stack/sheet/mineral/titanium = 8, - /obj/item/stack/rods = 2) - tools = list(TOOL_WORKBENCH) - time = 180 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - /datum/crafting_recipe/gun/shotgunbat name = "Shotgun bat" result = /obj/item/gun/ballistic/revolver/hobo/single_shotgun diff --git a/code/datums/components/crafting/recipes/vehicle_parts.dm b/code/datums/components/crafting/recipes/vehicles/vehicle_parts.dm similarity index 100% rename from code/datums/components/crafting/recipes/vehicle_parts.dm rename to code/datums/components/crafting/recipes/vehicles/vehicle_parts.dm diff --git a/code/datums/components/crafting/recipes/vehicles/vehicle_weapons.dm b/code/datums/components/crafting/recipes/vehicles/vehicle_weapons.dm new file mode 100644 index 00000000000..2d3230ef008 --- /dev/null +++ b/code/datums/components/crafting/recipes/vehicles/vehicle_weapons.dm @@ -0,0 +1,64 @@ +/datum/crafting_recipe/lmgammo + name = "LMG Ammo for vehicules" + result = /obj/item/mecha_ammo/lmg/craftable + reqs = list(/obj/item/ammo_box/a556 = 1) + tools = list(TOOL_WORKBENCH) + time = 5 + category = CAT_VEHICLES + subcategory = CAT_VEHICLEAMMO + +/datum/crafting_recipe/gun/LMGvehicule + name = "Improvised LMG (for vehicules)" + result = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/hobo + reqs = list(/obj/item/gun/ballistic/automatic/autopipe = 2, + /obj/item/stack/crafting/metalparts = 10, + /obj/item/stack/sheet/prewar = 8, + /obj/item/stack/sheet/mineral/titanium = 8, + /obj/item/stack/rods = 2) + tools = list(TOOL_WORKBENCH) + time = 180 + category = CAT_VEHICLES + subcategory = CAT_VEHICLEWEAPONS + +/datum/crafting_recipe/gun/lasermount_vehicle + name = "vehicle-mounted laser rifle" + result = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser + reqs = list(/obj/item/stock_parts/scanning_module/phasic = 3, + /obj/item/stack/crafting/goodparts = 5, + /obj/item/stack/sheet/prewar = 10, + /obj/item/stack/sheet/mineral/titanium = 5, + /obj/item/stack/sheet/mineral/gold = 3, + /obj/item/stack/rods = 2) + tools = list(TOOL_AWORKBENCH) + time = 180 + category = CAT_VEHICLES + subcategory = CAT_VEHICLEWEAPONS + +/datum/crafting_recipe/gun/heavylasermount_vehicle + name = "vehicle-mounted heavy laser rifle" + result = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy + reqs = list(/obj/item/stock_parts/scanning_module/phasic = 6, + /obj/item/stack/crafting/goodparts = 10, + /obj/item/stack/sheet/prewar = 10, + /obj/item/stack/sheet/mineral/titanium = 10, + /obj/item/stack/sheet/mineral/gold = 5, + /obj/item/stack/rods = 2) + tools = list(TOOL_AWORKBENCH) + time = 180 + category = CAT_VEHICLES + subcategory = CAT_VEHICLEWEAPONS + +/datum/crafting_recipe/gun/plasmamount_vehicle + name = "vehicle-mounted Plasma caster" + result = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma + reqs = list(/obj/item/stock_parts/micro_laser/ultra = 6, + /obj/item/stack/crafting/goodparts = 10, + /obj/item/stack/sheet/prewar = 10, + /obj/item/stack/sheet/mineral/titanium = 10, + /obj/item/stack/sheet/mineral/diamond = 5, + /obj/item/stack/sheet/mineral/gold = 10, + /obj/item/stack/rods = 2) + tools = list(TOOL_AWORKBENCH) + time = 180 + category = CAT_VEHICLES + subcategory = CAT_VEHICLEWEAPONS diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 92e90c6d27a..e6e9a0b8012 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -4,7 +4,6 @@ armor = ARMOR_VALUE_HEAVY mouse_pointer = 'icons/mecha/mecha_mouse.dmi' deflect_chance = 0 - max_equip = 4 stepsound = 'sound/mecha/neostep2.ogg' /obj/mecha/combat/proc/max_ammo() //Max the ammo stored for Nuke Ops mechs, or anyone else that calls this diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 4e81f0510bc..4200a63e885 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -29,7 +29,6 @@ max_temperature = 35000 leg_overload_coeff = 100 wreckage = /obj/structure/mecha_wreckage/gygax/dark - max_equip = 4 /obj/mecha/combat/gygax/dark/loaded/Initialize() . = ..() diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 825a3da6f41..9f5071dee91 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -52,7 +52,6 @@ wreckage = /obj/structure/mecha_wreckage/seraph internal_damage_threshold = 20 force = 65 - max_equip = 5 /obj/mecha/combat/marauder/seraph/Initialize() . = ..() @@ -74,8 +73,6 @@ name = "\improper Mauler" icon_state = "mauler" wreckage = /obj/structure/mecha_wreckage/mauler - max_equip = 5 - /obj/mecha/combat/marauder/mauler/loaded/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 36fafd45769..a14037ecb03 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -14,7 +14,6 @@ add_req_access = 1 internal_damage_threshold = 25 force = 15 - max_equip = 3 phase_state = "phazon-phase" /obj/mecha/combat/phazon/GrantActions(mob/living/user, human_occupant = 0) @@ -27,1299 +26,3 @@ ..() switch_damtype_action.Remove(user) phasing_action.Remove(user) - -//////////// VERTIBIRD ////////////// - -/obj/mecha/combat/phazon/vertibird - name = "\improper Vertibird" - desc = "A real useable, and working vertibird, maintained with luck, sweat, and ducktape. This one seems to be more focused toward combat." - icon = 'icons/mecha/vb-vertibird.dmi' - icon_state = "vb" - pixel_x = -138 - pixel_y = -138 - layer = ABOVE_MOB_LAYER - can_be_locked = TRUE - dna_lock - step_in = 0.6 - dir_in = 2 - step_energy_drain = 0.75 - max_integrity = 150 - deflect_chance = 30 - armor = ARMOR_VALUE_LIGHT - max_temperature = 25000 - infra_luminosity = 1 - wreckage = /obj/structure/mecha_wreckage/vertibird - add_req_access = 1 - internal_damage_threshold = 25 - force = 15 - max_equip = 6 - opacity = 0 - canstrafe = TRUE - movement_type = FLYING - stepsound = 'sound/f13machines/vertibird_loop.ogg' - turnsound = 'sound/f13machines/vertibird_loop.ogg' - -/obj/structure/mecha_wreckage/vertibird - name = "\improper Vertibird Wreck" - desc = "Mayday, Mayday, Vertibird going down... IN STYLE." - icon = 'icons/mecha/vb-vertibird.dmi' - icon_state = "vb-broken" - pixel_x = -138 - pixel_y = -138 - -/obj/mecha/combat/phazon/vertibird/GrantActions(mob/living/user, human_occupant = 0) - internals_action.Grant(user, src) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - strafing_action.Grant(user, src) - zoom_action.Grant(user, src) - eject_action.Grant(user, src) - landing_action.Grant(user, src) - -/obj/mecha/combat/phazon/vertibird/RemoveActions(mob/living/user, human_occupant = 0) - internals_action.Remove(user) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - strafing_action.Remove(user) - zoom_action.Remove(user) - eject_action.Remove(user) - landing_action.Remove(user) - -/obj/mecha/combat/phazon/vertibird/obj_destruction() - for(var/mob/M in src) - to_chat(M, span_brass("The vertibird is going to Crash")) - M.dust() - playsound(src, 'sound//f13machines//vertibird_crash.ogg', 100, 0) - src.visible_message(span_userdanger("The reactor has gone critical, its going to blow!")) - addtimer(CALLBACK(src,.proc/go_critical),breach_time) - -/obj/mecha/combat/phazon/vertibird/proc/go_critical() - explosion(get_turf(loc)) - Destroy(src) - -/obj/mecha/combat/phazon/vertibird/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/medical/sleeper - ME.attach(src) - max_ammo() - -///NCR VERTIBIRD - -/obj/mecha/combat/phazon/vertibird/ncr - name = "\improper NCR Vertibird" - desc = "A real useable, and working vertibird, maintained with luck, sweat, and ducktape. This one seems to be more focused toward Troop transport, and his painted in the colors of the NCR." - icon = 'icons/mecha/vb-vertibird-ncr.dmi' - icon_state = "vb" - pixel_x = -138 - pixel_y = -138 - layer = ABOVE_MOB_LAYER - can_be_locked = TRUE - dna_lock - step_in = 0.8 - dir_in = 2 - step_energy_drain = 0.7 - max_integrity = 200 - deflect_chance = 30 - armor = ARMOR_VALUE_LIGHT - max_temperature = 25000 - infra_luminosity = 1 - wreckage = /obj/structure/mecha_wreckage/vertibird - add_req_access = 1 - internal_damage_threshold = 25 - force = 15 - max_equip = 8 - opacity = 0 - canstrafe = TRUE - movement_type = FLYING - stepsound = 'sound/f13machines/vertibird_loop.ogg' - turnsound = 'sound/f13machines/vertibird_loop.ogg' - -/obj/mecha/combat/phazon/vertibird/ncr/GrantActions(mob/living/user, human_occupant = 0) - internals_action.Grant(user, src) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - strafing_action.Grant(user, src) - zoom_action.Grant(user, src) - eject_action.Grant(user, src) - smoke_action.Grant(user, src) - landing_action.Grant(user, src) - -/obj/mecha/combat/phazon/vertibird/ncr/RemoveActions(mob/living/user, human_occupant = 0) - internals_action.Remove(user) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - strafing_action.Remove(user) - zoom_action.Remove(user) - eject_action.Remove(user) - smoke_action.Remove(user) - landing_action.Remove(user) - -/obj/mecha/combat/phazon/vertibird/ncr/obj_destruction() - for(var/mob/M in src) - to_chat(M, span_brass(" The vertibird is going to Crash !")) - M.dust() - playsound(src, 'sound//f13machines//vertibird_crash.ogg', 100, 0) - src.visible_message(span_userdanger("The reactor has gone critical, its going to blow!")) - addtimer(CALLBACK(src,.proc/go_critical),breach_time) - -/obj/mecha/combat/phazon/vertibird/ncr/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/medical/sleeper - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/medical/sleeper - ME.attach(src) - max_ammo() - -///VERTIBIRD ENCLAVE - -/obj/mecha/combat/phazon/vertibird/enclave - name = "\improper Enclave Naval Vertibird" - desc = "A real useable, and working vertibird, maintained with luck, sweat, and ducktape. This one seems to be more focused toward combat, and be stored in a ship. Thats peak Enclave tech." - icon = 'icons/mecha/vb-vertibird-enclave.dmi' - icon_state = "vb" - pixel_x = -138 - pixel_y = -138 - layer = ABOVE_MOB_LAYER - can_be_locked = TRUE - dna_lock - step_in = 0.6 - dir_in = 2 - step_energy_drain = 0.75 - max_integrity = 150 - deflect_chance = 30 - armor = ARMOR_VALUE_LIGHT - max_temperature = 25000 - infra_luminosity = 1 - wreckage = /obj/structure/mecha_wreckage/vertibird - add_req_access = 1 - internal_damage_threshold = 25 - force = 15 - max_equip = 6 - opacity = 0 - canstrafe = TRUE - movement_type = FLYING - stepsound = 'sound/f13machines/vertibird_loop.ogg' - turnsound = 'sound/f13machines/vertibird_loop.ogg' - -/obj/mecha/combat/phazon/vertibird/enclave/GrantActions(mob/living/user, human_occupant = 0) - internals_action.Grant(user, src) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - strafing_action.Grant(user, src) - zoom_action.Grant(user, src) - eject_action.Grant(user, src) - landing_action.Grant(user, src) - -/obj/mecha/combat/phazon/vertibird/enclave/RemoveActions(mob/living/user, human_occupant = 0) - internals_action.Remove(user) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - strafing_action.Remove(user) - zoom_action.Remove(user) - eject_action.Remove(user) - landing_action.Remove(user) - -/obj/mecha/combat/phazon/vertibird/enclave/obj_destruction() - for(var/mob/M in src) - to_chat(M, span_brass(" The vertibird is going to Crash !")) - M.dust() - playsound(src, 'sound//f13machines//vertibird_crash.ogg', 100, 0) - src.visible_message(span_userdanger("The reactor has gone critical, its going to blow!")) - addtimer(CALLBACK(src,.proc/go_critical),breach_time) - -/obj/mecha/combat/phazon/vertibird/enclave/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - max_ammo() - -/// BOS Vertibird - -/obj/mecha/combat/phazon/vertibird/brotherhood - name = "\improper Brotherhood Vertibird" - desc = "A real useable, and working vertibird, maintained with luck, sweat, and ducktape. This one seems to be more focused toward combat, and marked with brotherhood markings." - icon = 'icons/mecha/vb-vertibird-bos.dmi' - icon_state = "vb" - pixel_x = -138 - pixel_y = -138 - layer = ABOVE_MOB_LAYER - can_be_locked = TRUE - dna_lock - step_in = 0.6 - dir_in = 2 - step_energy_drain = 0.75 - max_integrity = 150 - deflect_chance = 30 - armor = ARMOR_VALUE_LIGHT - max_temperature = 25000 - infra_luminosity = 1 - wreckage = /obj/structure/mecha_wreckage/vertibird - add_req_access = 1 - internal_damage_threshold = 25 - force = 15 - max_equip = 6 - opacity = 0 - canstrafe = TRUE - movement_type = FLYING - stepsound = 'sound/f13machines/vertibird_loop.ogg' - turnsound = 'sound/f13machines/vertibird_loop.ogg' - -/obj/mecha/combat/phazon/vertibird/brotherhood/GrantActions(mob/living/user, human_occupant = 0) - internals_action.Grant(user, src) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - strafing_action.Grant(user, src) - zoom_action.Grant(user, src) - eject_action.Grant(user, src) - landing_action.Grant(user, src) - -/obj/mecha/combat/phazon/vertibird/brotherhood/RemoveActions(mob/living/user, human_occupant = 0) - internals_action.Remove(user) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - strafing_action.Remove(user) - zoom_action.Remove(user) - eject_action.Remove(user) - landing_action.Remove(user) - -/obj/mecha/combat/phazon/vertibird/brotherhood/obj_destruction() - for(var/mob/M in src) - to_chat(M, span_brass(" The vertibird is going to Crash !")) - M.dust() - playsound(src, 'sound//f13machines//vertibird_crash.ogg', 100, 0) - src.visible_message(span_userdanger("The reactor has gone critical, its going to blow!")) - addtimer(CALLBACK(src,.proc/go_critical),breach_time) - -/obj/mecha/combat/phazon/vertibird/brotherhood/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - max_ammo() - -//////////// NCR TRUCK ////////////// - -/obj/mecha/combat/phazon/ncrtruck - name = "\improper NCR Truck" - desc = "A truck running on powercells. Nice eh ? still a wreck." - icon = 'icons/mecha/ncrtruck.dmi' - icon_state = "ncrtruck" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 600 - armor = ARMOR_VALUE_HEAVY - max_equip = 8 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/ncrtruck - var/list/cargo = new - var/cargo_capacity = 30 - var/hides = 0 - -/obj/structure/mecha_wreckage/ncrtruck - name = "\improper NCR Truck wreckage" - desc = "Its a truck ! BROKEN TRUCK." - icon = 'icons/fallout/vehicles/medium_vehicles.dmi' - icon_state = "derelict" - -/obj/mecha/combat/phazon/ncrtruck/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/ncrtruck/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/ncrtruck/Destroy() - for(var/atom/movable/A in cargo) - A.forceMove(drop_location()) - step_rand(A) - cargo.Cut() - return ..() - -/obj/mecha/combat/phazon/ncrtruck/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/ncrtruck/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/ncrtruck/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//////////// NCR TRUCK MP ////////////// - -/obj/mecha/combat/phazon/ncrtruck/mp - name = "\improper NCR MP Truck" - desc = "A truck running on powercells. Nice eh ? still a wreck. This Truck has been given to the NCR MPs, and has been modified to go a bit faster. But, got less seats and is a bit less solid." - icon = 'icons/mecha/ncrtruck-mp.dmi' - icon_state = "ncrtruck" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 600 - armor = ARMOR_VALUE_HEAVY - max_equip = 4 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/ncrtruck - -/obj/mecha/combat/phazon/ncrtruck/mp/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/ncrtruck/mp/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/ncrtruck/mp/Destroy() - for(var/atom/movable/A in cargo) - A.forceMove(drop_location()) - step_rand(A) - cargo.Cut() - return ..() - -/obj/mecha/combat/phazon/ncrtruck/mp/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - sirens_action.Grant(user, src) - -/obj/mecha/combat/phazon/ncrtruck/mp/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - sirens_action.Remove(user) - -/obj/mecha/combat/phazon/ncrtruck/mp/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//Buggy - -/obj/mecha/combat/phazon/buggy - name = "\improper Buggy" - desc = "A light vehicle, not very powerfull or solid, running on a powercell." - icon = 'icons/mecha/buggy.dmi' - icon_state = "buggygreen" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 0.8 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 200 - armor = ARMOR_VALUE_LIGHT - max_equip = 2 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/structure/mecha_wreckage/buggy - name = "\improper Buggy wreckage" - desc = "Its a buggy ! Won't bug you anymore." - icon_state = "buggy-broken" - -/obj/mecha/combat/phazon/buggy/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/buggy/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/buggy/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//Buggydune - -/obj/mecha/combat/phazon/buggy/dune - name = "\improper Buggy" - desc = "A light vehicle, not very powerfull or solid, running on a powercell." - icon = 'icons/mecha/buggy.dmi' - icon_state = "buggydune" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 0.8 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 200 - armor = ARMOR_VALUE_LIGHT - max_equip = 2 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/buggy/dune/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/dune/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/dune/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/buggy/dune/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/buggy/dune/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//Buggyred - -/obj/mecha/combat/phazon/buggy/red - name = "\improper Buggy" - desc = "A light vehicle, not very powerfull or solid, running on a powercell." - icon = 'icons/mecha/buggy.dmi' - icon_state = "buggyred" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 0.8 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 200 - armor = ARMOR_VALUE_LIGHT - max_equip = 2 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/buggy/red/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/red/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/red/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/buggy/red/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/buggy/red/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//Buggyflame - -/obj/mecha/combat/phazon/buggy/flamme - name = "\improper Buggy" - desc = "A light vehicle, not very powerfull or solid, running on a powercell." - icon = 'icons/mecha/buggy.dmi' - icon_state = "buggyflame" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 0.8 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 200 - armor = ARMOR_VALUE_LIGHT - max_equip = 2 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/buggy/flamme/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/flamme/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/flamme/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/buggy/flamme/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/buggy/flamme/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//Buggy Ranger - -/obj/mecha/combat/phazon/buggy/ranger - name = "\improper Ranger Buggy" - desc = "A light vehicle, not very powerfull or solid, running on a powercell. This one as been recolored by the Rangers." - icon = 'icons/mecha/hanlonbuggy.dmi' - icon_state = "hanlonbuggy" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 0.8 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 200 - armor = ARMOR_VALUE_LIGHT - max_equip = 2 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/buggy/ranger/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/ranger/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/ranger/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/buggy/ranger/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/buggy/ranger/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//Buggy Ranger AND RICO - -/obj/mecha/combat/phazon/buggy/rangerarmed - name = "\improper Vet Ranger Buggy with gunner" - desc = "A light vehicle, not very powerfull or solid, running on a powercell. This one as been recolored by the Rangers... And Ranger Rico ''Gunner'' Davberger is gonna shoot with his shotgun." - icon = 'icons/mecha/buggyrangergun.dmi' - icon_state = "rangergun" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 200 - armor = ARMOR_VALUE_LIGHT - max_equip = 3 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/buggy/rangerarmed/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/rangerarmed/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/rangerarmed/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - smoke_action.Grant(user, src) - -/obj/mecha/combat/phazon/buggy/rangerarmed/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - smoke_action.Remove(user) - -/obj/mecha/combat/phazon/buggy/rangerarmed/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - ME.attach(src) - max_ammo() - -//Legion Chariot - -/obj/mecha/combat/phazon/buggy/legion - name = "\improper Legion Chariot" - desc = "A light vehicle, not very powerfull or solid, running on a power cell... Okay, its a lie. Its actually run on power generated by the horse...The cell is here to make sure that some componant of the half buggy pulled by horses works." - icon = 'icons/mecha/buggy-legion.dmi' - icon_state = "legionbuggy" - pixel_x = -18 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1.2 - opacity = 0 - dir_in = 8 - step_energy_drain = 0.8 - max_temperature = 20000 - max_integrity = 250 - armor = ARMOR_VALUE_MEDIUM - max_equip = 2 - stepsound = 'sound/effects/footstep/gallop2.ogg' - turnsound = 'sound/effects/footstep/gallop1.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/buggy/legion/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/legion/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/legion/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/buggy/legion/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/buggy/legion/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//Buggy Legion AND MESALLA - -/obj/mecha/combat/phazon/buggy/legionarmed - name = "\improper Legion Chariot with gunner" - desc = "A light vehicle, not very powerfull or solid, running on a power cell... Okay, its a lie. Its actually run on power generated by the horse...The cell is here to make sure that some componant of the half buggy pulled by horses works. This one as been recolored by the legions... And Prime Decanus Messala ''Gunner'' Davius is gonna shoot with his shotgun." - icon = 'icons/mecha/buggy-legiongun.dmi' - icon_state = "legiongun" - pixel_x = -18 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1.2 - opacity = 0 - dir_in = 8 - step_energy_drain = 0.8 - max_temperature = 20000 - max_integrity = 250 - armor = ARMOR_VALUE_MEDIUM - max_equip = 3 - stepsound = 'sound/effects/footstep/gallop2.ogg' - turnsound = 'sound/effects/footstep/gallop1.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/buggy/legionarmed/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/legionarmed/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/buggy/legionarmed/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - smoke_action.Grant(user, src) - -/obj/mecha/combat/phazon/buggy/legionarmed/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - smoke_action.Remove(user) - -/obj/mecha/combat/phazon/buggy/legionarmed/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - ME.attach(src) - max_ammo() - -//Highwayman - -/obj/mecha/combat/phazon/highwayman - name = "\improper highwayman eco" - desc = "A fast vehicule, runing on powercell. YUP ! ITS THE HIGHWAYMAN ! Kinda. Its not the original, but a budget version." - icon = 'icons/mecha/highwayman.dmi' - icon_state = "highwayman" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 0.7 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 250 - armor = list("melee" = 30, "bullet" = 25, "laser" = 20, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 100, "fire" = 100, "acid" = 100) - max_equip = 2 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/highwayman/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/highwayman/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/highwayman/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/highwayman/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/highwayman/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//corvega - -/obj/mecha/combat/phazon/corvega - name = "\improper Corvega" - desc = "A old vehicule, runing on powercell." - icon = 'icons/mecha/corvega.dmi' - icon_state = "corvega" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 0.75 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 280 - armor = ARMOR_VALUE_MEDIUM - max_equip = 3 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/corvega/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/corvega/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/corvega/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/corvega/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/corvega/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//corvega police - -/obj/mecha/combat/phazon/corvega/police - name = "\improper Police Corvega" - desc = "A old vehicule, runing on powercell. Seems to have been the proprety of the PreWar Yuma PD." - icon = 'icons/mecha/corvega-police.dmi' - icon_state = "corvega" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 0.75 - opacity = 0 - dir_in = 8 - step_energy_drain = 1.3 - max_temperature = 20000 - max_integrity = 280 - armor = ARMOR_VALUE_MEDIUM - max_equip = 3 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/corvega/police/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/corvega/police/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/corvega/police/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - sirens_action.Grant(user, src) - -/obj/mecha/combat/phazon/corvega/police/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - sirens_action.Remove(user) - -/obj/mecha/combat/phazon/corvega/police/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//pickuptruck - -/obj/mecha/combat/phazon/pickuptruck - name = "\improper pickup truck" - desc = "A old vehicule, runing on powercell." - icon = 'icons/mecha/pickuptruck.dmi' - icon_state = "pickuptruck" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1.4 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 300 - armor = ARMOR_VALUE_MEDIUM - max_equip = 4 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/pickuptruck/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/pickuptruck/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/pickuptruck/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/pickuptruck/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/pickuptruck/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//pickuptruck blue - -/obj/mecha/combat/phazon/pickuptruck/blue - name = "\improper pickup truck" - desc = "A old vehicule, runing on powercell." - icon = 'icons/mecha/pickuptruck-blue.dmi' - icon_state = "pickuptruck" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1.4 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 300 - armor = ARMOR_VALUE_MEDIUM - max_equip = 4 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/pickuptruck/blue/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/pickuptruck/blue/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/pickuptruck/blue/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/pickuptruck/blue/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/pickuptruck/blue/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//pickuptruck bos - -/obj/mecha/combat/phazon/pickuptruck/bos - name = "\improper BoS pickup truck" - desc = "A old vehicule, runing on powercell." - icon = 'icons/mecha/pickuptruck-bos.dmi' - icon_state = "pickuptruck" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1.4 - opacity = 0 - dir_in = 8 - step_energy_drain = 1 - max_temperature = 20000 - max_integrity = 300 - armor = ARMOR_VALUE_MEDIUM - max_equip = 4 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/pickuptruck/bos/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/pickuptruck/bos/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/pickuptruck/bos/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/pickuptruck/bos/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/pickuptruck/bos/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//pickuptruck bos AND Kiana - -/obj/mecha/combat/phazon/pickuptruck/bos/armed - name = "\improper BoS pickup truck with gunner" - desc = "A old vehicule, runing on powercell. Its a A modified brotherhood truck, with the addition of a laser rifle at the back, maned by Paladin Kiana Davberg. Consumes more and is a more fragile." - icon = 'icons/mecha/pickuptruck-gunbos.dmi' - icon_state = "pickuptruck" - pixel_x = -15 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1.4 - opacity = 0 - dir_in = 8 - step_energy_drain = 1.5 - max_temperature = 20000 - max_integrity = 300 - armor = ARMOR_VALUE_MEDIUM - max_equip = 4 - stepsound = 'sound/f13machines/buggy_loop.ogg' - turnsound = 'sound/f13machines/buggy_loop.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/pickuptruck/bos/armed/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/pickuptruck/bos/armed/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/pickuptruck/bos/armed/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/pickuptruck/bos/armed/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/pickuptruck/bos/armed/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) - -//truckcaravan - -/obj/mecha/combat/phazon/truckcaravan - name = "\improper Truck caravan" - desc = "A vehicle, not very powerfull or solid, running on a power cell... Okay, its a lie. Its pulled by two brahmins...The cell is here to make sure that some componant of the half buggy pulled by brahmins works." - icon = 'icons/mecha/truckcaravan.dmi' - icon_state = "truckcaravan" - pixel_x = -20 - pixel_y = 0 - can_be_locked = TRUE - dna_lock - step_in = 1.6 - opacity = 0 - dir_in = 8 - step_energy_drain = 0.6 - max_temperature = 20000 - max_integrity = 250 - armor = ARMOR_VALUE_HEAVY - max_equip = 2 - stepsound = 'sound/effects/footstep/gallop2.ogg' - turnsound = 'sound/effects/footstep/gallop1.ogg' - wreckage = /obj/structure/mecha_wreckage/buggy - -/obj/mecha/combat/phazon/truckcaravan/go_out() - ..() - update_icon() - -/obj/mecha/combat/phazon/truckcaravan/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - -/obj/mecha/combat/phazon/truckcaravan/GrantActions(mob/living/user, human_occupant = 0) - cycle_action.Grant(user, src) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - eject_action.Grant(user, src) - klaxon_action.Grant(user, src) - -/obj/mecha/combat/phazon/truckcaravan/RemoveActions(mob/living/user, human_occupant = 0) - cycle_action.Remove(user) - lights_action.Remove(user) - stats_action.Remove(user) - eject_action.Remove(user) - klaxon_action.Remove(user) - -/obj/mecha/combat/phazon/truckcaravan/loaded/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new - ME = new /obj/item/mecha_parts/mecha_equipment/seat - ME.attach(src) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index de211d0daa9..637445483f7 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -1,6 +1,10 @@ //DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE! //I'm annoyed I even have to tell you this! SPRITE FIRST, then commit. +#define EQUIP_WEAPON "weapon" +#define EQUIP_UTILITY "utility" +#define EQUIP_MISC "misc" + /obj/item/mecha_parts/mecha_equipment name = "mecha equipment" icon = 'icons/mecha/mecha_equipment.dmi' @@ -20,6 +24,7 @@ var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates var/harmful = FALSE //Controls if equipment can be used to attack by a pacifist. //var/destroy_sound = 'sound/mecha/critdestr.ogg' + var/equip_type = EQUIP_UTILITY /obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page() if(chassis) @@ -118,11 +123,26 @@ if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir)) return 0 -/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M) - if(M.equipment.len + output += {"
Equipment
" - + for(var/obj/item/mecha_parts/mecha_equipment/W in weapon_equipment) + output += "Weapon Module: [W.name] Detach
" + for(var/obj/item/mecha_parts/mecha_equipment/W in utility_equipment) + output += "Utility Module: [W.name] Detach
" + for(var/obj/item/mecha_parts/mecha_equipment/W in misc_equipment) + output += "Miscellaneous Module: [W.name] Detach
" + output += {"Available weapon slots: [max_weapons_equip-weapon_equipment.len]
+ Available utility slots: [max_utility_equip-utility_equipment.len]
+ Available miscellaneous slots: [max_misc_equip-misc_equipment.len]
+ + "} + return output /obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html if(!equipment.len) return - . = "Equipment:
" + var/output = "Equipment:
" for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) - . += "
[MT.get_equip_info()]
" - . += "
" + output += "
[MT.get_equip_info()]
" + output += "
" + return output diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm index 00183443adf..f35ac866784 100644 --- a/code/game/mecha/medical/medical.dm +++ b/code/game/mecha/medical/medical.dm @@ -4,7 +4,9 @@ deflect_chance = 0 light_power = 9 light_range = 10 - max_equip = 4 + max_utility_equip = 3 + max_weapons_equip = 1 + max_misc_equip = 3 /obj/mecha/medical/mechturn(direction) setDir(direction) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 9456580ad06..ae7d1a91ecb 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -6,7 +6,9 @@ max_temperature = 20000 max_integrity = 300 armor = ARMOR_VALUE_MEDIUM - max_equip = 6 + max_utility_equip = 4 + max_weapons_equip = 2 + max_misc_equip = 2 wreckage = /obj/structure/mecha_wreckage/ripley var/list/cargo = new var/cargo_capacity = 15 @@ -41,7 +43,9 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF lights_power = 7 armor = ARMOR_VALUE_MEDIUM - max_equip = 5 // More armor, less tools + max_utility_equip = 3 + max_weapons_equip = 1 + max_misc_equip = 2 wreckage = /obj/structure/mecha_wreckage/ripley/firefighter @@ -85,7 +89,9 @@ lights_power = 7 step_energy_drain = 30 //slightly higher energy drain since you movin those wheels FAST armor = ARMOR_VALUE_MEDIUM - max_equip = 5 + max_utility_equip = 3 + max_weapons_equip = 1 + max_misc_equip = 2 wreckage = /obj/structure/mecha_wreckage/clarke cargo_capacity = 10 canstrafe = FALSE diff --git a/hailmary.dme b/hailmary.dme index 7d4d50bb4a4..3f40b9415df 100644 --- a/hailmary.dme +++ b/hailmary.dme @@ -556,7 +556,8 @@ #include "code\datums\components\crafting\recipes\recipes_tools.dm" #include "code\datums\components\crafting\recipes\recipes_tribal.dm" #include "code\datums\components\crafting\recipes\recipes_weapon_and_ammo.dm" -#include "code\datums\components\crafting\recipes\vehicle_parts.dm" +#include "code\datums\components\crafting\recipes\vehicles\vehicle_parts.dm" +#include "code\datums\components\crafting\recipes\vehicles\vehicle_weapons.dm" #include "code\datums\components\fantasy\_fantasy.dm" #include "code\datums\components\fantasy\affix.dm" #include "code\datums\components\fantasy\prefixes.dm" @@ -1003,6 +1004,15 @@ #include "code\game\mecha\equipment\tools\work_tools.dm" #include "code\game\mecha\equipment\weapons\mecha_ammo.dm" #include "code\game\mecha\equipment\weapons\weapons.dm" +#include "code\game\mecha\equipment\weapons\fallout\ballistic.dm" +#include "code\game\mecha\equipment\weapons\fallout\energy.dm" +#include "code\game\mecha\fallout\armored.dm" +#include "code\game\mecha\fallout\birds.dm" +#include "code\game\mecha\fallout\buggies.dm" +#include "code\game\mecha\fallout\carriages.dm" +#include "code\game\mecha\fallout\cars.dm" +#include "code\game\mecha\fallout\pickuptrucks.dm" +#include "code\game\mecha\fallout\trucks.dm" #include "code\game\mecha\medical\medical.dm" #include "code\game\mecha\medical\medigax.dm" #include "code\game\mecha\medical\odysseus.dm" diff --git a/icons/mecha/armoredjeep.dmi b/icons/mecha/armoredjeep.dmi new file mode 100644 index 0000000000000000000000000000000000000000..33044cb57815817278bb9c8eb4a3214a4bc89b04 GIT binary patch literal 4695 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 TjaTUCM+X=inCq8goTL8-z(%Sy literal 0 HcmV?d00001 diff --git a/icons/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index 5e277af7cca24ff5dd27461498a83fda915123ff..71ba107315e9259497c35ee75db3c9b42d17f7aa 100644 GIT binary patch literal 20452 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 literal 18986 zcma&OWl$W^);2o02iM?);I1K9a0vu=cM0x3NFYE6?rydEcsA zx9Z;delXJ0y}S3?YcF}$vj|sGl*T|MK?Q+87_u@FDj*OH@Da3uj0n7*d}>qz4w!hW zX}L<6yO=s#JGxps*n>cx8Hw=<_Fe2)-{uDym=~nfWfv_}0~rY%zgblk4dT7JonRdt zwir#8V!2T}d_DAW$P&sb^j>X0ePdI*o@luv(OD){o}D#p@-E(Iwm7+&*}I@(yg_^@ zMw!QEQ|WGEYhTn!nIM$EM5=sfE3+6kE_Uh3X(!Bp1(pN9p@} zj1Q4fJQuO8GcBfnjV8QT<-+&XU zi2U}wZ6R|Y+SrD=WN`JX>#!W`FzS!1ORytn<{?Hgs=dv4qO`H$DPi2ECCq1L*84RCY zw}pd|e4gXRiAatROT0*1&jvm0EW5QIGX0~R(hoQbbxKc-^LZcjp%}u`dwkJHnKB>{ zB}i7{lbUD7X{L{!n)yQq1P&cJFNc!xJ0Ca9d0g4A-IQc*dED~PP=+HN>(kPbmfy$q z8X9L7=H=G5sX8|HO-s+ecD2%)ZMHB}I@Mx6b~)lB@@JjJ~1y)(M)8GAmdvNZH}6Z1>$TIs(8Dikai-Bh^p%_=$b_I&kbNMJ`B5a2#O14l1MU!%95< zu!WO5X;-+uv==E2gI`3R7@n6o28Jv25K&3V!Z9r#5RF^2dq;nYE0k;F{JVdfn7o3p|6ao?mKv{`g$k)_-Lw!r+|K1-1R+y}08ew)jj**cOd5sN^XO*&?ame>PYttoY>Y$P!6lZzN$lLsL%-l{mlq2~i{= z+ul}hWCp)e-X>%D)H@mSj#}`Y!4cv0@)p+C4p_PqR|{jrTEeM;nS+C)rlwrG_Ll*H zmdZ;Q;tE>FLKR9KFDxOO!OqL$Io*d3+N{SjCAg|ZiiM4hDZtRMM(jjKs_OVi8x|4$ z`7l}1UvFS)lMJum6UYNyGp@AcqdS-GvPdwZBMd13$*~9( (IAfF`yLDn;nVOh{ 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 Date: Sat, 25 May 2024 18:51:45 +1200 Subject: [PATCH 2/2] yes --- code/game/mecha/combat/combat.dm | 1 - code/game/mecha/combat/phazon.dm | 1 - .../equipment/weapons/fallout/ballistic.dm | 2 +- code/game/mecha/fallout/armored.dm | 2 ++ code/game/mecha/fallout/birds.dm | 36 +++---------------- code/game/mecha/fallout/buggies.dm | 3 +- code/game/mecha/fallout/carriages.dm | 6 ++++ code/game/mecha/fallout/cars.dm | 8 +++-- code/game/mecha/fallout/pickuptrucks.dm | 6 +++- code/game/mecha/fallout/trucks.dm | 6 ++-- code/game/mecha/mecha.dm | 2 +- 11 files changed, 31 insertions(+), 42 deletions(-) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index e6e9a0b8012..86e68ce9fb8 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -3,7 +3,6 @@ internal_damage_threshold = 50 armor = ARMOR_VALUE_HEAVY mouse_pointer = 'icons/mecha/mecha_mouse.dmi' - deflect_chance = 0 stepsound = 'sound/mecha/neostep2.ogg' /obj/mecha/combat/proc/max_ammo() //Max the ammo stored for Nuke Ops mechs, or anyone else that calls this diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index a14037ecb03..c9f0b0199c7 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -6,7 +6,6 @@ dir_in = 2 //Facing South. step_energy_drain = 3 max_integrity = 200 - deflect_chance = 30 armor = ARMOR_VALUE_HEAVY max_temperature = 25000 infra_luminosity = 3 diff --git a/code/game/mecha/equipment/weapons/fallout/ballistic.dm b/code/game/mecha/equipment/weapons/fallout/ballistic.dm index cfb13e16d0a..7ab4d802e2d 100644 --- a/code/game/mecha/equipment/weapons/fallout/ballistic.dm +++ b/code/game/mecha/equipment/weapons/fallout/ballistic.dm @@ -18,7 +18,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/hobo name = "\improper Improvised HMG" desc = "A automatic machine gun make with scraps." - icon_state = "mecha_uac2" + icon_state = "mecha_lmg_fo" fire_sound = 'sound/f13weapons/boltfire.ogg' equip_cooldown = 5 projectile = /obj/item/projectile/bullet/lmg/hobo diff --git a/code/game/mecha/fallout/armored.dm b/code/game/mecha/fallout/armored.dm index 13c60913b8b..0c2efc3e1be 100644 --- a/code/game/mecha/fallout/armored.dm +++ b/code/game/mecha/fallout/armored.dm @@ -4,6 +4,8 @@ icon = 'icons/mecha/armoredjeep.dmi' icon_state = "armoredjeep" max_integrity = 400 + step_energy_drain = 1.5 + step_in = 1.5 armor = ARMOR_VALUE_VEHICLE_ARMORED wreckage = /obj/structure/mecha_wreckage/buggy max_utility_equip = 2 diff --git a/code/game/mecha/fallout/birds.dm b/code/game/mecha/fallout/birds.dm index d55b3d020e0..ab9916f56a2 100644 --- a/code/game/mecha/fallout/birds.dm +++ b/code/game/mecha/fallout/birds.dm @@ -8,24 +8,17 @@ pixel_x = -138 pixel_y = -138 layer = ABOVE_MOB_LAYER - can_be_locked = TRUE - dna_lock step_in = 0.6 dir_in = 2 step_energy_drain = 0.75 max_integrity = 150 - deflect_chance = 30 - armor = ARMOR_VALUE_LIGHT - max_temperature = 25000 - infra_luminosity = 1 + armor = ARMOR_VALUE_VEHICLE_CAR wreckage = /obj/structure/mecha_wreckage/vertibird add_req_access = 1 internal_damage_threshold = 25 - force = 15 max_utility_equip = 4 max_weapons_equip = 4 max_misc_equip = 2 - opacity = 1 canstrafe = TRUE movement_type = FLYING stepsound = 'sound/f13machines/vertibird_loop.ogg' @@ -73,7 +66,7 @@ /obj/mecha/combat/phazon/vertibird/loaded/Initialize() . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/auto ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/seat ME.attach(src) @@ -95,16 +88,10 @@ step_in = 0.8 step_energy_drain = 0.7 max_integrity = 200 - deflect_chance = 30 - armor = ARMOR_VALUE_LIGHT wreckage = /obj/structure/mecha_wreckage/vertibird add_req_access = 1 max_utility_equip = 8 max_weapons_equip = 1 - canstrafe = TRUE - movement_type = FLYING - stepsound = 'sound/f13machines/vertibird_loop.ogg' - turnsound = 'sound/f13machines/vertibird_loop.ogg' /obj/mecha/combat/phazon/vertibird/ncr/GrantActions(mob/living/user, human_occupant = 0) internals_action.Grant(user, src) @@ -130,7 +117,7 @@ /obj/mecha/combat/phazon/vertibird/ncr/loaded/Initialize() . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/auto ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/seat ME.attach(src) @@ -156,17 +143,11 @@ step_in = 0.6 step_energy_drain = 0.75 max_integrity = 150 - deflect_chance = 30 - armor = ARMOR_VALUE_LIGHT wreckage = /obj/structure/mecha_wreckage/vertibird add_req_access = 1 max_utility_equip = 4 max_weapons_equip = 4 max_misc_equip = 2 - canstrafe = TRUE - movement_type = FLYING - stepsound = 'sound/f13machines/vertibird_loop.ogg' - turnsound = 'sound/f13machines/vertibird_loop.ogg' /obj/mecha/combat/phazon/vertibird/enclave/GrantActions(mob/living/user, human_occupant = 0) internals_action.Grant(user, src) @@ -198,7 +179,7 @@ /obj/mecha/combat/phazon/vertibird/enclave/loaded/Initialize() . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/auto ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/seat ME.attach(src) @@ -218,18 +199,11 @@ step_in = 0.6 step_energy_drain = 0.75 max_integrity = 150 - deflect_chance = 30 - armor = ARMOR_VALUE_LIGHT wreckage = /obj/structure/mecha_wreckage/vertibird add_req_access = 1 - internal_damage_threshold = 25 max_utility_equip = 4 max_weapons_equip = 4 max_misc_equip = 2 - canstrafe = TRUE - movement_type = FLYING - stepsound = 'sound/f13machines/vertibird_loop.ogg' - turnsound = 'sound/f13machines/vertibird_loop.ogg' /obj/mecha/combat/phazon/vertibird/brotherhood/GrantActions(mob/living/user, human_occupant = 0) internals_action.Grant(user, src) @@ -261,7 +235,7 @@ /obj/mecha/combat/phazon/vertibird/brotherhood/loaded/Initialize() . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/auto ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/seat ME.attach(src) diff --git a/code/game/mecha/fallout/buggies.dm b/code/game/mecha/fallout/buggies.dm index 2daafef2cbf..0a17a8ec83f 100644 --- a/code/game/mecha/fallout/buggies.dm +++ b/code/game/mecha/fallout/buggies.dm @@ -6,8 +6,9 @@ icon = 'icons/mecha/buggy.dmi' icon_state = "buggygreen" pixel_x = -15 - pixel_y = 0 + pixel_y = -5 max_integrity = 200 + step_in = 0.8 armor = ARMOR_VALUE_VEHICLE_BUGGY stepsound = 'sound/f13machines/buggy_loop.ogg' turnsound = 'sound/f13machines/buggy_loop.ogg' diff --git a/code/game/mecha/fallout/carriages.dm b/code/game/mecha/fallout/carriages.dm index 643048bb06d..7a98de69c9d 100644 --- a/code/game/mecha/fallout/carriages.dm +++ b/code/game/mecha/fallout/carriages.dm @@ -8,6 +8,8 @@ pixel_x = -18 pixel_y = 0 max_integrity = 250 + step_energy_drain = 0.8 + step_in = 1.2 armor = ARMOR_VALUE_VEHICLE_TRUCK stepsound = 'sound/effects/footstep/gallop2.ogg' turnsound = 'sound/effects/footstep/gallop1.ogg' @@ -49,6 +51,8 @@ icon = 'icons/mecha/buggy-legiongun.dmi' icon_state = "legiongun" max_integrity = 250 + step_energy_drain = 0.8 + step_in = 1.2 armor = ARMOR_VALUE_VEHICLE_TRUCK /obj/mecha/combat/phazon/buggy/legionarmed/GrantActions(mob/living/user, human_occupant = 0) @@ -86,6 +90,8 @@ pixel_x = -20 pixel_y = 0 max_integrity = 250 + step_in = 1.6 + step_energy_drain = 0.8 armor = ARMOR_VALUE_VEHICLE_TRUCK /obj/mecha/combat/phazon/truckcaravan/loaded/Initialize() diff --git a/code/game/mecha/fallout/cars.dm b/code/game/mecha/fallout/cars.dm index f9b2d590064..6441b6780fd 100644 --- a/code/game/mecha/fallout/cars.dm +++ b/code/game/mecha/fallout/cars.dm @@ -5,11 +5,12 @@ desc = "A fast vehicule, runing on powercell. YUP ! ITS THE HIGHWAYMAN ! Kinda. Its not the original, but a budget version." icon = 'icons/mecha/highwayman.dmi' icon_state = "highwayman" - pixel_x = -15 - pixel_y = 0 + pixel_x = -16 + pixel_y = -5 max_integrity = 250 + step_energy_drain = 1 + step_in = 0.7 armor = ARMOR_VALUE_VEHICLE_CAR - armor = list("melee" = 30, "bullet" = 25, "laser" = 20, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 100, "fire" = 100, "acid" = 100) stepsound = 'sound/f13machines/buggy_loop.ogg' turnsound = 'sound/f13machines/buggy_loop.ogg' wreckage = /obj/structure/mecha_wreckage/buggy @@ -69,6 +70,7 @@ icon = 'icons/mecha/corvega-police.dmi' icon_state = "corvega" max_integrity = 280 + step_energy_drain = 1.3 armor = ARMOR_VALUE_VEHICLE_ARMORED_LIGHT wreckage = /obj/structure/mecha_wreckage/buggy diff --git a/code/game/mecha/fallout/pickuptrucks.dm b/code/game/mecha/fallout/pickuptrucks.dm index 662436e27ef..c6cc0a3dff8 100644 --- a/code/game/mecha/fallout/pickuptrucks.dm +++ b/code/game/mecha/fallout/pickuptrucks.dm @@ -5,7 +5,11 @@ desc = "A old vehicule, runing on powercell." icon = 'icons/mecha/pickuptruck.dmi' icon_state = "pickuptruck" + pixel_x = -17 + pixel_y = -3 max_integrity = 300 + step_in = 1.4 + step_energy_drain = 1.5 armor = ARMOR_VALUE_VEHICLE_CAR stepsound = 'sound/f13machines/buggy_loop.ogg' turnsound = 'sound/f13machines/buggy_loop.ogg' @@ -87,7 +91,7 @@ /obj/mecha/combat/phazon/pickuptruck/bos/armed name = "\improper BoS pickup truck with gunner" - desc = "A old vehicule, runing on powercell. Its a A modified brotherhood truck, with the addition of a laser rifle at the back, maned by Paladin Kiana Davberg. Consumes more and is a more fragile." + desc = "A old vehicule, runing on powercell. Its a A modified brotherhood truck, with the addition of a laser rifle at the back, maned by Paladin Kiana Davberg." icon = 'icons/mecha/pickuptruck-gunbos.dmi' icon_state = "pickuptruck" max_integrity = 300 diff --git a/code/game/mecha/fallout/trucks.dm b/code/game/mecha/fallout/trucks.dm index 85a184fad1c..e3d4d518493 100644 --- a/code/game/mecha/fallout/trucks.dm +++ b/code/game/mecha/fallout/trucks.dm @@ -5,9 +5,10 @@ desc = "A truck running on powercells. Nice eh ? still a wreck." icon = 'icons/mecha/ncrtruck.dmi' icon_state = "ncrtruck" - pixel_x = -15 - pixel_y = 0 + pixel_x = -22 + pixel_y = -5 max_integrity = 600 + step_in = 1 armor = ARMOR_VALUE_VEHICLE_TRUCK max_weapons_equip = 1 max_utility_equip = 8 @@ -77,6 +78,7 @@ icon = 'icons/mecha/ncrtruck-mp.dmi' icon_state = "ncrtruck" max_integrity = 600 + step_in = 0.8 armor = ARMOR_VALUE_VEHICLE_TRUCK wreckage = /obj/structure/mecha_wreckage/ncrtruck diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 1168173cc66..daaa27d9a1b 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -44,7 +44,7 @@ move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_EXTREMELY_STRONG light_range = 9 - var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. + var/deflect_chance = 0 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. armor = ARMOR_VALUE_HEAVY var/list/facing_modifiers = list(FRONT_ARMOUR = 1.5, SIDE_ARMOUR = 1, BACK_ARMOUR = 0.5) //var/obj/item/stock_parts/cell/cell