Import of Release 1 r1
authorDavid Griffith <dave@661.org>
Fri, 2 Nov 2012 03:55:59 +0000 (20:55 -0700)
committerDavid Griffith <dave@661.org>
Fri, 2 Nov 2012 03:55:59 +0000 (20:55 -0700)
kitten.inf [new file with mode: 0644]

diff --git a/kitten.inf b/kitten.inf
new file mode 100644 (file)
index 0000000..e10eece
--- /dev/null
@@ -0,0 +1,989 @@
+! Robot Finds Kitten
+! A Zen Simulation
+! Release 1 / Serial number 021123 / Inform v6.21
+!
+!     [-]       |\_/|        http://www.robotfindskitten.org
+!     (+)={     |o o|__      Leonard Richardson (C) 1997, 2000
+!     | |       --*--__\     David Griffith (C) 2002  (Inform Edition)
+!     OOO       C_C(___)
+!
+!
+! This Zen simulation is based on the C version v1600003.248b
+! by Leonard Richardson (C) 1997, 2000.
+! Written originally for the Nerth Pork robotfindskitten contest.
+! Reimplemented in Inform by David Griffith (C) 2002.
+!
+! Lots more information on Robot Finds Kitten is available at
+! http://www.robotfindskitten.org.
+!
+!
+! In this game, you are Robot (#).  Your job is to find Kitten.  This
+! task is complicated by the existance of various things which are not
+! kitten.  Robot must touch items to determine if they are Kitten or
+! not.  Move Robot with the cursor keys, the numeric keypad, or
+! using the vi/rogue movement keys. The game ends when Robot finds
+! Kitten.  Alternatively, you may end the game by hitting the Esc or Q
+! keys.
+!
+! Developed with Inform 6.21 as installed from NetBSD's pkgsrc tree.
+!
+! Compile it with:
+!      inform "-~S" kitten.inf  <-- Assuming Unix
+!
+! Notes:
+!      1) More than half of the code is taken up by non-kitten
+!      messages.  When I compiled the code with just five messages and  
+!      no debugging code, the resulting binary was only 9728 bytes.
+!      With all 280+ messages, it's 20992 bytes.
+!
+!      2) If it wasn't already abundantly obvious, this program won't
+!      compile to Glulx because of copious use of Z-machine assembly
+!      instructions.
+!
+!
+! Still to do:
+!
+! Implement colors (is it really necessary?)
+!
+! Is there some way I can hide the cursor completely?
+! I want to do this and manually set Robot to be in reverse type rather
+! than relying on the cursor to look like that.  Ahah!  "@set_cursor -1
+! turns the cursor off, "@set_cursor -2" turns it back on.  Hmm.  This
+! doesn't seem to work.
+!
+! It seems every now and then the kitten doesn't gets placed somewhere
+! where the robot can't get to it.  Under a non-kitten?
+!
+! already_seen_msg in get_random_msg() still doesn't work correctly!
+! Probably the already_seen_xy() thing doesn't work either.
+
+
+!Switches xv5s;
+
+Switches v5;
+
+! Maxmimum possible number of non-kitten items on the playfield at once.
+!
+Constant Nonkitten_Max 256;
+
+Constant Nonkitten_Default 20;
+
+! Number of messages
+!
+Constant MESSAGE_NUM   283;
+
+
+Release 1;
+!Serial "021129";
+
+
+! Not currently implemented
+! Global palm_mode = false;
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+Constant Story "Robot Finds Kitten";
+Constant Headline "^A Zen Simulation^";
+
+Constant Anim_Meet     10;
+
+Global Height = 0;
+Global Width = 0;
+
+Global Color = false;
+
+Global TopBar = 5;
+
+Global player_x = 0;
+Global player_y = 0;
+
+Global kitten_x = 0;
+Global kitten_y = 0;
+Global kitten_char = 0;
+!Global kitten_color = 0;
+
+Global last_message = "";
+
+Global nonkitten_count = Nonkitten_Default;
+
+Array nonkitten_x --> Nonkitten_Max;
+Array nonkitten_y --> Nonkitten_Max;
+Array nonkitten_char --> Nonkitten_Max;
+Array nonkitten_msg --> Nonkitten_Max;
+!Array nonkitten_color --> Nonkitten_Max;
+
+Global already_msg_count = 0;
+Global already_count = 0;
+Array already_x --> Nonkitten_Max + 2;
+Array already_y --> Nonkitten_Max + 2;
+Array already_msg --> Nonkitten_Max;
+
+
+[ Main key;
+       if ((1->0)&1 == 0)
+               Color = true;
+       else
+               Color = false;
+
+       main_menu();    
+       while (true) {
+               key = getkey();
+               switch (key) {
+               'F':    already_count = 0;
+                       init_kitten();
+                       init_robot();
+                       init_nonkittens();
+                       while (findkitten())
+                               ;
+               'D':    nonkitten_count = set_nonkitten_count();
+               'I':    print_instructions();
+               'A':    print_about();
+               'T':    print_thoughts();
+               }
+               if (key == 'Q' || key == $1b)
+                       break;
+               main_menu();
+       }
+       quit;
+];
+       
+
+[ main_menu;
+       Width = $22-->0;
+       Height = $24-->0;
+
+       @erase_window $ffff;
+       @split_window 11;
+       @set_window 1;
+
+       Banner();
+       draw_horiz(TopBar);
+
+       draw_big_robot(3, 7);
+       draw_big_kitten(15, 7);
+
+
+       @set_cursor 7 30;
+       print "robotfindskitten";
+       @set_cursor 8 30;
+       print "http://www.robotfindskitten.org";
+       @set_cursor 9 30;
+       print "Leonard Richardson (C) 1997, 2000";
+       @set_cursor 10 30;
+       print "David Griffith (C) 2002  (Inform Edition)";
+
+       @set_window 0;
+
+       print "  F) Find Kitten^";
+       print "  D) Difficulty  (", nonkitten_count, ")^";
+       print "  I) Instructions^";
+       print "  T) Thoughts^";
+       print "  A) About^";
+       print "  Q) Quit^";
+       print "^> ";
+];
+
+
+[ Banner i;
+       if (Story ~= 0) {
+#IFV5;
+               style bold; 
+#ENDIF;
+               print (string) Story;
+#IFV5;
+               style roman;
+#ENDIF;
+       }
+       if (Headline ~= 0) {
+               print (string) Headline;
+       }
+       print "Release ", (0-->1) & $03ff, " / Serial number ";
+       for (i=18:i<24:i++) print (char) 0->i;
+       print " / Inform v"; inversion; print " ";
+#ifdef STRICT_MODE;
+       print "S";
+#endif;
+#ifdef INFIX;
+       print "X";
+#ifnot;
+#ifdef DEBUG;
+       print "D";
+#endif;
+#endif;
+       new_line;
+];
+
+Constant INBUFSIZE 80;
+Array inbuf -> INBUFSIZE;
+[ set_nonkitten_count inbufvar ix cx len val;
+
+       while (true) {
+               @erase_window $ffff;
+               @split_window 5;
+               @set_window 1;
+               Banner();
+               draw_horiz(TopBar);
+               @set_window 0;
+
+               print "^Please enter the number of nonkittens you
+                 wish to search through.^(1 to 255 only)^^> ";
+
+               inbuf->0 = (INBUFSIZE-3);
+               inbuf->1 = 0;
+               inbufvar = inbuf;
+               ix = 0;
+               @aread inbufvar ix;
+               new_line;
+               len = inbuf->1;
+               cx = 0;
+               while (cx < len && inbuf->(2+cx) == ' ')
+                       cx++;
+               if (cx < len && inbuf->(2+cx) == '.')
+                       break;
+
+               if (cx == len || inbuf->(2+cx) < '0' || inbuf->(2+cx) > '9') {
+                       continue;
+               }
+
+               val = 0;
+               while (cx < len && inbuf->(2+cx) >= '0' && inbuf->(2+cx) <= '9') {
+                       val = val * 10 + (inbuf->(2+cx) - '0');
+                       cx++;
+               }
+
+               if (val < 1 || val > Nonkitten_Max) {
+                       print "Please enter a value from 1 to ",
+                         Nonkitten_Max, ", or Enter by itself to exit.^";
+                       continue;
+               } else break;
+       }
+       return val;
+];
+
+[ print_about;
+       @erase_window $ffff;
+       @split_window TopBar;
+       @set_window 1;
+       Banner();
+       draw_horiz(TopBar);
+       @set_window 0;
+
+print "^
+This Zen simulation is based on the C version v1600003.248b^
+by Leonard Richardson (C) 1997, 2000.^
+Written originally for the Nerth Pork robotfindskitten contest.^
+Reimplemented in Inform by David Griffith (C) 2002.^
+^
+Lots more information on Robot Finds Kitten is available at
+http://www.robotfindskitten.org.^
+^
+Known bugs:^
+^
+1) In get_random_msg(), already_seen_msg isn't being checked correctly
+leading to occasional duplicate messages.  It looks like it should work.
+Not sure why not.^
+^
+2) already_seen_xy() probably has problems similar to item 1 above which
+might explain why the kitten occasionally gets placed somewhere where
+the robot can't get to it.
+^
+3) Under Windows Frotz, the Robot appears as a solid block.  This is a
+bug in Windows Frotz which incorrectly makes the cursor opaque.^
+^
+4) Under Windows Frotz, an annoying [MORE] prompt appears when the game
+is started.  This is another bug in Windows Frotz which believes
+Windows' suggestion to use 20 lines rather than 24 or 25.^
+^
+^
+[Press any key to continue.]  "; 
+
+       getkey();
+];
+
+
+[ print_instructions;
+       @erase_window $ffff;
+       @split_window TopBar;
+       @set_window 1;
+       Banner();
+       draw_horiz(TopBar);
+       @set_window 0;
+
+print "^
+In this game, you are Robot (#).  Your job is to find Kitten.  This task
+is complicated by the existance of various things which are not
+kitten.  Robot must touch items to determine if they are Kitten or
+not.  Move Robot with the cursor keys, the numeric keypad, or using the
+vi/rogue movement keys.  The game ends when Robot finds
+Kitten.  Alternatively, you may end the game by hitting the Esc or Q
+keys.^^
+[Press any key to continue.]  "; 
+
+       getkey();
+];
+
+
+[ print_thoughts;
+       @erase_window $ffff;
+       @split_window TopBar;
+       @set_window 1;
+       Banner();
+       draw_horiz(TopBar);
+       @set_window 0;
+
+print "^
+A Final Thought.^
+^
+Day and night I feverishly worked upon the machine, creating both a soul
+which could desire its goal, and a body with which it could realize it.
+Many who saw my creation called it an abomination, and denied me grant
+money. But they could not dissuade me from my impossible task. It was a
+spectre that tormented me always, a ghost I had to give a form and a
+life, lest it consume me from the inside. And when at last my task was
+done, when the grey box on wheels was complete and when it, as well as
+I, knew what had to be done, I felt deep sympathy for the machine. For I
+had not destroyed the phantom, but merely exorcized it into another
+body. The robot knew not why this task had to be performed, for I could
+not imbue it with knowledge I did not myself posess. And at the same
+time, I felt a sweeping sense of relief sweep over me, that somehow, the
+dream that had driven me for my entire life had come one step closer to
+fruition.^
+^
+~Gort, Klaatu Verada Nikto~^
+^
+As I vocally activated the robot, I realized that it was following my
+instructions, but not out of any desire to obey me. Had I remained
+silent, it would have performed exactly the same operations. We were two
+beings controlled by the same force now. And yet, seeking vainly to hold
+some illusion of control over the machine I thought I had created, I
+gave my final command.^
+^
+~GO!~  I told the box as it began to roll out of my workshop into the
+frozen desert beyond. ~FIND KITTEN!~^
+^
+-- The Book of Found Kittens, pages 43-4, author unknown.^^
+
+
+[Press any key to continue.]  "; 
+
+       getkey();
+];
+
+[ draw_big_robot x y; 
+       if (x == 0)
+               x = 1;
+       if (y == 0)
+               y = 1;
+       @set_cursor y x;
+       print "[-]";
+       y = y+1;
+       @set_cursor y x;
+       print "(+)=C";
+
+       y = y+1;
+       @set_cursor y x;
+               print "| |";
+
+       y = y+1;
+       @set_cursor y x;
+       print "OOO";
+];
+
+[ draw_big_kitten x y;
+       if (x == 0)
+               x = 1;
+       if (y == 0)
+               y = 1;
+       @set_cursor y x;
+       print "|", (char) 92, "_/|";
+       y++;
+       @set_cursor y x;
+       print "|o o|__";
+       y++;
+       @set_cursor y x;
+       print "--*--__", (char) 92;
+       y++;
+       @set_cursor y x;
+       print "C_C(___)";       
+];
+
+
+[ findkitten key i kitten_found;
+       @erase_window $ffff;
+       @split_window TopBar;
+       @set_window 1;
+       @set_cursor 1 1;
+
+       kitten_found = false;
+
+       Banner();
+       print (string) last_message;
+       draw_horiz(TopBar);
+
+       draw_object(kitten_x, kitten_y, kitten_char);
+       draw_nonkittens();
+       draw_object(player_x, player_y, '#');
+
+       @set_cursor player_y player_x;
+
+
+       key = getkey();
+       switch (key) {
+       'Q', $1b:       rfalse;                 ! exit game ($1b == Esc)
+       '8', 'J', 129:  player_y--;             ! up
+       '2', 'K', 130:  player_y++;             ! down
+       '4', 'H', 131:  player_x--;             ! left
+       '6', 'L', 132:  player_x++;             ! right
+       '7', 'Y':       player_y--; player_x--; ! up-left
+       '9', 'U':       player_y--; player_x++; ! up-right
+       '1', 'B':       player_y++; player_x--; ! down-left
+       '3', 'N':       player_y++; player_x++; ! down-right
+       }
+       if (player_y <= TopBar+1)
+               player_y = TopBar + 1;
+       if (player_y > Height)
+               player_y = Height;
+       if (player_x < 1)
+               player_x = 1;
+       if (player_x > Width)
+               player_x = Width;
+
+       ! detect and handle collisions
+       !
+       if (player_x == kitten_x && player_y == kitten_y) {
+               found_kitten(key);
+               getkey();
+               rfalse;
+       }
+       for (i = 0: i < nonkitten_count: i++) {
+               if (player_x == nonkitten_x --> i
+               && player_y == nonkitten_y --> i) {
+                       @set_cursor 1 1;
+                       last_message = lookup_msg(nonkitten_msg --> i);
+
+                       ! prevent Robot from walking through the object.
+                       switch (key) {
+                       '8', 'J', 129:  player_y++;
+                       '2', 'K', 130:  player_y--;
+                       '4', 'H', 131:  player_x++;
+                       '6', 'L', 132:  player_x--;
+                       '7', 'Y':       player_y++; player_x++;
+                       '9', 'U':       player_y++; player_x--;
+                       '1', 'B':       player_y--; player_x++;
+                       '3', 'N':       player_y--; player_x--;
+                       }
+               }
+       }
+       rtrue;
+];
+
+
+[ found_kitten key i j junk go_right robot_x anim_finished;
+
+       go_right = false;
+       anim_finished = false;
+
+       switch (key) {
+       '8', 'J', 129:  player_y++;
+       '2', 'K', 130:  player_y--; go_right = true;
+       '4', 'H', 131:  player_x++; 
+       '6', 'L', 132:  player_x--; go_right = true;
+       '7', 'Y':       player_y++; player_x++; 
+       '9', 'U':       player_y++; player_x--; go_right = true;
+       '1', 'B':       player_y--; player_x++;
+       '3', 'N':       player_y--; player_x--; go_right = true;
+       default: go_right = true;
+       }
+
+       for (i = 4: i >= 0: i--) {
+               @erase_window $ffff;
+               @split_window TopBar;
+               @set_window 1;
+               @set_cursor 1 1;
+
+               Banner();
+               draw_horiz(TopBar);
+
+               if (i > 0) {
+                       if (go_right) {
+                               robot_x = Anim_Meet - i;
+                               draw_object(robot_x, TopBar - 1, '#');
+                               draw_object(Anim_Meet - 1 + i, TopBar - 1, kitten_char);
+                       } else {
+                               robot_x = Anim_Meet - 1 + i;
+                               draw_object(robot_x, TopBar - 1, '#');
+                               draw_object(Anim_Meet - i, TopBar - 1, kitten_char);
+                       }
+               } else {
+                       j = TopBar - 1;
+                       @set_cursor j 1;
+                       print "You found Kitten!  Way to go, Robot!";
+                       anim_finished = true;
+               }
+
+               draw_object(kitten_x, kitten_y, kitten_char);
+
+               draw_object(player_x, player_y, '#');
+
+               draw_nonkittens();
+
+               if (anim_finished == false) {
+                       j = TopBar - 1;
+                       @set_cursor j robot_x;
+                       @aread junk 0 10 pause junk;
+               } else {
+                       draw_object(player_x, player_y, '#');
+                       @set_cursor player_y player_x;
+               }
+       }
+
+];
+
+
+[ already_seen_xy x y i;
+
+       for (i = 0: i < already_count: i++) {
+               if (already_x --> i == x && already_y --> i == y) {
+                       return false;
+               } 
+       }
+       already_x --> already_count = x;
+       already_y --> already_count = y;
+       already_count++;
+
+       if (already_count > nonkitten_count + 2) {
+               print "Overflow in already_seen_xy()^";
+               quit;
+       }
+
+       return true;
+];
+
+
+[ pause;
+       rtrue;
+];
+
+
+[ init_kitten;
+       kitten_x = get_random_x();
+       kitten_y = get_random_y();
+
+       while (already_seen_xy(kitten_x, kitten_y) == false) {
+               kitten_x = get_random_x();
+               kitten_y = get_random_y();
+       }
+       kitten_char = get_random_char();
+];
+
+
+[ init_robot;
+       player_x = get_random_x();
+       player_y = get_random_y();
+
+       while (already_seen_xy(player_x, player_y) == false) {
+               player_x = get_random_x();
+               player_y = get_random_y();
+       }
+];     
+
+
+[ init_nonkittens i;
+       already_msg_count = 0;
+       last_message = "";
+
+       for (i = 0: i < nonkitten_count: i++) {
+               nonkitten_x --> i = get_random_x();
+               nonkitten_y --> i = get_random_y();
+
+               while (already_seen_xy(nonkitten_x --> i, nonkitten_y --> i) == false) {
+                       nonkitten_x --> i = get_random_x();
+                       nonkitten_y --> i = get_random_y();
+               }
+               nonkitten_char --> i = get_random_char();
+               nonkitten_msg --> i = get_random_msg();
+       }
+];
+
+
+[ draw_nonkittens i;
+       for (i = 0: i < nonkitten_count: i++) {
+               draw_object(nonkitten_x --> i,
+                               nonkitten_y --> i,
+                               nonkitten_char --> i);
+       }
+];
+
+
+[ draw_object x y c;
+       @set_cursor y x;
+       if (c)
+               print (char) c;
+];
+
+
+[ draw_horiz row i;
+       @set_cursor row 1;
+
+       for (i = 0 : i < Width : i++)
+               print (char) '-';
+];
+
+
+[ getkey x;
+       @read_char 1 -> x;
+       if (x >= 'a' && x <= 'z')
+               x = x - ('a' - 'A');
+       return x;
+];
+
+
+![ get_random_color num;
+!      num = random(7);
+!      num = num + 2;
+!      return num;
+!];
+
+
+[ get_random_char num;
+       num = random(93);
+       num = num + 33;
+
+       ! avoid choosing '#' for a random character.
+       while (num == 35) {
+               num = random(93);
+               num = num + 33;
+       }
+       return num;
+];
+
+
+[ get_random_msg num i found_dup;
+       found_dup = false;
+       num = random(MESSAGE_NUM);
+       for (i = 0: i < already_msg_count: i++) {
+               while (already_msg --> i == num) {
+                       num = random(MESSAGE_NUM);
+                       found_dup = true;
+               }
+       }
+
+       if (found_dup)  already_msg_count++;
+
+       if (already_msg_count > nonkitten_count) {
+               print "Overflow in get_random_msg()^";
+               quit;
+        }
+       return num;
+];
+
+
+[ get_random_x;
+       return random(Width);
+];
+
+
+[ get_random_y num ok;
+       ok = false;
+       while (ok == false) {
+               num = random(Height);
+               if (num > TopBar)
+                       ok = true;
+       }
+       return num;
+];
+
+
+[ lookup_msg num;
+       switch(num) {
+1:     return "~I pity the fool who mistakes me for kitten!~, sez Mr. T.";
+2:     return "That's just an old tin can.";
+3:     return "It's an altar to the horse god.";
+4:     return "A box of dancing mechanical pencils.  They dance!  They sing!";
+5:     return "It's an old Duke Ellington record.";
+6:     return "A box of fumigation pellets.";
+7:     return "A digital clock. It's stuck at 2:17 PM.";
+8:     return "That's just a charred human corpse.";
+9:     return "I don't know what that is, but it's not kitten.";
+10:    return "An empty shopping bag.  Paper or plastic?";
+11:    return "Could it be... a big ugly bowling trophy?";
+12:    return "A coat hanger hovers in thin air.  Odd.";
+13:    return "Not kitten, just a packet of Kool-Aid(tm).";
+14:    return "A freshly-baked pumpkin pie.";
+15:    return "A lone, forgotten comma, sits here, sobbing.";
+16:    return "ONE HUNDRED THOUSAND CARPET FIBERS!!!!!";
+17:    return "It's Richard Nixon's nose!";
+18:    return "It's Lucy Ricardo. ~Aaaah, Ricky!~, she says.";
+19:    return "You stumble upon Bill Gates' stand-up act.";
+20:    return "Just an autographed copy of the Kama Sutra.";
+21:    return "It's the Will Rogers Highway. Who was Will Rogers, anyway?";
+22:    return "It's another robot, more advanced in design than you but strangely immobile.";
+23:    return "Leonard Richardson is here, asking people to lick him.";
+24:    return "It's a stupid mask, fashioned after a beagle.";
+25:    return "Your State Farm Insurance(tm) representative!";
+26:    return "It's the local draft board.";
+27:    return "Seven 1/4~ screws and a piece of plastic.";
+28:    return "An 80286 machine.";
+29:    return "One of those stupid ~Homes of the Stars~ maps.";
+30:    return "A signpost saying ~TO KITTEN~.  It points in no particular direction.";
+31:    return "A hammock stretched between a tree and a volleyball pole.";
+32:    return "A Texas Instruments of Destruction calculator.";
+33:    return "It's a dark, amphorous blob of matter.";
+34:    return "Just a pincushion.";
+35:    return "It's a mighty zombie talking about some love and prosperity.";
+36:    return "~Dear robot, you may have already won our 10 MILLION DOLLAR prize...~";
+37:    return "It's just an object.";
+38:    return "A mere collection of pixels.";
+39:    return "A badly dented high-hat cymbal lies on its side here.";
+40:    return "A marijuana brownie.";
+41:    return "A plush Chewbacca.";
+42:    return "Daily hunger conditioner from Australasia";
+43:    return "Just some stuff.";
+44:    return "Why are you touching this when you should be finding kitten?";
+45:    return "A glorious fan of peacock feathers.";
+46:    return "It's some compromising photos of Babar the Elephant.";
+47:    return "A copy of the Weekly World News. Watch out for the chambered nautilus!";
+48:    return "It's the proverbial wet blanket.";
+49:    return "A ~Get Out of Jail Free~ card.";
+50:    return "An incredibly expensive ~Mad About You~ collector plate.";
+51:    return "Paul Moyer's necktie.";
+52:    return "A haircut and a real job.  Now you know where to get one!";
+53:    return "An automated robot-hater.  It frowns disapprovingly at you.";
+54:    return "An automated robot-liker.  It smiles at you.";
+55:    return "It's a black hole.  Don't fall in!";
+56:    return "Just a big brick wall.";
+57:    return "You found kitten!  No, just kidding.";
+58:    return "Heart of Darkness brand pistachio nuts.";
+59:    return "A smoking branding iron shaped like a 24-pin connector.";
+60:    return "It's a Java applet.";
+61:    return "An abandoned used-car lot.";
+62:    return "A shameless plug for Crummy: http://www.crummy.com/";
+63:    return "A shameless plug for the UCLA Linux Users Group: http://linux.ucla.edu/";
+64:    return "A can of Spam Lite.";
+65:    return "This is another fine mess you've gotten us into, Stanley.";
+66:    return "It's scenery for ~Waiting for Godot~.";
+67:    return "This grain elevator towers high above you.";
+68:    return "A Mentos wrapper.";
+69:    return "It's the constellation Pisces.";
+70:    return "It's a fly on the wall.  Hi, fly!";
+71:    return "This kind of looks like kitten, but it's not.";
+72:    return "It's a banana!  Oh, joy!";
+73:    return "A helicopter has crashed here.";
+74:    return "Carlos Tarango stands here, doing his best impression of Pat Smear.";
+75:    return "A patch of mushrooms grows here.";
+76:    return "A patch of grape jelly grows here.";
+77:    return "A spindle, and a grindle, and a bucka-wacka-woom!";
+78:    return "A geyser sprays water high into the air.";
+79:    return "A toenail?  What good is a toenail?";
+80:    return "You've found the fish!  Not that it does you much good in this game.";
+81:    return "A Buttertonsils bar.";
+82:    return "One of the few remaining discoes.";
+83:    return "Ah, the uniform of a Revolutionary-era minuteman.";
+84:    return "A punch bowl, filled with punch and lemon slices.";
+85:    return "It's nothing but a G-thang, baby.";
+86:    return "IT'S ALIVE! AH HA HA HA HA!";
+87:    return "This was no boating accident!";
+88:    return "Wait!  This isn't the poker chip!  You've been tricked!  DAMN YOU, MENDEZ!";
+89:    return "A livery stable!  Get your livery!";
+90:    return "It's a perpetual immobility machine.";
+91:    return "~On this spot in 1962, Henry Winkler was sick.~";
+92:    return "There's nothing here; it's just an optical illusion.";
+93:    return "The World's Biggest Motzah Ball!";
+94:    return "A tribe of cannibals lives here.  They eat Malt-O-Meal for breakfast, you know.";
+95:    return "This appears to be a rather large stack of trashy romance novels.";
+96:    return "Look out!  Exclamation points!";
+97:    return "A herd of wild coffee mugs slumbers here.";
+98:    return "It's a limbo bar!  How low can you go?";
+99:    return "It's the horizon.  Now THAT'S weird.";
+100:   return "A vase full of artificial flowers is stuck to the floor here.";
+101:   return "A large snake bars your way.";
+102:   return "A pair of saloon-style doors swing slowly back and forth here.";
+103:   return "It's an ordinary bust of Beethoven... but why is it painted green?";
+104:   return "It's TV's lovable wisecracking Crow! ~Bite me!~, he says.";
+105:   return "Hey, look, it's war.  What is it good for?  Absolutely nothing.  Say it again.";
+106:   return "It's the amazing self-referential thing that's not kitten.";
+107:   return "A flamboyant feather boa.  Now you can dress up like Carol Channing!";
+108:   return "~Sure hope we get some rain soon,~ says Farmer Joe.";
+109:   return "~How in heck can I wash my neck if it ain't gonna rain no more?~ asks Farmer Al.";
+110:   return "~Topsoil's all gone, ma,~ weeps Lil' Greg.";
+111:   return "This is a large brown bear.  Oddly enough, it's currently peeing in the woods.";
+112:   return "A team of arctic explorers is camped here.";
+113:   return "This object here appears to be Louis Farrakhan's bow tie.";
+114:   return "This is the world-famous Chain of Jockstraps.";
+115:   return "A trash compactor, compacting away.";
+116:   return "This toaster strudel is riddled with bullet holes!";
+117:   return "It's a hologram of a crashed helicopter.";
+118:   return "This is a television.  On screen you see a robot strangely similar to yourself.";
+119:   return "This balogna has a first name, it's R-A-N-C-I-D.";
+120:   return "A salmon hatchery?  Look again.  It's merely a single salmon.";
+121:   return "It's a rim shot.  Ba-da-boom!";
+122:   return "It's creepy and it's kooky, mysterious and spooky.  It's also somewhat ooky.";
+123:   return "This is an anagram.";
+124:   return "This object is like an analogy.";
+125:   return "It's a symbol.  You see in it a model for all symbols everywhere.";
+126:   return "The object pushes back at you.";
+127:   return "A traffic signal.  It appears to have been recently vandalized.";
+128:   return "~There is no kitten!~ cackles the old crone.  You are shocked by her blasphemy.";
+129:   return "This is a Lagrange point.  Don't come too close now.";
+130:   return "The dirty old tramp bemoans the loss of his harmonica.";
+131:   return "Look, it's Fanny the Irishman!";
+132:   return "What in blazes is this?";
+133:   return "It's the instruction manual for a previous version of this game.";
+134:   return "A brain cell.  Oddly enough, it seems to be functioning.";
+135:   return "Tea and/or crumpets.";
+136:   return "This jukebox has nothing but Cliff Richards albums in it.";
+137:   return "It's a Quaker Oatmeal tube, converted into a drum.";
+138:   return "This is a remote control.  Being a robot, you keep a wide berth.";
+139:   return "It's a roll of industrial-strength copper wire.";
+140:   return "Oh boy!  Grub!  Er, grubs.";
+141:   return "A puddle of mud, where the mudskippers play.";
+142:   return "Plenty of nothing.";
+143:   return "Look at that, it's the Crudmobile.";
+144:   return "Just Walter Mattheau and Jack Lemmon.";
+145:   return "Two crepes, two crepes in a box.";
+146:   return "An autographed copy of ~Primary Colors~, by Anonymous.";
+147:   return "Another rabbit?  That's three today!";
+148:   return "It's a segmentation fault.  Core dumped, by the way.";
+149:   return "A historical marker showing the actual location of /dev/null.";
+150:   return "Thar's Mobius Dick, the convoluted whale.  Arrr!";
+151:   return "It's a charcoal briquette, smoking away.";
+151:   return "A pizza, melting in the sun.";
+152:   return "It's a ~HOME ALONE 2: Lost in New York~ novelty cup.";
+153:   return "A stack of 7 inch floppies wobbles precariously.";
+153:   return "It's nothing but a corrupted floppy.  Coaster anyone?";
+154:   return "A section of glowing phosphor cells sings a song of radiation to you.";
+155:   return "This TRS-80 III is eerily silent.";
+156:   return "A toilet bowl occupies this space.";
+157:   return "This peg-leg is stuck in a knothole!";
+158:   return "It's a solitary vaccuum tube.";
+159:   return "This corroded robot is clutching a mitten.";
+160:   return "~Hi, I'm Anson Williams, TV's 'Potsy'.~";
+161:   return "This subwoofer was blown out in 1974.";
+162:   return "Three half-pennies and a wooden nickel.";
+163:   return "It's the missing chapter to ~A Clockwork Orange~.";
+164:   return "It's a burrito stand flyer.  ~Taqueria El Ranchito~.";
+165:   return "This smiling family is happy because they eat LARD.";
+166:   return "Roger Avery, persona un famoso de los Estados Unidos.";
+167:   return "Ne'er but a potted plant.";
+168:   return "A parrot, kipping on its back.";
+169:   return "A forgotten telephone switchboard.";
+170:   return "A forgotten telephone switchboard operator.";
+171:   return "It's an automated robot-disdainer. It pretends you're not there.";
+172:   return "It's a portable hole.  A sign reads: ~Closed for the winter~.";
+173:   return "Just a moldy loaf of bread.";
+174:   return "A little glass tub of Carmex. ($.89)  Too bad you have no lips.";
+175:   return "A Swiss-Army knife.  All of its appendages are out.  (toothpick lost)";
+176:   return "It's a zen simulation, trapped within an ASCII character.";
+177:   return "It's a copy of ~The Rubaiyat of Spike Schudy~.";
+178:   return "It's ~War and Peace~ (unabridged, very small print).";
+179:   return "A willing, ripe tomato bemoans your inability to digest fruit.";
+180:   return "A robot comedian.  You feel amused.";
+181:   return "It's KITT, the talking car.";
+182:   return "Here's Pete Peterson.  His batteries seem to have long gone dead.";
+183:   return "~Blup, blup, blup~, says the mud pot.";
+184:   return "More grist for the mill.";
+185:   return "Grind 'em up, spit 'em out, they're twigs.";
+186:   return "The boom box cranks out an old Ethel Merman tune.";
+187:   return "It's ~Finding kitten~, published by O'Reilly and Associates.";
+188:   return "Pumpkin pie spice.";
+189:   return "It's the Bass-Matic '76!  Mmm, that's good bass!";
+190:   return "~Lend us a fiver 'til Thursday~, pleas Andy Capp.";
+191:   return "It's a tape of '70s rock.  All original hits!  All original artists!";
+192:   return "You've found the fabled America Online disk graveyard!";
+193:   return "Empty jewelboxes litter the landscape.";
+194:   return "It's the astounding meta-object.";
+195:   return "Ed McMahon stands here, lost in thought.  Seeing you, he bellows, ~YES SIR!~";
+196:   return "...thingy???";
+197:   return "It's 1000 secrets the government doesn't want you to know!";
+198:   return "The letters O and R.";
+199:   return "A magical... magic thing.";
+200:   return "It's a moment of silence.";
+201:   return "It's Sirhan-Sirhan, looking guilty.";
+202:   return "It's ~Chicken Soup for the Kitten-seeking Soulless Robot.~";
+203:   return "It is a set of wind-up chatter teeth.";
+204:   return "It is a cloud shaped like an ox.";
+205:   return "You see a snowflake here, melting slowly.";
+206:   return "It's a big block of ice.  Something seems to be frozen inside it.";
+207:   return "Vladimir Lenin's casket rests here.";
+208:   return "It's a copy of ~Zen and The Art of Robot Maintenance~.";
+209:   return "This invisible box contains a pantomime horse.";
+210:   return "A mason jar lies here open. It's label reads: ~do not open!~.";
+211:   return "A train of thought chugs through here.";
+212:   return "This jar of pickles expired in 1957.";
+213:   return "Someone's identity disk lies here.";
+214:   return "~Yes!~ says the bit.";
+215:   return "~No!~ says the bit.";
+216:   return "A dodecahedron bars your way.";
+217:   return "Mr. Hooper is here, surfing.";
+218:   return "It's a big smoking fish.";
+219:   return "You have new mail in /var/spool/robot";
+220:   return "Just a monitor with the blue element burnt out.";
+221:   return "A pile of coaxial plumbing lies here.";
+222:   return "It's a rotten old shoe.";
+223:   return "It's a hundred-dollar bill.";
+224:   return "It's a Dvorak keyboard.";
+225:   return "It's a cardboard box full of 8-tracks.";
+226:   return "Just a broken hard drive containg the archives of Nerth Pork.";
+227:   return "A broken metronome sits here, it's needle off to one side.";
+228:   return "A sign reads: ~Go home!~";
+229:   return "A sign reads: ~No robots allowed!~";
+230:   return "It's the handheld robotfindskitten game, by Tiger.";
+231:   return "This particular monstrosity appears to be ENIAC.";
+232:   return "This is a tasty-looking banana creme pie.";
+233:   return "A wireframe model of a hot dog rotates in space here.";
+234:   return "Just the empty husk of a locust.";
+235:   return "You disturb a murder of crows.";
+236:   return "It's a copy of the RobotFindsKitten EULA.";
+237:   return "It's Death.";
+238:   return "It's an autographed copy of ~Secondary Colors~, by Bob Ross.";
+239:   return "It is a marzipan dreadnought that appears to have melted and stuck.";
+240:   return "It's a DVD of ~Crouching Monkey, Hidden Kitten~, region encoded for the moon.";
+241:   return "It's Kieran Hervold.  Damn dyslexia!";
+242:   return "A non-descript box of crackers.";
+243:   return "Carbonated Water, High Fructose Corn Syrup, Color, Phosphoric Acid, Flavors, Caffeine.";
+244:   return "~Move along! Nothing to see here!~";
+245:   return "It's the embalmed corpse of Vladimir Lenin.";
+246:   return "A coupon for one free steak-fish at your local family diner.";
+247:   return "A set of keys to a 2001 Rolls Royce.  Worthless.";
+
+! The following messages were added by David Griffith
+!
+248:   return "It's the Golden Banana of Discord!";
+249:   return "The Inform Designer's Manual (4th edition)";
+250:   return "A packet of pipe cleaners.";
+251:   return "It's Andrew Plotkin plotting something.";
+252:   return "A half-eaten cheese sandwich.";
+253:   return "Clang, clang, clang goes the tranny!";
+254:   return "A family of integrals are here integrating.";
+255:   return "A tuft of kitten fur, but no kitten.";
+256:   return "A bottle of oil!  Refreshing!";
+257:   return "A shameless plug for Frotz: http://www.cs.csubak.edu/~dgriffi/proj/frotz/";
+258:   return "Clifford Stoll is here selling Klein bottles.";
+259:   return "You found the marble in the oatmeal!";
+260:   return "An empty Altoids tin.";
+261:   return "An empty Penguin Mints tin.";
+262:   return "So, THAT's what an invisible barrier looks like!";
+263:   return "A cluster of cattails are growing here.";
+264:   return "A discarded bagpipe chanter reed.";
+265:   return "Big Bird is here looking for Mr. Looper.";
+266:   return "It's a Linux install CD.";
+267:   return "You found Puppy!  Too bad this isn't ~Robot Finds Puppy~.";
+268:   return "Several meters of cat5 cable.";
+269:   return "A scrap of parchment bears the single word, ~meow~.";
+270:   return "A puddle of chocolate sauce.";
+271:   return "Your robot pal Floyd is here and wants to play Hucka-Bucka-Beanstalk.";
+272:   return "Someone is talking to Ralph on the big white phone here.";
+273:   return "'Twas brillig in the slivey-toves...";
+274:   return "Darth Vader is here looking for his Teddywookie.";
+275:   return "A bassoon is hooting angrily at you.";
+276:   return "Catsup and Mustard all over the place!  It's the Human Hamburger!";
+277:   return "Gibble, Gobble, we ACCEPT YOU ...";
+278:   return "A rancid corn dog.";
+279:   return "It's a tribute to fishnet stockings.";
+280:   return "A jar of Vegemite is running down the hill here.";
+281:   return "Nipples, dimples, knuckles, NICKLES, wrinkles, pimples!!";
+282:   return "A bottle of hair tonic.";
+283:   return "A packet of catnip.";
+       }
+];