mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Lag reduced by approx 30% (0.5 seconds of total 1.5 on my system). Some air alarms on the map copypasted from toxins one, with its special settings. Added list of used frequencies and HOW IT WORKS section to communications.dm. Sorry for some engrish. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@895 316c924e-a436-60f5-8080-3fe189b3f50e
297 lines
8.9 KiB
Plaintext
297 lines
8.9 KiB
Plaintext
//The advanced pea-green monochrome lcd of tomorrow.
|
|
|
|
|
|
//TO-DO: rearrange all this disk/data stuff so that fixed disks are the parent type
|
|
//because otherwise you have carts going into floppy drives and it's ALL MAD
|
|
/obj/item/weapon/disk/data/cartridge
|
|
name = "Cart 2.0"
|
|
desc = "A data cartridge for portable microcomputers."
|
|
icon = 'pda.dmi'
|
|
icon_state = "cart"
|
|
item_state = "electronic"
|
|
file_amount = 80.0
|
|
title = "ROM Cart"
|
|
|
|
pda2test
|
|
name = "Test Cart"
|
|
New()
|
|
..()
|
|
src.root.add_file( new /datum/computer/file/computer_program/arcade(src))
|
|
src.root.add_file( new /datum/computer/file/pda_program/manifest(src))
|
|
src.root.add_file( new /datum/computer/file/pda_program/status_display(src))
|
|
src.root.add_file( new /datum/computer/file/pda_program/signaler(src))
|
|
src.root.add_file( new /datum/computer/file/pda_program/qm_records(src))
|
|
src.root.add_file( new /datum/computer/file/pda_program/scan/health_scan(src))
|
|
src.root.add_file( new /datum/computer/file/pda_program/records/security(src))
|
|
src.root.add_file( new /datum/computer/file/pda_program/records/medical(src))
|
|
src.read_only = 1
|
|
|
|
|
|
/obj/item/device/pda2
|
|
name = "PDA"
|
|
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by an EEPROM cartridge."
|
|
icon = 'pda.dmi'
|
|
icon_state = "pda"
|
|
item_state = "electronic"
|
|
w_class = 2.0
|
|
flags = FPRINT | TABLEPASS | ONBELT
|
|
|
|
var/owner = null
|
|
var/default_cartridge = null // Access level defined by cartridge
|
|
var/obj/item/weapon/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/weapon/disk/data/fixed_disk/hd = null
|
|
var/fon = 0 //Is the flashlight function on?
|
|
var/f_lum = 3 //Luminosity for the flashlight function
|
|
// var/datum/data/record/active1 = null //General
|
|
// var/datum/data/record/active2 = null //Medical
|
|
// var/datum/data/record/active3 = null //Security
|
|
// var/obj/item/weapon/integrated_uplink/uplink = null //Maybe replace uplink with some remote ~syndicate~ server
|
|
var/frequency = 1149
|
|
var/datum/radio_frequency/radio_connection
|
|
|
|
var/setup_default_cartridge = null //Cartridge contains job-specific programs
|
|
var/setup_drive_size = 24.0 //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!!
|
|
|
|
|
|
/obj/item/device/pda2/pickup(mob/user)
|
|
if (src.fon)
|
|
src.sd_SetLuminosity(0)
|
|
user.sd_SetLuminosity(user.luminosity + src.f_lum)
|
|
|
|
/obj/item/device/pda2/dropped(mob/user)
|
|
if (src.fon)
|
|
user.sd_SetLuminosity(user.luminosity - src.f_lum)
|
|
src.sd_SetLuminosity(src.f_lum)
|
|
|
|
/obj/item/device/pda2/New()
|
|
..()
|
|
spawn(5)
|
|
src.hd = new /obj/item/weapon/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.hd.file_amount = max(src.hd.file_amount, src.host_program.size)
|
|
|
|
src.host_program.transfer_holder(src.hd)
|
|
|
|
if(radio_controller)
|
|
radio_controller.add_object(src, frequency)
|
|
|
|
|
|
if (src.default_cartridge)
|
|
src.cartridge = new src.setup_default_cartridge(src)
|
|
// if(src.owner)
|
|
// processing_items.Add(src)
|
|
|
|
/obj/item/device/pda2/attack_self(mob/user as mob)
|
|
user.machine = src
|
|
|
|
var/dat = "<html><head><title>Personal Data Assistant</title></head><body>"
|
|
|
|
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>"
|
|
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>"
|
|
dat += "<center><font color=red>Fatal Error 0x17<br>"
|
|
dat += "No System Software Loaded</font></center>"
|
|
//To-do: System recovery shit (maybe have a dedicated computer for this kind of thing)
|
|
|
|
|
|
user << browse(dat,"window=pda2")
|
|
onclose(user,"pda2")
|
|
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["refresh"])
|
|
src.updateSelfDialog()
|
|
|
|
else if (href_list["close"])
|
|
usr << browse(null, "window=pda2")
|
|
usr.machine = null
|
|
|
|
src.updateSelfDialog()
|
|
return
|
|
|
|
/obj/item/device/pda2/attackby(obj/item/weapon/C as obj, mob/user as mob)
|
|
if (istype(C, /obj/item/weapon/disk/data/cartridge) && isnull(src.cartridge))
|
|
user.drop_item()
|
|
C.loc = src
|
|
user << "\blue You insert [C] into [src]."
|
|
src.cartridge = C
|
|
src.updateSelfDialog()
|
|
|
|
else if (istype(C, /obj/item/weapon/card/id) && !src.owner && C:registered)
|
|
src.owner = C:registered
|
|
src.name = "PDA-[src.owner]"
|
|
user << "\blue Card scanned."
|
|
src.updateSelfDialog()
|
|
|
|
/obj/item/device/pda2/receive_signal(datum/signal/signal)
|
|
if(!signal || signal.encryption || !src.owner) return
|
|
|
|
if(signal.data["tag"] && signal.data["tag"] != "\ref[src]") return
|
|
|
|
if(src.host_program)
|
|
src.host_program.receive_signal(signal)
|
|
|
|
if(src.active_program && (src.active_program != src.host_program))
|
|
src.host_program.receive_signal(signal)
|
|
|
|
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)
|
|
|
|
if(scan_dat)
|
|
A.visible_message("\red [user] has scanned [A]!")
|
|
user.show_message(scan_dat, 1)
|
|
|
|
return
|
|
|
|
|
|
/obj/item/device/pda2/proc
|
|
|
|
post_signal(datum/signal/signal,var/newfreq)
|
|
if(!signal)
|
|
return
|
|
var/freq = newfreq
|
|
if(!freq)
|
|
freq = src.frequency
|
|
|
|
signal.source = src
|
|
|
|
var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq)
|
|
|
|
signal.transmission_method = TRANSMISSION_RADIO
|
|
if(frequency)
|
|
return frequency.post_signal(src, signal)
|
|
else
|
|
del(signal)
|
|
|
|
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.loc = T
|
|
src.cartridge = null
|
|
|
|
return
|
|
|
|
//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()
|
|
|
|
display_alert(var/alert_message) //Add alert overlay and beep
|
|
if (alert_message)
|
|
playsound(src.loc, 'twobeep.ogg', 50, 1)
|
|
for (var/mob/O in hearers(3, src.loc))
|
|
O.show_message(text("\icon[src] *[alert_message]*"))
|
|
|
|
src.overlays = null
|
|
src.overlays += image('pda.dmi', "pda-r")
|
|
return
|
|
|
|
run_program(datum/computer/file/pda_program/program)
|
|
if((!program) || (!program.holder))
|
|
return 0
|
|
|
|
if(!(program.holder in src))
|
|
// 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
|
|
return 1
|
|
|
|
delete_file(datum/computer/file/file)
|
|
//world << "Deleting [file]..."
|
|
if((!file) || (!file.holder) || (file.holder.read_only))
|
|
//world << "Cannot delete :("
|
|
return 0
|
|
|
|
//Don't delete the running program you jerk
|
|
if(src.active_program == file || src.host_program == file)
|
|
src.active_program = null
|
|
|
|
//world << "Now calling del on [file]..."
|
|
del(file)
|
|
return 1 |