Technomancer tesla armor adjustments, blink removal. (#12410)

This commit is contained in:
Matt Atlas
2021-09-03 13:07:02 -03:00
committed by GitHub
parent 3d82c65541
commit 2b294588aa
6 changed files with 91 additions and 108 deletions
-1
View File
@@ -599,7 +599,6 @@
#include "code\game\gamemodes\technomancer\spells\abjuration.dm"
#include "code\game\gamemodes\technomancer\spells\apportation.dm"
#include "code\game\gamemodes\technomancer\spells\audible_deception.dm"
#include "code\game\gamemodes\technomancer\spells\blink.dm"
#include "code\game\gamemodes\technomancer\spells\chroma.dm"
#include "code\game\gamemodes\technomancer\spells\condensation.dm"
#include "code\game\gamemodes\technomancer\spells\dispel.dm"
@@ -19,7 +19,7 @@
var/ready = 1 //Determines if the next attack will be blocked, as well if a strong lightning bolt is sent out at the attacker.
var/ready_icon_state = "tesla_armor_1" //also wip
var/normal_icon_state = "tesla_armor_0"
var/cooldown_to_charge = 15 SECONDS
var/cooldown_to_charge = 20 SECONDS
/obj/item/clothing/suit/armor/tesla/handle_shield(mob/user, var/on_back, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
//First, some retaliation.
@@ -28,17 +28,17 @@
var/obj/item/projectile/P = damage_source
if(P.firer && get_dist(user, P.firer) <= 3)
if(ready)
shoot_lightning(P.firer, 40)
shoot_lightning(P.firer, 2000)
else
shoot_lightning(P.firer, 15)
shoot_lightning(P.firer, 1000, /obj/item/projectile/beam/lightning/small)
else
if(attacker && attacker != user)
if(get_dist(user, attacker) <= 3) //Anyone farther away than three tiles is too far to shoot lightning at.
if(ready)
shoot_lightning(attacker, 40)
shoot_lightning(attacker, 2000)
else
shoot_lightning(attacker, 15)
shoot_lightning(attacker, 1000, /obj/item/projectile/beam/lightning/small)
//Deal with protecting our wearer now.
if(ready)
@@ -77,8 +77,8 @@
H.update_action_buttons()
..()
/obj/item/clothing/suit/armor/tesla/proc/shoot_lightning(mob/target, power)
var/obj/item/projectile/beam/lightning/lightning = new(get_turf(src))
/obj/item/clothing/suit/armor/tesla/proc/shoot_lightning(mob/target, power, lightning_type = /obj/item/projectile/beam/lightning)
var/obj/item/projectile/beam/lightning/lightning = new lightning_type(get_turf(src))
lightning.power = power
lightning.old_style_target(target)
lightning.fire()
@@ -95,6 +95,36 @@
overlays.Remove(instability_flash)
qdel(instability_flash)
/proc/safe_blink(atom/movable/AM, var/range = 3)
if(AM.anchored || !AM.loc)
return
var/list/targets = list()
for(var/turf/simulated/T in range(AM, range))
if(T.density || istype(T, /turf/simulated/mineral)) //Don't blink to vacuum or a wall
continue
for(var/atom/movable/stuff in T.contents)
if(stuff.density)
continue
targets.Add(T)
if(!targets.len)
return
var/turf/simulated/destination = null
destination = pick(targets)
if(destination)
if(ismob(AM))
var/mob/living/L = AM
if(L.buckled_to)
L.buckled_to.unbuckle()
spark(AM, 5, 2)
AM.forceMove(destination)
AM.visible_message("<span class='notice'>\The [AM] vanishes!</span>")
to_chat(AM, "<span class='notice'>You suddenly appear somewhere else!</span>")
return
/mob/living/silicon/instability_effects()
if(instability)
var/rng = 0
@@ -1,98 +0,0 @@
/datum/technomancer/spell/blink
name = "Blink"
desc = "Force the target to teleport a short distance away. This target could be anything from something lying on the ground, \
to someone trying to fight you, or even yourself. Using this on someone next to you makes their potential distance after \
teleportation greater. Self casting has the greatest potential for distance, as well as the cheapest cost."
enhancement_desc = "Blink distance is increased greatly."
spell_power_desc = "Blink distance is scaled up with more spell power."
cost = 50
obj_path = /obj/item/spell/blink
ability_icon_state = "tech_blink"
category = UTILITY_SPELLS
/obj/item/spell/blink
name = "blink"
desc = "Teleports you or someone else a short distance away."
icon_state = "blink"
cast_methods = CAST_RANGED | CAST_MELEE | CAST_USE
aspect = ASPECT_TELE
/proc/safe_blink(atom/movable/AM, var/range = 3)
if(AM.anchored || !AM.loc)
return
var/list/targets = list()
for(var/turf/simulated/T in range(AM, range))
if(T.density || istype(T, /turf/simulated/mineral)) //Don't blink to vacuum or a wall
continue
for(var/atom/movable/stuff in T.contents)
if(stuff.density)
continue
targets.Add(T)
if(!targets.len)
return
var/turf/simulated/destination = null
destination = pick(targets)
if(destination)
if(ismob(AM))
var/mob/living/L = AM
if(L.buckled_to)
L.buckled_to.unbuckle()
spark(AM, 5, 2)
AM.forceMove(destination)
AM.visible_message("<span class='notice'>\The [AM] vanishes!</span>")
to_chat(AM, "<span class='notice'>You suddenly appear somewhere else!</span>")
return
/obj/item/spell/blink/on_ranged_cast(atom/hit_atom, mob/user)
if(istype(hit_atom, /atom/movable))
var/atom/movable/AM = hit_atom
if(!within_range(AM))
to_chat(user, "<span class='warning'>\The [AM] is too far away to blink.</span>")
return
if(!allowed_to_teleport())
to_chat(user, "<span class='warning'>Teleportation doesn't seem to work here.</span>")
return
if(pay_energy(400))
if(check_for_scepter())
safe_blink(AM, calculate_spell_power(6))
else
safe_blink(AM, calculate_spell_power(3))
adjust_instability(3)
log_and_message_admins("has blinked [AM] away.")
else
to_chat(user, "<span class='warning'>You need more energy to blink [AM] away!</span>")
/obj/item/spell/blink/on_use_cast(mob/user)
if(!allowed_to_teleport())
to_chat(user, "<span class='warning'>Teleportation doesn't seem to work here.</span>")
return
if(pay_energy(200))
if(check_for_scepter())
safe_blink(user, calculate_spell_power(10))
else
safe_blink(user, calculate_spell_power(6))
adjust_instability(1)
log_and_message_admins("has blinked themselves away.")
else
to_chat(user, "<span class='warning'>You need more energy to blink yourself away!</span>")
/obj/item/spell/blink/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
if(istype(hit_atom, /atom/movable))
var/atom/movable/AM = hit_atom
if(!allowed_to_teleport())
to_chat(user, "<span class='warning'>Teleportation doesn't seem to work here.</span>")
return
if(pay_energy(300))
visible_message("<span class='danger'>\The [user] reaches out towards \the [AM] with a glowing hand.</span>")
if(check_for_scepter())
safe_blink(AM, 10)
else
safe_blink(AM, 6)
adjust_instability(2)
log_and_message_admins("has blinked [AM] away.")
else
to_chat(user, "<span class='warning'>You need more energy to blink [AM] away!</span>")
@@ -24,8 +24,8 @@
/obj/item/projectile/beam/lightning
name = "lightning"
icon_state = "lightning"
damage = 40
armor_penetration = 10
damage = 25
armor_penetration = 25
damage_type = BURN
muzzle_type = /obj/effect/projectile/muzzle/tesla
@@ -34,6 +34,14 @@
var/power = 6000
/obj/item/projectile/beam/lightning/small
name = "shock"
damage = 15
armor_penetration = 15
power = 1000
/obj/item/projectile/beam/lightning/attack_mob(var/mob/living/target_mob, var/distance, var/miss_modifier=0)
..()
tesla_zap(target_mob, 3, power)
+44
View File
@@ -0,0 +1,44 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
# balance
# admin
# backend
# security
# refactor
#################################
# Your name.
author: MattAtlas
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscdel: "Removed Blink from the Technomancer spells."
- tweak: "The Tesla armor now uses lower power lightning shocks if the armor isn't ready for another shock instead of using full power shocks."
- tweak: "Increased the Tesla armor recharge time by 5 seconds."
- bugfix: "Fixed the Tesla armor lightning shocks not doing the tesla zap."