Four in One - TADS - Progress Chart
-----------------------------------
7-16-98 Transcript typed
7-16-98 4in1.T file opened; basic rooms built.
7-17-98 Room descriptions filled out. Failed to get a clean compile.
7-18-98 (3:47am) First successful compile. All rooms built (except
rigging). Groucho NPC created as dummy char due to
referencing in code. (~300 lines)
7-19-98 (3:12am) Added all NPCs, including nearly twenty who didn't
show up in the playtest. Added daemon to hopefully stockpile
these NPCs one at a time into Chico's room every 12 turns or
so. Haven't compiled yet to test. (~600 lines)
(3:48am) Finally compiled. Weird compiler error caused by
improper use of {} for a simple two-line modify command made
me tear my hair out. After axing all the new code for NPCs I
just typed I was still getting the error on a line that was
fine yesterday and had no typo. It came about fifteen lines
up from the bad modify command. Go figure. (990 lines)
7-20-98 (4:38am) Added to basic Actor class: code for following,
saying Hello to the player. Take/Drop correspond to follow
commands. (1100 lines or so)
(4:59am) The above worked, activating an actorDaemon called
"follow," but because it was a daemon it didn't print the
follow message in the right place. I wanted it to print
immediately after the command to move was entered, before
the enterRoom method is run. I modified Me's travelTo
code, and had to create a list followList of the NPCs who
were currently following the player in order to get it to
work, but it seems to be. Hooray. (1132 lines)
(5:25am) Working out kinks to make the output conform to
the playthrough transcript. It now says if an NPC is
following you after their ldesc if you examine them.
Starting to add individualized following code. Val is
already following you by default; a couple of characters
decline to. Next is the Marxes, who will probably have
their follow code activate their personal daemons (ie,
Groucho's will count a couple of turns and then make him
go back to his dressing room if there aren't enough of
his brothers there, and won't come at all if Zeppo or
Harpo isn't with you).
(6:49am) Whoops! The compiler just informed me that I
hadn't created Zeppo's NPC yet! Poor Zeppo, left out
again. I discovered this when working on Groucho's
special follow code, designed to make him 1) refuse
to follow without one other Marx being there, 2) stop
following immediately if he's the only Marx following
the player, and 3) leave the room if he's the only Marx
there or if ten turns pass.
(12:45pm) Marathon stay here at METRO. Two hours ago
I had finished both Groucho and Zeppo's basic behavior
code, apart from a nasty run-time hang caused by forgetting
the ampersand before the call to actorDaemon. Finally
fixed that, and now I guess it's on to Chico and Harpo.
(1334 lines)
(2:39pm) Decided to add more bells and whistles to
Groucho and Zeppo. Now when they make their exits, they
walk through each room before getting to their destination.
I caught a funky bug by happening to time it right so that
Zeppo's 6 turn counter and Groucho's 10 turn counter were
synchronized, which meant that Groucho was trying to go
back to his room even as Zeppo was luring him off the lot.
Dueling daemons; the run-time lost the battle. I put a
special check for that, and it seems to be working. These
fellas are acting like they have minds of their own, wow!
Getting lots done today; I'm amazed that I am actually
figuring out how to code this game I invented last year.
(1519 lines)
(5:08pm) Okay, I'm well past the twelve hour mark, more
like fourteen, and I'm starting to get a stiff neck. But,
now I've got Chico working too. He had the simplest code
(if all four aren't there, he leaves), but somehow it was
really complicated to code. Fatigue may have something to
do with that. And playtesting with 3 working Marxes brought
out all sorts of strange little quirks and bugs in the NPC
movement methods, which I've fixed. There are likely more,
and I haven't even gotten to Harpo yet. That's for tomorrow,
or whenever I pick it up again. (1715 lines)
7-21-98 (4:03am) Four hours of sleep and I'm up and at it again.
Started around 2:30am, and have ironed out many of the
kinks with simultaneous Groucho, Chico, and Zeppo code.
They now have more interrelation: any time Chico mentions
a phone call, Zeppo (who normally is the most reliable in
staying with you) immediately leaves to make his own call.
Groucho is now even more grouchy, counting the minutes
constantly unless all four of them and you are on the
set. I've been able to streamline and even remove chunks
of code I wrote last night that seemed necessary at the
time; probably more can be done. Now it's on to Harpo.
I thought of a good bit of business for him while in the
shower tonight: if he sees the note (even if you're
holding it) that zeppo and groucho leave behind he
immediately tears it to littde pieces. His movement
code is simpler: if there's but one other Marx with
him he wanders off. I also thought of an "easter egg"
which you see if you follow Harpo immediately when the
game first starts -- he goes to the MGM commissary, where
"More stars than there are in Heaven" are all eating brunch.
Gable and Crawford and Beery and Harlow and Tracy and
Stewart, etc. Unless you follow him there you can't get
to that room, and he only goes there once at the start
of the game. I'd like to think up more business for harpo
like the note-tearing in every room of the game, so that
he's just a busy nuisance to have around. (1746 lines)
(7:47am) Wow. Harpo took a long time to do. There were
some early frustrations due to the program file getting
weirdly corrupted so that the compiler was bombing on a
commented line. Then I had repeated problems with the
program freezing up during runtime. Had to restart the
computer about four times. Ugh. Finally used the debugger
and a simpler solution to the problem and that was that
for Harpo's random leaving. Playtesting is getting more
difficult, because it is incredibly difficult to keep
all four Marxes in the same room, let alone one or two
of them. Harpo's original code was complicated, too
complicated, but I reduced it to just the command that
if Zeppo is there but not Groucho, Harpo will automatically
leave to a random room. Then you have to leave zeppo behind
to find harpo, but if you walk past zeppo on the way back
he leaves again. Or if you try to get groucho first, groucho
gets tired of wandering around and leaves, and if zeppo
is there harpo will then leave. Or if you've got all four
and groucho quits it can cause all four to leave (as it
did in a playtest just now, which was quite delightful
and amusing). I think the four boys are pretty much
set as far as basic behavior actions. I need to add
some things to some of the other NPCs now, like Scotty,
Margaret Dumont, and Irving. I've had enough for this
morning, though, I think. (1935 lines)
(8:23am) I've just been playing through it some more.
It is actually quite good fun, and it is coming out just
right. The spirit of the Marx Brothers seems to be
conjured just by these simple NPC behaviors. The
frustration of trying to corral them all (which was
the germ of the idea to begin with) comes through
very well! However, in my playtest script I wrote a
solution that involved making Harpo play cards. The
way it was, I could just manage (just) to get all four
to the set without any cardplaying code. I decided that
it had to be impossible to do that, and that I needed
to change perhaps one simple thing in order to make it
currently impossible to get all four on the set. The
way I decided to do it is to reduce Zeppo's wait time
(before he goes back to the phone) by one turn. Doing
that makes it impossible not to run into him while
you're trying to bring Harpo somewhere; they always
cross paths due to the fact that there are only at
most 3 rooms Zeppo needs to cross to get to the phone,
and the farther away you take him the farther you have
to go to double back to get Harpo. However, this will
also make the card solution impossible, because it
makes it dependent on random chance (wherever Harpo
goes when he wanders off) to get Harpo past Zeppo.
Unless you get Zeppo and Groucho, go to Harpo, drop
Zeppo, leave the room where Zeppo is before Groucho
leaves. When he does, then take Harpo to Chico's
room, get Zeppo, get Groucho, get Chico and Harpo,
and hopefully get to the set before Groucho's fuse
runs out. This is good, in that the playtest I wrote
doesn't necessarily give away the solution to the
game, because it's more impossible than that. Oh
well, thinking about this is quite fun, quite fun. (8:30am)
7-22-98 (6:55am) Didn't get started till about 4am today. First
I twinked around with modifications based on what I learned
from reading chapters of the TADS manual yesterday. Then
I added a "smile" verb. After that, I set about stream-
lining and improving the travel code for the four Marxes,
which used a lot of switch() statements and was redundantly
re-done for each of them. In making a global.roomList of
the 13 rooms in the game (to make traveling a quick table
lookup instead of a bunch of case statements), I took the
opportunity to renumber the rooms (first changing their
"map = " values to 1-13 from 0-12, because TADS arrays
count from 1, not 0), and then to reorder them because
it had been kind of casually and non-intuitively ordered
before, where GrouchoRoom was 6 but the other three
dressing rooms were 10-12, and things like that. I haven't
compiled yet! It's always a bad idea to change so many
things without compiling in between, because you have to
chase all over the code to find sniggly little typos that
make the compiler balk. So, the game should run just the
same as it did 23 hours ago, but the code is simpler. I
was hoping to have more bell&whistle improvements to
enjoy playtesting, but there you are. (1928 lines)
(10:13am) Although I have added a couple of routines to
Harpo (a "chaseGirls" method), most of what I've spent the
last 3 hours doing is revamping and streamlining code. I
just finished making a boolean update method for adding or
removing an NPC from the player's followList. I had been
writing those lines to add/remove a follower from the list
seperately over and over again. It finally hit me how
redundant it was when I wanted to do the chaseGirls
routine, because the girl who was leaving and Harpo
both needed to be checked to see if they were following,
and if so, to stop following, and then leave the room.
I also did some restructuring of Harpo's (now quite
complicated) code, making his wandering off a method
of its own, and things like that. I've also been
scratching my head over how I've written the NPC
actorAction methods; I think I've been doing it wrong.
I'm also convinced I've broken down the follow/drop
commands incorrectly, but I haven't decided exactly
what I'm going to do. It will require combing through
all of the Marxes behavior codes line by line to make
sure all of it works if I update the generic follow/drop
methods for all NPCs. This isn't as much fun as adding
more character behavior in the game, but weeding out
ineffeciencies in the code provides a certain satis-
faction. Again I've gone for hours without recompiling;
silly me. (2130 lines)
(1:10pm) Well, that was interesting. Somehow I got off
on a tangent of beefing up Irving's code, giving him things
to do. In the middle of doing some of that I did a playtest
to see if it were possible in the current configuration to
get all four Marxes into Irving's Office. Because Groucho's
wait counter pauses when you cross through the startroom
("On the Set"), you are able to get everyone there with
one turn to spare. In the back of my mind since I started
the project I've had the idea that if you take them all
into Irving's office they go mad, strip you naked, and
hurl you out. This is of course based on real events I
heard happened to some poor sap. Coding that was fun, but
I haven't tried compiling it yet. At first I was going to
code it so that you can still wander around after that
fracas, naked, but it would be too much trouble to make
all NPCs able to react to your state, so I decided to have
the game end there. Because I did that, I finally put in
the hard time limit counter (120 turns = "two hours" of
game time). Oh, that's right. I started working on Irving
because I wrote Harpo's easter egg chase, which ended in
Irving's office with the two of them playing cards. Only
after writing all of the above did I just now put something
there to say that Irving is playing cards when you see him.
But I've now reminded myself that I haven't put activation
code which will enable either the Harpo chase or the Time
Limit counter, so if I play it now neither of those will
be in effect. Guess I'll do that, and also get something
to eat -- it's been hours. (2439 lines)
(4:36pm) Well, I finally got the silly thing to compile.
I had to deal with another of those peculiar compiler
errors where somehow the file itself has become corrupted
in a certain spot, such that perfectly fine code, code
I imported, say, from STD.T without modification, balks.
A couple of days ago it did this on a commented line. Chopping
out the offending passage and re-importing it cleanly seemed
to help. I noted that one character had become a ` mark
instead of a letter in the problem passage, perhaps the
only visibe symptom of this mysterious corruption. Other
than that, all of the new code I just did had relatively
few errors. Errors are usually typos and not serious coding
flaws. Time to playtest and see if I can remember everything
I've added since the last time (when was that, six hours
ago? Wow.) (2489 lines)
(7:07pm) I can't believe it's 7pm. This time I haven't left
the building since I got here. I've made sure the code I've
done today works pretty well. I also discovered a handy cheat
for quickly getting all four assembled. I had made it so that
if Harpo frightens Margaret Dumont away he goes straight to his
room instead of moving somewhere random. I didn't do it for
any particular reason at the time, but I think I will leave
it in for players to discover. Once he's there you fetch
Zeppo, then Groucho, then Harpo, and then Chico, all in a
row -- although I guess I was planning to have Harpo play
his harp if he ends up in his room (and therefore not willing
to be interrupted) so maybe that won't ultimately be an
available cheat. It all seems to be working, with more
ideas popping up. Appropos of these last two thoughts, the
big next sequence is to give Harpo a bit a business in every
room; one of those is in the rigging above the set. If Harpo
is there too long he'll blow out all of the lights and the
entire soundstage will fall into complete darkness. I laid
the groundwork for that earlier today (changing some rooms
into darkrooms) but haven't done the code for it. Well, I
guess that's what's in store for tomorrow. Time for me to
go home and unwind, I think. (2533 lines)
7-23-98 (9:06am) Today I'm marking my start time as well. I didn't
sleep much again, but I'm still not flagging in stamina or
enthusiasm. There are several things on the docket today:
cleaning up/streamlining the follow/drop code, adding the
startgame and endgame, and whatever bells&whistles occur to
me to do along the way.
(11:47am) Oh oh, I guess my mojo's not working today. Did
a few clean-up things in Harpo's code, rearrangements mainly.
Looked at the follow/drop code and decided it worked OK like
it already is. There's still a problem with Chico's outtaHere
code, which I'd like to fix. But, I'm going to go have lunch
and catch a movie instead.
7-24-98 (8:52pm) I didn't get started until about 3:30 today, and
took a break for a half hour when a friend dropped by to chat.
What have I done today, though? Let's see, I spent a lot of
time adding a "Where is" verb, so that you can ask people
where other people are. Or more specifically, you can ask
Scotty the A.D. where anyone or anything is, and he tells
you. This pointed out a problem: the way it's set up, if you
want to follow a character TADS requires a separate entity
called a follower that has all of the same noun attributes
as the follower's owner. In order to make my whereIsVerb
work, I had to make it applicable to all objects regardless
of whether they are in the room with the character. What
happened is that the parser wanted to disambiguate the
(for example) real Harpo from the Harpo follower, but
because they were both referenced by the same noun there
was no way to specify which. The real problem was that it
shouldn't have asked you to specify in the first place, which
meant I needed to eliminate the noun attributes of followers.
That entailed rewriting the follow code basically from the
ground up, but I kept the idea of a follower object. I was
able in doing this to finally change a default response
that I was annoyed with. When one tried to follow a nonpresent
actor, it said (e.g.) "I don't see any groucho here." Now it
says "Groucho isn't here." I just compiled this, but I haven't
playtested it to make sure following still works as it did
before. Time to do that, I guess. (2934 lines)
(9:32pm) Ok, time to quit for the night. I did want to
mention, though, a strange bug I discovered that might be
in the TADS compiler itself: if you're issuing a command
to someone, and at the end of that turn they leave the
room, if you use the command "again" it will process the
command and issue the response despite the fact that they
are gone. So I had to add a check to every actorAction
method to make sure the actor was in the room with the
player. I shouldn't have had to do that; if I remember
to, I'll mention it on the rec.arts.int-fiction newsgroup.
(2966 lines)
7-25-98 (7:06pm) Started about 4:30pm today, and added some code
to Scotty. Now he can tell you where anyone is and also
fetch them, bringing them to the set. This was an interesting
command to allow -- I'm not sure if it affects how the game
could potentially be won. I've tried to make it so that it's
really not much of a help to have scotty fetch them one at
a time. If he brings Groucho, Groucho comes with a fuse so
short he'll leave before Scotty can bring anyone else there.
And of course, without groucho, harpo will leave if Zeppo
is there.
The good thing about allowing this command, at least at
the present, is that it pointed out hidden quirks in the
behavior code I wrote a few days ago. Code I thought was
set and done was suddenly acting strangely and bringing
up errors. Mostly it was because I'd hardwired into it
the assumption that the only force motivating the Marxes
to move around was the player. For example, Chico is
supposed to leave if the other three aren't there, but
he didn't. When I made it clearer that he should, it
pointed out oddities and redundancies in his dropMsg
and actorDaemon and travel code. I just cleaned all of
those up and it seems to work. I even discovered a
hidden quirk in Zeppo, who for the most part is the
most well-behaved of the four as far as playtesting.
His "He isn't following you" message was getting
double-printed if he left because Chico left (hearing
the mention of a phone call reminds Zeppo to get back
to his own call) and if he were not currently following
you when this occurred. So, the code is getting cleaned
up, which is nice. Although I already miss the days of
having great new lively developments one after the
other. All this work today just to basically make sure
it worked like it did before. Oh well. (3051 lines)
7-27-98 (8:25pm) Another four or five hours at it today. I
started with something fun, writing the script for the
scene you're supposed to be shooting. It's not the
greatest Marx Bros. scene, but it's passable for the
purposes of the game. Then I fixed Chico's still-
problematic travel code and then started tweaking
things that I'd been wanting to work but hadn't been.
When I was testing Scotty's ability to go and fetch
someone and bring them to the set, I kept entering
the command "Scotty, get <<so-and-so>>", and the
takeVerb wouldn't parse if so-and-so were elsewhere.
So, I spent more than an hour, I'm not sure how long,
tinkering in the machinery of the takeVerb. Along the
way, I remembered that I wanted to be able to issue
the command "get everyone" and have all those in the
room fall in line. It took a long time to figure out
how to get all NPCs in the room available to the
"take all" command without, say, having every NPC
in the game (whether present or not) respond. I was
for a long time baffled why "drop all" and (my new
verbs) "find all" and "fetch all" worked correctly
without any head-scratching run-time snafus but
"take all" would not. I thought I'd finally got it
all working fine, but apparently it only worked for
"get all." Issuing a "get <<so-and-so>>" would
issue their followMsg regardless of their immediate
presence even though "get all" would take their
absence into account. I just fixed that... I think.
I also added a silly rhetorical-question-and-answer
feature for when you type "find me." Oh, I just
reminded myself to put in an "Xyzzy" verb. I've
been trying to think of just what that would do;
activating Harpo's easter egg hunt is one idea.
Changing the rules subtly somehow is another. It
ought to do something (even if it tells you "Nothing
happens.", something should still happen.) Okay,
that's it for now. (3352 lines)
(9:30pm) Okay, I'm pretty fried for the day. I got
the silly get/take/fetch all/so-and-so stuff working.
Then I played around, just trying to get all of the
Marxes on the set, and had a really hard time doing
it. This is good -- it needs to be impossible without
getting Chico and Harpo to play cards. Unfortunately,
that is given away as a solution to anyone who reads
the playthrough script. Oh well, no big deal. And I
checked out Harpo's moving around stuff and discovered
some quirks hidden in the easter egg code. Fixed
those. I still need to check Chico's travel code
for when he's outtaHere to make sure it works, but
I guess that's for tomorrow. I also need to start
adding more details like objects in the rooms that
you can look at, and also the on-set commands for
"action" and "scotty, roll" etc. Yep, I'm too tired
to continue I think. Maybe 6 hours today? Wow.
(3375 lines)
7-28-98 (8:20pm) Been at it since about 3:30, with maybe 45
minutes off due to not being able to plug the computer
in after its battery ran down. I've been doing weird
cosmetic enhancements to the game. First I added the
big list of MGM stars to the easter egg room, and had
a strangely difficult time getting the run-time to
say "You see <<list of big stars>>" here. I finally
had to make them basically visible decorations, but
I'm going to need to work on making them addressable
NPCs at some point. I added a whoIsVerb and a whatIsVerb
to complement my whereIsVerb, and a lot of time went
into handling generic responses to that for all NPCs
and the player itself, which can only be addressed
by the strange syntax, "Who/What/Where is me" because
"am" isn't a known verb and one cannot substitute the
personal pronoun "I" because it's a synonym for "take
inventory." I also realized that I'd misassigned all
of the NPCs their names, making first and last names
both nouns, because in order for the parser to accept
input of the form "<firstname> <lastname>", the first
name had to be an adjective modifying the noun last
name. I also had redundantly assigned adesc and thedesc
properties to all non-Marx NPCs instead of handling
that assignment generically in the NPC class definition.
Lastly, I twiddled with Harpo code for the new verbs
I added. The game still plays pretty much the same,
and I don't know if anyone will even use the who/what/
where verbs, but they work just right for my taste.
Oh, and I added an xyzzy verb that, like I promised
yesterday, says "Nothing happens." but in fact changes
a boolean toggle global.xyzzy. I haven't put in any
code to do something when global.xyzzy = true, but
the option is open. (3970 lines)
7-29-98 (11:46pm) Wow, it's gone from 5:30 to midnight rather
quickly. What was the first thing I did? Again, I've
been dancing around completing the game functions that
will allow the play to emulate the scripted playtest
(ie, the stuff on the set calling action and so forth).
I added a few more MGM stars based on some research
I did. I wish I knew where to find more MGM history.
Then I added a bunch of system verbs for printing
help screens and that sort of thing. I added some
new verbs (and spent a while alphabetizing the
sequence of verb definitions), including ones for
playing the harp. So, I modified the harp in Harpo's
room so that it can be played. I added a "followers"
command that lists who is following you, and basically
had to rewrite the listcont() function to do it. I
couldn't just use it as-is because actors are ignored
by listcont. Sigh. While testing that I suddenly found
that Zeppo couldn't be dropped. Turns out it was a
victim of a rather insidious, creeping problem: every
so often the text file is corrupted during the Save
command, so that random individual characters are
changed to a different character. I'm concerned that
there are more of these hidden that the compiler has
not registered. The Zeppo one was ignored by the
compiler, for example, and any corruption within
a string to be printed will also be bypassed. Checking
every single character in a program that's as long as
this one is now is nigh impossible, which is why this
is so frustrating. Well, that's it for now, I guess.
Maybe it's even time to stop for the night; definitely
I need to get some food. (4442 lines)
7-30-98 (2:46pm) I just wanted to mention that this morning
I began my operation to port this game code to the
Inform language. Any other mentions on that part of
the project will go in a file called 4in1.inf_progress.
Apropos of this version, it's interesting how many
missing spots and discrepancies I never noticed
before became obvious. Well, time to get cracking.
(7:19pm) What! Four hours already? I've had a frustrating
time getting simple things working. I spent a long time
negotiating the room nrmLkAround code to list objects,
indistinguishable actors, and actors separately. I feel
like I'm not writing good code here; there's too much
redundancy, and I can feel the run-time dragging on
certain operations (like taking inventory). It all
seemed to work eventually. One problem I'm having now
is a randomly-appearing error message saying "numeric
value is required," and I have no idea how to track
it down. I got a similar message when I was trying to
fix the code for playing the harp when Harpo is there.
I wrote it last night quickly, and it bombed. While
working on it I tried to use something the manual
calls a handy feature, but which this compiler seemed
to choke on (perhaps it hasn't been added to the
version I've got) called doSynonym. After that, I
was still getting the big error. Finally, I noticed
that I'd used a = instead of := in the first assignment
of a for loop. Sheesh! Oh, and while I was double-
checking that I'd not done that elsewhere (I had, but
it had never balked at it for some reason), I noticed
by chance one of those randomly-corrupted characters
in Irving's code. The variable "count" had become
"cnunt." Argh, how many more are there? Perhaps it's
a tiny changed character somewhere that is causing
the random "numeric value required" error! Yiiiii.
Even though 4 hours is a light day for me, I'm thinking
of packing it in. This is just too wearisome today,
somehow. This is probably why I started the Inform
port -- it's fresh and at a clean state where the
work is fun instead of awful. Well, awful is a harsh
word. Time to get some hot coffee and a sandwich.
(4578 lines)
7-31-98 (5:50pm) Augh, what a drag! I've hit another one of
those mysterious errors that causes the compiler itself
to crash. Or not crash, it gets stuck in a loop, repeating
one error message ad infinitum, requiring me to restart
the computer. Restarting the computer takes a lot of
time, and is especially annoying because the computer
automatically asks me to back up everything to a set
of floppies. I suppose I could disable the program but
one of these days I need to do that, so I shouldn't.
Anyway, I started today by play-testing, and found
that I'd changed something in Chico's code at some
point so that it was nigh impossible to get them
to stay on the set. Dropping him anywhere will make
him leave. The solution, I guess, is to not drop him.
However, there was a loophole: if Scotty fetches him
for you, he will stay put. Then I started tweaking
Val's code, allowing her to go on a hunting mission,
and I changed some basic NPC code to answer questions,
and Scotty's code to do the same. It was when I tried
to compile that stuff that this error happened, and
the line number of the supposed error is in the middle
of (argh) the code for playing Harpo's harp, which is
the code that took all of the steam out of me yesterday.
However, at end of day, it compiled fine (else I couldn't
have play-tested today), so I don't know what's wrong
It says "else without if," making me wonder if perhaps
an "if" got randomly-corrupted to some other word,
like "nf" or "i&", leaving the compiler hanging. So
now I have to check every "else" in the code and its
matching if -- what a drag! A game like this is almost
entirely made up of if/else statements. Sigh... (4717 lines)
(6:22pm) This is even more insidious than I thought.
Without visible damage, certain portions of the file
are corrupted. A check for ( it = Irving ) bombed
because it didn't recognize "Irving" as "Irving" --
in fact, even a search in BBEdit for "Irving" didn't
return that string as being equivalent. The bugs with
Harpo's harp and (now that I commented those out) with
Val's code (which is fine) are displaying the same
symptoms. Something invisible is wrong with the file.
I just saved it to a floppy, erased the one on the
hard disk, and copied it back -- but that's no guar-
atee that whatever's wrong will get fixed that way.
I'm thinking maybe I should open the file in a word
processor to see if any weird extra characters show
up.
(6:54pm) This is extremely distressing! I tried going
back and compiling yesterday's version and it had the
same "else without if" compiler-crashing problem! I
could not, even laundering the problem code(s) through
other text applications, get the files to compile
even though there are no coding errors. That yesterday's
archived version is corrupt is really troublesome,
because it just cannot be. What, then, is the game
file that I was playtesting earlier today? It's that
version; it compiled at the time. Did something change
after the last time I compiled it? I can't believe this.
And there's not much I can see to do. Perhaps go back
to the version two days ago (which does compile) and
step through line-by-line, looking for differences
between that and the two newer versions, and retyping
the new code that's been added since. What a test of
patience that will be, but I don't know any other
solution. I might have to take that project home
with me instead of doing it here on the portable,
because I'll need the bigger screen space to look at
both files at the same time; even then, it's going to
be a nettlesome, tedious process. Agh. It's Friday
night and I told a friend I'd do something, but
having this upset hanging over me is going to put
me off a bit until it's corrected. Shoot. What a
setback at the end of week 2!
(10:30pm) Phew. I came straight home and go to work
on finding the problems in these files, and I found
them. Some of my random problems might have had to do
with file corruption, but I did solve the "else without
if" compiler-crashing bug -- which appeared again in
today's file as I was gingerly testing my new Val
hunting code (the problem area). Yesterday's file
did, in fact, have one little problem in Harpo's
harp-playing code that indeed I must have done after
compiling the game but before I shut down. I had a
for loop enclosed in braces, and I deleted the
opening { brace. So, the closing brace was read as
the close brace for the immediately preceding "if"
statement, which meant that the next "else" it saw
was a big problem. Why it should throw the compiler
for a loop (literally) I don't know. I note that I
had to get all the way to that point in the code
(line 2180), stepping through line-by-line with the
version from two days ago, before I noticed it. Yikes.
However, it gave me the gumption to start the same
careful-pagethrough process with today's file. Comparing
line counts ended up being an effective tool, but I also
had to rely on my memory. Eventually I got up to Val's
code and without adding anything, the file compiled.
Then I added a little more, and it compiled. Then I
added the problem code (and I am typing this manually
on a clean new file, not cutting and pasting from the
corrupt version) and it crashed again, this time with
the "else without if" compiler bug. Ooh, I was steamed.
I was so mad, in fact, that when I restarted I loaded
the wrong file (the fixed version of yesterday's code
rather than the being-fixed version of today's), and
I nearly blew a gasket thinking somehow the restart
had erased all of the changes I'd made. Duh. Anyway,
so I chop that routine out entirely and add it back
in one nested if...else at a time, and on the second
one it bombs again. Looking closely, I finally discovered
what had been the problem all along. I forgot to close
a string with its final " because the line said this:
"\nVal says, \";
Where \" is the shorthand for "type a quotation mark
within a string." So, it was (to the compiler) an open-
ended string, which means all of the lines of code up to
the next " a few lines down were taken as a string, and
then everything after that quote mark it tried to compile
as code. Hooey. These are nasty little bugs to track down,
I must say. Very, very tiny but (obviously) quite dis-
tructive and exasperating on many levels. I am happy to
say, however, that as of now today's version compiles.
What has it been, five hours since I first hit this
problem? And I was doing it just so I could merrily
play-test today instead of really smashing my head
against the rock trying to improve it! My simple day
of seeing how the game felt to play turned into a
nightmare bug hunt; augh. Although, now that I've
fixed it, I almost feel like trekking back to the
coffee shop and going at it again. Hmmm... (4725 lines)
8-01-98 (11:17pm) I started off today in an easygoing manner,
adding more descriptions and some decorative objects to
Irving's office and vicinity. I rearranged some of Harpo's
code yet again (I seem to do this every two days or so),
and was musing on that when I was interrupted for two
hours or so by pleasant Saturday conversation. I picked
up again after that by bashing forward on a new idea that
I had just this morning which involves the massing crowd
in Chico's room. I decided to have the throng be a
physical force, driving you further and further from
the door, so that it would take a number of repeated
moves (depending on how many people are there) to get
out again, and if more people arrive you are again
pushed back one step. I symbolically made seven nested
levels of "crowd circles" out of which the player must
climb, depending on the size of the crowd. Also this
morning, I came up with the idea of having the MGM lot
teeming with NPCs of various guilds. This would be
in honor of MGM's moviemaking tradition of hundreds of
extras. I also decided to go to a bookstore and do what
research I could (I know there used to be colorful
volumes about MGM studios, but perhaps they're not
in print now or simply not at the store I checked),
specifically to double-check my starList for dis-
crepancies. I had included Barbara Stanwyck even
though I knew she was a little young to be there
ca.1935, but I spent two days trying to remember her
name, so when I did I put her in. Well, she's out
again, and so, sadly, is Cary Grant: he was signed
with Paramount, not MGM. I replaced him with Charles
Laughton. Adding hundreds of extras to the game will
probably be the last thing I do, and most of them
will be inert unless the player goes on the Easter Egg
hunt. When I do, though, I may drop real names of
MGM workers. In fact, instead of my generic sound
mixer, or in addition to, I ought to add Douglas
Shearer, Irving's brother-in-law and their top
sound technician for that era. Shearer is in fact
listed in the credits to A Night at the Opera. Which
reminds me, I'm toying with the idea of having the
game be unwinnable! I've dropped hints that if the
player fails in his task, the picture will be scrapped
in favor of "Opera," and history will forget "Holy
Mackerels" ever happened. Ah, so! This will be a
big surprise to anyone who plays this who happened
also to read the playthrough transcript beforehand,
which seems to show a solution to the game. I do
want to make it unwinnable by following that script;
it may already be (notwithstanding that I haven't
yet implemented the "call action" and "rehearse"
commands). Well, time to test the ChicoRoom crowd
code some more. Adieu. (5088 lines)
(1:45am) The calendar day says it's the 2nd now,
but I'm still counting this as the end of the same
day's activity. Gosh, after I got started again this
evening I've been burning full-flame on this. However,
I've reached the point where I realize I have to stop
because I haven't eaten and ought to, and I might
start making dumb compiler-crashing typos if I don't
leave it be for tonight. The Chico Room trap works
very well now, and I think really adds something to
the game. Before, people crowded in, but there was
no tangability to it, just a lot of names. Now all
of those crowds are a force to be reckoned with. I've
lucked out several times tonight in having these new
situations point out holes in the code. Notably, a
couple of times Harpo has spoken up, saying things
like "Hello, Sam" and "Come in." Whoops. I finally
decided that Harpo would speak in the game, provided
you use the xyzzy verb in his presence. I'm still
scratching my head over Val's locate-code, which
should work the same as Scotty's (which works fine),
but doesn't. It activates and deactivates in the
same turn. Gosh, that reminds me that I put a print
statement in there to help me figure out what's going
on, and I fiddled with other stuff after that and
forgot to test it out. See? Time to quit. If I run
the program I'll be tempted to keep working on Val's
code to get it right, but I need to order myself to
stop. Sigh. Okay, bye for tonight, I think. (5194 lines)
8-03-98 (4:01pm) Hello, I started up just two minutes ago,
with my first goal of the day to figure out why Val's
locate-code was screwing up. Taking a day off helps,
I suppose, because I immediately spotted the problem:
an erroneous ; after an if statement but before the
if statement {} code. So, the if statement was handled
but then aborted by the ; and the rest of it was run
without the if having a gating effect. That's nice.
I guess now I'm going to do the special on-the-set
rehearse/action/ready code. (5193 lines)
(8:59pm) Whoa, seven o'clock has become eight has
become nine, all because of this phone. Right after
an initial stab at calling "action," which didn't
work like I really wanted, I got distracted with
making the soundstageNorth phone operational. That
took hours, and added many lines to the code. It's
one of those things where I spent a whole day making
it work, and it doesn't even have a thing to do with
playing the game. However, you can just bet people
will want to use it just because it's sitting there,
so I had to do it. For a "small" game, the code is
ballooning to an enormous size, mainly because of
all of the fiddly details I'm adding. In fact, it's
going to be, code-wise, a large game, even though
there is a small number of rooms and a limited
puzzle-goal. I'm thinking of taking it easy tonight,
and maybe stopping here now that the phone works.
(5583 lines)
8-04-98 (2:03am) Well, that must be a first. I got here
and started hacking away at adding the "roll"
and "rehearse" verbs, which made me rearrange
how I did the "action" verb earlier so that
code for seeing who was on the set and who wasn't
could be re-used as its own routine. Also, I added
code to make "X, TELL ME ABOUT Y" the same as
"ASK X ABOUT Y." I must have spent an hour on
this (darn it, I forgot to look at the clock when
I started, again), but going by the line count I've
added 160 lines of code. What's "a first" is that
when I compiled, it didn't find any errors! Not a
single slipped " or ; or {}. How very pleasant.
(5743 lines)
(3:14am) You know, this game is actually getting
close to complete. Uh oh, you just know that as soon
as I say that I'm going to be in for another six weeks
of work on it. However, what I mean is, most of the
NPC code is in, most of the game-solving verbs are
implemented, and the rest is adding details. For
example, I'd kind of like the game to understand the
word "picture" (meaning the movie), and have the
player be able to ask what people think about it.
Adding details (again, Harpo business in every
room, including blowing out the lights in the
soundstage) could take weeks to finish. I need to
add food to the catering table, for example, and
miscellaneous film equipment around the stage, that
sort of thing. I think I'm going to leave it here
for the night, with "rehearse," "ready," and "action"
ready to go (but without doing anything yet) and the
game darn near playable. The vortex in Chico's room
seems single-handedly to succeed in making the game
unwinnable, because when you get trapped in the
vortex the Marxes don't consider you to be in the
same room, so therefore if you bring (as has always
been necessary) the other three into Chico's room,
Chico leaves to go gambling, and Zeppo and Groucho
leave to go joyriding (or whatever) immediately if
you're shunted to the back of the room, so climbing
out again is moot because the game can't be won any
more. Up till now I've had Harpo's easter egg hunt
start on the fifth turn of the game, but that was
just to reliably test it. I haven't decided what
exactly will trigger it in the final version; it
needs to happen at a point where only a lucky player
will think to follow him, or happen to come across
him at the right moment. Ideally, only a small
percentage of people who play the game will find
the easter egg room. Hmmm. Okay, that's enough
typing for now. Time to kind of start unwinding
for the night. (5816 lines)
[ Due to a computer failure, the progress reports for 8-5-98
are currently, and perhaps permanently, unavailable. I
recall griping about spending hours picking out those
fiddly random-character-corruptions, and about making
Harpo's easter egg hunt begin when you play his harp,
which seemed an appropriate activation method. I can't
believe that this one time, just because I was so beat
and disgruntled from hunting down those little errors
for a whole day (the game code became suddenly riddled
with them on the afternoon of 8-4-98), this one time I
neglected my dutiful habit of backing up the progress
report file onto floppy disk at the end of the day. I
saved the game code, but not the progress check. Argh,
argh, argh. ( ---jrw 6 August 1998 4:23am ) ]
[ Wait, I recovered it. ---jrw 7 August 1998 4:13pm ]
8-05-98 (3:24am) I worked a little bit yesterday, but only
as long as my Powerbook battery held out. I took the
game home to compile what I'd done (I didn't risk
compiling it, because in case of a crash, restarting
the computer completely drains the battery) and found
the file riddled with those random character corruptions.
I went through by hand, just eyeballing code, and caught
a number of them. I've actually been lucky that way since
this problem first appeared; many's the time I've happened
to glance at some code that's long been set and done and
noticed a corrupted character somewhere. Tonight it was
the worst it's ever been; there were dozens of them.
The compiler caught some more, but I bet there are
still some lurking. I don't know how to reliably proof-
read the entire file given its current size. I'm wondering
if it has something to do with running off of the battery.
Anyroad, I finally got it to compile at home, and then
caught some more corruptions that caused run-time errors
or which just happened to catch my eye as I tooled
through the game. I'm very close to the stage when I'll
hand it to beta-testers to take for a serious spin. I'm
no longer sure if it's possible to win the game or not.
I did decide to make Harpo's easter egg hunt triggered
by playing his harp, which seemed appropriate. Time, I
guess, to play the game and see what happens. Perhaps
I'll record a transcript of what I do. (5948 lines)
8-07-98 (1:02am) By some miracle, I managed to get my computer
to turn on tonight. Yesterday I came here and it refused
to power up! Tonight I solved that by the traditional
American method of hitting it with my fist. Probably
not smart, and it shows that I really need to get this
thing fixed. Unfortunately, the warranty ran out, what,
one week ago? Grrrr. It shouldn't be broken!! I wonder
if bringing it here did something to it. Anyway, I can't
trust that I'll have the ability beyond tonight to bring
the work here, which I much prefer somehow, so I'm going
to try to see what I can do to get it fully functioning
by beta-test terms, meaning the director commands all
have to do something, and I need to figure out when/how
the Marxes leave the set at the beginning of the game.
If I get that working, I'll see if I can't add some more
details here and there (like things to eat at the catering
table). (6067 lines)
(3:04am) I can hardly believe it. I dumped in a bunch of
code for handling repeated takes and rehearsals, which
involved adding weird notify code to check for this and
sundry, as well as a very brute-force "win the game"
scenario, a kludge just to test that it can work. Then
I tried to compile, and it did! I'm still catching those
nettlesome corrupted characters here and there, but this
may be pretty close to being "it." (6284 lines)
(4:52am) Time to stop for the night, I think. I haven't
done much testing, but things seem to be working. I found
out I had some problems in the telephone callOnVerb code
that were always there but had never shown up before, so
I think I've fixed that. I also finally got around to
fixing some code that prints a message on the MGMlot when
Chico finally escapes -- or at least, I think I've fixed
it. (6571 lines)
(5:49pm) I just went through the whole file with a word
processor's spell-checker, adding every weird variation as
a legal new word, so that I have a custom dictionary for
future checking of the file. I caught several more of those
persnickety character corruptions that way, but it took an
hour or so to do.
8-08-98 (4:34am) I've been play-testing for an hour or two now,
and by golly if I can't seem to win the game. I've even
loosened up on some of the rules to make it more possible,
like making the crowd circles in Chico's room activate
later, but it's still impossible. One time I got close,
but by then I'd already tried to shoot three takes, and
the magic formula is 3 rehearsals, 3 takes, and you win.
I've added little bits of code here and there, like finally
re-instating the Harpo's Leg deal (activated when you ask
him to follow you). There was one point when I was trying
to make Groucho less persnickety; his absolute limit of
agreeing to follow you four times got me in trouble when
I entered Chico's crowded room (forcing you to drop him).
Of course, since modifying Chico's room, I haven't had
that problem again. I tried to write a bunch of quips
for Groucho when he agrees to follow you on the fifth
or greater time, but I guess I'm so tired I couldn't come
up with anything particularly good for him to say. I wrote
seven quips and they're all duds. Sigh. However, I received
confirmation tonight that beta-testing can begin, and I
think I will this weekend pass it along to them, calling
an end to these three weeks of intensive, solo testing and
programming. There are still lots of bits of business to
do, and details (I've been saying this for over two weeks
now), but I think the game is playable. I don't think it's
winnable, but I think it's playable. Hooray! I've done it!
And I'm going to have it thoroughly beta-tested by the
start of the competition, which will put me in pretty
good shape to compete. I know I'll make a good showing;
I've really put in the effort to make this competitive.
There are some pretty sharp IF writers out there, so I'm
hoping the crowd-pleasing nature of using the Marx Bros.
will tip the judging in my favor. Here's hoping, but that's
still six weeks away. Gosh, I've even managed to time this
(as if I were responsible for choosing the timing) so that
I'm well ahead of schedule. Having the time to get it tested
by other people is really going to make a difference. I'm
starting to repeat myself. Time to say goodnight. (6732
lines)
8-10-98 (4:54am) I spent two hours filling in those missing details:
decorative items described in room ldescs that heretofore
were unavailable to the parser in case the player wanted
to examine them more closely. I made a catering table full
of tasty items that can be eaten, for example. I compiled
all of this only to find the game code re-riddled with
random corrupted characters (RCCs). I corrected all of the
ones that the compiler caught, but I'll have to wait until
I'm at my home computer until I can run it through my
spell-checker. However, that still won't catch every
last one! Anyway, what I'm really steamed about is that,
after 3 weeks, Groucho's code suddenly isn't working.
His was the first I implemented! I tried to add a modification
to catch a double-daemon situation, where a daemon is
already running but a second one is activated; this
causes problems where timing counters are involved; they
are incremented once per daemon per turn. It is annoying
to have Groucho not working when he has been set and
running fine every day from the first week until today.
Note that it is so annoying I have to say it twice. Argh.
One of the problems is that, in part because I coded him
first, he operates in an non-standard way from the other
three. I lifted some code from Chico that prevented a
case of double-daemoning for him, and copied it into
Groucho's, and it just didn't work for Groucho. I'm going
to have to rethink (and possibly rewrite) Groucho's code
now just because of this; however, it's something I knew
I might have to do eventually, I just didn't want to fix
what wasn't broken. Now it's broken. Argh. This is only
vexsome mainly because I planned to send this off to the
beta-testers this morning. It's better that I caught it
myself before it went to them, but it's still a bit off-
putting. Lastly, the game code is now officially longer
than the First Things First game code, which has dozens
more rooms and a lot more objects! This amazes me; what
still qualifies as a "small game" is now a gigantic file
of program code. Well, it just shows you that I put a lot
of extra detail into it. (7222 lines)
(5:51am) I've added some more stuff. I noticed there was
a problem with the counter that kept track of the number
of takes, and when I went to fix it I took the opportunity
of writing another "cut-scene," as they call it, when I
as the author spit a pre-written scene at the player which
is not interactive. I also stuck in a bit of cut-scene
dialogue from the playscript, the bit about Zeppo betting
Chico that they don't get the shot done, because the last
line of the "win" scenario (and it is possible to win, now)
referenced the bet. I may have to call it a night, now,
but everything seems to be working reasonably well. It's
a good game. (7929 lines)
(6:09am) All right. I had another of those "else without
if" compiler crashes, but that was easily fixed. After I
compiled that, I decided the last thing I wanted to do was
to implement a simple hint menu. It tells the player how
many rehearsals and takes are needed to win the game, but
nothing about how to navigate the Marxes' behavior. Oh,
I just remembered: I need to deactivate the line that
says Groucho's waitCount. I might also deactivate the
current xyzzyVerb function, which deactivates all of the
Marx daemons. Other than that, once I spell-check this
file at home, I think it's ready to be beta-tested. Hoo-
ray hoo-rah! (7330 lines)
8-17-98 (4:40pm) Over the weekend I got some suggestions from a
beta-tester. I was embarrassed to find out that there was
a major bug in the Groucho code that made him keep saying
"Well this is a waste of time." over and over without
ever leaving! Augh! That alone makes the game look really
buggy and unfinished, and it was some of the first code I
wrote that had worked fine for weeks! I'd added a gate that
I shouldn't have, checking to see if Zeppo was in the room.
Duh. Sigh. Anyway, most of this guy's comments had to do
with asking questions of people. Everyone directs you to
Scotty, saying he "knows everything!", but when you ask
Scotty he just has a bland comment. In fact, I'd done
very little in the way of getting information out of NPCs,
which he pointed out was a big problem in a game so full
of them.
So, today I sat down and started writing routines for
every possible topic in the game: every NPC, every object,
even objects that otherwise didn't exist except that another
topic might have mentioned them! That code alone is now
1729 lines! I fixed a couple of the bugs the guy found in
my main code, but not all of them because I wanted to work
out the conversation stuff. It is definitely going to make
the game more alive, but I'd always said that adding details
was going to be one of the later embellishments. I didn't
realize how thin the game was going to look for the beta-
testers without them, though. I may have to upload a new
version in a day or two and let them have at it a second
time. (7612 lines + 1729 lines)
8-19-98 (7:58pm) I got a bug report from a second beta-tester this
morning. It was interesting how different his report was,
in that he experimented in very different ways than the
first fellow. The first tester was not only thorough and
fussy, but he seemed to be only vaguely familiar with the
Marx Brothers. In a way, it's good to have someone not so
familiar with them testing the game, but I did think it was
funny when he said he was "completely baffled" when he tried
to do something and it told him he couldn't because he was
"holding Harpo's leg." He'd never heard of that schtick
before. Actually, his bafflement is a genuinely comic
reaction. Anyway, I spent all afternoon today going through
this (first) guy's list of 37 bugs (he numbered them, like
an index). Naturally it led me to throw in a few extra
things along the way, like some new lines for Groucho. In
fact, I went mad at one point and had triply-imbedded
switch() statements, first choosing between (say) six
random lines, two of which had another switch between
three random choices, and one of those had another switch
for even more variety. What this does is make Groucho
much less likely to say the same thing over and over.
Only by dumb luck will you see the same thing very often.
I might do the same for Harpo. I definitely need to throw
in more quips for Groucho, but thinking them up is not
easy! I did flip through his autobiography yesterday, and
I may steal a line here and there from that book, which is
basically a hundred pages of quips. I don't want to plagiarize
material if I don't have to, however. Any-anyway, I surprised
myself by getting through the entire list in this one session.
What's sad to see is that, though I'd been free of it for
the past week or so (in working on the Inform version, and
in writing the Consult responses), the RCCs returned today.
I don't have a spell check library for the consult topics
so I'll have to make one so that I can work on that in
earnest again tomorrow. I'm happy to know that I will be
able to upload a much-less-buggy version for a second
round of testing over the weekend, or maybe on Friday.
(7872 lines)
8-28-98 (6:30pm) I've been working on Vincent Lynch's list (now
numbering 83, some of them redundant) yesterday and today.
I'm pretty tired of it! I took a break earlier this week
to write a quick puzzle game in Inform, and that really
helped boost my morale again, mainly by showing me that
I've really learned Inform quite quickly. Today I planned
to work on finishing the consultWords stuff, but I didn't
bring my research materials. Actually, what I did (and
this started as handling the case of following someone
through a closed door, which shouldn't be allowed) was to
do something I'd sort of been planning to do for quite a
while, which is to re-write the whole idea of following
NPCs around. I made it generic, so that it works for
everyone, not just the Marxes. The built-in TADS method
of allowing you to follow NPCs is really hoakey, in my
opinion -- it creates a ghost object that stays one room
behind the character. However, this ghost object appears
in the contents lists of rooms, which caused odd things
to happen in room-contents-specific code, like calling
on the phone to Chico's room, which might have a number
of ghosts in it. Notably, a ghost named "Chico," but
who would appear as "A Chico" when the ghosts's adesc
property was used. Took me a while to figure that one
out (having seen the "A Chico" a number of times). So,
I scratched all that. No more ghosts. Now there's one
object, a genericNPCfollower, that doesn't exist anywhere,
but has code that can figure out where the person you
indicated by "FOLLOW _X_" has gone to, how many rooms
away that is, or if it's nowhere at all, and if it's
in an adjacent location it will move you there, if it's
through a door you have to deal with the door, if it's
farther than that away it says that they "gave you the
slip," and if they're gone from the game (nil) it says
that the person "isn't here." The Marx followers,
inheriting from the NPCfollower class, only needed a
small change in the couldntFollow( this_actor ) property,
which is run when it's not a successful follow. And so,
everything is much cleaner and easier. Hoo-rah. The
problem is, and this is a big problem, I haven't compiled
the code in over a week, despite working on it quite a
bit. It's full of RCCs again, so I need to spell-check
it. Who knows how many typos are lurking in this thing
from what I've added. I'm really lost as far as checking
to make sure fixes I've added really work or do something
else that's screwy! This is how far I've gone in terms
of throwing up my hands and saying "Phooey!" about how
bloated the game's gotten. At times I think I should
just go back to the version I had in week 2 where all
four of them worked and you could just barely manage
to get them to the set, but nothing else functioned.
At least that version was fun to play. Hmph. Oh well,
I'm happy that I ironed out this follower code. I may
upload it as a generic routine for other people to use,
although some of it is so specific to my game that it
wouldn't be of much use (my limited map is very easy to
sort through to check how far away one room is from
another, for example). Well, time for a bathroom break.
Or something. (8879 lines)
8-29-98 (3:23am) Hey, it compiled. Consult.T didn't, though --
and I was tearing my hair out (it's the end of a long day)
until I put two and two together and came up with a problem
that I read about on rec.arts.int-fiction a month ago. You
can't have a single object in TADS that's bigger than 128K.
My consultwords function was just one big mess of data, much
bigger than 128K. I need to figure out a way of breaking
it all up into small chunks. I guess some sort of consult
word class, with each word having etc etc. That's for
tomorrow (or Sunday, or whenever), as well as making sure
that the code I wrote to handle the 80-or-so listed bugs
works okay. There's even stuff I've now thrown in that I
don't even remember I did. My "who are you" question might
work now, and the parser, and the floatingItem that's the
scenery in the MGMlot and MGM5. I've got doors everywhere,
now, and who knows what else. I've even put in all of the
handlers for having the soundstage go completely dark, but
I haven't written any code to cause that to happen... yet.
There are things I had on a to-do list four weeks ago (such
as Harpo business, which would include making the lights go
out) that I haven't even gotten around to doing. Yeesh, I
say. Enough already. Time to retire for the night, I think,
and test this stuff out tomorrow. I'm just glad I can go to
bed knowing that the version which has all of the 88 (or
however many) bug fixes compiled successfully. (8894 lines)
9-09-98 (5:41am) After a bit of a hiatus, I'm back on the job
tonight, working with some amount of steam for the first
time in quite a while. My laptop is completely dead, by
the way.
Tonight I started at about 10:30pm, worked for a few hours,
took a break to watch part of a movie and eat something, then
got back to it until 5am. First I twiddled a couple of things
that I noticed hadn't been working quite right -- for example,
the new follower code: You could follow someone who had never
moved, or who hadn't been seen yet. Then I launched into an
attack on the "who are you" code, really wanting to get that
to work, and I finally did. Now you can ask "Who are you?"
"What are you?" "Who am I?" and "Where am I?" Oops! I forgot
"Where are you?" I'll have to remember to do that. After
that, I made a big effort to get the consultWords working.
I'd been thinking of how to do that for the past week or
more; it involved breaking down the big function into little
parcels that the individual words would handle themselves,
and I had to make sure that I took into account the bloated
size of certain objects (the Marx Brothers, for example) --
they probably wouldn't be able to take on any more code.
Speaking of the Marx Brothers, I made a couple of dummy
objects that handled commands directed to the cast (whichever
castmembers are in the room) or to the Marx Brothers (whichever
are in the room), such as "actors, rehearse" or "get the
marx brothers" or "marx brothers, follow me". By 5am I got
all of this working enough to compile. The other big thing
I did tonight was to get rid of Scotty's ability to bring
people back to the set; it destroyed the original point of
the game, which was to figure out from the Marxes behavior
the right order to pick them up so that you could get all
four to the set. My beta-tester suggested that I shouldn't
do this because it would radically change the game -- even
after I told him that it was added only because it seemed
logical for an A.D. to be able to do that, not because it
followed my intentions for the game. This was another thing
I thought about while taking a break from working on the game.
Pity, I'd just added a lot of extra functionality to the
Scotty.huntDown code; however, I saved that into a separate
file as a memento. I don't otherwise regret cutting it from
the game, no matter what my beta-tester said.
I haven't done a full test of the 88 bugs I fixed yet, but
I did want to do the above work. There may be very few people
who even figure out that you can ask "Groucho, who am I?" and
"what are you?", but I like very much that they exist. I think
they should be standard functions in IF works. (9928 lines)
9-16-98 (2:27am) Last night I worked on the game for the first big
burst of energy in, again, a week or so. Racing to get a new
version uploaded for a second round of beta-testing, I cranked
on it for about eight hours, starting in the early morning and
going until after noon. I did end up finishing what I felt was
a full upload-worthy version: the new follow code worked, all
of the NPC knowledge was programmed (forced out of my head,
finally), and little minor bugs that I noticed were cleaned
out. I started the game in a different place, outside Irving's
office, and I made sure that even if you went directly to
the set the Marx Brothers would still split on you right away.
I implemented a scoring system that adds up to ten points. I
put in minus points for over-rehearsing -- which qualifies as
a hint that says, "Hey, enough already. Stop at three." This
should make it easier to win the game, unless the player has
already done more than three takes without rehearsing once.
In that case, they're sort of screwed. I need to remind myself
to fix that. What else? Oh yes, I also want to remind myself
to rewrite the opening scene (text) so that -- or wait, do I?
Maybe it's fine. I only needed to do that if I made another
change (which I haven't), which was to make it so that it's
already lunchtime, you've already done 14 takes, and you
still don't have the shot done. This would be in character
for Sam Wood, such as I've read about him, and would explain,
perhaps, the churlishness of the Marx Brothers. It would also
explain why there's a big lunch going on in the commissary.
Skipping ahead, tonight I followed the mental reminder I'd
left myself and coded in (at loooong last) the scene descriptions
for the Easter Egg MGM lot locations. Having learned how to do
things I didn't know when I started this game, I invented a
generic "busy_personnel" object that existed in all three of
those rooms. It has a daemon (which, for once, can be activated
multiple times, overlapping, to good effect) which plays out
little bits of prose from a list of 45 canned messages I wrote
that sound like snatches of on-the-set activity: people running
back and forth, orders being shouted, etc. It works very well,
and saves me from doing what I'd at one time imagined, which
was to write a bunch of NPCs that would mill about. This is
much more sensible from a programming point of view, and also
from the player's point of view. It's just kinetic scenery,
really. I'm very happy to finally have those in the game,
because I didn't want to forget and release the game in the
competition without them! It used to just say "[scene missing]"!
As of yesterday, the game passed 10000 lines, and that's
without the consult file (or the three other files I've
linked in)! What a huge thing this has become, but I'm back
to being proud of it again. Probably, I will miss it very
much once it's done and I don't have it to work on any more.
(10599 lines)
9-27-98 (7:22pm) Did a little bit last night -- deadline is the 30th,
and I had to force myself to do it. After straightening out a
few things with doors and such, I stopped and picked it up
this afternoon. I've finally gotten the phones to work
correctly! At least, Zeppo's phone in soundstage North does.
An hour ago I thought I had it and could go get some dinner,
but no, little quibbly things in it took ages to weed out.
However, they are successfully weeded, and it works much more
intuitively (calling and hanging up, that is). Hooray. There's
some more bugs to straighten out, but the game is in very good
shape, as far as I can tell. I never thought it would get this
close to the wire, though, considering how much of a head start
I had. Whew. (10745 lines)
9-30-98 (1:34am) By some miracle I remembered to email Lucian Smith
to be officially entered into the Comp98 playtesters program,
something that randomizes the titles. I got email about it a
week or so ago, and then it completely slipped my mind, which
is why I call it a miracle that suddenly this afternoon I
remembered.
Fortunately, today hasn't been a mad rush to finish up, but a
somewhat relaxed run-through, cleaning up the last few things.
All of the bugs that the beta-testers spotted on the second
uploaded version have been taken care of, and the game looks
pretty sound. Perhaps there's something I've forgotten. One
thing that gave me pause was a note about Chico saying that
he was dialing the phone when he wasn't yet in his room.
The code that printed that was definitely out of place, but
I had to stop and consider what I was doing before I moved
it. This is the kind of thing I'd done twice before -- just
before uploading, I found some piece of code to be just com-
pletely in the wrong place, and moved it brute force. I never
stopped to think, "Why did I put it there in the first place?
I must have had a reason." Often, there was a reason, and a
good one. So, I modified it slightly instead of eliminating
it, and moved a copy of it to where it seemed more likely
to show up properly -- but even then, I put a double-check
code on it to make sure it didn't pop up wrongly. It may still.
However, I think I'm ready to upload it. I really OUGHT to
test it one last time, despite how tired I am of doing that,
just because, as I said, that was a mistake I made with both
beta uploads. I changed a few things and didn't test it first,
boldly assuming all was well, and both times there was a daemon
out of whack that just kept printing the same silly message
turn after turn after turn. I think all such things are
subdued and restrained, but I can never be sure. There's
always some bug hiding somewhere, especially in a program
of this size.
What an adventure! I think it's time I called it "finished."
(10845 lines)
(1:48am) AHA! For once I took my own advice, and sure
enough I caught an errant daemon, printing text where it
had no business doing it. The "busy personnel" on the
secret MGM lots were activated when Harpo went into those
rooms, even though they should only be activated when the
player goes there. In fact, since the player wasn't in
those rooms, they shouldn't have been printed at all!
Gosh, I'm glad I checked this. Something had been nagging
at me, telling me to check the Easter Egg stuff one last
lousy time. I'm very glad I did, because besides this
there was a problem with not being able to follow Harpo
on the trip -- sort of the whole point! -- due to the
rewrite of the follow function. (10849 lines)
(2:12am) Just made one last change (eliminating an extra
new_line) to the commissary room description. I think that's
the last one! (10848 lines)
(2:36am) Yeah, I always speak too soon. I cleaned up some
very old code, the harp-string-playing (which, at one time,
was quite a headache!). There was nothing wrong with it,
and I probably shouldn't have messed with it, but I suddenly
thought that the warning message "You oughtn't do that..."
would discourage people from playing the harp at all. Now,
it only says that if Harpo is there in the room. I also
had to change something in the Commissary -- I'd never put
in the notification to give the player the last, lousy point
for entering that room! Whoops! So, that's fixed, everything's
working fine. I think I'm going to send this file to the
competition manager and go get some coffee to celebrate!
(10846 lines)
EOF.