Flag Fixes (#14163)

This commit is contained in:
Doxxmedearly
2022-06-02 18:33:41 +02:00
committed by GitHub
parent 537a3bcca9
commit 2984e8edc4
3 changed files with 159 additions and 113 deletions
+153 -113
View File
@@ -7,26 +7,16 @@
w_class = ITEMSIZE_NORMAL
/obj/structure/sign/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
return
if(2.0)
qdel(src)
return
if(3.0)
qdel(src)
return
else
return
qdel(src)
/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction
/obj/structure/sign/attackby(obj/item/tool, mob/user) //deconstruction
if(tool.isscrewdriver() && !istype(src, /obj/structure/sign/double))
to_chat(user, "You unfasten the sign with your [tool].")
unfasten()
playsound(get_turf(user), tool.usesound, 50, 1)
unfasten(user)
else ..()
/obj/structure/sign/proc/unfasten()
/obj/structure/sign/proc/unfasten(mob/user)
user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src]."), SPAN_NOTICE("You unfasten \the [src]."))
var/obj/item/sign/S = new(src.loc)
S.name = name
S.desc = desc
@@ -320,11 +310,157 @@
icon_state = "doorwreath"
layer = 5
//Flag item
/obj/item/flag
name = "boxed flag"
desc = "A flag neatly folded into a wooden container."
icon = 'icons/obj/decals.dmi'
icon_state = "flag_boxed"
var/flag_path
var/flag_size = 0
//Flag on wall
/obj/structure/sign/flag
name = "blank flag"
desc = "Nothing to see here."
icon_state = "flag"
var/icon/ripped_outline = icon('icons/obj/decals.dmi', "ripped")
var/obj/structure/sign/flag/linked_flag //For double flags
var/obj/item/flag/flagtype //For returning your flag
var/ripped = FALSE //If we've been torn down
/obj/structure/sign/flag/blank
name = "blank banner"
desc = "A blank blue flag."
icon_state = "flag"
/obj/item/flag/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
if (!adjacent)
return
if((!iswall(A) && !istype(A, /obj/structure/window)) || !isturf(user.loc))
to_chat(user, SPAN_WARNING("You can't place this here!"))
return
var/placement_dir = get_dir(user, A)
if (!(placement_dir in cardinal))
to_chat(user, SPAN_WARNING("You must stand directly in front of the location you wish to place that on."))
return
var/obj/structure/sign/flag/P = new(user.loc)
switch(placement_dir)
if(NORTH)
P.pixel_y = 32
if(SOUTH)
P.pixel_y = -32
if(EAST)
P.pixel_x = 32
if(WEST)
P.pixel_x = -32
P.dir = placement_dir
if(flag_size)
P.icon_state = "[flag_path]_l"
var/obj/structure/sign/flag/P2 = new(user.loc)
P.linked_flag = P2
P2.linked_flag = P
P2.icon_state = "[flag_path]_r"
P2.dir = P.dir
switch(P2.dir)
if(NORTH)
P2.pixel_y = P.pixel_y
P2.pixel_x = 32
if(SOUTH)
P2.pixel_y = P.pixel_y
P2.pixel_x = 32
if(EAST)
P2.pixel_x = P.pixel_x
P2.pixel_y = -32
if(WEST)
P2.pixel_x = P.pixel_x
P2.pixel_y = 32
P2.name = name
P2.desc = desc
P2.desc_info = desc_info
P2.desc_fluff = desc_fluff
P2.flagtype = type
else
P.icon_state = "[flag_path]"
P.name = name
P.desc = desc
P.desc_info = desc_info
P.desc_fluff = desc_fluff
P.flagtype = type
qdel(src)
/obj/structure/sign/flag/Destroy()
if(linked_flag?.linked_flag == src) //Catches other instances where one half might be destroyed, say by a broken wall, to avoid runtimes.
linked_flag.linked_flag = null //linked_flag
. = ..()
/obj/structure/sign/flag/ex_act(severity)
switch(severity)
if(1)
qdel(src)
if(2)
if(prob(50))
qdel(src)
else
rip()
if(3)
rip()
/obj/structure/sign/flag/unfasten(mob/user)
if(!ripped)
user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src] and folds it back up."), SPAN_NOTICE("You unfasten \the [src] and fold it back up."))
var/obj/item/flag/F = new flagtype(get_turf(user))
user.put_in_hands(F)
else
user.visible_message(SPAN_NOTICE("\The [user] unfastens the tattered remnants of \the [src]."), SPAN_NOTICE("You unfasten the tattered remains of \the [src]."))
if(linked_flag)
qdel(linked_flag) //otherwise you're going to get weird duping nonsense
qdel(src)
/obj/structure/sign/flag/attack_hand(mob/user)
if(alert("Do you want to rip \the [src] from its place?","You think...","Yes","No") == "Yes")
if(!Adjacent(user)) //Cannot bring up dialogue and walk away
return FALSE
if(!do_after(user, 2 SECONDS, act_target = src))
return FALSE
visible_message(SPAN_WARNING("\The [user] rips \the [src] in a single, decisive motion!" ))
playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1)
add_fingerprint(user)
rip()
/obj/structure/sign/flag/proc/rip(var/rip_linked = TRUE)
var/icon/I = new('icons/obj/decals.dmi', icon_state)
var/icon/mask = new('icons/obj/decals.dmi', "ripped")
I.AddAlphaMask(mask)
icon = I
name = "ripped flag"
desc = "You can't make out anything from the flag's original print. It's ruined."
ripped = TRUE
if(linked_flag && rip_linked)
linked_flag.rip(FALSE) //Prevents an infinite ripping loop
/obj/structure/sign/flag/attackby(obj/item/W, mob/user)
..()
if(W.isFlameSource())
visible_message(SPAN_WARNING("\The [user] starts to burn \the [src] down!"))
if(!do_after(user, 2 SECONDS, act_target = src))
return FALSE
visible_message(SPAN_WARNING("\The [user] burns \the [src] down!"))
playsound(src.loc, 'sound/items/cigs_lighters/zippo_on.ogg', 100, 1)
new /obj/effect/decal/cleanable/ash(src.loc)
if(linked_flag)
qdel(linked_flag)
qdel(src)
return TRUE
/obj/structure/sign/flag/blank/left
icon_state = "flag_l"
@@ -679,14 +815,6 @@
/obj/structure/sign/flag/zenghu/right
icon_state = "zenghu_r"
/obj/item/flag
name = "boxed flag"
desc = "A flag neatly folded into a wooden container."
icon = 'icons/obj/decals.dmi'
icon_state = "flag_boxed"
var/flag_path
var/flag_size = 0
/obj/structure/sign/flag/zavodskoi
name = "Zavodskoi Interstellar flag"
desc = "The logo of Zavodskoi Interstellar on a flag."
@@ -936,92 +1064,4 @@
icon_state = "vysoka_l"
/obj/structure/sign/flag/vysoka/right
icon_state = "vysoka_r"
/obj/item/flag/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
if (!adjacent)
return
if((!iswall(A) && !istype(A, /obj/structure/window)) || !isturf(user.loc))
to_chat(user, SPAN_WARNING("You can't place this here!"))
return
var/placement_dir = get_dir(user, A)
if (!(placement_dir in cardinal))
to_chat(user, SPAN_WARNING("You must stand directly in front of the location you wish to place that on."))
return
var/obj/structure/sign/flag/P = new(user.loc)
switch(placement_dir)
if(NORTH)
P.pixel_y = 32
if(SOUTH)
P.pixel_y = -32
if(EAST)
P.pixel_x = 32
if(WEST)
P.pixel_x = -32
P.dir = placement_dir
if(flag_size)
P.icon_state = "[flag_path]_l"
var/obj/structure/sign/flag/P2 = new(user.loc)
P2.icon_state = "[flag_path]_r"
P2.dir = P.dir
switch(P2.dir)
if(NORTH)
P2.pixel_y = P.pixel_y
P2.pixel_x = 32
if(SOUTH)
P2.pixel_y = P.pixel_y
P2.pixel_x = 32
if(EAST)
P2.pixel_x = P.pixel_x
P2.pixel_y = -32
if(WEST)
P2.pixel_x = P.pixel_x
P2.pixel_y = 32
P2.name = name
P2.desc = desc
P2.desc_info = desc_info
P2.desc_fluff = desc_fluff
else
P.icon_state = "[flag_path]"
P.name = name
P.desc = desc
P.desc_info = desc_info
P.desc_fluff = desc_fluff
qdel(src)
/obj/structure/sign/flag/attack_hand(mob/user as mob)
if(alert("Do you want to rip \the [src] from its place?","You think...","Yes","No") == "Yes")
if(!do_after(user, 2 SECONDS, act_target = src))
return 0
visible_message(SPAN_WARNING("\The [user] rips \the [src] in a single, decisive motion!" ))
playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1)
icon_state = "poster_ripped"
name = "ripped poster"
desc = "You can't make out anything from the flag's original print. It's ruined."
add_fingerprint(user)
/obj/structure/sign/flag/attackby(obj/item/W, mob/user)
..()
if(W.isFlameSource())
visible_message(SPAN_WARNING("\The [user] starts to burn \the [src] down!"))
if(!do_after(user, 2 SECONDS, act_target = src))
return 0
visible_message(SPAN_WARNING("\The [user] burns \the [src] down!"))
playsound(src.loc, 'sound/items/cigs_lighters/zippo_on.ogg', 100, 1)
new /obj/effect/decal/cleanable/ash(src.loc)
qdel(src)
return TRUE
icon_state = "vysoka_r"