Mighty Drake, Inc.

.plan Archive 1998-1999

[Home][Products & Services][Contents][What's New]Send email to webmaster

29/DEC/99

Doing a little work on SDOE.  Trying to get it to compile.  Also, Micheal pointed me at a really good file synch program.

First thing, I'm going to show games that are locked or in progress.  They'll show up in the same list as open games but with a lock symbol next to them.  This behavior was in there originally, but the box was so small we were afraid of wasting too much screen space.  We thought players might get annoyed at seeing games that they weren't allowed to join.  We've learned that it's more important to show people that there is activity on the server.  Someday I'd like to show player lists and scores, but that's probably going to have to wait for Project X.

I'm also toying with the idea of showing how many games are active in the server list.   But that would mean logging into each server.  Maybe start with the one you logged into last time, and then take the rest sequentially?  Similarly, I'm toying with the idea of reading the Server Listing HTML page and parsing out the number of games in the last 24 hours (my roommate just wrote some code to do that a few weeks ago) and displaying that in the server list.  Or, finding out if that information is available directly from the server.

Most of the above is wishful thinking.  To start, just display locked games.   If the other falls out quickly and easily I'll throw it in there.  Otherwise, I'm planning on spending time on the FF code to reduce the thrashing some more.

After that, my immediate wishlist for FF would be:
Separate scale sliders for each force
Move the forces out into a I-Force Studio file (which would make the above unnecessary)

Long term wishlist for FF is adding more forces and moving the references out to the aircraft files.  The latter so that different guns in different aircraft could behave differently.  All of these wishlist items will probably have to wait for Project X, too.

Hmm, still can't get it to link.  I think Michael moved some stuff around.  Need to find out how he's doing it :-)

22/DEC/99

Well, we were going to work half a day, but Chad's brother was already here, and there were some logistic details to work out before the deathfest... :-)

I'm pretty sure that the server was set up so that player Mighty had a 1/3 damage modifier.  I would splash people several times in quick succesion, only to have them run off.  MAN, that was annoying.  Overall, lotsa fun, though.

Hmm, looking at the ngStats records:
Michael topped the deathmatch totals with 153.7 FPH
Pooooo_Finger a fairly close second at 125.2
I edged Mr Kitty with 108.3 FPH to his 104.2
So I guess my ammo was a little more effective than I imagined :-)  Michael won 12 of 24 levels.  I only won 2.  I think Poooo_Finger won 5.

In CTF, The Bruce ran away with it with a score of 307 with 14 captures and I was a distant second at 159 with 4 captures.  Interestingly, though I was second in scoring I was on the losing team 6 of 8 times.

21/DEC/99

Got image lists finished.  One thing I don't like about image lists and label lists is that I have to remember to add the LoadLabels(l_ScreenPropList); call in every screen::Init() function.  I know that's going to bite me at some point.  I can't think of a better way to handle it at this point, though.
Michael has the herding behavior working.  Very mechanistic.  We think it's going to work well.

20/DEC/99

Not a very productive day.  Working on image lists.

18/DEC/99

Came in to finish label lists and hoped to throw in bitmaps and fonts.  Got distracted when my roommate called me up to join him playing Unreal Tournament CTF.  That ate a coupla hours.  Then got bit by the Fox layout manager again. That ate another coupla hours.  Finally got it working.  Still need to hook up parmImage for labels.  And add in justify options. Michael moved stuff around yesterday.  The layout file is checked out directly to the /media/gui directory.  Apparently, while a DOS copy could write over the layout file while the program had it open, MEW refuses to.  So I had to split the screen reload into two steps.  One to close the file and the other to reopen the file and actually reload the screen.

17/DEC/99

Hooked up option display screen renderer and resolution combos.  Looks like they work
Adding parmLabelList to layout file

16/DEC/99

Went through design doc again comparing it to Fox' feature set.  Had a coupla questions and a coupla suggestions.  No major changes.
Michael was showing off some of the new robot interface.  It's looking way cool
Starting to hook up OptionDisplayScreen.  The renderer detection and selection is a mess.  But it's only accessed two places in the code and not touched very often, so it's not worth spending a lot of time cleaning up

15/DEC/99

Tabbooks loading from layout file.  We're also reading the names of the tabs from that file so they'll localize automagically.
Added some error handling so we won't crash if we don't find what we're looking for in the layout file.  Also some asserts so that hopefully we'll be able to find typos more quickly and easily than if stuff simply didn't show up
Couldn't figure out how Fox does hotkeys.  There's no documentation and no examples.   So I added a little 1x1 button with hotkey "0".  I'm using this to reload the layout file and redisplay the current screen.  This is going to make a huge difference whenever Chad wants to change the art and tweak the layout. 

14/DEC/99

Hooking up all the other controls to ppf load routines.  These rock.  Now it's just a one-line call in each screen to grab a control from this file.
Moved some cast macros from CGenericData.h into proplist.h.  Used one to fix a bug in GetIntProperty.
Moved some color definitions from GUIButton.h to guidefs.h
Moved background screen definition to layout file
Implemented GUISpinner and hooked it into layout file
Loading OptionSoundScreen from layout file
Started hooking tabbooks into layout file

Non-work
Finished skating classes last Tue.  The teacher was an incredible skater, but not a very good teacher.  I think the only advice he gave me in the eight-week course was, "bend your knees."  He didn't do a very good job if giving tips and techniques on how to do what he was demonstrating.  And he didn't explain why we were doing the exercises.

Started a new skating class tonight.  This guy is much better.  "Here's what you want to do.  Here's why.  Here's how.  Try these tricks."   I still suck, but hopefully I'll suck less in a couple of months. :-)

13/DEC/99

No, we don't want to prepend gui/art.  Keep it flexible
Implemented combo boxes, sliders, spinners and text boxes.  Now things are starting to move.
Spent some time trying to figure out how to capture the slider SEL_CHANGED message and update a text box without having to derive a special version of textbox. 
Duh!  Pass in the window as the target and let it update the text box.  It feels like it's time for an afternoon nap :-)
I originally didn't expect to get to the screen layout ppf until Friday.  But the Fox controls have started dropping in so quickly that I want to get that working as soon as possible.  Michael was reluctant to let me do that at first, since it means learning how to work with ppfs.  They're a bit of a pain.  But we think we've found a good collection of layer routines to simplify things.
I have the ppf layout file working.  I just need to do a little more crash protection if something isn't there.  And add in the other control types.  Right now, all I have is buttons.

12/DEC/99

Made it in onna weekend
Moved RCSimulator\IGApp.* to GUI\GUIApp.*
Oops, turns out Michael had a couple of the affected files checked out.  I was sure I checked for that.
Descended from FXStream to work with our file system
Do we want to prepend gui/art to all gui bitmap reads?

10/DEC/99

Restricting check list box so it only changes check status when clicking in checkbox.
Turned out to be tougher than I expected.  Since a listitem isn't descended from a window, it can't capture the button press itself.  So the list gets the message, then does all the position normalization to put the coordinates within the size of the item.  That meant learning how Fox measures stuff.  For example, for the window y_pos, I usually think of storing the first line that's visible.  Instead, Fox stores a negative number showing where the scroll window is in relation to the rectangle on the screen.  Not a huge deal, but it took longer than I would have liked.

Got another irrate-sounding email, I think referring to Alien Resurrection.  The subject line was "punk."  It's interesting that that movie has caused such strong responses.

Left a little early.  Bruce scored tickets to the Stars game

09/DEC/99

<sigh> There's a separate FXxxxFrame class that draws borders.  Can't believe it took me so long to spot that.
Battled with getting the tabs the right size.  Turns out I didn't have the LAYOUT_FIX_WIDTH, etc options as defaults.  Need to define our own window options instead of relying on Fox'
Split the acutal screen instantiation function into its own file.  The correct C++ way to do this is to derive a class from CGUIScreen and override that function.   We're doing this from a static function, so it would be a little bit of a hassle to make that work.  And I suppose we can continue to refer to CGUIScreen * objects all over the place.  Still, this is the only function that is app-specific.  I think I'll leave it for now.  If we need any other app-specific functionality then it'll be easy to split that out into a new class in the future.
Starting to implement CheckListBoxes and ComboBoxes.  Fox has a ListBox class, but not a CheckListBox that I can see.  I'm thinking of writing one and contributing it.   The LGPL license requires us to publish the source to the UI, anyway.
Since we don't want to serialize the CheckListBox I didn't take the time to make it fit with Fox' stuff.  It's now drawing.  Starting to work on getting it to capture messages.
Got it to check/uncheck when clicking anywhere in the selection.  Will look at restricting it to only on checkbox tomorrow

