Room Generator Suggestions

sonneveld Hi! If you haven't tried Joel's Base Logic Generator, you really should.. it's great. It lets you set up the basics of the room before you even need to touch the logic editor in AGI Studio. What I'd like to do is add a picture viewer to it and let the user define blocks/ directly on the picture and manually place objects and the ego with the mouse. Instead of just being able to type in the coordinates.. it would be nice to just press a button and then select it with the mouse. Now the only source available is the Room Generator for the Linux AGI Studio in QT. Joel? Do you still have the original source available? I was thinking a port (another port!) to wxWindows would be nice. It's the only gui toolkit I'm familiar with at the moment though. Does anybody else have any ideas they'd like for a room generator. We've got Joel and Joakim working on sound editors, Eidolon's working on a new picture editor and hopefully work on some new features in the compiler will start soonish. These extra features in the room generator would be the icing on the cake. - Nick
Joakim I had some ideas for a graphical game builder for Visual AGI. I visualized something similar to the web builder in Frontpage, with building blocks (rooms) connected with lines (a line from the right of one block to the left of another will automatically allow the ego to walk between the rooms). If you double-clicked on a building block, you would zoom in - and be able to change the background picture, add static views and animate simple objects.

But as I barely have time to complete the most basic editing features of Visual AGI, that feature is far far into the future.. ;)

/ Joakim
Nick Sonneveld wrote:

... and hopefully work on some new features in the compiler will start soonish.

Already begun, my friend. I'm currently translating the AGIC lex/yacc source into a Python lex/yacc package. It's progressing slowly, because I also have other shiny things to distract me, but it is progressing. I'm using Python because I like it, and this way everything is in the one language and toolset.
The first feature I plan to add is one-line, braceless "if" statements. After that, it'll be on to "for" and "while" loops, and perhaps a "switch" statement, too.

Mokalus of Borg

PS - If anyone would like to help, I need the AGIC support files (*.c) translated into Python.
PPS - I know it would be faster just to add features directly, but we're really in a prototyping stage right now.
Joel Actually, I haven't really worked on the sound editor for a while. I could never bring myself to sit down and try to figure out how to figure out where the notes are supposed to go, although I did recently think of something that I might try.

In the meantime, I've been working on creating a new version of the base logic generator. I do not, unfortunately, have the original source code, but that's probably for the best for two reasons. First, the original was written with MFC, which isn't a problem in and of itself but I think more people would be able to do something with the program if it were written in straight Windows API, so that's what I'm doing with this new version. The new version's source code will be released. Second thing is I really didn't know what I was doing when I wrote that program the first time (actually one of the blessings of MFC -- I couldn't have written that program in the API at the time that I wrote it; the only API calls in the original program were the calls that put the text on the clipboard).

The new BLG will feature:
- better-written, more organized code that will be released with the release build

- unlimited ego positioning commands (previously limited to 4 + an absolute)

- more logical handling of edge code commands (e.g., you can now have a message and go to a new room; you don't have to check a box to display a message, you just have to enter a message; if you enter a message or a room number for one of the edges, the corresponding "include empty code" checkbox will be disabled, etc.).

- ability to use a pic other than room_no

- ability to use user-defined define names, which is a feature that I really want now that I don't use the template game's names anymore.

- better source comments

- ability to choose varying comment styles (e.g., you can choose between using //,
sonneveld Would it be possible to separate the win32 specific code and the logic generation? I'd to try my hand at a wxWindows interface. It would be portable and still free (not in the QT sense).

I'm still playing around with wxWindows but I could probably help BLG by supplying some NAGI code that would render the pics and the words.tok parser to get the look number (how about having a list of phrases to check and the template would generate skeleton if statements?)

what would be nice is the ability for the blg to parse the source later on in BLG and let you easily change bits 'n pieces and add new bits. I suppose you might have to add comments to help BLG along though.

if blg had some command line options as well, it could be callable from agi studio with some options preset.

- Nick
Joel Actually, I'm modularizing this thing like crazy. I'm even giving each dialog box in the program about three files that separate the functions into user interface functions and general event handlers and stuff like that.

I will most likely write the logic generation code separate from any of the win32 code and make some global data structures or parameters to the logic generation functions that will tell them what they need to know.

I'm trying to write this thing for some degree of portability, although I could probably do some things better. I've already written it so that the data structures are declared in separate files from win32 specific stuff. If you wanted to rewrite the interface, it probably wouldn't be horribly difficult.

I thought of having the user specify the directory for the game and having the BLG do some actual manipulation with WORDS.TOK and even the VOL and LOGDIR files -- in fact I don't think it will be difficult once I've finished version 2 to add that kind of functionality. I just decided that I didn't want to get too feature happy right off the bat. I'd rather get something functional out there and then add bells and whistles.

I don't think it would be all that hard to have the ability to generate skeleton if (said()) statements, but again I think that's for a slightly later version.
sonneveld mokalus.. aren't there lex/yacc tools for python available? you wouldn't have to port the code.. just the grammar expressions then.

- Nick
Mokalus_of_Borg Yes, I am using a Python version of lex & yacc, but AGIC uses a few other files, written in straight C, for the code generation. I've already ported over all the regular expressions and grammar rules, but the code generation will take more time.
I'm considering (since this is taking forever) just working in C, but debugging C code is such a major pain. Python is more forgiving that way.

Mokalus of Borg

PS - I've got some other, more urgent projects to complete over the next few days.
PPS - But next week, I should be free to work on this.