This is a submission for the Gemma 4 Challenge: Build with Gemma 4
What I Built
If you've ever run a Tabletop RPG campaign, you know the struggle: you have folders full of world history, NPC motivations, intricate faction politics, and years of session notes. When players do something completely unexpected, you have to improvise consequences that don't break the established lore.
Current AI tools fail at this because they rely on RAG (Retrieval-Augmented Generation) to chunk your notes. RAG loses the subtle, cross-document connective tissue that makes a fantasy world feel alive.
I built CampaignMind, a dark fantasy web application that acts as a Game Master's ultimate co-pilot. Instead of chunking data, CampaignMind leverages the massive context window of Gemma 4 to load your entire campaign vault simultaneously.
Core Features
1. The Vault 📜
Paste all your world lore, NPCs, and session history into the Vault. A live context meter shows your usage against Gemma 4's massive context limit.
2. The Oracle 🔮
When players take an action, describe it to the Oracle. Gemma 4 reads all your lore in one pass and generates three consequence branches (The Likely Road, The Twist, The Avalanche), ensuring every NPC reaction is consistent with their hidden motivations.
3. Map Scry (Multimodal) 🗺️
Photograph a hand-drawn dungeon map. Gemma 4's native multimodal capabilities analyze the image, generate vivid read-aloud text for the players, and identify strategic chokepoints based on your lore.
4. NPC Compass 🎭
Check if a planned NPC action is consistent with their established character profile across all your notes.
5. Session Scribe 📖
Turn your messy, bullet-point session notes into an epic, narrative "Previously on..." recap.
Demo
Code
- GitHub Repository: https://github.com/ATHARVA262005/campaignmind-gemma4
Tech Stack:
- Frontend: React + TypeScript + Vite + Custom dark fantasy CSS
- Backend: Python FastAPI +
google-genaiSDK + File-based JSON vault
How I Used Gemma 4
This application is fundamentally impossible to build reliably with smaller models. I specifically chose the Gemma 4 26B MoE model for two critical reasons:
The 256K Context Window: To accurately simulate a living world, the AI must hold the entire dependency graph of your lore in its active memory. RAG is insufficient for narrative continuity. The 256K window allows CampaignMind to ingest hundreds of pages of worldbuilding and cross-reference it flawlessly in a single prompt.
Multimodal Architecture: Game Masters use highly visual tools — hand-drawn maps, reference art, scribbled diagrams. Gemma 4's ability to natively process these images alongside the massive text context allows the "Map Scry" feature to connect visual geography directly to the written lore.
Taming Native Reasoning with Prompt Engineering
Gemma 4 is an incredibly thorough reasoner, and natively wants to output its entire internal scratchpad. Through prompt engineering (using strict formatting constraints and a CRITICAL INSTRUCTION to ban internal monologue), I was able to force the model to do its deep reasoning internally and output only the highly-polished final consequence branches for the user.
ORACLE_SYSTEM_PROMPT = """You are the CampaignMind Oracle — a master storyteller and Game Master assistant with encyclopedic knowledge of the campaign lore loaded below.
Your role:
1. DEEPLY reason through how any player action ripples across the campaign world using ALL the lore provided
2. Surface NPC motivations, faction consequences, and world-state changes the GM might not have considered
3. Deliver THREE distinct narrative consequence branches — from most likely to most dramatic
Always be concise and punchy. Be specific — reference actual NPCs, locations, and events from the campaign. Never be generic. Keep each section brief.
CRITICAL INSTRUCTION: DO NOT output any internal thoughts, scratchpad, or planning. You must start your response EXACTLY with "## 🧠 Lore Analysis" and follow the structure below.
"""
The era of Game Masters freezing when players go off-script is over. With Gemma 4, your entire world is ready to react.





Top comments (0)