Import of Release 6
[rfk-inform.git] / kitten.inf
1 ! robotfindskitten
2 ! A Zen Simulation
3 ! Release 6 / Serial number 031116 / Inform v6.21
4 !
5 !     [-]       |\_/|        http://www.robotfindskitten.org
6 !     (+)=C     |o o|__      Leonard Richardson (C) 1997, 2000
7 !     | |       --*--__\     David Griffith (C) 2002  (Inform Edition)
8 !     OOO       C_C(____)
9 !
10 !
11 ! This Zen simulation is based on the C version v1600003.248b
12 ! by Leonard Richardson (C) 1997, 2000.
13 ! Written originally for the Nerth Pork robotfindskitten contest.
14 ! Reimplemented in Inform by David Griffith (C) 2002.
15 !
16 ! Lots more information on robotfindskitten is available at
17 ! http://www.robotfindskitten.org.
18 !
19 !
20 ! In this game, you are Robot (#).  Your job is to find Kitten.  This
21 ! task is complicated by the existance of various things which are not
22 ! kitten.  Robot must touch items to determine if they are Kitten or
23 ! not.  Move Robot with the cursor keys, the numeric keypad, or
24 ! using the vi/rogue movement keys. The game ends when robotfindskitten.
25 ! Alternatively, you may end the game by hitting the Esc or Q keys.
26 !
27 ! Developed with Inform 6.21.4 as installed from NetBSD's pkgsrc tree
28 ! and Frotz 2.42.
29
30 !
31 ! Compile it with:
32 !       inform "-~S" kitten.inf  <-- Assuming Unix
33 !                ^
34 !                | 
35 !               Gets rid of debugging code which doesn't really do
36 !               this sort of program any good in the first place.
37 !
38 ! Notes:
39 !       1) More than half of the code is taken up by non kitten items
40 !       (NKIs).  When I compiled the code with just five messages and
41 !       no debugging code, the resulting binary was less than 10k bytes.
42 !
43 !       2) If it wasn't already abundantly obvious, this program won't
44 !       compile to Glulx because of copious use of Z-machine assembly
45 !       instructions.
46 !       
47 !       3) Compiling for V5 or higher is required due to "style" calls.
48 !       Is there reason why someone would want to compile this for V4 or
49 !       previous?
50
51 !Switches xv5s;
52
53 Switches v5d2;
54
55
56 ! Number of messages
57 ! This must be updated when adding new messages.
58 !
59 Constant MESSAGE_NUM    764;
60
61 Constant Nonkitten_Default 20;
62
63 ! Maxmimum possible number of non-kitten items on the playfield at once.
64 ! For whatever reason, this cannot be set dynamically.
65 !
66 !Constant Nonkitten_Max 256;
67 Constant Nonkitten_Max  589;
68
69
70 Release 6;
71 Serial "031116";
72
73 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
74
75 Constant Story "robotfindskitten";
76
77 Constant Headline "^A Zen Simulation^";
78
79
80 !
81 Constant Anim_Meet      10;     ! Number of spaces from the left where
82                                 !  Robot and Kitten meet during animation.
83
84 Global Height = 0;              ! These are set at runtime.
85 Global Width = 0;
86
87 Global Back_def = 2;            ! Black.
88 Global Fore_def = 9;            ! White.
89
90 Global TopBar = 5;              ! Lines from the top.
91
92 Global player_x = 0;            ! Keeping track of where the player was
93 Global player_y = 0;            !  1 move ago allows us to keep the
94 Global player_x_last = 0;       !  player from walking through obstacles.
95 Global player_y_last = 0;
96
97 Global kitten_x = 0;
98 Global kitten_y = 0;
99 Global kitten_char = 0;
100 Global kitten_color = 0;
101
102 Global last_message = "";       ! Always show the last-encountered message.
103
104 Global nonkitten_count = Nonkitten_Default;
105
106 Array nonkitten_x --> Nonkitten_Max;
107 Array nonkitten_y --> Nonkitten_Max;
108 Array nonkitten_color --> Nonkitten_Max;
109 Array nonkitten_char --> Nonkitten_Max;
110 Array nonkitten_msg --> Nonkitten_Max;
111
112 Global already_msg_count = 0;
113 Global already_count = 0;
114 Array already_x --> Nonkitten_Max + 2;
115 Array already_y --> Nonkitten_Max + 2;
116 Array already_msg --> Nonkitten_Max;
117
118 ! If a key is held down while the found_kitten animation is playing,
119 ! (0-->1) & $03ff gets corrupted.  Seems like it might be a bug
120 ! somewhere in Unix Frotz.
121 !
122 Global Real_Release = 0;
123
124 [ Main key;
125
126         @set_colour Fore_def Back_def;
127
128         if (MESSAGE_NUM < Nonkitten_Max) {
129                 nonkitten_count = MESSAGE_NUM;
130         } else {
131                 nonkitten_count = Nonkitten_Default;
132         }
133
134         Real_Release = (0-->1)&$03ff;
135
136         Width = $22-->0;
137         Height = $24-->0;
138
139         main_menu();    
140         while (true) {
141                 key = getkey();
142                 switch (key) {
143                 'F':    already_count = 0;
144                         init_nonkittens();
145                         init_kitten();
146                         init_robot();
147                         while (findkitten())
148                                 ;
149                 'D':    set_nonkitten_count();
150                 'I':    print_instructions();
151                 'A':    print_about();
152                 'T':    print_thoughts();
153 !               'P':    print_all_nki();        ! See print_all_nki() below.
154                 }
155                 if (key == 'Q' || key == $1b)   ! $1b == ESC
156                         break;
157                 main_menu();
158         }
159         quit;
160 ];
161
162
163 [ main_menu psycho;
164
165         ! There's a 1:50 chance that the kitten in the title screen
166         ! will have a "psycho" appearance.
167         !
168         psycho = random(50);
169         if (psycho == 1)
170                 psycho = true;
171         else
172                 psycho = false;
173
174         @erase_window $ffff;
175         @split_window 11;
176         @set_window 1;
177
178         Banner();
179         draw_horiz(TopBar);
180
181         draw_big_robot(3, 7);
182
183         if (psycho)
184                 draw_big_kitten_psycho(14, 7);
185         else
186                 draw_big_kitten(15, 7);
187
188         @set_cursor 7 30;
189         print "http://www.robotfindskitten.org";
190         @set_cursor 8 30;
191         print "Leonard Richardson (C) 1997, 2000";
192         @set_cursor 9 30;
193         print "David Griffith (C) 2002  (Inform Edition)";
194         @set_cursor 10 30;
195         print "    ", MESSAGE_NUM, " different nonkittens!";
196
197         @set_window 0;
198
199         print "  F) Find Kitten^",
200                 "  D) Difficulty  (", nonkitten_count, ")^",
201                 "  I) Instructions^",
202                 "  T) Thoughts^",
203                 "  A) About^",
204                 "  Q) Quit^",
205                 "^> ";
206 ];
207
208
209 ! Copied from module/verblibm.h of the Inform 6.21.3 standard library.
210 !
211 [ Banner i;
212         if (Story ~= 0) {
213                 style bold; 
214                 print (string) Story;
215                 style roman;
216         }
217         if (Headline ~= 0) {
218                 print (string) Headline;
219         }
220         print "Release ", Real_Release, " / Serial number ";
221         for (i=18:i<24:i++) print (char) 0->i;
222         print " / Inform v"; inversion; print " ";
223 #ifdef STRICT_MODE;
224         print "S";
225 #endif;
226 #ifdef INFIX;
227         print "X";
228 #ifnot;
229 #ifdef DEBUG;
230         print "D";
231 #endif;
232 #endif;
233         new_line;
234 ];
235
236
237 Constant INBUFSIZE 80;
238 Array inbuf -> INBUFSIZE;
239
240 [ set_nonkitten_count maxnum val;
241
242         while (true) {
243                 @erase_window $ffff;
244                 @split_window 5;
245                 @set_window 1;
246                 Banner();
247                 draw_horiz(TopBar);
248                 @set_window 0;
249
250                 if (MESSAGE_NUM < Nonkitten_Max) {
251                         maxnum = MESSAGE_NUM;
252                 } else {
253                         maxnum = Nonkitten_Max;
254                 } 
255
256                 print "^Please enter the number of nonkittens you
257                         wish to search through.^(1 to ", maxnum, " only)^^> ";
258
259                 while (true) {
260                         val = get_number(1, maxnum, nonkitten_count);
261                         if (val == -1) {
262                                 break;
263                         } else {
264                                 nonkitten_count = val;
265                                 return;
266                         }
267                 }
268         }
269 ];
270
271
272 [ get_number min max init inbufvar ix cx len val;
273
274         while (true) {
275                 inbuf->0 = (INBUFSIZE-3);
276                 inbuf->1 = 0;
277                 inbufvar = inbuf;
278                 ix = 0;
279                 @aread inbufvar ix;
280                 new_line;
281                 len = inbuf->1;
282                 cx = 0;
283                 while (cx < len && inbuf->(2+cx) == ' ')
284                         cx++;
285                 if (cx < len && inbuf->(2+cx) == '.')
286                         break;
287
288                 ! If user just hits return, use what we have already. 
289                 if (len == 0)
290                         return init;
291                 if (cx == len || inbuf->(2+cx) < '0' || inbuf->(2+cx) > '9') {
292                         print "Please enter a value from ", min, " to ", max,
293                                 ", or Enter by itself to exit.^
294                                 [Press any key to continue.] ";
295                         getkey();
296                         return -1;
297                 }
298                 val = 0;
299                 while (cx < len && inbuf->(2+cx) >= '0' && inbuf->(2+cx) <= '9') {
300                         val = val * 10 + (inbuf->(2+cx) - '0');
301                         cx++;
302                 }
303                 if (val < min || val > max) {
304                         print "Please enter a value from ", min, " to ", max,
305                                 ", or Enter by itself to exit.^
306                                 [Press any key to continue.] ";
307                         getkey();
308                         return -1;
309                 } else break;
310         }
311         return val;
312 ];
313
314
315 [ print_about;
316
317         @erase_window $ffff;
318         @split_window TopBar;
319         @set_window 1;
320         Banner();
321         draw_horiz(TopBar);
322         @set_window 0;
323
324 print "^
325 This Zen simulation is based on the C version v1600003.248b^
326 by Leonard Richardson (C) 1997, 2000.^
327 Written originally for the Nerth Pork robotfindskitten contest.^
328 Reimplemented in Inform by David Griffith (C) 2002.^
329 ^
330 This code is freely redistributable.  Do with it what you will, but
331 don't go about claiming you wrote it.  I, David Griffith, retain
332 copyright on this program except for the NKIs imported from the master
333 (aka POSIX) port.^
334 ^
335 Lots more information on robotfindskitten is available at
336 http://www.robotfindskitten.org.^
337 ^
338 To submit new NKI's, please go to the above URL.^
339 ^
340 ^
341 Release History:^
342 ^
343 Release 1 / Serial number 0211xx to 021214 or so^
344 Initial private release.  Limited distribution for beta testing and
345 debugging purposes.^
346 ^
347 Release 2 / Serial Number 021216^
348 First public release.^
349 ^
350 Release 3 / Serial Number 021221^
351 Bugfix release.^
352 - Movement keys 'J' and 'K' were swapped by mistake.  Fixed.^
353 - Special PalmOS movement key support added.^
354 - More NKIs added (401 total).^
355 ^
356 Release 4 / Serial Number 030131^
357 Light overhaul release.^
358 - Now an official port of robotfindskitten.^
359 - Typos in NKIs fixed.^
360 - Fixed diagonal collision-detection strangeness.^
361 - Added color support.^
362 - Added an easter egg.  Can you find it?^
363 - Removed PalmOS movement key support (superfluous and ugly).^
364 - Removed playfield resizing code (superfluous and ugly).^
365 - It's ~robotfindskitten~, not ~Robot Finds Kitten~.^
366 - Merged in new NKIs from the new POSIX release of robotfindskitten.^
367 - More NKIs added (561 total).^
368 ^
369 Release 5 / Serial Number 030524^
370 Even more NKIs release.^
371 - Idiotic typos fixed.^
372 - More NKIs added (602 total).^
373 ^
374 Release 6 / Serial Number 031116^
375 Challenge release.^
376 - More NKIs added (764 total).^
377 - Increased maximum difficulty to 589.^
378 - Lots more comments in the source code.^
379 - Assorted cleanups in the source code.^
380 ^
381 ^
382 Known Bugs:^
383 ^
384 1) I still don't know why already_seen_xy() occasionally causes Robot to
385 get placed on top of another object when a game is started.  Fortunately
386 this seems to happen only very rarely and typically only if the
387 difficulty is set to more than 200.  This bug also seems to very
388 occasionally put Kitten underneath an NKI.^
389 ^
390 2) Under earlier versions of Windows Frotz, Robot used to appear as a
391 solid block. This was because of a bug in Windows Frotz which
392 incorrectly makes the cursor opaque. The cursor is now moved off to
393 the upper-right corner so that the game looks okay on terminals that use
394 something other than reverse for the cursor. I still can't figure out
395 how to make Inform hide the cursor completely. At least on xterm and
396 NetBSD's console, @@64set_cursor -1 doesn't work.^
397 ^
398 3) Under Windows Frotz, an annoying [MORE] prompt might appear at the
399 main menu. This is another bug in Windows Frotz which causes the
400 interpreter to follow Windows' suggestion that something less than 24 or
401 25 lines is okay.^
402 ^
403 [Press any key to continue.] "; 
404         getkey();
405 ];
406
407
408 [ print_instructions;
409         @erase_window $ffff;
410         @split_window TopBar;
411         @set_window 1;
412         Banner();
413         draw_horiz(TopBar);
414         @set_window 0;
415 print "^
416 In this game, you are Robot ( ";
417 style reverse; print "#"; style roman;
418 print " ). Your job is to find Kitten. This task is complicated by the
419 existance of various things which are not Kitten. Robot must touch
420 items to determine if they are Kitten or not.  Move Robot with the
421 cursor keys, the numeric keypad (make sure numlock is on), or using the
422 vi/rogue/nethack movement keys. The game ends when robotfindskitten.
423 Alternatively, you may end the game by hitting the Esc or Q keys.^
424 ^
425 [Press any key to continue.] "; 
426         getkey();
427 ];
428
429
430 [ print_thoughts;
431
432         @erase_window $ffff;
433         @split_window TopBar;
434         @set_window 1;
435         Banner();
436         draw_horiz(TopBar);
437         @set_window 0;
438 print "^
439 A Final Thought.^
440 ^
441 Day and night I feverishly worked upon the machine, creating both a soul
442 which could desire its goal, and a body with which it could realize 
443 it. Many who saw my creation called it an abomination, and denied me
444 grant money.  But they could not dissuade me from my impossible 
445 task.  It was a spectre that tormented me always, a ghost I had to give
446 a form and a life, lest it consume me from the inside.  And when at last
447 my task was done, when the grey box on wheels was complete and when it,
448 as well as I, knew what had to be done, I felt deep sympathy for the
449 machine.  For I had not destroyed the phantom, but merely exorcized it
450 into another body.  The robot knew not why this task had to be
451 performed, for I could not imbue it with knowledge I did not myself
452 posess.  And at the same time, I felt a sweeping sense of relief sweep
453 over me, that somehow, the dream that had driven me for my entire life
454 had come one step closer to fruition.^
455 ^
456 ~Gort, Klaatu Verada Nikto~^
457 ^
458 As I vocally activated the robot, I realized that it was following my
459 instructions, but not out of any desire to obey me.  Had I remained
460 silent, it would have performed exactly the same operations.  We were
461 two beings controlled by the same force now.  And yet, seeking vainly to
462 hold some illusion of control over the machine I thought I had created,
463 I gave my final command.^
464 ^
465 ~GO!~  I told the box as it began to roll out of my workshop into the
466 frozen desert beyond. ~FIND KITTEN!~^
467 ^
468 -- The Book of Found Kittens, pages 43-4, author unknown.^
469 ^
470 [Press any key to continue.] "; 
471         getkey();
472 ];
473
474
475 [ draw_big_robot x y; 
476
477         if (x == 0)
478                 x = 1;
479         if (y == 0)
480                 y = 1;
481         @set_cursor y x;
482         @set_colour 6 Back_def;
483         print "[";
484         @set_colour 4 Back_def;
485         print "-";
486         @set_colour 6 Back_def;
487         print "]";
488
489         y = y+1;
490         @set_cursor y x;
491         @set_colour 6 Back_def;
492         print "(";
493         @set_colour 3 Back_def;
494         print "+";
495         @set_colour 6 Back_def;
496         print ")";
497         @set_colour 8 Back_def;
498         print "=C";
499
500         y = y+1;
501         @set_cursor y x;
502         @set_colour 6 Back_def;
503         print "| |";
504
505         y = y+1;
506         @set_cursor y x;
507         @set_colour 8 Back_def;
508         print "OOO";
509
510         @set_colour Fore_def Back_def;
511 ];
512
513
514 [ draw_big_kitten x y;
515
516         if (x == 0)
517                 x = 1;
518         if (y == 0)
519                 y = 1;
520         @set_cursor y x;
521
522         @set_colour 5 Back_def;
523         print "|", (char) 92, "_/|";
524         y++;
525         @set_cursor y x;
526         print "|";
527         @set_colour 4 Back_def;
528         print "o o";
529         @set_colour 5 Back_def;
530         print "|__";
531         y++;
532         @set_cursor y x;
533         @set_colour 9 Back_def;
534         print "--";
535         @set_colour 3 Back_def;
536         print "*";
537         @set_colour 9 Back_def;
538         print "--";
539         @set_colour 5 Back_def;
540         print "__", (char) 92;
541         y++;
542         @set_cursor y x;
543         print "C_C(____)";      
544
545         @set_colour Fore_def Back_def;
546 ];
547
548
549 [ draw_big_kitten_psycho x y;
550
551         if (x == 0)
552                 x = 1;
553         if (y == 0)
554                 y = 1;
555         @set_cursor y x;
556
557         @set_colour 5 Back_def;
558         print " |", (char) 92, "_/|";
559         y++;
560         @set_cursor y x;
561         @set_colour 4 Back_def;
562         print "(|) (|)";
563         @set_colour 5 Back_def;
564         print "_";
565         y++;
566         @set_cursor y x;
567         @set_colour 9 Back_def;
568         print " --";
569         @set_colour 3 Back_def;
570         print "O";
571         @set_colour 9 Back_def;
572         print "--";
573         @set_colour 5 Back_def;
574         print "__", (char) 92;
575         y++;
576         @set_cursor y x;
577         print " 3_3(____)";     
578
579         @set_colour Fore_def Back_def;
580 ];
581
582
583 ! Something gets messed up if I make this local to findkitten()
584 ! When going right or left, then up or down to hit the Kitten, the
585 ! animation gets reversed.
586
587 Global last_right = false;
588
589 [ findkitten key i;
590
591         @erase_window $ffff;
592         @split_window TopBar;
593         @set_window 1;
594         @set_cursor 1 1;
595
596         Banner();
597         print (string) last_message;
598         draw_horiz(TopBar);
599
600         draw_object(kitten_x, kitten_y, kitten_char, kitten_color);
601         draw_nonkittens();
602
603         style reverse;
604         draw_object(player_x, player_y, '#');
605         style roman;
606
607         @set_cursor 1 Width;
608
609         ! Get movement key
610         !
611         key = getkey();
612
613         ! Move Robot
614         !
615         player_x_last = player_x;
616         player_y_last = player_y;
617         switch (key) {
618         'Q', $1b:       rfalse;                 ! exit game ($1b == Esc)
619         '8', 'K', 129:  player_y--;             ! up
620         '2', 'J', 130:  player_y++;             ! down
621         '4', 'H', 131:  player_x--;             ! left
622                         last_right = false;
623         '6', 'L', 132:  player_x++;             ! right
624                         last_right = true;
625
626         '7', 'Y':       player_y--; player_x--; ! up-left
627                         last_right = false;
628         '9', 'U':       player_y--; player_x++; ! up-right
629                         last_right = true;
630         '1', 'B':       player_y++; player_x--; ! down-left
631                         last_right = false;
632         '3', 'N':       player_y++; player_x++; ! down-right
633                         last_right = true;
634         }
635
636         ! Keep Robot from falling off edges of playfield.
637         !
638         if (player_y == TopBar || player_y > Height) {
639                 player_y = player_y_last;
640         }
641         if (player_x < 1 || player_x > Width) {
642                 player_x = player_x_last;
643         }
644
645         ! Detect and handle collisions.
646         !
647         if (player_x == kitten_x && player_y == kitten_y) {
648                 animate_kitten(key, last_right);
649                 getkey();
650                 rfalse;
651         }
652         for (i = 0: i < nonkitten_count: i++) {
653                 if (player_x == nonkitten_x-->i
654                 && player_y == nonkitten_y-->i) {
655                         @set_cursor 1 1;
656                         last_message = lookup_msg(nonkitten_msg-->i);
657                         player_x = player_x_last;
658                         player_y = player_y_last;
659                 }
660         }
661         rtrue;
662 ];
663
664
665 [ animate_kitten key my_last_right i j junk robot_x anim_finished;
666
667         switch (key) {
668         '8', 'J', 129:  player_y++;
669         '2', 'K', 130:  player_y--;
670         '4', 'H', 131:  player_x++;
671         '6', 'L', 132:  player_x--;
672         '7', 'Y':       player_y++; player_x++; 
673         '9', 'U':       player_y++; player_x--;
674         '1', 'B':       player_y--; player_x++;
675         '3', 'N':       player_y--; player_x--;
676         }
677
678         anim_finished = false;
679         for (i = 4: i >= 0: i--) {
680                 @erase_window $ffff;
681                 @split_window TopBar;
682                 @set_window 1;
683                 @set_cursor 1 1;
684
685                 Banner();
686                 draw_horiz(TopBar);
687
688                 if (i > 0) {
689                         if (my_last_right) {
690                                 robot_x = Anim_Meet - i;
691                                 style reverse;
692                                 draw_object(robot_x, TopBar - 1, '#');
693                                 style roman;
694                                 draw_object(Anim_Meet - 1 + i, TopBar - 1, 
695                                         kitten_char, kitten_color);
696                         } else {
697                                 robot_x = Anim_Meet - 1 + i;
698                                 style reverse;
699                                 draw_object(robot_x, TopBar - 1, '#');
700                                 style roman;
701                                 draw_object(Anim_Meet - i, TopBar - 1,
702                                         kitten_char, kitten_color);
703                         }
704                 } else {
705                         j = TopBar - 1;
706                         @set_cursor j 1;
707                         print "You found Kitten!  Way to go, Robot!";
708                         anim_finished = true;
709                 }
710
711                 draw_object(kitten_x, kitten_y, kitten_char, kitten_color);
712
713                 style reverse;
714                 draw_object(player_x, player_y, '#');
715                 style roman;
716                 draw_nonkittens();
717
718                 if (anim_finished == false) {
719                         j = TopBar - 1;
720                         @set_cursor 1 Width;
721                         @aread junk 0 10 pause -> junk;
722                 } else {
723                         style reverse;
724                         draw_object(player_x, player_y, '#');
725                         style roman;
726                         @set_cursor 1 Width;
727                 }
728         }
729 ];
730
731 [ already_seen_xy x y i;
732         for (i = 0: i < already_count: i++) {
733                 if (already_x-->already_count == x &&
734                 already_y-->already_count ==y) {
735                         rtrue;
736                 }
737         }
738         already_x-->already_count = x;
739         already_y-->already_count = y;
740         already_count++;
741         rfalse;
742 ];
743
744
745 [ pause;
746         rtrue;
747 ];
748
749
750 [ init_kitten;
751         kitten_x = get_random_x();
752         kitten_y = get_random_y();
753         kitten_color = get_random_color();
754
755         while (already_seen_xy(kitten_x, kitten_y) == true) {
756                 kitten_x = get_random_x();
757                 kitten_y = get_random_y();
758         }
759         kitten_char = get_random_char();
760 ];
761
762
763 [ init_robot;
764         player_x = get_random_x();
765         player_y = get_random_y();
766
767         while (already_seen_xy(player_x, player_y) == true) {
768                 player_x = get_random_x();
769                 player_y = get_random_y();
770         }
771 ];      
772
773
774 [ init_nonkittens i;
775         already_msg_count = 0;
776         last_message = "";
777
778         for (i = 0: i < nonkitten_count: i++) {
779                 nonkitten_x-->i = get_random_x();
780                 nonkitten_y-->i = get_random_y();
781                 nonkitten_color-->i = get_random_color();
782
783                 while (already_seen_xy(nonkitten_x-->i, 
784                         nonkitten_y-->i) == true) {
785                         nonkitten_x-->i = get_random_x();
786                         nonkitten_y-->i = get_random_y();
787                 }
788                 nonkitten_char-->i = get_random_char();
789                 nonkitten_msg-->i = get_random_msg();
790         }
791 ];
792
793
794 [ draw_nonkittens i;
795         for (i = 0: i < nonkitten_count: i++) {
796                 draw_object(nonkitten_x-->i,
797                                 nonkitten_y-->i,
798                                 nonkitten_char-->i,
799                                 nonkitten_color-->i);
800         }
801 ];
802
803
804 [ draw_object x y character fore back;
805         @set_cursor y x;
806
807         if (fore == "")
808                 fore = Back_def;
809         if (back == "")
810                 back = Back_def;
811         
812
813         @set_colour fore Back_def;
814         if (character)
815                 print (char) character;
816
817         @set_colour Fore_def Back_def;
818 ];
819
820
821 [ draw_horiz row i;
822         @set_cursor row 1;
823         for (i = 0 : i < Width : i++)
824                 print (char) '-';
825 ];
826
827
828 [ getkey x;
829         @read_char 1 -> x;
830         if (x >= 'a' && x <= 'z')
831                 x = x - ('a' - 'A');
832         return x;
833 ];
834
835
836 [ get_random_char num;
837         num = random(93);
838         num = num + 33;
839         while (num == 35) {             ! avoid choosing '#'
840                 num = random(93);
841                 num = num + 33;
842         }
843         return num;
844 ];
845
846
847 [ get_random_msg num;
848         num = random(MESSAGE_NUM);
849         while (is_duplicate_msg(num) == true) {
850                 num = random(MESSAGE_NUM);
851         }
852         return num;
853 ];
854
855 [ get_random_color num;
856         num = random(7) + 2;
857         ! 0 and 1 are default color and current color
858         ! and we want to avoid picking the default color explicitly
859         while (num == $2c-->0) {
860                 num = random(7) + 2;
861         }
862         return num;
863 ];
864
865
866 [ is_duplicate_msg num i;
867         for (i = 0: i < already_msg_count: i++) {
868                 if (already_msg-->i==num) {
869                         rtrue;
870                 }
871         }
872         already_msg-->already_msg_count = num;
873         already_msg_count++;
874         rfalse;
875 ];
876
877
878 [ get_random_x;
879         return random(Width);
880 ];
881
882
883 [ get_random_y num ok;
884         ok = false;
885         ! Make sure we don't draw in the status bar.
886         while (ok == false) {
887                 num = random(Height);
888                 if (num > TopBar)
889                         ok = true;
890         }
891         return num;
892 ];
893
894
895 ! This function is mainly of use to members of the robotfindskitten
896 ! development team.
897 !
898 ! When this function is uncommented and enabled in
899 ! the menu, this will cause a script file to be emitted which contains
900 ! all NKIs properly formatted.
901
902 ![ print_all_nki num mystring;
903 !       @output_stream 2; @output_stream -1;
904 !       for (num = 1: num <= MESSAGE_NUM: num++) {
905 !               mystring = lookup_msg(num);
906 !               print (string)lookup_msg(num), "^";
907 !       }
908 !       @output_stream -2; @output_stream 1;
909 !];
910
911
912 ! To use '~' or '@' in NKIs, keep the following in mind:
913 ! @@126 == '~'
914 ! @@64 == '@'
915
916 [ lookup_msg num;
917         switch(num) {
918 1:      return "~I pity the fool who mistakes me for kitten!~, sez Mr. T.";
919 2:      return "That's just an old tin can.";
920 3:      return "It's an altar to the horse god.";
921 4:      return "A box of dancing mechanical pencils.  They dance!  They sing!";
922 5:      return "It's an old Duke Ellington record.";
923 6:      return "A box of fumigation pellets.";
924 7:      return "A digital clock. It's stuck at 2:17 PM.";
925 8:      return "That's just a charred human corpse.";
926 9:      return "I don't know what that is, but it's not kitten.";
927 10:     return "An empty shopping bag.  Paper or plastic?";
928 11:     return "Could it be... a big ugly bowling trophy?";
929 12:     return "A coat hanger hovers in thin air.  Odd.";
930 13:     return "Not kitten, just a packet of Kool-Aid(tm).";
931 14:     return "A freshly-baked pumpkin pie.";
932 15:     return "A lone, forgotten comma, sits here, sobbing.";
933 16:     return "ONE HUNDRED THOUSAND CARPET FIBERS!!!!!";
934 17:     return "It's Richard Nixon's nose!";
935 18:     return "It's Lucy Ricardo. ~Aaaah, Ricky!~, she says.";
936 19:     return "You stumble upon Bill Gates' stand-up act.";
937 20:     return "Just an autographed copy of the Kama Sutra.";
938 21:     return "It's the Will Rogers Highway.  Who was Will Rogers, anyway?";
939 22:     return "It's another robot, more advanced in design than you but strangely immobile.";
940 23:     return "Leonard Richardson is here, asking people to lick him.";
941 24:     return "It's a stupid mask, fashioned after a beagle.";
942 25:     return "Your State Farm Insurance(tm) representative!";
943 26:     return "It's the local draft board.";
944 27:     return "Seven 1/4~ screws and a piece of plastic.";
945 28:     return "An 80286 machine.";
946 29:     return "One of those stupid ~Homes of the Stars~ maps.";
947 30:     return "A signpost saying ~TO KITTEN~.  It points in no particular direction.";
948 31:     return "A hammock stretched between a tree and a volleyball pole.";
949 32:     return "A Texas Instruments of Destruction calculator.";
950 33:     return "It's a dark, amphorous blob of matter.";
951 34:     return "Just a pincushion.";
952 35:     return "It's a mighty zombie talking about some love and prosperity.";
953 36:     return "~Dear robot, you may have already won our 10 MILLION DOLLAR prize...~";
954 37:     return "It's just an object.";
955 38:     return "A mere collection of pixels.";
956 39:     return "A badly dented high-hat cymbal lies on its side here.";
957 40:     return "A marijuana brownie.";
958 41:     return "A plush Chewbacca.";
959 42:     return "Daily hunger conditioner from Australasia";
960 43:     return "Just some stuff.";
961 44:     return "Why are you touching this when you should be finding kitten?";
962 45:     return "A glorious fan of peacock feathers.";
963 46:     return "It's some compromising photos of Babar the Elephant.";
964 47:     return "A copy of the Weekly World News. Watch out for the chambered nautilus!";
965 48:     return "It's the proverbial wet blanket.";
966 49:     return "A ~Get Out of Jail Free~ card.";
967 50:     return "An incredibly expensive ~Mad About You~ collector plate.";
968 51:     return "Paul Moyer's necktie.";
969 52:     return "A haircut and a real job.  Now you know where to get one!";
970 53:     return "An automated robot-hater.  It frowns disapprovingly at you.";
971 54:     return "An automated robot-liker.  It smiles at you.";
972 55:     return "It's a black hole.  Don't fall in!";
973 56:     return "Just a big brick wall.";
974 57:     return "You found kitten!  No, just kidding.";
975 58:     return "Heart of Darkness brand pistachio nuts.";
976 59:     return "A smoking branding iron shaped like a 24-pin connector.";
977 60:     return "It's a Java applet.";
978 61:     return "An abandoned used-car lot.";
979 62:     return "A shameless plug for Crummy: http://www.crummy.com/";
980 63:     return "A shameless plug for the UCLA Linux Users Group: http://linux.ucla.edu/";
981 64:     return "A can of Spam Lite.";
982 65:     return "This is another fine mess you've gotten us into, Stanley.";
983 66:     return "It's scenery for ~Waiting for Godot~.";
984 67:     return "This grain elevator towers high above you.";
985 68:     return "A Mentos wrapper.";
986 69:     return "It's the constellation Pisces.";
987 70:     return "It's a fly on the wall.  Hi, fly!";
988 71:     return "This kind of looks like kitten, but it's not.";
989 72:     return "It's a banana!  Oh, joy!";
990 73:     return "A helicopter has crashed here.";
991 74:     return "Carlos Tarango stands here, doing his best impression of Pat Smear.";
992 75:     return "A patch of mushrooms grows here.";
993 76:     return "A patch of grape jelly grows here.";
994 77:     return "A spindle, and a grindle, and a bucka-wacka-woom!";
995 78:     return "A geyser sprays water high into the air.";
996 79:     return "A toenail?  What good is a toenail?";
997 80:     return "You've found the fish!  Not that it does you much good in this game.";
998 81:     return "A Buttertonsils bar.";
999 82:     return "One of the few remaining discoes.";
1000 83:     return "Ah, the uniform of a Revolutionary-era minuteman.";
1001 84:     return "A punch bowl, filled with punch and lemon slices.";
1002 85:     return "It's nothing but a G-thang, baby.";
1003 86:     return "IT'S ALIVE! AH HA HA HA HA!";
1004 87:     return "This was no boating accident!";
1005 88:     return "Wait!  This isn't the poker chip!  You've been tricked!  DAMN YOU, MENDEZ!";
1006 89:     return "A livery stable!  Get your livery!";
1007 90:     return "It's a perpetual immobility machine.";
1008 91:     return "~On this spot in 1962, Henry Winkler was sick.~";
1009 92:     return "There's nothing here; it's just an optical illusion.";
1010 93:     return "The World's Biggest Motzah Ball!";
1011 94:     return "A tribe of cannibals lives here.  They eat Malt-O-Meal for breakfast, you know.";
1012 95:     return "This appears to be a rather large stack of trashy romance novels.";
1013 96:     return "Look out!  Exclamation points!";
1014 97:     return "A herd of wild coffee mugs slumber here.";
1015 98:     return "It's a limbo bar!  How low can you go?";
1016 99:     return "It's the horizon.  Now THAT'S weird.";
1017 100:    return "A vase full of artificial flowers is stuck to the floor here.";
1018 101:    return "A large snake bars your way.";
1019 102:    return "A pair of saloon-style doors swing slowly back and forth here.";
1020 103:    return "It's an ordinary bust of Beethoven... but why is it painted green?";
1021 104:    return "It's TV's lovable wisecracking Crow! ~Bite me!~, he says.";
1022 105:    return "Hey, look, it's war.  What is it good for?  Absolutely nothing.  Say it again.";
1023 106:    return "It's the amazing self-referential thing that's not kitten.";
1024 107:    return "A flamboyant feather boa.  Now you can dress up like Carol Channing!";
1025 108:    return "~Sure hope we get some rain soon,~ says Farmer Joe.";
1026 109:    return "~How in heck can I wash my neck if it ain't gonna rain no more?~ asks Farmer Al.";
1027 110:    return "~Topsoil's all gone, ma,~ weeps Lil' Greg.";
1028 111:    return "This is a large brown bear.  Oddly enough, it's currently peeing in the woods.";
1029 112:    return "A team of arctic explorers is camped here.";
1030 113:    return "This object here appears to be Louis Farrakhan's bow tie.";
1031 114:    return "This is the world-famous Chain of Jockstraps.";
1032 115:    return "A trash compactor, compacting away.";
1033 116:    return "This toaster strudel is riddled with bullet holes!";
1034 117:    return "It's a hologram of a crashed helicopter.";
1035 118:    return "This is a television.  On screen you see a robot strangely similar to yourself.";
1036 119:    return "This balogna has a first name, it's R-A-N-C-I-D.";
1037 120:    return "A salmon hatchery?  Look again.  It's merely a single salmon.";
1038 121:    return "It's a rim shot.  Ba-da-boom!";
1039 122:    return "It's creepy and it's kooky, mysterious and spooky.  It's also somewhat ooky.";
1040 123:    return "This is an anagram.";
1041 124:    return "This object is like an analogy.";
1042 125:    return "It's a symbol.  You see in it a model for all symbols everywhere.";
1043 126:    return "The object pushes back at you.";
1044 127:    return "A traffic signal.  It appears to have been recently vandalized.";
1045 128:    return "~There is no kitten!~ cackles the old crone.  You are shocked by her blasphemy.";
1046 129:    return "This is a Lagrange point.  Don't come too close now.";
1047 130:    return "The dirty old tramp bemoans the loss of his harmonica.";
1048 131:    return "Look, it's Fanny the Irishman!";
1049 132:    return "What in blazes is this?";
1050 133:    return "It's the instruction manual for a previous version of this game.";
1051 134:    return "A brain cell.  Oddly enough, it seems to be functioning.";
1052 135:    return "Tea and/or crumpets.";
1053 136:    return "This jukebox has nothing but Cliff Richards albums in it.";
1054 137:    return "It's a Quaker Oatmeal tube, converted into a drum.";
1055 138:    return "This is a remote control.  Being a robot, you keep a wide berth.";
1056 139:    return "It's a roll of industrial-strength copper wire.";
1057 140:    return "Oh boy!  Grub!  Er, grubs.";
1058 141:    return "A puddle of mud, where the mudskippers play.";
1059 142:    return "Plenty of nothing.";
1060 143:    return "Look at that, it's the Crudmobile.";
1061 144:    return "Just Walter Mattheau and Jack Lemmon.";
1062 145:    return "Two crepes, two crepes in a box.";
1063 146:    return "An autographed copy of ~Primary Colors~, by Anonymous.";
1064 147:    return "Another rabbit?  That's three today!";
1065 148:    return "It's a segmentation fault.  Core dumped, by the way.";
1066 149:    return "A historical marker showing the actual location of /dev/null.";
1067 150:    return "Thar's Mobius Dick, the convoluted whale.  Arrr!";
1068 151:    return "It's a charcoal briquette, smoking away.";
1069 151:    return "A pizza, melting in the sun.";
1070 152:    return "It's a ~HOME ALONE 2: Lost in New York~ novelty cup.";
1071 153:    return "A stack of 7 inch floppies wobbles precariously.";
1072 153:    return "It's nothing but a corrupted floppy.  Coaster anyone?";
1073 154:    return "A section of glowing phosphor cells sings a song of radiation to you.";
1074 155:    return "This TRS-80 III is eerily silent.";
1075 156:    return "A toilet bowl occupies this space.";
1076 157:    return "This peg-leg is stuck in a knothole!";
1077 158:    return "It's a solitary vacuum tube.";
1078 159:    return "This corroded robot is clutching a mitten.";
1079 160:    return "~Hi, I'm Anson Williams, TV's 'Potsy'.~";
1080 161:    return "This subwoofer was blown out in 1974.";
1081 162:    return "Three half-pennies and a wooden nickel.";
1082 163:    return "It's the missing chapter to ~A Clockwork Orange~.";
1083 164:    return "It's a burrito stand flyer.  ~Taqueria El Ranchito~.";
1084 165:    return "This smiling family is happy because they eat LARD.";
1085 166:    return "Roger Avery, persona un famoso de los Estados Unidos.";
1086 167:    return "Ne'er but a potted plant.";
1087 168:    return "A parrot, kipping on its back.";
1088 169:    return "A forgotten telephone switchboard.";
1089 170:    return "A forgotten telephone switchboard operator.";
1090 171:    return "It's an automated robot-disdainer.  It pretends you're not there.";
1091 172:    return "It's a portable hole.  A sign reads: ~Closed for the winter~.";
1092 173:    return "Just a moldy loaf of bread.";
1093 174:    return "A little glass tub of Carmex. ($.89)  Too bad you have no lips.";
1094 175:    return "A Swiss-Army knife.  All of its appendages are out.  (toothpick lost)";
1095 176:    return "It's a zen simulation, trapped within an ASCII character.";
1096 177:    return "It's a copy of ~The Rubaiyat of Spike Schudy~.";
1097 178:    return "It's ~War and Peace~ (unabridged, very small print).";
1098 179:    return "A willing, ripe tomato bemoans your inability to digest fruit.";
1099 180:    return "A robot comedian.  You feel amused.";
1100 181:    return "It's KITT, the talking car.";
1101 182:    return "Here's Pete Peterson.  His batteries seem to have long gone dead.";
1102 183:    return "~Blup, blup, blup~, says the mud pot.";
1103 184:    return "More grist for the mill.";
1104 185:    return "Grind 'em up, spit 'em out, they're twigs.";
1105 186:    return "The boom box cranks out an old Ethel Merman tune.";
1106 187:    return "It's ~Finding kitten~, published by O'Reilly and Associates.";
1107 188:    return "Pumpkin pie spice.";
1108 189:    return "It's the Bass-Matic '76!  Mmm, that's good bass!";
1109 190:    return "~Lend us a fiver 'til Thursday~, pleas Andy Capp.";
1110 191:    return "It's a tape of '70s rock.  All original hits!  All original artists!";
1111 192:    return "You've found the fabled America Online disk graveyard!";
1112 193:    return "Empty jewelboxes litter the landscape.";
1113 194:    return "It's the astounding meta-object.";
1114 195:    return "Ed McMahon stands here, lost in thought.  Seeing you, he bellows, ~YES SIR!~";
1115 196:    return "...thingy???";
1116 197:    return "It's 1000 secrets the government doesn't want you to know!";
1117 198:    return "The letters O and R.";
1118 199:    return "A magical... magic thing.";
1119 200:    return "It's a moment of silence.";
1120 201:    return "It's Sirhan-Sirhan, looking guilty.";
1121 202:    return "It's ~Chicken Soup for the Kitten-seeking Soulless Robot.~";
1122 203:    return "It is a set of wind-up chatter teeth.";
1123 204:    return "It is a cloud shaped like an ox.";
1124 205:    return "You see a snowflake here, melting slowly.";
1125 206:    return "It's a big block of ice.  Something seems to be frozen inside it.";
1126 207:    return "Vladimir Lenin's casket rests here.";
1127 208:    return "It's a copy of ~Zen and The Art of Robot Maintenance~.";
1128 209:    return "This invisible box contains a pantomime horse.";
1129 210:    return "A mason jar lies here open.  It's label reads: ~do not open!~.";
1130 211:    return "A train of thought chugs through here.";
1131 212:    return "This jar of pickles expired in 1957.";
1132 213:    return "Someone's identity disk lies here.";
1133 214:    return "~Yes!~ says the bit.";
1134 215:    return "~No!~ says the bit.";
1135 216:    return "A dodecahedron bars your way.";
1136 217:    return "Mr. Hooper is here, surfing.";
1137 218:    return "It's a big smoking fish.";
1138 219:    return "You have new mail in /var/spool/robot";
1139 220:    return "Just a monitor with the blue element burnt out.";
1140 221:    return "A pile of coaxial plumbing lies here.";
1141 222:    return "It's a rotten old shoe.";
1142 223:    return "It's a hundred-dollar bill.";
1143 224:    return "It's a Dvorak keyboard.";
1144 225:    return "It's a cardboard box full of 8-tracks.";
1145 226:    return "Just a broken hard drive containg the archives of Nerth Pork.";
1146 227:    return "A broken metronome sits here, it's needle off to one side.";
1147 228:    return "A sign reads: ~Go home!~";
1148 229:    return "A sign reads: ~No robots allowed!~";
1149 230:    return "It's the handheld robotfindskitten game, by Tiger.";
1150 231:    return "This particular monstrosity appears to be ENIAC.";
1151 232:    return "This is a tasty-looking banana creme pie.";
1152 233:    return "A wireframe model of a hot dog rotates in space here.";
1153 234:    return "Just the empty husk of a locust.";
1154 235:    return "You disturb a murder of crows.";
1155 236:    return "It's a copy of the robotfindskitten EULA.";
1156 237:    return "It's Death.";
1157 238:    return "It's an autographed copy of ~Secondary Colors~, by Bob Ross.";
1158 239:    return "It is a marzipan dreadnought that appears to have melted and stuck.";
1159 240:    return "It's a DVD of ~Crouching Monkey, Hidden Kitten~, region encoded for the moon.";
1160 241:    return "It's Kieran Hervold.  Damn dyslexia!";
1161 242:    return "A non-descript box of crackers.";
1162 243:    return "Carbonated Water, High Fructose Corn Syrup, Color, Phosphoric Acid, Flavors, Caffeine.";
1163 244:    return "~Move along! Nothing to see here!~";
1164 245:    return "It's the embalmed corpse of Vladimir Lenin.";
1165 246:    return "A coupon for one free steak-fish at your local family diner.";
1166 247:    return "A set of keys to a 2001 Rolls Royce.  Worthless.";
1167
1168 ! The following Non Kitten Items were added by David Griffith
1169 !
1170 248:    return "It's the Golden Banana of Discord!";
1171 249:    return "The Inform Designer's Manual (4th edition)";
1172 250:    return "A packet of pipe cleaners.";
1173 251:    return "It's Andrew Plotkin plotting something.";
1174 252:    return "A half-eaten cheese sandwich.";
1175 253:    return "Clang, clang, clang goes the tranny!";
1176 254:    return "A family of integrals is here integrating.";
1177 255:    return "A tuft of kitten fur, but no kitten.";
1178 256:    return "A bottle of oil!  Refreshing!";
1179 257:    return "A shameless plug for Frotz: http://www.cs.csubak.edu/@@126dgriffi/proj/frotz/";
1180 258:    return "Clifford Stoll is here selling Klein bottles.";
1181 259:    return "You found the marble in the oatmeal!";
1182 260:    return "An empty Altoids tin.";
1183 261:    return "An empty Penguin Mints tin.";
1184 262:    return "So, THAT's what an invisible barrier looks like!";
1185 263:    return "A cluster of cattails are growing here.";
1186 264:    return "A discarded bagpipe chanter reed.";
1187 265:    return "Big Bird is here looking for Mr. Looper.";
1188 266:    return "It's a Linux install CD.";
1189 267:    return "You found Puppy!  Too bad this isn't ~robotfindspuppy~.";
1190 268:    return "Several meters of cat5 cable.";
1191 269:    return "A scrap of parchment bears the single word, ~meow~.";
1192 270:    return "A puddle of chocolate sauce.";
1193 271:    return "Your pal Floyd is here and wants to play Hucka-Bucka-Beanstalk.";
1194 272:    return "Someone is talking to Ralph on the big white phone here.";
1195 273:    return "'Twas brillig in the slivey-toves...";
1196 274:    return "Darth Vader is here looking for his Teddywookie.";
1197 275:    return "A baboon with a bassoon hoots angrily at you.";
1198 276:    return "Catsup and Mustard all over the place!  It's the Human Hamburger!";
1199 277:    return "Gibble, Gobble, we ACCEPT YOU ...";
1200 278:    return "A rancid corn dog.";
1201 279:    return "It's a tribute to fishnet stockings.";
1202 280:    return "A jar of Vegemite is playing hopscotch here.";
1203 281:    return "Nipples, dimples, knuckles, NICKLES, wrinkles, pimples!!";
1204 282:    return "A bottle of hair tonic.";
1205 283:    return "A packet of catnip.";
1206 284:    return "Here's Cal Worthington and his dog ~Spot~!";
1207 285:    return "It's Uncle Doctor Hurkamur!";
1208 286:    return "YEEEEEEEEEEEHAAAAAAAA!!!!!";
1209 287:    return "Thunder, Thunder, Thunder, Thunder Cats!!!";
1210 288:    return "An overturned bottle of ink and lots of kitten pawprints.";
1211 289:    return "A flyer advertising a sale at Spatula City.";
1212 290:    return "A 540Hz tuning fork.";
1213 291:    return "A 3-inch floppy disk.";
1214 292:    return "Seargent Duffy is here.";
1215 293:    return "A ball of pocket fluff.";
1216 294:    return "A 3-sided Monty Python record.";
1217 295:    return "A Sanrio catalog.";
1218 296:    return "A scratching-post.";
1219 297:    return "Butane!!!";
1220 298:    return "An ice cube.";
1221 299:    return "Just a cage of white mice.";
1222 300:    return "You've found Harvey, the Wonder Hamster!";
1223 301:    return "A jar of dehydrated water.";
1224 302:    return "Just some swamp gas.";
1225 303:    return "A bowl of cherries.";
1226 304:    return "Spoon!!!";
1227 305:    return "A sign reads ~Don't step on the Mome Raths~.";
1228 306:    return "Dirty socks.";
1229 307:    return "~Dogbert's tech support, how may I abuse you?~";
1230 308:    return "A radio hisses away.  Kitten must have been here.";
1231 309:    return "~Kilroy was here~";
1232 310:    return "~Plexar was here~";
1233 311:    return "~Kibo was here~";
1234 312:    return "It's the cork to someone's lunch.";
1235 313:    return "A piping-hot pizza.  Useless.";
1236 314:    return "Diogenes is here demanding whisky.";
1237 315:    return "The Monolith of Spam towers above you.";
1238 316:    return "~Meow meow meow meow...~  How discouraging!  It's only a recording.";
1239 317:    return "Marvin is complaining about the pain in the diodes down his left side.";
1240 318:    return "Mr. Kamikaze and Mr. DNA are here drinking tea.";
1241 319:    return "Rene Descarte is whistling a happy tune here.";
1242 320:    return "Ooh, shiny!";
1243 321:    return "It's a giant slorr!";
1244 322:    return "A ketchup bottle (nearly empty).";
1245 323:    return "A large pile of rubber bands.";
1246 324:    return "A ton of feathers.";
1247 325:    return "This nonkitten may contain peanuts.";
1248 326:    return "A tree with some jelly nailed to it.";
1249 327:    return "Ah, the skirl of the pipes and the rustle of the silicon...";
1250 328:    return "You found Parakeet!  Too bad this isn't ~robotfindsparakeet~.";
1251 329:    return "A ball of yarn.";
1252 330:    return "A big chunk of frozen chocolate pudding.";
1253 331:    return "There is no tea here.";
1254 332:    return "An automated robot-doubter.  It doesn't believe in you.";
1255 333:    return "A plastic model of Kitten.";
1256 334:    return "It's Yorgle, the Yellow Dragon.";
1257 335:    return "It's Grundle, the Green Dragon.";
1258 336:    return "It's Rhindle, the Red Dragon.";
1259 337:    return "An old pattern is here going on and on.";
1260 338:    return "TV says donuts are high in fat.";
1261 339:    return "It's a pool with a straw in it.";
1262 340:    return "A singing frog.  Useless.";
1263 341:    return "It's a funky beat!";
1264 342:    return "A tiny ceramic Kitten.  It's probably not the Kitten you're looking for.";
1265 343:    return "An oven mitt with kittens on it.";
1266 344:    return "An empty coaxial cable spool.";
1267 345:    return "Billions and billions of things that aren't Kitten.";
1268 346:    return "Snarf?";
1269 347:    return "Faboo!";
1270 348:    return "99 bottles of beer are on a wall here.";
1271 349:    return "Hydraulic fluid and jagged metal bits.  You recoil from the scene of carnage.";
1272 350:    return "A bobolink is twittering a happy tune here.";
1273 351:    return "Biscuits.";
1274 352:    return "A blank deposit slip.";
1275 353:    return "What's that blue thing doing here?";
1276 354:    return "A travel-sized cyclotron.";
1277 355:    return "A largish bath towel.";
1278 356:    return "You found Chinchilla!  Too bad this isn't ~robotfindschinchilla~.";
1279 357:    return "A meerkat... not even close.";
1280 358:    return "A green yo-yo.";
1281 359:    return "A hairless rat.";
1282 360:    return "Bright copper kettles.";
1283
1284 ! The following Non Kitten Items were added by David Griffith for
1285 ! Release 3
1286 !
1287 361:    return "Ten yards of avocado-green shag carpet.";
1288 362:    return "A zorkmid coin.";
1289 363:    return "It's Babe Flathead's favorite bat.";
1290 364:    return "It's cute like a kitten, but isn't a kitten.";
1291 365:    return "A cyclops glowers angrily at you.";
1292 366:    return "A discarded pop bottle.";
1293 367:    return "Definitely not Kitten.";
1294 368:    return "A mouse.";
1295 369:    return "Slack!";
1296 370:    return "A troll.  Ewww!!!";
1297 371:    return "A tube of white lithium grease.  Perfect for your robotic joints.";
1298 372:    return "Talcum powder.";
1299 373:    return "A breadbox.  Nope, Kitten isn't in the breadbox.";
1300 374:    return "An unlicensed nuclear accelerator.";
1301 375:    return "A sub-atomic particle languishes here all alone.";
1302 376:    return "A bowling ball with the name ~Bob~ inscribed on it.";
1303 377:    return "A briefcase filled with spy stuff.";
1304 378:    return "Is that an elephant's head or a winged sandal?";
1305 379:    return "Bibbidy bibbidy bibbidy bibbidy bibbidy bibbidy...";
1306 380:    return "A tube of toothpaste.  Too bad you have no teeth.";
1307 381:    return "This isn't the item you're looking for.";
1308 382:    return "A discarded refrigerator box.  Nope, Kitten isn't in the box.";
1309 383:    return "A paper shopping bag.  Nope, Kitten isn't in the bag.";
1310 384:    return "A flyer reads, ~Please donate hydraulic fluid~";
1311 385:    return "A dangly thing mangled by Kitten.";
1312 386:    return "A crouton.";
1313 387:    return "A patch from the Mammoth Caves.";
1314 388:    return "A leather pouch filled with multisided dice.";
1315 389:    return "A pair of combat boots.";
1316 390:    return "A pile of coconuts.";
1317 391:    return "A big bass drum bearing a hole and suspicious clawmarks.";
1318 392:    return "It's a clue!";
1319 393:    return "Long lost needle nose pliers.";
1320 394:    return "A vase of roses.";
1321 395:    return "A crystal ball.  It doesn't seem to know where Kitten is.";
1322 396:    return "It's Princess Leia, the yodel of life.";
1323 397:    return "Sigmund Freud is here asking about your mother.";
1324 398:    return "BURRRRP!!!!  Flavorful and full of protein!";
1325 399:    return "A jar of library paste.";
1326 400:    return "These aren't ordinary beans.  They're magic beans!";
1327 401:    return "Some sort of electronic handheld game from the 1970s.";
1328
1329 ! The following Non Kitten Items were added by David Griffith for
1330 ! Release 4
1331 !
1332 402:    return "Just some glop of some sort.";
1333 403:    return "A bottle of distilled water.";
1334 404:    return "A rusty slinky.  It was such a wonderful toy!";
1335 405:    return "Some coconut crabs are milling about here.";
1336 406:    return "Dancing cold water pipes.  Mikey must have been here.";
1337 407:    return "Ash is mumbling ~KLAATU BARATA NI<coughcough>~ here.";
1338 408:    return "It's a blob of white goo.";
1339
1340 ! The following Non Kitten Items were added by David Griffith from the
1341 ! official list of NKIs.
1342 !
1343 409:    return "A gravestone stands here.  ~Izchak Miller, ascended.~";
1344 410:    return "Someone has written ~ad aerarium~ on the ground here.";
1345 410:    return "A large blue eye floats in midair.";
1346 411:    return "This appears to be a statue of Perseus.";
1347 412:    return "There is an opulent throne here.";
1348 413:    return "It's a squad of Keystone Kops.";
1349 414:    return "This seems to be junk mail addressed to the finder of the Eye of Larn.";
1350 415:    return "A wondrous and intricate golden amulet.  Too bad you have no neck.";
1351 416:    return "The swampy ground around you seems to stink with disease.";
1352 417:    return "An animate blob of acid.  Being metallic, you keep well away.";
1353 418:    return "It's a copy of Knuth with the chapter on kitten-search algorithms torn out.";
1354 419:    return "A crowd of people, and at the center, a popular misconception.";
1355 420:    return "It's a blind man.  When you touch, he exclaims ~It's a kitten prospecting robot!~";
1356 421:    return "It's a lost wallet.  It's owner didn't have pets, so you discard it.";
1357 422:    return "This place is called Antarctica.  There is no kitten here.";
1358 423:    return "It's a mousetrap, baited with soap.";
1359 424:    return "A book with ~Don't Panic~ in large friendly letters across the cover.";
1360 425:    return "A compendium of haiku about metals.";
1361 426:    return "A discredited cosmology, relic of a bygone era.";
1362 427:    return "A hollow voice says ~Plugh~.";
1363 428:    return "A knight who says ~Either I am an insane knave, or you will find kitten.~";
1364 429:    return "A neural net -- maybe it's trying to recognize kitten.";
1365 430:    return "A screwdriver.";
1366 431:    return "A statue of a girl holding a goose like the one in Gottingen, Germany.";
1367 432:    return "A tetradrachm dated ~42 B.C.~";
1368 433:    return "A voice booms out ~Onward, kitten soldiers...~";
1369 434:    return "An eminently forgettable zahir.";
1370 435:    return "Apparently, it's Edmund Burke.";
1371 436:    return "For a moment, you feel something in your hands, but it disappears!";
1372 437:    return "Here is a book about Robert Kennedy.";
1373 438:    return "Hey, robot, leave those lists alone.";
1374 439:    return "Ho hum.  Another synthetic a posteriori.";
1375 440:    return "It's Asimov's Laws of Robotics.  You feel a strange affinity for them.";
1376 441:    return "It's Bach's Mass in B-minor!";
1377 442:    return "It's a bug.";
1378 443:    return "It's a synthetic a priori truth!  Immanuel would be so pleased!";
1379 444:    return "It's the Tiki Room.";
1380 445:    return "Just some old play by a Czech playwright, and you can't read Czech.";
1381 446:    return "Kitten is the letter 'Q'.  Oh, wait, maybe not.";
1382 447:    return "Quidquid Latine dictum sit, kitten non est.";
1383 448:    return "Sutro Tower is visible at some distance through the fog.";
1384 449:    return "The Digital Millennium Copyright Act of 1998.";
1385 450:    return "The United States Court of Appeals for the Federal Circuit.";
1386 451:    return "The non-kitten item like this but with ~false~ and ~true~ switched is true.";
1387 452:    return "This is the chapter called ~A Map of the Cat?~ from Feynman's autobiography.";
1388 453:    return "This is the forest primeval.";
1389 454:    return "Werner's ~Pocket Field Guide to Things That Are Not Kitten~.";
1390 455:    return "You found nettik, but that's backwards.";
1391 456:    return "You have found some zinc, but you must not stop here, for you must find kitten.";
1392 457:    return "~50 Years Among the Non-Kitten Items~, by Ann Droyd.";
1393 458:    return "~Robot may not injure kitten, or, through inaction, ...~";
1394 459:    return "~Address Allocation for Private Internets~ by Yakov Rekhter et al.";
1395 460:    return "~Mail Routing and the Domain System~ by Craig Partridge.";
1396 461:    return "~The Theory and Practice of Oligarchical Collectivism~ by Emmanuel Goldstein.";
1397 462:    return "~201 Kitten Verbs, Fully Conjugated~.  You look for ~find~.";
1398 463:    return "A card shark sits here, practicing his Faro shuffle.  He ignores you.";
1399 463:    return "A copy of DeCSS.  They're a dime a dozen these days.";
1400 464:    return "A demonic voice proclaims ~There is no kitten, only Zuul~.  You flee.";
1401 465:    return "A lotus.  You make an interesting pair.";
1402 466:    return "A milk carton, with a black and white picture of kitten on the side.";
1403 467:    return "Any ordinary robot could see from a mile away that this wasn't kitten.";
1404 468:    return "A stegosaurus, escaped from the stegosaurusfindsrobot game.  It finds you.";
1405 469:    return "Baling wire and chewing gum.";
1406 470:    return "Chewing gum and baling wire.";
1407 471:    return "Here is no kitten but only rock, rock and no kitten and the sandy road.";
1408 472:    return "Hey, I bet you thought this was kitten.";
1409 473:    return "It is an ancient mariner, and he stoppeth one of three.";
1410 474:    return "It pleases you to be kind to what appears to be kitten -- but it's not!";
1411 475:    return "It's a blatant plug for Ogg Vorbis, http://www.vorbis.com/";
1412 476:    return "It's a business plan for a new startup, kitten.net.";
1413 477:    return "It's a revised business plan for a new startup, my.kitten.net.";
1414 478:    return "It's a square.";
1415 479:    return "It seems to be a copy of ~A Tail of Two Kitties~.";
1416 480:    return "It's the Donation of Constantine!";
1417 481:    return "It's this message, nothing more.";
1418 482:    return "Lysine, an essential amino acid.  Well, maybe not for robots.";
1419 483:    return "No kitten here.";
1420 484:    return "The score for a Czech composer's ~Kitten-Finding Symphony in C~.";
1421 485:    return "This looks like Bradley's ~Appearance and Reality~, but it's really not.";
1422 486:    return "This non-kitten item no verb.";
1423 487:    return "You feel strangely unfulfilled.";
1424 488:    return "You hit the non-kitten item.  The non-kitten item fails to yowl.";
1425 489:    return "You suddenly yearn for your distant homeland.";
1426 490:    return "You've found the snows of yesteryear!  So that's where they all went to.";
1427 491:    return "Approaching.  One car.  J.  Followed by.  Two car.  M, M.  In five. Minutes.";
1428 491:    return "Free Jon Johansen!";
1429 492:    return "Free Dmitry Sklyarov!";
1430 493:    return "One person shouts ~What do we want?~ The crowd answers ~Free Dmitry!~";
1431 494:    return "Judith Platt insults librarians.";
1432 495:    return "This map is not the territory.";
1433 496:    return "~Go back to Libraria!~, says Pat Schroeder.";
1434 497:    return "This is a porcelain kitten-counter.  0, 0, 0, 0, 0...";
1435 498:    return "An old bootable business card, unfortunately cracked down the middle.";
1436 499:    return "A kitten sink, for washing kitten (if only kitten liked water).";
1437 500:    return "A kitten source (to match the kitten sink).";
1438 501:    return "If it's one thing, it's not another.";
1439 502:    return "If it's not one thing, it's another.";
1440 503:    return "A caboodle.";
1441 504:    return "A grin.";
1442 505:    return "A hedgehog.  It looks like it knows something important.";
1443 506:    return "You've found... Oh wait, that's just a cat.";
1444 507:    return "Robot should not be touching that.";
1445 508:    return "Air Guitar!!!  NA na NA na!!";
1446 509:    return "An aromatherapy candle burns with healing light.";
1447 510:    return "You find a bright shiny penny.";
1448 511:    return "It's a free Jon Johansen!";
1449 512:    return "It's a free Dmitry Sklyarov!";
1450 513:    return "The rothe hits!  The rothe hits!";
1451 514:    return "It's an Internet chain letter about sodium laureth sulfate.";
1452 515:    return "Ed Witten sits here, pondering string theory.";
1453 516:    return "Something is written here in the dust.  You read: ~rJbotfndQkttten~.";
1454 517:    return "We wish you a merry kitten, and a happy New Year!";
1455 518:    return "Run away!  Run away!";
1456 519:    return "You can see right through this copy of Brin's ~Transparent Society~.";
1457 520:    return "This copy of ~Steal This Book~ has been stolen from a bookstore.";
1458 521:    return "It's Roya Naini.";
1459 522:    return "This kit is the fourteenth in a series of kits named with Roman letters.";
1460 523:    return "This is the tenth key you've found so far.";
1461 524:    return "You find a fraud scheme in which loans are used as security for other loans.";
1462 525:    return "It's the phrase ~and her~, written in ancient Greek.";
1463 526:    return "It's the author of ~Randomness and Mathematical Proof~.";
1464 527:    return "It's the crusty exoskeleton of an arthropod!";
1465 528:    return "It's Emporer Shaddam the 4th's planet!";
1466 529:    return "It's the triangle leg adjacent to an angle divided by the leg opposite it.";
1467 530:    return "It's a bottle of nail polish remover.";
1468 531:    return "You found netkit!  Way to go, robot!";
1469 532:    return "It's the ASCII Floating Head of Seth David Schoen!";
1470 533:    return "A frosted pink party-cake, half eaten.";
1471 534:    return "A bitchin' homemade tesla coil.";
1472 535:    return "Conan O'Brian, sans jawbone.";
1473 536:    return "It's either a mirror, or another soulless kitten-seeking robot.";
1474 537:    return "Preoccupation with finding kitten prevents you from investigating further.";
1475 538:    return "Fonzie sits here, mumbling incoherently about a shark and a pair of waterskis.";
1476 539:    return "The ghost of your dance instructor, his face a paper-white mask of evil.";
1477 540:    return "A bag of groceries taken off the shelf before the expiration date.";
1478 541:    return "A book: Feng Shui, Zen: the art of randomly arranging items that are not kitten.";
1479 542:    return "This might be the fountain of youth, but you'll never know.";
1480 543:    return "Tigerbot Hesh.";
1481 544:    return "Stimutacs.";
1482 545:    return "A canister of pressurized whipped cream, sans whipped cream.";
1483 546:    return "The non-kitten item bites!";
1484 547:    return "A chain hanging from two posts reminds you of the Gateway Arch.";
1485 548:    return "A mathematician calculates the halting probability of a Turing machine.";
1486 549:    return "A number of short theatrical productions are indexed 1, 2, 3, ... n.";
1487 550:    return "A technical university in Australia.";
1488 551:    return "It is -- I just feel something wonderful is about to happen.";
1489 552:    return "It's a Cat 5 cable.";
1490 553:    return "It's a U.S. president.";
1491 554:    return "It's a piece of cloth used to cover a stage in between performances.";
1492 555:    return "The ionosphere seems charged with meaning.";
1493 556:    return "This tomography is like, hella axial, man!";
1494 557:    return "It's your favorite game -- robotfindscatan!";
1495 558:    return "Just a man selling an albatross.";
1496 559:    return "The intermission from a 1930s silent movie.";
1497 560:    return "It's an inverted billiard ball!";
1498 561:    return "The spectre of Sherlock Holmes wills you onwards.";
1499
1500 ! The following Non Kitten Items were added by David Griffith for
1501 ! Release 5
1502 !
1503 562:    return "It's a cookie shaped like a kitten.";
1504 563:    return "It's Professor Feedlebom.";
1505 564:    return "A bottle of smelling salts.";
1506 565:    return "Dinsdale!";
1507 566:    return "An Enfield Mk3 rifle.";
1508 567:    return "An M16 rifle.";
1509 568:    return "An M1911A1 pistol.";
1510 569:    return "An M9 pistol.";
1511 570:    return "It's a gun of some sort.";
1512 571:    return "An FN-FAL rifle.";
1513 572:    return "An old rusty revolver.";
1514 573:    return "An AK-47 rifle.";
1515 574:    return "An AK-97 rifle.";
1516 575:    return "A Remington 870 shotgun.";
1517 576:    return "It's a NetBSD install CD.";
1518 577:    return "It's a recursive recursive recursive recursive recursive...";
1519 578:    return "It's Brian Kernigan.";
1520 579:    return "It's Dennis Ritchie.";
1521 580:    return "It's nothing in particular.";
1522 581:    return "Just a box of backscratchers.";
1523 582:    return "An expired transistor.";
1524 583:    return "Air.";
1525 584:    return "A steam-powered bunnytron.";
1526 585:    return "Heeeeeeeeeeeeres Johnny!";
1527 586:    return "It's a catalog from some company called Infocom.";
1528 587:    return "A dark-emitting diode.";
1529 588:    return "A 256 kilobyte write-only memory chip.";
1530 589:    return "A box of brand-new nixie tubes.";
1531 590:    return "Alien underwear.";
1532 591:    return "A sack of hammers.";
1533 592:    return "A sack of wet mice.";
1534 593:    return "A sack of doorknobs.";
1535 594:    return "A rusty melon-baller.";
1536 595:    return "An atomic vector plotter.";
1537 596:    return "You really don't want to know what this is.";
1538 597:    return "A 100 meter long chain of jumbo paper clips.";
1539 598:    return "A cockatoo shrieks at you.";
1540 599:    return "It's Mary Poppins!";
1541 600:    return "A slightly-used smellovision set.";
1542 601:    return "Doodles Weaver is here looking over a horse race schedule.";
1543 602:    return "An overflowing bit bucket.";
1544
1545 ! The following Non Kitten Items were added by David Griffith for
1546 ! Release 6
1547 !
1548 603:    return "Blarg!";
1549 604:    return "It's a hairy-armed hitchhiker!";
1550 605:    return "A wolf wearing a nightgown is in bed here.";
1551 606:    return "A gecko zooms about on a skateboard here.";
1552 607:    return "A hovercraft full of eels is parked here.";
1553 608:    return "A waffle iron is here and it's still hot.";
1554 609:    return "A huge pile of pancakes.";
1555 610:    return "A threadbare tweed suit.";
1556 611:    return "A rusted safety pin.";
1557 612:    return "A model of a twin-hulled sailboat.";
1558 613:    return "A jar of lemon curd.";
1559 614:    return "~We interrupt this Zen Simulation...~";
1560 615:    return "A sealed tin bearing only the word ~yummy~.";
1561 616:    return "It's a groat coated with pocket fluff.";
1562 617:    return "You find an Atari 2600 game cartridge with no label.";
1563 618:    return "A child's drawing of a kitten.";
1564 619:    return "It's a small bouncy creature, but obviously not kitten.";
1565 620:    return "It's an unknown area code.";
1566 621:    return "A bottle of ammonia.";
1567 622:    return "Tweeting birds.";
1568 623:    return "It's a rapidly oscillating function.";
1569 624:    return "A dogcow moofs at you.";
1570 625:    return "A puddle of purple semi-gloss latex paint.";
1571 626:    return "It's a merry-go-round (broken down).";
1572 627:    return "The pants that Curly died in.";
1573 628:    return "A vanilla pudding pop.";
1574 629:    return "It's Jesse James' severed hand and it's still moving.";
1575 630:    return "It's more money than you'll ever need.";
1576 631:    return "A tiny robot scuttles across the floor.";
1577 632:    return "Chunk is here doing the truffle-shuffle.";
1578 633:    return "Data is here setting up some booty traps.";
1579 634:    return "A waterlogged grand piano.";
1580 635:    return "One liter of fuming nitric acid.";
1581 636:    return "A gold-dipped rose.";
1582 637:    return "Bronzed baby shoes.";
1583 638:    return "An electric engraving pencil.";
1584 639:    return "A small, featureless, white cube.";
1585 640:    return "It's a battery-powered brass lantern.";
1586 641:    return "It's an elongated brown sack, smelling of hot peppers.";
1587 642:    return "A glass bottle containing a quantity of water.";
1588 643:    return "It's a blob of red goo.";
1589 644:    return "It's a blob of blue goo.";
1590 645:    return "It's a blob of yellow goo.";
1591 646:    return "It's a blob of green goo.";
1592 647:    return "It's a blob of orange goo.";
1593 648:    return "It's a blob of purple goo.";
1594 649:    return "It's a blob of black goo.";
1595 650:    return "It's a blob of brown goo.";
1596 651:    return "A Scooby Snack!  Yay!";
1597 652:    return "A squirrel contentedly gnaws on a sprinkler head here.";
1598 653:    return "Snacky things.";
1599 654:    return "A toupee.";
1600 655:    return "Seat cushion fluff.";
1601 656:    return "Jacket fluff.";
1602 657:    return "Haven't you touched this thing before?";
1603 658:    return "It's a copy of the Book of Found Kittens.";
1604 659:    return "It's a nasty knife.";
1605 660:    return "It's a grue.  Fortunately, they don't like to eat robots.";
1606 661:    return "It's a phone book for the 661 area code.";
1607 662:    return "A tiny velvet pouch.";
1608 663:    return "Brass tacks.";
1609 664:    return "It's a rotating potato.";
1610 665:    return "Leave that thing alone!";
1611 666:    return "It's the mark of the beast!";
1612 667:    return "A tube of heat sink grease.";
1613 668:    return "A dead battery.";
1614 669:    return "A pile of irrigation valves.";
1615 670:    return "A stony meteorite.";
1616 671:    return "An iron meteorite.";
1617 672:    return "It's a fragment of an old Russian spacecraft.";
1618 673:    return "A large block of dry ice.";
1619 674:    return "It's a Commodore 64 computer (in mint condition).";
1620 675:    return "It's an Apple II+ computer (in mint condition).";
1621 676:    return "It's a Kaypro II portable computer.";
1622 677:    return "It's a Texas Instruments TI-89 graphing calculator.";
1623 678:    return "It's an Atari 800 computer.";
1624 679:    return "It's an Amiga 2000 computer.";
1625 680:    return "An oddly familiar face shouts ~SCREWTEK!~ from this computer monitor.";
1626 681:    return "It's an Osborne portable computer.";
1627 682:    return "It's a nameless MSX computer from Japan.";
1628 683:    return "A vacuum cleaner appears to have exploded here.";
1629 684:    return "It's a model of a catamaran.";
1630 685:    return "A cardboard box of sheet metal screws.";
1631 686:    return "A brown glass vial labeled ~tincture of iodine~.";
1632 687:    return "Just some sort of cat toy.";
1633 688:    return "It's a large pile of crumpled notepaper.";
1634 689:    return "You've found the decoy kitten!";
1635 690:    return "It's a pile of wine corks.";
1636 691:    return "A neat pile of plastic irrigation pipe.";
1637 692:    return "It's one of those carpet-covered things for cats to climb.";
1638 693:    return "This thing appears to be an ancient Roman breastplate.";
1639 694:    return "A claymore.";
1640 695:    return "An unripe orange.";
1641 696:    return "A toy zeppelin.";
1642 697:    return "It's a bucket of mud.";
1643 698:    return "It's a bucket of water.";
1644 699:    return "A clay pot with grass growing it in sits here.";
1645 700:    return "A discarded envelope chewed by Kitten.";
1646 701:    return "A hollow voice says ~Fool!~";
1647 702:    return "Several hackles are here and they appear to be up.";
1648 703:    return "Just some spite.";
1649 704:    return "Vitriol.";
1650 705:    return "There is a small mailbox here.";
1651 706:    return "A large oriental rug.";
1652 707:    return "It's an elvish sword of great antiquity.";
1653 708:    return "A large coil of rope is here.";
1654 709:    return "You've found a speed bump.";
1655 710:    return "It's a whirly thing of some sort.";
1656 711:    return "An empty Slurpee cup.";
1657 712:    return "This is a disaster area.";
1658 713:    return "A small box of fishing weights.";
1659 714:    return "A street map of the city of Anaheim.";
1660 715:    return "Bits of red construction paper are scattered all about.";
1661 716:    return "You won't believe what this is.";
1662 717:    return "A meat-scented air-freshener on a string dances in the breeze.";
1663 718:    return "A intact clay pigeon.";
1664 719:    return "Pieces of broken clay pigeons are scattered all about.";
1665 720:    return "This looks like a skateboarding arcade video game.";
1666 721:    return "It's a steaming bowl of homemade gnocci.";
1667 722:    return "An electric fan lies on its side here.";
1668 723:    return "It's something fizzy.";
1669 724:    return "A hickory stump.";
1670 725:    return "This tiny barbecue is spotlessly clean.";
1671 726:    return "A saucer of milk, untouched by Kitten.";
1672 727:    return "Insane laughter issues from this vibrating shipping crate.";
1673 728:    return "Haven't you checked here already?";
1674 729:    return "Just some rusted lug nuts and an ancient hub cap.";
1675 730:    return "A rusty crowbar.";
1676 731:    return "A post hole digger is stuck in a pile of dirt here.";
1677 732:    return "It's a spade.";
1678 733:    return "It's the Queen of Hearts! ~Off with their heads!~, she shouts.";
1679 734:    return "An assortment of highly-nutritious vegetables.";
1680 735:    return "A dead click beetle.";
1681 736:    return "A roll of scratch-and-sniff stickers.";
1682 737:    return "A roll of duct tape.";
1683 738:    return "Someone dropped a cheap ballpoint pen here.";
1684 739:    return "Someone dropped an expensive fountain pen here.";
1685 740:    return "You've found the Gingerbread Man!";
1686 741:    return "You've found the Stinky Cheese Man!";
1687 742:    return "This looks like an umbrella turned inside out.";
1688 743:    return "3.14159...  Pi is all over the place here...";
1689 744:    return "You almost mistook this meatloaf for Kitten.";
1690 745:    return "This drawer is full of dried out rubber stoppers.";
1691 746:    return "A flask of hydrochloric acid is here.";
1692 747:    return "Why are you bothering that old man instead of finding Kitten?";
1693 748:    return "It's a hyperkinetic rabbity thing.";
1694 749:    return "A dog dressed in a cheap suit is here.";
1695 750:    return "~Help me Robot! You're my only hope!~";
1696 751:    return "You found Budgie! Too bad this isn't ~robotfindsbudgie~.";
1697 752:    return "It's a sleeping lion.";
1698 753:    return "It's an example of the infamous space-cadet keyboard.";
1699 754:    return "You find a random assortment of dots and dashes.";
1700 755:    return "Nothing but some scribbles in crayon.";
1701 756:    return "It's a week-old baloney sandwich.";
1702 757:    return "It's a red stapler.";
1703 758:    return "It's a red staple-remover.";
1704 759:    return "It's a ~Wicked Tinkers~ CD.";
1705 760:    return "You see a rhinestone-studded dog collar, but no dog.";
1706 761:    return "It's a box of lox.";
1707 762:    return "It's a box of pinball machine parts.";
1708 763:    return "You've discovered an enormous pile of socks.";
1709 764:    return "It's a photograph of Kitten.";
1710
1711 default: return "Unknown NKI (this should not happen)";
1712         }
1713 ];