various tweaks to energy fields, energy field artifacts (some outstanding bugs still)

Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
Cael_Aislinn
2012-08-06 05:13:02 +10:00
parent b9f9f21e8b
commit 3e6f253cb7
3 changed files with 96 additions and 12 deletions

View File

@@ -7,6 +7,7 @@
var/effectmode = "aura" // How does it carry out the effect?
var/aurarange = 4 // How far the artifact will extend an aura effect.
var/list/created_field
var/archived_loc
/datum/artifact_effect/New()
//
@@ -34,11 +35,19 @@
del F
/datum/artifact_effect/proc/UpdateEffect(var/atom/originator)
for(var/obj/effect/energy_field/F in created_field)
/*for(var/obj/effect/energy_field/F in created_field)
created_field.Remove(F)
del F
del F*/
if(originator.loc != archived_loc)
archived_loc = originator.loc
update_move(originator)
for(var/obj/effect/energy_field/E in created_field)
if(E.strength < 5)
E.Strengthen(0.2)
/datum/artifact_effect/proc/DoEffect(var/atom/originator)
archived_loc = originator.loc
if (src.effectmode == "contact")
var/mob/user = originator
if(!user)
@@ -121,7 +130,13 @@
return 1
else user << "Nothing happens."
if("forcefield")
var/obj/effect/energy_field/E = new /obj/effect/energy_field(locate(user.x + 2,user.y,user.z))
while(created_field.len < 16)
var/obj/effect/energy_field/E = new (locate(user.x,user.y,user.z))
created_field.Add(E)
E.strength = 1
E.density = 1
E.invisibility = 0
/*var/obj/effect/energy_field/E = new /obj/effect/energy_field(locate(user.x + 2,user.y,user.z))
E.strength = 1
E.invisibility = 0
E = new /obj/effect/energy_field(locate(user.x + 2,user.y + 1,user.z))
@@ -183,7 +198,7 @@
E = new /obj/effect/energy_field(locate(user.x - 1,user.y - 2,user.z))
created_field.Add(E)
E.strength = 1
E.invisibility = 0
E.invisibility = 0*/
return 1
if("teleport")
var/list/randomturfs = new/list()
@@ -473,3 +488,52 @@
sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is
sparks.start()
return 1
//initially for the force field artifact
/datum/artifact_effect/proc/update_move(var/atom/originator)
switch(effecttype)
if("forcefield")
while(created_field.len < 16)
//for now, just instantly respawn the fields when they get destroyed
var/obj/effect/energy_field/E = new (locate(originator.x,originator.y,originator))
created_field.Add(E)
E.strength = 1
E.density = 1
E.invisibility = 0
var/obj/effect/energy_field/E = created_field[1]
E.loc = locate(originator.x + 2,originator.y + 2,originator.z)
E = created_field[2]
E.loc = locate(originator.x + 2,originator.y + 1,originator.z)
E = created_field[3]
E.loc = locate(originator.x + 2,originator.y,originator.z)
E = created_field[4]
E.loc = locate(originator.x + 2,originator.y - 1,originator.z)
E = created_field[5]
E.loc = locate(originator.x + 2,originator.y - 2,originator.z)
E = created_field[6]
E.loc = locate(originator.x + 1,originator.y + 2,originator.z)
E = created_field[7]
E.loc = locate(originator.x + 1,originator.y - 2,originator.z)
E = created_field[8]
E.loc = locate(originator.x,originator.y + 2,originator.z)
E = created_field[9]
E.loc = locate(originator.x,originator.y - 2,originator.z)
E = created_field[10]
E.loc = locate(originator.x - 1,originator.y + 2,originator.z)
E = created_field[11]
E.loc = locate(originator.x - 1,originator.y - 2,originator.z)
E = created_field[12]
E.loc = locate(originator.x - 2,originator.y + 2,originator.z)
E = created_field[13]
E.loc = locate(originator.x - 2,originator.y + 1,originator.z)
E = created_field[14]
E.loc = locate(originator.x - 2,originator.y,originator.z)
E = created_field[15]
E.loc = locate(originator.x - 2,originator.y - 1,originator.z)
E = created_field[16]
E.loc = locate(originator.x - 2,originator.y - 2,originator.z)
/*for(var/obj/effect/energy_field/F in created_field)
created_field.Remove(F)
del F*/

View File

@@ -35,7 +35,7 @@
icon_state = "ano[icon_num]0"
// Low-ish random chance to not look like it's origin
if(prob(20)) src.icon_state = pick("ano0","ano1","ano2","ano3","ano4","ano5")
if(prob(20)) src.icon_state = pick("ano00","ano10","ano20","ano30","ano40","ano50")
// Power randomisation
my_effect.trigger = pick("force","energy","chemical","heat","touch")
@@ -87,6 +87,10 @@
display_id += "-"
display_id += num2text(rand(100,999))
/obj/machinery/artifact/Del()
..()
my_effect.HaltEffect()
/obj/machinery/artifact/attack_hand(var/mob/user as mob)
if (istype(user, /mob/living/silicon/ai) || istype(user, /mob/dead/)) return
if (istype(user, /mob/living/silicon/robot))
@@ -176,14 +180,14 @@
chargetime -= 1
else
src.charged = 1
my_effect.HaltEffect(src.loc)
my_effect.UpdateEffect(src.loc)
//activate
if(src.charged && my_effect.DoEffect(src))
src.charged = 0
src.chargetime = src.recharge
if( (my_effect.effectmode == "pulse" || my_effect.effecttype == "worldpulse") && activated)
if(src.charged && my_effect.DoEffect(src))
src.charged = 0
src.chargetime = src.recharge
/obj/machinery/artifact/proc/Artifact_Activate()
src.activated = !src.activated
@@ -226,6 +230,11 @@
// this was used in QM for a time but it fell into disuse and wasn't removed, the purpose being to check if an artifact
// was benevolent or malicious, to determine whether QMs would be paid or punished for shipping it
/obj/machinery/artifact/Move()
..()
my_effect.update_move(src, src.loc)
/proc/artifact_checkgood(var/datum/artifact_effect/A)
switch(A.effecttype)
if("healing") return 1