From 7590a3592140579108e4b2d930d0a20d2ff87592 Mon Sep 17 00:00:00 2001 From: Corwin <corwin@kuiper.dev> Date: Sun, 28 Apr 2024 23:00:03 +0100 Subject: [PATCH] add hyperspace roll --- .../tapir/hyperspace/hyperspace-roll-0.png | Bin 0 -> 2867 bytes .../tapir/hyperspace/hyperspace-roll-1.png | Bin 0 -> 2605 bytes .../data/tapir/hyperspace/hyperspace.tsx | 30 ++++++++++++++++++ website/agb/src/app/showcase/games.tsx | 3 +- website/agb/src/app/showcase/page.tsx | 14 +++----- website/agb/src/app/showcase/styles.tsx | 24 +++++++------- 6 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace-roll-0.png create mode 100644 website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace-roll-1.png create mode 100644 website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace.tsx diff --git a/website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace-roll-0.png b/website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace-roll-0.png new file mode 100644 index 0000000000000000000000000000000000000000..d03f89eb63d4f9e4d425beb57f25f98c33de41e7 GIT binary patch literal 2867 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 RPG|rC002ovPDHLkV1jk6fqMV| literal 0 HcmV?d00001 diff --git a/website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace-roll-1.png b/website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace-roll-1.png new file mode 100644 index 0000000000000000000000000000000000000000..47f792dfd0a9df3f305ef526ea840520ebc984e3 GIT binary patch literal 2605 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 P00000NkvXXu0mjfdw=?z literal 0 HcmV?d00001 diff --git a/website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace.tsx b/website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace.tsx new file mode 100644 index 00000000..84ffdcd9 --- /dev/null +++ b/website/agb/src/app/showcase/data/tapir/hyperspace/hyperspace.tsx @@ -0,0 +1,30 @@ +import { ShowcaseGame, shuffle } from "@/app/showcase/games"; +import h1 from "./hyperspace-roll-0.png"; +import h2 from "./hyperspace-roll-1.png"; + +const Screenshots = [h1, h2]; + +export const Hyperspace: ShowcaseGame = { + name: "Hyperspace Roll", + developers: shuffle(["Corwin Kuiper", "Gwilym Inzani", "Sam Williams"]), + screenshots: Screenshots, + description: ( + <> + <p> + Get through as many levels as possible in this space themed, dice + rolling roguelike. + </p> + <p> + Build up powerful combos to defeat enemies which keep getting stronger. + Slowly acquire more dice and upgrade them in order to handle the + increasing strength of the enemies you face. + </p> + + <p> + Hyperspace Roll was influenced by great games such as Slay the Spire, + FTL and the board game Escape: The Curse of the Temple. + </p> + </> + ), + itch: new URL("https://lostimmortal.itch.io/the-purple-night"), +}; diff --git a/website/agb/src/app/showcase/games.tsx b/website/agb/src/app/showcase/games.tsx index 3ba4a542..02418bb7 100644 --- a/website/agb/src/app/showcase/games.tsx +++ b/website/agb/src/app/showcase/games.tsx @@ -2,6 +2,7 @@ import { StaticImageData } from "next/image"; import { ReactNode } from "react"; import { HatWiz } from "./data/tapir/hatwiz/hatwiz"; import { Purple } from "./data/tapir/purple/purple"; +import { Hyperspace } from "./data/tapir/hyperspace/hyperspace"; export interface ShowcaseGame { name: string; @@ -24,4 +25,4 @@ export function shuffle<T>(a: T[]) { return a; } -export const Games: ShowcaseGame[] = [HatWiz, Purple]; +export const Games: ShowcaseGame[] = [HatWiz, Purple, Hyperspace]; diff --git a/website/agb/src/app/showcase/page.tsx b/website/agb/src/app/showcase/page.tsx index 7387c023..8ebb7fbc 100644 --- a/website/agb/src/app/showcase/page.tsx +++ b/website/agb/src/app/showcase/page.tsx @@ -1,10 +1,8 @@ import { Metadata } from "next"; import { ContentBlock } from "@/components/contentBlock"; import { Games, ShowcaseGame } from "./games"; -import Link from "next/link"; import { slugify } from "@/sluggify"; import { GameDisplay, GameGrid, GameImage } from "./styles"; -import Image from "next/image"; export const metadata: Metadata = { title: "Games made with agb", @@ -28,15 +26,11 @@ export default function ColourPickerPage() { } function Game({ game }: { game: ShowcaseGame }) { - const lastImage = game.screenshots[game.screenshots.length - 1]; + const showcaseImage = game.screenshots[game.screenshots.length - 1]; return ( - <GameDisplay> - <Link href={`./showcase/${slugify(game.name)}`}> - <GameImage> - <Image src={lastImage} alt={`Screenshot of ${game.name}`} /> - </GameImage> - <h2>{game.name}</h2> - </Link> + <GameDisplay href={`./showcase/${slugify(game.name)}`}> + <GameImage src={showcaseImage} alt={`Screenshot of ${game.name}`} /> + <h2>{game.name}</h2> </GameDisplay> ); } diff --git a/website/agb/src/app/showcase/styles.tsx b/website/agb/src/app/showcase/styles.tsx index 0b7a5395..32936871 100644 --- a/website/agb/src/app/showcase/styles.tsx +++ b/website/agb/src/app/showcase/styles.tsx @@ -1,6 +1,8 @@ "use client"; +import Link from "next/link"; import styled from "styled-components"; +import Image from "next/image"; export const GameGrid = styled.div` display: flex; @@ -8,22 +10,18 @@ export const GameGrid = styled.div` justify-content: center; `; -export const GameImage = styled.div` - img { - width: 100%; - width: round(down, 100%, 240px); - height: auto; - image-rendering: pixelated; - } +export const GameImage = styled(Image)` + width: 100%; + width: round(down, 100%, 240px); + height: auto; + image-rendering: pixelated; `; -export const GameDisplay = styled.div` +export const GameDisplay = styled(Link)` width: 600px; - a { - text-align: center; - color: black; - text-decoration: none; - } + text-align: center; + color: black; + text-decoration: none; h2 { margin: 0;