KAZIK/AGENTS.md
Игорь Федосеев 5dedaf459f fix: restore fortune AI and add model setup
Restore native inference, card-bound readings and paged dialogue.

Provide manual, checksum-verified model setup instead of Git LFS so
source checkouts work without uploading multi-gigabyte weights. The
game stays offline; complete release archives still bundle the model.
2026-10-31 00:37:36 +03:00

75 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AGENTS.md
## Project identity
Single-file x86 assembly (MASM32) Windows console casino game with retro 2.5D raycaster engine. Source: `poker.asm` (~8500 lines). Python scripts are offline tools for asset generation and previewing animations — not part of the game runtime itself.
The game runtime must remain assembly-only: rendering, gameplay, animation,
input, networking, and any future platform ports must be implemented in
assembly. Do not add a C/C++ core, a second non-assembly game implementation,
or a compiler fallback that substitutes one for the MASM executable.
Offline asset generators and tests are not the game runtime. The existing
C# packaging utilities must not be described as assembly code.
User-approved exception (2026-10-21): the fortune teller may use a bundled,
offline C++ neural inference worker based on llama.cpp. This exception is only
for model inference and text generation. The game, UI, card selection, rendering,
input and gameplay remain assembly-only. Do not add a cloud API, Ollama install
requirement or runtime model downloader. Ship the model with the distribution.
User-approved source setup (2026-10-31): a separate, manually launched
`download_fortune_model.bat` may download pinned, SHA-256-verified weights after
copying/cloning the repository. The game must never invoke this downloader.
Complete offline release archives must still include the model.
## Directory Structure
- **Root**: Core MASM32 game (`poker.asm`, `casino3d.inc`, `casino3d_data.inc`, `font8x8.inc`, `build.bat`, `poker.exe`).
- **`dist/`**: Compiled desktop distribution launchers (`Assembler Casino.exe`, `Uninstall Assembler Casino.exe`).
- **`build/`**: C# source code for launchers and installers.
- **`tools/`**: Internal developer tooling and pipelines:
- `tools/previews/`: Terminal ANSI animation and 3D engine previews (`preview_intro.bat`, `preview_hakari.bat`, `preview_dbd_hook.bat`, `preview_casino3d.bat`).
- `tools/generators/`: Offline asset compilers, math lookup tables, and assembly generators.
- `tools/tests/`: Render simulation (`simulate_render.py`), release smoke checks, and achievement popup helpers.
- **`assets/`**: Media files (audio `.wav`, ANSI `.ans`, textures `.bin`, icons).
- **`docs/`**: Documentation, cheat codes, ideas backlog, and technical guides.
- **`backups/`**: Historical archives and pre-feature checkpoints.
## Build
- **Assembler**: `ml /c /coff /Cp /nologo poker.asm`
- **Link**: `link /SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0 /LIBPATH:"<MASM32>\lib" poker.obj kernel32.lib winmm.lib user32.lib ws2_32.lib gdi32.lib`
- **IDE project**: `poker.wap` (Pelles C/Windows)
- **Libraries**: `kernel32.lib`, `winmm.lib`, `user32.lib`, `ws2_32.lib`, `gdi32.lib`
- **Build script**: `build.bat` (uses MASM32 from `D:\MASM32\masm32` or MSVC BuildTools)
Requires MASM32 toolchain or MSVC BuildTools (`ml.exe`, `link.exe`).
## Encoding
- Source strings, `dealer_phrases.txt`: **CP1251** (Windows-1251). Do not re-save as UTF-8.
- `.ans` animation files: ANSI escape codes + CP1251, frames separated by form feed (`\f`, 0x0C).
- Preview scripts run `chcp 65001` before printing.
## Assets
| File | Purpose |
|------|---------|
| `assets/animations/casino_intro.ans` | Animated intro (skippable with Enter, loops at `@@LOOP@@` marker) |
| `assets/animations/hakari_dance.ans` | Animated dance on jackpot win |
| `assets/animations/dbd_hook.ans` | Dead by Daylight hook skill-check mini-game animation |
| `assets/data/dealer_phrases.txt` | CP1251, each line prefixed `W|` (win), `L|` (loss), `D|` (draw) |
| `assets/textures/casino3d-hd.bin` | Packed 48 slots (128×128 BGRA) 3D raycaster textures |
## Workflow
- **Git remote**: `https://git.silverstone.crazedns.ru/Billi_Bob/KAZIK.git` (branch `main`).
- Backups in `backups/` follow: `poker_before_<feature>_<YYYYMMDD_HHMMSS>.{asm,exe}`
- **No tests**. Manually verify by running `poker.exe`.
- Preview animations: `tools/previews/preview_hakari.bat` / `tools/previews/preview_intro.bat` (or `python tools/previews/preview_hakari.py` directly).
## Games (menu)
1=21/Blackjack, 2=Poker, 3=CloverPit (slots 5×3), 4=Russian Roulette, 5=Skulls & cups, 6=Coin, 7=Dice, 8=Roulette, 9=Slot machine, 10=Durak, 11=Training, 12=Observer AI vs AI, 0=Exit
Cheat codes: `MONEYRAIN`, `SEVENS`, `WINNEXT`, `GODMODE`, `FAIRPLAY`, `GOAL`, `RESETBANK`, `EASYAI`/`NORMALAI`/`HARDAI`, `JACKPOT`, `HIGHROLLER`, `DOUBLECASH`, `ONEBUCK` (entered at main menu).