mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
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:
@@ -15,8 +15,11 @@
|
|||||||
var/stress = 0
|
var/stress = 0
|
||||||
|
|
||||||
/obj/effect/energy_field/ex_act(var/severity)
|
/obj/effect/energy_field/ex_act(var/severity)
|
||||||
Stress(2)
|
Stress(0.5 + severity)
|
||||||
//nothing
|
|
||||||
|
/obj/effect/energy_field/bullet_act(var/obj/item/projectile/Proj)
|
||||||
|
Stress(1 + 1 * (Proj.damage / 100))
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj)
|
/obj/effect/energy_field/meteorhit(obj/effect/meteor/M as obj)
|
||||||
if(M)
|
if(M)
|
||||||
@@ -31,6 +34,14 @@
|
|||||||
invisibility = 2
|
invisibility = 2
|
||||||
density = 0
|
density = 0
|
||||||
|
|
||||||
|
/obj/effect/energy_field/proc/Strengthen(var/severity)
|
||||||
|
strength += severity
|
||||||
|
|
||||||
|
//if we take too much damage, drop out - the generator will bring us back up if we have enough power
|
||||||
|
if(strength > 1)
|
||||||
|
invisibility = 0
|
||||||
|
density = 1
|
||||||
|
|
||||||
/obj/effect/energy_field/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
/obj/effect/energy_field/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
||||||
//Purpose: Determines if the object (or airflow) can pass this atom.
|
//Purpose: Determines if the object (or airflow) can pass this atom.
|
||||||
//Called by: Movement, airflow.
|
//Called by: Movement, airflow.
|
||||||
@@ -38,4 +49,4 @@
|
|||||||
//Outputs: Boolean if can pass.
|
//Outputs: Boolean if can pass.
|
||||||
|
|
||||||
//return (!density || !height || air_group)
|
//return (!density || !height || air_group)
|
||||||
return 0
|
return density
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
var/effectmode = "aura" // How does it carry out the effect?
|
var/effectmode = "aura" // How does it carry out the effect?
|
||||||
var/aurarange = 4 // How far the artifact will extend an aura effect.
|
var/aurarange = 4 // How far the artifact will extend an aura effect.
|
||||||
var/list/created_field
|
var/list/created_field
|
||||||
|
var/archived_loc
|
||||||
|
|
||||||
/datum/artifact_effect/New()
|
/datum/artifact_effect/New()
|
||||||
//
|
//
|
||||||
@@ -34,11 +35,19 @@
|
|||||||
del F
|
del F
|
||||||
|
|
||||||
/datum/artifact_effect/proc/UpdateEffect(var/atom/originator)
|
/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)
|
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)
|
/datum/artifact_effect/proc/DoEffect(var/atom/originator)
|
||||||
|
archived_loc = originator.loc
|
||||||
if (src.effectmode == "contact")
|
if (src.effectmode == "contact")
|
||||||
var/mob/user = originator
|
var/mob/user = originator
|
||||||
if(!user)
|
if(!user)
|
||||||
@@ -121,7 +130,13 @@
|
|||||||
return 1
|
return 1
|
||||||
else user << "Nothing happens."
|
else user << "Nothing happens."
|
||||||
if("forcefield")
|
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.strength = 1
|
||||||
E.invisibility = 0
|
E.invisibility = 0
|
||||||
E = new /obj/effect/energy_field(locate(user.x + 2,user.y + 1,user.z))
|
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))
|
E = new /obj/effect/energy_field(locate(user.x - 1,user.y - 2,user.z))
|
||||||
created_field.Add(E)
|
created_field.Add(E)
|
||||||
E.strength = 1
|
E.strength = 1
|
||||||
E.invisibility = 0
|
E.invisibility = 0*/
|
||||||
return 1
|
return 1
|
||||||
if("teleport")
|
if("teleport")
|
||||||
var/list/randomturfs = new/list()
|
var/list/randomturfs = new/list()
|
||||||
@@ -473,3 +488,52 @@
|
|||||||
sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is
|
sparks.set_up(3, 0, get_turf(originator)) //no idea what the 0 is
|
||||||
sparks.start()
|
sparks.start()
|
||||||
return 1
|
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*/
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
icon_state = "ano[icon_num]0"
|
icon_state = "ano[icon_num]0"
|
||||||
|
|
||||||
// Low-ish random chance to not look like it's origin
|
// 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
|
// Power randomisation
|
||||||
my_effect.trigger = pick("force","energy","chemical","heat","touch")
|
my_effect.trigger = pick("force","energy","chemical","heat","touch")
|
||||||
@@ -87,6 +87,10 @@
|
|||||||
display_id += "-"
|
display_id += "-"
|
||||||
display_id += num2text(rand(100,999))
|
display_id += num2text(rand(100,999))
|
||||||
|
|
||||||
|
/obj/machinery/artifact/Del()
|
||||||
|
..()
|
||||||
|
my_effect.HaltEffect()
|
||||||
|
|
||||||
/obj/machinery/artifact/attack_hand(var/mob/user as mob)
|
/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/ai) || istype(user, /mob/dead/)) return
|
||||||
if (istype(user, /mob/living/silicon/robot))
|
if (istype(user, /mob/living/silicon/robot))
|
||||||
@@ -176,14 +180,14 @@
|
|||||||
chargetime -= 1
|
chargetime -= 1
|
||||||
else
|
else
|
||||||
src.charged = 1
|
src.charged = 1
|
||||||
my_effect.HaltEffect(src.loc)
|
|
||||||
|
|
||||||
my_effect.UpdateEffect(src.loc)
|
my_effect.UpdateEffect(src.loc)
|
||||||
|
|
||||||
//activate
|
//activate
|
||||||
if(src.charged && my_effect.DoEffect(src))
|
if( (my_effect.effectmode == "pulse" || my_effect.effecttype == "worldpulse") && activated)
|
||||||
src.charged = 0
|
if(src.charged && my_effect.DoEffect(src))
|
||||||
src.chargetime = src.recharge
|
src.charged = 0
|
||||||
|
src.chargetime = src.recharge
|
||||||
|
|
||||||
/obj/machinery/artifact/proc/Artifact_Activate()
|
/obj/machinery/artifact/proc/Artifact_Activate()
|
||||||
src.activated = !src.activated
|
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
|
// 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
|
// 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)
|
/proc/artifact_checkgood(var/datum/artifact_effect/A)
|
||||||
switch(A.effecttype)
|
switch(A.effecttype)
|
||||||
if("healing") return 1
|
if("healing") return 1
|
||||||
|
|||||||
Reference in New Issue
Block a user