KapiRPG: Progetto Estivo tra Nostalgia e AI

Estate 2024. Caldo. Ferie. Tempo libero.

Invece di stare in spiaggia, ho fatto quello che fa qualsiasi IT nerd che si rispetti: ho codato un progetto nostalgico.

Nasce KapiRPG: un gioco di ruolo testuale che mixa MUD anni ‘90 e AI moderna.

L’origine: nostalgia MUD

Chi ha vissuto internet fine anni ‘90 ricorda i MUD (Multi-User Dungeon):

  • Giochi testuali multiplayer
  • Mondi da esplorare con comandi: north, attack goblin, take sword
  • Fantasia, avventura, community
  • Zero grafica, 100% immaginazione

Ho passato centinaia di ore su MUD italiani. Mondi fantastici descritti solo con parole. Combattimenti epici in ASCII art.

Volevo ricreare quella magia.

L’idea: MUD + AI = KapiRPG

Cosa succederebbe se un MUD tradizionale incontrasse una AI moderna?

Invece di:

  • Stanze predefinite con descrizioni statiche
  • NPC con dialoghi scriptati
  • Quest lineari e prevedibili

Avremmo:

  • Mondi generati dinamicamente dall’AI
  • NPC con personalità emergente che rispondono in modo naturale
  • Quest uniche ogni volta che giochi
  • Narrazione adattiva alle scelte del giocatore

Un MUD che non giochi due volte nello stesso modo.

Stack tecnico

Core

  • Python 3.11: Linguaggio principale
  • Ollama: LLM locale (Llama 3, Mistral)
  • SQLite: Persistenza game state
  • Rich: Output terminale colorato e formattato

Architettura

KapiRPG/
├── engine/          # Game engine core
│   ├── world.py     # World generation
│   ├── npc.py       # NPC AI behavior
│   ├── combat.py    # Combat system
│   └── quest.py     # Quest generator
├── ai/              # AI integration
│   ├── ollama.py    # Ollama API wrapper
│   ├── prompts.py   # Prompt engineering
│   └── context.py   # Context management
├── ui/              # User interface
│   ├── terminal.py  # CLI interface
│   └── commands.py  # Command parser
└── data/            # Game data
    ├── db/          # SQLite databases
    └── saves/       # Save files

Modulare. Testabile. Espandibile.

Features principali

1. World Generation

Il mondo non è pre-costruito. È generato dall’AI al volo:

> north

Procedi verso nord attraverso una fitta foresta di querce.
Il sentiero si fa stretto e tortuoso. Senti rumori tra gli alberi.

Davanti a te si apre una radura con un'antica fontana di pietra.
L'acqua è cristallina ma immobile, come se il tempo si fosse fermato.

[Puoi andare: north, east, west]
[Vedi: fontana antica, sentiero nel bosco, tracce sul terreno]

Ogni descrizione è unica. L’AI crea dettagli coerenti con il contesto.

2. NPC Intelligenti

Gli NPC non hanno dialoghi scriptati. Hanno personalità:

> talk to merchant

[Mercante Grimwald]
"Ah, un avventuriero! Benvenuto nella mia umile bottega.
Cosa cerchi? Armi? Pozioni? O forse... informazioni?"

> ask about the fountain

[Mercante Grimwald]
"La fontana? Ah, quella è antica quanto il bosco stesso.
Si dice che chi beve la sua acqua veda la verità... ma a quale prezzo?
Io non ci andrei, se fossi in te. Ma tu sei giovane e coraggioso.
O forse solo incosciente." *ride sarcasticamente*

L’NPC ricorda conversazioni precedenti. Reagisce alle tue azioni. Ha memoria e personalità coerente.

3. Combat System

Combattimento a turni con elementi casuali e strategia:

> attack goblin

Attacchi il Goblin Predone con la tua spada arrugginita!

[Goblin HP: 100 → 75]
Colpo riuscito! (-25 HP)

[Turno del nemico]
Il Goblin Predone contrattacca con il suo pugnale!

[Your HP: 100 → 90]
Vieni colpito! (-10 HP)

[Azioni: attack, defend, use item, flee]
>

L’AI genera descrizioni narrative del combattimento, rendendo ogni scontro unico.

4. Quest Dinamiche

Le quest sono generate in base a:

  • Livello personaggio
  • Posizione nel mondo
  • Scelte precedenti
  • NPC incontrati
[Nuova Quest: La Verità della Fontana]

