diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm
index b5869ef36b..21fb70c38c 100644
--- a/code/game/machinery/computer/teleporter.dm
+++ b/code/game/machinery/computer/teleporter.dm
@@ -130,12 +130,12 @@
L[avoid_assoc_duplicate_keys(A.name, areaindex)] = R
for(var/obj/item/implant/tracking/I in GLOB.tracked_implants)
- if(!I.imp_in || !isliving(I.imp_in))
+ if(!I.imp_in || !I.allow_teleport || !isliving(I.imp_in))
continue
else
var/mob/living/M = I.imp_in
if(M.stat == DEAD)
- if(M.timeofdeath + 6000 < world.time)
+ if(M.timeofdeath + I.lifespan_postmortem < world.time)
continue
if(is_eligible(M))
L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = M
diff --git a/code/game/objects/items/implants/implant_track.dm b/code/game/objects/items/implants/implant_track.dm
index 4b7ae3bbac..4f81432a39 100644
--- a/code/game/objects/items/implants/implant_track.dm
+++ b/code/game/objects/items/implants/implant_track.dm
@@ -1,7 +1,19 @@
/obj/item/implant/tracking
name = "tracking implant"
desc = "Track with this."
- activated = 0
+ activated = FALSE
+ var/lifespan_postmortem = 10 MINUTES //for how many deciseconds after user death will the implant work?
+ var/allow_teleport = TRUE //will people implanted with this act as teleporter beacons?
+
+/obj/item/implant/tracking/c38
+ name = "TRAC implant"
+ desc = "A smaller tracking implant that supplies power for only a few minutes."
+ var/lifespan = 5 MINUTES //how many deciseconds does the implant last?
+ allow_teleport = FALSE
+
+/obj/item/implant/tracking/c38/Initialize()
+ . = ..()
+ QDEL_IN(src, lifespan)
/obj/item/implant/tracking/Initialize()
. = ..()
@@ -45,7 +57,7 @@
var/dat = {"Implant Specifications:
Name: Tracking Beacon
Life: 10 minutes after death of host
- Important Notes: None
+ Important Notes: Implant also works as a teleporter beacon.
Implant Details:
Function: Continuously transmits low power signal. Useful for tracking.
diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm
index e16b0dd690..e0e875b739 100644
--- a/code/game/objects/items/teleportation.dm
+++ b/code/game/objects/items/teleportation.dm
@@ -79,7 +79,7 @@
continue
var/mob/living/M = W.imp_in
if (M.stat == DEAD)
- if (M.timeofdeath + 6000 < world.time)
+ if (M.timeofdeath + W.lifespan_postmortem < world.time)
continue
var/turf/tr = get_turf(M)
diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm
index b45d01d7d8..6232ca4d69 100644
--- a/code/modules/projectiles/ammunition/ballistic/revolver.dm
+++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm
@@ -6,6 +6,11 @@
caliber = "357"
projectile_type = /obj/item/projectile/bullet/a357
+/obj/item/ammo_casing/a357/ap
+ name = ".357 armor-piercing bullet casing"
+ desc = "A .357 armor-piercing bullet casing."
+ projectile_type = /obj/item/projectile/bullet/a357/ap
+
// 7.62x38mmR (Nagant Revolver)
/obj/item/ammo_casing/n762
@@ -20,9 +25,26 @@
name = ".38 rubber bullet casing"
desc = "A .38 rubber bullet casing."
caliber = "38"
- projectile_type = /obj/item/projectile/bullet/c38
+ projectile_type = /obj/item/projectile/bullet/c38/rubber
/obj/item/ammo_casing/c38/lethal
name = ".38 bullet casing"
desc = "A .38 bullet casing"
- projectile_type = /obj/item/projectile/bullet/c38lethal
+ projectile_type = /obj/item/projectile/bullet/c38
+
+/obj/item/ammo_casing/c38/trac
+ name = ".38 TRAC bullet casing"
+ desc = "A .38 \"TRAC\" bullet casing."
+ projectile_type = /obj/item/projectile/bullet/c38/trac
+
+/obj/item/ammo_casing/c38/hotshot
+ name = ".38 Hot Shot bullet casing"
+ desc = "A .38 Hot Shot bullet casing."
+ caliber = "38"
+ projectile_type = /obj/item/projectile/bullet/c38/hotshot
+
+/obj/item/ammo_casing/c38/iceblox
+ name = ".38 Iceblox bullet casing"
+ desc = "A .38 Iceblox bullet casing."
+ caliber = "38"
+ projectile_type = /obj/item/projectile/bullet/c38/iceblox
\ No newline at end of file
diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
index 7cd27e8592..ba6a8e2454 100644
--- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
+++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
@@ -3,13 +3,19 @@
desc = "Designed to quickly reload revolvers."
icon_state = "357"
ammo_type = /obj/item/ammo_casing/a357
+ caliber = "357"
max_ammo = 7
multiple_sprites = 1
+/obj/item/ammo_box/a357/ap
+ name = "speed loader (.357 AP)"
+ ammo_type = /obj/item/ammo_casing/a357/ap
+
/obj/item/ammo_box/c38
name = "speed loader (.38 rubber)"
desc = "Designed to quickly reload revolvers."
icon_state = "38"
+ caliber = "38"
ammo_type = /obj/item/ammo_casing/c38
max_ammo = 6
multiple_sprites = 1
@@ -19,6 +25,21 @@
name = "speed loader (.38)"
ammo_type = /obj/item/ammo_casing/c38/lethal
+/obj/item/ammo_box/c38/trac
+ name = "speed loader (.38 TRAC)"
+ desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body."
+ ammo_type = /obj/item/ammo_casing/c38/trac
+
+/obj/item/ammo_box/c38/hotshot
+ name = "speed loader (.38 Hot Shot)"
+ desc = "Designed to quickly reload revolvers. Hot Shot bullets contain an incendiary payload."
+ ammo_type = /obj/item/ammo_casing/c38/hotshot
+
+/obj/item/ammo_box/c38/iceblox
+ name = "speed loader (.38 Iceblox)"
+ desc = "Designed to quickly reload revolvers. Iceblox bullets contain a cryogenic payload."
+ ammo_type = /obj/item/ammo_casing/c38/iceblox
+
/obj/item/ammo_box/c9mm
name = "ammo box (9mm)"
icon_state = "9mmbox"
diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm
index d3af474d76..3bbfe437fe 100644
--- a/code/modules/projectiles/projectile/bullets/revolver.dm
+++ b/code/modules/projectiles/projectile/bullets/revolver.dm
@@ -13,16 +13,59 @@
// .38 (Detective's Gun)
/obj/item/projectile/bullet/c38
+ name = ".38 bullet"
+ damage = 25
+
+/obj/item/projectile/bullet/c38/rubber
name = ".38 rubber bullet"
damage = 15
stamina = 48
-/obj/item/projectile/bullet/c38lethal
- name = ".38 bullet"
- damage = 25
+/obj/item/projectile/bullet/c38/trac
+ name = ".38 TRAC bullet"
+ damage = 10
+
+/obj/item/projectile/bullet/c38/trac/on_hit(atom/target, blocked = FALSE)
+ . = ..()
+ var/mob/living/carbon/M = target
+ var/obj/item/implant/tracking/c38/imp
+ for(var/obj/item/implant/tracking/c38/TI in M.implants) //checks if the target already contains a tracking implant
+ imp = TI
+ return
+ if(!imp)
+ imp = new /obj/item/implant/tracking/c38(M)
+ imp.implant(M)
+
+/obj/item/projectile/bullet/c38/hotshot //similar to incendiary bullets, but do not leave a flaming trail
+ name = ".38 Hot Shot bullet"
+ damage = 20
+
+/obj/item/projectile/bullet/c38/hotshot/on_hit(atom/target, blocked = FALSE)
+ . = ..()
+ if(iscarbon(target))
+ var/mob/living/carbon/M = target
+ M.adjust_fire_stacks(6)
+ M.IgniteMob()
+
+/obj/item/projectile/bullet/c38/iceblox //see /obj/item/projectile/temp for the original code
+ name = ".38 Iceblox bullet"
+ damage = 20
+ var/temperature = 100
+
+/obj/item/projectile/bullet/c38/iceblox/on_hit(atom/target, blocked = FALSE)
+ . = ..()
+ if(isliving(target))
+ var/mob/living/M = target
+ M.adjust_bodytemperature(((100-blocked)/100)*(temperature - M.bodytemperature))
+
// .357 (Syndie Revolver)
/obj/item/projectile/bullet/a357
name = ".357 bullet"
damage = 60
+
+/obj/item/projectile/bullet/a357/ap
+ name = ".357 armor-piercing bullet"
+ damage = 45
+ armour_penetration = 45
\ No newline at end of file
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index d69dda37ca..fde795d87c 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -17,6 +17,36 @@
id = "sec_38lethal"
build_path = /obj/item/ammo_box/c38/lethal
+/datum/design/c38_trac
+ name = "Speed Loader (.38 TRAC)"
+ desc = "Designed to quickly reload revolvers. TRAC bullets embed a tracking implant within the target's body."
+ id = "c38_trac"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 20000, MAT_SILVER = 5000, MAT_GOLD = 1000)
+ build_path = /obj/item/ammo_box/c38/trac
+ category = list("Ammo")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/c38_hotshot
+ name = "Speed Loader (.38 Hot Shot)"
+ desc = "Designed to quickly reload revolvers. Hot Shot bullets contain an incendiary payload."
+ id = "c38_hotshot"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 20000, MAT_PLASMA = 5000)
+ build_path = /obj/item/ammo_box/c38/hotshot
+ category = list("Ammo")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/c38_iceblox
+ name = "Speed Loader (.38 Iceblox)"
+ desc = "Designed to quickly reload revolvers. Iceblox bullets contain a cryogenic payload."
+ id = "c38_iceblox"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 20000, MAT_PLASMA = 5000)
+ build_path = /obj/item/ammo_box/c38/iceblox
+ category = list("Ammo")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
//////////////
//WT550 Mags//
//////////////
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index fdf887d259..4dcacdf3d5 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -517,7 +517,7 @@
display_name = "Subdermal Implants"
description = "Electronic implants buried beneath the skin."
prereq_ids = list("biotech", "datatheory")
- design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking", "locator")
+ design_ids = list("implanter", "implantcase", "implant_chem", "implant_tracking", "locator", "c38_trac")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -694,12 +694,12 @@
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2750)
export_price = 5000
-/datum/techweb_node/tech_shell
- id = "tech_shell"
- display_name = "Technological Shells"
- description = "They're more technological than regular shot."
+/datum/techweb_node/exotic_ammo
+ id = "exotic_ammo"
+ display_name = "Exotic Ammunition"
+ description = "They won't know what hit em."
prereq_ids = list("weaponry", "ballistic_weapons")
- design_ids = list("techshotshell")
+ design_ids = list("techshotshell", "c38_hotshot", "c38_iceblox")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500)
export_price = 5000
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 16a5346503..e1e385447d 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -768,10 +768,16 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \
For when you really need a lot of things dead."
item = /obj/item/ammo_box/a357
- cost = 4
+ cost = 3
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
illegal_tech = FALSE
+/datum/uplink_item/ammo/revolver/ap
+ name = ".357 Armor Piercing Speed Loader"
+ desc = "A speed loader that contains seven additional .357 AP Magnum rounds; usable with the Syndicate revolver. \
+ Cuts through like a hot knife through butter."
+ item = /obj/item/ammo_box/a357/ap
+
/datum/uplink_item/ammo/a40mm
name = "40mm Grenade"
desc = "A 40mm HE grenade for use with the M-90gl's under-barrel grenade launcher. \