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