/obj/machinery/computer3/aifixer
default_prog = /datum/file/program/aifixer
spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/ai_holder)
icon_state = "frame-rnd"
/datum/file/program/aifixer
name = "AI system integrity restorer"
desc = "Repairs and revives artificial intelligence cores."
image = 'icons/ntos/airestore.png'
active_state = "ai-fixer-empty"
req_access = list(access_captain, access_robotics, access_heads)
update_icon()
if(!computer || !computer.cradle)
overlay.icon_state = "ai-fixer-404"
return // what
if(!computer.cradle.occupant)
overlay.icon_state = "ai-fixer-empty"
else
if (computer.cradle.occupant.health >= 0 && computer.cradle.occupant.stat != 2)
overlay.icon_state = "ai-fixer-full"
else
overlay.icon_state = "ai-fixer-404"
computer.update_icon()
interact()
if(!interactable())
return
if(!computer.cradle)
computer.Crash(MISSING_PERIPHERAL)
return
popup.set_content(aifixer_menu())
popup.open()
return
proc/aifixer_menu()
var/dat = ""
if (computer.cradle.occupant)
var/laws
dat += "
Stored AI: [computer.cradle.occupant.name]
"
dat += "System integrity: [(computer.cradle.occupant.health+100)/2]%
"
if (computer.cradle.occupant.laws.zeroth)
laws += "0: [computer.cradle.occupant.laws.zeroth]
"
var/number = 1
for (var/index = 1, index <= computer.cradle.occupant.laws.inherent.len, index++)
var/law = computer.cradle.occupant.laws.inherent[index]
if (length(law) > 0)
laws += "[number]: [law]
"
number++
for (var/index = 1, index <= computer.cradle.occupant.laws.supplied.len, index++)
var/law = computer.cradle.occupant.laws.supplied[index]
if (length(law) > 0)
laws += "[number]: [law]
"
number++
dat += "Laws:
[laws]
"
if (computer.cradle.occupant.stat == 2)
dat += "AI non-functional"
else
dat += "AI functional"
if (!computer.cradle.busy)
dat += "
[topic_link(src,"fix","Begin Reconstruction")]"
else
dat += "
Reconstruction in process, please wait.
"
dat += "
[topic_link(src,"close","Close")]"
return dat
Topic(var/href, var/list/href_list)
if(!interactable() || !computer.cradle || ..(href,href_list))
return
if ("fix" in href_list)
var/mob/living/silicon/ai/occupant = computer.cradle.occupant
if(!occupant) return
computer.cradle.busy = 1
computer.overlays += image('icons/obj/computer.dmi', "ai-fixer-on")
var/i = 0
while (occupant.health < 100)
if(!computer || (computer.stat&~MAINT)) // takes some time, keep checking
break
occupant.adjustOxyLoss(-1)
occupant.adjustFireLoss(-1)
occupant.adjustToxLoss(-1)
occupant.adjustBruteLoss(-1)
occupant.updatehealth()
if (occupant.health >= 0 && computer.cradle.occupant.stat == 2)
occupant.stat = 0
occupant.lying = 0
dead_mob_list -= occupant
living_mob_list += occupant
update_icon()
i++
if(i == 5)
computer.use_power(50) // repairing an AI is nontrivial. laptop battery may not be enough.
computer.power_change() // if the power runs out, set stat
i = 0
computer.updateUsrDialog()
sleep(10)
computer.cradle.busy = 0
computer.overlays -= image('icons/obj/computer.dmi', "ai-fixer-on")
computer.updateUsrDialog()
return