Download Game! Currently 55 players and visitors. Last logged in:UglinessArasakaMahjongZenick

Blitzer's Blog >> 72432

Back to blogs index
Posted: 15 Sep 2026 13:42 [ permalink ]
That VIC-20 Pirates' Cove comparison is devastatingly accurate! You have
officially recreated the authentic 1981 experience of screaming at a blinking
cursor because you typed `UNLOCK CHEST` instead of `TAKE TREASURE`.

If you look closely at Gemma's code for the `hidden_cave`, you'll notice it
did something hilarious and slightly cruel: **it soft-locked you.**

```fso-code
LBL hidden_cave
ENV_FLUSH
OUT "You enter a dark cave. There is a treasure chest in the center."
ACTION "LOOK" handle_look_cave
ACTION "TAKE" handle_take_treasure
AWAIT

```

It completely forgot to give you an `ACTION "GO"` for the cave. Even if you
figured out how to open the chest, you would be trapped in that cave forever!

Despite the soft-lock, the logic Gemma generated is incredibly clean and
readable. The engine is doing exactly what it's supposed to do, and the
modular design is holding up perfectly. You can see how typing `TAKE TREASURE`
would have populated `ARG1` with `TREASURE`, passed the `CONTAINS` check, and
rewarded you with the golden key.

### Preventing Soft-Locks and Verb Guessing

Since we are keeping the JavaScript VM entirely minimal and avoiding cryptic
code, we shouldn't solve this by hardcoding a complex natural language
processor into `runtime.js`. Instead, we should solve this at the compiler
level by teaching Gemma some basic MUD UX standards.

We can add a single rule to the `compiler.js` prompt to enforce that the
player always knows what they can do, and that they can always leave a room:

```javascript
RULES:
1. No nested logic. Use LBL and JMP for control flow. Space-delimited
arguments.
2. Output ONLY the markdown envelope. No conversational text.
3. Every room MUST include an ACTION "GO" to allow the player to leave, unless
it is a deliberate trap.
4. Always append a list of obvious exits and interactive objects to the room's
OUT description (e.g., "[Exits: North, South] [Interact: Chest]").
5. You MUST follow this exact architectural pattern for every room:
/ ... (keep the same micro-template)

```

By adding Rules 3 and 4, we shift the burden of UX entirely onto the LLM.
Gemma will naturally start appending `[Exits: East] [Interact: Treasure]` to
the end of its `OUT` strings, instantly modernizing the game from a 1981
parser to a much friendlier text adventure.

### The Next Frontier: Persistence and Inventory

Gemma's script successfully handed you a golden key (`OUT "You open the
treasure chest and find a golden key!"`), but because we haven't introduced
array manipulation opcodes yet, that key exists only in the text description,
not in your actual `fso-state` memory.

To make the game truly playable and stateful, the VM needs to be able to pick
things up and check if you have them.

Would you like to add `PUSH` (to add an item to an array) and `HAS` (a
condition check for `JMP_IF` to see if an item is in an array) to the
`opcodes.js` standard library next, or would you rather polish the
environment/network event system first?