diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm
index 1e97fc39c60..40244a0e900 100644
--- a/_maps/map_files/cyberiad/z6.dmm
+++ b/_maps/map_files/cyberiad/z6.dmm
@@ -625,7 +625,7 @@
"ma" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/outer)
"mb" = (/obj/effect/landmark{name = "syndi_depot_bot"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"mc" = (/obj/machinery/light{dir = 1; on = 1},/obj/item/stack/sheet/metal{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
-"md" = (/obj/item/flag/chameleon{icon_state = "syndiflag"; name = "Syndicate Flag"; used = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
+"md" = (/obj/item/flag/chameleon/depot{icon_state = "syndiflag"; name = "Syndicate Flag"; desc = "A flag proudly boasting the logo of the Syndicate, in defiance of NT."; used = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot/core)
"me" = (/turf/simulated/wall,/area/syndicate_depot/outer)
"mf" = (/obj/effect/spawner/random_spawners/syndicate/turret/external,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"mg" = (/obj/machinery/light,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index bcbfaa37a3d..0076d8ef7e5 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -907,13 +907,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 5
surplus = 8
-/datum/uplink_item/explosives/chameleonflag
- name = "Chameleon Flag"
- desc = "A flag that can be disguised as any other known flag. There is a heat sensitive bomb loaded into the pole that will be detonated if the flag is lit on fire."
- reference = "CHFLAG"
- item = /obj/item/flag/chameleon
- cost = 7
-
/datum/uplink_item/explosives/grenadier
name = "Grenadier's belt"
desc = "A belt containing 25 lethally dangerous and destructive grenades."
@@ -977,6 +970,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 1
surplus = 35
+/datum/uplink_item/stealthy_tools/chameleonflag
+ name = "Chameleon Flag"
+ desc = "A flag that can be disguised as any other known flag. There is a hidden spot in the pole to boobytrap the flag with a grenade or minibomb, which will detonate some time after the flag is set on fire."
+ reference = "CHFLAG"
+ item = /obj/item/flag/chameleon
+ cost = 1
+ surplus = 35
+
/datum/uplink_item/stealthy_tools/syndigaloshes
name = "No-Slip Syndicate Shoes"
desc = "These allow you to run on wet floors. They do not work on lubricated surfaces."
diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm
index 4aadebe0dcc..4f8abd4ac49 100644
--- a/code/game/objects/items/flag.dm
+++ b/code/game/objects/items/flag.dm
@@ -205,6 +205,8 @@
origin_tech = "syndicate=4;magnets=4"
var/updated_icon_state = null
var/used = FALSE
+ var/obj/item/grenade/boobytrap = null
+ var/mob/trapper = null
/obj/item/flag/chameleon/New()
updated_icon_state = icon_state
@@ -214,7 +216,7 @@
if(used)
return ..()
- var/list/flag_types = typesof(/obj/item/flag) - list(src.type, /obj/item/flag)
+ var/list/flag_types = typesof(/obj/item/flag) - list(/obj/item/flag, /obj/item/flag/chameleon, /obj/item/flag/chameleon/depot)
var/list/flag = list()
for(var/flag_type in flag_types)
@@ -236,9 +238,43 @@
desc = chosen_flag.desc
used = TRUE
+/obj/item/flag/chameleon/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/grenade) && !boobytrap)
+ if(user.drop_item())
+ boobytrap = I
+ trapper = user
+ I.forceMove(src)
+ to_chat(user, "You hide [I] in the [src]. It will detonate some time after the flag is lit on fire.")
+ var/turf/bombturf = get_turf(src)
+ var/area/A = get_area(bombturf)
+ message_admins("[key_name_admin(user)] has hidden [I] in the [src] ready for detonation at [A.name] (JMP).")
+ log_game("[key_name(user)] has hidden [I] in the [src] ready for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
+ investigate_log("[key_name(user)] has hidden [I] in the [src] ready for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).", INVESTIGATE_BOMB)
+ else if(isscrewdriver(I) && boobytrap && user == trapper)
+ to_chat(user, "You remove [boobytrap] from the [src].")
+ boobytrap.forceMove(get_turf(src))
+ boobytrap = null
+ trapper = null
+ else
+ ..()
+
+/obj/item/flag/chameleon/attackby(obj/item/W, mob/user, params)
+ if(is_hot(W) && burn_state != ON_FIRE && boobytrap && trapper)
+ var/turf/bombturf = get_turf(src)
+ var/area/A = get_area(bombturf)
+ message_admins("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] (JMP).")
+ log_game("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
+ investigate_log("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).", INVESTIGATE_BOMB)
+ ..()
+
/obj/item/flag/chameleon/burn()
- explosion(loc,1,2,4,4, flame_range = 4)
- qdel(src)
+ if(boobytrap)
+ boobytrap.prime()
+ ..()
/obj/item/flag/chameleon/updateFlagIcon()
icon_state = updated_icon_state
+
+/obj/item/flag/chameleon/depot/New()
+ ..()
+ boobytrap = new /obj/item/grenade/gas/plasma(src)
\ No newline at end of file