! robotfindskitten
! A Zen Simulation
-! Release 4 / Serial number 030131 / Inform v6.21
+! Release 7 / Serial number 130320 / Inform v6.33
!
! [-] |\_/| http://www.robotfindskitten.org
! (+)=C |o o|__ Leonard Richardson (C) 1997, 2000
-! | | --*--__\ David Griffith (C) 2002 (Inform Edition)
+! | | --*--__\ David Griffith (C) 2002-2013 (Inform Edition)
! OOO C_C(____)
!
!
! using the vi/rogue movement keys. The game ends when robotfindskitten.
! Alternatively, you may end the game by hitting the Esc or Q keys.
!
-! Developed with Inform 6.21.2 as installed from NetBSD's pkgsrc tree
+! Developed with Inform 6.21.4 as installed from NetBSD's pkgsrc tree
! and Frotz 2.42.
-!
-!
-! Compile it with:
-! inform "-~S" kitten.inf <-- Assuming Unix
-! ^
-! |
-! Gets rid of debugging code which doesn't really do
-! this sort of program any good in the first place.
!
+!
! Notes:
! 1) More than half of the code is taken up by non kitten items
! (NKIs). When I compiled the code with just five messages and
! 2) If it wasn't already abundantly obvious, this program won't
! compile to Glulx because of copious use of Z-machine assembly
! instructions.
+!
+! 3) Compiling for V5 or higher is required due to "style" calls.
+! Is there a reason why someone would want to compile this for V4
+! or previous?
!Switches xv5s;
-Switches v5;
+Switches "d2~S";
-! Number of messages
-! This must be updated when adding new messages.
-!
-Constant MESSAGE_NUM 561;
-
Constant Nonkitten_Default 20;
! Maxmimum possible number of non-kitten items on the playfield at once.
-! I don't know if there's a hard maximum for arrays built into the
-! Z-machine. It's just that Inform won't let me set an array's
-! dimensions at runtime.
+! For whatever reason, this cannot be set dynamically.
!
-Constant Nonkitten_Max 256;
-
+Constant Nonkitten_Max 589;
-Release 4;
-Serial "030131";
+Release 7;
+Serial "130320";
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Constant Story "robotfindskitten";
-
Constant Headline "^A Zen Simulation^";
-! Number of spaces from the left where Robot and Kitten meet during the
-! animation.
-!
-Constant Anim_Meet 10;
+! NKIs are generated with nki2inf.pl and put into nki.inf
+Include "nki.inf";
-! These are set at runtime.
-!
-Global Height = 0;
+Constant Anim_Meet 10; ! Number of spaces from the left where
+ ! Robot and Kitten meet during animation.
+
+Global Height = 0; ! These are set at runtime.
Global Width = 0;
-Global Back_def = 2;
-Global Fore_def = 9;
+Global Back_def = 2; ! Black.
+Global Fore_def = 9; ! White.
-Global TopBar = 5;
+Global TopBar = 5; ! Lines from the top.
-Global player_x = 0;
-Global player_y = 0;
-Global player_x_last = 0;
+Global player_x = 0; ! Keeping track of where the player was
+Global player_y = 0; ! 1 move ago allows us to keep the
+Global player_x_last = 0; ! player from walking through obstacles.
Global player_y_last = 0;
Global kitten_x = 0;
Global kitten_char = 0;
Global kitten_color = 0;
-Global last_message = "";
+Global last_message = ""; ! Always show the last-encountered message.
Global nonkitten_count = Nonkitten_Default;
Array already_y --> Nonkitten_Max + 2;
Array already_msg --> Nonkitten_Max;
-
+! If a key is held down while the found_kitten animation is playing,
+! (0-->1) & $03ff gets corrupted. Seems like it might be a bug
+! somewhere in Unix Frotz.
+!
Global Real_Release = 0;
[ Main key;
@set_colour Fore_def Back_def;
- if (MESSAGE_NUM < Nonkitten_Max) {
- nonkitten_count = MESSAGE_NUM;
- } else {
- nonkitten_count = Nonkitten_Default;
- }
+! if (MESSAGE_NUM < Nonkitten_Max) {
+! nonkitten_count = MESSAGE_NUM;
+! } else {
+! nonkitten_count = Nonkitten_Default;
+! }
+
+ nonkitten_count = Nonkitten_Default;
- ! If a key is held down while the found_kitten animation is playing,
- ! (0-->1) & $03ff gets corrupted. Seems like it might be a bug
- ! somewhere in Unix Frotz.
- !
Real_Release = (0-->1)&$03ff;
Width = $22-->0;
'I': print_instructions();
'A': print_about();
'T': print_thoughts();
-! 'P': print_all_nki();
}
if (key == 'Q' || key == $1b) ! $1b == ESC
break;
[ main_menu psycho;
+ ! There's a 1:50 chance that the kitten in the title screen
+ ! will have a "psycho" appearance.
+ !
psycho = random(50);
if (psycho == 1)
psycho = true;
@set_cursor 8 30;
print "Leonard Richardson (C) 1997, 2000";
@set_cursor 9 30;
- print "David Griffith (C) 2002 (Inform Edition)";
-
+ print "David Griffith (C) 2002-2013 (Inform Edition)";
@set_cursor 10 30;
print " ", MESSAGE_NUM, " different nonkittens!";
@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 "^> ";
+ print " F) Find Kitten^",
+ " D) Difficulty (", nonkitten_count, ")^",
+ " I) Instructions^",
+ " T) Thoughts^",
+ " A) About^",
+ " Q) Quit^",
+ "^> ";
];
-! Copied from module/verblibm.h
+
+! Copied from module/verblibm.h of the Inform 6.21.3 standard library.
!
[ Banner i;
if (Story ~= 0) {
-#IFV5;
style bold;
-#ENDIF;
print (string) Story;
-#IFV5;
style roman;
-#ENDIF;
}
if (Headline ~= 0) {
print (string) Headline;
}
print "Release ", Real_Release, " / 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;
+ print " / Inform v"; inversion; print "";
new_line;
];
if (cx < len && inbuf->(2+cx) == '.')
break;
- ! If user just hit return, use what we have already.
+ ! If user just hits return, use what we have already.
if (len == 0)
return init;
if (cx == len || inbuf->(2+cx) < '0' || inbuf->(2+cx) > '9') {
^
This code is freely redistributable. Do with it what you will, but
don't go about claiming you wrote it. I, David Griffith, retain
-copyright on this program except for the NKIs imported from the POSIX
-imported from the master (aka POSIX) port.^
+copyright on this program except for the NKIs imported from the master
+(aka POSIX) port.^
^
Lots more information on robotfindskitten is available at
http://www.robotfindskitten.org.^
^
-To submit new NKI's please go to the above URL.^
+To submit new NKI's, please go to the above URL.^
^
^
Release History:^
- Merged in new NKIs from the new POSIX release of robotfindskitten.^
- More NKIs added (561 total).^
^
+Release 5 / Serial Number 030524^
+Even more NKIs release.^
+- Idiotic typos fixed.^
+- More NKIs added (602 total).^
^
-Known Bugs:^
+Release 6 / Serial Number 031116^
+Challenge release.^
+- More NKIs added (764 total).^
+- Increased maximum difficulty to 589.^
+- Lots more comments in the source code.^
+- Assorted cleanups in the source code.^
^
-1) I still don't know why already_seen_xy() occasionally causes Robot to
-get placed on top of another object. Fortunately this seems to happen
-only very rarely and typically only if the difficulty is set to more
-than 200.^
+Release 7 / Serial Number 130320^
+Modular release.^
+- Synchronized NKIs and removed redundancies with the POSIX port.^
+- NKIs now generated from an external file using nki2inf.pl.^
+- NKIs reduced to 723 because of redundancies and recommended deletions.^
^
-2) Under Windows Frotz, Robot used to appear as a solid block. This was
-because of a bug in Windows Frotz which incorrectly makes the cursor
-opaque. The cursor is now moved off to the upper-right corner so that
-the game looks okay on terminals that use something other than reverse
-for the cursor. I still can't figure out how to make Inform hide the
-cursor completely. At least on xterm and NetBSD's console,
-@@64set_cursor -1 doesn't work.^
^
-3) Under Windows Frotz, an annoying [MORE] prompt appears at the main
-menu. This is another bug in Windows Frotz which causes the
-interpreter to follow Windows' suggestion something less than 24 or 25
-lines is okay.^
+Known Bugs:^
^
+1) I still don't know why already_seen_xy() occasionally causes Robot to
+get placed on top of another object when a game is started. Fortunately
+this seems to happen only very rarely and typically only if the
+difficulty is set to more than 200. This bug also seems to very
+occasionally put Kitten underneath an NKI.^
^
-Other Stuff:^
+2) Under earlier versions of Windows Frotz, Robot used to appear as a
+solid block. This was because of a bug in Windows Frotz which
+incorrectly makes the cursor opaque. The cursor is now moved off to
+the upper-right corner so that the game looks okay on terminals that use
+something other than reverse for the cursor. I still can't figure out
+how to make Inform hide the cursor completely. At least on xterm and
+NetBSD's console, @@64set_cursor -1 doesn't work.^
^
-1) PalmOS mode and screen-resizing was removed because PalmOS mode stunk
-and screen-resizing was a failed attempt to make PalmOS mode work. The
-native PalmOS port of robotfindskitten looks much better than the Inform
-version running on a PalmOS Z-machine interpreter.^
+3) Under Windows Frotz, an annoying [MORE] prompt might appear at the
+main menu. This is another bug in Windows Frotz which causes the
+interpreter to follow Windows' suggestion that something less than 24 or
+25 lines is okay.^
^
[Press any key to continue.] ";
getkey();
[ print_instructions;
-
@erase_window $ffff;
@split_window TopBar;
@set_window 1;
@set_window 0;
print "^
In this game, you are Robot ( ";
-#IFV5; style reverse; #ENDIF;
-print "#";
-#IFV5; style roman; #ENDIF;
-print " ). 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 (make sure
-numlock is on), or using the vi/rogue/nethack movement keys. The game
-ends when robotfindskitten. Alternatively, you may end the game by
-hitting the Esc or Q keys.^
+style reverse; print "#"; style roman;
+print " ). 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 (make sure numlock is on), or using the
+vi/rogue/nethack movement keys. The game ends when robotfindskitten.
+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;
@set_colour Fore_def Back_def;
];
+
! Something gets messed up if I make this local to findkitten()
! When going right or left, then up or down to hit the Kitten, the
! animation gets reversed.
draw_object(kitten_x, kitten_y, kitten_char, kitten_color);
draw_nonkittens();
- #IFV5; style reverse; #ENDIF;
+ style reverse;
draw_object(player_x, player_y, '#');
- #IFV5; style roman; #ENDIF;
+ style roman;
@set_cursor 1 Width;
if (i > 0) {
if (my_last_right) {
robot_x = Anim_Meet - i;
- #IFV5; style reverse; #ENDIF;
+ style reverse;
draw_object(robot_x, TopBar - 1, '#');
- #IFV5; style roman; #ENDIF;
+ style roman;
draw_object(Anim_Meet - 1 + i, TopBar - 1,
kitten_char, kitten_color);
} else {
robot_x = Anim_Meet - 1 + i;
- #IFV5; style reverse; #ENDIF;
+ style reverse;
draw_object(robot_x, TopBar - 1, '#');
- #IFV5; style roman; #ENDIF;
+ style roman;
draw_object(Anim_Meet - i, TopBar - 1,
kitten_char, kitten_color);
}
draw_object(kitten_x, kitten_y, kitten_char, kitten_color);
- #IFV5; style reverse; #ENDIF;
+ style reverse;
draw_object(player_x, player_y, '#');
- #IFV5; style roman; #ENDIF;
+ style roman;
draw_nonkittens();
if (anim_finished == false) {
@set_cursor 1 Width;
@aread junk 0 10 pause -> junk;
} else {
- #IFV5; style reverse; #ENDIF;
+ style reverse;
draw_object(player_x, player_y, '#');
- #IFV5; style roman; #ENDIF;
+ style roman;
@set_cursor 1 Width;
}
}
];
+
[ already_seen_xy x y i;
for (i = 0: i < already_count: i++) {
if (already_x-->already_count == x &&
kitten_x = get_random_x();
kitten_y = get_random_y();
kitten_color = get_random_color();
-
while (already_seen_xy(kitten_x, kitten_y) == true) {
kitten_x = get_random_x();
kitten_y = get_random_y();
[ init_robot;
player_x = get_random_x();
player_y = get_random_y();
-
while (already_seen_xy(player_x, player_y) == true) {
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();
nonkitten_color-->i = get_random_color();
-
while (already_seen_xy(nonkitten_x-->i,
nonkitten_y-->i) == true) {
nonkitten_x-->i = get_random_x();
if (fore == "")
fore = Back_def;
if (back == "")
- back = Back_def;
-
+ back = Back_def;
@set_colour fore Back_def;
if (character)
print (char) character;
@set_colour Fore_def Back_def;
-
];
return num;
];
+
[ get_random_color num;
num = random(7) + 2;
! 0 and 1 are default color and current color
[ get_random_x;
+ ! Maybe this will need to do something more in the future.
return random(Width);
];
-[ get_random_y num ok;
- ok = false;
+[ get_random_y num;
! Make sure we don't draw in the status bar.
- while (ok == false) {
+ while (true) {
num = random(Height);
if (num > TopBar)
- ok = true;
+ return num;
}
- return num;
];
-
-! This function is mainly of use to members of the robotfindskitten
-! development team.
-!
-! When this function is uncommented and enabled in
-! the menu, this will cause a script file to be emitted which contains
-! all NKIs properly formatted.
-
-![ print_all_nki num mystring;
-! @output_stream 2; @output_stream -1;
-! for (num = 1: num <= MESSAGE_NUM: num++) {
-! mystring = lookup_msg(num);
-! print (string)lookup_msg(num), "^";
-! }
-! @output_stream -2; @output_stream 1;
-!];
-
-
-! Note:
-! @@126 == '~'
-! @@64 == '@'
-
-[ 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 slumber 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 Non Kitten Items 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/@@126dgriffi/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 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 baboon with a bassoon hoots 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 playing hopscotch here.";
-281: return "Nipples, dimples, knuckles, NICKLES, wrinkles, pimples!!";
-282: return "A bottle of hair tonic.";
-283: return "A packet of catnip.";
-284: return "Here's Cal Worthington and his dog ~Spot~!";
-285: return "It's Uncle Doctor Hurkamur!";
-286: return "YEEEEEEEEEEEHAAAAAAAA!!!!!";
-287: return "Thunder, Thunder, Thunder, Thunder Cats!!!";
-288: return "An overturned bottle of ink and lots of kitten pawprints.";
-289: return "A flyer advertising a sale at Spatula City.";
-290: return "A 540Hz tuning fork.";
-291: return "A 3-inch floppy disk.";
-292: return "Seargent Duffy is here.";
-293: return "A ball of pocket fluff.";
-294: return "A 3-sided Monty Python record.";
-295: return "A Sanrio catalog.";
-296: return "A scratching-post.";
-297: return "Butane!!!";
-298: return "An ice cube.";
-299: return "Just a cage of white mice.";
-300: return "You've found Harvey, the Wonder Hamster!";
-301: return "A jar of dehydrated water.";
-302: return "Just some swamp gas.";
-303: return "A bowl of cherries.";
-304: return "Spoon!!!";
-305: return "A sign reads ~Don't step on the Mome Raths~.";
-306: return "Dirty socks.";
-307: return "~Dogbert's tech support, how may I abuse you?~";
-308: return "A radio hisses away. Kitten must have been here.";
-309: return "~Kilroy was here~";
-310: return "~Plexar was here~";
-311: return "~Kibo was here~";
-312: return "It's the cork to someone's lunch.";
-313: return "A piping-hot pizza. Useless.";
-314: return "Diogenes is here demanding whisky.";
-315: return "The Monolith of Spam towers above you.";
-316: return "~Meow meow meow meow...~ How discouraging! It's only a recording.";
-317: return "Marvin is complaining about the pain in the diodes down his left side.";
-318: return "Mr. Kamikaze and Mr. DNA are here drinking tea.";
-319: return "Rene Descarte is whistling a happy tune here.";
-320: return "Ooh, shiny!";
-321: return "It's a giant slorr!";
-322: return "A ketchup bottle (nearly empty).";
-323: return "A large pile of rubber bands.";
-324: return "A ton of feathers.";
-325: return "This nonkitten may contain peanuts.";
-326: return "A tree with some jelly nailed to it.";
-327: return "Ah, the skirl of the pipes and the rustle of the silicon...";
-328: return "You found Parakeet. Too bad this isn't ~Robot Finds Parakeet~.";
-329: return "A ball of yarn.";
-330: return "A big chunk of frozen chocolate pudding.";
-331: return "There is no tea here.";
-332: return "An automated robot-doubter. It doesn't believe in you.";
-333: return "A plastic model of Kitten.";
-334: return "It's Yorgle, the Yellow Dragon.";
-335: return "It's Grundle, the Green Dragon.";
-336: return "It's Rhindle, the Red Dragon.";
-337: return "An old pattern is here going on and on.";
-338: return "TV says donuts are high in fat.";
-339: return "It's a pool with a straw in it.";
-340: return "A singing frog. Useless.";
-341: return "It's a funky beat!";
-342: return "A tiny ceramic Kitten. It's probably not the Kitten you're looking for.";
-343: return "An oven mitt with kittens on it.";
-344: return "An empty coaxial cable spool.";
-345: return "Billions and billions of things that aren't Kitten.";
-346: return "Snarf?";
-347: return "Faboo!";
-348: return "99 bottles of beer are on a wall here.";
-349: return "Hydraulic fluid and jagged metal bits. You recoil from the scene of carnage.";
-350: return "A bobolink is twittering a happy tune here.";
-351: return "Biscuits.";
-352: return "A blank deposit slip.";
-353: return "What's that blue thing doing here?";
-354: return "A travel-sized cyclotron.";
-355: return "A largish bath towel.";
-356: return "You found Chinchilla! Too bad this isn't ~Robot Finds Chinchilla~.";
-357: return "A meerkat... not even close.";
-358: return "A green yo-yo.";
-359: return "A hairless rat.";
-360: return "Bright copper kettles.";
-
-! The following Non Kitten Items were added by David Griffith for
-! Release 3
-!
-361: return "Ten yards of avocado-green shag carpet.";
-362: return "A zorkmid coin.";
-363: return "It's Babe Flathead's favorite bat.";
-364: return "It's cute like a kitten, but isn't a kitten.";
-365: return "A cyclops glowers angrily at you.";
-366: return "A discarded pop bottle.";
-367: return "Definitely not Kitten.";
-368: return "A mouse.";
-369: return "Slack!";
-370: return "A troll. Ewww!!!";
-371: return "A tube of white lithium grease. Perfect for your robotic joints.";
-372: return "Talcum powder.";
-373: return "A breadbox. Nope, Kitten isn't in the breadbox.";
-374: return "An unlicensed nuclear accelerator.";
-375: return "A sub-atomic particle languishes here all alone.";
-376: return "A bowling ball with the name ~Bob~ inscribed on it.";
-377: return "A briefcase filled with spy stuff.";
-378: return "Is that an elephant's head or a winged sandal?";
-379: return "Bibbidy bibbidy bibbidy bibbidy bibbidy bibbidy...";
-380: return "A tube of toothpaste. Too bad you have no teeth.";
-381: return "This isn't the item you're looking for.";
-382: return "A discarded refrigerator box. Nope, Kitten isn't in the box.";
-383: return "A paper shopping bag. Nope, Kitten isn't in the bag.";
-384: return "A flyer reads, ~Please donate hydraulic fluid~";
-385: return "A dangly thing mangled by Kitten.";
-386: return "A crouton.";
-387: return "A patch from the Mammoth Caves.";
-388: return "A leather pouch filled with multisided dice.";
-389: return "A pair of combat boots.";
-390: return "A pile of coconuts.";
-391: return "A big bass drum bearing a hole and suspicious clawmarks.";
-392: return "It's a clue!";
-393: return "Long lost needle nose pliers.";
-394: return "A vase of roses.";
-395: return "A crystal ball. It doesn't seem to know where Kitten is.";
-396: return "It's Princess Leia, the yodel of life.";
-397: return "Sigmund Freud is here asking about your mother.";
-398: return "BURRRRP!!!! Flavorful and full of protein!";
-399: return "A jar of library paste.";
-400: return "These aren't ordinary beans. They're magic beans!";
-401: return "Some sort of electronic handheld game from the 1970s.";
-
-! The following Non Kitten Items were added by David Griffith for
-! Release 4
-!
-402: return "Just some glop of some sort.";
-403: return "A bottle of distilled water.";
-404: return "A rusty slinky. It was such a wonderful toy!";
-405: return "Some coconut crabs are milling about here.";
-406: return "Dancing cold water pipes. Mikey must have been here.";
-407: return "Ash is mumbling ~KLAATU BARATA NI<coughcough>~ here.";
-408: return "It's a blob of white goo.";
-
-! The following Non Kitten Items were added by David Griffith from the
-! official list of NKIs.
-!
-409: return "A gravestone stands here. ~Izchak Miller, ascended.~";
-410: return "Someone has written ~ad aerarium~ on the ground here.";
-410: return "A large blue eye floats in midair.";
-411: return "This appears to be a statue of Perseus.";
-412: return "There is an opulent throne here.";
-413: return "It's a squad of Keystone Kops.";
-414: return "This seems to be junk mail addressed to the finder of the Eye of Larn.";
-415: return "A wondrous and intricate golden amulet. Too bad you have no neck.";
-416: return "The swampy ground around you seems to stink with disease.";
-417: return "An animate blob of acid. Being metallic, you keep well away.";
-418: return "It's a copy of Knuth with the chapter on kitten-search algorithms torn out.";
-419: return "A crowd of people, and at the center, a popular misconception.";
-420: return "It's a blind man. When you touch, he exclaims ~It's a kitten prospecting robot!~";
-421: return "It's a lost wallet. It's owner didn't have pets, so you discard it.";
-422: return "This place is called Antarctica. There is no kitten here.";
-423: return "It's a mousetrap, baited with soap.";
-424: return "A book with ~Don't Panic~ in large friendly letters across the cover.";
-425: return "A compendium of haiku about metals.";
-426: return "A discredited cosmology, relic of a bygone era.";
-427: return "A hollow voice says ~Plugh~.";
-428: return "A knight who says ~Either I am an insane knave, or you will find kitten.~";
-429: return "A neural net -- maybe it's trying to recognize kitten.";
-430: return "A screwdriver.";
-431: return "A statue of a girl holding a goose like the one in Gottingen, Germany.";
-432: return "A tetradrachm dated ~42 B.C.~";
-433: return "A voice booms out ~Onward, kitten soldiers...~";
-434: return "An eminently forgettable zahir.";
-435: return "Apparently, it's Edmund Burke.";
-436: return "For a moment, you feel something in your hands, but it disappears!";
-437: return "Here is a book about Robert Kennedy.";
-438: return "Hey, robot, leave those lists alone.";
-439: return "Ho hum. Another synthetic a posteriori.";
-440: return "It's Asimov's Laws of Robotics. You feel a strange affinity for them.";
-441: return "It's Bach's Mass in B-minor!";
-442: return "It's a bug.";
-443: return "It's a synthetic a priori truth! Immanuel would be so pleased!";
-444: return "It's the Tiki Room.";
-445: return "Just some old play by a Czech playwright, and you can't read Czech.";
-446: return "Kitten is the letter 'Q'. Oh, wait, maybe not.";
-447: return "Quidquid Latine dictum sit, kitten non est.";
-448: return "Sutro Tower is visible at some distance through the fog.";
-449: return "The Digital Millennium Copyright Act of 1998.";
-450: return "The United States Court of Appeals for the Federal Circuit.";
-451: return "The non-kitten item like this but with ~false~ and ~true~ switched is true.";
-452: return "This is the chapter called ~A Map of the Cat?~ from Feynman's autobiography.";
-453: return "This is the forest primeval.";
-454: return "Werner's ~Pocket Field Guide to Things That Are Not Kitten~.";
-455: return "You found nettik, but that's backwards.";
-456: return "You have found some zinc, but you must not stop here, for you must find kitten.";
-457: return "~50 Years Among the Non-Kitten Items~, by Ann Droyd.";
-458: return "~Robot may not injure kitten, or, through inaction, ...~";
-459: return "~Address Allocation for Private Internets~ by Yakov Rekhter et al.";
-460: return "~Mail Routing and the Domain System~ by Craig Partridge.";
-461: return "~The Theory and Practice of Oligarchical Collectivism~ by Emmanuel Goldstein.";
-462: return "~201 Kitten Verbs, Fully Conjugated~. You look for ~find~.";
-463: return "A card shark sits here, practicing his Faro shuffle. He ignores you.";
-463: return "A copy of DeCSS. They're a dime a dozen these days.";
-464: return "A demonic voice proclaims ~There is no kitten, only Zuul~. You flee.";
-465: return "A lotus. You make an interesting pair.";
-466: return "A milk carton, with a black and white picture of kitten on the side.";
-467: return "Any ordinary robot could see from a mile away that this wasn't kitten.";
-468: return "A stegosaurus, escaped from the stegosaurusfindsrobot game. It finds you.";
-469: return "Baling wire and chewing gum.";
-470: return "Chewing gum and baling wire.";
-471: return "Here is no kitten but only rock, rock and no kitten and the sandy road.";
-472: return "Hey, I bet you thought this was kitten.";
-473: return "It is an ancient mariner, and he stoppeth one of three.";
-474: return "It pleases you to be kind to what appears to be kitten -- but it's not!";
-475: return "It's a blatant plug for Ogg Vorbis, http://www.vorbis.com/";
-476: return "It's a business plan for a new startup, kitten.net.";
-477: return "It's a revised business plan for a new startup, my.kitten.net.";
-478: return "It's a square.";
-479: return "It seems to be a copy of ~A Tail of Two Kitties~.";
-480: return "It's the Donation of Constantine!";
-481: return "It's this message, nothing more.";
-482: return "Lysine, an essential amino acid. Well, maybe not for robots.";
-483: return "No kitten here.";
-484: return "The score for a Czech composer's ~Kitten-Finding Symphony in C~.";
-485: return "This looks like Bradley's ~Appearance and Reality~, but it's really not.";
-486: return "This non-kitten item no verb.";
-487: return "You feel strangely unfulfilled.";
-488: return "You hit the non-kitten item. The non-kitten item fails to yowl.";
-489: return "You suddenly yearn for your distant homeland.";
-490: return "You've found the snows of yesteryear! So that's where they all went to.";
-491: return "Approaching. One car. J. Followed by. Two car. M, M. In five. Minutes.";
-491: return "Free Jon Johansen!";
-492: return "Free Dmitry Sklyarov!";
-493: return "One person shouts ~What do we want?~ The crowd answers ~Free Dmitry!~";
-494: return "Judith Platt insults librarians.";
-495: return "This map is not the territory.";
-496: return "~Go back to Libraria!~, says Pat Schroeder.";
-497: return "This is a porcelain kitten-counter. 0, 0, 0, 0, 0...";
-498: return "An old bootable business card, unfortunately cracked down the middle.";
-499: return "A kitten sink, for washing kitten (if only kitten liked water).";
-500: return "A kitten source (to match the kitten sink).";
-501: return "If it's one thing, it's not another.";
-502: return "If it's not one thing, it's another.";
-503: return "A caboodle.";
-504: return "A grin.";
-505: return "A hedgehog. It looks like it knows something important.";
-506: return "You've found... Oh wait, that's just a cat.";
-507: return "Robot should not be touching that.";
-508: return "Air Guitar!!! NA na NA na!!";
-509: return "An aromatherapy candle burns with healing light.";
-510: return "You find a bright shiny penny.";
-511: return "It's a free Jon Johansen!";
-512: return "It's a free Dmitry Sklyarov!";
-513: return "The rothe hits! The rothe hits!";
-514: return "It's an Internet chain letter about sodium laureth sulfate.";
-515: return "Ed Witten sits here, pondering string theory.";
-516: return "Something is written here in the dust. You read: ~rJbotfndQkttten~.";
-517: return "We wish you a merry kitten, and a happy New Year!";
-518: return "Run away! Run away!";
-519: return "You can see right through this copy of Brin's ~Transparent Society~.";
-520: return "This copy of ~Steal This Book~ has been stolen from a bookstore.";
-521: return "It's Roya Naini.";
-522: return "This kit is the fourteenth in a series of kits named with Roman letters.";
-523: return "This is the tenth key you've found so far.";
-524: return "You find a fraud scheme in which loans are used as security for other loans.";
-525: return "It's the phrase ~and her~, written in ancient Greek.";
-526: return "It's the author of ~Randomness and Mathematical Proof~.";
-527: return "It's the crusty exoskeleton of an arthropod!";
-528: return "It's Emporer Shaddam the 4th's planet!";
-529: return "It's the triangle leg adjacent to an angle divided by the leg opposite it.";
-530: return "It's a bottle of nail polish remover.";
-531: return "You found netkit! Way to go, robot!";
-532: return "It's the ASCII Floating Head of Seth David Schoen!";
-533: return "A frosted pink party-cake, half eaten.";
-534: return "A bitchin' homemade tesla coil.";
-535: return "Conan O'Brian, sans jawbone.";
-536: return "It's either a mirror, or another soulless kitten-seeking robot.";
-537: return "Preoccupation with finding kitten prevents you from investigating further.";
-538: return "Fonzie sits here, mumbling incoherently about a shark and a pair of waterskis.";
-539: return "The ghost of your dance instructor, his face a paper-white mask of evil.";
-540: return "A bag of groceries taken off the shelf before the expiration date.";
-541: return "A book: Feng Shui, Zen: the art of randomly arranging items that are not kitten.";
-542: return "This might be the fountain of youth, but you'll never know.";
-543: return "Tigerbot Hesh.";
-544: return "Stimutacs.";
-545: return "A canister of pressurized whipped cream, sans whipped cream.";
-546: return "The non-kitten item bites!";
-547: return "A chain hanging from two posts reminds you of the Gateway Arch.";
-548: return "A mathematician calculates the halting probability of a Turing machine.";
-549: return "A number of short theatrical productions are indexed 1, 2, 3, ... n.";
-550: return "A technical university in Australia.";
-551: return "It is -- I just feel something wonderful is about to happen.";
-552: return "It's a Cat 5 cable.";
-553: return "It's a U.S. president.";
-554: return "It's a piece of cloth used to cover a stage in between performances.";
-555: return "The ionosphere seems charged with meaning.";
-556: return "This tomography is like, hella axial, man!";
-557: return "It's your favorite game -- robotfindscatan!";
-558: return "Just a man selling an albatross.";
-559: return "The intermission from a 1930s silent movie.";
-560: return "It's an inverted billiard ball!";
-561: return "The spectre of Sherlock Holmes wills you onwards.";
-
-default: return "Unknown NKI";
- }
-];