From 129a7981338130ff809c62d1d604b6f4a6f316f9 Mon Sep 17 00:00:00 2001 From: peppidesu Date: Thu, 29 Jan 2026 19:20:02 +0100 Subject: [PATCH 1/8] chore: add discord fetch bot and make credits data driven --- .gitignore | 3 ++ bun.lock | 3 ++ fetch-discord-users.js | 31 +++++++++++ package.json | 3 +- public/models/icon_model.meta.json | 76 --------------------------- public/models/icon_model.weights.bin | Bin 532760 -> 0 bytes src/app.css | 10 ++-- src/lib/Settings.svelte | 76 +++++++++++++++++++++------ svelte.config.js | 5 ++ 9 files changed, 107 insertions(+), 100 deletions(-) create mode 100644 fetch-discord-users.js delete mode 100644 public/models/icon_model.meta.json delete mode 100644 public/models/icon_model.weights.bin diff --git a/.gitignore b/.gitignore index 6246f91..a867fbc 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,6 @@ dist-ssr *.njsproj *.sln *.sw? + +.env +public/discord-users.json diff --git a/bun.lock b/bun.lock index adf7f4c..abe6792 100644 --- a/bun.lock +++ b/bun.lock @@ -12,6 +12,7 @@ }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^6.2.4", + "dotenv": "^17.2.3", "gh-pages": "^6.3.0", "svelte": "^5.48.0", "vite": "npm:rolldown-vite@7.3.1", @@ -118,6 +119,8 @@ "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + "dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], + "email-addresses": ["email-addresses@5.0.0", "", {}, "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw=="], "escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], diff --git a/fetch-discord-users.js b/fetch-discord-users.js new file mode 100644 index 0000000..586ea06 --- /dev/null +++ b/fetch-discord-users.js @@ -0,0 +1,31 @@ +import dotenv from "dotenv"; +import fs from "node:fs/promises"; + +const config = dotenv.config().parsed; + +const fetchUser = async (id) => { + const response = await fetch(`https://discord.com/api/v9/users/${id}`, { + headers: { + Authorization: config.DISCORD_API_KEY, + }, + }); + return await response.json(); +}; + +const userIds = [ + "382561799742160896", // peppidesu + "235482863250702336", // itepastra + "110878826136907776", // hopop + "1429874676590575907", // sarn kast + "329656222213079053", // eeveon + "1296648831370268756", // gleamingk111 +]; + +Promise.all( + userIds.map(async (id) => { + const data = await fetchUser(id); + return [id, { username: data.username, display: data.global_name }]; + }), +).then((data) => { + fs.writeFile("./public/discord-users.json", JSON.stringify(Object.fromEntries(data))); +}); diff --git a/package.json b/package.json index d13f4b8..f0a736e 100644 --- a/package.json +++ b/package.json @@ -5,13 +5,14 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build", + "build": "node fetch-discord-users && vite build", "preview": "vite preview", "sprites": "./build-sprites.sh", "deploy": "npm run build && gh-pages -d dist --nojekyll --cname elementipelago.peppidesu.dev" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^6.2.4", + "dotenv": "^17.2.3", "gh-pages": "^6.3.0", "svelte": "^5.48.0", "vite": "npm:rolldown-vite@7.3.1" diff --git a/public/models/icon_model.meta.json b/public/models/icon_model.meta.json deleted file mode 100644 index fc093b3..0000000 --- a/public/models/icon_model.meta.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "version": 1, - "B": 8192, - "nmin": 3, - "nmax": 5, - "classes": [ - "coin", - "upgrade", - "chest", - "grass", - " 0.0", - "swamp", - "key", - "castle", - "forest", - "shrine", - "cave", - "beach", - "city", - "mountain", - "tower", - "house", - "island", - "shop", - "lantern", - "ring", - "armor", - "fire", - "map", - "heart", - "sword", - "metal", - "stairs", - "potion", - "gun", - "spear", - "desert", - "ball", - "person", - "monster", - "scroll", - "badge", - "boat", - "energy", - "missile", - "bomb", - "crystal", - "mask", - "quest", - "hat", - "relic", - "candy", - "river", - "machine", - "stone", - " mountain", - " Cool Mountain - Slide Race", - " island", - "hall", - "arena", - "door", - "lock", - "switch", - "marker", - "maze", - "piece", - "paint", - "sign", - "ruby", - "critter", - "music" - ], - "hash": "fnv1a32_utf8", - "normalize": "lower_trim_collapse_ws", - "boundaries": true -} diff --git a/public/models/icon_model.weights.bin b/public/models/icon_model.weights.bin deleted file mode 100644 index 7e88670234e66b712f20bdc4c9caba2c8d1690ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532760 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 diff --git a/src/app.css b/src/app.css index 0754a40..68fadc7 100644 --- a/src/app.css +++ b/src/app.css @@ -20,10 +20,6 @@ a { text-decoration: inherit; } -a:hover { - color: #535bf2; -} - body { scrollbar-color: #000 rgba(0, 0, 0, 0); display: grid; @@ -32,7 +28,7 @@ body { margin: 0; overflow: hidden; - >* { + > * { grid-area: 1 / 1 / 1 / 1; } } @@ -42,7 +38,9 @@ body { } input, -button { +button, +.button { + color: black; border-radius: 10px; border: 3px solid black; padding: 0.6em 0.8em; diff --git a/src/lib/Settings.svelte b/src/lib/Settings.svelte index 38f25df..92f7008 100644 --- a/src/lib/Settings.svelte +++ b/src/lib/Settings.svelte @@ -6,6 +6,24 @@ let music_vol = $state(parseFloat(localStorage.getItem("settings.music_volume") ?? "1.0")); let sfx_vol = $state(parseFloat(localStorage.getItem("settings.sfx_volume") ?? "1.0")); + let users = await (await fetch("/discord-users.json")).json(); + + const credits = [ + { + label: "Development & artwork", + users: ["382561799742160896", "235482863250702336"], + }, + { + label: "Playtesting", + users: ["1429874676590575907"], + }, + { + label: "Feedback & support", + users: ["329656222213079053", "110878826136907776", "1296648831370268756"], + columns: 2, + }, + ]; + function onchange() { localStorage.setItem("settings.music_volume", music_vol.toString()); } @@ -37,12 +55,22 @@

Credits

Elementipelago

-

a game by Pepijn & Noa made for Archipelago

- -

License

+

a game made for Archipelago

+ {#each credits as section} +

{section.label}

+
    + {#each section.users as id, i} +
  • + {users[id].display ?? users[id].username} (@{users[id].username}) +
  • + {/each} +
+ {/each} +
+

License

Elementipelago is a free and open-source project licensed under the .

- SFX include samples sourced from freesound.com, some of which licensed under CC-BY - 4.0. Authors requiring attribution are listed below, detailed attribution can be - found in the README.md of this project: + SFX include samples sourced from freesound.com, some of which are licensed under CC + BY 4.0. Attribution for these authors can be found in the README.md of this project. +

+

Links

+

+ + Github + + Archipelago + Discord channel

-
    -
  • maisonsonique
  • -
  • InspectorJ
  • -
-

Special thanks

-

you <3

@@ -78,7 +116,7 @@ div { display: flex; flex-direction: column; - align-items: center; + align-items: stretch; width: 100%; gap: 10px; @@ -94,6 +132,10 @@ overflow-y: scroll; flex-grow: 1; margin: 0; + > * { + max-width: 1000px; + margin-inline: auto; + } div { margin: 0 auto; display: flex; @@ -136,7 +178,7 @@ } } ul { - list-style: disc; + list-style: none; justify-self: center; overflow: auto; } diff --git a/svelte.config.js b/svelte.config.js index 5f9d672..ca85416 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -5,4 +5,9 @@ export default { // Consult https://svelte.dev/docs#compile-time-svelte-preprocess // for more information about preprocessors preprocess: vitePreprocess(), + compilerOptions: { + experimental: { + async: true, + }, + }, }; From c0aee08b6a0e25512d3788bb73767b9172702737 Mon Sep 17 00:00:00 2001 From: peppidesu Date: Thu, 29 Jan 2026 19:36:48 +0100 Subject: [PATCH 2/8] add elki to credits --- fetch-discord-users.js | 1 + src/lib/Settings.svelte | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/fetch-discord-users.js b/fetch-discord-users.js index 586ea06..3d4c8ab 100644 --- a/fetch-discord-users.js +++ b/fetch-discord-users.js @@ -19,6 +19,7 @@ const userIds = [ "1429874676590575907", // sarn kast "329656222213079053", // eeveon "1296648831370268756", // gleamingk111 + "317342307705683968", // elki ]; Promise.all( diff --git a/src/lib/Settings.svelte b/src/lib/Settings.svelte index 92f7008..894311a 100644 --- a/src/lib/Settings.svelte +++ b/src/lib/Settings.svelte @@ -15,7 +15,7 @@ }, { label: "Playtesting", - users: ["1429874676590575907"], + users: ["1429874676590575907", "317342307705683968"], }, { label: "Feedback & support", From e9d5f491310ab606719ac45aba9a957007db7c4f Mon Sep 17 00:00:00 2001 From: peppidesu Date: Thu, 29 Jan 2026 21:13:41 +0100 Subject: [PATCH 3/8] add jar of galaxies to credits --- fetch-discord-users.js | 1 + src/lib/Settings.svelte | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/fetch-discord-users.js b/fetch-discord-users.js index 3d4c8ab..3304112 100644 --- a/fetch-discord-users.js +++ b/fetch-discord-users.js @@ -20,6 +20,7 @@ const userIds = [ "329656222213079053", // eeveon "1296648831370268756", // gleamingk111 "317342307705683968", // elki + "86612976529838080", // jar of galaxies ]; Promise.all( diff --git a/src/lib/Settings.svelte b/src/lib/Settings.svelte index 894311a..abd9fbe 100644 --- a/src/lib/Settings.svelte +++ b/src/lib/Settings.svelte @@ -19,7 +19,12 @@ }, { label: "Feedback & support", - users: ["329656222213079053", "110878826136907776", "1296648831370268756"], + users: [ + "329656222213079053", + "110878826136907776", + "1296648831370268756", + "86612976529838080", + ], columns: 2, }, ]; @@ -63,7 +68,11 @@ 1}, 1fr); justify-self: stretch; align-items: center;" > {#each section.users as id, i} -
  • +
  • {users[id].display ?? users[id].username} (@{users[id].username})
  • {/each} From f10af717ce862b6f39cf9f18c2a5c3762ea3ae84 Mon Sep 17 00:00:00 2001 From: peppidesu Date: Thu, 29 Jan 2026 21:16:30 +0100 Subject: [PATCH 4/8] add top border --- src/lib/Settings.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/Settings.svelte b/src/lib/Settings.svelte index abd9fbe..2bee311 100644 --- a/src/lib/Settings.svelte +++ b/src/lib/Settings.svelte @@ -58,6 +58,7 @@ {onpointerup} /> +

    Credits

    Elementipelago

    a game made for Archipelago

    From fddcdd06dfbca340d732b85e644abe8c1a24dc0f Mon Sep 17 00:00:00 2001 From: peppidesu Date: Thu, 29 Jan 2026 21:18:12 +0100 Subject: [PATCH 5/8] bigger game title in credits --- src/lib/Settings.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Settings.svelte b/src/lib/Settings.svelte index 2bee311..332f2fb 100644 --- a/src/lib/Settings.svelte +++ b/src/lib/Settings.svelte @@ -60,7 +60,7 @@

    Credits

    -

    Elementipelago

    +

    elementipelago

    a game made for Archipelago

    {#each credits as section}

    {section.label}

    From 3c0541494894dc81a3a6806357139d8f6ba84de1 Mon Sep 17 00:00:00 2001 From: peppidesu Date: Thu, 29 Jan 2026 21:35:13 +0100 Subject: [PATCH 6/8] make settings always visible --- src/App.svelte | 13 +++++++------ src/lib/Login.svelte | 11 ++++++----- src/lib/Settings.svelte | 15 +++++++++++---- src/lib/Tray.svelte | 6 +++--- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/App.svelte b/src/App.svelte index 1102097..290459f 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -176,16 +176,17 @@ - { - openWindow = btn; - }} - /> (openWindow = "")} /> - (openWindow = "")} /> (openWindow = "")} /> {/if} + { + openWindow = btn; + }} + {connected} +/> + (openWindow = "")} />