Soon after bumping into haXe and Doomed Online, i somehow got the strange idea that i could get flash to play SCUMM games, like ScummVM.
Safe to say, i ended up with this rather odd Flash-based app written in haXe which when provided with the ”.000” and ”.001” files of any unencrypted V6 SCUMM game will be able to load and play it. Or rather, attempt to.
Sadly i bumped into a problem in the image decode routines, so what is displayed isn’t pretty. But it is quite capable of executing enough opcode’s to get to the input event loop in Alban Bedel’s road example for his scummc compiler, which is great.
As for other games, i would doubt that they would get very far. A lot still needs to be implemented in the runtime.
In any case, if you dare you can try out my Flash-based SCUMM interpreter by downloading and extracting this archive. Simply load “test.html” into your web browser. Note though that you will need Flash 9 in order to run the interpreter.
In addition i also decided to open up the code for everyone to look at. It’s a mess, but it works. You can grab it from here.
Finally i would like to congratulate the ScummVM team for their SCUMM interpreter and Alban Bedel for his scummc compiler. Without their efforts, i wouldn’t have had any code or references from which to base my haXe-based SCUMM interpreter.
A while after i bumped into Doomed Online, i decided to investigate the pipeline for making Flash 9 games.
Compared to a few years ago, it seems like an increasingly lucrative game development platform. Pretty much everything you would need to implement for a game is possible with Flash 9, including such things as 3D Rendering. In a way it’s comparable to the late-90’s PC gaming scene. I have no doubt that you could probably make something as sophisticated as, say, Tomb Raider with Flash 9.
However my big problem with Flash is that it is still a closed platform. I have yet to find any open source re-implementation of the Flash runtime that fully runs Flash 7 files, let alone Flash 9. And whilst the Flash 9 compiler is supposedly going to be open source’d by Adobe, i have yet to see any indication that this is really going to happen.
Thankfully, i found a solution : HaXe. It is essentially a fully featured programming language that can output to one of three formats:
Adobe Flash (7, 8, or 9)
Neko VM (runs as a standalone app or a web app or perhaps embedded elsewhere)
JavaScript (though sadly doesn’t have a nice RIA toolkit which writes all the HTML like, say, OpenLaszlo)
So in essence, with HaXe i can bypass my “closed platform” nag point and instead make a version of my game or app that works in Neko or perhaps just in a bog standard Web Browser. In addition i can consolidate my web development into one cool programming language. Great!
September 18, 2007 at 9:23 am · Filed under oldbrew
Just as i thought i had found some of the most freakiest flash apps, i found this rather playable re-implementation of doom called Doomed Online.
What is amazing about it is that it uses the original data files – something which i never considered would have been possible with flash. But then again i’ve not quite been keeping up with all of the technical advances in flash over the years, so it is really no surprise.
The demo is available here. For those of you who might have checked out the pre-release versions of Doom, the demo plays very much like them – as in you can’t shoot anything and there is no AI. Hopefully in the future these issues will be resolved and it’ll be that much more interesting to play.
September 15, 2007 at 9:24 am · Filed under oldbrew
As i found out when looking at Andrew Wooldrige’s blog, there seems to be no end to crazy flash widgets originating from web 2.0 businesses which seemingly pop out of nowhere.
Take this Buddy Lab’s widget for example. You can customize your own avatar (based on a fish, dinosaur, pig, or cat), slap some text on, and share it to all of your friends by posting it on your blog. Why didn’t i think of that?!
Another crazy flash widget i found is nicely presented on the MotionPortrait web site. Basically, MotionPortrait seems to be a technology in which you can make freaky interactive portraits, which consist of a person who moves their head to follow your mouse cursor. To bump up the freakishness, the person can also make random head movements and even speak.
Sadly i can’t find an example of MotionPortrait to embed in this post, so you’ll have to go to the MotionPortrait web site yourself to see the technology in all of its freakish glory.
September 8, 2007 at 12:07 pm · Filed under oldbrew
After stumbling across the Entrepreneur Geek blog, i spotted this rather puzzling river crossing puzzle. Sadly, i haven’t managed to solve it yet, but i think i’m close.
Instructions:
Help these people to cross the river, in the next screen.
Only two people at a time, at least one adult.
Criminal (in striped dress) cannot be left with others, without the Police.
Mother cannot be with sons, while father is not around.
Father cannot be with daughters, while mother is not around.
Click on the BIG BLUE BUTTON to start!
Click on people to get them on or off the boat.
Click on the Red buttons to move the boat to opposite side
I have been tagged by Ian with the Scattergories meme.
The rules
Use the 1st letter of your name to answer each of the questions. They must be real places, names, things . . . nothing made up! If you can’t think of anything, skip it. You CAN’T use your name for the boy/girl name question. If your name happens to start with the same letter as mine, sorry, but you can’t use my answers!
Back in the good ol’ days of DOS, i used to (and still do) like playing adventure games. Specifically, i thought those made by Lucasarts were the best, as they often had simple yet funny plots, and you could pretty much get around them easily. They all had (more or less) consistent interfaces – from Maniac Mansion to The Secret of Money Island, you could tell it was a Lucasart’s adventure game and that it was going to essentially work the same as the last Lucasart’s adventure game you played.
<!-more->
The consistency in part came from the game engine which they all shared in common: SCUMM (Script Creation Utility for Maniac Mansion). Each game implemented its own set of scripts and resources which could be run in any version of SCUMM, provided that they were targeted for the version(s) of SCUMM that particular runtime of the engine supported. In a way, it was like the equivalent of Java for adventure games.
Anyhow, part of the reason i got interested in software development in the first place was that i always wondered how these games were made. I thought it was great how it all fitted together – the characters, the animation, the scripting, the lot. Eventually i found various projects on the ‘net which were aiming to create development system’s for other adventure game engines (such as those made by Sierra), but nobody seemed interested in SCUMM.
Thankfully in 2004 Alban Bedel made his first release of ScummC – a tool to compile SCUMM scripts (using a C-like language) and assets, and link them together so you could play them in any SCUMM runtime that supported version 6 scripts. Although it wasn’t until late last year that i was confident to download it and try it out. Still, it brought great a great new insight into how these SCUMM games were made.
By the time i tried ScummC out, Alban had already made a standalone demo SCUMM game which consisted of a single room and a player character. Surprisingly, it was all presented in a top-down view, which wasn’t quite what i expected from a SCUMM adventure. Still, i played around with it and was greatly impressed.
When i digged down into the demo code though, i was amazed at how much of the interface was powered by script. The action’s, the inventory, the hover text – you name it, it was powered by script. Considering almost every Lucasart’s adventure game i played had that same look and feel, i was really thinking a lot of it was going to be explicitly supported in the engine.
In any case, soon after i showed interest in the ScummC project, Alban updated his standalone demo with a second room. It was interesting to note that whilst it was incredibly easy to add room’s to script, it was difficult to create the graphics for the rooms as you had to leave space in the room palette for any actor’s which might be present in the scene. Nowadays you rarely see modern image editors with support for tailoring palettes in this way, so i was compelled to modify the palcat tool included with ScummC to support pre-appending palettes to images (which for some reason i forget, i needed).
Another thing which i tasked myself with was how to make a conversation. For this, i had to grab a copy of ScummVM and use the debugger to see which SCUMM functions were being called during a typical conversation in Day of the Tentacle. In the end, i concluded that once a conversation is entered, the following things happen:
saveVerbs() is called to hide all the interface elements (normally known as “verbs”)
All dialogue items are initialised
setVerbOff() is called on all dialogue items so they don’t appear
Exit conditions for the dialogue are checked
Each option of dialogue is loaded to a corresponding dialog item (setVerbName()) and turned on (setVerbOn())
The conversation script waits till a dialogue option is selected. If it is, the relevant action corresponding to the dialogue gets executed. If the conversation hasn’t ended, it loops back to 3. Otherwise it goes on to 7.
All dialogue items are hidden / deleted
restoreVerbs() is called to restore all the interface elements
Which safe to say wasn’t quite what i expected, which was some specific support in the engine for conversations. Which goes to show that SCUMM can be quite flexible.
Sadly there doesn’t seem to be a lot of people using ScummC. Though then again, its much more programmer oriented as there is no fancy graphical IDE to build games as there is in other adventure game engine’s such as Adventure Game Studio. Its more of a DIY toolset, which doesn’t quite work well in this age of easy to use graphical interfaces. I can’t quite see the typical user of one of those interfaces having to blindly type in the following (taken from the ScummC example) in order to define a room and some resources.
#include <scummVars6.s>
#include "common.sch"
bit welcomed,lost,santaHello,santaPlace,santaReal;
actor santa;
#define SANTA_COLOR 14
// our room
room Road {
// first we define the room parameters
// the background picture
image = "road.bmp";
// the zplanes
zplane = { "road_mask1.bmp", "road_mask2.bmp" };
boxd = "road.box";
trans = 0;
//cycle testCycl = { 60, 0, 103, 111 };
cost santaCost = "santa.cost";
voice letsgothere = { "letsgothere.voc", 500 };
voice welcome = { "welcome.voc" };
voice tv = { "file.voc" };
object axe;
...
Still, i think it would be interesting to see where ScummC goes, as there is still a lot to be done with it. I would encourage anyone with some free time and who feels comfortable using lots of commandline tools to check it out.
A while back, i writ a program in which one could convert any number from any base to and from base 10. So for example, if i had the number “10” in base 3, it would churn out “3” in base 10, and vice versa.
Initially all i got it converting was base 62. However i was not just satisfied with base 62, i wanted it to convert any possible base, defined by any set of symbols. To top it all off, i also made it possible to use unicode symbols via UTF-8.
So for example if i could conjure up the following hideous system:
Symbol
A
B
C
Value
0
1
2
…and start saying thing’s like “C + C = AB”.
For the final touch, i added the ability to specify numbers with numerals. Although i didn’t quite get the conversion algorithm from base10 to numerals right.
Safe to say, i ended up with this rather hideous looking app programmed in C. But on the plus side i could:
Feed in a file containing a sequential list of UTF-8 formatted symbols to make my own number base system.
Feed in a file containing a list of “SYMBOL=VALUE” pair’s ordered by value to make my own numeral system.
Convert the output of either the previous examples back to base10.
In any case, one can grab the code here. It’s not pretty, nor is it quite the next killer app – but i had some fun writing it.
A while back Gary Vaughan suggested i host a demo of RailsCollab on my server. Sadly though, i didn’t have any quick & easy way of adding new demo users to the system, that is until i cooked up OpenID support.
Consequently, there is now an OpenID enabled service running on http://brew.cuppadev.co.uk. Provided you have an OpenID, you should be able to select the “Use OpenID” checkbox and type in your OpenID to login. This will automagically register you with the system, adding you to the “OpenID” company and the “RailsCollab” project. Afterwards if you want, you can set your password so you can login using a regular username & password, though personally i think typing in your OpenID is a better idea.
Note that your OpenID provider needs to support handing over identity fields in order for RailsCollab to correctly register you. MyOpenID is an example of a provider that supports this. Also note that if there is a user with a duplicate username or email in the system, registration will fail.
I invite anyone to try RailsCollab out.
UPDATE: The demo has since been taken down. If you wish to try out RailsCollab, you will need to download and install it yourself.
Recently after watching the rather interesting Google TechTalk on The implications of OpenID, i decided to see if i could add OpenID support to RailsCollab.
OpenID is a pretty nifty decentralised single sign-on system. The process of verifying a user’s identity is essentially outsourced to an OpenID identity provider, instead of being left to web developer’s to implement it themselves (and consequently doing a very poor job of it). As a user, i host my identity on any of the numerous OpenID identity providers, preferably one which i can trust. Or if i’m really paranoid, i can just make my own OpenID identity provider.
In relation to RailsCollab, it makes sense to have support for OpenID as a key feature is the ability for client’s to log-on to review progress on a project.
Without OpenID, you’d have to give each of your client’s a username and password, the latter of which you can almost guarantee that someone will forget. And then you need to muck about with setting up an email server so you can send out “Password reset” email’s, unless you want to do it all yourself each time you need to reset it.
With OpenID, you’d just have to give each of your client’s a username and an associated OpenID. There’s no need to much about with password’s, as you’ve outsourced that burden to the OpenID provider. All they need to do to login is type in their OpenID, and their OpenID provider will handle the sign-on process.
For anyone crazy enough to actually try RailsCollab with OpenID, you can grab a copy from the Subversion repository on RailsForge. Details are available on the project page.