Technomancer Bug Fixes & Tweaks

Cores can now be locked and unlocked by a verb.  Locked cores cannot be removed by anyone.  Cores automatically unlock if the wearer dies or otherwise stops existing for some reason.
Healing spells now induce a flat instability cost on the healer instead of it being split between healer and healed.  The amount healed is greatly increased if used on someone besides the healer.
Mend Organs is now called Great Mend Wounds, and now heals broken bones, IB, eye damage, and blood loss in addition to internal organs.
Radiating instability (the purple glow) now gives a warning to people afflicted.
Instability discounts should start applying correctly for specific cores.
Instability now affects all living mobs and not just humans.  This includes borgs and simple animals.
Phase shift now adds ongoing instability while hiding inside the rift.
Projectile spells should be logged now.
Wards last forever, and should not die in vacuum now.
Restoration aura is now green colored and not blue.
Simple mobs and cyborgs are now harmed by lightning.
This commit is contained in:
Neerti
2016-10-04 21:09:15 -04:00
parent 0ea6a9f879
commit 0d140349b3
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()