Il Mercante Grimwald ti ha parlato della fontana antica.
Qualcosa nella sua voce tradisce paura... o forse rimpianto?

Obiettivi:
- Scopri la storia della fontana
- Decidi se bere l'acqua
- Affronta le conseguenze della tua scelta

Ricompensa: ???

Ogni quest ha multiple soluzioni. Le conseguenze sono emergenti, non predefinite.

5. Persistent World

Il mondo evolve anche quando non giochi:

  • NPC si muovono, commerciano, interagiscono
  • Eventi casuali modificano locations
  • Scelte pregresse influenzano il mondo

Torna dopo una settimana: il mondo è cambiato.

Challenges tecniche

1. Gestione Context Window

LLM hanno limiti di context. Soluzione:

  • Summarization progressiva: eventi vecchi vengono riassunti
  • Memory tiering: memoria a breve/medio/lungo termine
  • Selective context: solo info rilevanti passate al LLM

2. Response Time

Ollama locale è veloce, ma non istantaneo. Soluzione:

  • Streaming output: response appare man mano
  • Caching: risposte comuni cached
  • Parallel generation: genera descrizioni future in background

3. Coerenza Narrativa

L’AI può contraddirsi. Soluzione:

  • World state tracking: DB con fatti immutabili
  • Consistency prompts: prompt che rafforzano coerenza
  • Validation layer: check logico prima di output

4. Bilanciamento Gameplay

AI può generare quest impossibili o banali. Soluzione:

  • Difficulty adjustment: parametri dinamici basati su performance
  • Safety rails: limiti su reward, challenge level
  • Playtesting data: feedback loop per migliorare generation

Cosa ho imparato

1. Prompt Engineering è una skill

Creare prompt che generano output coerenti e interessanti è arte e scienza:

  • Template strutturati
  • Few-shot examples
  • Constraint specification
  • Tone guidance

Non è solo “scrivi una storia”. È molto più complesso.

2. LLM locali sono viable

Ollama con Llama 3 8B è impressionante:

  • Veloce su hardware consumer
  • Qualità output alta
  • Zero costi API
  • Privacy completa

Non serve GPT-4 per tutto.

3. Nostalgia + Modern Tech = Magic

Combinare il fascino dei MUD con capacità moderne crea esperienza unica:

  • Semplicità testuale
  • Profondità narrativa AI-generated
  • Nostalgia + innovazione

Il vecchio può rinascere con strumenti nuovi.

Stato progetto

KapiRPG è playable alpha:

  • Core mechanics: ✓
  • AI integration: ✓
  • Basic UI: ✓
  • Save/Load: ✓

Work in progress:

  • Multiplayer (MUD vero)
  • Web interface
  • Mobile companion app
  • Content generation tools per modders

Provalo

Repo: github.com/stanzinofree/kapirpg

Quick start

# Clone repo
git clone https://github.com/stanzinofree/kapirpg
cd kapirpg

# Install dependencies
pip install -r requirements.txt

# Install Ollama e pull model
ollama pull llama3

# Run game
python main.py

Requirements

  • Python 3.11+
  • Ollama installed
  • 8GB RAM (per model)
  • Immaginazione e senso dell’avventura

Filosofia capibara

KapiRPG è sviluppato in modalità capibara:

  • No rush: Sviluppo quando ho tempo e voglia
  • No over-engineering: Codice semplice e manutenibile
  • No hype-chasing: Tecnologie che conosco e funzionano
  • Fun first: Se non mi diverto a svilupparlo, non ha senso

È un progetto per passione, non per profitto.

Futuro

Idee per il futuro (se/quando avrò tempo):

  • Campaign mode: Storie lunghe e articolate
  • Modding support: Community-created content
  • Voice integration: Comandi vocali e narrazione audio
  • VR mode: Perché no? Text + immersive environment

Ma senza pressione. Quando capita, capita.

Conclusione

KapiRPG è:

  • Un esperimento con AI locale
  • Un tributo ai MUD che amavo
  • Un progetto estivo che mi ha fatto divertire
  • Una demo di cosa si può fare con tool moderni

Non cambierà il mondo. Non diventerà virale.

Ma mi ha fatto passare un’estate fantastica a codare qualcosa che mi appassiona.

E questo è sufficiente.


Avventuriero, il mondo di KapiRPG ti aspetta. Sei pronto?

🦫🎲⚔️

Repo: github.com/stanzinofree/kapirpg