Added module damage to breach checks. Attempted to add relaymove/hardsuit interface procs but failed.

This commit is contained in:
Zuhayr
2014-11-17 00:12:57 +10:30
parent 17670a5698
commit cfb5710166
10 changed files with 169 additions and 16 deletions

View File

@@ -15,6 +15,7 @@
icon_state = "module"
matter = list("metal" = 20000, "plastic" = 30000, "glass" = 5000)
var/damage = 0
var/obj/item/weapon/rig/holder
var/module_cooldown = 10
@@ -51,6 +52,60 @@
var/activate_string = "Activate"
var/deactivate_string = "Deactivate"
/obj/item/rig_module/examine()
..()
switch(damage)
if(0)
usr << "It is undamaged."
if(1)
usr << "It is badly damaged."
if(2)
usr << "It is almost completely destroyed."
/obj/item/rig_module/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W,/obj/item/stack/nanopaste))
if(damage == 0)
user << "There is no damage to mend."
return
user << "You start mending the damaged portions of \the [src]..."
if(!do_after(user,30) || !W || !src)
return
var/obj/item/stack/nanopaste/paste = W
damage = 0
user << "You mend the damage to [src] with [W]."
paste.use(1)
return
else if(istype(W,/obj/item/stack/cable_coil))
switch(damage)
if(0)
user << "There is no damage to mend."
return
if(2)
user << "There is no damage that you are capable of mending with such crude tools."
return
var/obj/item/stack/cable_coil/cable = W
if(!cable.amount >= 5)
user << "You need five units of cable to repair \the [src]."
return
user << "You start mending the damaged portions of \the [src]..."
if(!do_after(user,30) || !W || !src)
return
damage = 1
user << "You mend some of damage to [src] with [W], but you will need more advanced tools to fix it completely."
cable.use(5)
return
..()
/obj/item/rig_module/New()
..()
if(suit_overlay_inactive)
@@ -81,6 +136,9 @@
//Proc for one-use abilities like teleport.
/obj/item/rig_module/proc/engage()
if(damage >= 2)
usr << "<span class='warning'>The [interface_name] is damaged beyond use!</span>"
if(world.time < next_use)
usr << "<span class='warning'>You cannot use the [interface_name] again so soon.</span>"
return 0

View File

@@ -58,6 +58,7 @@
var/malfunctioning = 0
var/malfunction_delay = 0
var/electrified = 0
var/locked_down = 0
var/sealing // Keeps track of seal status independantly of canremove.
var/offline = 1 // Should we be applying suit maluses?
@@ -410,7 +411,8 @@
"passivecost" = module.passive_power_cost*10,
"engagestring" = module.engage_string,
"activatestring" = module.activate_string,
"deactivatestring" = module.deactivate_string
"deactivatestring" = module.deactivate_string,
"damage" = module.damage
)
if(module.charges && module.charges.len)
@@ -648,6 +650,7 @@
malfunctioning += severity*10
if(malfunction_delay <= 0)
malfunction_delay = 20
take_hit(severity*10,"electrical pulse")
/obj/item/weapon/rig/proc/shock(mob/user)
if (electrocute_mob(user, cell, src))
@@ -655,6 +658,41 @@
return 1
return 0
/obj/item/weapon/rig/proc/take_hit(damage,source)
if(!installed_modules.len)
return
if(!prob(max(0,(damage-(chest ? chest.breach_threshold : 0)))))
return
var/list/valid_modules = list()
for(var/obj/item/rig_module/module in installed_modules)
if(module.damage < 2)
valid_modules |= module
if(!valid_modules.len)
return
var/obj/item/rig_module/dam_module = pick(valid_modules)
dam_module.damage++
if(!source)
source = "hit"
if(wearer)
wearer << "<span class='danger'>The [source] has [dam_module.damage >= 2 ? "destroyed" : "damaged"] your [dam_module.interface_name]!"
dam_module.deactivate()
/obj/item/weapon/rig/proc/forced_move(dir)
if(locked_down)
return 0
if(!control_overridden)
return
if(!wearer || wearer.back != src)
return 0
wearer.Move(null,dir)
#undef ONLY_DEPLOY
#undef ONLY_RETRACT
#undef SEAL_DELAY

