LLM fixes: - _try_repair_json() — ripara JSON malformato (apici, virgole trailing) - _strip_json_from_text() — rimuove residui JSON dalla narration - parse_tool_call() — rimuove troncamento 200 caratteri dal fallback DM fixes: - Fallback euristico quando params vuoti (dm.py) - Estrazione narrazione da dm_override/narrate params.params.text Prompt (prompts.py): - Vietati termini tecnici/scientifici/anacronistici (HPLC, laser, ...) - Aggiunto vocabolario fantasy obbligatorio Server (server.py): - dm_cycle in ThreadPoolExecutor per non bloccare WS ping - WebSocketDisconnect gestiti - Rimosso import inesistente db_schema Frontend (index.html): - Nascosti tool name dalla chat - Personaggio -> PG, connessioni aree con nomi Infrastruttura: - Switch da openrouter/free a DeepSeek V4 Flash via OpenCode Go - pyproject.toml, Dockerfile, docker-compose.yml, start.sh - .env auto-load (start.sh) - Funnel Lv0 (funnel.py) — creazione PG livello 0 Docs: architecture, database, setup, game mechanics, codebase ref
3.0 KiB
3.0 KiB
Game Mechanics (DCC RPG)
Sistema Base
D20 + CD
- CD 12 = facile, CD 15 = media, CD 18 = difficile
- Tiro = d20 + modificatore ≥ CD → successo
- 20 naturale = critico (successo automatico)
- 1 naturale = fumble (fallimento automatico)
Dadi del Gioco (DCC Dice Chain)
d3 → d4 → d5 → d6 → d7 → d8 → d10 → d12 → d14 → d16 → d20 → d24 → d30
Usata per progressioni e meccaniche speciali.
Classi Implementate (7)
| Classe | Dado Vita | Dado Cimento | Abilità Speciale | Critico |
|---|---|---|---|---|
| Guerriero | d8 | d3→d5 | Mighty Deed (d3→d5+), bonus attacco | IV/V |
| Nano | d10 | d3→d5 | Resistenza veleno,感知 trappole | III/IV/V |
| Elfo | d6 | d4→d7 | Infravisione, percezione porte segrete | II |
| Halfling | d6 | d4→d7 | Resistenza, abilità nascondersi | III |
| Ladro | d6 | d4→d7 | Abilità ladro (furtivo, scassinare, ecc.) | II |
| Chierico | d8 | d4→d7 | Scacciare non-morti, incantesimi divini | III |
| Mago | d4 | d4→d7 | Incantesimi arcani, familiar | I |
| Lv0 | d4 | — | Nessuna | I |
Mighty Deed (Guerriero)
Prima dell'attacco, dichiara un'impresa (es. "sbalzare lo scudo", "accecare"). Tira d3 (lv1-4), poi d4/d5 a lv superiori. Se deed ≥ 3, attacco colpisce automaticamente SE l'attacco normale colpisce. Se deed = risultato massimo, effetto speciale narrativo.
Combattimento
Flusso
- Iniziativa: d20 (più alto → primo)
- Attacco: d20 + bonus attacco vs CA bersaglio
- Danno: dado arma + bonus (modificatori)
- PF: sottratti, mostro morto se PF ≤ 0
CA e Armature
| Armatura | CA | Dado Fumble |
|---|---|---|
| Nessuna | 10 | d4 |
| Leggera (cuoio) | 12 | d8 |
| Media (maglia) | 14 | d12 |
| Pesante (piastre) | 16 | d16 |
| Scudo | +1 CA | — |
Tiri Salvezza
- Tempra: veleno, malattia, resistenza fisica
- Riflessi: trappole, esplosioni, schivare
- Volontà: magia, paura, illusione
Incantesimi
Spell Check
Tiro = d20 + bonus (non modificatore Intelligenza — è un tiro speciale)
| Tiro | Tier | Effetto |
|---|---|---|
| 1 | Corruzione | Fallimento critico + corruzione/ritorsione |
| < CD | Fallimento | Nessun effetto |
| ≤ 11 | Minore | Effetto base |
| ≤ 17 | Moderato | Effetto migliorato |
| ≤ 19 | Maggiore | Effetto potente |
| 20+ | Massimo | Effetto devastante |
Corruzione
- Su tiro 1 (sempre)
- Su tiro ≥ 12 se d20 subsequente = 1
- Può causare: mutazioni, danni, follia
PE e Avanzamento
| Risultato | PE |
|---|---|
| Sconfiggere nemico | 50-75 |
| Superare prova difficile | 10-20 |
| Soluzione creativa | 25-50 |
| Sopravvivenza area | 30-50 |
| Avanzamento lv0 → lv1 | 10 PE (automatico) |
Classi e Abilità Speciali
Abilità Ladro (dado dedicato)
- Furtività, Scassinare, Percezione, Acrobazia
- Uso dado abilità (d4→d7 a seconda del livello)
Scacciare Non-Morti (Chierico)
Tiro d20 + bonus (Volontà ?) vs dado vita del non-morto. Successo: fuga o distruzione.
Infravisione (Nano, Elfo, Halfling)
Vedere nel buio fino a 18m (Nano), 9m (Elfo/Halfling).