08/DEC/99

The tabbed control dropped into the UI pretty easily.  At least it compiled fairly quickly.  But I couldn't get it to show up.  Eventually we figured out that it was instantiating a 1x1 window.
After fixing that, I still can't get it to display with a raised frame.  It looks like the size of the frame holding the tab pages is getting automagically adjusted.

07/DEC/99

Michael and I are going over the app initialization process with an eye toward making the process generic and easy to extend.
Implemented a couple of small changes that came up during this review.
Build a lookup table into the GetFont routine.  Eventually, we'll read this lookup table from a ppf file.  This way, we can easily change the font sizes for different languages without having to recompile the app.
Changed the particular files we look for when trying to verify that we have a valid installation.  Basically, Preload.ppf, ObjClasses.ppf, SoundInfo.ppf and Whodunnit.ppf
Added in app-specific stubs, WantToLaunchSim, AboutToLaunchSim, JustExitedSim, FinishExitingSim
Went over my work and research on Fox
Started attacking options screen in anger

06/DEC/99

Got transparent buttons sorta working.  It turns out the author of that class assumed that "24 bpp" images take three bytes per pixel.  Under Windows, there's an unused byte with each pixel to keep them dword-aligned.  I remember wasting a day to learn that when I first started trying to display images under Windows.
Later: It turns out that Fox is using one of the options flags to store information about the format that the image is stored in.  Apparently, PNGs always have an alpha channel.  So when I tried to tell Fox not to use the alpha it got confused about the size of the pixels.  When I displayed a 24 bit BMP it displayed correctly.
After hacking around that problem, I found that in addition to the bitmap, Fox is also drawing the gray non-bitmap button.  So when the bitmap is transparent you can see the corners of the gray button.  Oh, well.  Hopefully they'll get that worked out before we ship.  If not, we have the source and can fix it ourselves.
Looking at how to implement dynamically tying buttons to IDs.  Since the message mapping is done using the function name it looks like it can only be done at compile-time.   Michael and I decided that we'll have a lookup table that maps between them.   It's a bit more maintenance, but the number of controls on each screen shouldn't change much over time.  And the layout file will save a huge amount of time at the end of the project.
Spotted FXDECLARE_ABSTRACT and FXIMPLEMENT_ABSTRACT

03/DEC/99

Got the first stab at going from one screen to the next working
Threw up 50 buttons as a test of speed and to test the deferred display that Fox features.  Looks fast enough
Got Quit hooked up correctly
Got background image display working.  Using programmer art, just to annoy Chad :-)
At first, I was trying to put a FXCanvas control behind the buttons, simply because I was stealing code from an example.  Michael helped me figure out how to capture the paint message in the window.
Next, I was capturing the paint message in the child class.  The only reason I had to do that was a pure virtual function in CGUIScreen.  Since that function is called whenever we switch to a new screen, putting an assert in there will be good enough.   Not quite as good as a compile error, but it's not something that's going to slip through.  And capturing the paint message in the parent class will remove a likely oversight when adding new screens.
Finished hooking up PNG support.  PNGs load a LOT faster than BMPs.  There's something in Fox' BMP code that's really inefficient.
Implemented bitmap buttons

02/DEC/99

After working on the UI framework last night, Micheal realized the integration is likely to take a lot longer than he had originally guessed.  We're adjusting the schedule accordingly.
Moved my desk so Michael and I don't have to yell across the room at each other
Deferred creation of the buttons, similar to what we did under MFC.  We've decided we don't like the implications.  Basically, that's not how Fox is designed.  It would add a lot of work for us to incorporate future code revisions from the author.   And he releases often.  So I backed all those changes out and rather than fighting the framework, we're going to use it as it has been designed.
Grabbed latest Fox code drop, 0.99.91
For some reason, the buttons weren't showing up on a CGUIScreen that was a FXComposite.   Michael and I looked at it for awhile.  Then we changed the size of the window and saw the buttons on the main screen.  Spy helped us verify that there were two windows.  Then we used the GUIScreen as the parent to the buttons and they magically showed up.  Resized the GUIScreen back to full size and it still worked.  I hate magic solutions.
Got first pass on thin wrapper over FXButton and checked it in

01/DEC/99

Micheal is done with the inset rendering, so he's helping me get caught back up. He reimplemented the command line, which also holds a lot of dynamic settings. He actually got the sim to run from the command line. When pushing the Fly button, the UI isn't getting out of the way. But the trace statements make it clear the sim thinks it's running.
I found a flathead error. The app would crash when you simply mouse over the Quit button. It turns out I was instantiating a local copy of the button, so it was on the stack and got trashed as soon as we left that function. I have no idea why the Fly button worked. Just blind luck.
Started trying to reimplement our CGUIButton behavior. Michael and I looked at it and agreed that it's just a thin wrapper over MFC and it'll probably be smarter to simply rip it out and put in a fresh thin wrapper over Fox.

30/NOV/99

Try to restore some old behavior, fight compile errors. This is going to continue for another week, I'm guessing.
Got the UI to a place where it's trying to launch the sim. But it's hard to tell what's going on when using the Glide renderer, because it takes over the entire screen. Luckily, the software renderer dropped in smoothly.
Got OnIdle support working just before I walked out the door.

29/NOV/99

Didn't make it in this weekend like I planned
Found a buried FAQ item that addresses the problem I'm having. It turns out I need to call the create() function of each window I instantiate after the app->create() call.
Now I'm trying to tie into the button push and launch the sim.
Almost there. Ran into a link error that I couldn't fix. Turns out I was editing the wrong .def file.

24/NOV/99

It's not displaying the button.  If I move the button instantiation to after the app->create I don't see the button.  I figured that out right at the end of the night.  Time to pour over the sketchy docs and figure out why.

23/NOV/99

Still plowing through compile errors. Every time I add a new CPP I get a blizzard of errors
Woo hoo!  A successful compile.  It's going to be funny watching this thing crash and burn when I throw up the first screen
Man, MFC has really woven itself into our stuff

Talked with Scoo about hosting the web site for his season as coach on mightydrake.com
Set him up with a sub-web and gave him admin permissions

22/NOV/99

Intentionally broke the app, again. Trying to get GUIScreen etc to compile.

Played a game of Age of Kings with Bruce, Scoo and Jacob.  Mo's phone is messed up and he couldn't stick around.  I'm still annoyed at DPlay.  The docs imply that it'll work through the firewall, but recent newsgroup posts show that it's still broken.   I'm very upset that it has been a couple of years since this first turned up and MS still haven't fixed it.

19/NOV/99

Successful display of a window with a button that doesn't do anything. Woo hoo!

Michael set up the Linux box with a web directory for me. I'm pointing it at the plan page on my own web site for now. I need to think of something fun to do with it.

18/NOV/99

Successful compile
Turns out we already have a bunch of #ifdefs to pull the multithreading stuff out for non-Windows environments, anyway.  So it was easy to add another test to those #ifdefs that we could apply at compile-time.
Need to add GetAppDir and GetAppName functions.
Next step is building the first screen

17/NOV/99

Stomping compile errors
I was making good progress until I came up against the need to replace MFC's multithreading.

16/NOV/99

Need to figure out if there's a way to make things like FXDECLARE generic.  I'd like to shield the low level app from the framework as much as possible
Started compile attempts
Commenting out lotsa windows stuff
Looks like this will work.  I'm just afraid that I'm going to write myself into a corner

15/NOV/99

Took a coupla days off because a friend of mine, Jean, came to town.

Then, on Monday, I had to take my cat DunnoYet to the vet to be put to sleep.   We've been fighting his cancer for the last few months.  Up until a few weeks ago his temperment had been the same as always.  Then he went downhill fast.  It was time.  I'm going to miss him.

Installed Voodoo3 to replace G200
Michael suggested I simply drop Fox into the existing app instead of starting a new app from scratch
I think MFC is woven too tightly into the current app
Yeah, they both want to be the app framework, and they both want to create the window.   Instead, I'm going to try to replace all MFC-specific calls with Fox-specific calls.  I'm also going to try to add an extra layer.  There's a lot of generic app stuff in this app.  I'm going to try to split out the app-specific stuff.   For example, we don't have pilot stats in the Project Y.  So that goes in the decendant to the class I'm writing.
In addition, there are several Windows calls we make in the current app.  For example, get current directory.  I may move those up into Fox.

