Expand website and game trackers
Some checks failed
Test and deploy staging / staging (push) Failing after 5m29s
Some checks failed
Test and deploy staging / staging (push) Failing after 5m29s
This commit is contained in:
15
src/routes/projects/game-tracker/credits/+page.server.ts
Normal file
15
src/routes/projects/game-tracker/credits/+page.server.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import images from '../../../../../data/game-images.json';
|
||||
import maps from '../../../../../data/pokemon-map-art.json';
|
||||
export function load() {
|
||||
const sources = new Map<string, { source: string; credit: string; count: number }>();
|
||||
for (const image of images) {
|
||||
const existing = sources.get(image.source);
|
||||
if (existing) existing.count++;
|
||||
else sources.set(image.source, { source: image.source, credit: image.credit, count: 1 });
|
||||
}
|
||||
return {
|
||||
sources: [...sources.values()],
|
||||
maps: Object.values(maps).map(({ name, source, credit }) => ({ name, source, credit })),
|
||||
total: images.length
|
||||
};
|
||||
}
|
||||
41
src/routes/projects/game-tracker/credits/+page.svelte
Normal file
41
src/routes/projects/game-tracker/credits/+page.svelte
Normal file
@@ -0,0 +1,41 @@
|
||||
<script lang="ts">
|
||||
import { resolve } from '$app/paths';
|
||||
import type { PageProps } from './$types';
|
||||
let { data }: PageProps = $props();
|
||||
</script>
|
||||
|
||||
<!-- Download manifest links point to reviewed external image sources. -->
|
||||
<!-- eslint-disable svelte/no-navigation-without-resolve -->
|
||||
<div class="mx-auto max-w-4xl px-4 py-10 sm:px-6">
|
||||
<a href={resolve('/projects/game-tracker')} class="text-sm text-muted-foreground hover:underline"
|
||||
>← Game tracker</a
|
||||
>
|
||||
<h1 class="mt-6 text-3xl font-semibold">Artwork credits</h1>
|
||||
<p class="mt-3 text-muted-foreground">
|
||||
Game covers, logos, sprites, maps and screenshots belong to their respective owners. The tracker
|
||||
stores WebP copies for consistent, reliable display. Map imagery is shared across games in the
|
||||
same region; later-region landmark positions are approximate.
|
||||
</p>
|
||||
<h2 class="mt-8 text-xl font-semibold">Regional maps</h2>
|
||||
<ul class="mt-4 space-y-3">
|
||||
{#each data.maps as map (map.name)}<li>
|
||||
<a href={map.source} target="_blank" rel="noreferrer" class="font-medium underline"
|
||||
>{map.name}</a
|
||||
>
|
||||
<p class="text-xs text-muted-foreground">{map.credit}</p>
|
||||
</li>{/each}
|
||||
</ul>
|
||||
<h2 class="mt-8 text-xl font-semibold">Covers, sprites and other artwork</h2>
|
||||
<p class="mt-2 text-sm text-muted-foreground">
|
||||
{data.total.toLocaleString()} downloaded image records. Box art is archived by Libretro and Serebii;
|
||||
Pokémon sprites and official artwork are archived by PokéAPI. COD covers and achievement icons come
|
||||
from Steam.
|
||||
</p>
|
||||
<ul class="mt-4 space-y-3">
|
||||
{#each data.sources as item (item.source)}<li>
|
||||
<a href={item.source} target="_blank" rel="noreferrer" class="text-sm underline"
|
||||
>{item.credit}</a
|
||||
><span class="ml-2 text-xs text-muted-foreground">{item.count} images</span>
|
||||
</li>{/each}
|
||||
</ul>
|
||||
</div>
|
||||
Reference in New Issue
Block a user