QuARK compiling/exporting problems...
by Mitovo · in Torque Game Engine · 03/27/2004 (1:21 pm) · 19 replies
Edit: Abridged to focus on the problem, not my ranting :-)
Okay, I've created a simple, small little room.. just enough to fit a couple lights in and test out the process. I put a "negative" brush, or "subtract" brush or whatever you call it to create a bit of a doorway, so I can have sunlight from the Torque map come in.. I put a portal in there and set it as "allow ambient light through" so there would be shadows and all..
I saved it to back it up..
I click on "Torque > ExportMapFileOnly" and get the following message:
There is a problem in this map
Cannot mix watery and non-watery textures on a polyhedron.
Now... unless I'm completely out of my mind, I used only three textures, all of which are stone, copied directly from the demo's "greathall.dif" folder, none of which are set as "watery" or otherwise.. So what in the world does that mean?
I click OK, and nothing happens.
I try it again and click "Ignore" - it compiles the map.. Oh Goody. I check the QuarkTmp folder, and it's in there. Great! Looks like I'm making progress. Yeah. Right.
I move the map over to the correct folder, based on the folder structure explained in the map2dif documentation, where it says that the map file must be stored either in the same folder as the textures used, or one folder down, because map2dif will go "up" through the folder tree, stopping at the root looking for the textures until it finds them. Soo.. it's in there..
I run map2dif with the correct path to the map file, wondering why in this day and age a Windows-based engine has a tool requiring me to drop to a DOS Prompt to use it instead of selecting a .map file from a file browser and selecting some check-boxes... Anyway....
Nothing. Not a .dif file. Nada. Zilch.
Okay, I've created a simple, small little room.. just enough to fit a couple lights in and test out the process. I put a "negative" brush, or "subtract" brush or whatever you call it to create a bit of a doorway, so I can have sunlight from the Torque map come in.. I put a portal in there and set it as "allow ambient light through" so there would be shadows and all..
I saved it to back it up..
I click on "Torque > ExportMapFileOnly" and get the following message:
There is a problem in this map
Cannot mix watery and non-watery textures on a polyhedron.
Now... unless I'm completely out of my mind, I used only three textures, all of which are stone, copied directly from the demo's "greathall.dif" folder, none of which are set as "watery" or otherwise.. So what in the world does that mean?
I click OK, and nothing happens.
I try it again and click "Ignore" - it compiles the map.. Oh Goody. I check the QuarkTmp folder, and it's in there. Great! Looks like I'm making progress. Yeah. Right.
I move the map over to the correct folder, based on the folder structure explained in the map2dif documentation, where it says that the map file must be stored either in the same folder as the textures used, or one folder down, because map2dif will go "up" through the folder tree, stopping at the root looking for the textures until it finds them. Soo.. it's in there..
I run map2dif with the correct path to the map file, wondering why in this day and age a Windows-based engine has a tool requiring me to drop to a DOS Prompt to use it instead of selecting a .map file from a file browser and selecting some check-boxes... Anyway....
Nothing. Not a .dif file. Nada. Zilch.
About the author
#2
Just remember, Rome wasn't built in a day. I've been working with the engine for just over a year and am just now getting comfortable with it. I'm starting to get the hang of scripting and have even changed some C++ code too.
You may want to try Cartography Shop, it seems to be better documented than QuArK, I've downloaded it, but haven't really done much with it yet.
03/27/2004 (1:52 pm)
The workflow in QuArK does leave a lot to be desired. ;)Just remember, Rome wasn't built in a day. I've been working with the engine for just over a year and am just now getting comfortable with it. I'm starting to get the hang of scripting and have even changed some C++ code too.
You may want to try Cartography Shop, it seems to be better documented than QuArK, I've downloaded it, but haven't really done much with it yet.
#3
I've got Quark configured so it will create a map file and then run map2dif all from one menu selection. It does take a while to get familiar with, but one everything is set up the workflow can go pretty smoothly. I started with the quark4torque link that !CLUTCH! posted and then made my own modifications after I had that working correctly.
03/27/2004 (2:13 pm)
The "cannot mix watery non-watery..." error message shows up when you haven't assigned textures to all the faces of a brush. For example you have a cube and apply a stone texture to one side, but leave the other 5 sides without a texture applied. This can be easy to do by accident if you've happened to have selected just one face of a brush instead of a whole brush and then apply a texture. The error message isn't exactly helpful :^)I've got Quark configured so it will create a map file and then run map2dif all from one menu selection. It does take a while to get familiar with, but one everything is set up the workflow can go pretty smoothly. I started with the quark4torque link that !CLUTCH! posted and then made my own modifications after I had that working correctly.
#4
Heh.. I was expecting a comment like that. :-)
I have no problem, at all, with it taking time to acheive something, within reason, and so long as there's *some* kind of sense of accomplishment. Going almost 7 hours on a single project that, to my understanding is a fairly fundamental aspect of working with Torque and ending up with nothing in the end and no way of knowing why is far from being within reason. Thus my frustration.
Anyway... I have this strange obsession with having to figure this thing out.. so I'm at it again.. Wait - that's masochism isn't it?
What I strongly believe the Torque documentation is missing is a step-by-step walk through of each key process, in order, explaining the why's and how's each step of the way. As it is right now, it acts like more of a "skip to the part you need" reference manual that explains each part independently, but not how they all work together in a basic Torque-dev pipeline. *That's* something that I feel is sorely needed.
Okay... I guess I'll see what I can figure out.
03/27/2004 (2:38 pm)
"Just to let you know, there is a Big Red Button you can push, and it will make your game for you. Oh, wait, no.... making games takes work."Heh.. I was expecting a comment like that. :-)
I have no problem, at all, with it taking time to acheive something, within reason, and so long as there's *some* kind of sense of accomplishment. Going almost 7 hours on a single project that, to my understanding is a fairly fundamental aspect of working with Torque and ending up with nothing in the end and no way of knowing why is far from being within reason. Thus my frustration.
Anyway... I have this strange obsession with having to figure this thing out.. so I'm at it again.. Wait - that's masochism isn't it?
What I strongly believe the Torque documentation is missing is a step-by-step walk through of each key process, in order, explaining the why's and how's each step of the way. As it is right now, it acts like more of a "skip to the part you need" reference manual that explains each part independently, but not how they all work together in a basic Torque-dev pipeline. *That's* something that I feel is sorely needed.
Okay... I guess I'll see what I can figure out.
#5
I fixed the cause of the "cannot mix watery..." message. The Subtraction brush had the null texture applied all the surfaces, and so the outside textures of the subtract brush, which would become the inside edges of the doorway, were being left black and textureless..
That's out of the way..
After that, I still could not get the map to compile right, and whatever the map2dif program is so quick that I can't see what the message is.
Just for clarification, I have the following setup, starting witht he demo folder:
\demo\data\interiors\TestRoom\map
I have the textures in the TestRoom folder and the map itself in the map folder.
So, I moved the map file and the map2dif program and a nifty .bat file I made (so I won't have to go into DOS to do it) right into the map folder itself. Ran it, and this time I get a message:
"Unable to find granite_tile2 (png or jpg)"
I don't understand that, because the file *is* there, and it's a jpg. Furthermore, in the docs it says that map2dif will keep going up the folder tree until it finds the textures it's looking for. It had to do no more than one step up, from 'map' into 'TestRoom' and it should have found it. It didn't.
But, I figure, okay, let me try it in the same folder as the textures... Certainly it's gonna find it this time, right? Nope.. same error message. So, now it's not even finding it in the *same* folder.
So.. now what gives?
P.S. By the way.. this is the constant aggravation I've had every step of the way today for almost 7 hours - every step forward is ending abruptly with another problem... thus my angry post above. There's no reason why it should be this problematic, beginner or not.
03/27/2004 (3:05 pm)
Okay..I fixed the cause of the "cannot mix watery..." message. The Subtraction brush had the null texture applied all the surfaces, and so the outside textures of the subtract brush, which would become the inside edges of the doorway, were being left black and textureless..
That's out of the way..
After that, I still could not get the map to compile right, and whatever the map2dif program is so quick that I can't see what the message is.
Just for clarification, I have the following setup, starting witht he demo folder:
\demo\data\interiors\TestRoom\map
I have the textures in the TestRoom folder and the map itself in the map folder.
So, I moved the map file and the map2dif program and a nifty .bat file I made (so I won't have to go into DOS to do it) right into the map folder itself. Ran it, and this time I get a message:
"Unable to find granite_tile2 (png or jpg)"
I don't understand that, because the file *is* there, and it's a jpg. Furthermore, in the docs it says that map2dif will keep going up the folder tree until it finds the textures it's looking for. It had to do no more than one step up, from 'map' into 'TestRoom' and it should have found it. It didn't.
But, I figure, okay, let me try it in the same folder as the textures... Certainly it's gonna find it this time, right? Nope.. same error message. So, now it's not even finding it in the *same* folder.
So.. now what gives?
P.S. By the way.. this is the constant aggravation I've had every step of the way today for almost 7 hours - every step forward is ending abruptly with another problem... thus my angry post above. There's no reason why it should be this problematic, beginner or not.
#6
I actually downloaded the demo for Cartography Shop 4 and it's pretty darn straight-forward.. It just doesn't seem to give very much flexibility as to what type of geometry you can create - at least the demo doesn't. :shrug:
But, now that I've managed to get a map somewhat successfully out of QuARK, I might actually be making some lee-way there, so I might stick with that if it doesn't drive me nuts first.
Thanks!
Mike
03/27/2004 (3:07 pm)
@Willbkool:I actually downloaded the demo for Cartography Shop 4 and it's pretty darn straight-forward.. It just doesn't seem to give very much flexibility as to what type of geometry you can create - at least the demo doesn't. :shrug:
But, now that I've managed to get a map somewhat successfully out of QuARK, I might actually be making some lee-way there, so I might stick with that if it doesn't drive me nuts first.
Thanks!
Mike
#7
My experience with every technology I've tried to modify to my liking so far, be it a game-engine or automobile, I've noticed that it has always helped me to go really bezerk and out-of-my-mind a couple of times before I actually begun to see the beutiful simplicity hidden in there.
In the case of this technology (TGE) it has taken me about 4 months to find a comfortable work-pattern and I guess there will be about another 4 months before I actually have something that could be generally considered proof-of-concept.
The concept in that case would be that I alone can do something a bit more advanced than "Hello World", and keeping score at the same time...
My point, you are probably a genious and everything Michael, just don't stress out and go letting off steam at everyone on this forum because of the beginners-hurdle, you will overcome it.
To our great fortune these forum are populated by some of the most brilliant game-makers known to man AND they are actually willing to help us as long as we respect the enviroment that we work in and try to keep our remarks about the weaker parts of the engine as constructive as possible since these are the parts wich still is a work in progress.
Besides this, good luck with your project Michael...
03/27/2004 (3:32 pm)
Michael, I don't know if this will help you in any way but,My experience with every technology I've tried to modify to my liking so far, be it a game-engine or automobile, I've noticed that it has always helped me to go really bezerk and out-of-my-mind a couple of times before I actually begun to see the beutiful simplicity hidden in there.
In the case of this technology (TGE) it has taken me about 4 months to find a comfortable work-pattern and I guess there will be about another 4 months before I actually have something that could be generally considered proof-of-concept.
The concept in that case would be that I alone can do something a bit more advanced than "Hello World", and keeping score at the same time...
My point, you are probably a genious and everything Michael, just don't stress out and go letting off steam at everyone on this forum because of the beginners-hurdle, you will overcome it.
To our great fortune these forum are populated by some of the most brilliant game-makers known to man AND they are actually willing to help us as long as we respect the enviroment that we work in and try to keep our remarks about the weaker parts of the engine as constructive as possible since these are the parts wich still is a work in progress.
Besides this, good luck with your project Michael...
#8
-!CLUTCH! out
03/27/2004 (3:32 pm)
Sorry if that made me sound like a jerk... It was just a joke... My appolgies. Anyways, good luck, and welcome to the community.-!CLUTCH! out
#9
2) cd into the \demo\data\interiors\TestRoom\map folder
3) run "map2dif.exe mymap.map" (w/o the quotes and with the proper map file name)
Some things to check if this doesn't work:
1) The textures have to be in the \demo\data\interiors\TestRoom\map folder or in \demo\data\interiors\TestRoom\ folder *not* in \demo\data\interiors\TestRoom\textures or some other subfolder off of \demo\data\interiors\TestRoom\
2) The textures have to be power of 2 sized (2x2, 4x4, 8x8, 16x4, 256x256, 128x1024, etc.)
3) The .map file should be in Valve 220 format (Quark can export into a variety of .map formats)
03/27/2004 (3:50 pm)
1) drop to dos2) cd into the \demo\data\interiors\TestRoom\map folder
3) run "map2dif.exe mymap.map" (w/o the quotes and with the proper map file name)
Some things to check if this doesn't work:
1) The textures have to be in the \demo\data\interiors\TestRoom\map folder or in \demo\data\interiors\TestRoom\ folder *not* in \demo\data\interiors\TestRoom\textures or some other subfolder off of \demo\data\interiors\TestRoom\
2) The textures have to be power of 2 sized (2x2, 4x4, 8x8, 16x4, 256x256, 128x1024, etc.)
3) The .map file should be in Valve 220 format (Quark can export into a variety of .map formats)
#10
Oh.. no worries.. I could tell it wasn't meant harshly...
I just meant that that particular response is one of those "givens" when it comes to commenting on how challenging something is in game design (I've worked with a few different ones)...
No hard feelings at all.. I think a little levity is great now and again :-)
Take care,
Mike
03/27/2004 (4:12 pm)
@Clutch:Oh.. no worries.. I could tell it wasn't meant harshly...
I just meant that that particular response is one of those "givens" when it comes to commenting on how challenging something is in game design (I've worked with a few different ones)...
No hard feelings at all.. I think a little levity is great now and again :-)
Take care,
Mike
#11
"My point, you are probably a genious and everything Michael, just don't stress out and go letting off steam at everyone on this forum because of the beginners-hurdle, you will overcome it."
Ahh.. you're overestimating me :-) I barely register as smarter than a growth of moss..heheh..
Seriously, yeah, that post probably wasn't entirely necessary, though I was extremely flustered at the time because, as best as I could tell I was following everything to the letter and it just would not work. I'd been hitting barrier after barrier almost the entire time and that was just my breaking point, I guess. Especially because I'd set out a goal for this weekend to have a small interior built and in the editor... a sorta milestone that, to me, seemed like it shouldn't be that difficult to do.
I *do* still find QuARK to be unnecessarily difficult to use... that hasn't changed :-). I'm only tolerating it because it eliminates alot of extranneous steps I'd have to do otherwise for exporting/converting, etc. There are programs I'd much rather use, but there doesn't seem to be any real "official" support for them yet. However, if someone could recommend an alternative that's "ready to go" with Torque, I'm there and not looking back.
In any case, I apologize if I offended anyone.. It wasn't intended.
Take care..
03/27/2004 (4:19 pm)
@Jorgen"My point, you are probably a genious and everything Michael, just don't stress out and go letting off steam at everyone on this forum because of the beginners-hurdle, you will overcome it."
Ahh.. you're overestimating me :-) I barely register as smarter than a growth of moss..heheh..
Seriously, yeah, that post probably wasn't entirely necessary, though I was extremely flustered at the time because, as best as I could tell I was following everything to the letter and it just would not work. I'd been hitting barrier after barrier almost the entire time and that was just my breaking point, I guess. Especially because I'd set out a goal for this weekend to have a small interior built and in the editor... a sorta milestone that, to me, seemed like it shouldn't be that difficult to do.
I *do* still find QuARK to be unnecessarily difficult to use... that hasn't changed :-). I'm only tolerating it because it eliminates alot of extranneous steps I'd have to do otherwise for exporting/converting, etc. There are programs I'd much rather use, but there doesn't seem to be any real "official" support for them yet. However, if someone could recommend an alternative that's "ready to go" with Torque, I'm there and not looking back.
In any case, I apologize if I offended anyone.. It wasn't intended.
Take care..
#12
Yep... Every one of those points is covered. The folder structure, the texture sizes/formats/bit-depths (I just copied them from the folder for a structure that comes with the Torque demo, so I knew they'd work)...
There really is nothing wrong with the map that I can see.
Would anyone be willing to let me email it to them so they could perhaps check it out? I'm not denying I probably screwed something up.. I just cannot figure out what. Let me know... I'd appreciate it.
Thanks again!
03/27/2004 (4:22 pm)
@Matthew:Yep... Every one of those points is covered. The folder structure, the texture sizes/formats/bit-depths (I just copied them from the folder for a structure that comes with the Torque demo, so I knew they'd work)...
There really is nothing wrong with the map that I can see.
Would anyone be willing to let me email it to them so they could perhaps check it out? I'm not denying I probably screwed something up.. I just cannot figure out what. Let me know... I'd appreciate it.
Thanks again!
#13
Okay... I've made *another* new map. Again, followed the instructions, to the letter. All the folders are set up correct, and so forth.. And again, it exports to .map format just fine, and without error. But it will not compile to a .dif. I'm still getting an error message about it not being able to find one of the textures, even though the map file and all the textures are in the same folder. This time the error message is saying it can't find a different texture.
Again, the textures are correctly formatted and "legal", because I checked myself *and* they're the same exact ones used in the Torque demo.
So somewhere along the line I'm doing something wrong, or I have a bugged version of the map2dif or something.
03/27/2004 (8:43 pm)
Update:Okay... I've made *another* new map. Again, followed the instructions, to the letter. All the folders are set up correct, and so forth.. And again, it exports to .map format just fine, and without error. But it will not compile to a .dif. I'm still getting an error message about it not being able to find one of the textures, even though the map file and all the textures are in the same folder. This time the error message is saying it can't find a different texture.
Again, the textures are correctly formatted and "legal", because I checked myself *and* they're the same exact ones used in the Torque demo.
So somewhere along the line I'm doing something wrong, or I have a bugged version of the map2dif or something.
#14
03/27/2004 (9:23 pm)
Okay, when I first started using Quark, I noticed (or what I thought might be the cause), that if you compile a map, and don't delete the previous version of it (the map), then It will give you some problems. same with the map2dif, delete the first version first, then run it. Correct me if i'm wrong, anybody....
#15
Anyways... I'm not sure if that was the case or not with the first map I created. I can say that it's definitely not the case with the second, though, because I created that one from scratch and there are no other versions of it.
The only thing I am doing is saving a "blank template" in my project explorer to take away that step of deleting the default room every time. And also, I'm not having trouble getting the map to export from QuARK at this point. It's just not being converted to a .dif.
Here's something that occured to me. Are there any switches that *have* to be used in order for the map to convert to a DXF correctly?
Also, are there any specifics to interior creation that I might be missing?
Here's what I'm doing:
I'm placing portals using a block created inside a 'Portal' "container" (don't know how else to describe it). I set the face textures to "NULL" (this is a step I'm not 100% about). Umm...
I'm sort of importing the textures I use from the folder they'll end up in for the final build (ie. the data/interiors/mapname folder). I know they can also end up there after you've 'prepared' the textures in QuARK
Other than that, there's nothing I can think of that could be giving me trouble.
Hmm.. is size/scale a problem? Could something possibly be made too small? I'm sorta reaching here, I know.. but I really can't figure it out.
Thanks.. :-)
03/28/2004 (6:02 am)
@Kuhles (sorry, don't know how to get that special 'u' :-):Anyways... I'm not sure if that was the case or not with the first map I created. I can say that it's definitely not the case with the second, though, because I created that one from scratch and there are no other versions of it.
The only thing I am doing is saving a "blank template" in my project explorer to take away that step of deleting the default room every time. And also, I'm not having trouble getting the map to export from QuARK at this point. It's just not being converted to a .dif.
Here's something that occured to me. Are there any switches that *have* to be used in order for the map to convert to a DXF correctly?
Also, are there any specifics to interior creation that I might be missing?
Here's what I'm doing:
I'm placing portals using a block created inside a 'Portal' "container" (don't know how else to describe it). I set the face textures to "NULL" (this is a step I'm not 100% about). Umm...
I'm sort of importing the textures I use from the folder they'll end up in for the final build (ie. the data/interiors/mapname folder). I know they can also end up there after you've 'prepared' the textures in QuARK
Other than that, there's nothing I can think of that could be giving me trouble.
Hmm.. is size/scale a problem? Could something possibly be made too small? I'm sorta reaching here, I know.. but I really can't figure it out.
Thanks.. :-)
#16
03/28/2004 (8:04 am)
From your other message it sounds like you've moved on from Quark. If you want to give it one more shot, I'd suggest that you forget about portals or anything else for now and just create a simple cube with one texture and see if you can get a 'dif' file created.
#17
a) Create a work 'work' directory with subfolders 'maps' and 'textures'
b) Place your map into 'maps', the textures you used as jpgs into 'textures'
c) Change to your work directory, run map2dif as follows:
You are correct by assigning the NULL texture to your portals, objects with the NULL texture will be ignored for rendering later (you don't want your portals to be rendered).
If you are having issues with floating point numbers in map files when running map2dif, try the following quick patch to fix it:
That should create your dif file, then all you have to do is copy the dif file and all the textures it uses into your torque interiors directory ( or some subfolder underneath it )
03/28/2004 (8:44 am)
Here is my setup, maybe that works for you.a) Create a work 'work' directory with subfolders 'maps' and 'textures'
b) Place your map into 'maps', the textures you used as jpgs into 'textures'
c) Change to your work directory, run map2dif as follows:
map2dif_DEBUG.exe -v -h -o ./maps -t ./textures ./maps/newmap.map
You are correct by assigning the NULL texture to your portals, objects with the NULL texture will be ignored for rendering later (you don't want your portals to be rendered).
If you are having issues with floating point numbers in map files when running map2dif, try the following quick patch to fix it:
In map2dif, bspNode.cc, find:
CSGPlane& rPoss = pBrush->mPlanes[i];
if (mFabs(mDot(gWorkingGeometry->getPlaneEQ(rPoss.planeEQIndex).normal,
gWorkingGeometry->getPlaneEQ(rPlane.planeEQIndex).normal)) < 0.0000001) {
ortho1 = gWorkingGeometry->getPlaneEQ(rPoss.planeEQIndex).normal;
found1 = true;
break;
}
}
AssertFatal(found1, "Error, portal brush is likely not a cube!");
Replace the line
gWorkingGeometry->getPlaneEQ(rPlane.planeEQIndex).normal)) < 0.0000001) {
with
gWorkingGeometry->getPlaneEQ(rPlane.planeEQIndex).normal)) < 0.001) {That should create your dif file, then all you have to do is copy the dif file and all the textures it uses into your torque interiors directory ( or some subfolder underneath it )
#18
Right now, I'm being thoroughly impressed by Cartography Shop, even if only the demo version. The only road-bump I've hit so far is how to rotate a texture on a surface.. and I found the steps (extremely easy) in the Help file and had my textures properly rotated about a minute later.
*That's* the kind of intuitiveness I'm talking about when I said in an earlier post that an editor is supposed to enable and empower the designer.. not fight with them. "Features Galore" can be very bad thing when they're sloppily integrated into the GUI. And, in my opinion, QuARK's is a very sloppily designed interface, from beginning to end.
Anyway, let's hope that the converter for CS comes along and works out well. In the meantime, at least I feel like I can accomplish something.
03/28/2004 (9:06 am)
Yeah, I'm pretty much through with QuARK. It's just way too much hassle to get anything done in the thing, and then I can't even get it effectively imported into Torque.Right now, I'm being thoroughly impressed by Cartography Shop, even if only the demo version. The only road-bump I've hit so far is how to rotate a texture on a surface.. and I found the steps (extremely easy) in the Help file and had my textures properly rotated about a minute later.
*That's* the kind of intuitiveness I'm talking about when I said in an earlier post that an editor is supposed to enable and empower the designer.. not fight with them. "Features Galore" can be very bad thing when they're sloppily integrated into the GUI. And, in my opinion, QuARK's is a very sloppily designed interface, from beginning to end.
Anyway, let's hope that the converter for CS comes along and works out well. In the meantime, at least I feel like I can accomplish something.
#19
is rather difficult to use for complete interiors due to the convex brush constraints you have to follow (and max doesn't help you much with that :) ). Max2Map also requires a little bit of code hacking on the exporter side to get it ro run properly in max.
03/28/2004 (9:10 am)
Yeah I am not too happy with quark either, especially regarding the texturing process. The max2map exporter isn't too bad but itis rather difficult to use for complete interiors due to the convex brush constraints you have to follow (and max doesn't help you much with that :) ). Max2Map also requires a little bit of code hacking on the exporter side to get it ro run properly in max.
Torque Owner Chris
http://holodeck.st.usm.edu/vrcomputing/toolkit/map_editors/quark4torque/
Just to let you know, there is a Big Red Button you can push, and it will make your game for you. Oh, wait, no.... making games takes work. Just stick with it, Torques is INCREDIBLE. It really is. Once you get it all going, its a hell of a lot of fun.
-!CLUTCH! out
-Edited for working link ;p