10/NOV/99

Starting new project using Fox
Spent forever figuring out how to appease the compiler
Fought what looks like an unimplemented feature in Windows.   GetTextFace(hdc,0,NULL) should return number of characters to hold font name.   It always returns 0
Figured out how to load an image from a file
This guy really likes everything in his source files, including images
Started setting up Fox to be part of our source tree

9/NOV/99

Wow, I haven't had much to talk about for awhile.  Let's get to it.

The job scene
By dragging my feet long enough, I was able to get another short gig with Michael and Chad at Parsoft/Inertia Games.  I'm working on their Project Y doing the UI.   Apparently Activision owns the code to the UI in SDOE.  So we're taking the opportunity to look for a cross-platform application framework to use in future projects.

Michael had already found a site with several app framework links
Seem to be settling on Fox
Figured out how to specify coordinates for controls, rather than go through their layout manager.
fltk probably would have done the job, too.  Though it crashed on me several times when playing with the OpenGL demos
I kind of like (Broken link: http://www.halcyon.com/www3/jesjones/Whisper/Home.html) Whisper, but the demo startup is really slow.   Haven't figured out why

Arcade games
Mighty's Arcade has grown. A coupla months ago Andy and I took his Gravitar to an auction to sell and came home with a Missile Command and a Ms Pacman. Then a month later I discovered eBay and bought a Black Knight 2000 pinball. About that time Andy got in touch with a local vending company and got permission to take a few empty arcade game cases. He's installing Microsoft Arcade and MAME and building his own arcade game.

The "dining" room is nearly a full-fledged arcade, now.  Altogether, we have Asteroids, Missile Command, Ms Pacman, Black Knight 2000, a cocktail Gorf, a mostly-working Arch Rivals (basketball game), an empty Battle Toads that Andy is turning into a PC arcade game, and an empty shell to a Pole Position that was used as a trash can before we got it.

Back when Missile Command was a hot game, I managed to roll it over one time.   When I was down at UT.  So far on this one, my high score is 257k.  But that's with bonus cities at 8,000.

My BK2K lasted for about a month, and it rocked. Then it started failing. Right after kicking a ball out it would lock up. We traced it to a relay and replaced that relay. No change in the symptoms. When I discussed it with my dad his immediate response was a loose wire. So, we need to trace everything around and find that wire. Maybe this weekend.

1/AUG/99

It turns out SDOE doesn't work through Linux kernel v2.0.x.  Kegel told me ANet works fine with v2.2.x.  So I upgraded the firewall to RH 6.0.  It went in seamlessly and it worked.

As a side benefit, I'll be able to play AoE with Eric.  DPlay 6.0 doesn't know how to talk through a NAT.  With the new kernel, apparently I can get one connection at a time through there.  How annoying.  But that's Microsoft for you.  They always seem to find something to leave out.

23/JUN/99

I didn't know I was going to be a network administrator
Finally got the Linux machine set up with IP Masquerading.  The Linux community is still a bit hobbiest-oriented.  It took me a week to figure out the syntax to tell Linux that it had two network adapters.  I started to try to upgrade the kernel to 2.2.x (in order to use IPChains, the approved program for masquerading,) but the instructions I was using didn't match what I was seeing happening on my machine.  Apparently ipfwadm, the old way to masquerade with, isn't installed by default.  I eventually found the package for it.

When I finally got it all in there, I got a file system error, basically I think a cross-link.  It took a couple of hours to fix that.

Andy helped me get the attributes on the script correct.  Then it worked on the first try.  Everything we've tried so far has worked.  Quake, mail, ICQ, AIM, RealPlayer, Seti@Home, etc.  Way cool.

The newsgroups helped a lot.  The linux.redhat.* groups aren't heavily trafficed.   The comp.os.linux.* groups look much more useful.

Softball
Got the latest version of Scorekeeper for my geek box and TurboStats.  That's a lot of fun.

6/MAY/99

I got Linux running on my 486.  I decided to go ahead and upgrade the memory from 8 to 32.  Man, 30 pin 4x32 parity memory is expensive.  About 4x the going rate.  Had to buy a new NIC.  That went in painlessly.  I was having trouble reading the original NEC 3x CD-ROM, so I picked up a 24x for it, too.  Couldn't get that to work under Win 95, even after reloading Windows.  I thought about scrubbing the disk.  Per Andy's suggestion I went ahead and started the installation, and Linux was able to read the CD-ROM without any trouble.

Linux went in without too much trouble.  Got the default Red Hat 5.2 GUI to work, and then KDE.  It's slow on a 486.  Got Netscape up and running.   Noticed that the built-in web browser won't read the table I have below.  Gonna change that.

<rant>
Do you have any idea how hard it is to get FrontPage to stick to the capitalization you want?  I agreed to update History in Pictures for Michael.  I edited several image properties so that the links to images matched the case of what was on disk.   Over and over, it changed it back.  Some would be okay one time, and I'd change something else and they'd go bad, again.  Finally, I started editing the html page in Multi-Edit before posting.  It was the only way I could guarantee that the case would be correct.
</rant>

6/APR/99

Parsoft
I'm on the General Patch Beta team.  Got our first installment last nite.   I'm going to try to get some online time tonite.

Saturday I was online.  Flew against a guy who gave me his ICQ #.  When I stopped flying for the day I typed his number in and he authorized me.  He then immediately bragged that he had rented the CD and was in the process of copying it to his HD before returning it.  He was proud to admit that he had already copied four or five other games.  Seemed to think, "I can't afford them" is a valid excuse to steal.  I tried to shame him into not doing it again, but I don't think I made an impression.

Real Life
Had jury duty yesterday.  I was among the first group picked from the main jury pool and we spent all day in the selection process.  It was for a personal injury case.   Fortunately, I didn't get picked.

About 8 years ago the plaintiff had slipped at work and messed up his back, badly.   He was very nearly bed-ridden for over two-and-a-half years.  Finally, he goes to this highly-respected back surgeon.  The surgery is fairly successful.  Then this guy heads back home (to New Mexico) and starts up a carpet cleaning business.   He ignores the doctor's repeated attempts to get him into physical therapy.  I never learned what prompted him, but the guy then decides to sue the doctor for unnecessary surgery, along with the hospital for conspiracy in allowing the surgery.

Huh?

This guy should blame himself for the pain he's in today.  We was a tall guy, and obviously out of shape and overweight.  I wouldn't be surprised to learn he weighs 400 pounds.  And I'll bet if he started physical therapy today it would help him quite a lot.  It would be excrutiatingly painful.  But it would have been immediately after the surgery, too.  Rehabilitation often entails a short period of painful work before the recovery begins.

Instead, he wants to blame someone else and make them pay enough to support him for the rest of his life.  I think what the plaintiff's lawyer was banking on was the doctor had a history of cocaine addiction.  The defense pointed out that the doctor had checked himself in for treatment ten years ago and had been subject to "regular" random testing ever since.  He has tested clean.  Other than that, the doctor is a published expert in back surgery.  And I simply can't see how he can allege that the surgery was unnecessary.  Before the surgery he could hardly walk at all.

Grr.  This case fits my notion of the unjustified lawsuits brought on by today's irresponsible citizens with a jackpot mentality.

The lawyers were interesting.  The plaintiff's lawyer was actually the most impressive.  He was relaxed and able to come up with concise questions.  The doctor's lawyer seemed slightly unprepared/disorganized and repeated himself a lot.   The hospital's lawyer had a bad habit of starting to ask a question, then going off on several tangents to try to qualify the question more and more.  He was really hard to follow.

23/MAR/99
Okay, let's go back to Normal paragraphs and see how it looks.

Parsoft:
FS:SDOE hit the shelves last week.  Haven't picked up my copy, yet.  Looks like the average of the messages on the boards are about right.  It looks bland at first, but the flight models really grow on you.  Due to the low end Activision marketing chose, we had to really keep the ground units sparse.  On a fast machine one should be able to sprinkle enough around to be interesting.

I'm really pleased and surprised to hear how much people are enjoying the multiplayer.   Since that was my first stab at network coding I was pretty worried.  I think the smooth game play is due to Eric's code and the stability is due to ANet.  And of course the scoring is Michael :-)  I'm just glad to hear that my code appears to be holding up.

