- canvas fills the entire screen on any device; the 480x640 world is scaled to fit and bottom-aligned so the ground always sits on the bottom edge, with the sky painted full-bleed behind it - the canvas buffer now always matches its laid-out size, so the drawing can never drift out of step with the screen - HUD (score, badge, buffs, toasts, biome banner) moved to screen space so it stays pinned to the real screen edges - sun and stars drawn in screen space so the sky above the play area is not empty - PWA: manifest, service worker (offline), generated app icons and an in-game INSTALL APP button - overlays now dim the whole screen, not just the game strip
126 lines
4.3 KiB
Markdown
126 lines
4.3 KiB
Markdown
# Mineflappy
|
|
|
|
**Minecraft Flappy Bird** — a single-file HTML5 canvas game. No build step, no
|
|
dependencies, no assets. Everything (sprites, font, music, sound) is generated
|
|
in code.
|
|
|
|
```
|
|
open index.html # that's it - it runs straight from the filesystem
|
|
```
|
|
|
|
It fills the whole screen on any device - phone, tablet or desktop - with no
|
|
letterboxing and no border, and it can be installed as a standalone app.
|
|
|
|
---
|
|
|
|
## Deploy to Coolify
|
|
|
|
### Option A - Dockerfile (recommended)
|
|
|
|
The repo ships a `Dockerfile` that serves the game with nginx.
|
|
|
|
1. In Coolify: **New Resource → Application → Public/Private Repository**
|
|
2. **Repository URL**: `http://forgejo-b82b4lpyyzyg40thdsjdd38i.163.245.214.68.sslip.io/David/MINEFLAPPY-GAME.git`
|
|
- Branch: `main`
|
|
- Build Pack: **Dockerfile**
|
|
3. **Dockerfile Location**: `/Dockerfile` (default is fine)
|
|
4. **Port**: `80` — set this under **Networking → Ports exposes**
|
|
5. **Health Check Path**: `/healthz`
|
|
6. Hit **Deploy**.
|
|
7. Add a domain: **Settings → Domains → Add Domain** - e.g. `game.yourdomain.com`
|
|
- Tick **Force HTTPS** and let Coolify/Traefik issue the Let's Encrypt cert.
|
|
- Coolify routes the domain to the container's port 80 automatically.
|
|
|
|
Push a new commit and Coolify rebuilds and redeploys it.
|
|
|
|
> **If you get "502 Bad Gateway"**: the container is healthy, but the proxy
|
|
> can't reach it. The usual cause is an empty **Ports exposes** field — when
|
|
> it's blank Coolify routes to port **3000** instead of 80. Put `80` in that
|
|
> field and redeploy. The bundled `nginx.conf` listens on **both 80 and
|
|
> 3000**, so the game is served either way, but setting the port correctly
|
|
> is still the right fix.
|
|
|
|
### Option B - Static Site (no Dockerfile)
|
|
|
|
If you'd rather not run a container:
|
|
|
|
1. **New Resource → Static Site** with the same repo
|
|
2. **Build Command**: `echo "static"` (there is nothing to build)
|
|
3. **Root Directory**: `/`
|
|
4. Deploy, then attach a domain as above.
|
|
|
|
### Option C - docker compose
|
|
|
|
A `docker-compose.yml` is included if you deploy by compose instead:
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
# game is on http://localhost:8080
|
|
```
|
|
|
|
---
|
|
|
|
## Run it locally with Docker
|
|
|
|
```bash
|
|
docker build -t mineflappy .
|
|
docker run --rm -p 8080:80 mineflappy
|
|
# open http://localhost:8080
|
|
```
|
|
|
|
---
|
|
|
|
## Layout
|
|
|
|
| File | What it is |
|
|
|---|---|
|
|
| `index.html` | The entire game - markup, CSS and JS in one file |
|
|
| `Dockerfile` | nginx:alpine image that serves `index.html` |
|
|
| `nginx.conf` | Server config: no-cache on the game, gzip, `/healthz` |
|
|
| `docker-compose.yml` | Optional compose deployment |
|
|
| `manifest.webmanifest` | Web app manifest - name, icons, standalone display |
|
|
| `sw.js` | Service worker - caches the app so it works offline |
|
|
| `icon-192.png` / `icon-512.png` | App icons (generated from the chicken sprite) |
|
|
| `apple-touch-icon.png` / `favicon-32.png` | iOS home screen + browser tab icons |
|
|
|
|
---
|
|
|
|
## Install it as an app (PWA)
|
|
|
|
The game is a full-screen Progressive Web App:
|
|
|
|
- **iPhone / iPad** - Safari -> Share -> **Add to Home Screen**
|
|
- **Android** - Chrome -> menu -> **Install app**
|
|
- **Desktop Chrome/Edge** - the install icon in the address bar, or the
|
|
**INSTALL APP** button in the corner of the game
|
|
|
|
Installed, it launches fullscreen with no browser chrome, keeps working
|
|
offline, and remembers your score.
|
|
|
|
---
|
|
|
|
## The game
|
|
|
|
Six birds, each with one ability:
|
|
|
|
| Bird | Ability | Effect |
|
|
|---|---|---|
|
|
| Chicken | Double Flap | Every 4th flap is 34% stronger |
|
|
| Enderman | Teleport | Blink 70px forward (refused if a pipe is in the way) |
|
|
| Allay | Allay Magnet | Nearby gems fly to you |
|
|
| Blaze | Melt | Burns away the next pipe, widening its gap |
|
|
| Phantom | Phase | Fly through anything for 1.2s |
|
|
| Wolf | Howl | Slows the whole game to 55% for 2s |
|
|
|
|
Also in: five biomes that change with your score (Plains → Desert → Mineshaft →
|
|
Nether → Ice Peaks), a day/night cycle, weather, gold/bubble/wings/lucky-cube
|
|
pickups, difficulty settings, bird unlocks, per-bird best scores, a daily
|
|
challenge with a shareable code, a ghost of your best run, and 2-player on one
|
|
screen.
|
|
|
|
**Controls** - `Space` / `W` / `↑` / tap to flap, `F` to use your ability,
|
|
`P` to pause, `C` on the game-over screen to change bird. In 2-player mode
|
|
`Space` is player 1 and `↑` is player 2.
|
|
|
|
Progress is stored in `localStorage` under `mineflappy_v2` (per origin, so
|
|
`https://mineflappy.apphub.co.za` keeps its own scores).
|