Skip to content

Commit 62c7c51

Browse files
CPCP
authored andcommitted
add raycaster demo, add multi authors support
1 parent 8459d7a commit 62c7c51

17 files changed

Lines changed: 97 additions & 15 deletions

apps/cp-doom.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id: 4
22
slug: cp-doom
33
name: CP Doom
4-
author: QBos07
4+
author: diddyholz,QBos07
55
description: A Doom source port for the Classpad II. You also need the WAD. Check the details
66
longDescription: |-
77
CP Doom is a source port of the classic first-person shooter Doom, built specifically for the CASIO ClassPad II (fx-CP400) running Hollyhock-3. Experience the iconic gameplay on your calculator with optimized performance for the device's hardware.

apps/cp-pong.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id: 3
22
slug: cp-pong
33
name: CP Pong
4-
author: PyCSharp
4+
author: SnailMath, PyCSharp
55
description: A simple Ping Pong Game for the Casio FX-CP400.
66
longDescription: |-
77
CP Pong is a lightweight two-player Pong game built for the CASIO ClassPad II (fx-CP400) running Hollyhock-3. Designed for quick sessions and local multiplayer, it delivers responsive controls and classic arcade gameplay optimized for calculator hardware.

apps/cpboy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id: 5
22
slug: cpboy
33
name: CPBoy
4-
author: QBos07
4+
author: diddyholz,QBos07
55
description: A Game Boy (DMG) emulator for the Classpad II. You need roms. Check the details
66
longDescription: |-
77
CPBoy is a work-in-progress Game Boy (DMG) emulator for the CASIO ClassPad II (fx-CP400), built on the Peanut-GB core by deltabeard and ported for Hollyhock-3. It enables playback of classic Game Boy titles on calculator hardware with performance optimizations tailored to the device's constraints.

apps/hex-editor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id: 6
22
slug: hex-editor
33
name: Hex Editor
4-
author: PyCSharp
4+
author: SnailMath, PyCSharp
55
description: A hex editor that can modify values in the RAM of the calculator.
66
image: https://raw.githubusercontent.com/PyCSharp/HexEditor-For-HHK3/refs/heads/main/image.png
77
downloadUrl: https://github.com/PyCSharp/CPHexEditor-For-HHK3/releases/latest/download/CPHexEditor.hh3

apps/python.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id: 2
22
slug: python
33
name: Python
4-
author: Hollyhock Team
4+
author: Lephe, Hollyhock Team
55
description: The REAL snake game. Python interpreter for the Classpad II, create apps and games.
66
longDescription: |-
77
Python is a full-featured Python 3 interpreter for the CASIO ClassPad II (fx-CP400), built on the Gint framework and PythonExtra runtime. Write, test, and execute Python scripts directly on your calculator, from simple utilities to interactive games and graphical applications. Break free from BASIC and leverage a modern, expressive language optimized for calculator hardware.

