Older blog entries for dto (starting at number 51)

Success.

So far several of the operations are working in the engine_viewer. Perhaps I can get it finished for this weekend. I can tell that now that I've finished the IPC framework, everything else is just going to fall into place.

I put a screenshot at my home page. Damn, I am so pleased that this is working!!

First day back at school today--just one class, with Aparna. It's a Java/OOP/OOD class. Not really looking forward to Java given what I read about it, but...

Got lots more work on Octal done last night, part of the PAC bit is now working. Working on simplifying some bits. I hope to have more working tonight, as soon as I figure out some more GTK+ stuff. The old engine_viewer code is being adapted as its own little object.... all I need is to be able to somehow get the instance pointer from the gtkwidget parameter that's in the parameter list of gtk callbacks.

Code reorganized. Octal now compiles and sends stuff thru the pipes. Now all I have to do is connect the engine_model stuff to the view/engine_view. The GTK code I wrote looked great but now will need to be revised a little bit, since it must retain a model_cache and deal with updates thru pipes (handled by message tools.)

The code uses names like Model and View, but in truth the design went from MVC to Doc/View and then to Presentation-Abstraction-Control (where Control has nothing to do with MVC's "controller." See Buschmann's A System of Patterns for more info on the PAC alternative.)

At the moment I've refrained from renaming things to conform to PAC, because engine_abstraction_responder is too long and a little too opaque compared to engine_model_responder. I may be splitting hairs, but I feel very sensitive about how things are named :-).

Other News. My sleep schedule is pretty messed up. However my room is basically fully rearranged, and now I have space for the box, normal monitor and keyboard, and on another desk a VT510 console that is "free of distractions" and quite good for coding even if the only color is orange---plus, a full-size open desk space for doing homework on. Not bad. The VT even controls my CD player!

Here's my current plan for reorganizing the code. Header files are left out of the list, usually in same spot as C file.


octal/
	commands.c
	machine.c
	core.c
	output.c
	package.c   (was util)
	pattern/
		pattern.c
		pattern_model.c
	engine/
		engine.c
		engine_model.c
		mixer.c
	user/
		user.c   (was main)
		engine_view.c
		pattern_trackerview.c
		pattern_pianoview.c
		wavetable_view.c
	machines/
		squaregen.c
		delay.c
	wavetable/
		wavetable.c
		wavetable_model.c

Note the model and view bits, alluding to the MVC-inspired architecture.

12 Jan 2001 (updated 12 Jan 2001 at 07:40 UTC) »

I am typing this in ithought, a neat program from voltron.

I finally decided how to name/split up/diddle the functions that are currently spread in engine_commands.c, engine.c and so on. I decided to let myself think a little more "object-wise", and picked up my worn copy of Design Patterns and sat for awhile. In accordance with the Doc/View model,

  • Engine intrinsics go in engine.c
  • Engine message interface definitions (enum, etc) go in commands.h along with other types of messages
  • code for engine DOC responses go in something like engine_doc_imp.c
  • code for engine VIEW responses go in engine_view_imp.c
  • Audio mixing functions go in mixer.c

Later on there will be multiple VIEW's for patterns; most likely, one for tracker-style and one for piano-roll-style. I could place those in pattern-view-tracker-imp.c (um, maybe I want to shorten that??)

:-) wish me luck

don't bother looking for support if you have a big problem, all that's left is people who think they're the first to tell you to install debian

Got some Octal hacking done... made some nice simplifications. I realized that the engine_commands thing was getting too complex. I had a group of functions all with the same calling convention, and an array of pointers to them whose order matched an enumeration, and a dispatch function to call the appropriate handler for a message that basically packed the arguments and one of the enum values into a struct. Then I realized how complex this was going to get when both the core thread, AND multiple objects (different views) in the UI were going to react differently to the same messages.

So now the whole chebang is replaced with each "class" having one function to respond to all the messages (they all had the same prototype anyway.) A switch statement makes the right behavior happen according to which message is being recieved. It's not a traditionally accepted OO technique, that's for sure---switch statements are seen as a sign of improper OO design by some people. But I can't express how much simpler this is when written as a switch statement. All the message behaviors for a "class" are contained within a single function. The code that can be executed by user requests is clearly separated from internal helper functions that shouldn't be accessible to outsiders. And the function prototype is not repeated 13 times anymore, just once for the whole interface function.

I have never found inheritance interesting or useful other than to implement interfaces. This is especially convenient now that I'm back to plain C, since C is good at interfaces and little function packages (but not so good at inheritance.) Decoupling inheritance and polymorphism seems like a win. I guess this is what people mean when they say "inheritance breaks encapsulation." But that doesn't mean it's all bunk.

Last night at 4 AM I installed RH7, wiping out my root partition in the process. I kept all my /home files, as they were on their own section. Now I have a three-partition setup, for /, /usr/local, and /home.

