diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm
index 75b2ad94d95..3c9be2c67de 100644
--- a/code/game/objects/items/flag.dm
+++ b/code/game/objects/items/flag.dm
@@ -1,4 +1,6 @@
/obj/item/flag
+ name = "flag"
+ desc = "It's a flag."
icon = 'icons/obj/flag.dmi'
icon_state = "ntflag"
lefthand_file = 'icons/mob/inhands/flags_lefthand.dmi'
@@ -6,13 +8,19 @@
w_class = WEIGHT_CLASS_BULKY
burntime = 20
burn_state = FLAMMABLE
+ var/rolled = FALSE
/obj/item/flag/attackby(obj/item/weapon/W, mob/user, params)
..()
if(is_hot(W) && burn_state != ON_FIRE)
- user.visible_message("[user] lights the [name] with [W].")
+ user.visible_message("[user] lights [src] with [W].", "You light [src] with [W].", "You hear a low whoosh.")
fire_act()
+/obj/item/flag/attack_self(mob/user)
+ rolled = !rolled
+ user.visible_message("[user] [rolled ? "rolls up" : "unfurls"] [src].", "You [rolled ? "roll up" : "unfurl"] [src].", "You hear fabric rustling.")
+ update_icon()
+
/obj/item/flag/fire_act(global_overlay = FALSE)
..()
update_icon()
@@ -23,16 +31,24 @@
/obj/item/flag/update_icon()
overlays.Cut()
+ updateFlagIcon()
+ item_state = icon_state
+ if(rolled)
+ icon_state = "[icon_state]_rolled"
if(burn_state == ON_FIRE)
+ item_state = "[item_state]_fire"
+ if(burn_state == ON_FIRE && rolled)
+ overlays += image('icons/obj/flag.dmi', src , "fire_rolled")
+ else if(burn_state == ON_FIRE && !rolled)
overlays += image('icons/obj/flag.dmi', src , "fire")
- item_state = "[icon_state]_fire"
- else
- item_state = initial(icon_state)
if(ismob(loc))
var/mob/M = loc
M.update_inv_r_hand()
M.update_inv_l_hand()
+/obj/item/flag/proc/updateFlagIcon()
+ icon_state = initial(icon_state)
+
/obj/item/flag/nt
name = "Nanotrasen flag"
desc = "A flag proudly boasting the logo of NT."
@@ -187,11 +203,16 @@
desc = "A poor recreation of the official NT flag. It seems to shimmer a little."
icon_state = "ntflag"
origin_tech = "syndicate=4;magnets=4"
- var/used = 0
+ var/updated_icon_state = null
+ var/used = FALSE
+
+/obj/item/flag/chameleon/New()
+ updated_icon_state = icon_state
+ ..()
/obj/item/flag/chameleon/attack_self(mob/user)
if(used)
- return
+ return ..()
var/list/flag_types = typesof(/obj/item/flag) - list(src.type, /obj/item/flag)
var/list/flag = list()
@@ -208,12 +229,16 @@
var/obj/item/flag/chosen_flag = flag[input_flag]
- if(chosen_flag)
+ if(chosen_flag && !used)
name = chosen_flag.name
icon_state = chosen_flag.icon_state
+ updated_icon_state = icon_state
desc = chosen_flag.desc
- used = 1
+ used = TRUE
/obj/item/flag/chameleon/burn()
explosion(loc,1,2,4,4, flame_range = 4)
qdel(src)
+
+/obj/item/flag/chameleon/updateFlagIcon()
+ icon_state = updated_icon_state
diff --git a/icons/obj/flag.dmi b/icons/obj/flag.dmi
index 8b7b2d4a517..309b1d38d87 100644
Binary files a/icons/obj/flag.dmi and b/icons/obj/flag.dmi differ