apps/raycaster.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
id: 20
2+
slug: raycaster
3+
name: Raycaster Demo
4+
author: diddyholz
5+
description: A very simple demo of a fixed-point raycaster for the fx-CP400 with texture and sprite support.
6+
longDescription: |-
7+
This is a very simple demo of a fixed-point raycaster for the fx-CP400 with texture and sprite support. To run it, you will need the hollyhock SDK.
8+
9+
## Installation
10+
11+
Copy the .hh3 file into the root directory of your calculator and launch it through the hollyhock menu.
12+
13+
## Building
14+
15+
Easiest way to start is to fork this repo and to open in GitHub codespace (in the clone menu), or locally on a devcontainer (VSCode would prompt to use them when openning the repo).
16+
17+
For advanced users, it is possible to use docker locally. See: [Getting Started in V3](https://classpaddev.github.io/wiki/hh3/getting-started/introduction/)
18+
19+
Then just run `make` in the projects directory.
20+
21+
## Controls
22+
23+
- **DPAD**: Move / Look around
24+
- **Shift**: Toggle 2D Map rendering
25+
- **Shift + Clear**: Quit Application a raycaster.
26+
image: /store/images/cover/raycaster.png
27+
screenshots:
28+
- /store/images/raycaster/raycaster1.png
29+
- /store/images/raycaster/raycaster2.png
30+
- /store/images/raycaster/raycaster3.png
31+
- /store/images/raycaster/raycaster4.png
32+
- /store/images/raycaster/raycaster5.png
33+
downloadUrl: https://github.com/TheRainbowPhoenix/CP-Raycaster-Demo/releases/latest/download/CPRaycasterDemo.hh3
34+
detailsUrl: https://github.com/TheRainbowPhoenix/CP-Raycaster-Demo
35+
format: .hh3
36+
tags:
37+
- Demo
38+
- Game
39+
position: '0 100%'
40+
website: ''
41+
contact: ''
42+
privacy: ''
43+
rating: 4.5
44+
ratingCount: '12'
45+
downloads: 100+

apps/snake-game.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id: 1
22
slug: snake-game
33
name: Snake Game
4-
author: Hollyhock Team
4+
author: The6P4C, SnailMath, Hollyhock Team
55
description: Classic snake game
66
image: /store/images/cover/Snake.png
77
screenshots:

apps/tetris.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id: 8
22
slug: tetris
33
name: Tetris
4-
author: Hollyhock Team
4+
author: De_Coder, Hollyhock Team
55
description: Simple Tetris game.
66
longDescription: |-
77
Tetris is a minimalist implementation of the iconic block-stacking puzzle game, built natively for the CASIO ClassPad II using the Hollyhock-3 SDK. Arrange falling tetrominoes to complete horizontal lines, clear them from the playfield, and rack up points as the pace gradually increases. A faithful, no-frills experience optimized for calculator hardware.

src/lib/AppCard.svelte

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,15 @@
1111
<div class="app-header">
1212
<div class="app-header-text">
1313
<div class="app-title">{app.name}</div>
14-
<div class="app-author">by {app.author}</div>
14+
<div class="app-author">
15+
by
16+
{#each (app.author || '').split(',') as author, i}
17+
{@const a = author.trim()}
18+
{#if i > 0},
19+
{/if}
20+
<a href="{base}/dev/{a}" class="author-link">{a}</a>
21+
{/each}
22+
</div>
1523
</div>
1624
{#if app.format === '.py'}
1725
<div class="app-format-icon" title="Python App">
@@ -83,6 +91,13 @@
8391
</div>
8492

8593
<style>
94+
.author-link {
95+
color: inherit;
96+
text-decoration: none;
97+
}
98+
.author-link:hover {
99+
text-decoration: underline;
100+
}
86101
/* Make tags on the home grid clickable */
87102
.app-tag-link {
88103
text-decoration: none;

src/routes/dev/[dev]/+page.server.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,18 @@ import { error } from '@sveltejs/kit';
44
/** @type {import('./$types').EntryGenerator} */
55
export function entries() {
66
const apps = loadApps();
7-
const authors = new Set(apps.map((a) => a.author).filter(Boolean));
7+
const authors = new Set();
8+
9+
for (const a of apps) {
10+
if (!a.author) continue;
11+
const authorList = String(a.author).split(',');
12+
for (const auth of authorList) {
13+
authors.add(auth.trim());
14+
}
15+
}
16+
817
const devs = loadDevs();
9-
for (const d of devs) authors.add(d.id);
18+
for (const d of devs) authors.add(d.id.trim());
1019

1120
return Array.from(authors).map((author) => ({ dev: author }));
1221
}
@@ -19,9 +28,14 @@ export async function load({ params }) {
1928
const devProfile = devs.find((d) => d.id === devId) || { id: devId, name: devId, headline: null, featuredApp: null };
2029

2130
const apps = loadApps();
22-
const devApps = apps.filter((a) => a.author === devId);
23-
24-
if (devApps.length === 0 && !devProfile.headline && devProfile.name === devId) {
31+
const devApps = apps.filter((a) => {
32+
if (!a.author) return false;
33+
const authorList = String(a.author).split(',').map(s => s.trim());
34+
// Do case-insensitive match in case of Qbos07 vs qbos07
35+
return authorList.some(auth => auth.toLowerCase() === devId.toLowerCase());
36+
});
37+
38+
if (devApps.length === 0 && !devProfile.headline && devProfile.name.toLowerCase() === devId.toLowerCase()) {
2539
// Technically an unknown dev with no apps
2640
error(404, 'Developer not found');
2741
}

0 commit comments

Comments
 (0)