initial commit

This commit is contained in:
2026-08-15 18:51:43 +02:00
commit 8a6a1fcf07
119 changed files with 11326 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
# Copy to .env.local for local development (never commit real secrets)
CLOUDFLARE_API_TOKEN=
CLOUDFLARE_ZONE_ID=
+9
View File
@@ -0,0 +1,9 @@
node_modules/
dist/
.astro/
.DS_Store
.venv/
/.tmp
.env
.env.local
.env.production
+6
View File
@@ -0,0 +1,6 @@
title: "28k8 tHE tEMPLE BBS"
emoji: "💾"
category: code
subcategory: "Web Projects"
status: active
stack: [Astro, React, TypeScript, Cloudflare Pages]
+189
View File
@@ -0,0 +1,189 @@
# AGENTS.md - Projekt-Kontext für KI-Agenten
## Was ist das Projekt?
**28k8.moonweb.org** — Eine Retro-BBS-Homepage im Stil eines 90er-DOS-Terminals für "tHE tEMPLE bBS" (Augsburg, FidoNet 2:2480/330, Sysop: Stefan Koelle). Kein Backend, kein PHP, keine Datenbank, kein Tracking.
## Tech-Stack
| Bereich | Technologie |
|---|---|
| Framework | **Astro 4.15+** mit React-Islands |
| Rendering | Vollständig statisch (SSG), jede Route wird zur Build-Zeit vorgerendert |
| Hosting | **Cloudflare Pages** |
| DNS | Cloudflare |
| Content | Astro Content Collections + Zod-Schema-Validierung |
| Styling | CSS Custom Properties, DOS 16-Farben-Palette, kein CSS-Framework |
| TypeScript | Strict Mode, React-JSX |
## Dokumentenlage
| Datei | Inhalt |
|---|---|
| `PRD.md` | Anforderungsdokument für 28k8 |
| `PLAN.md` | Implementierungsplan (Astro) |
| `SPEC.md` | Technische Spezifikation (Astro) |
| `README.md` | Projekt-README |
## Projektstruktur
```
28k8-moonweb-org/
├── src/
│ ├── pages/ # Astro-Routing (eine Datei = eine URL)
│ │ ├── index.astro # / → Modem-Intro (nur beim ersten Besuch)
│ │ └── bbs/
│ │ ├── index.astro # /bbs/ → Hauptmenü (2×2-Kachel-Raster)
│ │ ├── legal-notice.astro
│ │ ├── pc/ # PHOB!A, Tr@nceMISSION, SkyLINE, Kosmos Design
│ │ ├── atari/ # Tropic DREAMs
│ │ ├── amiga/ # ESPRIT, MOD Files
│ │ └── fido/ # ANSI Art, Nodelist
│ ├── components/
│ │ ├── TerminalLayout.astro # Basis-HTML-Layout (head, meta, CSS-Import)
│ │ ├── TerminalShell.tsx # React-Island: Keyboard-Shortcuts
│ │ ├── ModemIntro.tsx # React-Island: Wahl-Simulation + Sound
│ │ ├── ModPlayer.tsx # React-Island: MOD Playlist + WASM Player
│ │ ├── AnsiArt.astro # Rendered vorberechnete ANSI-Art als HTML
│ │ ├── Tile.astro # Menü-Kachel-Component
│ │ ├── NavBar.astro # Navigation [B] [Q] [I]
│ │ ├── StatusBar.astro # "28800 bps | Line: V34 | 28k8.moonweb.org"
│ │ └── LetterFooter.astro # Dekorativer "tHE tEMPLE bBS"-Buchstaben-Footer
│ ├── data/
│ │ └── mods.json # MOD-Metadaten (pre-build generiert, committed)
│ ├── content/ # Markdown+Frontmatter für Releases
│ │ ├── config.ts # Zod-Schemas für Content Collections
│ │ ├── skyline/ # SkyLINE Productions Releases
│ │ ├── kosmos-design/ # Kosmos Design Releases
│ │ ├── tropicdreams/ # Tropic DREAMs Releases (Atari ST)
│ │ └── esprit/ # ESPRIT Releases (Amiga)
│ ├── lib/
│ │ ├── ansiArt.ts # BANNER_*, ANSI_GALLERY, BOX_* Exporte (HTML-Strings)
│ │ ├── keymap.ts # Tastatur-Zuordnungen (GLOBAL_NAV_KEYS, MENU_KEYS)
│ │ └── sound.ts # Audio-Playback für Modem-Intro
│ └── styles/
│ └── global.css # alle CSS-Variablen, Klassen, Responsive-Styles
├── public/
│ ├── images/ # skyline-header.png, og-image.png
│ ├── audio/ # dial-tone.mp3, dtmf-beeps.mp3, modem-handshake.mp3
│ ├── js/
│ │ ├── chiptune3.js # MOD Player Library (gepatcht für Script-Tag)
│ │ ├── chiptune3.worklet.js # AudioWorklet für libopenmpt
│ │ └── libopenmpt.worklet.js # libopenmpt WASM (~1.5 MB)
│ ├── favicon.ico
│ └── fonts/ # CP437-Webfont (geplant, noch nicht vorhanden)
├── tools/
│ ├── fetch_mods.py # Pre-build: Holt MOD-Metadaten von moonweb.org
│ ├── generate_ansi.py # Referenz-Script für ANSI-Art-Generierung
│ └── cp437_to_utf8.py # CP437 → UTF-8 Konverter für BBS-Dateien
├── prebuild.sh # Pre-build Orchestrator (ruft alle tools/fetch_*.py auf)
├── source-assets/
│ └── reference/ # Original-BBS-Screenshots als Design-Referenz
├── astro.config.mjs # site: https://28k8.moonweb.org, React-Integration
├── tsconfig.json # strict Mode, react-jsx
├── package.json # astro, @astrojs/react, react, react-dom, chiptune3
└── .env.example # CLOUDFLARE_API_TOKEN, CLOUDFLARE_ZONE_ID
```
## Routing & URLs
| URL | Seite | Bemerkung |
|---|---|---|
| `/` | Modem-Intro | Redirect zu `/bbs/` wenn `localStorage.hasConnected === 'true'` |
| `/bbs/` | Hauptmenü | 2×2-Kachel-Raster, Google-indexierbar |
| `/bbs/pc/phobia` | PHOB!A | Teaser → Link zu moonweb.org/phobia/ |
| `/bbs/pc/trancemission` | Tr@nceMISSION | Teaser → Link zu moonweb.org/tcm/ |
| `/bbs/pc/skyline` | SkyLINE Productions | Content aus Collections, Blau-Akzent |
| `/bbs/pc/kosmos-design` | Kosmos Design [KDS] | Own Releases + Outside Productions |
| `/bbs/atari/tropic-dreams` | Tropic DREAMs | Atari ST Releases (1990-1992) |
| `/bbs/amiga/esprit` | ESPRIT Releases | Amiga DemoMaker |
| `/bbs/amiga/mods` | MOD Files | Echte MODs von moonweb.org, WASM-Player (chiptune3) |
| `/bbs/fido/ansi-art` | BBS ANSI Art | Gallery mit 8 Filler-Patterns |
| `/bbs/fido/nodelist` | Fidonets & Nodelists | 9 Net-Boxen transkribiert |
| `/bbs/legal-notice` | Legal Notice | Pflichtangaben hinterlegt, Link zu hub.moonweb.org/impressum |
## Keyboard-Shortcuts (keymap.ts)
**Global:** `B` Back (history.back), `Q` Disconnect (clears localStorage), `I` Legal Notice
**Menu:** `P` PHOB!A, `T` Tr@nceMISSION, `S` SkyLINE, `K` Kosmos Design, `D` Tropic DREAMs, `E` ESPRIT, `M` MOD Files, `A` BBS ANSI Art, `N` Fidonets
## Content Collections (src/content/config.ts)
Schema für alle Releases:
```typescript
{ title, group, year?, platform, credits: [{role, name}], description,
download_url?, screenshot?, file_id_diz }
```
## ANSI-Art-System
1. `tools/generate_ansi.py` generiert HTML aus 5×7-Bitmap-Font + Dithering-Gradienten
2. Output landet als statische Strings in `src/lib/ansiArt.ts`
3. Components laden via `import { BANNER_X } from '../../lib/ansiArt'`
4. Rendered via `<AnsiArt html={BANNER_X} />` (zero JS, set:html)
CSS-Klassen: `c-border-red`, `c-main-red`, `c-shadow-red`, `c-border-blue`, `c-main-blue`, `c-shadow-blue`, `c-white`, `c-grey`, `c-pink`, `c-cyan`
## Lokaler Dev-Workflow
```bash
npm install
npm run dev # → localhost:4321
npm run build # → prebuild.sh + dist/
npm run preview # → lokaler Production-Server
```
## Pre-Build System
`prebuild.sh` lädt vor jedem Build externe Daten (JSON) und schreibt sie nach `src/data/`. Die JSON wird committed, der Build hängt nicht vom externen Server ab.
```bash
./prebuild.sh # alle Stages
./prebuild.sh mods # nur MOD-Metadaten
```
Aktive Stages:
| Stage | Script | Output | Beschreibung |
|---|---|---|---|
| `mods` | `tools/fetch_mods.py` | `src/data/mods.json` | MOD-Metadaten von moonweb.org |
Neuen Stage hinzufügen:
1. `tools/fetch_<name>.py` erstellen (Output: `src/data/<name>.json`)
2. Case-Block in `prebuild.sh` ergänzen
3. `npm run build` ruft automatisch `prebuild.sh` auf
## CP437 → UTF-8 Konvertierung
Alte BBS-Dateien (FILES.BBS, kosmos.txt, etc.) sind im CP437-Kodiert (IBM PC Zeichensatz). Für die Anzeige auf der Website müssen sie konvertiert werden.
```bash
# Einmal-Datei konvertieren (Output auf stdout)
python3 tools/cp437_to_utf8.py https://www.moonweb.org/files/pc/KDS/kosmos.txt
# In Datei speichern
python3 tools/cp437_to_utf8.py https://www.moonweb.org/files/pc/KDS/FILES.BBS src/data/kds-files-bbs.txt
```
**Neue Dateien einbinden:**
1. Konvertieren: `python3 tools/cp437_to_utf8.py <url> src/data/<name>.txt`
2. In `.astro` einlesen: `const text = readFileSync('src/data/<name>.txt', 'utf-8');`
3. Overlay nutzen: `<TextOverlay title="datei.txt" content={text} />`
Konvertierte Dateien werden in `src/data/` gespeichert und committed.
## Design-Regeln
- DOS 16-Farben-Palette strikt, Hintergrund immer Schwarz
- Keine Scanlines, kein CRT-Curvature, kein Flicker
- CP437-Font für ANSI-Art, IBM Plex Mono für Fließtext
- Fix 80 Zeichen breit, vertikal scrollbar
- SkyLINE: einzige Seite mit Blau-Akzent (sonst immer Rot)
- Kompletter Content auf Englisch
- Barrierefreiheit explizit nicht priorisiert
## Offene Aufgaben
**Aktuelle Task-Liste:** `TODO.md` — dort steht der nächste Schritt ganz oben.
Bei neuem Kontext: Zuerst `TODO.md` lesen, dann `PLAN.md` (Roadmap), dann `SPEC.md` (Tech-Spec).
+34
View File
@@ -0,0 +1,34 @@
# PLAN.md - Implementation Roadmap (v2)
## Phase 0 - Scaffold (v1, done) + Phase 0.5 - v2 fixes (done in this drop)
- [x] Fix: ANSI banner renders (AnsiArt.astro + ansiArt.ts)
- [x] Fix: Disconnect clears state (NavBar.astro)
- [x] Fix: SkyLINE blue accent visible + real header PNG
- [x] 10 boxed ASCII banners w/ dithering bars, 8 gallery patterns, 9 net-boxes
- [x] Tropic DREAMs (4 real), SkyLINE (+3), Kosmos Design (7 new), ESPRIT (4 new)
- [x] MOD Files placeholder tracklist + visual player widget
- [x] PHOB!A / Tr@nceMISSION teaser text, favicon.ico + og-image.png
## Phase 1 - Make it actually run
- [ ] npm install, npm run dev, npm run build && npm run preview
- [ ] Modem-Intro-Audio-Clips bereitstellen: public/audio/dial-tone.mp3, dtmf-beeps.mp3, modem-handshake.mp3
## Phase 2 - Real ANSI rendering
- [ ] Feed real .ans files (via OpenCode) into source-assets/ansi/
- [ ] Self-host CP437 webfont under public/fonts/
## Phase 3 - Navigation polish
- [ ] /bbs/atari/ etc. as mobile anchors to /bbs/#atari
- [ ] Astro View Transitions, subtle text-build-in stutter effect
## Phase 4-5 - Visual + Content
- [ ] Replace filler gallery patterns with real scanned ANSI art
- [ ] Replace placeholder releases with real ones, write real Impressum text
## Phase 6 - Amiga MOD player
- [ ] Real WASM MOD player (libopenmpt.js/chiptune3.js), real .mod files
## Phase 7-8 - Infra & Launch
- [ ] files.moonweb.org, public GitHub repo + Cloudflare Pages
- [ ] sitemap.xml/robots.txt, full click-through incl. regression test of
the two v1 bugs (banner visibility + Disconnect)
Executable
+495
View File
@@ -0,0 +1,495 @@
# PRD 28k8.moonweb.org
**"tHE tEMPLE bBS" Retro Hub Page**
Status: v2.0
---
## 1. Vision & Zweck
Eine persönliche Hub-Page unter `28k8.moonweb.org`, die die eigene BBS-/Demoscene-Vergangenheit der 90er Jahre in Augsburg dokumentiert und als Portal zu bereits existierenden Archiv-Subdomains (`phobia`, `tcm`) sowie neuen Unterseiten (SkyLINE, Kosmos Design, Tropic DREAMs, ESPRIT, MOD-Sammlung, BBS-ANSI-Art, Fidonet) dient.
Das ursprüngliche Vorbild ist das eigene BBS aus den 90ern:
```
tHE tEMPLE bBS
0821-2191038 (Augsburg)
Sysop: Stefan Koelle
Fido: 2:2480/330
```
Die Seite soll stilistisch wie ein echtes DOS-Terminal wirken (schwarzer Hintergrund, ANSI-Art, CP437-Font), aber technisch eine moderne, rein clientseitige Static Site sein kein Backend, kein PHP.
**Kernprinzip:** Nostalgie-Genauigkeit im Design > moderne UX-Konventionen. Lieber weniger Schnickschnack als zu viel. Kleine, witzige moderne Gimmicks im alten Stil sind erlaubt (z. B. Modem-Dial-Sound, In-Browser-MOD-Player).
## 2. Ziele / Non-Goals
**Ziele:**
- Alle eigenen 90er-Projekte (PC/Atari ST/Amiga/BBS) an einem zentralen Ort dokumentieren
- Authentisches BBS-/Terminal-Gefühl per Maus (primär, ganze Box/Kachel klickbar inkl. Hover-State) **und** Tastatur (Fallback, eindeutige Buchstaben-Shortcuts)
- Vollständig statisch, SEO-fähig
- Wartbar über Markdown+Frontmatter im Git-Repo, Content-Pflege künftig primär durch AI-gestützte Edits
- Kein Server, kein PHP, keine Datenbank
- Komplett englischsprachiger Content
**Non-Goals:**
- Keine Barrierefreiheit/Accessibility
- Kein CMS, kein Backend, kein Login-System
- Kein Nodelist-Browser
- Keine Terminal-Effekte wie Scanlines/CRT-Curvature/Flicker
- Kein Guestbook/Kommentarfunktion
- Kein Analytics/Tracking jeglicher Art
- Kein Easter-Egg im Buchstaben-Footer (rein dekorativ)
## 3. Tech-Stack & Architektur
| Bereich | Entscheidung |
|---|---|
| Framework | **Astro** + React-Islands für interaktive Komponenten (Terminal-Input, MOD-Player, ANSI-Renderer) |
| Rendering | Vollständig statisch, jede Route wird zur Build-Zeit vorgerendert (SSG) |
| Hosting | **Cloudflare Pages** Git-Push triggert automatisch Cloudflare-eigenen Build & Deploy |
| DNS/CDN | Cloudflare |
| Domain-Registrar | 1&1 IONOS (unverändert) |
| Backend | **Keins.** Kein PHP, keine serverseitige Logik jemals |
| Asset-Hosting (Downloads) | `files.moonweb.org` (Synology oder eigener Static-Fileserver-Container) |
| Asset-Ablage (Design-Referenz) | `source-assets/` im Haupt-Repo |
| Repo | Neues, öffentliches GitHub-Repo |
| Content-Format | Markdown mit Frontmatter pro Release/Seite |
### 3.1 Technologie-Entscheidung: Astro statt Eleventy
**Frage geklärt:** Eleventy (11ty) ist ein reiner Template-basierter Static-Site-Generator ohne eingebaute Interaktivitäts-Architektur JS-Komponenten (Terminal-Input, ANSI-Renderer, MOD-Player) müssten manuell über einen separaten Bundler eingebunden werden, inkl. eigener Logik dafür, dass nur nötige Seiten JS laden.
Astro bietet **Islands Architecture**: jede Seite ist standardmäßig 100% statisches HTML/CSS, nur explizit markierte Komponenten (Terminal-Shell, MOD-Player) werden als React-Island hydriert. Zusätzlich: Content Collections mit Schema-Validierung (Zod) für Markdown+Frontmatter, integrierte View-Transitions-API für den gewünschten SPA-Effekt zwischen Subseiten. Deshalb Astro statt Eleventy bessere Passform für "größtenteils statisch, aber gezielt interaktiv".
### 3.2 Lokaler Dev-Workflow
Damit vor jedem Push zu GitHub lokal getestet werden kann (Astro bringt das ohne Zusatztooling mit):
| Command | Zweck |
|---|---|
| `npm run dev` | Lokaler Dev-Server mit Hot-Reload (`localhost:4321`) für die Entwicklung |
| `npm run build` | Erzeugt den finalen statischen Build nach `dist/` identisch zu dem, was Cloudflare Pages baut |
| `npm run preview` | Startet einen kleinen lokalen Webserver, der exakt den `dist/`-Static-Build ausliefert, zum Prüfen vor dem Push |
Damit ist ein vollständiger lokaler Build+Test-Zyklus möglich, ohne dass die GitHub Action/Cloudflare Pages involviert sein muss.
### CI/CD
- Push auf `main` → Cloudflare Pages Build (Astro build) → automatisches Deploy
- Preview-Deployments für Pull Requests (Cloudflare-Pages-Standardfeature)
- Kein SFTP/IONOS-Webspace-Deploy nötig
## 4. Informationsarchitektur / URL-Struktur
```
28k8.moonweb.org/ → Modem-Connect-Intro (nur beim ersten Besuch
bzw. nach explizitem "Disconnect")
28k8.moonweb.org/bbs/ → Hauptmenü (2x2-Kachel-Raster), Google-indexierbar
28k8.moonweb.org/bbs/pc/ → PC Section (Anchor-Ziel, kein eigenständiger Content)
28k8.moonweb.org/bbs/pc/phobia → Subseite PHOB!A
28k8.moonweb.org/bbs/pc/trancemission → Subseite Tr@nceMISSION
28k8.moonweb.org/bbs/pc/skyline → Subseite SkyLINE Productions
28k8.moonweb.org/bbs/pc/kosmos-design → Subseite Kosmos Design [KDS]
28k8.moonweb.org/bbs/atari/ → Atari Section (Anchor-Ziel)
28k8.moonweb.org/bbs/atari/tropic-dreams→ Subseite Tropic DREAMs
28k8.moonweb.org/bbs/amiga/ → Amiga Section (Anchor-Ziel)
28k8.moonweb.org/bbs/amiga/esprit → Subseite ESPRIT Releases
28k8.moonweb.org/bbs/amiga/mods → Subseite MOD Files (mit In-Browser-Player)
28k8.moonweb.org/bbs/fido/ → BBS & FIDO Section (Anchor-Ziel)
28k8.moonweb.org/bbs/fido/ansi-art → Subseite BBS ANSI Art
28k8.moonweb.org/bbs/fido/nodelist → Subseite Fidonets and Nodelists
28k8.moonweb.org/bbs/legal-notice → Legal Notice (Pflichtseite, eigener Menüpunkt)
```
**Regeln:**
- `/` zeigt Intro nur beim allerersten Besuch (`localStorage`-Flag), danach Redirect zu `/bbs/`
- "Disconnect" setzt den Flag zurück und navigiert zu `/`
- Zurück-Navigation: `[B] Back` als Tastaturbefehl, zusätzlich klickbar
- Mobile: Section-URL scrollt zum Anchor innerhalb `/bbs/` (`/bbs/#atari`)
- Subseiten-Wechsel wirkt wie SPA (äußerer Terminal-Rahmen bleibt bestehen), aber jede Subseite hat eine echte, vorgerenderte, crawlbare URL
## 5. Interaktionsmodell
### 5.1 Modem-Connect-Intro (`/`)
- 28k8-Modem-SVG + simuliertes Terminalfenster, ATDT-Wählbefehl
- Line-Auswahl:
```
Line 1: +49-821-2191-038 [VFC V34] 28800
Line 2: +49-821-2191-036 [X75] 64000
```
- **Line 1:** Volle Modem-Einwahl-Simulation (Wählton → Pieptöne → Handshake-Sound) → Redirect zu `/bbs/`
- **Line 2:** Kein Sound, sofortiger Direktzugang → Redirect zu `/bbs/`
- Sound nur an dieser einen Stelle im gesamten Projekt
### 5.2 Hauptmenü (`/bbs/`) Bedienlogik
- **Keine Section-Keys mehr** (P/A/G/F entfallen) Sections selbst sind reine visuelle Gruppierung ohne eigenes Ziel
- **Jeder einzelne Menüpunkt bekommt einen global eindeutigen Tastatur-Shortcut** (siehe Keymap-Tabelle 5.2.1), Tastatur ist Fallback/Gimmick
- **Primäre Bedienung: Maus** die **komplette Kachel/Box ist klickbar** (nicht nur der `[X]`-Buchstabe am Anfang der Zeile), inkl. Hover-State (z. B. Aufhellen der Box-Rahmenfarbe oder invertierter Text)
- Ungültige Tasteneingabe: keine Fehlermeldung, wird einfach ignoriert (kein "Invalid selection"-Text)
- Kein Sysop-Login-Screen, kein "New User"-Dialog nach Intro direkt ins Hauptmenü
- **Statuszeile gewünscht:** unten im Hauptmenü (und ggf. auf Subseiten) eine Zeile im Stil `Connected: 28800 bps | Line: V34 | 28k8.moonweb.org` Details (echte vs. simulierte Uhrzeit, weitere Felder) noch offen, siehe Abschnitt 15
- **Buchstaben-Button-Footer** ("t H E t E M P L E b B S", siehe Referenzscreen 7.2 Punkt 4) wird 1:1 optisch nachgebaut, ist aber **rein dekorativ, ohne Klickfunktion/Easter-Egg**
- **Layout: 2×2-Kachel-Raster** auf Desktop (siehe 14.1), auf Mobile 1 Spalte mit allen 4 Kacheln untereinander (siehe 14.1-Mobile)
- Kein Guestbook, kein Loading-Screen zwischen Seiten (sofortiger Content-Wechsel). Optional/nice-to-have: leicht verzögerter Textaufbau mit kleinem "Stocken" mitten in der Zeile beim ersten Erscheinen einer Box kein Muss, kann später entschieden werden
- Legal Notice ist ein regulärer Menüpunkt im BBS-Stil (nicht nur ein unauffälliger Footer-Link)
### 5.2.1 Globaler Keymap
| Key | Ziel | Bereich |
|---|---|---|
| `B` | Back | global |
| `Q` | Disconnect | global |
| `I` | Legal Notice | global |
| `P` | PHOB!A | PC |
| `T` | Tr@nceMISSION | PC |
| `S` | SkyLINE Productions | PC |
| `K` | Kosmos Design [KDS] | PC |
| `D` | Tropic DREAMs | Atari ST |
| `E` | ESPRIT Releases | Amiga |
| `M` | MOD Files | Amiga |
| `A` | BBS ANSI Art | BBS & FIDO |
| `N` | Fidonets and Nodelists | BBS & FIDO |
**Offen:** Reihenfolge der Kacheln (welche Section oben-links im 2×2-Raster). `M` wurde als globaler Main-Menu-Key verworfen — bei nur 2 Ebenen und immer verfügbarem `[B] Back` ist er nicht nötig, stattdessen `M` für MOD Files (Amiga) reserviert.
### 5.3 Subseiten
- Gleiches Grundlayout: ANSI-Banner-Header + Einleitungstext + Release-Liste + Outbound-Link-Box
- Ausnahme SkyLINE: PNG-Header (Cyan "SKY"/Weiß "LINE" auf Blau-Gradient), zweispaltiges Listen-Layout (siehe 14.2)
- Content-Wechsel behält äußeren Terminal-Rahmen bei
## 6. Design-System
| Element | Vorgabe |
|---|---|
| Grundfarben | Strikt DOS 16-Farben-Palette, Hintergrund konsequent Schwarz |
| Vordergrundfarbe Standard | Grau/Weiß, angelehnt an MS-DOS 6.22 |
| **Verboten** | DOS-Blau als Hintergrund |
| Hauptfarbe gesamte Seite | Dunkelrot/Hellrot (bestätigt durch Original-Screens) |
| SkyLINE-Ausnahme | **Nur innerhalb** der SkyLINE-Subseite: zusätzlich Blau/Hellblau als Akzent (PNG-Header + Rahmen-Akzente), Rest der Seite bleibt sonst konsistent im roten Grundton |
| Box-/Rahmen-Stile | (a) eckige Klammerboxen `[ Titel ]`; (b) runde Divider mit `º`/`°` für große Abschnittsüberschriften |
| Terminal-Effekte | Keine Scanlines, kein Flicker, kein CRT-Curvature |
| Font (ANSI/echte Retro-Art) | Echte CP437/DOS-Font (z. B. "Web 437"/"Perfect DOS VGA 437") |
| Font (Fake-BBS-Fließtext) | IBM Plex Mono o. ä. Monospace |
| Breite | Fix 80 Zeichen breit, vertikal unendlich scrollbar |
| Sound | Ausschließlich der Modem-Connect-Sound in der Intro |
| Barrierefreiheit | Explizit nicht priorisiert |
| Analytics | Keins kein Tracking jeglicher Art |
| Favicon/Social-Preview | **Ja, vollständig umsetzen** Retro-Favicon (z. B. Ausschnitt Temple-BBS-Logo) + Open-Graph-Bild für Link-Previews (Discord/Mastodon/etc.) |
### 6.1 Kachel-Styling-Beschreibung (textuelle Spezifikation, noch nicht visuell umgesetzt)
Die 4 Hauptmenü-Kacheln sollen "stylischer" wirken als reine Einfarb-Boxen, aber ohne die 16-Farben-Grenze zu verlassen. Ansatz: **Dithering-Farbverläufe per ANSI-Blockzeichen**, eine klassische Scene-Technik durch Kombination von Halbraster-Zeichen (`` `` `` ``) mit wechselnder Vorder-/Hintergrundfarbe lässt sich innerhalb der 16-Farben-Palette ein Verlaufseffekt simulieren (z. B. Kachel-Kopfzeile: oben helles Rot auf dunklem Rot mit ``-Zeichen, darunter zunehmend ``→``→`` für einen weichen Übergang zum schwarzen Body). Diese Technik wurde in echten 90er-ANSI-Artworks häufig für Logo-Hintergründe und Balken verwendet und passt damit stilecht. Die konkrete Umsetzung (welche Zeichen, welche Farbpaare pro Kachel) wird erst in der Design-/Umsetzungsphase ausgearbeitet, hier nur als Anforderung dokumentiert.
### 6.2 Box-Interaktion
- Die **gesamte Kachel bzw. gesamte FILE_ID.DIZ-Box** ist eine klickbare Fläche (nicht nur das Shortcut-Zeichen)
- Hover-State erforderlich (visuelle Rückmeldung, z. B. hellere Rahmenfarbe oder Farbinversion), Umsetzungsdetail folgt in der Design-Phase
### 6.3 Content-Sprache
**Die komplette Live-Seite wird auf Englisch verfasst** Menütexte, Einleitungstexte, FILE_ID.DIZ-Beschreibungen, Statusmeldungen, Fehlertexte (falls vorhanden) und so weit rechtlich zulässig auch das Impressum. Dieses PRD-Dokument selbst bleibt als internes Planungsdokument auf Deutsch.
## 7. ANSI-Art-Handling
- Quellmaterial: `.ANS`-Dateien (transkribiert) sowie Foto-Screenshots als aktuelle visuelle Referenz
- Rendering-Strategie: Hybrid (teilweise Live-ANSI-Rendering, größtenteils Fake-BBS-Look mit CP437-Font)
- BBS-ANSI-Art-Galerie: ca. 8 Snippets, untereinander, mit Fake-BBS-Kontexttexten dazwischen
### 7.1 Asset-Intake & Ablage-Konvention
| Kategorie | Beispiel | Ablageort |
|---|---|---|
| Design-Referenz | Fotos/Screenshots Original-BBS | `source-assets/reference/` im Haupt-Repo |
| Enduser-Downloads | `.ans`, Disk-Images, `.mod`-Dateien | `files.moonweb.org` |
Kein ZIP im Repo committen (nur als Transportweg). Kebab-case-Dateinamen mit Herkunfts-Tag.
### 7.2 Bereits gesichtetes Referenzmaterial (Stand 12.08.2026)
1. Hauptmenü-Screen (rot/pink): Blocklogo, "USEFULL INFORMATION"/"SUPPORTED NETS" mit `º...°`-Divider
2. Hauptmenü-Screen (Line-1/Line-2): bestätigt Wortlaut, FidoNet-Adressen, Tagline
3. Tr@nceMISSION-Crack-Intro: ASCII-Blocklogo, Stilvorbild (Inhalt nicht übernehmen)
4. Regular-Nets-Übersicht: `[ Titel ]`-Rahmenmuster, Buchstaben-Button-Footer
5. Pixel-Logo-Variante: Sponsor-Tags, Kandidat für Fidonet-Seite
6. ASCII-Slash-Logo mit `%KDS world headquarter%`-Tag
7. SkyLINE-PNG-Header: Cyan/Weiß auf Blau-Gradient
## 8. Content-Modell (Markdown + Frontmatter)
```yaml
---
title: "Runner"
group: "Tropic DREAMs"
year: 1991
platform: "Atari ST"
credits:
- role: "Idea"
name: "CPK"
- role: "Coding"
name: "Stefan"
description: >
An all-round helper tool including a database, memo, system overview,
and a game.
download_url: "https://files.moonweb.org/atari/tropic-dreams/runner.zip"
screenshot: "https://files.moonweb.org/atari/tropic-dreams/runner_shot1.png"
file_id_diz: |
RUNNER v1.0
by Tropic DREAMs
All-round helper
tool w/ Hangman
game. (~25 chars
per line wrap)
---
```
Content-Sprache in allen Feldern: Englisch (siehe 6.3).
## 9. Sections & Menüpunkte
### PC Section
Hardware: Colani 486 DX-50 / DOS / VGA / Soundblaster AWE32
| Menüpunkt | Key | Status | Ziel |
|---|---|---|---|
| PHOB!A | `P` | Bestehende Subdomain | `moonweb.org/phobia/` |
| Tr@nceMISSION | `T` | Bestehende Subdomain, Releases nachtragen | `moonweb.org/tcm/` |
| SkyLINE Productions | `S` | **Neue Subseite, MVP #1** | FILE_ID.DIZ-Liste + Screenshots + PNG-Header |
| Kosmos Design [KDS] | `K` | **Neue Subseite** | 4 Releases + Fremdproductions integriert |
### Atari ST Section
Hardware: 1040 STFM (1MB) / Mega 4 (4MB, 60MB HDD)
| Menüpunkt | Key | Status |
|---|---|---|
| Tropic DREAMs | `D` | **Neue Subseite**, Inhalte vollständig vorhanden (International Kegeln and Bowling 1990, Runner 1991, Atom Oh No! 1991, TOP Tools 1992) |
### Amiga Section
Hardware: Amiga 500, 1MB, 2 Diskdrives
| Menüpunkt | Key | Status |
|---|---|---|
| ESPRIT Releases | `E` | **Neue Subseite** Content TBD |
| MOD Files | `F` | **Neue Subseite** mit In-Browser-MOD-Player |
### BBS & FIDO Section
Hardware: 486dx2-66 OS/2 Warp 3; PHOBOS 486dx2-66 OS/2-Mailbox
| Menüpunkt | Key | Status |
|---|---|---|
| BBS ANSI Art | `A` | **Neue Subseite** ca. 8 Snippets |
| Fidonets and Nodelists | `N` | **Neue Subseite** Nodelist 2:2480/330 |
## 10. Downloads & Asset-Strategie
Original-Assets werden direkt zum Download angeboten, gehostet auf `files.moonweb.org`. Design-Referenzmaterial separat in `source-assets/reference/`.
## 11. SEO & Crawlability
`/bbs/` und alle Subseiten vollständig vorgerendert. `sitemap.xml`/`robots.txt`. Aussagekräftige `<title>`/`<meta description>` (Englisch) pro Subseite.
## 12. Offene Punkte (TBD)
- [ ] Weitere `.ANS`-Rohdateien ins Repo übernehmen
- [ ] Finale Release-Texte/FILE_ID.DIZ-Inhalte (Englisch) für SkyLINE, Kosmos Design, ESPRIT
- [ ] Technisches Setup von `files.moonweb.org`
- [ ] Foto vom Amiga 500 nachreichen
- [ ] Sponsor-/Affiliation-Tags: welche als Flavor-Text auf der Fidonet-Seite erscheinen
- [ ] Cloudflare Pages Projekt-Setup
- [ ] Fehlende Tr@nceMISSION-Releases nachtragen
- [ ] Referenzbilder gemäß 7.1 ins Repo einpflegen
- [ ] **Keymap-Bestätigung** (Tabelle 5.2.1) und Kachel-Reihenfolge im 2×2-Raster
- [ ] Konkrete Umsetzung der Dithering-Gradient-Kacheln (Abschnitt 6.1) in der Design-Phase
- [ ] Optionaler "Stocken beim Textaufbau"-Effekt: einbauen oder weglassen (nice-to-have, kein Muss)
- [x] Legal Notice-Inhalt (Pflichtangaben) zusammenstellen
## 13. MVP-Reihenfolge (Vorschlag)
1. Grundgerüst: Astro-Projekt, Terminal-Shell-Komponente, Routing `/`, `/bbs/`
2. Modem-Connect-Intro mit Line-1/Line-2-Logik und Sound
3. Hauptmenü `/bbs/` mit 2×2-Kachel-Raster und Buchstaben-Button-Footer
4. **SkyLINE-Subseite** als erste vollständige Content-Subseite (zweispaltiges Listen-Layout)
5. Rollout der übrigen Subseiten nach demselben Template
6. MOD-Player-Integration (Amiga-Section)
7. Deployment-Pipeline (Cloudflare Pages) parallel von Anfang an aktivieren
## 14. Wireframes (ASCII-Scribbles, Layout-Sketches)
**Hinweis:** Grobe Struktur-Skizzen, keine finale ANSI-Kunst. Farbverläufe/Dithering (siehe 6.1) sind hier nur als Kommentar markiert, nicht ausgezeichnet.
### 14.1 Hauptmenü `/bbs/` Desktop: 2×2-Kachel-Raster (je Kachel ~40 Zeichen)
```
================================================================================
|| [ ASCII-LOGO PLATZHALTER: "tHE tEMPLE bBS" Blockschrift-Banner, ||
|| Referenz: source-assets/reference/temple-bbs-mainmenu-red-v1.jpg ] ||
|| DemoBoard - MultiNetServer - no ratios - Augsburg, DE ||
|| FidoNet: 2:2480/330 - 2:2480/331 ||
================================================================================
+--------------------------------------++--------------------------------------+
| PC SECTION || ATARI ST SECTION |
| <- Kachel-Kopf mit Dither-Gradient || <- Kachel-Kopf mit Dither-Gradient |
| (siehe 6.1), Farbe dunkelrot->hellrot || (siehe 6.1), Farbe dunkelrot->hellrot |
| || |
| Colani 486 DX-50 / DOS / VGA / || 1040 STFM (1MB) / Mega 4 (4MB, |
| Soundblaster AWE32 || 60MB HD) |
| || |
| [P] PHOB!A || [D] Tropic DREAMs |
| [T] Tr@nceMISSION || |
| [S] SkyLINE Productions || |
| [K] Kosmos Design [KDS] || |
| || |
| (ganze Kachel klickbar + Hover) || (ganze Kachel klickbar + Hover) |
+--------------------------------------++--------------------------------------+
+--------------------------------------++--------------------------------------+
| AMIGA SECTION || BBS & FIDO SECTION |
| || |
| Amiga 500, 1MB, 2 Diskdrives || 486dx2-66 OS/2 Warp3 / PHOBOS |
| || Mailbox |
| [E] ESPRIT Releases || [A] BBS ANSI Art |
| [F] MOD Files || [N] Fidonets and Nodelists |
| || |
+--------------------------------------++--------------------------------------+
[B] Back [Q] Disconnect [I] Legal Notice
-----------------------------------------------------------------------------
| t | H | E | | t | E | M | P | L | E | | b | B | S | <- rein dekorativ
-----------------------------------------------------------------------------
Status: 28800 bps | Line V34 | 28k8.moonweb.org <- Statuszeile
================================================================================
```
### 14.1-Mobile Hauptmenü Kacheln gestapelt (1 Spalte)
```
================================
|| ASCII-LOGO (verkleinert) ||
================================
+------------------------------+
| PC SECTION |
| Colani 486 DX-50 / DOS / |
| VGA / Soundblaster AWE32 |
| |
| [P] PHOB!A |
| [T] Tr@nceMISSION |
| [S] SkyLINE Productions |
| [K] Kosmos Design [KDS] |
+------------------------------+
+------------------------------+
| ATARI ST SECTION |
| 1040 STFM (1MB) / Mega 4 |
| |
| [D] Tropic DREAMs |
+------------------------------+
+------------------------------+
| AMIGA SECTION |
| Amiga 500, 1MB, 2 Disk |
| |
| [E] ESPRIT Releases |
| [F] MOD Files |
+------------------------------+
+------------------------------+
| BBS & FIDO SECTION |
| 486dx2-66 OS/2 Warp3 |
| |
| [A] BBS ANSI Art |
| [N] Fidonets and Nodelists |
+------------------------------+
[B] Back [Q] Disconnect [I] Legal Notice
Status: 28800 bps | V34
================================
```
### 14.2 SkyLINE-Subseite `/bbs/pc/skyline` Desktop, zweispaltige Liste
```
================================================================================
|| [ PNG-HEADER: skyline-header.png - Cyan "SKY" + Weiss "LINE" auf ||
|| blauem Gradient-Banner, darunter schwarzer Hintergrund ] ||
================================================================================
[B] Back to Main Menu 28k8.moonweb.org/bbs/pc/skyline
--------------------------------------------------------------------------
SkyLINE Productions
Intro text (TBD, English): Application software for the 486, small tools
and subdemos. Most of my own PC releases happened here.
--------------------------------------------------------------------------
+----------------------------------------+ +-------------------------+
| TOOLNAME v1.0 | | [ FILE_ID.DIZ ]--[ 01 ] |
| by SkyLINE Productions | | .-----------------. |
| Year: 199x Platform: DOS/486 | | | TOOLNAME v1.0 | |
| Credits: Coding-Stefan | Gfx-... | | | by SkyLINE Prod.| |
| | | | --------------- | |
| [Screenshot Thumbnail Placeholder] | | | Short descr., | |
| (files.moonweb.org, ca. 240x160) | | | wrapped at ~25 | |
| | | | chars, like the | |
| [D]ownload [S]creenshot [I]nfo | | | original DIZ. | |
| | | '-----------------' |
| (ganze Box klickbar + Hover) | | (~25 Zeichen breit) |
+----------------------------------------+ +-------------------------+
+----------------------------------------+ +-------------------------+
| ... naechstes Release, gleiches Muster, untereinander in der Liste ... |
+----------------------------------------+ +-------------------------+
--------------------------------------------------------------------------
[B] Back [Q] Disconnect
================================================================================
```
### 14.2-Mobile SkyLINE gestapelte Spalten pro Release
```
================================
|| PNG-HEADER (verkleinert) ||
================================
[B] Back
SkyLINE Productions
Intro text (TBD, English)...
+------------------------------+
| TOOLNAME v1.0 |
| by SkyLINE Productions |
| Year: 199x Platform: DOS |
| Credits: Coding-Stefan |
| |
| [Screenshot Placeholder] |
| |
| [D]ownload [S]creenshot |
+------------------------------+
+------------------------------+
| [ FILE_ID.DIZ ]------[ 01 ] |
| .--------------------. |
| | TOOLNAME v1.0 | |
| | by SkyLINE Prod. | |
| | Short descr. text | |
| | wrapped ~25 chars | |
| '--------------------' |
+------------------------------+
... (naechstes Release darunter) ...
[B] Back [Q] Disconnect
================================
```
## 15. Noch offene Detailfragen
- [ ] Reihenfolge der Kacheln im 2×2-Raster (Vorschlag: PC oben-links, Atari oben-rechts, Amiga unten-links, BBS&FIDO unten-rechts zu bestätigen)
- [ ] Keymap-Tabelle 5.2.1: passt so oder andere Wunsch-Buchstaben (historisch aus Original-BBS-Menü)?
- [ ] Statuszeile: exakte Felder (echte vs. simulierte Uhrzeit, weitere Angaben wie "Time online")
- [ ] Optionaler Stocken-Effekt beim Textaufbau: einbauen oder nicht (nice-to-have)
- [x] Legal Notice: Pflichtangaben zusammenstellen (Name, Anschrift, Kontakt rechtlich notwendig)
- [ ] Konkrete Farbpaare/Zeichen für die Dithering-Gradient-Kacheln (Abschnitt 6.1) in der Design-Phase festlegen
---
**Ende PRD v2.0**
+86
View File
@@ -0,0 +1,86 @@
# 28k8.moonweb.org - tHE tEMPLE bBS Retro Hub (v2)
A 90s BBS/demoscene retro hub, built with Astro + React Islands, deployed
on Cloudflare Pages. No backend, no PHP, no database, no tracking.
## v2 highlights
- The colored TEMPLE ANSI banner now actually renders on the main menu.
- Disconnect works correctly (clears state, returns to the intro screen).
- SkyLINE has a visible blue accent + a real generated header image.
- 10 full ASCII banners with color gradients across every page, an 8-item
ANSI-art gallery, and real net-list content from the original screenshots.
- Lots more content: Tropic DREAMs (all 4 real releases), SkyLINE (+3),
Kosmos Design (7, new), ESPRIT (4, new), MOD Files tracklist.
## Start here
1. PRD.md - requirements + v1.4 changelog
2. SPEC.md - technical spec, what changed and why
3. PLAN.md - phase-by-phase remaining work
## Quick start
```
npm install
npm run dev # http://localhost:4321
npm run build # -> dist/
npm run preview # serve the production build locally
```
## Deployment
Cloudflare Pages, connected directly to this repo. Build command
`npm run build`, output directory `dist`.
## WelcomeBanner (Startseite)
Das "THE TEMPLE BBS"-Logo auf der Startseite wird als CP437-Text mit
Typewriter-Animation dargestellt. Der Text kommt aus einer echten
CP437-Datei und wird mit einem IBM-VGA-Webfont gerendert.
### Dateien
| Datei | Zweck |
|---|---|
| `source-assets/welcome.txt` | Original-Datei (CP437-kodiert) |
| `source-assets/welcome-utf8.txt` | UTF-8-Version, wird von Astro eingelesen |
| `src/components/WelcomeBanner.astro` | Komponente (Rendering + Animation) |
| `public/fonts/Px437_IBM_VGA_8x16.woff2` | CP437-Webfont (6.6 KB) |
| `public/fonts/Px437_IBM_VGA_8x16.ttf` | Font als Fallback |
| `src/styles/global.css:2` | `@font-face`-Definition |
### Warum zwei Textdateien?
Node.js unterstützt `cp437` nicht in `TextDecoder`. Die Original-Datei
wird daher per Python in UTF-8 konvertiert und die `.txt`-Datei mit
abgespeichert. Bei Änderungen an `welcome.txt` muss die UTF-8-Version
neu generiert werden:
```bash
python3 -c "
with open('source-assets/welcome.txt','rb') as f: d=f.read()
with open('source-assets/welcome-utf8.txt','w',encoding='utf-8') as f: f.write(d.decode('cp437'))
"
```
### Animation anpassen
In `src/components/WelcomeBanner.astro`, Zeile 24-26:
```javascript
const BASE = 8; // Basis-delay pro Zeichen (ms)
const FAST = 4; // Delay für Leerzeichen (ms)
const HARD_PAUSES: [number, number][] = [[34, 400], [98, 350]];
// [Zeichen-Position, Pause in ms]
```
- **`BASE`/`FAST`** kleiner = schneller
- **`HARD_PAUSES`** = 2 bewusste Pausen mitten in einer Zeile.
Position 34 ≈ Mitte der 1. Zeile, Position 98 ≈ Mitte der 2. Zeile.
Werte an Text anpassen wenn sich die Zeilenlängen ändern.
### Font
`Px437 IBM VGA 8x16` von int10h.org (Oldschool PC Font Pack v2.2,
CC BY-SA 4.0). Enthält 288 Glyphs inkl. aller CP437-Block-Zeichen
(█, ▄, ▀, ▌, ▐, ░, ▒, ▓) und Box-Drawing-Zeichen.
Der Font ist über `--font-ansi` in `global.css` verfügbar und wird
auch von den ANSI-Art-Bannern (`ansiArt.ts`) genutzt.
+37
View File
@@ -0,0 +1,37 @@
# SPEC.md - 28k8.moonweb.org Technical Specification (v2)
## v2 changes (bug fixes + requested improvements)
1. Fixed: ANSI banner not visible - v1 only showed a placeholder <pre> comment.
Now rendered via src/components/AnsiArt.astro + src/lib/ansiArt.ts (precomputed
colored HTML via set:html, zero JS required).
2. Fixed: Disconnect not working - v1's mouse link never cleared localStorage,
so '/' bounced straight back to '/bbs/'. Fixed in src/components/NavBar.astro
via a plain onclick attribute that clears state before navigating.
3. More content: Tropic DREAMs (4 real releases), SkyLINE (+3), Kosmos Design
(7, new collection), ESPRIT (4, new collection), MOD Files tracklist, BBS
ANSI Art gallery (8 filler patterns), PHOB!A/Tr@nceMISSION teaser text.
4. More period ASCII art + gradients: 10 full boxed banners (5x7 bitmap font)
each with a dithering gradient bar, plus 9 net-list boxes transcribed
verbatim from the original reference screenshots (Fidonet/Nodelist page).
5. SkyLINE blue accent strengthened (headings/tiles/diz-box/nav-bar) + a real
generated header PNG (public/images/skyline-header.png).
## Repository layout delta
src/lib/ansiArt.ts, src/components/AnsiArt.astro, src/components/NavBar.astro,
tools/generate_ansi.py, public/images/skyline-header.png, public/favicon.ico,
public/og-image.png, src/content/kosmos-design/*.md, src/content/esprit/*.md
## AnsiArt contract
BANNER_<NAME> / ANSI_GALLERY / BOX_<NAME> exports, HTML with CSS classes
c-border-red, c-main-red, c-shadow-red, c-border-blue, c-main-blue,
c-shadow-blue, c-white, c-grey, c-pink, c-cyan (all in global.css).
Render via <AnsiArt html={BANNER_X} />.
## NavBar contract
optional [B] Back (history.back()), always [Q] Disconnect
(clears localStorage.hasConnected via onclick, then navigates to /),
optional [I] Impressum & Privacy. Use everywhere instead of ad-hoc links.
## Everything else
Routing table, design tokens, local dev workflow (npm run dev/build/preview),
deployment (Cloudflare Pages) - unchanged from v1. See PRD.md and PLAN.md.
+155
View File
@@ -0,0 +1,155 @@
# TODO.md - Offene Aufgaben & Workflow
Stand: 13.08.2026 | Referenz: PLAN.md, SPEC.md, PRD.md
---
## NÄCHSTER SCHRITT: Phase 1 (fertig)
### P1.1 Build-Chain testen
- [x] `npm install` ausgeführt
- [x] `npm run dev` → localhost:4321 funktioniert
- [x] `npm run build` → dist/ mit 12 Seiten erfolgreich
- [x] `npm run preview` → lokaler Production-Server (nächster Schritt)
### P1.2 Modem-Intro Audio
- [x] dial-tone.mp3 besorgen/erstellen → public/audio/
- [x] dtmf-beeps.mp3 besorgen/erstellen → public/audio/
- [x] modem-handshake.mp3 besorgen/erstellen → public/audio/
- [x] ModemIntro.tsx testen (Line 1 = Sound, Line 2 = Direktzugang)
### P1.3 Pre-Build System
- [x] `tools/fetch_mods.py` — MOD-Metadaten von moonweb.org
- [x] `prebuild.sh` — ruft alle Pre-Build Stages auf
- [x] `npm run build` führt automatisch prebuild.sh aus
- [x] `src/data/mods.json` — gecachte MOD-Daten
---
## VOR DEM LIVE-TEST
### Inhalt aufräumen
- [ ] Placeholder-Texte in Content-Dateien entfernen (`[Placeholder/fake content]`, PRD.md-Referenzen)
- [ ] `src/content/skyline/disk-doctor.md`
- [ ] `src/content/skyline/example-tool.md`
- [ ] `src/content/skyline/megademo-93.md`
- [ ] `src/content/skyline/sky-file-manager.md`
- [ ] `src/content/esprit/esprit-utility-music.md`
- [ ] `src/content/esprit/esprit-demomaker-1.md`
- [ ] `src/content/esprit/esprit-utility-copy.md`
- [ ] `src/content/esprit/esprit-demomaker-2.md`
- [ ] `src/content/kosmos-design/kds-intro-1.md`
- [ ] `src/content/kosmos-design/kds-cracktro-pack.md`
- [ ] `src/content/kosmos-design/kds-slideshow.md`
- [ ] `src/content/kosmos-design/kds-musicdisk.md`
- [ ] Placeholder-Hinweise in Seiten-Descriptions entfernen:
- [ ] `src/pages/bbs/pc/skyline.astro` (PRD.md 12)
- [ ] `src/pages/bbs/pc/trancemission.astro` (PRD.md section 12)
- [ ] `src/pages/bbs/pc/kosmos-design.astro` (PRD.md 12)
- [ ] `src/pages/bbs/amiga/esprit.astro` (PRD.md 12)
- [ ] `src/pages/bbs/fido/ansi-art.astro` (PRD.md section 3)
### Asset-Hosting
- [ ] `files.moonweb.org` einrichten (Synology oder Static-Fileserver)
- [ ] Download-Dateien (.zip, .mod) dort ablegen
- [ ] Links in Content-Dateien prüfen/aktualisieren
---
## DANACH: Phase 2 - ANSI-Art
### P2.1 Echte .ans Dateien
- [ ] Original .ans Dateien aus den 90ern besorgen
- [ ] In source-assets/ansi/ ablegen
- [ ] generate_ansi.py anpassen oder neuen Parser schreiben
- [ ] In ansiArt.ts einbinden (Fallback auf generierte Patterns)
### P2.2 CP437 Webfont
- [ ] Passenden CP437/DOS-Font beschaffen (Web 437, Perfect DOS VGA 437)
- [ ] Als WOFF2 unter public/fonts/ ablegen
- [ ] @font-face in global.css korrigieren (aktuell: `src: local('Web 437')` → funktioniert nur wenn Font installiert)
- [ ] Testing: ANSI-Art mit echtem Font rendern
---
## DANACH: Phase 3 - Navigation
### P3.1 Mobile Anchors
- [ ] /bbs/atari/ → /bbs/#atari als Scroll-Ziel
- [ ] /bbs/amiga/ → /bbs/#amiga
- [ ] /bbs/fido/ → /bbs/#fido
- [ ] /bbs/pc/ → /bbs/#pc (falls nötig)
### P3.2 View Transitions
- [ ] Astro View Transitions einbauen
- [ ] Optional: Subtiler Textaufbau-Effekt ("Stottern")
---
## DANACH: Phase 4-5 - Content & Visual
### P4.1 Echte ANSI-Art
- [ ] 8 Filler-Patterns durch echte gescannte/analysierte .ans ersetzen
- [ ] BBS ANSI Art Seite aktualisieren
### P4.2 Echte Releases
- [ ] SkyLINE: placeholder/disk-doctor.md → echte Inhalte
- [ ] SkyLINE: example-tool.md → echte Inhalte
- [ ] Kosmos Design: Prüfen ob alle Credits korrekt sind
- [ ] ESPRIT: Prüfen ob alle Inhalte korrekt sind
- [ ] Tr@nceMISSION: Fehlende Releases nachtragen (PRD.md 12)
### P4.3 Impressum
- [x] Pflichtangaben zusammenstellen (Name, Anschrift, Kontakt)
- [x] legal-notice.astro ausfüllen
- [x] Auf Englisch (PRD.md 6.3)
---
## DANACH: Phase 6 - MOD Player
### P6.1 WASM MOD Player
- [x] chiptune3.js (libopenmpt AudioWorklet) eingebunden
- [x] `tools/fetch_mods.py``src/data/mods.json` (pre-build)
- [x] `ModPlayer.tsx` React-Island mit Playlist
- [x] `prebuild.sh` Orchestrator für alle Pre-Build Stages
- [ ] Echte .mod Dateien auf files.moonweb.org bereitstellen (oder direkt von moonweb.org streamen)
---
## LETZTE PHASE: 7-8 - Infra & Launch
### P7.1 Asset-Hosting
- [ ] files.moonweb.org einrichten (Synology oder Static-Fileserver)
- [ ] Alle Downloads (.ans, .mod, Disk-Images) dort ablegen
- [ ] Links in Content-Dateien aktualisieren
### P7.2 Deployment
- [ ] GitHub-Repo veröffentlichen
- [ ] Cloudflare Pages Projekt anlegen
- [ ] Build-Command: `npm run build`, Output: `dist`
- [ ] DNS-Eintrag für 28k8.moonweb.org prüfen
- [ ] Erstes Live-Deploy
### P7.3 SEO & Finalisierung
- [ ] sitemap.xml generieren
- [ ] robots.txt anlegen
- [ ] <title> und <meta description> pro Seite prüfen
- [ ] Full click-through Regression Test
- [ ] Banner sichtbar auf Hauptmenü?
- [ ] Disconnect → localStorage geleert → Redirect zu /?
- [ ] Alle Keyboard-Shortcuts funktionieren?
- [ ] Mobile Ansicht: Kacheln gestapelt?
---
## EMBEDDED CONTEXT (für neuen Chat)
Wenn du diesen Kontext in einem neuen Chat öffnest:
1. Lies diese Datei als erstes
2. Das NÄCHSTE unmittelbare Ziel steht oben unter "NÄCHSTER SCHRITT"
3. Fertige Phasen sind unten (hier aktuell: Phase 1 + Pre-Launch Checklist)
4. Referenz-Dokumente: PLAN.md (Roadmap), SPEC.md (Tech-Spec), PRD.md (Anforderungen)
5. AGENTS.md hat die Projektstruktur und technischen Details
6. Wenn Phase 1 fertig ist → diese Datei aktualisieren, Phase 1 als done markieren, Phase 2 als nächstes setzen
+3
View File
@@ -0,0 +1,3 @@
import { defineConfig } from 'astro/config';
import react from '@astrojs/react';
export default defineConfig({ site: 'https://28k8.moonweb.org', integrations: [react()], output: 'static', server: { host: '0.0.0.0' }, vite: { server: { allowedHosts: true } } });
+5689
View File
File diff suppressed because it is too large Load Diff
+26
View File
@@ -0,0 +1,26 @@
{
"name": "28k8-moonweb-org",
"version": "0.2.0",
"private": true,
"type": "module",
"scripts": {
"prebuild": "./prebuild.sh",
"dev": "astro dev",
"start": "astro dev",
"build": "./prebuild.sh && astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@astrojs/react": "^3.6.0",
"astro": "^4.15.0",
"chiptune3": "^0.8.7",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"typescript": "^5.5.0"
}
}
Executable
+46
View File
@@ -0,0 +1,46 @@
#!/usr/bin/env bash
# prebuild.sh - Run all prebuild stages before `npm run build`.
#
# Usage:
# ./prebuild.sh # run all stages
# ./prebuild.sh mods # run only the mods fetch
#
# This script is called automatically by `npm run prebuild`.
# Each stage fetches data from external sources and writes JSON
# to src/data/. The JSON is committed to the repo so builds
# don't depend on external servers.
#
# To add a new prebuild stage:
# 1. Create tools/fetch_<name>.py (or .sh)
# 2. Have it write to src/data/<name>.json
# 3. Add a case block below
# 4. The stage will be called on next prebuild.sh run
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
STAGE="${1:-all}"
run_stage() {
local name="$1"
local script="$2"
echo "▶ prebuild: $name"
if [ ! -f "$SCRIPT_DIR/$script" ]; then
echo "$script not found, skipping"
return 0
fi
python3 "$SCRIPT_DIR/$script"
}
echo "=== prebuild.sh: running stages ==="
if [ "$STAGE" = "all" ] || [ "$STAGE" = "mods" ]; then
run_stage "mods" "tools/fetch_mods.py"
fi
# Add new stages here:
# if [ "$STAGE" = "all" ] || [ "$STAGE" = "releases" ]; then
# run_stage "releases" "tools/fetch_releases.py"
# fi
echo "=== prebuild.sh: done ==="
+1
View File
@@ -0,0 +1 @@
Place the three modem intro audio clips here: dial-tone.mp3, dtmf-beeps.mp3, modem-handshake.mp3. Only sound in the project (PRD.md 5.1/6).
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 769 B

Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
Production web images live here. Large downloadable assets belong on files.moonweb.org (PRD.md 10).
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

+124
View File
@@ -0,0 +1,124 @@
/*
chiptune3 (worklet version) - patched for <script> loading
Source: npm chiptune3, only export+import.meta.url changed
*/
const defaultCfg = {
repeatCount: -1,
stereoSeparation: 100,
interpolationFilter: 0,
context: false,
}
class ChiptuneJsPlayer {
constructor(cfg) {
this.config = {...defaultCfg, ...cfg}
if (this.config.context) {
if (!this.config.context.destination) {
throw('ChiptuneJsPlayer: This is not an audio context')
}
this.context = this.config.context
this.destination = false
} else {
this.context = new AudioContext()
this.destination = this.context.destination
}
delete this.config.context
this.gain = this.context.createGain()
this.gain.gain.value = 1
this.handlers = []
this.context.audioWorklet.addModule('/js/chiptune3.worklet.js')
.then(()=>{
this.processNode = new AudioWorkletNode(this.context, 'libopenmpt-processor', {
numberOfInputs: 0,
numberOfOutputs: 1,
outputChannelCount: [2]
})
this.processNode.port.onmessage = this.handleMessage_.bind(this)
this.processNode.port.postMessage({cmd:'config', val:this.config})
this.fireEvent('onInitialized')
this.processNode.connect(this.gain)
if (this.destination) this.gain.connect(this.destination)
})
.catch(e=>console.error(e))
}
handleMessage_(msg) {
switch (msg.data.cmd) {
case 'meta':
this.meta = msg.data.meta
this.duration = msg.data.meta.dur
this.fireEvent('onMetadata', this.meta)
break
case 'pos':
this.currentTime = msg.data.pos
this.order = msg.data.order
this.pattern = msg.data.pattern
this.row = msg.data.row
this.fireEvent('onProgress', msg.data)
break
case 'end':
this.fireEvent('onEnded')
break
case 'err':
this.fireEvent('onError', {type: msg.data.val})
break
case 'fullAudioData':
this.fireEvent('onFullAudioData', msg.data)
break
default:
console.log('Received unknown message',msg.data)
}
}
fireEvent(eventName, response) {
const handlers = this.handlers
if (handlers.length) {
handlers.forEach(function (handler) {
if (handler.eventName === eventName) {
handler.handler(response)
}
})
}
}
addHandler(eventName, handler) { this.handlers.push({eventName: eventName, handler: handler}) }
onInitialized(handler) { this.addHandler('onInitialized', handler) }
onEnded(handler) { this.addHandler('onEnded', handler) }
onError(handler) { this.addHandler('onError', handler) }
onMetadata(handler) { this.addHandler('onMetadata', handler) }
onProgress(handler) { this.addHandler('onProgress', handler) }
onFullAudioData(handler) { this.addHandler('onFullAudioData', handler) }
postMsg(cmd, val) {
if (this.processNode)
this.processNode.port.postMessage({cmd:cmd,val:val})
}
load(url) {
fetch(url)
.then(response => response.arrayBuffer())
.then(arrayBuffer => this.play(arrayBuffer))
.catch(e=>{this.fireEvent('onError', {type: 'Load'})})
}
play(val) { this.postMsg('play', val) }
stop() { this.postMsg('stop') }
pause() { this.postMsg('pause') }
unpause() { this.postMsg('unpause') }
togglePause() { this.postMsg('togglePause') }
setRepeatCount(val) { this.postMsg('repeatCount', val) }
setPitch(val) { this.postMsg('setPitch', val) }
setTempo(val) { this.postMsg('setTempo', val) }
setPos(val) { this.postMsg('setPos', val) }
setOrderRow(o,r) { this.postMsg('setOrderRow', {o:o,r:r}) }
setVol(val) { this.gain.gain.value = val }
selectSubsong(val) { this.postMsg('selectSubsong', val) }
seek(val) { this.setPos(val) }
getCurrentTime() { return this.currentTime }
decodeAll(ab) { this.postMsg('decodeAll', ab) }
}
window.ChiptuneJsPlayer = ChiptuneJsPlayer;
+362
View File
@@ -0,0 +1,362 @@
/*
AudioWorklet: DrSnuggles
*/
import libopenmptPromise from './libopenmpt.worklet.js'
// consts
const OPENMPT_MODULE_RENDER_STEREOSEPARATION_PERCENT = 2
const OPENMPT_MODULE_RENDER_INTERPOLATIONFILTER_LENGTH = 3
// vars
let libopenmpt
// init
libopenmptPromise()
.then(res => {
libopenmpt = res
if (!libopenmpt.stackSave) return
// set libopenmpt version to display later
let stack = libopenmpt.stackSave()
libopenmpt.version = libopenmpt.UTF8ToString(libopenmpt._openmpt_get_string(asciiToStack('library_version')))
libopenmpt.build = libopenmpt.UTF8ToString(libopenmpt._openmpt_get_string(asciiToStack('build')))
libopenmpt.stackRestore(stack)
})
.catch(e => console.error(e))
//
// Helpers
//
function asciiToStack(str) {
const stackStr = libopenmpt.stackAlloc(str.length + 1) // DrS: needed to export in emscripten
writeAsciiToMemory(str, stackStr) // no longer in Emscripten, see below
return stackStr
}
function writeAsciiToMemory(str,buffer,dontAddNull){for(let i=0;i<str.length;++i){libopenmpt.HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)libopenmpt.HEAP8[buffer>>0]=0}
//
// Processor
//
class MPT extends AudioWorkletProcessor {
constructor() {
super()
this.port.onmessage = this.handleMessage_.bind(this)
this.paused = false
this.config = {
repeatCount: -1, // -1 = play endless, 0 = play once, do not repeat
stereoSeparation: 100, // percents
interpolationFilter: 0, // https://lib.openmpt.org/doc/group__openmpt__module__render__param.html
}
this.channels = 0
}
process(inputList, outputList, parameters) {
if (!this.modulePtr || !this.leftPtr || !this.rightPtr || this.paused) return true //silence
const left = outputList[0][0]
const right = outputList[0][1]
const actualFramesPerChunk = libopenmpt._openmpt_module_read_float_stereo(this.modulePtr, sampleRate, left.length, this.leftPtr, this.rightPtr)
if (actualFramesPerChunk == 0) {
//this.paused = true
// modulePtr will be 0 on openmpt: error: openmpt_module_read_float_stereo: ERROR: module * not valid or other openmpt error
const error = !this.modulePtr
if (error) {
this.port.postMessage({cmd:'err',val:'Process'})
} else {
this.port.postMessage({cmd:'end'})
}
return true
}
left.set(libopenmpt.HEAPF32.subarray(this.leftPtr / 4, this.leftPtr / 4 + actualFramesPerChunk))
right.set(libopenmpt.HEAPF32.subarray(this.rightPtr / 4, this.rightPtr / 4 + actualFramesPerChunk))
// post progress
// openmpt_module_get_current_order
let msg = {
cmd: 'pos',
pos: libopenmpt._openmpt_module_get_position_seconds(this.modulePtr),
// pos in song
order: libopenmpt._openmpt_module_get_current_order(this.modulePtr),
pattern: libopenmpt._openmpt_module_get_current_pattern(this.modulePtr),
row: libopenmpt._openmpt_module_get_current_row(this.modulePtr),
// channel volumes
//chVol: [], // ch0Left, ch0Right, ch1Left, ...
}
/*
for (let i = 0; i < this.channels; i++) {
msg.chVol.push( {
left: libopenmpt._openmpt_module_get_current_channel_vu_left(this.modulePtr, i),
right: libopenmpt._openmpt_module_get_current_channel_vu_right(this.modulePtr, i),
})
}
*/
this.port.postMessage( msg )
return true // def. needed for Chrome
}
handleMessage_(msg) {
//console.log('[Processor:Received]',msg.data)
const v = msg.data.val
switch (msg.data.cmd) {
case 'config':
this.config = v
break
case 'play':
this.play(v, false)
break
case 'pause':
this.paused = true
break
case 'unpause':
this.paused = false
break
case 'togglePause':
this.paused = !this.paused
break
case 'stop':
this.stop()
break
case 'meta':
this.meta()
break
case 'repeatCount':
this.config.repeatCount = v
if (!this.modulePtr) return
libopenmpt._openmpt_module_set_repeat_count(this.modulePtr, this.config.repeatCount)
break
case 'setPitch':
if (!libopenmpt.stackSave || !this.modulePtr) return
libopenmpt._openmpt_module_ctl_set(this.modulePtr, asciiToStack('play.pitch_factor'), asciiToStack(v.toString()))
break
case 'setTempo':
if (!libopenmpt.stackSave || !this.modulePtr) return
libopenmpt._openmpt_module_ctl_set(this.modulePtr, asciiToStack('play.tempo_factor'), asciiToStack(v.toString()))
break
case 'selectSubsong':
if (!this.modulePtr) return
libopenmpt._openmpt_module_select_subsong(this.modulePtr, v)
//this.meta()
break
case 'setPos':
if (!this.modulePtr) return
libopenmpt._openmpt_module_set_position_seconds(this.modulePtr, v)
break
case 'setOrderRow':
if (!this.modulePtr) return
libopenmpt._openmpt_module_set_position_order_row(this.modulePtr, v.o, v.r)
break
/*
case 'toggleMute'
// openmpt_module_ext_get_interface(mod_ext, interface_id, interface, interface_size)
// openmpt_module_ext_interface_interactive
// set_channel_mute_status
// https://lib.openmpt.org/doc/group__libopenmpt__ext__c.html#ga0275a35da407cd092232a20d3535c9e4
if (!this.modulePtr) return
//const extPtr = libopenmpt.openmpt_module_ext_get_interface(mod_ext, interface_id, interface, interface_size)
break
*/
case 'decodeAll':
this.decodeAll(v)
break
default:
console.log('Received unknown message',msg.data)
}
} // handleMessage_
decodeAll(buffer) {
this.play(buffer, true)
// now build the full audioData
const left = [], right = []
const maxFramesPerChunk = 128
let actualFramesPerChunk = libopenmpt._openmpt_module_read_float_stereo(this.modulePtr, sampleRate, maxFramesPerChunk, this.leftPtr, this.rightPtr)
while (actualFramesPerChunk != 0) {
left.push( ...libopenmpt.HEAPF32.subarray(this.leftPtr / 4, this.leftPtr / 4 + actualFramesPerChunk) )
right.push( ...libopenmpt.HEAPF32.subarray(this.rightPtr / 4, this.rightPtr / 4 + actualFramesPerChunk) )
actualFramesPerChunk = libopenmpt._openmpt_module_read_float_stereo(this.modulePtr, sampleRate, maxFramesPerChunk, this.leftPtr, this.rightPtr)
}
// post final data
let msg = {
cmd: 'fullAudioData',
meta: this.getMeta(),
data: [left,right]
}
this.port.postMessage( msg )
this.stop()
}
play(buffer, paused = false) {
this.stop()
const maxFramesPerChunk = 128 // thats what worklet is using
const byteArray = new Int8Array(buffer)
const ptrToFile = libopenmpt._malloc(byteArray.byteLength)
libopenmpt.HEAPU8.set(byteArray, ptrToFile)
this.modulePtr = libopenmpt._openmpt_module_create_from_memory(ptrToFile, byteArray.byteLength, 0, 0, 0)
if(this.modulePtr === 0) {
// could not create module
this.port.postMessage({cmd:'err',val:'ptr'})
return
}
if (libopenmpt.stackSave) {
const stack = libopenmpt.stackSave()
libopenmpt._openmpt_module_ctl_set(this.modulePtr, asciiToStack('render.resampler.emulate_amiga'), asciiToStack('1'))
libopenmpt._openmpt_module_ctl_set(this.modulePtr, asciiToStack('render.resampler.emulate_amiga_type'), asciiToStack('a1200'))
//libopenmpt._openmpt_module_ctl_set('play.pitch_factor', e.target.value.toString());
libopenmpt.stackRestore(stack)
}
this.paused = paused
this.leftPtr = libopenmpt._malloc(4 * maxFramesPerChunk) // 4x = float
this.rightPtr = libopenmpt._malloc(4 * maxFramesPerChunk)
// set config options on module
libopenmpt._openmpt_module_set_repeat_count(this.modulePtr, this.config.repeatCount)
libopenmpt._openmpt_module_set_render_param(this.modulePtr, OPENMPT_MODULE_RENDER_STEREOSEPARATION_PERCENT, this.config.stereoSeparation)
libopenmpt._openmpt_module_set_render_param(this.modulePtr, OPENMPT_MODULE_RENDER_INTERPOLATIONFILTER_LENGTH, this.config.interpolationFilter)
// post back tracks metadata
if (!paused) this.meta()
}
stop() {
if (!this.modulePtr) return
if (this.modulePtr != 0) {
libopenmpt._openmpt_module_destroy(this.modulePtr)
this.modulePtr = 0
}
if (this.leftBufferPtr != 0) {
libopenmpt._free(this.leftBufferPtr)
this.leftBufferPtr = 0
}
if (this.rightBufferPtr != 0) {
libopenmpt._free(this.rightBufferPtr)
this.rightBufferPtr = 0
}
this.channels = 0
}
meta() {
this.port.postMessage({cmd: 'meta', meta: this.getMeta()})
}
getSong() {
if (!libopenmpt.UTF8ToString || !this.modulePtr) return false
// https://lib.openmpt.org/doc/
let song = {
channels: [],
instruments: [],
samples: [],
orders: [],
numSubsongs: libopenmpt._openmpt_module_get_num_subsongs(this.modulePtr),
patterns: [],
}
// channels
const chNum = libopenmpt._openmpt_module_get_num_channels(this.modulePtr)
this.channel = chNum
for (let i = 0; i < chNum; i++) {
song.channels.push( libopenmpt.UTF8ToString(libopenmpt._openmpt_module_get_channel_name(this.modulePtr, i)) )
}
// instruments
for (let i = 0, e = libopenmpt._openmpt_module_get_num_instruments(this.modulePtr); i < e; i++) {
song.instruments.push( libopenmpt.UTF8ToString(libopenmpt._openmpt_module_get_instrument_name(this.modulePtr, i)) )
}
// samples
for (let i = 0, e = libopenmpt._openmpt_module_get_num_samples(this.modulePtr); i < e; i++) {
song.samples.push( libopenmpt.UTF8ToString(libopenmpt._openmpt_module_get_sample_name(this.modulePtr, i)) )
}
// orders
for (let i = 0, e = libopenmpt._openmpt_module_get_num_orders(this.modulePtr); i < e; i++) {
song.orders.push( {
name: libopenmpt.UTF8ToString(libopenmpt._openmpt_module_get_order_name(this.modulePtr, i)),
pat: libopenmpt._openmpt_module_get_order_pattern(this.modulePtr, i),
})
}
// patterns
for (let patIdx = 0, patNum = libopenmpt._openmpt_module_get_num_patterns(this.modulePtr); patIdx < patNum; patIdx++) {
const pattern = {
name: libopenmpt.UTF8ToString(libopenmpt._openmpt_module_get_pattern_name(this.modulePtr, patIdx)),
rows: [],
}
// rows
for(let rowIdx = 0, rowNum = libopenmpt._openmpt_module_get_pattern_num_rows(this.modulePtr, patIdx); rowIdx < rowNum; rowIdx++) {
const row = []
// channels
for (let chIdx = 0; chIdx < chNum; chIdx++) {
const channel = []
for (let comIdx = 0; comIdx < 6; comIdx++) {
/* commands
OPENMPT_MODULE_COMMAND_NOTE = 0
OPENMPT_MODULE_COMMAND_INSTRUMENT = 1
OPENMPT_MODULE_COMMAND_VOLUMEEFFECT = 2
OPENMPT_MODULE_COMMAND_EFFECT = 3
OPENMPT_MODULE_COMMAND_VOLUME = 4
OPENMPT_MODULE_COMMAND_PARAMETER = 5
*/
channel.push( libopenmpt._openmpt_module_get_pattern_row_channel_command(this.modulePtr, patIdx, rowIdx, chIdx, comIdx) )
}
row.push( channel )
}
pattern.rows.push( row )
}
song.patterns.push( pattern )
}
return song
}
getMeta() {
if (!libopenmpt.UTF8ToString || !this.modulePtr) return false
const data = {}
data.dur = libopenmpt._openmpt_module_get_duration_seconds(this.modulePtr)
if (data.dur == 0) {
// looks like an error occured reading the mod
this.port.postMessage({cmd:'err',val:'dur'})
}
const keys = libopenmpt.UTF8ToString(libopenmpt._openmpt_module_get_metadata_keys(this.modulePtr)).split(';')
for (let i = 0; i < keys.length; i++) {
const keyNameBuffer = libopenmpt._malloc(keys[i].length + 1)
writeAsciiToMemory(keys[i], keyNameBuffer)
data[keys[i]] = libopenmpt.UTF8ToString(libopenmpt._openmpt_module_get_metadata(this.modulePtr, keyNameBuffer))
libopenmpt._free(keyNameBuffer)
}
data.song = this.getSong()
data.totalOrders = data.song.orders.length // libopenmpt._openmpt_module_get_num_orders(this.modulePtr)
data.totalPatterns = data.song.patterns.length// libopenmpt._openmpt_module_get_num_patterns(this.modulePtr)
data.songs = this.getSongs()
data.libopenmptVersion = libopenmpt.version
data.libopenmptBuild = libopenmpt.build
return data
}
getSongs() {
if (!libopenmpt.UTF8ToString) return '' // todo: ?? why string here
const subsongs = libopenmpt._openmpt_module_get_num_subsongs(this.modulePtr)
const names = []
for (let i = 0; i < subsongs; i++) {
const namePtr = libopenmpt._openmpt_module_get_subsong_name(this.modulePtr, i)
const name = libopenmpt.UTF8ToString(namePtr)
if(name != "") {
names.push(name)
} else {
names.push("Subsong " + (i + 1))
}
libopenmpt._openmpt_free_string(namePtr)
}
return names
}
}
registerProcessor('libopenmpt-processor', MPT)
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+16
View File
@@ -0,0 +1,16 @@
[?7hммммммммммммммм
ммммммлллллллллллллллллллллллллллллллллмммммм
ммлллВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВВлппллллмм
лВппВВБББББББББББББББББББББББББББББББББББББББББоААнВВВВВл
лоААнААААААААммммАААААммммАААААммммАААААммммАААлББнБББББл
лоББн ллллмм  ллллмм  ллллмм  ллллмм оВВлммммАл
лоВВнолппппллнолппппллнолппппллнолппппллнолппппллнл
лолл мм олл лВВнолл лВВнолл лВВноллпппппнолл лВВнл
л ллллмлБАноллмБВлл оллмБВлл оллмБВлл оллмБВллмоллмБВлл л
лм лллВБАл плллллнм плллллнм плллллн плллллллнплллллн л
л ппппппппполлм плллоллм плллпппппп пппп л
ппппппппппппппл олллллВБнолллллВБн лппппппппппппппппп
ўњOњўњUњўњTњў пм пллВБАл пллВБАл лўњOњўњFњў [mJ]
ммммммммммммммммммлмм пппп мммм ппп млммммммммммммммммммммм
оўњtњўњHњўњEњў ўњtњўњEњўњMњўњPњўњLњўњEњў ўњbњўњBњўњSњўн
ппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп
File diff suppressed because one or more lines are too long
+8
View File
@@ -0,0 +1,8 @@
[?7h°±²°±²°±² °±² °±² °±² °±² °±² °±² °±² °±² °±²°±²°
°±²°±² °±² °±² °±² °±² °±² °±²° °±² °±²
°±²°±²°±² °±²°±² °±²°±²°±² °±² °±² °±²°±²°±² °±²°±²
ÚÄÄÄÄÄÄÄÄ¿°±² °±² °±²°±² °±² °±² °±² ²°±² °±²
³úúúúúúúú³±²°±²°±² °±² °±²°±² °±²°±² °±² °±² °±² °±²°±²°ÚÄÄÄÄÄÄÄÄÄÄÄ¿³úúúúúúúú³ÚÄÄÄÄÄÄÄÄ¿³úúúúúúúúúúú³³úúúúúúúú³ÚÄÄÄÄÄ¿³úúúúúúúúÃÄÄÄÄÄ¿³úúúúúúúúúúú³³úúúúúúúúÃÄÄÄÄÄÄÄÄ´úúúúú³³úúúúúúúú³úúúúú³ ÚÄÄÄÄÄÄÄÄÄ¿³úúúúúúúúúúú³³úúúúúúúú³úúúúúúúú³úúúúú³ ÚÄÄÄÄ´úúúúúúúú³úúúúú³ ³úúúúúúúúúÃÄÄÄÄÄÄ´úúúúúúúúúúú³³úúúúúúúú³úúúúúúúú³úúúúúÃÄÄ´úúúú³úúúúúúúú³úúúúúÃÄÄ´úúúúúúúúú³úúúúúú³úúúúúúúúúúú³³³³³ ³ ³³³ ³³³³
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿³FILES³DATABASE³ MISCELLANEOUS ³ SYSOP OPTIONS ³ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´³(C)hange file area ³(M)essage system ³(T)ime on system ³(&) Add Filedesc. ³³(F)ile descriptions³(Q)uestionnaire ³(O)perator chat ³(*) Read Sysoplog ³³(P)rogram directory³³(A)nsi color on/off³(S)earch for File ³³(Z)ippy file scan ³(V)iew bulletins ³(X)pert mode toggle³(L)og Drive³³(D)ownload file(s) ³³(H)elp with BBS ³(+) Trap Doors³³(U)pload file(s) ³(K)nown caller log³(G)oodbye log off ³(E)cho Mail³ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

+50
View File
@@ -0,0 +1,50 @@
[?7hロ ロ ロ゚゚゚゚ロ゚゚゚゚ ロワ ワロ ロ゚゚゚ワ ロロ゚゚゚゚ロ゚゚゚ワ ワ゚゚゚ワ
ロ イ イ イロ イイ ゚ イ イ ロ イイロイ イ イ
゚ア゚ ア ゚ ア ア ゚゚゚ア゚ ア ゚゚ ア ア ア ゚゚ アア ゚゚アワ゚゚ワ ア ゚ワ ゚゚゚ワ
ー ー ー ーー ーー ー ーーーーワ ー ー ー ワ ー
゚ ゚ ゚ ゚゚゚゚゚゚ ゚゚゚゚゚ ゚ ゚ ゚゚゚゚゚゚ ゚゚゚゚゚ ゚ ゚゚ ゚゚゚゚ ゚゚゚
MULTI-NET-SERVER AUGSBURG - ONLINE: 2.00 - 5.30 - MAILONLY
レトト[ Regular Nets ]トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウTelefonNet......49:821/416484FidoNet............2:2480/330ウ
タトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル
レトト[ Fido Clone Nets ]トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウXcessNet.........213:315/8630NightNet......1000:10499/3033ウ
タトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル
レトト[ Nets with single Topics ]トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウKingsNet.........900:4990/115Sysopnet.........129:1492/130ウ
ウSF-net............142:106/830Ravenet...........303:498/330ウ
ウGernet.............21:496/330MedNet...........80:4091/9177ウ
ウMediaNet..........24:2510/220PressNet.........193:2490/120ウ
タトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル
レトト[ Special Nets ]トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウ999er-MBG............999:2/56BavariaNet.........95:106/113ウ
タトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル
レトト[ Chat Nets ]トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウUP-Net............??:498/soonTacoNet............31:4990/22ウ
ウPseudoNet...........33:104/20FFNet..............60:666/330ウ
ウPhantasy Net.....202:498/3030BierNet............44:510/230ウ
タトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル
レトト[ Demo Nets ]トトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトソ
ウAquaNet...........139:5050/41Scene-Net..........99:200/530ウ
タトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトトル
レトトトソレトトトソレトトトソ レトトトソレトトトソレトトトソレトトトソレトトトソレトトトソ レトトトソレトトトソレトトトソ
ウ t ウウ H ウウ E ウ ウ t ウウ E ウウ M ウウ P ウウ L ウウ E ウ ウ b ウウ B ウウ S ウ
タトトトルタトトトルタトトトル タトトトルタトトトルタトトトルタトトトルタトトトルタトトトル タトトトルタトトトルタトトトル
THE DEMOBOARD IN AUGSBURG - FREQ FILES - FREE POINTS AND DOWNLINKS

+25
View File
@@ -0,0 +1,25 @@
[?7hÜÜÜþ
þÛÛÛÛÛßúßÛÛÛ²ÛÛ
ÛÛÛÛÛÛÛ² ÛÛÛþþßÛÛ þÜÛÛÛ² ÛÛÛÛÛÛÛÛþ
ÛÛ ÛÛÛÛÛÛ ÛÛÛú ÛÛÛÜ ÛÛÛ úÛÛÛ ÛÛÛ úÛÛ ÛÛÛÛÛ² ÛÛÛú
ÛÛÛ²ÛÛ úßÛÛ ÛÛ² ÛÛÛ ÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛÛ úßÛÛ
tHE ÛÛÛÛÛÛÛÛÛ ÛÛÛ ÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛÛ
ÛÛÛú ÛÛÛÛÛÛ ÛÛ² ÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛ
ÛÛÛÛÛ²ÛÜÜþÛÛÛú þßÛÛÛ ÛÛÛ ßþÛÛÛ ÛÛÛÛÛÛÛÜÜþ
ÛÛÛú ÛÛÛ ßÛúÛÛÛÛÛÛ ÛÛÛúÛÛ²ÛÛÛ ßÛú bBS
ÛÛÛÛÛÛÛÛÛÛÛÛú ÛÛÛÛÛÛú ÛÛÛ
Û ÛÛ²úÛÛÛ þÛ ÛÛÛÛÛÛ ÛÛ²ÛÛÛ þÛ ²ÛÛÛ þÛ
þÛÛÛÛúÛÛÛß úÛþÛþÛþ²ÛÛÛßÛÛÛß[mJ]
ï^` ï^` o¢“•oo¢“•oo¢“•oo¢“•oo¢“•oo¢“•oo¢“•oo¢“•oo¢“•oo¢“•o ï^` ï^`
§ø§ t H E t E M P L E b B S §ø§
§ø§line1§ø§+49÷821÷2191÷038§ø§v34+§øøø§line2§ø§+49÷821÷2191÷036§ø§isdn§ø§
§ø§stoned÷brain÷records÷memberboard§ø§szenenet÷2nd÷hq§ø§
§ø§net-server÷host÷bayern§ø§scenenet§ø§comanet§ø§oanet§ø§8bitnet§ø§
§ø§expression÷distsite§ø§aironline÷supportsite§ø§
§ø§freq÷netinfo§ø§
ï^` ï^` u£–—uu£–—uu£–—uu£–—uu£–—uu£–—uu£–—uu£–—uu£–—uu£–—u ï^` ï^`
+8
View File
@@ -0,0 +1,8 @@
▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄ ▄▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄▄
THE █████ ▄███ ████▀▄▀█ █████ █ ████ █████ BBS
█████ █████ ████ █ █████ █ ████ █████
█████ █████▀ ████ █ █████▀ ████ █████▀
█████ █████ ████ █ █████ ████ ▀████
█████ █████▄ ████ █ █████ █████▄ ▀██▄
t H E t E M P L E b B S
+7
View File
@@ -0,0 +1,7 @@
ワワワワワワワワワワワ ワワワ ワワワ ワ ワワワワワワ ワワワワ ワワワワワワ
THE ロロロロロ ワロロロ ロロロロ゚ワ゚ロ ロロロロロ ロ ロロロロ ロロロロロ BBS
ロロロロロ ロロロロロ ロロロロ ロ ロロロロロ ロ ロロロロ ロロロロロ
ロロロロロ ロロロロロ゚ ロロロロ ロ ロロロロロ゚ ロロロロ ロロロロロ゚
ロロロロロ ロロロロロ ロロロロ ロ ロロロロロ ロロロロ ゚ロロロロ
ロロロロロ ロロロロロワ ロロロロ ロ ロロロロロ ロロロロロワ ゚ロロワ
+5
View File
@@ -0,0 +1,5 @@
---
export interface Props { html: string; }
const { html } = Astro.props;
---
<Fragment set:html={html} />
+8
View File
@@ -0,0 +1,8 @@
---
const letters = ['t', 'H', 'E', ' ', 't', 'E', 'M', 'P', 'L', 'E', ' ', 'b', 'B', 'S'];
---
<div class="letter-footer" aria-hidden="true">
{letters.map((l) => l === ' ' ? <span class="letter-space">{'\u00A0'}</span> : <span>{l}</span>)}
<a href="/" onclick="localStorage.removeItem('hasConnected');">[Q] Disconnect</a>
<a href="/bbs/legal-notice">[I] Legal Notice</a>
</div>
+142
View File
@@ -0,0 +1,142 @@
import { useState, useRef, useCallback } from 'react';
export interface ModEntry {
name: string;
title: string;
size_human: string;
channels: number;
sample_count: number;
modified: string;
url: string;
}
declare global {
interface Window {
ChiptuneJsPlayer: any;
}
}
function loadScript(src: string): Promise<void> {
return new Promise((resolve, reject) => {
if (document.querySelector(`script[src="${src}"]`)) { resolve(); return; }
const s = document.createElement('script');
s.src = src;
s.onload = () => resolve();
s.onerror = () => reject(new Error(`Failed to load ${src}`));
document.head.appendChild(s);
});
}
async function getPlayer(): Promise<any> {
await loadScript('/js/chiptune3.js');
return new Promise<any>((resolve) => {
const p = new window.ChiptuneJsPlayer({ repeatCount: 0 });
p.onInitialized(() => resolve(p));
});
}
export default function ModPlayer({ mods }: { mods: ModEntry[] }) {
const [currentIdx, setCurrentIdx] = useState(-1);
const [playing, setPlaying] = useState(false);
const [ready, setReady] = useState(false);
const playerRef = useRef<any>(null);
const loadingRef = useRef(false);
const ensurePlayer = useCallback(async () => {
if (playerRef.current) return playerRef.current;
if (loadingRef.current) return null;
loadingRef.current = true;
try {
const p = await getPlayer();
p.onEnded(() => {
setCurrentIdx((prev) => {
const next = prev + 1;
if (next < mods.length) {
p.setRepeatCount(0);
p.load(mods[next].url);
return next;
}
setPlaying(false);
return -1;
});
});
playerRef.current = p;
setReady(true);
return p;
} catch (e) {
console.error('MOD player init failed:', e);
loadingRef.current = false;
return null;
}
}, [mods]);
const playIdx = useCallback(async (idx: number) => {
if (idx < 0 || idx >= mods.length) return;
const p = await ensurePlayer();
if (!p) return;
p.setRepeatCount(0);
p.load(mods[idx].url);
setCurrentIdx(idx);
setPlaying(true);
}, [mods, ensurePlayer]);
async function togglePlay(idx: number) {
const p = playerRef.current;
if (currentIdx === idx && playing) {
p?.pause();
setPlaying(false);
} else if (currentIdx === idx && !playing) {
p?.unpause();
setPlaying(true);
} else {
playIdx(idx);
}
}
function prev() {
if (currentIdx > 0) playIdx(currentIdx - 1);
}
function next() {
if (currentIdx < mods.length - 1) playIdx(currentIdx + 1);
}
const current = currentIdx >= 0 ? mods[currentIdx] : null;
return (
<div className="mod-player">
<div className="mod-player-nowplaying">
<span className="mod-player-label">NOW PLAYING:</span>{' '}
{current
? <span className="mod-player-track">{current.title} <span className="mod-player-file">({current.name})</span></span>
: <span className="mod-player-idle">-- nothing selected --</span>
}
<span className="mod-player-controls">
<button onClick={prev} disabled={currentIdx <= 0} className="mod-btn" title="Previous">|&lt;&lt;</button>
<button onClick={() => currentIdx >= 0 ? togglePlay(currentIdx) : playIdx(0)} className="mod-btn mod-btn-play" title={playing ? 'Pause' : 'Play'}>
{playing ? '⏸' : '▶'}
</button>
<button onClick={next} disabled={currentIdx >= mods.length - 1} className="mod-btn" title="Next">&gt;&gt;|</button>
</span>
</div>
<table className="mod-list">
<tbody>
{mods.map((m, i) => (
<tr key={m.name} className={currentIdx === i ? 'mod-active' : ''}>
<td className="mod-col-play">
<button onClick={() => togglePlay(i)} className="mod-btn-inline" title={currentIdx === i && playing ? 'Pause' : 'Play'}>
{currentIdx === i && playing ? '⏸' : '▶'}
</button>
</td>
<td className="mod-col-file">[F] {m.name}</td>
<td className="mod-col-title">{m.title}</td>
<td className="mod-col-ch">{m.channels}ch</td>
<td className="mod-col-size">{m.size_human}</td>
<td><a href={m.url}>[D]ownload</a></td>
</tr>
))}
</tbody>
</table>
</div>
);
}
+22
View File
@@ -0,0 +1,22 @@
import { useState } from 'react';
import { playLine1Sequence, markConnected } from '../lib/sound';
type DialState = 'idle' | 'dialing';
export default function ModemIntro() {
const [state, setState] = useState<DialState>('idle');
function selectLine(line: 1 | 2) {
if (line === 2) { markConnected(); window.location.href = '/bbs/'; return; }
setState('dialing');
playLine1Sequence(() => { markConnected(); window.location.href = '/bbs/'; });
}
return (
<div className="ansi-text welcome-modem" role="region" aria-label="Modem connect intro">
<pre style={{ textAlign: 'center' }}>{`+------------------------------------------+
| 28k8 [MODEM] ATDT +49-821-2191-038 |
+------------------------------------------+`}</pre>
{state === 'idle' && (
<pre style={{ textAlign: 'center' }}><a href="#" onClick={(e) => { e.preventDefault(); selectLine(1); }}>{`> Line 1: +49-821-2191-038 [VFC V34] 28800 <`}</a>{'\n\n'}<a href="#" onClick={(e) => { e.preventDefault(); selectLine(2); }}>{`> Line 2: +49-821-2191-036 [X75] 64000 <`}</a></pre>
)}
{state === 'dialing' && <p style={{ textAlign: 'center' }}>Dialing... please wait.</p>}
</div>
);
}
+7
View File
@@ -0,0 +1,7 @@
---
export interface Props { showBack?: boolean; }
const { showBack = true } = Astro.props;
---
<div class="nav-bar">
{showBack && <a href="#" onclick="event.preventDefault(); history.back();">[B] Back</a>}
</div>
+5
View File
@@ -0,0 +1,5 @@
---
const now = new Date();
const dateStr = `${String(now.getDate()).padStart(2, '0')}.${String(now.getMonth() + 1).padStart(2, '0')}.1994`;
---
<div class="status-bar" style="display: flex; justify-content: space-between;"><span>Status: 28800 bps | Line: V34 | 28k8.moonweb.org</span><span>{dateStr}</span></div>
+18
View File
@@ -0,0 +1,18 @@
import { useEffect } from 'react';
import { findKeyEntry } from '../lib/keymap';
import { resetConnected } from '../lib/sound';
export default function TerminalShell({ children }: { children?: React.ReactNode }) {
useEffect(() => {
function onKeyDown(e: KeyboardEvent) {
if (e.metaKey || e.ctrlKey || e.altKey) return;
const entry = findKeyEntry(e.key);
if (!entry) return;
if (entry.href === 'back') { window.history.back(); return; }
if (entry.href === 'disconnect') { resetConnected(); window.location.href = '/'; return; }
window.location.href = entry.href;
}
window.addEventListener('keydown', onKeyDown);
return () => window.removeEventListener('keydown', onKeyDown);
}, []);
return <>{children}</>;
}
+27
View File
@@ -0,0 +1,27 @@
---
interface Props {
title: string;
content: string;
}
const { title, content } = Astro.props;
const id = `overlay-${title.toLowerCase().replace(/[^a-z0-9]/gi, '-')}`;
---
<button class="text-overlay-btn" data-overlay={id}>
{title}
</button>
<style>
.text-overlay-btn {
background: none;
border: 1px solid var(--red-dark);
color: var(--fg);
font-family: var(--font-ansi);
padding: 0.25rem 0.6rem;
cursor: pointer;
font-size: inherit;
display: inline;
}
.text-overlay-btn:hover {
border-color: var(--red-bright);
color: var(--red-bright);
}
</style>
+125
View File
@@ -0,0 +1,125 @@
---
interface OverlayEntry {
id: string;
title: string;
content: string;
}
interface Props {
overlays: OverlayEntry[];
}
const { overlays } = Astro.props;
const data = JSON.stringify(overlays);
---
<script define:vars={{ data }}>
window.__textOverlays = JSON.parse(data);
</script>
<script>
function initOverlays() {
document.querySelectorAll('.text-overlay-btn').forEach((btn) => {
btn.addEventListener('click', () => {
const id = btn.getAttribute('data-overlay');
let dialog = document.getElementById(id) as HTMLDialogElement;
if (!dialog) {
const entry = window.__textOverlays.find((o) => o.id === id);
if (!entry) return;
dialog = document.createElement('dialog');
dialog.className = 'text-overlay';
dialog.id = id;
const titleHtml = document.createElement('span');
titleHtml.textContent = entry.title;
const contentPre = document.createElement('pre');
contentPre.className = 'text-overlay-content';
contentPre.textContent = entry.content;
const headerDiv = document.createElement('div');
headerDiv.className = 'text-overlay-header';
headerDiv.appendChild(titleHtml);
const closeBtn = document.createElement('button');
closeBtn.className = 'text-overlay-close';
closeBtn.textContent = '[X]';
headerDiv.appendChild(closeBtn);
const innerDiv = document.createElement('div');
innerDiv.className = 'text-overlay-inner';
innerDiv.appendChild(headerDiv);
innerDiv.appendChild(contentPre);
dialog.appendChild(innerDiv);
document.body.appendChild(dialog);
closeBtn.addEventListener('click', () => dialog.close());
dialog.addEventListener('click', (e) => {
if (e.target === dialog) dialog.close();
});
}
dialog.showModal();
});
});
}
initOverlays();
document.addEventListener('astro:page-load', initOverlays);
</script>
<style is:global>
.text-overlay {
background: #000;
color: #ffb000;
border: 2px solid var(--red-dark);
padding: 0;
max-width: 90vw;
height: 80vh;
width: 80ch;
overflow: hidden;
}
.text-overlay::backdrop {
background: rgba(0, 0, 0, 0.85);
}
.text-overlay-inner {
display: flex;
flex-direction: column;
height: 100%;
}
.text-overlay-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.5rem 0.75rem;
border-bottom: 1px solid var(--red-dark);
font-family: var(--font-ansi);
color: var(--red-bright);
flex-shrink: 0;
}
.text-overlay-close {
background: none;
border: none;
color: var(--red-bright);
font-family: var(--font-ansi);
cursor: pointer;
padding: 0;
font-size: inherit;
}
.text-overlay-close:hover {
color: #fff;
}
.text-overlay-content {
margin: 0;
padding: 0.75rem;
font-family: var(--font-ansi);
font-size: 14px;
line-height: 1.15;
overflow-y: auto;
white-space: pre;
color: #ffb000;
flex: 1;
scrollbar-width: thin;
scrollbar-color: var(--red-dark) #000;
}
.text-overlay-content::-webkit-scrollbar {
width: 8px;
}
.text-overlay-content::-webkit-scrollbar-track {
background: #000;
}
.text-overlay-content::-webkit-scrollbar-thumb {
background: var(--red-dark);
border-radius: 0;
}
.text-overlay-content::-webkit-scrollbar-thumb:hover {
background: var(--red-bright);
}
</style>
+19
View File
@@ -0,0 +1,19 @@
---
export interface MenuItem { key: string; label: string; href: string; }
export interface Section { title: string; hardware: string; items: MenuItem[]; }
export interface Props { sections: Section[]; }
const { sections } = Astro.props;
---
<div>
{sections.map((section, i) => (
<div class="tile-section">
<h3>{section.title}</h3>
<p>{section.hardware}</p>
<ul style="list-style:none; padding:0; margin:0;">
{section.items.map((item) => (
<li><a class="tile" href={item.href} title={item.label} aria-label={`[${item.key}] ${item.label}`}>[{item.key}] {item.label}</a></li>
))}
</ul>
</div>
))}
</div>
+80
View File
@@ -0,0 +1,80 @@
---
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
const raw = readFileSync(join(process.cwd(), 'source-assets/welcome-utf8.txt'), 'utf-8');
const text = raw.replace(/\r\n/g, '\n').trimEnd();
const escaped = text
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
---
<pre class="welcome-banner" id="welcome-banner" aria-hidden="true">{escaped}</pre>
<script>
(function () {
const el = document.getElementById('welcome-banner');
if (!el) return;
const full = el.textContent || '';
el.textContent = '';
let i = 0;
const BASE = 8;
const FAST = 4;
const HARD_PAUSES: [number, number][] = [[34, 400], [98, 350]];
function tick() {
if (i >= full.length) {
el.removeAttribute('aria-hidden');
return;
}
const ch = full[i];
el.textContent += ch;
i++;
let delay = FAST;
const hp = HARD_PAUSES.find(p => p[0] === i);
if (hp) {
delay = hp[1];
} else if (ch === '\n') {
delay = BASE * 4;
} else {
delay = BASE + Math.random() * 6;
}
setTimeout(tick, delay);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => setTimeout(tick, 300));
} else {
setTimeout(tick, 300);
}
})();
</script>
<style>
.welcome-banner {
font-family: var(--font-ansi);
color: var(--red-bright);
text-align: left;
width: 500px;
margin: 50px auto 0.5rem;
line-height: 1.1;
font-size: clamp(0.6rem, 1.5vw, 0.85rem);
letter-spacing: 0;
white-space: pre;
overflow: hidden;
min-height: 9.5em;
}
.welcome-banner::after {
content: '\2588';
animation: blink 1s step-end infinite;
color: var(--red-bright);
}
@keyframes blink {
50% { opacity: 0; }
}
</style>
+12
View File
@@ -0,0 +1,12 @@
import { defineCollection, z } from 'astro:content';
const releaseSchema = z.object({
title: z.string(), group: z.string(), year: z.number().int().optional(), platform: z.string(),
credits: z.array(z.object({ role: z.string(), name: z.string() })).default([]),
description: z.string(), download_url: z.string().url().optional(), screenshot: z.string().optional(),
file_id_diz: z.string(),
});
const skyline = defineCollection({ type: 'content', schema: releaseSchema });
const kosmosDesign = defineCollection({ type: 'content', schema: releaseSchema });
const tropicdreams = defineCollection({ type: 'content', schema: releaseSchema });
const esprit = defineCollection({ type: 'content', schema: releaseSchema });
export const collections = { skyline, 'kosmos-design': kosmosDesign, tropicdreams, esprit };
+17
View File
@@ -0,0 +1,17 @@
---
title: "Arcade Demo"
group: "ESPRIT"
year: 1992
platform: "Amiga 500"
credits:
- role: "Code"
name: "Stefan"
description: >
Arcade-style demo with sprite animations and raster effects.
screenshot: "/images/esprit/ArcadeDemo.png"
file_id_diz: |
ARCADE DEMO
------------------
Sprite animations +
raster effects.
---
+17
View File
@@ -0,0 +1,17 @@
---
title: "ASC Demo"
group: "ESPRIT"
year: 1991
platform: "Amiga 500"
credits:
- role: "Code"
name: "Stefan"
description: >
ASC (Amiga Scroller Construction) demo with sine-wave text movement.
screenshot: "/images/esprit/AscDemo.png"
file_id_diz: |
ASC DEMO
------------------
Amiga Scroller
Construction demo.
---
+17
View File
@@ -0,0 +1,17 @@
---
title: "Blue Field Demo"
group: "ESPRIT"
year: 1991
platform: "Amiga 500"
credits:
- role: "Code"
name: "Stefan"
description: >
Classic blue field star effect demo with scrolling text.
screenshot: "/images/esprit/BlueFieldDemo.png"
file_id_diz: |
BLUE FIELD DEMO
------------------
Blue field star
effect + scroller.
---
+17
View File
@@ -0,0 +1,17 @@
---
title: "ESPRIT Intro"
group: "ESPRIT"
year: 1993
platform: "Amiga 500"
credits:
- role: "Code"
name: "Stefan"
description: >
Group intro with logo animation and MOD music soundtrack.
screenshot: "/images/esprit/EspritDemo.png"
file_id_diz: |
ESPRIT INTRO
------------------
Group intro with
logo + MOD music.
---
+17
View File
@@ -0,0 +1,17 @@
---
title: "Saturday Demo"
group: "ESPRIT"
year: 1992
platform: "Amiga 500"
credits:
- role: "Code"
name: "Stefan"
description: >
Weekend coding session demo with copper bars and plasma effect.
screenshot: "/images/esprit/SaturdayDemo.png"
file_id_diz: |
SATURDAY DEMO
------------------
Copper bars + plasma
effect demo.
---
+29
View File
@@ -0,0 +1,29 @@
---
title: "FastEcho LogFile Reporter V0.21"
group: "Kosmos Design [KDS]"
year: 1996
platform: "DOS"
credits:
- role: "Code"
name: "Stefan"
description: >
Simple utility for FastEcho to create a report of all incoming mails
in a better way than the logfile. Tested with FE 1.45 but should work
with other versions. Mailware.
download_url: "https://www.moonweb.org/files/pc/KDS/K`FLR021.RAR"
file_id_diz: |
▄ ──═════════════════════════════── ▄
█ k 0 S M 0 S - d - S i g n █
▀ ──═════════[ presents ]════════── ▀
│ │
║ FastEcho LogFile Reporter ║
║ ║
║ Very simple util for FastEcho to ║
║ make a report of all incoming ║
║ mails in a better way then the ║
║ logfile. Tested with FE 1.45 but ║
║ must work also with other ║
║ versions. Notice: MAILWARE ║
│ │
■──══[tHE tEMPLE bBS 2:2480/330]══──■
---
@@ -0,0 +1,12 @@
---
title: "Hardtrance and Hardcore Vol I"
group: "Kosmos Design [KDS]"
year: 1995
platform: "Audio"
credits:
- role: "DJ"
name: "marc JiNX"
description: >
Hardtrance and hardcore mix tape. 90 minutes of hard dance music. Available by mail order.
file_id_diz: ""
---
@@ -0,0 +1,12 @@
---
title: "House and Acid Vol I"
group: "Kosmos Design [KDS]"
year: 1996
platform: "Audio"
credits:
- role: "DJ"
name: "marc JiNX"
description: >
House and acid mix tape. 90 minutes of house and acid music. Available by mail order.
file_id_diz: ""
---
@@ -0,0 +1,12 @@
---
title: "House and Acid Vol II"
group: "Kosmos Design [KDS]"
year: 1996
platform: "Audio"
credits:
- role: "DJ"
name: "marc JiNX"
description: >
House and acid mix tape. 90 minutes of house and acid music. Available by mail order.
file_id_diz: ""
---
+30
View File
@@ -0,0 +1,30 @@
---
title: "Nightmare on Billerstreet"
group: "Lethal Illusion [KDS]"
year: 1996
platform: "DOS"
credits:
- role: "Level Design"
name: "Stefan"
description: >
Duke Nukem 3D level. A house-level for single player and dukematch.
download_url: "https://www.moonweb.org/files/pc/KDS/K`LI`001.RAR"
file_id_diz: |
▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄
▐███▓▌ ███▓▐██████▓▄ ▐███████▓
▐████▌▄███▌▐███ ███▐███ ▀▀▀▀
█████████▌ ████ ██ █████████▌
█████▌▐███▌████ ███▌▄▄[mJ]██▓▌
▓████▌ ▓██▌▓██████▓▌ █▓██████▌
▀▀▀▀▀ ▀▀▀ ▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀
╖─┌───════╧════════╧╧════════╧╛
║ │ lETHAL iLLUSiON sUBDiViSION
║═╡
╚═╕ Duke Nukem 3D level
║ │ Nightmare on billerstreet
║ │
║ │ House-Level: a good new
║═╡ level for
╚═╕ single and
║ │ dukematch!
---
+13
View File
@@ -0,0 +1,13 @@
---
title: "BBS Menu Files V0.1"
group: "Kosmos Design [KDS]"
year: 1996
platform: "DOS"
credits:
- role: "GFX"
name: "Stefan"
description: >
Collection of BBS menu ANSI graphics for use with bulletin board systems.
download_url: "https://www.moonweb.org/files/pc/KDS/K`MENU01.RAR"
file_id_diz: " kOSMOS d-Sign\n quick release\n\n bbs menu ansi's\n"
---
@@ -0,0 +1,12 @@
---
title: "Trancemix Vol I"
group: "Kosmos Design [KDS]"
year: 1995
platform: "Audio"
credits:
- role: "DJ"
name: "marc JiNX"
description: >
Trance mix tape. 90 minutes of mixed trance music. Available by mail order.
file_id_diz: ""
---
+19
View File
@@ -0,0 +1,19 @@
---
title: "SBR BBS Intro"
group: "Kosmos Design [KDS] - Outside Productions"
year: 1995
platform: "DOS/486, VGA"
credits:
- role: "Code + GFX"
name: "Stefan"
- role: "Commissioned by"
name: "SBR BBS"
description: >
Custom login/intro screen for SBR BBS (real credit, exact wording pending, PRD.md 12).
file_id_diz: |
SBR INTRO
by Kosmos Design
------------------
Custom BBS login
for SBR BBS.
---
+30
View File
@@ -0,0 +1,30 @@
---
title: "ArjUtil V1.0"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
ARJ archive utility. Enter the sub-dir and destination drive, and the program does the rest.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/ARJUTIL.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ ArjUtil V1.0 │
│ ---------------------- │
│ You enter the sub-dir │
│ and the dest.drive and │
│ my prog does the rest. │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
---
+27
View File
@@ -0,0 +1,27 @@
---
title: "CD-ROM TSR Dooropener"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
TSR utility that opens the CD-ROM door with the F12 key.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/CD_OPEN.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ CDROM TSR Dooropener │
│ ---------------------- │
│ Opens the CD-ROM door │
│ with the F12 key. │
│ │
│ SkyLINE ShareWare 1995 │
│ │
└────────────────────────┘
---
+24
View File
@@ -0,0 +1,24 @@
---
title: "Copper Intro"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "UncleSAM"
description: >
VGA Textmode 3 copper intro. Amazing 3 coppers on the screen, smooth scroller on top, up/down fading text. All in normal VGAMode 3.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/COPERINT.RAR"
file_id_diz: |
-----------------------------------
==== UncleSAM/SkyLINE presents ====
≡≡≡≡ COPPER intro ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
==== Real Textmode 3 intro ========
-----------------------------------
Amazing 3 Coppers on the screen
SmoothScroller on the top
Up/Dn Fading text
& all in the normal VGAMode 3
(C) 04/1995 by UncleSAM/SkyLINE
---
+27
View File
@@ -0,0 +1,27 @@
---
title: "DemoCoderz Pascal Pack"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Source codes for Pascal demo beginners. 3D, Plasmas, Coppers, Sound, Xmode, Bobs and more.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/DCPP.RAR"
file_id_diz: |
SkyLINE proudly presents
▓▀▀▓ ▓▀▀ ▓▀▀▓ ▓▀▀▓
▒ ▒ ▒ ▒▀▀▀ ▒▀▀▀
░▄▄░ ░▄▄ ░ ░
DemoCoderz Pascal Pack
------------------------
Here it is, the ultimate
source codes for all
pascal demo beginners!
Learn from existing srcs
and make your own demo
------------------------
3d/Plasmas/Coppers/Sound
Xmode/Bobs/and even more
---
+30
View File
@@ -0,0 +1,30 @@
---
title: "DiskInfo V1.0"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Shows how much disk space is free on up to 8 drives.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/DISKINFO.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ DiskInfo V1.0 │
│ ---------------------- │
│ It shows you how much │
│ diskspace on up to 8 │
│ drives is free. │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
---
+33
View File
@@ -0,0 +1,33 @@
---
title: "DosMENU V2.0"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
System configuration selector for booting. Helps when you have more than one configuration. Finished and published version.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/!DM_V2_0.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ DosMENU(TM) V2.0 │
│ ---------------------- │
│ This program selects │
│ a System-Configuartion │
│ while booting. Helpful │
│ for all with more than │
│ one Configuration. │
│ │
│ This is the finished │
│ and published version. │
│ │
│ SkyLINE ShareWare 1994 │
│ │
└────────────────────────┘
---
+25
View File
@@ -0,0 +1,25 @@
---
title: "SkyLINE InfoPack"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Information package with newest infos, little intros and other content.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/INFOPACK.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ SkyLINE InfoPack │
│ ────────────────────── │
│ Newest Infos, little │
│ Intros and other. │
│ │
│ SkyLINE ShareWare 1995 │
└────────────────────────┘
---
+31
View File
@@ -0,0 +1,31 @@
---
title: "MusicDisk #1"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
MOD music collection including MDP by the Future Crew.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/MODDISK1.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ MusicDisk #1 │
│ ---------------------- │
│ Some nice but not so │
│ good MODs from Stern. │
│ This includes MDP by │
│ the Future Crew. │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
---
+33
View File
@@ -0,0 +1,33 @@
---
title: "Play MOD V0.2"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Little MOD player using WOW-TPU. German docs. Notice: this version has some bugs (WOW-TPU has the bugs).
download_url: "https://www.moonweb.org/files/pc/SKYLINE/PLAYMOD.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ Play MOD V0.2ß │
│ ---------------------- │
│ A little MOD-Player. │
│ Uses WOW-TPU. Sorry │
│ docs and programm in │
│ german. Notice: This │
│ version has some bugs. │
│ WOW-TPU has the bugs!! │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
---
+28
View File
@@ -0,0 +1,28 @@
---
title: "Preview Compilation #1"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Picture compilation from SkyLINE mixed with text and music.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/PREVIEW1.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ Preview Compilation #1 │
│ ---------------------- │
│ Here are some pics │
│ from us mixed up with │
│ some text and music. │
│ │
│ SkyLINE ShareWare 1995 │
│ │
└────────────────────────┘
---
+26
View File
@@ -0,0 +1,26 @@
---
title: "Shark Box Intro"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "sAM"
description: >
BBS intro for Shark-BOX BBS, Augsburg. Online from Saturday 10 to Sunday 24.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/SHARKBOX.RAR"
file_id_diz: |
▄▄▄▄▄ ▄ ▄ ▄▄▄▄▄ ▄▄▄▄ ▄ ▄
▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄
▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄
▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄
▄▄▄▄▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄
·∙─────── B - O - X ───────∙·
sAM/SkyLINE DemoGroup Auxburg
present
The Shark Box Intro
oNLiNE from: sAT 10 to sUN 24
·∙──── +49-8231-88912 ─────∙·
---
+40
View File
@@ -0,0 +1,40 @@
---
title: "X-OS Shell V0.65"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Norton Commander clone. Preview with some bugs and limited commands. Made with the SkyLINE-Bench Workarea.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/SHELL.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ X-OS Shell V0.65ß │
│ ---------------------- │
│ This is a NC-Clone. │
│ Made with the well │
│ known SkyLINE-Bench │
│ Workarea. Little │
│ Preview sith some bugs │
│ and only some commands.│
│ │
│ I'm still working on │
│ this product, but │
│ there must some bigger │
│ products finished │
│ first before this. │
│ Notice this is only a │
│ Preview nor a cripple │
│ ShareWare. │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
---
+27
View File
@@ -0,0 +1,27 @@
---
title: "Uncle SAM Welcome Demo"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
A little demo by the SkyLINE crew.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/SLN_DEMO.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ Uncle SAM welcome Demo │
│ ---------------------- │
│ A little Demo by the │
│ SkyLINE-Crew. │
│ │
│ SkyLINE ShareWare 1994 │
│ │
└────────────────────────┘
---
+19
View File
@@ -0,0 +1,19 @@
---
title: "SkyLINE Searching Member Intro"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Searching member intro. Final bugfixed version. "We're still searching for new members. So download and call today!"
download_url: "https://www.moonweb.org/files/pc/SKYLINE/SLN_SMI.RAR"
file_id_diz: |
SkyLINE Searching Member Intro
+----------------------------+
| Final Bugfixed Version |
+----------------------------+
We' re still searching for new
Members. So d/l and call today
---
+13
View File
@@ -0,0 +1,13 @@
---
title: "SkyLINE Fonts"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Over 100 fonts for TheDraw in three Tdfont-Packs. Easy to change with included batches.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/SLNFONTS.RAR"
file_id_diz: " SkyLINE proudly presents\n ▓███▀█ ▓███▀█ ▓███▀▀█ ▀▀████▀▀\n ▒███▄ ▒███ █ ▒███ █ ███░\n ████ ████▄█ ████ █ ███▒\n\n ▓███▀█ ▓███▀█ ▓███▀█ ▓███ █\n ▒███▄█ ▒███▄█ ▒███ ▒███▀▄\n ████ ████ █ ████▄█ ████ █\n\n Over 100 Fonts for TheDraw in\n three Tdfont-Packs. Easy to\n change with included batches!\n A must for all Sysop's\n"
---
+31
View File
@@ -0,0 +1,31 @@
---
title: "SpeakTime V1.0"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Have your PC speak the time. German version.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/SPEAKTIM.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ Speaktime V1.0 │
│ ---------------------- │
│ Have you ever heard │
│ your PC speaking the │
│ time. Here it is. │
│ Notice: German version │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
---
+26
View File
@@ -0,0 +1,26 @@
---
title: "SpeakTime V2.0"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Updated version of SpeakTime. Now also supports SoundBlaster.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/STIME_V2.RAR"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ Speaktime V2.0 │
│ ────────────────────── │
│ Hear your Computer │
│ speaking the time. Now │
│ also on SoundBlaster. │
│ │
│ SkyLINE ShareWare 1995 │
└────────────────────────┘
---
+30
View File
@@ -0,0 +1,30 @@
---
title: "TetrisCompetition V1.0"
group: "SkyLINE Productions"
year: 1994
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Tetris game for 2 players with rules like GameBoy Tetris. Preview version.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/TET_COMP.ZIP"
file_id_diz: |
┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ TetrisCompetition V1.0 │
│ ---------------------- │
│ A Tetris game for 2 │
│ players with the rules │
│ like GameBoy Tetris. │
│ │
│ This is a Preview │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
---
+13
View File
@@ -0,0 +1,13 @@
---
title: "The Highland BBS Addy"
group: "SkyLINE Productions"
year: 1995
platform: "DOS"
credits:
- role: "Code"
name: "Sterling"
description: >
Custom BBS intro screen for The Highland BBS. Especially made for Klaus Gruber.
download_url: "https://www.moonweb.org/files/pc/SKYLINE/THL_ADDY.RAR"
file_id_diz: " ▄▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄\n ▐▓▓▓▓▓▓▓▓▌▐▓▓▌ ▐▓▓▌▐▓▓▌\n ▐ ■█▓▓█▀■ ▐▓▓█■▐▓▓▌▐▓▓▌\n▓▓▓ ▐▓▓▌ ▐▓▓▓▓▓▓▓▌▐▓▓▌■ ▓▓▓\n ▐▓▓▌ ▐▓▓▌ ▐▓▓▌▐▓▓█▄▄▄\n ▐▓▓▌ ▐▓▓▌ ▐▓▓▌▐▓▓▓▓▓▓▌\n ▐▀■▌ ▐▀■▌ ▐▀■▌▐▀■ ▀▀▌\n tHE Highland BBS Addy\n Esspecially made for KlAUS GRUBER\n"
---
+18
View File
@@ -0,0 +1,18 @@
---
title: "Atom Oh No!"
group: "Tropic DREAMs"
year: 1991
platform: "Atari ST"
credits:
- role: "Coding"
name: "Stefan"
description: >
Second game release on the Atari ST, coded by Stefan under the pseudonym "Tropic DREAMs". Idea from Amiga's Atomix, ported to hi-res 640x400 incl. level maker and 10 demo levels.
file_id_diz: |
ATOM OH NO! (1991)
by Tropic DREAMs
------------------
Port of Atomix,
Hi-Res 640x400,
level maker.
---
@@ -0,0 +1,20 @@
---
title: "International Kegeln and Bowling"
group: "Tropic DREAMs"
year: 1990
platform: "Atari ST"
credits:
- role: "Idea"
name: "Matthias (Olympic Arts)"
- role: "Coding"
name: "Stefan"
description: >
Our first release ever. A complete Bowling game, built as a second version of "International Kegeln", simply called Bowling. It was complete, but never quite playable.
file_id_diz: |
INT. KEGELN &
BOWLING (1990)
------------------
First ever release.
Idea by Matthias
(Olympic Arts).
---
+20
View File
@@ -0,0 +1,20 @@
---
title: "Runner"
group: "Tropic DREAMs"
year: 1991
platform: "Atari ST"
credits:
- role: "Idea"
name: "CPK"
- role: "Coding"
name: "Stefan"
description: >
An all-round helper tool including a database, memo, system overview, and a game.
file_id_diz: |
RUNNER v1.0
by Tropic DREAMs
------------------
Database, memo,
system info +
Hangman game.
---
+18
View File
@@ -0,0 +1,18 @@
---
title: "TOP Tools"
group: "Tropic DREAMs"
year: 1992
platform: "Atari ST"
credits:
- role: "Coding"
name: "Stefan"
description: >
Small tools and a game coded by Stefan under the pseudonym "Tropic DREAMs". All-round tool, simple strategy game, archive tool for TOS magazine.
file_id_diz: |
TOP TOOLS (1992)
by Tropic DREAMs
------------------
All-round tool,
strategy game,
archive tool.
---
+38
View File
@@ -0,0 +1,38 @@
K`FLR021.RAR [000] FastEcho LogFile Reporter V0.21
> ▄ ──═════════════════════════════── ▄
> █ k 0 S M 0 S - d - S i g n █
> ▀ ──═════════[ presents ]════════── ▀
> │ │
> ║ FastEcho LogFile Reporter ║
> ║ ║
> ║ Very simple util for FastEcho to ║
> ║ make a report of all incoming ║
> ║ mails in a better way then the ║
> ║ logfile. Tested with FE 1.45 but ║
> ║ must work also with other ║
> ║ versions. Notice: MAILWARE ║
> │ │
> ■──══[tHE tEMPLE bBS 2:2480/330]══──■
K`MENU01.RAR [000]
> kOSMOS d-Sign
> quick release
>
> bbs menu ansi's
>
K`LI`001.RAR [000] ▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄
> ▐███▓▌ ███▓▐██████▓▄ ▐███████▓
> ▐████▌▄███▌▐███ ███▐███ ▀▀▀▀
> █████████▌ ████ ██ █████████▌
> █████▌▐███▌████ ███▌▄▄[mJ]██▓▌
> ▓████▌ ▓██▌▓██████▓▌ █▓██████▌
> ▀▀▀▀▀ ▀▀▀ ▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀
> ╖─┌───════╧════════╧╧════════╧╛
> ║ │ lETHAL iLLUSiON sUBDiViSION
> ║═╡
> ╚═╕ Duke Nukem 3D level
> ║ │ Nightmare on billerstreet
> ║ │
> ║ │ House-Level: a good new
> ║═╡ level for
> ╚═╕ single and
> ║ │ dukematch!
+111
View File
@@ -0,0 +1,111 @@
▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄
▐███▓▌ ███▓▐██████▓▄ ▐███████▓
▐████▌▄███▌▐███ ███▐███ ▀▀▀▀
█████████▌ ████ ██ █████████▌
█████▌▐███▌████ ███▌▄▄[mJ]██▓▌
▓████▌ ▓██▌▓██████▓▌ █▓██████▌
▀▀▀▀▀ ▀▀▀ ▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀
■ · « ─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─- » · ■
· /----) /----) /----) /----\ [mJ]·
¡ /---\___) /---\___) ( ____)/-\ ___/ ¡
| |-| | ! |--\--\/--| ! |--\ |-| ( ----\\_/ ---\-\ |-| |
| | |/-) | |__ )|\/| | | |__ ) ·──· /-| | ·──· \____ )-| __ ) \| | |
! | < ¡ |-- )| | | ¡ |-- ) | <> | (---- ) | -- )|\ | !
· |_|\_)___/___/_| |_|___/___/ \_|_| (____/|_|\___/_| \_| ·
■ · « ─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─-─- » · ■
kOSMOS-d-Sign
iNFO fILE
short and easy
May '96
beginning-section some words from my own
=`-`=`-`-`=-`-`=-`=`-`=`-`=-`=-`=`=`-`=-`=-`=-`=-`=-`=-`=`-`=-`=`-=`-`=
I tried to make a demogroup in augsburg quite long, but nobody was
interessted...
So I gave up my doing's as coorinator of SkyLINE, dropped all out and
now do my work alone...
You probably think SkyLINE was lame and it was sure!
now i learned and don't want to be the best, I only do my work and
that's all...
But, the SkyLINE progs are not dead! I try to improve some tool and
release them again...
Later I wanted to join a new demogroup in augsburg, but there is no
real teamwork possible, I would be the only real coder there...
So i decided to join SBR...
On KDS I only will release my own stuff, which could not be released
through a demogroup...
marc JiNX^kDS^SBR (Stefan Koelle)
tool-section releases
=`-`=`-`-`=-`-`=-`=`-`=`-`=-`=-`=`=`-`=-`=-`=-`=-`=-`=-`=`-`=-`=`-=`-`=
Name Desciption
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
K`FLR021.RAR FastEcho LogFile Reporter V0.21
K`MENU01.RAR BBS Menu Files V0.1
tape-section releases
=`-`=`-`-`=-`-`=-`=`-`=`-`=-`=-`=`=`-`=-`=-`=-`=-`=-`=-`=`-`=-`=`-=`-`=
DJ marc JiNX Releases:
Name Year Length
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Trancemix Vol I 1995 90:00
Hardtrance and Hardcore Vol I 1995 90:00
House and Acid Vol I 1996 90:00
House and Acid Vol II 1996 90:00
To order contact me on bbs or by mail
lethal illusion - sub-section releases
=`-`=`-`-`=-`-`=-`=`-`=`-`=-`=-`=`=`-`=-`=-`=-`=-`=-`=-`=`-`=-`=`-=`-`=
Name Desciption
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
K`LI`001.RAR Duke 3D Level: Nightmare on billerstreet
bbs-section tHE tEMPLE bBS
=`-`=`-`-`=-`-`=-`=`-`=`-`=-`=-`=`=`-`=-`=-`=-`=-`=-`=-`=`-`=-`=`-=`-`=
________ ________ ________ ________ ____ ________
!__ __!__ __!_ _!!_ !__ ! !__ __!
%tHE%/ \ / __) / \ / \ _¡ / ___ / __)%bBS%
/ \ / \/ \/ \ / \/ \
\______/ \______/\___/\___/\______/mJ\______/\______/
%49.821.2191038`mODEM% %iSDN`49.821.2191036%
%stoned`brain`records`memberboard% %exp`dist% %air`online`support%
%bavarian`host`of% %comanet% %scenenet% %oanet% %8bitnet%
%szenenet`2nd`hq% %KDS`world`headquater%
+146
View File
@@ -0,0 +1,146 @@
[
{
"name": "brown.mod",
"title": "mod.james brown",
"size_human": "93.99 KB",
"channels": 4,
"sample_count": 15,
"modified": "1992-07-29T11:11:54+02:00",
"url": "https://www.moonweb.org/files/amiga/mods/brown.mod"
},
{
"name": "chess.mod",
"title": "CHESS_GOES_TEKKNO___",
"size_human": "130.52 KB",
"channels": 4,
"sample_count": 18,
"modified": "1993-08-08T22:32:44+02:00",
"url": "https://www.moonweb.org/files/amiga/mods/chess.mod"
},
{
"name": "djc-test.mod",
"title": "djc-test.mod",
"size_human": "51.45 KB",
"channels": 4,
"sample_count": 5,
"modified": "1994-01-12T18:14:54+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/djc-test.mod"
},
{
"name": "franzl.mod",
"title": "franzl von der alm",
"size_human": "143.39 KB",
"channels": 4,
"sample_count": 7,
"modified": "1991-12-23T07:05:00+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/franzl.mod"
},
{
"name": "jump.mod",
"title": "JUMP_ON_THE_JAMP____",
"size_human": "24.66 KB",
"channels": 4,
"sample_count": 4,
"modified": "1987-04-22T00:21:42+02:00",
"url": "https://www.moonweb.org/files/amiga/mods/jump.mod"
},
{
"name": "jungle.mod",
"title": "jungle-tekkno",
"size_human": "34.84 KB",
"channels": 4,
"sample_count": 16,
"modified": "1991-12-23T07:46:00+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/jungle.mod"
},
{
"name": "kings.mod",
"title": "KINGS_______________",
"size_human": "77.16 KB",
"channels": 4,
"sample_count": 12,
"modified": "1987-04-22T00:05:30+02:00",
"url": "https://www.moonweb.org/files/amiga/mods/kings.mod"
},
{
"name": "LIT_RAVE.MOD",
"title": "little rave",
"size_human": "55.41 KB",
"channels": 4,
"sample_count": 7,
"modified": "1991-12-23T19:32:00+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/LIT_RAVE.MOD"
},
{
"name": "no_limit.mod",
"title": "no limit gen remix",
"size_human": "94.06 KB",
"channels": 4,
"sample_count": 11,
"modified": "1993-12-04T10:27:04+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/no_limit.mod"
},
{
"name": "NXT_RAVE.MOD",
"title": "next !rave",
"size_human": "32.02 KB",
"channels": 4,
"sample_count": 4,
"modified": "1994-03-16T00:26:42+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/NXT_RAVE.MOD"
},
{
"name": "pump.mod",
"title": "PUMP_UP_THE_ASC_____",
"size_human": "45.65 KB",
"channels": 4,
"sample_count": 8,
"modified": "1993-02-23T08:13:34+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/pump.mod"
},
{
"name": "run_away.mod",
"title": "run away by genius",
"size_human": "43.66 KB",
"channels": 4,
"sample_count": 15,
"modified": "1991-12-23T07:07:00+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/run_away.mod"
},
{
"name": "tekkno.mod",
"title": "tekknotracks genius",
"size_human": "39.75 KB",
"channels": 4,
"sample_count": 14,
"modified": "1991-12-23T07:13:00+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/tekkno.mod"
},
{
"name": "turbo.mod",
"title": "TURBO_SONG_FOR_INTRO",
"size_human": "126.31 KB",
"channels": 4,
"sample_count": 10,
"modified": "1987-04-22T00:10:18+02:00",
"url": "https://www.moonweb.org/files/amiga/mods/turbo.mod"
},
{
"name": "valla.mod",
"title": "VALLA_______________",
"size_human": "25.18 KB",
"channels": 4,
"sample_count": 3,
"modified": "1993-02-23T08:11:24+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/valla.mod"
},
{
"name": "wizard.mod",
"title": "wizard by genius 93",
"size_human": "46.34 KB",
"channels": 4,
"sample_count": 9,
"modified": "1991-12-23T07:02:00+01:00",
"url": "https://www.moonweb.org/files/amiga/mods/wizard.mod"
}
]
+288
View File
@@ -0,0 +1,288 @@
ARJUTIL.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ ArjUtil V1.0 │
> │ ---------------------- │
> │ You enter the sub-dir │
> │ and the dest.drive and │
> │ my prog does the rest. │
> │ │
> │ This is Freeware │
> │ │
> │ SkyLINE Production '94 │
> │ │
> └────────────────────────┘
CD_OPEN.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ CDROM TSR Dooropener │
> │ ---------------------- │
> │ Opens the CD-ROM door │
> │ with the F12 key. │
> │ │
> │ SkyLINE ShareWare 1995 │
> │ │
> └────────────────────────┘
COPERINT.RAR [000] -----------------------------------
> ==== UncleSAM/SkyLINE presents ====
> ≡≡≡≡ COPPER intro ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
> ==== Real Textmode 3 intro ========
> -----------------------------------
> Amazing 3 Coppers on the screen
> SmoothScroller on the top
> Up/Dn Fading text
> & all in the normal VGAMode 3
>
> (C) 04/1995 by UncleSAM/SkyLINE
DCPP.RAR [000] SkyLINE proudly presents
> ▓▀▀▓ ▓▀▀ ▓▀▀▓ ▓▀▀▓
> ▒ ▒ ▒ ▒▀▀▀ ▒▀▀▀
> ░▄▄░ ░▄▄ ░ ░
> DemoCoderz Pascal Pack
> ------------------------
> Here it is, the ultimate
> source codes for all
> pascal demo beginners!
> Learn from existing srcs
> and make your own demo
> ------------------------
> 3d/Plasmas/Coppers/Sound
> Xmode/Bobs/and even more
DISKINFO.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ DiskInfo V1.0 │
> │ ---------------------- │
> │ It shows you how much │
> │ diskspace on up to 8 │
> │ drives is free. │
> │ │
> │ This is Freeware │
> │ │
> │ SkyLINE Production '94 │
> │ │
> └────────────────────────┘
INFOPACK.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ SkyLINE InfoPack │
> │ ────────────────────── │
> │ Newest Infos, little │
> │ Intros and other. │
> │ │
> │ SkyLINE ShareWare 1995 │
> └────────────────────────┘
MODDISK1.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ MusicDisk #1 │
> │ ---------------------- │
> │ Some nice but not so │
> │ good MODs from Stern. │
> │ This includes MDP by │
> │ the Future Crew. │
> │ │
> │ This is Freeware │
> │ │
> │ SkyLINE Production '94 │
> │ │
> └────────────────────────┘
PLAYMOD.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ Play MOD V0.2ß │
> │ ---------------------- │
> │ A little MOD-Player. │
> │ Uses WOW-TPU. Sorry │
> │ docs and programm in │
> │ german. Notice: This │
> │ version has some bugs. │
> │ WOW-TPU has the bugs!! │
> │ │
> │ This is Freeware │
> │ │
> │ SkyLINE Production '94 │
> │ │
> └────────────────────────┘
PREVIEW1.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ Preview Compilation #1 │
> │ ---------------------- │
> │ Here are some pics │
> │ from us mixed up with │
> │ some text and music. │
> │ │
> │ SkyLINE ShareWare 1995 │
> │ │
> └────────────────────────┘
SHARKBOX.RAR [000] ▄▄▄▄▄ ▄ ▄ ▄▄▄▄▄ ▄▄▄▄ ▄ ▄
> ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄
> ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄
> ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄
> ▄▄▄▄▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄
> ·∙─────── B - O - X ───────∙·
>
> sAM/SkyLINE DemoGroup Auxburg
> present
> The Shark Box Intro
>
> oNLiNE from: sAT 10 to sUN 24
> ·∙──── +49-8231-88912 ─────∙·
SHELL.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ X-OS Shell V0.65ß │
> │ ---------------------- │
> │ This is a NC-Clone. │
> │ Made with the well │
> │ known SkyLINE-Bench │
> │ Workarea. Little │
> │ Preview sith some bugs │
> │ and only some commands.│
> │ │
> │ I'm still working on │
> │ this product, but │
> │ there must some bigger │
> │ products finished │
> │ first before this. │
> │ Notice this is only a │
> │ Preview nor a cripple │
> │ ShareWare. │
> │ │
> │ SkyLINE Production '94 │
> │ │
> └────────────────────────┘
SLN_DEMO.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ Uncle SAM welcome Demo │
> │ ---------------------- │
> │ A little Demo by the │
> │ SkyLINE-Crew. │
> │ │
> │ SkyLINE ShareWare 1994 │
> │ │
> └────────────────────────┘
SLN_SMI.RAR [000] SkyLINE Searching Member Intro
> +----------------------------+
> | Final Bugfixed Version |
> +----------------------------+
> We' re still searching for new
> Members. So d/l and call today
SLNFONTS.RAR [000] SkyLINE proudly presents
> ▓███▀█ ▓███▀█ ▓███▀▀█ ▀▀████▀▀
> ▒███▄ ▒███ █ ▒███ █ ███░
> ████ ████▄█ ████ █ ███▒
>
> ▓███▀█ ▓███▀█ ▓███▀█ ▓███ █
> ▒███▄█ ▒███▄█ ▒███ ▒███▀▄
> ████ ████ █ ████▄█ ████ █
>
> Over 100 Fonts for TheDraw in
> three Tdfont-Packs. Easy to
> change with included batches!
> A must for all Sysop's
SPEAKTIM.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ Speaktime V1.0 │
> │ ---------------------- │
> │ Have you ever heard │
> │ your PC speaking the │
> │ time. Here it is. │
> │ Notice: German version │
> │ │
> │ This is Freeware │
> │ │
> │ SkyLINE Production '94 │
> │ │
> └────────────────────────┘
STIME_V2.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ Speaktime V2.0 │
> │ ────────────────────── │
> │ Hear your Computer │
> │ speaking the time. Now │
> │ also on SoundBlaster. │
> │ │
> │ SkyLINE ShareWare 1995 │
> └────────────────────────┘
TET_COMP.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ TetrisCompetition V1.0 │
> │ ---------------------- │
> │ A Tetris game for 2 │
> │ players with the rules │
> │ like GameBoy Tetris. │
> │ │
> │ This is a Preview │
> │ │
> │ SkyLINE Production '94 │
> │ │
> └────────────────────────┘
THL_ADDY.RAR [000] ▄▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄
> ▐▓▓▓▓▓▓▓▓▌▐▓▓▌ ▐▓▓▌▐▓▓▌
> ▐ ■█▓▓█▀■ ▐▓▓█■▐▓▓▌▐▓▓▌
> ▓▓▓▓▓ ▐▓▓▌ ▐▓▓▓▓▓▓▓▌▐▓▓▌■ ▓▓▓▓▓
> ▐▓▓▌ ▐▓▓▌ ▐▓▓▌▐▓▓█▄▄▄
> ▐▓▓▌ ▐▓▓▌ ▐▓▓▌▐▓▓▓▓▓▓▌
> ▐▀■▌ ▐▀■▌ ▐▀■▌▐▀■ ▀▀▌
> tHE Highland BBS Addy
> Esspecially made for KlAUS GRUBER
!DM_V2_0.RAR [000] ┌────────────────────────┐
> │ ██▌█ █▐█ █▐█ █▌█ █▐██ │
> │ █ █ █▐█ █▐█ █▌█▌█▐█ │
> │ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
> │ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
> │ │
> │ DosMENU(TM) V2.0 │
> │ ---------------------- │
> │ This program selects │
> │ a System-Configuartion │
> │ while booting. Helpful │
> │ for all with more than │
> │ one Configuration. │
> │ │
> │ This is the finished │
> │ and published version. │
> │ │
> │ SkyLINE ShareWare 1994 │
> │ │
> └────────────────────────┘
+299
View File
@@ -0,0 +1,299 @@
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Date:
▒▒███████████████ ▒▒ 25-Aug-94
▒▒██ █ █ █ █ ██ ███ █▄ █▄ █▄ █████▄ ▒▒
▒▒██ ███ █ █ █ ██ ███ ███ ███▄███ ███▀▀▀ ▒▒ Lines:
▒▒██ █ ██ █ ██ ███ ███ ███████ █████ ▒▒ 299
▒▒████ █ █ ██ ███ ███▄▄▄ ███ ███▀███ ███▄▄▄ ▒▒
▒▒██ █ █ ██ ███ ▀████ ▀█ ▀█ ▀█ ▀████ ▒▒ File Size:
▒▒███████████████ ▒▒ 12 KBytes
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒ SkyLINE -> Information File <- SkyLINE ▒▒ Written by
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Sterling
Introduction
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
You will probably say "What is SkyLine?". I will try to explain what we wanna
do on the PC. SkyLine is a very young group of people who want to enter the
world of PC. At the moment there are only two Members of SkyLine. By the way
this is a legal group. NO illegal tradings or any other piracy stuff. At the
moment we are only coding some nice utilities and some not so good games, but
in the future we want to code real cool demos in asm.
Topics in this document
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Introduction
Members
Finished Products
Unfinished Products
Some words about DOSMenu
How to reach SkyLINE
Final Message
The END
Members
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Alias | Real Name | Age | Activities
----------+-------------------+-----+----------------------------------------
Sterling | Stefan Kölle | 17 | Organizing, Code, Music, Some GFX
M.H. | Matthias Hebeisen | 18 | RayTracing, GFX, Some Coding
Spreaded Products
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Productname: Arj Utility V1.0
Filename : ARJUTIL.ZIP
Filesize : 8 KBytes
StartDate : summer 1993
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ ArjUtil V1.0 │
│ ---------------------- │
│ You enter the sub-dir │
│ and the dest.drive and │
│ my prog does the rest. │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
Productname: Shell V0.65ß Preview
Filename : SHELL.ZIP
Filesize : 21 KBytes
StartDate : summer 1993
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ X-OS Shell V0.65ß │
│ ---------------------- │
│ This is a NC-Clone. │
│ Made with the well │
│ known SkyLINE-Bench │
│ Workarea. Little │
│ Preview sith some bugs │
│ and only some commands.│
│ │
│ I'm still working on │
│ this product, but │
│ there must some bigger │
│ products finished │
│ first before this. │
│ Notice this is only a │
│ Preview nor a cripple │
│ ShareWare. │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
Productname: DiskInfo V1.0
Filename : DISKINFO.ZIP
Filesize : 10 KBytes
StartDate : fall 1993
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ DiskInfo V1.0 │
│ ---------------------- │
│ It shows you how much │
│ diskspace on up to 8 │
│ drives is free. │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
Productname: Play MOD V0.2ß
Filename : PLAYMOD.ZIP
Filesize : 15 KBytes
StartDate : winter 1993
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ Play MOD V0.2ß │
│ ---------------------- │
│ A little MOD-Player. │
│ Uses WOW-TPU. Sorry │
│ docs and programm in │
│ german. Notice: This │
│ version has some bugs. │
│ WOW-TPU has the bugs!! │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
Productname: Tetris Competition V1.0
Filename : TET_COMP.ZIP
Filesize : 55 KBytes
StartDate : spring 1994
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ TetrisCompetition V1.0 │
│ ---------------------- │
│ A Tetris game for 2 │
│ players with the rules │
│ like GameBoy Tetris. │
│ │
│ This is a Preview │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
Productname: SpeakTime V1.0
Filename : SPEAKTIM.ZIP
Filesize : 90 KBytes
StartDate : summer 1994
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ Speaktime V1.0 │
│ ---------------------- │
│ Have you ever heard │
│ your PC speaking the │
│ time. Here it is. │
│ Notice: German version │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
Productname: MOD Disk Number One
Filename : MODDISK1.ZIP
Filesize : 410 KBytes
StartDate : 24.08.1994
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ MusicDisk #1 │
│ ---------------------- │
│ Some nice but not so │
│ good MODs from Stern. │
│ This includes MDP by │
│ the Future Crew. │
│ │
│ This is Freeware │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
Productname: DOSMenu Final V2.0
Filename : !DM_V2_0
Filesize : ?? KBytes
StartDate : summer 1993
ReleaseDate: ??.??.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ DOSMenu Final V2.0 │
│ ---------------------- │
│ This program selects │
│ a System-Configuartion │
│ while booting. Helpful │
│ for all with more than │
│ one Configuration. │
│ │
│ This is the finished │
│ and published version. │
│ │
│ SkyLINE Production '94 │
│ │
└────────────────────────┘
Frequently asked Questions about SkyLINE
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Q: Why have you released all your first Products on 24.08.1994?
A: That's because on this day I searched through all my Sub-DIRs and
thought it would be funny to release all my little programs as Freeware.
Some words about DOSMenu
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
These are the previous versions of DOSMenu which are not fully working and
they have some bugs. Please don't spread this versions any longer.
DOSMenu V0.9ß
DOSMenu II V2.0
DOSMenu III V1.0 - V1.4
DOSMenu Update
How to reach SkyLINE
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Write to : Stefan Kölle
Laugingerstr. 10
86154 Augsburg
Germany
Or simply dial: +49-821-416484 (19h-20h)
Final Message
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
If you want to order a program please use the ORDER.TXT. Read the information
very good in ORDER.TXT. If somebody wants to join SkyLINE please don't wait
and call us now. We strongly need a BBS. Please call us if you live in
Augsburg in Germany and you want to join SkyLINE. We also need more Coder,
Graphics-Artists and Music-Composer and finaly a vice Organizer or later the
first Organizer is needed, I'm not a real Organizer. Signed Sterling.
The END
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
__ _ _ ____
_| | | | \ | \|\ | __\
/ \|_ \ | |_ | || || _|
\/\ \ \___| \_| \|\_| \___|
/ [94-Stern]
+548
View File
@@ -0,0 +1,548 @@
█ ░█ ███ ██ █▓ █
█▒ █ █ █ █░█ ▒█ ░█ ███████
██░ ░ ░█ ░█ █ ░█ ██░█ █ █
░█ █▒ █▒ ████▓ █ ░░ ██ ██ █░ ▒█▓█████░
░█ █░ ▒▒ █▒ █ █ █░ █ █ █
░█▓ ███░██░ ██ █ █ ░██ █
█ ▒█░ █ █ ▓█ █ ██ █▓
██ ▒█ █░██████████ █ █░ ██ █▒████░░░▒███
░█ ██ █
██░
The iNFOFilE ▒█████▒ █ ███▒
^^^ ^^^^^^^^ ████▓ ██ ███░
████░ ▒█░ ░███░
███░ █░ ░████▒
▒███░ Version: June '95
Hello everybody out there... This is the SkyLINE iNFOFiLE with a new dezign
As you will already know, SkyLINE is a DemoGroup in AuxBurg. In this Textfile
we want to tell you all about this Crew.
···········································································
-> The Topics this time...
^^^^^^^^^^^^^^^^^^^^^^^
* Memberstaff
* Spreaded Products
* Distro-Sites
* The Order-Form
* How to contact sAM/SkyLINE
* Some information
···········································································
-> Memberstaff
^^^^^^^^^^^
╒═══════════════════════════════════════════════════════════════════════════╕
│ SkyLINE Members: │
├─════════════════──────────────┬──────────┬────────────────────────────────┤
│ sAM (Stefan Kölle) │ 18 years │ Organizing, Code, Music, ANSI, │
│ │ │ Some GFX (and soon SYSOP?) │
│ M.H. (Matthias Hebeisen) │ 18 years │ RayTracing, GFX, Some Coding │
╞═══════════════════════════════╧══════════╧════════════════════════════════╡
│ │
│ Cooperations with: │
├─══════════════════────────────┬──────────┬────────────────────────────────┤
│ Milk Run (Jürgen Vejmelka) │ 19 years │ Coding, Some Graphics │
│ Mirko (Mirko Klinski) │ 17 years │ Graphics │
│ and other (name ???) │ ?? years │ Graphics │
╞═══════════════════════════════╧══════════╧════════════════════════════════╡
│ │
│ New Members: │
├─════════════──────────────────────────────────────────────────────────────┤
│ This could be you - Call us today, if you think you are good enough │
╘═══════════════════════════════════════════════════════════════════════════╛
···········································································
-> Spreaded Products
^^^^^^^^^^^^^^^^^
Productname: Arj Utility V1.0
Filename : ARJUTIL.ZIP
Filesize : 8 KBytes
StartDate : summer 1993
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ ArjUtil V1.0 │
│ ---------------------- │
│ You enter the sub-dir │
│ and the dest.drive and │
│ my prog does the rest. │
│ This is Freeware │
└────────────────────────┘
Productname: Shell V0.65ß Preview
Filename : SHELL.ZIP
Filesize : 21 KBytes
StartDate : summer 1993
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ X-OS Shell V0.65ß │
│ ---------------------- │
│ This is a NC-Clone. │
│ Made with the well │
│ known SkyLINE-Bench │
│ Workarea. Little │
│ Preview sith some bugs │
│ and only some commands.│
│ │
│ I'm still working on │
│ this product, but │
│ there must some bigger │
│ products finished │
│ first before this. │
│ Notice this is only a │
│ Preview nor a cripple │
│ ShareWare. │
└────────────────────────┘
Productname: DiskInfo V1.0
Filename : DISKINFO.ZIP
Filesize : 10 KBytes
StartDate : fall 1993
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ DiskInfo V1.0 │
│ ---------------------- │
│ It shows you how much │
│ diskspace on up to 8 │
│ drives is free. │
│ This is Freeware │
└────────────────────────┘
Productname: Play MOD V0.2ß
Filename : PLAYMOD.ZIP
Filesize : 15 KBytes
StartDate : winter 1993
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ Play MOD V0.2ß │
│ ---------------------- │
│ A little MOD-Player. │
│ Uses WOW-TPU. Sorry │
│ docs and programm in │
│ german. Notice: This │
│ version has some bugs. │
│ WOW-TPU has the bugs!! │
│ This is Freeware │
└────────────────────────┘
Productname: Tetris Competition V1.0
Filename : TET_COMP.ZIP
Filesize : 55 KBytes
StartDate : spring 1994
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ TetrisCompetition V1.0 │
│ ---------------------- │
│ A Tetris game for 2 │
│ players with the rules │
│ like GameBoy Tetris. │
│ This is a Preview │
└────────────────────────┘
Productname: SpeakTime V1.0
Filename : SPEAKTIM.ZIP
Filesize : 90 KBytes
StartDate : summer 1994
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ Speaktime V1.0 │
│ ---------------------- │
│ Have you ever heard │
│ your PC speaking the │
│ time. Here it is. │
│ Notice: German version │
│ This is Freeware │
└────────────────────────┘
Productname: MOD Disk Number One
Filename : MODDISK1.ZIP
Filesize : 410 KBytes
StartDate : 24.08.1994
ReleaseDate: 24.08.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ MusicDisk #1 │
│ ---------------------- │
│ Some nice but not so │
│ good MODs from Stern. │
│ This includes MDP by │
│ the Future Crew. │
│ This is Freeware │
└────────────────────────┘
Productname: DosMENU(TM) V2.0
Filename : !DM_V2_0
Filesize : 181 KBytes
StartDate : summer 1993
ReleaseDate: 26.09.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ │
│ DosMENU(TM) V2.0 │
│ ---------------------- │
│ This program selects │
│ a System-Configuartion │
│ while booting. Helpful │
│ for all with more than │
│ one Configuration. │
│ │
│ This is the finished │
│ and published version. │
│ │
│ SkyLINE ShareWare 1994 │
│ │
└────────────────────────┘
Productname: The Uncle SAM welcome demo
Filename : SLN_DEMO
Filesize : 181 KBytes
StartDate : September 1994
ReleaseDate: 27.10.1994
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ Uncle SAM welcome Demo │
│ ---------------------- │
│ A little Demo by the │
│ SkyLINE-Crew. │
└────────────────────────┘
Productname: Preview Compilation #1
Filename : PREVIEW1
Filesize : 410 KBytes
StartDate : 07.03.1995
ReleaseDate: 07.03.1995 / 1 hour later :-)
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ Preview Compilation #1 │
│ ---------------------- │
│ Here are some pics │
│ from us mixed up with │
│ some text and music. │
└────────────────────────┘
Productname: CD-ROM TSR Dooropener
Filename : CD_OPEN
Filesize : 11 KBytes
StartDate : 03.02.1995
ReleaseDate: 07.03.1995
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ CDROM TSR Dooropener │
│ ---------------------- │
│ Opens the CD-ROM door │
│ with the F12 key. │
│ SkyLINE ShareWare 1995 │
└────────────────────────┘
Productname: Infromation Package & Little Intro
Filename : INFOPACK
Filesize : 74 KBytes
StartDate : 12.02.1995 (Intro started a year ago)
ReleaseDate: 12.03.1995
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ SkyLINE InfoPack │
│ ────────────────────── │
│ Newest Infos, little │
│ Intros and other. │
│ │
│ SkyLINE ShareWare 1995 │
└────────────────────────┘
Productname: SpeakTime V2.0 (New Version)
Filename : STIME_V2
Filesize : 107 KBytes
StartDate : 24.08.1994 (first version)
ReleaseDate: 22.03.1995
Description: ┌────────────────────────┐
│ ██▌█ █▐█ █▐█ █▌█ █▐██ │
│ █ █ █▐█ █▐█ █▌█▌█▐█ │
│ ▀█▌█▀▄ ▐█ ▐█ █▌███▐█▀ │
│ ██▌█ █ ▐█ ▐██▌█▌█▐█▐██ │
│ Speaktime V2.0 │
│ ────────────────────── │
│ Hear your Computer │
│ speaking the time. Now │
│ also on SoundBlaster. │
│ │
│ SkyLINE ShareWare 1995 │
└────────────────────────┘
Productname: SkyLINE Searching Member Intro (Bugfixed Version)
Filename : SLN_SMI
Filesize : 17 KBytes
StartDate : 12.03.1995 (first version)
ReleaseDate: 09.04.1995
Description: SkyLINE Searching Member Intro
+----------------------------+
| Final Bugfixed Version |
+----------------------------+
We' re still searching for new
Members. So d/l and call today
Productname: VGA Textmode 3 Copper Intro
Filename : COPERINT
Filesize : 16 KBytes
StartDate : 30.03.1995
ReleaseDate: 09.04.1995
Description: -----------------------------------
==== UncleSAM/SkyLINE presents ====
≡≡≡≡ COPPER intro ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
==== Real Textmode 3 intro ========
-----------------------------------
Amazing 3 Coppers on the screen
SmoothScroller on the top
Up/Dn Fading text
& all in the normal VGAMode 3
(C) 04/1995 by UncleSAM/SkyLINE
Productname: The Highland BBS Addy
Filename : THL_ADDY
Filesize : 19 KBytes
StartDate : 18.04.1995
ReleaseDate: 29.04.1995
Description: ▄▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄
▐▓▓▓▓▓▓▓▓▌▐▓▓▌ ▐▓▓▌▐▓▓▌
▐ ■█▓▓█▀■ ▐▓▓█■▐▓▓▌▐▓▓▌
▓▓▓▓▓ ▐▓▓▌ ▐▓▓▓▓▓▓▓▌▐▓▓▌■ ▓▓▓▓▓
▐▓▓▌ ▐▓▓▌ ▐▓▓▌▐▓▓█▄▄▄
▐▓▓▌ ▐▓▓▌ ▐▓▓▌▐▓▓▓▓▓▓▌
▐▀■▌ ▐▀■▌ ▐▀■▌▐▀■ ▀▀▌
tHE Highland BBS Addy
Esspecially made for KlAUS GRUBER
···········································································
-> Distro-Sites
^^^^^^^^^^^^
╒═══════════════════════════════════════════════════════════════════════════╕
│ Request-Distro (for Requests call this Board) │
├─══════════════───┬────────────────┬─────────────────────┬─────────────────┤
│ Sirius-BBS │ +49-8233-30860 │ 4 ZYX 19K2 modems │ 2:2480/96 │
│ 2:2480/96 │ +49-8233-32167 │ 4 v34 / vFC modems │ 2:2480/196 │
│ Christian │ +49-8233-70020 │ ISDNA, ISDNB, ISDNC │ 2:2480/195 │
│ Niessner └────────────────┴─────────────────────┴─────────────────┤
│ Group: Programmer's Support - Area: SkyLINE Support │
╞═══════════════════════════════════════════════════════════════════════════╡
│ Local-Distro (from Augsburg call this Board) │
├─════════════─────┬────────────────┬───────────────────────────────────────┤
│ Shark-BOX │ +49-8231-88192 │ v32bis modem │
│ 2:2480/403.20 └────────────────┴───────────────────────────────────────┤
│ Bernhard Lindner Group: #24 SkyLine - Area: #75 SkyLINE Productions │
│ │
│ Online from Saturday 10 o'clock to Sunday 20 o'clock │
│ Use Command "2" for special SkyLINE Menu │
╞═══════════════════════════════════════════════════════════════════════════╡
│ Product-Site (not all Files from SkyLINE) │
├─════════════─────┬────────────────┬───────────────────────────────────────┤
│ Airport │ +49-821-563350 │ v32bis modem │
│ 2:2480/404 │ +49-821-563893 │ vFC modem │
│ Bernd Liedke └────────────────┴───────────────────────────────────────┤
│ Konferenz / Area: #290 Skyline Software │
╞═══════════════════════════════════════════════════════════════════════════╡
│ Product-Site (not all Files from SkyLINE) │
├─════════════─────┬────────────────┬───────────────────────────────────────┤
│ The Highland BBS │ +49-821- 98959 │ 2 vFC v34 v32T modems │
│ │ +49-821- 93095 │ vFC v34 modem or ISDN │
│ │ +49-821- 98498 │ v32b Zyx16.8/19.2 modem or ISDN │
╘══════════════════╧════════════════╧═══════════════════════════════════════╛
···········································································
-> The Order-Form
^^^^^^^^^^^^^^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cut here ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mailed to: Stefan Kölle Hotline at: +49-821-416484
Laugingerstr. 10
86154 Augsburg
Germany
Name : ··················································
Company: ··················································
Street : ··················································
City : ··················································
Country: ··················································
Phone : ······················ FAX: ······················
Check the following boxes with X if you want the product:
[ ] DosMENU(TM) V2.0 Registration Disk (1.44) 30,- DM
(Newest Info/Boot Choice util/and more)
[ ] SkyLINE-Production Disk 1 (1.44) 10,- DM
(!DM_V2_0/ARJUTIL/CD_OPEN/DISKINFO/
MODDISK1/PLAYMOD/PREVIEW1/SHELL/
SLN_DEMO/SPEAKTIM/TET_COMP)
[ ] SkyLINE-Production Disk 2 (1.44) 10,- DM
(INFOPACK/STIME_V2/SLN_SMI/COPERINT)
=========
Please count the money and write here >>>
Please enclose the money in an envelope and I send you the
disk(s) as soon as possible.
I accept the above: ··················································
( Place your signature here )
Thanks for your Order. Uncle SAM of SkyLINE/18-Apr-95
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cut here ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
···········································································
-> How to contact sAM/SkyLINE
^^^^^^^^^^^^^^^^^^^^^^^^^^
FIDO Netmail to Stefan Koelle@2:2480/96.23
Local Echo at SKYLINE_SUPPORT.GER (Sirius BBS)
Local Message at Airport to Stefan Koelle - +49-821-563350 v32bis modem
+49-821-563893 vFastClass modem
Voicetalk at +49-821-416484 (answeringmachine)
Snailmail to Stefan Koelle - Laugingerstr. 10 - 86154 Augsburg - Germany
···········································································
-> Some information
^^^^^^^^^^^^^^^^
Augsburg first DemoBoard
------------------------
If someone wants to log into the SkyLINE BBS then you have to call me first
by voice :-(
I'm no real sysop and if you want the newest stuff from SkyLINE then
call our Support-Sites, but if you really want to call me, no problem.
Also I must say that my BBS is not very comfortably :-(
So, I must say, my BBS is only useful for demo-groups, because I have
very nice Demos/Intros, Demo-Sources, Music-Tracker, MOD-Files, MID-Files,
GFX-Utils, ANSI-Utils and ofcource our own products.
But please don't call at night, best times are weekdays from 18.00 to
21.00. Thanx.
Searching people
----------------
We are still searching for coders, graphicans or musicans...
Don't hesitate to call me. Also Cooperation-works are welcome.
Support BBS's
-------------
We are NO LONGER searching for support BBS's in the area of Augsburg,
but other city's/states/countries are welcome. If someone is interested
then please leave a NetMail to Stefan Koelle@2:2480/96.23
Take care... *Stefan*
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Founder and member of √SkyLINE DemoGroup Auxburg
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Contact me: sAM/SkyLINE » fIDOnET········2:2480/96.23
gERnET·······21:100/1010.23
rENDERrING···511:3000/96.23
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
─═[ End of the iNFOFiLE ]═─
+1
View File
@@ -0,0 +1 @@
/// <reference path="../.astro/types.d.ts" />
+22
View File
@@ -0,0 +1,22 @@
---
import '../styles/global.css';
export interface Props { title: string; description?: string; accentClass?: string; }
const { title, description = 'A 90s BBS/demoscene retro hub.', accentClass = '' } = Astro.props;
---
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{title} :: tHE tEMPLE bBS</title>
<meta name="description" content={description} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content="/og-image.png" />
<link rel="icon" href="/favicon.ico" />
</head>
<body>
<div class={`terminal-frame ${accentClass}`}>
<slot />
</div>
</body>
</html>
File diff suppressed because one or more lines are too long
+22
View File
@@ -0,0 +1,22 @@
export type KeymapEntry = { key: string; href: string; label: string };
export const GLOBAL_NAV_KEYS: KeymapEntry[] = [
{ key: 'B', href: 'back', label: 'Back' },
{ key: 'Q', href: 'disconnect', label: 'Disconnect' },
{ key: 'I', href: '/bbs/legal-notice', label: 'Legal Notice' },
];
export const MENU_KEYS: KeymapEntry[] = [
{ key: 'P', href: '/bbs/pc/phobia', label: 'PHOB!A' },
{ key: 'T', href: '/bbs/pc/trancemission', label: 'Tr@nceMISSION' },
{ key: 'S', href: '/bbs/pc/skyline', label: 'SkyLINE Productions' },
{ key: 'K', href: '/bbs/pc/kosmos-design', label: 'Kosmos Design [KDS]' },
{ key: 'D', href: '/bbs/atari/tropic-dreams', label: 'Tropic DREAMs' },
{ key: 'E', href: '/bbs/amiga/esprit', label: 'ESPRIT Releases' },
{ key: 'M', href: '/bbs/amiga/mods', label: 'MOD Files' },
{ key: 'A', href: '/bbs/fido/ansi-art', label: 'BBS ANSI Art' },
{ key: 'F', href: '/bbs/fido/nodelist', label: 'Fidonets and Nodelists' },
];
export const ALL_KEYS: KeymapEntry[] = [...GLOBAL_NAV_KEYS, ...MENU_KEYS];
export function findKeyEntry(pressedKey: string): KeymapEntry | undefined {
const upper = pressedKey.toUpperCase();
return ALL_KEYS.find((entry) => entry.key === upper);
}
+20
View File
@@ -0,0 +1,20 @@
export async function playLine1Sequence(onComplete: () => void) {
const steps = ['/audio/dial-tone.mp3', '/audio/dtmf-beeps.mp3', '/audio/modem-handshake.mp3'];
for (const src of steps) { await playClip(src); }
onComplete();
}
function playClip(src: string): Promise<void> {
return new Promise((resolve) => {
const audio = new Audio(src);
audio.addEventListener('ended', () => resolve());
audio.addEventListener('error', () => resolve());
audio.play().catch(() => resolve());
});
}
const STORAGE_KEY = 'hasConnected';
export function hasConnectedBefore(): boolean {
if (typeof localStorage === 'undefined') return false;
return localStorage.getItem(STORAGE_KEY) === 'true';
}
export function markConnected() { localStorage.setItem(STORAGE_KEY, 'true'); }
export function resetConnected() { localStorage.removeItem(STORAGE_KEY); }
+68
View File
@@ -0,0 +1,68 @@
---
import { getCollection } from 'astro:content';
import TerminalLayout from '../../../layouts/TerminalLayout.astro';
import TerminalShell from '../../../components/TerminalShell';
import StatusBar from '../../../components/StatusBar.astro';
import NavBar from '../../../components/NavBar.astro';
import AnsiArt from '../../../components/AnsiArt.astro';
import { BANNER_ESPRIT } from '../../../lib/ansiArt';
import LetterFooter from '../../../components/LetterFooter.astro';
const releases = await getCollection('esprit');
---
<TerminalLayout title="ESPRIT Releases" description="Amiga DemoMaker releases and utility discs">
<TerminalShell client:load>
<AnsiArt html={BANNER_ESPRIT} />
<NavBar />
<h1>ESPRIT Releases</h1>
<p>A collection of demos built on the Amiga 500.</p>
{releases.map((release) => (
<div class="release-row">
<div>
<h3>{release.data.title}</h3>
<p>{release.data.description}</p>
<p>Year: {release.data.year ?? '19xx'} &nbsp; Platform: {release.data.platform}</p>
</div>
<a class="diz-box esprit-thumb" href="#" data-img={release.data.screenshot} onclick="return false;">
{release.data.screenshot && <img src={release.data.screenshot} alt={release.data.title} />}
{!release.data.screenshot && release.data.file_id_diz}
</a>
</div>
))}
<NavBar />
<LetterFooter />
<StatusBar />
</TerminalShell>
<div id="esprit-modal" class="modal-overlay" style="display:none;">
<div class="modal-content">
<button class="modal-close" aria-label="Close">&times;</button>
<img id="esprit-modal-img" src="" alt="Screenshot" />
</div>
</div>
<script is:inline>
document.addEventListener('DOMContentLoaded', () => {
const modal = document.getElementById('esprit-modal');
const modalImg = document.getElementById('esprit-modal-img');
document.querySelectorAll('.esprit-thumb').forEach(thumb => {
thumb.addEventListener('click', (e) => {
e.preventDefault();
const img = thumb.getAttribute('data-img');
if (!img) return;
modalImg.src = img;
modal.style.display = 'flex';
});
});
modal.addEventListener('click', (e) => {
if (e.target === modal || e.target.classList.contains('modal-close')) {
modal.style.display = 'none';
modalImg.src = '';
}
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && modal.style.display === 'flex') {
modal.style.display = 'none';
modalImg.src = '';
}
});
});
</script>
</TerminalLayout>

Some files were not shown because too many files have changed in this diff Show More