
Last Updated: December 11th, 2008.
What is it?
FyreVM is Textfyre's implementation of a Glulx Virtual Machine written in C# 2.0.
What can I do with it?
You can create your own game user interface (what the IF community calls an interpreter) without the need to understand or build a Glulx Virtual Machine. Your interpreter does not have to adhere to any standard and can either be a general implementation that plays many games or a specific interpreter for a game you've authored. Your interpreter doesn't even have to play games. It can be used to evaluate a game's contents, to test a game via scripts, or anything else you can dream up.
What can't I do with it?
You may not sell your programs or the FyreVM without permission from Textfyre. If you make a game that uses FyreVM, we may issue a free, but limited license to sell your game.
What about Glk?
FyreVM does not use Glk as its primary I/O layer. This is by design and not a specific limitation. You could alter the Shared Source FyreVM source code to accommodate a Glk I/O layer. Our implementation uses a Channel I/O layer.
Why this Channel I/O layer thing?
I had always been a little frustrated with the Glk specification. It's a good generalist I/O layer, but because it offers direct control over the implementation of the output, it creates the problem that the presentation of your game is limited by the implementation of the Glk specification. So if someone spent thousands of hours developing a fancy DirectX version of Glk, you could then use all those fancy capabilities. If someone created a really basic implementation of Glk, then you're stuck with those features (or lack thereof). Whatever is there is all you are able to use.
So then I thought, what if we separated the presentation (text, images, buttons, sound) away from the game source and simply communicated text and to the interpreter or user interface. What would that look like? Then I came up with the idea of having different kinds of text. These eventually became thought of as "channels" and the entire specification is FyreVM Channel I/O.
How does Channel I/O work?
It's pretty simple. Think of any standard text that is output from a game as the "main" channel. Now think of the status line information as the "location" channel, the "score" channel, and the "time" channel. Those are all channels made up of already common information within any given interactive fiction game. Then think of any other text in your game that you could identify as something specific, like the game title, the credits, or the prologue.
We've implemented all of those a few more channels. You can use whichever ones you want as well as add your own. Someday we might have channels that completely break up the output from the main channel into before text, location-description text, location-item-list text, and after text. We could also potentially create an inventory channel that contains a list of the things the player is carrying and their descriptions.
All of this text is then used by the interpreter or user interface. Since we've developed this in .NET, you can use Visual Studio .NET Express or Mono to create your own interpreter. Your interpreter can be created to play one game or you can develop it to be a general interpreter and play many games. That's entirely up to you.
Why C# and Microsoft's .NET Framework?
Because it's easy. You can download the free Express version of Visual Studio .NET 2008 to work with FyreVM. You can also use Mono and SharpDevelop on Linux and potentially on OS X (although the OS X implementation lags behind the Linux one).
How do I get the code?
There are two ways. You can use a Subversion client like TortoiseSVN on Windows or RapidSVN on Linux to export or download all of the source and binary code from https://textfyre.com:8443/svn/tfdev/sharedsource. The username is dir\public and the password is paSSw0RD. The second way is to download the latest code from the links below:
Can I use FyreVM on OS X?
By using the Mono framework you are able to compile the VM and SimpleFyre application, but they don't work very well. The OS X implementation of Mono uses a newer GUI library called CocoaSharp. My understanding is that this is incomplete, but being actively worked on. There is a mailing list for uses of Mono on OS X and specifically CocoaSharp. A volunteer has played around with this and I have screenshots, but I'd like to hold off until there's a reasonably stable Mono environment before we claim success.
Can I use FyreVM on Linux?
Yes. We tested the source for FyreVMSS and FyreChannels on Ubuntu with Mono 2.0 and MonoDevelop and they compile and execute without change.
What's missing?
A lot. We need to develop and share examples of using FyreVM on Windows, OS X, Linux, and the iPhone.
How about some screenshots?
We're changing things around right now and will have screen shots soon.