mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 03:33:21 +00:00
Merge pull request #2159 from Neerti/7/21/2016_technomancer_additions
Technomancer Additions/Fixes
This commit is contained in:
@@ -140,5 +140,5 @@
|
|||||||
#define ui_iarrowleft "SOUTH-1,EAST-4"
|
#define ui_iarrowleft "SOUTH-1,EAST-4"
|
||||||
#define ui_iarrowright "SOUTH-1,EAST-2"
|
#define ui_iarrowright "SOUTH-1,EAST-2"
|
||||||
|
|
||||||
#define ui_spell_master "EAST-1:16,NORTH-1:16"
|
#define ui_spell_master "EAST-2:16,NORTH-1:26"
|
||||||
#define ui_genetic_master "EAST-1:16,NORTH-3:16"
|
#define ui_genetic_master "EAST-1:16,NORTH-3:16"
|
||||||
|
|||||||
@@ -31,7 +31,8 @@
|
|||||||
user << "<span class='danger'>\The [src] has ran out of uses, and is now useless to you!</span>"
|
user << "<span class='danger'>\The [src] has ran out of uses, and is now useless to you!</span>"
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
var/area/A = input(user, "Area to teleport to", "Teleportation") in teleportlocs
|
var/area_wanted = input(user, "Area to teleport to", "Teleportation") in teleportlocs
|
||||||
|
var/area/A = teleportlocs[area_wanted]
|
||||||
if(!A)
|
if(!A)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -62,8 +63,8 @@
|
|||||||
targets.Add(T)
|
targets.Add(T)
|
||||||
|
|
||||||
if(!targets.len)
|
if(!targets.len)
|
||||||
user <<"The teleporter matrix was unable to locate a suitable teleport destination, as all the possibilities were nonexistant \
|
user << "The teleporter matrix was unable to locate a suitable teleport destination, as all the possibilities \
|
||||||
or hazardous. Try a different area."
|
were nonexistant or hazardous. Try a different area."
|
||||||
return
|
return
|
||||||
var/turf/simulated/destination = null
|
var/turf/simulated/destination = null
|
||||||
|
|
||||||
|
|||||||
@@ -44,26 +44,26 @@
|
|||||||
// Description: Makes instability decay. instability_effects() handles the bad effects for having instability. It will also hold back
|
// 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.
|
// 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/carbon/human/proc/handle_instability()
|
||||||
instability = Clamp(instability, 0, 200)
|
instability = round(Clamp(instability, 0, 200))
|
||||||
instability_update_hud()
|
instability_update_hud()
|
||||||
//This should cushon against really bad luck.
|
//This should cushon against really bad luck.
|
||||||
if(instability && last_instability_event < (world.time - 10 SECONDS) && prob(20))
|
if(instability && last_instability_event < (world.time - 10 SECONDS) && prob(20))
|
||||||
instability_effects()
|
instability_effects()
|
||||||
switch(instability)
|
switch(instability)
|
||||||
if(1 to 10)
|
if(1 to 10)
|
||||||
adjust_instability(-1)
|
|
||||||
if(11 to 20)
|
|
||||||
adjust_instability(-2)
|
adjust_instability(-2)
|
||||||
if(21 to 30)
|
if(11 to 20)
|
||||||
adjust_instability(-3)
|
|
||||||
if(31 to 40)
|
|
||||||
adjust_instability(-4)
|
adjust_instability(-4)
|
||||||
|
if(21 to 30)
|
||||||
|
adjust_instability(-6)
|
||||||
|
if(31 to 40)
|
||||||
|
adjust_instability(-8)
|
||||||
if(41 to 50)
|
if(41 to 50)
|
||||||
adjust_instability(-5)
|
|
||||||
if(51 to 100)
|
|
||||||
adjust_instability(-10)
|
adjust_instability(-10)
|
||||||
if(101 to 200)
|
if(51 to 100)
|
||||||
adjust_instability(-20)
|
adjust_instability(-20)
|
||||||
|
if(101 to 200)
|
||||||
|
adjust_instability(-40)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
[16:18:08] <PsiOmegaDelta> Sparks
|
[16:18:08] <PsiOmegaDelta> Sparks
|
||||||
@@ -88,6 +88,7 @@
|
|||||||
sleep(4)
|
sleep(4)
|
||||||
overlays.Remove(instability_flash)
|
overlays.Remove(instability_flash)
|
||||||
qdel(instability_flash)
|
qdel(instability_flash)
|
||||||
|
radiate_instability()
|
||||||
switch(instability)
|
switch(instability)
|
||||||
if(1 to 10) //Harmless
|
if(1 to 10) //Harmless
|
||||||
return
|
return
|
||||||
@@ -165,6 +166,7 @@
|
|||||||
src << "<span class='danger'>You feel your body slowly degenerate.</span>"
|
src << "<span class='danger'>You feel your body slowly degenerate.</span>"
|
||||||
if(7)
|
if(7)
|
||||||
adjustToxLoss(instability * 0.25) //25 tox @ 100 instability
|
adjustToxLoss(instability * 0.25) //25 tox @ 100 instability
|
||||||
|
|
||||||
if(101 to 200) //Lethal
|
if(101 to 200) //Lethal
|
||||||
rng = rand(0,8)
|
rng = rand(0,8)
|
||||||
switch(rng)
|
switch(rng)
|
||||||
@@ -191,3 +193,18 @@
|
|||||||
src << "<span class='danger'>You feel your body slowly degenerate.</span>"
|
src << "<span class='danger'>You feel your body slowly degenerate.</span>"
|
||||||
if(7)
|
if(7)
|
||||||
adjustToxLoss(instability * 0.40) //25 tox @ 100 instability
|
adjustToxLoss(instability * 0.40) //25 tox @ 100 instability
|
||||||
|
|
||||||
|
/mob/living/carbon/human/proc/radiate_instability()
|
||||||
|
var/distance = round(sqrt(instability / 2))
|
||||||
|
if(instability <= 30)
|
||||||
|
distance = 0
|
||||||
|
if(distance)
|
||||||
|
for(var/mob/living/carbon/human/H in range(src, distance) )
|
||||||
|
if(H == src) // This instability is radiating away from them, so don't include them.
|
||||||
|
continue
|
||||||
|
var/radius = max(get_dist(H, src), 1)
|
||||||
|
// People next to the source take a third of the instability. Further distance decreases the amount absorbed.
|
||||||
|
var/outgoing_instability = (instability / 3) * ( 1 / (radius**2) )
|
||||||
|
H.adjust_instability(outgoing_instability)
|
||||||
|
|
||||||
|
set_light(distance, distance, l_color = "#C26DDE")
|
||||||
|
|||||||
29
code/game/gamemodes/technomancer/spells/gambit.dm
Normal file
29
code/game/gamemodes/technomancer/spells/gambit.dm
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/datum/technomancer/spell/gambit
|
||||||
|
name = "Gambit"
|
||||||
|
desc = "This function causes you to receive a random function, including those which you haven't purchased."
|
||||||
|
ability_icon_state = "tech_gambit"
|
||||||
|
cost = 50
|
||||||
|
obj_path = /obj/item/weapon/spell/gambit
|
||||||
|
|
||||||
|
/var/global/list/all_technomancer_gambit_spells = typesof(/obj/item/weapon/spell) - list(
|
||||||
|
/obj/item/weapon/spell/gambit,
|
||||||
|
/obj/item/weapon/spell/projectile,
|
||||||
|
/obj/item/weapon/spell/aura,
|
||||||
|
/obj/item/weapon/spell/insert,
|
||||||
|
/obj/item/weapon/spell/spawner)
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/gambit
|
||||||
|
name = "gambit"
|
||||||
|
desc = "Do you feel lucky?"
|
||||||
|
icon_state = "gambit"
|
||||||
|
cast_methods = CAST_USE
|
||||||
|
aspect = ASPECT_UNSTABLE
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/gambit/on_use_cast(mob/living/carbon/human/user)
|
||||||
|
if(pay_energy(200))
|
||||||
|
adjust_instability(3)
|
||||||
|
var/obj/item/weapon/spell/random_spell = pick(all_technomancer_gambit_spells)
|
||||||
|
if(random_spell)
|
||||||
|
user.drop_from_inventory(src, null)
|
||||||
|
user.place_spell_in_hand(random_spell)
|
||||||
|
qdel(src)
|
||||||
@@ -26,6 +26,9 @@
|
|||||||
aspect = ASPECT_TELE
|
aspect = ASPECT_TELE
|
||||||
|
|
||||||
/obj/item/weapon/spell/mark/on_use_cast(mob/living/user)
|
/obj/item/weapon/spell/mark/on_use_cast(mob/living/user)
|
||||||
|
if(!allowed_to_teleport()) // Otherwise you could teleport back to the admin Z-level.
|
||||||
|
user << "<span class='warning'>You can't teleport here!</span>"
|
||||||
|
return 0
|
||||||
if(pay_energy(1000))
|
if(pay_energy(1000))
|
||||||
if(!mark_spell_ref)
|
if(!mark_spell_ref)
|
||||||
mark_spell_ref = new(get_turf(user))
|
mark_spell_ref = new(get_turf(user))
|
||||||
@@ -77,8 +80,23 @@
|
|||||||
set_light(light_intensity, light_intensity, l_color = "#006AFF")
|
set_light(light_intensity, light_intensity, l_color = "#006AFF")
|
||||||
time_left--
|
time_left--
|
||||||
sleep(1 SECOND)
|
sleep(1 SECOND)
|
||||||
user.forceMove(get_turf(mark_spell_ref))
|
|
||||||
|
var/turf/target_turf = get_turf(mark_spell_ref)
|
||||||
|
var/turf/old_turf = get_turf(user)
|
||||||
|
|
||||||
|
for(var/obj/item/weapon/grab/G in user.contents) // People the Technomancer is grabbing come along for the ride.
|
||||||
|
if(G.affecting)
|
||||||
|
G.affecting.forceMove(locate( target_turf.x+rand(-1,1), target_turf.y+rand(-1,1), target_turf.z))
|
||||||
|
G.affecting << "<span class='warning'>You are teleported along with [user]!</span>"
|
||||||
|
|
||||||
|
user.forceMove(target_turf)
|
||||||
user << "<span class='notice'>You are teleported to your Mark.</span>"
|
user << "<span class='notice'>You are teleported to your Mark.</span>"
|
||||||
|
|
||||||
|
playsound(target_turf, 'sound/effects/phasein.ogg', 25, 1)
|
||||||
|
playsound(target_turf, 'sound/effects/sparks2.ogg', 50, 1)
|
||||||
|
|
||||||
|
playsound(old_turf, 'sound/effects/sparks2.ogg', 50, 1)
|
||||||
|
|
||||||
owner.adjust_instability(25)
|
owner.adjust_instability(25)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -51,5 +51,6 @@
|
|||||||
user.visible_message("<span class='danger'>\The [user]'s [src] blocks [attack_text]!</span>")
|
user.visible_message("<span class='danger'>\The [user]'s [src] blocks [attack_text]!</span>")
|
||||||
spark_system.start()
|
spark_system.start()
|
||||||
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
|
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
|
||||||
|
adjust_instability(2)
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 24 KiB |
@@ -432,6 +432,7 @@
|
|||||||
#include "code\game\gamemodes\technomancer\spells\dispel.dm"
|
#include "code\game\gamemodes\technomancer\spells\dispel.dm"
|
||||||
#include "code\game\gamemodes\technomancer\spells\energy_siphon.dm"
|
#include "code\game\gamemodes\technomancer\spells\energy_siphon.dm"
|
||||||
#include "code\game\gamemodes\technomancer\spells\flame_tongue.dm"
|
#include "code\game\gamemodes\technomancer\spells\flame_tongue.dm"
|
||||||
|
#include "code\game\gamemodes\technomancer\spells\gambit.dm"
|
||||||
#include "code\game\gamemodes\technomancer\spells\illusion.dm"
|
#include "code\game\gamemodes\technomancer\spells\illusion.dm"
|
||||||
#include "code\game\gamemodes\technomancer\spells\instability_tap.dm"
|
#include "code\game\gamemodes\technomancer\spells\instability_tap.dm"
|
||||||
#include "code\game\gamemodes\technomancer\spells\mark_recall.dm"
|
#include "code\game\gamemodes\technomancer\spells\mark_recall.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user