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 <>", 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 <>" 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 <>" 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 " ", 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.