So it’s pretty clear to me that TADS 3 is a vastly superior system than Inform 7 in many of the mechanics. Presentation-wise, maybe not so much. But the underlying mechanics? Yeah. Much better. That’s an opinion but it’s a strong one on my part. The one thing I’ve heard is that one reason people still want to stick with the clunky z-machine or the apparently not-so-clunky Glulx/g-machine is because those can be played on a browser. If that’s one of the major things holding TADS back, I’d like to see about developing a browser-playable interpreter.
Has anyone started work in this area? Beyond the Jetty I found (that only works for TADS 2), are there any projects people are aware of that have been started? Whether or not there is, what have the thoughts been regarding technology implementation?
I’m curious what people think. If nothing else, I think this would be an interesting coding challenge.
One project that is currently under development is the online part of Tads 3. This is done by Mike Roberts himself. It should normally have been released by now, but real-life work got the better of him and so it got delayed. From what I know, it’s in good shape and he just needs a bit of time for wrapping it all up and doing the release.
For more info, you can browse the posts on the official Tads 3 blog:
(Scroll down a bit to get to the relevant, 3-part series of posts about Tads networking support.)
In the web application arena, I only know of two projects underway.
Wei-ju is adding TADS 3 support to ZMPP, which is JVM based. That could eventually lead to an applet or provide the server side of an AJAX client interface. I am more interested in it as the core of a Kindle publishing option.
MJR is adding web server capabilities to the main TADS virtual machine. When finished this can be used to deploy a TADS server in a suitable hosting environment; players would use a web browser to connect. My tentative plan is to add Webkit to Gargoyle and offer a desktop client that consumes the web output.
A Flash or Silverlight-based app would definitely fill a need, both now and down the road. Even with the options above, there’d be no provision for an author who just wants a quick and attractive way to deploy games on commodity web hosting. Something like Leaflet would be a big step forward.
The TADS3 VM is orders more complex than the Z-Machine and Glulx, so it’s little surprise that there is only the reference implementation currently. Wei-ju should be commended for making the second implementation ever.
I think that a pure JS interpreter is possible, but it will be difficult. I’m currently working on a generic VM system (ifvms.js at my Github) and am thinking that I’ll at least write a disassembler for it. I think it would be great if a team worked on it though, each person taking a chapter of the VM spec for example.
When I started working on a TADS3 VM, I initially thought “yeah cool, a Smalltalk-like VM for IF”.
Having put quite a bit of work into the implementation, I have learned to appreciate what the Z-Machine and Glulx offer to a VM implementor: awesome, comprehensive technical documentation, simple elegant designs and reference implementations that are easy to understand. You are actually able to write a VM by reading the specifications alone, that’s how good the specifications are.
The T3 documentation is huge - yet I would say it is impossible to write a VM by reading the specification alone, you do need to look at the reference implementation, which is not nearly as easy to understand as e.g. Glulxe. There are also some aspects of TADS3 which make it hard to simply reuse what your implementation language already offers, e.g. containers and regular expressions.
TADS3 has a lot of stuff built-in so it has potentially less runtime overhead than Inform where a lot is implemented in Inform itself. Yet, by making it easier for VM implementors, you can actually see more people successfully implementing a Glulx VM or Z-Machine. People who work on IF VMs in their spare time (which in my wild guess is the majority) can only spend so much time on it. So while ZMPP implements quite a bit of T3, there’s still quite a bit of way to go.
ZMPP currently does use Swing as a frontend technology, but one of the reasons I have picked Scala was Lift, which has good Ajax and Comet integration. So this is ZMPP’s RIA strategy.
This is good news indeed. I had more or less lost hope as the months slid by.
The thing I still don’t understand is, who will be hosting the server? Will it be part of Mike’s web setup? The reason I’m asking is because I’m just a poor dumb game author. I have a website, but I lack the technical background I would need to even ask my site host the right questions about setting up a virtual T3 server within my site.
I have a vague recollection that there was also some question about whether existing games will run on the new machine, or whether they will need to be recompiled, or what. Am I totally off-base about this?
Games will need to be rebuilt. As for which people will be hosting servers, I’ve no idea
It’s a standard-issue Mike Roberts solution, in other words.
Seriously, I have enormous respect for Mike’s prowess as a code designer, and I’m sure once this solution is available, it will be amazingly slick. But as with T3 itself, there will be barriers to entry that new authors may find a bit daunting.
If he provides a virtual server himself, that will help a lot. I’m just hoping I can still find the source code for Lydia’s Heart so I can recompile it…
My sense is that Mike plans to host a server, perhaps even the server, but he’s understandably reluctant to make a stronger commitment in the absence of actual metrics for VM performance, game quantity, and player count.
I don’t think you need to worry. If you don’t care about the plumbing, you’ll be able to upload a game file somewhere, publish a hyperlink, and have it all work. If you want to host a server, someone will help you figure out your options once the software is released.
Good news. The system is pretty much feature-complete. Ironing out the last rough edges should hopefully not take that long. Mike Roberts also provided the modifications to make frobtads able to serve games through HTTP, so I was able to give this a go on my Linux box.
The result is quite nice. The system is able to support multimedia TADS through the web As far as I know, the below are the first screenshots to demonstrate TADS on the web:
Speed feels very nice, since the game itself runs on the server, not on the player’s machine.
Although it’s possible to try out this stuff yourself (by building frobtads yourself from its Git repository), it’s a bit of manual work as there’s zero documentation for this right now (MJR is writing it, along with the needed PHP code so that people will be able to host their own game servers.)
Oops, there are some needed files missing (adv3web). I’ve got the ready-made t3 file of Return to Ditch Day for testing purposes and ran it, and didn’t notice that you actually can’t build web-enabled games yet I’ll be waiting for the next update from MJR, as I don’t have those files.
Nope, it can be launched stand-alone. For example, Gargoyle would run the VM like that, and then launch a browser window on localhost. Voila, there’s your HTML TADS 'terp :mrgreen:, at least for games build with WebUI.
Btw, I’d recommend poking MJR about getting the updated porting kit sources, because the TADS 3.1 compiler breaks backwards compatibility, meaning games won’t run in existing terps (WebUI or not doesn’t matter). That way you’ll have a chance in updating Gargoyle by the time 3.1 is officially released.
OK, if you pull from Git again, t3make should now work correctly.
To build a WebUI game, add the following to its Makefile.t3m:
(Use only “adv3web”, not “adv3”.)
To run it, use “frob -i plain -N 44 sample.t3”. You don’t need to specify the hostname, unless it doesn’t detect it on its own. It will then print an address on stdout. Simply open that in a browser.
There’s a catch in this. If you have a game that uses the banner API (other than just using the default statusline), those parts need to be rewritten to use the new web API. Direct I/O calls will also need to be rewritten in games that use them, but that should be easy since Adv3 now provides equivalents functions.
Great, thanks! Now I have a new toy to occupy me this weekend.
I’ve rebuilt a small game and it worked just fine. I have another one that uses banners so I need to dig deeper to find the web API equivalent.
Network performance is decent. I spun up an Amazon EC2 micro instance which handles a single session with no apparent difficulty. It’ll be interesting to see how many sessions it can handle once the PHP scripts are ready.