- HTML 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| conf | ||
| site | ||
| AGENTS.md | ||
| docker-compose.yml | ||
| README.md | ||
CATURDAY
escape while you can
A browser-based ASCII roguelike/puzzle game. Your house has been taken over by cats. You must escape room by room before they corner you — using only the things a normal person has lying around the house.
###### ##### ######## ## ## ###### ###### ##### ## ##
## ## ## ## ## ## ## ## ## ## ## ## ## ##
## ####### ## ## ## ###### ## ## ####### ####
## ## ## ## ## ## ## ## ## ## ## ## ##
###### ## ## ## ##### ## ## ###### ## ## ##
Overview
CATURDAY is a turn-based ASCII puzzle game rendered in a phosphor amber CRT aesthetic. It runs entirely in a single HTML file with no build tools, no dependencies, and no server-side logic. The only external resources are two Google Fonts loaded at runtime.
Target completion time is under 10 minutes. The game is designed to be challenging but fair — every room is solvable with the items available, and there is always a path through.
Gameplay
Objective
Start in your bedroom. Escape through 6 rooms to reach the shed, retrieve your bike, and get out. The cats are not your friends. They were never your friends.
Map
[BEDROOM]
│
[HALLWAY] ── [BATHROOM]
│
[LIVING ROOM] ── [KITCHEN]
│
[GARDEN]
│
[SHED] ← true escape
The bathroom is optional. Everything else is on the critical path.
Controls
| Key | Action |
|---|---|
W A S D or Arrow keys |
Move |
E |
Interact / use selected inventory item on nearest cat |
T |
Take item on or adjacent to current tile |
D |
Drop — opens inventory selector |
I |
Inventory — free action, no turn consumed |
L then direction |
Look at a tile |
C |
Cat-call (friendly sound, unpredictable) |
H |
Hiss (aggressive sound, unpredictable) |
Q |
Pet nearest cat (Cat Whisperer only) |
R |
Restart |
Sprinter: double-tap a direction within 400ms to dash 2 tiles (once per room).
Rescue Worker: press two number keys while in the inventory overlay to combine items.
Game Modes
Chosen after selecting a character trait.
| Mode | Description |
|---|---|
| Race Mode | Each room has a turn budget. Cats grow more agitated as it runs down, entering frenzy in the final 5 turns. Hit zero and they win. |
| Score Mode | No turn limit and no frenzy. Cats behave normally throughout. Every action costs one move. Lower final score is better. |
Character Traits
Chosen at the title screen. Arrow keys or number keys to select. ? or the fourth option for random assignment.
| Trait | Effect |
|---|---|
| Cat Whisperer | Free Q Pet action once per room — freezes one adjacent cat for 2 turns. +20% to all favourable sound outcomes. |
| Rescue Worker | Can combine items into new tools. Item pickup descriptions include combination hints. |
| Sprinter | Double-tap a direction to dash 2 tiles in one turn. Once per room. |
Cat Types
| Symbol | Type | Behaviour | Weakness |
|---|---|---|---|
u |
Loaf | Stationary. Does not move unless disturbed. | Laser pointer, tuna, yarn |
p |
Patrol | Moves back and forth on a fixed path. | Tuna (freeze 3 turns), Sprinter dash, hiss (reverses direction 50%) |
z |
Chaos | Moves to a random adjacent tile each turn. | Cardboard box (traps permanently until room exit), catnip |
B |
Boss | Stationary. Immune to all items except one. | Toy mouse — hand it over, the path clears |
f |
Frozen | Any cat that is currently immobilised. | — |
Cats within 1 tile of the player trigger game over. At Frenzy phase (≤5 turns remaining in Race Mode) that radius expands to 2.
Items
| Item | Found | Effect |
|---|---|---|
| Laser pointer | Bedroom | Moves one cat 2 tiles away |
| Yarn ball | Bedroom | Drops at feet — cats stop for 3 turns if they walk over it |
| House keys | Bedroom (dresser) | Required to unlock front door |
| Tuna can | Kitchen (high cabinet, needs stool) | Freezes one cat for 3 turns |
| Catnip | Bathroom | All cats in room enter frenzy for 4 turns — risky |
| Cardboard box | Living room | Permanently traps one Chaos cat (until you leave) |
| Broom | Kitchen | Pushes one cat back 2 tiles |
| Step stool | Kitchen | Required to reach the tuna can |
| Duct tape | Bathroom | Combine with box or broom |
| Toy mouse | Living room (sofa) | Required to pacify the Boss Cat in the shed |
| Bike lock note | Kitchen (fridge) | Reveals combination “42-7-19” — must be read before leaving the kitchen |
Rescue Worker Combinations
| Ingredients | Result | Effect |
|---|---|---|
| Broom + Yarn ball | Extended Broom | Drops yarn 3 tiles away instead of at feet |
| Cardboard box + Duct tape | Reinforced Box | Can trap Patrol cats as well as Chaos cats |
Turn Limit (Race Mode only)
Each room has a turn budget. When it runs out, the cats win.
| Phase | Turns left | Effect |
|---|---|---|
| Normal | Full → 11 | Nothing |
| Agitated | 10 → 6 | Patrol cats move every turn instead of every other |
| Frenzy | 5 → 1 | All cats gain +1 kill radius, Chaos cats move twice per turn |
| Timeout | 0 | Game over |
Room budgets: Bedroom 45, Bathroom 35, Hallway 40, Living Room 50, Kitchen 55, Garden 30, Shed 25.
Hosting
CATURDAY is a single static HTML file. No build step. No backend.
Caddy
:8080 {
root * /var/www/caturday
file_server
}
Place caturday.html (or rename to index.html) in /var/www/caturday/.
Nginx
server {
listen 80;
root /var/www/caturday;
index index.html;
}
Local testing
python3 -m http.server 8080
Then open http://localhost:8080/caturday.html.
Project Structure
Currently a single-file project. The file is structured in clearly marked sections:
caturday.html
├── <style> CSS — CRT aesthetic, layout, animations
└── <script>
├── CONSTANTS Tile types, cat types, trait definitions
├── ITEM_DEFS All item data (name, description, rescue worker hints)
├── ROOMS Room grid layouts, cat starting positions, item placements
├── LOOK Tile/cat/item description strings
├── GAME STATE initGame(), G object structure
├── ROOM ACCESS enterRoom(), room transitions, backtrack logic
├── LOGGING Message log rendering
├── RENDERING Grid drawing, inventory panel, turn counter
├── CAT AI Patrol, chaos, frenzy, collision detection
├── SOUND Cat-call and hiss probability system
├── ITEMS useItem(), pickUpItem(), Rescue Worker combine
├── MOVEMENT tryMove(), exit detection, Sprinter dash
├── LOOK MODE startLook(), doLook()
├── INTERACT doInteract(), doTake(), doDrop()
├── OVERLAY Inventory overlay, death screen, win screen
├── INPUT keydown handler, mode routing
├── TITLE Trait selection screen logic
└── MODE SELECT Race / Score mode selection screen logic
When the project is split into multiple files, the planned structure is:
caturday/
├── index.html
├── css/
│ └── style.css
├── js/
│ ├── constants.js
│ ├── rooms.js
│ ├── items.js
│ ├── cats.js
│ ├── player.js
│ ├── render.js
│ ├── input.js
│ └── game.js
└── README.md
Known Issues / Current Limitations
- Furniture tiles are defined in the grid string but not all are interactable beyond blocking movement
- The grid uses monospace character rendering — non-standard system fonts may cause slight alignment variance
- No mobile/touch input support
License
TODO: Add license