View File

@@ -355,12 +355,11 @@ This function restores all organs.
if ((damage > 25 && prob(20)) || (damage > 50 && prob(60)))
emote("scream")
..(damage, damagetype, def_zone, blocked)
return 1
//Handle BRUTE and BURN damage
handle_suit_punctures(damagetype, damage)
handle_suit_punctures(damagetype, damage, def_zone)
if(blocked >= 2) return 0

View File

@@ -414,13 +414,19 @@ emp_act
w_uniform.add_blood(source)
update_inv_w_uniform(0)
/mob/living/carbon/human/proc/handle_suit_punctures(var/damtype, var/damage)
/mob/living/carbon/human/proc/handle_suit_punctures(var/damtype, var/damage, var/def_zone)
if(!wear_suit) return
if(!istype(wear_suit,/obj/item/clothing/suit/space)) return
// Tox and oxy don't matter to suits.
if(damtype != BURN && damtype != BRUTE) return
var/obj/item/clothing/suit/space/SS = wear_suit
var/penetrated_dam = max(0,(damage - SS.breach_threshold)) // - SS.damage)) - Consider uncommenting this if suits seem too hardy on dev.
// The rig might soak this hit, if we're wearing one.
if(back && istype(back,/obj/item/weapon/rig))
var/obj/item/weapon/rig/rig = back
rig.take_hit(damage)
if(penetrated_dam) SS.create_breaches(damtype, penetrated_dam)
// We may also be taking a suit breach.
if(!wear_suit) return
if(!istype(wear_suit,/obj/item/clothing/suit/space)) return
var/obj/item/clothing/suit/space/SS = wear_suit
var/penetrated_dam = max(0,(damage - SS.breach_threshold))
if(penetrated_dam) SS.create_breaches(damtype, penetrated_dam)

View File

@@ -1369,14 +1369,14 @@
seer = 0
var/tmp/glasses_processed = 0
var/obj/item/weapon/rig/rig = back
if(istype(rig) && rig.visor)
if(rig.visor.vision && rig.visor.active && rig.visor.vision.glasses)
glasses_processed = 1
process_glasses(rig.visor.vision.glasses)
if(!rig.helmet || (head && rig.helmet == head))
if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses)
glasses_processed = 1
process_glasses(rig.visor.vision.glasses)
if(glasses)
if(glasses && !glasses_processed)
glasses_processed = 1
process_glasses(glasses)

View File

@@ -599,6 +599,21 @@ var/list/ai_verbs_default = list(
//src.cameraFollow = null
src.view_core()
/mob/living/silicon/ai/verb/hardsuit_interface()
set category = "AI Commands"
set name = "Open Hardsuit Interface"
if(!src.loc || !src.loc.loc || !istype(src.loc.loc, /obj/item/rig_module))
usr << "You are not loaded into a hardsuit."
return
var/obj/item/rig_module/module = src.loc.loc
if(!module.holder)
usr << "Your module is not installed in a hardsuit."
return
module.holder.ui_interact(usr)
//Replaces /mob/living/silicon/ai/verb/change_network() in ai.dm & camera.dm
//Adds in /mob/living/silicon/ai/proc/ai_network_change() instead

View File

@@ -222,6 +222,21 @@
src.reset_view(C)
return 1
/mob/living/silicon/pai/verb/hardsuit_interface()
set category = "pAI Commands"
set name = "Open Hardsuit Interface"
if(!src.loc || !src.loc.loc || !istype(src.loc.loc, /obj/item/rig_module))
usr << "You are not loaded into a hardsuit."
return
var/obj/item/rig_module/module = src.loc.loc
if(!module.holder)
usr << "Your module is not installed in a hardsuit."
return
module.holder.ui_interact(usr)
/mob/living/silicon/pai/cancel_camera()
set category = "pAI Commands"
set name = "Cancel Camera View"