diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 5a1c57ff53..abf0a15446 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -133,9 +133,6 @@ return 0 return 1 -/obj/item/mecha_parts/mecha_equipment/proc/handle_movement_action() //Any modules that have special effects or needs when taking a step or floating through space. - return - /obj/item/mecha_parts/mecha_equipment/proc/action(atom/target) return diff --git a/code/game/mecha/equipment/mecha_equipment_dynamicprocs.dm b/code/game/mecha/equipment/mecha_equipment_dynamicprocs.dm new file mode 100644 index 0000000000..9166e6a3de --- /dev/null +++ b/code/game/mecha/equipment/mecha_equipment_dynamicprocs.dm @@ -0,0 +1,19 @@ +/* + * File containing all the default 'handlers' for Exosuit equipment, hopefully to make all dynX calls extinct. + */ + +// Used for impacting (thrown) objects, and damage value. +/obj/item/mecha_parts/mecha_equipment/proc/handle_ranged_contact(var/obj/A, var/inc_damage = 0) + return max(0, inc_damage) + +// Used for melee strikes with an object, and a mob, and damage value. +/obj/item/mecha_parts/mecha_equipment/proc/handle_melee_contact(var/obj/item/weapon/W, var/mob/living/user, var/inc_damage = 0) + return max(0, inc_damage) + +// Used for projectile impacts from bullet_act. +/obj/item/mecha_parts/mecha_equipment/proc/handle_projectile_contact(var/obj/item/projectile/Proj, var/inc_damage = 0) + return max(0, inc_damage) + +// Used for on-movement actions. +/obj/item/mecha_parts/mecha_equipment/proc/handle_movement_action() //Any modules that have special effects or needs when taking a step or floating through space. + return diff --git a/code/game/mecha/equipment/tools/armor_melee.dm b/code/game/mecha/equipment/tools/armor_melee.dm index a723882657..8390a2cc52 100644 --- a/code/game/mecha/equipment/tools/armor_melee.dm +++ b/code/game/mecha/equipment/tools/armor_melee.dm @@ -11,6 +11,30 @@ equip_type = EQUIP_HULL +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/handle_melee_contact(var/obj/item/weapon/W, var/mob/living/user, var/inc_damage = null) + if(!action_checks(user)) + return inc_damage + chassis.log_message("Attacked by [W]. Attacker - [user]") + if(prob(chassis.deflect_chance*deflect_coeff)) + to_chat(user, "\The [W] bounces off \the [chassis]'s armor.") + chassis.log_append_to_last("Armor saved.") + inc_damage = 0 + else + chassis.occupant_message("\The [user] hits [chassis] with [W].") + user.visible_message("\The [user] hits [chassis] with [W].", "You hit [src] with [W].") + inc_damage *= damage_coeff + set_ready_state(0) + chassis.use_power(energy_drain) + spawn() + do_after_cooldown() + return max(0, inc_damage) + +/* + /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/M as obj) if(..()) if(!M.proc_res["dynattackby"]) @@ -27,10 +51,6 @@ ..() return -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() - if(!chassis) return - return "* [src.name]" - /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob) if(!action_checks(user)) return chassis.dynattackby(W,user) @@ -46,4 +66,5 @@ set_ready_state(0) chassis.use_power(energy_drain) do_after_cooldown() - return \ No newline at end of file + return +*/ diff --git a/code/game/mecha/equipment/tools/armor_ranged.dm b/code/game/mecha/equipment/tools/armor_ranged.dm index 2e3523275f..4fb3aac32b 100644 --- a/code/game/mecha/equipment/tools/armor_ranged.dm +++ b/code/game/mecha/equipment/tools/armor_ranged.dm @@ -11,6 +11,45 @@ equip_type = EQUIP_HULL +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/handle_projectile_contact(var/obj/item/projectile/Proj, var/inc_damage) + if(istype(Proj, /obj/item/projectile/test)) + return inc_damage// Don't care about test projectiles, just what comes after them + if(!action_checks(src)) + return inc_damage + if(prob(chassis.deflect_chance*deflect_coeff)) + chassis.occupant_message("The armor deflects incoming projectile.") + chassis.visible_message("The [chassis.name] armor deflects the projectile.") + chassis.log_append_to_last("Armor saved.") + inc_damage = 0 + else + inc_damage *= src.damage_coeff + set_ready_state(0) + chassis.use_power(energy_drain) + spawn() + do_after_cooldown() + return max(0, inc_damage) + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/handle_ranged_contact(var/obj/A, var/inc_damage = 0) + if(!action_checks(A)) + return inc_damage + if(prob(chassis.deflect_chance*deflect_coeff)) + chassis.occupant_message("The [A] bounces off the armor.") + chassis.visible_message("The [A] bounces off \the [chassis]'s armor") + chassis.log_append_to_last("Armor saved.") + inc_damage = 0 + else if(istype(A, /obj)) + inc_damage *= damage_coeff + set_ready_state(0) + chassis.use_power(energy_drain) + spawn() + do_after_cooldown() + return max(0, inc_damage) + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/* /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/M as obj) if(..()) if(!M.proc_res["dynbulletdamage"] && !M.proc_res["dynhitby"]) @@ -29,10 +68,6 @@ ..() return -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() - if(!chassis) return - return "* [src.name]" - /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/dynbulletdamage(var/obj/item/projectile/Proj) if(istype(Proj, /obj/item/projectile/test)) return // Don't care about test projectiles, just what comes after them @@ -69,4 +104,5 @@ set_ready_state(0) chassis.use_power(energy_drain) do_after_cooldown() - return \ No newline at end of file + return +*/ diff --git a/code/game/mecha/equipment/tools/hardpoint_actuator.dm b/code/game/mecha/equipment/tools/hardpoint_actuator.dm new file mode 100644 index 0000000000..735fec6f96 --- /dev/null +++ b/code/game/mecha/equipment/tools/hardpoint_actuator.dm @@ -0,0 +1,34 @@ +/* + * A special device used to pick up and equip other exosuit components on the fly, without leaving an Exosuit. Costly. + */ + +/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator + name = "hardpoint actuator clamp" + icon_state = "mecha_clamp" + equip_cooldown = 10 SECONDS + energy_drain = 600 + equip_type = EQUIP_HULL + origin_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_POWER = 4, TECH_COMBAT = 1, TECH_MAGNET = 4) + +/obj/item/mecha_parts/mecha_equipment/hardpoint_actuator/action(atom/target) + if(!action_checks(target)) + return + + if(istype(target,/obj/item/mecha_parts/mecha_equipment)) + var/obj/item/mecha_parts/mecha_equipment/ME = target + if(ME.can_attach(chassis)) + occupant_message("[ME] can be integrated. Stand by.") + if(do_after(chassis.occupant, 3 SECONDS, target)) + if(ME.can_attach(chassis) && action_checks(target)) + ME.attach(chassis) + occupant_message("[ME] successfully integrated.") + else + occupant_message("[ME] cannot be integrated due to lack of free hardpoints.") + + else + occupant_message("[target] is not compatible with any present hardpoints.") + + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return diff --git a/code/game/mecha/equipment/tools/inflatables.dm b/code/game/mecha/equipment/tools/inflatables.dm new file mode 100644 index 0000000000..b18ba2eae1 --- /dev/null +++ b/code/game/mecha/equipment/tools/inflatables.dm @@ -0,0 +1,47 @@ +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables + name = "inflatable deployment mechanism" + desc = "An exosuit-mounted inflatable barrier deployer. Useful!" + icon_state = "mecha_inflatables" + origin_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3) + equip_cooldown = 3 + energy_drain = 30 + range = MELEE + equip_type = EQUIP_UTILITY + ready_sound = 'sound/effects/spray.ogg' + required_type = list(/obj/mecha/working/ripley) + + tooltype = /obj/item/weapon/inflatable_dispenser/robot + var/obj/item/weapon/inflatable_dispenser/my_deployer = null + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Initialize() + ..() + my_deployer = my_tool + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/Topic(href, href_list) + ..() + if(href_list["toggle_deployable_mode"]) + my_deployer.attack_self() + update_chassis_page() + return + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/get_equip_info() + if(!chassis) return + var/data_return = "* [chassis.selected==src?"":""][src.name][chassis.selected==src?"":""] - Deploy [my_deployer.mode?"Door":"Wall"]
\ +   - Doors left: [my_deployer.stored_doors]/[my_deployer.max_doors]
\ +   - Walls left: [my_deployer.stored_walls]/[my_deployer.max_walls]" + + return data_return + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables/action(atom/target, params) + if(!action_checks(target)) + return + + if(istype(target, /turf)) + my_deployer.try_deploy_inflatable(target, chassis.occupant) + if(istype(target, /obj/item/inflatable) || istype(target, /obj/structure/inflatable)) + my_deployer.pick_up(target, chassis.occupant) + + set_ready_state(0) + chassis.use_power(energy_drain) + do_after_cooldown() + return diff --git a/code/game/mecha/equipment/tools/passenger.dm b/code/game/mecha/equipment/tools/passenger.dm index a84dc2981b..8ce9d21aa9 100644 --- a/code/game/mecha/equipment/tools/passenger.dm +++ b/code/game/mecha/equipment/tools/passenger.dm @@ -1,7 +1,7 @@ /obj/item/mecha_parts/mecha_equipment/tool/passenger name = "passenger compartment" desc = "A mountable passenger compartment for exosuits. Rather cramped." - icon_state = "mecha_abooster_ccw" + icon_state = "mecha_passenger" origin_tech = list(TECH_ENGINEERING = 1, TECH_BIO = 1) energy_drain = 10 range = MELEE diff --git a/code/game/mecha/equipment/tools/wrench.dm b/code/game/mecha/equipment/tools/powertool.dm similarity index 66% rename from code/game/mecha/equipment/tools/wrench.dm rename to code/game/mecha/equipment/tools/powertool.dm index 605c2ee33d..0adcb98929 100644 --- a/code/game/mecha/equipment/tools/wrench.dm +++ b/code/game/mecha/equipment/tools/powertool.dm @@ -38,4 +38,18 @@ desc = "An exosuit-mounted pneumatic prybar." icon_state = "mecha_crowbar" tooltype = /obj/item/weapon/tool/crowbar/power - ready_sound = 'sound/mecha/gasdisconnected.ogg' \ No newline at end of file + ready_sound = 'sound/mecha/gasdisconnected.ogg' + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/cutter + name = "pneumatic cablecutter" + desc = "An exosuit-mounted pneumatic cablecutter." + icon_state = "mecha_cablecutter" + tooltype = /obj/item/weapon/tool/wirecutters/power + ready_sound = 'sound/mecha/gasdisconnected.ogg' + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/screwdriver + name = "pneumatic screwdriver" + desc = "An exosuit-mounted pneumatic screwdriver." + icon_state = "mecha_screwdriver" + tooltype = /obj/item/weapon/tool/screwdriver/power + ready_sound = 'sound/mecha/gasdisconnected.ogg' diff --git a/code/game/mecha/equipment/tools/weldinglaser.dm b/code/game/mecha/equipment/tools/weldinglaser.dm new file mode 100644 index 0000000000..ff1c5733a5 --- /dev/null +++ b/code/game/mecha/equipment/tools/weldinglaser.dm @@ -0,0 +1,34 @@ +/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding + name = "welding laser" + desc = "An exosuit-mounted welding laser." + icon_state = "mecha_laser-rig" + origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_POWER = 4, TECH_PHORON = 2) + equip_cooldown = 3 + energy_drain = 15 + range = MELEE + equip_type = EQUIP_UTILITY + ready_sound = 'sound/items/Ratchet.ogg' + required_type = list(/obj/mecha/working/ripley) + + tooltype = /obj/item/weapon/weldingtool/electric/mounted/exosuit + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding/action(var/atom/target) + ..() + + var/datum/beam/weld_beam = null + if(is_ranged()) + var/atom/movable/beam_origin = chassis + weld_beam = beam_origin.Beam(target, icon_state = "solar_beam", time = 0.3 SECONDS) + + if(!do_after(chassis.occupant, 0.3 SECONDS, target)) + qdel(weld_beam) + +/obj/item/mecha_parts/mecha_equipment/tool/powertool/welding/attach(obj/mecha/M as obj) + ..() + + if(enable_special) + range = MELEE|RANGED + my_tool.reach = 7 + else + range = MELEE + my_tool.reach = 1 diff --git a/code/game/mecha/equipment/weapons/defense/shocker.dm b/code/game/mecha/equipment/weapons/defense/shocker.dm index af120167d2..58dccec562 100644 --- a/code/game/mecha/equipment/weapons/defense/shocker.dm +++ b/code/game/mecha/equipment/weapons/defense/shocker.dm @@ -15,6 +15,7 @@ equip_type = EQUIP_HULL +/* /obj/item/mecha_parts/mecha_equipment/shocker/can_attach(obj/mecha/M as obj) if(..()) if(!M.proc_res["dynattackby"] && !M.proc_res["dynattackhand"] && !M.proc_res["dynattackalien"]) @@ -25,9 +26,11 @@ ..() chassis.proc_res["dynattackby"] = src return +*/ -/obj/item/mecha_parts/mecha_equipment/shocker/proc/dynattackby(obj/item/weapon/W, mob/living/user) +/obj/item/mecha_parts/mecha_equipment/shocker/handle_melee_contact(var/obj/item/weapon/W, var/mob/living/user, var/inc_damage = null) if(!action_checks(user) || !active) return + user.electrocute_act(shock_damage, src) - return chassis.dynattackby(W,user) + return inc_damage diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 34b1655fff..d78053d6b2 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -622,7 +622,12 @@ else if(istype(A, /obj)) var/obj/O = A if(O.throwforce) - src.take_damage(O.throwforce) + + var/pass_damage = O.throwforce + for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) + pass_damage = ME.handle_ranged_contact(A, pass_damage) + + src.take_damage(pass_damage) src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) return @@ -652,7 +657,12 @@ var/ignore_threshold if(istype(Proj, /obj/item/projectile/beam/pulse)) ignore_threshold = 1 - src.take_damage(Proj.damage, Proj.check_armour) + + var/pass_damage = Proj.damage + for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) + pass_damage = ME.handle_projectile_contact(Proj, pass_damage) + + src.take_damage(pass_damage, Proj.check_armour) if(prob(25)) spark_system.start() src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),ignore_threshold) @@ -748,7 +758,11 @@ else src.occupant_message("[user] hits [src] with [W].") user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].") - src.take_damage(W.force,W.damtype) + + var/pass_damage = W.force + for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) + pass_damage = ME.handle_projectile_contact(W, user, pass_damage) + src.take_damage(pass_damage,W.damtype) src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) return diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index 8e27d6eaa1..b2bd3f3aed 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -643,6 +643,10 @@ var/obj/item/weapon/rig/suit = H.back if(istype(suit)) return suit.cell + if(istype(src.loc, /obj/item/mecha_parts/mecha_equipment)) + var/obj/item/mecha_parts/mecha_equipment/mounting = src.loc + if(mounting.chassis && mounting.chassis.cell) + return mounting.chassis.cell return null /obj/item/weapon/weldingtool/electric/mounted @@ -651,4 +655,26 @@ /obj/item/weapon/weldingtool/electric/mounted/cyborg toolspeed = 0.5 +/obj/item/weapon/weldingtool/electric/mounted/exosuit + var/obj/item/mecha_parts/mecha_equipment/equip_mount = null + flame_intensity = 1 + eye_safety_modifier = 2 + always_process = TRUE + +/obj/item/weapon/weldingtool/electric/mounted/exosuit/Initialize() + ..() + + if(istype(loc, /obj/item/mecha_parts/mecha_equipment)) + equip_mount = loc + +/obj/item/weapon/weldingtool/electric/mounted/exosuit/process() + ..() + + if(equip_mount && equip_mount.chassis) + var/obj/mecha/M = equip_mount.chassis + if(M.selected == equip_mount && get_fuel()) + setWelding(TRUE, M.occupant) + else + setWelding(FALSE, M.occupant) + #undef WELDER_FUEL_BURN_INTERVAL diff --git a/code/modules/mob/_modifiers/fire.dm b/code/modules/mob/_modifiers/fire.dm new file mode 100644 index 0000000000..d69a35c2ec --- /dev/null +++ b/code/modules/mob/_modifiers/fire.dm @@ -0,0 +1,36 @@ +// Ignition, but confined to the modifier system. +// This makes it more predictable and thus, easier to balance. +/datum/modifier/fire + name = "on fire" + desc = "You are on fire! You will be harmed until the fire goes out or you extinguish it with water." + mob_overlay_state = "on_fire" + + on_created_text = "You burst into flames!" + on_expired_text = "The fire starts to fade." + stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. + var/damage_per_tick = 5 + +/datum/modifier/fire/intense + mob_overlay_state = "on_fire_intense" + damage_per_tick = 10 + +/datum/modifier/fire/tick() + holder.inflict_heat_damage(damage_per_tick) + +/* + * Modifier used by projectiles, like the flamethrower, that rely heavily on fire_stacks to persist. + */ + +/datum/modifier/fire/stack_managed/tick() + ..() + + if(!holder.fire_stacks || holder.fire_stacks < 0) + if(prob(10)) + expire() + + else if(holder.fire_stacks > 0) + holder.fire_stacks -= 1 + +/datum/modifier/fire/stack_managed/intense + mob_overlay_state = "on_fire_intense" + damage_per_tick = 10 diff --git a/code/modules/mob/_modifiers/modifiers_misc.dm b/code/modules/mob/_modifiers/modifiers_misc.dm index af6eaa952e..9d87088dae 100644 --- a/code/modules/mob/_modifiers/modifiers_misc.dm +++ b/code/modules/mob/_modifiers/modifiers_misc.dm @@ -224,28 +224,6 @@ the artifact triggers the rage. accuracy_dispersion = 2 // A combination of fear and immense pain or damage reults in a twitching firing arm. Flee. - - -// Ignition, but confined to the modifier system. -// This makes it more predictable and thus, easier to balance. -/datum/modifier/fire - name = "on fire" - desc = "You are on fire! You will be harmed until the fire goes out or you extinguish it with water." - mob_overlay_state = "on_fire" - - on_created_text = "You combust into flames!" - on_expired_text = "The fire starts to fade." - stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot. - var/damage_per_tick = 5 - -/datum/modifier/fire/intense - mob_overlay_state = "on_fire_intense" - damage_per_tick = 10 - -/datum/modifier/fire/tick() - holder.inflict_heat_damage(damage_per_tick) - - // Applied when near something very cold. // Reduces mobility, attack speed. /datum/modifier/chilled diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 1d806dde45..aeab794552 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -109,5 +109,9 @@ if(drowsy) apply_effect(drowsy, DROWSY, blocked) if(agony) apply_effect(agony, AGONY, blocked) if(flammable) adjust_fire_stacks(flammable) - if(ignite) IgniteMob() + if(ignite) + if(ignite >= 3) + add_modifier(/datum/modifier/fire/stack_managed/intense, 60 SECONDS) + else + add_modifier(/datum/modifier/fire/stack_managed, 45 * ignite SECONDS) return 1 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index f3603a783d..e91a906442 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -104,7 +104,7 @@ var/projectile_type = /obj/item/projectile var/penetrating = 0 //If greater than zero, the projectile will pass through dense objects as specified by on_penetrate() //Effects - var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 maybe later for burst of fire around the impact point. - Mech + var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 for intense fire. - Mech var/flammability = 0 //Amount of fire stacks to add for the above. var/combustion = TRUE //Does this set off flammable objects on fire/hit? var/stun = 0 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 8220e90eee..d25b0e5fee 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -245,7 +245,7 @@ icon_state = "bullet_alt" damage = 15 damage_type = BURN - incendiary = 1 + incendiary = 0.5 flammability = 2 /obj/item/projectile/bullet/incendiary/flamethrower @@ -261,7 +261,9 @@ vacuum_traversal = 0 /obj/item/projectile/bullet/incendiary/flamethrower/large - damage = 15 + damage = 5 + incendiary = 3 + flammability = 2 range = 6 /* Practice rounds and blanks */ diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index 0fdd3df5be..480f085c90 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -680,6 +680,46 @@ materials = list(DEFAULT_WALL_MATERIAL = 4000, "osmium" = 3000, "glass" = 1000) build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/prybar +/datum/design/item/mecha/powercutters + name = "hydraulic cable cutter" + desc = "A large, hydraulic cablecutter." + id = "mech_wirecutter" + req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "osmium" = 3000, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/cutter + +/datum/design/item/mecha/powerscrewdriver + name = "hydraulic screwdriver" + desc = "A large, hydraulic screwdriver." + id = "mech_screwdriver" + req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "osmium" = 3000, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/screwdriver + +/datum/design/item/mecha/powerwelder + name = "welding laser" + desc = "A large welding laser." + id = "mech_welder" + req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, MAT_PHORON = 3000, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/welding + +/datum/design/item/mecha/inflatables + name = "inflatables deployer" + desc = "A large pneumatic inflatable deployer." + id = "mech_inflatables" + req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 2000, MAT_PLASTIC = 4000, "glass" = 1000) + build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/inflatables + +/datum/design/item/mecha/hardpoint_clamp + name = "hardpoint actuator" + desc = "A complex device used to commandeer equipment from the ground." + id = "mech_hardpoint_clamp" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_POWER = 5, TECH_COMBAT = 2, TECH_MAGNET = 4) + materials = list(MAT_PLASTEEL = 2500, MAT_PLASTIC = 3000, MAT_OSMIUM = 1500, MAT_SILVER = 2000) + build_path = /obj/item/mecha_parts/mecha_equipment/hardpoint_actuator + /datum/design/item/mecha/generator_nuclear name = "Nuclear Reactor" desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy." diff --git a/html/changelogs/mechoid - exoexpansion.yml b/html/changelogs/mechoid - exoexpansion.yml new file mode 100644 index 0000000000..c8a399fe79 --- /dev/null +++ b/html/changelogs/mechoid - exoexpansion.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Mechoid + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Hardpoint Actuator equipment for Exosuits, allowing them (And most effectively, Ripleys) to swap components on the fly, after a short delay." + - rscadd: "Exo Inflatables Deployer, allowing exosuits to pick up and deploy inflatables." + - rscadd: "Exo screwdriver, wirecutters, and welding laser, to help round-out the tool-based equipment types." + - rscadd: "Fire modifiers based on stacks added, to be used by the damage system tweaked above." + - tweak: "Incendiary exo weapons tweaked to conform with fire change." + - tweak: "Ignition effects from weapons changed from the old fire-system to the modifier fire system." + - bugfix: "Shocker now retaliates properly against melee." diff --git a/icons/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index cba863ea47..1fcdff0f72 100644 Binary files a/icons/mecha/mecha_equipment.dmi and b/icons/mecha/mecha_equipment.dmi differ diff --git a/polaris.dme b/polaris.dme index a7d01bd843..f826b91eae 100644 --- a/polaris.dme +++ b/polaris.dme @@ -795,6 +795,7 @@ #include "code\game\mecha\combat\marauder.dm" #include "code\game\mecha\combat\phazon.dm" #include "code\game\mecha\equipment\mecha_equipment.dm" +#include "code\game\mecha\equipment\mecha_equipment_dynamicprocs.dm" #include "code\game\mecha\equipment\tools\armor_melee.dm" #include "code\game\mecha\equipment\tools\armor_ranged.dm" #include "code\game\mecha\equipment\tools\cable_layer.dm" @@ -804,9 +805,12 @@ #include "code\game\mecha\equipment\tools\energy_relay.dm" #include "code\game\mecha\equipment\tools\extinguisher.dm" #include "code\game\mecha\equipment\tools\generator.dm" +#include "code\game\mecha\equipment\tools\hardpoint_actuator.dm" +#include "code\game\mecha\equipment\tools\inflatables.dm" #include "code\game\mecha\equipment\tools\jetpack.dm" #include "code\game\mecha\equipment\tools\orescanner.dm" #include "code\game\mecha\equipment\tools\passenger.dm" +#include "code\game\mecha\equipment\tools\powertool.dm" #include "code\game\mecha\equipment\tools\rcd.dm" #include "code\game\mecha\equipment\tools\repair_droid.dm" #include "code\game\mecha\equipment\tools\shield.dm" @@ -815,8 +819,8 @@ #include "code\game\mecha\equipment\tools\syringe_gun.dm" #include "code\game\mecha\equipment\tools\teleporter.dm" #include "code\game\mecha\equipment\tools\tools.dm" +#include "code\game\mecha\equipment\tools\weldinglaser.dm" #include "code\game\mecha\equipment\tools\wormhole.dm" -#include "code\game\mecha\equipment\tools\wrench.dm" #include "code\game\mecha\equipment\weapons\honk.dm" #include "code\game\mecha\equipment\weapons\weapons.dm" #include "code\game\mecha\equipment\weapons\ballistic\automatic.dm" @@ -1927,6 +1931,7 @@ #include "code\modules\mob\update_icons.dm" #include "code\modules\mob\_modifiers\aura.dm" #include "code\modules\mob\_modifiers\cloning.dm" +#include "code\modules\mob\_modifiers\fire.dm" #include "code\modules\mob\_modifiers\medical.dm" #include "code\modules\mob\_modifiers\modifiers.dm" #include "code\modules\mob\_modifiers\modifiers_misc.dm"