diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 69b7f8e9d0..072dd88bee 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -36,7 +36,7 @@ if(!W) return W.access |= default_access W.assignment = "[assignment]" - W.set_owner_info(player) + player.set_id_info(W) if(equip) player.equip_to_slot_or_del(W, slot_wear_id) return W diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm index 0fd5fb2a93..d4999f0183 100644 --- a/code/game/antagonist/antagonist_update.dm +++ b/code/game/antagonist/antagonist_update.dm @@ -19,8 +19,7 @@ /datum/antagonist/proc/update_access(var/mob/living/player) for(var/obj/item/weapon/card/id/id in player.contents) - id.name = "[player.real_name]'s ID Card" - id.registered_name = player.real_name + player.set_id_info(id) /datum/antagonist/proc/update_all_icons() if(!antag_indicator) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index ff994e8cd3..f375755982 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -528,7 +528,7 @@ var/global/datum/controller/occupations/job_master if(C) C.rank = rank C.assignment = title ? title : rank - C.set_owner_info(H) + H.set_id_info(C) //put the player's account number onto the ID if(H.mind && H.mind.initial_account) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 65324f5555..739583ede8 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -223,6 +223,9 @@ mob/living/proc/near_camera() /mob/living/proc/tracking_status() // Easy checks first. // Don't detect mobs on Centcom. Since the wizard den is on Centcomm, we only need this. + var/obj/item/weapon/card/id/id = GetIdCard() + if(id && id.prevent_tracking()) + return TRACKING_TERMINATE if(InvalidPlayerTurf(get_turf(src))) return TRACKING_TERMINATE if(invisibility >= INVISIBILITY_LEVEL_ONE) //cloaked @@ -240,14 +243,8 @@ mob/living/proc/near_camera() if(. == TRACKING_NO_COVERAGE) return camera && camera.can_use() ? TRACKING_POSSIBLE : TRACKING_NO_COVERAGE -/mob/living/silicon/robot/syndicate/tracking_status() - return TRACKING_TERMINATE - /mob/living/carbon/human/tracking_status() //Cameras can't track people wearing an agent card or a ninja hood. - var/obj/item/weapon/card/id/id = GetIdCard(src) - if(id && id.prevent_tracking()) - return TRACKING_TERMINATE if(istype(head, /obj/item/clothing/head/helmet/space/rig)) var/obj/item/clothing/head/helmet/space/rig/helmet = head if(helmet.prevent_track()) diff --git a/code/game/objects/items/devices/uplink_items.dm b/code/game/objects/items/devices/uplink_items.dm index 939292a6d6..88361ab7b0 100644 --- a/code/game/objects/items/devices/uplink_items.dm +++ b/code/game/objects/items/devices/uplink_items.dm @@ -616,7 +616,7 @@ var/image/default_abstract_uplink_icon if(!user) return 0 - var/obj/item/weapon/card/id/I = GetIdCard(user) + var/obj/item/weapon/card/id/I = user.GetIdCard() var/datum/data/record/random_general_record var/datum/data/record/random_medical_record if(data_core.general.len) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 6eabb2bd1e..1dc489d75e 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -33,6 +33,8 @@ R.notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, R.module.name) R.module.Reset(R) + qdel(R.module) + R.module = null R.updatename("Default") return 1 diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index ae6bcbdf0c..a63a0f14cb 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -137,17 +137,26 @@ front = getFlatIcon(M, SOUTH, always_use_defdir = 1) side = getFlatIcon(M, WEST, always_use_defdir = 1) -/obj/item/weapon/card/id/proc/set_owner_info(var/mob/living/carbon/human/H) - if(!H || !H.dna) - return - age = H.age - blood_type = H.dna.b_type - dna_hash = H.dna.unique_enzymes - fingerprint_hash = md5(H.dna.uni_identity) - registered_name = H.real_name - sex = capitalize(H.gender) - set_id_photo(H) - update_name() +/mob/proc/set_id_info(var/obj/item/weapon/card/id/id_card) + id_card.age = 0 + id_card.registered_name = real_name + id_card.sex = capitalize(gender) + id_card.set_id_photo(src) + + if(dna) + id_card.blood_type = dna.b_type + id_card.dna_hash = dna.unique_enzymes + id_card.fingerprint_hash= md5(dna.uni_identity) + id_card.update_name() + +/mob/living/silicon/set_id_info(var/obj/item/weapon/card/id/id_card) + id_card.assignment = "Synthetic" + id_card.rank = "Synthetic" + ..() + +/mob/living/carbon/human/set_id_info(var/obj/item/weapon/card/id/id_card) + ..() + id_card.age = age /obj/item/weapon/card/id/proc/dat() var/dat = ("
| ") diff --git a/code/game/objects/items/weapons/cards_ids_syndicate.dm b/code/game/objects/items/weapons/cards_ids_syndicate.dm index 2475c93534..1642766a0e 100644 --- a/code/game/objects/items/weapons/cards_ids_syndicate.dm +++ b/code/game/objects/items/weapons/cards_ids_syndicate.dm @@ -6,12 +6,11 @@ var/global/list/syndicate_ids = list() origin_tech = list(TECH_ILLEGAL = 3) var/electronic_warfare = 1 var/registered_user = null - var/list/initial_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks) /obj/item/weapon/card/id/syndicate/New(mob/user as mob) syndicate_ids += src ..() - access = initial_access.Copy() + access = syndicate_access.Copy() /obj/item/weapon/card/id/syndicate/Destroy() syndicate_ids -= src @@ -39,7 +38,7 @@ var/global/list/syndicate_ids = list() /obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob) if(!registered_user) registered_user = user - set_owner_info(user) + user.set_id_info(src) user << "The microscanner marks you as its owner, preventing others some accessing its internals." if(registered_user == user) switch(alert("Would you like edit the ID, or show it?","Show or Edit?", "Edit","Show")) @@ -163,7 +162,7 @@ var/global/list/syndicate_ids = list() if("Factory Reset") if(alert("This will factory reset the card, including access and owner. Continue?", "Factory Reset", "No", "Yes") == "Yes" && CanUseTopic(user, state)) age = initial(age) - access = initial_access.Copy() + access = syndicate_access.Copy() assignment = initial(assignment) blood_type = initial(blood_type) dna_hash = initial(dna_hash) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 6cd91f07ef..09fd236be0 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -74,7 +74,7 @@ W.access = list() if(corpseidjob) W.assignment = corpseidjob - W.set_owner_info(M) + M.set_id_info(W) M.equip_to_slot_or_del(W, slot_wear_id) qdel(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index d1a719356d..08e56dc905 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -53,8 +53,6 @@ var/global/list/robot_modules = list( R.choose_icon(R.module_sprites.len + 1, R.module_sprites) /obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R) - R.module = null - remove_camera_networks(R) remove_languages(R) remove_subsystems(R) @@ -64,15 +62,15 @@ var/global/list/robot_modules = list( R.radio.recalculateChannels() R.choose_icon(0, R.set_module_sprites(list("Default" = "robot"))) - qdel(src) - /obj/item/weapon/robot_module/Destroy() - qdel(modules) - qdel(synths) + for(var/module in modules) + qdel(module) + for(var/synth in synths) + qdel(synths) + modules.Cut() + synths.Cut() qdel(emag) qdel(jetpack) - modules = null - synths = null emag = null jetpack = null return ..() @@ -624,6 +622,7 @@ var/global/list/robot_modules = list( sprites = list( "Dread" = "securityrobot", ) + var/id /obj/item/weapon/robot_module/syndicate/New(var/mob/living/silicon/robot/R) ..() @@ -635,8 +634,16 @@ var/global/list/robot_modules = list( var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += jetpack R.internals = jetpack + + id = R.idcard + src.modules += id return +/obj/item/weapon/robot_module/syndicate/Destroy() + src.modules -= id + id = null + return ..() + /obj/item/weapon/robot_module/security/combat name = "combat robot module" sprites = list("Combat Android" = "droid-combat") diff --git a/code/modules/mob/living/silicon/robot/syndicate.dm b/code/modules/mob/living/silicon/robot/syndicate.dm index bf6dc64588..af46cd6fcf 100644 --- a/code/modules/mob/living/silicon/robot/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/syndicate.dm @@ -4,6 +4,7 @@ icon_state = "securityrobot" modtype = "Security" lawchannel = "State" + idcard_type = /obj/item/weapon/card/id/syndicate /mob/living/silicon/robot/syndicate/New() if(!cell) @@ -14,11 +15,11 @@ ..() /mob/living/silicon/robot/syndicate/init() - idcard = new/obj/item/weapon/card/id/syndicate(src) aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) laws = new /datum/ai_laws/syndicate_override overlays.Cut() + init_id() new /obj/item/weapon/robot_module/syndicate(src) radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index ab08029f50..ac3feba076 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -25,6 +25,7 @@ var/list/access_rights var/obj/item/weapon/card/id/idcard + var/idcard_type = /obj/item/weapon/card/id/captains_spare #define SEC_HUD 1 //Security HUD mode #define MED_HUD 2 //Medical HUD mode @@ -33,9 +34,8 @@ silicon_mob_list |= src ..() add_language("Galactic Common") + init_id() init_subsystems() - if(!idcard) - idcard = new/obj/item/weapon/card/id/captains_spare(src) /mob/living/silicon/Destroy() silicon_mob_list -= src @@ -43,6 +43,12 @@ AH.unregister(src) ..() +/mob/living/silicon/proc/init_id() + if(idcard) + return + idcard = new idcard_type(src) + set_id_info(idcard) + /mob/living/silicon/proc/SetName(pickedName as text) real_name = pickedName name = real_name |