game collection (#19179)

* game collection

* no phased usage

* .

* spellcheck

* chesskers

* fixes runtime during del

---------

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
Kashargul
2026-02-21 16:02:32 -05:00
committed by GitHub
co-authored by Cameron Lennox
parent db0636c8d1
commit 0fc8ccc50e
72 changed files with 6248 additions and 47 deletions
+3 -3
View File
@@ -72,7 +72,7 @@
pda.current_app = src
return 1
/datum/data/pda/app/proc/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/proc/update_ui(mob/user, list/data)
// Utilities just have a button on the home screen, but custom code when clicked
@@ -104,6 +104,6 @@
pda.update_shortcuts()
return 1
/datum/data/pda/utility/scanmode/proc/scan_mob(mob/living/C as mob, mob/living/user as mob)
/datum/data/pda/utility/scanmode/proc/scan_mob(mob/living/C, mob/living/user)
/datum/data/pda/utility/scanmode/proc/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob)
/datum/data/pda/utility/scanmode/proc/scan_atom(atom/A, mob/user)
+8 -8
View File
@@ -7,7 +7,7 @@
var/message1 // used for status_displays
var/message2
/datum/data/pda/app/status_display/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/status_display/update_ui(mob/user, list/data)
data["records"] = list(
"message1" = message1 ? message1 : "(none)",
"message2" = message2 ? message2 : "(none)")
@@ -63,7 +63,7 @@
template = "pda_signaller"
category = "Utilities"
/datum/data/pda/app/signaller/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/signaller/update_ui(mob/user, list/data)
if(pda.cartridge && istype(pda.cartridge.radio, /obj/item/radio/integrated/signal))
var/obj/item/radio/integrated/signal/R = pda.cartridge.radio
data["frequency"] = R.frequency
@@ -112,7 +112,7 @@
QDEL_NULL(power_monitor)
return ..()
/datum/data/pda/app/power/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/power/update_ui(mob/user, list/data)
data.Add(power_monitor.tgui_data(user))
/datum/data/pda/app/power/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
@@ -128,7 +128,7 @@
/datum/data/pda/app/crew_records
var/datum/data/record/general_records = null
/datum/data/pda/app/crew_records/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/crew_records/update_ui(mob/user, list/data)
var/list/records[0]
if(general_records && (general_records in GLOB.data_core.general))
@@ -169,7 +169,7 @@
var/datum/data/record/medical_records = null
/datum/data/pda/app/crew_records/medical/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/crew_records/medical/update_ui(mob/user, list/data)
var/list/records = ..()
if(!records)
return
@@ -194,7 +194,7 @@
var/datum/data/record/security_records = null
/datum/data/pda/app/crew_records/security/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/crew_records/security/update_ui(mob/user, list/data)
var/list/records = ..()
if(!records)
return
@@ -217,7 +217,7 @@
template = "pda_supply"
category = "Quartermaster"
/datum/data/pda/app/supply/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/supply/update_ui(mob/user, list/data)
var/supplyData[0]
var/datum/shuttle/autodock/ferry/supply/shuttle = SSsupply.shuttle
if (shuttle)
@@ -254,7 +254,7 @@
template = "pda_janitor"
category = "Utilities"
/datum/data/pda/app/janitor/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/janitor/update_ui(mob/user, list/data)
var/JaniData[0]
var/turf/cl = get_turf(pda)
+3 -3
View File
@@ -32,15 +32,15 @@
hold.max_storage_space = slots * 2
hold.max_w_class = ITEMSIZE_SMALL
/obj/item/cartridge/storage/attack_hand(mob/user as mob)
/obj/item/cartridge/storage/attack_hand(mob/user)
if (hold.handle_attack_hand(user)) //otherwise interact as a regular storage item
..(user)
/obj/item/cartridge/storage/attackby(obj/item/W as obj, mob/user as mob)
/obj/item/cartridge/storage/attackby(obj/item/W, mob/user)
..()
return hold.attackby(W, user)
/obj/item/cartridge/storage/MouseDrop(obj/over_object as obj)
/obj/item/cartridge/storage/MouseDrop(obj/over_object)
if (hold.handle_mousedrop(usr, over_object))
..(over_object)
+5 -5
View File
@@ -3,7 +3,7 @@
template = "pda_main_menu"
hidden = 1
/datum/data/pda/app/main_menu/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/main_menu/update_ui(mob/user, list/data)
title = pda.name
data["app"]["is_home"] = 1
@@ -63,7 +63,7 @@
note = "Thank you for choosing the [pda.model_name]!"
notetitle = "Congratulations!"
/datum/data/pda/app/notekeeper/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/notekeeper/update_ui(mob/user, list/data)
data["note"] = note // current pda notes
data["notename"] = "Note [GLOB.alphabet_upper[currentnote]] : [notetitle]"
@@ -206,7 +206,7 @@
icon = "user"
template = "pda_manifest"
/datum/data/pda/app/manifest/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/manifest/update_ui(mob/user, list/data)
if(GLOB.data_core)
GLOB.data_core.get_manifest_list()
data["manifest"] = GLOB.PDA_Manifest
@@ -221,7 +221,7 @@
template = "pda_atmos_scan"
category = "Utilities"
/datum/data/pda/app/atmos_scanner/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/atmos_scanner/update_ui(mob/user, list/data)
data["aircontents"] = get_gas_mixture_default_scan_data(get_turf(user))
/datum/data/pda/app/news
@@ -231,7 +231,7 @@
var/newsfeed_channel
/datum/data/pda/app/news/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/news/update_ui(mob/user, list/data)
data["feeds"] = compile_news()
data["latest_news"] = get_recent_news()
if(newsfeed_channel)
+125
View File
@@ -0,0 +1,125 @@
/datum/data/pda/app/game_launcher
name = "Game Launcher"
icon = "dice"
notify_icon = "dice-d20"
title = "Game Launcher V1.0"
template = "pda_game_launcher"
var/datum/board_game/vore_sweeper/voresweeper
var/datum/board_game/four_row/fourrow
var/datum/board_game/space_battle/spacebattle
var/datum/board_game/rpg_dice/rpgdice
var/datum/board_game/chess/chess
var/datum/board_game/checkers/checkers
var/datum/board_game/nine_mens/ninemens
var/datum/board_game/four_row/tic_tac_toe/tictactoe
/datum/data/pda/app/game_launcher/update_ui(mob/user, list/data)
data["available_games"] = list(GAME_SWEEPER = voresweeper, GAME_FOUR_ROW = fourrow, GAME_SPACE_BATTLE = spacebattle, GAME_RGP_DICE = rpgdice, GAME_CHESS = chess, GAME_CHECKERS = checkers, GAME_NINE_MENS_MORRIS = ninemens, GAME_TIC_TAC_TOE = tictactoe)
/datum/data/pda/app/game_launcher/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
. = ..()
if(.)
return
switch(action)
if(GAME_SWEEPER)
if(params["close"])
if(!voresweeper)
return FALSE
QDEL_NULL(voresweeper)
return TRUE
if(!voresweeper)
voresweeper = new(pda)
voresweeper.tgui_interact(ui.user)
return TRUE
if(GAME_FOUR_ROW)
if(params["close"])
if(!fourrow)
return FALSE
QDEL_NULL(fourrow)
return TRUE
if(!fourrow)
fourrow = new(pda)
fourrow.tgui_interact(ui.user)
return TRUE
if(GAME_SPACE_BATTLE)
if(params["close"])
if(!spacebattle)
return FALSE
QDEL_NULL(spacebattle)
return TRUE
if(!spacebattle)
spacebattle = new(pda)
spacebattle.tgui_interact(ui.user)
return TRUE
if(GAME_RGP_DICE)
if(params["close"])
if(!rpgdice)
return FALSE
QDEL_NULL(rpgdice)
return TRUE
if(!rpgdice)
rpgdice = new(pda)
rpgdice.tgui_interact(ui.user)
return TRUE
if(GAME_CHESS)
if(params["close"])
if(!chess)
return FALSE
QDEL_NULL(chess)
return TRUE
if(!chess)
chess = new(pda)
chess.tgui_interact(ui.user)
return TRUE
if(GAME_CHECKERS)
if(params["close"])
if(!checkers)
return FALSE
QDEL_NULL(checkers)
return TRUE
if(!checkers)
checkers = new(pda)
checkers.tgui_interact(ui.user)
return TRUE
if(GAME_NINE_MENS_MORRIS)
if(params["close"])
if(!ninemens)
return FALSE
QDEL_NULL(ninemens)
return TRUE
if(!ninemens)
ninemens = new(pda)
ninemens.tgui_interact(ui.user)
return TRUE
if(GAME_TIC_TAC_TOE)
if(params["close"])
if(!tictactoe)
return FALSE
QDEL_NULL(tictactoe)
return TRUE
if(!tictactoe)
tictactoe = new(pda)
tictactoe.tgui_interact(ui.user)
return TRUE
return TRUE
/datum/data/pda/app/game_launcher/Destroy()
if(voresweeper)
QDEL_NULL(voresweeper)
if(fourrow)
QDEL_NULL(fourrow)
if(spacebattle)
QDEL_NULL(spacebattle)
if(rpgdice)
QDEL_NULL(rpgdice)
if(chess)
QDEL_NULL(chess)
if(checkers)
QDEL_NULL(checkers)
if(checkers)
QDEL_NULL(ninemens)
if(tictactoe)
QDEL_NULL(tictactoe)
. = ..()
+1 -1
View File
@@ -18,7 +18,7 @@
. = ..()
unnotify()
/datum/data/pda/app/messenger/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/messenger/update_ui(mob/user, list/data)
data["silent"] = notify_silent // does the pda make noise when it receives a message?
data["toff"] = toff // is the messenger function turned off?
data["active_conversation"] = active_conversation // Which conversation are we following right now?
+5 -5
View File
@@ -1,13 +1,13 @@
/datum/data/pda/messenger_plugin
var/datum/data/pda/app/messenger/messenger
/datum/data/pda/messenger_plugin/proc/user_act(mob/user as mob, obj/item/pda/P)
/datum/data/pda/messenger_plugin/proc/user_act(mob/user, obj/item/pda/P)
/datum/data/pda/messenger_plugin/virus
name = "*Send Virus*"
/datum/data/pda/messenger_plugin/virus/user_act(mob/user as mob, obj/item/pda/P)
/datum/data/pda/messenger_plugin/virus/user_act(mob/user, obj/item/pda/P)
var/datum/data/pda/app/messenger/M = P.find_program(/datum/data/pda/app/messenger)
if(M && !M.toff && pda.cartridge.charges > 0)
@@ -19,7 +19,7 @@
/datum/data/pda/messenger_plugin/virus/clown
icon = "star"
/datum/data/pda/messenger_plugin/virus/clown/user_act(mob/user as mob, obj/item/pda/P)
/datum/data/pda/messenger_plugin/virus/clown/user_act(mob/user, obj/item/pda/P)
. = ..(user, P)
if(.)
user.show_message(span_notice("Virus sent!"), 1)
@@ -30,7 +30,7 @@
/datum/data/pda/messenger_plugin/virus/mime
icon = "arrow-circle-down"
/datum/data/pda/messenger_plugin/virus/mime/user_act(mob/user as mob, obj/item/pda/P)
/datum/data/pda/messenger_plugin/virus/mime/user_act(mob/user, obj/item/pda/P)
. = ..(user, P)
if(.)
user.show_message(span_notice("Virus sent!"), 1)
@@ -44,7 +44,7 @@
name = "*Detonate*"
icon = "exclamation-circle"
/datum/data/pda/messenger_plugin/virus/detonate/user_act(mob/user as mob, obj/item/pda/P)
/datum/data/pda/messenger_plugin/virus/detonate/user_act(mob/user, obj/item/pda/P)
. = ..(user, P)
if(.)
var/difficulty = 0
+1 -1
View File
@@ -89,7 +89,7 @@
LAZYADD(serialized_guesses, list(out)) // Wrap it in a list so it stays a list
/datum/data/pda/app/nerdle/update_ui(mob/user as mob, list/data)
/datum/data/pda/app/nerdle/update_ui(mob/user, list/data)
data["guesses"] = serialized_guesses
data["guesses_raw"] = guesses
data["max"] = max_guesses
+6 -5
View File
@@ -47,6 +47,7 @@
new/datum/data/pda/app/manifest,
new/datum/data/pda/app/atmos_scanner,
new/datum/data/pda/app/nerdle,
new/datum/data/pda/app/game_launcher,
new/datum/data/pda/utility/scanmode/notes,
new/datum/data/pda/utility/flashlight)
var/list/shortcut_cache = list()
@@ -177,7 +178,7 @@
/obj/item/pda/GetID()
return id
/obj/item/pda/MouseDrop(obj/over_object as obj, src_location, over_location)
/obj/item/pda/MouseDrop(obj/over_object, src_location, over_location)
var/mob/M = usr
if((!istype(over_object, /atom/movable/screen)) && can_use(usr))
return attack_self(M)
@@ -389,7 +390,7 @@
start_program(find_program(/datum/data/pda/app/main_menu))
/obj/item/pda/proc/id_check(mob/user as mob, choice as num)//To check for IDs; 1 for in-pda use, 2 for out of pda use.
/obj/item/pda/proc/id_check(mob/user, choice)//To check for IDs; 1 for in-pda use, 2 for out of pda use.
if(choice == 1)
if (id)
remove_id()
@@ -411,7 +412,7 @@
return 0
// access to status display signals
/obj/item/pda/attackby(obj/item/C as obj, mob/user)
/obj/item/pda/attackby(obj/item/C, mob/user)
..()
if(istype(C, /obj/item/cartridge) && !cartridge)
cartridge = C
@@ -456,11 +457,11 @@
add_overlay("pda-pen")
return
/obj/item/pda/attack(mob/living/C as mob, mob/living/user as mob)
/obj/item/pda/attack(mob/living/C, mob/living/user)
if (istype(C, /mob/living/carbon) && scanmode)
scanmode.scan_mob(C, user)
/obj/item/pda/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
/obj/item/pda/afterattack(atom/A, mob/user, proximity)
if(proximity && scanmode)
scanmode.scan_atom(A, user)
+1 -1
View File
@@ -213,7 +213,7 @@
name = "Civilian Services Department (Relay)"
cartridges_to_send_to = GLOB.civilian_cartridges
/obj/item/pda/clown/Crossed(atom/movable/AM as mob|obj) //Clown PDA is slippery.
/obj/item/pda/clown/Crossed(atom/movable/AM) //Clown PDA is slippery.
if(AM.is_incorporeal())
return
if (isliving(AM))
+7 -7
View File
@@ -44,7 +44,7 @@
base_name = "Med Scanner"
icon = "heart-o"
/datum/data/pda/utility/scanmode/medical/scan_mob(mob/living/C as mob, mob/living/user as mob)
/datum/data/pda/utility/scanmode/medical/scan_mob(mob/living/C, mob/living/user)
C.visible_message(span_warning("[user] has analyzed [C]'s vitals!"))
user.show_message(span_notice("Analyzing Results for [C]:"))
if(C.status_flags & FAKEDEATH)
@@ -79,7 +79,7 @@
base_name = "DNA Scanner"
icon = "link"
/datum/data/pda/utility/scanmode/dna/scan_mob(mob/living/C as mob, mob/living/user as mob)
/datum/data/pda/utility/scanmode/dna/scan_mob(mob/living/C, mob/living/user)
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(!istype(H.dna, /datum/dna))
@@ -88,7 +88,7 @@
to_chat(user, span_notice("[H]'s Fingerprints: [md5(H.dna.uni_identity)]"))
scan_blood(C, user)
/datum/data/pda/utility/scanmode/dna/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob)
/datum/data/pda/utility/scanmode/dna/scan_atom(atom/A, mob/user)
scan_blood(A, user)
/datum/data/pda/utility/scanmode/dna/proc/scan_blood(atom/A, mob/user)
@@ -105,7 +105,7 @@
base_name = "Halogen Counter"
icon = "exclamation-circle"
/datum/data/pda/utility/scanmode/halogen/scan_mob(mob/living/C as mob, mob/living/user as mob)
/datum/data/pda/utility/scanmode/halogen/scan_mob(mob/living/C, mob/living/user)
C.visible_message(span_warning("[user] has analyzed [C]'s radiation levels!"))
user.show_message(span_notice("Analyzing Results for [C]:"))
@@ -118,7 +118,7 @@
base_name = "Reagent Scanner"
icon = "flask"
/datum/data/pda/utility/scanmode/reagent/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob)
/datum/data/pda/utility/scanmode/reagent/scan_atom(atom/A, mob/user)
if(!isnull(A.reagents))
if(A.reagents.reagent_list.len > 0)
var/reagents_length = A.reagents.reagent_list.len
@@ -134,7 +134,7 @@
base_name = "Gas Scanner"
icon = "tachometer-alt"
/datum/data/pda/utility/scanmode/gas/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob)
/datum/data/pda/utility/scanmode/gas/scan_atom(atom/A, mob/user)
pda.analyze_gases(A, user)
/datum/data/pda/utility/scanmode/notes
@@ -146,7 +146,7 @@
. = ..()
notes = pda.find_program(/datum/data/pda/app/notekeeper)
/datum/data/pda/utility/scanmode/notes/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob)
/datum/data/pda/utility/scanmode/notes/scan_atom(atom/A, mob/user)
if(notes && istype(A, /obj/item/paper))
var/obj/item/paper/P = A
var/list/brlist = list("p", "/p", "br", "hr", "h1", "h2", "h3", "h4", "/h1", "/h2", "/h3", "/h4")