From ef7affa01b84f9632f94d8445e4b4552cf88c9b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20H=C3=A4ggqvist?= Date: Fri, 5 Oct 2007 20:02:32 +0000 Subject: [PATCH] New plugin: robotfindskitten - a zen simulation. More (or less) information on robotfindskitten.org. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14993 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/CATEGORIES | 1 + apps/plugins/SOURCES | 1 + apps/plugins/robotfindskitten.c | 628 ++++++++++++++++++ apps/plugins/robotfindskitten_messages.h | 453 +++++++++++++ docs/CREDITS | 1 + .../images/ss-robotfindskitten-112x64x1.png | Bin 0 -> 445 bytes .../images/ss-robotfindskitten-128x128x16.png | Bin 0 -> 977 bytes .../images/ss-robotfindskitten-132x80x16.png | Bin 0 -> 802 bytes .../images/ss-robotfindskitten-138x110x2.png | Bin 0 -> 624 bytes .../images/ss-robotfindskitten-160x128x16.png | Bin 0 -> 1124 bytes .../images/ss-robotfindskitten-176x132x16.png | Bin 0 -> 1230 bytes .../images/ss-robotfindskitten-220x176x16.png | Bin 0 -> 1268 bytes .../images/ss-robotfindskitten-240x320x16.png | Bin 0 -> 1468 bytes .../images/ss-robotfindskitten-320x240x16.png | Bin 0 -> 1499 bytes manual/plugins/main.tex | 2 + manual/plugins/robotfindskitten.tex | 21 + 16 files changed, 1107 insertions(+) create mode 100644 apps/plugins/robotfindskitten.c create mode 100644 apps/plugins/robotfindskitten_messages.h create mode 100644 manual/plugins/images/ss-robotfindskitten-112x64x1.png create mode 100644 manual/plugins/images/ss-robotfindskitten-128x128x16.png create mode 100644 manual/plugins/images/ss-robotfindskitten-132x80x16.png create mode 100644 manual/plugins/images/ss-robotfindskitten-138x110x2.png create mode 100644 manual/plugins/images/ss-robotfindskitten-160x128x16.png create mode 100644 manual/plugins/images/ss-robotfindskitten-176x132x16.png create mode 100644 manual/plugins/images/ss-robotfindskitten-220x176x16.png create mode 100644 manual/plugins/images/ss-robotfindskitten-240x320x16.png create mode 100644 manual/plugins/images/ss-robotfindskitten-320x240x16.png create mode 100644 manual/plugins/robotfindskitten.tex diff --git a/apps/plugins/CATEGORIES b/apps/plugins/CATEGORIES index a821fa0d91..046eb8a5c2 100644 --- a/apps/plugins/CATEGORIES +++ b/apps/plugins/CATEGORIES @@ -51,6 +51,7 @@ pong,games properties,viewers random_folder_advance_config,apps reversi,games +robotfindskitten,games rockblox,games rockbox_flash,viewers rockboy,viewers diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 20d73286bd..b725e7f0e5 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -43,6 +43,7 @@ maze.c mazezam.c text_editor.c wavview.c +robotfindskitten.c /* Plugins needing the grayscale lib on low-depth LCDs */ fire.c diff --git a/apps/plugins/robotfindskitten.c b/apps/plugins/robotfindskitten.c new file mode 100644 index 0000000000..fa0602bdc6 --- /dev/null +++ b/apps/plugins/robotfindskitten.c @@ -0,0 +1,628 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * robotfindskitten: A Zen simulation + * + * Copyright (C) 1997,2000 Leonard Richardson + * leonardr@segfault.org + * http://www.crummy.com/devel/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or EXISTANCE OF KITTEN. See the GNU General + * Public License for more details. + * + * http://www.gnu.org/copyleft/gpl.html + * + * Ported to Rockbox 2007 by Jonas Häggqvist + */ + +#include "plugin.h" +#include "pluginlib_actions.h" + +/* This macros must always be included. Should be placed at the top by + convention, although the actual position doesn't matter */ +PLUGIN_HEADER + +/*The messages go in a separate file because they are collectively + huge, and you might want to modify them. It would be nice to load + the messages from a text file at run time.*/ +#include "robotfindskitten_messages.h" + +#define TRUE true +#define FALSE false + +#define RFK_VERSION "v1.4142135.406" + +/* Button definitions stolen from maze.c */ +#if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ + (CONFIG_KEYPAD == IPOD_3G_PAD) || \ + (CONFIG_KEYPAD == IPOD_1G2G_PAD) +# undef __PLUGINLIB_ACTIONS_H__ +# define RFK_QUIT (BUTTON_SELECT | BUTTON_MENU) +# define RFK_RIGHT BUTTON_RIGHT +# define RFK_LEFT BUTTON_LEFT +# define RFK_UP BUTTON_MENU +# define RFK_DOWN BUTTON_PLAY +# define RFK_RRIGHT (BUTTON_RIGHT | BUTTON_REPEAT) +# define RFK_RLEFT (BUTTON_LEFT | BUTTON_REPEAT) +# define RFK_RUP (BUTTON_MENU | BUTTON_REPEAT) +# define RFK_RDOWN (BUTTON_PLAY | BUTTON_REPEAT) + +#else +# define RFK_QUIT PLA_QUIT +# define RFK_RIGHT PLA_RIGHT +# define RFK_LEFT PLA_LEFT +# define RFK_UP PLA_UP +# define RFK_DOWN PLA_DOWN +# define RFK_RRIGHT PLA_RIGHT_REPEAT +# define RFK_RLEFT PLA_LEFT_REPEAT +# define RFK_RUP PLA_UP_REPEAT +# define RFK_RDOWN PLA_DOWN_REPEAT + +#endif +/*Constants for our internal representation of the screen.*/ +#define EMPTY -1 +#define ROBOT 0 +#define KITTEN 1 + +/*Screen dimensions.*/ +#define X_MIN 0 +#define X_MAX ((LCD_WIDTH/SYSFONT_WIDTH) - 1) +#define Y_MIN 3 +#define Y_MAX ((LCD_HEIGHT/SYSFONT_HEIGHT) - 1) + +/* Colours used */ +#if LCD_DEPTH >= 16 +#define NUM_COLORS 6 +#define ROBOT_COLOR LCD_DARKGRAY +const unsigned colors[NUM_COLORS] = { + LCD_RGBPACK(255, 255, 0), /* Yellow */ + LCD_RGBPACK(0, 255, 255), /* Cyan */ + LCD_RGBPACK(255, 0, 255), /* Purple */ + LCD_RGBPACK(0, 0, 255), /* Blue */ + LCD_RGBPACK(255, 0, 0), /* Red */ + LCD_RGBPACK(0, 255, 0), /* Green */ +}; +#elif LCD_DEPTH == 2 +#define NUM_COLORS 3 +#define ROBOT_COLOR LCD_DARKGRAY +const unsigned colors[NUM_COLORS] = { + LCD_LIGHTGRAY, + LCD_DARKGRAY, + LCD_BLACK, +}; +#elif LCD_DEPTH == 1 +#define NUM_COLORS 1 +#define ROBOT_COLOR 0 +const unsigned colors[NUM_COLORS] = { + 0, +}; +#endif /* HAVE_LCD_COLOR */ + +/*Macros for generating numbers in different ranges*/ +#define randx() (rb->rand() % X_MAX) + 1 +#define randy() (rb->rand() % (Y_MAX-Y_MIN+1))+Y_MIN /*I'm feeling randy()!*/ +#define randchar() rb->rand() % (126-'!'+1)+'!'; +#define randcolor() rb->rand() % NUM_COLORS +#define randbold() (rb->rand() % 2 ? TRUE:FALSE) + +/*Row constants for the animation*/ +#define ADV_ROW 1 +#define ANIMATION_MEET (X_MAX/3)*2 +#define ANIMATION_LENGTH 4 + +/*This struct contains all the information we need to display an object + on the screen*/ +typedef struct +{ + int x; + int y; + int color; + bool bold; + char character; +} screen_object; + +/* + *Function definitions + */ + +/*Initialization and setup functions*/ +void initialize_arrays(void); +void initialize_robot(void); +void initialize_kitten(void); +void initialize_bogus(void); +void initialize_screen(void); +void instructions(void); +void finish(int sig); + +/*Game functions*/ +void play_game(void); +void process_input(int); + +/*Helper functions*/ +int validchar(char); + +void play_animation(int); + +/*Global variables. Bite me, it's fun.*/ +screen_object robot; +screen_object kitten; + +int num_bogus; +screen_object bogus[MESSAGES]; +int bogus_messages[MESSAGES]; +int used_messages[MESSAGES]; + +bool exit_rfk; + +/* This array contains our internal representation of the screen. The + array is bigger than it needs to be, as we don't need to keep track + of the first few rows of the screen. But that requires making an + offset function and using that everywhere. So not right now. */ +int screen[X_MAX + 1][Y_MAX + 1]; + +/* here is a global api struct pointer. while not strictly necessary, + it's nice not to have to pass the api pointer in all function calls + in the plugin */ +static struct plugin_api* rb; + +/****************************************************************************** + * + * Begin meaty routines that do the dirty work. + * + *****************************************************************************/ + +MEM_FUNCTION_WRAPPERS(rb) + +void drawchar(int x, int y, char c) +{ + char str[2]; + rb->snprintf(str, sizeof(str), "%c", c); + rb->lcd_putsxy(x*SYSFONT_WIDTH, y*SYSFONT_HEIGHT, str); +} + +void draw(screen_object o) +{ +#if LCD_DEPTH > 1 + unsigned oldforeground; + oldforeground = rb->lcd_get_foreground(); + rb->lcd_set_foreground(o.color); + drawchar(o.x, o.y, o.character); + rb->lcd_set_foreground(oldforeground); +#else + drawchar(o.x, o.y, o.character); +#endif +} + +void message(char * str) +{ + rb->lcd_puts_scroll(0, ADV_ROW, str); +} + +void refresh(void) +{ + rb->lcd_update(); +} + +/* + *play_game waits in a loop getting input and sending it to process_input + */ +void play_game() +{ + int old_x = robot.x; + int old_y = robot.y; + int input = 0; /* Not sure what a reasonable initial value is */ +#ifdef __PLUGINLIB_ACTIONS_H__ + const struct button_mapping *plugin_contexts[] = {generic_directions, generic_actions}; +#endif + + while (input != RFK_QUIT && exit_rfk == false) + { + process_input(input); + + /*Redraw robot, where applicable. We're your station, robot.*/ + if (!(old_x == robot.x && old_y == robot.y)) + { + /*Get rid of the old robot*/ + drawchar(old_x, old_y, ' '); + screen[old_x][old_y] = EMPTY; + + /*Meet the new robot, same as the old robot.*/ + draw(robot); + refresh(); + screen[robot.x][robot.y] = ROBOT; + + old_x = robot.x; + old_y = robot.y; + } +#ifdef __PLUGINLIB_ACTIONS_H__ + input = pluginlib_getaction(rb, TIMEOUT_BLOCK, plugin_contexts, 2); +#else + input = rb->button_get(true); +#endif + } + message("Bye!"); + refresh(); +} + +/* + *Given the keyboard input, process_input interprets it in terms of moving, + *touching objects, etc. + */ +void process_input(int input) +{ +#ifdef __PLUGINLIB_ACTIONS_H__ + const struct button_mapping *plugin_contexts[] = {generic_directions, generic_actions}; +#endif + int check_x = robot.x; + int check_y = robot.y; + + switch (input) + { + case RFK_UP: + case RFK_RUP: + check_y--; + break; + case RFK_DOWN: + case RFK_RDOWN: + check_y++; + break; + case RFK_LEFT: + case RFK_RLEFT: + check_x--; + break; + case RFK_RIGHT: + case RFK_RRIGHT: + check_x++; + break; + } + + /*Check for going off the edge of the screen.*/ + if (check_y < Y_MIN || check_y > Y_MAX || check_x < X_MIN || check_x > X_MAX) + { + return; /*Do nothing.*/ + } + + /* + * Clear textline + * disabled because it breaks the scrolling for some reason + */ + /* rb->lcd_puts_scroll(0, ADV_ROW, " "); */ + + /*Check for collision*/ + if (screen[check_x][check_y] != EMPTY) + { + switch (screen[check_x][check_y]) + { + case ROBOT: + /*We didn't move, or we're stuck in a + time warp or something.*/ + break; + case KITTEN: /*Found it!*/ + play_animation(input); + /* Wait for the user to click something */ + rb->button_clear_queue(); +#ifdef __PLUGINLIB_ACTIONS_H__ + input = pluginlib_getaction(rb, TIMEOUT_BLOCK, plugin_contexts, 2); +#else + input = rb->button_get(true); +#endif + break; + default: /*We hit a bogus object; print its message.*/ + message(messages[bogus_messages[screen[check_x][check_y]-2]]); + refresh(); + break; + } + return; + } + + /*Otherwise, move the robot.*/ + robot.x = check_x; + robot.y = check_y; +} + +/*finish is called upon signal or progam exit*/ +void finish(int sig) +{ + (void)sig; + exit_rfk = true; +} + +/****************************************************************************** + * + * Begin helper routines + * + *****************************************************************************/ + +int validchar(char a) +{ + switch(a) + { + case '#': + case ' ': + case 127: + return 0; + } + return 1; +} + +void play_animation(int input) +{ + int counter; + screen_object left; + screen_object right; + /*The grand cinema scene.*/ + rb->lcd_puts_scroll(0, ADV_ROW, " "); + + if (input == RFK_RIGHT || input == RFK_DOWN || input == RFK_RRIGHT || input == RFK_RDOWN) { + left = robot; + right = kitten; + } + else { + left = kitten; + right = robot; + } + left.y = ADV_ROW; + right.y = ADV_ROW; + left.x = ANIMATION_MEET - ANIMATION_LENGTH - 1; + right.x = ANIMATION_MEET + ANIMATION_LENGTH; + + for (counter = ANIMATION_LENGTH; counter > 0; counter--) + { + left.x++; + right.x--; + /* Clear the previous position (empty the first time) */ + drawchar(left.x - 1, left.y, ' '); + drawchar(right.x + 1, right.y, ' '); + draw(left); + draw(right); + refresh(); + rb->sleep(HZ); + } + + message("You found kitten! Way to go, robot!"); + refresh(); + finish(0); +} + +/****************************************************************************** + * + * Begin initialization routines (called before play begins). + * + *****************************************************************************/ + +void instructions() +{ + char buf[X_MAX + 5]; + rb->snprintf(buf, sizeof(buf), "robotfindskitten %s", RFK_VERSION); + /* + * fixme: Find a nice way of portably putting a lot of + * text on the screen. Fixing it for all these sizes is just a horrible job + */ +#if X_MAX >= 52 /* 320 pixels wide */ + rb->lcd_putsxy(0,0, buf); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*1, "By the illustrious Leonard Richardson (C) 1997, 2000"); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*2, "Written originally for the Nerth Pork"); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*3, "robotfindskitten contest"); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*5, "In this game you are robot (#). Your job is to find"); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*6, "kitten. This task is complicated by the existence of"); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*7, "various things which are not kitten. Robot must"); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*8, "touch items to determine if they are kitten or not."); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*9, "The game ends when robotfindskitten."); + rb->lcd_putsxy(0,SYSFONT_HEIGHT*11, "Press any key to start"); + rb->lcd_update(); + rb->button_get(true); +#elif X_MAX >= 39 /* 240 pixels wide */ +#elif X_MAX >= 35 /* 220 pixels wide */ +#elif X_MAX >= 28 /* 176 pixels wide */ +#elif X_MAX >= 25 /* 160 pixels wide */ +#elif X_MAX >= 20 /* 128 pixels wide */ +#elif X_MAX >= 17 /* 112 pixels wide */ +#endif +} + +void initialize_arrays() +{ + unsigned int counter, counter2; + screen_object empty; + + /*Initialize the empty object.*/ + empty.x = -1; + empty.y = -1; +#if LCD_DEPTH > 1 + empty.color = LCD_BLACK; +#else + empty.color = 0; +#endif + empty.bold = FALSE; + empty.character = ' '; + + for (counter = 0; counter <= X_MAX; counter++) + { + for (counter2 = 0; counter2 <= Y_MAX; counter2++) + { + screen[counter][counter2] = EMPTY; + } + } + + /*Initialize the other arrays.*/ + for (counter = 0; counter < MESSAGES; counter++) + { + used_messages[counter] = 0; + bogus_messages[counter] = 0; + bogus[counter] = empty; + } +} + +/*initialize_robot initializes robot.*/ +void initialize_robot() +{ + /*Assign a position to the player.*/ + robot.x = randx(); + robot.y = randy(); + + robot.character = '#'; + robot.color = ROBOT_COLOR; + robot.bold = FALSE; + screen[robot.x][robot.y] = ROBOT; +} + +/*initialize kitten, well, initializes kitten.*/ +void initialize_kitten() +{ + /*Assign the kitten a unique position.*/ + do + { + kitten.x = randx(); + kitten.y = randy(); + } while (screen[kitten.x][kitten.y] != EMPTY); + + /*Assign the kitten a character and a color.*/ + do { + kitten.character = randchar(); + } while (!(validchar(kitten.character))); + screen[kitten.x][kitten.y] = KITTEN; + + kitten.color = colors[randcolor()]; + kitten.bold = randbold(); +} + +/*initialize_bogus initializes all non-kitten objects to be used in this run.*/ +void initialize_bogus() +{ + int counter, index; + for (counter = 0; counter < num_bogus; counter++) + { + /*Give it a color.*/ + bogus[counter].color = colors[randcolor()]; + bogus[counter].bold = randbold(); + + /*Give it a character.*/ + do { + bogus[counter].character = randchar(); + } while (!(validchar(bogus[counter].character))); + + /*Give it a position.*/ + do + { + bogus[counter].x = randx(); + bogus[counter].y = randy(); + } while (screen[bogus[counter].x][bogus[counter].y] != EMPTY); + + screen[bogus[counter].x][bogus[counter].y] = counter+2; + + /*Find a message for this object.*/ + do { + index = rb->rand() % MESSAGES; + } while (used_messages[index] != 0); + bogus_messages[counter] = index; + used_messages[index] = 1; + } + +} + +/*initialize_screen paints the screen.*/ +void initialize_screen() +{ + int counter; + char buf[40]; + + /* + * Set up white-on-black screen on color targets + */ +#if LCD_DEPTH >= 16 + rb->lcd_set_backdrop(NULL); + rb->lcd_set_foreground(LCD_WHITE); + rb->lcd_set_background(LCD_BLACK); +#endif + + /* + *Print the status portion of the screen. + */ + rb->lcd_clear_display(); + rb->lcd_setfont(FONT_SYSFIXED); + rb->snprintf(buf, sizeof(buf), "robotfindskitten %s", RFK_VERSION); + rb->lcd_puts_scroll(0, 0, buf); + refresh(); + + /*Draw a line across the screen.*/ + for (counter = X_MIN; counter <= X_MAX + 1; counter++) + { + drawchar(counter, ADV_ROW+1, '_'); + } + + /* + *Draw all the objects on the playing field. + */ + for (counter = 0; counter < num_bogus; counter++) + { + draw(bogus[counter]); + } + + draw(kitten); + draw(robot); + + refresh(); + +} + +/* this is the plugin entry point */ +enum plugin_status plugin_start(struct plugin_api* api, void* parameter) +{ + (void)parameter; + rb = api; + + /* Get a number of non-kitten objects */ +#if X_MAX*Y_MAX < 200 + num_bogus = 15; +#else + num_bogus = 20; +#endif + exit_rfk = false; + + rb->srand(*rb->current_tick); + + initialize_arrays(); + + /* + * Now we initialize the various game objects. + */ + initialize_robot(); + initialize_kitten(); + initialize_bogus(); + + /* + * Set up white-on-black screen on color targets + */ +#if LCD_DEPTH >= 16 + rb->lcd_set_backdrop(NULL); + rb->lcd_set_foreground(LCD_WHITE); + rb->lcd_set_background(LCD_BLACK); +#endif + rb->lcd_clear_display(); + rb->lcd_setfont(FONT_SYSFIXED); + + /* + * Run the game + */ + instructions(); + + initialize_screen(); + + play_game(); + + rb->lcd_setfont(FONT_UI); + return PLUGIN_OK; +} diff --git a/apps/plugins/robotfindskitten_messages.h b/apps/plugins/robotfindskitten_messages.h new file mode 100644 index 0000000000..e1be4bad53 --- /dev/null +++ b/apps/plugins/robotfindskitten_messages.h @@ -0,0 +1,453 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * robotfindskitten: A Zen simulation + * + * Copyright (C) 1997,2000 Leonard Richardson + * leonardr@segfault.org + * http://www.crummy.com/devel/ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or EXISTANCE OF KITTEN. See the GNU General + * Public License for more details. + * + * http://www.gnu.org/copyleft/gpl.html + * + * Ported to Rockbox 2007 by Jonas Häggqvist + */ + +/*Be sure to change MESSAGES when you change the array, or bad things + will happen.*/ + +/*Also, take note that robotfindskitten.c and configure.in + currently have the version number hardcoded into them, and they + should reflect MESSAGES. */ + +/* Watch out for fenceposts.*/ +#define MESSAGES (sizeof messages / sizeof (char*)) + + +static char* messages[] = +{ + "\"I pity the fool who mistakes me for kitten!\", sez Mr. T.", + "That's just an old tin can.", + "It's an altar to the horse god.", + "A box of dancing mechanical pencils. They dance! They sing!", + "It's an old Duke Ellington record.", + "A box of fumigation pellets.", + "A digital clock. It's stuck at 2:17 PM.", + "That's just a charred human corpse.", + "I don't know what that is, but it's not kitten.", + "An empty shopping bag. Paper or plastic?", + "Could it be... a big ugly bowling trophy?", + "A coat hanger hovers in thin air. Odd.", + "Not kitten, just a packet of Kool-Aid(tm).", + "A freshly-baked pumpkin pie.", + "A lone, forgotten comma, sits here, sobbing.", + "ONE HUNDRED THOUSAND CARPET FIBERS!!!!!", + "It's Richard Nixon's nose!", + "It's Lucy Ricardo. \"Aaaah, Ricky!\", she says.", + "You stumble upon Bill Gates' stand-up act.", + "Just an autographed copy of the Kama Sutra.", + "It's the Will Rogers Highway. Who was Will Rogers, anyway?", + "It's another robot, more advanced in design than you but strangely immobile.", + "Leonard Richardson is here, asking people to lick him.", + "It's a stupid mask, fashioned after a beagle.", + "Your State Farm Insurance(tm) representative!", + "It's the local draft board.", + "Seven 1/4\" screws and a piece of plastic.", + "An 80286 machine.", + "One of those stupid \"Homes of the Stars\" maps.", + "A signpost saying \"TO KITTEN\". It points in no particular direction.", + "A hammock stretched between a tree and a volleyball pole.", + "A Texas Instruments of Destruction calculator.", + "It's a dark, amphorous blob of matter.", + "Just a pincushion.", + "It's a mighty zombie talking about some love and prosperity.", + "\"Dear robot, you may have already won our 10 MILLION DOLLAR prize...\"", + "It's just an object.", + "A mere collection of pixels.", + "A badly dented high-hat cymbal lies on its side here.", + "A marijuana brownie.", + "A plush Chewbacca.", + "Daily hunger conditioner from Australasia", + "Just some stuff.", + "Why are you touching this when you should be finding kitten?", + "A glorious fan of peacock feathers.", + "It's some compromising photos of Babar the Elephant.", + "A copy of the Weekly World News. Watch out for the chambered nautilus!", + "It's the proverbial wet blanket.", + "A \"Get Out of Jail Free\" card.", + "An incredibly expensive \"Mad About You\" collector plate.", + "Paul Moyer's necktie.", + "A haircut and a real job. Now you know where to get one!", + "An automated robot-hater. It frowns disapprovingly at you.", + "An automated robot-liker. It smiles at you.", + "It's a black hole. Don't fall in!", + "Just a big brick wall.", + "You found kitten! No, just kidding.", + "Heart of Darkness brand pistachio nuts.", + "A smoking branding iron shaped like a 24-pin connector.", + "It's a Java applet.", + "An abandoned used-car lot.", + "A shameless plug for Crummy: http://www.crummy.com/", + "A shameless plug for the UCLA Linux Users Group: http://linux.ucla.edu/", + "A can of Spam Lite.", + "This is another fine mess you've gotten us into, Stanley.", + "It's scenery for \"Waiting for Godot\".", + "This grain elevator towers high above you.", + "A Mentos wrapper.", + "It's the constellation Pisces.", + "It's a fly on the wall. Hi, fly!", + "This kind of looks like kitten, but it's not.", + "It's a banana! Oh, joy!", + "A helicopter has crashed here.", + "Carlos Tarango stands here, doing his best impression of Pat Smear.", + "A patch of mushrooms grows here.", + "A patch of grape jelly grows here.", + "A spindle, and a grindle, and a bucka-wacka-woom!", + "A geyser sprays water high into the air.", + "A toenail? What good is a toenail?", + "You've found the fish! Not that it does you much good in this game.", + "A Buttertonsils bar.", + "One of the few remaining discoes.", + "Ah, the uniform of a Revolutionary-era minuteman.", + "A punch bowl, filled with punch and lemon slices.", + "It's nothing but a G-thang, baby.", + "IT'S ALIVE! AH HA HA HA HA!", + "This was no boating accident!", + "Wait! This isn't the poker chip! You've been tricked! DAMN YOU, MENDEZ!", + "A livery stable! Get your livery!", + "It's a perpetual immobility machine.", + "\"On this spot in 1962, Henry Winkler was sick.\"", + "There's nothing here; it's just an optical illusion.", + "The World's Biggest Motzah Ball!", + "A tribe of cannibals lives here. They eat Malt-O-Meal for breakfast, you know.", + "This appears to be a rather large stack of trashy romance novels.", + "Look out! Exclamation points!", + "A herd of wild coffee mugs slumbers here.", + "It's a limbo bar! How low can you go?", + "It's the horizon. Now THAT'S weird.", + "A vase full of artificial flowers is stuck to the floor here.", + "A large snake bars your way.", + "A pair of saloon-style doors swing slowly back and forth here.", + "It's an ordinary bust of Beethoven... but why is it painted green?", + "It's TV's lovable wisecracking Crow! \"Bite me!\", he says.", + "Hey, look, it's war. What is it good for? Absolutely nothing. Say it again.", + "It's the amazing self-referential thing that's not kitten.", + "A flamboyant feather boa. Now you can dress up like Carol Channing!", + "\"Sure hope we get some rain soon,\" says Farmer Joe.", + "\"How in heck can I wash my neck if it ain't gonna rain no more?\" asks Farmer Al.", + "\"Topsoil's all gone, ma,\" weeps Lil' Greg.", + "This is a large brown bear. Oddly enough, it's currently peeing in the woods.", + "A team of arctic explorers is camped here.", + "This object here appears to be Louis Farrakhan's bow tie.", + "This is the world-famous Chain of Jockstraps.", + "A trash compactor, compacting away.", + "This toaster strudel is riddled with bullet holes!", + "It's a hologram of a crashed helicopter.", + "This is a television. On screen you see a robot strangely similar to yourself.", + "This balogna has a first name, it's R-A-N-C-I-D.", + "A salmon hatchery? Look again. It's merely a single salmon.", + "It's a rim shot. Ba-da-boom!", + "It's creepy and it's kooky, mysterious and spooky. It's also somewhat ooky.", + "This is an anagram.", + "This object is like an analogy.", + "It's a symbol. You see in it a model for all symbols everywhere.", + "The object pushes back at you.", + "A traffic signal. It appears to have been recently vandalized.", + "\"There is no kitten!\" cackles the old crone. You are shocked by her blasphemy.", + "This is a Lagrange point. Don't come too close now.", + "The dirty old tramp bemoans the loss of his harmonica.", + "Look, it's Fanny the Irishman!", + "What in blazes is this?", + "It's the instruction manual for a previous version of this game.", + "A brain cell. Oddly enough, it seems to be functioning.", + "Tea and/or crumpets.", + "This jukebox has nothing but Cliff Richards albums in it.", + "It's a Quaker Oatmeal tube, converted into a drum.", + "This is a remote control. Being a robot, you keep a wide berth.", + "It's a roll of industrial-strength copper wire.", + "Oh boy! Grub! Er, grubs.", + "A puddle of mud, where the mudskippers play.", + "Plenty of nothing.", + "Look at that, it's the Crudmobile.", + "Just Walter Mattheau and Jack Lemmon.", + "Two crepes, two crepes in a box.", + "An autographed copy of \"Primary Colors\", by Anonymous.", + "Another rabbit? That's three today!", + "It's a segmentation fault. Core dumped, by the way.", + "A historical marker showing the actual location of /dev/null.", + "Thar's Mobius Dick, the convoluted whale. Arrr!", + "It's a charcoal briquette, smoking away.", + "A pizza, melting in the sun.", + "It's a \"HOME ALONE 2: Lost in New York\" novelty cup.", + "A stack of 7 inch floppies wobbles precariously.", + "It's nothing but a corrupted floppy. Coaster anyone?", + "A section of glowing phosphor cells sings a song of radiation to you.", + "This TRS-80 III is eerily silent.", + "A toilet bowl occupies this space.", + "This peg-leg is stuck in a knothole!", + "It's a solitary vacuum tube.", + "This corroded robot is clutching a mitten.", + "\"Hi, I'm Anson Williams, TV's 'Potsy'.\"", + "This subwoofer was blown out in 1974.", + "Three half-pennies and a wooden nickel.", + "It's the missing chapter to \"A Clockwork Orange\".", + "It's a burrito stand flyer. \"Taqueria El Ranchito\".", + "This smiling family is happy because they eat LARD.", + "Roger Avery, persona un famoso de los Estados Unidos.", + "Ne'er but a potted plant.", + "A parrot, kipping on its back.", + "A forgotten telephone switchboard.", + "A forgotten telephone switchboard operator.", + "It's an automated robot-disdainer. It pretends you're not there.", + "It's a portable hole. A sign reads: \"Closed for the winter\".", + "Just a moldy loaf of bread.", + "A little glass tub of Carmex. ($.89) Too bad you have no lips.", + "A Swiss-Army knife. All of its appendages are out. (toothpick lost)", + "It's a zen simulation, trapped within an ASCII character.", + "It's a copy of \"The Rubaiyat of Spike Schudy\".", + "It's \"War and Peace\" (unabridged, very small print).", + "A willing, ripe tomato bemoans your inability to digest fruit.", + "A robot comedian. You feel amused.", + "It's KITT, the talking car.", + "Here's Pete Peterson. His batteries seem to have long gone dead.", + "\"Blup, blup, blup\", says the mud pot.", + "More grist for the mill.", + "Grind 'em up, spit 'em out, they're twigs.", + "The boom box cranks out an old Ethel Merman tune.", + "It's \"Finding kitten\", published by O'Reilly and Associates.", + "Pumpkin pie spice.", + "It's the Bass-Matic '76! Mmm, that's good bass!", + "\"Lend us a fiver 'til Thursday\", pleas Andy Capp.", + "It's a tape of '70s rock. All original hits! All original artists!", + "You've found the fabled America Online disk graveyard!", + "Empty jewelboxes litter the landscape.", + "It's the astounding meta-object.", + "Ed McMahon stands here, lost in thought. Seeing you, he bellows, \"YES SIR!\"", + "...thingy???", + "It's 1000 secrets the government doesn't want you to know!", + "The letters O and R.", + "A magical... magic thing.", + "It's a moment of silence.", + "It's Sirhan-Sirhan, looking guilty.", + "It's \"Chicken Soup for the Kitten-seeking Soulless Robot.\"", + "It is a set of wind-up chatter teeth.", + "It is a cloud shaped like an ox.", + "You see a snowflake here, melting slowly.", + "It's a big block of ice. Something seems to be frozen inside it.", + "Vladimir Lenin's casket rests here.", + "It's a copy of \"Zen and The Art of Robot Maintenance\".", + "This invisible box contains a pantomime horse.", + "A mason jar lies here open. It's label reads: \"do not open!\".", + "A train of thought chugs through here.", + "This jar of pickles expired in 1957.", + "Someone's identity disk lies here.", + "\"Yes!\" says the bit.", + "\"No!\" says the bit.", + "A dodecahedron bars your way.", + "Mr. Hooper is here, surfing.", + "It's a big smoking fish.", + "You have new mail in /var/spool/robot", + "Just a monitor with the blue element burnt out.", + "A pile of coaxial plumbing lies here.", + "It's a rotten old shoe.", + "It's a hundred-dollar bill.", + "It's a Dvorak keyboard.", + "It's a cardboard box full of 8-tracks.", + "Just a broken hard drive containg the archives of Nerth Pork.", + "A broken metronome sits here, it's needle off to one side.", + "A sign reads: \"Go home!\"", + "A sign reads: \"No robots allowed!\"", + "It's the handheld robotfindskitten game, by Tiger.", + "This particular monstrosity appears to be ENIAC.", + "This is a tasty-looking banana creme pie.", + "A wireframe model of a hot dog rotates in space here.", + "Just the empty husk of a locust.", + "You disturb a murder of crows.", + "It's a copy of the robotfindskitten EULA.", + "It's Death.", + "It's an autographed copy of \"Secondary Colors,\" by Bob Ross.", + "It is a marzipan dreadnought that appears to have melted and stuck.", + "It's a DVD of \"Crouching Monkey, Hidden Kitten\", region encoded for the moon.", + "It's Kieran Hervold. Damn dyslexia!", + "A non-descript box of crackers.", + "Carbonated Water, High Fructose Corn Syrup, Color, Phosphoric Acid, Flavors, Caffeine.", + "\"Move along! Nothing to see here!\"", + "It's the embalmed corpse of Vladimir Lenin.", + "A coupon for one free steak-fish at your local family diner.", + "A set of keys to a 2001 Rolls Royce. Worthless.", + "A gravestone stands here. \"Izchak Miller, ascended.\"", + "Someone has written \"ad aerarium\" on the ground here.", + "A large blue eye floats in midair.", + "This appears to be a statue of Perseus.", + "There is an opulent throne here.", + "It's a squad of Keystone Kops.", + "This seems to be junk mail addressed to the finder of the Eye of Larn.", + "A wondrous and intricate golden amulet. Too bad you have no neck.", + "The swampy ground around you seems to stink with disease.", + "An animate blob of acid. Being metallic, you keep well away.", + "It's a copy of Knuth with the chapter on kitten-search algorithms torn out.", + "A crowd of people, and at the center, a popular misconception.", + "It's a blind man. When you touch, he exclaims \"It's a kitten prospecting robot!\"", + "It's a lost wallet. It's owner didn't have pets, so you discard it.", + "This place is called Antarctica. There is no kitten here.", + "It's a mousetrap, baited with soap.", + "A book with \"Don't Panic\" in large friendly letters across the cover.", + "A compendium of haiku about metals.", + "A discredited cosmology, relic of a bygone era.", + "A hollow voice says \"Plugh\".", + "A knight who says \"Either I am an insane knave, or you will find kitten.\"", + "A neural net -- maybe it's trying to recognize kitten.", + "A screwdriver.", + "A statue of a girl holding a goose like the one in Gottingen, Germany.", + "A tetradrachm dated \"42 B.C.\"", + "A voice booms out \"Onward, kitten soldiers...\"", + "An eminently forgettable zahir.", + "Apparently, it's Edmund Burke.", + "For a moment, you feel something in your hands, but it disappears!", + "Here is a book about Robert Kennedy.", + "Hey, robot, leave those lists alone.", + "Ho hum. Another synthetic a posteriori.", + "It's Asimov's Laws of Robotics. You feel a strange affinity for them.", + "It's Bach's Mass in B-minor!", + "It's a bug.", + "It's a synthetic a priori truth! Immanuel would be so pleased!", + "It's the Tiki Room.", + "Just some old play by a Czech playwright, and you can't read Czech.", + "Kitten is the letter 'Q'. Oh, wait, maybe not.", + "Quidquid Latine dictum sit, kitten non est.", + "Sutro Tower is visible at some distance through the fog.", + "The Digital Millennium Copyright Act of 1998.", + "The United States Court of Appeals for the Federal Circuit.", + "The non-kitten item like this but with \"false\" and \"true\" switched is true.", + "The non-kitten item like this but with \"true\" and \"false\" switched is false.", + "This is the chapter called \"A Map of the Cat?\" from Feynman's autobiography.", + "This is the forest primeval.", + "Werner's \"Pocket Field Guide to Things That Are Not Kitten\".", + "You found nettik, but that's backwards.", + "You have found some zinc, but you must not stop here, for you must find kitten.", + "\"50 Years Among the Non-Kitten Items\", by Ann Droyd.", + "\"Robot may not injure kitten, or, through inaction, ...\"", + "\"Address Allocation for Private Internets\" by Yakov Rekhter et al.", + "\"Mail Routing and the Domain System\" by Craig Partridge.", + "\"The Theory and Practice of Oligarchical Collectivism\" by Emmanuel Goldstein.", + "\"201 Kitten Verbs, Fully Conjugated\". You look for \"find\".", + "A card shark sits here, practicing his Faro shuffle. He ignores you.", + "A copy of DeCSS. They're a dime a dozen these days.", + "A demonic voice proclaims \"There is no kitten, only Zuul\". You flee.", + "A lotus. You make an interesting pair.", + "A milk carton, with a black and white picture of kitten on the side.", + "Any ordinary robot could see from a mile away that this wasn't kitten.", + "A stegosaurus, escaped from the stegosaurusfindsrobot game. It finds you.", + "Baling wire and chewing gum.", + "Chewing gum and baling wire.", + "Here is no kitten but only rock, rock and no kitten and the sandy road.", + "Hey, I bet you thought this was kitten.", + "It is an ancient mariner, and he stoppeth one of three.", + "It pleases you to be kind to what appears to be kitten -- but it's not!", + "It's a blatant plug for Ogg Vorbis, http://www.vorbis.com/", + "It's a business plan for a new startup, kitten.net.", + "It's a revised business plan for a new startup, my.kitten.net.", + "It's a square.", + "It seems to be a copy of \"A Tail of Two Kitties\".", + "It's the Donation of Constantine!", + "It's this message, nothing more.", + "Lysine, an essential amino acid. Well, maybe not for robots.", + "No kitten here.", + "The score for a Czech composer's \"Kitten-Finding Symphony in C\".", + "This looks like Bradley's \"Appearance and Reality\", but it's really not.", + "This non-kitten item no verb.", + "You feel strangely unfulfilled.", + "You hit the non-kitten item. The non-kitten item fails to yowl.", + "You suddenly yearn for your distant homeland.", + "You've found the snows of yesteryear! So that's where they all went to.", + "Approaching. One car. J. Followed by. Two car. M, M. In five. Minutes.", + "Free Jon Johansen!", + "Free Dmitry Sklyarov!", + "One person shouts \"What do we want?\" The crowd answers \"Free Dmitry!\"", + "Judith Platt insults librarians.", + "This map is not the territory.", + "\"Go back to Libraria!\", says Pat Schroeder.", + "This is a porcelain kitten-counter. 0, 0, 0, 0, 0...", + "An old bootable business card, unfortunately cracked down the middle.", + "A kitten sink, for washing kitten (if only kitten liked water).", + "A kitten source (to match the kitten sink).", + "If it's one thing, it's not another.", + "If it's not one thing, it's another.", + "A caboodle.", + "A grin.", + "A hedgehog. It looks like it knows something important.", + "You've found... Oh wait, that's just a cat.", + "Robot should not be touching that.", + "Air Guitar!!! NA na NA na!!", + "An aromatherapy candle burns with healing light.", + "You find a bright shiny penny.", + "It's a free Jon Johansen!", + "It's a free Dmitry Sklyarov!", + "The rothe hits! The rothe hits!", + "It's an Internet chain letter about sodium laureth sulfate.", + "Ed Witten sits here, pondering string theory.", + "Something is written here in the dust. You read: \"rJbotf ndQkttten\".", + "We wish you a merry kitten, and a happy New Year!", + "Run away! Run away!", + "You can see right through this copy of Brin\'s \"Transparent Society\".", + "This copy of \"Steal This Book\" has been stolen from a bookstore.", + "It's Roya Naini.", + "This kit is the fourteenth in a series of kits named with Roman letters.", + "This is the tenth key you've found so far.", + "You find a fraud scheme in which loans are used as security for other loans.", + "It's the phrase \"and her\", written in ancient Greek.", + "It's the author of \"Randomness and Mathematical Proof\".", + "It's the crusty exoskeleton of an arthropod!", + "It's Emporer Shaddam the 4th's planet!", + "It's the triangle leg adjacent to an angle divided by the leg opposite it.", + "It's a bottle of nail polish remover.", + "You found netkit! Way to go, robot!", + "It's the ASCII Floating Head of Seth David Schoen!", + "A frosted pink party-cake, half eaten.", + "A bitchin' homemade tesla coil.", + "Conan O'Brian, sans jawbone.", + "It's either a mirror, or another soulless kitten-seeking robot.", + "Preoccupation with finding kitten prevents you from investigating further.", + "Fonzie sits here, mumbling incoherently about a shark and a pair of waterskis.", + "The ghost of your dance instructor, his face a paper-white mask of evil.", + "A bag of groceries taken off the shelf before the expiration date.", +/* Exclude some messages on targets with less RAM */ +#if PLUGIN_BUFFER_SIZE > 0x8000 + "A book: Feng Shui, Zen: the art of randomly arranging items that are not kitten.", + "This might be the fountain of youth, but you'll never know.", + "Tigerbot Hesh.", + "Stimutacs.", + "A canister of pressurized whipped cream, sans whipped cream.", + "The non-kitten item bites!", + "A chain hanging from two posts reminds you of the Gateway Arch.", + "A mathematician calculates the halting probability of a Turing machine.", + "A number of short theatrical productions are indexed 1, 2, 3, ... n.", + "A technical university in Australia.", + "It is -- I just feel something wonderful is about to happen.", + "It's a Cat 5 cable.", + "It's a U.S. president.", + "It's a piece of cloth used to cover a stage in between performances.", + "The ionosphere seems charged with meaning.", + "This tomography is like, hella axial, man!", + "It's your favorite game -- robotfindscatan!", + "Just a man selling an albatross.", + "The intermission from a 1930s silent movie.", + "It's an inverted billiard ball!", + "The spectre of Sherlock Holmes wills you onwards.", +#endif +}; diff --git a/docs/CREDITS b/docs/CREDITS index bfa00b370e..cb12c9688b 100644 --- a/docs/CREDITS +++ b/docs/CREDITS @@ -359,3 +359,4 @@ The ALAC decoder team The UCL team The iPod Linux team The Vision-8 Emulator team +The robotfindskitten team diff --git a/manual/plugins/images/ss-robotfindskitten-112x64x1.png b/manual/plugins/images/ss-robotfindskitten-112x64x1.png new file mode 100644 index 0000000000000000000000000000000000000000..eb066e7b144d63983c858d4331927298dd272c10 GIT binary patch literal 445 zcmV;u0Yd(XP)-Q4ZnMUp~rie*0j zoquNM4g_FZ2_cXGKmlU}f=`1f^yhD*_m`7y=kYVq3eFC6bUut@luebP9`>J5eyLuL zbyiXJVy>M;i|dE(Bv>elVJ$`}aEms86b9LiF=Di;K7AciII2I7=gk3M*0+*mv@?{l zrFqPY4}-`k4Qfft3T*~;njX)iptu}vZlxIkMUiJ-?|xfBQ9lcm3Rpsf~46$ zbih6!M*u%vUCt2gNgTOxeoy+WpzIRwx+}in?;Ss2;qWK?+T7=88ua^cJd)BIrZ6q!W^I3|^Vpc`khNTU+ n3md=uNnC@Viue~?bFRb>8+=ML(96Rk00000NkvXXu0mjf1>n7e literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-robotfindskitten-128x128x16.png b/manual/plugins/images/ss-robotfindskitten-128x128x16.png new file mode 100644 index 0000000000000000000000000000000000000000..08661a1c5d4e5546f7cf977db14a882aae219a51 GIT binary patch literal 977 zcmV;?11|iDP)BF<7i(Oi4te#y-x!3kX~Gua*L)XqWLw{d%v7p zbXemhhq02CI7?vVs`xO;x|m%Ovf4E^a3zsko{FZqJb57|^5^@N3k%UIE@Ihl2`Q>w ztQSfA^{^$cmhkqFVqS?nyYknS&Cixykg)OYW*t}F_UhJ1UTTfKZambbyyYwH|bm!^fRIU~3-X znrmFI*+W8}&emMPIA^BOH&PD(0001N;?2&{0YJ|6?%|JG#iw(doAN`UUsMv8J}zi_ zFn|~qmP^E*hqd>)8ExL+qWe}^?!g5w5J^-P5@G|y`}yH0dCL34u+j-j>VASGd%;9( zt?BX-f0t?z=}7DqLwf8>9(MP~%2VDSh7}j&ombgFt@v0hkAein0dl4@dFZdxeS6%g zxTu4&(h2t=h=wvBFqZ*t=pE)Vzzx9wV&*bHh_(O#0000007GFq+QwW<5jUjwV<}X8 zCGuxHZU`<&3*6000000C1F$Jfpn460`IAQBXeE9K!$K1QeD-_YELj zLmm5Rl`^de~yNDN@$gH2w4^I$3Z2|mm5aX~(>1zdMO;J7vyykEDUr@HZV*Z9=8 zM~;0bptr;?ktc9LAVS`dPsnLR=EvO=Hd5{@AO4F{8W1^hMVI<0O3gWBTU#u0##=d$ zb3x8I@2!-+d!_+QalQ{I)g%9M{nk4GQ;h%s?!t2KL@mW5q3C5$^d`UzCcq2;b76YE zDuJ(rnqXKzW8krrTfn<-g9)1louLIZ;7>m6F(2b*0O9b7lh6VhpaYl~qXxD4M?X)& z!k_yLgPZbVFn|~gAO-`7F*?Rz6a)Yl@%{IE-NI-Oo0R*{zaMo8JP%qx3@zY!&;kHJ zg~2y1_Ow}0AetJ7z`jru-eY|dB70Amz1nd?`-(I00000NkvXXu0mjfAo{(! literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-robotfindskitten-132x80x16.png b/manual/plugins/images/ss-robotfindskitten-132x80x16.png new file mode 100644 index 0000000000000000000000000000000000000000..029e4137bd909fc714c966b6bbecca2174a3bb5f GIT binary patch literal 802 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 a*yV31)OlQDvi{!YgYWI(hio{0F7sbPFP3uv literal 0 HcmV?d00001 diff --git a/manual/plugins/images/ss-robotfindskitten-320x240x16.png b/manual/plugins/images/ss-robotfindskitten-320x240x16.png new file mode 100644 index 0000000000000000000000000000000000000000..1239b87cde49359ad4bf0dedadc589e52e6a5abc GIT binary patch literal 1499 zcmaKrdpOg39LIlBQLf#PVW)afuF*^`OKG_*MllOnl51po%w-#*vk0R+nUq|1G(Aiv zml5Wc$2uX`+%F+#<~kL#CC<)qod3@GKF{~_`hGvp=Xrm=-}m$VCORUmW%euY2LM3E z)&_nR0L0FV);!5wqPXdxWiGBg?>^e1lyEb1(T=|`Q=RU9yJoU9V^&q$DEL+4OEx4Y zDWgu$oZc7xbA!Xt^2JV0QIMM3@V_8S(YdY)Bn=IUwb0P89==P|US^()!J_zOz#ZoxqJ=pCh%0z9f! zk}wT2jgqZlGy3oVk=b#F(?CxnTr03{U0~2$7k=q*X5XEFLND(=Nt_(J@R{kKCS| zwTS|Dg@uzYOwryfiJvQE4g@atPPf)>ddbxZHiDQ?egvX=a?V@gU0_02Amj6JPs!^6 z-x2VM?1pprkJ`_ci!bMf9E|ZEX?pFF_(*$_33tm;9-Z3_CCr=fiXm zf<_1JCyc{Vo*5P!FcYZZT*?ii==-+f=T}uR5++n$9VBb$d!IAX^<+geq;RO5ExbYL zNu1#{>aqe0F+(^l_3Q5I2;ClTf55HWih=;v99yTvsAa%7RKdX`05jYpWGjt_>_M{z zO51ApMm_XUi&Jqfr6-I2gJ`JuOqU}*yQ!TL2XWVKO58vz0)t54B765~oZSw@w@d#s znj^>@jvy?I7PnZ>&;xKwNvVp1?;r#jY8*%tEsc~`pMaH72-1iw|&O{0Ujc7H## z9LRhN&9#*a+OXqDQ%%y2L2&J{96%0aDTrM%o{fvk5|G`sA!q9(Hdi|tE1aWneFsC8=R%#} zds{z#3=X%*$2VBy`Vu$<&sCH6cvy%XG-o;vr9t9df$@qDSQIG|{>c0F&lDYVa7~cqQS?Qh24siL|*?#rdPx{!TmFD?|=)?zi#;2Z`cD-4qOErd)RT;-1 z@i(&#Nasi*(~2jW+Mif7cAubk0gO?px0UNv95o1P_A*&;$4c$Q-3ZI7W-W;5A@oXw zdd`xYz8$YJ3hwyVjGd<21ba`j!+Z6ECzi`uTLc&WdJ@5YsHwmZ& literal 0 HcmV?d00001 diff --git a/manual/plugins/main.tex b/manual/plugins/main.tex index f1aa7c53d8..5a62138340 100644 --- a/manual/plugins/main.tex +++ b/manual/plugins/main.tex @@ -42,6 +42,8 @@ text files, chip8 games), or from the \setting{Open with} option on the \opt{HAVE_LCD_BITMAP}{\input{plugins/pong.tex}} +\opt{HAVE_LCD_BITMAP}{\input{plugins/robotfindskitten.tex}} + {\input{plugins/rockblox.tex}} \opt{HAVE_LCD_BITMAP}{\input{plugins/sliding.tex}} diff --git a/manual/plugins/robotfindskitten.tex b/manual/plugins/robotfindskitten.tex new file mode 100644 index 0000000000..2a53584008 --- /dev/null +++ b/manual/plugins/robotfindskitten.tex @@ -0,0 +1,21 @@ +% $Id: robotfindskitten.tex 14738 2007-09-17 21:47:48Z rasher $ % +\subsection{Robotfindskitten} +\screenshot{plugins/images/ss-robotfindskitten}{Robotfindskitten}{img:robotfindskitten} +In this game, you are robot (\#). Your job is to find kitten. This task +is complicated by the existence of various things which are not kitten. +Robot must touch items to determine if they are kitten or not. The game +ends when robotfindskitten. + +\begin{table} +\begin{btnmap}{}{} + \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu, \ButtonPlay,} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,RECORDER_PAD,ONDIO_PAD,GIGABEAT_PAD}{\ButtonUp, \ButtonDown,}% + \opt{IRIVER_H10_PAD}{\ButtonScrollUp, \ButtonScrollDown,} + \ButtonLeft, \ButtonRight + & Move robot\\ + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,RECORDER_PAD,ONDIO_PAD}{\ButtonOff} + \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} + \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,GIGABEAT_PAD}{\ButtonPower} + & Quit\\ +\end{btnmap} +\end{table}