mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-11 08:14:26 +01:00
Exosuit Expansion: Return of the Ripley (#6767)
* Expands further upon Exosuits. * FixFix Inflatable Deployer * Changelog, fix oversights. * Burst. * Default 0
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -11,6 +11,30 @@
|
||||
|
||||
equip_type = EQUIP_HULL
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info()
|
||||
if(!chassis) return
|
||||
return "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [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, "<span class='danger'>\The [W] bounces off \the [chassis]'s armor.</span>")
|
||||
chassis.log_append_to_last("Armor saved.")
|
||||
inc_damage = 0
|
||||
else
|
||||
chassis.occupant_message("<span class='danger'>\The [user] hits [chassis] with [W].</span>")
|
||||
user.visible_message("<span class='danger'>\The [user] hits [chassis] with [W].</span>", "<span class='danger'>You hit [src] with [W].</span>")
|
||||
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 "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [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
|
||||
return
|
||||
*/
|
||||
|
||||
@@ -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("<span class='notice'>The armor deflects incoming projectile.</span>")
|
||||
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("<span class='notice'>The [A] bounces off the armor.</span>")
|
||||
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 "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [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 "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [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
|
||||
return
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
@@ -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 = "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [chassis.selected==src?"<b>":"<a href='?src=\ref[chassis];select_equip=\ref[src]'>"][src.name][chassis.selected==src?"</b>":"</a>"] - <a href='?src=\ref[src];toggle_deployable_mode=1'>Deploy [my_deployer.mode?"Door":"Wall"]</a><br>\
|
||||
- Doors left: <span style=\"color:#ff0;\">[my_deployer.stored_doors]</span>/[my_deployer.max_doors]<br>\
|
||||
- Walls left: <span style=\"color:#ff0;\">[my_deployer.stored_walls]</span>/[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
|
||||
@@ -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
|
||||
|
||||
+15
-1
@@ -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'
|
||||
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'
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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("<font color='red'><b>[user] hits [src] with [W].</b></font>")
|
||||
user.visible_message("<font color='red'><b>[user] hits [src] with [W].</b></font>", "<font color='red'><b>You hit [src] with [W].</b></font>")
|
||||
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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = "<span class='danger'>You burst into flames!</span>"
|
||||
on_expired_text = "<span class='warning'>The fire starts to fade.</span>"
|
||||
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
|
||||
@@ -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 = "<span class='danger'>You combust into flames!</span>"
|
||||
on_expired_text = "<span class='warning'>The fire starts to fade.</span>"
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 40 KiB |
+6
-1
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user