/obj/item/device/aicard
name = "inteliCard"
icon = 'pda.dmi'
icon_state = "aicard" // aicard-full
item_state = "electronic"
w_class = 2.0
flags = FPRINT | TABLEPASS | ONBELT
var/flush = null
origin_tech = "programming=4"
attack(mob/living/silicon/ai/M as mob, mob/user as mob)
if (src.flush)
user << "Transfer failed: Cannot transfer while wipe in progress."
return
if(!istype(M, /mob/living/silicon/ai))
return ..()
if(src.contents.len > 0)
for(var/mob/living/silicon/ai/A in src)
// Already have an AI
if(M.real_name != "Inactive AI")
user << "Transfer failed: Existing AI found on this terminal. Remove existing AI to install a new one."
return
else
M.name = A.name
M.real_name = A.real_name
if(A.mind)
A.mind.transfer_to(M)
A.mind.original = M
M.control_disabled = 0
M.laws_object = A.laws_object
M.oxyloss = A.oxyloss
M.fireloss = A.fireloss
M.bruteloss = A.bruteloss
M.toxloss = A.toxloss
if (!A.stat)
M.stat = A.stat
M.updatehealth()
M << "You have been uploaded to a stationary terminal. Remote device connection restored."
user << "Transfer succesful: [M.name] ([rand(1000,9999)].exe) installed and executed succesfully. Local copy has been removed."
del(A)
if (!M.stat)
M.icon_state = "ai"
else
M.icon_state = "ai-crash"
src.icon_state = "aicard"
src.name = "inteliCard"
src.overlays = null
return
else
if (M.real_name != "Inactive AI")
if (ticker.mode.name == "AI malfunction")
var/datum/game_mode/malfunction/malf = ticker.mode
for (var/datum/mind/malfai in malf.malf_ai)
if (M.mind == malfai)
user << "This AI's download interface has been disabled."
return
var/mob/living/silicon/ai/O = new /mob/living/silicon/ai( src )
O.invisibility = 0
O.canmove = 0
O.name = M.name
O.real_name = M.real_name
O.anchored = 1
O.aiRestorePowerRoutine = 0
O.control_disabled = 1 // Can't control things remotely if you're stuck in a card!
O.laws_object = M.laws_object
O.stat = M.stat
O.oxyloss = M.oxyloss
O.fireloss = M.fireloss
O.bruteloss = M.bruteloss
O.toxloss = M.toxloss
O.updatehealth()
if(M.mind)
M.mind.transfer_to(O)
M.mind.original = O
src.name = "inteliCard - [M.name]"
M.name = "Inactive AI"
M.real_name = "Inactive AI"
M.icon_state = "ai-empty"
if (O.stat == 2)
src.icon_state = "aicard-404"
else
src.icon_state = "aicard-full"
O << "You have been downloaded to a mobile storage device. Remote device connection severed."
user << "Transfer succeeded: [O.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
else
user << "There isn't an AI on this terminal."
attack(mob/living/silicon/decoy/M as mob, mob/user as mob)
if (!istype (M, /mob/living/silicon/decoy))
return ..()
else
M.death()
user << "ERROR ERROR ERROR"
Topic(href, href_list)
if (href_list["close"])
usr << browse(null, "window=aicard")
usr.machine = null
if (href_list["wipe"])
var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No")
if(confirm == "Yes")
src.flush = 1
for(var/mob/living/silicon/ai/A in src)
A.suiciding = 1
A << "Your core files are being wiped!"
while (A.stat != 2)
A.oxyloss += 2
A.updatehealth()
src.attack_self(usr)
sleep(10)
src.flush = 0
if (href_list["wireless"])
for(var/mob/living/silicon/ai/A in src)
A.control_disabled = !A.control_disabled
A << "The intelicard's wireless port has been [A.control_disabled ? "disabled" : "enabled"]!"
if (A.control_disabled)
src.overlays -= image('pda.dmi', "aicard-on")
else
src.overlays += image('pda.dmi', "aicard-on")
src.attack_self(usr)
attack_self(mob/user)
if (!in_range(src, user))
return
user.machine = src
var/dat = "Intelicard
"
var/laws
for(var/mob/living/silicon/ai/A in src)
dat += "Stored AI: [A.name]
System integrity: [(A.health+100)/2]%
"
for (var/index = 1, index <= A.laws_object.ion.len, index++)
var/law = A.laws_object.ion[index]
if (length(law) > 0)
var/num = ionnum()
laws += "[num]. [law]"
if (A.laws_object.zeroth)
laws += "0: [A.laws_object.zeroth]
"
var/number = 1
for (var/index = 1, index <= A.laws_object.inherent.len, index++)
var/law = A.laws_object.inherent[index]
if (length(law) > 0)
laws += "[number]: [law]
"
number++
for (var/index = 1, index <= A.laws_object.supplied.len, index++)
var/law = A.laws_object.supplied[index]
if (length(law) > 0)
laws += "[number]: [law]
"
number++
dat += "Laws:
[laws]
"
if (A.stat == 2)
dat += "AI nonfunctional"
else
if (!src.flush)
dat += {"Wipe AI"}
else
dat += "Wipe in progress"
dat += {" [A.control_disabled ? "Enable" : "Disable"] Wireless Activity"}
dat += {" Close"}
user << browse(dat, "window=aicard")
onclose(user, "aicard")
return