* Thoroughly resprites boxes. They're now more modular and, importantly,
colorable.
* Resprites cardboard, as a material.
* Repaths boxes behind the scenes to be more object-oriented, with boxes
being resorted into their own subtypes. You might notice this in the
gargantuan amount of files this PR changes.

Part of a bigger (yet modestly-sized still) resprites project. Atomized
the boxes bit into this PR specifically so that any conflicts don't
destroy any other spriting PRs.

<img width="652" height="273" alt="image"
src="https://github.com/user-attachments/assets/5590b22d-c9d7-49b5-9adf-0b6e01a6962b"
/>

<img width="383" height="345" alt="image"
src="https://github.com/user-attachments/assets/aab83040-2d5d-4283-b019-3d6bed2e3e47"
/>

<img width="142" height="343" alt="image"
src="https://github.com/user-attachments/assets/75a98d36-0171-4e48-9dec-de5511f35d39"
/>

<img width="127" height="225" alt="image"
src="https://github.com/user-attachments/assets/a1ff8b1b-bd2a-4c0d-b538-32fe401724c3"
/>

<img width="334" height="399" alt="image"
src="https://github.com/user-attachments/assets/e41330ac-ed4a-4e81-a87a-5ba901b47b5c"
/>
This commit is contained in:
naut
2025-10-08 00:59:55 +08:00
committed by GitHub
parent aa22ad931b
commit dfe57a310f
177 changed files with 1147 additions and 1117 deletions
+4 -4
View File
@@ -173,7 +173,7 @@
description = "A large box of random, leftover produce."
price = 35
items = list(
/obj/item/storage/box/produce
/obj/item/storage/box/large/produce
)
access = 0
container_type = "crate"
@@ -1388,7 +1388,7 @@
description = "A box containing some tins of green tea leaves."
price = 20
items = list(
/obj/item/storage/box/tea
/obj/item/storage/box/unique/tea
)
access = 0
container_type = "crate"
@@ -1401,7 +1401,7 @@
description = "A box containing some tins of oolong tea leaves."
price = 20
items = list(
/obj/item/storage/box/tea/tieguanyin
/obj/item/storage/box/unique/tea/tieguanyin
)
access = 0
container_type = "crate"
@@ -1414,7 +1414,7 @@
description = "A box containing some tins of black tea leaves."
price = 20
items = list(
/obj/item/storage/box/tea/jaekseol
/obj/item/storage/box/unique/tea/jaekseol
)
access = 0
container_type = "crate"
+1 -1
View File
@@ -753,7 +753,7 @@
description = "A sealed, cooled container to keep organs from decaying."
price = 300
items = list(
/obj/item/storage/box/freezer/organcooler
/obj/item/storage/box/unique/freezer/organcooler
)
access = ACCESS_MEDICAL
container_type = "crate"
+5 -5
View File
@@ -5,7 +5,7 @@
description = "Drymate brand stok cubes, shipped from Moghes. Just add water!"
price = 250
items = list(
/obj/item/storage/box/monkeycubes/stokcubes
/obj/item/storage/box/unique/monkeycubes/stokcubes
)
access = 0
container_type = "crate"
@@ -19,7 +19,7 @@
description = "Drymate brand vkrexi cubes. Just add water!"
price = 250
items = list(
/obj/item/storage/box/monkeycubes/vkrexicubes
/obj/item/storage/box/unique/monkeycubes/vkrexicubes
)
access = 0
container_type = "crate"
@@ -33,7 +33,7 @@
description = "Drymate brand farwa cubes, shipped from Adhomai. Just add water!"
price = 250
items = list(
/obj/item/storage/box/monkeycubes/farwacubes
/obj/item/storage/box/unique/monkeycubes/farwacubes
)
access = 0
container_type = "crate"
@@ -47,7 +47,7 @@
description = "Drymate brand monkey cubes. Just add water!"
price = 250
items = list(
/obj/item/storage/box/monkeycubes
/obj/item/storage/box/unique/monkeycubes
)
access = 0
container_type = "crate"
@@ -61,7 +61,7 @@
description = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!"
price = 250
items = list(
/obj/item/storage/box/monkeycubes/neaeracubes
/obj/item/storage/box/unique/monkeycubes/neaeracubes
)
access = 0
container_type = "crate"
+3 -3
View File
@@ -133,7 +133,7 @@
description = "A box containing 7 tear gas grenades. A gas mask is printed on the label. WARNING: Exposure carries risk of serious injuries."
price = 450
items = list(
/obj/item/storage/box/teargas
/obj/item/storage/box/tactical/teargas
)
access = ACCESS_SECURITY
container_type = "crate"
@@ -147,7 +147,7 @@
description = "A box containing 7 antipersonnel flashbang grenades. WARNING: Can cause permanent vision or hearing loss. Use with caution."
price = 520
items = list(
/obj/item/storage/box/flashbangs
/obj/item/storage/box/tactical/flashbangs
)
access = ACCESS_SECURITY
container_type = "crate"
@@ -161,7 +161,7 @@
description = "A box containing 5 military grade EMP grenades. WARNING: Do not use near unshielded electronics or biomechanical augmentations."
price = 1450
items = list(
/obj/item/storage/box/emps
/obj/item/storage/box/tactical/emps
)
access = ACCESS_SECURITY
container_type = "crate"
+8 -8
View File
@@ -245,7 +245,7 @@
description = "A box of less-lethal beanbag shells."
price = 65
items = list(
/obj/item/storage/box/beanbags
/obj/item/storage/box/shells/beanbags
)
access = ACCESS_SECURITY
container_type = "crate"
@@ -259,7 +259,7 @@
description = "A box of EMP-inducing 'haywire' shotgun shells."
price = 90
items = list(
/obj/item/storage/box/haywireshells
/obj/item/storage/box/shells/haywireshells
)
access = ACCESS_SECURITY
container_type = "crate"
@@ -273,7 +273,7 @@
description = "A box of incendiary shotgun shells."
price = 95
items = list(
/obj/item/storage/box/incendiaryshells
/obj/item/storage/box/shells/incendiaryshells
)
access = ACCESS_SECURITY
container_type = "crate"
@@ -287,7 +287,7 @@
description = "A box of shotgun buckshot shells."
price = 70
items = list(
/obj/item/storage/box/shotgunshells
/obj/item/storage/box/shells/buckshot
)
access = ACCESS_SECURITY
container_type = "crate"
@@ -301,7 +301,7 @@
description = "A box of shotgun slugs."
price = 80
items = list(
/obj/item/storage/box/shotgunammo
/obj/item/storage/box/shells/slugs
)
access = ACCESS_SECURITY
container_type = "crate"
@@ -315,7 +315,7 @@
description = "A box of illuminating shotgun shells."
price = 65
items = list(
/obj/item/storage/box/flashshells
/obj/item/storage/box/shells/flashshells
)
access = ACCESS_SECURITY
container_type = "crate"
@@ -483,7 +483,7 @@
description = "A box of 50-caliber tranquilizer darts."
price = 50
items = list(
/obj/item/storage/box/tranquilizer
/obj/item/storage/box/shells/tranquilizer
)
access = ACCESS_ARMORY
container_type = "crate"
@@ -497,7 +497,7 @@
description = "A box with several compact tungsten slugs, aimed for use in gauss carbines."
price = 125
items = list(
/obj/item/storage/box/tungstenslugs
/obj/item/storage/box/ammo/tungstenslugs
)
access = ACCESS_ARMORY
container_type = "crate"
+19 -19
View File
@@ -306,7 +306,7 @@ STOCK_ITEM_COMMON(rollerbed, 2.2)
new /obj/item/roller(L)
STOCK_ITEM_COMMON(smokebombs, 1.1)
new /obj/item/storage/box/smokebombs(L)
new /obj/item/storage/box/tactical/smokebombs(L)
STOCK_ITEM_COMMON(jar, 2)
new /obj/item/glass_jar(L)
@@ -428,10 +428,10 @@ STOCK_ITEM_COMMON(snacks, 4)
L = get_turf(pick(CS.tables))
var/list/snacks = list(
/obj/item/storage/box/donkpockets = 10,
/obj/item/storage/box/sinpockets = 5,
/obj/item/storage/box/unique/donkpockets = 10,
/obj/item/storage/box/unique/donkpockets/sinpockets = 5,
/obj/item/storage/box/snack = 10,
/obj/item/storage/box/produce = 8,
/obj/item/storage/box/large/produce = 8,
/obj/item/storage/field_ration = 3,
/obj/item/storage/field_ration/nka = 1
)
@@ -504,7 +504,7 @@ STOCK_ITEM_COMMON(gasmask, 2)
new type(L)
STOCK_ITEM_COMMON(mining, 2)
var/list/mine_items = list(/obj/item/shovel, /obj/item/device/flashlight/lantern, /obj/item/mining_scanner, /obj/item/storage/box/excavation)
var/list/mine_items = list(/obj/item/shovel, /obj/item/device/flashlight/lantern, /obj/item/mining_scanner, /obj/item/storage/box/unique/excavation)
for(var/i in 1 to rand(1, 2))
var/to_spawn = pick(mine_items)
new to_spawn(L)
@@ -528,20 +528,20 @@ STOCK_ITEM_COMMON(camera, 1)
STOCK_ITEM_COMMON(flagbox, 3)
var/list/flagbox_type = list(
/obj/item/storage/box/flags/sol,
/obj/item/storage/box/flags/biesel,
/obj/item/storage/box/flags/coc,
/obj/item/storage/box/flags/galataea,
/obj/item/storage/box/flags/dominia,
/obj/item/storage/box/flags/elyra,
/obj/item/storage/box/flags/diona,
/obj/item/storage/box/flags/unathi,
/obj/item/storage/box/flags/skrell,
/obj/item/storage/box/flags/tajara,
/obj/item/storage/box/flags/vaurca,
/obj/item/storage/box/flags/goldendeep,
/obj/item/storage/box/flags/corporate,
/obj/item/storage/box/flags/misc
/obj/item/storage/box/large/flags/sol,
/obj/item/storage/box/large/flags/biesel,
/obj/item/storage/box/large/flags/coc,
/obj/item/storage/box/large/flags/galataea,
/obj/item/storage/box/large/flags/dominia,
/obj/item/storage/box/large/flags/elyra,
/obj/item/storage/box/large/flags/diona,
/obj/item/storage/box/large/flags/unathi,
/obj/item/storage/box/large/flags/skrell,
/obj/item/storage/box/large/flags/tajara,
/obj/item/storage/box/large/flags/vaurca,
/obj/item/storage/box/large/flags/goldendeep,
/obj/item/storage/box/large/flags/corporate,
/obj/item/storage/box/large/flags/misc
)
var/type = pick(flagbox_type)
new type(L)
@@ -43,13 +43,13 @@ STOCK_ITEM_UNCOMMON(implants, 1)
if(prob(50))
new /obj/item/storage/box/cdeathalarm_kit(L)
else
new /obj/item/storage/box/trackimp(L)
new /obj/item/storage/box/tactical/trackimp(L)
STOCK_ITEM_UNCOMMON(flashbang, 0.75)
new /obj/item/storage/box/flashbangs(L)
new /obj/item/storage/box/tactical/flashbangs(L)
STOCK_ITEM_UNCOMMON(stinger, 0.75)
new /obj/item/storage/box/stingers(L)
new /obj/item/storage/box/tactical/stingers(L)
STOCK_ITEM_UNCOMMON(arrest, 1)
if(prob(60))
@@ -60,13 +60,13 @@ STOCK_ITEM_UNCOMMON(arrest, 1)
STOCK_ITEM_UNCOMMON(monkey, 2)
if(prob(40))
var/type = pick( \
/obj/item/storage/box/monkeycubes/farwacubes, \
/obj/item/storage/box/monkeycubes/stokcubes, \
/obj/item/storage/box/monkeycubes/neaeracubes \
/obj/item/storage/box/unique/monkeycubes/farwacubes, \
/obj/item/storage/box/unique/monkeycubes/stokcubes, \
/obj/item/storage/box/unique/monkeycubes/neaeracubes \
)
new type(L)
else
new /obj/item/storage/box/monkeycubes(L)
new /obj/item/storage/box/unique/monkeycubes(L)
STOCK_ITEM_UNCOMMON(specialcrayon, 1.5)
if(prob(50))
@@ -340,9 +340,9 @@ STOCK_ITEM_UNCOMMON(wristbound, 0.5)
STOCK_ITEM_UNCOMMON(pops, 0.5)
if(prob(85))
new /obj/item/storage/box/snappops(L)
new /obj/item/storage/box/unique/snappops(L)
else if (prob(25))
new /obj/item/storage/box/snappops/syndi(L)
new /obj/item/storage/box/unique/snappops/syndi(L)
else
new /obj/item/storage/box/partypopper(L)
+1 -1
View File
@@ -10,7 +10,7 @@ STOCK_ITEM_RARE(uranium, 3)
new /obj/item/stack/material/uranium(L, rand(5,30))
STOCK_ITEM_RARE(EMP, 0.75)
new /obj/item/storage/box/emps(L)
new /obj/item/storage/box/tactical/emps(L)
STOCK_ITEM_RARE(hypercell, 3)
new /obj/item/cell/hyper(L)
@@ -172,14 +172,14 @@
display_name = "konyang-cha tins"
description = "Tins of tea leaves made by Konyang-cha."
cost = 1
path = /obj/item/storage/box/tea
path = /obj/item/storage/box/unique/tea
/datum/gear/chatins/New()
..()
var/list/chatins = list()
chatins["sencha cha-tin"] = /obj/item/storage/box/tea
chatins["tieguanyin cha-tin"] = /obj/item/storage/box/tea/tieguanyin
chatins["jaekseol cha-tin"] = /obj/item/storage/box/tea/jaekseol
chatins["sencha cha-tin"] = /obj/item/storage/box/unique/tea
chatins["tieguanyin cha-tin"] = /obj/item/storage/box/unique/tea/tieguanyin
chatins["jaekseol cha-tin"] = /obj/item/storage/box/unique/tea/jaekseol
gear_tweaks += new /datum/gear_tweak/path(chatins)
/datum/gear/teapots
@@ -301,7 +301,7 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat
allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/storage/box/excavation,/obj/item/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/pickaxe/hand,/obj/item/storage/bag/fossils,/obj/item/material/twohanded/fireaxe,/obj/item/device/breath_analyzer)
allowed = list(/obj/item/device/flashlight,/obj/item/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/storage/box/unique/excavation,/obj/item/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/pickaxe/hand,/obj/item/storage/bag/fossils,/obj/item/material/twohanded/fireaxe,/obj/item/device/breath_analyzer)
req_access = list()
req_one_access = list()
+4 -4
View File
@@ -104,7 +104,7 @@
var/gift_type = pick(
/obj/item/storage/wallet,
/obj/item/storage/photo_album,
/obj/item/storage/box/snappops,
/obj/item/storage/box/unique/snappops,
/obj/item/storage/box/fancy/crayons,
/obj/item/storage/belt/champion,
/obj/item/soap/deluxe,
@@ -202,7 +202,7 @@
/obj/random/wizard_dressup,
/obj/item/storage/wallet,
/obj/item/storage/photo_album,
/obj/item/storage/box/snappops,
/obj/item/storage/box/unique/snappops,
/obj/item/storage/box/fancy/crayons,
/obj/item/soap/deluxe,
/obj/item/pen/invisible,
@@ -294,7 +294,7 @@
/obj/item/device/paicard,
/obj/item/clothing/accessory/horrible,
/obj/item/clothing/shoes/heels,
/obj/item/storage/box/donkpockets,
/obj/item/storage/box/unique/donkpockets,
/obj/item/reagent_containers/glass/beaker/teapot,
/obj/item/device/flashlight/lantern,
/obj/item/clothing/mask/balaclava,
@@ -366,7 +366,7 @@
/mob/living/simple_animal/parrot,
/mob/living/simple_animal/hostile/commanded/dog/pug,
/obj/item/target/alien,
/obj/item/storage/box/candy)
/obj/item/storage/box/large/candy)
return picked_gift_type
+2 -2
View File
@@ -188,13 +188,13 @@
..()
recipes += new /datum/stack_recipe_list("[display_name] recipes",
list(
new /datum/stack_recipe("box", /obj/item/storage/box),
new /datum/stack_recipe("box", /obj/item/storage/box/blank),
new /datum/stack_recipe("donut box", /obj/item/storage/box/fancy/donut/empty),
new /datum/stack_recipe("egg carton", /obj/item/storage/box/fancy/egg_box),
new /datum/stack_recipe("candle pack", /obj/item/storage/box/fancy/candle_box/empty),
new /datum/stack_recipe("crayon box", /obj/item/storage/box/fancy/crayons/empty),
new /datum/stack_recipe("pizza box", /obj/item/pizzabox),
new /datum/stack_recipe("papersack", /obj/item/storage/box/papersack),
new /datum/stack_recipe("papersack", /obj/item/storage/box/unique/papersack),
new /datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3),
new /datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg)
))
+1 -1
View File
@@ -891,7 +891,7 @@
stack_type = /obj/item/stack/material/cardboard
flags = MATERIAL_BRITTLE
integrity = 10
icon_colour = "#AAAAAA"
icon_colour = COLOR_CARDBOARD
hardness = 1
weight = 1
protectiveness = 0 // 0%
+1 -1
View File
@@ -152,7 +152,7 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
// Don't process if we're in a freezer, an MMI or a stasis bag.or a freezer or something I dunno
if(istype(loc,/obj/item/device/mmi))
return
if(istype(loc,/obj/structure/closet/body_bag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer) || istype(loc,/obj/item/storage/box/freezer))
if(istype(loc,/obj/structure/closet/body_bag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer) || istype(loc,/obj/item/storage/box/unique/freezer))
return
//Process infections
if ((status & ORGAN_ROBOT) || (owner && owner.species && (owner.species.flags & IS_PLANT)))
@@ -41,7 +41,7 @@
/datum/design/item/mining/pick_set
req_tech = list(TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
materials = list(DEFAULT_WALL_MATERIAL = 1700, MATERIAL_GLASS = 200)
build_path = /obj/item/storage/box/excavation
build_path = /obj/item/storage/box/unique/excavation
//Frames
/datum/design/item/mining/ka_frame01
@@ -27,7 +27,7 @@
new /obj/item/clothing/glasses/safety/goggles/science(src)
new /obj/item/device/radio/headset/headset_sci(src)
new /obj/item/storage/belt/archaeology(src)
new /obj/item/storage/box/excavation(src)
new /obj/item/storage/box/unique/excavation(src)
new /obj/item/taperoll/science(src)
new /obj/item/clothing/head/hardhat(src)
new /obj/item/sampler(src)
@@ -39,7 +39,7 @@
/obj/structure/closet/excavation/fill()
new /obj/item/storage/belt/archaeology(src)
new /obj/item/storage/box/excavation(src)
new /obj/item/storage/box/unique/excavation(src)
new /obj/item/device/flashlight/lantern(src)
new /obj/item/device/ano_scanner(src)
new /obj/item/device/depth_scanner(src)
@@ -26,7 +26,7 @@
/obj/item/anodevice,
/obj/item/clothing/glasses,
/obj/item/wrench,
/obj/item/storage/box/excavation,
/obj/item/storage/box/unique/excavation,
/obj/item/anobattery,
/obj/item/device/ano_scanner,
/obj/item/ore_detector,
@@ -39,7 +39,7 @@
/obj/item/device/gps = 1,
/obj/item/device/measuring_tape = 1,
/obj/item/pickaxe/hand = 1,
/obj/item/storage/box/excavation = 1,
/obj/item/storage/box/unique/excavation = 1,
/obj/item/device/depth_scanner = 1,
/obj/item/device/ano_scanner = 1,
/obj/item/ore_detector = 1,
@@ -156,13 +156,13 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Pack for holding pickaxes
/obj/item/storage/box/excavation
/obj/item/storage/box/unique/excavation
name = "excavation pick set"
icon = 'icons/obj/storage/boxes.dmi'
icon_state = "excavation"
desc = "A rugged metal case containing a set of standardized picks used in archaeological digs."
item_state = "box"
foldable = /obj/item/stack/material/cardboard //BubbleWrap
foldable = null
storage_slots = 7
w_class = WEIGHT_CLASS_SMALL
can_hold = list(/obj/item/pickaxe/brush,\
@@ -176,7 +176,7 @@
max_w_class = WEIGHT_CLASS_NORMAL
use_to_pickup = TRUE // for picking up broken bulbs, not that most people will try
/obj/item/storage/box/excavation/fill()
/obj/item/storage/box/unique/excavation/fill()
..()
new /obj/item/pickaxe/brush(src)
new /obj/item/pickaxe/one_pick(src)