mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-31 07:57:47 +01:00
- Added mecha DNA-locking. Only the person with matching UE can operate such mechs.
- Added two mecha armor booster modules (no sprites) and a repair droid module (sprite is temporary). git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1362 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -874,6 +874,7 @@
|
||||
brainmob.loc = src
|
||||
brainmob.name = owner.real_name
|
||||
brainmob.real_name = owner.real_name
|
||||
brainmob.dna = owner.dna
|
||||
if(src.owner.mind)
|
||||
src.owner.mind.transfer_to(brainmob)
|
||||
brainmob.death() //the brain is dead until stuffed into an MMI. In which case it might still be dead if it's been beat up.
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
var/overload = 0
|
||||
wreckage = "/obj/decal/mecha_wreckage/gygax"
|
||||
internal_damage_threshold = 35
|
||||
max_equip = 3
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -74,4 +74,16 @@
|
||||
if(..())
|
||||
if(istype(M, /obj/mecha/combat))
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/detach()
|
||||
if(src.Move(get_turf(chassis)))
|
||||
chassis.equipment -= src
|
||||
if(chassis.selected == src)
|
||||
chassis.selected = null
|
||||
chassis.log_message("[src] removed from equipment.")
|
||||
src.chassis = null
|
||||
src.equip_ready = 1
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -164,6 +164,7 @@
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/rcd
|
||||
name = "Mounted RCD"
|
||||
desc = "An exosuit-mounted Rapid Construction Device."
|
||||
icon_state = "mecha_rcd"
|
||||
equip_cooldown = 20
|
||||
energy_drain = 250
|
||||
@@ -393,4 +394,233 @@
|
||||
Topic(href, href_list)
|
||||
if(href_list["mode"])
|
||||
mode = text2num(href_list["mode"])
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants.
|
||||
name = "Armor Booster Module (Close Combat Weaponry)"
|
||||
desc = "Boosts exosuit armor against armed melee attacks."
|
||||
icon_state = "mecha_abooster_ccw"
|
||||
equip_cooldown = 10
|
||||
energy_drain = 50
|
||||
range = RANGED
|
||||
construction_cost = list("metal"=20000,"silver"=20000)
|
||||
var/deflect_coeff = 1.15
|
||||
var/damage_coeff = 0.8
|
||||
|
||||
can_attach(obj/mecha/M as obj)
|
||||
if(..())
|
||||
if(!istype(M, /obj/mecha/combat/honker))
|
||||
if(!M.proc_res["dynattackby"])
|
||||
return 1
|
||||
return 0
|
||||
|
||||
attach(obj/mecha/M as obj)
|
||||
..()
|
||||
chassis.proc_res["dynattackby"] = src
|
||||
return
|
||||
|
||||
proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(!action_checks(user))
|
||||
return chassis.dynattackby(W,user)
|
||||
chassis.log_message("Attacked by [W]. Attacker - [user]")
|
||||
if(prob(chassis.deflect_chance*src.deflect_coeff))
|
||||
user << "\red The [W] bounces off [chassis] armor."
|
||||
chassis.log_append_to_last("Armor saved.")
|
||||
else
|
||||
chassis.occupant_message("<font color='red'><b>[user] hits [chassis] with [W].</b></font>")
|
||||
user.visible_message("<font color='red'><b>[user] hits [chassis] with [W].</b></font>", "<font color='red'><b>You hit [src] with [W].</b></font>")
|
||||
chassis.take_damage(round(W.force*0.8),W.damtype)
|
||||
chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
equip_ready = 0
|
||||
chassis.cell.use(energy_drain)
|
||||
if(do_after_cooldown())
|
||||
equip_ready = 1
|
||||
return
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
|
||||
name = "Armor Booster Module (Ranged Weaponry)"
|
||||
desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots."
|
||||
icon_state = "mecha_abooster_proj"
|
||||
equip_cooldown = 10
|
||||
energy_drain = 50
|
||||
range = RANGED
|
||||
construction_cost = list("metal"=20000,"gold"=20000)
|
||||
var/damage_coeff = 0.8
|
||||
|
||||
can_attach(obj/mecha/M as obj)
|
||||
if(..())
|
||||
if(!istype(M, /obj/mecha/combat/honker))
|
||||
if(!M.proc_res["dynbulletdamage"] && !M.proc_res["dynhitby"])
|
||||
return 1
|
||||
return 0
|
||||
|
||||
attach(obj/mecha/M as obj)
|
||||
..()
|
||||
chassis.proc_res["dynbulletdamage"] = src
|
||||
chassis.proc_res["dynhitby"] = src
|
||||
return
|
||||
|
||||
proc/dynbulletdamage(flag)
|
||||
if(!action_checks(src))
|
||||
return chassis.dynbulletdamage(flag)
|
||||
var/damage
|
||||
switch(flag)
|
||||
if(PROJECTILE_PULSE)
|
||||
damage = 30
|
||||
if(PROJECTILE_LASER)
|
||||
damage = 20
|
||||
if(PROJECTILE_WEAKBULLET)
|
||||
damage = 8
|
||||
if(PROJECTILE_BULLET)
|
||||
damage = 10
|
||||
if(PROJECTILE_BOLT)
|
||||
damage = 5
|
||||
if(PROJECTILE_DART)
|
||||
damage = 5
|
||||
else
|
||||
return
|
||||
chassis.take_damage(round(damage*src.damage_coeff))
|
||||
chassis.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
equip_ready = 0
|
||||
chassis.cell.use(energy_drain)
|
||||
if(do_after_cooldown())
|
||||
equip_ready = 1
|
||||
return
|
||||
|
||||
proc/dynhitby(atom/movable/A)
|
||||
if(!action_checks(A))
|
||||
return chassis.dynhitby(A)
|
||||
if(prob(chassis.deflect_chance) || istype(A, /mob) || istype(A, /obj/item/mecha_tracking))
|
||||
chassis.occupant_message("\blue The [A] bounces off the armor.")
|
||||
chassis.visible_message("The [A] bounces off the [chassis] armor")
|
||||
chassis.log_append_to_last("Armor saved.")
|
||||
if(istype(A, /mob))
|
||||
var/mob/M = A
|
||||
M.bruteloss += 10
|
||||
M.updatehealth()
|
||||
else if(istype(A, /obj))
|
||||
var/obj/O = A
|
||||
if(O.throwforce)
|
||||
chassis.take_damage(O.throwforce*damage_coeff)
|
||||
chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
equip_ready = 0
|
||||
chassis.cell.use(energy_drain)
|
||||
if(do_after_cooldown())
|
||||
equip_ready = 1
|
||||
return
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/repair_droid
|
||||
name = "Exosuit Repair Droid"
|
||||
desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage."
|
||||
icon_state = "repair_droid"
|
||||
equip_cooldown = 20
|
||||
energy_drain = 20
|
||||
range = RANGED
|
||||
construction_cost = list("metal"=10000,"gold"=5000,"silver"=5000,"glass"=10000)
|
||||
var/health_boost = 2
|
||||
var/datum/global_iterator/pr_repair_droid
|
||||
var/icon/droid_overlay
|
||||
|
||||
New()
|
||||
..()
|
||||
pr_repair_droid = new /datum/global_iterator/mecha_repair_droid(list(src),0)
|
||||
pr_repair_droid.set_delay(equip_cooldown)
|
||||
return
|
||||
|
||||
attach(obj/mecha/M as obj)
|
||||
..()
|
||||
droid_overlay = new(src.icon, icon_state = "repair_droid")
|
||||
M.overlays += droid_overlay
|
||||
return
|
||||
|
||||
destroy()
|
||||
chassis.overlays -= droid_overlay
|
||||
..()
|
||||
return
|
||||
|
||||
detach()
|
||||
chassis.overlays -= droid_overlay
|
||||
pr_repair_droid.stop()
|
||||
..()
|
||||
return
|
||||
|
||||
get_equip_info()
|
||||
var/output = ..()
|
||||
output += " - <a href='?src=\ref[src];toggle_repairs=1'>[pr_repair_droid.active()?"Dea":"A"]ctivate</a>"
|
||||
return output
|
||||
|
||||
Topic(href, href_list)
|
||||
if(href_list["toggle_repairs"])
|
||||
chassis.overlays -= droid_overlay
|
||||
if(pr_repair_droid.toggle())
|
||||
droid_overlay = new(src.icon, icon_state = "repair_droid_a")
|
||||
chassis.log_message("[src] activated.")
|
||||
else
|
||||
droid_overlay = new(src.icon, icon_state = "repair_droid")
|
||||
chassis.log_message("[src] deactivated.")
|
||||
equip_ready = 1
|
||||
chassis.overlays += droid_overlay
|
||||
return
|
||||
|
||||
|
||||
/datum/global_iterator/mecha_repair_droid
|
||||
|
||||
process(var/obj/item/mecha_parts/mecha_equipment/repair_droid/RD as obj)
|
||||
if(!RD.chassis)
|
||||
return src.stop()
|
||||
var/repaired = 0
|
||||
if(RD.chassis.health < initial(RD.chassis.health))
|
||||
RD.chassis.health += min(RD.health_boost, initial(RD.chassis.health)-RD.chassis.health)
|
||||
repaired = 1
|
||||
if(RD.chassis.internal_damage && prob(20))
|
||||
if(RD.chassis.internal_damage&MECHA_INT_TEMP_CONTROL)
|
||||
RD.chassis.internal_damage &= ~MECHA_INT_TEMP_CONTROL
|
||||
repaired = 1
|
||||
else if(RD.chassis.internal_damage&MECHA_INT_SHORT_CIRCUIT)
|
||||
RD.chassis.internal_damage &= ~MECHA_INT_SHORT_CIRCUIT
|
||||
repaired = 1
|
||||
else if(RD.chassis.internal_damage&MECHA_INT_TANK_BREACH)
|
||||
RD.chassis.internal_damage &= ~MECHA_INT_TANK_BREACH
|
||||
repaired = 1
|
||||
else if(RD.chassis.internal_damage&MECHA_INT_CONTROL_LOST)
|
||||
RD.chassis.internal_damage &= ~MECHA_INT_CONTROL_LOST
|
||||
repaired = 1
|
||||
if(repaired)
|
||||
RD.chassis.cell.use(RD.energy_drain)
|
||||
RD.equip_ready = 0
|
||||
else
|
||||
RD.equip_ready = 1
|
||||
return
|
||||
|
||||
/*
|
||||
/obj/item/mecha_parts/mecha_equipment/defence_shocker
|
||||
name = "Exosuit Defence Shocker"
|
||||
desc = ""
|
||||
icon_state = "mecha_teleport"
|
||||
equip_cooldown = 10
|
||||
energy_drain = 100
|
||||
range = RANGED
|
||||
var/shock_damage = 15
|
||||
var/active
|
||||
|
||||
can_attach(obj/mecha/M as obj)
|
||||
if(..())
|
||||
if(!istype(M, /obj/mecha/combat/honker))
|
||||
if(!M.proc_res["dynattackby"] && !M.proc_res["dynattackhand"] && !!M.proc_res["dynattackalien"])
|
||||
return 1
|
||||
return 0
|
||||
|
||||
attach(obj/mecha/M as obj)
|
||||
..()
|
||||
chassis.proc_res["dynattackby"] = src
|
||||
return
|
||||
|
||||
proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(!action_checks(user) || !active)
|
||||
return
|
||||
user.electrocute_act(shock_damage, src)
|
||||
return chassis.dynattackby(W,user)
|
||||
*/
|
||||
|
||||
@@ -24,6 +24,8 @@ Control functions:
|
||||
|
||||
active() - Returns 1 if datum is active, 0 otherwise.
|
||||
|
||||
toggle() - toggles datum state. Returns 1 if datum activated, 0 otherwise
|
||||
|
||||
Misc functions:
|
||||
|
||||
get_last_exec_time() - Returns the time of last iteration.
|
||||
@@ -134,6 +136,6 @@ Data storage vars:
|
||||
proc/toggle()
|
||||
if(!src.stop())
|
||||
src.start()
|
||||
return
|
||||
return src.active()
|
||||
|
||||
|
||||
|
||||
@@ -73,14 +73,18 @@
|
||||
/obj/item/mecha_parts/part/honker_right_leg
|
||||
),
|
||||
"Exosuit Equipment"=list(
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/drill,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/taser,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/honker),
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/drill,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/taser,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/honker,
|
||||
/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,
|
||||
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster,
|
||||
/obj/item/mecha_parts/mecha_equipment/repair_droid
|
||||
),
|
||||
|
||||
"Misc"=list(/obj/item/mecha_tracking)
|
||||
|
||||
@@ -175,7 +179,7 @@
|
||||
var/list/part_set = part_sets[set_name]
|
||||
for(var/atom/part in part_set)
|
||||
var/resources_available = check_resources(part)
|
||||
output += "<div class='part'>[output_part_info(part)]<br>\[[resources_available?"<a href='?src=\ref[src];part=\ref[part]'>Build</a> | ":null]<a href='?src=\ref[src];add_to_queue=\ref[part]'>Add to queue</a>\]</div>"
|
||||
output += "<div class='part'>[output_part_info(part)]<br>\[[resources_available?"<a href='?src=\ref[src];part=\ref[part]'>Build</a> | ":null]<a href='?src=\ref[src];add_to_queue=\ref[part]'>Add to queue</a>\]\[<a href='?src=\ref[src];part_desc=\ref[part]'>?</a>\]</div>"
|
||||
return output
|
||||
|
||||
proc/output_part_info(var/obj/item/mecha_parts/part)
|
||||
@@ -368,6 +372,7 @@
|
||||
body, table {height: 100%;}
|
||||
td {vertical-align: top; padding: 5px;}
|
||||
html, body {padding: 0px; margin: 0px;}
|
||||
h1 {font-size: 18px; margin: 5px 0px;}
|
||||
</style>
|
||||
</head><body>
|
||||
<body>
|
||||
@@ -436,6 +441,12 @@
|
||||
if(href_list["auto_sync"])
|
||||
src.sync = !src.sync
|
||||
//pr_auto_sync.toggle()
|
||||
if(href_list["part_desc"])
|
||||
var/obj/part = locate(href_list["part_desc"])
|
||||
temp = {"<h1>[part] description:</h1>
|
||||
[part.desc]<br>
|
||||
<a href='?src=\ref[src];clear_temp=1'>Return</a>
|
||||
"}
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
+81
-31
@@ -29,11 +29,11 @@
|
||||
var/list/log = new
|
||||
var/last_message = 0
|
||||
var/add_req_access = 1
|
||||
|
||||
var/dna //dna-locking the mech
|
||||
var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference
|
||||
var/datum/effects/system/spark_spread/spark_system = new
|
||||
var/lights = 0
|
||||
var/lights_power = 6
|
||||
//var/inertia_dir = null //for open space travel.
|
||||
|
||||
//inner atmos machinery. Air tank mostly
|
||||
var/use_internal_tank = 0
|
||||
@@ -334,8 +334,13 @@
|
||||
|
||||
/obj/mecha/hitby(atom/movable/A as mob|obj)
|
||||
src.log_message("Hit by [A].",1)
|
||||
call((proc_res["dynhitby"]||src), "dynhitby")(A)
|
||||
return
|
||||
|
||||
/obj/mecha/proc/dynhitby(atom/movable/A)
|
||||
if(istype(A, /obj/item/mecha_tracking))
|
||||
A.loc = src
|
||||
src.visible_message("The [A] fastens firmly to [src].")
|
||||
return
|
||||
if(prob(src.deflect_chance) || istype(A, /mob))
|
||||
src.occupant_message("\blue The [A] bounces off the armor.")
|
||||
@@ -345,13 +350,11 @@
|
||||
var/mob/M = A
|
||||
M.bruteloss += 10
|
||||
M.updatehealth()
|
||||
|
||||
else if(istype(A, /obj))
|
||||
var/obj/O = A
|
||||
if(O.throwforce)
|
||||
src.take_damage(O.throwforce)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -372,30 +375,35 @@
|
||||
src.visible_message("The [src.name] armor deflects the projectile")
|
||||
src.log_append_to_last("Armor saved.")
|
||||
else
|
||||
var/damage
|
||||
var/ignore_threshold
|
||||
switch(flag)
|
||||
if(PROJECTILE_PULSE)
|
||||
damage = 40
|
||||
ignore_threshold = 1
|
||||
if(PROJECTILE_LASER)
|
||||
damage = 20
|
||||
if(PROJECTILE_TASER)
|
||||
src.cell.use(500)
|
||||
if(PROJECTILE_WEAKBULLET)
|
||||
damage = 8
|
||||
if(PROJECTILE_BULLET)
|
||||
damage = 10
|
||||
if(PROJECTILE_BOLT)
|
||||
damage = 5
|
||||
if(PROJECTILE_DART)
|
||||
damage = 5
|
||||
else
|
||||
return
|
||||
src.take_damage(damage)
|
||||
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST),ignore_threshold)
|
||||
call((proc_res["dynbulletdamage"]||src), "dynbulletdamage")(flag) //calls equipment
|
||||
return
|
||||
|
||||
/obj/mecha/proc/dynbulletdamage(flag)
|
||||
var/damage
|
||||
var/ignore_threshold
|
||||
switch(flag)
|
||||
if(PROJECTILE_PULSE)
|
||||
damage = 40
|
||||
ignore_threshold = 1
|
||||
if(PROJECTILE_LASER)
|
||||
damage = 20
|
||||
if(PROJECTILE_TASER)
|
||||
src.cell.use(500)
|
||||
if(PROJECTILE_WEAKBULLET)
|
||||
damage = 8
|
||||
if(PROJECTILE_BULLET)
|
||||
damage = 10
|
||||
if(PROJECTILE_BOLT)
|
||||
damage = 5
|
||||
if(PROJECTILE_DART)
|
||||
damage = 5
|
||||
else
|
||||
return
|
||||
src.take_damage(damage)
|
||||
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST),ignore_threshold)
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/proc/destroy()
|
||||
spawn()
|
||||
var/obj/mecha/mecha = src
|
||||
@@ -618,7 +626,10 @@
|
||||
usr << "\blue <B>Subject cannot have abiotic items on.</B>"
|
||||
return
|
||||
*/
|
||||
if(!src.operation_allowed(usr))
|
||||
var/passed
|
||||
if((src.dna && usr.dna.unique_enzymes==src.dna))
|
||||
passed = 1
|
||||
if(!passed && !src.operation_allowed(usr))
|
||||
usr << "\red Access denied"
|
||||
src.log_append_to_last("Permission denied.")
|
||||
return
|
||||
@@ -658,6 +669,9 @@
|
||||
return 0
|
||||
if(src.occupant)
|
||||
return 0
|
||||
if(src.dna && src.dna!=mmi_as_oc.brain.brainmob.dna.unique_enzymes)
|
||||
user << "Stop it!"
|
||||
return 0
|
||||
if(do_after(20))
|
||||
if(!src.occupant)
|
||||
return mmi_moved_inside(mmi_as_oc,user)
|
||||
@@ -835,6 +849,25 @@
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
/obj/mecha/proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
src.log_message("Attacked by [W]. Attacker - [user]")
|
||||
if(prob(src.deflect_chance))
|
||||
user << "\red The [W] bounces off [src.name] armor."
|
||||
src.log_append_to_last("Armor saved.")
|
||||
/*
|
||||
for (var/mob/V in viewers(src))
|
||||
if(V.client && !(V.blinded))
|
||||
V.show_message("The [W] bounces off [src.name] armor.", 1)
|
||||
*/
|
||||
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)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
@@ -941,6 +974,8 @@
|
||||
return
|
||||
|
||||
else
|
||||
call((proc_res["dynattackby"]||src), "dynattackby")(W,user)
|
||||
/*
|
||||
src.log_message("Attacked by [W]. Attacker - [user]")
|
||||
if(prob(src.deflect_chance))
|
||||
user << "\red The [W] bounces off [src.name] armor."
|
||||
@@ -955,13 +990,19 @@
|
||||
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)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
*/
|
||||
return
|
||||
|
||||
|
||||
/obj/mecha/proc/get_stats_html()
|
||||
var/output = {"<html>
|
||||
<head><title>[src.name] data</title></head>
|
||||
<body style="color: #00ff00; background: #000000; font: 13px 'Courier', monospace;">
|
||||
<head><title>[src.name] data</title>
|
||||
<style>
|
||||
body {color: #00ff00; background: #000000; font: 13px 'Courier', monospace;}
|
||||
hr {border: 1px solid #0f0; color: #0f0; background-color: #0f0;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
[src.get_stats_part()]
|
||||
<hr>
|
||||
[src.get_commands()]
|
||||
@@ -984,6 +1025,7 @@
|
||||
<b>Airtank pressure: </b>[src.return_pressure()]kPa<br>
|
||||
<b>Internal temperature: </b> [src.air_contents.temperature]°K|[src.air_contents.temperature - T0C]°C<br>
|
||||
<b>Lights: </b>[lights?"on":"off"]<br>
|
||||
[src.dna?"<b>DNA-locked:</b><br> <span style='font-size:5px;letter-spacing:-1px;'>[src.dna]</span> \[<a href='?src=\ref[src];reset_dna=1'>Reset</a>\]<br>":null]
|
||||
"}
|
||||
return output
|
||||
|
||||
@@ -992,11 +1034,13 @@
|
||||
<a href='?src=\ref[src];toggle_airtank=1'>Toggle Internal Airtank Usage</a><br>
|
||||
[(/obj/mecha/verb/disconnect_from_port in src.verbs)?"<a href='?src=\ref[src];port_disconnect=1'>Disconnect from port</a><br>":null]
|
||||
[(/obj/mecha/verb/connect_to_port in src.verbs)?"<a href='?src=\ref[src];port_connect=1'>Connect to port</a><br>":null]
|
||||
<hr>
|
||||
<a href='?src=\ref[src];unlock_id_upload=1'>Unlock ID upload panel</a><br>
|
||||
<a href='?src=\ref[src];view_log=1'>View internal log</a><br>
|
||||
<a href='?src=\ref[src];dna_lock=1'>DNA-lock</a><br>
|
||||
<hr>
|
||||
[(/obj/mecha/verb/eject in src.verbs)?"<a href='?src=\ref[src];eject=1'>Eject</a><br>":null]
|
||||
"}
|
||||
if(/obj/mecha/verb/eject in src.verbs)
|
||||
output += "<a href='?src=\ref[src];eject=1'>Eject</a><br>"
|
||||
return output
|
||||
|
||||
/obj/mecha/Topic(href, href_list)
|
||||
@@ -1055,6 +1099,12 @@
|
||||
add_req_access = 0
|
||||
var/mob/user = locate(href_list["user"])
|
||||
user << browse(null,"window=exosuit_add_access")
|
||||
if(href_list["dna_lock"])
|
||||
if(src.occupant)
|
||||
src.dna = src.occupant.dna.unique_enzymes
|
||||
src.occupant_message("You feel a prick as the needle takes your DNA sample.")
|
||||
if(href_list["reset_dna"])
|
||||
src.dna = null
|
||||
/*
|
||||
|
||||
if (href_list["ai_take_control"])
|
||||
|
||||
@@ -536,7 +536,13 @@ datum
|
||||
req_tech = list("bluespace" = 2, "magnets" = 3)
|
||||
build_path = "/obj/item/mecha_parts/mecha_equipment/gravcatapult"
|
||||
|
||||
|
||||
mech_repair_droid
|
||||
name = "Exosuit Module Design (Repair Droid Module)"
|
||||
desc = "Automated Repair Droid. BEEP BOOP"
|
||||
id = "mech_repair_droid"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("magnets" = 3, "programming" = 3)
|
||||
build_path = "/obj/item/mecha_parts/mecha_equipment/repair_droid"
|
||||
|
||||
|
||||
////////////////////////////////////////
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 29 KiB |
Reference in New Issue
Block a user