What a mess, though. Here's what I have to do to get back to normal:

  • install kernel 2.4
  • install XF86 4.0.2
  • install USB Graphire tablet drivers
  • Install Gimp 1.2
  • possibly install Eazel even though it requires 2^73 other packages
  • install Blackbox
  • install Helix-Gnome but then undo most of the things it does (auto X startup etc) and NOT run sawfish
  • set up soundcard
  • set up GPM for Graphire
  • set up my usb joystick
  • set up Kerberos for use with my GNU account
  • see if I can get some 3-d support going

This time I need to do things right.... making proper backups of config files, and making notes on installation processes so that I can remember how I did things. I know I'll need to re-learn how to install the Graphire device, and tweak the settings.

7 Jan 2001 (updated 7 Jan 2001 at 04:36 UTC) »
Doesn't anything have a decent ending?

At the end of the century we've watched the "Big Three" long-running sci-fi and fantasy institutions collapse and run out of steam:

  • Ultima
  • Star Wars (yes it is dead)
  • Star Trek (this one too)

Star Trek has the distinction of just gradually fading out, whereas the other two had spectacular failures... worthy of ridicule for generations to come. (I realize Star Wars isn't officially over yet, but only Spielberg and a real screenwriter could possibly save this sinking ship.)

It's pretty disappointing; I don't get the feeling that Farscape and LEXX are going to provide the same kind of sustenance. Oh well. Maybe real tile-based games will be in vogue again, or perhaps interactive fiction will come back in a big way.

Yeah, sure.

Oh, and yakk, I kept this short just for you :-).

6 Jan 2001 (updated 6 Jan 2001 at 07:48 UTC) »
My Review of Ultima: Ascension.

I was excited. It was on sale. It comes with cool tarot cards for each of the virtues. The box screenshots look nice. It promised to resolve the plot issues building up for years. I'd read some bad reviews but I had still enjoyed Pagan despite its flaws.

But...

It sucked beyond time, beyond space, beyond all possible belief. I've been playing the series since The False Prophet, and after the dizzying heights of Sepent Isle I've watched this series go downhill. Pagan was less than stellar, but Ascension takes every Origin-ism, hits bottom, and breaks through to a new bottom we knew nothing about. I couldn't continue playing, I was so unhappy with it.

This game has a very deep "Phantom Menace" feel to it: high expectations, long gestation period, redesigns/rewrites up until the last minute, bad acting, nonsensical plot revisions (midichlorians), and most sadly, high visual quality without real aesthetic beauty and without any real depth beyond the computer graphics.

I will mostly skip the games countless technical problems, since many other reviews document them better than I can. I noticed only that the game was dog slow and that the Avatar has an unfortunate tendency to lose important items without warning.

Lack of world interaction. We went from the "if you can pick it up, you can use it" style of gameplay to a beautiful but soulless 3-d space where only the bare essential functionality has been programmed in. You can open doors and pull the levers that get you to the quest items but that's about it. Pagan had only minimal world interaction outside of its overcomplicated multiple magic systems, but at least you could pick up and rearrange everything. Ultima 9 goes so far as to prevent you from picking up many objects, as the game keeps track of just which objects are useless screen art and which are important. It's a helpful feature given the game's size (and the problematic inventory interface) but it also serves as a reminder that most of what you see onscreen is mere window-dressing.

What went wrong? The key to Ultima was not just the story, but the realistic world. This is not in graphical terms---the realism is in the behavior of objects and things like day and night and weather. Reading all the interviews with Richard Garriott in the out-of-print "Official Book of Ultima", which contains a lengthy in-depth study of the ideas and technology and people behind The False Prophet gives you the impression that having an object be "useless screen art", as in U8 and U9, is anathema to Ultima. One example he gave was of a pole being turned into a ladder by the player, perhaps as an alternative solution to a climbing puzzle.

Garriott contrasted a Sierra-type game, where the pole was most likely just pixels, to Ultima 6 where it would be a real entity with weight and various other properties. That having a flexible game engine allows the player to solve things his own way and carve a unique path through the world is explicitly acknowledged all over this book, but this insight seems to have been lost.

This may not be Origin's fault. I think it's a general pitfall with 3-d games: even the roleplaying ones tend to have very simple maps with only quest locations being interactive, and not very many objects to find. There are good exceptions, like System Shock 1/2 (many items) and Ultima Underworld but Ascension does not make it into this group.

Like every other Origin game I am aware of, the voice acting is ghastly except for the main villain (Guardian, Shodan, that Kilrathi) and possibly the main character. The Guardian is still the same actor, although after The Black Gate they keep adding more and more computerized distortion to his voice, pitching it down (and making it cliche in the process.) I have no idea why; Bill Johnson's great menacing baritone did not need it.

I think the Avatar is the guy who played the overdramatic Stranger in "Nocturne", but since he never says anything of interest you can shut him off. They even have a special button for shutting off just the Avatar. I wonder how the actor feels about this.

