mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-28 22:48:38 +01:00
Merge pull request #2593 from Neerti/10/4/2016_technomancer_changes
Technomancer Bug Fixes & Tweaks
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user