aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-02-01 12:33:55 +0100
committerCharles <sircharlesaze@gmail.com>2020-02-01 12:33:55 +0100
commita0f26d0407a2e514e9dcfd2baeef5ccd98f7b3dd (patch)
treefc919296727d6a6dc4eda868d143cb86017ed2bc
parent57867bbbdc24b734d85f8d3569c7ad27dcd9504d (diff)
downloadcub3d-a0f26d0407a2e514e9dcfd2baeef5ccd98f7b3dd.tar.gz
cub3d-a0f26d0407a2e514e9dcfd2baeef5ccd98f7b3dd.tar.bz2
cub3d-a0f26d0407a2e514e9dcfd2baeef5ccd98f7b3dd.zip
texture selector, collision detection
-rw-r--r--Makefile3
-rw-r--r--include/cub3d.h13
-rw-r--r--minimalist.cub14
-rw-r--r--src/event.c7
-rw-r--r--src/helper.c5
-rw-r--r--src/parse/parse.c10
-rw-r--r--src/parse/parse_color.c2
-rw-r--r--src/render.c42
-rw-r--r--src/render_state.c46
-rw-r--r--src/texture.c55
-rw-r--r--textures/barrel.xpm97
-rw-r--r--textures/bluestone.xpm90
-rw-r--r--textures/brick.xpm114
-rw-r--r--textures/colorstone.xpm96
-rw-r--r--textures/eagle.xpm126
-rw-r--r--textures/greenlight.xpm96
-rw-r--r--textures/greystone.xpm (renamed from textures/stone.xpm)26
-rw-r--r--textures/mossy.xpm16
-rw-r--r--textures/pillar.xpm91
-rw-r--r--textures/purplestone.xpm90
-rw-r--r--textures/redbrick.xpm96
-rw-r--r--textures/wood.xpm154
22 files changed, 988 insertions, 301 deletions
diff --git a/Makefile b/Makefile
index 5b4222e..8df44eb 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,8 @@ SRCFILES = main.c \
render_state.c \
helper.c \
error.c \
- capture.c
+ capture.c \
+ texture.c
SRC = $(addprefix $(SRCDIR)/,$(SRCFILES))
$(info $(SRC))
OBJ = $(SRC:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
diff --git a/include/cub3d.h b/include/cub3d.h
index 2c5d0c3..4f5b38c 100644
--- a/include/cub3d.h
+++ b/include/cub3d.h
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/15 06:40:37 by cacharle #+# #+# */
-/* Updated: 2020/01/30 15:05:20 by cacharle ### ########.fr */
+/* Updated: 2020/02/01 11:58:35 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdio.h>
@@ -206,7 +206,7 @@ int render_update(void *param);
void render_update_window(t_state *state);
void render_column(t_state *state, int x);
void render_window_column(t_state *state, t_render_state *rstate);
-void render_texture(t_state *state, t_render_state *rstate);
+void render_texture(t_state *state, t_render_state *rstate, int *i);
/*
** vector.c
@@ -254,8 +254,13 @@ void rstate_init_probe(t_state *state, t_render_state *rstate);
void rstate_perp_dist(t_state *state, t_render_state *rstate);
void rstate_line_height(t_state *state, t_render_state *rstate);
void rstate_next_probe(t_render_state *rstate);
-t_image *get_tex(t_state *state, t_render_state *rstate);
-int get_tex_x(t_state *state, t_render_state *rstate, t_image *texture);
+
+/*
+** texture.c
+*/
+
+t_image *texture_select(t_state *state, t_render_state *rstate);
+int texture_x(t_state *state, t_render_state *rstate, t_image *texture);
/*
** capture.c
diff --git a/minimalist.cub b/minimalist.cub
index a1d6433..a50631f 100644
--- a/minimalist.cub
+++ b/minimalist.cub
@@ -1,12 +1,12 @@
-R 700 500
+R 1500 1200
NO ./textures/wood.xpm
-SO ./textures/wood.xpm
-WE ./textures/brick.xpm
-EA ./textures/stone.xpm
+SO ./textures/eagle.xpm
+WE ./textures/redbrick.xpm
+EA ./textures/eagle.xpm
-S ./textures/brick.xpm
-F 0,225,0
-C 200,200,0
+S ./textures/barrel.xpm
+F 10,10,50
+C 20,20,0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/src/event.c b/src/event.c
index 9dcaa75..cff9e5d 100644
--- a/src/event.c
+++ b/src/event.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/15 06:39:37 by cacharle #+# #+# */
-/* Updated: 2020/01/30 15:20:18 by cacharle ### ########.fr */
+/* Updated: 2020/02/01 12:30:49 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -17,6 +17,9 @@
int event_keydown(int key, t_state *state)
{
+ t_vector saved_pos;
+
+ saved_pos = state->pos;
if (key == MLXK_ESC)
state->running = FALSE;
else if (key == MLXK_A)
@@ -35,6 +38,8 @@ int event_keydown(int key, t_state *state)
helper_rotate_player(state, -ROTATE_STEP);
else if (key == MLXK_RIGHT)
helper_rotate_player(state, ROTATE_STEP);
+ if (state->map[(int)state->pos.y][(int)state->pos.x] == CELL_WALL)
+ state->pos = saved_pos;
return (0);
}
diff --git a/src/helper.c b/src/helper.c
index 9940848..6fa7ffe 100644
--- a/src/helper.c
+++ b/src/helper.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/11 07:32:20 by cacharle #+# #+# */
-/* Updated: 2020/01/16 08:57:01 by cacharle ### ########.fr */
+/* Updated: 2020/02/01 11:32:15 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -38,7 +38,8 @@ void helper_rotate_player(t_state *state, double rotation)
/*
** Initial player direction vector
-** Since the map [0 0] is in the top left corner the north/south direction are slipped.
+** Since the map [0 0] is in the top left corner
+** the north/south direction are slipped.
** The camera plane has to stay perpendicular to the direction and
** create a camera with a 66 degree angle (which is a recommended angle for fps)
*/
diff --git a/src/parse/parse.c b/src/parse/parse.c
index f4b5b66..581056a 100644
--- a/src/parse/parse.c
+++ b/src/parse/parse.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/15 09:29:21 by cacharle #+# #+# */
-/* Updated: 2020/01/30 12:03:54 by cacharle ### ########.fr */
+/* Updated: 2020/02/01 11:35:32 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -32,8 +32,8 @@ t_state *parse(char *filename)
"parse configuration", state, lines));
}
if ((state = parse_map(state, lines + i)) == NULL)
- return (error_put_return_lines_state_destroy(
- "parse map", state, lines));
+ return (error_put_return_lines_state_destroy("parse map",
+ state, lines));
helper_free_splited(lines);
return (state);
}
@@ -73,8 +73,6 @@ static t_option_parser g_option_parsers[] =
{"C", parse_ceilling_color}
};
-#define OPTIONS_PARSERS_SIZE (sizeof(g_option_parsers) / sizeof(t_option_parser))
-
t_bool parse_line(t_state *state, char *line)
{
int i;
@@ -82,7 +80,7 @@ t_bool parse_line(t_state *state, char *line)
if (!*line)
return (TRUE);
i = -1;
- while (++i < (int)OPTIONS_PARSERS_SIZE)
+ while (++i < (int)(sizeof(g_option_parsers) / sizeof(t_option_parser)))
if (ft_strncmp(g_option_parsers[i].id, line,
ft_strlen(g_option_parsers[i].id)) == 0)
return (g_option_parsers[i].func(
diff --git a/src/parse/parse_color.c b/src/parse/parse_color.c
index fd482e5..3c025de 100644
--- a/src/parse/parse_color.c
+++ b/src/parse/parse_color.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/11 09:52:34 by cacharle #+# #+# */
-/* Updated: 2020/01/30 14:17:37 by cacharle ### ########.fr */
+/* Updated: 2020/02/01 11:32:33 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
diff --git a/src/render.c b/src/render.c
index 88b0cae..820036d 100644
--- a/src/render.c
+++ b/src/render.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/11 13:37:17 by cacharle #+# #+# */
-/* Updated: 2020/01/30 15:17:49 by cacharle ### ########.fr */
+/* Updated: 2020/02/01 12:06:58 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -24,7 +24,8 @@ int render_update(void *param)
return (0);
}
render_update_window(state);
- mlx_put_image_to_window(state->mlx_ptr, state->window_ptr, state->window.id, 0, 0);
+ mlx_put_image_to_window(state->mlx_ptr, state->window_ptr,
+ state->window.id, 0, 0);
return (0);
}
@@ -43,7 +44,7 @@ void render_column(t_state *state, int x)
rstate.x = x;
rstate_ray(state, &rstate);
- rstate.map_pos = vector_new((double)((int)state->pos.x), (double)((int)state->pos.y)); //floor?
+ rstate.map_pos = vector_new((double)((int)state->pos.x), (double)((int)state->pos.y));
rstate_delta(&rstate);
rstate_init_probe(state, &rstate);
rstate.map_step = vector_new(rstate.ray.x < 0.0 ? -1.0 : 1.0, rstate.ray.y < 0.0 ? -1.0 : 1.0);
@@ -73,35 +74,32 @@ void render_window_column(t_state *state, t_render_state *rstate)
white.hexcode = 0x00ffffff;
i = 0;
while (i < rstate->draw_start)
- ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] = state->ceilling_color;
- while (i < rstate->draw_end)
- ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] = white;
- render_texture(state, rstate);
- i = rstate->draw_end;
+ ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] =
+ state->ceilling_color;
+ render_texture(state, rstate, &i);
while (i < state->window.height)
- ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] = state->floor_color;
+ ((t_color*)state->window.data)[i++ * state->window.width + rstate->x] =
+ state->floor_color;
}
-void render_texture(t_state *state, t_render_state *rstate)
+void render_texture(t_state *state, t_render_state *rstate, int *i)
{
- int i;
- double step;
- double tex_pos;
- int tex_y;
int tex_x;
+ int tex_y;
+ double tex_step;
+ double tex_pos;
t_image *texture;
- texture = get_tex(state, rstate);
- tex_x = get_tex_x(state, rstate, texture);
- step = 1.0 * texture->height / rstate->line_height;
- tex_pos = (rstate->draw_start - state->window.height / 2 + rstate->line_height / 2) * step;
- i = rstate->draw_start - 1;
- while (++i < rstate->draw_end)
+ texture = texture_select(state, rstate);
+ tex_x = texture_x(state, rstate, texture);
+ tex_step = (double)texture->height / (double)rstate->line_height;
+ tex_pos = (rstate->draw_start - state->window.height / 2 + rstate->line_height / 2) * tex_step;
+ while (++(*i) < rstate->draw_end)
{
tex_y = (int)tex_pos & (texture->height - 1);
- tex_pos += step;
- ((t_color*)state->window.data)[i * state->window.width + rstate->x] =
+ tex_pos += tex_step;
+ ((t_color*)state->window.data)[*i * state->window.width + rstate->x] =
((t_color*)texture->data)[texture->height * tex_y + tex_x];
}
}
diff --git a/src/render_state.c b/src/render_state.c
index 46fc7c5..ff777e2 100644
--- a/src/render_state.c
+++ b/src/render_state.c
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/01/15 14:40:14 by cacharle #+# #+# */
-/* Updated: 2020/01/30 15:50:48 by cacharle ### ########.fr */
+/* Updated: 2020/02/01 11:39:09 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -159,47 +159,3 @@ void rstate_line_height(t_state *state, t_render_state *rstate)
{
rstate->line_height = (int)((double)state->window.height / rstate->perp_dist);
}
-
-t_image *get_tex(t_state *state, t_render_state *rstate)
-{
- if (rstate->side == SIDE_NS)
- {
- if (rstate->probe.y < state->pos.y)
- return (state->textures + TEX_NORTH);
- else
- return (state->textures + TEX_SOUTH);
- }
- else if (rstate->side == SIDE_WE)
- {
- if (rstate->probe.x > state->pos.x)
- return (state->textures + TEX_WEST);
- else
- return (state->textures + TEX_EAST);
- }
- return (NULL);
-}
-
-/*
-** Since we're drawing each column, all the texels we want to draw on the window
-** are on a single column of the texture.
-** First we find the x-coord relative to the wall we hit
-*/
-
-int get_tex_x(t_state *state, t_render_state *rstate, t_image *texture)
-{
- int tex_x;
- double wall_x;
-
- if (rstate->side == SIDE_WE)
- wall_x = state->pos.y + rstate->perp_dist * rstate->ray.y;
- else
- wall_x = state->pos.x + rstate->perp_dist * rstate->ray.x;
- wall_x -= floor(wall_x);
-
- tex_x = (int)(wall_x * (double)texture->width);
- if (rstate->side == 0 && rstate->ray.x > 0)
- tex_x = texture->width - tex_x - 1;
- if (rstate->side == 1 && rstate->ray.y < 0)
- tex_x = texture->width - tex_x - 1;
- return (tex_x);
-}
diff --git a/src/texture.c b/src/texture.c
new file mode 100644
index 0000000..725e0aa
--- /dev/null
+++ b/src/texture.c
@@ -0,0 +1,55 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* texture.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/01 11:38:43 by cacharle #+# #+# */
+/* Updated: 2020/02/01 12:24:40 by cacharle ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "cub3d.h"
+
+t_image *texture_select(t_state *state, t_render_state *rstate)
+{
+ if (rstate->side == SIDE_NS)
+ {
+ if (rstate->map_pos.y < state->pos.y)
+ return (state->textures + TEX_NORTH);
+ else
+ return (state->textures + TEX_SOUTH);
+ }
+ else if (rstate->side == SIDE_WE)
+ {
+ if (rstate->map_pos.x > state->pos.x)
+ return (state->textures + TEX_WEST);
+ else
+ return (state->textures + TEX_EAST);
+ }
+ return (NULL);
+}
+
+/*
+** Since we're drawing each column, all the texels we want to draw on the window
+** are on a single column of the texture.
+** First we find the x-coord relative to the wall we hit
+*/
+
+int texture_x(t_state *state, t_render_state *rstate, t_image *texture)
+{
+ int tex_x;
+ double wall_x;
+
+ if (rstate->side == SIDE_WE)
+ wall_x = state->pos.y + rstate->perp_dist * rstate->ray.y;
+ else
+ wall_x = state->pos.x + rstate->perp_dist * rstate->ray.x;
+ wall_x -= floor(wall_x);
+ tex_x = (int)(wall_x * (double)texture->width);
+ if ((rstate->side == SIDE_NS && rstate->ray.x > 0) ||
+ (rstate->side == SIDE_WE && rstate->ray.y < 0))
+ tex_x = texture->width - tex_x - 1;
+ return (tex_x);
+}
diff --git a/textures/barrel.xpm b/textures/barrel.xpm
new file mode 100644
index 0000000..7d45baf
--- /dev/null
+++ b/textures/barrel.xpm
@@ -0,0 +1,97 @@
+/* XPM */
+static char *barrel[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 27 1 ",
+" c black",
+". c gray11",
+"X c #231C0A",
+"o c #312611",
+"O c #382A15",
+"+ c #3F3115",
+"@ c gray15",
+"# c #313131",
+"$ c #3F3F3F",
+"% c #493418",
+"& c #50381C",
+"* c #5E3F1F",
+"= c #654223",
+"- c #704626",
+"; c #774D2A",
+": c #7E502D",
+"> c #494949",
+", c gray34",
+"< c #626262",
+"1 c #6C6C6C",
+"2 c gray48",
+"3 c #885431",
+"4 c #8C5734",
+"5 c #935B38",
+"6 c #9D623B",
+"7 c #A4693F",
+"8 c gray52",
+/* pixels */
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" <<<<<<<<<1111112222 ",
+" 1<>>>>>>>>>>>,,,,,<<<21 ",
+" 12>#....@@@@@@@##$$$$><>< ",
+" 112882211111<<<<,,,,>>$## ",
+" 33112211<<<,,,,>>>$$$####++ ",
+" ;4:33;---====***&&&++++++&+ ",
+" 3;446737664:5543:=*-==%=*++&+ ",
+" ;4;6745766:;5543:=*--=*&=*+&+ ",
+" ;4;6737666::5543:-&---=%=*+&$ ",
+" >,12<737665:5543:;-&---=%$$$$# ",
+" ><1122821111<<<<<,,,,,>>>>####+ ",
+" >111112<<<<,,,,>>>>>>$$$$#####+ ",
+" ;=>,<11<<<<,,,,>>>>>>$$$$$###&+ ",
+" ;4;644&3:;-+===****X&++++%&&+&+ ",
+" ;4;67747666:5433:;-&---=*%&&+&+ ",
+" ;4;67747666:5433:;-&---=*%&&+&+ ",
+" ;4;67747666;5433:;-&---=*%&&+&+ ",
+" ;4;67747666;5433:;-&---=*%&&+&+ ",
+" ;4;67747666;5433:;-&---=*%&&+&+ ",
+" ;4;67747666;5433:;-&---=*%&&+&+ ",
+" 14;67737666-5433:;-&---=*%&&+$$ ",
+" <2221737666-5433:;-&---=*%$$$$# ",
+" ,11128211111<<<<<,,,,,>>>>$### ",
+" >,<1121<<<<,,,,>>>>>>$$$$$####O ",
+" =>,,,<<<<<,,,,>>>>>>$$$$$OOO%& ",
+" ;;------**o**&&&&&X&&&&OO&+&+& ",
+" ;4;5737553=3::::;-&--=*+&&+&+ ",
+" ;446;5553=;::::;*&--=*+&&+&+ ",
+" <4;44;553=-:::;-&&--=&+&+&+ ",
+" <2824;333-=;;;;-&*-=*+&+++# ",
+" 1112222111<<,,,>>>$$$##@. ",
+" 1<11<<<,,,,>>>>$$$###@@ ",
+" >>>>>$$$$$####@@@@@ "
+};
diff --git a/textures/bluestone.xpm b/textures/bluestone.xpm
new file mode 100644
index 0000000..c8951d9
--- /dev/null
+++ b/textures/bluestone.xpm
@@ -0,0 +1,90 @@
+/* XPM */
+static char *bluestone_png[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 20 1 ",
+" c black",
+". c #202020",
+"X c #2C2C2C",
+"o c gray22",
+"O c #000040",
+"+ c #00004C",
+"@ c #000058",
+"# c #000064",
+"$ c #000070",
+"% c #00007C",
+"& c gray33",
+"* c #000088",
+"= c #000098",
+"- c #0000A4",
+"; c #0000B0",
+": c #0000BC",
+"> c #0000C8",
+", c #0000D4",
+"< c #0000E0",
+"1 c #4040FC",
+/* pixels */
+"o$%%%%%%%%%%%%%%%%%%%$oo****************************oo$%%%%%%%$X",
+".---------------------..::::::::::::::::::::::::::::..;;;;;;;;;.",
+" ---*-%--=%==%==%-%$$@ .:-:;%-:=$$=*--*$*-:-*=-::-=$ .;:-=-;;=% ",
+" -=%*===%%-=-#==%$%%$# .::-===$=@$@@%--#$$#$$@$**$#$ .;;--%=--@ ",
+" -*-$>>=%%%=**%#@%$@@# . .;-;::;-%% ",
+" -*%->>#%%%-===*$$%@@O .-------------------...........;:-;-%%#@ ",
+" -==;;---=---==$$#@#$# .-:::;-==:==;==;::-- .----==#..;==-%**## ",
+" --=-;;-=%#--=**%##@OO .-;:<>;-:-===;;---=- .-==*=%# .;==-$***# ",
+" -=%=--*=%=$$***$%%#@O .-;>:>=;--:==-%-%=-% .-===%%# .;:-=--**O ",
+" -***-%%%--$@##$#%%%@O .-;;;===;----=*#%%%# .--=%%@@ .:%%=--=@O ",
+" =%*-**$=--$$#@###%%@O .-:;;;==;::--##*%%#@ .--=%-%@ .:%:-%==@O ",
+" =*=%%-*#%@%#@#%O@OO#O .-:--;;;;:;;-##$-##O .-%*=%@@ .::%%##%%O ",
+" =%=%#**%#%#%#O$$OOO#O .-;--=:==-;;-==%%@@# .-***$$# .:%$#%#%%O ",
+" ==%%%$#@@#%#$#OO$O#@O .-;<>**==*%%%*=*%##O .--**$$# .:%%$@@@@O ",
+" =%=##$#%#OOOOOOOOOOOO .-:>>***--%**%*$%#@O .-%=-@@@ . ",
+" .-:--=**---**=##%#@O .---=-@# ...........",
+"-:;-;-----;---- ;;;--== -;=-*=----%==%%@@OO .=-=-=$# .---- :::::",
+":;-=-:;-*--%-=% ;;=::%: ----:-=---*#$%OO#@O .==%$%$@ .-;*% ::-;:",
+":;==*--*%==%%== ;::;=%% -;=-:-*%**#%%$OO#OO .==@@@#O .-;;% :-;;;",
+";-=;;==%%%=%%%% ;:;;==# -;---*-%%#$$@@@##@O .=%@#@@O .-*%@ :::;;",
+"-*=;:;%%==%=@%% ;:=%==# ---====%#@##@##@OOO .=%#@@OO .-@#@ ::;;;",
+"--*=;,%=%%##$%% ;=:%%%# . .::--=",
+";*%*=-=%%=#$%@@ ;==#%%@ .........................;;;;;;;;..:--==",
+";-*=%=%==%$%#%@ ;:=*#@# .;;;;;;;;;;;;;;;;;;;;=-..;>;>---= .:;===",
+";;=*;====%%$@@@ -:%**#@ .;:;-:::;:-;-:;%-:::%-@ .;>;>>-=* .::===",
+";-*%*;;#%=**$@# -%#$$@# .;:-;><<:,<-:--::----%@ .;>>>>-*% .:;:--",
+"-=%*-;;-=%**$@# =%@@@@# .;;-:,,<:<,,;%-%%-%%-@@ .;;->-*-# .:::--",
+";=;==-;-#%$$$@@ .;::;;>>--,,--%%%$-%%@@ .;>----*# .:::;;",
+"-**--=--#$@#@OO .........;;:;;;---:---%**%%@@@# .;>>--*%$ .:--:;",
+"-=*---=%$#@##@@ .;;;;--..;--:;**-:;%--%***$$$@@ .;>>==--@ .:--;;",
+"=*=*--%##@@@#O# .;;*-=* .;:;:;**---%---$**@$$$O .;;>===-@ .::==%",
+"=**%**%##$%%#OO .;--=*= .;::-;;;=-%%%--$@#@#$$O .;;-*;--# .:**==",
+"=*-=$%%$#$%%#@O .;-=*$# .;:-%-;;--%$%#$$$@OO@OO .;;>*;;=# .:**%%",
+"=-=**%##@++$#@O .;;*;*@ .;--:%--=%$%%##$$#OO##O .;->-*==@ .::%%%",
+"%==*%%%%@++@@#O .;;;$$# .;%:%--%%$#%%%##@@###+O .;>--=@$# .:--==",
+"%**%$%%%@@#@@@@ .;;;-@@ .;-:%--$##@%%%#@@@@+++O .;>-=%=$@ .:--=*",
+"%*#$%#%%@#@O@#@ .;==@*# .;-%--%@@@@####@OOOOOOO .;>-%==%# .:=--%",
+"%=%#%#$@#OO@OOO .;==;@# . .-;-%#%%# .:=**%",
+"%*=*$%$@@@O#O@O .;;*;*@ .........................-;;-%@#O .::**%",
+"%=*%#$%$OOOOOOO .;;**@# .----------------------..-;-:-%#O .:==%*",
+" .;;%%@@ .-::::::;-------=*%:=-% .->--:*@O . ",
+".....@@$$***%$#..-;%%%@ .;:>>:--;;>:==--=%*%*=% .----**@O .*=** ",
+".=-;:::::::::::..--*%%# .;:>>>;;;;::%%%%---==%# .->-%$@@O .==%% ",
+".-:::::;-;:---: .--=@## .;::::,,;;;%%%%%%=%%$=# .-;*$#@$O .=%$$ ",
+".-:;;,,;:::=-:: .-=*@@@ .;::;:,,,%-=%%$$$*%%%%# .--$#$@@O .=$%@ ",
+".:::;,,:==-::=; . .-;:;::,,:--=%$$##@%%%# .*%%@@@#O .*%$@ ",
+".:-;-;;;===:-** .........--;>==:-:----%%##%#@++ . .*$@# ",
+".::;=*;;-==-::- .::;--=..-->>===;---%%=*$##@@OO ............... ",
+".::=-:;*-;;;%-- .:%:*=* .-:::;==:::-%%%%###@@OO .;;;;:::::::::: ",
+".::::-*:*;%%-*- .:-;;=% .-;--;;;::::-%*$@###$@+ .;;--;;;;-*:--% ",
+".:-:=--:;=%+%-- .::%-%$ .-:---=-::::---@@@@#$$# .;-;,,;;;=---=% ",
+".:;==:<:-*-%%-- .:;--%- .-::--:**:::---$@@#@+++ .;::,>>;;**-=%# ",
+".:-:-<1<==-=*%* .:;-%-$ .--:==%%%*---%%%##@@@OO .;=:=>>;;--%%%@ ",
+".:;:;:<:-%--++# .:-;;%# .--:-**%%%*%*@@==$$@+OO .;:;===--%%%%@# ",
+".:-:;;;***%$++# .::;=*# .-=::=:%%*%%*%@==*$$#@# .;;-===-%$#%@@# ",
+".-:;;-%%=-==%## .:;-**% .-:=-:-*%$$**@@%==%$@@O .;;=-==-%$#$%@@ ",
+".:-:;**;%--=$%@ .:-:%%% .-:---=*--$$@$@@%%%#@@O .;;:;*;;=%#==@O ",
+".:-:-=*%#*--=$# .::-### .---==%*---$#$$@+++#OOO .::;*-;;;=%==%O ",
+".;-***-#+#*==$$ .:;-%$@ .-;-==:-%--@@$$#@OO@OOO .:;-*--;;=%%%%O ",
+".;-$#*#-%%=@#@@ .;-###@ .-;:%::-@###@@+++OO+@OO .:;-:--%*$$%%@O ",
+".--**#*@#@#$#$# .;-*$## .--;:-%=@###@@OO$$#O+O@ .:::=-%%$%%$#O# ",
+".-=%%%%%$$$$%%%..-*%%%%..--=-=%%%%%%$#@@%%%%@@$..:--%=-%%%%%$$% ",
+"o***%%%%%%%%%%%oo**%%%%oo->*****%%%%%%%%%%%%%%%oo:**%%%%%%%%%%%.",
+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&o"
+};
diff --git a/textures/brick.xpm b/textures/brick.xpm
deleted file mode 100644
index 691f4c0..0000000
--- a/textures/brick.xpm
+++ /dev/null
@@ -1,114 +0,0 @@
-/* XPM */
-static char *_z63a_fwq0i[] = {
-/* columns rows colors chars-per-pixel */
-"32 32 76 1 ",
-" c #280C0C",
-". c #2A0C0C",
-"X c #2B0D0D",
-"o c #2D0D0D",
-"O c #2F0D0D",
-"+ c #300E0E",
-"@ c #320E0E",
-"# c #330F0F",
-"$ c #350F0F",
-"% c #361010",
-"& c #481414",
-"* c #491515",
-"= c #4B1515",
-"- c #4C1616",
-"; c #4E1616",
-": c #501616",
-"> c #511717",
-", c #531717",
-"< c #541818",
-"1 c #561818",
-"2 c #571919",
-"3 c #561B19",
-"4 c #561C1A",
-"5 c #591919",
-"6 c #581C1A",
-"7 c #591D1B",
-"8 c #5B1D1B",
-"9 c #5D1D1B",
-"0 c #5E1E1C",
-"q c #601E1C",
-"w c #611F1D",
-"e c #621F1D",
-"r c #64231F",
-"t c #652320",
-"y c #672320",
-"u c #692320",
-"i c #6A2421",
-"p c #6B2421",
-"a c #6E2623",
-"s c #752A25",
-"d c gray40",
-"f c #686868",
-"g c #6F6F6F",
-"h c gray44",
-"j c #717171",
-"k c gray48",
-"l c #7C7C7C",
-"z c gray49",
-"x c #7E7E7E",
-"c c #808080",
-"v c #818181",
-"b c gray52",
-"n c gray53",
-"m c #8B8B8B",
-"M c #8D8D8D",
-"N c gray56",
-"B c #909090",
-"V c #929292",
-"C c #939393",
-"Z c gray58",
-"A c #959595",
-"S c gray59",
-"D c #979797",
-"F c #989898",
-"G c gray60",
-"H c #9B9B9B",
-"J c gray61",
-"K c #9D9D9D",
-"L c #A2A2A2",
-"P c #A4A4A4",
-"I c #A5A5A5",
-"U c gray65",
-"Y c #AFAFAF",
-"T c #B1B1B1",
-"R c #B4B4B4",
-"E c gray71",
-/* pixels */
-"kbMFDDJKNBNNNBBBNNNBNBNYETLIPDmn",
-".sypuuyuurtq09w778qw439979q7687f",
-"Ou8e9904940w*--->11,=:<=*<:*:;,d",
-"$i4*,:,<:;11<<;-=1&->;,=;>-==-<g",
-"$y0::;->*:,12,,-=;>::<=;<-,>-=*h",
-"+a<>:,2<&><>11:=,-->,,<1->:,*=,x",
-"@0>:&>*<>;1-;;<::2:=<-;-<>;1<:1l",
-"oe=-<>*,<>,-<,:&>-<:;:1,1=><>2=Z",
-"#,=;=-:>-*:,,-::>&=1,;2-=>:>,>:V",
-"O;*,--:>1;>;2,22-1<=,:=,-15-><:A",
-"+;=;;;<=;,<=:,,>--*5;>;1;;>>-*>C",
-"#:*-2<:>:-2,<<1><:><;-:>*>>:,21C",
-"$;,<<>;>2-:->&:;=;;&:-,=&-<:>=;A",
-"+&;;-:,=,*112>=:>1;*1,>;*1<,;;:S",
-"@;=>=:**>:>1==,,;,>1,,-;,>&>-;:l",
-"O+O+o+@oXOO o++X+X$O@.%+#X@ooo+z",
-"PPIPILLUJHHGcGcfjcvvIREYETJHJKKl",
-"8qw439979q7687Xdsypuuyuurtq09w77",
-"11,=:<=*<:*:;,Xgu8e9904940w*--->",
-"1&->;,=;>-==-<+hi4*,:,<:;11<<;-=",
-";>::<=;<-,>-=*+xy0::;->*:,12,,-=",
-"-->,,<1->:,*=,@la<>:,2<&><>11:=,",
-"2:=<-;-<>;1<:1$Z0>:&>*<>;1-;;<::",
-"-<:;:1,1=><>2=oVe=-<>*,<>,-<,:&>",
-"&=1,;2-=>:>,>:oA,=;=-:>-*:,,-::>",
-"1<=,:=,-15-><:OC;*,--:>1;>;2,22-",
-"-*5;>;1;;>>-*>.C;=;;;<=;,<=:,,>-",
-":><;-:>*>>:,21%A:*-2<:>:-2,<<1><",
-";;&:-,=&-<:>=;oS;,<<>;>2-:->&:;=",
-"1;*1,>;*1<,;;:%l&;;-:,=,*112>=:>",
-",>1,,-;,>&>-;:+z;=>=:**>:>1==,,;",
-"X$O@.%+#X@ooo+Xl+O+o+@oXOO o++X+"
-};
diff --git a/textures/colorstone.xpm b/textures/colorstone.xpm
new file mode 100644
index 0000000..81ec831
--- /dev/null
+++ b/textures/colorstone.xpm
@@ -0,0 +1,96 @@
+/* XPM */
+static char *colorstone_png[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 26 1 ",
+" c gray11",
+". c #382C14",
+"X c #202020",
+"o c #282828",
+"O c #2C2C2C",
+"+ c gray19",
+"@ c #343434",
+"# c gray22",
+"$ c #403018",
+"% c #483818",
+"& c #543C1C",
+"* c #5C4020",
+"= c #6C4824",
+"- c #744C28",
+"; c gray25",
+": c #484848",
+"> c #4C4C4C",
+", c gray33",
+"< c gray36",
+"1 c #646464",
+"2 c gray44",
+"3 c #7C7C7C",
+"4 c #80502C",
+"5 c gray55",
+"6 c #989898",
+"7 c gray66",
+/* pixels */
+"333%&**-**************&$%****&&%,1332222OOOOOOO:12,1,,>>>>,<<123",
+"322,%&*-*******&******&$%***&%%,13323233:OOOOO:12,1,>>,,<1111112",
+"2221,%&=********&&****&$%*&&%:,11:****:11:OOO:12,1,>,<1111111111",
+",2321,%=********&&****%$%&%%,13:**%%$%$%11:::12,111111<,,>>>>>>>",
+">,2231%=*************&%$%%,133:*%%%%$%$%:31112,1<<<<<<<<<<<<<<<<",
+">>,222%&*****&******&$$%,1331**%%%%%$%$$.1572,1,>>>>>>>>>>>>>>>>",
+">>>,23,%&**********&$$:,133:*%%%%%%%$$%..173,1,>>>>>:>>>>>>>>>>>",
+">>>>,23,%&*******&&$%,1131**%%%%%%%%$$%..1631,>>>>>>>>>>>>>>>>>>",
+">>>>:,31,%&****&&$$,1133:*&%%%%%%$%%$.%..161,>>>>:>>>>>>>>>:>>>>",
+">>>>::331,%&&&&$$,13331**&%%%%%%%$%%$.$..151,>>>:>>>>>>>>>>>>>>>",
+">>>>::3231,$$$$:,1331:*&&%%%%%%%%%%%%.$.;151<>:>>>:>>>>>>>>>>>>>",
+">>>>::22331,,,,,1331**&%%%&%%%%%%.%%%...>231<>>>:>>>>>>::>>>>>>:",
+">>>>:#221,,,1266521*&&%&&%%%%%%%%.%%%...,251,>>>>>>>>>>::>::::>>",
+">>>:#131,,,,:16551*%&&%&&%%%%%%%%.%%%...1231,>>>>>>>>>>>>>::::>>",
+">>:#132,,,,,::253*&%*%%%%%%%%%%%%.%%%..;1331,>>>>>>>>>>>>>::::>>",
+">:#1331,,,,,:::1,*%*&%%%%%%%%%%%$.%%%..>2331,>>>>>>>>>>>>>::::>:",
+":#13321,,,,,;>,:1*%*%%&%%%%%%%%%$.%%$..,333,>>>>>>>>>>>>>>>>>>:#",
+"#11::12,,,,>;,,11*%&%%%%%%%%%%%%..%%$..1=*1,>>>>>>>>:>>>>>>>>:#;",
+"11:&&:11,,,;;,,,2*&&%%%%%%%%%%%%.$%$.$<=**,1;>>>>>>>>>>>>>>:;#;;",
+"1:&*%&:3:,;;;,,,11&&%%%%%%%%%%%$.$..$1=***%11;:>>>>>>>>>:;#@@#;1",
+":&*%%%$12:;,;,,,:3:&%%%%%%%%%%$....>13%%%%%221;;;:::::;;#@#;#,11",
+"&*%%%%$:31:,;,,,:21$%%%%%%%%%%....>133311115511;#@@@@@@@#;;#,13:",
+"*%%%%%$$12:,;,,,#13:%%%%%%%%%...;<1,,,,,,,356621,#;;;;;;;;#,13:&",
+"%%%&%%$%131:;,,>#131$%%%%%%%..;,11,:;#;;;;,366531,#;;;;;##,13:&*",
+"%%%%%%$%:331;,>:#133:.$%%%$..,131,:;;##;;;;,355231,######,131&*%",
+"%%%%%%$%$132#:::#2231.......;131,:;;;#;#;;#;232,,31,####,131:*%%",
+"%&&%%%.%$,231###23333:....;><3,,:;::;#;#;;#:121::,31,,,,131:&%%%",
+"%&&%%%.%$:3521123,==,1::><<33,,:;;::;#;;#;@,12,:::,3335532:&%%%%",
+"%%%&%%.%$:325221==****111232,,:;;;;;;@;;##+,11:::::1355321&%%%%%",
+"%%%%%$.%$:32222=******&3322,,:;;;:;;;@;;##:12,,::::,1221<,&%%&&&",
+"%%%%%$$%$,252221******%323,,,;;;;;;;;@;;#@,233111111132<,<&%%&&&",
+"%%%%%.$$$,331,133***&%%33,,:,;;;;;;;;@;;#+1,---------%*-<1&%%&&&",
+"%%%%$.%$:131,<,133&&%%13,,::,:;;;;;;;+;;@,2===*******%***3&%%%%%",
+"%%%%$.$:111,<,,,1331,,31,:;:,:;;;;;;#+;#+,1=*=*******%**&1&%%&%%",
+"%%%%.$:113,<,,,,,135353,:;;:,:;;;;;;#+;#+1,4*=**&****%**&1&%%%%%",
+"%%%$.:1121,<,,,,,,13555,;;;:,>;;;;;;@+;+12:4*=*******%**&1$%%%%%",
+"%%%.:1133,<,,,,,,,,1566,;;;:,>;;;;;;@+#:22=4*=*******%**&1:$%%%%",
+"%%$:11231,<,,,,,,,,,1661;;;:,>:;;;;;++@,31=4*=*******&**&11:$%%%",
+"%$:11231,<,,<,,,,,:,,152#;;:,>:;;;;;+++13,=4********&&**&131:$%%",
+"$:113321,,,,,,,,,,,:,,55,##:,:>;;;;;++:22=*4*=******&***%1331:$$",
+":115531,,,,,<,,,,,,;,,122+##,;>;;;;;++,31=*4=*******&***%13331::",
+"116651,,,,,,<,,,,,,;:,,11:+@+;>;;;;;++,3,=*4-******&****%1OO#,11",
+"13662,,,,<<,,,,<,,,:;,,,1,:++#::;;;#+:12=**-4******&****%1OOOO#,",
+"O:551,,,<<<,,,,,,,,:;,,,,:,1,@@:;;;#+,23=**=4*****&*****%1OOOOXO",
+"OX:3,,,,<<<,,,,,,:,:;:,,,:11,+@@#;;#+133&***-********&**%1OOOOXO",
+"OX:2,,,,<<,,,,,,,,,:;:,,:#155,+@@;;@:2221&**==**********%1OOOOXO",
+"X:11,,,,,,,<,,,,,:,:;:,:#:3553,+@##+,32231&**=*****&&**&%1OOOXOO",
+":111:,,<<,,,,,,,,:,:@::#:,3:%:3,++++231##11&&*=****&&*&%:1OOOXOO",
+"12221:,<<,,,,,,,,:,:@;#:,1:&%$:31,,131#OO#121&*******&%:11XXXXXX",
+"332231::,,,,,,,,,:,;@#:,1:&%%$%$:3331#OOOO#121&&****&%:1233:::::",
+"3235551::,,,,,,,::,;@:,1:&%%%$%$%:33:#OOOOO#122,&&&%%:1,,,,,,133",
+"3,==,551:#,,,,,,:::@:,1:&%%%%$%$%$31#oOOOooO#132,&%::11,,,,,,:13",
+"==**==,31:#:,,,:::#:,1:&%%%%%$%$%$3#OOoOOooOO#132,::13,,,>,,,:13",
+"******==,1:#:,::##:1::&%%%%$%$%$$:1#OOOXoOOOOO#1321151>>,,,,>:13",
+"*&******=%1:#::#:,1:&*&%%%%%%$$$:1#OOOOOXXOoOOO#13255,>>,,,,>:1=",
+"*******&*%**:##:,1:&*&%%%%%$%$$$,##OOOOOoXXoOOOO#1351,,,,,,>::1=",
+"**&&***&*%**&::,1:&&*&%%%%%$%$$:1#OOooOOOoXXoOOOO#13,,,,,,,::,=*",
+"**&&***&*%&%%,,1:&%&*%%%%%%$%$:1:#OOoooOOoXXXoOOOO#13,,,,,:>:1=*",
+"******&%&$%%,11:&%%&*%&%%%%$$$,1##OOooOoOOXXXXoOOOO#11,,,>::,=**",
+"******&%%$%,333:%%%&*%%%%%%$$:1#O#OOOOOOOOoXXoXoOOOO#1>>>:>:,=**",
+"******&%$$,3333,%%%&*%%%%%%$:1:#O#OOOOOOOOoXXXoXoOOOOX1>:,,:=***",
+"******%$$,3,;,31:%%&*%%%%%%$,1#OO#OOOOooOOOoX ooXoOOOX,1,,>1=***",
+"*****&%$,3,;;;,3,%%&*%%%%%$:1#OOO#OOOOooOOOoX XOXXoOOX,3>>1=****",
+"****&$$,33;;;;;,1%%&%%%%%$:,1OOOO#OOoOOOOOOoX XOoXXoOX,3311=****"
+};
diff --git a/textures/eagle.xpm b/textures/eagle.xpm
new file mode 100644
index 0000000..8847379
--- /dev/null
+++ b/textures/eagle.xpm
@@ -0,0 +1,126 @@
+/* XPM */
+static char *eagle_png[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 56 1 ",
+" c #202020",
+". c #2C2C2C",
+"X c gray19",
+"o c gray22",
+"O c #400000",
+"+ c #4C0000",
+"@ c #580000",
+"# c #640000",
+"$ c #700000",
+"% c #7C0000",
+"& c #543C1C",
+"* c #585400",
+"= c #706C00",
+"- c #744C28",
+"; c #400040",
+": c #480048",
+"> c #500050",
+", c #580058",
+"< c #600064",
+"1 c #6C0070",
+"2 c gray25",
+"3 c #484848",
+"4 c gray33",
+"5 c #646464",
+"6 c gray44",
+"7 c #7C7C7C",
+"8 c #880000",
+"9 c #980000",
+"0 c #A40000",
+"q c #B00000",
+"w c #BC0000",
+"e c #C80000",
+"r c #D40000",
+"t c #E00000",
+"y c #EC0000",
+"u c #FC0000",
+"i c #FC2020",
+"p c #B45400",
+"a c #CC6000",
+"s c #FC7800",
+"d c #A86840",
+"f c #848400",
+"g c #9C9C00",
+"h c #FC8820",
+"j c #CCC400",
+"k c #E4D800",
+"l c #FCF400",
+"z c #E88C58",
+"x c #840084",
+"c c #9C009C",
+"v c gray55",
+"b c #989898",
+"n c gray66",
+"m c #B4B4B4",
+"M c #C0C0C0",
+"N c #D0D0D0",
+/* pixels */
+"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
+"4o433333433333343o333333344444433333333344444443333ooo334433333o",
+"oyyrrrrrrrrr0334yyrrrrrrrrrrrrrrrrrr03o4yyyyttttttrrrrreeeewww03",
+"3leqqr80r8e0#.34yw8w8w8w%w9w9w%w%we0$.3or0eqeqqe$e%eqe8q0%e9e0l.",
+"kjfmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmjj=",
+"dg*6677777777777777777777777777777777777777777777777777777666=z*",
+"3&07777bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb7677@d.",
+"3w%b7i0OO4$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$0qut7OOO7M6@O.",
+"3w0n70Mb6O7nMNMMmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmMMMMM7O76bi76@O.",
+"3%#mbObMb7vbnnv7nNMmmmmmmmmmmmmmmmmmmmmmmmmmmmmv15Mmnnn6nN067OO.",
+"33.NnObnMb77bb4,6nNNMMmmmmmmmmmmmmmmmmmmmmmmMMv5<>bnnbbnN7O7b .",
+"4ooNm46bmMb77v>,,,7nNMMMMMmm>64>>>>pasmmmmMMv5<,>>bbbbnNM54vn ..",
+"yrrmNO7bnmMb653:>>,,7nmmmmmm>>>>>7>ppahmmmv5<,>>>3bbbnMMn7Obn@@r",
+"q88mN$bvbnm5,653::>>,,,7vmmm6>>>>>>pvmmv5<<,,>>>366>5nMnv7Onm@@q",
+"808mNqnbvb51<3653::::x,,,6vmm>>>>>>vmv5<<,x>>>:3641<<5nb7v$nm@@9",
+"$00mm9mbvv:<1<,353o::1:,,,,mm>>>>>>mm,<<,>1::o353><<11bv7v$nm@@%",
+"088mm8Mnbv::<1<<,34o;;:::,4mm>>>>>>mm4::::::o33:>,<111v7vv$nm@@%",
+"$0#mm$Nmnb3::<11<,:;;;;::vmm6>>>>>>6mmv:::;;;::>,<1114v7vb$mm@@8",
+"$q#mm$NMmb53:,<<1<,1;;;:v>6m>>>>>>>>m6:v:;;:,::,<111477vvn$mm@@$",
+"O++mm$NN5>6443,<<1,x>;;:>:>mm>>>>>>mm::::::,1>,<<1475335bn$mmO@O",
+"...mm$mN,>:34443<<1,x>>>:>:75>>>>>>57::::::1,,<<4v753;;:bn$mm .",
+"443mm$mN<,>::;o3345,,,,:::>>>>>>>>>>::::::>>,45v74>:;;;:nn$mm ..",
+"4yyMM%Mm<<>>:;;;::,c,,,::>>>>>>>>>>>:::::>,,c,,,>>:;;;;,nn$mm@@.",
+"4y8NN9NM,<,>::;;;::x,,,>>>>>>>>>>>>>>::>>,,,c,,,>::;;;:,bn%mm@O.",
+"oyqMM8Mb6,<>>:;;:;:1,,>>>>>>44566544>>>,,,,,x,,>::;;;;:6bn%mm@O.",
+"3w#mm%mbb63,>:::>:>,1>>>>>>>51c11c15>>,,,,,x,,>:::;;;36bbm8mm@O.",
+"3wqmm$m>,356655432X:>,x,>>>>7c1111c7>,>,,x,,,4432o23453<1M9MM@O.",
+"4w$nn$n>>,,,,>:>:>:>:>,x1>>>41111114>>,1x,,,,>::::;::>,<1N9NN@O.",
+"3e0nn#n>>>,,,>>:>:>:>>>>>>>>7c1111c7>,>,>,,,>:::::::>,,<<M9MM@O.",
+"309bb+b>>,>,>,>>>>>>>>>>>>>>41c31c14>>,>,,,>>:::::::>><1<M8MM@O.",
+"33onn@n>>>,>,>>>>>>4>>>>4>>>74131147>,>4,>>>4:::::::>><<>m%mm .",
+"444nn#n5>>>>>>>>36>>>>>4>>>>47744774>>>,4>>:>:63:::>>,<,5m$mm ..",
+"wwwmm$mb5>>>>366>>>>>>6>>>>>>>4774>>>>,>>6>>:::>663>>,,5bm$mm@@w",
+"0q0mm$mmmbbbb6>>>>>>>6>>>>>>>>>>>>>>>>>>>>6:>::::>6bbbbmnn#nn@@0",
+"0%8mm$mmbb6>>>>>>>>>6>>>>>>>>>>>>>>>>>>>>>>6:>:>:>,,,6bbbb@bb@@$",
+"8%0mm$mm>>>>>>>>>>>6>>>>6>6>>>>>>>>>>6>6>>>>6:>:>,,,,,>>vv+vv@@$",
+"08%mm$mm>>>>>>>>>>6>>>>5b6>>>>>>>>>>>>6b5>>>>6>>>>,,,,>>bb@bb@@8",
+"08%mm%mm6>>>>>>>>6>>>>>b>>>>>>>>>>>>>>>>b>>>>>6>>,,,,,>6bb#bb@@$",
+"$$8mm%mmb>>>>>>>6>>>>>b>>>>>>>>>>>>>>>>>>b>>>>>6>>,>,>>bnn#nn@@$",
+"OO+mm8mmm6>>>>>6>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>6>>>,>6mmm#mm@@O",
+"...MM8MMMm6>>>6>>>>>>b>>>>>>>>>>>>>>>>>>>>b>>>>>>6>>>6mmmm$mm .",
+"434NN0NNNmmbbbb>>>>>bmc>>>>>>6>>>>6>>>>>>cmb>>>>>bbbbmmmmm$mm ..",
+"oyrMM9MMMmmmmmbb>>>bmmm6>>>>>>>>>>>>>>>>6mmmb>>>bbmmmmmmMM8MM@@.",
+"4r0mm9mmmmmmm7pp7mmmm7p>>>>>>>>>>>>>>>>>>p7mmmm7pp7mmMMMMM8MM@O.",
+"3r0mm8mmmmmmmpppppppppp-->>6m>>>>>>m6>>--ppppppppppMMMMNNN9NN@O.",
+"3r8mm8mmmmmmmm75-pppp--7mmmm>>>>>>>>mmmm7--pppp-57mmmMMMMM9MM@O.",
+"or0mm%mmmmmmmvppppppppppmmm>>>>>>>>>>mmmppppppppppvmmmmmMM8MM@O.",
+"4r0nn$nnnnmmmp--vpp-mv-pm7>>>>>>>>>>>>7mp-vm-ppv--pmmmmmmm$mm@O.",
+"oe0nn$nnnnnnm-7vmp-mmmm74>>>>>>>>>>>>>>47mmmm-pmv7-mmmmmmm$mm@O.",
+"40#mm$mmmmmmmmmmmp-mm74>>>>>>>>>>>>>>>>>>47mm-pmmmmmmmmmmm$mmOO.",
+"o3.mm$bmmmmmmmmmmvpm>>>>>>>>>7>>>>7>>>>>>>>>mpvmmmmmmmmmmb$mm .",
+"4o4mm$7mmmmmmmmmmmmm74>>>>>5m>>>>>>m5>>>>>47mmmmmmmmmmmmm7$mm ..",
+"rrrmm7$7bmmmmmmmmmmmmm74>>5m7>>>>>>7m5>>47mmmmmmmmmmmmmb7$7mm@@w",
+"%0@7mm7$$$7bmmmmmmmmmmmmmmmm>>>>>>>>mmmmmmmmmmmmmmmmbv$$$7bm7@@$",
+"0%%@7mmmb7$$$$7bmmmmmmmmmmmm5>>>>>>5mmmmmmmmmmmmb7$$$$vbmmm7@@@+",
+"0%@@@47mmmmmb7$$$7bmmmmmmmmmm5>>>>5mmmmmmmmmmb7$$$7bmmmmm74@@@$8",
+"%9@@@@@47mmmmmmb7$$$7bmmmmmmmm5>>5mmmmmmmmb7$$$7bmmmmm74@@@@@#$0",
+"#0%0#@#@@@@47mmmmmb7$$$7bmmmmmm55mmmmmmb7$$$7bmmmmm74@@@@@@$@0$0",
+"#0%%#99#@@@@@@47mmmmmb7$$$$7bmmmmmmb7$$$$7bmmmmm74@@@@@@@$0$@#0+",
+"%9@0##8#%%0@@@@@@O47mmmmmb7$$$7bb7$$$7bmmmmm74O...@@@@0@0$0$0#0$",
+"++++++++++++++++OO .47mmmmmb7$$$$7bmmmm74+++OO ..@OO+++++++++++",
+"................... .47mmmmmmmmmm74 . ......... ..",
+"o4o4ooo333334oooo....... 47mm74. ........oo33433332o2333",
+"44444444444444444443ooo.. .ooo334444444444444444"
+};
diff --git a/textures/greenlight.xpm b/textures/greenlight.xpm
new file mode 100644
index 0000000..532f01c
--- /dev/null
+++ b/textures/greenlight.xpm
@@ -0,0 +1,96 @@
+/* XPM */
+static char *greenlight_png[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 26 1 ",
+" c black",
+". c #044C00",
+"X c #045800",
+"o c #046400",
+"O c #047000",
+"+ c #047C00",
+"@ c #646464",
+"# c #7C7C7C",
+"$ c #048800",
+"% c #049800",
+"& c #04A400",
+"* c #00A800",
+"= c #04B000",
+"- c #04BC00",
+"; c #04C800",
+": c #00E000",
+"> c #00EC00",
+", c #00FC00",
+"< c #80FC7C",
+"1 c #FCFC54",
+"2 c gray55",
+"3 c #BCFCB8",
+"4 c #FCFC9C",
+"5 c #FCFCB8",
+"6 c #D8FCD8",
+"7 c gray99",
+/* pixels */
+" @ @ ",
+" #2# ",
+" .o. ",
+" oO+++OOoX ",
+" o$%=;;=%%$+oX ",
+" o&->>>>:;*%$+oX ",
+" o=;:,,,,::;=&$+oX ",
+" o&:,<365714563<,:%o ",
+" +%><<<3655563<<<>%+ ",
+" %;:,<<<<<<<,:;% ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "
+};
diff --git a/textures/stone.xpm b/textures/greystone.xpm
index ff575f8..5e0fc31 100644
--- a/textures/stone.xpm
+++ b/textures/greystone.xpm
@@ -1,27 +1,27 @@
/* XPM */
-static char *greystone[] = {
+static char *greystone_png[] = {
/* columns rows colors chars-per-pixel */
-"64 64 22 1",
-" c #1F1F1F",
-". c #3B3B3B",
+"64 64 22 1 ",
+" c gray12",
+". c gray23",
"X c #3F3F3F",
-"o c #474747",
+"o c gray28",
"O c #4B4B4B",
-"+ c #4F4F4F",
+"+ c gray31",
"@ c #535353",
-"# c #575757",
+"# c gray34",
"$ c #5F5F5F",
"% c #676767",
-"& c #6B6B6B",
-"* c #737373",
+"& c gray42",
+"* c gray45",
"= c #7B7B7B",
"- c #838383",
-"; c #8F8F8F",
+"; c gray56",
": c #9B9B9B",
-"> c #ABABAB",
+"> c gray67",
", c #B7B7B7",
-"< c #C7C7C7",
-"1 c #D3D3D3",
+"< c gray78",
+"1 c LightGray",
"2 c #DFDFDF",
"3 c #EFEFEF",
/* pixels */
diff --git a/textures/mossy.xpm b/textures/mossy.xpm
index 7e9d798..4f342a8 100644
--- a/textures/mossy.xpm
+++ b/textures/mossy.xpm
@@ -1,17 +1,17 @@
/* XPM */
-static char *mossy[] = {
+static char *mossy_png[] = {
/* columns rows colors chars-per-pixel */
-"64 64 25 1",
+"64 64 25 1 ",
" c #202020",
". c #2C2C2C",
-"X c #383838",
+"X c gray22",
"o c #404000",
"O c #585400",
"+ c #706C00",
"@ c #484848",
-"# c #545454",
+"# c gray33",
"$ c #646464",
-"% c #707070",
+"% c gray44",
"& c #7C7C7C",
"* c #848400",
"= c #9C9C00",
@@ -19,13 +19,13 @@ static char *mossy[] = {
"; c #CCC400",
": c #E4D800",
"> c #FCF420",
-", c #8C8C8C",
+", c gray55",
"< c #989898",
-"1 c #A8A8A8",
+"1 c gray66",
"2 c #B4B4B4",
"3 c #C0C0C0",
"4 c #D0D0D0",
-"5 c #DCDCDC",
+"5 c gainsboro",
"6 c #ECECEC",
/* pixels */
"................................................................",
diff --git a/textures/pillar.xpm b/textures/pillar.xpm
new file mode 100644
index 0000000..a484868
--- /dev/null
+++ b/textures/pillar.xpm
@@ -0,0 +1,91 @@
+/* XPM */
+static char *pillar_png[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 21 1 ",
+" c black",
+". c #202020",
+"X c #2C2C2C",
+"o c gray22",
+"O c gray25",
+"+ c #484848",
+"@ c #4C4C4C",
+"# c gray33",
+"$ c gray36",
+"% c #646464",
+"& c gray44",
+"* c #7C7C7C",
+"= c gray55",
+"- c #989898",
+"; c gray66",
+": c #B4B4B4",
+"> c #C0C0C0",
+", c #D0D0D0",
+"< c gainsboro",
+"1 c #ECECEC",
+"2 c gray99",
+/* pixels */
+" ;;;;=======&&&&% ",
+" ;;<<,,,>>>::;;--==*&&%#+## ",
+" >22111<<<,,,>>::;-&>=*&%#+OooX ",
+" 12222111222<<,>>::;--=**+#+Ooo.X ",
+" <112222221<,>>::;;-=**&%%%%oOoX.XX ",
+" <<1122211,,,>>;,;;-=**&%%#O+XX..XX ",
+" ><<2122111<<,,>>::;-=*&%#+OXo..XXX ",
+" >>211221122<<,>>;;-=*&%#OoX...XX ",
+" :1122221<,>;:-=*&%#+OXoX.... ",
+" :>>2221<,>:;-=*&%#+OoXX..X ",
+" ->1221<,>:;-=*&#%+OoX..X ",
+" ->1221<,>:;-=*&%#+OoX..X ",
+" ->2221<,>:;=;*&%#+OXo..X ",
+" ->2221<,>:=-;*&%#+OoX..X ",
+" ->2221<,>:;-=*&%O%OoX..X ",
+" ->2221<,>:;-=*&%#%OoX..X ",
+" ->11<,>:;-=*&%#+O+X....X ",
+" -=;:;;==*&&%%#+OoX...... ",
+" <2<1221<,>:;-=*&#%+o.X ",
+" ><2222<,>:;-=*&%#+#oXX.o ",
+" ><2221<,,:;-*=&%#+OoX..X ",
+" ->2221<:1:;-=&*%#+OoX..X ",
+" ->2221<>1:;-=*&%#+OXo..X ",
+" ->2221<,,:;-=*&#%+OoX .X ",
+" ->2221<,>:;-=*&%#+X+X..X ",
+" -;2221:2>:;-=*&%#+OoX..X ",
+" -<2221<,>:;-*-&%#+oOX..X ",
+" ->2221<:<:;-=*&%+#OoX..X ",
+" ->2221<,>:;=-*&%#+OXo..X ",
+" *-<1<,>:;-=*&%#+OoX..... ",
+" *-;-==**&&%%#+OoX.. ",
+" ;,22222><,>:;-=*&%#+oXXo ",
+" ->2221<1>:;-=*&%#+OoX..X ",
+" ->2221<,>:;=-*%*#+OXO .X ",
+" ->2221<:1:;-=*&%#O+oX..X ",
+" ->22<2<,>:;-=*&%+#Oo.X.X ",
+" ->2121<:>;:-*=&%##OoX... ",
+" ->2221:2>:;-=*&%#+oOX..X ",
+" ->22212,>:;-=&*%#+OoX..X ",
+" ->22<2<,>:;=-*&%#O+Xo..X ",
+" ->2221<,:<;-=*&#%+OoX..X ",
+" ->2221,1>:;-=&*%#+OXo..X ",
+" *>1211<,>:--=*&%+#OoX..o ",
+" ;,<>>>:;-&-&%#+OoX.... ",
+" ;1:>,>-=*&#%%#+OoX...... ",
+" -,212221<,>:=-=*&%#+o.XX ",
+" ->2221<,>:;-*-&%#+OXO..X ",
+" ->222,2,>-<-=*&%#+OoX..X ",
+" ->2221<,>:;-*-&%+#OoX..X ",
+" ->2221<,>:;-=*&#%+OoX..X ",
+" ->2221<,>->-=*%&#+OoX..X ",
+" ->2221<,;<;-=*&%#O#oX..X ",
+" ->122,2,>:;-=*&%#+OoX..X ",
+" ->122,2,>:;-=*&%+#OoX..X ",
+" :<>2221<,>:-:=*&%#+OoXo..X ",
+" :1122221<,>:;-=*&%#+OXoX...XX ",
+" >>212221122<<,>>;;-=*&%#OoX...XXXO+@##$$%% ",
+" ><<2122111<<,,>>::;-=*&%#+OXo..XXXooO++@##$%% ",
+" <<1122211,,,>>::;;=;**&%%#O+XX..XXooooO++@#$$% ",
+" <112222221<,>>::;;-=**&%%&%@@oX.XXooooO++@#$$% ",
+" 12222111222<<,>>::;--=**&$O$oo.XoooOO+@@#$$% ",
+" >22111<<<,,,>:,:;--=*=&%$+OooXOOO+++@#$$% ",
+" ;;<<,,,>>>::;;--==*&&%#+OO+#$$$%%%%%% ",
+" ;;;;=======&&&&%#OO+#$%% "
+};
diff --git a/textures/purplestone.xpm b/textures/purplestone.xpm
new file mode 100644
index 0000000..7928e4a
--- /dev/null
+++ b/textures/purplestone.xpm
@@ -0,0 +1,90 @@
+/* XPM */
+static char *purplestone_png[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 20 1 ",
+" c #382C14",
+". c gray22",
+"X c #403018",
+"o c #483818",
+"O c #543C1C",
+"+ c #5C4020",
+"@ c #6C4824",
+"# c #744C28",
+"$ c #400040",
+"% c #480048",
+"& c #500050",
+"* c #580058",
+"= c #6C0070",
+"- c #484848",
+"; c gray33",
+": c #646464",
+"> c #80502C",
+", c #840084",
+"< c #9C009C",
+"1 c #B400B4",
+/* pixels */
+"===$$$$$*=,*=$$$$$$$======*$$$$$$$$$*=,,=**$$$$$$$$$$$$$********",
+"+,,=$$$*=,==**$$$$$=,<@@@+=*$$$$$$&*=,,,,=,=$$$$$$$$$***=,,@@@@@",
+"@+,,,=$*==*===*$$&*,<@@++++**&$$&&*&=,,,=,==*$$$$$$$***=,,@@@@@@",
+"+++,=*****==**$%&&*,<@+,==+=*&&&**&*=,=,==***&&%&&%&&**=,@@@@OO*",
+",+o=,=******&%%&&**=,,=*=,@=&*+++,=**=,=**++@+++OOoo&&&=,@@@X*O=",
+",+o,,==*==,,,,,==***=,=,,=O&*+@@@+,=**=oo+@@@@@+++o+o&&=,=@+X=O,",
+"=,+=,=,=,,,,@==,,==**=*,==X*+@@OO+,=*Xo@@#@@@+OOXOXX+o&*=,@+X,O=",
+",,+,===,+#,@+=*===,=****=*o*@+O**O=*XO@#####@oOo$O**+Xo&*,@+X,O*",
+"=,+=*=,+##@+O=****==*=**==+=++*,=o,=X@##>>##@o$o*O==O*o&&=+OX=O&",
+"*=+*=,,##@++O=**=*****====O*++=,,X=X@Oo>>##@+X*X*O,,O=o*&*+OX,O&",
+"**X==,<#@++Oo=*==+++Oo***=o&o*,==X&XO@=>#@@+OX***,,OO=oX*&*OX=*&",
+"**X=,,<#++ooo=*=+@@@@+=****&o=,*=X%XOo=>@@+OOOX,*,OOOOoX=*&OX&*&",
+"**X=,<<=+oX=X*=*@@+=+@,=*&%%X&&&&%%*Oo,@@+O*=OOX,,OooOoX==*OX&&%",
+"**X=<,@@@+X&X&&+@+==,+,=&$$%&&*&&&*&Oo,@+O*=,=OX+@oXX,oX=,*&&&%%",
+"***=,@@+==== %&+@+*,=+,=&%%&**=,,=&&oo,@*O=,,,@+@OX===oX=,=*&&%%",
+"***=,@+=,<<, $&+@+*,*O=*%*ooo*====&%o*,@,O*oO@@@OX=,=*=oX==&%%%%",
+"***=,@=,<,== $&@,O*=*o&&&+@@++o*=*%%o*,@,Oo@@@@@@OX==*,ooX=&%%%%",
+"***==@=<,**$ $&@,o*=*X&*@>>>>@+**=%%X=,*,O@@@@OOOOX=,===oXX&%%&*",
+"***==@=<*=,* %&,,=,=*&&,>@++++@O**&%X==**O@@OO O OX==**,=X&$&&&*",
+"****==,=*,=* &*=,,=*&&*,+=1<,<+OoX*&X=,*OO@Oo *O*O =*=*,=X&%&**=",
+"===**=,**==,=*=,==*&&*,@11<,,O,OOo**X==**O@O *=*=O =*=*==o&&====",
+"@,,=*==*=**=,=***&&&=,@#,<,@OOXOXXX*o=***O,O ==** **=*&=*o*=,##@",
+"@@+,=****=,**$$&**==,@#@@@@+X*=X*XXoOo**=O,o ***==*=*&&&oO,,##@@",
+"++@o=**=,,,=*$$++X*=,@#=,@OO*=,*XXO+@+**==,X=****,=**&%$o+@@##@@",
+"+OOo=,==,,,=&$O+Oo*=,@#=,@OX*,*XXoooOOO===,X,==,,=,=%$&&+@##,,,+",
+"**oXX==,,,=*$&@=*o*=,@#@@OXX=,OooXXOOoOOX,===,,==*=$$%*=@##<,===",
+"***oo=*===*o@@@*=XX=,@@=**==,,OoXo**=OOoXX=,==,=*&%$$%=,##<<,*=*",
+",,,OO*,=**oOO+***X&=,,@=*=@@@OXXoOO,<O=OoXX=**=*&&%%%*,#@####@**",
+"*==++*=*&&o==+==,=&*=,@,<<<<<OX==oO,,O=OOoX*&&*&+++**=,@#+++##@=",
+"*=,@+,*&&&&*=o,,=*%&*,,<<<,,,OX*<,X*=O=OOoX*&&&+++**=,<@+,11+@@,",
+"=,=++=*=***==XoooX%%*,,<<,,=+OX=,,X**O*OOoX=*o&++,,,,,<@,1,,<<@+",
+"=,=OO,=,=*=,<<,,=OXX=,<,+@@OXO=<==X*===OOoX=*&&+,,,==,<@,1==<<++",
+"*,=oo,*=**,11<+++,o&,,,+@+OoO=<,=,*=,,,OOoX=*%&o=,,=*,,@,<=*,,OO",
+"*=,OO===*=<1<+++++=*,,,@+X%oOo<,*===,,,OOoX=*%&o===*=,,@,<=*=ooo",
+"*=,@+=,,*,<<++oo=o,*,,=@o&**oo,=%*=,,=*OXoX=*%&o**=**=,+=,=&=ooo",
+",*,+o=,=*,,<=+oo,o=*,,*o%*=*oX=*%*=,,=*OX*=*&&&o&**&**=+=,=*&&OO",
+"**,oo==**=,,=ooo=o**=,=o%==*XX&%***=,**OX*=*&**o&&&&&&*O*===**++",
+"**=o=**&&=,,,ooo*o%&*==+$**%XX%%=**,**==X=,====o&&&**&&O$*====@@",
+"**,=*&&&&*==,=o*&o%%&**o$=*%XX%**%**==*=X*==,,,o&*====*O&$&**&@@",
+"**=***&&&&*==*o*&&&&%&&X%**,=X$%%**=,,*=*X*=,,=o*=,,,,=**%$$$$++",
+"***====*=*&*=,,,,=&*&&*X%%%=* $%%*=,,=***X*,=**oo++,,,,==*%%$$Oo",
+"**=,@@,=,=*=,,,,,,,*=** %%%%% $%**=,=**=*&*&*,o++@@++,==,=*%%$oo",
+"&*=@++O==*==,,@@OO==,=& &%%%%X$*==**&&&*&%&**=,+@+O*O=,=,,=*%%XX",
+"&*,+==O**=,,,@@@OO**=*%X&&&&&o&****=**&&%%&*=,<@@Oo$o=,,,=,=*&X ",
+"&*,O=,O,=,,@@@++Oo***&$o*OOOO+,,***===**&&&*=,<O,o*$**=,=*=*=* $",
+"&*=O=*O==,,+,@**OX*=*&$oO@@++@<<,**=,,==***=,@<O,o$$*=,,=**=,= $",
+"&**o=,,=,,=O*,&**X=,=&%O@>#@+@,1<@o=,,=,=*=,@@,o=*$**o+<,===,= $",
+"%&*o=,,=,,=*,*&=,<X,=&&+>##@@@=<,+@o,=,==*=@@@,o=**oo+@#,=,===**",
+"&%&X===*=,=**&==<=X=***@#@@+@@@,<,++=,=,==@@@@@@*oo++@#+==,==,=X",
+"&%&X&****=***=*==X=,=*@@+O@O+@@@,<,+o====,@@++++@,,###+o**===,=X",
+"%$% %&&&**==&*&%$X*=**,@O++oO+++=,,+o&**=@@++%&&*==+o*+o*=,,=,=X",
+"$$$ %$%%&&***==%%X&*o@@@@+o+OOoo+@,+o%&**@+=O&**=,,+o=+o=,,=*=**",
+"%$$$$%&&*******&&X o@OOo+o++ooooo++++o%&*O,=o*o++oX+,,=o,,O+o**X",
+"&$$ %&**==,,,,,=*Xo@OOX oo+oo%**==OO++oX*o=,o=+OOoX+,==o=O+++o*X",
+"%$%%&*=,,,@@@@@,=*o+OX% X%ooX*,==*ooooOo%X*=o,=o%oX+=**X,==OOo&&",
+"%%%%&=,<<+@OOOO@,*o+X%% X%ooX=,,,,XX Oo&X%*X,=o%XX**=*X=*=ooo&&",
+"%%%%*=,<<@*===OO=*o+X%%%X%%*X*=,,, X %oX**&%X==X%oo**,*X***ooo&&",
+"&%%&*=,<*O=,=,=O=* ,,**,X*,*X*=,== %&X &*&%X&&X&OOX***X*=**+OO*",
+"&%%&*=,OOXOO,=,o== *,,**X***X=*=*%% &=X %=%&X*&&*+=+X**X=**+>@@O",
+"&%%&O@@@=,=====o=, *****XXXXX==***% =*X %&&*X==*,O,=XX*X**+>@++,",
+"X&&=@@++@==,,XXXXXX**,*XooooooXXXXX X*X %=*=,,,=*XXXXXXXXX@>+=XX",
+"XXX,@&=,O,*=XooooooooXXX+,++++OOOoooXXX =,==,,,oooOOOO+++@>+o,=X",
+"XXXX+=,*oXXXo++@@+++ooooo+@#>#@@+++++OOooooXXXXoooO+@@@@@@+oXXXX",
+":-.XXXXXXXXXXXXXXX.-::;.XXXXXXXXXXXXXXXXXXX.-;;-.XXXXXXXXXXXX.-:"
+};
diff --git a/textures/redbrick.xpm b/textures/redbrick.xpm
new file mode 100644
index 0000000..fa83d77
--- /dev/null
+++ b/textures/redbrick.xpm
@@ -0,0 +1,96 @@
+/* XPM */
+static char *redbrick_png[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 26 1 ",
+" c #202020",
+". c #2C2C2C",
+"X c gray19",
+"o c #343434",
+"O c gray22",
+"+ c #400000",
+"@ c #4C0000",
+"# c #580000",
+"$ c #640000",
+"% c #700000",
+"& c #7C0000",
+"* c gray25",
+"= c #484848",
+"- c #4C4C4C",
+"; c gray33",
+": c gray36",
+"> c #646464",
+", c #880000",
+"< c #980000",
+"1 c #A40000",
+"2 c #B00000",
+"3 c #BC0000",
+"4 c #C80000",
+"5 c #D40000",
+"6 c #E00000",
+"7 c #EC0000",
+/* pixels */
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+";O;=====;======;=O=======;;;;;;=========;;;;;;;====OOO==;;=====O",
+"O775555555551==;775555555555555555551=O;77776666665555544443331=",
+"=74225,15,41$.=;73,3,3,3&3<3<3&3&341%.=O51424224%4&424,21&4<41&.",
+"=51&1,1<%1,%$.=;53,,1,%11%<11%<1%1<%#.=;511&$1,%,1&,11,1&,1#1%$.",
+"=5&11%<11%1#+.=;5,31,1%1,1%1%,&1%<&%#.==5%1$,1$1%1&1,1$1<&1&1%@.",
+"=41&,<&1%,1%+.=;33,1,,<1%,%1,%<&,%1%+.O=3%1&1,$1%%11%1,11&1#1,@.",
+"=3&11%1<%<%#+.==34,1%1%1%1%<,%&1%<&%#.O=3<1$,1&,%,&1,1$1&,1&1%+.",
+"=31%,#%&#%,%+.O;<<%%@,%%,%@%,%,%@,%%+.O=3%%#%%@,@%#,@%@,$@%,%,+.",
+"=&$$$++++++++.O=&$$#########+++++++++.O=,$$$$$$$$$$#########+++.",
+"==........ .O;=..... .. .....=;O........... .......",
+";OOOO====OOOOO=O=======OOO;===OO======;O=;;;;:>>:;;==*O*;O;===;O",
+"7555333333333331=;=7755555544444443333333333333333331=*;77555555",
+"2,,2<&2&<,2$2,1+O=;7%24&3$,3,,4<1,&,1,1,1&4$4,<34<41+O=O74&2,2,2",
+",1,1&,,$1,$,11%+.==52%1&11,1$1%$,1&1&1$11,$1,1%,1%1%+O=;42&1,&1<",
+"%11,<$1&,,<$1,%+.O=5%1,<,,$,,%1,$1,&$&,,1#,&1%1%11%%+.*=4&111&1&",
+"1,,1,&&,&1<$1$%+.O=5%11&1$,1$%1$,1&,&1$1,#1$1%,%1%1%+.O=42&1&1<&",
+"%1$1%,&<$1$,11%+.=;52#1&1,$,#,%$1,&#&1$,#,1$,1%,1%1%+ O=2&11#1&,",
+"%2$%@&%<%<%#<%%+.=;21%,#%<%,$%,#%<%<$,%,,#<%%,@%<%,%+ *;21&%#%<%",
+"+@@@@@@@@@@@@+++O=;1$$$$$$$$$$$$$##################++ =O1$+$++$+",
+"... ... ... .O=O=Oo......ooOOo... ... .....O=;=.......",
+";;=OO=;O;O==OOOO==;===*O*O*O*===;O;=*OOO**==;*OO*===;=;O;*O*;===",
+";775555555333333333333333331=;;77555555555533333333333333333331=",
+";7,23&3&3&2,2,24,2,2,32$24%+O=;73%512,12,2<2&$1,%,1&,1<,1&,1#1+.",
+"O72,1<1&%,11,<,1,$1%1,$,1%2+.=:53<1$1$,%<,$1$,1$1%1&1,1$1<&1&%+.",
+"=3$11%,#1$1%1,<1$,1%,1,$&1%+.;>53&1&1$1%<1&1&1,$1%%1<%<,11&1#%+.",
+"=32,1@1#%,1,%&1&,$&1$1,$1%#+.;:5%1%<,$,<%1$,$,1&,%,&1,1$1&,1&%+.",
+";3%$1@,&1$1#1$1,$,1,$1$,&&2+.=;54%1%1,1,%1$1#%%@1@1#1@11,$@%,%+.",
+"=41$%%%#%@%%,$,%%,%%$%<%<%%+.O;41%<%,#%%%%$,%,@1#%1@%,@1#1@1%%+.",
+"=1<$$$$$$$$$$$$$$@@@@@@@@@++.O;1$$$$$$$$$$$$$$############+#&#+.",
+"==O.................OOO......===........ .OOO. ...........",
+";;;;;==O=OOO=;>>;;;===**OO*OO*;===;O;=;=*O*O*=;;==*O*===;O;===;O",
+"33333333331=O;55555555333333333333333331=;;475555555553333333333",
+"1212<42241+O=O51$1%11$1,11%1,$11$11%1&1+O=;51&1%11$1&,&1%1,1&1%1",
+"1&,1<1&1,%+.=;5$1&,1&1<%1,,%,,1,$1%,1$1+O;;51#1%1,$1,1&,,<%<&<,%",
+",&1<&1&<1%+.=O5$11&<1%1%1,1#1@,,1,%<1&1+O;>51&1%1,1,11&1%<,1<&1%",
+"1,&1<1<&,%+O=;5<$1&1&#<,,,%,1$1,$,<%,1&+O;>5&11%1$11&&1&1,<<,&%,",
+"1,&1&1&<1%+O==5$1&#<1%,,1,1%,@$<$1<%1&1+O=;41&11%1,,&1&1%<,1&,1%",
+"%%,<%%<%%%+O==<$11#1&%1%1$1#,$1,$<%<1$&+.=;41#1%11,1,1&1%<%<&11%",
+"++@@@@@@@++.==1$$$$$$$$$##############++.==1$$$$$$$$$$$$$$$####+",
+"............=;=. ..OOO. .........O===....OO=O.. .......",
+";=;O=OO==OOOO==OOO=====;;==OOO;===;O=O=O==;=;O;=;:>;-==O;=;=;O;O",
+"O7555555533333333333333333333331O;O7755555555333333333333333331=",
+";51,,1$11&<1&1%,1$1&1,1$1$11&%1+O=;711$1$1#1%1#1,#<,%1,&1&<%,1+.",
+"=51$1,$1,<&1$,#1<$1#,<,$1&1&1%<+.==5,1$,$&#,#<&1#1$1%,%1,&<1$,+.",
+"=5,$1$,%$1$1,&,1$<,,#&1@<#,$,,%+.O=5,1$$,1&#1&#<1#1%%1%1&1%,$1+.",
+"O51,1,$1,&<1&1#,1$1#,1#<1&111%&+.O=51$1,$1#1%<&&#,$1&,<,<&%1,1+.",
+";51$,1$1$1$1$1%1$$1#,&1&,$<$,%1+ O;51$$1$&#1#1#<#1$,%1%&1&<,$%+.",
+"O41$1$,%,<&1,,,1<$,&#$1@1%<&1%1+ O;4%1$,$1#&1&#<%,$1%1%1&<%1$1+.",
+";1$$$$$$$$$@@@@@@@@@@@@@@@@@@@@+.=;1$$$$$$$$$#####@@@@@@@@@@@++.",
+"O=..........OOO. ... .. ..=O=...... .oOo. .... ......",
+";O;O;=;====;>>;=;O;=;=*OOO*=;==O==;O;========-;;;-====OX XO==;=",
+"555553333333333331=;=77555555553333333333333331=O;75555533333333",
+"&1#11$<$1&4&1$1&1+.==51111$1@1&1$1$1<1$1$1#1%$+O=;51$,1#1%1%1$1%",
+"1&&1&1$<&$1#&$,$,+.==5&1%1$%@&<&1,$,<$&,%,#1$1+o=;5$1#1%1%,1%1,@",
+"1&#&1$<$&1&#1,$<&+.=*5&&%1$&&1#1@11$1$1$,#,,$%+.=;5$1%%11,%,%$%,",
+"&<#<$$1$1&1#&%$1$+.=*51@%1$1@1&<$1$,&$1$1,#%<$+.=;51$#1,%%1%1$%1",
+"$1&1$1$,1$1&#,1&,+.=*5@11$1&%,#&@1$1$&&$,%#,%$+.==5$1,1%1,%%#1%1",
+"$1&&$<<$<$&#1$1$<+.==5@1%1$&&,@<$,@1&$1,$1#1#,+.O=5$1#%#1%1%#$1@",
+"&<#1$$,$&&1#1$%,&+.=;41@%1$1@,$1$1%$1$&1$,%,$,+.O=4$$#1#1%1%1$1%",
+"@@@@@@@@@@@@@@@@++.==1+++++@@@@@@@@@@@@@@@@@@++ =;1++@@@@@@@@@@@",
+"...................=;=Ooo.............. . O==...... ..",
+"O;O;OOO=====;;O====;;;;;===;===;==O===*OO*OO*=*O*;==O;====*O*===",
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
+};
diff --git a/textures/wood.xpm b/textures/wood.xpm
index 9af7c5e..809cbb4 100644
--- a/textures/wood.xpm
+++ b/textures/wood.xpm
@@ -1,79 +1,79 @@
/* XPM */
-static char *wood[] = {
- /* columns rows colors chars-per-pixel */
- "64 64 9 1",
- " c #28200C",
- ". c #382C14",
- "X c #403018",
- "o c #483818",
- "O c #543C1C",
- "+ c #5C4020",
- "@ c #6C4824",
- "# c #744C28",
- "$ c #905C34",
- /* pixels */
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
- "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
- "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
- "OOOOOOO.O .OOOOOOOOOOOOOO.O .OOOO.O .OOOOOO.O .OOOOOOOOOOO.O .OO",
- "oo@####O$ O$+oooo##o@o@ooO$ O$#o#O$ O$+ooo+O$ O$o#oo#o#o##O$ O$@",
- "oo@###+O$ O$@oooO##o@o@ooO$ O$#o#O$ O$#+o+#O$ O$o#oo#o#o##O$ O$@",
- "oo+###OO$ O$#OooO##o@o@ooO$ O$@o#O$ O$##+##O$ O$o#oo#o#o##O$ O$@",
- "OoO@##OO$ O$#Ooo+#@o@o@ooO$ O$@o#O$ O$#####O$ O$o#oo#o#o##O$ O$@",
- "@oo+#+oO$ O$#+oO@#@o@o@ooO$ O$@o#O$ O$#####O$ O$o#oo#o#o@#O$ O$O",
- "@oOo+OoO$ O$#@o+##+o@o@ooO$ O$+o#O$ O$#####O$ O$o#oo#o#o@#O$ O$O",
- "#OooOooO$ O$##+@##+o@o@ooO$ O$+o#O$ O$#####O$ O$o#oo#o#o+#O$ O$O",
- "#OooooOO$ O$##@###Oo@o@ooO$ O$oo#O$ O$#####O$ O$o#oo#o#o+#O$ O$o",
- "@#oooO#O$ O$##@###Oo@o@ooO$ O$o+#O$ O$@####O$ O$o#oo#o#Oo#O$ O$o",
- "@#OooO#O$ O$#####@oo@o@ooO$ O$o+#O$ O$@###@O$ O$o#oo#o#Oo#O$ O$o",
- "+##oO##O$ O$#####@oo@o@ooO$ O$o##O$ O$+###@O$ O$o#oo#o#Oo#O$ O$o",
- "O###O#+O$ O$@####@oo@o@ooO$ O$+##O$ O$o@#@+O$ O$o#oo#o#Oo#O$ O$O",
- "o@##+#OO$ O$@####+oo@o@ooO$ O$+#@O$ O$o+@+oO$ O$o#oo#o#+o#O$ O$O",
- "o@####OO$ O$+####+oo@o@ooO$ O$##@O$ O$oo+ooO$ O$o#oo#o#+o@O$ O$O",
- "o+@###oO$ O$+####Ooo@o@ooO$ O$##+O$ O$oooooO$ O$o#oo#o#@o@O$ O$@",
- "oO@##+oO$ O$O@###OoO@o@ooO$ O$#@+O$ O$oooooO$ O$o#oo#o#@o@O$ O$@",
- "oo+##OoO$ O$O@##@ooO@o@ooO$ O$#@oO$ O$oooooO$ O$o#oo#o#@o+O$ O$@",
- "ooO##OoO$ O$o+##@ooO@o@ooO$ O$#+oO$ O$+ooo+O$ O$o#oo#o##o+O$ O$@",
- "OoO+OooO$ O$o+##+oo+@o@ooO$ O$@ooO$ O$@+o+@O$ O$o#oo#o@#ooO$ O$@",
- "OooOooOO$ O$oO@@+oo+@o@ooO$ O$+ooO$ O$#@+@#O$ O$o#oo#o@#OoO$ O$@",
- "OoooooOO$ O$oO++Ooo++o@ooO$ O$oooO$ O$##@##O$ O$o#oo#o+#OoO$ O$+",
- "@ooooo@O$ O$ooOOooo@Oo@ooO$ O$oooO$ O$#####O$ O$o#oo#o+#+oO$ O$O",
- "@ooooo@O$ O$ooooooo@Oo@ooO$ O$ooOO$ O$#####O$ O$o#oo#oO#+oO$ O$O",
- "@OoooO+O$ O$ooooooO#oo@ooO$ O$ooOO$ O$#####O$ O$o#oo#oO#@OO$ O$o",
- "+OoooOOO$ O$oooooo+#oo@ooO$ O$oo+O$ O$@####O$ O$o#oo#oO#@OO$ O$o",
- "O@ooo@OO$ O$oooooo+#oo@ooO$ O$oo@O$ O$@####O$ O$o#oo#oo##+o$ O$o",
- "O@Ooo@oO$ O$oooooo@#oo@ooO$ O$oO@O$ O$+###@O$ O$o#oo#oo##+O$ O$o",
- "o+Oo@+oO$ O$Oooooo@#oo@ooO$ O$o+#O$ O$+@##@O$ O$o#oo#oo@#@O$ O$o",
- "oO@O@OoO$ O$+ooooO#@oO@ooO$ O$O@#O$ O$o@##+O$ O$o#oo#oo@#@O$ O$o",
- "oO@O@OoO$ O$@Oooo+#@oO@ooO$ O$+##O$ O$o+#@oO$ O$o#oo#Oo+##O$ O$o",
- "oo+@+ooO$ O$#+ooO+#+o+@ooO$ O$@##O$ O$oo@+oO$ O$o#oo#Oo+##O$ O$O",
- "ooO+OooO$ O$#@OoO##Oo+@ooO$ O$###O$ O$oo+ooO$ O$o#oo#OoO##O$ O$O",
- "oooOoooO$ O$##+o+##Oo+@ooO$ O$##@O$ O$oooooO$ O$o#oo#OoO##O$ O$+",
- "oooooooO$ O$###+###oo@@ooO$ O$##@O$ O$oooooO$ O$o#oo#+oO##O$ O$@",
- "ooooooOO$ O$######@oo@@ooO$ O$##+O$ O$oooooO$ O$o#oo#+oo@#O$ O$@",
- "OoooooOO$ O$@#####@oo#@ooO$ O$#@+O$ O$+ooooO$ O$o#oo#@oo@#O$ O$@",
- "Oooooo+O$ O$@#####+oo#@ooO$ O$#@oO$ O$+ooooO$ O$o#oo@@oo+#O$ O$O",
- "@OoooO+O$ O$+#####Ooo#+ooO$ O$#+oO$ O$@+oo+O$ O$o#oo@#oo+#O$ O$O",
- "@OoooO@O$ O$O#####ooo#+ooO$ O$@+oO$ O$#+o++O$ O$o#oo+#OoO@O$ O$o",
- "@+OoO+@O$ O$o@###@ooO#oooO$ O$@ooO$ O$#@++@O$ O$o#oo+#OoO@O$ O$o",
- "@@OOO@+O$ O$o+###+oo+#oooO$ O$+ooO$ O$##+@#O$ O$o#ooO#OoO+O$ O$o",
- "+@+O+@OO$ O$oO@#@Ooo@#oooO$ O$oooO$ O$##@##O$ O$o#ooO#+oo+O$ O$o",
- "O@@+@@OO$ O$ooO@+ooo@#oooO$ O$ooOO$ O$#####O$ O$o#ooO#+OoOO$ O$o",
- "O@@+@@oO$ O$oooOOooo#@oooO$ O$ooOO$ O$#####O$ O$o#ooO#@OoOO$ O$o",
- "o@###@oO$ O$OooooooO#@oooO$ O$oo+O$ O$####@O$ O$o#ooo#@OoOO$ O$o",
- "o+###@oO$ O$Ooooooo+#+oooO$ O$oO@O$ O$@###@O$ O$o#ooo@#+ooO$ O$o",
- "oO@##@oO$ O$+oooooo@#+oooO$ O$o+#O$ O$@###+O$ O$o#ooo@#+OoO$ O$o",
- "oO@##+oO$ O$@Oooooo@#ooooO$ O$O@#O$ O$+###+O$ O$o#ooo+#@OoO$ O$O",
- "oo+#@+oO$ O$#OooooO#@ooooO$ O$@##O$ O$+##@OO$ O$o#ooo+#@+oO$ O$O",
- "ooO@@OoO$ O$#+oooo+#@oo+oO$ O$###O$ O$O@#@OO$ O$o#OooO@#+OO$ O$+",
- "ooO@+OoO$ O$@@Oooo@#+oo+oO$ O$###O$ O$O@#+oO$ O$o#OooO+#@OO$ O$+",
- "ooo++ooO$ O$@#OooO@#ooo@oO$ O$###O$ O$o+@OoO$ O$o#Oooo+#@OO$ O$@",
- "oooOOooO$ O$+#@OoO##ooo@oO$ O$###O$ O$oO+ooO$ O$o#OoooO@#OO$ O$@",
- "OoooooOO$ O$o@#@O##@ooo@oO$ O$###O$ O$ooOooO$ O$o@+oooO+#@O$ O$#",
- "OoooooOO$ O$o+#####+ooo#oO$ O$##@O$ O$oooooO$ O$o@@oooo+#@O$ O$#",
- "+ooooo@O$ O$oo####@ooo+#oO$ O$##@O$ O$oooooO$ O$o+@OoooO@@O$ O$#",
- "+OoooO@O$ O$oo+@#@+ooo@#oO$ O$#@+O$ O$oooooO$ O$o+#Ooooo++O$ O$#",
- "@OoooO@O$ O$ooo+@+oooo@#oO$ O$#@+O$ O$oooooO$ O$oo#OoooooOO$ O$#",
- "@+oooO@O$ O$oooo+oooo@##+O$ O$@+oO$ O$oooooO$ O$+o#+ooooooO$ O$#",
- "+++++++O$ O$+ooooooo+++++O$ O$+ooO$ O$+ooo+O$ O$+o++ooooooO$ O$+"
+static char *wood_png[] = {
+/* columns rows colors chars-per-pixel */
+"64 64 9 1 ",
+" c #28200C",
+". c #382C14",
+"X c #403018",
+"o c #483818",
+"O c #543C1C",
+"+ c #5C4020",
+"@ c #6C4824",
+"# c #744C28",
+"$ c #905C34",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"OOOOOOO.O .OOOOOOOOOOOOOO.O .OOOO.O .OOOOOO.O .OOOOOOOOOOO.O .OO",
+"oo@####O$ O$+oooo##o@o@ooO$ O$#o#O$ O$+ooo+O$ O$o#oo#o#o##O$ O$@",
+"oo@###+O$ O$@oooO##o@o@ooO$ O$#o#O$ O$#+o+#O$ O$o#oo#o#o##O$ O$@",
+"oo+###OO$ O$#OooO##o@o@ooO$ O$@o#O$ O$##+##O$ O$o#oo#o#o##O$ O$@",
+"OoO@##OO$ O$#Ooo+#@o@o@ooO$ O$@o#O$ O$#####O$ O$o#oo#o#o##O$ O$@",
+"@oo+#+oO$ O$#+oO@#@o@o@ooO$ O$@o#O$ O$#####O$ O$o#oo#o#o@#O$ O$O",
+"@oOo+OoO$ O$#@o+##+o@o@ooO$ O$+o#O$ O$#####O$ O$o#oo#o#o@#O$ O$O",
+"#OooOooO$ O$##+@##+o@o@ooO$ O$+o#O$ O$#####O$ O$o#oo#o#o+#O$ O$O",
+"#OooooOO$ O$##@###Oo@o@ooO$ O$oo#O$ O$#####O$ O$o#oo#o#o+#O$ O$o",
+"@#oooO#O$ O$##@###Oo@o@ooO$ O$o+#O$ O$@####O$ O$o#oo#o#Oo#O$ O$o",
+"@#OooO#O$ O$#####@oo@o@ooO$ O$o+#O$ O$@###@O$ O$o#oo#o#Oo#O$ O$o",
+"+##oO##O$ O$#####@oo@o@ooO$ O$o##O$ O$+###@O$ O$o#oo#o#Oo#O$ O$o",
+"O###O#+O$ O$@####@oo@o@ooO$ O$+##O$ O$o@#@+O$ O$o#oo#o#Oo#O$ O$O",
+"o@##+#OO$ O$@####+oo@o@ooO$ O$+#@O$ O$o+@+oO$ O$o#oo#o#+o#O$ O$O",
+"o@####OO$ O$+####+oo@o@ooO$ O$##@O$ O$oo+ooO$ O$o#oo#o#+o@O$ O$O",
+"o+@###oO$ O$+####Ooo@o@ooO$ O$##+O$ O$oooooO$ O$o#oo#o#@o@O$ O$@",
+"oO@##+oO$ O$O@###OoO@o@ooO$ O$#@+O$ O$oooooO$ O$o#oo#o#@o@O$ O$@",
+"oo+##OoO$ O$O@##@ooO@o@ooO$ O$#@oO$ O$oooooO$ O$o#oo#o#@o+O$ O$@",
+"ooO##OoO$ O$o+##@ooO@o@ooO$ O$#+oO$ O$+ooo+O$ O$o#oo#o##o+O$ O$@",
+"OoO+OooO$ O$o+##+oo+@o@ooO$ O$@ooO$ O$@+o+@O$ O$o#oo#o@#ooO$ O$@",
+"OooOooOO$ O$oO@@+oo+@o@ooO$ O$+ooO$ O$#@+@#O$ O$o#oo#o@#OoO$ O$@",
+"OoooooOO$ O$oO++Ooo++o@ooO$ O$oooO$ O$##@##O$ O$o#oo#o+#OoO$ O$+",
+"@ooooo@O$ O$ooOOooo@Oo@ooO$ O$oooO$ O$#####O$ O$o#oo#o+#+oO$ O$O",
+"@ooooo@O$ O$ooooooo@Oo@ooO$ O$ooOO$ O$#####O$ O$o#oo#oO#+oO$ O$O",
+"@OoooO+O$ O$ooooooO#oo@ooO$ O$ooOO$ O$#####O$ O$o#oo#oO#@OO$ O$o",
+"+OoooOOO$ O$oooooo+#oo@ooO$ O$oo+O$ O$@####O$ O$o#oo#oO#@OO$ O$o",
+"O@ooo@OO$ O$oooooo+#oo@ooO$ O$oo@O$ O$@####O$ O$o#oo#oo##+o$ O$o",
+"O@Ooo@oO$ O$oooooo@#oo@ooO$ O$oO@O$ O$+###@O$ O$o#oo#oo##+O$ O$o",
+"o+Oo@+oO$ O$Oooooo@#oo@ooO$ O$o+#O$ O$+@##@O$ O$o#oo#oo@#@O$ O$o",
+"oO@O@OoO$ O$+ooooO#@oO@ooO$ O$O@#O$ O$o@##+O$ O$o#oo#oo@#@O$ O$o",
+"oO@O@OoO$ O$@Oooo+#@oO@ooO$ O$+##O$ O$o+#@oO$ O$o#oo#Oo+##O$ O$o",
+"oo+@+ooO$ O$#+ooO+#+o+@ooO$ O$@##O$ O$oo@+oO$ O$o#oo#Oo+##O$ O$O",
+"ooO+OooO$ O$#@OoO##Oo+@ooO$ O$###O$ O$oo+ooO$ O$o#oo#OoO##O$ O$O",
+"oooOoooO$ O$##+o+##Oo+@ooO$ O$##@O$ O$oooooO$ O$o#oo#OoO##O$ O$+",
+"oooooooO$ O$###+###oo@@ooO$ O$##@O$ O$oooooO$ O$o#oo#+oO##O$ O$@",
+"ooooooOO$ O$######@oo@@ooO$ O$##+O$ O$oooooO$ O$o#oo#+oo@#O$ O$@",
+"OoooooOO$ O$@#####@oo#@ooO$ O$#@+O$ O$+ooooO$ O$o#oo#@oo@#O$ O$@",
+"Oooooo+O$ O$@#####+oo#@ooO$ O$#@oO$ O$+ooooO$ O$o#oo@@oo+#O$ O$O",
+"@OoooO+O$ O$+#####Ooo#+ooO$ O$#+oO$ O$@+oo+O$ O$o#oo@#oo+#O$ O$O",
+"@OoooO@O$ O$O#####ooo#+ooO$ O$@+oO$ O$#+o++O$ O$o#oo+#OoO@O$ O$o",
+"@+OoO+@O$ O$o@###@ooO#oooO$ O$@ooO$ O$#@++@O$ O$o#oo+#OoO@O$ O$o",
+"@@OOO@+O$ O$o+###+oo+#oooO$ O$+ooO$ O$##+@#O$ O$o#ooO#OoO+O$ O$o",
+"+@+O+@OO$ O$oO@#@Ooo@#oooO$ O$oooO$ O$##@##O$ O$o#ooO#+oo+O$ O$o",
+"O@@+@@OO$ O$ooO@+ooo@#oooO$ O$ooOO$ O$#####O$ O$o#ooO#+OoOO$ O$o",
+"O@@+@@oO$ O$oooOOooo#@oooO$ O$ooOO$ O$#####O$ O$o#ooO#@OoOO$ O$o",
+"o@###@oO$ O$OooooooO#@oooO$ O$oo+O$ O$####@O$ O$o#ooo#@OoOO$ O$o",
+"o+###@oO$ O$Ooooooo+#+oooO$ O$oO@O$ O$@###@O$ O$o#ooo@#+ooO$ O$o",
+"oO@##@oO$ O$+oooooo@#+oooO$ O$o+#O$ O$@###+O$ O$o#ooo@#+OoO$ O$o",
+"oO@##+oO$ O$@Oooooo@#ooooO$ O$O@#O$ O$+###+O$ O$o#ooo+#@OoO$ O$O",
+"oo+#@+oO$ O$#OooooO#@ooooO$ O$@##O$ O$+##@OO$ O$o#ooo+#@+oO$ O$O",
+"ooO@@OoO$ O$#+oooo+#@oo+oO$ O$###O$ O$O@#@OO$ O$o#OooO@#+OO$ O$+",
+"ooO@+OoO$ O$@@Oooo@#+oo+oO$ O$###O$ O$O@#+oO$ O$o#OooO+#@OO$ O$+",
+"ooo++ooO$ O$@#OooO@#ooo@oO$ O$###O$ O$o+@OoO$ O$o#Oooo+#@OO$ O$@",
+"oooOOooO$ O$+#@OoO##ooo@oO$ O$###O$ O$oO+ooO$ O$o#OoooO@#OO$ O$@",
+"OoooooOO$ O$o@#@O##@ooo@oO$ O$###O$ O$ooOooO$ O$o@+oooO+#@O$ O$#",
+"OoooooOO$ O$o+#####+ooo#oO$ O$##@O$ O$oooooO$ O$o@@oooo+#@O$ O$#",
+"+ooooo@O$ O$oo####@ooo+#oO$ O$##@O$ O$oooooO$ O$o+@OoooO@@O$ O$#",
+"+OoooO@O$ O$oo+@#@+ooo@#oO$ O$#@+O$ O$oooooO$ O$o+#Ooooo++O$ O$#",
+"@OoooO@O$ O$ooo+@+oooo@#oO$ O$#@+O$ O$oooooO$ O$oo#OoooooOO$ O$#",
+"@+oooO@O$ O$oooo+oooo@##+O$ O$@+oO$ O$oooooO$ O$+o#+ooooooO$ O$#",
+"+++++++O$ O$+ooooooo+++++O$ O$+ooO$ O$+ooo+O$ O$+o++ooooooO$ O$+"
};