diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index bca9df5ae1e..157a3f113ff 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -55,6 +55,9 @@
var/rev_cooldown = 0
var/tcrystals = 0
+ var/list/purchase_log = new
+ var/used_TC = 0
+
// the world.time since the mob has been brigged, or -1 if not at all
var/brigged_since = -1
@@ -73,7 +76,7 @@
/datum/mind/New(var/key)
src.key = key
-
+ purchase_log = list()
..()
/datum/mind/proc/transfer_to(mob/living/new_character)
diff --git a/code/datums/uplink/badassery.dm b/code/datums/uplink/badassery.dm
index 65f71f25847..8addcc3f64e 100644
--- a/code/datums/uplink/badassery.dm
+++ b/code/datums/uplink/badassery.dm
@@ -22,22 +22,22 @@
desc = "Buys you one random item."
/datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user)
- var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses)
+ var/datum/uplink_item/item = default_uplink_selection.get_random_item((user ? user.mind.tcrystals : DEFAULT_TELECRYSTAL_AMOUNT), U)
return item.buy(U, user)
-/datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U)
- return default_uplink_selection.get_random_item(U.uses, U) != null
+/datum/uplink_item/item/badassery/random_one/can_buy(var/obj/item/device/uplink/U, var/telecrystals)
+ return default_uplink_selection.get_random_item(telecrystals, U) != null
/datum/uplink_item/item/badassery/random_many
name = "Random Items"
desc = "Buys you as many random items you can afford. Convenient packaging NOT included."
-/datum/uplink_item/item/badassery/random_many/cost(var/telecrystals)
+/datum/uplink_item/item/badassery/random_many/cost(obj/item/device/uplink/U, var/telecrystals)
return max(1, telecrystals)
-/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc)
+/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/M)
var/list/bought_items = list()
- for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc))
+ for(var/datum/uplink_item/UI in get_random_uplink_items(U, M.mind.tcrystals, loc))
UI.purchase_log(U)
var/obj/item/I = UI.get_goods(U, loc)
if(istype(I))
@@ -47,7 +47,7 @@
/datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U)
feedback_add_details("traitor_uplink_items_bought", "[src]")
- log_and_message_admins("used \the [U.loc] to buy \a [src]")
+ log_and_message_admins("used \the [U.loc] to buy \a [src] at random")
/****************
* Surplus Crate *
diff --git a/code/datums/uplink/telecrystals.dm b/code/datums/uplink/telecrystals.dm
index f814b55232d..66a099581ee 100644
--- a/code/datums/uplink/telecrystals.dm
+++ b/code/datums/uplink/telecrystals.dm
@@ -5,8 +5,8 @@
category = /datum/uplink_category/telecrystals
blacklisted = 1
-/datum/uplink_item/item/telecrystal/get_goods(var/obj/item/device/uplink/U, var/loc)
- return new /obj/item/stack/telecrystal(loc, cost(U.uses))
+/datum/uplink_item/item/telecrystal/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/M)
+ return new /obj/item/stack/telecrystal(loc, cost(U, M.mind.tcrystals))
/datum/uplink_item/item/telecrystal/one
name = "Telecrystal - 01"
@@ -35,5 +35,5 @@
/datum/uplink_item/item/telecrystal/all
name = "Telecrystals - Empty Uplink"
-/datum/uplink_item/item/telecrystal/all/cost(var/telecrystals)
- return max(1, telecrystals)
\ No newline at end of file
+/datum/uplink_item/item/telecrystal/all/cost(obj/item/device/uplink/U, mob/M)
+ return max(1, M.mind.tcrystals)
\ No newline at end of file
diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm
index d9e6d84db7d..f7236ddbb08 100644
--- a/code/datums/uplink/uplink_categories.dm
+++ b/code/datums/uplink/uplink_categories.dm
@@ -6,12 +6,6 @@
..()
items = list()
-/datum/uplink_category/proc/can_view(obj/item/device/uplink/U)
- for(var/datum/uplink_item/item in items)
- if(item.can_view(U))
- return 1
- return 0
-
datum/uplink_category/ammunition
name = "Ammunition"
diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm
index 8d9de8f7321..067900cd846 100644
--- a/code/datums/uplink/uplink_items.dm
+++ b/code/datums/uplink/uplink_items.dm
@@ -31,7 +31,7 @@ var/datum/uplink/uplink = new()
var/item_cost = 0
var/datum/uplink_category/category // Item category
var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all.
- var/blacklisted = 0
+ var/blacklisted = FALSE
/datum/uplink_item/item
var/path = null
@@ -48,50 +48,38 @@ var/datum/uplink/uplink = new()
if(!extra_args)
return
- if(!can_buy(U))
+ if(!can_buy(U, user.mind.tcrystals))
return
+<<<<<<< HEAD
if(U.CanUseTopic(user, GLOB.tgui_inventory_state) != STATUS_INTERACTIVE)
+=======
+ if(U.tgui_status(user, GLOB.tgui_deep_inventory_state) != STATUS_INTERACTIVE)
+>>>>>>> 462f961... Merge pull request #7869 from Atermonera/mind_telecrystals
return
- var/cost = cost(U.uses, U)
+ var/cost = cost(U, user.mind.tcrystals)
var/goods = get_goods(U, get_turf(user), user, extra_args)
if(!goods)
return
- purchase_log(U)
+ purchase_log(user)
user.mind.tcrystals -= cost
- U.used_TC += cost
+ user.mind.used_TC += cost
return goods
// Any additional arguments you wish to send to the get_goods
/datum/uplink_item/proc/extra_args(var/mob/user)
- return 1
+ return TRUE
-/datum/uplink_item/proc/can_buy(obj/item/device/uplink/U)
- if(cost(U.uses, U) > U.uses)
- return 0
+/datum/uplink_item/proc/can_buy(var/obj/item/device/uplink/U, var/telecrystals)
+ if(cost(U, telecrystals) > telecrystals)
+ return FALSE
- return can_view(U)
+ return TRUE
-/datum/uplink_item/proc/can_view(obj/item/device/uplink/U)
- // Making the assumption that if no uplink was supplied, then we don't care about antag roles
- if(!U || !antag_roles.len)
- return 1
-
- // With no owner, there's no need to check antag status.
- if(!U.uplink_owner)
- return 0
-
- for(var/antag_role in antag_roles)
- var/datum/antagonist/antag = all_antag_types[antag_role]
- if(!isnull(antag))
- if(antag.is_antagonist(U.uplink_owner))
- return 1
- return 0
-
-/datum/uplink_item/proc/cost(var/telecrystals, obj/item/device/uplink/U)
+/datum/uplink_item/proc/cost(obj/item/device/uplink/U, mob/M)
. = item_cost
if(U)
. = U.get_item_cost(src, .)
@@ -100,19 +88,19 @@ var/datum/uplink/uplink = new()
return desc
// get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying
-/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc)
- return 0
+/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc, mob/user)
+ return FALSE
/datum/uplink_item/proc/log_icon()
return
-/datum/uplink_item/proc/purchase_log(obj/item/device/uplink/U)
+/datum/uplink_item/proc/purchase_log(mob/M)
feedback_add_details("traitor_uplink_items_bought", "[src]")
- log_and_message_admins("used \the [U.loc] to buy \a [src]")
- U.purchase_log[src] = U.purchase_log[src] + 1
+ log_and_message_admins("\the [M] bought \a [src] through the uplink")
+ M.mind.purchase_log[src] += 1
datum/uplink_item/dd_SortValue()
- return cost(INFINITY)
+ return item_cost
/********************************
* *
@@ -133,7 +121,7 @@ datum/uplink_item/dd_SortValue()
A.put_in_any_hand_if_possible(I)
return I
-/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc)
+/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user)
var/obj/item/I = new path(loc)
return I
@@ -208,7 +196,7 @@ datum/uplink_item/dd_SortValue()
/proc/get_surplus_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc)
var/list/bought_items = list()
- var/override = 1
+ var/override = TRUE
while(remaining_TC)
var/datum/uplink_item/I = all_uplink_selection.get_random_item(remaining_TC, U, bought_items, override)
if(!I)
diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm
index efcd5955f74..99216b9ef55 100644
--- a/code/game/antagonist/antagonist_print.dm
+++ b/code/game/antagonist/antagonist_print.dm
@@ -1,7 +1,7 @@
/datum/antagonist/proc/print_player_summary()
if(!current_antagonists.len)
- return 0
+ return FALSE
var/text = "
The [current_antagonists.len == 1 ? "[role_text] was" : "[role_text_plural] were"]:"
for(var/datum/mind/P in current_antagonists)
@@ -21,7 +21,7 @@
else
text += "Fail."
feedback_add_details(feedback_tag,"[O.type]|FAIL")
- failed = 1
+ failed = TRUE
num++
if(failed)
text += "
The [role_text] has failed."
@@ -32,7 +32,7 @@
text += "
Their objectives were:"
var/num = 1
for(var/datum/objective/O in global_objectives)
- text += print_objective(O, num, 1)
+ text += print_objective(O, num, TRUE)
num++
// Display the results.
@@ -68,14 +68,14 @@
/datum/antagonist/proc/print_player_full(var/datum/mind/ply)
var/text = print_player_lite(ply)
- var/TC_uses = 0
- var/uplink_true = 0
+ var/TC_uses = FALSE
+ var/uplink_true = FALSE
var/purchases = ""
- for(var/obj/item/device/uplink/H in world_uplinks)
- if(H && H.uplink_owner && H.uplink_owner == ply)
- TC_uses += H.used_TC
- uplink_true = 1
- purchases += get_uplink_purchases(H)
+ for(var/mob/M in player_list)
+ if(M.mind && M.mind.used_TC)
+ TC_uses += M.mind.used_TC
+ uplink_true = TRUE
+ purchases += get_uplink_purchases(M.mind)
if(uplink_true)
text += " (used [TC_uses] TC)"
if(purchases)
@@ -83,18 +83,8 @@
return text
-/proc/print_ownerless_uplinks()
- var/has_printed = 0
- for(var/obj/item/device/uplink/H in world_uplinks)
- if(isnull(H.uplink_owner) && H.used_TC)
- if(!has_printed)
- has_printed = 1
- to_world("Ownerless Uplinks")
- to_world("[H.loc] (used [H.used_TC] TC)")
- to_world(get_uplink_purchases(H))
-
-/proc/get_uplink_purchases(var/obj/item/device/uplink/H)
+/proc/get_uplink_purchases(var/datum/mind/M)
var/list/refined_log = new()
- for(var/datum/uplink_item/UI in H.purchase_log)
- refined_log.Add("[H.purchase_log[UI]]x[UI.log_icon()][UI.name]")
+ for(var/datum/uplink_item/UI in M.purchase_log)
+ refined_log.Add("[M.purchase_log[UI]]x[UI.log_icon()][UI.name]")
. = english_list(refined_log, nothing_text = "")
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 42e6a6ddd00..18d58a33ae8 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -292,7 +292,6 @@ var/global/list/additional_antag_types = list()
antag.check_victory()
antag.print_player_summary()
sleep(10)
- print_ownerless_uplinks()
var/clients = 0
var/surviving_humans = 0
diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm
index c4069be3ed7..d8f6b0f4e06 100644
--- a/code/game/objects/items/devices/uplink.dm
+++ b/code/game/objects/items/devices/uplink.dm
@@ -1,5 +1,3 @@
-GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
-
// I placed this here because of how relevant it is.
// You place this in your uplinkable item to check if an uplink is active or not.
// If it is, it will display the uplink menu and return 1, else it'll return false.
@@ -14,29 +12,19 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
/obj/item/device/uplink
var/welcome = "Welcome, Operative" // Welcoming menu message
- var/uses // Numbers of crystals
var/list/ItemsCategory // List of categories with lists of items
var/list/ItemsReference // List of references with an associated item
var/list/nanoui_items // List of items for NanoUI use
var/faction = "" //Antag faction holder.
- var/list/purchase_log = new
- var/datum/mind/uplink_owner = null
- var/used_TC = 0
var/offer_time = 10 MINUTES //The time increment per discount offered
var/next_offer_time
var/datum/uplink_item/discount_item //The item to be discounted
var/discount_amount //The amount as a percent the item will be discounted by
var/compact_mode = FALSE
-/obj/item/device/uplink/Initialize(var/mapload, var/datum/mind/owner = null, var/telecrystals = DEFAULT_TELECRYSTAL_AMOUNT)
+/obj/item/device/uplink/Initialize(var/mapload)
. = ..()
- uplink_owner = owner
- purchase_log = list()
- if(owner)
- uses = owner.tcrystals
- else
- uses = telecrystals
addtimer(CALLBACK(src, .proc/next_offer), offer_time) //It seems like only the /hidden type actually makes use of this...
/obj/item/device/uplink/get_item_cost(var/item_type, var/item_cost)
@@ -85,7 +73,7 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
/obj/item/device/uplink/hidden/proc/trigger(mob/user as mob)
if(!active)
toggle()
- interact(user)
+ tgui_interact(user)
// Checks to see if the value meets the target. Like a frequency being a traitor_frequency, in order to unlock a headset.
// If true, it accesses trigger() and returns 1. If it fails, it returns false. Use this to see if you need to close the
@@ -93,8 +81,8 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
/obj/item/device/uplink/hidden/proc/check_trigger(mob/user as mob, var/value, var/target)
if(value == target)
trigger(user)
- return 1
- return 0
+ return TRUE
+ return FALSE
// Legacy
/obj/item/device/uplink/hidden/interact(mob/user)
@@ -107,7 +95,7 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
return loc
/obj/item/device/uplink/hidden/tgui_state(mob/user)
- return GLOB.tgui_inventory_state
+ return GLOB.tgui_deep_inventory_state
/obj/item/device/uplink/hidden/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
if(!active)
@@ -127,7 +115,7 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
var/list/data = ..()
- data["telecrystals"] = uses
+ data["telecrystals"] = user.mind.tcrystals
data["lockable"] = TRUE
data["compactMode"] = compact_mode
@@ -177,22 +165,19 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
data["categories"] = list()
for(var/datum/uplink_category/category in uplink.categories)
- if(category.can_view(src))
- var/list/cat = list(
+ var/list/cat = list(
"name" = category.name,
"items" = (category == selected_cat ? list() : null)
)
- for(var/datum/uplink_item/item in category.items)
- if(!item.can_view(src))
- continue
- var/cost = item.cost(uses, src) || "???"
- cat["items"] += list(list(
- "name" = item.name,
- "cost" = cost,
- "desc" = item.description(),
- "ref" = REF(item),
- ))
- data["categories"] += list(cat)
+ for(var/datum/uplink_item/item in category.items)
+ var/cost = item.cost(src, user) || "???"
+ cat["items"] += list(list(
+ "name" = item.name,
+ "cost" = cost,
+ "desc" = item.description(),
+ "ref" = REF(item),
+ ))
+ data["categories"] += list(cat)
return data
@@ -228,9 +213,9 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
//
// Includes normal radio uplink, multitool uplink,
// implant uplink (not the implant tool) and a preset headset uplink.
-/obj/item/device/radio/uplink/New(atom/loc, datum/mind/target_mind, telecrystals)
- ..(loc)
- hidden_uplink = new(src, target_mind, telecrystals)
+/obj/item/device/radio/uplink/New()
+ ..()
+ hidden_uplink = new(src)
icon_state = "radio"
/obj/item/device/radio/uplink/attack_self(mob/user as mob)
@@ -238,6 +223,7 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
hidden_uplink.trigger(user)
/obj/item/device/multitool/uplink/New()
+ ..()
hidden_uplink = new(src)
/obj/item/device/multitool/uplink/attack_self(mob/user as mob)
@@ -250,4 +236,3 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink)
/obj/item/device/radio/headset/uplink/New()
..()
hidden_uplink = new(src)
- hidden_uplink.uses = DEFAULT_TELECRYSTAL_AMOUNT
diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm
index de05f910136..89bfd5f0040 100644
--- a/code/game/objects/items/devices/uplink_random_lists.dm
+++ b/code/game/objects/items/devices/uplink_random_lists.dm
@@ -34,11 +34,11 @@ var/datum/uplink_random_selection/all_uplink_selection = new/datum/uplink_random
if(!prob(RI.keep_probability))
continue
var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item]
- if(I.cost(telecrystals, U) > telecrystals)
+ if(I.cost(U) > telecrystals)
continue
if(bought_items && (I in bought_items) && !prob(RI.reselect_probability))
continue
- if(U && !I.can_buy(U))
+ if(U && !I.can_buy(U, telecrystals))
continue
return I
diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm
index 2ec6a4e5366..150b31d044f 100644
--- a/code/modules/pda/cart.dm
+++ b/code/modules/pda/cart.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
var/list/command_cartridges = list(
/obj/item/weapon/cartridge/captain,
/obj/item/weapon/cartridge/hop,
@@ -309,3 +310,315 @@ var/list/civilian_cartridges = list(
charges = 5
var/telecrystals = 0
messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/frame)
+=======
+var/list/command_cartridges = list(
+ /obj/item/weapon/cartridge/captain,
+ /obj/item/weapon/cartridge/hop,
+ /obj/item/weapon/cartridge/hos,
+ /obj/item/weapon/cartridge/ce,
+ /obj/item/weapon/cartridge/rd,
+ /obj/item/weapon/cartridge/cmo,
+ /obj/item/weapon/cartridge/head,
+ /obj/item/weapon/cartridge/lawyer // Internal Affaris,
+ )
+
+var/list/security_cartridges = list(
+ /obj/item/weapon/cartridge/security,
+ /obj/item/weapon/cartridge/detective,
+ /obj/item/weapon/cartridge/hos
+ )
+
+var/list/engineering_cartridges = list(
+ /obj/item/weapon/cartridge/engineering,
+ /obj/item/weapon/cartridge/atmos,
+ /obj/item/weapon/cartridge/ce
+ )
+
+var/list/medical_cartridges = list(
+ /obj/item/weapon/cartridge/medical,
+ /obj/item/weapon/cartridge/chemistry,
+ /obj/item/weapon/cartridge/cmo
+ )
+
+var/list/research_cartridges = list(
+ /obj/item/weapon/cartridge/signal/science,
+ /obj/item/weapon/cartridge/rd
+ )
+
+var/list/cargo_cartridges = list(
+ /obj/item/weapon/cartridge/quartermaster, // This also covers cargo-techs, apparently,
+ /obj/item/weapon/cartridge/miner,
+ /obj/item/weapon/cartridge/hop
+ )
+
+var/list/civilian_cartridges = list(
+ /obj/item/weapon/cartridge/janitor,
+ /obj/item/weapon/cartridge/service,
+ /obj/item/weapon/cartridge/hop
+ )
+
+/obj/item/weapon/cartridge
+ name = "generic cartridge"
+ desc = "A data cartridge for portable microcomputers."
+ icon = 'icons/obj/pda.dmi'
+ icon_state = "cart"
+ item_state = "electronic"
+ w_class = ITEMSIZE_TINY
+ drop_sound = 'sound/items/drop/component.ogg'
+ pickup_sound = 'sound/items/pickup/component.ogg'
+
+ var/obj/item/radio/integrated/radio = null
+
+ var/charges = 0
+
+ var/list/stored_data = list()
+ var/list/programs = list()
+ var/list/messenger_plugins = list()
+
+/obj/item/weapon/cartridge/Destroy()
+ QDEL_NULL(radio)
+ QDEL_LIST(programs)
+ QDEL_LIST(messenger_plugins)
+ return ..()
+
+/obj/item/weapon/cartridge/proc/update_programs(obj/item/device/pda/pda)
+ for(var/A in programs)
+ var/datum/data/pda/P = A
+ P.pda = pda
+ for(var/A in messenger_plugins)
+ var/datum/data/pda/messenger_plugin/P = A
+ P.pda = pda
+
+/obj/item/weapon/cartridge/engineering
+ name = "\improper Power-ON cartridge"
+ icon_state = "cart-e"
+ programs = list(
+ new/datum/data/pda/app/power,
+ new/datum/data/pda/utility/scanmode/halogen)
+
+/obj/item/weapon/cartridge/atmos
+ name = "\improper BreatheDeep cartridge"
+ icon_state = "cart-a"
+ programs = list(new/datum/data/pda/utility/scanmode/gas)
+
+/obj/item/weapon/cartridge/medical
+ name = "\improper Med-U cartridge"
+ icon_state = "cart-m"
+ programs = list(
+ new/datum/data/pda/app/crew_records/medical,
+ new/datum/data/pda/utility/scanmode/medical)
+
+/obj/item/weapon/cartridge/chemistry
+ name = "\improper ChemWhiz cartridge"
+ icon_state = "cart-chem"
+ programs = list(
+ new/datum/data/pda/app/crew_records/medical,
+ new/datum/data/pda/utility/scanmode/medical,
+ new/datum/data/pda/utility/scanmode/reagent)
+
+/obj/item/weapon/cartridge/security
+ name = "\improper R.O.B.U.S.T. cartridge"
+ icon_state = "cart-s"
+ programs = list(
+ new/datum/data/pda/app/crew_records/security)
+
+/obj/item/weapon/cartridge/detective
+ name = "\improper D.E.T.E.C.T. cartridge"
+ icon_state = "cart-s"
+ programs = list(
+ new/datum/data/pda/app/crew_records/medical,
+ new/datum/data/pda/utility/scanmode/medical,
+
+ new/datum/data/pda/app/crew_records/security)
+
+
+/obj/item/weapon/cartridge/janitor
+ name = "\improper CustodiPRO cartridge"
+ desc = "The ultimate in clean-room design."
+ icon_state = "cart-j"
+ programs = list(new/datum/data/pda/app/janitor)
+
+/obj/item/weapon/cartridge/lawyer
+ name = "\improper P.R.O.V.E. cartridge"
+ icon_state = "cart-s"
+ programs = list(new/datum/data/pda/app/crew_records/security)
+
+/obj/item/weapon/cartridge/clown
+ name = "\improper Honkworks 5.0 cartridge"
+ icon_state = "cart-clown"
+ charges = 5
+ programs = list(new/datum/data/pda/utility/honk)
+ messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/clown)
+
+/obj/item/weapon/cartridge/mime
+ name = "\improper Gestur-O 1000 cartridge"
+ icon_state = "cart-mi"
+ charges = 5
+ messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/mime)
+
+/obj/item/weapon/cartridge/service
+ name = "\improper Serv-U Pro cartridge"
+ desc = "A data cartridge designed to serve YOU!"
+
+/obj/item/weapon/cartridge/signal
+ name = "generic signaler cartridge"
+ desc = "A data cartridge with an integrated radio signaler module."
+ programs = list(new/datum/data/pda/app/signaller)
+
+/obj/item/weapon/cartridge/signal/Initialize()
+ radio = new /obj/item/radio/integrated/signal(src)
+ ..()
+
+/obj/item/weapon/cartridge/signal/science
+ name = "\improper Signal Ace 2 cartridge"
+ desc = "Complete with integrated radio signaler!"
+ icon_state = "cart-tox"
+ programs = list(
+ new/datum/data/pda/utility/scanmode/gas,
+
+ new/datum/data/pda/utility/scanmode/reagent,
+
+ new/datum/data/pda/app/signaller)
+
+/obj/item/weapon/cartridge/quartermaster
+ name = "\improper Space Parts & Space Vendors cartridge"
+ desc = "Perfect for the Quartermaster on the go!"
+ icon_state = "cart-q"
+ programs = list(
+ new/datum/data/pda/app/supply)
+
+/obj/item/weapon/cartridge/miner
+ name = "\improper Drill-Jockey 4.5 cartridge"
+ desc = "It's covered in some sort of sand."
+ icon_state = "cart-q"
+
+/obj/item/weapon/cartridge/head
+ name = "\improper Easy-Record DELUXE cartridge"
+ icon_state = "cart-h"
+ programs = list(new/datum/data/pda/app/status_display)
+
+/obj/item/weapon/cartridge/hop
+ name = "\improper HumanResources9001 cartridge"
+ icon_state = "cart-h"
+ programs = list(
+ new/datum/data/pda/app/crew_records/security,
+
+ new/datum/data/pda/app/janitor,
+
+ new/datum/data/pda/app/supply,
+
+ new/datum/data/pda/app/status_display)
+
+/obj/item/weapon/cartridge/hos
+ name = "\improper R.O.B.U.S.T. DELUXE cartridge"
+ icon_state = "cart-hos"
+ programs = list(
+ new/datum/data/pda/app/crew_records/security,
+
+ new/datum/data/pda/app/status_display)
+
+/obj/item/weapon/cartridge/ce
+ name = "\improper Power-On DELUXE cartridge"
+ icon_state = "cart-ce"
+ programs = list(
+ new/datum/data/pda/app/power,
+ new/datum/data/pda/utility/scanmode/halogen,
+
+ new/datum/data/pda/utility/scanmode/gas,
+
+ new/datum/data/pda/app/status_display)
+
+/obj/item/weapon/cartridge/cmo
+ name = "\improper Med-U DELUXE cartridge"
+ icon_state = "cart-cmo"
+ programs = list(
+ new/datum/data/pda/app/crew_records/medical,
+ new/datum/data/pda/utility/scanmode/medical,
+
+ new/datum/data/pda/utility/scanmode/reagent,
+
+ new/datum/data/pda/app/status_display)
+
+/obj/item/weapon/cartridge/rd
+ name = "\improper Signal Ace DELUXE cartridge"
+ icon_state = "cart-rd"
+ programs = list(
+ new/datum/data/pda/utility/scanmode/gas,
+
+ new/datum/data/pda/utility/scanmode/reagent,
+
+ new/datum/data/pda/app/signaller,
+
+ new/datum/data/pda/app/status_display)
+
+/obj/item/weapon/cartridge/rd/Initialize()
+ radio = new /obj/item/radio/integrated/signal(src)
+ . = ..()
+
+/obj/item/weapon/cartridge/captain
+ name = "\improper Value-PAK cartridge"
+ desc = "Now with 200% more value!"
+ icon_state = "cart-c"
+ programs = list(
+ new/datum/data/pda/app/power,
+ new/datum/data/pda/utility/scanmode/halogen,
+
+ new/datum/data/pda/utility/scanmode/gas,
+
+ new/datum/data/pda/app/crew_records/medical,
+ new/datum/data/pda/utility/scanmode/medical,
+
+ new/datum/data/pda/utility/scanmode/reagent,
+
+ new/datum/data/pda/app/crew_records/security,
+
+ new/datum/data/pda/app/janitor,
+
+ new/datum/data/pda/app/supply,
+
+ new/datum/data/pda/app/status_display)
+
+/obj/item/weapon/cartridge/syndicate
+ name = "\improper Detomatix cartridge"
+ icon_state = "cart"
+ var/initial_remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
+ charges = 4
+ programs = list(new/datum/data/pda/utility/toggle_door)
+ messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/detonate)
+
+/obj/item/weapon/cartridge/syndicate/New()
+ var/datum/data/pda/utility/toggle_door/D = programs[1]
+ if(istype(D))
+ D.remote_door_id = initial_remote_door_id
+
+/obj/item/weapon/cartridge/proc/post_status(var/command, var/data1, var/data2)
+
+ var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
+ if(!frequency) return
+
+ var/datum/signal/status_signal = new
+ status_signal.source = src
+ status_signal.transmission_method = TRANSMISSION_RADIO
+ status_signal.data["command"] = command
+
+ switch(command)
+ if("message")
+ status_signal.data["msg1"] = data1
+ status_signal.data["msg2"] = data2
+ if(loc)
+ var/obj/item/PDA = loc
+ var/mob/user = PDA.fingerprintslast
+ log_admin("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]")
+ message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]")
+
+ if("alert")
+ status_signal.data["picture_state"] = data1
+
+ frequency.post_signal(src, status_signal)
+
+/obj/item/weapon/cartridge/frame
+ name = "F.R.A.M.E. cartridge"
+ icon_state = "cart"
+ charges = 5
+ messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/frame)
+>>>>>>> 462f961... Merge pull request #7869 from Atermonera/mind_telecrystals
diff --git a/code/modules/pda/messenger_plugins.dm b/code/modules/pda/messenger_plugins.dm
index 90cb9460a48..dd77e621a05 100644
--- a/code/modules/pda/messenger_plugins.dm
+++ b/code/modules/pda/messenger_plugins.dm
@@ -85,7 +85,4 @@
P.lock_code = lock_code
// else
// P.hidden_uplink.hidden_crystals += P.hidden_uplink.uses //Temporarially hide the PDA's crystals, so you can't steal telecrystals.
- var/obj/item/weapon/cartridge/frame/parent_cart = pda.cartridge
- P.hidden_uplink.uses = parent_cart.telecrystals
- parent_cart.telecrystals = 0
P.hidden_uplink.active = TRUE