diff --git a/src/lib/types/Games.ts b/src/lib/types/Games.ts
index 7c78463..9b819dc 100644
--- a/src/lib/types/Games.ts
+++ b/src/lib/types/Games.ts
@@ -8,6 +8,7 @@ export interface Game {
state?: GameState;
contestDetails?: ContestDetails;
sboxIdent?: string;
+ slug?: string;
}
export interface ContestDetails {
@@ -19,7 +20,10 @@ export interface ContestDetails {
export enum Placement {
'1st',
'2nd',
- '3rd'
+ '3rd',
+ '4th',
+ '5th',
+ None
}
export enum GameState {
@@ -51,7 +55,7 @@ export const Games: Game[] = [
contestDetails: {
url: 'https://sbox.game/c/gamejam2',
placement: Placement['2nd'],
- title: 'Facepunch Game Contest'
+ title: 'Facepunch Game Contest II'
},
sboxIdent: 'fish.deathcard'
},
@@ -111,3 +115,9 @@ export const Games: Game[] = [
contributors: ['ubre', 'Grodbert', 'ceitine', 'Luke', 'rndtrash', 'Mungus']
}
];
+
+// Give all games a slug!
+Games.forEach((game) => {
+ if (game.slug) return;
+ game.slug = game.title.toLowerCase().replaceAll(' ', '_').replaceAll('/[^a-z0-9]/gi', '');
+});
diff --git a/src/routes/games/+layout.svelte b/src/routes/games/+layout.svelte
index e512550..16978b5 100644
--- a/src/routes/games/+layout.svelte
+++ b/src/routes/games/+layout.svelte
@@ -1,21 +1,94 @@
-
{game.title}
+
+ Games / {game.title}
+
+
+
+
+
+
+
+
+
+
quick fish games navigation:
+
+ {#each Games as game}
+ {@const activeClass =
+ game.slug == $page.params.slug || (!$page.params.slug && game == Games[0])
+ ? 'bg-white text-blue'
+ : 'text-white'}
+
{game.title}
+ {/each}
+
+
+
+
+
+
+
+ {#if game.contestDetails}
+ {@const placement = Placement[game.contestDetails.placement]}
+
+
+
+
+
{game.contestDetails.title}
+
+ {#if game.contestDetails.placement == Placement.None}
+ This game was submitted for a gamejam didn't place :(
+ {:else}
+ This game was submitted for a gamejam and placed {placement}.
+ {/if}
+
+
+
+ {/if}
+
+
+
+
+
diff --git a/src/routes/games/[slug]/+page.server.ts b/src/routes/games/[slug]/+page.server.ts
index 102e67b..ddd791e 100644
--- a/src/routes/games/[slug]/+page.server.ts
+++ b/src/routes/games/[slug]/+page.server.ts
@@ -3,7 +3,7 @@ import { Games, type Game } from '$lib/types/Games';
/** @type {import('./$types').EntryGenerator} */
export function entries() {
return Games.map(function (g) {
- return { slug: decodeURI(g.title) };
+ return { slug: g.slug ?? 'fuck-you-kid' };
});
}
diff --git a/src/routes/games/[slug]/+page.svelte b/src/routes/games/[slug]/+page.svelte
index cf9513f..4c63611 100644
--- a/src/routes/games/[slug]/+page.svelte
+++ b/src/routes/games/[slug]/+page.svelte
@@ -3,10 +3,10 @@
import { Games, type Game } from '$lib/types/Games';
function getGameFromSlug(): Boolean {
- let slug = $page.params.slug;
- const decodedName = decodeURI(slug);
+ const slug = $page.params.slug;
+ const decodedName = slug?.toLocaleLowerCase();
- let target = Games.find((g) => g.title.toLowerCase() === decodedName.toLocaleLowerCase());
+ const target = Games.find((g) => g.slug == decodedName);
if (target == null) return false;
initialGame = target;
diff --git a/src/routes/play/[slug]/+layout.svelte b/src/routes/play/[slug]/+layout.svelte
index f9ab05f..97d122a 100644
--- a/src/routes/play/[slug]/+layout.svelte
+++ b/src/routes/play/[slug]/+layout.svelte
@@ -10,14 +10,11 @@
return ident;
};
- function getGameFromIdent(): boolean {
+ function getGameFromSlug(): boolean {
const slug = $page.params.slug;
- const decodedName = decodeURI(slug);
+ const decodedName = slug.toLocaleLowerCase();
- const target = Games.find(
- (g) =>
- cullIdent(g.sboxIdent ?? 'fuck-you-kid').toLowerCase() === decodedName.toLocaleLowerCase()
- );
+ const target = Games.find((g) => (g.slug ?? 'fuck-you-kid').toLowerCase() === decodedName);
if (target == null) return false;
game = target;
@@ -33,7 +30,7 @@
- {#if getGameFromIdent()}
+ {#if getGameFromSlug()}
{#if game.summary}
@@ -75,9 +72,4 @@
p {
text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5);
}
-
- .pixelated {
- image-rendering: pixelated;
- filter: drop-shadow(2px 2px 2px rgba(0, 0, 0, 0.5));
- }
diff --git a/src/routes/play/[slug]/+page.server.ts b/src/routes/play/[slug]/+page.server.ts
index e75f650..3ce4935 100644
--- a/src/routes/play/[slug]/+page.server.ts
+++ b/src/routes/play/[slug]/+page.server.ts
@@ -1,14 +1,9 @@
import { Games, type Game } from '$lib/types/Games';
-const cullIdent = (ident: string): string => {
- if (ident.startsWith('fish.')) ident = ident.substring(5);
- return ident;
-};
-
/** @type {import('./$types').EntryGenerator} */
export function entries() {
return Games.filter((g) => g.sboxIdent != undefined).map(function (g) {
- return { slug: cullIdent(decodeURI(g.sboxIdent ?? 'fuck-you-kid')) };
+ return { slug: g.slug ?? 'fuck-you-kid' };
});
}
@@ -17,10 +12,8 @@ import { error, redirect } from '@sveltejs/kit';
/** @type {import('./$types').PageLoad} */
export function load({ params }) {
const slug = params.slug;
- const decodedName = cullIdent(decodeURI(slug).toLocaleLowerCase());
- const game = Games.find(
- (g) => cullIdent(g.sboxIdent?.toLowerCase() ?? 'fuck-you-kid') === decodedName
- );
+ const decodedName = slug.toLocaleLowerCase();
+ const game = Games.find((g) => (g.slug?.toLowerCase() ?? 'fuck-you-kid') === decodedName);
if (!game?.sboxIdent) {
throw error(404, {
diff --git a/src/routes/team/+layout.svelte b/src/routes/team/+layout.svelte
index 7184fb9..4ffa5a2 100644
--- a/src/routes/team/+layout.svelte
+++ b/src/routes/team/+layout.svelte
@@ -233,17 +233,19 @@
- {#if member}
- Team / {member.name}
- {:else}
- Team
- {/if}
+ {#key member}
+ {#if member}
+ Team / {member.name}
+ {:else}
+ Team
+ {/if}
+ {/key}