From c5bc50a422bae70681f4795f64663ffff9b976af Mon Sep 17 00:00:00 2001
From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Date: Thu, 20 Jun 2024 04:38:25 -0500
Subject: [PATCH] Wallets and Bank Cards (#2979)
## About The Pull Request
Makes wallets part of the outfit shit and splits money behavior of
access cards into bank cards
## Why It's Good For The Game
## Changelog
:cl:
add: Bank accounts are now handled through cash cards! You now spawn
with a wallet to store your extra card!
/:cl:
---
.../icemoon_underground_abandoned_village.dmm | 1 -
.../RockRuins/rockplanet_shippingdock.dmm | 2 +-
code/__DEFINES/is_helpers.dm | 2 +
code/datums/outfit.dm | 13 +-
code/game/machinery/{Beacon.dm => beacon.dm} | 0
code/game/machinery/bounty_board.dm | 10 +-
code/game/machinery/computer/cloning.dm | 4 +-
.../{droneDispenser.dm => drone_dispenser.dm} | 0
code/game/machinery/roulette_machine.dm | 14 +-
.../game/machinery/{Sleeper.dm => sleeper.dm} | 0
.../game/objects/effects/spawners/lootdrop.dm | 8 +-
code/game/objects/items/bank_card.dm | 160 +++++++++++
code/game/objects/items/cards_ids.dm | 193 +------------
code/game/objects/items/storage/wallets.dm | 5 +
.../crates_lockers/crates/secure.dm | 8 +-
code/game/objects/structures/displaycase.dm | 6 +-
.../antagonists/traitor/syndicate_contract.dm | 4 +-
code/modules/awaymissions/corpse.dm | 4 +-
.../modules/client/loadout/loadout_general.dm | 4 -
.../clothing/outfits/factions/independent.dm | 4 -
.../clothing/outfits/factions/nanotrasen.dm | 1 -
.../clothing/outfits/factions/syndicate.dm | 11 +-
code/modules/economy/account.dm | 12 +-
code/modules/economy/pay_stand.dm | 8 +-
code/modules/jobs/access.dm | 3 +
code/modules/jobs/job_types/_job.dm | 21 +-
code/modules/jobs/job_types/bartender.dm | 2 +-
code/modules/mining/machine_redemption.dm | 2 +-
code/modules/mob/living/carbon/alien/alien.dm | 1 -
.../mob/living/carbon/carbon_defines.dm | 1 +
.../mob/living/carbon/human/human_defines.dm | 1 -
.../mob/living/carbon/human/human_helpers.dm | 20 +-
.../mob/living/carbon/human/species.dm | 4 +-
code/modules/mob/living/carbon/inventory.dm | 3 +
code/modules/mob/mob.dm | 18 +-
.../file_system/programs/bounty_board.dm | 4 +-
.../file_system/programs/cargoship.dm | 10 +-
.../modular_computers/hardware/card_slot.dm | 1 +
.../modular_computers/laptop_vendor.dm | 4 +-
code/modules/recycling/sortingmachinery.dm | 4 +-
code/modules/research/bepis.dm | 10 +-
code/modules/shuttle/shuttle_rotate.dm | 4 -
code/modules/shuttle/special.dm | 257 ------------------
code/modules/shuttle/white_ship.dm | 5 -
code/modules/vending/_vending.dm | 18 +-
shiptest.dme | 9 +-
46 files changed, 321 insertions(+), 555 deletions(-)
rename code/game/machinery/{Beacon.dm => beacon.dm} (100%)
rename code/game/machinery/{droneDispenser.dm => drone_dispenser.dm} (100%)
rename code/game/machinery/{Sleeper.dm => sleeper.dm} (100%)
create mode 100644 code/game/objects/items/bank_card.dm
delete mode 100644 code/modules/shuttle/special.dm
delete mode 100644 code/modules/shuttle/white_ship.dm
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm
index aabd7f4769961..06d6a8e9fd271 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm
@@ -437,7 +437,6 @@
/obj/item/clothing/under/rank/cargo/miner,
/obj/item/clothing/suit/hooded/wintercoat/miner,
/obj/item/clothing/shoes/winterboots,
-/obj/item/card/id/mining,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood,
/area/ruin/powered)
diff --git a/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm b/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm
index f4307cf7a84bf..6bb4f2e48c990 100644
--- a/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm
+++ b/_maps/RandomRuins/RockRuins/rockplanet_shippingdock.dmm
@@ -2068,7 +2068,7 @@
"sa" = (
/obj/effect/turf_decal/rechargefloor,
/obj/effect/turf_decal/industrial/warning/dust,
-/obj/effect/spawner/lootdrop/whiteship_cere_ripley,
+/obj/effect/spawner/lootdrop/ripley,
/turf/open/floor/plasteel/mono/dark,
/area/ruin/rockplanet/shippingdockwarehouse)
"sc" = (
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 2ba7553f823c4..241136c297b9a 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -176,6 +176,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isidcard(I) (istype(I, /obj/item/card/id))
+#define isbankcard(I) (istype(I, /obj/item/card/bank))
+
#define isstructure(A) (istype(A, /obj/structure))
#define ismachinery(A) (istype(A, /obj/machinery))
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index 34771af91ed22..15a580a893286 100644
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -50,9 +50,13 @@
/// Type path of item to go in the glasses slot
var/glasses = null
+ var/wallet = null
+
/// Type path of item to go in the idcard slot
var/id = null
+ var/bank_card = null
+
/// Type path of item for left pocket slot
var/l_pocket = null
@@ -180,8 +184,13 @@
H.equip_to_slot_or_del(new ears(H),ITEM_SLOT_EARS, TRUE)
if(glasses)
H.equip_to_slot_or_del(new glasses(H),ITEM_SLOT_EYES, TRUE)
- if(id)
- H.equip_to_slot_or_del(new id(H),ITEM_SLOT_ID, TRUE)
+ if(!visualsOnly)
+ if(wallet)
+ H.equip_to_slot_or_del(new wallet(H),ITEM_SLOT_ID, TRUE)
+ if(id)
+ H.equip_to_slot_or_del(new id(H),ITEM_SLOT_ID, TRUE)
+ if(bank_card)
+ H.equip_to_slot_or_del(new bank_card(H),ITEM_SLOT_ID, TRUE)
if(suit_store)
H.equip_to_slot_or_del(new suit_store(H),ITEM_SLOT_SUITSTORE, TRUE)
diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/beacon.dm
similarity index 100%
rename from code/game/machinery/Beacon.dm
rename to code/game/machinery/beacon.dm
diff --git a/code/game/machinery/bounty_board.dm b/code/game/machinery/bounty_board.dm
index b0991110e80d4..4cc3413fe9d9f 100644
--- a/code/game/machinery/bounty_board.dm
+++ b/code/game/machinery/bounty_board.dm
@@ -33,8 +33,8 @@ GLOBAL_LIST_EMPTY(request_list)
/obj/machinery/bounty_board/attackby(obj/item/I, mob/living/user, params)
. = ..()
- if(istype(I,/obj/item/card/id))
- var/obj/item/card/id/current_card = I
+ if(istype(I,/obj/item/card/bank))
+ var/obj/item/card/bank/current_card = I
if(current_card.registered_account)
current_user = current_card.registered_account
return TRUE
@@ -72,9 +72,9 @@ GLOBAL_LIST_EMPTY(request_list)
if(request.applicants)
for(var/datum/bank_account/j in request.applicants)
formatted_applicants += list(list("name" = j.account_holder, "request_id" = request.owner_account.account_id, "requestee_id" = j.account_id))
- var/obj/item/card/id/id_card = user.get_idcard()
- if(id_card?.registered_account)
- current_user = id_card.registered_account
+ var/obj/item/card/bank/bank_card = user.get_bankcard()
+ if(bank_card?.registered_account)
+ current_user = bank_card.registered_account
if(current_user)
data["accountName"] = current_user.account_holder
data["requests"] = formatted_requests
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 0fe059653d5ca..3916ad0d4b005 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -534,9 +534,7 @@
if(ishuman(mob_occupant))
dna = C.has_dna()
- var/obj/item/card/id/I = C.get_idcard(TRUE)
- if(I)
- has_bank_account = I.registered_account
+ has_bank_account = C.get_bank_account()
if(isbrain(mob_occupant))
dna = B.stored_dna
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/drone_dispenser.dm
similarity index 100%
rename from code/game/machinery/droneDispenser.dm
rename to code/game/machinery/drone_dispenser.dm
diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm
index 351f1c42ae5e8..a36bf79a41b33 100644
--- a/code/game/machinery/roulette_machine.dm
+++ b/code/game/machinery/roulette_machine.dm
@@ -39,7 +39,7 @@
var/chosen_bet_type = "0"
var/last_anti_spam = 0
var/anti_spam_cooldown = 20
- var/obj/item/card/id/my_card
+ var/obj/item/card/bank/my_card
var/playing = FALSE
var/locked = FALSE
var/drop_dir = SOUTH
@@ -81,7 +81,7 @@
data["Spinning"] = playing
if(ishuman(user))
var/mob/living/carbon/human/H = user
- var/obj/item/card/id/C = H.get_idcard(TRUE)
+ var/obj/item/card/bank/C = H.get_bankcard()
if(C)
data["AccountBalance"] = C.registered_account.account_balance
else
@@ -114,7 +114,7 @@
return
if(playing)
return ..()
- if(istype(W, /obj/item/card/id))
+ if(istype(W, /obj/item/card/bank))
playsound(src, 'sound/machines/card_slide.ogg', 50, TRUE)
if(machine_stat & MAINT || !on || locked)
@@ -122,7 +122,7 @@
return FALSE
if(my_card)
- var/obj/item/card/id/player_card = W
+ var/obj/item/card/bank/player_card = W
if(player_card.registered_account.account_balance < chosen_bet_amount) //Does the player have enough funds
audible_message("You do not have the funds to play! Lower your bet or get more money.")
playsound(src, 'sound/machines/buzz-two.ogg', 30, TRUE)
@@ -167,7 +167,7 @@
addtimer(CALLBACK(src, PROC_REF(play), user, player_card, chosen_bet_type, chosen_bet_amount, potential_payout), 4) //Animation first
return TRUE
else
- var/obj/item/card/id/new_card = W
+ var/obj/item/card/bank/new_card = W
if(new_card.registered_account)
var/msg = stripped_input(user, "Name of your roulette wheel:", "Roulette Naming", "Roulette Machine")
if(!msg)
@@ -181,7 +181,7 @@
return ..()
///Proc called when player is going to try and play
-/obj/machinery/roulette/proc/play(mob/user, obj/item/card/id/player_id, bet_type, bet_amount, potential_payout)
+/obj/machinery/roulette/proc/play(mob/user, obj/item/card/bank/player_id, bet_type, bet_amount, potential_payout)
var/payout = potential_payout
@@ -203,7 +203,7 @@
playsound(src, 'sound/machines/piston_lower.ogg', 70)
///Ran after a while to check if the player won or not.
-/obj/machinery/roulette/proc/finish_play(obj/item/card/id/player_id, bet_type, bet_amount, potential_payout, rolled_number)
+/obj/machinery/roulette/proc/finish_play(obj/item/card/bank/player_id, bet_type, bet_amount, potential_payout, rolled_number)
last_spin = rolled_number
var/is_winner = check_win(bet_type, bet_amount, rolled_number) //Predetermine if we won
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/sleeper.dm
similarity index 100%
rename from code/game/machinery/Sleeper.dm
rename to code/game/machinery/sleeper.dm
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index d763c46e84e95..08d1514f7bbe6 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -468,12 +468,18 @@
/obj/structure/salvageable/destructive_analyzer
)
+/obj/effect/spawner/lootdrop/ripley
+ name = "25% mech 75% wreckage ripley spawner"
+ loot = list(/obj/mecha/working/ripley/mining = 1,
+ /obj/structure/mecha_wreckage/ripley = 5)
+ lootdoubles = FALSE
+
/obj/effect/spawner/lootdrop/salvage_50
name = "50% salvage spawner"
loot = list(
/obj/effect/spawner/lootdrop/maintenance = 13,
/obj/effect/spawner/lootdrop/salvage_machine = 12,
- /obj/effect/spawner/lootdrop/whiteship_cere_ripley = 12,
+ /obj/effect/spawner/lootdrop/ripley = 12,
/obj/structure/closet/crate/secure/loot = 13,
"" = 50
)
diff --git a/code/game/objects/items/bank_card.dm b/code/game/objects/items/bank_card.dm
new file mode 100644
index 0000000000000..4a7f2f9d2f210
--- /dev/null
+++ b/code/game/objects/items/bank_card.dm
@@ -0,0 +1,160 @@
+/obj/item/card/bank
+ name = "cash card"
+ desc = "Managed by a bank outside the sector."
+ icon_state = "data_1"
+ var/mining_points = 0 //For redeeming at mining equipment vendors
+
+ var/registered_name = null // The name registered_name on the card
+ var/datum/bank_account/registered_account
+ var/obj/machinery/paystand/my_store
+
+/obj/item/card/bank/Destroy()
+ if (registered_account)
+ registered_account.bank_cards -= src
+ if (my_store && my_store.my_card == src)
+ my_store.my_card = null
+ return ..()
+
+/obj/item/card/bank/attackby(obj/item/W, mob/user, params)
+ if(istype(W, /obj/item/holochip))
+ insert_money(W, user)
+ return
+ else if(istype(W, /obj/item/spacecash/bundle))
+ insert_money(W, user, TRUE)
+ return
+ else if(istype(W, /obj/item/coin))
+ insert_money(W, user, TRUE)
+ return
+ else if(istype(W, /obj/item/storage/bag/money))
+ var/obj/item/storage/bag/money/money_bag = W
+ var/list/money_contained = money_bag.contents
+
+ var/money_added = mass_insert_money(money_contained, user)
+
+ if (money_added)
+ to_chat(user, "You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account.")
+ return
+ else
+ return ..()
+
+/obj/item/card/bank/proc/insert_money(obj/item/I, mob/user, physical_currency)
+ var/cash_money = I.get_item_credit_value()
+ if(!cash_money)
+ to_chat(user, "[I] doesn't seem to be worth anything!")
+ return
+
+ if(!registered_account)
+ to_chat(user, "[src] doesn't have a linked account to deposit [I] into!")
+ return
+
+ registered_account.adjust_money(cash_money)
+ SSblackbox.record_feedback("amount", "credits_inserted", cash_money)
+ log_econ("[cash_money] credits were inserted into [src] owned by [src.registered_name]")
+ if(physical_currency)
+ to_chat(user, "You stuff [I] into [src]. It disappears in a small puff of bluespace smoke, adding [cash_money] credits to the linked account.")
+ else
+ to_chat(user, "You insert [I] into [src], adding [cash_money] credits to the linked account.")
+
+ to_chat(user, "The linked account now reports a balance of [registered_account.account_balance] cr.")
+ qdel(I)
+
+/obj/item/card/bank/proc/mass_insert_money(list/money, mob/user)
+ if (!money || !money.len)
+ return FALSE
+
+ var/total = 0
+
+ for (var/obj/item/physical_money in money)
+ var/cash_money = physical_money.get_item_credit_value()
+
+ total += cash_money
+
+ registered_account.adjust_money(cash_money)
+ SSblackbox.record_feedback("amount", "credits_inserted", total)
+ log_econ("[total] credits were inserted into [src] owned by [src.registered_name]")
+ QDEL_LIST(money)
+
+ return total
+
+/obj/item/card/bank/proc/alt_click_can_use_id(mob/living/user)
+ if(!isliving(user))
+ return
+ if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return
+
+ return TRUE
+
+// Returns true if new account was set.
+/obj/item/card/bank/proc/set_new_account(mob/living/user)
+ . = FALSE
+ var/datum/bank_account/old_account = registered_account
+
+ var/new_bank_id = input(user, "Enter your account ID number.", "Account Reclamation", 111111) as num | null
+
+ if (isnull(new_bank_id))
+ return
+
+ if(!alt_click_can_use_id(user))
+ return
+ if(!new_bank_id || new_bank_id < 111111 || new_bank_id > 999999)
+ to_chat(user, "The account ID number needs to be between 111111 and 999999.")
+ return
+ if (registered_account && registered_account.account_id == new_bank_id)
+ to_chat(user, "The account ID was already assigned to this card.")
+ return
+
+ for(var/A in SSeconomy.bank_accounts)
+ var/datum/bank_account/B = A
+ if(B.account_id == new_bank_id)
+ if (old_account)
+ old_account.bank_cards -= src
+
+ B.bank_cards += src
+ registered_account = B
+ to_chat(user, "The provided account has been linked to this ID card.")
+
+ return TRUE
+
+ to_chat(user, "The account ID number provided is invalid.")
+ return
+
+/obj/item/card/bank/AltClick(mob/living/user)
+ if(!alt_click_can_use_id(user))
+ return
+
+ if(!registered_account)
+ set_new_account(user)
+ return
+
+ var/amount_to_remove = FLOOR(input(user, "How much do you want to withdraw? Current Balance: [registered_account.account_balance]", "Withdraw Funds", 5) as num|null, 1)
+
+ if(!amount_to_remove || amount_to_remove < 0)
+ return
+ if(!alt_click_can_use_id(user))
+ return
+ if(registered_account.adjust_money(-amount_to_remove))
+ var/obj/item/holochip/holochip = new (user.drop_location(), amount_to_remove)
+ user.put_in_hands(holochip)
+ to_chat(user, "You withdraw [amount_to_remove] credits into a holochip.")
+ SSblackbox.record_feedback("amount", "credits_removed", amount_to_remove)
+ log_econ("[amount_to_remove] credits were removed from [src] owned by [registered_account.account_holder]")
+ return
+ else
+ var/difference = amount_to_remove - registered_account.account_balance
+ registered_account.bank_card_talk("ERROR: The linked account requires [difference] more credit\s to perform that withdrawal.", TRUE)
+
+/obj/item/card/bank/examine(mob/user)
+ . = ..()
+ if(registered_account)
+ . += "The account linked to the ID belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr."
+ . += "The card indicates that the holder is [registered_account.holder_age] years old. [(registered_account.holder_age < AGE_MINOR) ? "There's a holographic stripe that reads 'MINOR: DO NOT SERVE ALCOHOL OR TOBACCO' along the bottom of the card." : ""]"
+ . += "Alt-Click the ID to pull money from the linked account in the form of holochips."
+ . += "You can insert credits into the linked account by pressing holochips, cash, or coins against the ID."
+ . += "If you lose this ID card, you can reclaim your account by Alt-Clicking a blank ID card while holding it and entering your account ID number."
+ else
+ . += "There is no registered account linked to this card. Alt-Click to add one."
+ if(mining_points)
+ . += "There's [mining_points] mining equipment redemption point\s loaded onto this card."
+
+/obj/item/card/bank/GetBankCard()
+ return src
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 110121dc08e29..ae7aa27cdc3f1 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -149,14 +149,12 @@
slot_flags = ITEM_SLOT_ID
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
resistance_flags = FIRE_PROOF | ACID_PROOF
- var/mining_points = 0 //For redeeming at mining equipment vendors
var/list/access = list()
var/list/ship_access = list()
var/registered_name = null // The name registered_name on the card
var/assignment = null
var/access_txt // mapping aid
- var/datum/bank_account/registered_account
- var/obj/machinery/paystand/my_store
+ //var/datum/bank_account/registered_account
var/uses_overlays = TRUE
var/icon/cached_flat_icon
var/registered_age = 18 // default age for ss13 players
@@ -171,13 +169,6 @@
update_appearance()
RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, PROC_REF(update_in_wallet))
-/obj/item/card/id/Destroy()
- if (registered_account)
- registered_account.bank_cards -= src
- if (my_store && my_store.my_card == src)
- my_store.my_card = null
- return ..()
-
/obj/item/card/id/attack_self(mob/user)
if(Adjacent(user))
var/id_message = "\the [initial(name)] "
@@ -201,173 +192,29 @@
if(NAMEOF(src, assignment),NAMEOF(src, registered_name),NAMEOF(src, registered_age))
update_label()
-/obj/item/card/id/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/holochip))
- insert_money(W, user)
- return
- else if(istype(W, /obj/item/spacecash/bundle))
- insert_money(W, user, TRUE)
- return
- else if(istype(W, /obj/item/coin))
- insert_money(W, user, TRUE)
- return
- else if(istype(W, /obj/item/storage/bag/money))
- var/obj/item/storage/bag/money/money_bag = W
- var/list/money_contained = money_bag.contents
-
- var/money_added = mass_insert_money(money_contained, user)
-
- if (money_added)
- to_chat(user, "You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account.")
- return
- else
- return ..()
-
-/obj/item/card/id/proc/insert_money(obj/item/I, mob/user, physical_currency)
- var/cash_money = I.get_item_credit_value()
- if(!cash_money)
- to_chat(user, "[I] doesn't seem to be worth anything!")
- return
-
- if(!registered_account)
- to_chat(user, "[src] doesn't have a linked account to deposit [I] into!")
- return
-
- registered_account.adjust_money(cash_money)
- SSblackbox.record_feedback("amount", "credits_inserted", cash_money)
- log_econ("[cash_money] credits were inserted into [src] owned by [src.registered_name]")
- if(physical_currency)
- to_chat(user, "You stuff [I] into [src]. It disappears in a small puff of bluespace smoke, adding [cash_money] credits to the linked account.")
- else
- to_chat(user, "You insert [I] into [src], adding [cash_money] credits to the linked account.")
-
- to_chat(user, "The linked account now reports a balance of [registered_account.account_balance] cr.")
- qdel(I)
-
-/obj/item/card/id/proc/mass_insert_money(list/money, mob/user)
- if (!money || !money.len)
- return FALSE
-
- var/total = 0
-
- for (var/obj/item/physical_money in money)
- var/cash_money = physical_money.get_item_credit_value()
-
- total += cash_money
-
- registered_account.adjust_money(cash_money)
- SSblackbox.record_feedback("amount", "credits_inserted", total)
- log_econ("[total] credits were inserted into [src] owned by [src.registered_name]")
- QDEL_LIST(money)
-
- return total
-
-/obj/item/card/id/proc/alt_click_can_use_id(mob/living/user)
- if(!isliving(user))
- return
- if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return
-
- return TRUE
-
-// Returns true if new account was set.
-/obj/item/card/id/proc/set_new_account(mob/living/user)
- . = FALSE
- var/datum/bank_account/old_account = registered_account
-
- var/new_bank_id = input(user, "Enter your account ID number.", "Account Reclamation", 111111) as num | null
-
- if (isnull(new_bank_id))
- return
-
- if(!alt_click_can_use_id(user))
- return
- if(!new_bank_id || new_bank_id < 111111 || new_bank_id > 999999)
- to_chat(user, "The account ID number needs to be between 111111 and 999999.")
- return
- if (registered_account && registered_account.account_id == new_bank_id)
- to_chat(user, "The account ID was already assigned to this card.")
- return
-
- for(var/A in SSeconomy.bank_accounts)
- var/datum/bank_account/B = A
- if(B.account_id == new_bank_id)
- if (old_account)
- old_account.bank_cards -= src
-
- B.bank_cards += src
- registered_account = B
- to_chat(user, "The provided account has been linked to this ID card.")
-
- return TRUE
-
- to_chat(user, "The account ID number provided is invalid.")
- return
-
-/obj/item/card/id/AltClick(mob/living/user)
- if(!alt_click_can_use_id(user))
- return
-
- if(!registered_account)
- set_new_account(user)
- return
-
- var/amount_to_remove = FLOOR(input(user, "How much do you want to withdraw? Current Balance: [registered_account.account_balance]", "Withdraw Funds", 5) as num|null, 1)
-
- if(!amount_to_remove || amount_to_remove < 0)
- return
- if(!alt_click_can_use_id(user))
- return
- if(registered_account.adjust_money(-amount_to_remove))
- var/obj/item/holochip/holochip = new (user.drop_location(), amount_to_remove)
- user.put_in_hands(holochip)
- to_chat(user, "You withdraw [amount_to_remove] credits into a holochip.")
- SSblackbox.record_feedback("amount", "credits_removed", amount_to_remove)
- log_econ("[amount_to_remove] credits were removed from [src] owned by [src.registered_name]")
- return
- else
- var/difference = amount_to_remove - registered_account.account_balance
- registered_account.bank_card_talk("ERROR: The linked account requires [difference] more credit\s to perform that withdrawal.", TRUE)
-
/obj/item/card/id/examine(mob/user)
. = ..()
- . += "There's more information below, you can look again to take a closer look..."
-
-/obj/item/card/id/examine_more(mob/user)
- var/list/msg = list("You examine [src] closer, and note the following...")
-
+ . += "
CARD INFO:"
if(registered_name)
- msg += "NAME:"
- msg += "[registered_name]"
+ . += "NAME:"
+ . += "[registered_name]"
if(registered_age)
- msg += "AGE:"
- msg += "[registered_age] years old [(registered_age < AGE_MINOR) ? "There's a holographic stripe that reads 'MINOR: DO NOT SERVE ALCOHOL OR TOBACCO' along the bottom of the card." : ""]"
+ . += "AGE:"
+ . += "[registered_age] years old [(registered_age < AGE_MINOR) ? "There's a holographic stripe that reads 'MINOR: DO NOT SERVE ALCOHOL OR TOBACCO' along the bottom of the card." : ""]"
if(length(ship_access))
- msg += "SHIP ACCESS:"
+ . += "SHIP ACCESS:"
var/list/ship_factions = list()
for(var/datum/overmap/ship/controlled/ship in ship_access)
var/faction = ship.get_faction()
if(!(faction in ship_factions))
ship_factions += faction
- msg += "[ship_factions.Join(", ")]"
+ . += "[ship_factions.Join(", ")]"
var/list/ship_names = list()
for(var/datum/overmap/ship/controlled/ship in ship_access)
ship_names += ship.name
- msg += "[ship_names.Join(", ")]"
-
- if(registered_account)
- msg += "ACCOUNT:"
- msg += "LINKED ACCOUNT HOLDER: '[registered_account.account_holder]'"
- msg += "BALANCE: [registered_account.account_balance] cr."
- msg += "Alt-click the ID to pull money from the account in the form of holochips."
- msg += "You can insert credits into the account by pressing holochips, cash, or coins against the ID."
- if(registered_account.account_holder == user.real_name)
- msg += "If you lose this ID card, you can reclaim your account by Alt-click a blank ID card and entering your account ID number."
- else
- msg += "There is no registered account. Alt-click to add one."
- return msg
+ . += "[ship_names.Join(", ")]"
/obj/item/card/id/GetAccess()
return access
@@ -483,7 +330,7 @@ update_label()
else
return ..()
- var/popup_input = alert(user, "Choose Action", "Agent ID", "Show", "Forge/Reset", "Change Account ID")
+ var/popup_input = alert(user, "Choose Action", "Agent ID", "Show", "Forge/Reset")
if(user.incapacitated())
return
if(popup_input == "Forge/Reset" && !forged)
@@ -513,17 +360,6 @@ update_label()
to_chat(user, "You successfully forge the ID card.")
log_game("[key_name(user)] has forged \the [initial(name)] with name \"[registered_name]\" and occupation \"[assignment]\".")
- // First time use automatically sets the account id to the user.
- if (first_use && !registered_account)
- if(ishuman(user))
- var/mob/living/carbon/human/accountowner = user
-
- for(var/bank_account in SSeconomy.bank_accounts)
- var/datum/bank_account/account = bank_account
- if(account.account_id == accountowner.account_id)
- account.bank_cards += src
- registered_account = account
- to_chat(user, "Your account number has been automatically assigned.")
return
else if (popup_input == "Forge/Reset" && forged)
registered_name = initial(registered_name)
@@ -535,9 +371,6 @@ update_label()
forged = FALSE
to_chat(user, "You successfully reset the ID card.")
return
- else if (popup_input == "Change Account ID")
- set_new_account(user)
- return
return ..()
/obj/item/card/id/syndicate/anyone
@@ -552,7 +385,6 @@ update_label()
icon_state = "syndie"
access = list(ACCESS_SYNDICATE)
uses_overlays = FALSE
- registered_age = null
/obj/item/card/id/syndicate_command/crew_id
assignment = "Operative"
@@ -740,11 +572,6 @@ update_label()
registered_name = "Prisoner #13-007"
icon_state = "prisoner_007"
-/obj/item/card/id/mining
- name = "mining ID"
- access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MECH_MINING, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM)
- custom_price = 250
-
/obj/item/card/id/away
name = "\proper a perfectly generic identification card"
desc = "A perfectly generic identification card. Looks like it could use some flavor."
diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm
index 91f47f56cdd54..c031e998cdcc0 100644
--- a/code/game/objects/items/storage/wallets.dm
+++ b/code/game/objects/items/storage/wallets.dm
@@ -117,6 +117,11 @@
else
return ..()
+/obj/item/storage/wallet/GetBankCard()
+ for(var/obj/item/card/I in contents)
+ if(istype(I, /obj/item/card/bank))
+ return I
+
/obj/item/storage/wallet/random
icon_state = "random_wallet"
diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm
index cdd98f22196f0..77d75164b185d 100644
--- a/code/game/objects/structures/crates_lockers/crates/secure.dm
+++ b/code/game/objects/structures/crates_lockers/crates/secure.dm
@@ -83,10 +83,10 @@
/obj/structure/closet/crate/secure/owned/togglelock(mob/living/user, silent)
if(privacy_lock)
if(!broken)
- var/obj/item/card/id/id_card = user.get_idcard(TRUE)
- if(id_card)
- if(id_card.registered_account)
- if(id_card.registered_account == buyer_account)
+ var/obj/item/card/bank/bank_card = user.get_bankcard()
+ if(bank_card)
+ if(bank_card.registered_account)
+ if(bank_card.registered_account == buyer_account)
if(iscarbon(user))
add_fingerprint(user)
locked = !locked
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 37c8163359778..4e95b55588429 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -422,7 +422,7 @@
. = ..()
if(.)
return
- var/obj/item/card/id/potential_acc = usr.get_idcard(hand_first = TRUE)
+ var/obj/item/card/bank/potential_acc = usr.get_bankcard()
switch(action)
if("Buy")
if(!showpiece)
@@ -497,9 +497,9 @@
return TRUE
. = TRUE
/obj/structure/displaycase/forsale/attackby(obj/item/I, mob/living/user, params)
- if(isidcard(I))
+ if(isbankcard(I))
//Card Registration
- var/obj/item/card/id/potential_acc = I
+ var/obj/item/card/bank/potential_acc = I
if(!potential_acc.registered_account)
to_chat(user, "This ID card has no account registered!")
return
diff --git a/code/modules/antagonists/traitor/syndicate_contract.dm b/code/modules/antagonists/traitor/syndicate_contract.dm
index a6edcb0753611..d6bbba3593031 100644
--- a/code/modules/antagonists/traitor/syndicate_contract.dm
+++ b/code/modules/antagonists/traitor/syndicate_contract.dm
@@ -143,10 +143,10 @@
// Pay contractor their portion of ransom
if (status == CONTRACT_STATUS_COMPLETE)
var/mob/living/carbon/human/H
- var/obj/item/card/id/C
+ var/obj/item/card/bank/C
if(ishuman(contract.owner.current))
H = contract.owner.current
- C = H.get_idcard(TRUE)
+ C = H.get_bankcard()
if(C && C.registered_account)
C.registered_account.adjust_money(ransom * 0.35, "syndicate_contract")
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 11358938bd47a..0bf0b74c715af 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -224,7 +224,7 @@
C.sensor_mode = NO_SENSORS
- var/obj/item/card/id/W = H.wear_id
+ var/obj/item/card/id/W = H.get_idcard()
if(W)
if(H.age)
W.registered_age = H.age
@@ -437,7 +437,7 @@
/datum/outfit/spacebartender/post_equip(mob/living/carbon/human/H, visualsOnly)
. = ..()
- var/obj/item/card/id/W = H.wear_id
+ var/obj/item/card/id/W = H.get_idcard()
if(H.age < AGE_MINOR)
W.registered_age = AGE_MINOR
to_chat(H, "You're not technically old enough to access or serve alcohol, but your ID has been discreetly modified to display your age as [AGE_MINOR]. Try to keep that a secret!")
diff --git a/code/modules/client/loadout/loadout_general.dm b/code/modules/client/loadout/loadout_general.dm
index 4c081a67e92fb..6277a8a3a6016 100644
--- a/code/modules/client/loadout/loadout_general.dm
+++ b/code/modules/client/loadout/loadout_general.dm
@@ -62,10 +62,6 @@
display_name = "toy, magic eight ball"
path = /obj/item/toy/eightball
-/datum/gear/wallet
- display_name = "wallet"
- path = /obj/item/storage/wallet
-
/datum/gear/pai
display_name = "personal AI device"
path = /obj/item/paicard
diff --git a/code/modules/clothing/outfits/factions/independent.dm b/code/modules/clothing/outfits/factions/independent.dm
index 24b3201573d3a..db227c2903c75 100644
--- a/code/modules/clothing/outfits/factions/independent.dm
+++ b/code/modules/clothing/outfits/factions/independent.dm
@@ -6,8 +6,6 @@
box = /obj/item/storage/box/survival
id = /obj/item/card/id
- r_pocket = /obj/item/storage/wallet
-
// Assistant
/datum/outfit/job/independent/assistant
@@ -314,7 +312,6 @@
jobtype = /datum/job/engineer
belt = /obj/item/storage/belt/utility/full/engi
- l_pocket = /obj/item/storage/wallet
gloves = /obj/item/clothing/gloves/color/yellow
ears = /obj/item/radio/headset/headset_eng
uniform = /obj/item/clothing/under/rank/engineering/engineer
@@ -393,7 +390,6 @@
id = /obj/item/card/id/silver
belt = /obj/item/storage/belt/utility/chief/full
- l_pocket = /obj/item/storage/wallet
ears = /obj/item/radio/headset/headset_com
uniform = /obj/item/clothing/under/rank/engineering/chief_engineer
dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering
diff --git a/code/modules/clothing/outfits/factions/nanotrasen.dm b/code/modules/clothing/outfits/factions/nanotrasen.dm
index 93f1ee3a347c4..e93c7b4b8e52d 100644
--- a/code/modules/clothing/outfits/factions/nanotrasen.dm
+++ b/code/modules/clothing/outfits/factions/nanotrasen.dm
@@ -220,7 +220,6 @@
id = /obj/item/card/id/silver
belt = /obj/item/storage/belt/utility/chief/full
- l_pocket = /obj/item/storage/wallet
ears = /obj/item/radio/headset/headset_com
uniform = /obj/item/clothing/under/nanotrasen/engineering/director
dcoat = /obj/item/clothing/suit/hooded/wintercoat/engineering
diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm
index 5e04d87d88c68..03254ed8927ee 100644
--- a/code/modules/clothing/outfits/factions/syndicate.dm
+++ b/code/modules/clothing/outfits/factions/syndicate.dm
@@ -22,10 +22,11 @@
//generates a codename and assigns syndicate access, used in the twinkleshine.
/datum/outfit/job/syndicate/proc/assign_codename(mob/living/carbon/human/H)
- var/obj/item/card/id/I = H.wear_id
- I.registered_name = pick(GLOB.twinkle_names) + "-" + num2text(rand(1, 12)) // squidquest real
- I.access |= list(ACCESS_SYNDICATE)
- I.update_label()
+ var/obj/item/card/id/I = H.get_idcard()
+ if(I)
+ I.registered_name = pick(GLOB.twinkle_names) + "-" + num2text(rand(1, 12)) // squidquest real
+ I.access |= list(ACCESS_SYNDICATE)
+ I.update_label()
//and now, for the Assistants
@@ -199,7 +200,7 @@
/datum/outfit/job/syndicate/bartender/post_equip(mob/living/carbon/human/H, visualsOnly)
. = ..()
- var/obj/item/card/id/W = H.wear_id
+ var/obj/item/card/id/W = H.get_idcard()
if(H.age < AGE_MINOR)
W.registered_age = AGE_MINOR
to_chat(H, "You're not technically old enough to access or serve alcohol, but your ID has been discreetly modified to display your age as [AGE_MINOR]. Try to keep that a secret!")
diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm
index 64280475664a6..4213ae91376b1 100644
--- a/code/modules/economy/account.dm
+++ b/code/modules/economy/account.dm
@@ -1,21 +1,23 @@
/datum/bank_account
var/account_holder = "Rusty Venture"
var/account_balance = 0
+ var/holder_age = 18
var/list/bank_cards = list()
var/add_to_accounts = TRUE
var/account_id
-/datum/bank_account/New(newname, job)
+/datum/bank_account/New(newname, age)
if(add_to_accounts)
SSeconomy.bank_accounts += src
account_holder = newname
+ holder_age = age
account_id = rand(111111,999999)
/datum/bank_account/Destroy()
if(add_to_accounts)
SSeconomy.bank_accounts -= src
- for(var/obj/item/card/id/id_card as anything in bank_cards)
- id_card.registered_account = null
+ for(var/obj/item/card/bank/bank_card as anything in bank_cards)
+ bank_card.registered_account = null
SSeconomy.bank_money -= account_balance
return ..()
@@ -49,10 +51,6 @@
return
for(var/obj/A in bank_cards)
var/icon_source = A
- if(istype(A, /obj/item/card/id))
- var/obj/item/card/id/id_card = A
- if(id_card.uses_overlays)
- icon_source = id_card.get_cached_flat_icon()
var/mob/card_holder = recursive_loc_check(A, /mob)
if(ismob(card_holder)) //If on a mob
if(!card_holder.client || (!(card_holder.client.prefs.chat_toggles & CHAT_BANKCARD) && !force))
diff --git a/code/modules/economy/pay_stand.dm b/code/modules/economy/pay_stand.dm
index af7d9be4b947c..9382a03d062ec 100644
--- a/code/modules/economy/pay_stand.dm
+++ b/code/modules/economy/pay_stand.dm
@@ -6,14 +6,14 @@
density = TRUE
anchored = TRUE
var/locked = FALSE
- var/obj/item/card/id/my_card
+ var/obj/item/card/bank/my_card
var/obj/item/assembly/signaler/signaler //attached signaler, let people attach signalers that get activated if the user's transaction limit is achieved.
var/signaler_threshold = 0 //signaler threshold amount
var/amount_deposited = 0 //keep track of the amount deposited over time so you can pay multiple times to reach the signaler threshold
var/force_fee = 0 //replaces the "pay whatever" functionality with a set amount when non-zero.
/obj/machinery/paystand/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/card/id))
+ if(istype(W, /obj/item/card/bank))
if(W == my_card)
if(user.a_intent == INTENT_DISARM)
var/rename_msg = stripped_input(user, "Rename the Paystand:", "Paystand Naming", name)
@@ -31,7 +31,7 @@
to_chat(user, "You [src.locked ? "lock" : "unlock"] the paystand, protecting the bolts from [anchored ? "loosening" : "tightening"].")
return
if(!my_card)
- var/obj/item/card/id/assistant_mains_need_to_die = W
+ var/obj/item/card/bank/assistant_mains_need_to_die = W
if(!assistant_mains_need_to_die.registered_account)
return
var/msg = stripped_input(user, "Name of pay stand:", "Paystand Naming", "[user]'s Awesome Paystand")
@@ -42,7 +42,7 @@
my_card = assistant_mains_need_to_die
to_chat(user, "You link the stand to your account.")
return
- var/obj/item/card/id/vbucks = W
+ var/obj/item/card/bank/vbucks = W
if(vbucks.registered_account)
var/momsdebitcard = 0
if(!force_fee)
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index cdd44cab9ae8c..550e413f1a59d 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -44,6 +44,9 @@
/obj/item/proc/InsertID()
return FALSE
+/obj/item/proc/GetBankCard()
+ return null
+
/obj/proc/text2access(access_text)
. = list()
if(!access_text)
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index 20ad6e0897307..f850eded96d4d 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -122,7 +122,7 @@
if(!H)
return FALSE
if(!visualsOnly)
- var/datum/bank_account/bank_account = new(H.real_name, src)
+ var/datum/bank_account/bank_account = new(H.real_name, H.age)
bank_account.adjust_money(officer ? 250 : 100, "starting_money") //just a little bit of money for you
H.account_id = bank_account.account_id
@@ -179,7 +179,9 @@
var/jobtype = null
uniform = /obj/item/clothing/under/color/grey
+ wallet = /obj/item/storage/wallet
id = /obj/item/card/id
+ bank_card = /obj/item/card/bank
back = /obj/item/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
box = /obj/item/storage/box/survival
@@ -268,7 +270,7 @@
if(!J)
J = GLOB.name_occupations[H.job]
- var/obj/item/card/id/C = H.wear_id
+ var/obj/item/card/id/C = H.get_idcard(TRUE)
if(istype(C))
C.access = J.get_access()
shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable
@@ -285,14 +287,17 @@
if(id_assignment)
C.assignment = id_assignment
C.update_label()
- for(var/A in SSeconomy.bank_accounts)
- var/datum/bank_account/B = A
- if(B.account_id == H.account_id)
- C.registered_account = B
- B.bank_cards += C
- break
H.sec_hud_set_ID()
+ var/obj/item/card/bank/bank_card = H.get_bankcard()
+ if(istype(bank_card))
+ for(var/account in SSeconomy.bank_accounts)
+ var/datum/bank_account/bank_account = account
+ if(bank_account.account_id == H.account_id)
+ bank_card.registered_account = bank_account
+ bank_account.bank_cards += bank_card
+ break
+
var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot)
if(istype(PDA))
PDA.owner = H.real_name
diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm
index 9c5d28e693e8a..994f34404efc7 100644
--- a/code/modules/jobs/job_types/bartender.dm
+++ b/code/modules/jobs/job_types/bartender.dm
@@ -27,7 +27,7 @@
/datum/outfit/job/bartender/post_equip(mob/living/carbon/human/H, visualsOnly)
. = ..()
- var/obj/item/card/id/W = H.wear_id
+ var/obj/item/card/id/W = H.get_idcard()
if(H.age < AGE_MINOR)
W.registered_age = AGE_MINOR
to_chat(H, "You're not technically old enough to access or serve alcohol, but your ID has been discreetly modified to display your age as [AGE_MINOR]. Try to keep that a secret!")
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index d0704887b4ea4..2b3e379691c98 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -249,7 +249,7 @@
switch(action)
if("Claim")
var/mob/M = usr
- var/obj/item/card/id/I = M.get_idcard(TRUE)
+ var/obj/item/card/bank/I = M.get_bankcard()
if(points)
if(I)
I.mining_points += points
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 11eeef8b4a8e5..d692e36345cb9 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -21,7 +21,6 @@
bubble_icon = "alien"
type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
- var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie
var/has_fine_manipulation = FALSE
status_flags = CANUNCONSCIOUS|CANPUSH
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index a7dc41b307c41..8743fe33289e8 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -27,6 +27,7 @@
var/obj/item/tank/internal = null
var/obj/item/clothing/head = null
+ var/obj/item/wear_id = null //only used by humans
var/obj/item/clothing/gloves = null ///only used by humans
var/obj/item/clothing/shoes/shoes = null ///only used by humans.
var/obj/item/clothing/glasses/glasses = null ///only used by humans.
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 6556335c2bdb4..567523c11d792 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -54,7 +54,6 @@
var/obj/item/clothing/wear_suit = null
var/obj/item/clothing/w_uniform = null
var/obj/item/belt = null
- var/obj/item/wear_id = null
var/obj/item/r_store = null
var/obj/item/l_store = null
var/obj/item/s_store = null
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 5d8264c14ac3c..9e2cfe4f1556e 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -101,6 +101,22 @@
if(id_card)
return id_card
+/mob/living/carbon/human/get_bankcard()
+ //Check hands
+ var/list/items_to_check = list()
+ if(get_active_held_item())
+ items_to_check += get_active_held_item()
+ if(get_inactive_held_item())
+ items_to_check += get_inactive_held_item()
+ if(wear_id)
+ items_to_check += wear_id
+ if(belt)
+ items_to_check += belt
+ for(var/obj/item/i in items_to_check)
+ var/obj/item/card/bank/bank_card = i.GetBankCard()
+ if(bank_card)
+ return bank_card
+
/mob/living/carbon/human/get_id_in_hand()
var/obj/item/held_item = get_active_held_item()
if(!held_item)
@@ -137,10 +153,10 @@
to_chat(src, "You can't bring yourself to use a ranged weapon!")
return FALSE
-/mob/living/carbon/human/proc/get_bank_account()
+/mob/living/carbon/proc/get_bank_account()
RETURN_TYPE(/datum/bank_account)
var/datum/bank_account/account
- var/obj/item/card/id/I = get_idcard()
+ var/obj/item/card/bank/I = get_bankcard()
if(I && I.registered_account)
account = I.registered_account
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index e061cd5c9793d..e2a01d29540cb 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1179,7 +1179,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(ITEM_SLOT_ID)
- if(H.wear_id && !swap)
+ if(H.wear_id)
+ if(SEND_SIGNAL(H.wear_id, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE))
+ return TRUE
return FALSE
var/obj/item/bodypart/O = H.get_bodypart(BODY_ZONE_CHEST)
diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm
index 7a995dea28dae..d5b97a942da2b 100644
--- a/code/modules/mob/living/carbon/inventory.dm
+++ b/code/modules/mob/living/carbon/inventory.dm
@@ -84,6 +84,9 @@
if(ITEM_SLOT_BACKPACK)
if(!back || !SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
not_handled = TRUE
+ if(ITEM_SLOT_ID)
+ if(!wear_id || !SEND_SIGNAL(wear_id, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE))
+ not_handled = TRUE
else
not_handled = TRUE
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index c7070a66bcdfd..06c7a9af52d85 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1202,6 +1202,7 @@
var/list/searching = GetAllContents()
var/search_id = 1
var/search_pda = 1
+ var/search_bankcard = 1
for(var/A in searching)
if(search_id && istype(A, /obj/item/card/id))
@@ -1209,18 +1210,24 @@
if(ID.registered_name == oldname)
ID.registered_name = newname
ID.update_label()
- if(ID.registered_account?.account_holder == oldname)
- ID.registered_account.account_holder = newname
- if(!search_pda)
+ if(!search_pda || !search_bankcard)
break
search_id = 0
+ if(search_bankcard && istype(A, /obj/item/card/bank))
+ var/obj/item/card/bank/bank_card = A
+ if(bank_card.registered_account?.account_holder == oldname)
+ bank_card.registered_account.account_holder = newname
+ if(!search_id || !search_pda)
+ break
+ search_bankcard = 0
+
else if(search_pda && istype(A, /obj/item/pda))
var/obj/item/pda/PDA = A
if(PDA.owner == oldname)
PDA.owner = newname
PDA.update_label()
- if(!search_id)
+ if(!search_id || !search_bankcard)
break
search_pda = 0
@@ -1303,6 +1310,9 @@
/mob/proc/get_idcard(hand_first)
return
+/mob/proc/get_bankcard()
+ return
+
/mob/proc/get_id_in_hand()
return
diff --git a/code/modules/modular_computers/file_system/programs/bounty_board.dm b/code/modules/modular_computers/file_system/programs/bounty_board.dm
index 496011cfddddf..b3b9051e5b8f0 100644
--- a/code/modules/modular_computers/file_system/programs/bounty_board.dm
+++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm
@@ -25,8 +25,8 @@
if(!networked)
GLOB.allbountyboards += computer
networked = TRUE
- if(card_slot && card_slot.stored_card && card_slot.stored_card.registered_account)
- current_user = card_slot.stored_card.registered_account
+ if(card_slot && card_slot.bank_card && card_slot.bank_card.registered_account)
+ current_user = card_slot.bank_card.registered_account
for(var/i in GLOB.request_list)
if(!i)
continue
diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm
index 1bfe53b215f2c..2aa9b68565cab 100644
--- a/code/modules/modular_computers/file_system/programs/cargoship.dm
+++ b/code/modules/modular_computers/file_system/programs/cargoship.dm
@@ -35,21 +35,21 @@
// Get components
var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD]
var/obj/item/computer_hardware/printer/printer = computer.all_components[MC_PRINT]
- var/obj/item/card/id/id_card = card_slot ? card_slot.stored_card : null
+ var/obj/item/card/bank/bank_card = card_slot ? card_slot.stored_card : null
if(!card_slot || !printer) //We need both to successfully use this app.
return
switch(action)
if("ejectid")
- if(id_card)
+ if(bank_card)
card_slot.try_eject(TRUE, usr)
if("selectid")
- if(!id_card)
+ if(!bank_card)
return
- if(!id_card.registered_account)
+ if(!bank_card.registered_account)
playsound(get_turf(ui_host()), 'sound/machines/buzz-sigh.ogg', 50, TRUE, -1)
return
- payments_acc = id_card.registered_account
+ payments_acc = bank_card.registered_account
playsound(get_turf(ui_host()), 'sound/machines/ping.ogg', 50, TRUE, -1)
if("resetid")
payments_acc = null
diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm
index 1acdb72f400e9..1ef62b7617f33 100644
--- a/code/modules/modular_computers/hardware/card_slot.dm
+++ b/code/modules/modular_computers/hardware/card_slot.dm
@@ -8,6 +8,7 @@
var/obj/item/card/id/stored_card
var/obj/item/card/id/stored_card2
+ var/obj/item/card/bank/bank_card
/obj/item/computer_hardware/card_slot/Exited(atom/ejected, atom/newloc)
if(!(ejected == stored_card || ejected == stored_card2))
diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm
index eb363de157921..b1ec3d3edc16f 100644
--- a/code/modules/modular_computers/laptop_vendor.dm
+++ b/code/modules/modular_computers/laptop_vendor.dm
@@ -248,10 +248,10 @@
visible_message("[user] inserts a [HC.credits] cr holocredit chip into [src].")
qdel(HC)
return
- else if(istype(I, /obj/item/card/id))
+ else if(istype(I, /obj/item/card/bank))
if(state != 2)
return
- var/obj/item/card/id/ID = I
+ var/obj/item/card/bank/ID = I
var/datum/bank_account/account = ID.registered_account
var/target_credits = total_price - credits
if(!account.adjust_money(-target_credits, "laptop_vendor"))
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 77525a1f309e4..96e027a55476a 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -388,8 +388,8 @@
/obj/item/sales_tagger/attackby(obj/item/I, mob/living/user, params)
. = ..()
- if(istype(I, /obj/item/card/id))
- var/obj/item/card/id/potential_acc = I
+ if(isbankcard(I))
+ var/obj/item/card/bank/potential_acc = I
if(potential_acc.registered_account)
payments_acc = potential_acc.registered_account
playsound(src, 'sound/machines/ping.ogg', 40, TRUE)
diff --git a/code/modules/research/bepis.dm b/code/modules/research/bepis.dm
index a033b59b56ae5..bb56a69adf2bb 100644
--- a/code/modules/research/bepis.dm
+++ b/code/modules/research/bepis.dm
@@ -58,11 +58,11 @@
say("Deposited [deposit_value] credits into storage.")
update_icon_state()
return
- if(istype(O, /obj/item/card/id))
- var/obj/item/card/id/Card = O
- if(Card.registered_account)
- account = Card.registered_account
- account_name = Card.registered_name
+ if(istype(O, /obj/item/card/bank))
+ var/obj/item/card/bank/bank_card = O
+ if(bank_card.registered_account)
+ account = bank_card.registered_account
+ account_name = bank_card.registered_name
say("New account detected. Console Updated.")
else
say("No account detected on card. Aborting.")
diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm
index d0b4b49a92f6e..31e650a90a318 100644
--- a/code/modules/shuttle/shuttle_rotate.dm
+++ b/code/modules/shuttle/shuttle_rotate.dm
@@ -70,10 +70,6 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate
new_dpdir = new_dpdir | angle2dir(rotation+dir2angle(D))
dpdir = new_dpdir
-/obj/structure/table/wood/bar/shuttleRotate(rotation, params)
- . = ..()
- boot_dir = angle2dir(rotation + dir2angle(boot_dir))
-
/obj/structure/alien/weeds/shuttleRotate(rotation, params)
params &= ~ROTATE_OFFSET
return ..()
diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm
deleted file mode 100644
index 1ddb26efba883..0000000000000
--- a/code/modules/shuttle/special.dm
+++ /dev/null
@@ -1,257 +0,0 @@
-// Special objects for shuttle templates go here if nowhere else
-
-// Bar staff, GODMODE mobs(as long as they stay in the shuttle) that just want to make sure people have drinks
-// and a good time.
-
-/mob/living/simple_animal/drone/snowflake/bardrone
- name = "Bardrone"
- desc = "A barkeeping drone, a robot built to tend bars."
- hacked = TRUE
- laws = "1. Serve drinks.\n\
- 2. Talk to patrons.\n\
- 3. Don't get messed up in their affairs."
- unique_name = FALSE // disables the (123) number suffix
- initial_language_holder = /datum/language_holder/universal
-
-/mob/living/simple_animal/drone/snowflake/bardrone/Initialize()
- . = ..()
- access_card.access |= ACCESS_CENT_BAR
- become_area_sensitive(ROUNDSTART_TRAIT)
- RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(check_barstaff_godmode))
- check_barstaff_godmode()
-
-/mob/living/simple_animal/drone/snowflake/bardrone/Destroy()
- lose_area_sensitivity(ROUNDSTART_TRAIT)
- return ..()
-
-/mob/living/simple_animal/hostile/alien/maid/barmaid
- gold_core_spawnable = NO_SPAWN
- name = "Barmaid"
- desc = "A barmaid, a maiden found in a bar."
- pass_flags = PASSTABLE
- unique_name = FALSE
- AIStatus = AI_OFF
- stop_automated_movement = TRUE
- initial_language_holder = /datum/language_holder/universal
-
-/mob/living/simple_animal/hostile/alien/maid/barmaid/Initialize()
- . = ..()
- access_card = new /obj/item/card/id(src)
- var/datum/job/captain/C = new /datum/job/captain
- access_card.access = C.get_access()
- access_card.access |= ACCESS_CENT_BAR
- ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
- become_area_sensitive(ROUNDSTART_TRAIT)
- RegisterSignal(src, COMSIG_ENTER_AREA, PROC_REF(check_barstaff_godmode))
- check_barstaff_godmode()
-
-/mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy()
- qdel(access_card)
- lose_area_sensitivity(ROUNDSTART_TRAIT)
- return ..()
-
-/mob/living/simple_animal/proc/check_barstaff_godmode()
- SIGNAL_HANDLER
-
- if(istype(get_area(loc), /area/shuttle/escape))
- status_flags |= GODMODE
- else
- status_flags &= ~GODMODE
-
-// Bar table, a wooden table that kicks you in a direction if you're not
-// barstaff (defined as someone who was a roundstart bartender or someone
-// with CENTCOM_BARSTAFF)
-
-/obj/structure/table/wood/bar
- resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- flags_1 = NODECONSTRUCT_1
- max_integrity = 1000
- var/boot_dir = 1
-
-/obj/structure/table/wood/bar/Initialize()
- . = ..()
- var/static/list/loc_connections = list(
- COMSIG_ATOM_ENTERED = PROC_REF(on_entered)
- )
- AddElement(/datum/element/connect_loc, loc_connections)
-
-/obj/structure/table/wood/bar/proc/on_entered(datum/source, atom/movable/AM)
- SIGNAL_HANDLER
- if(isliving(AM) && !is_barstaff(AM))
- // No climbing on the bar please
- var/mob/living/M = AM
- var/throwtarget = get_edge_target_turf(src, boot_dir)
- M.Paralyze(40)
- M.throw_at(throwtarget, 5, 1)
- to_chat(M, "No climbing on the bar please.")
-
-/obj/structure/table/wood/bar/proc/is_barstaff(mob/living/user)
- . = FALSE
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.mind && H.mind.assigned_role == "Bartender")
- return TRUE
-
- var/obj/item/card/id/ID = user.get_idcard(FALSE)
- if(ID && (ACCESS_CENT_BAR in ID.access))
- return TRUE
-
-//Luxury Shuttle Blockers
-
-/obj/machinery/scanner_gate/luxury_shuttle
- name = "luxury shuttle ticket field"
- density = FALSE //allows shuttle airlocks to close, nothing but an approved passenger gets past CanPass
- locked = TRUE
- use_power = FALSE
- var/threshold = 500
- var/static/list/approved_passengers = list()
- var/static/list/check_times = list()
- var/list/payees = list()
-
-/obj/machinery/scanner_gate/luxury_shuttle/CanAllowThrough(atom/movable/mover, border_dir)
- . = ..()
-
- if(mover in approved_passengers)
- set_scanline("scanning", 10)
- return TRUE
-
- if(!isliving(mover)) //No stowaways
- return FALSE
-
-/obj/machinery/scanner_gate/luxury_shuttle/auto_scan(atom/movable/AM)
- return
-
-/obj/machinery/scanner_gate/luxury_shuttle/attackby(obj/item/W, mob/user, params)
- return
-
-/obj/machinery/scanner_gate/luxury_shuttle/emag_act(mob/user)
- return
-
-#define LUXURY_MESSAGE_COOLDOWN 100
-/obj/machinery/scanner_gate/luxury_shuttle/Bumped(atom/movable/AM)
- if(!isliving(AM))
- alarm_beep()
- return ..()
-
- var/datum/bank_account/account
- if(istype(AM.pulling, /obj/item/card/id))
- var/obj/item/card/id/I = AM.pulling
- if(I.registered_account)
- account = I.registered_account
- else if(!check_times[AM] || check_times[AM] < world.time) //Let's not spam the message
- to_chat(AM, "This ID card doesn't have an owner associated with it!")
- check_times[AM] = world.time + LUXURY_MESSAGE_COOLDOWN
- else if(ishuman(AM))
- var/mob/living/carbon/human/H = AM
- if(H.get_bank_account())
- account = H.get_bank_account()
-
- if(account)
- if(account.account_balance < threshold - payees[AM])
- account.adjust_money(-account.account_balance, "luxury_shuttle")
- payees[AM] += account.account_balance
- else
- var/money_owed = threshold - payees[AM]
- account.adjust_money(-money_owed)
- payees[AM] += money_owed
-
- var/list/counted_money = list()
-
- for(var/obj/item/coin/C in AM.GetAllContents())
- if(payees[AM] >= threshold)
- break
- payees[AM] += C.value
- counted_money += C
- for(var/obj/item/spacecash/bundle/S in AM.GetAllContents())
- if(payees[AM] >= threshold)
- break
- payees[AM] += S.value
- counted_money += S
- for(var/obj/item/holochip/H in AM.GetAllContents())
- if(payees[AM] >= threshold)
- break
- payees[AM] += H.credits
- counted_money += H
-
- if(payees[AM] < threshold && istype(AM.pulling, /obj/item/coin))
- var/obj/item/coin/C = AM.pulling
- payees[AM] += C.value
- counted_money += C
-
- else if(payees[AM] < threshold && istype(AM.pulling, /obj/item/spacecash/bundle))
- var/obj/item/spacecash/bundle/S = AM.pulling
- payees[AM] += S.value
- counted_money += S
-
- else if(payees[AM] < threshold && istype(AM.pulling, /obj/item/holochip))
- var/obj/item/holochip/H = AM.pulling
- payees[AM] += H.credits
- counted_money += H
-
- if(payees[AM] < threshold)
- var/armless
- if(!ishuman(AM) && !istype(AM, /mob/living/simple_animal/slime))
- armless = TRUE
- else
- var/mob/living/carbon/human/H = AM
- if(!H.get_bodypart(BODY_ZONE_L_ARM) && !H.get_bodypart(BODY_ZONE_R_ARM))
- armless = TRUE
-
- if(armless)
- if(!AM.pulling || !iscash(AM.pulling) && !istype(AM.pulling, /obj/item/card/id))
- if(!check_times[AM] || check_times[AM] < world.time) //Let's not spam the message
- to_chat(AM, "Try pulling a valid ID, space cash, holochip or coin into \the [src]!")
- check_times[AM] = world.time + LUXURY_MESSAGE_COOLDOWN
-
- if(payees[AM] >= threshold)
- for(var/obj/I in counted_money)
- qdel(I)
- payees[AM] -= threshold
-
- var/change = FALSE
- if(payees[AM] > 0)
- change = TRUE
- var/obj/item/holochip/HC = new /obj/item/holochip(AM.loc)
- HC.credits = payees[AM]
- HC.name = "[HC.credits] credit holochip"
- if(istype(AM, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = AM
- if(!H.put_in_hands(HC))
- AM.pulling = HC
- else
- AM.pulling = HC
- payees[AM] -= payees[AM]
-
- say("Welcome to first class, [AM]![change ? " Here is your change." : ""]")
- approved_passengers += AM
-
- check_times -= AM
- return
- else if (payees[AM] > 0)
- for(var/obj/I in counted_money)
- qdel(I)
- if(!check_times[AM] || check_times[AM] < world.time) //Let's not spam the message
- to_chat(AM, "[payees[AM]] cr received. You need [threshold-payees[AM]] cr more.")
- check_times[AM] = world.time + LUXURY_MESSAGE_COOLDOWN
- alarm_beep()
- return ..()
- else
- alarm_beep()
- return ..()
-
-/mob/living/simple_animal/hostile/bear/fightpit
- name = "fight pit bear"
- desc = "This bear's trained through ancient Solarian secrets to fear the walls of its glass prison."
- environment_smash = ENVIRONMENT_SMASH_NONE
-
-/obj/effect/decal/hammerandsickle
- name = "hammer and sickle"
- desc = "Communism powerful force."
- icon = 'icons/effects/96x96.dmi'
- icon_state = "communist"
- layer = ABOVE_OPEN_TURF_LAYER
- pixel_x = -32
- pixel_y = -32
-
-/obj/effect/decal/hammerandsickle/shuttleRotate(rotation)
- setDir(angle2dir(rotation+dir2angle(dir))) // No parentcall, rest of the rotate code breaks the pixel offset.
diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm
deleted file mode 100644
index 71afa1c9bc72f..0000000000000
--- a/code/modules/shuttle/white_ship.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/effect/spawner/lootdrop/whiteship_cere_ripley
- name = "25% mech 75% wreckage ripley spawner"
- loot = list(/obj/mecha/working/ripley/mining = 1,
- /obj/structure/mecha_wreckage/ripley = 5)
- lootdoubles = FALSE
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 4c97b3f7eaa2f..6d73fad566f6e 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -714,15 +714,13 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/machinery/vending/ui_data(mob/user)
. = list()
var/mob/living/carbon/human/H
- var/obj/item/card/id/card
+ var/obj/item/card/bank/card
if(ishuman(user))
H = user
- card = H.get_idcard(TRUE)
+ card = H.get_bankcard()
if(card)
.["user"] = list()
.["user"]["points"] = card.mining_points
- .["user"]["name"] = card.registered_name
- .["user"]["job"] = card.assignment || "No Job"
if(card.registered_account)
.["user"]["name"] = card.registered_account.account_holder
.["user"]["cash"] = card.registered_account.account_balance
@@ -769,7 +767,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
return
if(!all_items_free && ishuman(usr))
var/mob/living/carbon/human/H = usr
- var/obj/item/card/id/C = H.get_idcard(TRUE)
+ var/obj/item/card/bank/C = H.get_bankcard()
if(!C)
say("No card found.")
@@ -946,10 +944,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/machinery/vending/custom/compartmentLoadAccessCheck(mob/user)
. = FALSE
var/mob/living/carbon/human/H
- var/obj/item/card/id/C
+ var/obj/item/card/bank/C
if(ishuman(user))
H = user
- C = H.get_idcard(FALSE)
+ C = H.get_bankcard(FALSE)
if(C?.registered_account && C.registered_account == private_a)
return TRUE
@@ -1003,7 +1001,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
vend_ready = FALSE
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
- var/obj/item/card/id/C = H.get_idcard(TRUE)
+ var/obj/item/card/bank/C = H.get_bankcard()
if(!C)
say("No card found.")
@@ -1055,10 +1053,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/machinery/vending/custom/attackby(obj/item/I, mob/user, params)
if(!private_a)
var/mob/living/carbon/human/H
- var/obj/item/card/id/C
+ var/obj/item/card/bank/C
if(ishuman(user))
H = user
- C = H.get_idcard(TRUE)
+ C = H.get_bankcard(TRUE)
if(C?.registered_account)
private_a = C.registered_account
say("\The [src] has been linked to [C].")
diff --git a/shiptest.dme b/shiptest.dme
index 1d6ce93fbf22d..b29930a658ee7 100644
--- a/shiptest.dme
+++ b/shiptest.dme
@@ -866,7 +866,7 @@
#include "code\game\machinery\aug_manipulator.dm"
#include "code\game\machinery\autolathe.dm"
#include "code\game\machinery\bank_machine.dm"
-#include "code\game\machinery\Beacon.dm"
+#include "code\game\machinery\beacon.dm"
#include "code\game\machinery\bounty_board.dm"
#include "code\game\machinery\buttons.dm"
#include "code\game\machinery\cell_charger.dm"
@@ -879,7 +879,7 @@
#include "code\game\machinery\dish_drive.dm"
#include "code\game\machinery\dna_scanner.dm"
#include "code\game\machinery\doppler_array.dm"
-#include "code\game\machinery\droneDispenser.dm"
+#include "code\game\machinery\drone_dispenser.dm"
#include "code\game\machinery\exp_cloner.dm"
#include "code\game\machinery\firealarm.dm"
#include "code\game\machinery\flasher.dm"
@@ -910,7 +910,7 @@
#include "code\game\machinery\scan_gate.dm"
#include "code\game\machinery\sheetifier.dm"
#include "code\game\machinery\shieldgen.dm"
-#include "code\game\machinery\Sleeper.dm"
+#include "code\game\machinery\sleeper.dm"
#include "code\game\machinery\slotmachine.dm"
#include "code\game\machinery\spaceheater.dm"
#include "code\game\machinery\stasis.dm"
@@ -1114,6 +1114,7 @@
#include "code\game\objects\items\AI_modules.dm"
#include "code\game\objects\items\airlock_painter.dm"
#include "code\game\objects\items\apc_frame.dm"
+#include "code\game\objects\items\bank_card.dm"
#include "code\game\objects\items\bell.dm"
#include "code\game\objects\items\binoculars.dm"
#include "code\game\objects\items\blueprints.dm"
@@ -3277,9 +3278,7 @@
#include "code\modules\shuttle\ripple.dm"
#include "code\modules\shuttle\shuttle.dm"
#include "code\modules\shuttle\shuttle_rotate.dm"
-#include "code\modules\shuttle\special.dm"
#include "code\modules\shuttle\supply.dm"
-#include "code\modules\shuttle\white_ship.dm"
#include "code\modules\spells\spell.dm"
#include "code\modules\spells\spell_types\aimed.dm"
#include "code\modules\spells\spell_types\area_teleport.dm"