From 5e0866aa820b2e6ae9f690d000cd4b1706fd983f Mon Sep 17 00:00:00 2001 From: Greenjoe12345 <33647525+Greenjoe12345@users.noreply.github.com> Date: Sat, 6 Sep 2025 11:36:14 +0100 Subject: [PATCH] Chest pouch bag and new storage belts. (#21233) Adds a new type of bag and two new storage belts. Also fixes being unable to flip belts. image image image image ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: Sprites are by RatFromTheJungle, from this PR https://github.com/NovaSector/NovaSector/pull/4651 --------- Signed-off-by: Greenjoe12345 <33647525+Greenjoe12345@users.noreply.github.com> --- code/__DEFINES/outfit.dm | 1 + code/__HELPERS/global_lists.dm | 2 +- code/datums/outfits/outfit.dm | 10 +++ .../objects/items/weapons/storage/backpack.dm | 14 +++++ .../objects/items/weapons/storage/belt.dm | 26 +++++--- .../preference_setup/loadout/items/belt.dm | 12 ++++ code/modules/client/preferences.dm | 2 +- html/changelogs/greenjoe - newbag.yml | 59 ++++++++++++++++++ icons/obj/item/clothing/belts/fannypacks.dmi | Bin 771 -> 1553 bytes icons/obj/storage/chestpouch.dmi | Bin 0 -> 1030 bytes 10 files changed, 116 insertions(+), 10 deletions(-) create mode 100644 html/changelogs/greenjoe - newbag.yml create mode 100644 icons/obj/storage/chestpouch.dmi diff --git a/code/__DEFINES/outfit.dm b/code/__DEFINES/outfit.dm index 9c72fb04c61..db6c6ede070 100644 --- a/code/__DEFINES/outfit.dm +++ b/code/__DEFINES/outfit.dm @@ -7,6 +7,7 @@ #define OUTFIT_MESSENGERBAG 6 #define OUTFIT_RUCKSACK 7 // the bay one #define OUTFIT_POCKETBOOK 8 // the leather bag but smaller +#define OUTFIT_CHESTPOUCH 9 #define OUTFIT_JOBSPECIFIC 1 #define OUTFIT_GENERIC 2 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 9595522cb74..f4108f0d662 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -92,7 +92,7 @@ GLOBAL_LIST_EMPTY(chargen_disabilities_list) GLOBAL_LIST_INIT(valid_player_genders, list(MALE, FEMALE, NEUTER, PLURAL)) /// List of possible backpack shapes for the loadout. -GLOBAL_LIST_INIT(backbaglist, list("Nothing", "Backpack", "Satchel", "Leather Satchel", "Duffel Bag", "Messenger Bag", "Rucksack", "Pocketbook")) +GLOBAL_LIST_INIT(backbaglist, list("Nothing", "Backpack", "Satchel", "Leather Satchel", "Duffel Bag", "Messenger Bag", "Rucksack", "Pocketbook", "Chest Pouch")) /// List of possible backpack styles for the loadout. GLOBAL_LIST_INIT(backbagstyles, list("Job-specific", "Generic", "Faction-specific")) /// List of possible backpack colors for the loadout. diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 5cbf940c292..0473e923cbb 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -75,6 +75,8 @@ var/rucksack_faction var/pocketbook = /obj/item/storage/backpack/satchel/pocketbook var/pocketbook_faction + var/chestpouch = /obj/item/storage/backpack/chestpouch + var/chestpouch_faction var/allow_pda_choice = FALSE var/tab_pda = /obj/item/modular_computer/handheld/pda/civilian @@ -235,6 +237,14 @@ back = /obj/item/storage/backpack/satchel/pocketbook if (OUTFIT_FACTIONSPECIFIC) back = pocketbook_faction ? pocketbook_faction : pocketbook + if (OUTFIT_CHESTPOUCH) + switch(H.backbag_style) + if (OUTFIT_JOBSPECIFIC) + back = chestpouch + if (OUTFIT_GENERIC) + back = /obj/item/storage/backpack/chestpouch + if (OUTFIT_FACTIONSPECIFIC) + back = chestpouch_faction ? chestpouch_faction : chestpouch else // Department backpack back = backpack diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 6ff2f9662f8..0c9db847537 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -907,6 +907,20 @@ icon_state = "rucksack_tan" item_state = "rucksack_tan" +/* + * Chest pouch + */ + +/obj/item/storage/backpack/chestpouch + name = "chest pouch" + desc = "A small pouch that straps across your chest." + icon = 'icons/obj/storage/chestpouch.dmi' + icon_state = "chestpouch" + item_state = "chestpouch" + w_class = WEIGHT_CLASS_HUGE // to avoid recursive backpacks + max_w_class = WEIGHT_CLASS_NORMAL + max_storage_space = DEFAULT_LARGEBOX_STORAGE + // Vaurca stuff. /obj/item/storage/backpack/typec diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 1cfe487e80c..eaa696961b0 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -70,22 +70,18 @@ if(("[initial(icon_state)]_flip") in icon_states(icon)) // Check for whether it has a flipped icon. Prevents invisible sprites. verbs += /obj/item/storage/belt/proc/flipbelt -/obj/item/storage/belt/proc/flipbelt(mob/user, var/self = TRUE) +/obj/item/storage/belt/proc/flipbelt() set category = "Object.Equipped" set name = "Flip Belt" set src in usr - if(self) - if(use_check_and_message(user)) - return - else - if(use_check_and_message(user, self ? USE_ALLOW_NON_ADJACENT : 0)) - return + if(use_check_and_message(usr)) + return flipped = !flipped icon_state = "[initial(icon_state)][flipped ? "_flip" : ""]" item_state = "[initial(item_state)][flipped ? "_flip" : ""]" - to_chat(usr, SPAN_NOTICE("You change \the [src] to be [src.flipped ? "behind" : "in front of"] you.")) + to_chat(usr, SPAN_NOTICE("You adjust \the [src] [src.flipped ? "to the other side" : "back"].")) update_clothing_icon() /obj/item/storage/belt/utility @@ -664,10 +660,24 @@ icon_state = "fannypack" item_state = "fannypack" max_w_class = WEIGHT_CLASS_SMALL + w_class = WEIGHT_CLASS_HUGE contained_sprite = TRUE storage_slots = null max_storage_space = 8 +/obj/item/storage/belt/fannypack/waistpack + name = "waist pack" + desc = "A small, waist-mounted pack for... well, storing stuff!" + icon_state = "waistpack" + item_state = "waistpack" + +/obj/item/storage/belt/fannypack/pouchbelt + name = "belt with pouches" + desc = "A belt coated from front to back in pouches." + icon_state = "pouchbelt" + item_state = "pouchbelt" + max_storage_space = 10 + /obj/item/storage/belt/fannypack/recolorable icon_state = "fannypack_colorable" item_state = "fannypack_colorable" diff --git a/code/modules/client/preference_setup/loadout/items/belt.dm b/code/modules/client/preference_setup/loadout/items/belt.dm index 360e4dc5092..438cc564bb0 100644 --- a/code/modules/client/preference_setup/loadout/items/belt.dm +++ b/code/modules/client/preference_setup/loadout/items/belt.dm @@ -40,3 +40,15 @@ path = /obj/item/storage/belt/security/vestbelt allowed_roles = list("Security Officer", "Head of Security", "Warden", "Security Cadet", "Investigator", "Security Personnel") flags = null + +/datum/gear/belt/waistpack + display_name = "waist pack" + description = "A small, waist-mounted pack for... well, storing stuff!" + cost = 2 + path = /obj/item/storage/belt/fannypack/waistpack + +/datum/gear/belt/pouchbelt + display_name = "belt with pouches" + description = "A belt coated from front to back in pouches." + cost = 2 + path = /obj/item/storage/belt/fannypack/pouchbelt diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d62cb434e1b..161c8d47a8f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -495,7 +495,7 @@ GLOBAL_LIST_EMPTY_TYPED(preferences_datums, /datum/preferences) else all_underwear -= underwear_category_name - if(backbag > OUTFIT_POCKETBOOK || backbag < OUTFIT_NOTHING) + if(backbag > OUTFIT_CHESTPOUCH || backbag < OUTFIT_NOTHING) backbag = OUTFIT_NOTHING //Same as above character.backbag = backbag character.backbag_style = backbag_style diff --git a/html/changelogs/greenjoe - newbag.yml b/html/changelogs/greenjoe - newbag.yml new file mode 100644 index 00000000000..af6cf1b018d --- /dev/null +++ b/html/changelogs/greenjoe - newbag.yml @@ -0,0 +1,59 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: Greenjoe + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a new chest pouch bag and two new varaitions of storage belt. Can be selected in character setup and the loadout." + - bugfix: "Fixed being unable to flip belts." diff --git a/icons/obj/item/clothing/belts/fannypacks.dmi b/icons/obj/item/clothing/belts/fannypacks.dmi index 64735d8bad5a5e830a887088be9ee3bf5f79d4e8..d088a4c7259a6cf848ceec14c63e9ff31ccbc105 100644 GIT binary patch delta 1542 zcmV+h2Ko7e29XRUiBL{Q4GJ0x0000DNk~Le0002M0002M2m=5B0A&K4H2?qrGm#}9 ze+9>n!O6hDz|8pgGynhq0d!JMQvg8b*k%9#0K$4ySad{X zb7OL8aCB*JZU6vyoSl+O4uUWchS%*W8rT~jY~2`$VIfx_1qM5@w4|*PZ!b!Mx)2My znauylmrTeG$uZ4Xd`jsJj76>3o<*xQebv)Lf~1%gak% zYN-t`Bm|UHXl#GoP*NM-z%WmF^5Vl5`P*uV?V`S?aiWwM=ulNZa%MEn;+jdbgrVbT zofpHX^kI05y%@gbJ_W75mZAXZ{$`KLiP(@OS^WC<2h~XD$o-3xK>z>*zDYzue^hv! z?VF2ssxS~mK}0$sz5V~cy)y|9t4u<~HcZ#qT@{fS&X5p~U-_g5~-;85}anc4`OewD%Uk7eT2)KeA6BU)ng!wz|l! zJ3Kf#b%N;9S0}G;ou-b8OrljMA)000000JHQ9f3=mo0?WQF z7>uEhvL|GxwxTln+hYqDi=e*^x7)D5&#eXU!SdH#4&lRA00T$RuPxBC{vrRaGr?Wv z_Aw6u4(4V|zqA1hpWspaL;8O(KOh0Dv#1h4W|hnO`?>tUTuJf-jpF}v1Ve0qLDA1+ zgOB#Zf!0aq2fFLNT9honf6xzMDd3GJkqaE`TuEy<sWl*ZFhf%|DQSk@%%ujh82_^iHGz4fA-vm^8>LGEr4|Ge|!A@?8)C@U8|Mk zYKQ+100000U;}bgTfz~D+-Nxha*n*oHXtXDE@=00#}vf!Z zz_{uk75&lzy8}>Kz*GEJ$@u$osptHFTZXJGW6JyX4*^xBe;?DgCp(Sr=VD8>`@6}x z;M)f0;@w1TDKEnF#wd3`_Lkq7@JYm=A!0-T&bKn?gSBKKTE&B^5&M(f_Zls1%y~ z|F3_O|6f~Be<`v8-1-0J-2dR&-uwRsBk-qHEe#K>O{(^ z-vD33V->9#U}r898Hx81&e{Ex91;Pex%;_$D10)jf2{%l000000001Z56(5ycRpp~ z%$c`N+-EUxo3P1z!}NT(=?lY>foYdt&Vu#Rayqk!7wKWytMZAw! zew=oSE1~e)6ZPja(F#kZMy7+Wm}XJ4mprhK0cV!Z delta 739 zcmV<90v!F341)$GiBL{Q4GJ0x0000DNk~Le0001>0001h1Oos70Det>C;$Ke8<8a+ z6_UYr0{{R30d!JMQvg8b*k%9#0H2X@6Ms`yaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM z;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9+Eio^zvLG=zJ3cu-C%-5$DJNBli!&v& zs2C_~$iOSDM(pB>E4JfxfJ6eR_+NB#uMcu?qV7SJ~pqPZt=b zX<|gAeFvoI5vs_VuCS$nXH1t=sWS=;%M%1a5blEb;pjl|!|~j}4{ZkeqJQg$wh!9A zh<->D@SXkWhwhTbsCsdyJkS$x{m{nrMaKs%UmWa*t`FKviXRGsAp8^j9C+i)%Zmyq zbFMrevVfxEs!(|16c9-%I+=^FQN;2F~;b>obhdn5>gApBLt4@U=zACBh+erPk$7hONJ zebDknA8m*xG@wrO7CV0EE@_PFPj||rA)JmM+L*rR_@L#BgZ)= z9XfQfvwNGe3`kp<+&OSV2+g_b+eA=-%0Fth#xH#FFlA=h73NmLO**ug8;xJPj=NX*7#mwX_J; z*52`JX9KesgVpb}`+GIrUNA5)-SBjA45^s&cE;ODj}!!4Hz$;Ekmy5#gc7SEZn zoIz&4g;YweiN?%(yEZA*@np*9S*EP1#ii?0t#`BEZ(JbC5d|ft*2i!7Z6eU3z@o@; zFs$iZ`Zw(td#q)C?c4c~za_)*{jcUT8~!gySouEAUC!eE_v5b4&t;w;?^*pdt+G$L$1dS5)%NiGFZ!qG@7)QZC+hxOefJ^qU}m@c?l+d~^{akfZ1ZKUo?pK6 z`<%pm{91KS^tKD_k$x6?&OmD3e#ZUUEKOF=(+}=xyE!4+@ucymwZ~qVTYGL&+}*z^ z{l^~zqhGf3k3L;+{=OR|rafPnU-4+G$eeSXITn^?COKLWeVa~R_}G7F zE$iv+v)YazgsUP{5q=E_Emb(1q0vuXKG$fd2?I#?(_;3mQ`&1V9k>F zSwc8;W%eTF9>cl8GObM|OV@SweKt6z*mpQGWbO;ESfILIO<(<+?de*jz9lh-WFt+3 zf$ATB`Vt?PpR?%UqHN!At=TVj+{+8EEbIoQZ7_(N@Gl|n!|7RX176EMQponZe${Bd zWe!_JDTilT#roOj6>7`d&NIBc*Pm@UOZaD?Vw{Jj+e!uNP*VjS)mg$N>dt#?v_y4y zGuopZB-$k056YBuOm|=U{eg+Ej7NKxgM^pK_B-?VKAu_;u)!puY@?Wf*W#V-9p#ns zqFiBWi>m9DdH21L@E4uE@#xo%fYcvhYYf&*xn_LmwXYfD+{d1a_g1lW^lUJ#XZU@} V)p+vp6{|pw_H^}gS?83{1OQi<#9aUY literal 0 HcmV?d00001