mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Conflicts: baystation12.dme code/ATMOSPHERICS/components/unary/vent_pump.dm code/ATMOSPHERICS/components/unary/vent_scrubber.dm code/__HELPERS/game.dm code/controllers/shuttle_controller.dm code/datums/datumvars.dm code/datums/supplypacks.dm code/defines/obj/storage.dm code/defines/obj/vending.dm code/defines/obj/weapon.dm code/defines/procs/command_alert.dm code/game/area/Space Station 13 areas.dm code/game/atoms.dm code/game/gamemodes/changeling/modularchangling.dm code/game/gamemodes/cult/runes.dm code/game/gamemodes/events.dm code/game/gamemodes/events/dust.dm code/game/gamemodes/events/miniblob.dm code/game/gamemodes/events/ninja_equipment.dm code/game/gamemodes/factions.dm code/game/gamemodes/game_mode.dm code/game/gamemodes/gameticker.dm code/game/jobs/access.dm code/game/jobs/job/assistant.dm code/game/jobs/job/captain.dm code/game/jobs/job/civilian.dm code/game/jobs/job/engineering.dm code/game/jobs/job/medical.dm code/game/jobs/job/science.dm code/game/jobs/job/security.dm code/game/jobs/job_controller.dm code/game/machinery/alarm.dm code/game/machinery/atmo_control.dm code/game/machinery/atmoalter/area_atmos_computer.dm code/game/machinery/bots/medbot.dm code/game/machinery/computer/HolodeckControl.dm code/game/machinery/computer/ai_core.dm code/game/machinery/computer/atmos_alert.dm code/game/machinery/computer/card.dm code/game/machinery/computer/cloning.dm code/game/machinery/computer/computer.dm code/game/machinery/computer/message.dm code/game/machinery/computer/pod.dm code/game/machinery/computer/prisoner.dm code/game/machinery/computer/syndicate_shuttle.dm code/game/machinery/constructable_frame.dm code/game/machinery/doors/door.dm code/game/machinery/doors/firedoor.dm code/game/machinery/newscaster.dm code/game/machinery/recharger.dm code/game/machinery/spaceheater.dm code/game/machinery/telecomms/broadcaster.dm code/game/machinery/telecomms/logbrowser.dm code/game/machinery/telecomms/machine_interactions.dm code/game/machinery/teleporter.dm code/game/machinery/wishgranter.dm code/game/mecha/mech_fabricator.dm code/game/mecha/working/ripley.dm code/game/objects/items.dm code/game/objects/items/blueprints.dm code/game/objects/items/devices/flashlight.dm code/game/objects/items/devices/radio/encryptionkey.dm code/game/objects/items/devices/uplinks.dm code/game/objects/items/stacks/medical.dm code/game/objects/items/weapons/cards_ids.dm code/game/objects/items/weapons/gift_wrappaper.dm code/game/objects/items/weapons/hydroponics.dm code/game/objects/items/weapons/manuals.dm code/game/objects/items/weapons/secstorage/secstorage.dm code/game/objects/items/weapons/storage/backpack.dm code/game/objects/items/weapons/storage/firstaid.dm code/game/objects/items/weapons/storage/kit.dm code/game/objects/items/weapons/storage/storage.dm code/game/objects/items/weapons/storage/toolbox.dm code/game/objects/items/weapons/storage/uplink_kits.dm code/game/objects/items/weapons/stunbaton.dm code/game/objects/items/weapons/surgery_tools.dm code/game/objects/items/weapons/tools.dm code/game/objects/structures/crates_lockers/closets/secure/cargo.dm code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm code/game/objects/structures/crates_lockers/closets/secure/scientist.dm code/game/objects/structures/crates_lockers/closets/secure/security.dm code/game/objects/structures/electricchair.dm code/game/objects/structures/extinguisher.dm code/game/objects/structures/watercloset.dm code/game/objects/weapons.dm code/game/turfs/turf.dm code/game/vehicles/airtight/airtight.dm code/game/vehicles/vehicle.dm code/global.dm code/modules/DetectiveWork/evidence.dm code/modules/admin/IsBanned.dm code/modules/admin/player_panel.dm code/modules/admin/verbs/diagnostics.dm code/modules/admin/verbs/getlogs.dm code/modules/client/preferences.dm code/modules/clothing/masks/miscellaneous.dm code/modules/clothing/spacesuits/rig.dm code/modules/clothing/suits/miscellaneous.dm code/modules/critters/critter_defenses.dm code/modules/detectivework/scanner.dm code/modules/flufftext/Hallucination.dm code/modules/food/recipes_microwave.dm code/modules/mining/mine_items.dm code/modules/mining/mine_turfs.dm code/modules/mining/satchel_ore_boxdm.dm code/modules/mob/dead/observer/observer.dm code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm code/modules/mob/living/carbon/alien/special/facehugger.dm code/modules/mob/living/carbon/carbon.dm code/modules/mob/living/carbon/carbon_defines.dm code/modules/mob/living/carbon/human/human.dm code/modules/mob/living/carbon/human/human_attackhand.dm code/modules/mob/living/carbon/human/life.dm code/modules/mob/living/carbon/human/say.dm code/modules/mob/living/carbon/human/update_icons.dm code/modules/mob/living/carbon/metroid/metroid.dm code/modules/mob/living/living.dm code/modules/mob/living/silicon/ai/life.dm code/modules/mob/living/silicon/robot/robot.dm code/modules/mob/mob_cleanup.dm code/modules/mob/mob_defines.dm code/modules/mob/mob_transformation_simple.dm code/modules/paperwork/clipboard.dm code/modules/paperwork/folders.dm code/modules/paperwork/paper.dm code/modules/paperwork/paperbin.dm code/modules/paperwork/pen.dm code/modules/power/cable.dm code/modules/projectiles/guns/energy/special.dm code/modules/projectiles/guns/projectile/revolver.dm code/modules/projectiles/projectile/change.dm code/modules/projectiles/projectile/special.dm code/modules/reagents/Chemistry-Reagents.dm code/modules/reagents/reagent_containers/glass.dm code/modules/reagents/reagent_containers/hypospray.dm code/modules/recycling/sortingmachinery.dm code/modules/research/designs.dm config/config.txt html/changelog.html icons/mob/head.dmi icons/mob/hud.dmi icons/mob/items_lefthand.dmi icons/mob/items_righthand.dmi icons/mob/mask.dmi icons/mob/suit.dmi icons/mob/ties.dmi icons/mob/uniform.dmi icons/obj/clothing/hats.dmi icons/obj/clothing/masks.dmi icons/obj/clothing/suits.dmi icons/obj/clothing/ties.dmi icons/obj/grenade.dmi icons/obj/projectiles.dmi Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
298 lines
8.9 KiB
Plaintext
298 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 = 'icons/obj/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 = 'icons/obj/pda.dmi'
|
|
icon_state = "pda"
|
|
item_state = "electronic"
|
|
w_class = 2.0
|
|
flags = FPRINT | TABLEPASS
|
|
slow_flags = SLOT_BELT
|
|
|
|
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_name)
|
|
src.owner = C:registered_name
|
|
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, 'sound/machines/twobeep.ogg', 50, 1)
|
|
for (var/mob/O in hearers(3, src.loc))
|
|
O.show_message(text("\icon[src] *[alert_message]*"))
|
|
|
|
src.overlays.Cut()
|
|
src.overlays += image('icons/obj/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 |