Marooned is a miniature text adventure game for unexpanded VIC-20. It's "miniature" because it's a proof-of-concept for my sub-1K interactive fiction engine VICfiction. Once the engine has been completed, I'll use it as the basis for 8K or 16K interactive fiction titles on cartridge.
Commands are of the one- or two-word "verb item" type. The basic vocabulary is
L for LOOK
I for INVENTORY
N,S,E,W,U,D for GO
In addition to the above, any verb or item can be abbreviated using its first and last letters.
For example, DP can be used as a shortcut for DROP.
The unexpanded game is pretty spare, with six rooms and about a dozen items. Still, it should provide a fun few minutes in honor of this month's upcoming Talk Like a Pirate Day.
I'd appreciate any feedback, and more full-featured stories are on the way!
This will be open-source, as my stuff always is. But I'll probably make the repo available with the release of the first full-size story, Anzu. At that point, VICfiction's data format will be complete.
Last edited by chysn on Thu Sep 08, 2022 8:08 pm, edited 4 times in total.
VIC-20 Projects: wAx Assembler, TRBo: Turtle RescueBot, Helix Colony, Sub Med, Trolley Problem, Dungeon of Dance, ZEPTOPOLIS, MIDI KERNAL, The Archivist, Ed for Prophet-5
I added about 64 bytes of additional weight to the VICfiction engine. In exchange, it now has the following features:
* Six directions (including Up and Down), which actually made the engine smaller
* Item exclude condition (e.g., the sheriff won't let you into town if you're carrying a weapon)
* "Is Global" item property to skip the in-room check (e.g., SUMMON FALCON)
* Entering a room can now trigger a specified action
* A flexible timer, which can trigger a specified action
The timer is cool, and is more of a luxury. It can be configured to count up from an offset (like a clock) or down (like a bomb). Its display can be attached to any object. It can trigger any action (something big like a game loss, or something small like an item or event) at a predetermined time. The timer can also be triggered by any other action (e.g., PUSH BUTTON) during play.
(By the way, "actions" are 9-byte data structures with three kinds of conditions: If-In-Inventory, If-In-Room, and If-Not-In-Inventory. Each condition's item id can be set to 0, meaning it doesn't factor into success or failure. After the condition is evaluated, there are several kinds of results, like moving an item to the current room, replacing an item with another, replacing an invisible placeholder with something visible, moving the player to a specified room, removing an item, ending the game, etc. Actions "cascade," and additional applicable actions can have different conditions, so fairly complex behavior can be created. Each action has a "success" or "failure" message address associated with it. Items themselves have only one state, their current room id. Interaction is done by replacement and reassignment. For example, there are two Treasure Chests in Marooned, one open and one locked. When the Chest is opened with the Key, two actions are run. One replaces the locked chest with the open chest, and another moves the Rum into the room from no-room. The open Chest has no actions, which is why you can't open the Chest twice. Concepts like "open" and "locked" (or any other state) have no inherent meaning to the engine, which makes all of this pretty powerful.)
My goal isn't to reproduce every behavior possible, but to give myself a lot of design space for 16K+ games. I keep thinking of new "recipes" for behaviors I see in other adventure games.