diff --git a/.gitignore b/.gitignore index a867fbc..cd3b1c7 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ dist-ssr .env public/discord-users.json +/public/sprites diff --git a/build-sprites.sh b/build-sprites.sh index 60dbac5..0a7274e 100755 --- a/build-sprites.sh +++ b/build-sprites.sh @@ -1,12 +1,33 @@ -#!/bin/sh +#!/usr/bin/env bash ROOT="$(git rev-parse --show-toplevel)" SRC="$ROOT/sprites" +TMP="$(mktemp -d)/sprites" DEST="$ROOT/public/sprites" +rm -rf "$DEST" + +sub_inputs=(220022 440044 aa00aa ff00ff) + +declare -A palettes=( + [lightblue]="#305182 #4192c3 #61d3e3 #a2fff3" + [turqoise]="#165950 #189572 #37da94 #a0ffc2" + [green]="#006130 #19a239 #5ff040 #ccffad" + [lime]="#263e0a #6e8d1b #bee344 #edff89" + [yellow]="#6d3c05 #b87a0c #ffd42d #fff392" + [orange]="#732200 #c64b01 #ff8b17 #ffdba2" + [warmred]="#681d27 #ae2b28 #ff5d32 #ffae93" + [red]="#641b3b #9d193c #ff4656 #ff9ba1" + [magenta]="#612b79 #9c37ba #f75aff #ffa9f0" + [purple]="#342561 #6b42a7 #b76cff #e2abff" + [indigo]="#1f1d51 #3e3c8b #6979e8 #88baff" + [blue]="#19295b #305faa #3f9eff #8ad1ff" + [white]="#535353 #8a8a8a #c6c6c6 #ffffff" +) + find "$SRC" -type f -name '*.aseprite' | while read -r file; do rel="${file#"$SRC"/}" - out="$DEST/${rel%.aseprite}.png" + out="$TMP/${rel%.aseprite}.png" mkdir -p "$(dirname "$out")" @@ -14,3 +35,34 @@ find "$SRC" -type f -name '*.aseprite' | while read -r file; do --batch "$file" \ --save-as "$out" done + +run_with_palette() { + local in="$1" out="$2" palette_str="$3" + local s1 s2 s3 s4 + read -r s1 s2 s3 s4 <<< "$palette_str" + + png-subs "$in" "$out" \ + --subs "${sub_inputs[0]}" "${s1#"#"}" \ + --subs "${sub_inputs[1]}" "${s2#"#"}" \ + --subs "${sub_inputs[2]}" "${s3#"#"}" \ + --subs "${sub_inputs[3]}" "${s4#"#"}" +} + + +find "$TMP" -type f -name '*.png' | while read -r file; do + rel="${file#"$TMP"/}" + out_rel="${rel//\/substitute\//\/}" + dest_base="$DEST/${out_rel%.png}" + + mkdir -p "$(dirname "$dest_base")" + + if [[ "$rel" == *"/substitute/"* ]]; then + for name in "${!palettes[@]}"; do + out="${dest_base}-${name}.png" + run_with_palette "$file" "$out" "${palettes[$name]}" + done + else + out="${dest_base}.png" + png-subs "$file" "$out" + fi +done diff --git a/flake.lock b/flake.lock index d8142e7..139efc8 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,60 @@ { "nodes": { + "advisory-db": { + "flake": false, + "locked": { + "lastModified": 1769407479, + "narHash": "sha256-ByIwFH/JsWtIpANhSjoQmx3JnPLUQL+wDZYMb6+GxhE=", + "owner": "rustsec", + "repo": "advisory-db", + "rev": "6e8c8d3103a0c56f1581409ebcaba1bc9f2fc799", + "type": "github" + }, + "original": { + "owner": "rustsec", + "repo": "advisory-db", + "type": "github" + } + }, + "crane": { + "locked": { + "lastModified": 1769287525, + "narHash": "sha256-gABuYA6BzoRMLuPaeO5p7SLrpd4qExgkwEmYaYQY4bM=", + "owner": "ipetkov", + "repo": "crane", + "rev": "0314e365877a85c9e5758f9ea77a9972afbb4c21", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "png-subs", + "nixpkgs" + ], + "rust-analyzer-src": [ + "png-subs" + ] + }, + "locked": { + "lastModified": 1769410490, + "narHash": "sha256-Qnn9S6QJ2vJtDNRRi6smKpbbyTwjv3fCqqdF3uguVnc=", + "owner": "nix-community", + "repo": "fenix", + "rev": "c08dfc7c3c62a9947db50782aa8e2fe065056efd", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -18,13 +73,31 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1767640445, - "narHash": "sha256-UWYqmD7JFBEDBHWYcqE6s6c77pWdcU/i+bwD6XxMb8A=", + "lastModified": 1769170682, + "narHash": "sha256-oMmN1lVQU0F0W2k6OI3bgdzp2YOHWYUAw79qzDSjenU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9f0c42f8bc7151b8e7e5840fb3bd454ad850d8c5", + "rev": "c5296fdd05cfa2c187990dd909864da9658df755", "type": "github" }, "original": { @@ -34,10 +107,47 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1769330179, + "narHash": "sha256-yxgb4AmkVHY5OOBrC79Vv6EVd4QZEotqv+6jcvA212M=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "48698d12cc10555a4f3e3222d9c669b884a49dfe", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "png-subs": { + "inputs": { + "advisory-db": "advisory-db", + "crane": "crane", + "fenix": "fenix", + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1769453345, + "narHash": "sha256-oH56wiIcY9P1PNp43JIiaF7fR+Q6GsOKvHi3Ktr5Msc=", + "rev": "9e5ab413b7bce3d57521edf099441247320a7ee8", + "type": "tarball", + "url": "https://git.geenit.nl/api/v1/repos/noa/png-subs/archive/9e5ab413b7bce3d57521edf099441247320a7ee8.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://git.geenit.nl/noa/png-subs/archive/main.tar.gz" + } + }, "root": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "png-subs": "png-subs" } }, "systems": { @@ -54,6 +164,21 @@ "repo": "default", "type": "github" } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 654228e..6c8ef5a 100644 --- a/flake.nix +++ b/flake.nix @@ -4,12 +4,15 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; + + png-subs.url = "https://git.geenit.nl/noa/png-subs/archive/main.tar.gz"; }; outputs = { nixpkgs, flake-utils, + png-subs, ... }: flake-utils.lib.eachDefaultSystem ( @@ -19,6 +22,7 @@ inherit system; config.allowUnfree = true; }; + png-sub = png-subs.packages.${system}.default; in { devShells.default = pkgs.mkShell { @@ -27,6 +31,7 @@ http-server bun aseprite + png-sub (pkgs.writeShellApplication { name = "aseprite-export"; diff --git a/package.json b/package.json index a0a7cae..cdfeaf6 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "type": "module", "scripts": { "dev": "vite", - "build": "node fetch-discord-users && vite build", + "build": "node fetch-discord-users && ./build-sprites.sh && vite build", "preview": "vite preview", "sprites": "./build-sprites.sh", - "deploy": "npm run build && gh-pages -d dist --nojekyll --cname elementipelago.peppidesu.dev" + "deploy": "bun run build && gh-pages -d dist --nojekyll --cname elementipelago.peppidesu.dev" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^6.2.4", diff --git a/public/sprites/elements/apple.png b/public/sprites/elements/apple.png deleted file mode 100644 index 2749dc6..0000000 Binary files a/public/sprites/elements/apple.png and /dev/null differ diff --git a/public/sprites/elements/armor.png b/public/sprites/elements/armor.png deleted file mode 100644 index 840f07b..0000000 Binary files a/public/sprites/elements/armor.png and /dev/null differ diff --git a/public/sprites/elements/ball.png b/public/sprites/elements/ball.png deleted file mode 100644 index b46bfd7..0000000 Binary files a/public/sprites/elements/ball.png and /dev/null differ diff --git a/public/sprites/elements/berry.png b/public/sprites/elements/berry.png deleted file mode 100644 index e489764..0000000 Binary files a/public/sprites/elements/berry.png and /dev/null differ diff --git a/public/sprites/elements/boat.png b/public/sprites/elements/boat.png deleted file mode 100644 index acccd8b..0000000 Binary files a/public/sprites/elements/boat.png and /dev/null differ diff --git a/public/sprites/elements/book.png b/public/sprites/elements/book.png deleted file mode 100644 index 6e29cf0..0000000 Binary files a/public/sprites/elements/book.png and /dev/null differ diff --git a/public/sprites/elements/boots.png b/public/sprites/elements/boots.png deleted file mode 100644 index 1cf6570..0000000 Binary files a/public/sprites/elements/boots.png and /dev/null differ diff --git a/public/sprites/elements/bow.png b/public/sprites/elements/bow.png deleted file mode 100644 index 70190cb..0000000 Binary files a/public/sprites/elements/bow.png and /dev/null differ diff --git a/public/sprites/elements/car.png b/public/sprites/elements/car.png deleted file mode 100644 index 70002cc..0000000 Binary files a/public/sprites/elements/car.png and /dev/null differ diff --git a/public/sprites/elements/chest.png b/public/sprites/elements/chest.png deleted file mode 100644 index e33a27d..0000000 Binary files a/public/sprites/elements/chest.png and /dev/null differ diff --git a/public/sprites/elements/coin.png b/public/sprites/elements/coin.png deleted file mode 100644 index f404c88..0000000 Binary files a/public/sprites/elements/coin.png and /dev/null differ diff --git a/public/sprites/elements/egg.png b/public/sprites/elements/egg.png deleted file mode 100644 index 94d7e8a..0000000 Binary files a/public/sprites/elements/egg.png and /dev/null differ diff --git a/public/sprites/elements/element.png b/public/sprites/elements/element.png deleted file mode 100644 index db30f41..0000000 Binary files a/public/sprites/elements/element.png and /dev/null differ diff --git a/public/sprites/elements/emerald.png b/public/sprites/elements/emerald.png deleted file mode 100644 index 9ab4d16..0000000 Binary files a/public/sprites/elements/emerald.png and /dev/null differ diff --git a/public/sprites/elements/fire.png b/public/sprites/elements/fire.png deleted file mode 100644 index 456f9ab..0000000 Binary files a/public/sprites/elements/fire.png and /dev/null differ diff --git a/public/sprites/elements/gun.png b/public/sprites/elements/gun.png deleted file mode 100644 index c182666..0000000 Binary files a/public/sprites/elements/gun.png and /dev/null differ diff --git a/public/sprites/elements/hammer.png b/public/sprites/elements/hammer.png deleted file mode 100644 index 148a05d..0000000 Binary files a/public/sprites/elements/hammer.png and /dev/null differ diff --git a/public/sprites/elements/hat.png b/public/sprites/elements/hat.png deleted file mode 100644 index 68f4025..0000000 Binary files a/public/sprites/elements/hat.png and /dev/null differ diff --git a/public/sprites/elements/heart.png b/public/sprites/elements/heart.png deleted file mode 100644 index a9651d7..0000000 Binary files a/public/sprites/elements/heart.png and /dev/null differ diff --git a/public/sprites/elements/hourglass.png b/public/sprites/elements/hourglass.png deleted file mode 100644 index abb85a2..0000000 Binary files a/public/sprites/elements/hourglass.png and /dev/null differ diff --git a/public/sprites/elements/house.png b/public/sprites/elements/house.png deleted file mode 100644 index 7c3a9a4..0000000 Binary files a/public/sprites/elements/house.png and /dev/null differ diff --git a/public/sprites/elements/ice.png b/public/sprites/elements/ice.png deleted file mode 100644 index d0508b3..0000000 Binary files a/public/sprites/elements/ice.png and /dev/null differ diff --git a/public/sprites/elements/key.png b/public/sprites/elements/key.png deleted file mode 100644 index d247250..0000000 Binary files a/public/sprites/elements/key.png and /dev/null differ diff --git a/public/sprites/elements/leaf.png b/public/sprites/elements/leaf.png deleted file mode 100644 index eb0bafe..0000000 Binary files a/public/sprites/elements/leaf.png and /dev/null differ diff --git a/public/sprites/elements/magic.png b/public/sprites/elements/magic.png deleted file mode 100644 index e7a24f1..0000000 Binary files a/public/sprites/elements/magic.png and /dev/null differ diff --git a/public/sprites/elements/map.png b/public/sprites/elements/map.png deleted file mode 100644 index 72ebb7e..0000000 Binary files a/public/sprites/elements/map.png and /dev/null differ diff --git a/public/sprites/elements/marker.png b/public/sprites/elements/marker.png deleted file mode 100644 index 577d021..0000000 Binary files a/public/sprites/elements/marker.png and /dev/null differ diff --git a/public/sprites/elements/metal.png b/public/sprites/elements/metal.png deleted file mode 100644 index cdc0d57..0000000 Binary files a/public/sprites/elements/metal.png and /dev/null differ diff --git a/public/sprites/elements/money.png b/public/sprites/elements/money.png deleted file mode 100644 index 962403d..0000000 Binary files a/public/sprites/elements/money.png and /dev/null differ diff --git a/public/sprites/elements/music.png b/public/sprites/elements/music.png deleted file mode 100644 index bf6dfc2..0000000 Binary files a/public/sprites/elements/music.png and /dev/null differ diff --git a/public/sprites/elements/piece.png b/public/sprites/elements/piece.png deleted file mode 100644 index 1c25430..0000000 Binary files a/public/sprites/elements/piece.png and /dev/null differ diff --git a/public/sprites/elements/potion.png b/public/sprites/elements/potion.png deleted file mode 100644 index 572458e..0000000 Binary files a/public/sprites/elements/potion.png and /dev/null differ diff --git a/public/sprites/elements/quest.png b/public/sprites/elements/quest.png deleted file mode 100644 index 317882a..0000000 Binary files a/public/sprites/elements/quest.png and /dev/null differ diff --git a/public/sprites/elements/ring.png b/public/sprites/elements/ring.png deleted file mode 100644 index 586720d..0000000 Binary files a/public/sprites/elements/ring.png and /dev/null differ diff --git a/public/sprites/elements/rock.png b/public/sprites/elements/rock.png deleted file mode 100644 index 66d96df..0000000 Binary files a/public/sprites/elements/rock.png and /dev/null differ diff --git a/public/sprites/elements/sand.png b/public/sprites/elements/sand.png deleted file mode 100644 index 70ba909..0000000 Binary files a/public/sprites/elements/sand.png and /dev/null differ diff --git a/public/sprites/elements/sign.png b/public/sprites/elements/sign.png deleted file mode 100644 index 888b998..0000000 Binary files a/public/sprites/elements/sign.png and /dev/null differ diff --git a/public/sprites/elements/skull.png b/public/sprites/elements/skull.png deleted file mode 100644 index 3596dfb..0000000 Binary files a/public/sprites/elements/skull.png and /dev/null differ diff --git a/public/sprites/elements/spear.png b/public/sprites/elements/spear.png deleted file mode 100644 index ddc9128..0000000 Binary files a/public/sprites/elements/spear.png and /dev/null differ diff --git a/public/sprites/elements/sword.png b/public/sprites/elements/sword.png deleted file mode 100644 index c2954b7..0000000 Binary files a/public/sprites/elements/sword.png and /dev/null differ diff --git a/public/sprites/elements/tree.png b/public/sprites/elements/tree.png deleted file mode 100644 index ab941e5..0000000 Binary files a/public/sprites/elements/tree.png and /dev/null differ diff --git a/public/sprites/elements/upgrade.png b/public/sprites/elements/upgrade.png deleted file mode 100644 index 1d09472..0000000 Binary files a/public/sprites/elements/upgrade.png and /dev/null differ diff --git a/public/sprites/elements/void.png b/public/sprites/elements/void.png deleted file mode 100644 index 41b3ee1..0000000 Binary files a/public/sprites/elements/void.png and /dev/null differ diff --git a/public/sprites/elements/wand.png b/public/sprites/elements/wand.png deleted file mode 100644 index 709db40..0000000 Binary files a/public/sprites/elements/wand.png and /dev/null differ diff --git a/public/sprites/elements/water.png b/public/sprites/elements/water.png deleted file mode 100644 index 401aa1b..0000000 Binary files a/public/sprites/elements/water.png and /dev/null differ diff --git a/public/sprites/ui/broom.png b/public/sprites/ui/broom.png new file mode 100644 index 0000000..6c0a4e0 Binary files /dev/null and b/public/sprites/ui/broom.png differ diff --git a/public/sprites/ui/burger.png b/public/sprites/ui/burger.png deleted file mode 100644 index 615cf0b..0000000 Binary files a/public/sprites/ui/burger.png and /dev/null differ diff --git a/public/sprites/ui/chat.png b/public/sprites/ui/chat.png deleted file mode 100644 index 7b27df7..0000000 Binary files a/public/sprites/ui/chat.png and /dev/null differ diff --git a/public/sprites/ui/check.png b/public/sprites/ui/check.png deleted file mode 100644 index bd264ad..0000000 Binary files a/public/sprites/ui/check.png and /dev/null differ diff --git a/public/sprites/ui/download.png b/public/sprites/ui/download.png deleted file mode 100644 index cc1823d..0000000 Binary files a/public/sprites/ui/download.png and /dev/null differ diff --git a/public/sprites/ui/hint1.png b/public/sprites/ui/hint1.png deleted file mode 100644 index 96d843c..0000000 Binary files a/public/sprites/ui/hint1.png and /dev/null differ diff --git a/public/sprites/ui/hint2.png b/public/sprites/ui/hint2.png deleted file mode 100644 index 85503df..0000000 Binary files a/public/sprites/ui/hint2.png and /dev/null differ diff --git a/public/sprites/ui/new.png b/public/sprites/ui/new.png deleted file mode 100644 index 0f5ef26..0000000 Binary files a/public/sprites/ui/new.png and /dev/null differ diff --git a/public/sprites/ui/settings.png b/public/sprites/ui/settings.png deleted file mode 100644 index f11f00e..0000000 Binary files a/public/sprites/ui/settings.png and /dev/null differ diff --git a/sprites/elements/apple.aseprite b/sprites/elements/apple.aseprite deleted file mode 100644 index cc6b73e..0000000 Binary files a/sprites/elements/apple.aseprite and /dev/null differ diff --git a/sprites/elements/armor.aseprite b/sprites/elements/armor.aseprite deleted file mode 100644 index c3de228..0000000 Binary files a/sprites/elements/armor.aseprite and /dev/null differ diff --git a/sprites/elements/ball.aseprite b/sprites/elements/ball.aseprite deleted file mode 100644 index ca9bcac..0000000 Binary files a/sprites/elements/ball.aseprite and /dev/null differ diff --git a/sprites/elements/berry.aseprite b/sprites/elements/berry.aseprite deleted file mode 100644 index bc5f259..0000000 Binary files a/sprites/elements/berry.aseprite and /dev/null differ diff --git a/sprites/elements/boat.aseprite b/sprites/elements/boat.aseprite deleted file mode 100644 index 6081270..0000000 Binary files a/sprites/elements/boat.aseprite and /dev/null differ diff --git a/sprites/elements/book.aseprite b/sprites/elements/book.aseprite deleted file mode 100644 index 7ee4375..0000000 Binary files a/sprites/elements/book.aseprite and /dev/null differ diff --git a/sprites/elements/boots.aseprite b/sprites/elements/boots.aseprite deleted file mode 100644 index 2940c1b..0000000 Binary files a/sprites/elements/boots.aseprite and /dev/null differ diff --git a/sprites/elements/car.aseprite b/sprites/elements/car.aseprite deleted file mode 100644 index 5f2747e..0000000 Binary files a/sprites/elements/car.aseprite and /dev/null differ diff --git a/sprites/elements/cave.aseprite b/sprites/elements/cave.aseprite new file mode 100644 index 0000000..443703c Binary files /dev/null and b/sprites/elements/cave.aseprite differ diff --git a/sprites/elements/chest.aseprite b/sprites/elements/chest.aseprite deleted file mode 100644 index bac59c5..0000000 Binary files a/sprites/elements/chest.aseprite and /dev/null differ diff --git a/sprites/elements/desert.aseprite b/sprites/elements/desert.aseprite new file mode 100644 index 0000000..76e48d1 Binary files /dev/null and b/sprites/elements/desert.aseprite differ diff --git a/sprites/elements/element.aseprite b/sprites/elements/element.aseprite deleted file mode 100644 index 3b6b472..0000000 Binary files a/sprites/elements/element.aseprite and /dev/null differ diff --git a/sprites/elements/emerald.aseprite b/sprites/elements/emerald.aseprite deleted file mode 100644 index f42c3ed..0000000 Binary files a/sprites/elements/emerald.aseprite and /dev/null differ diff --git a/sprites/elements/hat.aseprite b/sprites/elements/hat.aseprite deleted file mode 100644 index 982cbb9..0000000 Binary files a/sprites/elements/hat.aseprite and /dev/null differ diff --git a/sprites/elements/heart.aseprite b/sprites/elements/heart.aseprite deleted file mode 100644 index 45c4d17..0000000 Binary files a/sprites/elements/heart.aseprite and /dev/null differ diff --git a/sprites/elements/hills.aseprite b/sprites/elements/hills.aseprite new file mode 100644 index 0000000..50ca4b4 Binary files /dev/null and b/sprites/elements/hills.aseprite differ diff --git a/sprites/elements/ice.aseprite b/sprites/elements/ice.aseprite index f5f1552..396ed11 100644 Binary files a/sprites/elements/ice.aseprite and b/sprites/elements/ice.aseprite differ diff --git a/sprites/elements/island.aseprite b/sprites/elements/island.aseprite new file mode 100644 index 0000000..b9a61a0 Binary files /dev/null and b/sprites/elements/island.aseprite differ diff --git a/sprites/elements/key.aseprite b/sprites/elements/key.aseprite index c057a3b..9a22c2b 100644 Binary files a/sprites/elements/key.aseprite and b/sprites/elements/key.aseprite differ diff --git a/sprites/elements/leaf.aseprite b/sprites/elements/leaf.aseprite deleted file mode 100644 index 5a38ac8..0000000 Binary files a/sprites/elements/leaf.aseprite and /dev/null differ diff --git a/sprites/elements/magic.aseprite b/sprites/elements/magic.aseprite deleted file mode 100644 index 14e4a07..0000000 Binary files a/sprites/elements/magic.aseprite and /dev/null differ diff --git a/sprites/elements/map.aseprite b/sprites/elements/map.aseprite index b96ae4e..f4716a5 100644 Binary files a/sprites/elements/map.aseprite and b/sprites/elements/map.aseprite differ diff --git a/sprites/elements/marker.aseprite b/sprites/elements/marker.aseprite deleted file mode 100644 index 66f590c..0000000 Binary files a/sprites/elements/marker.aseprite and /dev/null differ diff --git a/sprites/elements/metal.aseprite b/sprites/elements/metal.aseprite deleted file mode 100644 index 7af248d..0000000 Binary files a/sprites/elements/metal.aseprite and /dev/null differ diff --git a/sprites/elements/money.aseprite b/sprites/elements/money.aseprite index 4cfc04b..2d61e26 100644 Binary files a/sprites/elements/money.aseprite and b/sprites/elements/money.aseprite differ diff --git a/sprites/elements/mountains.aseprite b/sprites/elements/mountains.aseprite new file mode 100644 index 0000000..b84e41e Binary files /dev/null and b/sprites/elements/mountains.aseprite differ diff --git a/sprites/elements/music.aseprite b/sprites/elements/music.aseprite deleted file mode 100644 index 1f28d32..0000000 Binary files a/sprites/elements/music.aseprite and /dev/null differ diff --git a/sprites/elements/planet.aseprite b/sprites/elements/planet.aseprite new file mode 100644 index 0000000..9606293 Binary files /dev/null and b/sprites/elements/planet.aseprite differ diff --git a/sprites/elements/potion.aseprite b/sprites/elements/potion.aseprite deleted file mode 100644 index 0a15ae2..0000000 Binary files a/sprites/elements/potion.aseprite and /dev/null differ diff --git a/sprites/elements/sand.aseprite b/sprites/elements/sand.aseprite deleted file mode 100644 index a27702f..0000000 Binary files a/sprites/elements/sand.aseprite and /dev/null differ diff --git a/sprites/elements/shop.aseprite b/sprites/elements/shop.aseprite new file mode 100644 index 0000000..4768787 Binary files /dev/null and b/sprites/elements/shop.aseprite differ diff --git a/sprites/elements/substitute/apple.aseprite b/sprites/elements/substitute/apple.aseprite new file mode 100644 index 0000000..0b29d7a Binary files /dev/null and b/sprites/elements/substitute/apple.aseprite differ diff --git a/sprites/elements/substitute/armor.aseprite b/sprites/elements/substitute/armor.aseprite new file mode 100644 index 0000000..e09da5e Binary files /dev/null and b/sprites/elements/substitute/armor.aseprite differ diff --git a/sprites/elements/substitute/ball.aseprite b/sprites/elements/substitute/ball.aseprite new file mode 100644 index 0000000..181e382 Binary files /dev/null and b/sprites/elements/substitute/ball.aseprite differ diff --git a/sprites/elements/substitute/berry.aseprite b/sprites/elements/substitute/berry.aseprite new file mode 100644 index 0000000..8a1dc8d Binary files /dev/null and b/sprites/elements/substitute/berry.aseprite differ diff --git a/sprites/elements/substitute/boat.aseprite b/sprites/elements/substitute/boat.aseprite new file mode 100644 index 0000000..43442d0 Binary files /dev/null and b/sprites/elements/substitute/boat.aseprite differ diff --git a/sprites/elements/substitute/book.aseprite b/sprites/elements/substitute/book.aseprite new file mode 100644 index 0000000..968c0e7 Binary files /dev/null and b/sprites/elements/substitute/book.aseprite differ diff --git a/sprites/elements/substitute/boots.aseprite b/sprites/elements/substitute/boots.aseprite new file mode 100644 index 0000000..70b3edf Binary files /dev/null and b/sprites/elements/substitute/boots.aseprite differ diff --git a/sprites/elements/substitute/car.aseprite b/sprites/elements/substitute/car.aseprite new file mode 100644 index 0000000..62f094f Binary files /dev/null and b/sprites/elements/substitute/car.aseprite differ diff --git a/sprites/elements/substitute/chest.aseprite b/sprites/elements/substitute/chest.aseprite new file mode 100644 index 0000000..d803535 Binary files /dev/null and b/sprites/elements/substitute/chest.aseprite differ diff --git a/sprites/elements/substitute/element.aseprite b/sprites/elements/substitute/element.aseprite new file mode 100644 index 0000000..3031e2e Binary files /dev/null and b/sprites/elements/substitute/element.aseprite differ diff --git a/sprites/elements/substitute/emerald.aseprite b/sprites/elements/substitute/emerald.aseprite new file mode 100644 index 0000000..a67961f Binary files /dev/null and b/sprites/elements/substitute/emerald.aseprite differ diff --git a/sprites/elements/substitute/hat.aseprite b/sprites/elements/substitute/hat.aseprite new file mode 100644 index 0000000..9d49ffd Binary files /dev/null and b/sprites/elements/substitute/hat.aseprite differ diff --git a/sprites/elements/substitute/heart.aseprite b/sprites/elements/substitute/heart.aseprite new file mode 100644 index 0000000..c5437ea Binary files /dev/null and b/sprites/elements/substitute/heart.aseprite differ diff --git a/sprites/elements/substitute/leaf.aseprite b/sprites/elements/substitute/leaf.aseprite new file mode 100644 index 0000000..f079c66 Binary files /dev/null and b/sprites/elements/substitute/leaf.aseprite differ diff --git a/sprites/elements/substitute/magic.aseprite b/sprites/elements/substitute/magic.aseprite new file mode 100644 index 0000000..6315e1f Binary files /dev/null and b/sprites/elements/substitute/magic.aseprite differ diff --git a/sprites/elements/substitute/marker.aseprite b/sprites/elements/substitute/marker.aseprite new file mode 100644 index 0000000..01b7fdd Binary files /dev/null and b/sprites/elements/substitute/marker.aseprite differ diff --git a/sprites/elements/substitute/metal.aseprite b/sprites/elements/substitute/metal.aseprite new file mode 100644 index 0000000..a96dad5 Binary files /dev/null and b/sprites/elements/substitute/metal.aseprite differ diff --git a/sprites/elements/substitute/music.aseprite b/sprites/elements/substitute/music.aseprite new file mode 100644 index 0000000..1665783 Binary files /dev/null and b/sprites/elements/substitute/music.aseprite differ diff --git a/sprites/elements/substitute/potion.aseprite b/sprites/elements/substitute/potion.aseprite new file mode 100644 index 0000000..45fb012 Binary files /dev/null and b/sprites/elements/substitute/potion.aseprite differ diff --git a/sprites/elements/substitute/sand.aseprite b/sprites/elements/substitute/sand.aseprite new file mode 100644 index 0000000..6a7f6be Binary files /dev/null and b/sprites/elements/substitute/sand.aseprite differ diff --git a/sprites/elements/substitute/wand.aseprite b/sprites/elements/substitute/wand.aseprite new file mode 100644 index 0000000..217ae0e Binary files /dev/null and b/sprites/elements/substitute/wand.aseprite differ diff --git a/sprites/elements/sword.aseprite b/sprites/elements/sword.aseprite index c264a17..dfd0b24 100644 Binary files a/sprites/elements/sword.aseprite and b/sprites/elements/sword.aseprite differ diff --git a/sprites/elements/wand.aseprite b/sprites/elements/wand.aseprite deleted file mode 100644 index 64f1d43..0000000 Binary files a/sprites/elements/wand.aseprite and /dev/null differ diff --git a/sprites/ui/broom.aseprite b/sprites/ui/broom.aseprite new file mode 100644 index 0000000..070afcd Binary files /dev/null and b/sprites/ui/broom.aseprite differ diff --git a/src/App.svelte b/src/App.svelte index bfebefa..0e1cbcc 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -8,7 +8,7 @@ import Tray from "./lib/components/Tray.svelte"; import Settings from "./lib/components/Settings.svelte"; import Hints from "./lib/components/Hints.svelte"; - import { moveDragging } from "./lib/state/playfield.svelte"; + import { mounted, moveDragging, unmountElem } from "./lib/state/playfield.svelte"; let openWindow = $state(""); /** @type {Playfield} */ @@ -45,10 +45,16 @@ {/if} { + {connected} + handler={(btn) => { + if (btn == "clear") { + mounted.entries().forEach(([idx, elem]) => { + unmountElem(elem, idx); + }); + return; + } openWindow = btn; }} - {connected} /> diff --git a/src/lib/components/Chat.svelte b/src/lib/components/Chat.svelte index a8fbe85..01742ad 100644 --- a/src/lib/components/Chat.svelte +++ b/src/lib/components/Chat.svelte @@ -1,13 +1,30 @@ diff --git a/src/lib/icons.js b/src/lib/icons.js index 312aed2..72b0a96 100644 --- a/src/lib/icons.js +++ b/src/lib/icons.js @@ -1,65 +1,120 @@ import { md5 } from "js-md5"; +/** + * @param {string} game + * @param {string} name + * @returns {string} + */ +export function iconForLocation(game, name) { + const kind = "item"; + return iconForText(`[game=${game}][kind=${kind}] ${name}`); +} /** * @param {string} game * @param {string} name + * @returns {string} */ export function iconForItem(game, name) { - return iconForText(`[game=${game}] ${name}`); + const kind = "location"; + return iconForText(`[game=${game}][kind=${kind}] ${name}`); +} + +/** + * @param {string} name + * @returns {string} + */ +export function iconForIntermediate(name) { + return iconForText(name); } +const colors = [ + "lightblue", + "turqoise", + "green", + "lime", + "yellow", + "orange", + "warmred", + "red", + "magenta", + "purple", + "indigo", + "blue", + "white", +]; + +const substituteIcons = [ + "apple", + "armor", + "ball", + "berry", + "boat", + "book", + "boots", + "car", + "chest", + "element", + "emerald", + "hat", + "heart", + "leaf", + "magic", + "marker", + "metal", + "music", + "potion", + "sand", + "wand", +]; + +const icons = [ + "bow", + "cave", + "coin", + "desert", + "egg", + "fire", + "gun", + "hammer", + "hills", + "hourglass", + "house", + "ice", + "island", + "key", + "map", + "money", + "mountains", + "piece", + "planet", + "quest", + "ring", + "rock", + "shop", + "sign", + "skull", + "spear", + "sword", + "tree", + "upgrade", + "void", + "water", +]; + +const combinedIcons = [ + ...icons, + ...substituteIcons.flatMap((value) => colors.map((color) => `${value}-${color}`)), +]; + +/** + * @param {String} text + * @returns {String} + */ function iconForText(text) { //const res = predictIcon(get(model), text, { returnTopK: 1 }); - const icons = [ - "apple", - "armor", - "ball", - "berry", - "boat", - "book", - "boots", - "bow", - "car", - "chest", - "coin", - "egg", - "element", - "emerald", - "fire", - "gun", - "hammer", - "hat", - "heart", - "hourglass", - "house", - "ice", - "key", - "leaf", - "magic", - "map", - "marker", - "metal", - "money", - "music", - "piece", - "potion", - "quest", - "ring", - "rock", - "sand", - "sign", - "skull", - "spear", - "sword", - "tree", - "upgrade", - "void", - "wand", - "water", - ]; const buffer = new Uint32Array(md5.arrayBuffer(text)); - const res = icons[buffer[buffer.length - 1] % icons.length]; + const res = combinedIcons[buffer[buffer.length - 1] % combinedIcons.length]; const iconKey = res; return iconKey; diff --git a/src/lib/state/apclient.svelte.js b/src/lib/state/apclient.svelte.js index 1d15a81..a996dc1 100644 --- a/src/lib/state/apclient.svelte.js +++ b/src/lib/state/apclient.svelte.js @@ -1,7 +1,7 @@ import { Client } from "archipelago.js"; import { createSubscriber } from "svelte/reactivity"; import { elementIdToName, elementNameToId } from "../utils"; -import { iconForItem } from "../icons"; +import { iconForIntermediate, iconForItem, iconForLocation } from "../icons"; import { INTERMEDIATE_AMOUNT, LOCATION_AMOUNT, NON_ELEMENT_ITEMS } from "../consts"; import { get_name, init_naming } from "../names.js"; import { createGraph, ElementKind } from "../graph.js"; @@ -344,12 +344,18 @@ class APStore { const elem_id = elementNameToId(name); - const loc = - elem_id.kind === ElementKind.INTERMEDIATE || item.locationGame === "Archipelago" - ? get_name() - : displayName; + let loc, icon_name; + if (elem_id.kind === ElementKind.INTERMEDIATE) { + loc = get_name(); + icon_name = iconForIntermediate(loc); + } else { + loc = + elem_id.kind === ElementKind.INTERMEDIATE || item.locationGame === "Archipelago" + ? get_name() + : displayName; - const icon_name = iconForItem(item.game, loc); + icon_name = isLocation ? iconForLocation(item.game, loc) : iconForItem(item.game, loc); + } this.#elementData[name] = { elem_id,