mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-07-11 17:12:19 +01:00
771 lines
22 KiB
Plaintext
771 lines
22 KiB
Plaintext
//The advanced pea-green monochrome lcd of tomorrow.
|
|
|
|
/obj/item/disk/data/cartridge
|
|
name = "Cart 2.0"
|
|
desc = "A data cartridge for portable microcomputers."
|
|
icon = 'icons/obj/pda.dmi'
|
|
icon_state = "cart"
|
|
item_state = "electronic"
|
|
file_amount = 32
|
|
title = "ROM Cart"
|
|
|
|
|
|
/obj/item/device/pda2
|
|
name = "PDA"
|
|
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by an EEPROM cartridge."
|
|
icon = 'icons/obj/pda.dmi'
|
|
icon_state = "pda"
|
|
item_state = "pda"
|
|
w_class = 2.0
|
|
rand_pos = 0
|
|
flags = FPRINT | TABLEPASS | ONBELT
|
|
module_research = list("science" = 1, "miniaturization" = 5, "devices" = 5, "efficiency" = 3)
|
|
module_research_type = /obj/item/device/pda2
|
|
var/obj/item/card/id/ID_card = null // slap an ID card into that thang
|
|
var/registered = null // so we don't need to replace all the dang checks for ID cards
|
|
var/assignment = null
|
|
var/access = list()
|
|
var/image/ID_image = null
|
|
|
|
var/owner = null
|
|
var/obj/item/disk/data/cartridge/cartridge = null //current cartridge
|
|
var/datum/computer/file/pda_program/active_program = null
|
|
var/datum/computer/file/pda_program/os/host_program = null
|
|
var/datum/computer/file/pda_program/scan/scan_program = null
|
|
var/obj/item/disk/data/fixed_disk/hd = null
|
|
var/closed = 1 //Can we insert a module now?
|
|
var/obj/item/uplink/integrated/pda/uplink = null
|
|
var/obj/item/device/pda_module/module = null
|
|
var/frequency = 1149
|
|
var/bot_freq = 1447 //Bot control frequency
|
|
var/beacon_freq = 1445 //Beacon frequency for locating beacons (I love beacons)
|
|
var/datum/radio_frequency/radio_connection
|
|
var/net_id = null //Hello dude intercepting our radio transmissions, here is a number that is not just \ref
|
|
|
|
var/tmp/list/pdasay_autocomplete = list()
|
|
|
|
var/bg_color = "6F7961"
|
|
var/link_color = "000000"
|
|
var/linkbg_color = "565D4B"
|
|
var/graphic_mode = 0
|
|
|
|
var/setup_default_cartridge = null //Cartridge contains job-specific programs
|
|
var/setup_drive_size = 24 //PDAs don't have much work room at all, really.
|
|
var/setup_system_os_path = /datum/computer/file/pda_program/os/main_os //Needs an operating system to...operate!!
|
|
var/setup_scanner_on = 1 //Do we search the cart for a scanprog to start loaded?
|
|
var/setup_default_module = /obj/item/device/pda_module/flashlight //Module to have installed on spawn.
|
|
var/mailgroup = "staff" //What special mail group the PDA is part of.
|
|
var/bombproof = 0 // can't be destroyed with detomatix
|
|
var/exploding = 0
|
|
/*
|
|
* Types of pda, for the different jobs and stuff
|
|
*/
|
|
/obj/item/device/pda2
|
|
captain
|
|
icon_state = "pda-c"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/captain
|
|
setup_drive_size = 32
|
|
mailgroup = "command"
|
|
|
|
heads
|
|
icon_state = "pda-h"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/head
|
|
setup_drive_size = 32
|
|
mailgroup = "command"
|
|
|
|
hos
|
|
icon_state = "pda-hos"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/hos
|
|
setup_drive_size = 32
|
|
mailgroup = "security" // should be merged with command
|
|
|
|
ai
|
|
icon_state = "pda-h"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/ai
|
|
setup_drive_size = 1024
|
|
bombproof = 1
|
|
mailgroup = "silicon"
|
|
|
|
cyborg
|
|
icon_state = "pda-h"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/cyborg
|
|
setup_drive_size = 1024
|
|
bombproof = 1
|
|
mailgroup = "silicon"
|
|
|
|
research_director
|
|
icon_state = "pda-rd"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/research_director
|
|
setup_drive_size = 32
|
|
mailgroup = "science" // merge with command
|
|
|
|
medical_director
|
|
icon_state = "pda-md"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/medical_director
|
|
setup_drive_size = 32
|
|
mailgroup = "medresearch" // merge with command
|
|
|
|
medical
|
|
icon_state = "pda-m"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/medical
|
|
mailgroup = "medbay"
|
|
|
|
robotics
|
|
mailgroup = "medresearch"
|
|
|
|
security
|
|
icon_state = "pda-s"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/security
|
|
mailgroup = "security"
|
|
|
|
forensic
|
|
icon_state = "pda-s"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/forensic
|
|
mailgroup = "security"
|
|
|
|
toxins
|
|
icon_state = "pda-tox"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/toxins
|
|
mailgroup = "science"
|
|
|
|
genetics
|
|
icon_state = "pda-gen"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/genetics
|
|
mailgroup = "medresearch"
|
|
|
|
quartermaster
|
|
icon_state = "pda-q"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/quartermaster
|
|
mailgroup = "cargo"
|
|
|
|
clown
|
|
icon_state = "pda-clown"
|
|
desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings."
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/clown
|
|
|
|
HasEntered(AM as mob|obj) //Clown PDA is slippery.
|
|
if (istype(src.loc, /turf/space))
|
|
return
|
|
if (iscarbon(AM))
|
|
var/mob/M = AM
|
|
if (!M.can_slip())
|
|
return
|
|
|
|
M.pulling = null
|
|
boutput(M, "<span style=\"color:blue\">You slipped on the PDA!</span>")
|
|
playsound(src.loc, "sound/misc/slip.ogg", 50, 1, -3)
|
|
if (M.bioHolder.HasEffect("clumsy"))
|
|
M.stunned = 8
|
|
M.weakened = 5
|
|
else
|
|
M.weakened = 2
|
|
|
|
janitor
|
|
icon_state = "pda-j"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/janitor
|
|
mailgroup = "janitor"
|
|
|
|
chaplain
|
|
icon_state = "pda-holy"
|
|
mailgroup = "chaplain"
|
|
|
|
atmos
|
|
icon_state = "pda-a"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/atmos
|
|
|
|
engine
|
|
icon_state = "pda-e"
|
|
mailgroup = "engineer"
|
|
|
|
mining
|
|
icon_state = "pda-e"
|
|
mailgroup = "mining"
|
|
|
|
chef
|
|
mailgroup = "kitchen"
|
|
|
|
barman
|
|
mailgroup = "kitchen"
|
|
|
|
mechanic
|
|
icon_state = "pda-a"
|
|
setup_default_module = /obj/item/device/pda_module/tray
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/mechanic
|
|
mailgroup = "mechanic"
|
|
|
|
botanist
|
|
icon_state = "pda-hydro"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/botanist
|
|
mailgroup = "botany"
|
|
|
|
syndicate
|
|
icon_state = "pda-syn"
|
|
name = "Military PDA"
|
|
owner = "John Doe"
|
|
setup_default_cartridge = /obj/item/disk/data/cartridge/nuclear
|
|
setup_system_os_path = /datum/computer/file/pda_program/os/main_os/mess_off
|
|
|
|
/obj/item/device/pda2/pickup(mob/user)
|
|
if (src.module)
|
|
src.module.relay_pickup(user)
|
|
|
|
/obj/item/device/pda2/dropped(mob/user)
|
|
if(src.module)
|
|
src.module.relay_drop(user)
|
|
|
|
/obj/item/device/pda2/New()
|
|
..()
|
|
if (!src.ID_image)
|
|
src.ID_image = image(src.icon, "blank")
|
|
|
|
spawn(5)
|
|
src.hd = new /obj/item/disk/data/fixed_disk(src)
|
|
src.hd.file_amount = src.setup_drive_size
|
|
src.hd.name = "Minidrive"
|
|
src.hd.title = "Minidrive"
|
|
|
|
if(src.setup_system_os_path)
|
|
src.host_program = new src.setup_system_os_path
|
|
src.active_program = src.host_program
|
|
|
|
src.hd.file_amount = max(src.hd.file_amount, src.host_program.size)
|
|
|
|
src.host_program.transfer_holder(src.hd)
|
|
|
|
src.hd.root.add_file(new /datum/computer/file/text/pda2manual)
|
|
src.hd.root.add_file(new /datum/computer/file/pda_program/robustris)
|
|
src.hd.root.add_file(new /datum/computer/file/pda_program/emergency_alert)
|
|
src.hd.root.add_file(new /datum/computer/file/pda_program/cargo_request(src))
|
|
|
|
src.net_id = format_net_id("\ref[src]")
|
|
|
|
if(radio_controller)
|
|
radio_controller.add_object(src, "[frequency]")
|
|
|
|
if (src.setup_default_cartridge)
|
|
src.cartridge = new src.setup_default_cartridge(src)
|
|
|
|
if (src.setup_scanner_on && src.cartridge)
|
|
var/datum/computer/file/pda_program/scan/scan = locate() in src.cartridge.root.contents
|
|
if (scan && istype(scan))
|
|
src.scan_program = scan
|
|
|
|
if(src.setup_default_module)
|
|
src.module = new src.setup_default_module(src)
|
|
|
|
/obj/item/device/pda2/disposing()
|
|
if (src.cartridge)
|
|
src.cartridge.dispose()
|
|
src.cartridge = null
|
|
|
|
src.active_program = null
|
|
src.host_program = null
|
|
src.scan_program = null
|
|
|
|
if (src.hd)
|
|
src.hd.dispose()
|
|
src.hd = null
|
|
|
|
if (src.uplink)
|
|
src.uplink.dispose()
|
|
src.uplink = null
|
|
|
|
if (src.module)
|
|
src.module.dispose()
|
|
src.module = null
|
|
|
|
if (radio_connection)
|
|
radio_connection.devices -= src
|
|
radio_connection = null
|
|
|
|
var/mob/living/ourHolder = src.loc
|
|
if (istype(ourHolder))
|
|
ourHolder.u_equip(src)
|
|
|
|
|
|
..()
|
|
|
|
/obj/item/device/pda2/attack_self(mob/user as mob)
|
|
user.machine = src
|
|
|
|
var/wincheck = winexists(user, "pda2_\ref[src]")
|
|
//boutput(world, wincheck)
|
|
if(wincheck != "MAIN")
|
|
winclone(user, "pda2", "pda2_\ref[src]")
|
|
|
|
var/display_mode = src.graphic_mode
|
|
if(!src.host_program || !owner)
|
|
display_mode = 0
|
|
|
|
if (display_mode)
|
|
winset(user, "pda2_\ref[src].texto","is-visible=false")
|
|
winset(user, "pda2_\ref[src].grido","is-visible=true")
|
|
|
|
if(src.active_program)
|
|
src.active_program.build_grid(user, "pda2_\ref[src].grido")
|
|
else
|
|
if(src.host_program)
|
|
src.run_program(src.host_program)
|
|
src.active_program.build_grid(user, "pda2_\ref[src].grido")
|
|
|
|
|
|
else
|
|
winset(user, "pda2_\ref[src].texto","is-visible=true")
|
|
winset(user, "pda2_\ref[src].grido","is-visible=false")
|
|
|
|
var/dat = {"<html><head>
|
|
<style type="text/css">
|
|
hr
|
|
{
|
|
color:#000;
|
|
background-color:#000;
|
|
height:2px;
|
|
border-width:0;
|
|
}
|
|
body
|
|
{
|
|
background-color:#[src.bg_color]
|
|
}
|
|
|
|
a:link {background-color:#[src.linkbg_color];color:#[src.link_color];text-decoration:none}
|
|
a:visited {background-color:#[src.linkbg_color];color:#[src.bg_color]}
|
|
a:active {background-color:#[src.linkbg_color];color:#[src.bg_color]}
|
|
a:hover {background-color:#[src.link_color];color:#[src.bg_color]}
|
|
|
|
</style>
|
|
</head>
|
|
<body vlink='#[src.link_color]' alink='#[src.link_color]'>"}
|
|
|
|
dat += "<a href='byond://?src=\ref[src];close=1'>Close</a>"
|
|
|
|
if (!src.owner)
|
|
if (src.cartridge)
|
|
dat += " | <a href='byond://?src=\ref[src];eject_cart=1'>Eject [src.cartridge]</a>"
|
|
if (src.ID_card)
|
|
dat += " | <a href='byond://?src=\ref[src];eject_id_card=1'>Eject [src.ID_card]</a>"
|
|
dat += "<br>Warning: No owner information entered. Please swipe card.<br><br>"
|
|
dat += "<a href='byond://?src=\ref[src];refresh=1'>Retry</a>"
|
|
else
|
|
if (src.active_program)
|
|
dat += src.active_program.return_text()
|
|
else
|
|
if (src.host_program)
|
|
src.run_program(src.host_program)
|
|
dat += src.active_program.return_text()
|
|
else
|
|
if (src.cartridge)
|
|
dat += " | <a href='byond://?src=\ref[src];eject_cart=1'>Eject [src.cartridge]</a><br>"
|
|
if (src.ID_card)
|
|
dat += " | <a href='byond://?src=\ref[src];eject_id_card=1'>Eject [src.ID_card]</a>"
|
|
dat += "<center><font color=red>Fatal Error 0x17<br>"
|
|
dat += "No System Software Loaded</font></center>"
|
|
|
|
user << output(dat, "pda2_\ref[src].texto")
|
|
|
|
|
|
winshow(user,"pda2_\ref[src]",1)
|
|
|
|
onclose(user,"pda2_\ref[src]")
|
|
return
|
|
|
|
/obj/item/device/pda2/Topic(href, href_list)
|
|
..()
|
|
|
|
if (usr.contents.Find(src) || usr.contents.Find(src.master) || (istype(src.loc, /turf) && get_dist(src, usr) <= 1))
|
|
if (usr.stat || usr.restrained())
|
|
return
|
|
|
|
src.add_fingerprint(usr)
|
|
usr.machine = src
|
|
|
|
if (href_list["return_to_host"])
|
|
if (src.host_program)
|
|
src.active_program = src.host_program
|
|
src.host_program = null
|
|
|
|
else if (href_list["eject_cart"])
|
|
src.eject_cartridge()
|
|
|
|
else if (href_list["eject_id_card"])
|
|
src.eject_id_card(usr ? usr : null)
|
|
|
|
else if (href_list["refresh"])
|
|
src.updateSelfDialog()
|
|
|
|
else if (href_list["close"])
|
|
usr << browse(null, "window=pda2_\ref[src]")
|
|
usr.machine = null
|
|
|
|
src.updateSelfDialog()
|
|
return
|
|
|
|
/obj/item/device/pda2/attackby(obj/item/C as obj, mob/user as mob)
|
|
if (istype(C, /obj/item/disk/data/cartridge) && isnull(src.cartridge))
|
|
user.drop_item()
|
|
C.set_loc(src)
|
|
boutput(user, "<span style=\"color:blue\">You insert [C] into [src].</span>")
|
|
src.cartridge = C
|
|
src.updateSelfDialog()
|
|
|
|
else if (istype(C, /obj/item/device/pda_module))
|
|
if(src.closed)
|
|
boutput(user, "<span style=\"color:red\">The casing is closed!</span>")
|
|
return
|
|
|
|
if(src.module)
|
|
boutput(user, "<span style=\"color:red\">There is already a module installed!</span>")
|
|
return
|
|
|
|
user.drop_item()
|
|
C.set_loc(src)
|
|
src.module = C
|
|
C:install(src)
|
|
src.updateSelfDialog()
|
|
return
|
|
|
|
else if (istype(C, /obj/item/screwdriver))
|
|
playsound(user.loc, "sound/items/Screwdriver.ogg", 50, 1)
|
|
src.closed = !src.closed
|
|
boutput(user, "You [src.closed ? "secure" : "unscrew"] the cover.")
|
|
|
|
else if (istype(C, /obj/item/crowbar))
|
|
if(!module)
|
|
return
|
|
|
|
if(src.closed)
|
|
boutput(user, "<span style=\"color:red\">The casing is closed!</span>")
|
|
return
|
|
|
|
src.module.set_loc(get_turf(src))
|
|
src.module.uninstall()
|
|
src.module = null
|
|
boutput(user, "You pry the module out.")
|
|
src.updateSelfDialog()
|
|
|
|
else if (istype(C, /obj/item/card/id))
|
|
var/obj/item/card/id/ID = C
|
|
if (!ID.registered)
|
|
boutput(user, "<span style=\"color:red\">This ID isn't registered to anyone!</span>")
|
|
return
|
|
if (!src.owner)
|
|
src.owner = ID.registered
|
|
src.name = "PDA-[src.owner]"
|
|
boutput(user, "<span style=\"color:blue\">Card scanned.</span>")
|
|
src.updateSelfDialog()
|
|
else
|
|
if (src.ID_card)
|
|
boutput(user, "<span style=\"color:blue\">You swap [ID] and [src.ID_card].</span>")
|
|
src.eject_id_card(user)
|
|
src.insert_id_card(ID, user)
|
|
return
|
|
else if (!src.ID_card)
|
|
src.insert_id_card(ID, user)
|
|
boutput(user, "<span style=\"color:blue\">You insert [ID] into [src].</span>")
|
|
|
|
/obj/item/device/pda2/examine()
|
|
..()
|
|
boutput(usr, "The back cover is [src.closed ? "closed" : "open"].")
|
|
if (src.ID_card)
|
|
boutput(usr, "[ID_card] has been inserted into it.")
|
|
return
|
|
|
|
/obj/item/device/pda2/receive_signal(datum/signal/signal, rx_method, rx_freq)
|
|
if(!signal || signal.encryption || !src.owner) return
|
|
|
|
if(src.host_program)
|
|
src.host_program.network_hook(signal, rx_method, rx_freq)
|
|
|
|
if(src.active_program && (src.active_program != src.host_program))
|
|
src.active_program.network_hook(signal, rx_method, rx_freq)
|
|
|
|
|
|
if(signal.data["address_1"] && signal.data["address_1"] != src.net_id)
|
|
|
|
// special programs can receive all signals
|
|
if((signal.data["address_1"] == "ping") && signal.data["sender"])
|
|
var/datum/signal/pingreply = new
|
|
pingreply.source = src
|
|
pingreply.data["device"] = "NET_PDA_51XX"
|
|
pingreply.data["netid"] = src.net_id
|
|
pingreply.data["address_1"] = signal.data["sender"]
|
|
pingreply.data["command"] = "ping_reply"
|
|
pingreply.data["data"] = src.owner
|
|
spawn(5)
|
|
src.post_signal(pingreply)
|
|
|
|
return
|
|
|
|
else if(!src.mailgroup || (signal.data["group"] != src.mailgroup))
|
|
return
|
|
|
|
if(src.host_program)
|
|
src.host_program.receive_signal(signal, rx_method, rx_freq)
|
|
|
|
if(src.active_program && (src.active_program != src.host_program))
|
|
src.active_program.receive_signal(signal, rx_method, rx_freq)
|
|
|
|
return
|
|
|
|
/obj/item/device/pda2/attack(mob/M as mob, mob/user as mob)
|
|
if(src.scan_program)
|
|
return
|
|
else
|
|
..()
|
|
|
|
/obj/item/device/pda2/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
|
|
var/scan_dat = null
|
|
if (src.scan_program && istype(src.scan_program))
|
|
scan_dat = src.scan_program.scan_atom(A)
|
|
else
|
|
scan_dat = scan_atmospheric(A) // Replaced with global proc (Convair880).
|
|
|
|
if(scan_dat)
|
|
A.visible_message("<span style=\"color:red\">[user] has scanned [A]!</span>")
|
|
user.show_message(scan_dat, 1)
|
|
|
|
return
|
|
|
|
/obj/item/device/pda2/process()
|
|
if(src.active_program)
|
|
src.active_program.process()
|
|
|
|
else
|
|
if(src.host_program && src.host_program.holder && (src.host_program.holder in src.master.contents))
|
|
src.run_program(src.host_program)
|
|
else
|
|
processing_items.Remove(src)
|
|
|
|
return
|
|
|
|
/obj/item/device/pda2/MouseDrop(atom/over_object, src_location, over_location)
|
|
..()
|
|
if (over_object == usr && src.loc == usr && isliving(usr) && !usr.stat)
|
|
src.attack_self(usr)
|
|
|
|
/obj/item/device/pda2/verb/pdasay(var/target in pdasay_autocomplete, var/message as text)
|
|
set name = "PDAsay"
|
|
set desc = "Send a PDA message to somebody (You may need to scan for other PDAs first)."
|
|
set src in usr
|
|
|
|
if (!target || !message)
|
|
return
|
|
|
|
if (usr:paralysis || usr:stunned || usr:weakened || usr:stat)
|
|
return
|
|
|
|
if (istype(src.host_program))
|
|
src.host_program.pda_message(pdasay_autocomplete[target], target, message)
|
|
|
|
/obj/item/device/pda2
|
|
|
|
proc/post_signal(datum/signal/signal,var/newfreq)
|
|
spawn(0)
|
|
if(!signal)
|
|
return
|
|
var/freq = newfreq
|
|
if(!freq)
|
|
freq = src.frequency
|
|
|
|
signal.source = src
|
|
signal.data["sender"] = src.net_id
|
|
|
|
var/datum/radio_frequency/frequency = radio_controller.return_frequency("[freq]")
|
|
|
|
signal.transmission_method = TRANSMISSION_RADIO
|
|
if(frequency)
|
|
return frequency.post_signal(src, signal)
|
|
//else
|
|
//qdel(signal)
|
|
|
|
proc/eject_cartridge()
|
|
if(src.cartridge)
|
|
var/turf/T = get_turf(src)
|
|
|
|
if(src.active_program && (src.active_program.holder == src.cartridge))
|
|
src.active_program = null
|
|
|
|
if(src.host_program && (src.host_program.holder == src.cartridge))
|
|
src.host_program = null
|
|
|
|
if(src.scan_program && (src.scan_program.holder == src.cartridge))
|
|
src.scan_program = null
|
|
|
|
src.cartridge.set_loc(T)
|
|
src.cartridge = null
|
|
|
|
return
|
|
|
|
proc/eject_id_card(var/mob/user as mob)
|
|
if (src.ID_card)
|
|
src.registered = null
|
|
src.assignment = null
|
|
src.access = null
|
|
src.underlays -= src.ID_image
|
|
if (istype(user))
|
|
user.put_in_hand_or_drop(src.ID_card)
|
|
else
|
|
var/turf/T = get_turf(src)
|
|
src.ID_card.set_loc(T)
|
|
src.ID_card = null
|
|
return
|
|
|
|
proc/insert_id_card(var/obj/item/card/id/ID as obj, var/mob/user as mob)
|
|
if (!istype(ID))
|
|
return
|
|
if (src.ID_card)
|
|
src.eject_id_card(istype(user) ? user : null)
|
|
src.ID_card = ID
|
|
if (user)
|
|
user.u_equip(ID)
|
|
ID.set_loc(src)
|
|
src.registered = ID.registered
|
|
src.assignment = ID.assignment
|
|
src.access = ID.access
|
|
src.ID_image = src.ID_card.icon_state
|
|
src.underlays += src.ID_image
|
|
src.updateSelfDialog()
|
|
/*
|
|
//Toggle the built-in flashlight
|
|
toggle_light()
|
|
src.fon = (!src.fon)
|
|
|
|
if (ismob(src.loc))
|
|
if (src.fon)
|
|
src.loc.sd_SetLuminosity(src.loc.luminosity + src.f_lum)
|
|
else
|
|
src.loc.sd_SetLuminosity(src.loc.luminosity - src.f_lum)
|
|
else
|
|
src.sd_SetLuminosity(src.fon * src.f_lum)
|
|
|
|
src.updateSelfDialog()
|
|
*/
|
|
proc/display_alert(var/alert_message) //Add alert overlay and beep
|
|
if (alert_message)
|
|
playsound(get_turf(src), "sound/machines/twobeep.ogg", 50, 1)
|
|
for (var/mob/O in hearers(3, src.loc))
|
|
O.show_message(text("[bicon(src)] *[alert_message]*"))
|
|
|
|
src.overlays = null
|
|
src.overlays += image('icons/obj/pda.dmi', "pda-r")
|
|
return
|
|
|
|
proc/run_program(datum/computer/file/pda_program/program)
|
|
if((!program) || (!program.holder))
|
|
return 0
|
|
|
|
if(!(program.holder in src))
|
|
// boutput(world, "Not in src")
|
|
program = new program.type
|
|
program.transfer_holder(src.hd)
|
|
|
|
if(program.master != src)
|
|
program.master = src
|
|
|
|
if(!src.host_program && istype(program, /datum/computer/file/pda_program/os))
|
|
src.host_program = program
|
|
|
|
if(istype(program, /datum/computer/file/pda_program/scan))
|
|
if(program == src.scan_program)
|
|
src.scan_program = null
|
|
else
|
|
src.scan_program = program
|
|
return 1
|
|
|
|
src.active_program = program
|
|
program.init()
|
|
|
|
if(program.setup_use_process && !(src in processing_items))
|
|
processing_items.Add(src)
|
|
|
|
return 1
|
|
|
|
proc/unload_active_program()
|
|
if(src.active_program == src.host_program)
|
|
return 1
|
|
|
|
if(src.active_program.setup_use_process && !src.host_program.setup_use_process)
|
|
processing_items.Remove(src)
|
|
|
|
if(src.host_program && src.host_program.holder && (src.host_program.holder in src.contents))
|
|
src.run_program(src.host_program)
|
|
else
|
|
src.active_program = null
|
|
|
|
src.updateSelfDialog()
|
|
return 1
|
|
|
|
proc/delete_file(datum/computer/file/theFile)
|
|
//boutput(world, "Deleting [file]...")
|
|
if((!theFile) || (!theFile.holder) || (theFile.holder.read_only))
|
|
//boutput(world, "Cannot delete :(")
|
|
return 0
|
|
|
|
//Don't delete the running program you jerk
|
|
if(src.active_program == theFile || src.host_program == theFile)
|
|
src.active_program = null
|
|
|
|
//boutput(world, "Now calling del on [file]...")
|
|
//qdel(file)
|
|
theFile.dispose()
|
|
return 1
|
|
|
|
proc/explode()
|
|
if (src.bombproof)
|
|
if (ismob(src.loc))
|
|
boutput(src.loc, "<span style=\"color:red\"><b>ALERT:</b> An attempt to run malicious explosive code on your PDA has been blocked.</span>")
|
|
return
|
|
|
|
if(src in bible_contents)
|
|
for(var/obj/item/storage/bible/B in world)
|
|
var/turf/T = get_turf(B.loc)
|
|
if(T)
|
|
T.hotspot_expose(700,125)
|
|
explosion(src, T, -1, -1, 2, 3)
|
|
bible_contents.Remove(src)
|
|
//dispose()
|
|
//src.dispose()
|
|
qdel(src)
|
|
return
|
|
|
|
var/turf/T = get_turf(src.loc)
|
|
|
|
if (ismob(src.loc))
|
|
var/mob/M = src.loc
|
|
M.show_message("<span style=\"color:red\">Your [src] explodes!</span>", 1)
|
|
|
|
if(T)
|
|
T.hotspot_expose(700,125)
|
|
|
|
explosion(src, T, -1, -1, 2, 3)
|
|
|
|
//dispose()
|
|
//src.dispose()
|
|
qdel(src)
|
|
return
|
|
|
|
|
|
/*
|
|
* PDA 2 ~help file~
|
|
*/
|
|
|
|
/datum/computer/file/text/pda2manual
|
|
name = "Readme"
|
|
|
|
data = {"
|
|
Thinktronic 5150 Personal Data Assistant Manual<br>
|
|
Operating System: ThinkOS 7<hr>
|
|
ThinkOS 7 comes with several useful applications built in, these include:<br>
|
|
<i><ul>
|
|
<li>Notetaker: Load, edit, and save text files just like this one!</li>
|
|
<li>Messenger: Send messages between all enabled PDAs. Can also send the current file in the clipboard.</li>
|
|
<li>File Browser: Manage and execute programs in the internal drive or loaded cartridge.</li>
|
|
<li>Atmos Scanner: Using patented AirScan technology.</li>
|
|
<li>Modules: Light up your life with a flashlight, or see right through the floor with a T-Scanner! The choice is yours!</li>
|
|
</ul></i>
|
|
<b>To send a file with the messenger:</b><br>
|
|
Enter the file browser and copy the file you want to send. Now enter the messenger and select *send file*.<br>
|
|
<br>
|
|
ThinkOS 7 supports a wide variety of software solutions, ranging from robot interface systems to forensic and medical scanners.<br>
|
|
<font size=1>This technology produced by Thinktronic Systems, LTD for the NanoTrasen Corporation</font>
|
|
"}
|