An even larger problem is that Ultima-style adventuring does not mix well with full-voice. In ultima games you need to explore many towns and talk to large numbers of people, everyone with their own back story and something to contribute. You can read much faster than these actors talk. They have two choices making a game like this: simply let everything take forever and have players shut off the voices, or have less dialogue and fewer characters. Origin chose the second, and it ends up feeling like Final Fantasy VII (and that's NOT good.)

Lack of Originality.

  • The Black Gate: something is wrong with the Ether that disables magic; the people are turning away from the virtues (for the Fellowship); seems to be connected to a sphere, cube, and tetrahedron made from Blackrock appearing in the dungeons. One or more Bitannian cities/landmarks has been destroyed.
  • Labyrinth of Worlds: Something is wrong with Castle British that seems to be connected with the appearance of large geometric shapes made from Blackrock, once again down in the dungeons.
  • Serpent Isle: Something is wrong with the Ether that disables magic spells.

  • Ascension: something is wrong with the Ether that disables magic; the people have turned away from the virtues (for their opposites); this seems to be connected to enormous geometric blackrock shapes that have their roots in---guess where!---the dungeons. One or more Britannian cities/landmarks have been destroyed.

It's the same with the puzzles. Pull levers, manuever Lara Croft--- um, I mean "the Avatar", onto pressure plates to open the next part of the dungeon, etc etc.

Plot Problems. I hate to sound like a Trekkie, but there are deep consistency issues with Ascension, particularly in its relationship with Pagan. This is actually one of the most disappointing things about the game: it simply chucks out a great deal of what was being set up since U7TBG, with little explanation.

U7 ends with the Avatar unable to return home and the Guardian still taunting him; SI then begins with the Avatar's team pursuing Batlin. SI ends with the Guardian snatching up the Avatar in the Void; Pagan then begins with the Guardians gargantuan red hand depositing Avatar in the ocean. Pagan's ending movie was ambiguous---the Avatar, having been transformed into a demigod, solemnly walks through white towers, snow, and into a desolate Guardian-world with a giant face-shaped mountain. My point is that the cliffhanger from one game was always somehow resolved in the next game's opener.

  • Ascension doesn't do this. There is no movie, and you begin at home on Earth! No explanation on how you got there or why it was possible (events in U7 seemed to have precluded it.) There is no explanation at all of what the mysterious ending movie in Pagan showed, or why you don't begin the game there instead of on Earth. They don't even just say "oh that film was a dream, you really went home."
  • Does it make any sense for Iolo to be working for Blackthorn? Could they have at least explained it?
  • What about all the hints of apocalypse in Britannia that you get in SI and Pagan? The dream sequence where you see Castle British in flames and L.B. wondering why you don't return? The castle seems fine in U9, except that now it's in a different place and there are only four or five rooms. Everything since you left Britannia gives the impression that the Guardian entered it and has dominated it. But when you start U9 we merely have a more intense version of the circumstances that begin U7: blackrock objects causing a subversion of the Virtues. I mean, didn't the Guardian have 200 years in between this visit and your last to mess everything up? That is at least enough time to come up with something new to unleash upon Britannia, not just more Blackrock objects that mess with people's minds.
  • The Avatar becomes a demigod at the end of Pagan. In U9 you can be defeated by a rat if you don't have the Avatar positioned right to strike it. This probably explains why they start the Avatar on Earth, since he would lose his powers there. In other words, they had to avoid starting the Avatar with any power in U9, and rather than really fixing it they just zap him to earth even though it contradicts the story.
  • Why does Britannia now have parts of Pagan's magic system? There weren't any pentagrams or necromancy (see the magic book that comes with the game) before!
  • Where does this tapestry idea come from? I could be wrong, but I don't remember ever seeing this in the Museum of Britannia in any previous game.
  • Characters don't speak in the normal Britannian dialect anymore. "Thee, thy" etc. Instead most of them adopt cartoonish voices.

There are a lot of other issues, even in the fully patched version I have. The inventory system is worthless, and makes you lose items. It's not really based on weight like in U7, there's a certain number of "slots" and when you exhaust them you can't pick up more stuff. (I heard at one relatively late point that there was no inventory, so maybe this was a tacked-on afterthought?)

There's no paper doll either so equipping armor can be problematic. This is made even worse by the erratic behavior of the mouse cursor and the slowness of the whole engine. Combat sucks, anything larger than a rat you basically have to run from. Killing one of the thief/brigand characters takes forever, and you can't realistically fight two at once. You can usually avoid them because the AI is stupid.

Finding things according to directions can be difficult---they usually are not very specific, and the dialogue often differs subtly from the real map.

In short, the finest CRPG/adventure series in history ends with a colossal dud. Every Ultima pushed the boundaries of game engines to do new and unique things, and provide cool activities for the player. All but this one. Since Garriott used to see the engine as driving the development of the play mechanics and story, it seems that the driving philosophy behind Ultima died quite a while before the series did.

I was pleased to see that the GTKfb project is moving forward. I've been keeping a loose eye on this as I am interested in eventually running Octal on a less crashy platform. Also, a possibly faster platform!

Tasks for this week:

  • Work on IglooMag engine V3
  • Work on Octal, get first 'mini MVC' editor component running
  • Probably watch Patlabor I again :-)
  • Stick my redhat stickers all over everything while waiting for RH7 to install
  • Finish grad school application and decide what I want to study there

42 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!