From 1c2208041b4d52fd91c6220a4a237378fb2b68b4 Mon Sep 17 00:00:00 2001 From: Andreew Gregory Date: Tue, 7 Apr 2026 21:45:47 +0300 Subject: [PATCH] And nothing works --- snake/keymapping.h | 39 ++++ snake/misc_utils.h | 38 +--- snake/random.h | 30 +++ snake/snake | Bin 146920 -> 158720 bytes snake/snake.c | 467 +++++++++++++++++++++++++++++++++++++++++--- snake/sprite_data.h | 402 +++++++++++++++++++------------------- 6 files changed, 711 insertions(+), 265 deletions(-) create mode 100644 snake/keymapping.h diff --git a/snake/keymapping.h b/snake/keymapping.h new file mode 100644 index 0000000..ff67192 --- /dev/null +++ b/snake/keymapping.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include + +/* We still have beef with keyboard, even in userspace */ +#define KEYCODE_SHIFT 42 +#define KEYCODE_ENTER 28 +#define KEYCODE_BACKSPACE 14 +#define KEYCODE_SPACE 57 +#define KEYCODE_ESCAPE 1 +#define KEYCODE_A 30 +#define KEYCODE_S 31 +#define KEYCODE_D 32 +#define KEYCODE_W 17 +#define KEYCODE_Q 16 +#define KEYCODE_ENTER 28 +#define KEYCODE_LEFT 75 +#define KEYCODE_RIGHT 77 +#define KEYCODE_UP 72 +#define KEYCODE_DOWN 80 +#define KEYCODE_1 2 +#define KEYCODE_2 3 + +bool is_keycode_for_press_left(uint8_t keycode) { + return keycode == KEYCODE_LEFT || keycode == KEYCODE_A; +} + +bool is_keycode_for_press_right(uint8_t keycode) { + return keycode == KEYCODE_RIGHT || keycode == KEYCODE_D; +} + +bool is_keycode_for_press_up(uint8_t keycode) { + return keycode == KEYCODE_UP || keycode == KEYCODE_W; +} + +bool is_keycode_for_press_down(uint8_t keycode) { + return keycode == KEYCODE_DOWN || keycode == KEYCODE_S; +} diff --git a/snake/misc_utils.h b/snake/misc_utils.h index 67d99af..07f8019 100644 --- a/snake/misc_utils.h +++ b/snake/misc_utils.h @@ -11,7 +11,7 @@ void _Noreturn panic(const char* message) { __builtin_unreachable(); } -#define check(expr) if (!(expr)){ panic( "Assertion failed at " __FILE__ ": " #expr); } +#define check(expr) if (!(expr)){ panic( "Assertion failed at " __FILE__ ": " #expr "\n"); } typedef struct { int x, y; @@ -85,38 +85,6 @@ const char* StringBuilder_get_cstr(StringBuilder* self) { return self->buf; } - -/* We still have beef with keyboard, even in userspace */ -#define KEYCODE_SHIFT 42 -#define KEYCODE_ENTER 28 -#define KEYCODE_BACKSPACE 14 -#define KEYCODE_SPACE 57 -#define KEYCODE_ESCAPE 1 -#define KEYCODE_A 30 -#define KEYCODE_S 31 -#define KEYCODE_D 32 -#define KEYCODE_W 17 -#define KEYCODE_Q 16 -#define KEYCODE_ENTER 28 -#define KEYCODE_LEFT 75 -#define KEYCODE_RIGHT 77 -#define KEYCODE_UP 72 -#define KEYCODE_DOWN 80 -#define KEYCODE_1 2 -#define KEYCODE_2 3 - -bool is_keycode_for_press_left(uint8_t keycode) { - return keycode == KEYCODE_LEFT || keycode == KEYCODE_A; -} - -bool is_keycode_for_press_right(uint8_t keycode) { - return keycode == KEYCODE_RIGHT || keycode == KEYCODE_D; -} - -bool is_keycode_for_press_up(uint8_t keycode) { - return keycode == KEYCODE_UP || keycode == KEYCODE_W; -} - -bool is_keycode_for_press_down(uint8_t keycode) { - return keycode == KEYCODE_DOWN || keycode == KEYCODE_S; +uint32_t time_ms(void) { + return (uint32_t)syscall(SYS_time_ms, 0); } diff --git a/snake/random.h b/snake/random.h index bea5a1b..4e891dd 100644 --- a/snake/random.h +++ b/snake/random.h @@ -1,4 +1,34 @@ #pragma once #include +#include "misc_utils.h" +typedef struct { + uint32_t state; +} RandomEngine; + +static void RandomEngine_init(RandomEngine* self) { + self->state = 0x6d2b79f5u; +} + +static uint32_t RandomEngine_rnd(RandomEngine* self) { + uint32_t x = self->state; + + if (x == 0) { + x = 0x6d2b79f5u; + } + + x ^= x << 13; + x ^= x >> 17; + x ^= x << 5; + x = x * 1664525u + 1013904223u; + + self->state = x; + return x; +} + +static uint32_t RandomEngine_rnd_interval( + RandomEngine* self, uint32_t from, uint32_t until) { + check(from < until); + return from + RandomEngine_rnd(self) % (until - from); +} diff --git a/snake/snake b/snake/snake index f9aba71b6848eaf8b587cd3ecd4d420add940b77..01f7bb8e35218ff71256f4703ffa274fe87ce179 100755 GIT binary patch literal 158720 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
_|{|fO~!p30B)|SN$ zYu1>hD@D0&dHb$VOUFJHv0?;!Y?A+JWztg<3Qj}zX z66_f0@9NpfhI_sqVtqaRPztvXnY&ksH1j)agePTf`{3f32ub(#42R7(R*6OW?nqDA zOj|8#6Nd+fdcvXLo}SKdx4C|`s5FnR7Ke*&ZtshP*yiO8!R5^jTZ3yhZDc(+hdQd* zp7x$FLI{R?c7;s;I+0;^t`UV<;hsJ??{B{;6ugo3BYZXx2?u-nJ41WT*Vl-CiI>aZ zUUTJI(Ollq7iu30b`6n~(i@Bnwg(6O!6AiynHDzxajlqBvL)uWIn+Kp(9e4Md%`hq zloJXiI6N5Y3`PdcZ?6++_pKL&=JV@BmX9(PYVVw8a#vNbj}0O=oEV1s%(V5Qv|uU+ z-JzbH-QlYv98$i59YX`d!)8T`NS_@a`xIxF|EsdQs@U+p;g0scKJ&r#;#FHLAv8R5 zq)FUmW^NE=X43|dY3|=3YGtr-V4%-DyFuJ(Zf+LE87dj=gM)n`hUy6J423(`uF$UG zkXgA-q?;c!qwxOJEN0H>8t9)&Zm?@$DA>{6KE%4)Zw>`_QchcF8kY17p=^2v`pu;+ zqSpLD3vM41En=HlwN9k!odbLN&Bl%5O|xW^=#JWO6QkXhUDKR)p~a zMJBIO6BU(SKc-Wiit53Ks;g9os64JaR`V?&S-W7=KQ#g)tUM$j^n^qaCPPr7Lq(mX zi8kah&5NLvsTkEtrmS9MOEBwgDR`T3Y4ram!*)>Qs_$|I$Fcd~#|%2|)0seZK>Cj14 zJYPj3Y^8}JUvwU&gP!Oh3n~^mdO#j1-SPmR8a{*{R&)<$EES&htU|}ltg3Ji zPUYzDdIh9Q`Je*@9bd7VT6C*N8$?1p6e!jJahP?GX>A(GgQAWPV!5URfE*f-ZdGRi zF%|W?9|P4Zy_wr4mfh3?SMgOUV;Mm*)0vFTJJT&$Ovb7POI6dYX-vjym+88pTM~4~ zQYPuM2!^b?PjDvZsi@2J@+HhdXI+=^H4&G?=Gt~qa-WkY;zQ`aPvRjI?;ru@^I)tf z&J>{Z(f^S%F+3MI{Vf1Y#h(p4{v&-qkPngbG+a|K$3IeQwE-Vt@lJ>#tp+`QB1-%a z@TnJP97KVz3xpXc?zn;5fyWQmi2p6%@soMN9|9gf86*5B!0BkN2v@>i#5MkHgYY+j z$Ip8R{{*;0`NQiL5xxK+{w0O*2u2V;iXc1%c>Mb!;WfbHCu@Y$r=Iwy2f}Xv9zRos`l$z>lAj6CaZu zGe~OSKl~M(PAB5u1xWtK!0AW=|8$Bucn*a47c~+%2R#0Lk?^;G$3JTj{%hbJNa482 zLwHCi4~fI(`ynyQ%<2;B%-g#}y?MS%%&%_=58-j5G1Al585#=W<`?S6eSB^e3x+z| z!|k~AcTT_G2Sa;%!mM+seNPbIGfyq<7Af3p?GY}W3sy3AY@ypc&?7ve+-ly}Bk~e_ z0n{qW^KJ7vLO&0%4?ah6XyzwC)qinOvTdfL7aJott9nH-E;ryJVK3Wb-qtG$jJHw+ zyF;2kB=`n=W13+ze?{;uMX0?5^9#T-y+W`Yv*;!Go`pbgSocN0Vo)nKxic{AX0 uD?UuNVT*Gjr}XMZI}gFMzG%yj|GMW3c7dBOL&w`vE7YgPI1g!6zyAU$q3` #include #include "misc_utils.h" +#include "keymapping.h" #include "pause_effect.h" - +#include "random.h" #include "sprites.h" #include "sprite_data.h" #include "maps.h" @@ -31,7 +32,7 @@ typedef enum { game_screen_pause, game_screen_select_map, game_screen_select_apple_count, -} GameScreen; +} game_screen_t; #define SNAKE_START_Y 2 @@ -43,7 +44,7 @@ typedef enum { snake_direction_right = 1, snake_direction_top = 2, snake_direction_bottom = 3, -} SnakeDirection; +} snake_direction_t; #define WALKING_ANIM_TIME_SLOW 500 #define HATCHING_ANIM_TIME_SLOW 200 @@ -52,45 +53,54 @@ typedef enum { typedef enum { waiting_reason_step, + waiting_reason_p1, waiting_reason_p2, waiting_reason_cross, - waiting_reason_m2, + + /* we go from cross pupa state to m1 pupa state through 'step', + * not through a separate animation target */ waiting_reason_m1, waiting_reason_zero_pupa, -} WaitingReason; + + waiting_reason_postmortum, +} waiting_reason_t; struct Snake { bool is_space_pressed; - GameScreen game_screen; + game_screen_t game_screen; bool have_game; /* from 0 to PLAYABLE_MAPS_COUNT - 1 */ int selected_map_index; /* from 1 to SNAKE_GAMEMODE_MAX_APPLES, default is SNAKE_GAMEMODE_DEFAULT_APPLES */ int gamemode_apples_count; + RandomEngine r_eng; tile_t world[WORLD_WIDTH][WORLD_HEIGHT]; uint8_t ghost_apples[WORLD_WIDTH][WORLD_HEIGHT]; ivec2 snake_head; - ivec2 snake_pupa; - SnakeDirection cur_snake_direction; - SnakeDirection new_snake_direction; + ivec2 snake_tail; + snake_direction_t cur_snake_direction; + snake_direction_t new_snake_direction; /* If we are about to make a step into a wall, we start dying, * we enter into dying mode, where we keep making steps, but the head * just disappears after walking, moving back. - * When the pupa disappears this way, we enter is_dead state, where + * When the pupa disappears this way, we enter 'awaiting postmortum' state, where * nothing moves. * If we are about to hit ourselves, we don't even move, - * we immediately draw one small splash and enter is_dead state. + * we immediately draw one small splash and enter 'awaiting postmortum' state. * There is no winning state, you just raise your score until you are dead. */ bool is_dying; - bool is_dead; int score; + /* from -1 to PUDDLE_SPRITES - 1 (where -1 means there is no puddle) */ + int puddle_sprite; + ivec2 puddle_center; + /* This stuff regulates game flow and animation progress */ - WaitingReason waiting_reason; - uint32_t waiting_time; + waiting_reason_t waiting_reason; + uint32_t waiting_time; // Measures how much time we already accumulated bool is_time_sped_up; } snake = {1}; @@ -100,11 +110,30 @@ void init_snake() { snake.have_game = false; snake.selected_map_index = 0; snake.gamemode_apples_count = SNAKE_GAMEMODE_DEFAULT_APPLES; + snake.r_eng = (RandomEngine){.state = time_ms()}; /* snake_head and snake_pupa and snake.world * and other gameplay-related variables will be initialized during * map loading */ } +bool place_random_apple() { + for (int t = 0; t < 50; t++) { + uint32_t i = RandomEngine_rnd_interval(&snake.r_eng, 0, WORLD_WIDTH * WORLD_HEIGHT); + if ((&snake.world[0][0])[i] == tile_empty) { + (&snake.world[0][0])[i] = tile_apple; + return true; + } + } + /* I had enough */ + for (uint32_t i = 0; i < WORLD_WIDTH * WORLD_HEIGHT; i++) { + if ((&snake.world[0][0])[i] == tile_empty) { + (&snake.world[0][0])[i] = tile_apple; + return true; + } + } + return false; +} + void start_snake_game() { snake.have_game = true; snake.game_screen = game_screen_gaming; @@ -115,19 +144,206 @@ void start_snake_game() { snake.world[tx][SNAKE_START_Y] = tile_snake_l; } snake.world[SNAKE_START_PUPA_X][SNAKE_START_Y] = tile_pupa_0_l; + for (int app = 0; app < snake.gamemode_apples_count; app++) { + + } snake.new_snake_direction = snake.cur_snake_direction = snake_direction_left; snake.is_dying = false; - snake.is_dead = false; snake.score = 0; snake.waiting_reason = waiting_reason_step; snake.waiting_time = 0; snake.is_time_sped_up = false; + snake.puddle_sprite = -1; } +void set_tile(ivec2 pos, tile_t val) { + check(0 <= pos.x && pos.x < WORLD_WIDTH && 0 <= pos.y && pos.y < WORLD_HEIGHT); + snake.world[pos.x][pos.y] = val; +} -uint32_t time_ms(void) { - return (uint32_t)syscall(SYS_time_ms, 0); +tile_t get_tile(ivec2 pos) { + check(0 <= pos.x && pos.x < WORLD_WIDTH && 0 <= pos.y && pos.y < WORLD_HEIGHT); + return snake.world[pos.x][pos.y]; +} + +snake_direction_t get_opposite_direction(snake_direction_t x) { + if (x == snake_direction_left) { + return snake_direction_right; + } else if (x == snake_direction_right) { + return snake_direction_left; + } else if (x == snake_direction_top) { + return snake_direction_bottom; + } else { + return snake_direction_top; + } +} + +ivec2 world_walk_direction(ivec2 v, snake_direction_t dir) { + if (dir == snake_direction_left) { + return (ivec2){v.x == 0 ? WORLD_WIDTH - 1 : v.x - 1, v.y}; + } else if (dir == snake_direction_right) { + return (ivec2){v.x + 1 == WORLD_WIDTH ? 0 : v.x + 1, v.y}; + } else if (dir == snake_direction_top) { + return (ivec2){v.x, v.y == 0 ? WORLD_HEIGHT - 1 : v.y - 1}; + } else { + return (ivec2){v.x, v.y + 1 == WORLD_HEIGHT ? 0 : v.y + 1}; + } +} + +ivec2 get_puddle_center_for_contact(ivec2 head, snake_direction_t dir) { + ivec2 tile_pos = (ivec2){TILE_WIDTH * head.x, TILE_HEIGHT * head.y}; + if (dir == snake_direction_left || dir == snake_direction_right) { + tile_pos.y += TILE_WIDTH / 2; + } else if (dir == snake_direction_bottom) { + tile_pos.y += TILE_WIDTH; + } + if (dir == snake_direction_top || dir == snake_direction_bottom) { + tile_pos.x += TILE_WIDTH / 2; + } else if (dir == snake_direction_right) { + tile_pos.x += TILE_WIDTH; + } + return tile_pos; +} + +/* takes snake tile, returns cardinal direction of snake origin */ +snake_direction_t get_snake_origin_dir(tile_t tile) { + switch (tile) { + case tile_snake_l: + return snake_direction_right; + case tile_snake_r: + return snake_direction_left; + case tile_snake_t: + return snake_direction_bottom; + case tile_snake_b: + return snake_direction_top; + case tile_snake_bl: + return snake_direction_bottom; + case tile_snake_br: + return snake_direction_bottom; + case tile_snake_lb: + return snake_direction_left; + case tile_snake_rb: + return snake_direction_right; + case tile_snake_tl: + return snake_direction_top; + case tile_snake_tr: + return snake_direction_top; + case tile_snake_lt: + return snake_direction_left; + case tile_snake_rt: + return snake_direction_right; + default: + check(false); + } +} + +tile_t construct_snake_tile(snake_direction_t from, snake_direction_t to) { + check(from != to); + if (from == snake_direction_left) { + if (to == snake_direction_right) + return tile_snake_r; + if (to == snake_direction_top) + return tile_snake_lt; + /* to bottom */ + return tile_snake_lb; + } + if (from == snake_direction_right) { + if (to == snake_direction_left) + return tile_snake_l; + if (to == snake_direction_top) + return tile_snake_rt; + /* to bottom */ + return tile_snake_rb; + } + if (from == snake_direction_top) { + if (to == snake_direction_left) + return tile_snake_tl; + if (to == snake_direction_right) + return tile_snake_tr; + /* to bottom */ + return tile_snake_b; + } + if (from == snake_direction_bottom) { + if (to == snake_direction_left) + return tile_snake_bl; + if (to == snake_direction_right) + return tile_snake_br; + /* to top */ + return tile_snake_t; + } + check(false); +} + +tile_t construct_head_snake_tile(snake_direction_t to) { + return construct_snake_tile(get_opposite_direction(to), to); +} + +tile_t construct_zero_pupa(snake_direction_t to) { + if (to == snake_direction_left) + return tile_pupa_0_l; + if (to == snake_direction_right) + return tile_pupa_0_r; + if (to == snake_direction_top) + return tile_pupa_0_t; + if (to == snake_direction_bottom) + return tile_pupa_0_b; + check(false); +} + +/* takes snake tile, returns it's target direction*/ +snake_direction_t get_snake_destination(tile_t tile) { + switch (tile) { + case tile_snake_l: + return snake_direction_left; + case tile_snake_r: + return snake_direction_right; + case tile_snake_t: + return snake_direction_top; + case tile_snake_b: + return snake_direction_bottom; + case tile_snake_bl: + return snake_direction_left; + case tile_snake_br: + return snake_direction_right; + case tile_snake_lb: + return snake_direction_bottom; + case tile_snake_rb: + return snake_direction_bottom; + case tile_snake_tl: + return snake_direction_left; + case tile_snake_tr: + return snake_direction_right; + case tile_snake_lt: + return snake_direction_top; + case tile_snake_rt: + return snake_direction_top; + default: + check(false); + } +} + +snake_direction_t get_zero_pupa_destination(tile_t tile) { + if (tile == tile_pupa_0_r) + return snake_direction_right; + if (tile == tile_pupa_0_l) + return snake_direction_left; + if (tile == tile_pupa_0_t) + return snake_direction_top; + if (tile == tile_pupa_0_b) + return snake_direction_bottom; + check(false); +} + +/* takes a tile that can possibly become a tail. Either straight snake or pupa */ +bool is_tail_pupa(tile_t tile) { + if (18 <= tile && tile <= 21) + return false; + if (tile == tile_pupa_0_r || tile == tile_pupa_0_l || + tile == tile_pupa_0_b || tile == tile_pupa_0_t) { + return true; + } + check(false); } void clear_frame(uint8_t color) { @@ -200,18 +416,70 @@ void draw_hud(const char *text) { } } +/* You see, we never store pupa hatching stage in world array. + * Instead, we store pupa 0 in world matrix and deduce the correct tile + * in draw_game_world using snake.waiting_reason + */ +tile_t correct_game_tile(tile_t x) { + /* waiting for p2 => we are in p1 */ + if (snake.waiting_reason == waiting_reason_p2) { + if (x == tile_pupa_0_l) + return tile_pupa_p1_l; + if (x == tile_pupa_0_r) + return tile_pupa_p1_r; + if (x == tile_pupa_0_t) + return tile_pupa_p1_t; + if (x == tile_pupa_0_b) + return tile_pupa_p1_b; + } + /* waiting for cross => we are in p2 */ + if (snake.waiting_reason == waiting_reason_cross) { + if (x == tile_pupa_0_l) + return tile_pupa_p2_l; + if (x == tile_pupa_0_r) + return tile_pupa_p2_r; + if (x == tile_pupa_0_t) + return tile_pupa_p2_t; + if (x == tile_pupa_0_b) + return tile_pupa_p2_b; + } + /* waiting for m1 => we are in m2 */ + if (snake.waiting_reason == waiting_reason_m1) { + if (x == tile_pupa_0_l) + return tile_pupa_m2_l; + if (x == tile_pupa_0_r) + return tile_pupa_m2_r; + if (x == tile_pupa_0_t) + return tile_pupa_m2_t; + if (x == tile_pupa_0_b) + return tile_pupa_m2_b; + } + /* waiting for zero_pupa => we are in m1 */ + if (snake.waiting_reason == waiting_reason_zero_pupa) { + if (x == tile_pupa_0_l) + return tile_pupa_m1_l; + if (x == tile_pupa_0_r) + return tile_pupa_m1_r; + if (x == tile_pupa_0_t) + return tile_pupa_m1_t; + if (x == tile_pupa_0_b) + return tile_pupa_m1_b; + } + /* When waiting postmortum, step or p1, pupa looks exactly the same + * (default is zero pupa) */ + return x; +} + void draw_game_world() { if (!snake.have_game) return; for (int tx = 0; tx < WORLD_WIDTH; tx++) { for (int ty = 0; ty < WORLD_HEIGHT; ty++) { - tile_t tt = snake.world[tx][ty]; + tile_t tt = correct_game_tile(snake.world[tx][ty]); if (tt == tile_empty) continue; check((uint8_t)tt < TILE_SPRITES); - // if (tt == tile_snake_l) - // panic("sadasd"); draw_sprite(TILE_WIDTH * tx, TILE_WIDTH * ty - TILE_HEIGHT_OFFSET, TILE_WIDTH, TILE_HEIGHT, &sprite_data.tile[tt].tex[0][0]); } @@ -223,10 +491,7 @@ void draw_game_world() { } } -void draw_frame() { - clear_frame(226); - draw_game_world(); - +void draw_game_text() { StringBuilder hud = { 0 }; if (snake.game_screen == game_screen_gaming) { StringBuilder_append_u32(&hud, snake.score); @@ -245,12 +510,29 @@ void draw_frame() { StringBuilder_append_cstr(&hud, map_list.maps[snake.selected_map_index].name); } else if (snake.game_screen == game_screen_select_apple_count) { StringBuilder_append_cstr(&hud, "SELECT DIFFICULTY\n" - "HOW MANY APPLES ON MAP\nCURRENTLY SELECTED\n"); + "HOW MANY APPLES\nCURRENTLY SELECTED\n"); StringBuilder_append_u32(&hud, snake.gamemode_apples_count); } draw_hud(StringBuilder_get_cstr(&hud)); } +void draw_game_puddles() { + if (snake.puddle_sprite > 0) { + const PuddleSprite* sprite = &sprite_data.puddle[snake.puddle_sprite]; + draw_sprite( + snake.puddle_center.x - PUDDLE_WIDTH / 2, + snake.puddle_center.y - PUDDLE_WIDTH / 2, + PUDDLE_WIDTH, PUDDLE_WIDTH, (&sprite->tex[0][0])); + } +} + +void draw_frame() { + clear_frame(226); + draw_game_puddles(); + draw_game_world(); + draw_game_text(); +} + /* Called when game_screen is game_screen_gaming */ void handle_gaming_keycode(uint8_t keycode) { if (keycode == KEYCODE_ESCAPE) { @@ -286,7 +568,7 @@ int handle_incoming_keycode_after_halt(uint8_t keycode) { if (snake.game_screen == game_screen_gaming) { handle_gaming_keycode(keycode); } else if (snake.game_screen == game_screen_pause) { - if (keycode == KEYCODE_1) { + if (keycode == KEYCODE_1 || (keycode == KEYCODE_ENTER && !snake.have_game)) { snake.game_screen = game_screen_select_map; } else if (keycode == KEYCODE_ESCAPE && snake.have_game) { snake.game_screen = game_screen_gaming; @@ -321,10 +603,135 @@ int handle_incoming_keycode_after_halt(uint8_t keycode) { return 0; } +/* Time flows only in gaming mode. This function can call frame drawing */ +void handle_time_difference(uint32_t time_diff) { + if (snake.game_screen != game_screen_gaming) + return; + if (snake.waiting_reason == waiting_reason_postmortum) + return; + snake.waiting_time += time_diff; + uint32_t target_required_time; + if (snake.is_time_sped_up) { + if (snake.waiting_reason == waiting_reason_step) { + target_required_time = WALKING_ANIM_TIME_SLOW; + } else { + target_required_time = HATCHING_ANIM_TIME_SLOW; + } + } else { + if (snake.waiting_reason == waiting_reason_step) { + target_required_time = WALKING_ANIM_TIME_FAST; + } else { + target_required_time = HATCHING_ANIM_TIME_FAST; + } + } + if (snake.waiting_time > target_required_time) { + snake.waiting_time -= target_required_time; + if (snake.waiting_reason == waiting_reason_step) { + ivec2 tile_pos_ahead = world_walk_direction( + snake.snake_head, snake.new_snake_direction); + tile_t tile_ahead = get_tile(tile_pos_ahead); + /* Processing collisions */ + if (tile_ahead == tile_apple) { + snake.ghost_apples[tile_pos_ahead.x][tile_pos_ahead.y] = 1; + } else if (18 <= tile_ahead && tile_ahead <= 49) { + snake.waiting_reason = waiting_reason_postmortum; + snake.puddle_center = get_puddle_center_for_contact( + snake.snake_head, snake.new_snake_direction); + snake.puddle_sprite = 0; + return; + } else if (2 <= tile_ahead && tile_ahead <= 17) { + snake.is_dying = true; + snake.puddle_center = get_puddle_center_for_contact( + snake.snake_head, snake.new_snake_direction); + if (snake.puddle_sprite + 1 < PUDDLE_SPRITES) { + snake.puddle_sprite++; + } + } + /* normal stuff */ + /* Step 1 */ + ivec2 old_head_pos = snake.snake_head; + if (tile_ahead == tile_empty || tile_ahead == tile_apple) { + set_tile(tile_pos_ahead, + construct_head_snake_tile(snake.new_snake_direction)); + snake.snake_head = tile_pos_ahead; + } + /* Step 2 */ + set_tile(old_head_pos, construct_snake_tile( + get_opposite_direction(snake.cur_snake_direction), snake.new_snake_direction)); + snake.cur_snake_direction = snake.new_snake_direction; + + /* Steps 3... */ + if (is_tail_pupa(get_tile(snake.snake_tail))) { + /* Step 3a */ + snake_direction_t pupa_dir = get_zero_pupa_destination(get_tile(snake.snake_tail)); + ivec2 penultimate_pos = world_walk_direction(snake.snake_tail, pupa_dir); + set_tile(snake.snake_tail, tile_empty); + /* Step 4a */ + snake_direction_t penultimate_part_dir = get_snake_destination(get_tile(penultimate_pos)); + set_tile(penultimate_pos, construct_zero_pupa(penultimate_part_dir)); + snake.snake_tail = penultimate_pos; + /* WARNING: we updated snake_tail by moving pupa forward, we + * WARNING: should check if we moved onto a ghost apple */ + // check, this is important. This is the only place where we move pupa to a new pos + // we check for ghost apples. Clear ghost apples and enter + // p1-waiting state (instead of remaining in step awaiting state) + if (snake.ghost_apples[penultimate_pos.x][penultimate_pos.y]) { + snake.ghost_apples[penultimate_pos.x][penultimate_pos.y] = 0; + + syscall(SYS_set_beep, 5000); + snake.waiting_reason = waiting_reason_p1; + /* Nothing changed on screen because we need to wait even + * for the first stage of hatching. + * We could go to p1 immediately, though */ + } + } else { + snake_direction_t tail_dir = get_snake_destination(get_tile(snake.snake_tail)); + set_tile(snake.snake_tail, construct_zero_pupa(tail_dir)); + + syscall(SYS_set_beep, 3000); + snake.waiting_reason = waiting_reason_m1; + } + + /* If we went with route 3a, pupa has moved and we definitely can + * place an apple. But if it had not and we went through route 3b, + * well, okay, we just won't have a free space for apple */ + if (tile_ahead == tile_apple) { + place_random_apple(); + } + } /* But there are more animation + targets that can finish, other than 'step' */ + else if (snake.waiting_reason == waiting_reason_p1) { + snake.waiting_reason = waiting_reason_p2; + } else if (snake.waiting_reason == waiting_reason_p2) { + snake.waiting_reason = waiting_reason_cross; + } else if (snake.waiting_reason == waiting_reason_cross) { + /* Finished pupa hatching */ + snake_direction_t tail_dir = get_zero_pupa_destination(get_tile(snake.snake_tail)); + set_tile(snake.snake_tail, construct_zero_pupa(tail_dir)); + syscall(SYS_set_beep, 0); + snake.waiting_reason = waiting_reason_step; + } else if (snake.waiting_reason == waiting_reason_m1) { + snake.waiting_reason = waiting_reason_cross; + } else if (snake.waiting_reason == waiting_reason_zero_pupa) { + /* Finished pupa regrowing */ + syscall(SYS_set_beep, 0); + snake.waiting_reason = waiting_reason_step; + } + } +} + +void after_awake_action(uint32_t time_diff) { + handle_time_difference(time_diff); + snake.is_time_sped_up = false; + draw_frame(); + syscall(SYS_swap_frame, (uintptr_t)frame); +} + int main(void) { init_snake(); syscall(SYS_switch_to_graphics, 0); + uint32_t prev_time = time_ms(); while (1) { /* Returned from halt, we can enjoy keyboard input and animation progress*/ for (int ch;(ch = syscall(SYS_getc, 0)) >= 0;) { @@ -337,9 +744,13 @@ int main(void) { snake.is_time_sped_up = true; } /* snake.is_time_sped_up will be relevant when checking animation end */ - draw_frame(); - syscall(SYS_swap_frame, (uintptr_t)frame); + uint32_t current_time = time_ms(); + after_awake_action(current_time - prev_time); + + prev_time = current_time; + syscall(SYS_halt, 0); + } quit: syscall(SYS_switch_to_text, 0); diff --git a/snake/sprite_data.h b/snake/sprite_data.h index 44cbe67..7e4c31e 100644 --- a/snake/sprite_data.h +++ b/snake/sprite_data.h @@ -2,8 +2,6 @@ #include "sprites.h" -// Generated by generate_sprite_data.py -// This header defines a static const SpriteData object. static const SpriteData sprite_data = { .tile = { @@ -1805,222 +1803,222 @@ static const SpriteData sprite_data = { .puddle = { [0] = { /* puddle_1.png */ .tex = { - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 4, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 47, 47, 4, 47, 47, 4, 47, 4, 47, 47, 4, 47, 12, 40, 40, 40, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 4, 4, 47, 4, 4, 4, 40, 4, 47, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 112, 112, 47, 4, 4, 4, 4, 4, 4, 40, 40, 12, 12, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 40, 4, 40, 4, 40, 4, 40, 40, 4, 47, 112, 112, 47, 4, 47, 47, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 112, 47, 40, 40, 40, 40, 4, 4, 40, 4, 4, 40, 40, 4, 4, 112, 47, 47, 4, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 112, 40, 4, 40, 4, 40, 12, 40, 4, 40, 112, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 40, 4, 40, 40, 40, 40, 40, 112, 40, 4, 40, 40, 47, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 4, 112, 112, 112, 40, 4, 4, 112, 112, 40, 4, 40, 112, 112, 112, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 4, 40, 40, 40, 4, 40, 4, 4, 40, 40, 4, 112, 112, 40, 40, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 40, 4, 4, 40, 40, 112, 40, 40, 4, 112, 40, 40, 4, 4, 4, 47, 47, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 4, 40, 112, 40, 40, 4, 40, 40, 4, 112, 4, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 40, 40, 40, 112, 112, 40, 40, 4, 40, 40, 4, 112, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 4, 47, 4, 4, 4, 4, 4, 4, 40, 112, 40, 40, 4, 40, 40, 4, 112, 112, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 112, 112, 4, 4, 40, 40, 40, 4, 40, 4, 4, 40, 4, 112, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 47, 47, 4, 40, 40, 4, 40, 4, 4, 4, 4, 40, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 4, 4, 40, 4, 47, 47, 47, 4, 4, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 4, 4, 47, 47, 4, 4, 112, 112, 47, 47, 47, 4, 47, 47, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 4, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 } } }, [1] = { /* puddle_2.png */ .tex = { - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 112, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 40, 40, 47, 47, 47, 47, 47, 47, 47, 112, 47, 47, 47, 47, 47, 112, 47, 47, 4, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 112, 47, 47, 47, 47, 47, 4, 47, 112, 47, 47, 47, 47, 47, 4, 4, 4, 112, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 47, 4, 4, 112, 4, 47, 112, 112, 4, 112, 40, 4, 112, 4, 47, 47, 47, 47, 112, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 4, 112, 47, 4, 4, 112, 40, 4, 4, 112, 40, 112, 40, 4, 112, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 112, 4, 4, 112, 4, 4, 4, 40, 40, 112, 40, 4, 112, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 112, 47, 112, 40, 4, 40, 4, 40, 4, 40, 4, 40, 40, 40, 39, 40, 40, 47, 47, 4, 4, 47, 40, 40, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 40, 40, 40, 47, 4, 4, 4, 4, 112, 4, 112, 4, 40, 40, 4, 40, 4, 4, 4, 40, 40, 39, 4, 112, 40, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 40, 40, 40, 4, 4, 4, 40, 40, 4, 4, 4, 4, 4, 12, 40, 112, 40, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 112, 112, 40, 4, 4, 4, 40, 40, 40, 40, 40, 39, 39, 4, 112, 40, 40, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 40, 40, 40, 47, 47, 47, 47, 47, 4, 4, 12, 4, 40, 40, 40, 40, 4, 40, 40, 40, 4, 4, 112, 112, 112, 47, 40, 4, 112, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 112, 47, 4, 4, 40, 40, 4, 40, 40, 4, 40, 40, 4, 40, 4, 112, 40, 40, 4, 112, 47, 112, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 112, 40, 4, 40, 4, 40, 12, 40, 40, 40, 40, 40, 40, 4, 4, 4, 112, 4, 112, 112, 47, 47, 47, 40, 40, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 4, 4, 40, 40, 40, 40, 4, 40, 40, 4, 40, 40, 40, 40, 4, 40, 40, 40, 40, 40, 39, 112, 4, 112, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 4, 4, 40, 4, 112, 112, 112, 40, 40, 40, 40, 40, 4, 40, 40, 40, 40, 112, 40, 40, 40, 40, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 4, 4, 40, 4, 40, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 40, 40, 47, 47, 47, 47, 47, 4, 4, 40, 40, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 40, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 40, 4, 40, 112, 40, 40, 40, 40, 40, 40, 40, 4, 39, 40, 4, 4, 112, 112, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 4, 12, 40, 40, 40, 112, 112, 40, 40, 4, 40, 40, 4, 112, 40, 40, 40, 40, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 4, 40, 4, 4, 4, 4, 40, 4, 40, 112, 12, 40, 4, 40, 40, 40, 112, 4, 40, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 4, 40, 40, 39, 112, 112, 40, 4, 40, 40, 12, 4, 40, 4, 40, 40, 4, 112, 39, 40, 40, 4, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 40, 40, 47, 47, 4, 40, 40, 40, 112, 40, 4, 40, 40, 40, 4, 40, 4, 4, 4, 40, 40, 4, 40, 40, 40, 40, 40, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 40, 4, 4, 40, 40, 4, 40, 40, 4, 4, 40, 40, 4, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 112, 4, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 112, 40, 40, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 4, 112, 4, 112, 4, 40, 112, 4, 4, 4, 112, 40, 40, 112, 40, 40, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 112, 112, 112, 112, 112, 4, 112, 112, 4, 112, 4, 40, 40, 40, 112, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 40, 47, 47, 4, 112, 4, 4, 112, 47, 4, 112, 4, 4, 112, 40, 112, 40, 40, 40, 4, 47, 47, 47, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 47, 47, 47, 112, 47, 4, 47, 4, 112, 112, 4, 4, 40, 4, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 47, 47, 47, 47, 47, 47, 4, 47, 4, 4, 47, 47, 47, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 4, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 47, 4, 47, 47, 47, 47, 40, 40, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 } } }, [2] = { /* puddle_3.png */ .tex = { - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 47, 47, 4, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 112, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 40, 40, 40, 47, 40, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 40, 40, 47, 47, 4, 47, 47, 47, 47, 112, 47, 47, 47, 47, 47, 112, 47, 47, 4, 47, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 40, 40, 40, 40, 47, 47, 47, 47, 47, 4, 47, 47, 4, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 112, 47, 4, 4, 4, 4, 4, 40, 4, 4, 40, 40, 4, 4, 4, 4, 4, 112, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 4, 40, 4, 4, 4, 40, 4, 4, 4, 4, 4, 112, 4, 47, 47, 47, 47, 112, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 47, 47, 4, 4, 112, 4, 4, 4, 112, 40, 4, 40, 112, 40, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 40, 112, 40, 112, 4, 4, 4, 47, 47, 47, 47, 47, 40, 40, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 40, 40, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 112, 4, 4, 4, 47, 4, 4, 47, 40, 40, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 40, 40, 40, 47, 4, 4, 40, 40, 4, 40, 40, 40, 40, 40, 4, 4, 40, 40, 40, 40, 40, 40, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 40, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 4, 40, 4, 4, 4, 4, 4, 40, 40, 40, 40, 40, 4, 40, 4, 4, 4, 40, 4, 4, 4, 4, 4, 47, 47, 47, 47, 40, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 4, 4, 40, 40, 4, 4, 4, 4, 4, 4, 40, 40, 4, 4, 4, 112, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 40, 40, 40, 40, 47, 47, 112, 4, 40, 4, 4, 112, 40, 4, 4, 112, 112, 40, 4, 4, 40, 40, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 40, 47, 47, 47, 47 }, + { 47, 47, 40, 40, 111, 40, 40, 4, 112, 4, 4, 4, 4, 40, 4, 4, 112, 4, 40, 4, 4, 4, 40, 4, 40, 40, 40, 4, 4, 4, 4, 47, 47, 47, 40, 40, 47, 47, 47, 47 }, + { 47, 47, 47, 112, 40, 40, 4, 4, 4, 4, 4, 40, 40, 4, 40, 4, 4, 112, 112, 40, 4, 4, 112, 112, 112, 112, 4, 40, 4, 4, 4, 47, 47, 40, 40, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 111, 4, 4, 40, 4, 40, 4, 40, 4, 4, 4, 40, 4, 4, 4, 40, 4, 4, 4, 4, 4, 4, 4, 4, 40, 4, 4, 4, 47, 47, 40, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 112, 111, 40, 40, 4, 4, 4, 40, 4, 40, 40, 4, 40, 40, 4, 4, 4, 4, 4, 4, 4, 4, 112, 4, 40, 40, 4, 4, 40, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 111, 111, 111, 40, 4, 4, 4, 40, 40, 112, 112, 4, 4, 4, 4, 4, 40, 40, 40, 4, 4, 4, 112, 40, 40, 4, 4, 40, 47, 47, 47, 47, 40, 40, 47, 47, 47 }, + { 47, 47, 40, 40, 47, 111, 111, 111, 4, 4, 4, 40, 112, 4, 4, 40, 4, 112, 112, 4, 40, 4, 40, 40, 4, 4, 40, 4, 4, 4, 40, 4, 47, 47, 40, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 40, 112, 4, 4, 4, 4, 40, 4, 4, 40, 4, 112, 40, 40, 4, 4, 4, 4, 40, 4, 40, 4, 4, 40, 40, 40, 4, 47, 47, 40, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 4, 4, 111, 4, 40, 4, 40, 4, 4, 4, 4, 4, 40, 4, 4, 4, 40, 4, 40, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 4, 40, 4, 4, 40, 4, 4, 4, 4, 4, 4, 4, 40, 4, 4, 40, 4, 4, 40, 4, 4, 40, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 40, 4, 4, 4, 4, 4, 40, 4, 4, 40, 4, 40, 4, 112, 4, 4, 112, 40, 4, 4, 4, 40, 47, 47, 4, 47, 47, 47, 47 }, + { 47, 47, 40, 40, 47, 47, 4, 40, 4, 40, 4, 4, 4, 4, 4, 4, 40, 40, 4, 4, 40, 40, 4, 4, 40, 4, 40, 112, 112, 4, 4, 4, 40, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 40, 40, 40, 4, 4, 4, 40, 4, 40, 40, 4, 4, 4, 4, 4, 111, 112, 4, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 40, 40, 4, 40, 40, 4, 4, 4, 4, 40, 4, 4, 40, 4, 4, 4, 4, 4, 40, 112, 112, 4, 111, 4, 112, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 40, 47, 47, 4, 40, 4, 4, 4, 4, 4, 40, 4, 4, 4, 40, 4, 4, 4, 112, 4, 4, 4, 112, 112, 111, 4, 47, 47, 47, 40, 40, 47, 47, 47, 47 }, + { 47, 47, 47, 4, 4, 47, 47, 4, 40, 47, 4, 112, 112, 4, 4, 40, 4, 4, 4, 4, 4, 4, 4, 4, 112, 4, 111, 111, 111, 112, 112, 47, 47, 47, 47, 40, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 40, 40, 47, 4, 4, 4, 4, 40, 4, 4, 4, 4, 4, 40, 40, 40, 4, 4, 112, 4, 111, 111, 111, 4, 40, 47, 47, 47, 47, 40, 40, 47, 47 }, + { 47, 47, 47, 47, 47, 40, 47, 47, 47, 47, 4, 4, 4, 40, 40, 40, 4, 4, 4, 4, 40, 40, 40, 40, 40, 112, 111, 111, 4, 4, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 40, 47, 47, 4, 4, 40, 40, 40, 4, 40, 40, 40, 4, 112, 112, 4, 4, 112, 112, 112, 4, 112, 111, 111, 4, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 40, 40, 40, 47, 40, 40, 40, 4, 112, 112, 112, 40, 112, 112, 112, 112, 112, 112, 111, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 40, 40, 40, 47, 47, 40, 47, 47, 40, 40, 4, 4, 40, 40, 40, 40, 112, 112, 112, 112, 112, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 47, 4, 47, 47, 47, 47, 40, 47, 4, 40, 4, 40, 4, 40, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 } } }, [3] = { /* puddle_4.png */ .tex = { - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 4, 47, 47, 47, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 112, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 40, 47, 47, 112, 4, 4, 112, 112, 112, 112, 112, 112, 4, 4, 4, 47, 40, 40, 4, 40, 112, 40, 4, 4, 47, 47, 47, 47, 4, 4, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 40, 40, 47, 47, 4, 112, 112, 4, 4, 4, 4, 40, 4, 112, 4, 4, 40, 40, 4, 112, 40, 40, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 112, 47, 47, 4, 4, 4, 4, 4, 4, 112, 40, 40, 40, 40, 40, 40, 40, 4, 112, 112, 40, 4, 112, 4, 4, 47, 40, 47, 4, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 112, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 40, 40, 4, 4, 4, 40, 40, 40, 40, 4, 4, 4, 4, 112, 47, 112, 112, 112, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 4, 4, 4, 112, 112, 4, 4, 4, 4, 40, 4, 4, 4, 40, 4, 4, 40, 4, 4, 112, 4, 40, 4, 112, 112, 4, 47, 40, 40, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 112, 4, 4, 4, 4, 40, 112, 4, 4, 4, 112, 40, 4, 40, 112, 40, 40, 4, 4, 4, 4, 4, 40, 40, 4, 47, 40, 40, 47, 47, 47, 47, 47, 47, 40 }, + { 47, 47, 47, 47, 47, 112, 40, 40, 4, 4, 4, 40, 4, 40, 4, 4, 40, 40, 40, 4, 40, 112, 40, 112, 4, 4, 4, 40, 112, 4, 40, 40, 4, 40, 4, 40, 47, 47, 40, 47 }, + { 47, 47, 47, 47, 47, 4, 4, 4, 40, 40, 4, 40, 4, 40, 4, 4, 40, 40, 40, 40, 4, 4, 4, 4, 112, 4, 4, 4, 4, 112, 112, 112, 4, 4, 40, 4, 47, 40, 47, 47 }, + { 47, 47, 47, 40, 4, 4, 4, 4, 4, 4, 40, 4, 40, 40, 40, 40, 40, 4, 4, 40, 40, 40, 40, 40, 40, 4, 4, 4, 4, 40, 4, 40, 112, 40, 4, 4, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 4, 4, 40, 4, 4, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 40, 40, 4, 4, 40, 40, 40, 4, 40, 112, 4, 4, 47, 40, 40, 47 }, + { 47, 47, 40, 40, 4, 4, 4, 40, 40, 4, 40, 4, 4, 40, 112, 112, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 4, 4, 4, 4, 4, 40, 4, 112, 4, 4, 47, 47, 47, 47 }, + { 40, 40, 40, 4, 4, 4, 112, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, 40, 40, 40, 40, 40, 4, 4, 4, 40, 4, 112, 112, 4, 47, 47, 4, 47 }, + { 47, 47, 4, 40, 4, 4, 40, 4, 4, 40, 40, 40, 40, 40, 40, 12, 40, 40, 40, 12, 12, 12, 40, 40, 40, 40, 40, 112, 112, 112, 40, 40, 4, 112, 4, 112, 47, 47, 47, 47 }, + { 47, 47, 4, 4, 4, 40, 4, 4, 40, 112, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 40, 40, 40, 40, 40, 4, 40, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47 }, + { 47, 47, 4, 4, 4, 4, 40, 40, 40, 40, 40, 4, 40, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 40, 40, 4, 4, 4, 40, 40, 40, 40, 4, 47, 47, 47 }, + { 4, 4, 4, 4, 4, 40, 40, 40, 40, 40, 40, 112, 40, 40, 40, 40, 12, 12, 40, 12, 12, 40, 40, 40, 4, 40, 40, 40, 40, 4, 112, 4, 4, 40, 40, 40, 4, 4, 4, 47 }, + { 47, 47, 4, 111, 4, 4, 40, 4, 40, 4, 40, 112, 40, 40, 40, 40, 40, 40, 40, 40, 112, 40, 40, 40, 40, 40, 40, 40, 4, 4, 112, 4, 4, 4, 112, 4, 4, 47, 47, 47 }, + { 47, 47, 4, 40, 4, 4, 40, 40, 4, 4, 40, 112, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 40, 40, 4, 4, 40, 4, 4, 4, 4, 4, 4, 47, 47, 47 }, + { 47, 47, 47, 4, 4, 4, 112, 112, 4, 4, 40, 40, 40, 12, 40, 40, 40, 40, 12, 40, 40, 40, 4, 40, 4, 40, 40, 40, 40, 40, 40, 4, 40, 40, 40, 4, 4, 47, 4, 4 }, + { 47, 47, 47, 4, 4, 4, 112, 4, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 40, 40, 40, 4, 4, 4, 4, 4, 4, 4, 40, 4, 47, 47, 47 }, + { 47, 40, 40, 4, 4, 4, 112, 4, 40, 4, 40, 40, 4, 4, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 112, 4, 4, 4, 40, 40, 4, 4, 4, 47, 4, 4 }, + { 40, 47, 47, 4, 4, 4, 112, 4, 4, 40, 40, 40, 4, 40, 40, 40, 40, 40, 4, 40, 40, 40, 40, 40, 112, 40, 4, 112, 40, 4, 4, 4, 4, 40, 40, 4, 4, 47, 47, 47 }, + { 47, 47, 40, 40, 4, 4, 40, 40, 40, 40, 40, 4, 40, 4, 4, 4, 40, 40, 40, 40, 40, 40, 4, 4, 40, 4, 40, 112, 112, 4, 4, 4, 4, 4, 4, 40, 4, 47, 47, 47 }, + { 47, 47, 47, 47, 4, 40, 4, 4, 40, 40, 4, 40, 40, 40, 40, 40, 40, 112, 4, 40, 4, 40, 40, 40, 4, 40, 4, 4, 4, 4, 112, 4, 4, 4, 4, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 112, 4, 40, 4, 4, 4, 4, 4, 40, 40, 4, 4, 4, 4, 112, 47, 4, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 40, 40, 40, 4, 40, 40, 40, 40, 4, 4, 40, 4, 112, 112, 40, 4, 4, 40, 112, 4, 4, 40, 112, 4, 111, 4, 4, 4, 4, 40, 40, 47, 47, 47, 47 }, + { 47, 47, 47, 4, 4, 40, 47, 40, 40, 40, 40, 40, 112, 4, 4, 40, 112, 4, 112, 4, 4, 4, 40, 4, 112, 4, 111, 40, 4, 112, 112, 47, 4, 4, 47, 40, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 40, 4, 40, 40, 4, 40, 4, 40, 4, 112, 112, 4, 4, 40, 40, 40, 4, 4, 112, 4, 40, 4, 4, 4, 4, 4, 4, 4, 4, 40, 40, 47, 47 }, + { 47, 47, 47, 47, 47, 40, 47, 40, 40, 4, 4, 4, 40, 40, 40, 40, 4, 112, 4, 4, 40, 40, 40, 40, 40, 112, 4, 111, 40, 4, 47, 4, 4, 4, 4, 47, 47, 4, 47, 47 }, + { 47, 47, 47, 47, 47, 40, 47, 47, 4, 4, 4, 40, 40, 4, 40, 40, 40, 4, 112, 112, 4, 4, 112, 112, 4, 4, 4, 111, 111, 4, 4, 47, 4, 4, 47, 4, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 40, 40, 4, 40, 40, 40, 40, 4, 112, 112, 112, 40, 112, 112, 4, 112, 112, 112, 111, 47, 4, 4, 4, 4, 47, 4, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 40, 40, 40, 47, 40, 40, 47, 47, 40, 40, 4, 4, 40, 40, 40, 40, 112, 4, 112, 112, 112, 4, 4, 4, 47, 47, 47, 47, 47, 4, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 47, 47, 47, 47, 4, 47, 47, 4, 40, 4, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 4, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 40, 40, 4, 4, 4, 4, 4, 4, 40, 47, 47, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 40, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 } } }, [4] = { /* puddle_5.png */ .tex = { - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 40, 4, 4, 4, 4, 4, 40, 40, 4, 4, 4, 4, 40, 40, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 4, 4, 47, 47, 47, 47, 40, 40, 4, 4, 4, 40, 40, 4, 4, 4, 40, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 40, 40, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 4, 4, 47, 40, 47, 40, 4, 4, 4, 4, 4, 4, 40, 112, 112, 112, 40, 40, 4, 4, 4, 40, 4, 4, 4, 4, 4, 4, 40, 4, 47, 47, 4, 4, 4, 47, 47, 47 }, + { 47, 47, 47, 4, 4, 40, 4, 4, 40, 40, 40, 40, 4, 4, 40, 40, 40, 4, 4, 40, 4, 112, 4, 4, 40, 40, 4, 112, 40, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47 }, + { 47, 47, 40, 40, 4, 4, 4, 4, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 112, 40, 4, 112, 4, 4, 4, 40, 40, 4, 4, 4, 4, 47, 47, 47, 47 }, + { 47, 47, 47, 4, 4, 40, 4, 40, 4, 4, 4, 40, 40, 40, 40, 4, 4, 40, 40, 40, 4, 4, 40, 40, 40, 40, 4, 4, 4, 4, 40, 4, 4, 40, 40, 4, 47, 47, 47, 47 }, + { 47, 47, 47, 4, 4, 40, 4, 40, 40, 112, 4, 40, 40, 40, 40, 40, 40, 4, 40, 4, 40, 40, 4, 4, 112, 4, 40, 4, 112, 40, 4, 40, 40, 4, 4, 4, 47, 47, 47, 47 }, + { 47, 47, 4, 4, 4, 112, 4, 40, 40, 4, 40, 112, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 4, 4, 40, 40, 4, 40, 40, 40, 4, 4, 4, 4, 4, 47, 40 }, + { 47, 47, 4, 4, 4, 40, 40, 40, 4, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 112, 4, 4, 12, 12, 40, 4, 40, 40, 4, 40, 4, 4, 4, 47, 40, 47 }, + { 47, 4, 4, 4, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 12, 4, 4, 112, 112, 112, 4, 4, 40, 4, 4, 40, 47, 47 }, + { 47, 4, 4, 4, 40, 40, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, 40, 4, 4, 40, 4, 40, 112, 40, 4, 4, 4, 47, 47, 47 }, + { 47, 4, 4, 40, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 40, 40, 40, 4, 40, 40, 40, 4, 40, 112, 4, 4, 4, 4, 40, 47 }, + { 47, 4, 4, 4, 4, 40, 4, 40, 40, 40, 40, 40, 40, 12, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 4, 4, 4, 40, 40, 4, 112, 40, 4, 4, 4, 47, 47 }, + { 4, 4, 4, 40, 40, 40, 112, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, 12, 12, 40, 40, 40, 40, 40, 40, 40, 4, 40, 4, 40, 4, 40, 112, 4, 4, 4, 4, 47 }, + { 4, 4, 40, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, 40, 40, 40, 40, 40, 40, 40, 40, 12, 12, 40, 40, 12, 4, 112, 4, 4, 4, 47 }, + { 4, 4, 40, 4, 40, 40, 40, 4, 40, 12, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, 12, 4, 40, 12, 12, 4, 4, 4, 4, 4, 4, 47 }, + { 4, 4, 4, 40, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, 40, 40, 4, 4, 40, 40, 40, 40, 40, 4, 4, 4, 47 }, + { 4, 4, 4, 40, 4, 40, 40, 40, 40, 40, 40, 12, 40, 40, 40, 40, 40, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 112, 40, 4, 4, 40, 40, 4, 4, 4, 47 }, + { 4, 4, 40, 4, 40, 40, 40, 40, 40, 40, 12, 40, 40, 40, 40, 40, 40, 40, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 112, 40, 40, 4, 4, 4, 4, 4, 4, 47 }, + { 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 40, 40, 40, 40, 4, 4, 4, 4, 4, 47 }, + { 4, 4, 40, 4, 40, 4, 40, 40, 40, 40, 40, 12, 40, 40, 12, 40, 40, 40, 40, 40, 40, 40, 4, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 4, 4 }, + { 4, 4, 40, 40, 40, 4, 40, 40, 40, 40, 40, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 40, 4, 4, 4, 47 }, + { 4, 4, 40, 40, 40, 40, 112, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, 12, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 4, 40, 40, 4, 4, 40, 4, 4, 4 }, + { 4, 4, 4, 4, 40, 40, 112, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 112, 40, 40, 4, 4, 4, 40, 40, 40, 40, 4, 4, 47 }, + { 4, 4, 4, 40, 4, 40, 40, 40, 40, 40, 40, 4, 40, 40, 4, 4, 40, 40, 40, 40, 40, 40, 4, 4, 40, 4, 40, 112, 112, 40, 40, 4, 40, 40, 40, 4, 4, 4, 4, 47 }, + { 47, 4, 4, 4, 4, 40, 4, 40, 40, 40, 4, 40, 40, 40, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 4, 4, 112, 40, 40, 4, 4, 40, 4, 4, 4, 47 }, + { 47, 4, 4, 4, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 40, 4, 40, 40, 40, 40, 40, 4, 4, 4, 4, 40, 4, 4, 4, 4, 4, 47 }, + { 47, 47, 4, 4, 40, 4, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 112, 4, 40, 40, 4, 4, 40, 4, 4, 4, 4, 4, 47 }, + { 47, 47, 4, 4, 4, 4, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 40, 40, 112, 40, 40, 40, 4, 4, 40, 40, 40, 40, 40, 40, 40, 4, 4, 47 }, + { 47, 47, 47, 4, 4, 4, 4, 40, 4, 40, 40, 40, 40, 40, 40, 4, 40, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 40, 40, 4, 4, 40, 4, 4, 4, 4, 40, 4, 47, 47 }, + { 47, 47, 47, 4, 4, 4, 4, 4, 40, 4, 4, 4, 40, 40, 40, 40, 40, 40, 40, 4, 40, 40, 40, 40, 40, 112, 40, 40, 40, 40, 40, 40, 4, 4, 4, 4, 4, 4, 47, 47 }, + { 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 40, 40, 4, 40, 40, 40, 40, 40, 40, 4, 4, 112, 40, 4, 4, 4, 111, 40, 40, 40, 40, 40, 4, 4, 4, 4, 4, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 4, 4, 40, 4, 4, 4, 4, 40, 40, 40, 4, 40, 112, 112, 40, 40, 40, 40, 112, 40, 40, 111, 4, 40, 40, 40, 40, 4, 4, 4, 4, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 4, 4, 4, 4, 40, 40, 4, 4, 40, 40, 4, 40, 40, 40, 40, 40, 40, 40, 112, 112, 112, 40, 4, 40, 4, 40, 40, 4, 4, 4, 4, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 40, 4, 4, 4, 4, 4, 4, 4, 4, 4, 40, 4, 40, 4, 4, 4, 4, 40, 4, 4, 4, 4, 4, 4, 40, 4, 4, 4, 4, 47, 47, 47, 4, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 40, 40, 40, 40, 40, 40, 4, 40, 4, 4, 4, 40, 40, 4, 40, 4, 4, 4, 47, 4, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 4, 4, 47, 47, 4, 4, 4, 4, 4, 4, 40, 40, 4, 4, 4, 4, 4, 40, 4, 4, 4, 40, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 4, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47 }, + { 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47 } } }, },