Michael and I talked about writing a quick front-end to build a mission on the fly.   I was thinking of something similar to the original Red Baron.  In RB, for two opposing sides you could choose the plane types, the number in each group, the altitude of each group, and the orientation of each to the other.  That should be really quick to write.  And it would get transferred over, making for a quick turnaround.

Game Dev Conference:
That was last week in San Jose.  Unfortunately, I'm really, really bad at meeting people.  So I don't think I got nearly as much out of it as I should have.   I should be working my contacts with Michael to get to know the Ritual crowd, and Will to get to know the Bloodshot and Ensemble crowd.  Instead, I went there knowing nobody.

One very interesting group that I met on the first day was Cognitoy.  They're doing a game called Mind Rover that is very nearly a 3D version of Robot Club.  The similarities are uncanny.  They attach drivetrains and sensors to a generic body.   They have a visual programming tool.  The levels are defined in the same language that's spit out by the visual tool.

Where they're different is apparently they've spent two years developing this product, compared to the approximately 9-12 disjointed months that we had.  Also, their language is focused on this one problem, rather than trying to live two lives as an adventure game language and an arcade game language.

The short bit I saw looked really good.  In many ways, this is the Robot Club we dreamed of.

Personal:
Got to see my aunt and her family while in San Jose.  They're fun people.   I should probably find more excuses to get out there to see them.

05/MAR/99
  Went to the arcade auction last weekend.  We took our cajones and a truck and bought games this time.  I got Asteroids.  Bruce got a cocktail table Gorf.  Andy got Gravitar.  I thought about getting a pinball machine.  But while discussing it with Mo I came to the conclusion that I wanted to hold out for Black Knight.  They didn't have any Missle Commands this time.
  Michael sent me the Bessie model and a Fokker Triplane that Chad is working on.  Way cool.
30/JAN/99
  Got an assert when trying to apply damage across the net on a part that apparently had already been detached/deleted.
  Found a crash where we were trying to deref through a NULL pointer when deleting an AI path
  Added an INI switch to disable chat easter eggs.   Defaults to off.
  Implemented chat egg to detach all parts
29/JAN/99
  When someone leaves the game, display a message
  When game migrates to me, reset locked flag so it doesn't show up in the game list
  Align labels
  Helped Michael track down a crash
    Something involving detaching parts.  Possibly, one got detached multiple times
28/JAN/99
  A few last bits for Parsoft.
  Fixed buglet where the squad list wouldn't stay scrolled down.  As soon as we changed a player (ex. ping) we reset the list to the top.
  Played a dozen times trying to crash network code with new non-respawn.
  Crash happened when detaching a part when remote plane crashed.  Memory usage appeared acceptable.
24/JAN/99
  Cool, my web site host answered back immediately.  He pointed out that my script had a coupla errors.  Apparently, there may have still been some vestigial pieces of the site on the old server, and that's what the script was pointing at.
23/JAN/99
  Finally getting around to building a Thrustmaster file.   It turns out, the simplest is simply to copy the keyboard.inp and edit the syntax for the TM setup.  Looks like it's going to work great.  I also found a good program called Fox Two that actually helps a lot in programming the TM setup.
  Did another 20 mins worth of work for Parsoft on Wed.  Just added a message when the host goes away so that everyone knows why they're not seeing any other planes.  Takes about 5 mins to time out, though.  Actually, it should have been 20 mins work, but with my sleep schedule I had been up about 20 hours at that point and I got stymied by silly compile errors for about 45 mins.
  Apparently, moving Frontpage to a new machine marks everything as out of date, including my Perl script.  This new server doesn't appear to provide a way for me to recompile the script, so my Thought for the Day is broken.   Just sent an email asking my host to recompile it for me.
  Went to AdLibs last nite.   Lotsa fun.  Rosy and Sylvia were late, and our table was right up front, so I was alone at the table for 10 mins.  Of course, the MC had fun with that for awhile.  "You're alone?"  "For now."  "For now, yeah right.  The women will be flocking to the table in a few minutes."
12/JAN/99
  Did 10 mins worth of work for Parsoft a coupla days ago.   Apparently, a bug report was written backwards.  We were seeing lobbies/sessions for other games using LAN protocols.  Kegel gave me a workaround.   We filter incoming sessions with our session ID.
  Got my new computer a week and a half ago.  P2/400 w/128 meg, 16 gig, TNT and Voodoo2.  Still installing stuff.
    Another Mickeysoft irritation.  I got two pointing devices.  A PS/2 trackball and a USB mouse.  But somewhere down there they go through the same driver.  Therefore, there's only one Control Panel applet, which means only one speed control.  When I get one comfortable, the other is way off.   Emails to Logitech and the USB forum haven't produced a response, yet.   Mickeysoft responded with, "Sorry.  Don't work.  No workaround."
30/DEC/98
  Successfully sending mission across
  Found out how to handle session lost.  Turns out, Activenet is returning that info in the return code, not as a packet
  Finished handling session lost.  Was crashing because we were deleting the dialog inside of PumpMessages.  Changed it so it sets a state that we can handle later
29/DEC/98
  Got mission send to compile
28/DEC/98
  Started working on sending mission file across
  Frequency of score requests based on network speed
  Keep track of who is master.  If he leaves, go away
  Hmm, somehow I was still using the mission display name when I wanted to use the filename.  Showed up in localization
22/DEC/98
  Tried catching ActiveNet's session-lost message.  We're never getting one.
  Crash when trying to join second or third server.  Turns out, I was using a list that had "leftover" sessions, then joining a server which deleted those session, and then we were trying to access deleted memory.  I have really learned that one should not alias pointers.  Pass IDs around.
21/DEC/98
  Found dupe lobby MFU.  Turns out I was forgetting to zero-fill the GUID we were testing with.  Doh!
  Implemented latest activenet
    That fixed a bug where host migration lost the locked attribute of a session
  Highlight player in debrief screen
  Ran a network game.  Man it's neat having the score correct :-)
20/DEC/98
  Sheesh!  Finally finished with scoring.  You would think we can't count.  There were a coupla problems.
    First, for single player scoring, lumping everything together in the CPlayer object works just fine.  In multi-player that was a problem.  We were having trouble splitting out AI kills and deaths.
    Also, the entire scoring thing is inherently confusing.   Each plane doesn't keep track of its kills.  It keeps track of who killed it.
17/DEC/98
  Working on scoring
16/DEC/98
  Network touch-up
    Added ping label to server list
    Added Double-click to mute/eject labels to lobby/create
    Verified that none of the missions use the wrong squadron nationality (ie, German squad for a British plane)
    Verified we handle wrong password in a reasonable manner.
      The report was you had to exit the lobby and rejoin.  Not what I saw.
    Added test for blank game name
    Found where we can see 180+terrain tiles.  We only allow for 120.
15/DEC/98
  Fixed not counting kills in Free for all (introduced to not count friendly kills)
  No longer show ??? in NW Debrief screen
  Changed names of a coupla missions
  Verified that in Straggler mission, JU-88 is banging his props on a small ridge on takeoff
    Turned out to be a bogus invisible poly
  Ordered a P2/400 from Wayne
14/DEC/98
  Went through all the missions and made sure all bombing missions had only one objective
  Verified we're acknowledging joystick calibration
  Changed win condition test so that if the player meets his objectives, he wins.  Also, don't bother telling him if the opponent met his objectives.
  Met with Buck and Andy on Sat.  Trying to map out a path
  Lazy this weekend.  Didn't work.
11/DEC/98
  Added GotRadioMessage sound
  Fixed off-by-one when returning to mission screen
  Typed up how one can kill the sub and still get "sub escaped" debrief
  Finished laying out of score
    Since we're using a proportional font, it was hard to right-justify the score.  Michael noticed that one digit is about two spaces.   So I just go through and replace one space with two.  Looks good enough for me.
10/DEC/98
  Started on in-game scoring option
9/DEC/98
  Mute in lobby
  Fixed a crash bug introduced by leaving session delta open
    Wasn't deleting sessions when going back to server list
  Fixed can't join bug introduced by server ping
    I was using the string that included the ping
8/DEC/98
  Added Server ping
  Fixed miscount in lobby list
    Was turning off session deltas between lobby list and lobby screen.
    Apparently that was confusing ANet.  Leaving it on fixed it.
  Added Kills and Score labels to bottom box of net debrief screen
  Added display of aircraft that fail CRC
  Using network-friendly CRC check
  Fixed crash bug if you Esc out of network screen
