[MISSED MIRROR] Icon Autoslicing (#79659) (#25485)

* Icon Autoslicing (#79659)

Ok so you know all the dmis we have that are made to work with the
smoothing system? carpets, walls, etc.

The proper way to edit those is to convert them into a png with 5
"states' it in (one for 0 connections, one for horizontal, one for
vertical, one for all cardinals and one for all directions) and then
modify THAT, then run it through [the cutter
tool.](https://github.com/tgstation/icon-cutter)

But none ever does that, because we explain it fucking nowhere. So
instead, let's keep all those "base" files in the repo, alongside the
configs they work with, and "cut" the pngs into dmis as a part of the
build process.

I wrote a guide for how to interact with this system as a spriter, you
can find it
[HERE](https://github.com/LemonInTheDark/tgstation/blob/slice-the-sky/icons/Cutter.md).

[Adds a icon cutter build
task](52143d2e96)

This relies on action ninja's hypnagogic (find more
[here](https://github.com/actioninja/hypnagogic)), a rust based icon
cutter.
It operates inline with the file structure, searching the codebase for
templates and resource files and compiling them down to dmis.

It can do way more then just bitmask stuff, but that is what we are
using it for rn.

Hope is to prevent for eternity the "I'm just gonna edit each of these
255 icon states that's how this carpet was made right?" meme, and allow
more expansive use of smoothing in future

[Adds a lint that ensures config files work
right](21eeab9cf8)

Checks to ensure they have a paired png and dmi, and also avoids issues
with uncompiled changes by double checking that nothing happens
before/after a cutter run

[Pulls all non smoothed states out of structures into bespoke
dmis](a730e0cb47)

This is required because the cutter cannot output named icon states,
only the actual cut icon

[Does something similar to
walls](40780e9481)

Moves reinforced walls decon stuff from their icon to a var on the type
and a set of states in the reinforced_states dmi

Moves falsewalls into their own dmi, this involved some changes to
gamecode to ensure falsewalls knew which dmi to use and what key.
Makes falsewalls display as such in editor rather then just walls

Moves smoothrock's gibonite overlays into their own file for similar
reasons

[Same thing different day
(Floors)](9a3da3b697)

Pulls bespoke floor icon states into their own file, splits up neon
carpets into multiple files to make cutting possible

[Actually adds the cut templates and their matching png
files](1bd8920dc9)

Not much to report here, outside of I changed the prefix for bamboo
walls to bamboo_wall so it works with false_walls

![image](https://github.com/tgstation/tgstation/assets/58055496/7c3ac7fb-873c-481b-8667-082e39432876)

None should have to manually edit cut dmis. Ever.
Also this makes adding a new smoothed thing trivial, don't even need to
know what tool you're using to do it. V good v good.
Sets us up nicely for wallening's well, wall of sprites.

Some structural decisions, we are essentially committing build artifacts
here. That's the best way of handling it because otherwise mappers could
need to run build.bat before opening a map, and that is stupid!

🆑
refactor: (Almost) all smoothed icons can now be edited in their pre cut
forms
/🆑

* Update false_walls.dm

* Modular

* Fixes override for reinforced walls, removals skyrat edits in favor of overrides

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
This commit is contained in:
Bloop
2023-12-08 16:14:03 -05:00
committed by GitHub
parent 877ff4467a
commit 6c823eef67
377 changed files with 1118 additions and 89 deletions

View File

@@ -54,6 +54,11 @@ jobs:
with:
path: ~/.cargo
key: ${{ runner.os }}-rust
- name: Restore Cutter cache
uses: actions/cache@v3
with:
path: tools/icon_cutter/cache
key: ${{ runner.os }}-cutter-${{ hashFiles('dependencies.sh') }}
- name: Install Tools
run: |
pip3 install setuptools
@@ -90,6 +95,9 @@ jobs:
run: |
tools/bootstrap/python -m mapmerge2.dmm_test
tools/bootstrap/python -m tools.maplint.source
- name: Check Cutter
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: tools/bootstrap/python -m tools.icon_cutter.check
- name: Run DMI Tests
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: tools/bootstrap/python -m dmi.test
@@ -110,7 +118,7 @@ jobs:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Compile Maps
needs: [collect_data]
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
concurrency:
group: compile_all_maps-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
@@ -135,7 +143,7 @@ jobs:
collect_data:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Collect data for other tasks
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
outputs:
maps: ${{ steps.map_finder.outputs.maps }}
alternate_tests: ${{ steps.alternate_test_finder.outputs.alternate_tests }}
@@ -201,7 +209,7 @@ jobs:
if: ( !contains(github.event.head_commit.message, '[ci skip]') && needs.find_all_maps.outputs.alternate_tests != '[]' )
name: Check Alternate Tests
needs: [run_alternate_tests]
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- run: echo Alternate tests passed.
@@ -209,7 +217,7 @@ jobs:
if: ( !contains(github.event.head_commit.message, '[ci skip]') && (success() || failure()) )
needs: [run_all_tests, run_alternate_tests]
name: Compare Screenshot Tests
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
# If we ever add more artifacts, this is going to break, but it'll be obvious.

View File

@@ -8,7 +8,7 @@ on:
jobs:
compile:
name: "Compile changelogs"
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps"
id: value_holder

View File

@@ -11,7 +11,7 @@ jobs:
permissions:
contents: write # for JamesIves/github-pages-deploy-action to push changes in repo
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
concurrency: gen-docs
steps:
- uses: actions/checkout@v3

View File

@@ -8,7 +8,7 @@ permissions:
jobs:
title_and_changelog:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: Wayland-Smithy/emoji-stripper-action@de0c1d158edee50700583d6454aa5f5117337599
with:

View File

@@ -5,7 +5,7 @@ on:
jobs:
link_rounds:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: tgstation/round_linker@master
with:

View File

@@ -13,7 +13,7 @@ jobs:
show_screenshot_test_results:
if: ( !contains(github.event.head_commit.message, '[ci skip]') && github.event.workflow_run.run_attempt == 1 )
name: Show Screenshot Test Results
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- name: "Check for ARTIFACTS_FILE_HOUSE_KEY"
id: secrets_set

View File

@@ -13,7 +13,7 @@ jobs:
permissions:
issues: write # for actions/stale to close stale issues
pull-requests: write # for actions/stale to close stale PRs
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- uses: actions/stale@v4

View File

@@ -11,7 +11,7 @@ on:
jobs:
test_merge_bot:
name: Test Merge Detector
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
steps:
- name: Check for GET_TEST_MERGES_URL
id: secrets_set

View File

@@ -7,7 +7,7 @@ on:
jobs:
update-dmapi:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
name: Update the TGS DMAPI
steps:
- name: Clone

View File

@@ -67,8 +67,8 @@
name = "Station Night Shutters"
},
/turf/closed/indestructible/fakeglass{
icon = 'icons/obj/smooth_structures/paperframes.dmi';
icon_state = "paper"
icon = 'icons/obj/smooth_structures/structure_variations.dmi';
icon_state = "paper-whole"
},
/area/centcom/mafia)
"q" = (

View File

@@ -5,9 +5,8 @@
name = "wall"
desc = "A huge chunk of metal used to separate rooms."
anchored = TRUE
//icon = 'icons/turf/walls/wall.dmi' //ORIGINAL
icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi' //SKYRAT EDIT CHANGE - AESTHETICS
icon_state = "wall-0"
icon = 'icons/turf/walls/false_walls.dmi'
icon_state = "wall-open"
base_icon_state = "wall"
layer = LOW_OBJ_LAYER
density = TRUE
@@ -20,6 +19,8 @@
can_atmos_pass = ATMOS_PASS_DENSITY
rad_insulation = RAD_MEDIUM_INSULATION
material_flags = MATERIAL_EFFECTS
/// The icon this falsewall is faking being. we'll switch out our icon with this when we're in fake mode
var/fake_icon = 'icons/turf/walls/wall.dmi'
var/mineral = /obj/item/stack/sheet/iron
var/mineral_amount = 2
var/walltype = /turf/closed/wall
@@ -72,9 +73,15 @@
/obj/structure/falsewall/update_icon_state()
if(opening)
icon_state = "fwall_[density ? "opening" : "closing"]"
icon = fake_icon
icon_state = "[base_icon_state]-[density ? "opening" : "closing"]"
return ..()
icon_state = density ? "[base_icon_state]-[smoothing_junction]" : "fwall_open"
if(density)
icon = initial(icon)
icon_state = "[base_icon_state]-[smoothing_junction]"
else
icon = fake_icon
icon_state = "[base_icon_state]-open"
return ..()
/obj/structure/falsewall/proc/ChangeToWall(delete = 1)
@@ -149,9 +156,8 @@
/obj/structure/falsewall/reinforced
name = "reinforced wall"
desc = "A huge chunk of reinforced metal used to separate rooms."
//icon = 'icons/turf/walls/reinforced_wall.dmi'
icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi' //SKYRAT EDIT CHANGE - AESTHETICS
icon_state = "reinforced_wall-0"
fake_icon = 'icons/turf/walls/reinforced_wall.dmi'
icon_state = "reinforced_wall-open"
base_icon_state = "reinforced_wall"
walltype = /turf/closed/wall/r_wall
mineral = /obj/item/stack/sheet/plasteel
@@ -173,8 +179,8 @@
/obj/structure/falsewall/uranium
name = "uranium wall"
desc = "A wall with uranium plating. This is probably a bad idea."
icon = 'icons/turf/walls/uranium_wall.dmi'
icon_state = "uranium_wall-0"
fake_icon = 'icons/turf/walls/uranium_wall.dmi'
icon_state = "uranium_wall-open"
base_icon_state = "uranium_wall"
mineral = /obj/item/stack/sheet/mineral/uranium
walltype = /turf/closed/wall/mineral/uranium
@@ -224,8 +230,8 @@
/obj/structure/falsewall/gold
name = "gold wall"
desc = "A wall with gold plating. Swag!"
icon = 'icons/turf/walls/gold_wall.dmi'
icon_state = "gold_wall-0"
fake_icon = 'icons/turf/walls/gold_wall.dmi'
icon_state = "gold_wall-open"
base_icon_state = "gold_wall"
mineral = /obj/item/stack/sheet/mineral/gold
walltype = /turf/closed/wall/mineral/gold
@@ -236,8 +242,8 @@
/obj/structure/falsewall/silver
name = "silver wall"
desc = "A wall with silver plating. Shiny."
icon = 'icons/turf/walls/silver_wall.dmi'
icon_state = "silver_wall-0"
fake_icon = 'icons/turf/walls/silver_wall.dmi'
icon_state = "silver_wall-open"
base_icon_state = "silver_wall"
mineral = /obj/item/stack/sheet/mineral/silver
walltype = /turf/closed/wall/mineral/silver
@@ -248,8 +254,8 @@
/obj/structure/falsewall/diamond
name = "diamond wall"
desc = "A wall with diamond plating. You monster."
icon = 'icons/turf/walls/diamond_wall.dmi'
icon_state = "diamond_wall-0"
fake_icon = 'icons/turf/walls/diamond_wall.dmi'
icon_state = "diamond_wall-open"
base_icon_state = "diamond_wall"
mineral = /obj/item/stack/sheet/mineral/diamond
walltype = /turf/closed/wall/mineral/diamond
@@ -261,8 +267,8 @@
/obj/structure/falsewall/plasma
name = "plasma wall"
desc = "A wall with plasma plating. This is definitely a bad idea."
icon = 'icons/turf/walls/plasma_wall.dmi'
icon_state = "plasma_wall-0"
fake_icon = 'icons/turf/walls/plasma_wall.dmi'
icon_state = "plasma_wall-open"
base_icon_state = "plasma_wall"
mineral = /obj/item/stack/sheet/mineral/plasma
walltype = /turf/closed/wall/mineral/plasma
@@ -273,8 +279,8 @@
/obj/structure/falsewall/bananium
name = "bananium wall"
desc = "A wall with bananium plating. Honk!"
icon = 'icons/turf/walls/bananium_wall.dmi'
icon_state = "bananium_wall-0"
fake_icon = 'icons/turf/walls/bananium_wall.dmi'
icon_state = "bananium_wall-open"
base_icon_state = "bananium_wall"
mineral = /obj/item/stack/sheet/mineral/bananium
walltype = /turf/closed/wall/mineral/bananium
@@ -286,8 +292,8 @@
/obj/structure/falsewall/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
icon = 'icons/turf/walls/sandstone_wall.dmi'
icon_state = "sandstone_wall-0"
fake_icon = 'icons/turf/walls/sandstone_wall.dmi'
icon_state = "sandstone_wall-open"
base_icon_state = "sandstone_wall"
mineral = /obj/item/stack/sheet/mineral/sandstone
walltype = /turf/closed/wall/mineral/sandstone
@@ -298,8 +304,8 @@
/obj/structure/falsewall/wood
name = "wooden wall"
desc = "A wall with wooden plating. Stiff."
icon = 'icons/turf/walls/wood_wall.dmi'
icon_state = "wood_wall-0"
fake_icon = 'icons/turf/walls/wood_wall.dmi'
icon_state = "wood_wall-open"
base_icon_state = "wood_wall"
mineral = /obj/item/stack/sheet/mineral/wood
walltype = /turf/closed/wall/mineral/wood
@@ -310,7 +316,9 @@
/obj/structure/falsewall/bamboo
name = "bamboo wall"
desc = "A wall with bamboo finish. Zen."
icon = 'icons/turf/walls/bamboo_wall.dmi'
fake_icon = 'icons/turf/walls/bamboo_wall.dmi'
icon_state = "bamboo_wall-open"
base_icon_state = "bamboo_wall"
mineral = /obj/item/stack/sheet/mineral/bamboo
walltype = /turf/closed/wall/mineral/bamboo
smoothing_flags = SMOOTH_BITMASK
@@ -320,8 +328,8 @@
/obj/structure/falsewall/iron
name = "rough iron wall"
desc = "A wall with rough metal plating."
icon = 'icons/turf/walls/iron_wall.dmi'
icon_state = "iron_wall-0"
fake_icon = 'icons/turf/walls/iron_wall.dmi'
icon_state = "iron_wall-open"
base_icon_state = "iron_wall"
mineral = /obj/item/stack/rods
mineral_amount = 5
@@ -334,8 +342,8 @@
/obj/structure/falsewall/abductor
name = "alien wall"
desc = "A wall with alien alloy plating."
icon = 'icons/turf/walls/abductor_wall.dmi'
icon_state = "abductor_wall-0"
fake_icon = 'icons/turf/walls/abductor_wall.dmi'
icon_state = "abductor_wall-open"
base_icon_state = "abductor_wall"
mineral = /obj/item/stack/sheet/mineral/abductor
walltype = /turf/closed/wall/mineral/abductor
@@ -346,8 +354,8 @@
/obj/structure/falsewall/titanium
name = "wall"
desc = "A light-weight titanium wall used in shuttles."
icon = 'icons/turf/walls/shuttle_wall.dmi'
icon_state = "shuttle_wall-0"
fake_icon = 'icons/turf/walls/shuttle_wall.dmi'
icon_state = "shuttle_wall-open"
base_icon_state = "shuttle_wall"
mineral = /obj/item/stack/sheet/mineral/titanium
walltype = /turf/closed/wall/mineral/titanium
@@ -358,8 +366,8 @@
/obj/structure/falsewall/plastitanium
name = "wall"
desc = "An evil wall of plasma and titanium."
icon = 'icons/turf/walls/plastitanium_wall.dmi'
icon_state = "plastitanium_wall-0"
fake_icon = 'icons/turf/walls/plastitanium_wall.dmi'
icon_state = "plastitanium_wall-open"
base_icon_state = "plastitanium_wall"
mineral = /obj/item/stack/sheet/mineral/plastitanium
walltype = /turf/closed/wall/mineral/plastitanium
@@ -370,9 +378,9 @@
/obj/structure/falsewall/material
name = "wall"
desc = "A huge chunk of material used to separate rooms."
icon = 'icons/turf/walls/materialwall.dmi'
icon_state = "materialwall-0"
base_icon_state = "materialwall"
fake_icon = 'icons/turf/walls/material_wall.dmi'
icon_state = "material_wall-open"
base_icon_state = "material_wall"
walltype = /turf/closed/wall/material
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MATERIAL_WALLS

View File

@@ -867,8 +867,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw
bash_sound = 'sound/weapons/slashmiss.ogg'
break_sound = 'sound/items/poster_ripped.ogg'
hit_sound = 'sound/weapons/slashmiss.ogg'
var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1)
var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = ABOVE_OBJ_LAYER - 0.1)
var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/structure_variations.dmi',icon_state = "paper-torn", layer = ABOVE_OBJ_LAYER - 0.1)
var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/structure_variations.dmi',icon_state = "paper-whole", layer = ABOVE_OBJ_LAYER - 0.1)
/obj/structure/window/paperframe/Initialize(mapload)
. = ..()
@@ -927,14 +927,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw
/obj/structure/window/bronze
name = "brass window"
desc = "A paper-thin pane of translucent yet reinforced brass. Nevermind, this is just weak bronze!"
icon = 'icons/obj/smooth_structures/clockwork_window.dmi'
icon_state = "clockwork_window_single"
icon = 'icons/obj/smooth_structures/structure_variations.dmi'
icon_state = "clockwork_window-single"
glass_type = /obj/item/stack/sheet/bronze
/obj/structure/window/bronze/unanchored
anchored = FALSE
/obj/structure/window/bronze/fulltile
icon = 'icons/obj/smooth_structures/clockwork_window.dmi'
icon_state = "clockwork_window-0"
base_icon_state = "clockwork_window"
smoothing_flags = SMOOTH_BITMASK

View File

@@ -40,7 +40,7 @@
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_PAPERFRAME
canSmoothWith = SMOOTH_GROUP_PAPERFRAME
var/static/mutable_appearance/indestructible_paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = CLOSED_TURF_LAYER - 0.1)
var/static/mutable_appearance/indestructible_paper = mutable_appearance('icons/obj/smooth_structures/structure_variations.dmi',icon_state = "paper-whole", layer = CLOSED_TURF_LAYER - 0.1)
/turf/closed/indestructible/weeb/Initialize(mapload)
. = ..()
@@ -198,8 +198,8 @@ SKYRAT EDIT REMOVAL END */
/turf/closed/indestructible/fakeglass
name = "window"
icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
icon_state = "fake_window"
icon = MAP_SWITCH('icons/obj/smooth_structures/reinforced_window.dmi', 'icons/obj/smooth_structures/structure_variations.dmi')
icon_state = MAP_SWITCH("reinforced_window-0", "fake_window")
base_icon_state = "reinforced_window"
opacity = FALSE
smoothing_flags = SMOOTH_BITMASK
@@ -368,9 +368,9 @@ SKYRAT EDIT REMOVAL END */
/turf/closed/indestructible/meat
name = "dense meat wall"
desc = "A huge chunk of dense, packed meat. Effectively impervious to conventional methods of destruction."
icon = 'icons/turf/walls/meat.dmi'
icon_state = "meatwall-0"
base_icon_state = "meatwall"
icon = 'icons/turf/walls/meat_wall.dmi'
icon_state = "meat_wall-0"
base_icon_state = "meat_wall"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WALLS
canSmoothWith = SMOOTH_GROUP_WALLS

View File

@@ -663,7 +663,7 @@
/turf/closed/mineral/gibtonite
mineralAmt = 1
icon_state = "rock_Gibtonite_inactive"
MAP_SWITCH(, icon_state = "rock_Gibtonite_inactive")
scan_state = "rock_Gibtonite"
var/det_time = 8 //Countdown till explosion, but also rewards the player for how close you were to detonation when you defuse it
var/stage = GIBTONITE_UNSTRUCK //How far into the lifecycle of gibtonite we are
@@ -688,7 +688,7 @@
/turf/closed/mineral/gibtonite/proc/explosive_reaction(mob/user = null)
if(stage == GIBTONITE_UNSTRUCK)
activated_overlay = mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_inactive", ON_EDGED_TURF_LAYER) //shows in gaps between pulses if there are any
activated_overlay = mutable_appearance('icons/turf/smoothrocks_overlays.dmi', "rock_Gibtonite_inactive", ON_EDGED_TURF_LAYER) //shows in gaps between pulses if there are any
SET_PLANE(activated_overlay, WALL_PLANE_UPPER, src)
add_overlay(activated_overlay)
name = "gibtonite deposit"
@@ -708,7 +708,7 @@
/turf/closed/mineral/gibtonite/proc/countdown(notify_admins = FALSE)
set waitfor = FALSE
while(istype(src, /turf/closed/mineral/gibtonite) && stage == GIBTONITE_ACTIVE && det_time > 0 && mineralAmt >= 1)
flick_overlay_view(mutable_appearance('icons/turf/smoothrocks.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER + 0.1), 0.5 SECONDS) //makes the animation pulse one time per tick
flick_overlay_view(mutable_appearance('icons/turf/smoothrocks_overlays.dmi', "rock_Gibtonite_active", ON_EDGED_TURF_LAYER + 0.1), 0.5 SECONDS) //makes the animation pulse one time per tick
det_time--
sleep(0.5 SECONDS)
if(istype(src, /turf/closed/mineral/gibtonite))
@@ -768,7 +768,7 @@
defer_change = TRUE
/turf/closed/mineral/gibtonite/ice
icon_state = "icerock_Gibtonite_inactive"
MAP_SWITCH(, icon_state = "icerock_Gibtonite_inactive")
icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'icons/turf/mining.dmi')
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER

View File

@@ -1,9 +1,9 @@
/turf/closed/wall/material
name = "wall"
desc = "A huge chunk of material used to separate rooms."
icon = 'icons/turf/walls/materialwall.dmi'
icon_state = "materialwall-0"
base_icon_state = "materialwall"
icon = 'icons/turf/walls/material_wall.dmi'
icon_state = "material_wall-0"
base_icon_state = "material_wall"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MATERIAL_WALLS
canSmoothWith = SMOOTH_GROUP_MATERIAL_WALLS

View File

@@ -186,7 +186,8 @@
name = "bamboo wall"
desc = "A wall with a bamboo finish."
icon = 'icons/turf/walls/bamboo_wall.dmi'
icon_state = "wall-0"
icon_state = "bamboo_wall-0"
base_icon_state = "bamboo_wall"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_BAMBOO_WALLS + SMOOTH_GROUP_CLOSED_TURFS
canSmoothWith = SMOOTH_GROUP_BAMBOO_WALLS

View File

@@ -45,21 +45,20 @@
/turf/closed/wall/rust
//SDMM supports colors, this is simply for easier mapping
//and should be removed on initialize
color = COLOR_ORANGE_BROWN
color = MAP_SWITCH(null, COLOR_ORANGE_BROWN)
/turf/closed/wall/rust/Initialize(mapload)
. = ..()
color = null
AddElement(/datum/element/rust)
/turf/closed/wall/r_wall/rust
//SDMM supports colors, this is simply for easier mapping
//and should be removed on initialize
color = COLOR_ORANGE_BROWN
color = MAP_SWITCH(null, COLOR_ORANGE_BROWN)
base_decon_state = "rusty_r_wall"
/turf/closed/wall/r_wall/rust/Initialize(mapload)
. = ..()
color = null
AddElement(/datum/element/rust)
/turf/closed/wall/mineral/bronze

View File

@@ -17,7 +17,8 @@
heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall. also indicates the temperature at wich the wall will melt (currently only able to melt with H/E pipes)
///Dismantled state, related to deconstruction.
var/d_state = INTACT
///Base icon state to use for deconstruction
var/base_decon_state = "r_wall"
/turf/closed/wall/r_wall/deconstruction_hints(mob/user)
switch(d_state)
@@ -200,8 +201,10 @@
// We don't react to smoothing changing here because this else exists only to "revert" intact changes
/turf/closed/wall/r_wall/update_icon_state()
if(d_state != INTACT)
icon_state = "r_wall-[d_state]"
icon = 'icons/turf/walls/reinforced_states.dmi'
icon_state = "[base_decon_state]-[d_state]"
else
icon = 'icons/turf/walls/reinforced_wall.dmi'
icon_state = "[base_icon_state]-[smoothing_junction]"
return ..()

View File

@@ -118,19 +118,23 @@
/turf/open/floor/bamboo/tatami
desc = "A traditional Japanese floor mat."
icon_state = "tatami_green"
icon = 'icons/turf/floors/floor_variations.dmi'
icon_state = "bamboo-green"
floor_tile = /obj/item/stack/tile/bamboo/tatami
smoothing_flags = NONE
/turf/open/floor/bamboo/tatami/broken_states()
// This state doesn't exist why is it here?
return list("tatami-damaged")
/turf/open/floor/bamboo/tatami/purple
icon_state = "tatami_purple"
icon = 'icons/turf/floors/floor_variations.dmi'
icon_state = "bamboo-purple"
floor_tile = /obj/item/stack/tile/bamboo/tatami/purple
/turf/open/floor/bamboo/tatami/black
icon_state = "tatami_black"
icon = 'icons/turf/floors/floor_variations.dmi'
icon_state = "bamboo-black"
floor_tile = /obj/item/stack/tile/bamboo/tatami/black
/turf/open/floor/grass
@@ -274,7 +278,8 @@
QUEUE_SMOOTH_NEIGHBORS(src)
/turf/open/floor/carpet/lone
icon_state = "carpetsymbol"
icon = 'icons/turf/floors/floor_variations.dmi'
icon_state = "carpet-symbol"
smoothing_flags = NONE
floor_tile = /obj/item/stack/tile/carpet/symbol
@@ -282,7 +287,8 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
/turf/open/floor/carpet/lone/star
icon_state = "carpetstar"
icon = 'icons/turf/floors/floor_variations.dmi'
icon_state = "carpet-star"
floor_tile = /obj/item/stack/tile/carpet/star
/turf/open/floor/carpet/black
@@ -480,17 +486,20 @@
/turf/open/floor/carpet/neon/simple
name = "simple neon carpet"
icon = 'icons/turf/floors/carpet_neon_simple.dmi'
icon = 'icons/turf/floors/carpet_neon_base.dmi'
icon_state = "base-255"
base_icon_state = "base"
neon_icon = 'icons/turf/floors/carpet_neon_light.dmi'
neon_icon_state = "light"
floor_tile = /obj/item/stack/tile/carpet/neon/simple
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON
/turf/open/floor/carpet/neon/simple/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_NODOTS
@@ -505,8 +514,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_WHITE
/turf/open/floor/carpet/neon/simple/white/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/white/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_WHITE_NODOTS
@@ -515,6 +526,7 @@
/turf/open/floor/carpet/neon/simple/black
name = "simple black neon carpet"
desc = "A rubbery mat with a inset pattern of black phosphorescent dye."
neon_icon = 'icons/turf/floors/carpet_neon_glow.dmi'
neon_icon_state = "glow" // This one also lights up the edges of the lines.
neon_color = COLOR_BLACK
floor_tile = /obj/item/stack/tile/carpet/neon/simple/black
@@ -522,8 +534,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLACK
/turf/open/floor/carpet/neon/simple/black/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_glow_nodots.dmi'
neon_icon_state = "glow-nodots"
neon_color = COLOR_BLACK
floor_tile = /obj/item/stack/tile/carpet/neon/simple/black/nodots
@@ -539,8 +553,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_RED
/turf/open/floor/carpet/neon/simple/red/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/red/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_RED_NODOTS
@@ -555,8 +571,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_ORANGE
/turf/open/floor/carpet/neon/simple/orange/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/orange/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_ORANGE_NODOTS
@@ -571,8 +589,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_YELLOW
/turf/open/floor/carpet/neon/simple/yellow/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/yellow/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_YELLOW_NODOTS
@@ -587,8 +607,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_LIME
/turf/open/floor/carpet/neon/simple/lime/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/lime/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_LIME_NODOTS
@@ -603,8 +625,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_GREEN
/turf/open/floor/carpet/neon/simple/green/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/green/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_GREEN_NODOTS
@@ -619,8 +643,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_TEAL
/turf/open/floor/carpet/neon/simple/teal/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/teal/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_TEAL_NODOTS
@@ -635,8 +661,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_CYAN
/turf/open/floor/carpet/neon/simple/cyan/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/cyan/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_CYAN_NODOTS
@@ -651,8 +679,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLUE
/turf/open/floor/carpet/neon/simple/blue/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/blue/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_BLUE_NODOTS
@@ -667,8 +697,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_PURPLE
/turf/open/floor/carpet/neon/simple/purple/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/purple/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_PURPLE_NODOTS
@@ -683,8 +715,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_VIOLET
/turf/open/floor/carpet/neon/simple/violet/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/violet/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_VIOLET_NODOTS
@@ -699,8 +733,10 @@
canSmoothWith = SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK
/turf/open/floor/carpet/neon/simple/pink/nodots
icon = 'icons/turf/floors/carpet_neon_base_nodots.dmi'
icon_state = "base-nodots-255"
base_icon_state = "base-nodots"
neon_icon = 'icons/turf/floors/carpet_neon_light_nodots.dmi'
neon_icon_state = "light-nodots"
floor_tile = /obj/item/stack/tile/carpet/neon/simple/pink/nodots
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK_NODOTS

View File

@@ -422,7 +422,7 @@
name = "bamboo tram"
desc = "A tram with a bamboo framing."
icon = 'icons/turf/walls/bamboo_wall.dmi'
icon_state = "wall-0"
icon_state = "bamboo_wall-0"
base_icon_state = "wall"
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_BAMBOO_WALLS + SMOOTH_GROUP_CLOSED_TURFS

View File

@@ -0,0 +1,36 @@
mode = "BitmaskSlice"
# Don't try and put directions in our icon states
produce_dirs = false
# We smooth only with our cardinal neighbors, not the ones on the diagonal
smooth_diagonally = false
# Take as input a set of 32x32 blocks
[icon_size]
x = 32
y = 32
# Output our stuff at the same level as it's input
[output_icon_pos]
x = 0
y = 0
# And at the same width/height too
[output_icon_size]
x = 32
y = 32
# This defines where in our list of blocks we draw each "direction" from
# no connections, east/west, north/south, and north/south/east/west
# the 0-3 is the block to read from, starting at 0
[positions]
convex = 0
horizontal = 1
vertical = 2
concave = 3
# When we cut up our blockls, we're cutting "around" a central point
# We typically want to cut around the center, so let's do that here
[cut_pos]
x = 16
y = 16

View File

@@ -0,0 +1,12 @@
template = "bitmask/cardinal_32x32"
# We're diagonal
smooth_diagonally = true
# And because of that we need a state for all directions
[positions]
convex = 0
vertical = 1
horizontal = 2
concave = 3
flat = 4

View File

@@ -25,3 +25,9 @@ export AUXLUA_REPO=tgstation/auxlua
#auxlua git tag
export AUXLUA_VERSION=1.4.1
#hypnagogic repo
export CUTTER_REPO=actioninja/hypnagogic
#hypnagogic git tag
export CUTTER_VERSION=v3.0.1

76
icons/Cutter.md Normal file
View File

@@ -0,0 +1,76 @@
## Guide to the icon cutter
### What are cut icons?
There are some icons in ss13 that are essentially stitched together from a smaller set of icon states.
Smoothing is a prime example of this, though anything that takes a base image and operates on it fits the system nicely.
### How does the cutter work?
The cutter has a bunch of different modes, different ways to operate on images. They all take some sort of input, alongside a (.toml) config file that tells us what to DO with the input.
The .toml file will know the cutter mode to use, alongside any config settings. Smoothing configs can use templates instead of copying out a bunch of information, templates are stored in the cutter_templates folder.
The toml file will be named like this. `{name}.{input_extension}.toml`. So if I have a config mode that uses pngs as input (almost all of them) it'll look like `{name}.png.toml`
It'll then use the `{name}.png` file to make `{name}.dmi` (or whatever the cutter mode outputs)
You should NEVER modify the cutter's output, it'll be erased. You only want to modify the inputs (configs, pngs, etc).
As I mentioned our cutter has several different modes that do different things with different inputs.
Most cutter stuff in our repo uses the BitmaskSlice mode, you can find info about it [here](https://github.com/actioninja/hypnagogic/blob/master/examples/bitmask-slice.toml)
## Bitmask Smoothing (BitmaskSlice)
We use bitmask smoothing to make things in the world merge with each other, "smoothing" them together.
This is done by checking around these objects for things that we want to smooth into, and then encoding that as a set of directions.
Now, we need icon states for every possible combination of smoothing directions, but it would be impossible to make those manually.
So instead we take a base set of directions, typically no connections, north/south, east/west, north/south/east/west, and all connections, and then slice them up and stitch them together.
Looks something like this
>Example: [Bamboo](turf/floors/bamboo_mat.png.toml)
>
> png of 32x32 blocks, representing connections.
>
> [None, North + South, East + West, North + South + East + West, All]
>
>[<img alt="Bamboo Template" src="turf/floors/bamboo_mat.png" width="320px">](turf/floors/bamboo_mat.png)
>
> And its output dmi
>
>[<img alt="Bamboo Output" src="turf/floors/bamboo_mat.dmi" width="320px">](turf/floors/bamboo_mat.dmi)
### How do I modify a smoothed icon?
Modify the png, then recompile the game/run build.bat, it will automatically generate the dmi output.
### How do I make a smoothed icon?
Make a png file called `{dmi_name}.png`. It should be 5 times as wide as the dmi's width, and as tall as the dmi's height
Create a config file called `{dmi_name}.png.toml`, set its [template](../cutter_templates/bitmask) to the style you want. Don't forget to set the output_name var to the base icon state you're using.
Once you're done, just run build.bat or recompile, and it'll generate your cut dmi files for you.
If you want to make something with nonstandard bounds you'll need to set the relevant variables, you can read the examples found [here](https://github.com/actioninja/hypnagogic/tree/master/examples) to understand different mode's configs.
> Example: [Grass (50x50)](turf/floors/grass.png.toml)
>
>[<img alt="Grass Template (50x50)" src="turf/floors/grass.png" width="320px"/>](turf/floors/grass.png)
If you want to give a particular smoothing junction a unique icon state use the prefabs var, add a new "state" to the png, and modify the config so it knows how to use it.
> Example: [Donk Carpets (Big Pocket)](turf/floors/carpet_donk.png.toml)
>
>[<img alt="Grass Template (50x50)" src="turf/floors/carpet_donk.png" width="384x"/>](turf/floors/carpet_donk.png)
If you want to make the smoothed icon animated, add another row of states below your first one. Each new row is a new frame, you define delays inside the config file as deciseconds.
> Example: [Lava (Animated, 4 Frames)](turf/floors/lava.png.toml)
>
>[<img alt="Lava (Animated)" src="turf/floors/lava.png" width="320px"/>](turf/floors/lava.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,2 @@
output_name = "nest"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,2 @@
output_name = "resin_membrane"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,2 @@
output_name = "resin_wall"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,14 @@
output_name = "weednode"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 40
y = 40
[output_icon_size]
x = 40
y = 40
[cut_pos]
x = 20
y = 20

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,14 @@
output_name = "weeds1"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 40
y = 40
[output_icon_size]
x = 40
y = 40
[cut_pos]
x = 20
y = 20

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,14 @@
output_name = "weeds2"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 40
y = 40
[output_icon_size]
x = 40
y = 40
[cut_pos]
x = 20
y = 20

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,14 @@
output_name = "weeds3"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 40
y = 40
[output_icon_size]
x = 40
y = 40
[cut_pos]
x = 20
y = 20

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,2 @@
output_name = "alien_table"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,2 @@
output_name = "brass_table"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -0,0 +1,2 @@
output_name = "catwalk"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,2 @@
output_name = "clockwork_window"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_black"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_blue"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_cyan"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_green"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_orange"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_purple"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_red"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_royalblack"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,14 @@
output_name = "fancy_table_royalblue"
template = "bitmask/diagonal_32x32.toml"
[icon_size]
x = 32
y = 34
[output_icon_size]
x = 32
y = 34
[cut_pos]
x = 16
y = 17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,2 @@
output_name = "glass_table"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,2 @@
output_name = "hedge"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

View File

@@ -0,0 +1,2 @@
output_name = "lattice"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 B

View File

@@ -0,0 +1,2 @@
output_name = "paperframes"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Some files were not shown because too many files have changed in this diff Show More