Refactors bar drink icons into datum singletons / unit tests them (#71810)

## About The Pull Request

- Refactors bar drink icons.
- Juice boxes no longer have a hard-coded list of a bunch of reagent
types in their update state, and use a system similar to bar drinks.
- Glass and shot glass icon information are no longer stored on the
drink. Instead, they are now stored in glass style datums. These datums
store name, description, icon, and icon state of a certain container +
reagent type.
- Glass styles are applied via the `takes_reagent_appearance` component.
Glasses, shot glasses, and juice boxes have this component.
- This comes with support for being able to have drink icons from
different files, rather than requiring the drinks DMI.
- The britmug is now a subtype of mug. 
   -  1 new icon: britmug filled.
- Various small code clean-up around drink reagents. 
- Unit tests icon state setups for glass styles as well as all `/drink`
reagent container subtypes.
- Splits up the massive `drinks.dmi` into separate files. 

*Disclaimer: Much of the drinking glass datums were written via script
automatically, so there may be errors present.*

## Why It's Good For The Game

- Much easier to add new drink styles, much more modular. 
- It is no longer necessary for new drinks to be added to the massive
`drinks.dmi`. People working with drinks in the future can simply add
their glass style datum and point it to their file wherever it may be.
- Expandable system. Adding a new type of reagent container that works
similarly to bar drinks but for different types of icons is a breeze.
- Ensures going forward no bar drinks have invisible sprites. 

## Changelog

🆑 Melbert
refactor: Refactored how bar drinks set their icons. Juice boxes now use
the same system.
/🆑
This commit is contained in:
MrMelbert
2022-12-13 20:23:01 -06:00
committed by GitHub
parent 3c4815497f
commit ecde5633bd
43 changed files with 2635 additions and 1414 deletions
+1 -1
View File
@@ -339,7 +339,7 @@
/area/awaymission/cabin)
"bc" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/cup/glass/britcup,
/obj/item/reagent_containers/cup/glass/mug/britcup,
/turf/open/floor/carpet,
/area/awaymission/cabin)
"bd" = (
+84 -84
View File
@@ -2442,6 +2442,27 @@
},
/turf/open/floor/wood,
/area/station/service/theater)
"aBF" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/newscaster/directional/east,
/obj/effect/spawner/random/structure/table_fancy,
/obj/item/reagent_containers/cup/glass/bottle/beer{
desc = "Whatever it is, it reeks of foul, putrid froth.";
list_reagents = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 15);
name = "Delta-Down";
pixel_x = 5;
pixel_y = 5
},
/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{
pixel_x = -3;
pixel_y = 6
},
/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{
pixel_x = -6;
pixel_y = 3
},
/turf/open/floor/wood,
/area/station/commons/dorms)
"aBL" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -15161,18 +15182,6 @@
/obj/item/clothing/mask/breath,
/turf/open/floor/iron/dark/textured_large,
/area/station/engineering/atmos/storage/gas)
"dDe" = (
/obj/structure/table/reinforced,
/obj/machinery/newscaster/directional/north,
/obj/item/clipboard,
/obj/item/toy/figure/engineer{
pixel_x = -6
},
/obj/item/toy/figure/atmos{
pixel_x = 6
},
/turf/open/floor/wood,
/area/station/engineering/break_room)
"dDk" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment{
@@ -27025,30 +27034,6 @@
/obj/effect/spawner/random/food_or_drink/donkpockets,
/turf/open/floor/iron,
/area/station/maintenance/department/security)
"gxk" = (
/obj/item/paper_bin{
pixel_x = -7
},
/obj/item/pen{
pixel_x = -7
},
/obj/item/reagent_containers/cup/glass/britcup{
pixel_x = 6;
pixel_y = -4
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/structure/window{
dir = 1
},
/obj/structure/table,
/obj/structure/extinguisher_cabinet/directional/west,
/obj/effect/turf_decal/tile/brown/anticorner/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/station/cargo/drone_bay)
"gxv" = (
/obj/structure/table,
/obj/item/restraints/handcuffs,
@@ -45886,6 +45871,30 @@
/obj/machinery/status_display/ai/directional/north,
/turf/open/floor/iron,
/area/station/security/prison/safe)
"lde" = (
/obj/item/paper_bin{
pixel_x = -7
},
/obj/item/pen{
pixel_x = -7
},
/obj/item/reagent_containers/cup/glass/mug/britcup{
pixel_x = 6;
pixel_y = -4
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/structure/window{
dir = 1
},
/obj/structure/table,
/obj/structure/extinguisher_cabinet/directional/west,
/obj/effect/turf_decal/tile/brown/anticorner/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/station/cargo/drone_bay)
"ldh" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/atmospherics/pipe/bridge_pipe/scrubbers/visible,
@@ -50584,6 +50593,23 @@
/obj/machinery/light/directional/north,
/turf/open/floor/iron,
/area/station/engineering/main)
"mnh" = (
/obj/structure/table/reinforced,
/obj/machinery/airalarm/directional/north,
/obj/effect/spawner/random/entertainment/cigarette_pack{
pixel_x = 3;
pixel_y = 2
},
/obj/effect/spawner/random/entertainment/cigarette_pack{
pixel_x = 3;
pixel_y = 2
},
/obj/item/storage/box/coffeepack{
pixel_x = -13;
pixel_y = 7
},
/turf/open/floor/wood,
/area/station/engineering/break_room)
"mnz" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -51573,6 +51599,18 @@
},
/turf/open/floor/iron/dark,
/area/station/command/corporate_showroom)
"mzO" = (
/obj/structure/table/reinforced,
/obj/machinery/newscaster/directional/north,
/obj/item/clipboard,
/obj/item/toy/figure/engineer{
pixel_x = -6
},
/obj/item/toy/figure/atmos{
pixel_x = 6
},
/turf/open/floor/wood,
/area/station/engineering/break_room)
"mzV" = (
/obj/effect/landmark/start/hangover,
/obj/effect/turf_decal/bot,
@@ -65562,6 +65600,11 @@
/obj/effect/turf_decal/tile/red/half/contrasted,
/turf/open/floor/iron,
/area/station/service/kitchen/abandoned)
"pXB" = (
/obj/structure/table/reinforced,
/obj/machinery/coffeemaker/impressa,
/turf/open/floor/wood,
/area/station/engineering/break_room)
"pXK" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -79628,27 +79671,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/medical/morgue)
"twv" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/newscaster/directional/east,
/obj/effect/spawner/random/structure/table_fancy,
/obj/item/reagent_containers/cup/glass/bottle/beer{
desc = "Whatever it is, it reeks of foul, putrid froth.";
list_reagents = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 15);
name = "Delta-Down";
pixel_x = 5;
pixel_y = 5
},
/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{
pixel_x = -3;
pixel_y = 6
},
/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{
pixel_x = -6;
pixel_y = 3
},
/turf/open/floor/wood,
/area/station/commons/dorms)
"tww" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -82157,23 +82179,6 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/atmos)
"ubg" = (
/obj/structure/table/reinforced,
/obj/machinery/airalarm/directional/north,
/obj/effect/spawner/random/entertainment/cigarette_pack{
pixel_x = 3;
pixel_y = 2
},
/obj/effect/spawner/random/entertainment/cigarette_pack{
pixel_x = 3;
pixel_y = 2
},
/obj/item/storage/box/coffeepack{
pixel_x = -13;
pixel_y = 7
},
/turf/open/floor/wood,
/area/station/engineering/break_room)
"ubk" = (
/obj/structure/cable,
/obj/effect/turf_decal/stripes/line{
@@ -92832,11 +92837,6 @@
/obj/effect/turf_decal/trimline/yellow/warning,
/turf/open/floor/iron,
/area/station/engineering/atmos/project)
"wBr" = (
/obj/structure/table/reinforced,
/obj/machinery/coffeemaker/impressa,
/turf/open/floor/wood,
/area/station/engineering/break_room)
"wBB" = (
/obj/structure/cable,
/obj/structure/disposalpipe/junction/yjunction{
@@ -122009,7 +122009,7 @@ tsB
sch
cKK
vQj
dDe
mzO
agA
hHJ
tgl
@@ -122266,7 +122266,7 @@ lKe
nZW
qAz
vQj
ubg
mnh
agA
uzb
jLx
@@ -122523,7 +122523,7 @@ ciD
vYI
lpv
vQj
wBr
pXB
gsf
miE
tgl
@@ -139717,7 +139717,7 @@ xeH
qAV
xYZ
vGf
gxk
lde
cAw
sJd
khn
@@ -152365,7 +152365,7 @@ aaa
aad
vop
qqe
twv
aBF
yaI
fNn
uEo
+281 -281
View File
@@ -749,18 +749,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/dark,
/area/mine/laborcamp)
"aoI" = (
/obj/structure/table/wood,
/obj/item/phone{
pixel_x = -5;
pixel_y = 6
},
/obj/item/reagent_containers/cup/glass/britcup{
pixel_x = 8;
pixel_y = 8
},
/turf/open/floor/carpet/red,
/area/station/commons/vacant_room/office)
"aoK" = (
/obj/structure/table,
/obj/item/toy/cards/deck,
@@ -1729,10 +1717,6 @@
/obj/machinery/light/small/directional/east,
/turf/open/floor/iron/cafeteria,
/area/station/commons/dorms/laundry)
"aDG" = (
/obj/machinery/vending/cart,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"aDI" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -3022,14 +3006,6 @@
dir = 9
},
/area/station/science/lab)
"aWP" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/disposalpipe/segment,
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"aWS" = (
/obj/structure/table,
/obj/item/storage/box/donkpockets/donkpocketberry,
@@ -3754,6 +3730,11 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply,
/turf/open/floor/iron/white,
/area/station/medical/virology)
"bhK" = (
/obj/structure/table,
/obj/item/folder/blue,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"bie" = (
/obj/effect/spawner/structure/window/hollow/reinforced/middle{
dir = 4
@@ -5306,6 +5287,12 @@
},
/turf/open/openspace/icemoon/keep_below,
/area/icemoon/underground/explored)
"bDR" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 4
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"bDX" = (
/obj/effect/spawner/structure/window/reinforced/plasma,
/obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible,
@@ -6542,13 +6529,6 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
"bWA" = (
/obj/structure/closet/secure_closet/hop,
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"bWB" = (
/obj/structure/table,
/obj/effect/decal/cleanable/cobweb/cobweb2,
@@ -6847,32 +6827,6 @@
},
/turf/open/floor/iron,
/area/station/construction/mining/aux_base)
"caA" = (
/obj/structure/chair/office{
dir = 8
},
/obj/machinery/button/flasher{
pixel_y = -32;
id = "hopflash"
},
/obj/machinery/button/door/directional/south{
pixel_x = -8;
req_access = list("hop");
id = "hopqueue";
name = "Queue Shutters Control"
},
/obj/machinery/button/door/directional/south{
pixel_y = -24;
pixel_x = 8;
name = "Privacy Shutters Control";
req_access = list("hop");
id = "hop"
},
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 8
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"caC" = (
/obj/machinery/door/window/right/directional/south{
dir = 8;
@@ -7317,6 +7271,10 @@
},
/turf/open/floor/iron/dark,
/area/station/service/hydroponics/garden)
"cgC" = (
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"cgR" = (
/obj/structure/disposalpipe/trunk{
dir = 8
@@ -7979,10 +7937,6 @@
},
/turf/open/floor/iron,
/area/station/engineering/atmos)
"cqQ" = (
/obj/effect/mapping_helpers/ianbirthday,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/hop)
"crg" = (
/obj/machinery/door/morgue{
name = "Confession Booth"
@@ -10108,14 +10062,6 @@
dir = 1
},
/area/station/security/prison/garden)
"cXE" = (
/obj/structure/bed/dogbed/ian,
/mob/living/basic/pet/dog/corgi/ian{
dir = 8
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/hop)
"cXV" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/trimline/dark_red/filled/line{
@@ -10435,32 +10381,6 @@
/obj/effect/spawner/random/structure/grille,
/turf/open/floor/plating,
/area/station/security/prison/safe)
"dbP" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/left/directional/north{
dir = 8;
name = "Reception Window"
},
/obj/machinery/door/poddoor/shutters/preopen{
dir = 8;
id = "hop";
name = "Privacy Shutters"
},
/obj/structure/desk_bell{
pixel_x = 7
},
/obj/machinery/door/window/brigdoor{
base_state = "rightsecure";
dir = 4;
icon_state = "rightsecure";
name = "Head of Personnel's Desk";
req_access = list("hop")
},
/obj/machinery/flasher/directional/south{
pixel_y = -23
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"dcd" = (
/obj/structure/ladder,
/turf/open/floor/plating,
@@ -14481,10 +14401,6 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
/area/station/science/explab)
"epW" = (
/obj/machinery/pdapainter,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"epX" = (
/obj/structure/table/wood,
/obj/item/toy/cards/deck{
@@ -15144,6 +15060,12 @@
/obj/effect/mapping_helpers/airlock/unres,
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
"eAV" = (
/obj/machinery/light/directional/south,
/obj/effect/mapping_helpers/trapdoor_placer,
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"eBa" = (
/obj/effect/turf_decal/siding/white,
/turf/open/floor/iron/white/smooth_large,
@@ -16567,6 +16489,16 @@
/obj/item/ai_module/reset,
/turf/open/floor/plating,
/area/station/engineering/storage/tech)
"eWc" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/disposalpipe/segment{
dir = 10
},
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"eWh" = (
/obj/machinery/door/window/left/directional/north{
base_state = "right";
@@ -18966,6 +18898,16 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/atmos,
/turf/open/floor/plating,
/area/station/engineering/atmos)
"fJl" = (
/obj/machinery/computer/accounting{
dir = 4
},
/obj/structure/cable,
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"fJm" = (
/obj/structure/railing{
dir = 8
@@ -21732,6 +21674,14 @@
},
/turf/open/floor/iron/dark,
/area/mine/storage)
"gCn" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/disposalpipe/segment,
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"gCu" = (
/obj/structure/closet/emcloset,
/turf/open/floor/plating,
@@ -21786,11 +21736,6 @@
/obj/effect/mapping_helpers/burnt_floor,
/turf/open/floor/plating,
/area/station/maintenance/fore)
"gDJ" = (
/obj/machinery/bluespace_vendor/directional/north,
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"gDO" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -24235,6 +24180,14 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/station/ai_monitored/turret_protected/aisat/service)
"hsi" = (
/obj/effect/landmark/event_spawn,
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/hangover,
/obj/machinery/light/directional/east,
/obj/structure/sign/warning/electric_shock/directional/east,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"hsl" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/brown{
@@ -24588,12 +24541,6 @@
},
/turf/open/floor/iron,
/area/station/service/bar)
"hxh" = (
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 4
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"hxs" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -25119,14 +25066,6 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/station/service/hydroponics)
"hGL" = (
/obj/effect/landmark/event_spawn,
/obj/effect/turf_decal/bot,
/obj/effect/landmark/start/hangover,
/obj/machinery/light/directional/east,
/obj/structure/sign/warning/electric_shock/directional/east,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"hHb" = (
/turf/closed/wall/r_wall,
/area/station/ai_monitored/turret_protected/aisat/hallway)
@@ -25843,11 +25782,6 @@
/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/medical/chemistry)
"hTb" = (
/obj/structure/table,
/obj/item/folder/blue,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"hTm" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/meter,
@@ -26155,6 +26089,13 @@
},
/turf/open/floor/plating/snowed/icemoon,
/area/icemoon/underground/explored)
"hYW" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"hZe" = (
/obj/effect/turf_decal/trimline/yellow/warning{
dir = 1
@@ -26236,6 +26177,14 @@
/obj/machinery/light/small/directional/north,
/turf/open/floor/plating,
/area/station/engineering/storage/tech)
"iaS" = (
/obj/machinery/modular_computer/console/preset/id,
/obj/item/paper/fluff/ids_for_dummies,
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 8
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"iaT" = (
/obj/effect/spawner/random/trash/mess,
/turf/open/floor/plating,
@@ -27409,6 +27358,32 @@
dir = 8
},
/area/station/service/chapel)
"isa" = (
/obj/structure/chair/office{
dir = 8
},
/obj/machinery/button/flasher{
pixel_y = -32;
id = "hopflash"
},
/obj/machinery/button/door/directional/south{
pixel_x = -8;
req_access = list("hop");
id = "hopqueue";
name = "Queue Shutters Control"
},
/obj/machinery/button/door/directional/south{
pixel_y = -24;
pixel_x = 8;
name = "Privacy Shutters Control";
req_access = list("hop");
id = "hop"
},
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 8
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"isb" = (
/obj/machinery/atmospherics/components/binary/pump/off{
dir = 1;
@@ -29638,6 +29613,10 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/iron,
/area/station/command/heads_quarters/rd)
"jaq" = (
/obj/effect/landmark/start/head_of_personnel,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"jaw" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -30265,6 +30244,17 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/engine,
/area/station/science/explab)
"jkQ" = (
/obj/machinery/requests_console/directional/south{
announcementConsole = 1;
anon_tips_receiver = 1;
assistance_requestable = 1;
department = "Head of Personnel's Desk";
departmentType = 5;
name = "Head of Personnel's Requests Console"
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"jkS" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible,
@@ -37032,12 +37022,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/mine/laborcamp)
"lmL" = (
/obj/machinery/light/directional/south,
/obj/effect/mapping_helpers/trapdoor_placer,
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"lmM" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
@@ -39891,11 +39875,6 @@
},
/turf/open/floor/iron/dark/textured_edge,
/area/station/security/prison)
"mlY" = (
/obj/machinery/newscaster/directional/north,
/obj/machinery/photocopier,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"mmh" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
dir = 1
@@ -40026,17 +40005,6 @@
},
/turf/open/floor/engine,
/area/station/science/genetics)
"moA" = (
/obj/machinery/requests_console/directional/south{
announcementConsole = 1;
anon_tips_receiver = 1;
assistance_requestable = 1;
department = "Head of Personnel's Desk";
departmentType = 5;
name = "Head of Personnel's Requests Console"
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"moB" = (
/obj/structure/cable,
/obj/structure/disposalpipe/segment,
@@ -40782,16 +40750,6 @@
/obj/structure/extinguisher_cabinet/directional/south,
/turf/open/floor/iron/smooth,
/area/station/security/execution/transfer)
"mBq" = (
/obj/machinery/computer/cargo{
dir = 4
},
/obj/machinery/keycard_auth/directional/west,
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 8
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"mBB" = (
/obj/machinery/door/poddoor/preopen{
id = "ceprivacy";
@@ -41347,6 +41305,32 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible,
/turf/open/floor/engine,
/area/station/engineering/supermatter/room)
"mLX" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/left/directional/north{
dir = 8;
name = "Reception Window"
},
/obj/machinery/door/poddoor/shutters/preopen{
dir = 8;
id = "hop";
name = "Privacy Shutters"
},
/obj/structure/desk_bell{
pixel_x = 7
},
/obj/machinery/door/window/brigdoor{
base_state = "rightsecure";
dir = 4;
icon_state = "rightsecure";
name = "Head of Personnel's Desk";
req_access = list("hop")
},
/obj/machinery/flasher/directional/south{
pixel_y = -23
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"mMa" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -43224,6 +43208,10 @@
},
/turf/open/floor/iron/white,
/area/mine/laborcamp)
"nnR" = (
/obj/machinery/holopad,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/hop)
"noi" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/airalarm/directional/east,
@@ -43417,6 +43405,17 @@
dir = 10
},
/area/station/science/research)
"nqU" = (
/obj/machinery/door/poddoor/shutters/preopen{
dir = 8;
id = "hopqueue";
name = "HoP Queue Shutters"
},
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"nqX" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
/obj/machinery/atmospherics/pipe/smart/manifold/pink/visible,
@@ -43847,6 +43846,13 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron,
/area/station/hallway/primary/aft)
"nyy" = (
/obj/item/radio/intercom/directional/west,
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 8
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"nyA" = (
/obj/machinery/atmospherics/pipe/smart/simple/orange/visible{
dir = 4
@@ -49198,19 +49204,6 @@
/obj/item/coin/silver,
/turf/open/floor/iron,
/area/station/commons/dorms)
"pcP" = (
/obj/structure/cable,
/obj/structure/table,
/obj/item/trapdoor_remote/preloaded{
pixel_x = -5;
pixel_y = 2
},
/obj/machinery/recharger{
pixel_x = 5;
pixel_y = 2
},
/turf/open/floor/carpet,
/area/station/command/heads_quarters/hop)
"pdc" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
@@ -49297,6 +49290,10 @@
/obj/effect/landmark/start/hangover,
/turf/open/floor/wood,
/area/station/commons/dorms)
"pec" = (
/obj/machinery/vending/cart,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"pee" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -50047,14 +50044,6 @@
"prg" = (
/turf/open/floor/wood,
/area/station/service/library)
"prk" = (
/obj/machinery/modular_computer/console/preset/id,
/obj/item/paper/fluff/ids_for_dummies,
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 8
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"pry" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -53209,6 +53198,11 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/station/cargo/storage)
"qrJ" = (
/obj/machinery/ticket_machine/directional/east,
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"qsd" = (
/obj/structure/sign/warning/secure_area/directional/west,
/obj/structure/disposalpipe/segment,
@@ -56902,17 +56896,10 @@
},
/turf/open/floor/iron,
/area/mine/laborcamp/security)
"rAs" = (
/obj/machinery/door/poddoor/shutters/preopen{
dir = 8;
id = "hopqueue";
name = "HoP Queue Shutters"
},
/obj/effect/turf_decal/loading_area{
dir = 4
},
"rAA" = (
/obj/machinery/pdapainter,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
/area/station/command/heads_quarters/hop)
"rAC" = (
/obj/structure/chair,
/obj/effect/landmark/start/hangover,
@@ -58377,16 +58364,6 @@
dir = 8
},
/area/mine/living_quarters)
"rYA" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/disposalpipe/segment{
dir = 10
},
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"rYB" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 4
@@ -58518,6 +58495,11 @@
},
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/explored)
"sbi" = (
/obj/machinery/newscaster/directional/north,
/obj/machinery/photocopier,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"sby" = (
/obj/effect/turf_decal/trimline/red/filled/line{
dir = 1
@@ -59321,13 +59303,6 @@
/obj/structure/sign/warning/fire/directional/north,
/turf/open/floor/glass/reinforced,
/area/station/science/ordnance/office)
"soc" = (
/obj/item/radio/intercom/directional/west,
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 8
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"soe" = (
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/tile/neutral{
@@ -60498,6 +60473,18 @@
/obj/effect/turf_decal/tile/blue/full,
/turf/open/floor/iron/large,
/area/station/medical/treatment_center)
"sEM" = (
/obj/structure/table/wood,
/obj/item/phone{
pixel_x = -5;
pixel_y = 6
},
/obj/item/reagent_containers/cup/glass/mug/britcup{
pixel_x = 8;
pixel_y = 8
},
/turf/open/floor/carpet/red,
/area/station/commons/vacant_room/office)
"sEU" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible,
/turf/closed/wall/r_wall,
@@ -60545,10 +60532,6 @@
},
/turf/open/floor/iron,
/area/mine/production)
"sFy" = (
/obj/effect/landmark/start/head_of_personnel,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"sFA" = (
/obj/machinery/sparker/directional/west{
id = "testigniter"
@@ -60652,10 +60635,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/dark,
/area/station/engineering/supermatter/room)
"sGP" = (
/obj/structure/cable,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"sGV" = (
/obj/effect/turf_decal/tile/brown,
/obj/effect/turf_decal/tile/brown{
@@ -60964,14 +60943,6 @@
dir = 1
},
/area/station/security/prison)
"sMw" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/disposalpipe/segment,
/obj/machinery/light_switch/directional/east,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"sMD" = (
/obj/structure/window/reinforced{
dir = 4
@@ -62779,16 +62750,6 @@
/obj/machinery/door/airlock/freezer,
/turf/open/floor/iron/showroomfloor,
/area/station/security/prison/mess)
"ttm" = (
/obj/machinery/computer/accounting{
dir = 4
},
/obj/structure/cable,
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"ttv" = (
/obj/structure/sign/painting/library{
pixel_y = 32
@@ -62890,6 +62851,19 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
"tuz" = (
/obj/structure/cable,
/obj/structure/table,
/obj/item/trapdoor_remote/preloaded{
pixel_x = -5;
pixel_y = 2
},
/obj/machinery/recharger{
pixel_x = 5;
pixel_y = 2
},
/turf/open/floor/carpet,
/area/station/command/heads_quarters/hop)
"tuH" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -63257,6 +63231,13 @@
/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
/turf/open/floor/plating,
/area/station/commons/storage/mining)
"tAk" = (
/obj/structure/closet/secure_closet/hop,
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 1
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"tAx" = (
/obj/effect/turf_decal/trimline/blue/filled/warning,
/obj/structure/disposalpipe/segment,
@@ -65365,13 +65346,6 @@
/obj/structure/cable,
/turf/open/floor/iron/showroomfloor,
/area/station/engineering/atmos)
"ugW" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/red{
dir = 4
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"uhk" = (
/obj/structure/beebox,
/turf/open/floor/grass,
@@ -67169,12 +67143,6 @@
/obj/effect/spawner/structure/window/reinforced/plasma,
/turf/open/floor/plating,
/area/station/engineering/supermatter)
"uLl" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 4
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"uLo" = (
/obj/structure/table,
/obj/item/clothing/glasses/meson,
@@ -67200,6 +67168,12 @@
/obj/structure/sign/warning/secure_area,
/turf/closed/wall/r_wall,
/area/station/engineering/storage_shared)
"uLC" = (
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 4
},
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"uLF" = (
/turf/open/floor/carpet,
/area/station/security/processing)
@@ -68514,10 +68488,6 @@
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron,
/area/mine/eva/lower)
"viC" = (
/obj/machinery/holopad,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/hop)
"viH" = (
/obj/machinery/power/emitter/welded{
dir = 4
@@ -70224,11 +70194,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/science/xenobiology)
"vHv" = (
/obj/machinery/ticket_machine/directional/east,
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"vHA" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/plating,
@@ -72033,6 +71998,16 @@
/obj/effect/turf_decal/tile/dark_green,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/turret_protected/ai_upload)
"wjv" = (
/obj/machinery/computer/cargo{
dir = 4
},
/obj/machinery/keycard_auth/directional/west,
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 8
},
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"wjy" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -75934,6 +75909,14 @@
/obj/item/stack/sheet/leather,
/turf/open/floor/iron,
/area/station/maintenance/starboard/fore)
"xpJ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/structure/disposalpipe/segment,
/obj/machinery/camera/autoname/directional/east,
/turf/open/floor/iron,
/area/station/command/heads_quarters/hop)
"xpP" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
@@ -77297,6 +77280,10 @@
},
/turf/open/floor/plating/elevatorshaft,
/area/mine/storage)
"xMQ" = (
/obj/effect/mapping_helpers/ianbirthday,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/hop)
"xMT" = (
/turf/closed/wall,
/area/station/science/research)
@@ -78181,6 +78168,14 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
/turf/open/floor/plating,
/area/station/maintenance/disposal/incinerator)
"ybI" = (
/obj/structure/bed/dogbed/ian,
/mob/living/basic/pet/dog/corgi/ian{
dir = 8
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/hop)
"ybN" = (
/obj/machinery/door/airlock/public/glass{
name = "Courtroom"
@@ -78316,6 +78311,11 @@
"ydI" = (
/turf/closed/wall/r_wall,
/area/station/hallway/secondary/entry)
"ydT" = (
/obj/machinery/bluespace_vendor/directional/north,
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/station/hallway/primary/central)
"ydU" = (
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -224623,7 +224623,7 @@ nwT
hkb
aaT
fFT
aoI
sEM
bPw
tKI
lgr
@@ -234914,14 +234914,14 @@ ljp
gHe
mVb
bep
vHv
hxh
qrJ
uLC
xzh
dnq
dnq
qcu
uLl
ugW
bDR
hYW
bep
ylU
dnq
@@ -235172,7 +235172,7 @@ gfb
pYB
gfb
gfb
rAs
nqU
rcE
rcE
rcE
@@ -235429,12 +235429,12 @@ odN
iZq
dpH
gfb
gDJ
ydT
iIA
hGL
hsi
iIA
iIA
lmL
eAV
jII
okb
ylU
@@ -235691,7 +235691,7 @@ cpm
cpm
gtq
gtq
dbP
mLX
cpm
pzb
cRF
@@ -235942,13 +235942,13 @@ iYb
dkb
kmi
iYb
bWA
soc
mBq
aDG
ttm
prk
caA
tAk
nyy
wjv
pec
fJl
iaS
isa
cpm
dnq
ylU
@@ -236199,13 +236199,13 @@ iYb
txI
xvZ
iYb
mlY
sbi
jWP
ool
jRC
sGP
sFy
moA
cgC
jaq
jkQ
cpm
gQZ
ylU
@@ -236457,12 +236457,12 @@ iYb
iYb
iYb
rpu
cXE
viC
pcP
ybI
nnR
tuz
vEA
hTb
epW
bhK
rAA
cpm
mpy
sYu
@@ -236715,7 +236715,7 @@ jle
jfc
vYm
qBt
cqQ
xMQ
jRC
nvs
edW
@@ -236970,13 +236970,13 @@ clP
clP
clP
shP
rYA
eWc
nDA
vvi
aWP
xpJ
vYs
nDA
sMw
gCn
pJN
mjY
aNs
+75 -75
View File
@@ -7438,6 +7438,16 @@
/obj/structure/cable,
/turf/closed/wall/r_wall,
/area/station/maintenance/starboard/fore)
"cMQ" = (
/obj/machinery/door/poddoor/shutters/preopen{
id = "hopqueue";
name = "HoP Queue Shutters"
},
/obj/effect/turf_decal/loading_area{
dir = 1
},
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
"cMX" = (
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -9459,18 +9469,6 @@
},
/turf/open/floor/plating,
/area/station/science/lab)
"dzp" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/purple,
/obj/effect/turf_decal/tile/purple{
dir = 1
},
/obj/structure/extinguisher_cabinet/directional/south,
/obj/item/reagent_containers/cup/glass/britcup{
pixel_y = 2
},
/turf/open/floor/iron,
/area/station/science/research)
"dzq" = (
/obj/item/radio/intercom/directional/north,
/obj/machinery/light/directional/north,
@@ -13425,6 +13423,20 @@
/obj/item/radio/intercom/directional/south,
/turf/open/floor/carpet,
/area/station/command/heads_quarters/captain/private)
"eWo" = (
/obj/machinery/door/poddoor/shutters{
id = "teleshutter";
name = "Teleporter Access Shutter"
},
/obj/effect/turf_decal/delivery,
/obj/machinery/button/door/directional/east{
id = "teleshutter";
name = "Teleporter Shutter Control";
pixel_y = 5;
req_access = list("teleporter")
},
/turf/open/floor/iron,
/area/station/command/teleporter)
"eWq" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 9
@@ -19118,6 +19130,18 @@
"hbv" = (
/turf/closed/wall/r_wall,
/area/station/medical/coldroom)
"hbC" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/purple,
/obj/effect/turf_decal/tile/purple{
dir = 1
},
/obj/structure/extinguisher_cabinet/directional/south,
/obj/item/reagent_containers/cup/glass/mug/britcup{
pixel_y = 2
},
/turf/open/floor/iron,
/area/station/science/research)
"hbK" = (
/turf/closed/wall,
/area/station/maintenance/department/science/xenobiology)
@@ -26227,18 +26251,6 @@
/obj/effect/turf_decal/tile/neutral/fourcorners,
/turf/open/floor/iron/dark,
/area/station/engineering/storage/tech)
"jty" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/ticket_machine/directional/north,
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
"jtA" = (
/obj/structure/table/glass,
/obj/effect/turf_decal/tile/blue/fourcorners,
@@ -35856,20 +35868,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/science/xenobiology)
"mLY" = (
/obj/machinery/door/poddoor/shutters{
id = "teleshutter";
name = "Teleporter Access Shutter"
},
/obj/effect/turf_decal/delivery,
/obj/machinery/button/door/directional/east{
id = "teleshutter";
name = "Teleporter Shutter Control";
pixel_y = 5;
req_access = list("teleporter")
},
/turf/open/floor/iron,
/area/station/command/teleporter)
"mMl" = (
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -37988,6 +37986,15 @@
/obj/machinery/bluespace_vendor/directional/west,
/turf/open/floor/iron,
/area/station/commons/dorms)
"nwV" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/grunge{
name = "Courtroom"
},
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/security/courtroom)
"nwW" = (
/obj/structure/closet/secure_closet/security/engine,
/obj/machinery/airalarm/directional/east,
@@ -39214,18 +39221,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
/turf/open/floor/iron,
/area/station/commons/fitness/recreation)
"nUr" = (
/obj/structure/table,
/obj/item/reagent_containers/cup/glass/britcup{
pixel_x = -6;
pixel_y = 11
},
/obj/item/phone{
pixel_x = 6;
pixel_y = 1
},
/turf/open/floor/iron,
/area/station/cargo/drone_bay)
"nUt" = (
/obj/machinery/light/small/directional/east,
/turf/open/floor/plating,
@@ -48314,6 +48309,18 @@
/obj/effect/spawner/random/decoration/showcase,
/turf/open/floor/carpet,
/area/station/command/corporate_showroom)
"rgL" = (
/obj/structure/table,
/obj/item/reagent_containers/cup/glass/mug/britcup{
pixel_x = -6;
pixel_y = 11
},
/obj/item/phone{
pixel_x = 6;
pixel_y = 1
},
/turf/open/floor/iron,
/area/station/cargo/drone_bay)
"rgN" = (
/obj/structure/cable,
/obj/effect/turf_decal/trimline/brown/filled/line{
@@ -61350,15 +61357,6 @@
/obj/structure/window/reinforced,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/aisat/exterior)
"vCb" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/grunge{
name = "Courtroom"
},
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/security/courtroom)
"vCh" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -64054,6 +64052,18 @@
/obj/machinery/holopad,
/turf/open/floor/iron,
/area/station/science/research)
"wzy" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/ticket_machine/directional/north,
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
"wzF" = (
/obj/structure/closet/secure_closet{
name = "contraband locker";
@@ -64256,16 +64266,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/dark,
/area/station/ai_monitored/aisat/exterior)
"wCE" = (
/obj/machinery/door/poddoor/shutters/preopen{
id = "hopqueue";
name = "HoP Queue Shutters"
},
/obj/effect/turf_decal/loading_area{
dir = 1
},
/turf/open/floor/iron,
/area/station/hallway/secondary/command)
"wCH" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -89374,7 +89374,7 @@ fru
wrG
uzb
phP
nUr
rgL
jXu
tfR
jXu
@@ -92244,7 +92244,7 @@ jbd
pJR
qwY
qIl
jty
wzy
nIR
tOh
lTM
@@ -92500,7 +92500,7 @@ aVd
nHn
mig
wMx
wCE
cMQ
urA
qAc
knj
@@ -94310,7 +94310,7 @@ vnp
vnp
vnp
exN
mLY
eWo
gqX
cfb
laK
@@ -98650,7 +98650,7 @@ wwY
wwY
xCg
qfE
vCb
nwV
egb
htd
ggU
@@ -106158,7 +106158,7 @@ gcV
nNe
nbS
aHM
dzp
hbC
oWk
ddu
wmi
+2 -2
View File
@@ -8924,7 +8924,7 @@
/obj/item/reagent_containers/condiment/peppermill{
pixel_x = -8
},
/obj/item/reagent_containers/cup/glass/britcup,
/obj/item/reagent_containers/cup/glass/mug/britcup,
/obj/effect/turf_decal/bot,
/turf/open/floor/iron,
/area/centcom/tdome/observation)
@@ -9968,7 +9968,7 @@
"Du" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
/obj/item/reagent_containers/cup/glass/britcup,
/obj/item/reagent_containers/cup/glass/mug/britcup,
/obj/structure/window/reinforced{
dir = 8
},
+1 -1
View File
@@ -412,7 +412,7 @@
/area/shuttle/escape)
"tJ" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/cup/glass/britcup{
/obj/item/reagent_containers/cup/glass/mug/britcup{
pixel_x = 8;
pixel_y = -1
},
@@ -0,0 +1,157 @@
/**
* ## "Takes reagent appearance" Component
*
* Bit of a mouthful, but when applied to an item that can hold reagents (primarily reagent containers),
* said item will take on an appearance based on the majority share reagent inside
*
* This is more than just "changing the color a bit" or "applies an overlay", this is
* an entire icon / icon state / name change, making it look like a different item entirely
*
* This is done by cross-referencing the glass style datums. See [/datum/glass_style] for more information about that.
*
* An example usage is bartender mixed drinks - each reagent gets its own fancy drink sprite
*/
/datum/component/takes_reagent_appearance
/// Icon file when attached to the item
var/icon_pre_change
/// Icon state when attached to the item
var/icon_state_pre_change
/// Optional callback invoked when when the item's appearance is changed
var/datum/callback/on_icon_changed
/// Optional callback invoked when our item has its appearance reverted to default
var/datum/callback/on_icon_reset
/datum/component/takes_reagent_appearance/Initialize(
datum/callback/on_icon_changed,
datum/callback/on_icon_reset,
)
if(!isitem(parent))
return COMPONENT_INCOMPATIBLE
var/obj/item/item_parent = parent
if(isnull(item_parent.reagents))
return COMPONENT_INCOMPATIBLE
icon_pre_change = item_parent.icon
icon_state_pre_change = item_parent.base_icon_state || item_parent.icon_state
src.on_icon_changed = on_icon_changed
src.on_icon_reset = on_icon_reset
/datum/component/takes_reagent_appearance/Destroy()
QDEL_NULL(on_icon_changed)
QDEL_NULL(on_icon_reset)
return ..()
/datum/component/takes_reagent_appearance/RegisterWithParent()
RegisterSignal(parent, COMSIG_ATOM_UPDATE_APPEARANCE, PROC_REF(on_update_appearance))
/datum/component/takes_reagent_appearance/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_ATOM_UPDATE_APPEARANCE)
if(QDELING(parent))
return
var/obj/item/item_parent = parent
item_parent.name = initial(item_parent.name)
item_parent.desc = initial(item_parent.desc)
item_parent.icon = icon_pre_change
item_parent.icon_state = icon_state_pre_change
on_icon_reset?.Invoke()
item_parent.update_appearance()
/// Signal proc for [COMSIG_ATOM_UPDATE_APPEARANCE]
/// We hook into the update appearance proc to perform our own update based on our glass style
/// Preventing any further updates down the line on successes
/datum/component/takes_reagent_appearance/proc/on_update_appearance(datum/source, updates)
SIGNAL_HANDLER
. = NONE
var/datum/glass_style/main_style = get_main_reagent_style()
if(updates & UPDATE_NAME)
. |= update_name(main_style)
if(updates & UPDATE_DESC)
. |= update_desc(main_style)
if(updates & UPDATE_ICON)
. |= update_icon(main_style)
return .
/**
* Performs the name update.
*
* * Returns [COMSIG_ATOM_NO_UPDATE_NAME] if one was complete
* * Returns [NONE] if nothing happened
* * Returns [NONE] if the name was reset to initial state
*/
/datum/component/takes_reagent_appearance/proc/update_name(datum/glass_style/style)
var/obj/item/item_parent = parent
if(isnull(style))
// no style (reset)
item_parent.name = initial(item_parent.name)
else if(style.name)
// style
item_parent.name = style.name
return COMSIG_ATOM_NO_UPDATE_NAME
return NONE
/**
* Performs the description update.
*
* * Returns [COMSIG_ATOM_NO_UPDATE_DESC] if one was complete
* * Returns [NONE] if nothing happened
* * Returns [NONE] if the description was reset to initial state
*/
/datum/component/takes_reagent_appearance/proc/update_desc(datum/glass_style/style)
var/obj/item/item_parent = parent
if(isnull(style))
// no style (reset)
item_parent.desc = initial(item_parent.desc)
else if(style.desc)
// style
item_parent.desc = style.desc
return COMSIG_ATOM_NO_UPDATE_DESC
return NONE
/**
* Performs the icon update.
*
* * Returns [COMSIG_ATOM_NO_UPDATE_ICON] if an icon or icon state ocurred
* * Returns [NONE] if the icon or icon state was reset to base state
*/
/datum/component/takes_reagent_appearance/proc/update_icon(datum/glass_style/style)
var/obj/item/item_parent = parent
if(isnull(style))
// no style (reset)
item_parent.icon = icon_pre_change
item_parent.icon_state = icon_state_pre_change
else if(style.icon && style.icon_state)
// style
item_parent.icon = style.icon
item_parent.icon_state = style.icon_state
on_icon_changed?.InvokeAsync(style)
return COMSIG_ATOM_NO_UPDATE_ICON_STATE
// Reset gets invoked regardless, as further updates may "reset" the icon yet
on_icon_reset?.InvokeAsync()
return NONE
/**
* Gets the correspinding style based on the parent's state and reagents within
*
* * Returns null if its reagents are empty
* * Returns null if no majority reagent was found
* * Otherwise returns a glass style datum
*/
/datum/component/takes_reagent_appearance/proc/get_main_reagent_style()
RETURN_TYPE(/datum/glass_style)
var/obj/item/item_parent = parent
if(item_parent.reagents.total_volume <= 0)
return null
var/datum/reagent/main_reagent = item_parent.reagents.get_master_reagent()
if(isnull(main_reagent))
return null
return GLOB.glass_style_singletons[parent.type][main_reagent.type]
+1 -1
View File
@@ -302,7 +302,7 @@
/obj/item/reagent_containers/borghypo/borgshaker
name = "cyborg shaker"
desc = "An advanced drink synthesizer and mixer."
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "shaker"
possible_transfer_amounts = list(5,10,20)
// Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
@@ -87,7 +87,7 @@
/datum/action/innate/cellular_emporium
name = "Cellular Emporium"
button_icon = 'icons/obj/drinks.dmi'
button_icon = 'icons/obj/drinks/soda.dmi'
button_icon_state = "changelingsting"
background_icon_state = "bg_changeling"
overlay_icon_state = "bg_changeling_border"
+1 -1
View File
@@ -363,7 +363,7 @@ Striking a noncultist, however, will tear their flesh."}
/obj/item/reagent_containers/cup/beaker/unholywater
name = "flask of unholy water"
desc = "Toxic to nonbelievers; reinvigorating to the faithful - this flask may be sipped or thrown."
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "holyflask"
color = "#333333"
list_reagents = list(/datum/reagent/fuel/unholywater = 50)
@@ -22,7 +22,7 @@
OUTPUT_ITEMS = list(/obj/structure/constructshell),
),
UNHOLY_WATER = list(
PREVIEW_IMAGE = image(icon = 'icons/obj/drinks.dmi', icon_state = "holyflask"),
PREVIEW_IMAGE = image(icon = 'icons/obj/drinks/bottles.dmi', icon_state = "holyflask"),
OUTPUT_ITEMS = list(/obj/item/reagent_containers/cup/beaker/unholywater),
),
)
@@ -13,7 +13,7 @@
/datum/preference/choiced/vampire_status/init_possible_values()
var/list/values = list()
values["Inoculated"] = icon('icons/obj/drinks.dmi', "bloodglass")
values["Inoculated"] = icon('icons/obj/drinks/drinks.dmi', "bloodglass")
values["Outcast"] = icon('icons/obj/medical/bloodpack.dmi', "generic_bloodpack")
return values
@@ -83,20 +83,30 @@
)
/datum/venue/bar/get_food_appearance(order)
var/glass_visual
var/datum/reagent/reagent_to_order = order
// Default the icon to the fallback icon
var/glass_visual_icon = initial(reagent_to_order.fallback_icon)
var/glass_visual_icon_state = initial(reagent_to_order.fallback_icon_state)
if(initial(reagent_to_order.glass_icon_state))
glass_visual = initial(reagent_to_order.glass_icon_state)
else if(initial(reagent_to_order.shot_glass_icon_state))
glass_visual = initial(reagent_to_order.shot_glass_icon_state)
else if(initial(reagent_to_order.fallback_icon_state))
glass_visual = initial(reagent_to_order.fallback_icon_state)
else
stack_trace("[reagent_to_order] has no icon sprite for restaurant code, please set a fallback_icon_state for this reagent.")
// Look for a glass style based on this reagent type
for(var/potential_container in GLOB.glass_style_singletons)
var/datum/glass_style/draw_as = GLOB.glass_style_singletons[potential_container][reagent_to_order.type]
if(isnull(draw_as))
continue
var/image/food_image = image(icon = 'icons/effects/effects.dmi' , icon_state = "thought_bubble")
food_image.add_overlay(mutable_appearance('icons/obj/drinks.dmi', glass_visual))
// Override the crummy fallback icon if we find a glass style to use instead
glass_visual_icon = draw_as.icon
glass_visual_icon_state = draw_as.icon_state
break
// If we have no icon or fallback, well... Scream. Someone should fix it
if(!glass_visual_icon || !glass_visual_icon_state)
stack_trace("[reagent_to_order] has no icon sprite for restaurant code, please set a fallback icon for this reagent.")
glass_visual_icon = 'icons/obj/drinks/drinks.dmi'
glass_visual_icon_state = "glass_empty"
var/image/food_image = image(icon = 'icons/effects/effects.dmi', icon_state = "thought_bubble")
food_image.add_overlay(mutable_appearance(glass_visual_icon, glass_visual_icon_state))
return food_image
+8 -12
View File
@@ -26,16 +26,6 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
var/taste_description = "metaphorical salt"
///how this taste compares to others. Higher values means it is more noticable
var/taste_mult = 1
/// use for specialty drinks.
var/glass_name = "glass of ...what?"
/// desc applied to glasses with this reagent
var/glass_desc = "You can't really tell what this is."
/// Otherwise just sets the icon to a normal glass with the mixture of the reagents in the glass.
var/glass_icon_state = null
/// used for shot glasses, mostly for alcohol
var/shot_glass_icon_state = null
/// fallback icon if the reagent has no glass or shot glass icon state. Used for restaurants.
var/fallback_icon_state = null
/// reagent holder this belongs to
var/datum/reagents/holder = null
/// LIQUID, SOLID, GAS
@@ -92,8 +82,6 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
var/burning_volume = 0.5
///Assoc list with key type of addiction this reagent feeds, and value amount of addiction points added per unit of reagent metabolzied (which means * REAGENTS_METABOLISM every life())
var/list/addiction_types = null
///The amount a robot will pay for a glass of this (20 units but can be higher if you pour more, be frugal!)
var/glass_price
/// The affected bodytype, if the reagent damages/heals bodyparts (Brute/Fire) of an affected mob.
/// See "Bodytype defines" in /code/_DEFINES/mobs.dm
var/affected_bodytype = BODYTYPE_ORGANIC
@@ -104,6 +92,14 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
/// See "Organ defines for carbon mobs" in /code/_DEFINES/mobs.dm
var/affected_organtype = ORGAN_ORGANIC
// Used for restaurants.
///The amount a robot will pay for a glass of this (20 units but can be higher if you pour more, be frugal!)
var/glass_price
/// Icon for fallback item displayed in a tourist's thought bubble for if this reagent had no associated glass_style datum.
var/fallback_icon
/// Icon state for fallback item displayed in a tourist's thought bubble for if this reagent had no associated glass_style datum.
var/fallback_icon_state
/datum/reagent/New()
SHOULD_CALL_PARENT(TRUE)
. = ..()
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -922,12 +922,16 @@
quality = DRINK_VERYGOOD
nutriment_factor = 4 * REAGENTS_METABOLISM
taste_description = "sweet chocolate"
glass_icon_state = "chocolatepudding"
glass_name = "chocolate pudding"
glass_desc = "Tasty."
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
glass_price = DRINK_PRICE_EASY
/datum/glass_style/drinking_glass/chocolatepudding
required_drink_type = /datum/reagent/consumable/chocolatepudding
name = "chocolate pudding"
desc = "Tasty."
icon = 'icons/obj/drinks/shakes.dmi'
icon_state = "chocolatepudding"
/datum/reagent/consumable/vanillapudding
name = "Vanilla Pudding"
description = "A great dessert for vanilla lovers."
@@ -935,11 +939,15 @@
quality = DRINK_VERYGOOD
nutriment_factor = 4 * REAGENTS_METABOLISM
taste_description = "sweet vanilla"
glass_icon_state = "vanillapudding"
glass_name = "vanilla pudding"
glass_desc = "Tasty."
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/glass_style/drinking_glass/vanillapudding
required_drink_type = /datum/reagent/consumable/vanillapudding
name = "vanilla pudding"
desc = "Tasty."
icon = 'icons/obj/drinks/shakes.dmi'
icon_state = "vanillapudding"
/datum/reagent/consumable/laughsyrup
name = "Laughin' Syrup"
description = "The product of juicing Laughin' Peas. Fizzy, and seems to change flavour based on what it's used with!"
@@ -49,6 +49,7 @@
taste_description = "an awful, strongly chemical taste"
color = "#270d03"
glass_price = DRINK_PRICE_HIGH
fallback_icon = 'icons/obj/drinks/drink_effects.dmi'
fallback_icon_state = "failed_reaction_fallback"
// Unique
@@ -1603,21 +1603,28 @@
description = "Ancient Clown Lore says that pulped banana peels are good for your blood, but are you really going to take medical advice from a clown about bananas?"
color = "#50531a" // rgb: 175, 175, 0
taste_description = "horribly stringy, bitter pulp"
glass_name = "glass of banana peel pulp"
glass_desc = "Ancient Clown Lore says that pulped banana peels are good for your blood, but are you really going to take medical advice from a clown about bananas?"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
clot_rate = 0.2
passive_bleed_modifier = 0.8
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/glass_style/drinking_glass/banana_peel
required_drink_type = /datum/reagent/medicine/coagulant/banana_peel
name = "glass of banana peel pulp"
desc = "Ancient Clown Lore says that pulped banana peels are good for your blood, \
but are you really going to take medical advice from a clown about bananas?"
/datum/reagent/medicine/coagulant/seraka_extract
name = "Seraka Extract"
description = "A deeply coloured oil present in small amounts in Seraka Mushrooms. Acts as an effective blood clotting agent, but has a low overdose threshold."
color = "#00767C"
taste_description = "intensely savoury bitterness"
glass_name = "glass of seraka extract"
glass_desc = "Deeply savoury, bitter, and makes your blood clot up in your veins. A great drink, all things considered."
metabolization_rate = 0.2 * REAGENTS_METABOLISM
clot_rate = 0.4 //slightly better than regular coagulant
passive_bleed_modifier = 0.5
overdose_threshold = 10 //but easier to overdose on
/datum/glass_style/drinking_glass/seraka_extract
required_drink_type = /datum/reagent/medicine/coagulant/seraka_extract
name = "glass of seraka extract"
desc = "Deeply savoury, bitter, and makes your blood clot up in your veins. A great drink, all things considered."
@@ -5,13 +5,20 @@
metabolization_rate = 12.5 * REAGENTS_METABOLISM //fast rate so it disappears fast.
taste_description = "iron"
taste_mult = 1.3
glass_icon_state = "glass_red"
glass_name = "glass of tomato juice"
glass_desc = "Are you sure this is tomato juice?"
shot_glass_icon_state = "shotglassred"
penetrates_skin = NONE
ph = 7.4
/datum/glass_style/shot_glass/blood
required_drink_type = /datum/reagent/blood
icon_state = "shotglassred"
/datum/glass_style/drinking_glass/blood
required_drink_type = /datum/reagent/blood
name = "glass of tomato juice"
desc = "Are you sure this is tomato juice?"
icon_state = "glass_red"
// FEED ME
/datum/reagent/blood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
. = ..()
@@ -110,11 +117,14 @@
color = "#CC4633"
description = "You don't even want to think about what's in here."
taste_description = "gross iron"
shot_glass_icon_state = "shotglassred"
material = /datum/material/meat
ph = 7.45
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/glass_style/shot_glass/liquidgibs
required_drink_type = /datum/reagent/liquidgibs
icon_state = "shotglassred"
/datum/reagent/bone_dust
name = "Bone Dust"
color = "#dbcdcb"
@@ -162,12 +172,18 @@
color = "#AAAAAA77" // rgb: 170, 170, 170, 77 (alpha)
taste_description = "water"
var/cooling_temperature = 2
glass_icon_state = "glass_clear"
glass_name = "glass of water"
glass_desc = "The father of all refreshments."
shot_glass_icon_state = "shotglassclear"
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS
/datum/glass_style/shot_glass/water
required_drink_type = /datum/reagent/water
icon_state = "shotglassclear"
/datum/glass_style/drinking_glass/water
required_drink_type = /datum/reagent/water
name = "glass of water"
desc = "The father of all refreshments."
icon_state = "glass_clear"
/*
* Water reaction to turf
*/
@@ -246,13 +262,16 @@
name = "Holy Water"
description = "Water blessed by some deity."
color = "#E0E8EF" // rgb: 224, 232, 239
glass_icon_state = "glass_clear"
glass_name = "glass of holy water"
glass_desc = "A glass of holy water."
self_consuming = TRUE //divine intervention won't be limited by the lack of a liver
ph = 7.5 //God is alkaline
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS
/datum/glass_style/drinking_glass/holywater
required_drink_type = /datum/reagent/water/holywater
name = "glass of holy water"
desc = "A glass of holy water."
icon_state = "glass_clear"
// Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits. Also ALSO increases instability.
/datum/reagent/water/holywater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray)
if(chems.has_reagent(type, 1))
@@ -334,13 +353,19 @@
color = "#AAAAAA77" // rgb: 170, 170, 170, 77 (alpha)
taste_description = "burning water"
var/cooling_temperature = 2
glass_icon_state = "glass_clear"
glass_name = "glass of oxygenated water"
glass_desc = "The father of all refreshments. Surely it tastes great, right?"
shot_glass_icon_state = "shotglassclear"
ph = 6.2
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/glass_style/shot_glass/hydrogen_peroxide
required_drink_type = /datum/reagent/hydrogen_peroxide
icon_state = "shotglassclear"
/datum/glass_style/drinking_glass/hydrogen_peroxide
required_drink_type = /datum/reagent/hydrogen_peroxide
name = "glass of oxygenated water"
desc = "The father of all refreshments. Surely it tastes great, right?"
icon_state = "glass_clear"
/*
* Water reaction to turf
*/
@@ -440,6 +465,7 @@
overdose_threshold = 11 //Slightly more than one un-nozzled spraybottle.
taste_description = "sour oranges"
ph = 5
fallback_icon = 'icons/obj/drinks/drink_effects.dmi'
fallback_icon_state = "spraytan_fallback"
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
@@ -1143,9 +1169,6 @@
description = "Required for welders. Flammable."
color = "#660000" // rgb: 102, 0, 0
taste_description = "gross metal"
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of welder fuel"
glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption."
penetrates_skin = NONE
ph = 4
burning_temperature = 1725 //more refined than oil
@@ -1153,6 +1176,12 @@
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
addiction_types = list(/datum/addiction/alcohol = 4)
/datum/glass_style/drinking_glass/fuel
required_drink_type = /datum/reagent/fuel
name = "glass of welder fuel"
desc = "Unless you're an industrial tool, this is probably not safe for consumption."
icon_state = "dr_gibb_glass"
/datum/reagent/fuel/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite!
. = ..()
if(methods & (TOUCH|VAPOR))
@@ -2453,8 +2482,6 @@
/datum/reagent/yuck
name = "Organic Slurry"
description = "A mixture of various colors of fluid. Induces vomiting."
glass_name = "glass of ...yuck!"
glass_desc = "It smells like a carcass, and doesn't look much better."
color = "#545000"
taste_description = "insides"
taste_mult = 4
@@ -2462,6 +2489,11 @@
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
var/yuck_cycle = 0 //! The `current_cycle` when puking starts.
/datum/glass_style/drinking_glass/yuck
required_drink_type = /datum/reagent/yuck
name = "glass of ...yuck!"
desc = "It smells like a carcass, and doesn't look much better."
/datum/reagent/yuck/on_mob_add(mob/living/affected_mob)
. = ..()
if(HAS_TRAIT(affected_mob, TRAIT_NOHUNGER)) //they can't puke
@@ -2695,8 +2727,6 @@
taste_mult = 1.3
taste_description = "tiny legs scuttling down the back of your throat"
metabolization_rate = 5 * REAGENTS_METABOLISM //1u per second
glass_name = "glass of ants"
glass_desc = "Bottoms up...?"
ph = 4.6 // Ants contain Formic Acid
/// How much damage the ants are going to be doing (rises with each tick the ants are in someone's body)
var/ant_damage = 0
@@ -2708,8 +2738,13 @@
"GET THEM OUT OF ME!!",
"HOLY HELL THEY BURN!!",
"MY GOD THEY'RE INSIDE ME!!",
"GET THEM OUT!!"
)
"GET THEM OUT!!",
)
/datum/glass_style/drinking_glass/ants
required_drink_type = /datum/reagent/ants
name = "glass of ants"
desc = "Bottoms up...?"
/datum/reagent/ants/on_mob_life(mob/living/carbon/victim, delta_time)
victim.adjustBruteLoss(max(0.1, round((ant_damage * 0.025),0.1))) //Scales with time. Roughly 32 brute with 100u.
@@ -22,6 +22,7 @@
color = "#fbc314"
ph = 0
inverse_chem = null
fallback_icon = 'icons/obj/drinks/drink_effects.dmi'
fallback_icon_state = "acid_buffer_fallback"
///The strength of the buffer where (volume/holder.total_volume)*strength. So for 1u added to 50u the ph will decrease by 0.4
var/strength = 30
@@ -48,6 +49,7 @@
color = "#3853a4"
ph = 14
inverse_chem = null
fallback_icon = 'icons/obj/drinks/drink_effects.dmi'
fallback_icon_state = "base_buffer_fallback"
///The strength of the buffer where (volume/holder.total_volume)*strength. So for 1u added to 50u the ph will increase by 0.4
var/strength = 30
@@ -491,12 +491,21 @@
color = "#664300" // rgb: 102, 67, 0
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "piss water"
glass_icon_state = "beerglass"
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer."
ph = 2
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE
/datum/glass_style/drinking_glass/fakebeer
required_drink_type = /datum/reagent/toxin/fakebeer
/datum/glass_style/drinking_glass/fakebeer/New()
. = ..()
// Copy styles from the beer drinking glass datum
var/datum/glass_style/copy_from = /datum/glass_style/drinking_glass/beer
name = initial(copy_from.name)
desc = initial(copy_from.desc)
icon = initial(copy_from.icon)
icon_state = initial(copy_from.icon_state)
/datum/reagent/toxin/fakebeer/on_mob_life(mob/living/carbon/affected_mob, delta_time, times_fired)
switch(current_cycle)
if(1 to 50)
@@ -0,0 +1,79 @@
/// Global list of all glass style singletons created. See [/proc/create_glass_styles] for list format.
GLOBAL_LIST_INIT(glass_style_singletons, create_glass_styles())
/**
* Constructs a nested list of glass style singletons
*
* List format:
* * list(glasses = list(beer = style datum, vodka = style datum), shot glasses = list(vodka = different style datum))
*
* Where
* * "glasses" and "shotglasses" are item typepaths
* * "beer" and "vodka" are reagent typepaths
* * "style datum" is a glass style singleton datum
*
* Returns the list.
*/
/proc/create_glass_styles()
var/list/final_list = list()
for(var/datum/glass_style/style as anything in typesof(/datum/glass_style))
if(!initial(style.required_drink_type) || !initial(style.required_container_type))
continue
var/datum/glass_style/new_style = new style()
var/container_type = new_style.required_container_type
var/reagent_type = new_style.required_drink_type
if(!islist(final_list[container_type]))
final_list[container_type] = list()
// Check that our slot is free. If it's not free, this is an error
if(final_list[container_type][reagent_type])
stack_trace("[style] collided with another glass style singleton during instantiation. \
This means its reagent ([reagent_type]) has two styles set for the same container type. \
This is invalid - please correct this.")
final_list[container_type][reagent_type] = new_style
return final_list
/**
* ## Glass style singleton
*
* Used by [/datum/component/takes_reagent_appearance], and a few other places,
* to modify the looks of a reagent container (not /reagent_containers, any atom with reagents)
* when certain types of reagents are put into and become the majority reagent of the container
*
* For example, pouring Vodka into a glass will change its icon to look like the vodka glass sprite
* while pouring it into a shot glass will change to the vodka shot glass sprite
*
* A reagent type can have multiple glass styles so long as each style is linked to a different container type,
* this allows one reagent to style multiple things across a variety of icon files
*/
/datum/glass_style
/// Required - What EXACT type of reagent is needed for this style to be used
/// If not supplied, will be assumed to be an abstract type and will not be instantiated
var/required_drink_type
/// Required - What EXACT type of atom is needed for this style to be used
/// If not supplied, will be assumed to be an abstract type and will not be instantiated
var/required_container_type
/// Optional - What the glass is renamed to
var/name
/// Optional - What the glass description is changed to
var/desc
/// Suggested - What icon file to use for this glass style
var/icon
/// Suggested - What icon state is used for this glass style
var/icon_state
/datum/glass_style/drinking_glass
required_container_type = /obj/item/reagent_containers/cup/glass/drinkingglass
icon = 'icons/obj/drinks/drinks.dmi'
/datum/glass_style/shot_glass
required_container_type = /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass
icon = 'icons/obj/drinks/shot_glasses.dmi'
/datum/glass_style/juicebox
required_container_type = /obj/item/reagent_containers/cup/glass/sillycup/smallcarton
icon = 'icons/obj/drinks/boxes.dmi'
/// This style changes the "drink type" of the container it's placed it as well, it's like food types
var/drink_type = NONE
@@ -108,7 +108,7 @@
/obj/item/reagent_containers/cup/bottle/adminordrazine
name = "Adminordrazine Bottle"
desc = "A small bottle. Contains the liquid essence of the gods."
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "holyflask"
list_reagents = list(/datum/reagent/medicine/adminordrazine = 30)
@@ -18,44 +18,22 @@
//the screwdriver cocktail can make a drinking glass into the world's worst screwdriver. beautiful.
toolspeed = 25
/obj/item/reagent_containers/cup/glass/drinkingglass/Initialize(mapload, vol)
. = ..()
AddComponent(/datum/component/takes_reagent_appearance, CALLBACK(src, PROC_REF(on_glass_change)), CALLBACK(src, PROC_REF(on_glass_reset)))
/obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change(datum/reagents/holder, ...)
. = ..()
if(!length(reagents.reagent_list))
renamedByPlayer = FALSE //so new drinks can rename the glass
/obj/item/reagent_containers/cup/glass/drinkingglass/update_name(updates)
if(renamedByPlayer)
return
. = ..()
var/datum/reagent/largest_reagent = reagents.get_master_reagent()
name = largest_reagent?.glass_name || initial(name)
/// Having our icon state change removes fill thresholds
/obj/item/reagent_containers/cup/glass/drinkingglass/proc/on_glass_change(datum/glass_style/style)
fill_icon_thresholds = null
/obj/item/reagent_containers/cup/glass/drinkingglass/update_desc(updates)
if(renamedByPlayer)
return
. = ..()
var/datum/reagent/largest_reagent = reagents.get_master_reagent()
desc = largest_reagent?.glass_desc || initial(desc)
/obj/item/reagent_containers/cup/glass/drinkingglass/update_icon_state()
if(!reagents.total_volume)
icon_state = base_icon_state
return ..()
var/glass_icon = get_glass_icon(reagents.get_master_reagent())
if(glass_icon)
icon_state = glass_icon
fill_icon_thresholds = null
else
//Make sure the fill_icon_thresholds and the icon_state are reset. We'll use reagent overlays.
fill_icon_thresholds = fill_icon_thresholds || list(1)
icon_state = base_icon_state
return ..()
/obj/item/reagent_containers/cup/glass/drinkingglass/proc/get_glass_icon(datum/reagent/largest_reagent)
if(!largest_reagent)
return FALSE
return largest_reagent.glass_icon_state
/// And having our icon reset restores our fill thresholds
/obj/item/reagent_containers/cup/glass/drinkingglass/proc/on_glass_reset()
fill_icon_thresholds ||= list(0)
//Shot glasses!//
// This lets us add shots in here instead of lumping them in with drinks because >logic //
@@ -67,6 +45,7 @@
/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass
name = "shot glass"
desc = "A shot glass - the universal symbol for bad decisions."
icon = 'icons/obj/drinks/shot_glasses.dmi'
icon_state = "shotglass"
base_icon_state = "shotglass"
gulp_size = 15
@@ -81,21 +60,16 @@
if(renamedByPlayer)
return
. = ..()
name = "[length(reagents.reagent_list) ? "filled " : null]shot glass"
name = "[length(reagents.reagent_list) ? "filled " : ""]shot glass"
/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/update_desc(updates)
if(renamedByPlayer)
return
. = ..()
if(!length(reagents.reagent_list))
desc = "A shot glass - the universal symbol for bad decisions."
else
if(length(reagents.reagent_list))
desc = "The challenge is not taking as many as you can, but guessing what it is before you pass out."
/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass/get_glass_icon(datum/reagent/largest_reagent)
if(!largest_reagent)
return FALSE
return largest_reagent.shot_glass_icon_state
else
desc = "A shot glass - the universal symbol for bad decisions."
/obj/item/reagent_containers/cup/glass/drinkingglass/filled/soda
name = "Soda Water"
@@ -4,7 +4,7 @@
/obj/item/reagent_containers/cup/glass
name = "drink"
desc = "yummy"
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/drinks.dmi'
icon_state = null
possible_transfer_amounts = list(5,10,15,20,25,30,50)
resistance_flags = NONE
@@ -40,6 +40,7 @@
/obj/item/reagent_containers/cup/glass/trophy
name = "pewter cup"
desc = "Everyone gets a trophy."
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "pewter_cup"
w_class = WEIGHT_CLASS_TINY
force = 1
@@ -56,6 +57,7 @@
/obj/item/reagent_containers/cup/glass/trophy/gold_cup
name = "gold cup"
desc = "You're winner!"
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "golden_cup"
inhand_icon_state = "golden_cup"
w_class = WEIGHT_CLASS_BULKY
@@ -68,6 +70,7 @@
/obj/item/reagent_containers/cup/glass/trophy/silver_cup
name = "silver cup"
desc = "Best loser!"
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "silver_cup"
w_class = WEIGHT_CLASS_NORMAL
force = 10
@@ -80,6 +83,7 @@
/obj/item/reagent_containers/cup/glass/trophy/bronze_cup
name = "bronze cup"
desc = "At least you ranked!"
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "bronze_cup"
w_class = WEIGHT_CLASS_SMALL
force = 5
@@ -96,7 +100,9 @@
/obj/item/reagent_containers/cup/glass/coffee
name = "robust coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
icon = 'icons/obj/drinks/coffee.dmi'
icon_state = "coffee"
base_icon_state = "coffee"
list_reagents = list(/datum/reagent/consumable/coffee = 30)
spillable = TRUE
resistance_flags = FREEZE_PROOF
@@ -120,9 +126,9 @@
/obj/item/reagent_containers/cup/glass/coffee/update_icon_state()
if(lid_open)
icon_state = reagents.total_volume ? "coffee_full" : "coffee_empty"
icon_state = reagents.total_volume ? "[base_icon_state]_full" : "[base_icon_state]_empty"
else
icon_state = "coffee"
icon_state = base_icon_state
return ..()
/obj/item/reagent_containers/cup/glass/ice
@@ -142,6 +148,7 @@
/obj/item/reagent_containers/cup/glass/mug // parent type is literally just so empty mug sprites are a thing
name = "mug"
desc = "A drink served in a classy mug."
icon = 'icons/obj/drinks/coffee.dmi'
icon_state = "tea_empty"
base_icon_state = "tea"
inhand_icon_state = "coffee"
@@ -175,14 +182,16 @@
/obj/item/reagent_containers/cup/glass/coffee_cup
name = "coffee cup"
desc = "A heat-formed plastic coffee cup. Can theoretically be used for other hot drinks, if you're feeling adventurous."
icon = 'icons/obj/drinks/coffee.dmi'
icon_state = "coffee_cup_e"
base_icon_state = "coffee_cup"
possible_transfer_amounts = list(10)
volume = 30
spillable = TRUE
isGlass = FALSE
/obj/item/reagent_containers/cup/glass/coffee_cup/update_icon_state()
icon_state = reagents.total_volume ? "coffee_cup" : "coffee_cup_e"
icon_state = reagents.total_volume ? base_icon_state : "[base_icon_state]_e"
return ..()
/obj/item/reagent_containers/cup/glass/dry_ramen
@@ -197,7 +206,7 @@
/obj/item/reagent_containers/cup/glass/waterbottle
name = "bottle of water"
desc = "A bottle of water filled at an old Earth bottling facility."
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "smallbottle"
inhand_icon_state = null
list_reagents = list(/datum/reagent/water = 49.5, /datum/reagent/fluorine = 0.5)//see desc, don't think about it too hard
@@ -358,100 +367,22 @@
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton
name = "small carton"
desc = "A small carton, intended for holding drinks."
icon = 'icons/obj/drinks/boxes.dmi'
icon_state = "juicebox"
volume = 15 //I figure if you have to craft these it should at least be slightly better than something you can get for free from a watercooler
/// Reagent container icon updates, especially this one, are complete jank. I will need to rework them after this is merged.
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton/on_reagent_change(datum/reagents/holder, ...)
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton/Initialize(mapload, vol)
. = ..()
if(!length(reagents.reagent_list))
drink_type = NONE /// Why are drink types on the _container_? TODO: move these to the reagents //im waiting
AddComponent(/datum/component/takes_reagent_appearance, CALLBACK(src, PROC_REF(on_box_change)), CALLBACK(src, PROC_REF(on_box_reset)))
/// Having our icon state change changes our food type
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton/proc/on_box_change(datum/glass_style/juicebox/style)
if(!istype(style))
return
drink_type = style.drink_type
switch(reagents.get_master_reagent_id())
if(/datum/reagent/consumable/orangejuice)
drink_type = FRUIT | BREAKFAST
if(/datum/reagent/consumable/milk)
drink_type = DAIRY | BREAKFAST
if(/datum/reagent/consumable/applejuice)
drink_type = FRUIT
if(/datum/reagent/consumable/grapejuice)
drink_type = FRUIT
if(/datum/reagent/consumable/pineapplejuice)
drink_type = FRUIT | PINEAPPLE
if(/datum/reagent/consumable/milk/chocolate_milk)
drink_type = SUGAR
if(/datum/reagent/consumable/ethanol/eggnog)
drink_type = MEAT
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton/update_name(updates)
. = ..()
if(!length(reagents.reagent_list))
name = "small carton"
return
switch(reagents.get_master_reagent_id())
if(/datum/reagent/consumable/orangejuice)
name = "orange juice box"
if(/datum/reagent/consumable/milk)
name = "carton of milk"
if(/datum/reagent/consumable/applejuice)
name = "apple juice box"
if(/datum/reagent/consumable/grapejuice)
name = "grape juice box"
if(/datum/reagent/consumable/pineapplejuice)
name = "pineapple juice box"
if(/datum/reagent/consumable/milk/chocolate_milk)
name = "carton of chocolate milk"
if(/datum/reagent/consumable/ethanol/eggnog)
name = "carton of eggnog"
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton/update_desc(updates)
. = ..()
if(!length(reagents.reagent_list))
desc = "A small carton, intended for holding drinks."
return
switch(reagents.get_master_reagent_id())
if(/datum/reagent/consumable/orangejuice)
desc = "A great source of vitamins. Stay healthy!"
if(/datum/reagent/consumable/milk)
desc = "An excellent source of calcium for growing space explorers."
if(/datum/reagent/consumable/applejuice)
desc = "Sweet apple juice. Don't be late for school!"
if(/datum/reagent/consumable/grapejuice)
desc = "Tasty grape juice in a fun little container. Non-alcoholic!"
if(/datum/reagent/consumable/pineapplejuice)
desc = "Why would you even want this?"
if(/datum/reagent/consumable/milk/chocolate_milk)
desc = "Milk for cool kids!"
if(/datum/reagent/consumable/ethanol/eggnog)
desc = "For enjoying the most wonderful time of the year."
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton/update_icon_state()
. = ..()
if(!length(reagents.reagent_list))
icon_state = "juicebox"
return
switch(reagents.get_master_reagent_id()) // Thanks to update_name not existing we need to do this whole switch twice
if(/datum/reagent/consumable/orangejuice)
icon_state = "orangebox"
if(/datum/reagent/consumable/milk)
icon_state = "milkbox"
if(/datum/reagent/consumable/applejuice)
icon_state = "juicebox"
if(/datum/reagent/consumable/grapejuice)
icon_state = "grapebox"
if(/datum/reagent/consumable/pineapplejuice)
icon_state = "pineapplebox"
if(/datum/reagent/consumable/milk/chocolate_milk)
icon_state = "chocolatebox"
if(/datum/reagent/consumable/ethanol/eggnog)
icon_state = "nog2"
else
icon_state = "juicebox"
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton/proc/on_box_reset()
drink_type = NONE
/obj/item/reagent_containers/cup/glass/sillycup/smallcarton/smash(atom/target, mob/thrower, ranged = FALSE)
if(bartender_check(target) && ranged)
@@ -465,7 +396,7 @@
/obj/item/reagent_containers/cup/glass/colocup
name = "colo cup"
desc = "A cheap, mass produced style of cup, typically used at parties. They never seem to come out red, for some reason..."
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/colo.dmi'
icon_state = "colocup"
inhand_icon_state = "colocup"
custom_materials = list(/datum/material/plastic = 1000)
@@ -494,6 +425,7 @@
/obj/item/reagent_containers/cup/glass/shaker
name = "shaker"
desc = "A metal shaker to mix drinks in."
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "shaker"
custom_materials = list(/datum/material/iron=1500)
amount_per_transfer_from_this = 10
@@ -511,6 +443,7 @@
name = "flask"
desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go."
custom_price = PAYCHECK_COMMAND * 2
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "flask"
custom_materials = list(/datum/material/iron=250)
volume = 60
@@ -528,9 +461,11 @@
icon_state = "detflask"
list_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 30)
/obj/item/reagent_containers/cup/glass/britcup
/obj/item/reagent_containers/cup/glass/mug/britcup
name = "cup"
desc = "A cup with the british flag emblazoned on it."
icon_state = "britcup"
icon = 'icons/obj/drinks/coffee.dmi'
icon_state = "britcup_empty"
base_icon_state = "britcup"
volume = 30
spillable = TRUE
@@ -7,6 +7,7 @@
/obj/item/reagent_containers/cup/glass/bottle
name = "glass bottle"
desc = "This blank bottle is unyieldingly anonymous, offering no clues to its contents."
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "glassbottle"
worn_icon_state = "bottle"
fill_icon_thresholds = list(0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
@@ -143,7 +144,7 @@
/obj/item/broken_bottle
name = "broken bottle"
desc = "A bottle with a sharp broken bottom."
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/drink_effects.dmi'
icon_state = "broken_bottle"
force = 9
throwforce = 5
@@ -159,9 +160,9 @@
attack_verb_simple = list("stab", "slash", "attack")
sharpness = SHARP_EDGED
///The mask image for mimicking a broken-off bottom of the bottle
var/static/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
var/static/icon/broken_outline = icon('icons/obj/drinks/drink_effects.dmi', "broken")
///The mask image for mimicking a broken-off neck of the bottle
var/static/icon/flipped_broken_outline = icon('icons/obj/drinks.dmi', "broken-flipped")
var/static/icon/flipped_broken_outline = icon('icons/obj/drinks/drink_effects.dmi', "broken-flipped")
/obj/item/broken_bottle/Initialize(mapload)
. = ..()
@@ -301,6 +302,7 @@
/obj/item/reagent_containers/cup/glass/bottle/holywater
name = "flask of holy water"
desc = "A flask of the chaplain's holy water."
icon = 'icons/obj/drinks/bottles.dmi'
icon_state = "holyflask"
list_reagents = list(/datum/reagent/water/holywater = 100)
drink_type = NONE
@@ -623,7 +625,7 @@
/obj/projectile/bullet/reusable/champagne_cork
name = "champagne cork"
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/drink_effects.dmi'
icon_state = "champagne_cork"
hitsound = 'sound/weapons/genhit.ogg'
damage = 10
@@ -646,7 +648,7 @@
/obj/item/trash/champagne_cork
name = "champagne cork"
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/drink_effects.dmi'
icon_state = "champagne_cork"
/obj/item/trash/champagne_cork/sabrage
@@ -832,6 +834,7 @@
/obj/item/reagent_containers/cup/glass/bottle/juice/orangejuice
name = "orange juice"
desc = "Full of vitamins and deliciousness!"
icon = 'icons/obj/drinks/boxes.dmi'
icon_state = "orangejuice"
list_reagents = list(/datum/reagent/consumable/orangejuice = 100)
drink_type = FRUIT | BREAKFAST
@@ -839,6 +842,7 @@
/obj/item/reagent_containers/cup/glass/bottle/juice/cream
name = "milk cream"
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
icon = 'icons/obj/drinks/boxes.dmi'
icon_state = "cream"
list_reagents = list(/datum/reagent/consumable/cream = 100)
drink_type = DAIRY
@@ -846,6 +850,7 @@
/obj/item/reagent_containers/cup/glass/bottle/juice/tomatojuice
name = "tomato juice"
desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
icon = 'icons/obj/drinks/boxes.dmi'
icon_state = "tomatojuice"
list_reagents = list(/datum/reagent/consumable/tomatojuice = 100)
drink_type = VEGETABLES
@@ -853,6 +858,7 @@
/obj/item/reagent_containers/cup/glass/bottle/juice/limejuice
name = "lime juice"
desc = "Sweet-sour goodness."
icon = 'icons/obj/drinks/boxes.dmi'
icon_state = "limejuice"
list_reagents = list(/datum/reagent/consumable/limejuice = 100)
drink_type = FRUIT
@@ -860,6 +866,7 @@
/obj/item/reagent_containers/cup/glass/bottle/juice/pineapplejuice
name = "pineapple juice"
desc = "Extremely tart, yellow juice."
icon = 'icons/obj/drinks/boxes.dmi'
icon_state = "pineapplejuice"
list_reagents = list(/datum/reagent/consumable/pineapplejuice = 100)
drink_type = FRUIT | PINEAPPLE
@@ -8,7 +8,7 @@
/obj/item/reagent_containers/cup/soda_cans
name = "soda can"
icon = 'icons/obj/drinks.dmi'
icon = 'icons/obj/drinks/soda.dmi'
reagent_flags = NONE
spillable = FALSE
custom_price = PAYCHECK_CREW * 0.9
+1
View File
@@ -101,6 +101,7 @@
#include "dcs_get_id_from_elements.dm"
#include "designs.dm"
#include "dragon_expiration.dm"
#include "drink_icons.dm"
#include "dummy_spawn.dm"
#include "dynamic_ruleset_sanity.dm"
#include "egg_glands.dm"
+75
View File
@@ -0,0 +1,75 @@
/// Unit tests all glass style datums with icons / icon states that those are valid and not missing.
/datum/unit_test/glass_style_icons
/// The generic commonplace DMI for all normal drink sprites
var/generic_drink_loc = 'icons/obj/drinks/drinks.dmi'
/// The generic commonplace DMI for all mixed drink sprites
var/generic_mixed_drink_loc = 'icons/obj/drinks/mixed_drinks.dmi'
/datum/unit_test/glass_style_icons/Run()
for(var/container_type in GLOB.glass_style_singletons)
for(var/reagent_type in GLOB.glass_style_singletons[container_type])
var/datum/glass_style/style = GLOB.glass_style_singletons[container_type][reagent_type]
var/style_icon = style.icon
var/style_icon_state = style.icon_state
if(!style_icon_state)
continue
if(!style_icon)
TEST_FAIL("[style.type] glass style had an icon state ([style_icon_state]) but no icon file.")
continue
if(icon_exists(style_icon, style_icon_state))
continue
var/was_actually_in = ""
// For ease of debugging errors, we will check a few generic locations
// to see if it's just misplaced and the user needs to just correct it
if(style_icon != generic_mixed_drink_loc && icon_exists(generic_mixed_drink_loc, style_icon_state))
was_actually_in = "The icon was found in the mixed drinks dmi."
else if(style_icon != generic_drink_loc && icon_exists(generic_drink_loc, style_icon_state))
was_actually_in = "The icon was found in the standard drinks dmi."
// If it wasn't found in either of the generic spots it could be absent or otherwise in another file
else
was_actually_in = "The icon may be located in another dmi or is missing."
TEST_FAIL("[style.type] glass style had an icon state ([style_icon_state]) not present in its icon ([style_icon]). [was_actually_in]")
/// Unit tests glass style datums are applied to drinking glasses
/datum/unit_test/glass_style_functionality
/datum/unit_test/glass_style_functionality/Run()
// The tested drink
// Should ideally have multiple drinking glass datums associated (to check the correct one is seletced)
// As well as a value set from every var (name, description, icon, and icon state)
var/tested_reagent_type = /datum/reagent/consumable/ethanol/jack_rose
var/obj/item/reagent_containers/cup/glass/drinkingglass/glass = allocate(/obj/item/reagent_containers/cup/glass/drinkingglass)
var/datum/glass_style/expected_glass_type = GLOB.glass_style_singletons[glass.type][tested_reagent_type]
TEST_ASSERT_NOTNULL(expected_glass_type, "Glass style datum for the tested reagent ([tested_reagent_type]) and container ([glass.type]) was not found.")
// Add 5 units of the reagent to the glass. This will change the name, desc, icon, and icon state
glass.reagents.add_reagent(tested_reagent_type, 5)
TEST_ASSERT_EQUAL(glass.icon, expected_glass_type.icon, "Glass icon file did not change after gaining a reagent that would change it.")
TEST_ASSERT_EQUAL(glass.icon_state, expected_glass_type.icon_state, "Glass icon state did not change after gaining a reagent that would change it")
TEST_ASSERT_EQUAL(glass.name, expected_glass_type.name, "Glass name did not change after gaining a reagent that would change it")
TEST_ASSERT_EQUAL(glass.desc, expected_glass_type.desc, "Glass desc did not change after gaining a reagent that would change it")
// Clear all units from the glass, This will reset all the previously changed values
glass.reagents.clear_reagents()
TEST_ASSERT_EQUAL(glass.icon, initial(glass.icon), "Glass icon file did not reset after clearing reagents")
TEST_ASSERT_EQUAL(glass.icon_state, initial(glass.icon_state), "Glass icon state did not reset after clearing reagents")
TEST_ASSERT_EQUAL(glass.name, initial(glass.name), "Glass name did not reset after clearing reagents")
TEST_ASSERT_EQUAL(glass.desc, initial(glass.desc), "Glass desc did not reset after clearing reagents")
/// Unit tests glass subtypes have a valid icon setup
/datum/unit_test/drink_icons
/datum/unit_test/drink_icons/Run()
for(var/obj/item/reagent_containers/cup/glass/glass_subtypes as anything in subtypesof(/obj/item/reagent_containers/cup))
var/glass_icon = initial(glass_subtypes.icon)
var/glass_icon_state = initial(glass_subtypes.icon_state)
if(!glass_icon_state)
continue
if(!glass_icon)
TEST_FAIL("[glass_subtypes] had an icon state ([glass_icon_state]) but no icon file.")
continue
if(icon_exists(glass_icon, glass_icon_state))
continue
TEST_FAIL("[glass_subtypes] had an icon state ([glass_icon_state]) not present in its icon ([glass_icon]).")
Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

+2
View File
@@ -934,6 +934,7 @@
#include "code\datums\components\swarming.dm"
#include "code\datums\components\tackle.dm"
#include "code\datums\components\tactical.dm"
#include "code\datums\components\takes_reagent_appearance.dm"
#include "code\datums\components\tameable.dm"
#include "code\datums\components\tattoo.dm"
#include "code\datums\components\technointrovert.dm"
@@ -4327,6 +4328,7 @@
#include "code\modules\reagents\reagent_containers\syringes.dm"
#include "code\modules\reagents\reagent_containers\watering_can.dm"
#include "code\modules\reagents\reagent_containers\cups\_cup.dm"
#include "code\modules\reagents\reagent_containers\cups\_glass_datum.dm"
#include "code\modules\reagents\reagent_containers\cups\bottle.dm"
#include "code\modules\reagents\reagent_containers\cups\drinkingglass.dm"
#include "code\modules\reagents\reagent_containers\cups\drinks.dm"
@@ -0,0 +1 @@
/obj/item/reagent_containers/cup/glass/britcup : /obj/item/reagent_containers/cup/glass/mug/britcup{@OLD}