#include <Adafruit_SSD1306.h>
#include <Wire.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
#define ICON_SIZE 24 // For menu icons
#define SPRITE_SIZE 48 // For the dog sprite
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Button definitions
#define BUTTON_1 5 // Enter menu or cycle icons
#define BUTTON_2 6 // Select icon
#define BUTTON_3 7 // Escape to sprite movement
// Size definitions
#define EGG_WIDTH 40 // For egg phases
#define EGG_HEIGHT 53 // For egg phases
unsigned long lastBathTime = 0; // Global variable to track when the last bath was taken
bool firstBath = true; // Flag to allow the first bath without time restriction
unsigned long lastInteractionTime = 0;
//to track time when sleep mode
unsigned long sleepStartTime = 0;
enum EggPhase {
EGG,
EGG_CRACK,
CRACKED,
BABY,
ADULT
};
enum GameState {
HATCHING_MODE, // New initial state for egg sequence
SPRITE_MODE,
MENU_MODE,
STATS_MODE,
TIME_MODE,
SLEEP_MODE,
GAME_SUBMENU_MODE
};
// Menu item structure
struct MenuItem {
const uint8_t* icon;
const unsigned char* sprite; // Add this for the sprite
const char* label;
void (*action)();
};
// Game state structure
struct GameData {
GameState state;
EggPhase eggPhase;
unsigned long hatchingStartTime;
int spriteX;
bool movingRight;
uint8_t selectedIcon;
unsigned long lastUpdate;
bool useInvertedSprite;
uint8_t healthLevel;
uint8_t hungerLevel;
uint8_t happinessLevel;
uint8_t ageLevel;
uint8_t smartLevel;
uint8_t hours;
uint8_t minutes;
unsigned long lastMinuteUpdate;
bool isSick;
bool needsPoop;
bool isSad;
unsigned long lastStateUpdate; // For periodic state updates
unsigned long lastHealthDrop; // For tracking health decrease intervals
unsigned long lastInteractionTime; // Track last interaction for sleep mode
float ageYears; // Age in years, using float for precision
bool inDisplaySleep; // New flag for display sleep mode
unsigned long money; // Money in the game
uint8_t sicknessCountToday;
unsigned long lastSicknessTime;
};
struct FoodItem {
const unsigned char* sprite;
bool increasesPoopChance;
};
uint8_t currentFoodItem = 0; // Index for the current selected food item
// Initialize game data
GameData gameData = {
HATCHING_MODE, // Start in hatching mode
EGG, // Start with egg phase
0, // Will be set in setup()
(SCREEN_WIDTH - SPRITE_SIZE) / 2,
true,
0,
0,
false,
3,
3,
3,
0,
0,
12,
0,
0,
false, // isSick
false, // needsPoop
false, // isSad
0, // lastStateUpdate
0, // lastHealthDrop
0, // lastInteractionTime
0.0 // ageYears
};
// State check constants
const uint8_t CRITICAL_THRESHOLD = 20; // 20% threshold for critical states
const unsigned long STATE_UPDATE_INTERVAL = 10000; // Check states every 10 seconds
const unsigned long HEALTH_DROP_INTERVAL = 1000; // Check health every second
// GAME##########
#define BALL_SIZE 8 // Example size for ball
#define PUPPY_WIDTH 32 // Size of puppy sprite
#define PUPPY_HEIGHT 32 // Size of puppy sprite
#define JUMP_HEIGHT 15 // Height of jump
int ballX = 0;
int ballY = 10;
int ballDirection = 1;
int puppyX = (SCREEN_WIDTH - PUPPY_WIDTH) / 2; // Center the puppy
int puppyY = SCREEN_HEIGHT - PUPPY_HEIGHT;
bool isJumping = false;
int jumpCounter = 0;
// GAME#############
// Function to draw time
void drawTime() {
display.clearDisplay();
display.setTextSize(3); // Larger text for time display
display.setTextColor(WHITE);
// Calculate center position
int16_t x1, y1;
uint16_t w, h;
char timeStr[6];
sprintf(timeStr, "%02d:%02d", gameData.hours, gameData.minutes);
display.getTextBounds(timeStr, 0, 0, &x1, &y1, &w, &h);
int x = (SCREEN_WIDTH - w) / 2;
int y = (SCREEN_HEIGHT - h) / 2;
display.setCursor(x, y);
display.print(timeStr);
}
// Update pet state function
void updatePetState() {
if (!gameData.inDisplaySleep) { // Only update stats when not in display sleep
unsigned long currentTime = millis();
// Check if it's a new day to reset sickness count
if (gameData.hours == 0 && gameData.minutes == 0) {
gameData.sicknessCountToday = 0;
}
if (currentTime - gameData.lastStateUpdate >= STATE_UPDATE_INTERVAL) {
gameData.lastStateUpdate = currentTime;
// Calculate percentages
uint8_t hungerPercent = (gameData.hungerLevel * 100) / 5;
uint8_t happyPercent = (gameData.happinessLevel * 100) / 5;
uint8_t healthPercent = (gameData.healthLevel * 100) / 5;
// Update sad state based on conditions
gameData.isSad = (hungerPercent < CRITICAL_THRESHOLD ||
happyPercent < CRITICAL_THRESHOLD ||
healthPercent < CRITICAL_THRESHOLD);
if (currentTime - gameData.lastHealthDrop >= HEALTH_DROP_INTERVAL) {
gameData.lastHealthDrop = currentTime;
// Health drops if hunger or happiness is critical
if (hungerPercent < CRITICAL_THRESHOLD || happyPercent < CRITICAL_THRESHOLD) {
if (gameData.healthLevel > 0) {
gameData.healthLevel--;
}
}
// Health drop for poop state
if (gameData.needsPoop && gameData.healthLevel > 1) {
if (currentTime - gameData.lastStateUpdate >= 3600000) { // 1 hour
gameData.healthLevel = max(gameData.healthLevel - 1, 1);
gameData.lastStateUpdate = currentTime;
}
}
// Handle sickness
if (gameData.isSick) {
// Health and happiness deteriorate faster when sick
if (gameData.healthLevel > 0) {
gameData.healthLevel = max(gameData.healthLevel - 2, 0); // Faster health deterioration
}
if (gameData.happinessLevel > 0) {
gameData.happinessLevel = max(gameData.happinessLevel - 1, 0); // Happiness also decreases
}
// Check if pet has been sick for more than 3-4 hours (3 hours here for example)
if (currentTime - gameData.lastSicknessTime >= 10800000) { // 3 hours in milliseconds
gameData.healthLevel = 0; // Health goes to zero
gameData.happinessLevel = 0; // Happiness goes to zero
}
}
}
// Happiness drops due to poop state
if (gameData.needsPoop) {
if (currentTime - gameData.lastStateUpdate >= 1800000) { // 30 minutes
if (gameData.happinessLevel > 0) {
gameData.happinessLevel = max(gameData.happinessLevel - 1, 0);
}
gameData.lastStateUpdate = currentTime;
}
}
// Happiness drop when hunger is 0
if (gameData.hungerLevel == 0) {
if (currentTime - gameData.lastStateUpdate >= 900000) { // 15 minutes
if (gameData.happinessLevel > 0) {
gameData.happinessLevel = 0;
}
gameData.lastStateUpdate = currentTime;
}
}
// Auto-happiness boost if well fed
if (hungerPercent >= CRITICAL_THRESHOLD && gameData.happinessLevel < 1) {
gameData.happinessLevel = 1;
}
// Randomly make pet sick up to twice a day
if (!gameData.isSick && gameData.sicknessCountToday < 2 && random(1000) < 1) { // 0.1% chance per update
gameData.isSick = true;
gameData.sicknessCountToday++;
gameData.lastSicknessTime = currentTime;
// Optionally, you can show some sign of sickness here
}
}
}
}
// Debouncing variables
unsigned long lastDebounceTime[3] = {0, 0, 0};
const unsigned long debounceDelay = 50;
const unsigned long FRAME_DELAY = 50;
//egg 40x53
const unsigned char egg_sprite [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x01, 0xff, 0x80, 0x00, 0x00,
0x07, 0xff, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x3f,
0xff, 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff,
0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff,
0xc0, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xe0,
0x0f, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f,
0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff,
0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff,
0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff,
0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe,
0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f,
0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff,
0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff,
0xe0, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0x00,
0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00,
0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
//egg_crack 40x53
const unsigned char egg_crack_sprite [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00,
0x03, 0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x1f,
0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x7e, 0xff,
0xf0, 0x00, 0x00, 0x00, 0xfc, 0x23, 0x00, 0x00, 0x01, 0xfe, 0x06, 0x00, 0x03, 0xe7, 0xff, 0x0c,
0xe0, 0x03, 0xe7, 0xff, 0x9d, 0xe0, 0x07, 0xc7, 0xff, 0xd9, 0xf0, 0x07, 0x87, 0xff, 0xf9, 0xf0,
0x0f, 0x87, 0xff, 0xf8, 0xf8, 0x0f, 0xff, 0xef, 0xfc, 0x78, 0x1c, 0x7f, 0xe7, 0xfe, 0x3c, 0x18,
0xff, 0xe3, 0xff, 0x1c, 0x11, 0xff, 0xf3, 0xfe, 0x0c, 0x23, 0xff, 0xfb, 0xfc, 0x60, 0x03, 0xff,
0xff, 0xf8, 0xe0, 0x0f, 0xfb, 0xff, 0xff, 0xfe, 0x3f, 0xf8, 0xff, 0xff, 0xfe, 0x7f, 0xfc, 0x7f,
0xff, 0xfe, 0x7f, 0xfe, 0x3f, 0xff, 0xff, 0x7f, 0xff, 0x3f, 0xff, 0xff, 0x73, 0xff, 0x1f, 0xff,
0xf7, 0x73, 0xff, 0x1f, 0xbf, 0xf7, 0x73, 0xf8, 0x1f, 0x9f, 0xb6, 0x72, 0x00, 0x07, 0x0f, 0x30,
0x60, 0x00, 0xe7, 0x80, 0x00, 0x00, 0x1f, 0xf1, 0xc0, 0xff, 0x7f, 0xff, 0xf8, 0xf3, 0xff, 0x7f,
0xff, 0xfc, 0x73, 0xfe, 0x3f, 0xff, 0xff, 0x03, 0xfe, 0x3f, 0xff, 0xff, 0xef, 0xfe, 0x3f, 0xff,
0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff,
0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xff, 0xff, 0xff,
0xf0, 0x03, 0xff, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0x80,
0x00, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'cracked_40_53', 40x53px
const unsigned char cracked_sprite [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x7e, 0x00, 0xe0, 0x0f,
0x00, 0x00, 0x01, 0xf0, 0x09, 0x80, 0x00, 0x03, 0x30, 0x08, 0xc0, 0x00, 0x06, 0x10, 0x18, 0x60,
0x00, 0x0e, 0x10, 0x18, 0x30, 0x00, 0x1c, 0x10, 0x10, 0x3f, 0xff, 0xf8, 0x10, 0x10, 0x7f, 0xff,
0xfc, 0x18, 0x10, 0xff, 0xff, 0xff, 0x18, 0x13, 0xff, 0xff, 0xff, 0x98, 0x1f, 0xff, 0xff, 0xff,
0xf8, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xf8,
0x1f, 0xf1, 0xff, 0xc7, 0xf8, 0x3f, 0xd8, 0xff, 0x63, 0xf8, 0x3f, 0xc0, 0xff, 0x03, 0xfc, 0x3f,
0xc0, 0xff, 0x03, 0xfc, 0x3f, 0xe1, 0xff, 0x87, 0xfc, 0x7f, 0xff, 0xff, 0xdf, 0xfc, 0x7f, 0xff,
0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0x81, 0xff, 0xfc, 0x3f, 0xff, 0xc1,
0xff, 0xfc, 0x3f, 0xff, 0xfb, 0xff, 0xfc, 0x5f, 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff,
0xf6, 0x7f, 0xff, 0xff, 0xff, 0xee, 0x7f, 0xff, 0xff, 0xff, 0xce, 0x7f, 0xff, 0xff, 0xff, 0xfe,
0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0x7f,
0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff,
0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff,
0xe0, 0x07, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0x80,
0x00, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00,
0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'baby_48_48', 48x48px
const unsigned char baby_sprite [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x00, 0x00,
0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0d, 0x80, 0x00, 0x00, 0x03, 0xb0, 0x08, 0xc0,
0x00, 0x00, 0x07, 0x30, 0x18, 0x60, 0x00, 0x00, 0x0e, 0x30, 0x18, 0x30, 0x00, 0x00, 0x1c, 0x10,
0x18, 0x18, 0x00, 0x00, 0x38, 0x18, 0x18, 0x1c, 0x00, 0x00, 0x30, 0x18, 0x10, 0x0e, 0x7f, 0xfe,
0x70, 0x18, 0x10, 0x0f, 0xff, 0xff, 0xf0, 0x18, 0x30, 0x3f, 0xff, 0xff, 0xfc, 0x18, 0x30, 0xff,
0xff, 0xff, 0xfe, 0x18, 0x31, 0xff, 0xff, 0xff, 0xff, 0x18, 0x33, 0xff, 0xff, 0xff, 0xff, 0x98,
0x37, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xf8, 0x7f, 0xfc, 0x1f, 0xf8, 0x3f, 0xf6,
0x3f, 0xf9, 0x0f, 0xf8, 0x3f, 0xee, 0x1f, 0xfb, 0x8f, 0xfc, 0x7f, 0xe6, 0x1f, 0xf1, 0x07, 0xfc,
0x7f, 0xe0, 0x1f, 0xf8, 0x07, 0xfe, 0x7f, 0xe0, 0x1f, 0xf8, 0x0f, 0xfe, 0x7f, 0xf0, 0x3f, 0xfc,
0x0f, 0xfe, 0x7f, 0xf8, 0x7f, 0xfe, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xf0, 0x0f, 0xff, 0xfe, 0x7f, 0xff, 0xe0, 0x0f, 0xff, 0xfe,
0x7f, 0xff, 0xf0, 0x0f, 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0x1f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f,
0xff, 0xf8, 0x1f, 0xff, 0xfe, 0x7f, 0xff, 0xf8, 0x1f, 0xff, 0x7e, 0xff, 0xff, 0xf0, 0x0f, 0xff,
0xbe, 0x79, 0xff, 0xf0, 0x07, 0xff, 0xc1, 0x87, 0xff, 0xe0, 0x03, 0xff, 0xef, 0xf7, 0xff, 0xc0,
0x01, 0xff, 0xf7, 0xcf, 0xff, 0x80, 0x00, 0xff, 0xfe, 0x7f, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xff,
0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x84, 0x00, 0x00, 0x78,
0x3f, 0xfc, 0x1c, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x3f, 0xfe, 0x00
};
const unsigned char baby_sprite_inverted [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x20, 0x07, 0x00, 0x00, 0x00,
0x00, 0x70, 0x07, 0x80, 0x00, 0x00, 0x00, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x01, 0xb0, 0x0c, 0xe0,
0x00, 0x00, 0x03, 0x10, 0x0c, 0x70, 0x00, 0x00, 0x06, 0x18, 0x08, 0x38, 0x00, 0x00, 0x0c, 0x18,
0x18, 0x1c, 0x00, 0x00, 0x18, 0x18, 0x18, 0x0c, 0x00, 0x00, 0x38, 0x18, 0x18, 0x0e, 0x7f, 0xfe,
0x70, 0x08, 0x18, 0x0f, 0xff, 0xff, 0xf0, 0x08, 0x18, 0x3f, 0xff, 0xff, 0xfc, 0x0c, 0x18, 0x7f,
0xff, 0xff, 0xff, 0x0c, 0x18, 0xff, 0xff, 0xff, 0xff, 0x8c, 0x19, 0xff, 0xff, 0xff, 0xff, 0xcc,
0x1b, 0xff, 0xff, 0xff, 0xff, 0xec, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xf8, 0x3f, 0xfe, 0x1f, 0xfc, 0x1f, 0xf0,
0x9f, 0xfc, 0x6f, 0xfc, 0x3f, 0xf1, 0xdf, 0xf8, 0x77, 0xfc, 0x3f, 0xe0, 0x8f, 0xf8, 0x67, 0xfe,
0x7f, 0xe0, 0x1f, 0xf8, 0x07, 0xfe, 0x7f, 0xf0, 0x1f, 0xf8, 0x07, 0xfe, 0x7f, 0xf0, 0x3f, 0xfc,
0x0f, 0xfe, 0x7f, 0xfc, 0x7f, 0xfe, 0x1f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xf0, 0x0f, 0xff, 0xfe, 0x7f, 0xff, 0xf0, 0x07, 0xff, 0xfe,
0x3f, 0xff, 0xf0, 0x0f, 0xff, 0xfe, 0x3f, 0xff, 0xf8, 0x1f, 0xff, 0xfc, 0x1f, 0xff, 0xfc, 0x3f,
0xff, 0xfc, 0x1f, 0xff, 0xfe, 0x7f, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0x7e, 0xff, 0xf8, 0x0f, 0xff,
0x9e, 0x7d, 0xff, 0xf0, 0x07, 0xff, 0xe1, 0x83, 0xff, 0xe0, 0x03, 0xff, 0xef, 0xf7, 0xff, 0xc0,
0x01, 0xff, 0xf3, 0xef, 0xff, 0x80, 0x00, 0x7f, 0xfe, 0x7f, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xff,
0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x21, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x38,
0x3f, 0xfc, 0x1e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x7f, 0xfc, 0x1f, 0xfe, 0x00
};
const unsigned char sad_baby_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x00, 0x00,
0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0d, 0x80, 0x00, 0x00, 0x03, 0xb0, 0x08, 0xc0,
0x00, 0x00, 0x07, 0x30, 0x18, 0x60, 0x00, 0x00, 0x0e, 0x30, 0x18, 0x30, 0x00, 0x00, 0x1c, 0x10,
0x18, 0x18, 0x00, 0x00, 0x38, 0x18, 0x18, 0x1c, 0x00, 0x00, 0x30, 0x18, 0x10, 0x0e, 0x7f, 0xfe,
0x70, 0x18, 0x10, 0x0f, 0xff, 0xff, 0xf0, 0x18, 0x30, 0x3f, 0xff, 0xff, 0xfc, 0x18, 0x30, 0xff,
0xff, 0xff, 0xfe, 0x18, 0x31, 0xff, 0xff, 0xff, 0xff, 0x18, 0x33, 0xff, 0xff, 0xff, 0xff, 0x98,
0x37, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xf8, 0x7f, 0xfc, 0x1f, 0xf8, 0x3f, 0xf6,
0x3f, 0xf9, 0x0f, 0xf8, 0x3f, 0xee, 0x1f, 0xfb, 0x8f, 0xfc, 0x7f, 0xe6, 0x1f, 0xf1, 0x07, 0xfc,
0x7f, 0xe0, 0x1f, 0xf8, 0x07, 0xfe, 0x7f, 0xe0, 0x1f, 0xf8, 0x0f, 0xfe, 0x7f, 0xf0, 0x3f, 0xfc,
0x0f, 0xfe, 0x7f, 0xf8, 0x7f, 0xfe, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xf0, 0x0f, 0xff, 0xfe, 0x7f, 0xff, 0xe0, 0x0f, 0xff, 0xfe,
0x7f, 0xff, 0xf0, 0x0f, 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0x1f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f,
0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xfe, 0x7f, 0xff, 0xf0, 0x0f, 0xff,
0xf3, 0xef, 0xff, 0xf0, 0x07, 0xff, 0xef, 0xf7, 0xff, 0xe0, 0x03, 0xff, 0xe1, 0x83, 0xff, 0xc0,
0x01, 0xff, 0x9e, 0x7d, 0xff, 0x80, 0x00, 0xff, 0xff, 0x7e, 0xfe, 0x00, 0x00, 0x3f, 0xfe, 0x7f,
0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x84, 0x00, 0x00, 0x78,
0x3f, 0xfc, 0x1c, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x3f, 0xfe, 0x00
};
const unsigned char sad_baby_sprite_inverted[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x00, 0x00,
0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0d, 0x80, 0x00, 0x00, 0x03, 0xb0, 0x08, 0xc0,
0x00, 0x00, 0x07, 0x30, 0x18, 0x60, 0x00, 0x00, 0x0e, 0x30, 0x18, 0x30, 0x00, 0x00, 0x1c, 0x10,
0x18, 0x18, 0x00, 0x00, 0x38, 0x18, 0x18, 0x1c, 0x00, 0x00, 0x30, 0x18, 0x10, 0x0e, 0x7f, 0xfe,
0x70, 0x18, 0x10, 0x0f, 0xff, 0xff, 0xf0, 0x18, 0x30, 0x3f, 0xff, 0xff, 0xfc, 0x18, 0x30, 0xff,
0xff, 0xff, 0xfe, 0x18, 0x31, 0xff, 0xff, 0xff, 0xff, 0x18, 0x33, 0xff, 0xff, 0xff, 0xff, 0x98,
0x37, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xf8, 0x7f, 0xfc, 0x1f, 0xf8, 0x3f, 0xf6,
0x3f, 0xf9, 0x0f, 0xf8, 0x3f, 0xee, 0x1f, 0xfb, 0x8f, 0xfc, 0x7f, 0xe6, 0x1f, 0xf1, 0x07, 0xfc,
0x7f, 0xe0, 0x1f, 0xf8, 0x07, 0xfe, 0x7f, 0xe0, 0x1f, 0xf8, 0x0f, 0xfe, 0x7f, 0xf0, 0x3f, 0xfc,
0x0f, 0xfe, 0x7f, 0xf8, 0x7f, 0xfe, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff,
0xff, 0xff, 0xbf, 0xfe, 0x7f, 0xfe, 0x70, 0x0f, 0xbf, 0xfe, 0x7f, 0xfe, 0x60, 0x0f, 0xbf, 0xfe,
0x7f, 0xf6, 0xf0, 0x0f, 0x9f, 0xfc, 0x3f, 0xf7, 0xf8, 0x1f, 0x9f, 0xfc, 0x3f, 0xf7, 0xfc, 0x3f,
0xff, 0xf8, 0x1f, 0xf7, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xf7, 0xfe, 0x7f, 0xff, 0xf0, 0x0f, 0xff,
0xf3, 0xef, 0xff, 0xf0, 0x07, 0xff, 0xef, 0xf7, 0xff, 0xe0, 0x03, 0xff, 0xe1, 0x83, 0xff, 0xc0,
0x01, 0xff, 0x9e, 0x7d, 0xff, 0x80, 0x00, 0xff, 0xff, 0x7e, 0xfe, 0x00, 0x00, 0x3f, 0xfe, 0x7f,
0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x84, 0x00, 0x00, 0x78,
0x3f, 0xfc, 0x1c, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x3f, 0xfe, 0x00
};
// Dog sprite (assumed to be 48x48 now)
const unsigned char dogWalk0 [] PROGMEM = {
0x00, 0x3e, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7f, 0x01, 0x80, 0xfe, 0x00, 0x01, 0xe3, 0x8f, 0xf1,
0xc7, 0x80, 0x03, 0x81, 0xfe, 0x7f, 0x81, 0xc0, 0x07, 0x00, 0x70, 0x0e, 0x00, 0xe0, 0x06, 0x04,
0xe0, 0x07, 0x20, 0x60, 0x0c, 0x0e, 0xc0, 0x03, 0x70, 0x30, 0x0c, 0x0d, 0x80, 0x01, 0xb0, 0x30,
0x18, 0x19, 0x80, 0x01, 0x98, 0x18, 0x18, 0x3b, 0x00, 0x00, 0xdc, 0x18, 0x18, 0x33, 0x00, 0x00,
0xcc, 0x18, 0x18, 0x63, 0x00, 0x00, 0xc6, 0x18, 0x0e, 0xe6, 0x1c, 0x38, 0x67, 0x70, 0x0f, 0xc6,
0x1c, 0x38, 0x63, 0xf0, 0x03, 0x06, 0x08, 0x10, 0x60, 0xc0, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00,
0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x06, 0x01, 0x80, 0x60, 0x00, 0x00, 0x06, 0x07, 0xe0,
0x60, 0x00, 0x00, 0x06, 0x06, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x60, 0x60, 0x00, 0x03, 0x06,
0x07, 0xe0, 0x60, 0x00, 0x03, 0x06, 0x01, 0x80, 0x60, 0x00, 0x03, 0x86, 0x33, 0xcc, 0x60, 0x00,
0x03, 0x86, 0x3f, 0xfc, 0x60, 0x00, 0x03, 0xc3, 0x0c, 0x30, 0xc0, 0x00, 0x03, 0xe3, 0x00, 0x00,
0xc0, 0x00, 0x03, 0x71, 0xc0, 0x03, 0x80, 0x00, 0x01, 0xb0, 0xfc, 0x3f, 0x00, 0x00, 0x01, 0x8e,
0x7f, 0xfe, 0x70, 0x00, 0x00, 0xde, 0x03, 0xc0, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00,
0x00, 0x30, 0x21, 0x84, 0x0c, 0x00, 0x00, 0x30, 0x71, 0x8e, 0x0c, 0x00, 0x00, 0x60, 0x31, 0x8c,
0x06, 0x00, 0x00, 0x60, 0x31, 0x8c, 0x06, 0x00, 0x00, 0x60, 0x31, 0x8c, 0x06, 0x00, 0x00, 0x30,
0x31, 0x8c, 0x0c, 0x00, 0x00, 0x30, 0x31, 0x8c, 0x0c, 0x00, 0x00, 0x30, 0x39, 0x9c, 0x0c, 0x00,
0x00, 0x30, 0x19, 0x98, 0x0c, 0x00, 0x00, 0x38, 0x19, 0x98, 0x1c, 0x00, 0x00, 0x78, 0x7d, 0xbe,
0x1e, 0x00, 0x00, 0xe0, 0xe1, 0x87, 0x07, 0x00, 0x00, 0xc0, 0xc1, 0x83, 0x03, 0x00, 0x00, 0xc2,
0xc3, 0xc3, 0x43, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x00
};
const unsigned char dogWalkInverted [] PROGMEM = {
0x00, 0x3e, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7f, 0x01, 0x80, 0xfe, 0x00, 0x01, 0xe3, 0x8f, 0xf1,
0xc7, 0x80, 0x03, 0x81, 0xfe, 0x7f, 0x81, 0xc0, 0x07, 0x00, 0x70, 0x0e, 0x00, 0xe0, 0x06, 0x04,
0xe0, 0x07, 0x20, 0x60, 0x0c, 0x0e, 0xc0, 0x03, 0x70, 0x30, 0x0c, 0x0d, 0x80, 0x01, 0xb0, 0x30,
0x18, 0x19, 0x80, 0x01, 0x98, 0x18, 0x18, 0x3b, 0x00, 0x00, 0xdc, 0x18, 0x18, 0x33, 0x00, 0x00,
0xcc, 0x18, 0x18, 0x63, 0x00, 0x00, 0xc6, 0x18, 0x0e, 0xe6, 0x1c, 0x38, 0x67, 0x70, 0x0f, 0xc6,
0x1c, 0x38, 0x63, 0xf0, 0x03, 0x06, 0x08, 0x10, 0x60, 0xc0, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00,
0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x06, 0x01, 0x80, 0x60, 0x00, 0x00, 0x06, 0x07, 0xe0,
0x60, 0x00, 0x00, 0x06, 0x06, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x60, 0x60, 0x00, 0x00, 0x06,
0x07, 0xe0, 0x60, 0xc0, 0x00, 0x06, 0x01, 0x80, 0x60, 0xc0, 0x00, 0x06, 0x33, 0xcc, 0x61, 0xc0,
0x00, 0x06, 0x3f, 0xfc, 0x61, 0xc0, 0x00, 0x03, 0x0c, 0x30, 0xc3, 0xc0, 0x00, 0x03, 0x00, 0x00,
0xc7, 0xc0, 0x00, 0x01, 0xc0, 0x03, 0x8e, 0xc0, 0x00, 0x00, 0xfc, 0x3f, 0x0d, 0x80, 0x00, 0x0e,
0x7f, 0xfe, 0x71, 0x80, 0x00, 0x1e, 0x03, 0xc0, 0x7b, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00,
0x00, 0x30, 0x21, 0x84, 0x0c, 0x00, 0x00, 0x30, 0x71, 0x8e, 0x0c, 0x00, 0x00, 0x60, 0x31, 0x8c,
0x06, 0x00, 0x00, 0x60, 0x31, 0x8c, 0x06, 0x00, 0x00, 0x60, 0x31, 0x8c, 0x06, 0x00, 0x00, 0x30,
0x31, 0x8c, 0x0c, 0x00, 0x00, 0x30, 0x31, 0x8c, 0x0c, 0x00, 0x00, 0x30, 0x39, 0x9c, 0x0c, 0x00,
0x00, 0x30, 0x19, 0x98, 0x0c, 0x00, 0x00, 0x38, 0x19, 0x98, 0x1c, 0x00, 0x00, 0x78, 0x7d, 0xbe,
0x1e, 0x00, 0x00, 0xe0, 0xe1, 0x87, 0x07, 0x00, 0x00, 0xc0, 0xc1, 0x83, 0x03, 0x00, 0x00, 0xc2,
0xc3, 0xc3, 0x43, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x00
};
const unsigned char sad_dog_sprite[] PROGMEM = {
0x00, 0x3e, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7f, 0x01, 0x80, 0xfe, 0x00, 0x01, 0xe3, 0x8f, 0xf1,
0xc7, 0x80, 0x03, 0x81, 0xfe, 0x7f, 0x81, 0xc0, 0x07, 0x00, 0x70, 0x0e, 0x00, 0xe0, 0x06, 0x04,
0xe0, 0x07, 0x20, 0x60, 0x0c, 0x0e, 0xc0, 0x03, 0x70, 0x30, 0x0c, 0x0d, 0x80, 0x01, 0xb0, 0x30,
0x18, 0x19, 0x80, 0x01, 0x98, 0x18, 0x18, 0x3b, 0x00, 0x00, 0xdc, 0x18, 0x18, 0x33, 0x00, 0x00,
0xcc, 0x18, 0x18, 0x63, 0x00, 0x00, 0xc6, 0x18, 0x0e, 0xe6, 0x1c, 0x38, 0x67, 0x70, 0x0f, 0xc6,
0x1c, 0x38, 0x63, 0xf0, 0x03, 0x06, 0x08, 0x10, 0x60, 0xc0, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00,
0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x00, 0x06, 0x01, 0x80, 0x60, 0x00, 0x00, 0x06, 0x07, 0xe0,
0x60, 0x00, 0x00, 0x06, 0x06, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x60, 0x60, 0x00, 0x03, 0x06,
0x07, 0xe0, 0x60, 0x00, 0x03, 0x06, 0x01, 0x80, 0x60, 0x00, 0x03, 0x86, 0x33, 0xcc, 0x60, 0x00,
0x03, 0x86, 0x3f, 0xfc, 0x60, 0x00, 0x03, 0xc3, 0x0c, 0x30, 0xc0, 0x00, 0x03, 0xe3, 0x00, 0x00,
0xc0, 0x00, 0x03, 0x71, 0xc0, 0x03, 0x80, 0x00, 0x01, 0xb0, 0xfc, 0x3f, 0x00, 0x00, 0x01, 0x8e,
0x7f, 0xfe, 0x70, 0x00, 0x00, 0xde, 0x03, 0xc0, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00,
0x00, 0x30, 0x21, 0x84, 0x0c, 0x00, 0x00, 0x30, 0x71, 0x8e, 0x0c, 0x00, 0x00, 0x60, 0x31, 0x8c,
0x06, 0x00, 0x00, 0x60, 0x31, 0x8c, 0x06, 0x00, 0x00, 0x60, 0x31, 0x8c, 0x06, 0x00, 0x00, 0x30,
0x31, 0x8c, 0x0c, 0x00, 0x00, 0x30, 0x31, 0x8c, 0x0c, 0x00, 0x00, 0x30, 0x39, 0x9c, 0x0c, 0x00,
0x00, 0x30, 0x19, 0x98, 0x0c, 0x00, 0x00, 0x38, 0x19, 0x98, 0x1c, 0x00, 0x00, 0x78, 0x7d, 0xbe,
0x1e, 0x00, 0x00, 0xe0, 0xe1, 0x87, 0x07, 0x00, 0x00, 0xc0, 0xc1, 0x83, 0x03, 0x00, 0x00, 0xc2,
0xc3, 0xc3, 0x43, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x00
};
//sick and poop sprite also 48x48
const unsigned char sick_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x00, 0x00,
0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0d, 0x80, 0x00, 0x00, 0x03, 0xb0, 0x08, 0xc0,
0x00, 0x00, 0x07, 0x30, 0x18, 0x60, 0x00, 0x00, 0x0e, 0x30, 0x18, 0x30, 0x00, 0x00, 0x1c, 0x10,
0x18, 0x18, 0x00, 0x00, 0x38, 0x18, 0x18, 0x1c, 0x00, 0x00, 0x30, 0x18, 0x10, 0x0e, 0x7f, 0xfe,
0x70, 0x18, 0x10, 0x0f, 0xff, 0xff, 0xf0, 0x18, 0x30, 0x3f, 0xff, 0xff, 0xfc, 0x18, 0x30, 0xff,
0xff, 0xe7, 0xbe, 0x18, 0x31, 0xff, 0xff, 0xe2, 0x3f, 0x18, 0x33, 0xff, 0xff, 0xf8, 0xff, 0x98,
0x37, 0xff, 0xff, 0xe0, 0x0f, 0xd8, 0x3f, 0xff, 0xff, 0xcf, 0xcf, 0xf8, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xf8, 0x7f, 0xfc, 0x1f, 0xf8, 0x3f, 0xf6,
0x3f, 0xf9, 0x0f, 0xf8, 0x3f, 0xee, 0x1f, 0xfb, 0x8f, 0xfc, 0x7f, 0xe6, 0x1f, 0xf1, 0x07, 0xfc,
0x7f, 0xe0, 0x1f, 0xf8, 0x07, 0xfe, 0x7f, 0xe0, 0x1f, 0xf8, 0x0f, 0xfe, 0x7f, 0xf0, 0x3f, 0xfc,
0x0f, 0xfe, 0x7f, 0xf8, 0x7f, 0xfe, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xf0, 0x0f, 0xff, 0xfe, 0x7f, 0x0f, 0xe0, 0x0f, 0xff, 0xfe,
0x7f, 0x67, 0xf0, 0x0f, 0xff, 0xfc, 0x3f, 0x73, 0xf8, 0x1f, 0xff, 0xfc, 0x3f, 0x18, 0xfc, 0x3f,
0xff, 0xf8, 0x1f, 0x8e, 0x7f, 0xff, 0xff, 0xf8, 0x1f, 0xc3, 0x1e, 0x7f, 0xff, 0xf0, 0x0f, 0xf1,
0xc3, 0xef, 0xff, 0xf0, 0x07, 0xfc, 0xe7, 0xf7, 0xff, 0xe0, 0x03, 0xfe, 0x21, 0x83, 0xff, 0xc0,
0x01, 0xff, 0x1e, 0x7d, 0xff, 0x80, 0x00, 0xff, 0xff, 0x7e, 0xfe, 0x00, 0x00, 0x3f, 0xfe, 0x7f,
0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x84, 0x00, 0x00, 0x78,
0x3f, 0xfc, 0x1c, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x3f, 0xfe, 0x00
};
const unsigned char poop_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8,
0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xff, 0x87, 0x80, 0x00, 0x00, 0x01,
0xfe, 0x1f, 0xc0, 0x00, 0x00, 0x01, 0xf8, 0x7f, 0xe0, 0x00, 0x00, 0x01, 0xf1, 0xff, 0xe0, 0x00,
0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff,
0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x3f, 0x00, 0x00, 0x3f,
0xff, 0xfc, 0xff, 0x80, 0x00, 0x7f, 0xff, 0xcf, 0xff, 0x80, 0x00, 0x7e, 0x0f, 0x0c, 0x3f, 0xc0,
0x00, 0x7e, 0x04, 0x38, 0x1f, 0xc0, 0x00, 0xfc, 0x00, 0xf8, 0x1f, 0xc0, 0x00, 0xfc, 0x47, 0xf1,
0x1f, 0xc0, 0x00, 0x7c, 0x47, 0xf1, 0x9f, 0xc0, 0x00, 0x78, 0x07, 0xf0, 0x1f, 0xc0, 0x00, 0x20,
0x07, 0xf8, 0x1f, 0x80, 0x00, 0x06, 0x0f, 0xf8, 0x1f, 0x00, 0x00, 0x1f, 0x1f, 0xfc, 0x3e, 0x00,
0x00, 0x7f, 0xff, 0xff, 0xf0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xfc, 0x3f, 0xfc,
0x0f, 0xe0, 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x1f, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x3f, 0xfe,
0x00, 0x00, 0x7f, 0xfc, 0x3f, 0xff, 0x00, 0x00, 0xff, 0xfc, 0x3f, 0xff, 0x80, 0x01, 0xff, 0xfc,
0x3f, 0xff, 0xc0, 0x07, 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0x1f, 0xff, 0xfc, 0x3f, 0xfe, 0x3f, 0xff,
0xff, 0xfc, 0x3f, 0xf8, 0x7f, 0xff, 0xff, 0xfc, 0x1f, 0xe1, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0x87,
0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char no_no_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0e, 0x00, 0x00, 0x00,
0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0d, 0x80, 0x00, 0x00, 0x03, 0xb0, 0x08, 0xc0,
0x00, 0x00, 0x07, 0x30, 0x18, 0x60, 0x00, 0x00, 0x0e, 0x30, 0x18, 0x30, 0x00, 0x00, 0x1c, 0x10,
0x18, 0x18, 0x00, 0x00, 0x38, 0x18, 0x18, 0x1c, 0x00, 0x00, 0x30, 0x18, 0x10, 0x0e, 0x7f, 0xfe,
0x70, 0x18, 0x10, 0x0f, 0xff, 0xff, 0xf0, 0x18, 0x30, 0x3f, 0xff, 0xff, 0xfc, 0x18, 0x30, 0xff,
0xff, 0xff, 0xfe, 0x18, 0x31, 0xff, 0xff, 0xff, 0xff, 0x18, 0x33, 0xff, 0xff, 0xff, 0xff, 0x98,
0x37, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xf8, 0x7f, 0xfc, 0x1f, 0xf8, 0x3f, 0xf6,
0x3f, 0xf9, 0x0f, 0xf8, 0x3f, 0xee, 0x1f, 0xfb, 0x8f, 0xfc, 0x7f, 0xe6, 0x1f, 0xf1, 0x07, 0xfc,
0x7f, 0xe0, 0x1f, 0xf8, 0x07, 0xfe, 0x7f, 0xe0, 0x1f, 0xf8, 0x0f, 0xfe, 0x7f, 0xf0, 0x3f, 0xfc,
0x0f, 0xfe, 0x7f, 0xf8, 0x7f, 0xfe, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff,
0xff, 0xff, 0xbf, 0xfe, 0x7f, 0xfe, 0x70, 0x0f, 0xbf, 0xfe, 0x7f, 0xfe, 0x60, 0x0f, 0xbf, 0xfe,
0x7f, 0xf6, 0xf0, 0x0f, 0x9f, 0xfc, 0x3f, 0xf7, 0xf8, 0x1f, 0x9f, 0xfc, 0x3f, 0xf7, 0xfc, 0x3f,
0xff, 0xf8, 0x1f, 0xf7, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xf7, 0xfe, 0x7f, 0xff, 0xf0, 0x0f, 0xff,
0xf3, 0xef, 0xff, 0xf0, 0x07, 0xff, 0xef, 0xf7, 0xff, 0xe0, 0x03, 0xff, 0xe1, 0x83, 0xff, 0xc0,
0x01, 0xff, 0x9e, 0x7d, 0xff, 0x80, 0x00, 0xff, 0xff, 0x7e, 0xfe, 0x00, 0x00, 0x3f, 0xfe, 0x7f,
0xfc, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x84, 0x00, 0x00, 0x78,
0x3f, 0xfc, 0x1c, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x3f, 0xfe, 0x00
};
const unsigned char food_full[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00,
0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x07, 0xfc, 0x07, 0xff, 0xff,
0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe1, 0xff, 0xff, 0x03, 0xff, 0xff, 0xf9,
0xff, 0xff, 0x07, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0x1f, 0xff,
0xff, 0xff, 0x3f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x9f, 0xff,
0x7f, 0xff, 0xff, 0xff, 0x9f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0x00, 0x00,
0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x9f, 0xff,
0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x7f, 0xff, 0xff, 0xff,
0xcf, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x8f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x0e, 0x0e,
0x0c, 0x1c, 0x0f, 0xff, 0x3f, 0xbf, 0xbf, 0x3f, 0x0f, 0xff, 0x3b, 0xfb, 0xf3, 0xf7, 0x8f, 0xff,
0x71, 0xf1, 0xe1, 0xe1, 0x8f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x7f, 0xff, 0xff, 0xff,
0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff,
0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00
};
const unsigned char food_half[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x0f,
0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00,
0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0xe3, 0xff, 0xfe, 0x01, 0xff, 0x80, 0xf1,
0xcf, 0xc2, 0x03, 0xff, 0xc0, 0xfd, 0x80, 0x02, 0x03, 0xff, 0xe0, 0xfe, 0x80, 0x02, 0x01, 0xff,
0xfb, 0xfe, 0x40, 0x02, 0x01, 0xff, 0xff, 0xff, 0x20, 0x02, 0x01, 0x7f, 0xff, 0xff, 0x10, 0x02,
0x00, 0x7f, 0xff, 0xff, 0x90, 0x02, 0x00, 0x1f, 0xff, 0xd7, 0x90, 0x02, 0x00, 0x1f, 0xff, 0x83,
0xd0, 0x02, 0x00, 0x7f, 0xff, 0x81, 0xd0, 0x02, 0x01, 0xff, 0xff, 0x01, 0xd0, 0x02, 0x00, 0x00,
0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x72, 0x1f, 0xff, 0xc7, 0xff, 0x9f, 0xfe,
0x3f, 0xff, 0x87, 0xff, 0x9f, 0xfe, 0x3f, 0xff, 0x00, 0x3e, 0x1f, 0xfe, 0x3c, 0xf8, 0x00, 0x9c,
0x9f, 0xfe, 0x10, 0x32, 0x03, 0xc1, 0x9f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x07, 0x00,
0x0e, 0x1c, 0x1f, 0xfe, 0x1f, 0x80, 0x3f, 0x3f, 0x1f, 0xfe, 0x1d, 0xc0, 0xf3, 0xf7, 0x1f, 0xfe,
0x38, 0xf0, 0xe1, 0xe3, 0x9f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x3f, 0xff, 0xff, 0xff,
0x80, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff,
0xff, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00
};
const unsigned char food_empty[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x0f,
0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00,
0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x03,
0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00,
0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02,
0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00,
0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00,
0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02,
0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00,
0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00,
0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02,
0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x3f, 0xff, 0xff, 0xff,
0x80, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff,
0xff, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00
};
const unsigned char toilet_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff,
0xff, 0xff, 0x7e, 0x01, 0xff, 0xff, 0xff, 0xff, 0x7c, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x7e, 0x0f,
0xff, 0xff, 0xff, 0xfe, 0x3f, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xff,
0xc0, 0x03, 0xff, 0xf0, 0x0f, 0x80, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0xff,
0xff, 0xff, 0xff, 0xf0, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x60, 0x03, 0xff, 0xff, 0xc0, 0x06,
0x7c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0xf0, 0x00, 0x00, 0x07, 0xfc, 0x07, 0xff, 0xff, 0xff,
0xff, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xfc, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1f, 0x80,
0x00, 0x00, 0x01, 0xf8, 0x0f, 0xff, 0xf0, 0x07, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0,
0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xff,
0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00,
0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xff,
0xe0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07,
0xff, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xf0, 0x00
};
//48x48
const unsigned char school_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x3e, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x00, 0x00, 0x00, 0x00,
0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00,
0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xc0, 0x00, 0x00,
0x03, 0xf8, 0x1f, 0xdc, 0xe9, 0x77, 0xa3, 0xf8, 0x1f, 0xd1, 0x09, 0x5c, 0xa3, 0xf8, 0x1f, 0xcd,
0x0f, 0x5c, 0xa3, 0xf8, 0x1f, 0xdd, 0xe9, 0x77, 0xbb, 0xf8, 0x1f, 0xc0, 0x00, 0x00, 0x03, 0xf8,
0x1f, 0xc0, 0x00, 0x00, 0x03, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x1f, 0xff, 0xf8, 0x1f, 0xff, 0xf8, 0x1f, 0xff, 0xf0, 0x0f, 0xff, 0xf8, 0x1f, 0xff,
0xe0, 0x07, 0xff, 0xf8, 0x1f, 0xff, 0xe0, 0x03, 0xff, 0xf8, 0x1f, 0xff, 0xc0, 0x03, 0xff, 0xf8,
0x1f, 0xff, 0xc0, 0x03, 0xff, 0xf8, 0x1f, 0xff, 0xc0, 0x03, 0xff, 0xf8, 0x1c, 0x21, 0xc0, 0x03,
0x84, 0x38, 0x1c, 0x21, 0xc0, 0x03, 0x84, 0x38, 0x1c, 0x21, 0xc0, 0x03, 0x84, 0x38, 0x1f, 0xff,
0xc0, 0x03, 0xff, 0xf8, 0x1c, 0x21, 0xc0, 0x03, 0x84, 0x38, 0x1c, 0x21, 0xc0, 0x03, 0x84, 0x38,
0x1c, 0x21, 0xc0, 0x03, 0x84, 0x38, 0x1f, 0xff, 0xc0, 0x03, 0xff, 0xf8, 0x1f, 0xff, 0xc0, 0x03,
0xff, 0xf8, 0x1f, 0xff, 0xc0, 0x03, 0xff, 0xf8, 0x1f, 0xff, 0xc0, 0x03, 0xff, 0xf8, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
//48x48
const unsigned char shower_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0x00, 0x01, 0x00, 0x40, 0x1f, 0xff, 0x00, 0x03, 0x83, 0xf8, 0x3f, 0xff, 0x00, 0x07,
0xc7, 0xfc, 0x7f, 0x80, 0x00, 0x0f, 0xe7, 0xfe, 0x7e, 0x00, 0x00, 0x07, 0xf3, 0xff, 0xf8, 0x00,
0x00, 0x03, 0xf3, 0xff, 0xf0, 0x00, 0x00, 0x01, 0xf9, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0xff,
0xe0, 0x00, 0x00, 0x0c, 0x7e, 0x7f, 0xe0, 0x00, 0x00, 0x1c, 0x7f, 0x3f, 0xf0, 0x00, 0x00, 0x11,
0x3f, 0x9f, 0xf8, 0x00, 0x01, 0x83, 0x1f, 0xcf, 0xf8, 0x00, 0x03, 0x87, 0x0f, 0xcf, 0xf8, 0x00,
0x03, 0x00, 0x07, 0xe7, 0xfc, 0x00, 0x00, 0x20, 0x63, 0xf3, 0xfc, 0x00, 0x70, 0x60, 0xc1, 0xf9,
0xfc, 0x00, 0xe0, 0xe0, 0x81, 0xfc, 0xfc, 0x00, 0x40, 0x00, 0x1c, 0xfe, 0x78, 0x00, 0x04, 0x0c,
0x38, 0x7e, 0x78, 0x00, 0x0c, 0x1c, 0x10, 0x3f, 0x38, 0x00, 0x1c, 0x18, 0x03, 0x1f, 0x90, 0x00,
0x18, 0x00, 0x87, 0x0f, 0xc0, 0x00, 0x00, 0x81, 0x86, 0x0f, 0xe0, 0x00, 0x01, 0x83, 0x00, 0x67,
0xf0, 0x00, 0x03, 0x80, 0x00, 0xc3, 0xf8, 0x00, 0x01, 0x00, 0x30, 0x81, 0xf8, 0x00, 0x00, 0x18,
0x60, 0x18, 0xfc, 0x00, 0x00, 0x30, 0x60, 0x18, 0x7c, 0x00, 0x00, 0x30, 0x06, 0x10, 0x38, 0x00,
0x00, 0x00, 0x06, 0x03, 0x30, 0x00, 0x00, 0x03, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0xc6,
0x00, 0x00, 0x00, 0x06, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x80, 0x00, 0x00, 0x00, 0x00,
0x61, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x18, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x00, 0x00,
0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
};
//48x48
const unsigned char spaghetti_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x01, 0x93, 0x00, 0x00, 0x00, 0x00, 0x01, 0xbb, 0x38, 0x00, 0x00, 0x00,
0x01, 0xbb, 0x3c, 0x00, 0x00, 0x00, 0x01, 0xbb, 0x7c, 0x00, 0x1f, 0xf8, 0x01, 0xbb, 0x7e, 0x00,
0xff, 0xfe, 0x01, 0xbb, 0xfe, 0x03, 0xff, 0xff, 0x81, 0xbb, 0xfe, 0x07, 0xff, 0xff, 0xe1, 0xbb,
0xfe, 0x1f, 0xe0, 0x0f, 0xf1, 0xbb, 0xfe, 0x3f, 0x87, 0xc3, 0xf8, 0x92, 0xfe, 0x7e, 0x3f, 0xf8,
0xfc, 0x00, 0xfe, 0x7c, 0xf7, 0xce, 0x7c, 0xfe, 0xfe, 0xf9, 0xc0, 0x01, 0x3e, 0xfe, 0x7e, 0xf3,
0xdc, 0xfc, 0x9e, 0xfe, 0x7c, 0xe6, 0x1e, 0xfe, 0x4e, 0xfe, 0x3d, 0xec, 0x3e, 0xff, 0x26, 0xfe,
0x19, 0xd9, 0x9e, 0xff, 0xb6, 0x7c, 0x03, 0x9b, 0xcc, 0x87, 0x93, 0x00, 0x1b, 0xbb, 0xe1, 0x33,
0xdb, 0x90, 0x3b, 0xb9, 0xc3, 0x7b, 0xdb, 0xb8, 0x3b, 0x30, 0x18, 0x7b, 0xd9, 0xb8, 0x3b, 0x26,
0x3c, 0x33, 0xdd, 0xb8, 0x3b, 0x6f, 0xfe, 0x07, 0x9d, 0xb8, 0x3b, 0x6f, 0xfe, 0x4f, 0xbd, 0xb8,
0x3b, 0x6c, 0xe7, 0x7f, 0x3d, 0xb8, 0x3b, 0x4d, 0xf7, 0x7f, 0x7d, 0xb8, 0x3b, 0x4f, 0xff, 0x7e,
0x7d, 0xb8, 0x3b, 0x6f, 0xfe, 0x00, 0x7d, 0xb8, 0x3b, 0x2f, 0x9c, 0x3f, 0x09, 0xb8, 0x3b, 0xa7,
0x99, 0xff, 0xe1, 0xb8, 0x3b, 0xb3, 0xfb, 0xf3, 0xf3, 0xb8, 0x3b, 0x99, 0xf3, 0x00, 0x33, 0xb8,
0x3b, 0xdc, 0x00, 0x7c, 0x07, 0xb8, 0x3b, 0xcf, 0x47, 0xff, 0x87, 0xb8, 0x39, 0xef, 0xef, 0xcf,
0xcf, 0xb8, 0x39, 0xe7, 0xcc, 0x00, 0xcf, 0x38, 0x38, 0xf3, 0xe1, 0xfc, 0x1f, 0x38, 0x38, 0xf9,
0xff, 0xff, 0x3e, 0x38, 0x38, 0x7c, 0x7f, 0xfc, 0x7c, 0x38, 0x38, 0x3f, 0x1f, 0xf1, 0xf8, 0x38,
0x38, 0x1f, 0xc0, 0x03, 0xf0, 0x38, 0x38, 0x0f, 0xf8, 0x3f, 0xe0, 0x38, 0x38, 0x07, 0xff, 0xff,
0xc0, 0x38, 0x38, 0x01, 0xff, 0xff, 0x00, 0x38, 0x38, 0x00, 0x7f, 0xfc, 0x00, 0x38, 0x38, 0x00,
0x0f, 0xe0, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10
};
//48x48
const unsigned char icecream_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x38, 0x00, 0x00, 0x00, 0x01,
0xff, 0x1c, 0x00, 0x00, 0x00, 0x01, 0xff, 0xce, 0x00, 0x00, 0x00, 0x03, 0xff, 0xe6, 0x00, 0x00,
0x00, 0x03, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf7, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf7,
0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00,
0x00, 0x0f, 0x3e, 0xff, 0xc0, 0x00, 0x00, 0x0f, 0x3c, 0xfb, 0xc0, 0x00, 0x00, 0x0f, 0x3c, 0xfb,
0x80, 0x00, 0x00, 0x0f, 0x40, 0xf0, 0x00, 0x00, 0x00, 0x02, 0x43, 0x74, 0x00, 0x00, 0x00, 0x00,
0xff, 0x74, 0x00, 0x00, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0x88, 0x00, 0x00,
0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0,
0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00,
0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
//48x48
const unsigned char burger_sprite[] PROGMEM = {
0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff,
0xc0, 0x00, 0x00, 0x0f, 0xe7, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x7f,
0xff, 0xf9, 0xfe, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80,
0x03, 0xf9, 0xfe, 0x7f, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xfc, 0x60, 0x0f, 0xff, 0xff, 0xff,
0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0x9f, 0xff, 0xdf, 0xf8, 0x1f, 0xff,
0xff, 0xff, 0xcf, 0xf8, 0x1f, 0x3f, 0xff, 0x9f, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8,
0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xfc, 0x00, 0x00, 0x7c, 0x7f, 0xff, 0xfe, 0x30, 0x00, 0xfe, 0x7f, 0xff, 0xff, 0xf8,
0x01, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff,
0xff, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00,
0x1f, 0xff, 0xff, 0xfc, 0x3e, 0x01, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0x07, 0xff, 0xff, 0xff, 0xfc,
0x1f, 0x8f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0x9f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x03, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00
};
//48x48
const unsigned char bed_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1e,
0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x80, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0xc7, 0xff, 0xff, 0xe0,
0xfc, 0xff, 0xe7, 0xff, 0xff, 0xf8, 0xfc, 0xff, 0xe7, 0xff, 0xff, 0xfc, 0xfd, 0xff, 0xe7, 0xff,
0xff, 0xfe, 0xfd, 0xff, 0xe7, 0xff, 0xff, 0xfe, 0xfd, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xfc, 0xff,
0xe7, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xc7, 0xff, 0xff, 0xff,
0xfe, 0x3f, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00,
0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
//48x48
const unsigned char bathStart_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0x00, 0x01, 0x80, 0xe0, 0x1f, 0xff, 0x00, 0x03, 0x83, 0xf8, 0x3f, 0xff, 0x00, 0x07,
0xc7, 0xfc, 0x7f, 0x80, 0x00, 0x07, 0xe7, 0xfe, 0xfc, 0x00, 0x00, 0x03, 0xf3, 0xff, 0xf8, 0x00,
0x00, 0x03, 0xf9, 0xff, 0xf0, 0x00, 0x00, 0x01, 0xfc, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0xff,
0xe0, 0x00, 0x00, 0x00, 0x7e, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0xf0, 0x00, 0x00, 0x00,
0x1f, 0x9f, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xcf, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xe7, 0xf8, 0x00,
0x00, 0x00, 0x07, 0xf7, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xf9,
0xfc, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x78, 0x00, 0x00, 0x00,
0x00, 0x7f, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x98, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00,
0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03,
0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
//48x48
const unsigned char bathEnd_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xff, 0x00, 0x01, 0x80, 0xe0, 0x1f, 0xff, 0x00, 0x03, 0x83, 0xf8, 0x3f, 0xff, 0x00, 0x07,
0xc7, 0xfc, 0x7f, 0x80, 0x00, 0x07, 0xe7, 0xfe, 0xfc, 0x00, 0x00, 0x03, 0xf3, 0xff, 0xf8, 0x00,
0x00, 0x03, 0xf9, 0xff, 0xf0, 0x00, 0x00, 0x01, 0xfc, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0xff,
0xe0, 0x00, 0x00, 0x0c, 0x7e, 0x7f, 0xe0, 0x00, 0x00, 0x1c, 0x3f, 0x3f, 0xf0, 0x00, 0x00, 0x01,
0x1f, 0x9f, 0xf8, 0x00, 0x01, 0x83, 0x8f, 0xcf, 0xf8, 0x00, 0x03, 0x87, 0x0f, 0xe7, 0xf8, 0x00,
0x03, 0x00, 0x27, 0xf7, 0xfc, 0x00, 0x00, 0x20, 0x63, 0xf3, 0xfc, 0x00, 0x30, 0x70, 0xc1, 0xf9,
0xfc, 0x00, 0x60, 0x60, 0x00, 0xfc, 0xfc, 0x00, 0x40, 0x00, 0x1c, 0x7e, 0x78, 0x00, 0x04, 0x06,
0x18, 0x7f, 0x38, 0x00, 0x0e, 0x0c, 0x11, 0x3f, 0x98, 0x00, 0x0c, 0x08, 0x03, 0x1f, 0x80, 0x00,
0x08, 0x00, 0x87, 0x0f, 0xc0, 0x00, 0x00, 0xc1, 0x82, 0x07, 0xe0, 0x00, 0x01, 0xc3, 0x00, 0x63,
0xf0, 0x00, 0x01, 0x80, 0x10, 0xc3, 0xf8, 0x00, 0x00, 0x00, 0x30, 0x89, 0xfc, 0x00, 0x00, 0x18,
0x70, 0x18, 0xfc, 0x00, 0x00, 0x38, 0x20, 0x18, 0x78, 0x00, 0x00, 0x30, 0x06, 0x10, 0x38, 0x00,
0x00, 0x01, 0x06, 0x03, 0x10, 0x00, 0x00, 0x03, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc6,
0x00, 0x00, 0x00, 0x06, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x80, 0x00, 0x00, 0x00, 0x00,
0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x18, 0x00, 0x00, 0x00, 0x00, 0x40, 0x30, 0x00, 0x00,
0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// Define sprites for submenu
const unsigned char catchball_icon[] PROGMEM = {
0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x1f,
0xe0, 0x00, 0x00, 0x0f, 0x00, 0x18, 0xf0, 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x3c, 0x00, 0x00, 0x70,
0x00, 0x0c, 0x0e, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0x03, 0x00, 0x01, 0x80, 0x00, 0x06, 0x01, 0x80,
0x03, 0x00, 0x00, 0x06, 0x00, 0xc0, 0x06, 0x00, 0x00, 0x03, 0x00, 0x60, 0x0c, 0x00, 0x00, 0x01,
0x80, 0x30, 0x0c, 0x00, 0x30, 0x01, 0xc0, 0x30, 0x18, 0x00, 0xf8, 0x78, 0xc0, 0x18, 0x38, 0x00,
0xd8, 0x7c, 0x60, 0x1c, 0x30, 0x00, 0xd8, 0xcc, 0x38, 0x0c, 0x30, 0x00, 0xf8, 0x7c, 0x1c, 0x0c,
0x60, 0x00, 0x70, 0x78, 0x0e, 0x06, 0x60, 0x00, 0x00, 0x00, 0x03, 0x86, 0x60, 0x00, 0x00, 0x00,
0xe1, 0xf6, 0xc0, 0x01, 0xc7, 0x01, 0xf0, 0x7f, 0xc0, 0x07, 0xff, 0xc1, 0x30, 0x0f, 0xc0, 0x0e,
0x38, 0xe1, 0xb0, 0x03, 0xc0, 0x0c, 0x00, 0x31, 0xe0, 0x03, 0xc0, 0x18, 0x00, 0x30, 0x00, 0x03,
0xc0, 0x18, 0x00, 0x18, 0x00, 0x03, 0xc0, 0x18, 0x00, 0x18, 0x00, 0x03, 0xc0, 0x18, 0x00, 0x18,
0x00, 0x03, 0xf0, 0x1c, 0x00, 0x30, 0xf0, 0x03, 0xfe, 0x0e, 0x00, 0x31, 0xf8, 0x03, 0x6f, 0x87,
0x00, 0x31, 0x98, 0x06, 0x61, 0xc3, 0x80, 0x19, 0xf0, 0x06, 0x60, 0x71, 0xc0, 0x18, 0xf0, 0x06,
0x30, 0x38, 0xe0, 0x18, 0x00, 0x0c, 0x30, 0x1c, 0x70, 0x30, 0x00, 0x0c, 0x38, 0x06, 0x38, 0x70,
0x00, 0x1c, 0x18, 0x03, 0x1f, 0xe0, 0x00, 0x18, 0x0c, 0x03, 0x8f, 0x80, 0x00, 0x30, 0x0c, 0x01,
0x80, 0x00, 0x00, 0x30, 0x06, 0x00, 0xc0, 0x00, 0x00, 0x60, 0x03, 0x00, 0x60, 0x00, 0x00, 0xc0,
0x01, 0x80, 0x60, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x30, 0x00, 0x03, 0x00, 0x00, 0x70, 0x30, 0x00,
0x0e, 0x00, 0x00, 0x3c, 0x30, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x18, 0x00, 0xf0, 0x00, 0x00, 0x07,
0xf8, 0x07, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00
};
const unsigned char shop_icon[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0,
0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x78, 0x01, 0x80, 0x60, 0x1e, 0x00, 0x7c,
0x01, 0x80, 0x60, 0x1e, 0x00, 0x3c, 0x01, 0x80, 0x60, 0x1e, 0x00, 0x3c, 0x01, 0x80, 0x60, 0x1e,
0x00, 0x3c, 0x01, 0x80, 0x60, 0x3e, 0x00, 0x3e, 0x01, 0x80, 0x60, 0x3c, 0x00, 0x1f, 0xff, 0xff,
0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0x01, 0x80, 0x60, 0x3c, 0x00, 0x0f,
0x01, 0x80, 0x60, 0x7c, 0x00, 0x0f, 0x01, 0x80, 0x60, 0x78, 0x00, 0x0f, 0x01, 0x80, 0x60, 0x78,
0x00, 0x07, 0x81, 0x80, 0x60, 0x78, 0x00, 0x07, 0x81, 0x80, 0x60, 0xf8, 0x00, 0x07, 0x81, 0x80,
0xff, 0xf8, 0x00, 0x03, 0xc1, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x03,
0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00,
0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x07, 0xdf, 0xff,
0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x07, 0x00,
0x00, 0x07, 0xe0, 0x00, 0x0f, 0xc0, 0x00, 0x07, 0xf0, 0x00, 0x1f, 0xc0, 0x00, 0x0f, 0xf0, 0x00,
0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, 0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, 0x1f, 0xe0, 0x00, 0x07,
0xf0, 0x00, 0x0f, 0xc0, 0x00, 0x03, 0xe0, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// Define sprites for submenu
const unsigned char catchball_sprite[] PROGMEM = {
0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x1f,
0xe0, 0x00, 0x00, 0x0f, 0x00, 0x18, 0xf0, 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x3c, 0x00, 0x00, 0x70,
0x00, 0x0c, 0x0e, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0x03, 0x00, 0x01, 0x80, 0x00, 0x06, 0x01, 0x80,
0x03, 0x00, 0x00, 0x06, 0x00, 0xc0, 0x06, 0x00, 0x00, 0x03, 0x00, 0x60, 0x0c, 0x00, 0x00, 0x01,
0x80, 0x30, 0x0c, 0x00, 0x30, 0x01, 0xc0, 0x30, 0x18, 0x00, 0xf8, 0x78, 0xc0, 0x18, 0x38, 0x00,
0xd8, 0x7c, 0x60, 0x1c, 0x30, 0x00, 0xd8, 0xcc, 0x38, 0x0c, 0x30, 0x00, 0xf8, 0x7c, 0x1c, 0x0c,
0x60, 0x00, 0x70, 0x78, 0x0e, 0x06, 0x60, 0x00, 0x00, 0x00, 0x03, 0x86, 0x60, 0x00, 0x00, 0x00,
0xe1, 0xf6, 0xc0, 0x01, 0xc7, 0x01, 0xf0, 0x7f, 0xc0, 0x07, 0xff, 0xc1, 0x30, 0x0f, 0xc0, 0x0e,
0x38, 0xe1, 0xb0, 0x03, 0xc0, 0x0c, 0x00, 0x31, 0xe0, 0x03, 0xc0, 0x18, 0x00, 0x30, 0x00, 0x03,
0xc0, 0x18, 0x00, 0x18, 0x00, 0x03, 0xc0, 0x18, 0x00, 0x18, 0x00, 0x03, 0xc0, 0x18, 0x00, 0x18,
0x00, 0x03, 0xf0, 0x1c, 0x00, 0x30, 0xf0, 0x03, 0xfe, 0x0e, 0x00, 0x31, 0xf8, 0x03, 0x6f, 0x87,
0x00, 0x31, 0x98, 0x06, 0x61, 0xc3, 0x80, 0x19, 0xf0, 0x06, 0x60, 0x71, 0xc0, 0x18, 0xf0, 0x06,
0x30, 0x38, 0xe0, 0x18, 0x00, 0x0c, 0x30, 0x1c, 0x70, 0x30, 0x00, 0x0c, 0x38, 0x06, 0x38, 0x70,
0x00, 0x1c, 0x18, 0x03, 0x1f, 0xe0, 0x00, 0x18, 0x0c, 0x03, 0x8f, 0x80, 0x00, 0x30, 0x0c, 0x01,
0x80, 0x00, 0x00, 0x30, 0x06, 0x00, 0xc0, 0x00, 0x00, 0x60, 0x03, 0x00, 0x60, 0x00, 0x00, 0xc0,
0x01, 0x80, 0x60, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x30, 0x00, 0x03, 0x00, 0x00, 0x70, 0x30, 0x00,
0x0e, 0x00, 0x00, 0x3c, 0x30, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x18, 0x00, 0xf0, 0x00, 0x00, 0x07,
0xf8, 0x07, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00
};
const unsigned char shop_sprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0,
0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x78, 0x01, 0x80, 0x60, 0x1e, 0x00, 0x7c,
0x01, 0x80, 0x60, 0x1e, 0x00, 0x3c, 0x01, 0x80, 0x60, 0x1e, 0x00, 0x3c, 0x01, 0x80, 0x60, 0x1e,
0x00, 0x3c, 0x01, 0x80, 0x60, 0x3e, 0x00, 0x3e, 0x01, 0x80, 0x60, 0x3c, 0x00, 0x1f, 0xff, 0xff,
0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0x01, 0x80, 0x60, 0x3c, 0x00, 0x0f,
0x01, 0x80, 0x60, 0x7c, 0x00, 0x0f, 0x01, 0x80, 0x60, 0x78, 0x00, 0x0f, 0x01, 0x80, 0x60, 0x78,
0x00, 0x07, 0x81, 0x80, 0x60, 0x78, 0x00, 0x07, 0x81, 0x80, 0x60, 0xf8, 0x00, 0x07, 0x81, 0x80,
0xff, 0xf8, 0x00, 0x03, 0xc1, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x03,
0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00,
0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x07, 0xdf, 0xff,
0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x07, 0x00,
0x00, 0x07, 0xe0, 0x00, 0x0f, 0xc0, 0x00, 0x07, 0xf0, 0x00, 0x1f, 0xc0, 0x00, 0x0f, 0xf0, 0x00,
0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, 0x1f, 0xe0, 0x00, 0x0f, 0xf0, 0x00, 0x1f, 0xe0, 0x00, 0x07,
0xf0, 0x00, 0x0f, 0xc0, 0x00, 0x03, 0xe0, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// Puppy sprite (16x16 pixels)
const unsigned char puppySprite[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0x98, 0x06, 0x48, 0x03, 0x98, 0x03, 0xf8, 0x01, 0xf8, 0x03, 0xf0, 0x01, 0xf0, 0x03, 0xe0,
0x01, 0xf0, 0x03, 0xe0, 0x01, 0xf0, 0x03, 0xe0, 0x01, 0xf0, 0x03, 0xe0, 0x03, 0xf0, 0x03, 0xe0,
0x03, 0xf0, 0x03, 0xe0, 0x03, 0xf0, 0x03, 0xe0, 0x03, 0xf7, 0xe3, 0xe0, 0x03, 0xf7, 0xe3, 0xe0,
0x03, 0xff, 0xf7, 0xe0, 0x03, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0
};
// Icon definitions - 24x24 pixels
const unsigned char feed_icon[] PROGMEM = {
0x00, 0x00, 0x40, 0x02, 0xd0, 0xe0, 0x02, 0xd1, 0xe0, 0x02, 0xd1, 0xe0, 0x02, 0xd1, 0xe0, 0x02,
0xd1, 0xe0, 0x03, 0xf1, 0xe0, 0x03, 0xf1, 0xe0, 0x03, 0xf1, 0xe0, 0x01, 0xe1, 0xe0, 0x00, 0xe1,
0xe0, 0x00, 0xe1, 0xe0, 0x00, 0xe1, 0xe0, 0x00, 0xe1, 0xe0, 0x00, 0xe0, 0xe0, 0x00, 0xe0, 0x60,
0x00, 0xe0, 0x60, 0x00, 0xe0, 0x60, 0x00, 0xe0, 0x60, 0x00, 0xe0, 0x60, 0x00, 0xe0, 0x60, 0x00,
0xe0, 0x60, 0x00, 0xc0, 0x60, 0x00, 0x40, 0x00
};
const unsigned char lights_icon[] PROGMEM = {
0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x08, 0x00, 0x10, 0x04, 0x00, 0x20, 0x02,
0x3c, 0x40, 0x00, 0xff, 0x00, 0x01, 0xbf, 0x80, 0x01, 0x7f, 0x80, 0x02, 0xff, 0xc0, 0x73, 0xff,
0xce, 0x03, 0xff, 0xc0, 0x03, 0xff, 0xc0, 0x01, 0xff, 0x80, 0x01, 0xff, 0x80, 0x00, 0xff, 0x00,
0x02, 0x7e, 0x40, 0x04, 0x7e, 0x20, 0x08, 0x3c, 0x10, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00,
0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x18, 0x00
};
const unsigned char game_icon[] PROGMEM = {
0x00, 0x10, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xff, 0x00, 0x03, 0xff, 0x80, 0x0f, 0xff, 0xe0, 0x11,
0xc7, 0x18, 0x19, 0xe7, 0x90, 0x27, 0xff, 0xe0, 0x39, 0xff, 0x9c, 0x3c, 0xfe, 0x7c, 0x3f, 0x3d,
0xfc, 0x3f, 0xc3, 0xfc, 0x3f, 0x27, 0xfc, 0x3f, 0x8f, 0xbc, 0x3f, 0xaf, 0x3c, 0x2f, 0xef, 0x3c,
0x27, 0xef, 0xfc, 0x27, 0xef, 0xf8, 0x0f, 0xef, 0xf0, 0x03, 0xef, 0xc0, 0x01, 0xef, 0x00, 0x00,
0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char medicine_icon[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x01, 0x8e, 0x00, 0x00, 0xcf, 0x00, 0x00, 0xf8, 0x00,
0x01, 0xf0, 0x00, 0x03, 0xf8, 0x00, 0x07, 0xdc, 0x00, 0x0f, 0x64, 0x00, 0x1f, 0x80, 0x00, 0x3f,
0x80, 0x00, 0x7f, 0x00, 0x00, 0xfe, 0x00, 0x03, 0x7c, 0x00, 0x06, 0x38, 0x00, 0x0c, 0x10, 0x00,
0x08, 0x20, 0x00, 0x08, 0x40, 0x00, 0x08, 0x80, 0x00, 0x1f, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20,
0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char bath_icon[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7a, 0x00,
0x01, 0x3a, 0x00, 0x00, 0x92, 0x00, 0x00, 0x42, 0x0f, 0x00, 0x02, 0x7f, 0x80, 0x02, 0x7f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc,
0x1f, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x0f, 0xff, 0xf0, 0x06, 0x00, 0x20, 0x04, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char health_icon[] PROGMEM = {
0x08, 0x00, 0x08, 0x1f, 0x00, 0xf8, 0x3f, 0xc3, 0xf8, 0x3f, 0xe7, 0xfc, 0x3f, 0xf7, 0xfc, 0xff,
0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7,
0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff,
0xff, 0xf7, 0xff, 0xff, 0xf7, 0xff, 0xef, 0xf7, 0xf7, 0xfc, 0xf7, 0x3d, 0x83, 0xb5, 0xc1, 0xff,
0x26, 0xff, 0x73, 0xe7, 0xcf, 0x00, 0x00, 0x00
};
const unsigned char discipline_icon[] PROGMEM = {
0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
0x3e, 0x00, 0x00, 0xe7, 0x00, 0x00, 0xe7, 0x00, 0x3f, 0xff, 0xfc, 0x3a, 0x05, 0x1c, 0x3b, 0x36,
0xdc, 0x38, 0x00, 0x1c, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x3f, 0xc3, 0xfc, 0x3f, 0x81, 0xfc,
0x3f, 0x81, 0xfc, 0x21, 0x81, 0x84, 0x25, 0x81, 0xa4, 0x21, 0x81, 0x84, 0x25, 0x81, 0xa4, 0x3f,
0x81, 0xfc, 0x7f, 0x81, 0xfe, 0xff, 0xff, 0xff
};
const unsigned char attention_icon[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x7c, 0x00, 0x00,
0xfc, 0x00, 0x01, 0xf3, 0x80, 0x00, 0xcf, 0x80, 0x00, 0x7f, 0xc0, 0x00, 0xff, 0x80, 0x03, 0xfe,
0x70, 0x07, 0x72, 0x78, 0x0e, 0x0c, 0x78, 0x0e, 0x1c, 0x38, 0x04, 0x3c, 0x38, 0x03, 0x3e, 0x70,
0x0f, 0xff, 0xc0, 0x3e, 0x18, 0x3c, 0x7e, 0x00, 0x7e, 0x7f, 0x00, 0xfe, 0x7f, 0xc3, 0xfe, 0x7e,
0x7f, 0xfe, 0x39, 0xff, 0xfc, 0x00, 0x00, 0x00
};
// GAME
// Action functions for submenu
void catchballAction() {
while (gameData.state == GAME_SUBMENU_MODE) { // Keep game running until state changes
catchball_game(); // New function name to differentiate from the action trigger
delay(50); // Game speed
handleButtons(); // Check for button presses to exit or other actions
}
// Reset game parameters here if needed
}
void catchball_game() {
display.clearDisplay();
// Ball movement (faster)
ballX += ballDirection * 4;
if (ballX <= 0 || ballX >= SCREEN_WIDTH - BALL_SIZE) {
ballDirection *= -1;
}
display.fillCircle(ballX, ballY, BALL_SIZE / 2, SSD1306_WHITE);
// Puppy jump
if (digitalRead(BUTTON_2) == LOW && !isJumping) {
isJumping = true;
jumpCounter = 0;
}
if (isJumping) {
puppyY = SCREEN_HEIGHT - PUPPY_HEIGHT - JUMP_HEIGHT + abs(jumpCounter - JUMP_HEIGHT);
jumpCounter++;
if (jumpCounter >= JUMP_HEIGHT * 2) {
isJumping = false;
puppyY = SCREEN_HEIGHT - PUPPY_HEIGHT;
}
}
// Draw puppy
display.drawBitmap(puppyX, puppyY, puppySprite, PUPPY_WIDTH, PUPPY_HEIGHT, SSD1306_WHITE);
// Check for catch
if (isJumping && ballX + BALL_SIZE / 2 >= puppyX && ballX - BALL_SIZE / 2 <= puppyX + PUPPY_WIDTH &&
ballY + BALL_SIZE / 2 >= puppyY && ballY - BALL_SIZE / 2 <= puppyY + PUPPY_HEIGHT) {
display.setCursor(40, 30);
display.print("Caught!");
// Here you might want to reset the ball or increase score etc.
}
display.display();
}
//GAME
// Define menu items
MenuItem menuItems[] = {
{feed_icon, nullptr, "Feed", feedAction},
{lights_icon, nullptr, "Lights", lightsAction},
{game_icon, nullptr, "Game", gameAction},
{medicine_icon, nullptr, "Medicine", medicineAction},
{bath_icon, nullptr, "Bath", bathAction},
{health_icon, nullptr, "Stats", statsAction},
{discipline_icon, nullptr, "Discipline", disciplineAction},
{attention_icon, nullptr, "Attention", attentionAction}
};
// Define game submenu items
MenuItem gameSubMenuItems[] = {
{catchball_icon, catchball_sprite, "Catchball", catchballAction},
{shop_icon, shop_sprite, "Shop", shopAction}
};
const int GAME_SUBMENU_ITEM_COUNT = sizeof(gameSubMenuItems) / sizeof(gameSubMenuItems[0]);
const int MENU_ITEM_COUNT = sizeof(menuItems) / sizeof(menuItems[0]);
uint8_t gameSubMenuSelectedItem = 0; // Track which item in submenu is selected
void shopAction() {
// Clear screen and show ice cream
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
icecream_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000); // Show Ice Cream for 1 second
// Check if user has enough money to buy
if (gameData.money >= 100) {
// Deduct money and inform user
gameData.money -= 100;
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor((SCREEN_WIDTH - 48) / 2, SCREEN_HEIGHT - 40);
display.print("-$100");
display.display();
delay(1000);
} else {
// Not enough money
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor((SCREEN_WIDTH - 58) / 2, SCREEN_HEIGHT - 40);
display.print("$");
display.display();
delay(1000);
}
// Return to menu after shop action
gameData.state = MENU_MODE;
}
const FoodItem foodItems[] = {
{burger_sprite, false},
{spaghetti_sprite, false},
// Ice cream is commented out for now
// {icecream_sprite, true}
};
// Action functions
void feedAction() {
if (!gameData.isSick) {
uint8_t selectedFood = currentFoodItem; // Store the initially selected food item
bool selectionMade = false;
unsigned long startTime = millis();
while (!selectionMade) {
display.clearDisplay();
// Show current food item
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
foodItems[currentFoodItem].sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
// Handle button inputs for food selection
handleButtonsForFoodSelection(&selectionMade);
// If 30 seconds pass without selection, return to menu
if (millis() - startTime >= 30000) {
selectionMade = true; // Force return to menu
break;
}
}
if (selectionMade && selectedFood == currentFoodItem) { // If selection was made and not changed
// Show food being eaten
for (int i = 0; i < 4; ++i) {
const unsigned char* foodState;
switch (i) {
case 0: foodState = food_full; break;
case 1: foodState = food_half; break;
case 2: foodState = food_empty; break;
case 3: foodState = baby_sprite; break;
}
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
foodState, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000); // Show each state for 1 second
}
// Update pet stats
if (gameData.hungerLevel < 5) {
gameData.hungerLevel += 1;
if (gameData.hungerLevel > 5) gameData.hungerLevel = 5;
}
if (gameData.happinessLevel < 5) {
gameData.happinessLevel = min(gameData.happinessLevel + 1, 5);
gameData.ageYears += 0.1; // 20% of 1 year
}
if (gameData.healthLevel < 1) {
gameData.healthLevel = 1;
}
// Check if ice cream was selected (for future use)
if (selectedFood == 2 && foodItems[selectedFood].increasesPoopChance && random(3) == 0) { // This condition will be false for now
gameData.needsPoop = true;
} else if (random(5) == 0) { // Normal chance for burger and spaghetti
gameData.needsPoop = true;
}
// Clear the screen before going back to the menu
display.clearDisplay();
}
gameData.state = MENU_MODE;
} else {
displayNoNoSprite();
}
}
void handleButtonsForFoodSelection(bool* selectionMade) {
for (int i = 0; i < 3; i++) {
int buttonPin = i + 5;
if (digitalRead(buttonPin) == LOW) {
if ((millis() - lastDebounceTime[i]) > debounceDelay) {
lastDebounceTime[i] = millis();
switch (i + 1) {
case 1: // Cycle through food items
currentFoodItem = (currentFoodItem + 1) % 2; // Now only 0 and 1 for burger and spaghetti
break;
case 2: // Select current food item
*selectionMade = true;
break;
case 3: // Return to menu without selection
gameData.state = MENU_MODE;
*selectionMade = true;
return; // Exit the function to go back to the menu
}
}
}
}
}
void lightsAction() {
Serial.println(F("Lights action performed"));
// Display the bed sprite for 2 seconds
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
bed_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(2000); // Show bed sprite for 2 seconds
// Only turn off the display
display.ssd1306_command(SSD1306_DISPLAYOFF);
// Set a flag to indicate we're in display sleep mode
gameData.inDisplaySleep = true;
}
void gameAction() {
gameData.state = GAME_SUBMENU_MODE; // Use a new state for the submenu
gameSubMenuSelectedItem = 0; // Reset selection when entering submenu
if (!gameData.isSick && gameData.hungerLevel > 0) {
if (gameData.happinessLevel < 5) {
gameData.happinessLevel = min(gameData.happinessLevel + 1, 5); // Increase happiness by 20%
gameData.ageYears += 0.2; // 20% of 1 year
}
if (gameData.hungerLevel > 0) {
gameData.hungerLevel--;
}
} else {
displayNoNoSprite();
}
}
void medicineAction() {
if (gameData.isSick) {
if (gameData.money >= 25) { // Check if there's enough money
gameData.money -= 25; // Deduct cost of medicine
gameData.isSick = false;
// Increase health by 20% and cap at 5
gameData.healthLevel = min(gameData.healthLevel + 2, 5); // Increase health by 40%
// Increase happiness by 20% and cap at 5
gameData.happinessLevel = min(gameData.happinessLevel + 1, 5); // Increase happiness by 20%
// Show cost of medicine
display.clearDisplay();
display.setTextSize(2); // Adjust the text size as needed
display.setTextColor(WHITE);
display.setCursor((SCREEN_WIDTH - 48) / 2, SCREEN_HEIGHT - 40); // Positioning the text
display.print("-$25");
display.display();
delay(1000); // Show "-$25" for 1 second
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
baby_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000); // Show happy sprite for 1 second
} else {
// Not enough money
display.clearDisplay();
display.setTextSize(3); // Adjust the text size as needed
display.setTextColor(WHITE);
display.setCursor((SCREEN_WIDTH - 58) / 2, SCREEN_HEIGHT - 40); // Positioning the text
display.print("$");
display.display();
delay(1000); // Show "$" for 1 second
display.clearDisplay();
displayNoNoSprite();
}
} else {
// If not sick, just show sad sprite
displayNoNoSprite();
}
}
void bathAction() {
unsigned long currentTime = millis();
if (firstBath || currentTime - lastBathTime >= 3600000) { // Allow first bath or if 1 hour has passed
if (gameData.hungerLevel > 0) { // Only if hunger is above 10%
if (gameData.happinessLevel < 5) {
gameData.happinessLevel = min(gameData.happinessLevel + 1, 5); // Increase happiness by 20%
}
if (gameData.healthLevel < 5) {
gameData.healthLevel = min(gameData.healthLevel + 1, 5); // Increase health by 20%
gameData.ageYears += 0.2; // 20% of 1 year
}
// Earn money for taking a bath
gameData.money += 50; // Add $50 for bathing
// Bath animation sequence
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
bathStart_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000); // Show bath start for 1 second
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
bathEnd_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000); // Show bath end for 1 second
display.clearDisplay();
display.setTextSize(2); // Adjust the text size as needed
display.setTextColor(WHITE);
display.setCursor((SCREEN_WIDTH - 48) / 2, SCREEN_HEIGHT - 40); // Positioning the text
display.print("+$50");
display.display();
delay(1000); // Show "+$50" for 1 second
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
baby_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000); // Show happy sprite for 1 second
// Update last bath time and set first bath flag
lastBathTime = currentTime;
firstBath = false; // Reset first bath flag
gameData.state = MENU_MODE; // Return to menu after bath
} else {
displayNoNoSprite(); // If hunger level is 0, show "no no" sprite
}
} else {
displayNoNoSprite(); // If less than an hour has passed since last bath, show "no no" sprite
}
}
void statsAction() {
gameData.state = STATS_MODE;
}
void healthAction() {
Serial.println(F("Health action performed"));
}
void disciplineAction() {
Serial.println(F("Discipline action performed"));
gameData.ageYears += 0.2; // 20% of 1 year
}
void attentionAction() {
if (gameData.needsPoop) {
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
toilet_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000);
gameData.needsPoop = false;
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
baby_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000);
if (gameData.happinessLevel < 5) {
gameData.happinessLevel = min(gameData.happinessLevel + 1, 5); // Increase happiness by 20%
}
gameData.state = MENU_MODE;
} else {
displayNoNoSprite();
}
}
// Function to display no-no sprite temporarily
void displayNoNoSprite() {
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
no_no_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
delay(1000); // Show for 1 second
}
void setup() {
Serial.begin(115200);
lastInteractionTime = millis(); // Initialize interaction time
gameData.inDisplaySleep = false;
gameData.money = 0; // Start with $0
gameData.isSick = true;
gameData.sicknessCountToday = 0;
gameData.lastSicknessTime = 0;
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
pinMode(BUTTON_1, INPUT_PULLUP);
pinMode(BUTTON_2, INPUT_PULLUP);
pinMode(BUTTON_3, INPUT_PULLUP);
gameData.hatchingStartTime = millis(); // Start the hatching timer
}
void loop() {
handleButtons();
// Update time continuously
updateTime();
// Only update pet state if not in display sleep mode
if (!gameData.inDisplaySleep) {
updatePetState();
}
// Check for inactivity
if (millis() - lastInteractionTime >= 1800000) { // 30 minutes = 1,800,000 ms
if (!gameData.inDisplaySleep) { // Only go to sleep if not already in display sleep
lightsAction();
lastInteractionTime = millis();
}
}
// Handle button inputs for both waking up and normal operation
for (int i = 0; i < 3; i++) {
int buttonPin = i + 5;
if (digitalRead(buttonPin) == LOW) {
if ((millis() - lastDebounceTime[i]) > debounceDelay) {
lastDebounceTime[i] = millis();
lastInteractionTime = millis(); // Reset interaction timer for any button press
if (gameData.inDisplaySleep) {
// Wake up display if it's in sleep mode
display.ssd1306_command(SSD1306_DISPLAYON);
gameData.inDisplaySleep = false;
} else {
// Normal button handling
handleButtonPress(i + 1); // Assuming handleButtonPress is your function for button actions
}
}
}
}
// Drawing logic based on current game state
if (!gameData.inDisplaySleep) { // Only draw if display is not in sleep mode
if (gameData.state == HATCHING_MODE) {
handleHatching();
drawHatching();
}
else if (gameData.state == MENU_MODE) {
drawIconMenu();
}
else if (gameData.state == STATS_MODE) {
drawStatsScreen();
}
else if (gameData.state == TIME_MODE) {
drawTime();
}
else if (gameData.state == GAME_SUBMENU_MODE) {
drawGameSubMenu();
}
else if (gameData.state == SPRITE_MODE) {
drawSprite();
}
display.display();
}
}
void handleHatching() {
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - gameData.hatchingStartTime;
if (gameData.eggPhase == EGG && elapsedTime >= 30000) { // 30 seconds
gameData.eggPhase = EGG_CRACK;
gameData.hatchingStartTime = currentTime;
}
else if (gameData.eggPhase == EGG_CRACK && elapsedTime >= 30000) { // 30 seconds
gameData.eggPhase = CRACKED;
gameData.hatchingStartTime = currentTime;
}
else if (gameData.eggPhase == CRACKED && elapsedTime >= 10000) { // 10 seconds
gameData.eggPhase = BABY;
gameData.state = SPRITE_MODE;
}
}
void drawHatching() {
display.clearDisplay();
switch (gameData.eggPhase) {
case EGG:
case EGG_CRACK:
case CRACKED: {
int x = (SCREEN_WIDTH - EGG_WIDTH) / 2;
int y = (SCREEN_HEIGHT - EGG_HEIGHT) / 2;
const unsigned char* currentSprite;
switch(gameData.eggPhase) {
case EGG:
currentSprite = egg_sprite;
break;
case EGG_CRACK:
currentSprite = egg_crack_sprite;
break;
case CRACKED:
currentSprite = cracked_sprite;
break;
default:
break;
}
display.drawBitmap(x, y, currentSprite, EGG_WIDTH, EGG_HEIGHT, WHITE);
break;
}
case BABY: {
int x = (SCREEN_WIDTH - SPRITE_SIZE) / 2;
int y = (SCREEN_HEIGHT - SPRITE_SIZE) / 2;
display.drawBitmap(x, y, baby_sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
break;
}
}
}
void handleButtons() {
for (int i = 0; i < 3; i++) {
int buttonPin = i + 5;
if (digitalRead(buttonPin) == LOW) {
if ((millis() - lastDebounceTime[i]) > debounceDelay) {
handleButtonPress(i + 1);
lastDebounceTime[i] = millis();
lastInteractionTime = millis(); // Reset interaction timer
}
}
}
}
void handleButtonPress(int button) {
Serial.print("Button ");
Serial.print(button);
Serial.print(" pressed. Current state: ");
Serial.println(gameData.state);
switch (button) {
case 1:
if (gameData.state == SPRITE_MODE) {
gameData.state = MENU_MODE;
Serial.println("Entering MENU_MODE from SPRITE_MODE");
} else if (gameData.state == MENU_MODE) {
gameData.selectedIcon = (gameData.selectedIcon + 1) % MENU_ITEM_COUNT;
Serial.println("Cycling menu icons");
} else if (gameData.state == GAME_SUBMENU_MODE) {
gameSubMenuSelectedItem = (gameSubMenuSelectedItem + 1) % GAME_SUBMENU_ITEM_COUNT;
Serial.println("Cycling between Catchball and Shop in GAME_SUBMENU_MODE");
}
break;
case 2:
if (gameData.state == MENU_MODE) {
Serial.println("Select action in MENU_MODE");
menuItems[gameData.selectedIcon].action();
} else if (gameData.state == GAME_SUBMENU_MODE) {
Serial.println("Select action in GAME_SUBMENU_MODE");
gameSubMenuItems[gameSubMenuSelectedItem].action();
}
// Handle food selection here if needed, ensure the food selection logic is robust
break;
case 3:
if (gameData.state == MENU_MODE) {
gameData.state = SPRITE_MODE; // Return to moving sprite from menu mode
Serial.println("Returning to SPRITE_MODE from MENU_MODE");
} else if (gameData.state == SPRITE_MODE) {
gameData.state = TIME_MODE;
Serial.println("Switching to TIME_MODE from SPRITE_MODE");
} else if (gameData.state == TIME_MODE) {
gameData.state = SPRITE_MODE;
Serial.println("Switching back to SPRITE_MODE from TIME_MODE");
} else if (gameData.state == GAME_SUBMENU_MODE || gameData.state == STATS_MODE) {
gameData.state = MENU_MODE; // Exit from STATS_MODE or GAME_SUBMENU_MODE to MENU_MODE
Serial.println("Returning to MENU_MODE from STATS_MODE or GAME_SUBMENU_MODE");
} else if (gameData.state == GAME_SUBMENU_MODE) {
gameData.state = MENU_MODE; // Return to menu mode from submenu
Serial.println("Returning to MENU_MODE from GAME_SUBMENU_MODE");
} else {
gameData.state = MENU_MODE; // Default back to MENU_MODE for any other state
Serial.println("Returning to MENU_MODE from unknown state");
}
break;
}
Serial.print("New state after action: ");
Serial.println(gameData.state);
}
void drawSprite() {
unsigned long currentMillis = millis();
if (currentMillis - gameData.lastUpdate >= FRAME_DELAY) {
gameData.lastUpdate = currentMillis;
if ((currentMillis / FRAME_DELAY) % 2 == 0) {
gameData.useInvertedSprite = !gameData.useInvertedSprite;
}
// Update position
if (gameData.movingRight) {
gameData.spriteX++;
if (gameData.spriteX + SPRITE_SIZE >= SCREEN_WIDTH) {
gameData.movingRight = false;
}
} else {
gameData.spriteX--;
if (gameData.spriteX <= 0) {
gameData.movingRight = true;
}
}
}
display.clearDisplay();
// Choose sprite based on the phase and sick status
const unsigned char* currentSprite;
if (gameData.isSick) {
currentSprite = sick_sprite;
} else if (gameData.eggPhase == BABY) {
currentSprite = gameData.useInvertedSprite ? baby_sprite_inverted : baby_sprite;
} else if (gameData.eggPhase == ADULT) {
currentSprite = gameData.useInvertedSprite ? dogWalkInverted : dogWalk0;
} else {
// Handle other phases if needed
currentSprite = baby_sprite; // Default to baby sprite for simplicity
}
display.drawBitmap(gameData.spriteX, (SCREEN_HEIGHT - SPRITE_SIZE) / 2,
currentSprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
}
void drawIconMenu() {
display.clearDisplay();
// Change phase after reaching 8 years if in baby phase
if (gameData.eggPhase == 3 && gameData.ageYears >= 7.99) {
gameData.eggPhase = ADULT; // Change to ADULT phase, not BABY
Serial.println("Phase changed to ADULT"); // Debug
}
updateTime();
updatePetState();
const int ITEMS_PER_ROW = 4;
const int ICON_SPACING = 32;
const int MENU_START_X = (SCREEN_WIDTH - (ITEMS_PER_ROW * ICON_SPACING)) / 2 + 4;
const int ROW_1_Y = 4;
const int ROW_2_Y = 36;
for (int i = 0; i < 8; i++) {
int row = i / ITEMS_PER_ROW;
int col = i % ITEMS_PER_ROW;
int x = MENU_START_X + (col * ICON_SPACING);
int y = (row == 0) ? ROW_1_Y : ROW_2_Y;
if (i == gameData.selectedIcon) {
display.drawRect(x - 2, y - 2, ICON_SIZE + 4, ICON_SIZE + 4, WHITE);
}
display.drawBitmap(x, y, menuItems[i].icon, ICON_SIZE, ICON_SIZE, WHITE);
}
}
void drawStatBar(int x, int y, const char* label, uint8_t value) {
display.setCursor(x, y);
display.print(label);
int barX = x + 45;
display.drawRect(barX, y - 1, 62, 7, WHITE);
// For age, we might want to show the actual age rather than just bars
if (strcmp(label, "Age") == 0) {
display.setCursor(barX + 65, y); // Adjust position to right of bar
display.print((int)gameData.ageYears); // Display integer part of age
display.print("Y"); // 'Y' for Year
}
if (value > 0) {
for (int i = 0; i < value; i++) {
display.fillRect(barX + 2 + (i * 10), y, 8, 5, WHITE);
}
}
}
void drawStatsScreen() {
display.clearDisplay();
display.setTextSize(1);
drawStatBar(0, 8, "Health", gameData.healthLevel);
drawStatBar(0, 18, "Hunger", gameData.hungerLevel);
drawStatBar(0, 28, "Happy", gameData.happinessLevel);
drawStatBar(0, 38, "Smart", gameData.smartLevel);
// Age progress bar
int ageBarMax = (gameData.eggPhase == BABY) ? 8 : 1; // 8 years for baby, infinite for adult
int ageBarProgress = min((int)gameData.ageYears, ageBarMax); // Cap at max age for phase
float agePercentage = (float)ageBarProgress / ageBarMax * 100;
drawStatBar(0, 48, "Age", (uint8_t)(agePercentage / 20)); // Divide by 20 to fit 0-5 scale
// Display Money next to the "Happy" bar
display.setCursor(110, 28); // Adjust X position to be right next to "Happy" bar, Y is the same as "Happy"
display.print("$");
display.setCursor(116, 28); // Adjust this for where you want the number to start
display.print(gameData.money);
}
void drawGameSubMenu() {
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - SPRITE_SIZE) / 2,
(SCREEN_HEIGHT - SPRITE_SIZE) / 2,
gameSubMenuItems[gameSubMenuSelectedItem].sprite, SPRITE_SIZE, SPRITE_SIZE, WHITE);
display.display();
}
// Time update function
void updateTime() {
unsigned long currentMillis = millis();
// Update every 60 seconds (60000 milliseconds)
if (currentMillis - gameData.lastMinuteUpdate >= 60000) {
gameData.lastMinuteUpdate = currentMillis;
gameData.minutes++;
if (gameData.minutes >= 60) {
gameData.minutes = 0;
gameData.hours++;
if (gameData.hours >= 24) {
gameData.hours = 0;
gameData.ageYears += 1.0; // Age increases by 1 year every 24 hours
// Change phase after reaching 8 years if in baby phase
if (gameData.eggPhase == 3 && gameData.ageYears >= 7.99) {
gameData.eggPhase = ADULT; // Change to ADULT phase, not BABY
Serial.println("Phase changed to ADULT"); // Debug
}
}
}
}
}