From 9e3a5e8c01fbcb546245f87b37021d41b2bb81df Mon Sep 17 00:00:00 2001 From: kittysmooch <105110468+kittysmooch@users.noreply.github.com> Date: Wed, 11 Feb 2026 15:53:15 -0800 Subject: [PATCH 1/4] like a rhinestone cowboy --- .../modular_items/code/stickers.dm | 108 ++++++++++++++++++ .../modular_items/icons/stickers.dmi | Bin 0 -> 2305 bytes .../modular_vending/code/tg_vendors/games.dm | 8 ++ tgstation.dme | 1 + 4 files changed, 117 insertions(+) create mode 100644 modular_doppler/modular_items/code/stickers.dm create mode 100644 modular_doppler/modular_items/icons/stickers.dmi diff --git a/modular_doppler/modular_items/code/stickers.dm b/modular_doppler/modular_items/code/stickers.dm new file mode 100644 index 00000000000000..3088420bc3ec34 --- /dev/null +++ b/modular_doppler/modular_items/code/stickers.dm @@ -0,0 +1,108 @@ + +///a parent doppler sticker item so we can populate a doppie sticker pack easily +/obj/item/sticker/doppler + icon = 'modular_doppler/modular_items/icons/stickers.dmi' + +/obj/item/sticker/doppler/dolphin + name = "dolphin sticker" + icon_state = "dolphin" + +/obj/item/sticker/doppler/horse + name = "horse sticker" + icon_state = "horse" + +/obj/item/sticker/doppler/pride + name = "pride flag sticker" + icon_state = "pride" + +/obj/item/sticker/doppler/trans_pride + name = "trans pride flag sticker" + icon_state = "trans_pride" + +/obj/item/sticker/doppler/marsian + name = "marsian flag sticker" + icon_state = "marsian" + +/obj/item/sticker/doppler/tizira + name = "tiziran flag sticker" + icon_state = "tizira" + +/obj/item/sticker/doppler/fourca + name = "4CA sticker" + icon_state = "4ca" + +///special doppie sticker pack, these will still appear in normal sticker packs anyway +/obj/item/storage/box/stickers/local + name = "local sector sticker pack" + icon = 'modular_doppler/modular_items/icons/stickers.dmi' + ///necessary intervention, see below + var/list/doppler_pack_labels = list( + "dolphin", + ) + +///the parent item populates its illustrate var from a static list, so we override it +/obj/item/storage/box/stickers/local/Initialize(mapload) + if(isnull(illustration)) + illustration = pick(doppler_pack_labels) + update_appearance() + . = ..() + +///makes our list of doppie stickers, overrides basically the same code from the parent /obj/item/storage/box/stickers +/obj/item/storage/box/stickers/local/generate_non_contraband_stickers_list() + var/list/allowed_stickers = list() + + for(var/obj/item/sticker/sticker_type as anything in subtypesof(/obj/item/sticker/doppler)) + if(!sticker_type::exclude_from_random) + allowed_stickers += sticker_type + + return allowed_stickers + +///rhinestones! starting with a parent item for the same purpose as above +/obj/item/sticker/rhinestone + icon = 'modular_doppler/modular_items/icons/stickers.dmi' + +/obj/item/sticker/rhinestone/pink + name = "pink rhinestone" + icon_state = "rhinestone_pink" + +/obj/item/sticker/rhinestone/purple + name = "purple rhinestone" + icon_state = "rhinestone_purple" + +/obj/item/sticker/rhinestone/red + name = "red rhinestone" + icon_state = "rhinestone_red" + +/obj/item/sticker/rhinestone/yellow + name = "yellow rhinestone" + icon_state = "rhinestone_yellow" + +/obj/item/sticker/rhinestone/blue + name = "blue rhinestone" + icon_state = "rhinestone_blue" + +/obj/item/sticker/rhinestone/green + name = "green rhinestone" + icon_state = "rhinestone_green" + +///special boxes for the rhinestones +/obj/item/storage/box/stickers/local/rhinestones + name = "rhinestone pack" + doppler_pack_labels = list( + "rhinestone_pink", + "rhinestone_purple", + "rhinestone_red", + "rhinestone_yellow", + "rhinestone_blue", + "rhinestone_green", + ) + +///makes a list of rhinestones as above +/obj/item/storage/box/stickers/local/rhinestones/generate_non_contraband_stickers_list() + var/list/allowed_stickers = list() + + for(var/obj/item/sticker/sticker_type as anything in subtypesof(/obj/item/sticker/rhinestone)) + if(!sticker_type::exclude_from_random) + allowed_stickers += sticker_type + + return allowed_stickers diff --git a/modular_doppler/modular_items/icons/stickers.dmi b/modular_doppler/modular_items/icons/stickers.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f7c3da12d46573efcf4f3fab7c167efbdc2f24d5 GIT binary patch literal 2305 zcmZ9Kc{~%28^>q4MpSb}OAMvnYg zj+!Hzx#k)}nETiF`+fD#_j$dZ=lwj-AI~43&l7KHZXzTgB>(^bgrGN!t$!2qck=W8 zt}O=lx_+ZA%+@Z**geoS0O=Qm^z{J%Lb6j|Qv}GT4z^L|ZA2TNp&za(B!u`?otl%P zI#bhh184g0iZ(!5tec!zt;sIOMd5ZE#SLci#{<`Xnftgm+9ljK>OLuk{ZMky*_UHu z3_A$zsi|wu!^WE`ei^WjpEJFWN!$x)vx!j`;}6b#Tdp`+zzcBhuu8QjM$f$%H30YvfXk4kyW61fe zjF%Am!L!JM)GXY&!LxdEZu~FJgj1(HqVo$prCOdlJI_E|l#b$W6zO$7Tnb+ZJuI+I zW92e0kutHPBbU~l7DIh}xi*x5zjgdKLduoQS*j3w;We+qUxEq;v0fL4Oaz&;lkN{_ zRu^FD8NFJBcu}0o@ln!s zP*8cGj(Xi!iLwD%-0>K#YCN}*a#X?f7t@UDI~OnT%}k56Q25*)WERkY;}Q|gwe6(N zz7Z~CN@(vcdeQn@_Gl2JYp9hX)YmU_&Mn6@A)&)IB&t#$X;wV4!O<2Gz5)#hO(&9Yv9J}|XS__NIkS&uvZM_zek-b&sqt8m31g9Xh zlPF5Q`4ZXVKti6y61qL?gr#^Qb9?t&-$?55tTHVo*`%*H;sb#c> zv|8bH&P^Ac3%dO%zRKcu@GrheFrkIy$$9?!3=Z&M$xD)WdsfEbb+(b3h(Z3XRig^S ztrIZPwGzlV?T)S8VwiV0fea!gxSSx=`6rNFm-a#fs-AmVrrSwH6D)e48OWF6BcvhVN(42oAs&LagAODEUs ztj*DqvaNvPM08^AP4#uZ2F(+>Y%ovdorj{uEp&A)T|Sl)S#VF z*|k?YK!;_ZZ3-ektr>wlPh_yBth?63;Fy~{n?WI4cKOS!VI(X%O1|aHAw-+$VZB+g z?w0g-VBDz%Yn)@d-M&&GVO?}`B5_&sz>iP zg7dWrL9_utkX}_`xHdyeo?aBBF7$bdue8ct&C%B&yt3!`^DSBpv;B8!PrtqO!l*=p zP@x?B(?7{#v%*6{;1^P}M&pkWW_JeCg78b8=ckjluOE*b$htG@<{(YtX*Ia1SVte5 zukj1mq7JzDpTbqy<+L#E=IUlrOWR<1r|3}jVR2%RN~bpc z(OKx@toz!FALweOZzlC5SB0~fu6uRnf>&Rkw1$_umnZCW4UjKViodv{A+$70uJxY1 z+xn4e(6Gi_x|V9A@p7C-Rt_J5{Yk$-y?;HY+ay}8#_I7q56*hg46G3n5e|xtvtV}h zQB%G#?7e5kx`}0pI1dr+@FkC`uuune!linnW27^e6GBc~_p?hW1QXKt>nMZ`0<=* zQ+GbVN0`SiP!oZ%AHf9=qknRg{APg!Hr@<$1+*~sp668y31$`pej3;b9E_vnagRGz z0zR~)=X1L_mH`e4BI3X*Ol_VLEtI5b-t(KHdHIYk%jh_fEidN>*EP{DBf$hm5%jKp z7oU=n2`_{Ok3b9AN)a{aFOBOTy7#Z!&qaF1sEK?&&uMIM6wnP))^@0TLQ!jI!gszL z(dx-%C(2NYpD`&m)7K4S_W6x`x!@CgBG)$RXg~?GTJ=D=m@1)sMGVqcd{$@*1&>_2 zV9g;bAcxA3{D=caJa)&9w&EA0$HJ1^gh%D$VkL-v_<@Q?zETG2h0Ta3>{Jm|Oh;#~ zbs9LEsf-nZaFHbxZ2=X!HQfA&pRP`TVj@@$wS94&$N4x67~^Z0t^%;B=jNxMb}R-w z_XZs%x_-3fI{N9K&3NLK5AvvX|4txgBJW>WRWR7ATt9!JBP8weH_hdG|MmiU&D^-s H$T|A|-e_-i literal 0 HcmV?d00001 diff --git a/modular_doppler/modular_vending/code/tg_vendors/games.dm b/modular_doppler/modular_vending/code/tg_vendors/games.dm index 7cbf15dffb6d6b..9eb8184750296d 100644 --- a/modular_doppler/modular_vending/code/tg_vendors/games.dm +++ b/modular_doppler/modular_vending/code/tg_vendors/games.dm @@ -7,6 +7,14 @@ /obj/item/storage/briefcase/secure/wargame_kit = 3, ), ), + list( + "name" = "Art", + "icon" = "palette", + "products" = list( + /obj/item/storage/box/stickers/local = 5, + /obj/item/storage/box/stickers/local/rhinestones = 5, + ), + ), list( "name" = "Hair", "icon" = "scissors", diff --git a/tgstation.dme b/tgstation.dme index ce384007a51406..982be4890356ea 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7350,6 +7350,7 @@ #include "modular_doppler\modular_items\code\shelf.dm" #include "modular_doppler\modular_items\code\shipchem_overrides.dm" #include "modular_doppler\modular_items\code\signature_beacon.dm" +#include "modular_doppler\modular_items\code\stickers.dm" #include "modular_doppler\modular_items\code\summon_beacon.dm" #include "modular_doppler\modular_items\hyposprays\code\autolathe_designs.dm" #include "modular_doppler\modular_items\hyposprays\code\hypospray_kits.dm" From 04ed0a170ce5920deba7a1d469a267f1affd3844 Mon Sep 17 00:00:00 2001 From: kittysmooch <105110468+kittysmooch@users.noreply.github.com> Date: Tue, 17 Feb 2026 22:24:20 -0800 Subject: [PATCH 2/4] Update modular_doppler/modular_items/code/stickers.dm Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Signed-off-by: kittysmooch <105110468+kittysmooch@users.noreply.github.com> --- modular_doppler/modular_items/code/stickers.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/modular_doppler/modular_items/code/stickers.dm b/modular_doppler/modular_items/code/stickers.dm index 3088420bc3ec34..5dcf02baa1b66f 100644 --- a/modular_doppler/modular_items/code/stickers.dm +++ b/modular_doppler/modular_items/code/stickers.dm @@ -1,6 +1,7 @@ ///a parent doppler sticker item so we can populate a doppie sticker pack easily /obj/item/sticker/doppler + abstract_type = /obj/item/sticker/doppler icon = 'modular_doppler/modular_items/icons/stickers.dmi' /obj/item/sticker/doppler/dolphin From c6ad02bf11d3d00c7afb53f433be600499f7d605 Mon Sep 17 00:00:00 2001 From: kittysmooch <105110468+kittysmooch@users.noreply.github.com> Date: Tue, 17 Feb 2026 22:24:36 -0800 Subject: [PATCH 3/4] Update modular_doppler/modular_items/code/stickers.dm Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Signed-off-by: kittysmooch <105110468+kittysmooch@users.noreply.github.com> --- modular_doppler/modular_items/code/stickers.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/modular_doppler/modular_items/code/stickers.dm b/modular_doppler/modular_items/code/stickers.dm index 5dcf02baa1b66f..e6f8fe2651bb64 100644 --- a/modular_doppler/modular_items/code/stickers.dm +++ b/modular_doppler/modular_items/code/stickers.dm @@ -60,6 +60,7 @@ ///rhinestones! starting with a parent item for the same purpose as above /obj/item/sticker/rhinestone + abstract_type = /obj/item/sticker/rhinestone icon = 'modular_doppler/modular_items/icons/stickers.dmi' /obj/item/sticker/rhinestone/pink From de60216dd5c697f13a78c5c9b92702404f315dcb Mon Sep 17 00:00:00 2001 From: kittysmooch <105110468+kittysmooch@users.noreply.github.com> Date: Wed, 18 Feb 2026 01:38:33 -0800 Subject: [PATCH 4/4] code improvements --- .../modular_items/code/stickers.dm | 48 +++++++++++-------- .../modular_vending/code/tg_vendors/games.dm | 4 +- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/modular_doppler/modular_items/code/stickers.dm b/modular_doppler/modular_items/code/stickers.dm index e6f8fe2651bb64..bfd08efca738dc 100644 --- a/modular_doppler/modular_items/code/stickers.dm +++ b/modular_doppler/modular_items/code/stickers.dm @@ -32,32 +32,51 @@ name = "4CA sticker" icon_state = "4ca" -///special doppie sticker pack, these will still appear in normal sticker packs anyway -/obj/item/storage/box/stickers/local - name = "local sector sticker pack" +///special doppie sticker pack, these will still appear in normal sticker packs anyway. parent type first. +/obj/item/storage/box/stickers/doppler + abstract_type = /obj/item/storage/box/stickers/doppler icon = 'modular_doppler/modular_items/icons/stickers.dmi' - ///necessary intervention, see below + ///the parent item populates its illustration var from a static list, this var allows us to define a new list var/list/doppler_pack_labels = list( "dolphin", ) + /// The base type from which we pick subtypes to spawn. + var/spawned_sticker_basetype -///the parent item populates its illustrate var from a static list, so we override it -/obj/item/storage/box/stickers/local/Initialize(mapload) +///the parent item populates its illustration var from the aforementioned static list, so we override it +/obj/item/storage/box/stickers/doppler/Initialize(mapload) if(isnull(illustration)) illustration = pick(doppler_pack_labels) update_appearance() . = ..() ///makes our list of doppie stickers, overrides basically the same code from the parent /obj/item/storage/box/stickers -/obj/item/storage/box/stickers/local/generate_non_contraband_stickers_list() +/obj/item/storage/box/stickers/doppler/generate_non_contraband_stickers_list() var/list/allowed_stickers = list() - for(var/obj/item/sticker/sticker_type as anything in subtypesof(/obj/item/sticker/doppler)) + for(var/obj/item/sticker/sticker_type as anything in subtypesof(spawned_sticker_basetype)) if(!sticker_type::exclude_from_random) allowed_stickers += sticker_type return allowed_stickers +/// PopulateContents() on the parent item uses a static list, meaning the first pack that's spawned into the round decides the sticker pool +/// for every other one. We override this with the same block and a non-static list. + +/obj/item/storage/box/stickers/doppler/PopulateContents() + var/list/non_contraband + + if(isnull(non_contraband)) + non_contraband = generate_non_contraband_stickers_list() + + for(var/i in 1 to rand(4, 8)) + var/type = pick(non_contraband) + new type(src) + +/obj/item/storage/box/stickers/doppler/local + name = "local sector sticker pack" + spawned_sticker_basetype = /obj/item/sticker/doppler + ///rhinestones! starting with a parent item for the same purpose as above /obj/item/sticker/rhinestone abstract_type = /obj/item/sticker/rhinestone @@ -88,7 +107,7 @@ icon_state = "rhinestone_green" ///special boxes for the rhinestones -/obj/item/storage/box/stickers/local/rhinestones +/obj/item/storage/box/stickers/doppler/rhinestones name = "rhinestone pack" doppler_pack_labels = list( "rhinestone_pink", @@ -98,13 +117,4 @@ "rhinestone_blue", "rhinestone_green", ) - -///makes a list of rhinestones as above -/obj/item/storage/box/stickers/local/rhinestones/generate_non_contraband_stickers_list() - var/list/allowed_stickers = list() - - for(var/obj/item/sticker/sticker_type as anything in subtypesof(/obj/item/sticker/rhinestone)) - if(!sticker_type::exclude_from_random) - allowed_stickers += sticker_type - - return allowed_stickers + spawned_sticker_basetype = /obj/item/sticker/rhinestone diff --git a/modular_doppler/modular_vending/code/tg_vendors/games.dm b/modular_doppler/modular_vending/code/tg_vendors/games.dm index 9eb8184750296d..7c41cfd30ab193 100644 --- a/modular_doppler/modular_vending/code/tg_vendors/games.dm +++ b/modular_doppler/modular_vending/code/tg_vendors/games.dm @@ -11,8 +11,8 @@ "name" = "Art", "icon" = "palette", "products" = list( - /obj/item/storage/box/stickers/local = 5, - /obj/item/storage/box/stickers/local/rhinestones = 5, + /obj/item/storage/box/stickers/doppler/local = 5, + /obj/item/storage/box/stickers/doppler/rhinestones = 5, ), ), list(