From 746de75bddd3ce88b2dfd81b4e2cc349202aab97 Mon Sep 17 00:00:00 2001 From: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Sat, 8 Nov 2025 17:11:53 -0500 Subject: [PATCH] Adds most shotgun ammo boxes to cargo. Allows them to be crafted. (#30837) * pope why didn't you test it haughughuugughuhguhguhgh * ok let us be real it doesn't need 50 more what was I thinking * oop * a static shock * spelling * Update code/game/objects/items/weapons/storage/boxes.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> * so full of order of operations yum --------- Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --- .../spawners/random/pool/space_loot.dm | 2 +- .../items/stacks/sheets/sheet_types.dm | 1 + .../objects/items/weapons/storage/boxes.dm | 128 +++++++++++++++++- .../projectiles/ammunition/ammo_casings.dm | 4 +- .../supply/supply_packs/pack_security.dm | 42 ++++++ icons/obj/bullet.dmi | Bin 3849 -> 3912 bytes icons/obj/shell_boxes.dmi | Bin 1770 -> 1950 bytes 7 files changed, 172 insertions(+), 5 deletions(-) diff --git a/code/game/objects/effects/spawners/random/pool/space_loot.dm b/code/game/objects/effects/spawners/random/pool/space_loot.dm index 06fd29d8883..ea7f65fe256 100644 --- a/code/game/objects/effects/spawners/random/pool/space_loot.dm +++ b/code/game/objects/effects/spawners/random/pool/space_loot.dm @@ -391,7 +391,7 @@ loot = list( /obj/item/storage/fancy/shell/confetti, /obj/item/storage/fancy/shell/ion, - /obj/item/storage/fancy/shell/incindiary, + /obj/item/storage/fancy/shell/incendiary, /obj/item/storage/fancy/shell/dragonsbreath, /obj/item/storage/fancy/shell/rubbershot, ) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 788421b62e1..bdefb5e2676 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -491,6 +491,7 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( new /datum/stack_recipe("cardboard tube", /obj/item/c_tube), new /datum/stack_recipe("cardboard box", /obj/structure/closet/cardboard, 4), new /datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), + new /datum/stack_recipe("shotgun ammo box", /obj/item/storage/fancy/shell/empty, 2), null, new /datum/stack_recipe_list("chess pieces", list( new /datum/stack_recipe("black pawn", /obj/item/chesspiece/bpawn, 1), diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b663a09838a..2e78e02d67c 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -731,6 +731,23 @@ /* Ammo Boxes */ //////////////// +#define TRANQ "Tranquilizer" +#define RUBBER "Rubbershot" +#define BUCK "Buckshot" +#define SLUG "Slug" +#define BEAN "Beanbag" +#define TASER "Taser" +#define DRAGON "Dragonsbreath" +#define HOLY "Holy" +#define CLOWN "Confetti" +#define METEOR "Meteorshot" +#define ION "Ionshot" +#define PULSE "Pulse" +#define INCENDIARY "Incendiary" +#define LASERSHOT "Laser" +#define FRAG "Frag" + + /obj/item/storage/fancy/shell icon = 'icons/obj/shell_boxes.dmi' storage_slots = 8 @@ -738,11 +755,16 @@ can_hold = list(/obj/item/ammo_casing/shotgun) /// What shell do we fill the box with var/shell_type + /// Is the box open or closed? + var/we_are_open = FALSE + /// What is the closed icon state of the box? + var/closed_icon_state = null /obj/item/storage/fancy/shell/fancy_storage_examine(mob/user) . = list() if(!length(contents)) . += "There are no shells in the box." + . += "Ctrl-click to open or close the box!" return var/list/shell_list = list() // Associated list of all shells in the box @@ -754,11 +776,77 @@ . += "There is one [thing] in the box." else . += "There are [shell_list[thing]] [thing]s in the box." + . += "Ctrl-click to open or close the box!" + +/obj/item/storage/fancy/shell/attackby__legacy__attackchain(obj/item/W, mob/user, params) + if(!is_pen(W)) + return ..() + var/list/static/designs = list(TRANQ, RUBBER, BUCK, SLUG, BEAN, TASER, DRAGON, HOLY, CLOWN, METEOR, ION, PULSE, INCENDIARY, LASERSHOT, FRAG) + var/switchDesign = tgui_input_list(user, "Select a Design", "Shotgun Box Designs", sortList(designs)) + if(!switchDesign) + return + if(we_are_open) + to_chat(user, "Close the box first!") + return + if(get_dist(user, src) > 1 && !user.incapacitated()) + to_chat(user, "You have moved too far away!") + return + to_chat(user, "You make some modifications to [src] using your pen.") + switch(switchDesign) + if(TRANQ) + icon_state = "tranqbox" + if(RUBBER) + icon_state = "rubberbox" + if(BUCK) + icon_state = "buckbox" + if(SLUG) + icon_state = "slugbox" + if(BEAN) + icon_state = "beanbox" + if(TASER) + icon_state = "stunbox" + if(DRAGON) + icon_state = "dragonsbox" + if(HOLY) + icon_state = "holybox" + if(CLOWN) + icon_state = "partybox" + if(METEOR) + icon_state = "meteorbox" + if(ION) + icon_state = "ionbox" + if(PULSE) + icon_state = "pulsebox" + if(INCENDIARY) + icon_state = "incendiarybox" + if(LASERSHOT) + icon_state = "lasershotbox" + if(FRAG) + icon_state = "frag12box" + closed_icon_state = icon_state + update_appearance(UPDATE_ICON_STATE|UPDATE_OVERLAYS) + return + +/obj/item/storage/fancy/shell/CtrlClick(mob/living/user) + if(!isliving(user)) + return + if((get_dist(user, src) > 1) || user.incapacitated()) + return + if(we_are_open) + we_are_open = FALSE + else + we_are_open = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_OVERLAYS) + /obj/item/storage/fancy/shell/update_icon_state() - icon_state = "open" + if(we_are_open) + icon_state = "open" + else + icon_state = closed_icon_state /obj/item/storage/fancy/shell/populate_contents() + closed_icon_state = icon_state if(!shell_type) return for(var/i in 1 to storage_slots) @@ -766,6 +854,8 @@ /obj/item/storage/fancy/shell/update_overlays() . = ..() + if(!we_are_open) + return var/list/cached_contents = contents for(var/index in 1 to length(cached_contents)) var/obj/shell = cached_contents[index] @@ -776,6 +866,19 @@ . += "shell_box_front" // need to add another overlay to prevent from other overlays from showing on top +/obj/item/storage/fancy/shell/handle_item_insertion(obj/item/I, mob/user, prevent_warning) + . = ..() + if(.) + we_are_open = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_OVERLAYS) + +/obj/item/storage/fancy/shell/remove_from_storage(obj/item/I, atom/new_location) + . = ..() + if(.) + we_are_open = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_OVERLAYS) + + /obj/item/storage/fancy/shell/tranquilizer name = "ammunition box (Tranquilizer darts)" desc = "A small box capable of holding eight shotgun shells." @@ -848,7 +951,7 @@ icon_state = "pulsebox" shell_type = /obj/item/ammo_casing/shotgun/pulseslug -/obj/item/storage/fancy/shell/incindiary +/obj/item/storage/fancy/shell/incendiary name = "ammunition box (Incendiary slug)" desc = "A small box capable of holding eight shotgun shells." icon_state = "incendiarybox" @@ -866,6 +969,27 @@ icon_state = "frag12box" shell_type = /obj/item/ammo_casing/shotgun/frag12 +/obj/item/storage/fancy/shell/empty + name = "custom shotgun ammunition box" + desc = "A small box capable of holding eight shotgun shells. Hand packed, just for you!" + icon_state = "buckbox" + +#undef TRANQ +#undef RUBBER +#undef BUCK +#undef SLUG +#undef BEAN +#undef TASER +#undef DRAGON +#undef HOLY +#undef CLOWN +#undef METEOR +#undef ION +#undef PULSE +#undef INCENDIARY +#undef LASERSHOT +#undef FRAG + //////////////// /* Donk Boxes */ //////////////// diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 11facf56e26..d2dce8c6b87 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -267,7 +267,7 @@ /obj/item/ammo_casing/shotgun/laserslug name = "laser slug" desc = "A rudimentary 12 gauge shotgun shell that replicates the effects of a laser weapon with a low-powered laser." - icon_state = "laser" + icon_state = "improvised" projectile_type = /obj/item/projectile/beam/laser muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL @@ -329,7 +329,7 @@ /obj/item/ammo_casing/shotgun/holy name = "holy water dart" desc = "A 12 gauge dart shell loaded with holy water." - icon_state = "dart" + icon_state = "holydart" projectile_type = /obj/item/projectile/bullet/dart/syringe/holy muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL diff --git a/code/modules/supply/supply_packs/pack_security.dm b/code/modules/supply/supply_packs/pack_security.dm index fe4f2626cc5..de1b2ec0f98 100644 --- a/code/modules/supply/supply_packs/pack_security.dm +++ b/code/modules/supply/supply_packs/pack_security.dm @@ -302,6 +302,27 @@ containertype = /obj/structure/closet/crate/secure/plasma containername = "lever action rifle crate" +/datum/supply_packs/security/armory/beanammo + name = "Beanbag Shell Crate" + contains = list(/obj/item/storage/fancy/shell/beanbag, + /obj/item/storage/fancy/shell/beanbag) + cost = 175 // Just print them at cargo + containername = "beanbag shell crate" + +/datum/supply_packs/security/armory/rubberammo + name = "Rubbershot Shell Crate" + contains = list(/obj/item/storage/fancy/shell/rubbershot, + /obj/item/storage/fancy/shell/rubbershot) + cost = 175 // Just print them at cargo + containername = "rubbershot shell crate" + +/datum/supply_packs/security/armory/incendiaryammo + name = "Incendiary Shell Crate" + contains = list(/obj/item/storage/fancy/shell/incendiary, + /obj/item/storage/fancy/shell/incendiary) + cost = 225 // This is cargo printable, but slightly increased in cost due to it being lethal + containername = "incendiary shell crate" + /datum/supply_packs/security/armory/tranqammo name = "Tranquilizer Shell Crate" contains = list(/obj/item/storage/fancy/shell/tranquilizer, @@ -316,6 +337,27 @@ cost = 400 containername = "holy water shell crate" +/datum/supply_packs/security/armory/dragonsbreathammo + name = "Dragonsbreath Shell Crate" + contains = list(/obj/item/storage/fancy/shell/dragonsbreath, + /obj/item/storage/fancy/shell/dragonsbreath) + cost = 400 + containername = "dragonsbreath shell crate" + +/datum/supply_packs/security/armory/ionshotammo + name = "Ionshot Shell Crate" + contains = list(/obj/item/storage/fancy/shell/ion, + /obj/item/storage/fancy/shell/ion) + cost = 400 + containername = "ionshot shell crate" + +/datum/supply_packs/security/armory/lasershotammo + name = "Lasershot Shell Crate" + contains = list(/obj/item/storage/fancy/shell/lasershot, + /obj/item/storage/fancy/shell/lasershot) + cost = 400 + containername = "lasershot shell crate" + /datum/supply_packs/security/armory/disablersmg name = "WT-450 Disabler SMG Crate" contains = list(/obj/item/gun/energy/disabler/smg, diff --git a/icons/obj/bullet.dmi b/icons/obj/bullet.dmi index 5921f4a59b0ecc0a89f330e10e0e6b5fd4a26968..8f28f3aa4c011f4011c2eaaf7645937684d05ef6 100644 GIT binary patch delta 3602 zcmY*c2{fBo*rsj9OiY=ot!fEFQ7UbS}fv{KZPCh`%j7PSpZ(MU@x zMeU`UglUPrVFp!2>`ARD5fO>_)0xxr|NnQs^WN`!?>+Z@pXWaBz2_!sc4(&SN*ibB z)3-_}g2lngOQux8W&kX>1D$uYsgtgx=EGdXnH(uEoe2}Giijbs+Sm4&jWM=h zQLph)+mL&r>vF%zn(|Se>zPiew@;*luKu_(D79I!4m=6)%kx0*_D*cR%r@#A^tuHP z*9Keos%@TEOMnq3`p$J6UfXj_ZtV5~Y1NBrZh)>DgS_nwz5eJx?IEWkn3s#0hq2D9 zk=rrJ)>0O65%2EWzD4Z_qM&wY|9)6H&LsDiO-6I5jYjzUV>_s+`VfnMEsT)Sa*kBC z5^N5{(qmk($tyn$?$B^@lq1oyOR-D06ldtvx?K{42AC_TlU`M<&Y3;O)CmZ}jL5e@*4W-3Q~9 z_wQ;OqrX;4Oc)i%9y`9Xs(u3Uk8(kOJt#1}9+*(?Q&!*k`D$zIi)*m~oRt?W^?H7^ zbGRH6`{w0vhjG{b8!~6iEm9X!@>6-TJ2(}SYD7b(v~ zKyrJzs*y=>A-IH`>q#kAA39<T8FwnFPY>Pq@TxmF&?2k&PE;E*6c- zq&}FN%w09JIuIayw%TdAYc}m?vcmxW XY7*a+EE?r$XRdl>`?>r!SdD$^L=E{6 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 delta 3539 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 delta 1701 zcmV;W23q-^59$q&BLV>$ktI5Rp@J75EU64fB+v4aTlGPovk4x0EGaquC90h9uR03 zl9H0vx)0%60Ez&Lqpwx`(`)~P0Jz6l$*2PVW&o8d|B91P|NsB5udla%008Dn4Cbr= zGnoJ+Gk1O(;n~^Ql$4YoI!h%bCD#A||Ahn;m zJP^N+05fI)W&q4TKR+T@XcZtUfDiyc004crlP7p&^Z*}KRaL;iz(iOHcmMzZ0d!JM zQvg8b*k%9#0SbClSad{xWpiV4X>fFDZ*Bkpc$|&Yv2Md45C-7cJOxVjs&Tt^sS-sQ znpcRxz5pub+ym0~?Mof0WBqTO_3P6CXSVwFa6Fy${_Ui0Bsp->FZ%i6QFWhTEWQ;_ zz3My#=gYmw#T07G4bPM|svCpkR_;`H6*JL&{TIrfV!T-Xx?F{SQ(4UyG3lelSA%Jh zS7TDGB|*Re18p7N5zc`enS^i_<8rJH;v(pk3bpr}!^BaHe=4_00d}BL_t(|ob8(nR})thg+mxjLSvC& zRYYadR;>y&v{=MP)$l5q_)H0!{Quw4J2?rBc%3sjXNHr&{#+<)-L>yMd%}?A-jiGo zj2BZ=))R=y_n4lhf32qx5X=k_SWhD$n7MSqq#7t(Diqv*_=UoR8aSDMa$kY|{F7?n zWd6zh5$exBnXkaq@UKzH+gY(#qHjvYqGSM_el{R_?_$w6vl4y&M4mrmeQqZB;VXif zQT64^KVF{e;l3%KwLT34b3^zBxH3PVonCJsU!I$iZ-%EgNV;Aw``446FV*Mn1jS&8VsJ;c?*2FGT~B(xRPQ!e zUJk3(>MT+Hc0k>__I!SW;&S+N==8tzs1{ETs9e{7o}X}of&c1v29&RB&rh&H7!h58 zQmI<<45(Yzp3gGtHuyCR`~KY(xSQ^}_WT4poFeUY?fC!z0002sd}EvMr_&GE<@+i0 z1Gf2o3jKg>zOU~GC|tcqi1YpXgjoL@A?gQu`TPSyobNv*#QH~ss2}KEffd5L!Go0* zR=-Mrc=ZogS6TfU;nhD{TRZOtn44&YGr;IqIRlJ-O=}<)YrT2CpISd)mG7t44_M{< znfC+Zt~by3Gw%n+U2mT6XWkEtyWT$EM?U}n0001Ru|Yq8egOSIrSdx=&i8BU>+7{z zO|1WekoNJ1LpZY`T+m{004lC z4f+A}17qF~Jbm^oJN+PBeg6E#-!EUimgW2P?d=`HKfrdJ0n+d8?nd&_^@DtVZ*Tv9 zpM%3UvV7lNqDHg#$3MW+IV4d%yAF$5%(GQsC`{)M%0001g04_G@2ha~>+z)8;{Y?9XLAZKE_%~=X`F`~I z0Ycm_9229TA8pWf7C(P!x80X4-;X{&K#2N<==@Hn+jU>EexS|7<6n-LbUAwbo)A5L z&z;{njyXR`zTeK+0CzrbfVqi|l=;5)^8?3m=bPvI=m)Ixee?s?`9Asq>wF)7{eX48 zkA46E00000Og7ql-xhT~Z;d*iw?>`M^Xu7?AY6@qem~0ZJ6TPafd2FQ-EO_^{u1Q# zZoLz~o-O}B{vP2qP>)TAbGa_Fo-OCX0CN+^KL4L!JzLcIyfx~4-Wqj2Z;d*iw?>`M vTcghBtx@Om)~NG&YxMcNHOS`}fsFqEC19#j$Ys&l00000NkvXXu0mjfvcXJ8