Merge pull request #2593 from Neerti/10/4/2016_technomancer_changes

Technomancer Bug Fixes & Tweaks
This commit is contained in:
Anewbe
2016-10-04 20:30:01 -05:00
committed by GitHub
36 changed files with 248 additions and 114 deletions
+11 -1
View File
@@ -86,6 +86,8 @@
if(wearer && wearer.mind)
if(!(technomancers.is_antagonist(wearer.mind))) // In case someone tries to wear a stolen core.
wearer.adjust_instability(20)
if(!wearer || wearer.stat == DEAD) // Unlock if we're dead or not worn.
canremove = TRUE
/obj/item/weapon/technomancer_core/proc/regenerate()
energy = min(max(energy + regen_rate, 0), max_energy)
@@ -287,4 +289,12 @@
/obj/item/weapon/technomancer_core/summoner/pay_dues()
if(summoned_mobs.len)
pay_energy( round(summoned_mobs.len) )
pay_energy( round(summoned_mobs.len) )
/obj/item/weapon/technomancer_core/verb/toggle_lock()
set name = "Toggle Core Lock"
set category = "Object"
set desc = "Toggles the locking mechanism on your manipulation core."
canremove = !canremove
to_chat(usr, "<span class='notice'>You [canremove ? "de" : ""]activate the locking mechanism on \the [src].</span>")
@@ -139,6 +139,7 @@
icon = 'icons/obj/technomancer.dmi'
icon_state = "scepter"
force = 15
slot_flags = SLOT_BELT
/obj/item/weapon/scepter/attack_self(mob/living/carbon/human/user)
var/obj/item/item_to_test = user.get_other_hand(src)
+89 -16
View File
@@ -5,15 +5,15 @@
// Proc: adjust_instability()
// Parameters: 0
// Description: Does nothing, because inheritence.
/mob/living/proc/adjust_instability()
return
/mob/living/proc/adjust_instability(var/amount)
instability = min(max(instability + amount, 0), 200)
// Proc: adjust_instability()
// Parameters: 1 (amount - how much instability to give)
// Description: Adds or subtracks instability to the mob, then updates the hud.
/mob/living/carbon/human/adjust_instability(var/amount)
instability = min(max(instability + amount, 0), 200)
instability_update_hud()
..()
// Proc: instability_update_hud()
// Parameters: 0
@@ -35,7 +35,7 @@
// Proc: Life()
// Parameters: 0
// Description: Makes instability tick along with Life().
/mob/living/carbon/human/Life()
/mob/living/Life()
. = ..()
handle_instability()
@@ -43,9 +43,8 @@
// Parameters: 0
// Description: Makes instability decay. instability_effects() handles the bad effects for having instability. It will also hold back
// from causing bad effects more than one every ten seconds, to prevent sudden death from angry RNG.
/mob/living/carbon/human/proc/handle_instability()
/mob/living/proc/handle_instability()
instability = round(Clamp(instability, 0, 200))
instability_update_hud()
//This should cushon against really bad luck.
if(instability && last_instability_event < (world.time - 10 SECONDS) && prob(20))
instability_effects()
@@ -65,6 +64,10 @@
if(101 to 200)
adjust_instability(-40)
/mob/living/carbon/human/handle_instability()
..()
instability_update_hud()
/*
[16:18:08] <PsiOmegaDelta> Sparks
[16:18:10] <PsiOmegaDelta> Wormholes
@@ -78,17 +81,85 @@
// Parameters: 0
// Description: Does a variety of bad effects to the entity holding onto the instability, with more severe effects occuring if they have
// a lot of instability.
/mob/living/carbon/human/proc/instability_effects()
/mob/living/proc/instability_effects()
last_instability_event = world.time
spawn(1)
var/image/instability_flash = image('icons/obj/spells.dmi',"instability")
overlays |= instability_flash
sleep(4)
overlays.Remove(instability_flash)
qdel(instability_flash)
radiate_instability()
/mob/living/silicon/instability_effects()
if(instability)
var/rng = 0
last_instability_event = world.time
spawn(1)
var/image/instability_flash = image('icons/obj/spells.dmi',"instability")
overlays |= instability_flash
sleep(4)
overlays.Remove(instability_flash)
qdel(instability_flash)
radiate_instability()
..()
switch(instability)
if(1 to 10) //Harmless
return
if(11 to 30) //Minor
rng = rand(0,1)
switch(rng)
if(0)
var/datum/effect/effect/system/spark_spread/sparks = PoolOrNew(/datum/effect/effect/system/spark_spread)
sparks.set_up(5, 0, src)
sparks.attach(loc)
sparks.start()
visible_message("<span class='warning'>Electrical sparks manifest from nowhere around \the [src]!</span>")
qdel(sparks)
if(1)
return
if(31 to 50) //Moderate
rng = rand(0,4)
switch(rng)
if(0)
electrocute_act(instability * 0.3, "unstable energies")
if(1)
adjustFireLoss(instability * 0.15) //7.5 burn @ 50 instability
src << "<span class='danger'>Your chassis alerts you to overheating from an unknown external force!</span>"
if(2)
adjustBruteLoss(instability * 0.15) //7.5 brute @ 50 instability
src << "<span class='danger'>Your chassis makes the sound of metal groaning!</span>"
if(3)
safe_blink(src, range = 6)
src << "<span class='warning'>You're teleported against your will!</span>"
if(4)
emp_act(2)
if(51 to 100) //Severe
rng = rand(0,3)
switch(rng)
if(0)
electrocute_act(instability * 0.5, "extremely unstable energies")
if(1)
emp_act(2)
if(2)
adjustFireLoss(instability * 0.3) //30 burn @ 100 instability
src << "<span class='danger'>Your chassis alerts you to extreme overheating from an unknown external force!</span>"
if(3)
adjustBruteLoss(instability * 0.3) //30 brute @ 100 instability
src << "<span class='danger'>Your chassis makes the sound of metal groaning and tearing!</span>"
if(101 to 200) //Lethal
rng = rand(0,4)
switch(rng)
if(0)
electrocute_act(instability, "extremely unstable energies")
if(1)
emp_act(1)
if(2)
adjustFireLoss(instability * 0.4) //40 burn @ 100 instability
src << "<span class='danger'>Your chassis alerts you to extreme overheating from an unknown external force!</span>"
if(3)
adjustBruteLoss(instability * 0.4) //40 brute @ 100 instability
src << "<span class='danger'>Your chassis makes the sound of metal groaning and tearing!</span>"
/mob/living/carbon/human/instability_effects()
if(instability)
var/rng = 0
..()
switch(instability)
if(1 to 10) //Harmless
return
@@ -194,7 +265,7 @@
if(7)
adjustToxLoss(instability * 0.40) //25 tox @ 100 instability
/mob/living/carbon/human/proc/radiate_instability()
/mob/living/proc/radiate_instability()
var/distance = round(sqrt(instability / 2))
if(instability <= 30)
distance = 0
@@ -210,6 +281,8 @@
var/armor = getarmor(null, "energy")
var/armor_factor = abs( (armor - 100) / 100)
outgoing_instability = outgoing_instability * armor_factor
if(outgoing_instability)
to_chat(H, "<span class='warning'>The purple glow makes you feel strange...</span>")
H.adjust_instability(outgoing_instability)
set_light(distance, distance * 2, l_color = "#C26DDE")
@@ -73,7 +73,7 @@
var/turf/location = get_turf(H)
location.hotspot_expose(1000, 50, 1)
owner.adjust_instability(1)
adjust_instability(1)
/obj/item/weapon/spell/aura/frost
name = "chilling aura"
@@ -95,7 +95,7 @@
var/turf/location = get_turf(H)
location.hotspot_expose(1, 50, 1)
owner.adjust_instability(1)
adjust_instability(1)
@@ -128,7 +128,7 @@
for(var/mob/living/L in mobs_to_heal)
L.adjustBruteLoss(-5)
L.adjustFireLoss(-5)
owner.adjust_instability(2)
adjust_instability(2)
/obj/item/weapon/spell/aura/biomed/on_use_cast(mob/living/user)
heal_allies_only = !heal_allies_only
@@ -76,10 +76,10 @@
var/turf/T = get_turf(hit_atom)
if(selected_sound && pay_energy(200))
playsound(T, selected_sound, 80, 1, -1)
owner.adjust_instability(1)
adjust_instability(1)
// Air Horn time.
if(selected_sound == 'sound/items/AirHorn.ogg' && pay_energy(3800))
owner.adjust_instability(49) // Pay for your sins.
adjust_instability(49) // Pay for your sins.
for(var/mob/living/carbon/M in ohearers(6, T))
if(M.get_ear_protection() >= 2)
continue
@@ -12,7 +12,7 @@
icon_state = "generic"
cast_methods = null
aspect = ASPECT_BIOMED
glow_color = "#0000FF"
glow_color = "#33CC33"
var/regen_tick = 0
var/heal_allies_only = 1
@@ -23,16 +23,16 @@
if(regen_tick % 5 == 0)
var/list/nearby_mobs = range(4,owner)
var/list/mobs_to_heal = list()
if(heal_allies_only)
for(var/mob/living/L in nearby_mobs)
for(var/mob/living/L in nearby_mobs)
if(heal_allies_only)
if(is_ally(L))
mobs_to_heal |= L
else
mobs_to_heal = nearby_mobs //Heal everyone!
else
mobs_to_heal |= L // Heal everyone!
for(var/mob/living/L in mobs_to_heal)
L.adjustBruteLoss(-2)
L.adjustFireLoss(-2)
owner.adjust_instability(2)
adjust_instability(2)
/obj/item/weapon/spell/aura/biomed/on_use_cast(mob/living/user)
heal_allies_only = !heal_allies_only
@@ -47,4 +47,4 @@
T.hotspot_expose(1000, 50, 1)
T.create_fire(fire_power)
owner.adjust_instability(1)
adjust_instability(1)
@@ -36,4 +36,4 @@
var/cold_factor = abs(protection - 1)
H.bodytemperature = max( (H.bodytemperature - temp_change) * cold_factor, temp_cap)
owner.adjust_instability(1)
adjust_instability(1)
@@ -39,4 +39,4 @@
L.electrocute_act(power, src, 1.0, BP_TORSO)
owner.adjust_instability(3)
adjust_instability(3)
@@ -40,4 +40,4 @@
L << "<span class='danger'>You feel almost like you're melting from the inside!</span>"
owner.adjust_instability(2)
adjust_instability(2)
@@ -150,7 +150,7 @@
attack \the [L].</span>"
//This is to stop someone from controlling beepsky and getting him to stun someone 5 times a second.
user.setClickCooldown(8)
owner.adjust_instability(controlled_mobs.len)
adjust_instability(controlled_mobs.len)
else if(isturf(hit_atom))
var/turf/T = hit_atom
@@ -159,7 +159,7 @@
return 0
if(pay_energy(50 * controlled_mobs.len))
move_all(T)
owner.adjust_instability(controlled_mobs.len)
adjust_instability(controlled_mobs.len)
user << "<span class='notice'>You command your [controlled_mobs.len > 1 ? "entities" : "[controlled_mobs[1]]"] to move \
towards \the [T].</span>"
@@ -46,7 +46,7 @@
visible_message("<span class='danger'>\The [user] reaches out towards \the [L] with the flaming hand, and they ignite!</span>")
L << "<span class='danger'>You ignite!</span>"
L.fire_act()
owner.adjust_instability(12)
adjust_instability(12)
else
//This is needed in order for the welder to work, and works similarly to grippers.
welder.loc = user
@@ -54,7 +54,7 @@
if(!resolved && welder && hit_atom)
if(pay_energy(500))
welder.attack(hit_atom, user, def_zone)
owner.adjust_instability(4)
adjust_instability(4)
if(welder && user && (welder.loc == user))
welder.loc = src
else
@@ -1,7 +1,6 @@
/datum/technomancer/spell/mend_burns
name = "Mend Burns"
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers. \
Instability is split between the target and technomancer, if seperate."
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers."
cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_burns
ability_icon_state = "tech_mendburns"
@@ -20,10 +19,10 @@
spawn(1)
if(ishuman(host))
var/mob/living/carbon/human/H = host
var/heal_power = host == origin ? 10 : 30
origin.adjust_instability(10)
for(var/i = 0, i<5,i++)
if(H)
H.adjustFireLoss(-5)
H.adjust_instability(2.5)
origin.adjust_instability(2.5)
sleep(10)
H.adjustFireLoss(-heal_power / 5)
sleep(1 SECOND)
on_expire()
@@ -1,6 +1,6 @@
/datum/technomancer/spell/mend_metal
name = "Mend Metal"
desc = "Restores integrity to external robotic components. Instability is split between the target and technomancer, if seperate."
desc = "Restores integrity to external robotic components."
cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_metal
ability_icon_state = "tech_mendwounds"
@@ -19,14 +19,13 @@
spawn(1)
if(ishuman(host))
var/mob/living/carbon/human/H = host
var/heal_power = host == origin ? 10 : 30
origin.adjust_instability(10)
for(var/i = 0, i<5,i++)
if(H)
for(var/obj/item/organ/external/O in H.organs)
if(O.robotic < ORGAN_ROBOT) // Robot parts only.
continue
O.heal_damage(5, 0, internal = 1, robo_repair = 1)
H.adjust_instability(2.5)
origin.adjust_instability(2.5)
O.heal_damage(heal_power / 5, 0, internal = 1, robo_repair = 1)
sleep(1 SECOND)
on_expire()
@@ -1,15 +1,15 @@
/datum/technomancer/spell/mend_organs
name = "Mend Organs"
desc = "Heals the target's internal organs, both organic and robotic. Instability is split between the target \
and technomancer, if seperate."
cost = 50
name = "Great Mend Wounds"
desc = "Greatly heals the target's wounds, both external and internal. Restores internal organs to functioning states, even if \
robotic, reforms bones, patches internal bleeding, and restores missing blood."
cost = 100
obj_path = /obj/item/weapon/spell/insert/mend_organs
ability_icon_state = "tech_mendwounds"
category = SUPPORT_SPELLS
/obj/item/weapon/spell/insert/mend_organs
name = "mend organs"
desc = "Now nobody will ever need surgery."
name = "great mend wounds"
desc = "A walking medbay is now you!"
icon_state = "mend_wounds"
cast_methods = CAST_MELEE
aspect = ASPECT_BIOMED
@@ -20,13 +20,33 @@
spawn(1)
if(ishuman(host))
var/mob/living/carbon/human/H = host
var/heal_power = host == origin ? 2 : 5
origin.adjust_instability(15)
for(var/i = 0, i<5,i++)
if(H)
for(var/obj/item/organ/O in H.internal_organs)
if(O.damage > 0)
O.damage = max(O.damage - 1, 0)
if(O.damage > 0) // Fix internal damage
O.damage = max(O.damage - (heal_power / 5), 0)
if(O.damage <= 5 && O.organ_tag == O_EYES) // Fix eyes
H.sdisabilities &= ~BLIND
for(var/obj/item/organ/external/O in H.organs) // Fix limbs
if(!O.robotic < ORGAN_ROBOT) // No robot parts for this.
continue
O.heal_damage(0, heal_power / 5, internal = 1, robo_repair = 0)
for(var/obj/item/organ/E in H.bad_external_organs) // Fix bones
var/obj/item/organ/external/affected = E
if((affected.damage < affected.min_broken_damage * config.organ_health_multiplier) && (affected.status & ORGAN_BROKEN))
affected.status &= ~ORGAN_BROKEN
for(var/datum/wound/W in affected.wounds) // Fix IB
if(istype(W, /datum/wound/internal_bleeding))
affected.wounds -= W
affected.update_damages()
H.restore_blood() // Fix bloodloss
H.adjust_instability(2.5)
origin.adjust_instability(2.5)
sleep(1 SECOND)
on_expire()
@@ -1,7 +1,6 @@
/datum/technomancer/spell/mend_wires
name = "Mend Wires"
desc = "Binds the internal wiring of robotic limbs and components over time. \
Instability is split between the target and technomancer, if seperate."
desc = "Binds the internal wiring of robotic limbs and components over time."
cost = 50
obj_path = /obj/item/weapon/spell/insert/mend_wires
ability_icon_state = "tech_mendwounds"
@@ -20,14 +19,13 @@
spawn(1)
if(ishuman(host))
var/mob/living/carbon/human/H = host
var/heal_power = host == origin ? 10 : 30
origin.adjust_instability(10)
for(var/i = 0, i<5,i++)
if(H)
for(var/obj/item/organ/external/O in H.organs)
if(O.robotic < ORGAN_ROBOT) // Robot parts only.
continue
O.heal_damage(0, 5, internal = 1, robo_repair = 1)
H.adjust_instability(2.5)
origin.adjust_instability(2.5)
sleep(10)
O.heal_damage(0, heal_power / 5, internal = 1, robo_repair = 1)
sleep(1 SECOND)
on_expire()
@@ -20,10 +20,10 @@
spawn(1)
if(ishuman(host))
var/mob/living/carbon/human/H = host
var/heal_power = host == origin ? 10 : 30
origin.adjust_instability(10)
for(var/i = 0, i<5,i++)
if(H)
H.adjustBruteLoss(-5)
H.adjust_instability(2.5)
origin.adjust_instability(2.5)
H.adjustBruteLoss(-heal_power / 5)
sleep(1 SECOND)
on_expire()
@@ -1,7 +1,6 @@
/datum/technomancer/spell/purify
name = "Purify"
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such. \
Instability is split between the target and technomancer, if seperate."
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such."
cost = 25
obj_path = /obj/item/weapon/spell/insert/purify
ability_icon_state = "tech_purify"
@@ -24,12 +23,12 @@
H.disabilities = 0
// for(var/datum/disease/D in H.viruses)
// D.cure()
var/heal_power = host == origin ? 10 : 30
origin.adjust_instability(10)
for(var/i = 0, i<5,i++)
if(H)
H.adjustToxLoss(-5)
H.adjustCloneLoss(-5)
H.radiation = max(host.radiation - 10, 0)
H.adjust_instability(2.5)
origin.adjust_instability(2.5)
H.adjustToxLoss(-heal_power / 5)
H.adjustCloneLoss(-heal_power / 5)
H.radiation = max(host.radiation - ( (heal_power * 2) / 5), 0)
sleep(1 SECOND)
on_expire()
@@ -20,8 +20,8 @@
/obj/item/weapon/spell/instability_tap/on_use_cast(mob/user)
if(check_for_scepter())
core.give_energy(7500)
owner.adjust_instability(40)
adjust_instability(40)
else
core.give_energy(5000)
owner.adjust_instability(50)
adjust_instability(50)
qdel(src)
@@ -37,7 +37,7 @@
else
mark_spell_ref.forceMove(get_turf(user))
user << "<span class='notice'>Your mark is moved from its old position to \the [get_turf(user)] under you.</span>"
owner.adjust_instability(5)
adjust_instability(5)
return 1
else
user << "<span class='warning'>You can't afford the energy cost!</span>"
@@ -99,7 +99,7 @@
playsound(old_turf, 'sound/effects/sparks2.ogg', 50, 1)
owner.adjust_instability(25)
adjust_instability(25)
qdel(src)
return 1
else
@@ -20,7 +20,7 @@
var/mob/living/carbon/human/H = hit_atom
if(pay_energy(1500))
H.adjustOxyLoss(-35)
owner.adjust_instability(10)
adjust_instability(10)
return
else if(isturf(hit_atom))
var/turf/T = hit_atom
@@ -28,4 +28,4 @@
T.assume_gas("oxygen", 200)
T.assume_gas("nitrogen", 800)
playsound(src.loc, 'sound/effects/spray.ogg', 50, 1, -3)
owner.adjust_instability(10)
adjust_instability(10)
@@ -15,6 +15,7 @@
/obj/item/weapon/spell/phase_shift/New()
..()
set_light(3, 2, l_color = "#FA58F4")
processing_objects |= src
/obj/effect/phase_shift
name = "rift"
@@ -32,8 +33,13 @@
/obj/effect/phase_shift/Destroy()
for(var/atom/movable/AM in contents) //Eject everything out.
AM.forceMove(get_turf(src))
processing_objects -= src
..()
/obj/effect/phase_shift/process()
for(var/mob/living/L in contents)
L.adjust_instability(2)
/obj/effect/phase_shift/relaymove(mob/user as mob)
if(user.stat)
return
@@ -36,7 +36,7 @@
P.damage = round(energy_before_firing * 0.004) // 4% of their current energy pool.
else
P.damage = round(energy_before_firing * 0.003) // 3% of their current energy pool.
owner.adjust_instability(instability_per_shot)
adjust_instability(instability_per_shot)
return 1
@@ -13,9 +13,10 @@
if(set_up(hit_atom, user))
var/obj/item/projectile/new_projectile = new spell_projectile(get_turf(user))
new_projectile.launch(hit_atom)
log_and_message_admins("has casted [src] at \the [hit_atom].")
if(fire_sound)
playsound(get_turf(src), fire_sound, 75, 1)
owner.adjust_instability(instability_per_shot)
adjust_instability(instability_per_shot)
return 1
return 0
@@ -28,5 +29,8 @@
user.Stun(pre_shot_delay / 10)
sleep(pre_shot_delay)
qdel(target_image)
return 1
return 0
if(owner)
return TRUE
return FALSE // We got dropped before the firing occured.
return TRUE // No delay, no need to check.
return FALSE
@@ -42,4 +42,4 @@
var/radius = max(get_dist(L, src), 1)
var/rads = (power / 10) * ( 1 / (radius**2) )
L.apply_effect(rads, IRRADIATE)
owner.adjust_instability(2)
adjust_instability(2)
@@ -37,7 +37,7 @@
dead_mob_list -= SM
living_mob_list += SM
SM.icon_state = SM.icon_living
owner.adjust_instability(30)
adjust_instability(30)
else if(ishuman(L))
var/mob/living/carbon/human/H = L
@@ -57,7 +57,7 @@
H.timeofdeath = null
visible_message("<span class='danger'>\The [H]'s eyes open!</span>")
user << "<span class='notice'>It's alive!</span>"
owner.adjust_instability(100)
adjust_instability(100)
else
user << "<span class='warning'>The body of \the [H] doesn't seem to respond, perhaps you could try again?</span>"
owner.adjust_instability(10)
adjust_instability(10)
@@ -24,5 +24,5 @@
if(pay_energy(500))
var/instability_to_drain = min(H.instability, 25)
user << "<span class='notice'>You draw instability away from \the [H] and towards you.</span>"
owner.adjust_instability(instability_to_drain)
adjust_instability(instability_to_drain)
H.adjust_instability(-instability_to_drain)
@@ -15,7 +15,7 @@
/obj/item/weapon/spell/spawner/darkness/on_ranged_cast(atom/hit_atom, mob/user)
if(pay_energy(500))
owner.adjust_instability(4)
adjust_instability(4)
..()
/obj/item/weapon/spell/spawner/darkness/New()
@@ -16,7 +16,7 @@
/obj/item/weapon/spell/spawner/fire_blast/on_ranged_cast(atom/hit_atom, mob/user)
if(pay_energy(2000))
owner.adjust_instability(12)
adjust_instability(12)
..() // Makes the booms happen.
/obj/effect/temporary_effect/fire_blast
@@ -19,7 +19,7 @@
/obj/item/weapon/spell/spawner/pulsar/on_ranged_cast(atom/hit_atom, mob/user)
if(pay_energy(4000))
owner.adjust_instability(8)
adjust_instability(8)
..()
/obj/item/weapon/spell/spawner/pulsar/on_throw_cast(atom/hit_atom, mob/user)
@@ -19,16 +19,17 @@
E.icon_state = "anom"
sleep(5 SECONDS)
qdel(E)
var/mob/living/L = new summoned_mob_type(T)
core.summoned_mobs |= L
L.summoned = 1
var/image/summon_underlay = image('icons/obj/objects.dmi',"anom")
summon_underlay.alpha = 127
L.underlays |= summon_underlay
on_summon(L)
user << "<span class='notice'>You've successfully teleported \a [L] to you!</span>"
visible_message("<span class='warning'>\A [L] appears from no-where!</span>")
user.adjust_instability(instability_cost)
if(owner) // We might've been dropped.
var/mob/living/L = new summoned_mob_type(T)
core.summoned_mobs |= L
L.summoned = 1
var/image/summon_underlay = image('icons/obj/objects.dmi',"anom")
summon_underlay.alpha = 127
L.underlays |= summon_underlay
on_summon(L)
user << "<span class='notice'>You've successfully teleported \a [L] to you!</span>"
visible_message("<span class='warning'>\A [L] appears from no-where!</span>")
user.adjust_instability(instability_cost)
/obj/item/weapon/spell/summon/on_use_cast(mob/living/user)
if(summon_options.len)
@@ -32,15 +32,24 @@
response_help = "pets the"
response_disarm = "swats away"
response_harm = "punches"
min_oxy = 0
max_oxy = 0
min_tox = 0
max_tox = 0
min_co2 = 0
max_co2 = 0
min_n2 = 0
max_n2 = 0
minbodytemp = 0
maxbodytemp = 0
unsuitable_atoms_damage = 0
heat_damage_per_tick = 0
cold_damage_per_tick = 0
var/true_sight = 0 // If true, detects more than what the Technomancer normally can't.
var/mob/living/carbon/human/creator = null
var/list/seen_mobs = list()
/mob/living/simple_animal/ward/New()
..()
spawn(6 MINUTES)
expire()
/mob/living/simple_animal/ward/death()
if(creator)
creator << "<span class='danger'>Your ward inside [get_area(src)] was killed!</span>"
@@ -49,7 +49,7 @@
var/new_dir = get_dir(user, chosen_target)
user.dir = new_dir
sparks.start()
owner.adjust_instability(12)
adjust_instability(12)
//Finally, we handle striking the victim with whatever's in the user's offhand.
var/obj/item/I = user.get_inactive_hand()
@@ -11,6 +11,7 @@
clamp_values()
handle_regular_status_updates()
handle_actions()
handle_instability()
if(client)
handle_regular_hud_updates()
+4 -5
View File
@@ -76,17 +76,16 @@
return //immune
/mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0)
if (istype(source, /obj/machinery/containment_field))
if(shock_damage > 0)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, loc)
s.start()
shock_damage *= 0.75 //take reduced damage
take_overall_damage(0, shock_damage)
visible_message("\red [src] was shocked by \the [source]!", \
"\red <B>Energy pulse detected, system damaged!</B>", \
"\red You hear an electrical crack")
visible_message("<span class='warning'>[src] was shocked by \the [source]!</span>", \
"<span class='danger'>Energy pulse detected, system damaged!</span>", \
"<span class='warning'>You hear an electrical crack.</span>")
if(prob(20))
Stun(2)
return
@@ -398,6 +398,9 @@
/mob/living/simple_animal/adjustBruteLoss(damage)
health = Clamp(health - damage, 0, maxHealth)
/mob/living/simple_animal/adjustFireLoss(damage)
health = Clamp(health - damage, 0, maxHealth)
/mob/living/simple_animal/proc/SA_attackable(target_mob)
if (isliving(target_mob))
var/mob/living/L = target_mob
@@ -636,4 +639,16 @@
if(!target_mob || enroute)
spawn(10)
if(!src.stat)
horde()
horde()
/mob/living/simple_animal/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null)
shock_damage *= siemens_coeff
if (shock_damage < 1)
return 0
adjustFireLoss(shock_damage)
playsound(loc, "sparks", 50, 1, -1)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, loc)
s.start()