7/DEC/98
  Added wait cursor all over the place
  Rearrange how screens are painted during Init
  Bold player names in chat box
  Bold system messages that go into chat box
  Helped Michael track down area where we weren't calling idle handler during texture cache creation.  Net players were getting dropped
6/DEC/98
  Captured Top Gun screenshot :-)
  CRC check aircraft files
  Fixed leaking file handle when testing net mission CRC
4/DEC/98
  If we were more than two lines from the bottom we wouldn't scroll.  Since we can send more text than that, I now make sure we check to see if bottom line was previously visible.  If so, scroll to keep it with new text
  Found bug in mission list, display name vs file name
  Don't even list missions with too many aircraft
  Changing to reliable protocol during game setup
3/DEC/98
  Found where we're still getting into network games with no name.
    I was testing to see if there were no pilots in the pilotstats directory.  I also needed to check to see if the name was blank.  If so, default to the first pilot in the stats directory
  ping, kills, score labels
  Finished rejoin
    It turns out I was enumerating sessions on the wrong server
    Also, I was reentering when joining the session and creating the player
  Fixed dupe servers
  Kegel pointed me at how to get the current list of servers
2/DEC/98
  Got rejoin 95% finished
    For some reason, we're joining the wrong server.  I'm mimicking the behavior of the UI.  I wait for a server to come by, then I join it.   I wait for a session to come by, then I join it.
  Changed ping
    I now track how much time has passed since the last PumpMessages.  If over a threshold (200 ms) throw away the ping request/response.   Pass those intervening times to the ping routine so it can calculate the average lag inherent in this system rather than relying on a hard-coded number
  When message box is up, refresh it when updating squadron list, option list, etc
1/DEC/98
  Don't redraw lobby if highlighted.  Otherwise, if people are coming and going it would keep un-selecting, making it hard to get in
  Show ping in create/join screen
    Had to put support into owner-draw listboxes.   Hard-coded for now
  Show ping in lobby
    Don't redraw player if highlighted so we can kick if needed
  Sick for a coupla days
27/NOV/98
  When changing lobby counts, don't change order
  Sheesh, it's been nearly a month since I updated this
  When changing the count on lobbies, don't change their order
  Looked at adding ping to servers.  But they're all getting reported to me as 9999.  Need to look into that.
26/NOV/98
  Happy Thanksgiving
  Played in the annual GJ Lactic Acid Bowl.
  Good turnout.  Let's see if I can remember everyone.   Dave, Rosy, Bruce, Mo, me, Wench, Mike, Doug, Dale, Pete, Terry, Jeff, Eric, Christy, Terry's kid, Nathan, a walk-on whose last name was Gilmour, so we called him Happy.  Kathy for a short time.  Kim and Janet stopped for a few at the end.
  Played in the annual GJ Lactic Acid Bowl.  I'm way out of shape, so I paced myself.  Covered Mo the entire day.  Right at the end of the game I managed to sneak out to the side.  Mo was trying to cover two people.   Pete threw the ball to me, I juggled it, but since there was nobody close I was able to keep concentration.  When I finally got a handle on the ball the only person I had to beat was Christy.  Happy got in her way and I got around her easily.  I started to coast, when I spotted Rosy trying to catch me from across the field.  He took a dive at the five, but only got one finger on me.  So I scored my annual TD.
25/NOV/98
  Show "No squadron" in the selection box upon entry
  Changed squadron list box in create/join screens.  It is starting to look usable
    It's now a listbox, not a CheckListBox
    Using a bitmap to indicate ready/not ready.  Sort of a light on/off bolding player name
  Got a silly ICQ virus warning from a friend.  At 10:00 pm last nite Steph sent a message via ICQ that said "Don't use ICQ on Nov 25.   There's a virus that goes off that day."  Obviously, the only way I could see the message is if I fired up ICQ.  Doh!  Apparently, someone was playing a practical joke on her.
24/NOV/98
  Changed player name indent to try to make it stick out a bit more
  Dropped display of max players by No Squad
  Fixed small memory leak in listbox
  Also refresh lobby list
  Now refreshing game list when backing up from create/join
  Need a separate "not ready" that says people need to choose a squadron
  kick user option
  onFly someone not ready goes to game list
23/NOV/98
  Lock game checkbox to keep anyone else from joining
  Default to user's name for network game name
  Pilot name first time in
  From create screen, when backing out delete the session from the network's list
  Fixed double-create when creating a game
  Fixed crash when backing out of lobby list
  Update player count in lobbies as they change
      This is to give me four columns
21/NOV/98
  In NW debrief, instead of -1, put ???
20/NOV/98
  Fought a network game with Michael, probably for over an hour.
    In addition to us in Spits, there were two FWs, two Me-262s and two P-38s on AI.  The Spits are still incredibly nimble, so it was a lot of fun.   We'd fight each other for awhile, and then we'd hear the jet engines or see tracers going by.  So we'd break off and kill AI for a few minutes.  Eventually, our frame rate started to suffer, and we started seeing texture bugs.
  Chased fictitious localization bug regarding mission names
  Fixed a localization oversight in NW debrief
  Went back in SourceSafe and found the check-ins that broke networking.
    Finally figured out that when I added a new test to protect against a NULL pointer I had accidentally left a variable declaration inside the braces.   So the variable declared outside the braces was never getting changed.  A higher level function was thinking that the call was failing.  The compiler should have an option to catch that sort of thing.
19/NOV/98
  Spent the entire evening trying to figure out why networking is broken
  Put a start/stop routine in so we can turn off pinging when we're about to do something expensive, like change screens.  Otherwise, we end up with artificially high numbers.
18/NOV/98
  If ping too high, warn user
  If benchmark fails, force 1/2 realtime
  Implemented ping.
    Compared to the DOS prompt ping, we have an inherent latency of 50-60 ms, because we're only polling the ANet call 30 times per second.  By the time it gets noticed on the far side and resent and then noticed on this side we've lost a lot of time.  Hmm, I should consider looking into dpio to ping at a lower level.
  Michael figured out the lack of attribution.  It turns out the shells from the surrogate aircraft were hitting the target and were also doing damage.  About half the time the surrogate version would do a bit more damage than the network version.  Michael's going to put code in the tracer class to check if it's hitting a plane, and if so, check to see that it came from a local plane.
  Added soft max players limit that's set in the prefs
  Testing network scoring
    Not all planes got in the first time.  Jay's rebuilt the software texture cache and was weeded out.
    Not all scores getting attributed.  After a few more tests with Michael he   determined that explosions are interpreted as the plane damaging itself. If it does enough damage to itself then the score will never get attributed to the plane that actually did the damage
17/NOV/98
  Enforce limit of 16 players
  Found out we can't see Internet games.  It looks like ANet's new dpShutDown is the culprit.  When we close the lobby to create a game it's disconnecting us from the server.  Going back to the old dpClose behaves better.   I didn't figure that out quickly enough to include in tonite's build.  Got a call in to Dan Kegel.
    Turns out the not seeing internet games was a questionable doc problem.  It said, "If flags is not set to 1 then dpShutdown disconnects from the server."  The "...is not..." threw me.
  When coming back from NW briefing screen we weren't keeping the ready status
  Cleaned out several bugbugs
  Using localized string for reporting when someone is onna slow machine
  Got around to hooking up machine speed test when joining a game.
  Helped Michael arrange ANet DLLs.  We think he may have had a lib/dll mismatch
16/NOV/98
  Added arrays to really support the accessor Michael needs
    On one test, I actually got a positive score
  Got listbox with icons to highlight correctly
  Successfully checking for and handling unknown missions and failed crc
  Don't allow god mode in network games :-)
  Spent a lot of time trying to explain to Michael how the VNode stuff works.
  My little accessor was broken because I was going against the wrong array.  As we were looking at it we figured out that I'm not storing the squad/plane of remote AI aircraft. That'll likely be a problem for scoring.
  Incorporated the latest ANet build.  Runs much better than the last
  Horizontal scrolling in chat input box
  Implemented icon showing status of games in list (fast net, realtime, pwd)
  Pulled some constant strings into app string table
  Added accessor so that Michael can get the squad/plane from a VNode
  Fixed crash bug when backing from create/join screen back to internet lobby
