mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 19:17:50 +01:00
We no longer run auto_use_power() on every machine every tick. We now have a global list of areas, and areas that have an APC in them (all_areas and active_areas) no more looping through world bullshit. A bunch of snowflakey as fuck machines won't use_power() in their process, you get two options, active and idle, use them! This means a lot of machines won't double dip on power as well so power usage for the station has dropped about 20% Because everything is snowflakey as fuck we're going to have some machines that don't force an update on their power usage. Fuck them. We should catch them with the root obj/machine/proc's forcing updates. Conflicts: code/modules/mob/mob.dm code/modules/power/apc.dm
148 lines
3.7 KiB
Plaintext
148 lines
3.7 KiB
Plaintext
/obj/machinery/computer/diseasesplicer
|
|
name = "Disease Splicer"
|
|
icon = 'icons/obj/computer.dmi'
|
|
icon_state = "crew"
|
|
|
|
var/datum/disease2/effectholder/memorybank = null
|
|
var/analysed = 0
|
|
var/obj/item/weapon/virusdish/dish = null
|
|
var/burning = 0
|
|
|
|
var/splicing = 0
|
|
var/scanning = 0
|
|
|
|
/obj/machinery/computer/diseasesplicer/attackby(var/obj/I as obj, var/mob/user as mob)
|
|
if(istype(I, /obj/item/weapon/screwdriver))
|
|
return ..(I,user)
|
|
if(istype(I,/obj/item/weapon/virusdish))
|
|
var/mob/living/carbon/c = user
|
|
if(!dish)
|
|
|
|
dish = I
|
|
c.drop_item()
|
|
I.loc = src
|
|
if(istype(I,/obj/item/weapon/diseasedisk))
|
|
user << "You upload the contents of the disk into the buffer"
|
|
memorybank = I:effect
|
|
|
|
src.attack_hand(user)
|
|
return
|
|
|
|
/obj/machinery/computer/diseasesplicer/attack_ai(var/mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/computer/diseasesplicer/attack_paw(var/mob/user as mob)
|
|
|
|
return src.attack_hand(user)
|
|
return
|
|
|
|
/obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob)
|
|
if(..())
|
|
return
|
|
user.set_machine(src)
|
|
var/dat
|
|
if(splicing)
|
|
dat = "Splicing in progress."
|
|
else if(scanning)
|
|
dat = "Splicing in progress."
|
|
else if(burning)
|
|
dat = "Data disk burning in progress."
|
|
else
|
|
if(dish)
|
|
dat = "Virus dish inserted."
|
|
|
|
dat += "<BR>Current DNA strand : "
|
|
if(memorybank)
|
|
dat += "<A href='?src=\ref[src];splice=1'>"
|
|
if(analysed)
|
|
dat += "[memorybank.effect.name] ([5-memorybank.effect.stage])"
|
|
else
|
|
dat += "Unknown DNA strand ([5-memorybank.effect.stage])"
|
|
dat += "</a>"
|
|
|
|
dat += "<BR><A href='?src=\ref[src];disk=1'>Burn DNA Sequence to data storage disk</a>"
|
|
else
|
|
dat += "Empty."
|
|
|
|
dat += "<BR><BR>"
|
|
|
|
if(dish)
|
|
if(dish.virus2)
|
|
if(dish.growth >= 50)
|
|
for(var/datum/disease2/effectholder/e in dish.virus2.effects)
|
|
dat += "<BR><A href='?src=\ref[src];grab=\ref[e]'> DNA strand"
|
|
if(dish.analysed)
|
|
dat += ": [e.effect.name]"
|
|
dat += " (5-[e.effect.stage])</a>"
|
|
else
|
|
dat += "<BR>Insufficent cells to attempt gene splicing."
|
|
else
|
|
dat += "<BR>No virus found in dish."
|
|
|
|
dat += "<BR><BR><A href='?src=\ref[src];eject=1'>Eject disk</a>"
|
|
else
|
|
dat += "<BR>Please insert dish."
|
|
|
|
user << browse(dat, "window=computer;size=400x500")
|
|
onclose(user, "computer")
|
|
return
|
|
|
|
/obj/machinery/computer/diseasesplicer/process()
|
|
if(stat & (NOPOWER|BROKEN))
|
|
return
|
|
//use_power(500)
|
|
|
|
if(scanning)
|
|
scanning -= 1
|
|
if(!scanning)
|
|
state("The [src.name] beeps", "blue")
|
|
if(splicing)
|
|
splicing -= 1
|
|
if(!splicing)
|
|
state("The [src.name] pings", "blue")
|
|
if(burning)
|
|
burning -= 1
|
|
if(!burning)
|
|
var/obj/item/weapon/diseasedisk/d = new /obj/item/weapon/diseasedisk(src.loc)
|
|
if(analysed)
|
|
d.name = "[memorybank.effect.name] GNA disk (Stage: [5-memorybank.effect.stage])"
|
|
else
|
|
d.name = "Unknown GNA disk (Stage: [5-memorybank.effect.stage])"
|
|
d.effect = memorybank
|
|
state("The [src.name] zings", "blue")
|
|
|
|
src.updateUsrDialog()
|
|
return
|
|
|
|
/obj/machinery/computer/diseasesplicer/Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
|
|
if(usr) usr.set_machine(src)
|
|
|
|
if (href_list["grab"])
|
|
memorybank = locate(href_list["grab"])
|
|
analysed = dish.analysed
|
|
del(dish)
|
|
dish = null
|
|
scanning = 10
|
|
|
|
else if(href_list["eject"])
|
|
dish.loc = src.loc
|
|
dish = null
|
|
|
|
else if(href_list["splice"])
|
|
if(dish)
|
|
for(var/datum/disease2/effectholder/e in dish.virus2.effects)
|
|
if(e.stage == memorybank.stage)
|
|
e.effect = memorybank.effect
|
|
splicing = 10
|
|
// dish.virus2.spreadtype = "Blood"
|
|
|
|
else if(href_list["disk"])
|
|
burning = 10
|
|
|
|
src.add_fingerprint(usr)
|
|
src.updateUsrDialog()
|
|
return
|