overhaul/cleanup to ano utilizers: they're now consistent with modern ss13 interactions + process more cleanly and operate more robustly, they properly interact with the rest of the updated xenoarch content, activating them should also give a message to anyone watching

Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
Cael_Aislinn
2013-03-10 18:43:41 +10:00
parent 50f4d3a24d
commit 2ef841da6e
2 changed files with 122 additions and 67 deletions

View File

@@ -61,7 +61,10 @@
display_msg = pick("momentarily glows brightly!","distorts slightly for a moment!","flickers slightly!","vibrates!","shimmers slightly for a moment!")
else
display_msg = pick("grows dull!","fades in intensity!","suddenly becomes very still!","suddenly becomes very quiet!")
holder.visible_message("\red \icon[holder] [holder] [display_msg]")
var/atom/toplevelholder = holder
while(!istype(toplevelholder.loc, /turf))
toplevelholder = holder.loc
toplevelholder.visible_message("\red \icon[holder] [holder] [display_msg]")
/datum/artifact_effect/proc/DoEffectTouch(var/mob/user)
/datum/artifact_effect/proc/DoEffectAura(var/atom/holder)

View File

@@ -1,17 +1,19 @@
/obj/item/weapon/anobattery
name = "Anomaly power battery"
icon = 'xenoarchaeology.dmi'
icon = 'icons/obj/xenoarchaeology.dmi'
icon_state = "anobattery0"
var/datum/artifact_effect/battery_effect
var/capacity = 200
var/stored_charge = 0
var/effect_id = ""
/obj/item/weapon/anobattery/New()
battery_effect = new()
/obj/item/weapon/anobattery/proc/UpdateSprite()
var/p = (stored_charge/capacity)*100
p = min(p, 100)
icon_state = "anobattery[round(p,25)]"
/obj/item/weapon/anodevice
@@ -20,48 +22,15 @@
icon_state = "anodev"
var/cooldown = 0
var/activated = 0
var/timing = 0
var/time = 50
var/archived_time = 50
var/obj/item/weapon/anobattery/inserted_battery
var/turf/archived_loc
/obj/item/weapon/anodevice/New()
spawn(10)
pulse()
/obj/item/weapon/anodevice/proc/UpdateSprite()
if(!inserted_battery)
icon_state = "anodev"
return
var/p = (inserted_battery.stored_charge/inserted_battery.capacity)*100
var/s = round(p,25)
icon_state = "anodev[s]"
/obj/item/weapon/anodevice/interact(var/mob/user)
user.machine = src
var/dat = "<b>Anomalous Materials Energy Utiliser</b><br>"
if(activated)
dat += "Device active, stand by.<BR>"
else if(cooldown)
dat += "Cooldown in progress, please wait.<BR>"
else
if(!inserted_battery)
dat += "Please insert battery<BR>"
else
dat += "[inserted_battery] inserted, anomaly ID: [inserted_battery.battery_effect.artifact_id == "" ? "???" : "[inserted_battery.battery_effect.artifact_id]"]<BR>"
dat += "<b>Total Power:</b> [inserted_battery.stored_charge]/[inserted_battery.capacity]<BR><BR>"
dat += "<b>Timed activation:</b> <A href='?src=\ref[src];neg_changetime_max=-100'>--</a> <A href='?src=\ref[src];neg_changetime=-10'>-</a> [time >= 1000 ? "[time/10]" : time >= 100 ? " [time/10]" : " [time/10]" ] <A href='?src=\ref[src];changetime=10'>+</a> <A href='?src=\ref[src];changetime_max=100'>++</a><BR>"
if(cooldown && !activated)
dat += "<font color=red>Cooldown in progress.</font><BR>"
else if(activated)
dat += "<A href='?src=\ref[src];stoptimer=1'>Stop timer</a><BR>"
else
dat += "<A href='?src=\ref[src];starttimer=1'>Start timer</a><BR>"
dat += "<A href='?src=\ref[src];ejectbattery=1'>Eject battery</a><BR>"
dat += "<A href='?src=\ref[src];refresh=1'>Refresh</a><BR>"
dat += "<A href='?src=\ref[src];close=1'>Close</a><BR>"
user << browse(dat, "window=anodevice;size=400x500")
onclose(user, "anodevice")
return
..()
processing_objects.Add(src)
/obj/item/weapon/anodevice/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/anobattery))
@@ -77,27 +46,95 @@
/obj/item/weapon/anodevice/attack_self(var/mob/user as mob)
return src.interact(user)
/obj/item/weapon/anodevice/proc/pulse()
if(activated)
if(time <= 0 || !inserted_battery)
time = 0
activated = 0
var/turf/T = get_turf(src)
T.visible_message("\icon[src]\blue The utiliser device buzzes.", "\icon[src]\blue You hear something buzz.")
/obj/item/weapon/anodevice/interact(var/mob/user)
user.set_machine(src)
var/dat = "<b>Anomalous Materials Energy Utiliser</b><br>"
if(inserted_battery)
if(cooldown)
dat += "Cooldown in progress, please wait.<br>"
else if(activated)
if(timing)
dat += "Device active.<br>"
else
dat += "Device active in timed mode.<br>"
dat += "[inserted_battery] inserted, anomaly ID: [inserted_battery.battery_effect.artifact_id ? inserted_battery.battery_effect.artifact_id : "NA"]<BR>"
dat += "<b>Total Power:</b> [inserted_battery.stored_charge]/[inserted_battery.capacity]<BR><BR>"
dat += "<b>Timed activation:</b> <A href='?src=\ref[src];neg_changetime_max=-100'>--</a> <A href='?src=\ref[src];neg_changetime=-10'>-</a> [time >= 1000 ? "[time/10]" : time >= 100 ? " [time/10]" : " [time/10]" ] <A href='?src=\ref[src];changetime=10'>+</a> <A href='?src=\ref[src];changetime_max=100'>++</a><BR>"
if(cooldown)
dat += "<font color=red>Cooldown in progress.</font><BR>"
dat += "<br>"
else if(!activated)
dat += "<A href='?src=\ref[src];startup=1'>Start</a><BR>"
dat += "<A href='?src=\ref[src];startup=1;starttimer=1'>Start in timed mode</a><BR>"
else
inserted_battery.battery_effect.DoEffectPulse(src)
time -= 10
inserted_battery.stored_charge -= 10 + rand(-1,1)
cooldown += 10
else if(cooldown > 0)
cooldown -= 10
dat += "<a href='?src=\ref[src];shutdown=1'>Shutdown emission</a><br>"
dat += "<br>"
dat += "<A href='?src=\ref[src];ejectbattery=1'>Eject battery</a><BR>"
else
dat += "Please insert battery<br>"
dat += "<br>"
dat += "<br>"
dat += "<br>"
dat += "<br>"
dat += "<br>"
dat += "<br>"
dat += "<hr>"
dat += "<a href='?src=\ref[src]'>Refresh</a> <a href='?src=\ref[src];close=1'>Close</a>"
user << browse(dat, "window=anodevice;size=400x500")
onclose(user, "anodevice")
/obj/item/weapon/anodevice/process()
if(cooldown > 0)
cooldown -= 1
if(cooldown <= 0)
cooldown = 0
var/turf/T = get_turf(src)
T.visible_message("\icon[src]\blue The utiliser device chimes.", "\icon[src]\blue You hear something chime.")
src.visible_message("\blue \icon[src] [src] chimes.", "\blue \icon[src] You hear something chime.")
else if(activated)
if(inserted_battery && inserted_battery.battery_effect)
//make sure the effect is active
if(!inserted_battery.battery_effect.activated)
inserted_battery.battery_effect.ToggleActivate(1)
spawn(10)
pulse()
//update the effect loc
var/turf/T = get_turf(src)
if(T != archived_loc)
archived_loc = T
inserted_battery.battery_effect.UpdateMove()
//process the effect
inserted_battery.battery_effect.process()
//if someone is holding the device, do the effect on them
if(inserted_battery.battery_effect.effect == 0 && ismob(src.loc))
inserted_battery.battery_effect.DoEffectTouch(src.loc)
//handle charge
inserted_battery.stored_charge -= 1
if(inserted_battery.stored_charge <= 0)
shutdown_emission()
//handle timed mode
if(timing)
time -= 1
if(time <= 0)
shutdown_emission()
else
shutdown()
/obj/item/weapon/anodevice/proc/shutdown_emission()
if(activated)
activated = 0
timing = 0
src.visible_message("\blue \icon[src] [src] buzzes.", "\icon[src]\blue You hear something buzz.")
cooldown = archived_time / 2
if(inserted_battery.battery_effect.activated)
inserted_battery.battery_effect.ToggleActivate()
/obj/item/weapon/anodevice/Topic(href, href_list)
@@ -125,20 +162,35 @@
time = inserted_battery.capacity
else if (time < 0)
time = 0
if(href_list["stoptimer"])
activated = 0
if(href_list["starttimer"])
if(href_list["startup"])
activated = 1
if(!inserted_battery.battery_effect.activated)
inserted_battery.battery_effect.ToggleActivate(1)
if(href_list["shutdown"])
activated = 0
if(href_list["starttimer"])
timing = 1
archived_time = time
if(href_list["ejectbattery"])
shutdown_emission()
inserted_battery.loc = get_turf(src)
inserted_battery = null
UpdateSprite()
if(href_list["close"])
usr << browse(null, "window=anodevice")
usr.machine = null
else if(usr)
src.interact(usr)
usr.unset_machine(src)
..()
updateDialog()
/obj/item/weapon/anodevice/proc/UpdateSprite()
if(!inserted_battery)
icon_state = "anodev"
return
var/p = (inserted_battery.stored_charge/inserted_battery.capacity)*100
p = min(p, 100)
icon_state = "anodev[round(p,25)]"
/obj/item/weapon/anodevice/Del()
processing_objects.Remove(src)
..()