15/NOV/98
  Spent most of the day implementing the new screens.
  Starting to add in support and display of network speed and realtime settings in the current games list
14/NOV/98
  Spent most of the day fighting mouse handling.
    Flag added our "Messageboxes" in at the last minute, and she never envisioned them needing to do anything except more than Ok/Cancel.   My edit boxes and buttons almost worked.  I could type into them.  When I tried to pass mouse moves and clicks I could shift the focus.  But they just weren't falling into place.  So we decided to split out the name and password boxes into separate screens.  The create dialog in particular had gotten pretty complicated, anyway.
  If deleting the last pilot, create a new one so we never end up with 0.
13/NOV/98
  Gave scoring to Michael.  It turns out we're getting the allegience wrong.
    When we read the mission we compare the allegience each plane to the one the player is in.  Since each local machine is keeping track of who has killed it, it thinks that every time it dies it's a negative score.  So that's what it sends out to everyone else.  We need to adjust that at runtime.
  Lots more testing
  We're shooting to clear our high priority bug list by Monday.   70-odd to start with, but most are dupes or are already fixed.  Down to 20-odd by the end of the day.  Most about networking.
12/NOV/98
  Lotsa testing
    How to combat pausing.  It's gonna happen on our target machine.
    Tried sacrificing frames. Not enough help.
    Let creator choose to run at 1/2 realtime for a level playing field
    How do we present it to the user?
    If running at realtime
      Live with pauses, or
      Ratchet down below realtime when we detect frequent pausing
      Implement a benchmark and warn people on slow machines that they're prolly gonna be at a disadvantage
    What we would really like to do is punt and require a faster computer.  But our Europe market can't handle that.
  Fixed: Only the host sees names correctly.  Everyone else sees the host's name
11/NOV/98
  Ran tests for Dan Kegel to try to track down slow ANet performance
  Implemented in-game chat
    Disappear after 10 sec
    Visual indicator that you're in chat mode
    Esc out
  Reduced min display frame rate to 10
    Tried several tests, but couldn't get valid test case
    Pausing I saw could have been due to the surrogate machine spitting out lotsa trace output
10/NOV/98
  Saw wing bending on a P38 that didn't go across
  Wrote up explanation of damage and delay for QA
  Added delay and hertz to prefs
    Host sets
    Will remove before shipping
  Chat line longer that 220 characters weren't sent at all.   Now they truncate
  OK button in NW debrief screen goes to main menu
  Reran timing test of ANet Nov build.  Even worse timings than last time with their debug DLL, 300 ms.  Swapping to the release dll brought it down to < .1 ms.
  Helped mom free up some disk space
  Ran multiplayer test
    Michael was running a debug build and got it to die in a process damage call
  Filter multiplayer out of theater list
09/NOV/98
  Working on ping
  Move multiplayer directory under missions
  Not getting plane names from bigfile
  Don't show "Artificial Intelligence" in vehicle ID.   Just blank.
08/NOV/98
  Incorporated the latest ANet version.  It was intolerably slow.  Calls to dpReceive were taking 100+ ms.  Plus, apparently their interrupt handler is similarly hobbled.  Loading a mission was on track to take 1/2 hour.
  Ran the game over the net today.  Worked pretty well.   Couldn't get TCP/IP to work through Michael's firewall, so we had to use Kali and IPX. 
  Got to chat for a minute with some Kali guys.  Pretty cool.
06/NOV/98
  Got fast network checkbox into create game popup.  Chad had to make a bigger background bitmap.  Hooked it into prefs file
  Finished vehicle ID showing user name
  Added Esc support to all network screens.  Added bonus, this adds Esc response to all screens where a text box had focus (ex. Pilot screen)
05/NOV/98
  Added fast/slow network checkbox
  Started adding name to vehicle id overlay.  Not getting vnode where I thought I would If a game has started, don't put it on the list of games to join
  WatchForServers apparently gives me the server list all over again.  So, clear the server list just before watching for servers
  Since I have found a couple of servers that work, I managed to test that backing out of create throwing people out of join.
  Also tested internet join a game that doesn't have a password
  Sending log files to Dan Kegel to try to track down why I'm not seeing lobbies in most servers.  gtest does see them.
04/NOV/98
  Implemented the host leaving and kicking everyone else out with him
  Fixed simple bug handling squadron combo in create/join screens.  If you brought down the combo and then didn't choose a squadron we'd end up with LB_ERR and consequently a look up to a NULL pointer and try to deref through it.
  Tested arming.  It appears to be consistent with single player.  But I've never successfully fired the rockets.  They always seem to fizzle.
  If there's no password on a game, don't put up the password box on join
  Oops, accessing a static through something that's inlined by default across a DLL boundary doesn't work.
03/NOV/98
  Got scoring almost finished.  It went faster than I expected.  I got to the point where I'm sending the correct info back and forth until one player quits.  My messaged IDs overlap, so the they start feeding each other bogus information.  I should be able to fix that first thing tomorrow.
  Eric implemented a fix to combat warping on respawn
  My baby bro asked to use space on my web site.  Need to research FrontPage sub-webs to see what it would take to let him do that
02/NOV/98
  Started learning about the scoring property lists.  I turns out, a plane doesn't keep track of what it shot.  It keeps track of what shot it.  So I think what I'm going to do is every few seconds I'm going to ask each plane how many times I shot you.  Take a snapshot.  That way, if someone quits I'll have my score from him current to within a few seconds.  Hopefully, that'll also let us keep track of exactly who killed who how often.
  Spent half the day with Eric researching warping planes.   He figured out that he was reading old values from the queue as though they were current.
  Added in packet serialization
01/NOV/98
  Add "Can't init network" to NetworkDialog
  Add "Changing to" to create dialog
  Check no valid game chosen on join
  Got Ready working.
  Damned CCheckListBox doesn't support tab settings
31/OCT/98
  It turns out Eric didn't realize that we were using unreliable packet delivery.  So he's not handling out-of-order packets.  At first, I thought I could do that easily, but upon reflection I don't think that's the case.
  Options on remote side weren't getting shoved into prefs object
  Reproduced "explosion on regen" bug.
    Apparently, the plane on the remote side was just disappearing without blowing up.  When the new plane is created, the old plane gets levitated to the spawn point.  (Cool to watch.)  Most times, they'd overlap and the extra plane would take damage and explode.  Even if they don't overlap, the old plane is designated as a hulk, so it has a timer in it that blows it up a few seconds later. The new plane is unscathed, since all this is happening on the remote machine.
30/OCT/98
  Sending kill list across
    We're not seeing the kill list even on the local side
  Getting strings from string tableAdded a few error boxes
  Testing
    AI doesn't shoot at aircraft with autopilot turned on
      Wrong.  It was working.  It just looked like they were turning away.  Coincidence.
    When the connection is momentarily "lost" the remote machine still knows where the aircraft is.  It simply doesn't show it.   We still padlock that spot, the AI buzz around, you can F5 to look at it.
  Michael and I flew against each other for awhile.  We found out the FW-190 has almost no elevator authority.  It can make only lazy turns, and a Typhoon can easily out-turn it.  The Spit has way too much authority.   Almost any stick motion causes red/black out.
29/OCT/98
  Once we start flying, don't allow new players and don't list ourselves in active games
    Doesn't work
  Tested to verify options work.  Wasn't sure about g and torque effects
  Implemented Network debrief screen I think it works, but the sim crashes when a remote pilot ejects.  So I'm having a lot of trouble testing.
  I'm not sending the list of kill across, just the count.
  Fixed bug where I wasn't disabling all buttons while ipx name/pwd box was up
  Save network join password separate from create password
  Fixed assert when tapping <CR> in password box of join screen
  Fixed aircraft appearing on top of each other.  Turned out to be my bug.  I left off a -1 when doling out aircraft.
28/OCT/98
  Save off net options in prefs
  Save off net game name and password in prefs
  Implemented password in IPX and TCP/IP
  Lotsa testing
    Turrets - I think they work
    Verifying that AI doesn't fire at a remote airplane
    Bombs drop and keep dropping on remote side.  Flutter on remote side
    Arming info needs to be sent across
    We're regenerating sometimes when we shouldn't
      Two aircraft starting on top of each other at start of mission
      Even the junk aircraft are getting regenerated
    Need to clean up dead aircraft and parts more quickly in network game.  It's really dragging down the performance
  Fixed bug in briefing->create where we lost track of which mission we were in
  Changed buttons in game name box to ok/cancel
