# Casual Crusade js13k card/dungeon, domino-card placement with BFS scoring. ```{raw} html ▶ Run in browser
``` **Tags:** `port` `tier-1` # Casual Crusade (SimVX port) A SimVX port of [Antti Haavikko's js13k 2023 entry](https://github.com/anttihaavikko/casual-crusade), a card-laying dungeon-crawler / domino puzzle. ## Run All commands assume `cwd = /home/fezzik/dev/simvx`. ```bash # Interactive (windowed) uv run python ported_games/casual_crusade/simvx_port/main.py # Headless capture (frames 30, 60, 120) uv run python ported_games/casual_crusade/simvx_port/main.py --test # Scripted multi-stage harness (7 captures) uv run python ported_games/casual_crusade/simvx_port/harness.py # Web export uv run simvx export web ported_games/casual_crusade/simvx_port/main.py \ -o ported_games/casual_crusade/simvx_port/web/index.html ``` ## Controls | Action | Input | |---|---| | Place card | Drag from hand onto a legal (highlighted) tile | | Cancel drag | Right-click | | Save run | `S` | | Load run | `L` | | Restart | `R` | ## Gameplay summary - Each card has 1-4 directional edges. Place a card so at least one edge meets a matching neighbour edge on the board. - The pilgrim walks the new path through connected cards, scoring along the way. - Stepping on a card next to a chest loots it, opening a reward picker, picking one card to add to your permanent deck. - Empty (non-reward) tiles at level end cost one life each. Run ends when life reaches zero. Press `R` to restart. ## File map ``` simvx_port/ ├── main.py # entry point + InputMap registration ├── harness.py # scripted-input capture (7 stages) ├── pyproject.toml # [tool.simvx] root = "CasualCrusadeRoot" ├── nodes/ │ ├── constants.py # widths/colours/level titles │ ├── card_data.py # CardData + random_card + starter_deck │ ├── card.py # Card (drag, hover, draw) │ ├── tile.py # Tile (board cell, accepts/marked/hilite) │ ├── dude.py # pilgrim (path-walk + draw) │ └── game.py # Game (board, hand, scoring, picker, save/load) ├── saves/ # JSON save (created on first save) ├── screenshots/ # 7 harness + 3 idle captures └── web/index.html # 2.5 MB self-contained Pyodide bundle ``` ## Source ```{literalinclude} ../../examples/ports/casual_crusade/main.py :language: python :linenos: ```