27/OCT/98
  Hacked in network options. I'll do it differently when I put it in the prefs file
  Implemented naming of games.  Not doing password, yet.
  Implemented IPX screen.  Took about 45 mins.
  Got brief screen to work in both create and join.  Ended up moving even more down to MissionBase.  Originally, I was planning on letting the AirplaneAssignments, etc messages run those.  But that would entail either new query messages, or sending a CanIPlay message, which would cause dupe probs.
  Doing a bFirstTime test in the fillsquadron and FillPlayerList was the quickest.
  Crash turned out to be a cross-DLL boundary problem.   The inline function calls weren't getting processed correctly.  In the past, I guess I was calling through a pointer that was already sanitized.
  Fixed a few last minor differences between using the listbox as my array and using an STL vector
26/OCT/98
  Spent all day on one screen.
    While the host player is in the briefing screen we still need to handle squadron changes.  When the joining player is in the briefing screen we need to handle option changes and the launch message.  In both cases, we need to build the chat string.  Splitting that functionality away from the UI wasn't too hard, though it took a lot longer than I expected.  And it made for some really ugly code.  I now have the pointers back and forth between the UI objects and this message handler.  Yuck.
    It turned out, handling the launch message was really tough.   In all other cases, we could handle the messages in the background while the briefing screen is up.  With the launch message, I need to get at some routines that are in GUIScreen.  But my message handler never knows about CBriefingScreen and the briefing screen never knows about the message handler.  I had to make a little object with a static GetInstance function and a virtual launch function that was called by the message handler.  Then, in the init routine of both join dialog and briefing screen they set the static this pointer to an instance of a derived object that knows how to call into the current screen to get at the launch function.  Yuck, again.
    Crash in first attempts since ripping everything apart
22/OCT/98
  Got squadron choice UI working on both sides.   Basically, it's all there except the ready checkboxes.
  Flew two network games.
    The first was 3-player+1 AI.  I was in an FW with an AI wingman vs John and Chad in P-51s.  Chad hit the ground fairly quickly.  Not sure what happened to the AI plane.  I got too low and fixated on John in my 6 and ran into the ground.  We're still losing track of dead aircraft.  They tend to hang in mid-air on remote machines
    The second was 7-player.  That was pretty cool.  I had a P-51 on one machine and a Typhoon on the other.  In the P-51 I ran into an FW.   Took me out.  In the Typhoon I ran out of ammo and was trying to ram John.   Almost got him a coupla times.  Then all of the machines crashed at the same time.  There was more noticeable warping/pausing in the 7-player game.  But it was there during the 3-player.

Anyway, it was fun.

21/OCT/98
  Gawd, dammit.  FrontPage just went and changed the cell widths of all of the left-hand cells both here and in the archive page.  Now I need to go through both of them with a text editor and fix them.  Much faster than using FrontPage.  Wonder when I'll have time.  Grr.  I hate Microsoft.
  John offered me a bonus if we ship on time.  Everyone else already had one in place.
  To that end, he has asked everyone to put in 70 hour weeks until we ship, with core hours being 9am - 7pm, and the rest we can allocate as we wish. Not a bad crunch for our industry.  It's only about 10-15 hours more than I was already working.
  Ran some more tests for Eric.  He implemented speed calculation of the remote aircraft.  He's doing it simply by finding the distance to the previous position.  Or, as he puts it, he's simply subtracting the two matrices.   That's close enough for our needs.
  John asked if I needed anything for networking.  I suggested that we find another PC for Eric, because running his tests can eat half of my day.  He said he recognized that, but that Eric feels that it would take more time for him to learn all the idiocyncracies of Windows than he wastes of my time.  OTOH, Eric commented today that he's getting more comfortable with the IDE.

IAC, John said he'd try to take over Eric's tests from me.  As a bonus, that will put John right where he needs to be to address network performance.

  Finally ripped into the squadron/player list.  Looks like it fell out nicely.  I should be able to finish the Join side tomorrow.
    I used to keep a pointer to the CNetPlayer as the data to the listbox entry.
    Now, I have an object that holds either a player pointer, or a squadron pointer.  It also holds what squadron it belongs to.  The squadron object holds how many aircraft there are, and how many are currently occupied. The player simply chooses what squadron he wants to fly in.  He gets put at the bottom of that squadron.  So the first player into a squadron is the leader.
  I may drop the idea of the host enabling/disabling AI aircraft.  I think the double-checkbox UI would be very confusing.  Instead, whatever aircraft are in the mission get flown.
    Spoke with John as I went out the door.  He agreed with me.  If you want a different number of aircraft, make a new mission.
  Fixed the crash after flying a network game.  After flying the mission we drop back to the initial network screen.  If we end up shipping with the respawn then we'll have to keep that.
  John and I flew H2H for a few mins.  I started on his tail and stayed there for a few mins.  I didn't have him padlocked, so a coupla times I lost him. I think in the end he had the advantage, and then the game crashed.  He introduced a bug in the Glide code while trying to fix Banshee support.  I think he has already fixed it.  Anyway, it was pretty fun :-)
  Well, apparently it was official earlier this week.   Zues got canned from MCI for running the Indy clan server and dialups using MCI equipment.  Bummer.
20/OCT/98
  Haven't updated for a few days.
  Got AI-controlled planes in multiplayer
  Now sending name of mission file across.  The mission files are small, so eventually I'm just going to send the mission file itself.
  If the mission file is chosen, then someone joins, they get the change mission message before the player object is finished being created.  So joiners now have to send a CanIPlay message to let the host know they're available.
  Still need to send player list
  Started doling out plane assignments instead of hard-coding one and two.  For now, just starting at the top and handing them out sequentially
  Similarly, telling all clients the vnode of the AI aircraft on the host so they synch up
  Guns coming across.
  Damage coming across.
  We have a damage modifier.  It was getting applied both on the sending machine and the receiving machine.  So we were only applying 4% of the damage.  When we applied it only on one side the target aircraft blew up good.
  We're looking forward to plumetting productivity as we play a lot of network games :-)
  Got cable router at home
    Installation should have taken 90 mins, took 3 hours
    They left without setting up DNS, gateway, etc.  But they did leave the numbers
    My first download happened to be a 1-meg file.  I almost didn't get a chance to see how big it was because it only took about 1.5 sec to download.
    Their page to add extra IP addresses was down, so I couldn't hook Bruce up last nite.  Hopefully tonite.
      Yup, the page said it should be ready in an hour
  Wigged out completely and forgot that I had scheduled lunch with Manning.  Ended up being able to reschedule the cable around lunch.  Chad and Michael were there, too.  Didn't talk about anything substantial.  Just keeping in touch.
14/OCT/98
  Got two machines to use the aircraft in a mission, rather than creating extra aircraft.
  Started fleshing out UI messages.  Got mission change.   Need to accept ack.
  Decided to send the mission every time and save it to a temp file.  Our largest is 13k, and that completely removes unknown mission and bad crc hassles.
  I keep on going back and forth from "assume it always works" to trying to set up a system where I keep track of what message I'm waiting on from which user, with timeouts, retries, etc.
  John talked about an input system similar to my command line system.  Other objects call it and tell it what they handle.  The object keeps a list.  If a new input hook shows up, it's added to the list.  The list is persistent.
12/OCT/98
  Went in for a little while on Sun, but didn't get anything substantial done.
  Started setting up messaging system between the Create and Join screens.
  Spoke with Eric about how I'm going to communicate what plane the player is in and which planes in which squadrons are AI.  He's going to call me and I'll give him a structure with the number of total aircraft, and two arrays, one being an enumeration of the squadron for each aircraft and the other being the aircraft index within that squadron.  The first plane will be the player's.  The rest, AI.
  Our bullets may not have enough punch.  And our cannon may have too much.  When shooting JU-88s, they explode nicely from a coupla seconds of cannon fire.  But when I ran out of cannon ammo I couldn't finish one off with MGs.  Our AI gets dumb after a few mins and starts flying slow, wide circles.   And their gunners aren't firing back at the moment.  So I could leisurely sit behind the target and fire only as the sight tracked across.  Saw lotsa junk flying off.  I think I had 160 rounds in each of four MGs, but couldn't finish it off.
  I was trying to get a good screen shot of the Spit and JU-88 in close formation.  Then I got the idea of doing a Top Gun shot.  But I was too close to the JU-88 when I flipped over, and I crashed into it.  We'll probably do that when we hook up machines with different aircraft.  The frame rate is good enough onna P2/400 with a Voodoo2 that it's really easy to fly formation.
9/OCT/98
  More networking tests.
    Bending working again.
    Still not perfect at destroying both planes.  But Eric thinks it's good enough to set aside for now.
  Lotsa work on UI.
    Just before leaving tonight, Michael had some suggestions on how to combine a couple of listboxes to free up some screen space.
  Flew the sim several more times.  I'm cheating by using the HUD.  Especially with the P-51.  Its wingtip stalls below about 200 kts are just too tough.  Shot down several aircraft.  I'm getting much more consistent.   And patient.
  Chad upped the firing rate.  Now, there's only about 15-20 secs of firing time in a Spitfire.  Takes some serious discipline.
  Chad also added a chevron to the canopy of the P-51.   That's a huge help in keeping track of your orientation.
  Another Chad addition is a rainbow at the edge of the world.   With the winds, you can never reach it :-)
8/OCT/98
  More networking.
    Currently working on enumerating missions and aircraft within a mission.   We're going to have a separate multiplayer directory to hold network missions.
    Currently, we don't send any ground unit info across.
    Getting better at landing and running a wing into a fence.  I think we used to send bending across, but that may have been luck.  Anyway, things fall off pretty much correctly, but bending is gone.  And when the plane is destroyed the surrogate is still freezing just before death.
    Made sure to init static vars in the constructor (CNetInfo)
    Talked with Eric, Michael and John about starting missions.  We're going to list the planes in the mission.  The host toggles them as AI or player-controlled.  Players choose their plane.  Host controls AI of each plane not controlled by a player.
  Flew the sim a few times.  Shot down my first FW190 that was set to cap, and therefore was shooting back.
  John has written some really cool additions to padlock.   It automatically zooms in when the target nears your nose, and zooms out as it goes away.  That helps a lot with orientation, but the bubble of the P51 and our head roll still makes it tough.  I keep getting to a low airspeed and the wingtips on the P-51 stall.  It's tough to get out of.
  He also added a boresight padlock, which lets you padlock a point on the ground.  I haven't tried it, yet, but it sounds way cool.  I really wanted that in A-10 Cuba.
7/OCT/98
  Lotsa work on networking.
    Implemented deleteplayer/session in lobby and create/join screens
    Eric has bending working.  Took several tries to land and drive past a fence with enough force to bend, but not to break
    But when the host plane is destroyed, the surrogate is still freezing at that point.
  John wants me to implement thaw/freeze, in case we need to keep the game respawn hack.
  Michael and I discussed how we handle weapon fire
5/OCT/98
  Took most of the day to straighten out dupe/not enough players.  The calls to PlayerExists are new, and the additions to the player map are called from a few different place.
  Emailed Dan Kegel asking for an FS:SDOE lobby server.   He said it should be up tomorrow.
  My POP3 accounts are still screwed up.  My roommates' email is forwarding to my Onramp account.  I've sent three messages over the last week to my web host and haven't gotten a reply back.
  Got the Lynksys hub.  Haven't tried plugging into it, yet.  Suppose I should try that pretty soon.  I have some class 3 cable around.   Need to go buy some class 5.  One thing I really don't like about it is the noisy fan they have in it.  That kind of constant noise really gets on my nerves.   I need to try setting up some other fan in its place.
  Luka's thyroid level was in the normal range.  So she's back on pred.
2/OCT/98
  Spent all day fighting our duplicate sessions bug.   Finally got it with Michael's help.  It turns out my less test to the map template was bad.  For some reason I had forgotten about memcpy and wrote my own.   It's embarrassing that I didn't get that right.
  Updating and adding a few links in my web page.  When I bought my printer I spotted Robot Club on the shelves.  It finally made it to the marketplace.  I wonder how well it'll do.
  Michael and I are having trouble hooking up with Manning for lunch.  On Wed I put him off to work on networking.  Today he put me off to handle a client.
1/OCT/98
  Networking:
    Success!  Finally!  We have two planes flying with each other.  It's incredibly smooth even across the network.  The remote plane is about 3/4 of second behind.  But Eric says that's because he hard-coded all the tuning variables for these first tests.
    I was making little progress.  When I went to get lunch, Eric took over my computer and started working on it.  He also found the code hard to follow at first.  We spent seven solid hours parked in front of those two machines until it finally started working.
    I hadn't understood what Eric wanted.  I thought all he needed was the little NetInfo structure.  But he needed the sim actually running on the PC.  I spent last three days trying to finish incorporating CNetInfo.
    It turns out Eric set it up using a token ring architecture.   That's not at all clear from the code.  But that does make some of the packet-building code make sense.  Eric and Michael believe that there's a client/server setup of some kind on the PC side, but that doesn't stand out in the code, either.  I should have asked Eric for help earlier.  I think he was irritated at the number and types of errors we had to slog through in my code.
    Because of my misconceptions, I had a lot of clumsy code in there.  Among my problems, I was running out of pre-allocated packets and trying to deref a NULL pointer.  When we start up, the second node to come up recieves a lot of messages.
    At another point, I wasn't stripping my message-type identifier on the front of the buffer before passing it on to Eric.  So it wasn't looking like a legitimate message to him.
    For some reason, operator (NetInfo *) didn't work.  It was casting the pointer to the entire object and returning that, not going through the operator and returning the member I wanted.  I had to change that to a regurlar member function.
    I have a hacked-in message for the master to tell the clients to fire up the sim.  That's happening, but we're dying at some point during initialization. Every time we receive a del_player message we crash, so we may be timing out and then hitting that code.
    Fought a coupla bugs from a few headers left over in the GameEng directory from when I was moving files around.  Dunno how that happened.   I know I specifically deleted those.
  Bruce ordered his pooter.  Need to email Z about the router.
  I ordered a 10/100 Linksys hub and bought a Compaq IJ900 printer.
    The color isn't real good on the printer.  Very orange.
    No response on web site after three days.
26/SEP/98
  Didn't make it in to work, today.
  Didn't make it to practice.  From what Bruce said, I don't think there was one.
  Did make it to the batting cages.
  Finally washed my car.  Still need to polish, wax and vacuum.
  Spent all night changing this .plan file to a table.  I like it a lot better.  Learned a bit of table arcana.  It turns out, for each cell there's a field for how many columns and rows the cell crosses.   As I added an extra column for some indented text near the bottom, all the previous rows went wacky.  Most didn't reach all the way across, even though the table width was 100%.  Some of the left-hand colums were much wider than the 0% I ased for.   I had to go back and manually set the date rows to colwidth=4 (there's an editbox in the cell dialog.)  Those nested one deep needed to be 3 wide, etc.  Only took five minutes once I knew about it.
25/SEP/98
  Spent awhile moving CNetwork and CNetInfo and a couple of others to GameEngine.  Eric doesn't want those there.  So, I had to move them back.  Not a big deal, but between DevStudio and SourceSafe it's a bit of a pain.
  Converted CNetInfo to STL.
  Found a weird leftover bug from A-10 Cuba.  They pre-allocate all of the packets at startup and keep them in their input, output and free queues.  Eric makes one call to get a packet and another call when he's finished with it.  All we were passing was the pointer to his data.  When A-10 was giving him the packet they were immediately putting the packet into the free-packet queue.  Eric generates output packets while he has that packet.  So if we were ever to use up all of the free packets we'd overwrite the one he's using.  I asked Eric to take a structure instead of just a simple data pointer.  The struct is just a pointer to his data and a pointer to a cookie for me.  When he passes it back I can use the cookie to move the packet into the free queue.
24/SEP/98
  Pulled off of dupes (that's 95% finished)
  Talked with Eric about what he needs for networking.  He has "gobs of code" to talk to a very simple struct of function pointers.   I've pulled most of the relevant source code from the A-10 code base.  Got it to compile and link.  But it has some MFC dependencies.  I haven't figured out how tightly those are wired in.  First glance, not very.
23/SEP/98
  Success yesterday.  Got to the point where as far as ActiveNet is concerned, we've started the game.  I created a session on one machine and joined it from another.  A whole lot of cleanup left, but we're nearly ready to fire off the sim.
  One thing left from yesterday was the handling of the names and sessions lists.  I started by showing the name too many