├── so_long ├── maps │ ├── map1.ber~ │ ├── map4.ber │ ├── map1.ber │ ├── map5.ber │ ├── err1.ber │ ├── err3.ber │ ├── err4.ber │ ├── err5.ber │ ├── map2.ber │ ├── err2.ber │ └── map3.ber ├── mlx │ ├── font.xcf │ ├── mlx_png.h │ ├── Makefile │ ├── mlx_opengl.h │ ├── mlx_mouse.m │ ├── mlx_opengl.m │ ├── mlx_new_window.h │ ├── mlx_int_str_to_wordtab.c │ ├── mlx_int.h │ ├── mlx.h │ ├── mlx_init_loop.m │ ├── mlx_new_image.m │ ├── mlx_shaders.c │ └── mlx_xpm.c ├── src │ ├── ft_bzero.c │ ├── ft_free.c │ ├── ft_memset.c │ ├── ft_calloc.c │ ├── check_exit.c │ ├── ft_itoa.c │ ├── get_next_line.c │ ├── ft_error.c │ ├── print_map.c │ ├── get_next_line_utils.c │ ├── so_long.c │ ├── read_map.c │ └── key_press.c ├── bns │ ├── ft_bzero_bonus.c │ ├── ft_memset_bonus.c │ ├── ft_calloc_bonus.c │ ├── ft_free_bonus.c │ ├── check_exit_bonus.c │ ├── change_sprite_bonus.c │ ├── ft_itoa_bonus.c │ ├── get_next_line_bonus.c │ ├── ft_error_bonus.c │ ├── get_next_line_utils_bonus.c │ ├── print_map_bonus.c │ ├── so_long_bonus.c │ ├── read_map_bonus.c │ └── key_press_bonus.c ├── inc │ ├── so_long.h │ └── so_long_bonus.h ├── Makefile └── img │ ├── fond.xpm │ ├── enemy.xpm │ ├── npcback.xpm │ ├── npcbackmv.xpm │ ├── npcmv.xpm │ ├── npc.xpm │ ├── npcrightmv.xpm │ ├── enemymv.xpm │ ├── imgexit.xpm │ ├── npcleftmv.xpm │ ├── bush.xpm │ └── npcleft.xpm ├── so_long.gif └── README.md /so_long/maps/map1.ber~: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /so_long/maps/map4.ber: -------------------------------------------------------------------------------- 1 | 11111 2 | 1PCE1 3 | 11111 -------------------------------------------------------------------------------- /so_long.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gemartin99/So_long/HEAD/so_long.gif -------------------------------------------------------------------------------- /so_long/maps/map1.ber: -------------------------------------------------------------------------------- 1 | 1111111 2 | 1C00001 3 | 1000001 4 | 1P000E1 5 | 1111111 -------------------------------------------------------------------------------- /so_long/maps/map5.ber: -------------------------------------------------------------------------------- 1 | 111111111 2 | 1000000E1 3 | 1C00000C1 4 | 1P0000C11 5 | 111111111 -------------------------------------------------------------------------------- /so_long/mlx/font.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gemartin99/So_long/HEAD/so_long/mlx/font.xcf -------------------------------------------------------------------------------- /so_long/mlx/mlx_png.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | void *mlx_png_file_to_image(void *xvar, char *file, int *width, int *height); 5 | -------------------------------------------------------------------------------- /so_long/maps/err1.ber: -------------------------------------------------------------------------------- 1 | 111111111111111111111 2 | 1C0000CCCC000000000C1 3 | 1000101000000001C0011 4 | 1P0011100000000CCCC01 5 | 111111111111111111111 -------------------------------------------------------------------------------- /so_long/maps/err3.ber: -------------------------------------------------------------------------------- 1 | 111111111111111111111 2 | 1C0000CCCC000000000C1 3 | 1000101000000001C0011 4 | 1P001E100000000CCCC01 5 | 11111111111111111111 -------------------------------------------------------------------------------- /so_long/maps/err4.ber: -------------------------------------------------------------------------------- 1 | 111111111111111111111 2 | 1C0000CCCC000000000C1 3 | 1000101000000001C0011 4 | 1P001E100000000CCCC01 5 | 111111111111111111110 -------------------------------------------------------------------------------- /so_long/maps/err5.ber: -------------------------------------------------------------------------------- 1 | 111110111111111111111 2 | 1C0000CCCC000000000C1 3 | 1000101000000001C0011 4 | 1P001E100000000CCCC01 5 | 111111111111111111111 -------------------------------------------------------------------------------- /so_long/maps/map2.ber: -------------------------------------------------------------------------------- 1 | 111111111111111111111 2 | 1C0000CCCC000000000C1 3 | 1000101000000001C0011 4 | 1P001E100000000CCCC01 5 | 111111111111111111111 -------------------------------------------------------------------------------- /so_long/maps/err2.ber: -------------------------------------------------------------------------------- 1 | 111111111111111111111 2 | 1C0000CCCC000000000C1 3 | 1000101000000001C0011 4 | 1P001E100000000CCCC01 5 | 111111111111111111111 6 | 7 | -------------------------------------------------------------------------------- /so_long/mlx/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # 3 | 4 | GREEN = \033[0;92m 5 | 6 | NOM=libmlx.a 7 | SRC= mlx_shaders.c mlx_new_window.m mlx_init_loop.m mlx_new_image.m mlx_xpm.c mlx_int_str_to_wordtab.c 8 | SRC+= mlx_png.c mlx_mouse.m 9 | OBJ1=$(SRC:.c=.o) 10 | OBJ=$(OBJ1:.m=.o) 11 | CFLAGS+=-O2 -Wno-deprecated 12 | 13 | # add to match string put with X11 in size and position 14 | CFLAGS+= -DSTRINGPUTX11 15 | 16 | all: $(MAKE) $(NOM) 17 | 18 | $(NOM):: $(OBJ) 19 | @ar -r $(NOM) $(OBJ) 20 | @ranlib $(NOM) 21 | $(NOM):: 22 | @echo "\n${GREEN}Created ${NOM} ✓${DEF_COLOR}\n" 23 | 24 | clean: 25 | @rm -f $(NOM) $(OBJ) *~ 26 | @rm -f mlx_app 27 | 28 | re: clean all 29 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_opengl.h: -------------------------------------------------------------------------------- 1 | /* 2 | ** 3 | ** mlx_opengl.h 4 | ** 5 | ** public include, use it after mlx.h 6 | ** designed only for minilibx_macos 7 | ** 8 | */ 9 | 10 | void *mlx_new_opengl_window(void *mlx_ptr, int size_x, int size_y, char *title); 11 | 12 | /* create an opengl window. put_image & pixel_put & string_put do not work there. */ 13 | 14 | int mlx_opengl_swap_buffers(void *win_ptr); 15 | 16 | /* the created window is double buffered. Use this funct to swap buffers */ 17 | /* this funct will call glFlush(). Don't call it. */ 18 | 19 | int mlx_opengl_window_set_context(void *win_ptr); 20 | 21 | /* in case multiple opengl windows are present, change opengl active context */ 22 | -------------------------------------------------------------------------------- /so_long/maps/map3.ber: -------------------------------------------------------------------------------- 1 | 111111111111111111111111111111111111111111111111111111111111 2 | 1C0000CCCC000000000C000000C111111100000000CCC0000C0000000C11 3 | 1000101000000001C001100001000000000000100000000001C110000111 4 | 100010100100000100011C00010000000111000100100000011111000001 5 | 1P001E100000000CCC01000C000011C11CCCC11CCCCC1110000000000001 6 | 1C0000CCCC010000000C000000011111110000000000C0110C0001000C11 7 | 1000101000000001C0011000010000000000001C00000001101110000111 8 | 1C0000C1CC010100000C0000100110C11100000000CC10000C0000000011 9 | 1000101000010011C00110000100000000000010000011000110100C0001 10 | 1C00C00CCC0000C1000C00C0000111111100000000C0C0000C0000000011 11 | 1000101000110001C00110000100001C000000100C00011100111001C111 12 | 111111111111111111111111111111111111111111111111111111111111 -------------------------------------------------------------------------------- /so_long/src/ft_bzero.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_bzero.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/01/13 16:54:56 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/16 20:57:02 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | void ft_bzero(void *s, size_t n) 16 | { 17 | ft_memset(s, 0, n); 18 | } 19 | -------------------------------------------------------------------------------- /so_long/bns/ft_bzero_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_bzero.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/01/13 16:54:56 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/16 20:57:02 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | void ft_bzero(void *s, size_t n) 16 | { 17 | ft_memset(s, 0, n); 18 | } 19 | -------------------------------------------------------------------------------- /so_long/src/ft_free.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_free.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/12 15:00:55 by marvin #+# #+# */ 9 | /* Updated: 2022/05/18 23:03:06 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | int ft_free(t_list *d) 16 | { 17 | d->errors = 1; 18 | if (d->big_line) 19 | free(d->big_line); 20 | if (d) 21 | free(d); 22 | exit(0); 23 | } 24 | -------------------------------------------------------------------------------- /so_long/src/ft_memset.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_memset.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/01/12 18:36:06 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/16 20:58:25 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | void *ft_memset(void *b, int c, size_t len) 16 | { 17 | size_t i; 18 | 19 | i = 0; 20 | while (i < len) 21 | { 22 | ((unsigned char *)b)[i] = (unsigned char)c; 23 | i++; 24 | } 25 | return (b); 26 | } 27 | -------------------------------------------------------------------------------- /so_long/src/ft_calloc.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_calloc.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/01/20 16:22:04 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/12 16:47:08 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | void *ft_calloc(size_t count, size_t size) 16 | { 17 | void *bzero; 18 | 19 | bzero = (void *)malloc(count * size); 20 | if (!bzero) 21 | return (0); 22 | ft_bzero (bzero, count * size); 23 | return (bzero); 24 | } 25 | -------------------------------------------------------------------------------- /so_long/bns/ft_memset_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_memset.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/01/12 18:36:06 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/16 20:58:25 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | void *ft_memset(void *b, int c, size_t len) 16 | { 17 | size_t i; 18 | 19 | i = 0; 20 | while (i < len) 21 | { 22 | ((unsigned char *)b)[i] = (unsigned char)c; 23 | i++; 24 | } 25 | return (b); 26 | } 27 | -------------------------------------------------------------------------------- /so_long/bns/ft_calloc_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_calloc.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/01/20 16:22:04 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/12 16:47:08 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | void *ft_calloc(size_t count, size_t size) 16 | { 17 | void *bzero; 18 | 19 | bzero = (void *)malloc(count * size); 20 | if (!bzero) 21 | return (0); 22 | ft_bzero (bzero, count * size); 23 | return (bzero); 24 | } 25 | -------------------------------------------------------------------------------- /so_long/bns/ft_free_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_free.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/12 15:00:55 by marvin #+# #+# */ 9 | /* Updated: 2022/05/18 23:03:06 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | int ft_free(t_list *d) 16 | { 17 | d->errors = 1; 18 | if (d->big_line) 19 | free(d->big_line); 20 | if (d) 21 | free(d); 22 | exit(0); 23 | } 24 | 25 | void ft_dead(t_list *d) 26 | { 27 | write(1, "Te ha matado el enemigo 💀\n", 29); 28 | ft_free(d); 29 | } 30 | -------------------------------------------------------------------------------- /so_long/src/check_exit.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* check_exit.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/16 00:01:46 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 00:59:20 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | int check_exit(t_list *d, char letter) 16 | { 17 | if (letter == 'E' && d->consum == 0) 18 | { 19 | write(1, "Congrats, you win 🥳🏆\n", 27); 20 | ft_free(d); 21 | } 22 | if (letter == 'E' && d->consum != 0) 23 | { 24 | write(1, "Necesitas recoger todos los consumibles!\n", 41); 25 | return (1); 26 | } 27 | else 28 | return (0); 29 | } 30 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_mouse.m: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #import 4 | #import 5 | 6 | #include "mlx_int.h" 7 | #include "mlx_new_window.h" 8 | 9 | int mlx_mouse_hide() 10 | { 11 | // CGDisplayHideCursor(kCGDirectMainDisplay); 12 | [NSCursor hide]; 13 | return (0); 14 | } 15 | 16 | int mlx_mouse_show() 17 | { 18 | // CGDisplayShowCursor(kCGDirectMainDisplay); 19 | [NSCursor unhide]; 20 | return (0); 21 | } 22 | 23 | int mlx_mouse_move(mlx_win_list_t *win, int x, int y) 24 | { 25 | CGPoint point; 26 | NSRect pos; 27 | id thewin; 28 | 29 | thewin = [(id)(win->winid) win]; 30 | pos = [thewin frame]; 31 | // printf("got win pos %f %f\n", pos.origin.x, pos.origin.y); 32 | point.x = pos.origin.x + x; 33 | point.y = NSHeight([[thewin screen] frame]) - NSHeight([(id)(win->winid) frame]) - pos.origin.y + 1 + y; 34 | CGWarpMouseCursorPosition(point); 35 | CGAssociateMouseAndMouseCursorPosition(true); 36 | return (0); 37 | } 38 | 39 | 40 | int mlx_mouse_get_pos(mlx_win_list_t *win, int *x, int *y) 41 | { 42 | CGPoint point; 43 | id thewin; 44 | NSRect pos; 45 | 46 | thewin = [(id)(win->winid) win]; 47 | pos = [(id)(win->winid) frame]; 48 | point = [thewin mouseLocationOutsideOfEventStream]; 49 | *x = point.x; 50 | *y = NSHeight(pos) - 1 - point.y; 51 | return (0); 52 | } 53 | -------------------------------------------------------------------------------- /so_long/bns/check_exit_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* check_exit.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/16 00:01:46 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 00:59:20 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | int check_exit(t_list *d, char letter) 16 | { 17 | if (letter == 'E' && d->consum == 0) 18 | { 19 | write(1, "Congrats, you win 🥳🏆\n", 27); 20 | ft_free(d); 21 | } 22 | if (letter == 'E' && d->consum != 0) 23 | { 24 | write(1, "Necesitas recoger todos los consumibles!\n", 41); 25 | return (1); 26 | } 27 | else 28 | return (0); 29 | } 30 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_opengl.m: -------------------------------------------------------------------------------- 1 | // mlx_opengl.m 2 | 3 | #import 4 | #import 5 | #import 6 | 7 | #include 8 | 9 | #include "mlx_int.h" 10 | #include "mlx_new_window.h" 11 | 12 | 13 | 14 | 15 | 16 | NSOpenGLPixelFormatAttribute pfa_attrs_opengl[] = 17 | { 18 | NSOpenGLPFADepthSize, 32, 19 | NSOpenGLPFADoubleBuffer, 20 | NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core, 21 | 0 22 | }; 23 | 24 | 25 | 26 | void *mlx_new_opengl_window(mlx_ptr_t *mlx_ptr, int size_x, int size_y, char *title) 27 | { 28 | mlx_win_list_t *newwin; 29 | NSString *str; 30 | 31 | if ((newwin = malloc(sizeof(*newwin))) == NULL) 32 | return ((void *)0); 33 | newwin->img_list = NULL; 34 | newwin->next = mlx_ptr->win_list; 35 | newwin->nb_flush = 0; 36 | newwin->pixmgt = 0; 37 | mlx_ptr->win_list = newwin; 38 | 39 | NSRect windowRect = NSMakeRect(100, 100, size_x, size_y); 40 | str = [NSString stringWithCString:title encoding:NSASCIIStringEncoding]; 41 | newwin->winid = [[MlxWin alloc] initWithRect:windowRect andTitle:str pfaAttrs:pfa_attrs_opengl]; 42 | 43 | return ((void *)newwin); 44 | } 45 | 46 | 47 | int mlx_opengl_swap_buffers(mlx_win_list_t *win_ptr) 48 | { 49 | [(id)(win_ptr->winid) flushGLContext]; 50 | return (0); 51 | } 52 | 53 | int mlx_opengl_window_set_context(mlx_win_list_t *win_ptr) 54 | { 55 | [(id)(win_ptr->winid) selectGLContext]; 56 | return (0); 57 | } 58 | -------------------------------------------------------------------------------- /so_long/bns/change_sprite_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* change_sprite.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/20 18:35:19 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 19:09:40 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | void change_sprite(t_list *d, int num) 16 | { 17 | int change; 18 | 19 | change = 0; 20 | if (num == 0) 21 | { 22 | if (d->npccontrol == 0) 23 | { 24 | d->npccontrol = 1; 25 | change++; 26 | } 27 | if (d->npccontrol == 1 && change == 0) 28 | d->npccontrol = 0; 29 | } 30 | if (d->spenemy == 0) 31 | { 32 | d->enemyst = d->enemy_; 33 | d->spenemy = 1; 34 | change = 2; 35 | } 36 | if (d->spenemy == 1 && change != 2) 37 | { 38 | d->enemyst = d->enemymv; 39 | d->spenemy = 0; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /so_long/src/ft_itoa.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_itoa.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/01/22 13:51:22 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/17 01:07:58 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | long int static ft_baseexponente(long int base, size_t exp) 16 | { 17 | long int nbr; 18 | 19 | if (exp == 0) 20 | return (1); 21 | nbr = base; 22 | while (--exp) 23 | nbr *= base; 24 | return (nbr); 25 | } 26 | 27 | char *ft_itoa(int n) 28 | { 29 | char *nbr; 30 | size_t digitos; 31 | 32 | digitos = 1; 33 | while (n / ft_baseexponente(10, digitos)) 34 | digitos++; 35 | nbr = (char *)ft_calloc(digitos + 1, sizeof(char)); 36 | if (!nbr) 37 | return (0); 38 | while (--digitos) 39 | { 40 | nbr[digitos] = (char)((n % 10) + '0'); 41 | n /= 10; 42 | } 43 | nbr[digitos] = (char)((n % 10) + '0'); 44 | return (nbr); 45 | } 46 | -------------------------------------------------------------------------------- /so_long/bns/ft_itoa_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_itoa.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/01/22 13:51:22 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/17 01:07:58 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | long int static ft_baseexponente(long int base, size_t exp) 16 | { 17 | long int nbr; 18 | 19 | if (exp == 0) 20 | return (1); 21 | nbr = base; 22 | while (--exp) 23 | nbr *= base; 24 | return (nbr); 25 | } 26 | 27 | char *ft_itoa(int n) 28 | { 29 | char *nbr; 30 | size_t digitos; 31 | 32 | digitos = 1; 33 | while (n / ft_baseexponente(10, digitos)) 34 | digitos++; 35 | nbr = (char *)ft_calloc(digitos + 1, sizeof(char)); 36 | if (!nbr) 37 | return (0); 38 | while (--digitos) 39 | { 40 | nbr[digitos] = (char)((n % 10) + '0'); 41 | n /= 10; 42 | } 43 | nbr[digitos] = (char)((n % 10) + '0'); 44 | return (nbr); 45 | } 46 | -------------------------------------------------------------------------------- /so_long/src/get_next_line.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* get_next_line.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/02/07 00:41:32 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/19 19:16:59 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | char *readbuf(int fd, char *line) 16 | { 17 | int r; 18 | char *buffer; 19 | 20 | r = 1; 21 | buffer = malloc(sizeof(char) * (1 + 1)); 22 | if (!buffer) 23 | return (NULL); 24 | buffer[0] = '\0'; 25 | while (r > 0 && !ft_strchr(buffer, '\n')) 26 | { 27 | r = read (fd, buffer, 1); 28 | if (r == -1) 29 | { 30 | free(buffer); 31 | return (NULL); 32 | } 33 | if (r > 0) 34 | { 35 | buffer[r] = '\0'; 36 | line = ft_strjoin(line, buffer); 37 | } 38 | } 39 | free(buffer); 40 | return (line); 41 | } 42 | 43 | char *get_next_line(int fd) 44 | { 45 | char *line; 46 | char *line2; 47 | 48 | line2 = NULL; 49 | if (fd < 0) 50 | return (NULL); 51 | line = readbuf (fd, line2); 52 | return (line); 53 | } 54 | -------------------------------------------------------------------------------- /so_long/bns/get_next_line_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* get_next_line.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/02/07 00:41:32 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/19 19:16:59 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | char *readbuf(int fd, char *line) 16 | { 17 | int r; 18 | char *buffer; 19 | 20 | r = 1; 21 | buffer = malloc(sizeof(char) * (1 + 1)); 22 | if (!buffer) 23 | return (NULL); 24 | buffer[0] = '\0'; 25 | while (r > 0 && !ft_strchr(buffer, '\n')) 26 | { 27 | r = read (fd, buffer, 1); 28 | if (r == -1) 29 | { 30 | free(buffer); 31 | return (NULL); 32 | } 33 | if (r > 0) 34 | { 35 | buffer[r] = '\0'; 36 | line = ft_strjoin(line, buffer); 37 | } 38 | } 39 | free(buffer); 40 | return (line); 41 | } 42 | 43 | char *get_next_line(int fd) 44 | { 45 | char *line; 46 | char *line2; 47 | 48 | line2 = NULL; 49 | if (fd < 0) 50 | return (NULL); 51 | line = readbuf (fd, line2); 52 | return (line); 53 | } 54 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_new_window.h: -------------------------------------------------------------------------------- 1 | // 2 | // mlx_int.h for minilibx 3 | // 4 | // ol@staff.42.fr 5 | // 6 | // include opengl needed before mlx_int.h 7 | // 8 | 9 | #import 10 | #import "mlx_int.h" 11 | 12 | @interface NSWindowEvent : NSWindow 13 | { 14 | func_t event_funct[MAX_EVENT]; 15 | void *(event_param[MAX_EVENT]); 16 | int keyrepeat; 17 | int keyflag; 18 | int size_x; 19 | int size_y; 20 | } 21 | - (NSWindowEvent *) initWithContentRect:(NSRect)rect styleMask:(NSUInteger)winstyle backing:(NSBackingStoreType)bck defer:(BOOL) dfr; 22 | - (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param; 23 | - (void) setKeyRepeat:(int)mode; 24 | - (void) exposeNotification:(NSNotification *)note; 25 | - (void) closeNotification:(NSNotification *)note; 26 | @end 27 | 28 | 29 | @interface MlxWin : NSOpenGLView 30 | { 31 | NSWindowEvent *win; 32 | NSOpenGLContext *ctx; 33 | glsl_info_t glsl; 34 | int openglwin; 35 | 36 | int size_x; 37 | int size_y; 38 | 39 | int pixel_nb; 40 | GLuint pixel_vbuffer; 41 | GLuint pixel_texture; 42 | unsigned int *pixtexbuff; 43 | } 44 | 45 | - (id) initWithRect: (NSRect)rect andTitle: (NSString *)title pfaAttrs: (NSOpenGLPixelFormatAttribute *)attrs; 46 | - (void) selectGLContext; 47 | - (void) flushGLContext; 48 | - (void) pixelPutColor: (int)color X:(int)x Y:(int)y; 49 | - (void) mlx_gl_draw; 50 | - (void) mlx_gl_draw_img:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y; 51 | - (void) mlx_gl_draw_font:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y andColor:(int)color glyphX:(int)gx glyphY:(int)gy; 52 | - (NSOpenGLContext *) ctx; 53 | - (NSWindowEvent *) win; 54 | - (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param; 55 | - (void) setKeyRepeat:(int)mode; 56 | - (void) ctxNeedsUpdate; 57 | @end 58 | -------------------------------------------------------------------------------- /so_long/src/ft_error.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_error.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/19 16:27:03 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 20:35:06 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | void ft_error2(t_list *d, int num) 16 | { 17 | d->moves++; 18 | d->moves--; 19 | if (num == 8) 20 | write(1, "►El mapa contiene caracteres erroneos.\n", 41); 21 | if (num == 9) 22 | write(1, "►El mapa no es rectangular\n", 29); 23 | } 24 | 25 | void ft_error(t_list *d, int num) 26 | { 27 | write(1, "❌ERROR❌\n", 12); 28 | if (num > 7) 29 | ft_error2(d, num); 30 | if (num == 1) 31 | write(1, "►En el principio de linea no hay pared.🧱\n", 46); 32 | if (num == 2) 33 | write(1, "►En el final de linea no hay pared.🧱\n", 42); 34 | if (num == 3) 35 | write(1, "►En la primera linea no hay pared.🧱\n", 41); 36 | if (num == 4) 37 | write(1, "►En la ultima linea no hay pared.🧱\n", 40); 38 | if (d->consum < 1 && num == 5) 39 | write(1, "►No hay consumibles!\n", 21); 40 | if (d->player != 1 && num == 5) 41 | write(1, "►El mapa solo debe tener un personaje. 🚶🏻‍♂️\n", 59); 42 | if (d->ex < 1 && num == 5) 43 | write(1, "►El mapa debe contener una salida. \n", 38); 44 | if (num == 6) 45 | write(1, "►El fichero no tiene la extension correcta.\n", 46); 46 | if (num == 7) 47 | write(1, "►El mapa no es rectangular.\n", 30); 48 | ft_free(d); 49 | } 50 | -------------------------------------------------------------------------------- /so_long/bns/ft_error_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_error.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/19 16:27:03 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 20:35:06 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | void ft_error2(t_list *d, int num) 16 | { 17 | d->moves++; 18 | d->moves--; 19 | if (num == 8) 20 | write(1, "►El mapa contiene caracteres erroneos.\n", 41); 21 | if (num == 9) 22 | write(1, "►El mapa no es rectangular\n", 29); 23 | } 24 | 25 | void ft_error(t_list *d, int num) 26 | { 27 | write(1, "❌ERROR❌\n", 12); 28 | if (num > 7) 29 | ft_error2(d, num); 30 | if (num == 1) 31 | write(1, "►En el principio de linea no hay pared.🧱\n", 46); 32 | if (num == 2) 33 | write(1, "►En el final de linea no hay pared.🧱\n", 42); 34 | if (num == 3) 35 | write(1, "►En la primera linea no hay pared.🧱\n", 41); 36 | if (num == 4) 37 | write(1, "►En la ultima linea no hay pared.🧱\n", 40); 38 | if (d->consum < 1 && num == 5) 39 | write(1, "►No hay consumibles!\n", 21); 40 | if (d->player != 1 && num == 5) 41 | write(1, "►El mapa solo debe tener un personaje. 🚶🏻‍♂️\n", 59); 42 | if (d->ex < 1 && num == 5) 43 | write(1, "►El mapa debe contener una salida. \n", 38); 44 | if (num == 6) 45 | write(1, "►El fichero no tiene la extension correcta.\n", 46); 46 | if (num == 7) 47 | write(1, "►El mapa no es rectangular.\n", 30); 48 | ft_free(d); 49 | } 50 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_int_str_to_wordtab.c: -------------------------------------------------------------------------------- 1 | // 2 | // str 2 wordtab & co 3 | // by ol 4 | 5 | 6 | #include 7 | #include 8 | 9 | int mlx_int_str_str(char *str,char *find,int len) 10 | { 11 | int len_f; 12 | int pos; 13 | char *s; 14 | char *f; 15 | 16 | len_f = strlen(find); 17 | if (len_f>len) 18 | return (-1); 19 | pos = 0; 20 | while (*(str+len_f-1)) 21 | { 22 | s = str; 23 | f = find; 24 | while (*(f++) == *(s++)) 25 | if (!*f) 26 | return (pos); 27 | str ++; 28 | pos ++; 29 | } 30 | return (-1); 31 | } 32 | 33 | 34 | 35 | int mlx_int_str_str_cote(char *str,char *find,int len) 36 | { 37 | int len_f; 38 | int pos; 39 | char *s; 40 | char *f; 41 | int cote; 42 | 43 | len_f = strlen(find); 44 | if (len_f>len) 45 | return (-1); 46 | cote = 0; 47 | pos = 0; 48 | while (*(str+len_f-1)) 49 | { 50 | if (*str=='"') 51 | cote = 1-cote; 52 | if (!cote) 53 | { 54 | s = str; 55 | f = find; 56 | while (*(f++) == *(s++)) 57 | if (!*f) 58 | return (pos); 59 | } 60 | str ++; 61 | pos ++; 62 | } 63 | return (-1); 64 | } 65 | 66 | 67 | char **mlx_int_str_to_wordtab(char *str) 68 | { 69 | char **tab; 70 | int pos; 71 | int nb_word; 72 | int len; 73 | 74 | len = strlen(str); 75 | nb_word = 0; 76 | pos = 0; 77 | while (pos +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/10 14:35:34 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 19:30:43 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | #include "../mlx/mlx.h" 15 | 16 | void calc_xy(char r, int i, t_list *d) 17 | { 18 | int x_; 19 | int y_; 20 | 21 | y_ = (i / d->width_l) * 50; 22 | x_ = (i % d->width_l) * 50; 23 | if (d->errors == 0) 24 | { 25 | if (r == 'C') 26 | mlx_put_image_to_window (d->mlx, d->win, d->poke, x_, y_); 27 | if (r == 'E') 28 | mlx_put_image_to_window (d->mlx, d->win, d->imgexit, x_, y_); 29 | if (r == '1') 30 | mlx_put_image_to_window (d->mlx, d->win, d->bush, x_, y_); 31 | if (r == '0') 32 | mlx_put_image_to_window (d->mlx, d->win, d->fond, x_, y_); 33 | if (r == 'P') 34 | mlx_put_image_to_window (d->mlx, d->win, d->npcstart, x_, y_); 35 | } 36 | } 37 | 38 | void print_map(t_list *d) 39 | { 40 | int i; 41 | 42 | i = 0; 43 | while (d->big_line[i]) 44 | { 45 | if (d->big_line[i] == '\n') 46 | i++; 47 | if (d->big_line[i] != 'C' && d->big_line[i] != 'E' 48 | && d->big_line[i] != '1' 49 | && d->big_line[i] != '0' && d->big_line[i] != 'P') 50 | exit(0); 51 | if (d->big_line[i] == 'C') 52 | calc_xy('C', i, d); 53 | if (d->big_line[i] == 'E') 54 | calc_xy('E', i, d); 55 | if (d->big_line[i] == '1') 56 | calc_xy('1', i, d); 57 | if (d->big_line[i] == '0') 58 | calc_xy('0', i, d); 59 | if (d->big_line[i] == 'P') 60 | calc_xy('P', i, d); 61 | i++; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🎮 So_long 2 | 3 | ## Descripción 4 | 5 | Este proyecto consiste en la creacion de un juego 2D en el cual tienes que recoger todos los consumibles y escapar en la menor cantidad de movimientos posibles. 6 | Tambien cuenta con la parte bonus en donde se tienen que añadir sprites, la cantidad de movimientos en el juego y enemigos. 7 | 8 | ![](https://github.com/gemartin99/So_long/blob/master/so_long.gif) 9 | 10 | ## 🔻 Para poder jugar 🔻 11 | 12 | Debes disponer de mapas con la extension ```.ber``` en los cuales se deben de cumplir los siguientes parametros: 13 | 14 | ◦ Todo el mapa debe estar rodeado de paredes ☞ '1' 15 | 16 | ◦ Debe contener un jugador ☞ 'P' 17 | 18 | ◦ Debe contener una o más salidas ☞ 'E' 19 | 20 | ◦ Debe contener al menos un consumible ☞ 'C' 21 | 22 | Un ejemplo de un mapa valido 23 | 24 | Screen Shot 2022-07-11 at 4 25 27 PM 25 | 26 | Un ejemplo de un mapa erroneo 27 | 28 | Screen Shot 2022-07-11 at 4 27 37 PM 29 | 30 | Para compilar el juego con la versión sin enemigos ↙️ 31 | 32 | ```bash 33 | $ make 34 | ``` 35 | Para compilar el juego con la versión con enemigos enemy 36 | ↙️ 37 | ```bash 38 | $ make bonus 39 | ``` 40 | Una vez ya has compilado deberas ejecutar el programa seguido del mapa 🗺️ 41 | ```bash 42 | $ ./so_long map.ber 43 | ``` 44 | ## Controles 🕹 45 | 46 | |TECLA|ACCION| 47 | |---|---| 48 | |`W`, ⬆️|Arriba| 49 | |`A`, ⬅️|Izquierda| 50 | |`S`, ⬇️|Abajo| 51 | |`D`, ➡️ |Derecha| 52 | |`ESC ❌`|Cierra la ventana| 53 | 54 | ### Ya puedes disfrutar de SO_LONG 🎮❗️ 55 | 56 | # Quizás pueda interesarte! 57 | 58 | ### - Para ver mi progresion en el common core 42 ↙️ 59 | 60 | [AQUÍ](https://github.com/gemartin99/42cursus) 61 | 62 | ### - Mi perfil en la intranet de 42 ↙️ 63 | [AQUÍ](https://profile.intra.42.fr/users/gemartin) 64 | 65 | ### - Contacto 📥 66 | 67 | ◦ Email: gemartin@student.42barcelona.com 68 | 69 | ◦ Linkedin: https://www.linkedin.com/in/gemartin99/ 70 | 71 | 72 | -------------------------------------------------------------------------------- /so_long/inc/so_long.h: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* so_long.h :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/04/21 19:26:26 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 20:15:54 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #ifndef SO_LONG_H 14 | # define SO_LONG_H 15 | 16 | # include 17 | # include 18 | # include 19 | # include 20 | # include 21 | 22 | typedef struct s_list 23 | { 24 | void *mlx; 25 | void *win; 26 | void *bush; 27 | void *fond; 28 | void *poke; 29 | void *npc; 30 | void *npcstart; 31 | void *npcmv; 32 | void *npcleft; 33 | void *npclmv; 34 | void *npcright; 35 | void *npcrmv; 36 | void *npcback; 37 | void *npcbmv; 38 | void *imgexit; 39 | int errors; 40 | int moves; 41 | int npccontrol; 42 | int linecontrol; 43 | int x; 44 | int y; 45 | int consum; 46 | int ex; 47 | int back; 48 | int wall; 49 | int player; 50 | int enemy; 51 | int height_l; 52 | int width_l; 53 | char *big_line; 54 | } t_list; 55 | 56 | int main(int argc, char **argv); 57 | int init_data(t_list *d, char *map); 58 | int ft_strlen(const char *s); 59 | int key_press(int key, t_list *d); 60 | int check_exit(t_list *d, char letter); 61 | int ft_free(t_list *d); 62 | void print_map(t_list *d); 63 | void read_map(char *map, t_list *d); 64 | void ft_bzero(void *s, size_t n); 65 | void ft_error(t_list *d, int num); 66 | void *ft_memset(void *b, int c, size_t len); 67 | void *ft_calloc(size_t count, size_t size); 68 | char *get_next_line(int fd); 69 | char *ft_strjoin(char *s1, char *s2); 70 | char *ft_strchr(const char *s, int c); 71 | char *ft_itoa(int n); 72 | 73 | #endif 74 | -------------------------------------------------------------------------------- /so_long/src/get_next_line_utils.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* nextline.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/02/09 12:58:22 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/18 23:13:38 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | int ft_strlen(const char *s) 16 | { 17 | int i; 18 | 19 | i = 0; 20 | while (s[i] != '\0') 21 | i++; 22 | return (i); 23 | } 24 | 25 | char *ft_strjoin(char *s1, char *s2) 26 | { 27 | char *str; 28 | size_t i; 29 | size_t c; 30 | 31 | if (!s1) 32 | { 33 | s1 = malloc(sizeof(char) + 1); 34 | s1[0] = 0; 35 | } 36 | str = (char *)malloc(sizeof(char) * (ft_strlen(s1) + ft_strlen(s2) + 1)); 37 | if (!str) 38 | return (0); 39 | i = -1; 40 | while (s1[++i]) 41 | str[i] = s1[i]; 42 | c = 0; 43 | while (s2[c]) 44 | { 45 | str[i + c] = s2[c]; 46 | c++; 47 | } 48 | str[i + c] = '\0'; 49 | free(s1); 50 | return (str); 51 | } 52 | 53 | char *ft_strchr(const char *s, int c) 54 | { 55 | int i; 56 | 57 | i = 0; 58 | while (s[i] != '\0') 59 | { 60 | if (s[i] == (char)c) 61 | return (&((char *)s)[i]); 62 | i++; 63 | } 64 | if ((char)c == '\0') 65 | return (&((char *)s)[i]); 66 | return (0); 67 | } 68 | 69 | char *ft_substr(char const *s, unsigned int start, int len) 70 | { 71 | int i; 72 | char *copia; 73 | 74 | i = 0; 75 | if (len > ft_strlen(s)) 76 | len = ft_strlen(s); 77 | if (!s) 78 | return (0); 79 | copia = malloc(sizeof(char) * (len + 1)); 80 | if (!copia) 81 | return (0); 82 | while (s[start] && start < ((unsigned int)ft_strlen(s)) && i < len) 83 | { 84 | copia[i] = s[start]; 85 | i++; 86 | start++; 87 | } 88 | copia[i] = '\0'; 89 | return (copia); 90 | } 91 | -------------------------------------------------------------------------------- /so_long/bns/get_next_line_utils_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* nextline.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: gemartin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/02/09 12:58:22 by gemartin #+# #+# */ 9 | /* Updated: 2022/05/18 23:13:38 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | int ft_strlen(const char *s) 16 | { 17 | int i; 18 | 19 | i = 0; 20 | while (s[i] != '\0') 21 | i++; 22 | return (i); 23 | } 24 | 25 | char *ft_strjoin(char *s1, char *s2) 26 | { 27 | char *str; 28 | size_t i; 29 | size_t c; 30 | 31 | if (!s1) 32 | { 33 | s1 = malloc(sizeof(char) + 1); 34 | s1[0] = 0; 35 | } 36 | str = (char *)malloc(sizeof(char) * (ft_strlen(s1) + ft_strlen(s2) + 1)); 37 | if (!str) 38 | return (0); 39 | i = -1; 40 | while (s1[++i]) 41 | str[i] = s1[i]; 42 | c = 0; 43 | while (s2[c]) 44 | { 45 | str[i + c] = s2[c]; 46 | c++; 47 | } 48 | str[i + c] = '\0'; 49 | free(s1); 50 | return (str); 51 | } 52 | 53 | char *ft_strchr(const char *s, int c) 54 | { 55 | int i; 56 | 57 | i = 0; 58 | while (s[i] != '\0') 59 | { 60 | if (s[i] == (char)c) 61 | return (&((char *)s)[i]); 62 | i++; 63 | } 64 | if ((char)c == '\0') 65 | return (&((char *)s)[i]); 66 | return (0); 67 | } 68 | 69 | char *ft_substr(char const *s, unsigned int start, int len) 70 | { 71 | int i; 72 | char *copia; 73 | 74 | i = 0; 75 | if (len > ft_strlen(s)) 76 | len = ft_strlen(s); 77 | if (!s) 78 | return (0); 79 | copia = malloc(sizeof(char) * (len + 1)); 80 | if (!copia) 81 | return (0); 82 | while (s[start] && start < ((unsigned int)ft_strlen(s)) && i < len) 83 | { 84 | copia[i] = s[start]; 85 | i++; 86 | start++; 87 | } 88 | copia[i] = '\0'; 89 | return (copia); 90 | } 91 | -------------------------------------------------------------------------------- /so_long/bns/print_map_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* print_map.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/10 14:35:34 by marvin #+# #+# */ 9 | /* Updated: 2022/05/23 15:35:02 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | #include "../mlx/mlx.h" 15 | 16 | void calc_xy(char r, int i, t_list *d) 17 | { 18 | int x_; 19 | int y_; 20 | 21 | y_ = (i / d->width_l) * 50; 22 | x_ = (i % d->width_l) * 50; 23 | if (d->errors == 0) 24 | { 25 | if (r == 'C') 26 | mlx_put_image_to_window (d->mlx, d->win, d->poke, x_, y_); 27 | if (r == 'E') 28 | mlx_put_image_to_window (d->mlx, d->win, d->imgexit, x_, y_); 29 | if (r == '1') 30 | mlx_put_image_to_window (d->mlx, d->win, d->bush, x_, y_); 31 | if (r == '0') 32 | mlx_put_image_to_window (d->mlx, d->win, d->fond, x_, y_); 33 | if (r == 'P') 34 | mlx_put_image_to_window (d->mlx, d->win, d->npcstart, x_, y_); 35 | if (r == 'X') 36 | mlx_put_image_to_window (d->mlx, d->win, d->enemyst, x_, y_); 37 | } 38 | } 39 | 40 | void print_map(t_list *d) 41 | { 42 | int i; 43 | 44 | i = 0; 45 | while (d->big_line[i]) 46 | { 47 | if (d->big_line[i] == '\n') 48 | i++; 49 | if (d->big_line[i] != 'C' && d->big_line[i] != 'E' 50 | && d->big_line[i] != '1' && d->big_line[i] != 'X' 51 | && d->big_line[i] != '0' && d->big_line[i] != 'P') 52 | exit(0); 53 | if (d->big_line[i] == 'C') 54 | calc_xy('C', i, d); 55 | if (d->big_line[i] == 'E') 56 | calc_xy('E', i, d); 57 | if (d->big_line[i] == '1') 58 | calc_xy('1', i, d); 59 | if (d->big_line[i] == '0') 60 | calc_xy('0', i, d); 61 | if (d->big_line[i] == 'P') 62 | calc_xy('P', i, d); 63 | if (d->big_line[i] == 'X') 64 | calc_xy('X', i, d); 65 | i++; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /so_long/inc/so_long_bonus.h: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* so_long.h :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/04/21 19:26:26 by marvin #+# #+# */ 9 | /* Updated: 2022/05/23 17:04:01 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #ifndef SO_LONG_BONUS_H 14 | # define SO_LONG_BONUS_H 15 | 16 | # include 17 | # include 18 | # include 19 | # include 20 | # include 21 | 22 | typedef struct s_list 23 | { 24 | void *mlx; 25 | void *win; 26 | void *bush; 27 | void *fond; 28 | void *poke; 29 | void *npc; 30 | void *npcstart; 31 | void *npcmv; 32 | void *npcleft; 33 | void *npclmv; 34 | void *npcright; 35 | void *npcrmv; 36 | void *npcback; 37 | void *npcbmv; 38 | void *imgexit; 39 | void *enemyst; 40 | void *enemy_; 41 | void *enemymv; 42 | int spenemy; 43 | int errors; 44 | int moves; 45 | int npccontrol; 46 | int linecontrol; 47 | int x; 48 | int y; 49 | int consum; 50 | int ex; 51 | int back; 52 | int wall; 53 | int player; 54 | int enemy; 55 | int height_l; 56 | int width_l; 57 | char *big_line; 58 | } t_list; 59 | 60 | int main(int argc, char **argv); 61 | int init_data(t_list *d, char *map); 62 | int ft_strlen(const char *s); 63 | int key_press(int key, t_list *d); 64 | int check_exit(t_list *d, char letter); 65 | int ft_free(t_list *d); 66 | void print_map(t_list *d); 67 | void read_map(char *map, t_list *d); 68 | void ft_bzero(void *s, size_t n); 69 | void ft_error(t_list *d, int num); 70 | void change_sprite(t_list *d, int num); 71 | void ft_dead(t_list *d); 72 | void *ft_memset(void *b, int c, size_t len); 73 | void *ft_calloc(size_t count, size_t size); 74 | char *get_next_line(int fd); 75 | char *ft_strjoin(char *s1, char *s2); 76 | char *ft_strchr(const char *s, int c); 77 | char *ft_itoa(int n); 78 | 79 | #endif 80 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_int.h: -------------------------------------------------------------------------------- 1 | // 2 | // mlx_int.h for minilibx 3 | // 4 | // ol@staff.42.fr 5 | // 6 | // include opengl needed before mlx_int.h 7 | // 8 | 9 | 10 | #define MAX_EVENT 32 11 | #define MAX_PIXEL_NB 200000 12 | #define UNIQ_BPP 4 13 | 14 | #define FONT_WIDTH 10 15 | #define FONT_HEIGHT 20 16 | 17 | 18 | typedef int (*func_t)(); 19 | 20 | /* structs */ 21 | 22 | typedef struct glsl_info_s 23 | { 24 | GLuint pixel_vshader; 25 | GLuint pixel_fshader; 26 | GLuint pixel_program; 27 | GLint loc_pixel_position; 28 | GLint loc_pixel_texture; 29 | GLint loc_pixel_winhalfsize; 30 | 31 | GLuint image_vshader; 32 | GLuint image_fshader; 33 | GLuint image_program; 34 | GLint loc_image_position; 35 | GLint loc_image_winhalfsize; 36 | GLint loc_image_texture; 37 | GLint loc_image_pos; 38 | GLint loc_image_size; 39 | 40 | GLuint font_vshader; 41 | GLuint font_fshader; 42 | GLuint font_program; 43 | GLint loc_font_position; 44 | GLint loc_font_winhalfsize; 45 | GLint loc_font_texture; 46 | GLint loc_font_color; 47 | GLint loc_font_posinwin; 48 | GLint loc_font_posinatlas; 49 | GLint loc_font_atlassize; 50 | } glsl_info_t; 51 | 52 | 53 | typedef struct mlx_img_list_s 54 | { 55 | int width; 56 | int height; 57 | char *buffer; 58 | GLfloat vertexes[8]; 59 | struct mlx_img_list_s *next; 60 | } mlx_img_list_t; 61 | 62 | 63 | typedef struct mlx_img_ctx_s 64 | { 65 | GLuint texture; 66 | GLuint vbuffer; 67 | mlx_img_list_t *img; 68 | struct mlx_img_ctx_s *next; 69 | } mlx_img_ctx_t; 70 | 71 | typedef struct mlx_win_list_s 72 | { 73 | void *winid; 74 | mlx_img_ctx_t *img_list; 75 | int nb_flush; 76 | int pixmgt; 77 | struct mlx_win_list_s *next; 78 | } mlx_win_list_t; 79 | 80 | 81 | typedef struct mlx_ptr_s 82 | { 83 | void *appid; 84 | mlx_win_list_t *win_list; 85 | mlx_img_list_t *img_list; 86 | void (*loop_hook)(void *); 87 | void *loop_hook_data; 88 | void *loop_timer; 89 | mlx_img_list_t *font; 90 | int main_loop_active; 91 | } mlx_ptr_t; 92 | 93 | // proto 94 | 95 | int mlx_shaders(glsl_info_t *glsl); 96 | char **mlx_int_str_to_wordtab(char *str); 97 | int mlx_int_str_str(char *str,char *find,int len); 98 | int mlx_int_str_str_cote(char *str,char *find,int len); 99 | int mlx_destroy_image(mlx_ptr_t *mlx_ptr, mlx_img_list_t *img_ptr); 100 | void *mlx_new_image(); 101 | void *mlx_xpm_to_image(mlx_ptr_t *xvar,char **xpm_data,int *width,int *height); 102 | int mlx_do_sync(mlx_ptr_t *mlx_ptr); 103 | -------------------------------------------------------------------------------- /so_long/Makefile: -------------------------------------------------------------------------------- 1 | NAME = so_long 2 | 3 | DEL_LINE = \033[2K 4 | ITALIC = \033[3m 5 | BOLD = \033[1m 6 | DEF_COLOR = \033[0;39m 7 | GRAY = \033[0;90m 8 | RED = \033[0;91m 9 | GREEN = \033[0;92m 10 | YELLOW = \033[0;93m 11 | BLUE = \033[0;94m 12 | MAGENTA = \033[0;95m 13 | CYAN = \033[0;96m 14 | WHITE = \033[0;97m 15 | BLACK = \033[0;99m 16 | ORANGE = \033[38;5;209m 17 | BROWN = \033[38;2;184;143;29m 18 | DARK_GRAY = \033[38;5;234m 19 | MID_GRAY = \033[38;5;245m 20 | DARK_GREEN = \033[38;2;75;179;82m 21 | DARK_YELLOW = \033[38;5;143m 22 | 23 | BONUS_NAME = so_long_bonus 24 | 25 | GREEN := \033[0;92m 26 | 27 | SRCS = ./src/so_long.c ./src/read_map.c ./src/print_map.c ./src/get_next_line.c \ 28 | ./src/get_next_line_utils.c ./src/key_press.c ./src/check_exit.c \ 29 | ./src/ft_free.c ./src/ft_itoa.c ./src/ft_calloc.c ./src/ft_bzero.c \ 30 | ./src/ft_memset.c ./src/ft_error.c 31 | 32 | BONUS = ./bns/so_long_bonus.c ./bns/read_map_bonus.c ./bns/print_map_bonus.c ./bns/get_next_line_bonus.c \ 33 | ./bns/get_next_line_utils_bonus.c ./bns/key_press_bonus.c ./bns/check_exit_bonus.c \ 34 | ./bns/ft_free_bonus.c ./bns/ft_itoa_bonus.c ./bns/ft_calloc_bonus.c ./bns/ft_bzero_bonus.c \ 35 | ./bns/ft_memset_bonus.c ./bns/ft_error_bonus.c ./bns/change_sprite_bonus.c 36 | 37 | INCLUD = ./inc/so_long.h \ 38 | ./inc/mlx.h 39 | 40 | INCLUD_BNS = ./inc/so_long_bonus.h \ 41 | ./inc/mlx.h 42 | 43 | CC = gcc 44 | RM = rm -f 45 | AR = ar rc 46 | RN = ranlib 47 | CFLAGS = -Wall -Wextra -Werror -MMD 48 | LIB = -L. -lmlx -framework OpenGL -framework AppKit 49 | 50 | .c.o: 51 | @echo "${BLUE} ◎ $(BROWN)Compiling ${MAGENTA}→ $(CYAN)$< $(DEF_COLOR)" 52 | @${CC} ${CFLAGS} -c $< -o ${<:.c=.o} 53 | 54 | OBJS = ${SRCS:.c=.o} 55 | BONUS_OBJECTS = ${BONUS:.c=.o} 56 | DEPS = $(addsuffix .d, $(basename $(SRCS))) 57 | DEPS2 = $(addsuffix .d, $(basename $(BONUS))) 58 | 59 | all: ${NAME} 60 | 61 | -include $(DEPS) 62 | ${NAME}: ${OBJS} 63 | @echo "\n${ORANGE}Minilibx compilation $(DEF_COLOR)\n" 64 | @make -C ./mlx all 65 | @cp ./mlx/libmlx.a . 66 | @$(CC) $(SRCS) $(LIB) -o $(NAME) 67 | @echo "$(GREEN)Created ${NAME} ✓$(DEF_COLOR)\n" 68 | 69 | -include $(DEPS2) 70 | bonus: ${BONUS_OBJECTS} 71 | @echo "\n${ORANGE}Minilibx compilation $(DEF_COLOR)\n" 72 | @touch $@ 73 | @make -C ./mlx all 74 | @cp ./mlx/libmlx.a . 75 | @$(CC) $(BONUS) $(LIB) -o $(BONUS_NAME) 76 | @echo "$(GREEN)Created ${BONUS_NAME} ✓$(DEF_COLOR)\n" 77 | 78 | clean: 79 | @make -C ./mlx clean 80 | @${RM} ${OBJS} ${BONUS_OBJECTS} 81 | @${RM} ${DEPS} ${DEPS2} 82 | @echo "\n${BLUE} ◎ $(RED)All objects cleaned successfully ${BLUE}◎$(DEF_COLOR)\n" 83 | 84 | fclean: 85 | @make -C ./mlx clean 86 | @${RM} ${OBJS} ${BONUS_OBJECTS} 87 | @${RM} ${DEPS} ${DEPS2} 88 | @${RM} bonus 89 | @${RM} ${NAME} ${BONUS_NAME} libmlx.a 90 | @echo "\n${BLUE} ◎ $(RED)All objects and executable cleaned successfully${BLUE} ◎$(DEF_COLOR)\n" 91 | 92 | 93 | re: fclean all 94 | 95 | .PHONY: all clean fclean re 96 | -------------------------------------------------------------------------------- /so_long/src/so_long.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* so_long.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/04/20 23:27:21 by marvin #+# #+# */ 9 | /* Updated: 2022/07/08 12:07:11 by gemartin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | #include "../mlx/mlx.h" 15 | 16 | void check_map_extension(char *map, t_list *d) 17 | { 18 | int i; 19 | 20 | i = ft_strlen(map); 21 | if (i > 2 && map[i - 4] == '.' && map[i - 3] == 'b' 22 | && map[i - 2] == 'e' && map[i - 1] == 'r') 23 | ; 24 | else 25 | ft_error(d, 6); 26 | } 27 | 28 | void init_img(t_list *d) 29 | { 30 | int w; 31 | int h; 32 | 33 | w = 50; 34 | h = 50; 35 | d->y = (ft_strlen(d->big_line) / d->width_l + 1) * 50; 36 | d->x = (d->width_l - 1) * 50; 37 | d->bush = mlx_xpm_file_to_image(d->mlx, "img/bush.xpm", &w, &h); 38 | d->fond = mlx_xpm_file_to_image(d->mlx, "img/fond.xpm", &w, &h); 39 | d->poke = mlx_xpm_file_to_image(d->mlx, "img/poke.xpm", &w, &h); 40 | d->npcstart = mlx_xpm_file_to_image(d->mlx, "img/npc.xpm", &w, &h); 41 | d->npc = mlx_xpm_file_to_image(d->mlx, "img/npc.xpm", &w, &h); 42 | d->npcmv = mlx_xpm_file_to_image(d->mlx, "img/npcmv.xpm", &w, &h); 43 | d->npcleft = mlx_xpm_file_to_image(d->mlx, "img/npcleft.xpm", &w, &h); 44 | d->npclmv = mlx_xpm_file_to_image(d->mlx, "img/npcleftmv.xpm", &w, &h); 45 | d->npcright = mlx_xpm_file_to_image(d->mlx, "img/npcright.xpm", &w, &h); 46 | d->npcrmv = mlx_xpm_file_to_image(d->mlx, "img/npcrightmv.xpm", &w, &h); 47 | d->npcback = mlx_xpm_file_to_image(d->mlx, "img/npcback.xpm", &w, &h); 48 | d->npcbmv = mlx_xpm_file_to_image(d->mlx, "img/npcbackmv.xpm", &w, &h); 49 | d->imgexit = mlx_xpm_file_to_image(d->mlx, "img/imgexit.xpm", &w, &h); 50 | } 51 | 52 | int main(int argc, char **argv) 53 | { 54 | t_list *d; 55 | 56 | if (argc != 2) 57 | { 58 | write(1, "Numero de argumentos incorrecto.\n", 33); 59 | return (0); 60 | } 61 | d = ft_calloc(1, sizeof(t_list)); 62 | if (!d) 63 | return (0); 64 | d->mlx = mlx_init(); 65 | init_data(d, argv[1]); 66 | mlx_key_hook(d->win, key_press, d); 67 | mlx_hook(d->win, 17, 0, ft_free, d); 68 | mlx_loop(d->mlx); 69 | ft_free(d); 70 | return (0); 71 | } 72 | 73 | int init_data(t_list *d, char *map) 74 | { 75 | d->moves = 0; 76 | check_map_extension(map, d); 77 | read_map(map, d); 78 | init_img(d); 79 | d->win = mlx_new_window(d->mlx, d->x, d->y, "so_long"); 80 | print_map(d); 81 | return (0); 82 | } 83 | -------------------------------------------------------------------------------- /so_long/img/fond.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 10 1 ", 5 | " c #6FC0A0", 6 | ". c #72C1A2", 7 | "X c #78C3A6", 8 | "o c #6DBF9E", 9 | "O c #69BD99", 10 | "+ c #8CC9B2", 11 | "@ c #55B78E", 12 | "# c #6CBE9D", 13 | "$ c #61BA95", 14 | "% c #42AE80", 15 | /* pixels */ 16 | " .XX. .XX. .XX. oOOo ", 17 | " X++X X++X X++X O@@O ", 18 | " X++X #$$# X++X X++X O@@O#$$", 19 | " .XX. $%%$ .XX. .XX. oOOo$%%", 20 | " $%%$oOOo $%%", 21 | " #$$#O@@O #$$", 22 | ". O@@O .XX. .XX. ", 23 | "X oOOo X++X X++X ", 24 | "X.XX. .XX. #$$# X++X.XX. X++X.XX", 25 | ".X++X X++X $%%$ .XX.X++X .XX.X++", 26 | " X++X X++X $%%$ X++X X++", 27 | " .XX. .XX. #$$# .XX. .XX", 28 | " oOOo oOOo oOOo ", 29 | " O@@O O@@O O@@O ", 30 | " O@@O O@@O O@@O ", 31 | " oOOo oOOo oOOo ", 32 | "o .XX. .XX. oOOo .XX. ", 33 | "O X++X X++X O@@O X++X ", 34 | "O#$$# X++X X++X O@@O#$$# X++X ", 35 | "o$%%$ .XX. .XX. oOOo$%%$ .XX. ", 36 | " $%%$oOOo $%%$oOOo ", 37 | " #$$#O@@O #$$#O@@O ", 38 | ". O@@O .XX. O@@O .XX. ", 39 | "X oOOo X++X oOOo X++X ", 40 | "X.XX. #$$# .XX. X++X.XX. #$$# X++X.XX", 41 | ".X++X $%%$ X++X .XX.X++X $%%$ .XX.X++", 42 | " X++X $%%$ X++X X++X $%%$ X++", 43 | " .XX. #$$# .XX. .XX. #$$# .XX", 44 | " oOOo oOOo oOOo ", 45 | " O@@O O@@O O@@O ", 46 | " O@@O O@@O O@@O ", 47 | " oOOo oOOo oOOo ", 48 | " .XX. .XX. .XX. oOOo ", 49 | " X++X X++X X++X O@@O ", 50 | " X++X #$$# X++X X++X O@@O#$$", 51 | " .XX. $%%$ .XX. .XX. oOOo$%%", 52 | " $%%$oOOo $%%", 53 | " #$$#O@@O #$$", 54 | ". O@@O .XX. .XX. ", 55 | "X oOOo X++X X++X ", 56 | "X.XX. .XX. #$$# X++X.XX. X++X.XX", 57 | ".X++X X++X $%%$ .XX.X++X .XX.X++", 58 | " X++X X++X $%%$ X++X X++", 59 | " .XX. .XX. #$$# .XX. .XX", 60 | " oOOo oOOo oOOo ", 61 | " O@@O O@@O O@@O ", 62 | " O@@O O@@O O@@O ", 63 | " oOOo oOOo oOOo ", 64 | "o .XX. .XX. oOOo .XX. ", 65 | "O X++X X++X O@@O X++X " 66 | }; 67 | -------------------------------------------------------------------------------- /so_long/bns/so_long_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* so_long.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/04/20 23:27:21 by marvin #+# #+# */ 9 | /* Updated: 2022/05/23 15:34:38 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | #include "../mlx/mlx.h" 15 | 16 | void check_map_extension(char *map, t_list *d) 17 | { 18 | int i; 19 | 20 | i = ft_strlen(map); 21 | if (i > 2 && map[i - 4] == '.' && map[i - 3] == 'b' 22 | && map[i - 2] == 'e' && map[i - 1] == 'r') 23 | ; 24 | else 25 | ft_error(d, 6); 26 | } 27 | 28 | void init_img(t_list *d) 29 | { 30 | int w; 31 | int h; 32 | 33 | w = 50; 34 | h = 50; 35 | d->y = (ft_strlen(d->big_line) / d->width_l + 1) * 50; 36 | d->x = (d->width_l - 1) * 50; 37 | d->bush = mlx_xpm_file_to_image(d->mlx, "../img/bush.xpm", &w, &h); 38 | d->fond = mlx_xpm_file_to_image(d->mlx, "../img/fond.xpm", &w, &h); 39 | d->poke = mlx_xpm_file_to_image(d->mlx, "../img/poke.xpm", &w, &h); 40 | d->npcstart = mlx_xpm_file_to_image(d->mlx, "../img/npc.xpm", &w, &h); 41 | d->npc = mlx_xpm_file_to_image(d->mlx, "../img/npc.xpm", &w, &h); 42 | d->npcmv = mlx_xpm_file_to_image(d->mlx, "../img/npcmv.xpm", &w, &h); 43 | d->npcleft = mlx_xpm_file_to_image(d->mlx, "../img/npcleft.xpm", &w, &h); 44 | d->npclmv = mlx_xpm_file_to_image(d->mlx, "../img/npcleftmv.xpm", &w, &h); 45 | d->npcright = mlx_xpm_file_to_image(d->mlx, "../img/npcright.xpm", &w, &h); 46 | d->npcrmv = mlx_xpm_file_to_image(d->mlx, "../img/npcrightmv.xpm", &w, &h); 47 | d->npcback = mlx_xpm_file_to_image(d->mlx, "../img/npcback.xpm", &w, &h); 48 | d->npcbmv = mlx_xpm_file_to_image(d->mlx, "../img/npcbackmv.xpm", &w, &h); 49 | d->imgexit = mlx_xpm_file_to_image(d->mlx, "../img/imgexit.xpm", &w, &h); 50 | d->enemy_ = mlx_xpm_file_to_image(d->mlx, "../img/enemy.xpm", &w, &h); 51 | d->enemyst = mlx_xpm_file_to_image(d->mlx, "../img/enemy.xpm", &w, &h); 52 | d->enemymv = mlx_xpm_file_to_image(d->mlx, "../img/enemymv.xpm", &w, &h); 53 | } 54 | 55 | int main(int argc, char **argv) 56 | { 57 | t_list *d; 58 | 59 | if (argc != 2) 60 | { 61 | write(1, "Numero de argumentos incorrecto.\n", 33); 62 | return (0); 63 | } 64 | d = ft_calloc(1, sizeof(t_list)); 65 | if (!d) 66 | return (0); 67 | d->mlx = mlx_init(); 68 | init_data(d, argv[1]); 69 | mlx_key_hook(d->win, key_press, d); 70 | mlx_hook(d->win, 17, 0, ft_free, d); 71 | mlx_loop(d->mlx); 72 | ft_free(d); 73 | return (0); 74 | } 75 | 76 | int init_data(t_list *d, char *map) 77 | { 78 | d->moves = 0; 79 | check_map_extension(map, d); 80 | read_map(map, d); 81 | init_img(d); 82 | d->win = mlx_new_window(d->mlx, d->x, d->y, "so_long"); 83 | print_map(d); 84 | return (0); 85 | } 86 | -------------------------------------------------------------------------------- /so_long/src/read_map.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* read_map.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/04/22 10:39:46 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 00:51:05 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | 15 | void check_start_line(t_list *d) 16 | { 17 | int i; 18 | 19 | i = d->width_l - 2; 20 | while (i < ft_strlen(d->big_line)) 21 | { 22 | if (d->big_line[i] == '1') 23 | i = i + d->width_l; 24 | else 25 | ft_error(d, 2); 26 | } 27 | i = d->width_l; 28 | while (i < ft_strlen(d->big_line)) 29 | { 30 | if (d->big_line[i] == '1') 31 | i = i + d->width_l; 32 | else 33 | ft_error(d, 1); 34 | } 35 | } 36 | 37 | void check_fst_line(t_list *d) 38 | { 39 | int i; 40 | int last; 41 | 42 | i = 0; 43 | last = ft_strlen(d->big_line) - d->width_l; 44 | while (i != d->width_l) 45 | { 46 | if (d->big_line[i] == '1' || d->big_line[i] == '\n') 47 | i++; 48 | else 49 | ft_error(d, 3); 50 | } 51 | while (last != ft_strlen(d->big_line)) 52 | { 53 | if (d->big_line[last] == '1' || d->big_line[last] == '\n') 54 | last++; 55 | else 56 | ft_error(d, 4); 57 | } 58 | check_start_line(d); 59 | } 60 | 61 | void checkline(t_list *d) 62 | { 63 | int i; 64 | 65 | i = 0; 66 | while (d->big_line[i]) 67 | { 68 | if (d->big_line[i] != 'C' && d->big_line[i] != 'E' 69 | && d->big_line[i] != '1' 70 | && d->big_line[i] != '0' && d->big_line[i] != 'P' 71 | && d->big_line[i] != '\n') 72 | ft_error(d, 8); 73 | if (d->big_line[i] == 'C') 74 | d->consum++; 75 | if (d->big_line[i] == 'E') 76 | d->ex++; 77 | if (d->big_line[i] == '1') 78 | d->wall++; 79 | if (d->big_line[i] == '0') 80 | d->back++; 81 | if (d->big_line[i] == 'P') 82 | d->player++; 83 | i++; 84 | } 85 | if (d->consum < 1 || d->ex < 1 || d->wall < 1 86 | || d->player != 1) 87 | ft_error(d, 5); 88 | } 89 | 90 | void check_line_break(char *line, t_list *d) 91 | { 92 | int i; 93 | 94 | i = 0; 95 | d->linecontrol = 1; 96 | while (line[i]) 97 | { 98 | if (line[i] == '\n') 99 | d->linecontrol = 0; 100 | i++; 101 | } 102 | } 103 | 104 | void read_map(char *map, t_list *d) 105 | { 106 | int fd; 107 | char *line; 108 | 109 | fd = open(map, O_RDONLY); 110 | if (fd < 0) 111 | ft_free(d); 112 | d->linecontrol = 2; 113 | while (d->linecontrol != 1) 114 | { 115 | d->height_l++; 116 | line = get_next_line(fd); 117 | if (!line) 118 | ft_error(d, 9); 119 | if (d->linecontrol == 2) 120 | d->width_l = ft_strlen(line); 121 | check_line_break(line, d); 122 | if (ft_strlen(line) + d->linecontrol != d->width_l) 123 | ft_error(d, 7); 124 | d->big_line = ft_strjoin(d->big_line, line); 125 | if (line) 126 | free(line); 127 | } 128 | close(fd); 129 | check_fst_line(d); 130 | checkline(d); 131 | } 132 | -------------------------------------------------------------------------------- /so_long/bns/read_map_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* read_map.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/04/22 10:39:46 by marvin #+# #+# */ 9 | /* Updated: 2022/05/23 15:04:25 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | 15 | void check_start_line(t_list *d) 16 | { 17 | int i; 18 | 19 | i = d->width_l - 2; 20 | while (i < ft_strlen(d->big_line)) 21 | { 22 | if (d->big_line[i] == '1') 23 | i = i + d->width_l; 24 | else 25 | ft_error(d, 2); 26 | } 27 | i = d->width_l; 28 | while (i < ft_strlen(d->big_line)) 29 | { 30 | if (d->big_line[i] == '1') 31 | i = i + d->width_l; 32 | else 33 | ft_error(d, 1); 34 | } 35 | } 36 | 37 | void check_fst_line(t_list *d) 38 | { 39 | int i; 40 | int last; 41 | 42 | i = 0; 43 | last = ft_strlen(d->big_line) - d->width_l; 44 | while (i != d->width_l) 45 | { 46 | if (d->big_line[i] == '1' || d->big_line[i] == '\n') 47 | i++; 48 | else 49 | ft_error(d, 3); 50 | } 51 | while (last != ft_strlen(d->big_line)) 52 | { 53 | if (d->big_line[last] == '1' || d->big_line[last] == '\n') 54 | last++; 55 | else 56 | ft_error(d, 4); 57 | } 58 | check_start_line(d); 59 | } 60 | 61 | void checkline(t_list *d) 62 | { 63 | int i; 64 | 65 | i = 0; 66 | while (d->big_line[i]) 67 | { 68 | if (d->big_line[i] != 'C' && d->big_line[i] != 'E' 69 | && d->big_line[i] != '1' && d->big_line[i] != 'X' 70 | && d->big_line[i] != '0' && d->big_line[i] != 'P' 71 | && d->big_line[i] != '\n') 72 | ft_error(d, 8); 73 | if (d->big_line[i] == 'C') 74 | d->consum++; 75 | if (d->big_line[i] == 'E') 76 | d->ex++; 77 | if (d->big_line[i] == '1') 78 | d->wall++; 79 | if (d->big_line[i] == '0') 80 | d->back++; 81 | if (d->big_line[i] == 'P') 82 | d->player++; 83 | i++; 84 | } 85 | if (d->consum < 1 || d->ex < 1 || d->wall < 1 86 | || d->player != 1) 87 | ft_error(d, 5); 88 | } 89 | 90 | void check_line_break(char *line, t_list *d) 91 | { 92 | int i; 93 | 94 | i = 0; 95 | d->linecontrol = 1; 96 | while (line[i]) 97 | { 98 | if (line[i] == '\n') 99 | d->linecontrol = 0; 100 | i++; 101 | } 102 | } 103 | 104 | void read_map(char *map, t_list *d) 105 | { 106 | int fd; 107 | char *line; 108 | 109 | fd = open(map, O_RDONLY); 110 | if (fd < 0) 111 | ft_free(d); 112 | d->linecontrol = 2; 113 | while (d->linecontrol != 1) 114 | { 115 | d->height_l++; 116 | line = get_next_line(fd); 117 | if (!line) 118 | ft_error(d, 9); 119 | if (d->linecontrol == 2) 120 | d->width_l = ft_strlen(line); 121 | check_line_break(line, d); 122 | if (ft_strlen(line) + d->linecontrol != d->width_l) 123 | ft_error(d, 7); 124 | d->big_line = ft_strjoin(d->big_line, line); 125 | if (line) 126 | free(line); 127 | } 128 | close(fd); 129 | check_fst_line(d); 130 | checkline(d); 131 | } 132 | -------------------------------------------------------------------------------- /so_long/src/key_press.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* move_w.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/15 22:51:33 by marvin #+# #+# */ 9 | /* Updated: 2022/05/20 19:31:19 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long.h" 14 | #include "../mlx/mlx.h" 15 | 16 | void move_w(t_list *d) 17 | { 18 | int i; 19 | 20 | i = 0; 21 | while (d->big_line[i] != 'P') 22 | i++; 23 | if (d->big_line[i - d->width_l] != '1' 24 | && !check_exit(d, d->big_line[i - d->width_l])) 25 | { 26 | d->moves++; 27 | if (d->big_line[i - d->width_l] == 'C') 28 | d->consum--; 29 | d->big_line[i] = '0'; 30 | d->big_line[i - d->width_l] = 'P'; 31 | if (d->npccontrol == 0) 32 | { 33 | d->npcstart = d->npcback; 34 | d->npccontrol = 1; 35 | } 36 | else 37 | { 38 | d->npcstart = d->npcbmv; 39 | d->npccontrol = 0; 40 | } 41 | } 42 | print_map(d); 43 | } 44 | 45 | void move_s(t_list *d) 46 | { 47 | int i; 48 | 49 | i = 0; 50 | while (d->big_line[i] != 'P') 51 | i++; 52 | if (d->big_line[i + d->width_l] != '1' 53 | && !check_exit(d, d->big_line[i + d->width_l])) 54 | { 55 | d->moves++; 56 | if (d->big_line[i + d->width_l] == 'C') 57 | d->consum--; 58 | d->big_line[i] = '0'; 59 | d->big_line[i + d->width_l] = 'P'; 60 | if (d->npccontrol == 0) 61 | { 62 | d->npcstart = d->npc; 63 | d->npccontrol = 1; 64 | } 65 | else 66 | { 67 | d->npcstart = d->npcmv; 68 | d->npccontrol = 0; 69 | } 70 | } 71 | print_map(d); 72 | } 73 | 74 | void move_a(t_list *d) 75 | { 76 | int i; 77 | 78 | i = 0; 79 | while (d->big_line[i] != 'P') 80 | i++; 81 | if (d->big_line[i - 1] != '1' && !check_exit(d, d->big_line[i - 1])) 82 | { 83 | d->moves++; 84 | if (d->big_line[i - 1] == 'C') 85 | d->consum--; 86 | d->big_line[i] = '0'; 87 | d->big_line[i - 1] = 'P'; 88 | if (d->npccontrol == 0) 89 | { 90 | d->npcstart = d->npcleft; 91 | d->npccontrol = 1; 92 | } 93 | else 94 | { 95 | d->npcstart = d->npclmv; 96 | d->npccontrol = 0; 97 | } 98 | } 99 | print_map(d); 100 | } 101 | 102 | void move_d(t_list *d) 103 | { 104 | int i; 105 | 106 | i = 0; 107 | while (d->big_line[i] != 'P') 108 | i++; 109 | if (d->big_line[i + 1] != '1' && !check_exit(d, d->big_line[i + 1])) 110 | { 111 | d->moves++; 112 | if (d->big_line[i + 1] == 'C') 113 | d->consum--; 114 | d->big_line[i] = '0'; 115 | d->big_line[i + 1] = 'P'; 116 | if (d->npccontrol == 0) 117 | { 118 | d->npcstart = d->npcright; 119 | d->npccontrol = 1; 120 | } 121 | else 122 | { 123 | d->npcstart = d->npcrmv; 124 | d->npccontrol = 0; 125 | } 126 | } 127 | print_map(d); 128 | } 129 | 130 | int key_press(int key, t_list *d) 131 | { 132 | char *moves_p; 133 | 134 | (void)d; 135 | if (key == 53) 136 | { 137 | mlx_destroy_window(d->mlx, d->win); 138 | ft_free(d); 139 | } 140 | if (key == 13) 141 | move_w(d); 142 | if (key == 0) 143 | move_a(d); 144 | if (key == 1) 145 | move_s(d); 146 | if (key == 2) 147 | move_d(d); 148 | moves_p = ft_itoa(d->moves); 149 | write(1, moves_p, ft_strlen(moves_p)); 150 | if (moves_p) 151 | free(moves_p); 152 | write(1, "\n", 1); 153 | return (0); 154 | } 155 | -------------------------------------------------------------------------------- /so_long/bns/key_press_bonus.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* move_w.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: marvin +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2022/05/15 22:51:33 by marvin #+# #+# */ 9 | /* Updated: 2022/05/23 15:39:44 by marvin ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "../inc/so_long_bonus.h" 14 | #include "../mlx/mlx.h" 15 | 16 | void move_w(t_list *d) 17 | { 18 | int i; 19 | 20 | i = 0; 21 | while (d->big_line[i] != 'P') 22 | i++; 23 | if (d->big_line[i - d->width_l] != '1' 24 | && !check_exit(d, d->big_line[i - d->width_l])) 25 | { 26 | if (d->big_line[i - d->width_l] == 'X') 27 | ft_dead(d); 28 | d->moves++; 29 | if (d->big_line[i - d->width_l] == 'C') 30 | d->consum--; 31 | d->big_line[i] = '0'; 32 | d->big_line[i - d->width_l] = 'P'; 33 | change_sprite(d, 0); 34 | if (d->npccontrol == 0) 35 | d->npcstart = d->npcback; 36 | else 37 | d->npcstart = d->npcbmv; 38 | } 39 | print_map(d); 40 | } 41 | 42 | void move_s(t_list *d) 43 | { 44 | int i; 45 | 46 | i = 0; 47 | while (d->big_line[i] != 'P') 48 | i++; 49 | if (d->big_line[i + d->width_l] != '1' 50 | && !check_exit(d, d->big_line[i + d->width_l])) 51 | { 52 | if (d->big_line[i + d->width_l] == 'X') 53 | ft_dead(d); 54 | d->moves++; 55 | if (d->big_line[i + d->width_l] == 'C') 56 | d->consum--; 57 | d->big_line[i] = '0'; 58 | d->big_line[i + d->width_l] = 'P'; 59 | change_sprite(d, 0); 60 | if (d->npccontrol == 0) 61 | d->npcstart = d->npc; 62 | else 63 | d->npcstart = d->npcmv; 64 | } 65 | print_map(d); 66 | } 67 | 68 | void move_a(t_list *d) 69 | { 70 | int i; 71 | 72 | i = 0; 73 | while (d->big_line[i] != 'P') 74 | i++; 75 | if (d->big_line[i - 1] != '1' && !check_exit(d, d->big_line[i - 1])) 76 | { 77 | if (d->big_line[i - 1] == 'X') 78 | ft_dead(d); 79 | d->moves++; 80 | if (d->big_line[i - 1] == 'C') 81 | d->consum--; 82 | d->big_line[i] = '0'; 83 | d->big_line[i - 1] = 'P'; 84 | change_sprite(d, 0); 85 | if (d->npccontrol == 0) 86 | d->npcstart = d->npcleft; 87 | else 88 | d->npcstart = d->npclmv; 89 | } 90 | print_map(d); 91 | } 92 | 93 | void move_d(t_list *d) 94 | { 95 | int i; 96 | 97 | i = 0; 98 | while (d->big_line[i] != 'P') 99 | i++; 100 | if (d->big_line[i + 1] != '1' && !check_exit(d, d->big_line[i + 1])) 101 | { 102 | if (d->big_line[i + 1] == 'X') 103 | ft_dead(d); 104 | d->moves++; 105 | if (d->big_line[i + 1] == 'C') 106 | d->consum--; 107 | d->big_line[i] = '0'; 108 | d->big_line[i + 1] = 'P'; 109 | change_sprite(d, 0); 110 | if (d->npccontrol == 0) 111 | d->npcstart = d->npcright; 112 | else 113 | d->npcstart = d->npcrmv; 114 | } 115 | print_map(d); 116 | } 117 | 118 | int key_press(int key, t_list *d) 119 | { 120 | char *moves_p; 121 | 122 | if (key == 53) 123 | { 124 | mlx_destroy_window(d->mlx, d->win); 125 | ft_free(d); 126 | } 127 | if (key == 13) 128 | move_w(d); 129 | if (key == 0) 130 | move_a(d); 131 | if (key == 1) 132 | move_s(d); 133 | if (key == 2) 134 | move_d(d); 135 | moves_p = ft_itoa(d->moves); 136 | mlx_string_put(d->mlx, d->win, 137 | d->x - 70, d->y - 20, 0x00000, "MOVES:"); 138 | mlx_string_put(d->mlx, d->win, 139 | d->x - 30, d->y - 20, 0x00000, moves_p); 140 | write(1, moves_p, ft_strlen(moves_p)); 141 | if (moves_p) 142 | free(moves_p); 143 | write(1, "\n", 1); 144 | return (0); 145 | } 146 | -------------------------------------------------------------------------------- /so_long/mlx/mlx.h: -------------------------------------------------------------------------------- 1 | /* 2 | ** mlx.h for MinilibX in 3 | ** 4 | ** Made by Charlie Root 5 | ** Login 6 | ** 7 | ** Started on Mon Jul 31 16:37:50 2000 Charlie Root 8 | ** Last update Tue Oct 01 16:23:28 2014 Olivier Crouzet 9 | */ 10 | 11 | /* 12 | ** MinilibX - Please report bugs 13 | */ 14 | 15 | 16 | /* 17 | ** FR msg - FR msg - FR msg 18 | ** 19 | ** MacOSX 20 | ** La MinilibX utilise 2 frameworks Mac : OpenGL et AppKit 21 | ** qu'il faut ajouter a la compilation : 22 | ** -framework OpenGL -framework AppKit 23 | ** 24 | ** UNIX / Linux 25 | ** La MinilibX utilise 2 librairies supplementaires qu'il 26 | ** est necessaire de rajouter a la compilation : 27 | ** -lmlx -lXext -lX11 28 | ** 29 | ** La MinilibX permet le chargement des images de type Xpm. 30 | ** Notez que cette implementation est incomplete. 31 | ** 32 | ** Il y a des differences entre X11 et MacOS. 33 | ** les numeros des touches ne sont pas les memes, 34 | ** les numeros des boutons souris ne sont pas les memes. 35 | ** Egalement l'expose est gere differemment, et sous MacOS 36 | ** il est preferable d'entrer le plus tot possible dans mlx_loop, 37 | ** il est normal que les fenetres n'apparaissent pas avant mlx_loop 38 | ** (ou bien forcez avec mlx_do_sync mais c'est pas genial). 39 | ** Sous MacOS, l'octet Alpha est pris en compte dans toutes les 40 | ** images, et represente la transparence et non l'opacite comme 41 | ** c'est normalement le cas. 42 | */ 43 | 44 | 45 | #ifndef MLX_H 46 | 47 | #define MLX_H 48 | 49 | 50 | void *mlx_init(); 51 | /* 52 | ** needed before everything else. 53 | ** return (void *)0 if failed 54 | */ 55 | 56 | 57 | /* 58 | ** Basic actions 59 | */ 60 | 61 | void *mlx_new_window(void *mlx_ptr, int size_x, int size_y, char *title); 62 | /* 63 | ** return void *0 if failed 64 | */ 65 | int mlx_clear_window(void *mlx_ptr, void *win_ptr); 66 | int mlx_pixel_put(void *mlx_ptr, void *win_ptr, int x, int y, int color); 67 | /* 68 | ** origin for x & y is top left corner of the window 69 | ** y down is positive 70 | ** color is 0x00RRGGBB 71 | */ 72 | 73 | 74 | /* 75 | ** Image stuff 76 | */ 77 | 78 | void *mlx_new_image(void *mlx_ptr,int width,int height); 79 | /* 80 | ** return void *0 if failed 81 | */ 82 | char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel, 83 | int *size_line, int *endian); 84 | /* 85 | ** endian : 0 = sever X is little endian, 1 = big endian 86 | ** endian : useless on macos, client and graphical framework have the same endian 87 | */ 88 | int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr, 89 | int x, int y); 90 | unsigned int mlx_get_color_value(void *mlx_ptr, int color); 91 | 92 | 93 | /* 94 | ** dealing with Events 95 | */ 96 | 97 | int mlx_mouse_hook (void *win_ptr, int (*funct_ptr)(), void *param); 98 | int mlx_key_hook (void *win_ptr, int (*funct_ptr)(), void *param); 99 | int mlx_expose_hook (void *win_ptr, int (*funct_ptr)(), void *param); 100 | 101 | int mlx_loop_hook (void *mlx_ptr, int (*funct_ptr)(), void *param); 102 | int mlx_loop (void *mlx_ptr); 103 | 104 | 105 | /* 106 | ** hook funct are called as follow : 107 | ** 108 | ** expose_hook(void *param); 109 | ** key_hook(int keycode, void *param); 110 | ** mouse_hook(int button, int x,int y, void *param); 111 | ** loop_hook(void *param); 112 | ** 113 | */ 114 | 115 | 116 | /* 117 | ** Usually asked... 118 | */ 119 | 120 | int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color, 121 | char *string); 122 | void *mlx_xpm_to_image(void *mlx_ptr, char **xpm_data, 123 | int *width, int *height); 124 | void *mlx_xpm_file_to_image(void *mlx_ptr, char *filename, 125 | int *width, int *height); 126 | void *mlx_png_file_to_image(void *mlx_ptr, char *file, int *width, int *height); 127 | 128 | int mlx_destroy_window(void *mlx_ptr, void *win_ptr); 129 | 130 | int mlx_destroy_image(void *mlx_ptr, void *img_ptr); 131 | 132 | /* 133 | ** generic hook system for all events, and minilibX functions that 134 | ** can be hooked. Some macro and defines from X11/X.h are needed here. 135 | */ 136 | 137 | int mlx_hook(void *win_ptr, int x_event, int x_mask, 138 | int (*funct)(), void *param); 139 | 140 | int mlx_mouse_hide(); 141 | int mlx_mouse_show(); 142 | int mlx_mouse_move(void *win_ptr, int x, int y); 143 | int mlx_mouse_get_pos(void *win_ptr, int *x, int *y); 144 | 145 | int mlx_do_key_autorepeatoff(void *mlx_ptr); 146 | int mlx_do_key_autorepeaton(void *mlx_ptr); 147 | int mlx_do_sync(void *mlx_ptr); 148 | 149 | #endif /* MLX_H */ 150 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_init_loop.m: -------------------------------------------------------------------------------- 1 | // mlx_init_loop.m 2 | // By Ol 3 | 4 | #import 5 | #import 6 | #import 7 | 8 | #include "mlx_int.h" 9 | #include "mlx_new_window.h" 10 | 11 | #include "font.c" 12 | 13 | 14 | void do_loop_hook2(CFRunLoopTimerRef observer, void * info) 15 | { 16 | ((mlx_ptr_t *)info)->loop_hook(((mlx_ptr_t *)info)->loop_hook_data); 17 | } 18 | 19 | 20 | void do_loop_flush(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void * info) 21 | { 22 | mlx_ptr_t *mlx_ptr; 23 | mlx_win_list_t *win; 24 | 25 | mlx_ptr = (mlx_ptr_t *)info; 26 | win = mlx_ptr->win_list; 27 | while (win) 28 | { 29 | if (win->nb_flush > 0 && win->pixmgt) 30 | { 31 | [(id)win->winid selectGLContext]; 32 | [(id)win->winid mlx_gl_draw]; 33 | glFlush(); 34 | win->nb_flush = 0; 35 | } 36 | win = win->next; 37 | } 38 | } 39 | 40 | 41 | 42 | 43 | void *mlx_init() 44 | { 45 | mlx_ptr_t *new_mlx; 46 | int bidon; 47 | int i; 48 | 49 | if ((new_mlx = malloc(sizeof(*new_mlx))) == NULL) 50 | return ((void *)0); 51 | new_mlx->win_list = NULL; 52 | new_mlx->img_list = NULL; 53 | new_mlx->loop_hook = NULL; 54 | new_mlx->loop_hook_data = NULL; 55 | new_mlx->main_loop_active = 0; 56 | 57 | new_mlx->appid = [NSApplication sharedApplication]; 58 | 59 | // super magic trick to detach app from terminal, get menubar & key input events 60 | for (NSRunningApplication * app in [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.finder"]) 61 | { 62 | [app activateWithOptions:NSApplicationActivateIgnoringOtherApps]; 63 | break; 64 | } 65 | usleep(100000); 66 | ProcessSerialNumber psn = { 0, kCurrentProcess }; 67 | (void) TransformProcessType(&psn, kProcessTransformToForegroundApplication); 68 | usleep(100000); 69 | [[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateIgnoringOtherApps]; 70 | 71 | // load font 72 | new_mlx->font = mlx_new_image(new_mlx, (FONT_WIDTH+2)*95, FONT_HEIGHT); 73 | i = 0; 74 | while (i < 4*(FONT_WIDTH+2)*95*FONT_HEIGHT) 75 | { 76 | new_mlx->font->buffer[i+0] = font_atlas.pixel_data[i+2]; 77 | new_mlx->font->buffer[i+1] = font_atlas.pixel_data[i+1]; 78 | new_mlx->font->buffer[i+2] = font_atlas.pixel_data[i+0]; 79 | ((unsigned char *)new_mlx->font->buffer)[i+3] = 0xFF-font_atlas.pixel_data[i+3]; 80 | i += 4; 81 | } 82 | 83 | 84 | #ifdef STRINGPUTX11 85 | new_mlx->font->vertexes[2] = FONT_WIDTH/1.4; 86 | new_mlx->font->vertexes[4] = FONT_WIDTH/1.4; 87 | new_mlx->font->vertexes[5] = (-FONT_HEIGHT-1)/1.4; 88 | new_mlx->font->vertexes[7] = (-FONT_HEIGHT-1)/1.4; 89 | #else 90 | new_mlx->font->vertexes[2] = FONT_WIDTH; 91 | new_mlx->font->vertexes[4] = FONT_WIDTH; 92 | new_mlx->font->vertexes[5] = -FONT_HEIGHT-1; 93 | new_mlx->font->vertexes[7] = -FONT_HEIGHT-1; 94 | #endif 95 | 96 | return ((void *)new_mlx); 97 | } 98 | 99 | 100 | void mlx_loop(mlx_ptr_t *mlx_ptr) 101 | { 102 | CFRunLoopObserverRef observer; 103 | CFRunLoopObserverContext ocontext = {.version = 0, .info = mlx_ptr, .retain = NULL, .release = NULL, .copyDescription = NULL}; 104 | 105 | mlx_ptr->main_loop_active = 1; 106 | 107 | observer = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeTimers, true, 0, do_loop_flush, &ocontext); 108 | CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes); 109 | 110 | // [[[MlxLoopHookObj alloc] initWithPtr:mlx_ptr] performSelector:@selector(do_loop_hook) withObject:nil afterDelay:0.0]; 111 | 112 | [NSApp run]; 113 | } 114 | 115 | 116 | void mlx_pixel_put(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, int x, int y, int color) 117 | { 118 | if (!win_ptr->pixmgt) 119 | return ; 120 | [(id)(win_ptr->winid) selectGLContext]; 121 | [(id)(win_ptr->winid) pixelPutColor:color X:x Y:y]; 122 | win_ptr->nb_flush ++; 123 | } 124 | 125 | 126 | void mlx_int_loop_once() 127 | { 128 | NSEvent *event; 129 | NSDate *thedate; 130 | 131 | thedate = [NSDate dateWithTimeIntervalSinceNow:0.1]; 132 | while (42) 133 | { 134 | event = [NSApp nextEventMatchingMask:NSEventMaskAny 135 | untilDate:thedate 136 | inMode:NSDefaultRunLoopMode 137 | dequeue:YES]; 138 | if (event == nil) 139 | { 140 | [thedate release]; 141 | return ; 142 | } 143 | [NSApp sendEvent:event]; 144 | [NSApp updateWindows]; 145 | } 146 | } 147 | 148 | 149 | int mlx_do_sync(mlx_ptr_t *mlx_ptr) 150 | { 151 | mlx_win_list_t *win; 152 | 153 | win = mlx_ptr->win_list; 154 | while (win) 155 | { 156 | if (win->pixmgt) 157 | { 158 | [(id)(win->winid) selectGLContext]; 159 | [(id)(win->winid) mlx_gl_draw]; 160 | glFlush(); 161 | if (!mlx_ptr->main_loop_active) 162 | mlx_int_loop_once(); 163 | } 164 | win = win->next; 165 | } 166 | return (0); 167 | } 168 | 169 | 170 | int mlx_loop_hook(mlx_ptr_t *mlx_ptr, void (*fct)(void *), void *param) 171 | { 172 | CFRunLoopTimerContext tcontext = {0, mlx_ptr, NULL, NULL, NULL}; 173 | CFRunLoopTimerRef timer; 174 | 175 | if (mlx_ptr->loop_hook != NULL) 176 | { 177 | CFRunLoopTimerInvalidate(mlx_ptr->loop_timer); 178 | [(id)(mlx_ptr->loop_timer) release]; 179 | } 180 | 181 | mlx_ptr->loop_hook = fct; 182 | mlx_ptr->loop_hook_data = param; 183 | 184 | if (fct) 185 | { 186 | timer = CFRunLoopTimerCreate(kCFAllocatorDefault, 0.0, 0.0001, 0, 0, &do_loop_hook2, &tcontext); 187 | mlx_ptr->loop_timer = timer; 188 | CFRunLoopAddTimer(CFRunLoopGetMain(), timer, kCFRunLoopCommonModes); 189 | } 190 | 191 | return (0); 192 | } 193 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_new_image.m: -------------------------------------------------------------------------------- 1 | // mlx_new_image 2 | // 3 | // by Ol 4 | // 5 | 6 | 7 | #import 8 | #import 9 | 10 | #include "mlx_int.h" 11 | #include "mlx_new_window.h" 12 | 13 | 14 | 15 | void *mlx_new_image(mlx_ptr_t *mlx_ptr, int width, int height) 16 | { 17 | mlx_img_list_t *newimg; 18 | 19 | // if (mlx_ptr->win_list == NULL) 20 | // return (NULL); // need at leat one window created to have openGL context and create texture 21 | if ((newimg = malloc(sizeof(*newimg))) == NULL) 22 | return ((void *)0); 23 | newimg->next = mlx_ptr->img_list; 24 | mlx_ptr->img_list = newimg; 25 | newimg->width = width; 26 | newimg->height = height; 27 | newimg->vertexes[0] = 0.0; newimg->vertexes[1] = 0.0; 28 | newimg->vertexes[2] = width; newimg->vertexes[3] = 0.0; 29 | newimg->vertexes[4] = width; newimg->vertexes[5] = -height; 30 | newimg->vertexes[6] = 0.0; newimg->vertexes[7] = -height; 31 | newimg->buffer = malloc(UNIQ_BPP*width*height); 32 | bzero(newimg->buffer, UNIQ_BPP*width*height); 33 | 34 | return (newimg); 35 | } 36 | 37 | mlx_img_ctx_t *add_img_to_ctx(mlx_img_list_t *img, mlx_win_list_t *win) 38 | { 39 | mlx_img_ctx_t *imgctx; 40 | 41 | imgctx = win->img_list; 42 | while (imgctx) 43 | { 44 | if (imgctx->img == img) 45 | return (imgctx); 46 | imgctx = imgctx->next; 47 | } 48 | 49 | imgctx = malloc(sizeof(*imgctx)); 50 | imgctx->img = img; 51 | imgctx->next = win->img_list; 52 | win->img_list = imgctx; 53 | 54 | glGenTextures(1, &(imgctx->texture)); 55 | glBindTexture(GL_TEXTURE_2D, imgctx->texture); 56 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 57 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 58 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 59 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 60 | glTexImage2D( 61 | GL_TEXTURE_2D, 0, /* target, level of detail */ 62 | GL_RGBA8, /* internal format */ 63 | img->width, img->height, 0, /* width, height, border */ 64 | GL_BGRA, GL_UNSIGNED_BYTE, /* external format, type */ 65 | img->buffer /* pixels */ 66 | ); 67 | 68 | glGenBuffers(1, &(imgctx->vbuffer)); 69 | glBindBuffer(GL_ARRAY_BUFFER, imgctx->vbuffer); 70 | glBufferData(GL_ARRAY_BUFFER, sizeof(img->vertexes), img->vertexes, GL_DYNAMIC_DRAW); // 4 points buff 71 | 72 | return (imgctx); 73 | } 74 | 75 | 76 | void mlx_put_image_to_window(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, mlx_img_list_t *img_ptr, int x, int y) 77 | { 78 | mlx_img_ctx_t *imgctx; 79 | 80 | if (!win_ptr->pixmgt) 81 | return ; 82 | 83 | [(id)(win_ptr->winid) selectGLContext]; 84 | imgctx = add_img_to_ctx(img_ptr, win_ptr); 85 | 86 | // update texture 87 | glBindTexture(GL_TEXTURE_2D, imgctx->texture); 88 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, img_ptr->width, img_ptr->height, 0, 89 | GL_BGRA, GL_UNSIGNED_BYTE, img_ptr->buffer); 90 | 91 | [(id)(win_ptr->winid) mlx_gl_draw_img:img_ptr andCtx:imgctx andX:x andY:y]; 92 | 93 | win_ptr->nb_flush ++; 94 | } 95 | 96 | // assume here 32bpp little endian 97 | 98 | char *mlx_get_data_addr(mlx_img_list_t *img_ptr, int *bits_per_pixel, int *size_line, int *endian) 99 | { 100 | *bits_per_pixel = UNIQ_BPP*8; 101 | *size_line = img_ptr->width*UNIQ_BPP; 102 | *endian = 0; // little endian for now on mac-intel 103 | return (img_ptr->buffer); 104 | } 105 | 106 | unsigned int mlx_get_color_value(mlx_ptr_t *mlx_ptr, int color) 107 | { 108 | return (color); 109 | } 110 | 111 | int mlx_string_put(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, int x, int y, int color, unsigned char *string) 112 | { 113 | mlx_img_ctx_t *imgctx; 114 | int gX; 115 | int gY; 116 | 117 | if (!win_ptr->pixmgt) 118 | return(0); 119 | 120 | #ifdef STRINGPUTX11 121 | y -= (FONT_HEIGHT * 2)/3; 122 | #endif 123 | 124 | [(id)(win_ptr->winid) selectGLContext]; 125 | 126 | imgctx = add_img_to_ctx(mlx_ptr->font, win_ptr); 127 | 128 | while (*string) 129 | { 130 | if (*string >= 32 && *string <= 127) 131 | { 132 | gX = (FONT_WIDTH+2)*(*string-32); 133 | gY = 0; 134 | // printf("put char %c pos %d %d\n", *string, gX, gY); 135 | [(id)(win_ptr->winid) mlx_gl_draw_font:mlx_ptr->font andCtx:imgctx andX:x andY:y andColor:color glyphX:gX glyphY:gY]; 136 | #ifdef STRINGPUTX11 137 | x += FONT_WIDTH/1.4; 138 | #else 139 | x += FONT_WIDTH; 140 | #endif 141 | } 142 | string ++; 143 | } 144 | 145 | win_ptr->nb_flush ++; 146 | 147 | return (0); 148 | } 149 | 150 | int mlx_destroy_image(mlx_ptr_t *mlx_ptr, mlx_img_list_t *img_todel) 151 | { 152 | mlx_img_ctx_t ctx_first; 153 | mlx_img_ctx_t *ctx; 154 | mlx_img_ctx_t *ctx_to_del; 155 | mlx_img_list_t img_first; 156 | mlx_img_list_t *img; 157 | mlx_win_list_t *win; 158 | 159 | img_first.next = mlx_ptr->img_list; 160 | img = &img_first; 161 | while (img && img->next) 162 | { 163 | if (img->next == img_todel) 164 | img->next = img->next->next; 165 | img = img->next; 166 | } 167 | mlx_ptr->img_list = img_first.next; 168 | 169 | 170 | win = mlx_ptr->win_list; 171 | while (win) 172 | { 173 | ctx_first.next = win->img_list; 174 | ctx = &ctx_first; 175 | while (ctx && ctx->next) 176 | { 177 | if (ctx->next->img == img_todel) 178 | { 179 | [(id)(win->winid) selectGLContext]; 180 | glDeleteBuffers(1, &(ctx->next->vbuffer)); 181 | glDeleteTextures(1, &(ctx->next->texture)); 182 | ctx_to_del = ctx->next; 183 | ctx->next = ctx->next->next; 184 | free(ctx_to_del); 185 | } 186 | ctx = ctx->next; 187 | } 188 | win->img_list = ctx_first.next; 189 | win = win->next; 190 | } 191 | 192 | 193 | free(img_todel->buffer); 194 | free(img_todel); 195 | 196 | // printf("destroy image done.\n"); 197 | return (0); 198 | } 199 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_shaders.c: -------------------------------------------------------------------------------- 1 | // mlx_shaders.c 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "mlx_int.h" 8 | 9 | 10 | void display_log(GLuint object, void (*param_func)(), void (*getlog_func)()) 11 | { 12 | GLint log_length; 13 | char *log; 14 | 15 | param_func(object, GL_INFO_LOG_LENGTH, &log_length); 16 | log = malloc(log_length); 17 | getlog_func(object, log_length, NULL, log); 18 | fprintf(stderr, "%s", log); 19 | free(log); 20 | } 21 | 22 | 23 | int mlx_shaders_pixel(glsl_info_t *glsl) 24 | { 25 | char *source; 26 | int length; 27 | GLint action_ok; 28 | 29 | glsl->pixel_vshader = glCreateShader(GL_VERTEX_SHADER); 30 | source = strdup("#version 110 \n" 31 | "attribute vec2 position;" 32 | "varying vec2 texcoord;" 33 | "void main()" 34 | "{" 35 | " gl_Position = vec4( position, 0.0, 1.0);" 36 | " texcoord = vec2(position[0]+1.0, 1.0 - position[1]) / 2.0;" 37 | "}"); 38 | length = strlen(source); 39 | glShaderSource(glsl->pixel_vshader, 1, (const GLchar**)&source, &length); 40 | glCompileShader(glsl->pixel_vshader); 41 | free(source); 42 | 43 | glGetShaderiv(glsl->pixel_vshader, GL_COMPILE_STATUS, &action_ok); 44 | if (!action_ok) { 45 | fprintf(stderr, "Failed to compile pixel vshader :\n"); 46 | display_log(glsl->pixel_vshader, glGetShaderiv, glGetShaderInfoLog); 47 | return (1); 48 | } 49 | 50 | glsl->pixel_fshader = glCreateShader(GL_FRAGMENT_SHADER); 51 | source = strdup("#version 110 \n" 52 | "uniform sampler2D texture;" 53 | "varying vec2 texcoord;" 54 | "void main()" 55 | "{" 56 | " gl_FragColor = texture2D(texture, texcoord);" 57 | "}"); 58 | length = strlen(source); 59 | glShaderSource(glsl->pixel_fshader, 1, (const GLchar**)&source, &length); 60 | glCompileShader(glsl->pixel_fshader); 61 | free(source); 62 | 63 | glGetShaderiv(glsl->pixel_fshader, GL_COMPILE_STATUS, &action_ok); 64 | if (!action_ok) { 65 | fprintf(stderr, "Failed to compile pixel fshader :\n"); 66 | display_log(glsl->pixel_fshader, glGetShaderiv, glGetShaderInfoLog); 67 | return (1); 68 | } 69 | 70 | glsl->pixel_program = glCreateProgram(); 71 | glAttachShader(glsl->pixel_program, glsl->pixel_vshader); 72 | glAttachShader(glsl->pixel_program, glsl->pixel_fshader); 73 | glLinkProgram(glsl->pixel_program); 74 | 75 | glGetProgramiv(glsl->pixel_program, GL_LINK_STATUS, &action_ok); 76 | if (!action_ok) { 77 | fprintf(stderr, "Failed to link pixel shader program:\n"); 78 | display_log(glsl->pixel_program, glGetProgramiv, glGetProgramInfoLog); 79 | return (1); 80 | } 81 | 82 | glFlush(); 83 | 84 | return (0); 85 | } 86 | 87 | 88 | int mlx_shaders_image(glsl_info_t *glsl) 89 | { 90 | char *source; 91 | int length; 92 | GLint action_ok; 93 | 94 | glsl->image_vshader = glCreateShader(GL_VERTEX_SHADER); 95 | source = strdup("#version 110 \n" 96 | "attribute vec2 position;" 97 | "uniform vec2 winhalfsize;" 98 | "uniform vec2 imagepos;" 99 | "uniform vec2 imagesize;" 100 | "varying vec2 texcoord;" 101 | "void main()" 102 | "{" 103 | " texcoord = position / imagesize;" 104 | " vec2 pos = position - winhalfsize + imagepos;" 105 | " pos = pos / winhalfsize;" 106 | " gl_Position = vec4( pos, 0.0, 1.0);" 107 | "}"); 108 | length = strlen(source); 109 | glShaderSource(glsl->image_vshader, 1, (const GLchar**)&source, &length); 110 | glCompileShader(glsl->image_vshader); 111 | free(source); 112 | 113 | glGetShaderiv(glsl->image_vshader, GL_COMPILE_STATUS, &action_ok); 114 | if (!action_ok) { 115 | fprintf(stderr, "Failed to compile image vshader :\n"); 116 | display_log(glsl->image_vshader, glGetShaderiv, glGetShaderInfoLog); 117 | return (1); 118 | } 119 | 120 | glsl->image_fshader = glCreateShader(GL_FRAGMENT_SHADER); 121 | source = strdup("#version 110 \n" 122 | "uniform sampler2D texture;" 123 | "varying vec2 texcoord;" 124 | "void main()" 125 | "{" 126 | " gl_FragColor = texture2D(texture, texcoord);" 127 | "}"); 128 | length = strlen(source); 129 | glShaderSource(glsl->image_fshader, 1, (const GLchar**)&source, &length); 130 | glCompileShader(glsl->image_fshader); 131 | free(source); 132 | 133 | glGetShaderiv(glsl->image_fshader, GL_COMPILE_STATUS, &action_ok); 134 | if (!action_ok) { 135 | fprintf(stderr, "Failed to compile image fshader :\n"); 136 | display_log(glsl->image_fshader, glGetShaderiv, glGetShaderInfoLog); 137 | return (1); 138 | } 139 | 140 | glsl->image_program = glCreateProgram(); 141 | glAttachShader(glsl->image_program, glsl->image_vshader); 142 | glAttachShader(glsl->image_program, glsl->image_fshader); 143 | glLinkProgram(glsl->image_program); 144 | 145 | glGetProgramiv(glsl->image_program, GL_LINK_STATUS, &action_ok); 146 | if (!action_ok) { 147 | fprintf(stderr, "Failed to link image shader program:\n"); 148 | display_log(glsl->image_program, glGetProgramiv, glGetProgramInfoLog); 149 | return (1); 150 | } 151 | 152 | glFlush(); 153 | 154 | return (0); 155 | } 156 | 157 | 158 | 159 | 160 | int mlx_shaders_font(glsl_info_t *glsl) 161 | { 162 | char *source; 163 | int length; 164 | GLint action_ok; 165 | 166 | glsl->font_vshader = glCreateShader(GL_VERTEX_SHADER); 167 | source = strdup("#version 110 \n" 168 | "attribute vec2 position;" 169 | "uniform vec2 winhalfsize;" 170 | "uniform vec2 fontposinwin;" 171 | "uniform vec2 fontposinatlas;" 172 | "uniform vec2 fontatlassize;" 173 | "varying vec2 texcoord;" 174 | "void main()" 175 | "{" 176 | #ifdef STRINGPUTX11 177 | " texcoord = (position * vec2(1.4, -1.4) + fontposinatlas ) / fontatlassize;" 178 | #else 179 | " texcoord = (position * vec2(1.0, -1.0) + fontposinatlas ) / fontatlassize;" 180 | #endif 181 | " vec2 pos = position - winhalfsize + fontposinwin;" 182 | " pos = pos / winhalfsize;" 183 | " gl_Position = vec4( pos, 0.0, 1.0);" 184 | "}"); 185 | length = strlen(source); 186 | glShaderSource(glsl->font_vshader, 1, (const GLchar**)&source, &length); 187 | glCompileShader(glsl->font_vshader); 188 | free(source); 189 | 190 | glGetShaderiv(glsl->font_vshader, GL_COMPILE_STATUS, &action_ok); 191 | if (!action_ok) { 192 | fprintf(stderr, "Failed to compile font vshader :\n"); 193 | display_log(glsl->font_vshader, glGetShaderiv, glGetShaderInfoLog); 194 | return (1); 195 | } 196 | 197 | glsl->font_fshader = glCreateShader(GL_FRAGMENT_SHADER); 198 | source = strdup("#version 110 \n" 199 | "uniform sampler2D texture;" 200 | "uniform vec4 color;" 201 | "varying vec2 texcoord;" 202 | "void main()" 203 | "{" 204 | " gl_FragColor = color * texture2D(texture, texcoord);" 205 | "}"); 206 | length = strlen(source); 207 | glShaderSource(glsl->font_fshader, 1, (const GLchar**)&source, &length); 208 | glCompileShader(glsl->font_fshader); 209 | free(source); 210 | 211 | glGetShaderiv(glsl->font_fshader, GL_COMPILE_STATUS, &action_ok); 212 | if (!action_ok) { 213 | fprintf(stderr, "Failed to compile font fshader :\n"); 214 | display_log(glsl->font_fshader, glGetShaderiv, glGetShaderInfoLog); 215 | return (1); 216 | } 217 | 218 | glsl->font_program = glCreateProgram(); 219 | glAttachShader(glsl->font_program, glsl->font_vshader); 220 | glAttachShader(glsl->font_program, glsl->font_fshader); 221 | glLinkProgram(glsl->font_program); 222 | 223 | glGetProgramiv(glsl->font_program, GL_LINK_STATUS, &action_ok); 224 | if (!action_ok) { 225 | fprintf(stderr, "Failed to link font shader program:\n"); 226 | display_log(glsl->font_program, glGetProgramiv, glGetProgramInfoLog); 227 | return (1); 228 | } 229 | 230 | glFlush(); 231 | 232 | return (0); 233 | } 234 | 235 | 236 | 237 | int mlx_shaders(glsl_info_t *glsl) 238 | { 239 | return (mlx_shaders_pixel(glsl) + mlx_shaders_image(glsl) + mlx_shaders_font(glsl)); 240 | } 241 | -------------------------------------------------------------------------------- /so_long/mlx/mlx_xpm.c: -------------------------------------------------------------------------------- 1 | // mlx xpm 2 | // by ol 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include "mlx_int.h" 12 | 13 | typedef struct s_xpm_col 14 | { 15 | int name; 16 | int col; 17 | } t_xpm_col; 18 | 19 | 20 | struct s_col_name 21 | { 22 | char *name; 23 | int color; 24 | }; 25 | 26 | //extern struct s_col_name mlx_col_name[]; 27 | #include "mlx_rgb.c" 28 | 29 | 30 | #define RETURN { if (colors) free(colors); if (tab) free(tab); \ 31 | if (colors_direct) free(colors_direct); \ 32 | if (img) mlx_destroy_image(xvar, img); \ 33 | return ((void *)0); } 34 | 35 | 36 | 37 | 38 | char *mlx_int_get_line(char *ptr,int *pos,int size) 39 | { 40 | int pos2; 41 | int pos3; 42 | int pos4; 43 | 44 | if ((pos2 = mlx_int_str_str(ptr+*pos,"\"",size-*pos))==-1) 45 | return ((char *)0); 46 | if ((pos3 = mlx_int_str_str(ptr+*pos+pos2+1,"\"",size-*pos-pos2-1))==-1) 47 | return ((char *)0); 48 | *(ptr+*pos+pos2) = 0; 49 | *(ptr+*pos+pos2+1+pos3) = 0; 50 | pos4 = *pos+pos2+1; 51 | *pos += pos2+pos3+2; 52 | return (ptr+pos4); 53 | } 54 | 55 | 56 | 57 | char *mlx_int_static_line(char **xpm_data,int *pos,int size) 58 | { 59 | static char *copy = 0; 60 | static int len = 0; 61 | int len2; 62 | char *str; 63 | 64 | str = xpm_data[(*pos)++]; 65 | if ((len2 = strlen(str))>len) 66 | { 67 | if (copy) 68 | free(copy); 69 | if (!(copy = malloc(len2+1))) 70 | return ((char *)0); 71 | len = len2; 72 | } 73 | /* strcpy(copy,str); */ 74 | strlcpy(copy, str, len2+1); 75 | return (copy); 76 | } 77 | 78 | 79 | int mlx_int_get_col_name(char *str,int size) 80 | { 81 | int result; 82 | 83 | result = 0; 84 | while (size--) 85 | result = (result<<8)+*(str++); 86 | return (result); 87 | } 88 | 89 | int mlx_int_get_text_rgb(char *name, char *end) 90 | { 91 | int i; 92 | char buff[64]; 93 | 94 | if (*name == '#') 95 | return (strtol(name+1,0,16)); 96 | if (end) 97 | { 98 | snprintf(buff, 64, "%s %s", name, end); 99 | name = buff; 100 | } 101 | i = 0; 102 | while (mlx_col_name[i].name) 103 | { 104 | if (!strcasecmp(mlx_col_name[i].name, name)) 105 | return (mlx_col_name[i].color); 106 | i ++; 107 | } 108 | return (0); 109 | } 110 | 111 | 112 | void mlx_int_xpm_set_pixel(mlx_img_list_t *img, char *data, int opp, int col, int x) 113 | { 114 | /* 115 | int dec; 116 | 117 | dec = opp; 118 | while (dec--) 119 | { 120 | if (img->image->byte_order) 121 | *(data+x*opp+dec) = col&0xFF; 122 | else 123 | *(data+x*opp+opp-dec-1) = col&0xFF; 124 | col >>= 8; 125 | } 126 | */ 127 | // opp is 4, do it the simple way 128 | *((unsigned int *)(data+4*x)) = col; 129 | } 130 | 131 | 132 | void *mlx_int_parse_xpm(mlx_ptr_t *xvar,void *info,int info_size,char *(*f)()) 133 | { 134 | int pos; 135 | char *line; 136 | char **tab; 137 | char *data; 138 | char *clip_data; 139 | int nc; 140 | int opp; 141 | int cpp; 142 | int col; 143 | int rgb_col; 144 | int col_name; 145 | int method; 146 | int x; 147 | int i; 148 | int j; 149 | mlx_img_list_t *img; 150 | t_xpm_col *colors; 151 | int *colors_direct; 152 | int width; 153 | int height; 154 | 155 | colors = 0; 156 | colors_direct = 0; 157 | img = 0; 158 | tab = 0; 159 | pos = 0; 160 | if (!(line = f(info,&pos,info_size)) || 161 | !(tab = mlx_int_str_to_wordtab(line)) || !(width = atoi(tab[0])) || 162 | !(height = atoi(tab[1])) || !(nc = atoi(tab[2])) || 163 | !(cpp = atoi(tab[3])) ) 164 | RETURN; 165 | free(tab); 166 | tab = 0; 167 | 168 | method = 0; 169 | if (cpp<=2) 170 | { 171 | method = 1; 172 | if (!(colors_direct = malloc((cpp==2?65536:256)*sizeof(int)))) 173 | RETURN; 174 | } 175 | else 176 | if (!(colors = malloc(nc*sizeof(*colors)))) 177 | RETURN; 178 | 179 | clip_data = 0; 180 | 181 | i = nc; 182 | while (i--) 183 | { 184 | if (!(line = f(info,&pos,info_size)) || 185 | !(tab = mlx_int_str_to_wordtab(line+cpp)) ) 186 | RETURN; 187 | j = 0; 188 | while (tab[j] && strcmp(tab[j++],"c")); 189 | 190 | if (!tab[j]) 191 | RETURN; 192 | 193 | rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]); 194 | /* 195 | if ((rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]))==-1) 196 | { 197 | if (!(clip_data = malloc(4*width*height)) || // ok, nice size .. 198 | !(clip_img = XCreateImage(xvar->display, xvar->visual, 199 | 1, XYPixmap, 0, clip_data, 200 | width, height, 8, (width+7)/8)) ) 201 | RETURN; 202 | memset(clip_data, 0xFF, 4*width*height); 203 | } 204 | */ 205 | if (method) 206 | colors_direct[mlx_int_get_col_name(line,cpp)] = rgb_col; 207 | // rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col; 208 | else 209 | { 210 | colors[i].name = mlx_int_get_col_name(line,cpp); 211 | colors[i].col = rgb_col; // rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col; 212 | } 213 | free(tab); 214 | tab = 0; 215 | } 216 | 217 | if (!(img = mlx_new_image(xvar,width,height))) 218 | RETURN; 219 | //opp = img->bpp/8; 220 | opp = 4; 221 | 222 | 223 | i = height; 224 | data = img->buffer; 225 | while (i--) 226 | { 227 | if (!(line = f(info,&pos,info_size))) 228 | RETURN; 229 | x = 0; 230 | while (xsize_line; 255 | data += img->width*4; 256 | } 257 | /* 258 | if (clip_data) 259 | { 260 | if (!(clip_pix = XCreatePixmap(xvar->display, xvar->root, 261 | width, height, 1)) ) 262 | RETURN; 263 | img->gc = XCreateGC(xvar->display, clip_pix, 0, &xgcv); 264 | XPutImage(xvar->display, clip_pix, img->gc, clip_img, 265 | 0, 0, 0, 0, width, height); 266 | XFreeGC(xvar->display, img->gc); 267 | xgcv.clip_mask = clip_pix; 268 | xgcv.function = GXcopy; 269 | xgcv.plane_mask = AllPlanes; 270 | img->gc = XCreateGC(xvar->display, xvar->root, GCClipMask|GCFunction| 271 | GCPlaneMask, &xgcv); 272 | XSync(xvar->display, False); 273 | XDestroyImage(clip_img); 274 | } 275 | */ 276 | if (colors) 277 | free(colors); 278 | if (colors_direct) 279 | free(colors_direct); 280 | return (img); 281 | } 282 | 283 | 284 | void mlx_int_file_get_rid_comment(char *ptr, int size) 285 | { 286 | int com_begin; 287 | int com_end; 288 | 289 | while ((com_begin = mlx_int_str_str_cote(ptr,"/*",size))!=-1) 290 | { 291 | com_end = mlx_int_str_str(ptr+com_begin+2,"*/",size-com_begin-2); 292 | memset(ptr+com_begin,' ',com_end+4); 293 | } 294 | while ((com_begin = mlx_int_str_str_cote(ptr,"//",size))!=-1) 295 | { 296 | com_end = mlx_int_str_str(ptr+com_begin+2,"\n",size-com_begin-2); 297 | memset(ptr+com_begin,' ',com_end+3); 298 | } 299 | } 300 | 301 | 302 | void *mlx_xpm_file_to_image(mlx_ptr_t *xvar,char *file,int *width,int *height) 303 | { 304 | int fd; 305 | int size; 306 | char *ptr; 307 | mlx_img_list_t *img; 308 | 309 | if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 || 310 | (ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))== 311 | (void *)MAP_FAILED) 312 | { 313 | if (fd>=0) 314 | close(fd); 315 | return ((void *)0); 316 | } 317 | mlx_int_file_get_rid_comment(ptr, size); 318 | if ((img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line))) 319 | { 320 | *width = img->width; 321 | *height = img->height; 322 | } 323 | munmap(ptr,size); 324 | close(fd); 325 | return (img); 326 | } 327 | 328 | void *mlx_xpm_to_image(mlx_ptr_t *xvar,char **xpm_data,int *width,int *height) 329 | { 330 | mlx_img_list_t *img; 331 | 332 | if ((img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line))) 333 | { 334 | *width = img->width; 335 | *height = img->height; 336 | } 337 | return (img); 338 | } 339 | -------------------------------------------------------------------------------- /so_long/img/enemy.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 177 2 ", 5 | " c black", 6 | ". c #0F0804", 7 | "X c #120904", 8 | "o c #1B0F06", 9 | "O c #0A0E11", 10 | "+ c #25130B", 11 | "@ c #2B170C", 12 | "# c #2E1A0E", 13 | "$ c #241405", 14 | "% c #351E08", 15 | "& c #341B10", 16 | "* c #3D1F12", 17 | "= c #2A220F", 18 | "- c #21231B", 19 | "; c #2F2B1D", 20 | ": c #3A2615", 21 | "> c #3E3316", 22 | ", c #131D22", 23 | "< c #1D2B34", 24 | "1 c #313528", 25 | "2 c #59320D", 26 | "3 c #462616", 27 | "4 c #522A18", 28 | "5 c #502B11", 29 | "6 c #5A301C", 30 | "7 c #633612", 31 | "8 c #6C3B15", 32 | "9 c #603F19", 33 | "0 c #6C3A18", 34 | "q c #68351E", 35 | "w c #733D1C", 36 | "e c #4B3B21", 37 | "r c #5A3D32", 38 | "t c #6B3620", 39 | "y c #6E3820", 40 | "u c #763D23", 41 | "i c #754219", 42 | "p c #7E431D", 43 | "a c #754C1B", 44 | "s c #7D561F", 45 | "d c #5D4620", 46 | "f c #414635", 47 | "g c #4F4832", 48 | "h c #504A36", 49 | "j c #684B25", 50 | "k c #67442C", 51 | "l c #7B4022", 52 | "z c #744D27", 53 | "x c #674538", 54 | "c c #6F5831", 55 | "v c #7A593A", 56 | "b c #7B642C", 57 | "n c #77643D", 58 | "m c #243641", 59 | "M c #304756", 60 | "N c #334B58", 61 | "B c #39515C", 62 | "V c #3C5A64", 63 | "C c #3F6068", 64 | "Z c #41464D", 65 | "A c #524644", 66 | "S c #595B44", 67 | "D c #5A5B57", 68 | "F c #745E4C", 69 | "G c #5F664D", 70 | "H c #7F734B", 71 | "J c #626950", 72 | "K c #6F775B", 73 | "L c #687055", 74 | "P c #7A6942", 75 | "I c #406169", 76 | "U c #5E716A", 77 | "Y c #4D7779", 78 | "T c #527F7F", 79 | "R c #567471", 80 | "E c #596C67", 81 | "W c #626261", 82 | "Q c #717569", 83 | "! c #647972", 84 | "~ c #777573", 85 | "^ c #844423", 86 | "/ c #8C4B23", 87 | "( c #854428", 88 | ") c #894629", 89 | "_ c #8E4A2B", 90 | "` c #934C2B", 91 | "' c #944D27", 92 | "] c #855328", 93 | "[ c #925125", 94 | "{ c #9B522C", 95 | "} c #94582F", 96 | "| c #865334", 97 | " . c #985939", 98 | ".. c #A4552D", 99 | "X. c #A45530", 100 | "o. c #A25934", 101 | "O. c #AD5A32", 102 | "+. c #B85E35", 103 | "@. c #B25C33", 104 | "#. c #856437", 105 | "$. c #9D6234", 106 | "%. c #8D7332", 107 | "&. c #896225", 108 | "*. c #A66133", 109 | "=. c #BC6837", 110 | "-. c #BB663A", 111 | ";. c #BA6537", 112 | ":. c #C2663A", 113 | ">. c #C6693B", 114 | ",. c #CA6B3D", 115 | "<. c #CB703D", 116 | "1. c #875641", 117 | "2. c #92664E", 118 | "3. c #84724A", 119 | "4. c #8F6B53", 120 | "5. c #857D55", 121 | "6. c #A86948", 122 | "7. c #AB7F5E", 123 | "8. c #A07155", 124 | "9. c #BE765B", 125 | "0. c #B36B4B", 126 | "q. c #847465", 127 | "w. c #CF7241", 128 | "e. c #C3734A", 129 | "r. c #D37443", 130 | "t. c #D97743", 131 | "y. c #DD7944", 132 | "u. c #DB7C49", 133 | "i. c #CE7F51", 134 | "p. c #E27C47", 135 | "a. c #E67F48", 136 | "s. c #758572", 137 | "d. c #7A8A74", 138 | "f. c #4DAD7F", 139 | "g. c #7EA67E", 140 | "h. c #B8913D", 141 | "j. c #8A855D", 142 | "k. c #809271", 143 | "l. c #869E77", 144 | "z. c #8A936B", 145 | "x. c #AA8675", 146 | "c. c #C69E44", 147 | "v. c #E58656", 148 | "b. c #CDA147", 149 | "n. c #D0A949", 150 | "m. c #D5B154", 151 | "M. c #D8B559", 152 | "N. c #DAB95E", 153 | "B. c #CD8162", 154 | "V. c #DB8A64", 155 | "C. c #E48C60", 156 | "Z. c #E3916B", 157 | "A. c #DEBE65", 158 | "S. c #E0C169", 159 | "D. c #EAD17E", 160 | "F. c #E6CB76", 161 | "G. c #42AE80", 162 | "H. c #55B78E", 163 | "J. c #61BA95", 164 | "K. c #6BBE9B", 165 | "L. c #74BD9C", 166 | "P. c #7BBA98", 167 | "I. c #60B48C", 168 | "U. c #6FC0A0", 169 | "Y. c #72C1A2", 170 | "T. c #78C3A6", 171 | "R. c #8F8C8A", 172 | "E. c #B08E82", 173 | "W. c #85A984", 174 | "Q. c #A0A0A0", 175 | "!. c #E19F86", 176 | "~. c #8CC9B2", 177 | "^. c #8FC2A7", 178 | "/. c #B0BED2", 179 | "(. c #CABEC8", 180 | "). c #DCBEC1", 181 | "_. c #D7CDE3", 182 | /* pixels */ 183 | "U.U.U.U.U.U.U.Y.T.T.Y.U.U.U.U.U.U.U.U.U.U.Y.T.T.Y.U.U.U.U.U.U.U.U.U.U.U.U.U.T.T.Y.U.U.U.K.K.K.U.U.U.", 184 | "U.U.U.U.U.U.U.T.~.~.T.U.U.U.U.U.U.U.U.U.U.T.~.~.T.U.U.U.U.U.U.U.U.U.U.U.U.T.~.~.T.U.U.K.H.H.K.K.U.U.", 185 | "U.U.U.U.U.U.U.T.~.~.T.U.U.U.U.K.J.J.K.U.U.T.~.~.T.U.U.U.U.U.U.U.U.U.U.U.U.T.~.~.T.U.U.K.H.H.K.K.J.J.", 186 | "U.U.U.U.U.U.U.Y.T.T.Y.U.U.U.U.J.G.G.J.U.U.Y.T.T.Y.U.U.U.U.U.U.U.U.U.U.U.U.Y.T.T.U.U.U.K.K.K.K.J.G.G.", 187 | "U.U.U.U.U.U.U.U.U.U.U.U.U.U.Y.J.G.G.j.z.K.J.K.U.U.U.U.U.U.U.z.j.L.U.U.U.U.U.U.U.U.U.U.U.U.U.U.J.G.G.", 188 | "U.U.U.U.U.U.U.U.U.U.U.U.U.U.L.K.J.W.9 c H.H.K.U.U.U.U.U.U.U.c 9 W.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.J.J.", 189 | "Y.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.3.#.*.$.n l.J.U.U.U.U.Y.l.n $.*.#.H U.U.U.U.U.U.U.U.U.Y.T.T.Y.U.U.U.", 190 | "T.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.j i t.-.2 5.U.U.U.U.U.T.5.2 =.t.i j U.U.U.U.U.U.U.U.U.T.~.~.T.U.U.U.", 191 | "T.Y.T.T.Y.U.U.U.U.U.U.U.U.U.U.Y.; : r.=.2 5.J.J.K.U.U.T.5.2 =.r.: ; L.U.U.U.U.U.U.U.U.T.~.~.T.Y.T.T.", 192 | "Y.T.~.~.T.U.U.U.U.U.U.U.U.U.U.T.- # <.=.2 5.G.G.J.U.U.Y.5.2 =.w.# - T.U.U.U.U.U.U.U.U.Y.T.T.Y.T.~.~.", 193 | "U.T.~.~.T.U.U.U.U.U.U.U.U.U.U.T.- % w.-.2 w ) ( ) ( ( ) w 2 =.w.# - T.U.U.U.U.U.U.U.U.U.U.U.U.T.~.~.", 194 | "U.Y.T.T.Y.U.U.U.U.U.U.U.U.U.U.Y.- # w.>.i l l ` { ` ` l l i >.w.# - Y.U.U.U.U.U.U.U.U.U.U.U.U.Y.T.T.", 195 | "U.U.U.U.U.U.U.U.U.K.K.J.K.Y.U.U.- # w.a.a.[ 2 <.a.a.,.2 [ p.v.<.# - Y.U.U.U.U.U.K.K.K.U.U.U.U.U.U.U.", 196 | "U.U.U.U.U.U.U.U.U.K.H.H.K.U.U.U.- @ -.t.a.{ 0 <.a.a.<.8 { v.<.:.@ - U.U.U.U.U.J.H.H.K.U.U.U.U.U.U.U.", 197 | "U.U.U.U.U.U.U.U.U.K.H.H.K.K.U.U.- + X.>.a.O.( t.a.a.t.) @.a.,...+ - U.U.U.U.K.K.H.H.K.U.U.U.U.U.U.U.", 198 | "U.U.U.U.U.U.U.U.U.K.P.n n n l.Y.e 5 O.>.a.-...t.a.a.<...:.a.>.O.5 e U.l.n n n P.K.K.K.U.U.U.U.U.U.U.", 199 | "U.U.U.U.U.U.U.Y.T.T.W.2 2 2 5.U.j 0 O.>.a.w.@.t.a.a.y.+.w.a.>.@.0 j U.5.2 2 2 W.Y.U.U.U.U.U.U.U.U.U.", 200 | "K.U.U.U.U.U.U.P j j z ..^ 2 5.U.j 7 ) O.a.p.t.a.a.a.a.y.y.p.O.) 7 j U.5.2 ^ ..z j j P U.U.U.U.U.U.U.", 201 | "K.K.J.J.K.U.U.c 2 2 8 +.' 2 5.U.j 7 l X.a.a.a.a.a.a.a.a.a.a.X.l 7 j K.5.2 ' +.8 2 2 c U.U.U.U.U.U.U.", 202 | "K.J.G.G.J.5.2 { @.) _ +.' 2 $ t { y.a.a.a.a.a.a.a.a.a.a.a.a.y.{ y $ 2 ' +._ ) @.{ 2 5.U.U.U.U.U.", 203 | "U.J.G.G.g.3.0 } 6.F z O./ 2 $ u .V.Z.a.a.a.a.a.a.a.a.a.a.C.V. .u + 2 / O.| | 2. .8 3.W.L.U.U.U.", 204 | "U.K.I.P.2 p +.Q Y s.R ( w 2 $ ` e._.).a.a.a.a.a.a.a.a.a.a.)._.e.` + 2 y ( U T T Q +.^ 2 W.K.U.U.", 205 | "Y.U.5.3.^ | 4.! T T R r k 0 @ o.i._.(.7.i.a.a.a.a.a.a.i.7.(._.B. . # q y x R T T ! 4.] p 3.j.U.U.", 206 | "T.P.7 8 +.4.T T T T Y N A ( & 0.Z._./.T 7.a.a.a.a.a.a.7.T /._.Z.-. & ( A M Y T T T T 4.+.8 9 L.U.", 207 | "T.P.9 8 +.4.s.Y T I V M A ( & 0.a.!.E.V 2.w.p.a.a.p.w.2.I E.!.v.;. & ( A M V I T T Y 2.+.8 7 W.T.", 208 | "T.P.d 8 +.2.Y G.Y N M M A ( & -.a.a.0.m 1.@.y.a.a.y.+.1.m 0.a.v.-. % ( A M M N Y T Y 4.;.8 d ~.~.", 209 | "v z { o.) F Y C B M M M M Z r t y / y.u.i.i.y.a.a.a.a.y.r.e.u.u./ w t r Z M M M N B V G.F ' ..{ c v ", 210 | "j 2 O.O.( F T V M M M M M M x ( 7 i t.a.a.p.a.a.a.a.a.a.a.a.a.t.w 7 ( x M M M M B m V T F ( O.O.7 j ", 211 | "j 7 @.o.M M M M M M M M M M M M O + X.e.a.a.a.a.a.a.a.a.a.a.:.X.+ O M M M M M M N N N M M M .@.2 j ", 212 | "j 2 / | R U U U E N M M M M m < 3 4 q ` a.t.r.p.a.a.p.r.u.a.` t 4 3 < m N M M M N W U R U U | / 7 j ", 213 | "j 2 2 k U.U.Y.Y.L.B M M M M , ` ` X 3 a.w.+.p.a.a.y.+.w.a.3 X ' ` , M M N M N I.L.Y.U.U.j 2 2 j ", 214 | "j.5.5.q.U.U.Y.Y.U.d.s.s.s.s.g % +.>.u u _ 8.7.e.>.w.e.x.8.` u u 0.+.% f s.s.d.~ s.K.L.U.U.U.j.5.j.j.", 215 | "Y.U.U.U.U.U.U.Y.T.T.Y.U.U.U.n 2 ,.y.;.{ 2 5.Q.0.+.+.0.Q.q.2 { ;.y.<.2 n U.Y.T.T.Y.U.U.U.K.K.K.U.U.U.", 216 | "Y.U.U.U.U.U.U.T.~.~.T.U.K - | ,.>.O.w ] h.#.k % + + : k #.h.] i @.:.,.] - K ~.~.T.U.K.K.H.H.K.U.U.U.", 217 | "U.U.U.U.U.U.U.T.~.~.T.Y.J ) v.:...7 s n.&.2 X X 2 &.n.s 2 ..:.v./ J ~.~.T.U.U.K.H.H.J.K.J.J.", 218 | "U.U.U.U.U.U.U.Y.T.T.k. 0 +.8 a c.M.D.M.n.n.n.n.n.b.N.D.M.c.i 8 +.0 J T.T.Y.U.U.U.K.K.U.J.G.G.", 219 | "U.U.U.U.U.U.U.U.K.Y.k. X + w ..w a c.M.D.A.m.m.m.m.m.m.A.D.M.c.a w ..w + S k.L.U.U.U.U.U.U.U.J.G.G.", 220 | "U.U.U.U.U.U.U.U.Y.Y.k. 3 +.^ 2 l } c.M.D.D.D.D.D.D.D.D.D.D.M.b.} p 2 ^ +.3 k.U.U.U.U.U.U.U.K.J.J.", 221 | "Y.U.U.U.U.U.U.U.U.U.k. * ../ p ` *.c.m.A.F.D.D.D.D.D.D.F.S.m.b.*.' p ' +.3 k.U.U.U.Y.T.T.Y.U.U.U.", 222 | "T.U.U.U.U.U.U.U.U.U.k. & ( ..+.;.=.b.n.n.S.D.D.D.D.D.D.S.n.n.b.=.;.+.+.+.5 k.U.U.U.T.~.~.T.U.U.U.", 223 | "T.Y.T.T.Y.U.U.U.U.U.P.J h & ( +.+.o.d b n.m.A.N.N.N.N.N.m.n.b d X.+.+.O.' * k.U.U.U.T.~.~.T.Y.T.T.", 224 | "Y.T.~.~.T.U.U.U.U.U.U.U.J q +.;.` X > n.n.n.n.n.n.n.n.n.n.3 X ` +.+.X.( : d.U.U.U.Y.T.T.Y.T.~.~.", 225 | "U.T.~.~.T.U.U.U.U.U.U.U.J 6 ` _ ( y 6 = %.n.n.n.n.n.n.%.= 6 q ) _ ` 6 o S k.L.U.U.U.U.U.U.U.T.~.~.", 226 | "U.Y.T.T.Y.U.U.U.U.U.U.U.J 4 ( ( ( ( 6 b n.n.n.n.n.n.b 6 ^ ( ( ( 4 J U.U.U.U.U.U.U.U.U.Y.T.T.", 227 | "U.U.U.U.U.U.U.U.Y.K.J.K.K.U.f o 2 2 2 2 2 2 2 2 % ~ Q.1.1.Q.W J U.K.K.K.K.U.U.U.U.U.U.U.", 228 | "U.U.U.U.U.U.U.U.U.K.H.H.K.U.S - - - - > j j j j j j j j e - W ~ x z R.D - K U.K.H.H.K.U.U.U.U.U.U.U.", 229 | "U.U.U.U.U.U.U.U.U.K.H.H.K.U.U.U.U.U.U.U.K.U.U.K.H.H.K.U.U.U.1 f U.U.U.K.H.H.K.Y.U.U.U.U.U.U.", 230 | "U.U.U.U.U.U.U.U.U.K.K.K.K.U.U.U.U.U.U.U.U.U.U.K.K.K.U.U.U.U.G f f f f L U.U.U.U.K.J.K.U.U.U.U.U.U.U.", 231 | "U.U.U.U.U.U.U.Y.T.T.Y.U.U.U.U.U.U.U.U.U.U.Y.T.T.Y.U.U.K.K.J.K.U.U.U.U.U.U.Y.T.T.Y.U.U.U.U.U.U.U.U.U.", 232 | "K.U.U.U.U.U.U.T.~.~.T.U.U.U.U.U.U.U.U.U.U.T.~.~.T.U.U.K.H.H.K.Y.U.U.U.U.U.T.~.~.T.U.U.U.U.U.U.U.U.U." 233 | }; 234 | -------------------------------------------------------------------------------- /so_long/img/npcback.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 193 2 ", 5 | " c #010101", 6 | ". c #0D0605", 7 | "X c #070709", 8 | "o c #140C0A", 9 | "O c #180D0D", 10 | "+ c #150807", 11 | "@ c #19130D", 12 | "# c #0D0D1B", 13 | "$ c #0A0A14", 14 | "% c #100F1F", 15 | "& c #1D1211", 16 | "* c #181818", 17 | "= c #0E1316", 18 | "- c #261A15", 19 | "; c #301D1C", 20 | ": c #1E201F", 21 | "> c #30221C", 22 | ", c #101021", 23 | "< c #1B1B37", 24 | "1 c #251D2E", 25 | "2 c #1F2221", 26 | "3 c #222323", 27 | "4 c #23272B", 28 | "5 c #382121", 29 | "6 c #352123", 30 | "7 c #25233B", 31 | "8 c #2D3231", 32 | "9 c #481C1A", 33 | "0 c #53201E", 34 | "q c #41251E", 35 | "w c #452B29", 36 | "e c #542726", 37 | "r c #5F2C2A", 38 | "t c #5A2724", 39 | "y c #4F302E", 40 | "u c #51312F", 41 | "i c #523230", 42 | "p c #5C3834", 43 | "a c #4E3E3D", 44 | "s c #632E2C", 45 | "d c #682E2C", 46 | "f c #63312F", 47 | "g c #6C302E", 48 | "h c #75312E", 49 | "j c #633230", 50 | "k c #6B3E3C", 51 | "l c #683936", 52 | "z c #7C3732", 53 | "x c #632D38", 54 | "c c #4D4A3F", 55 | "v c #6D413F", 56 | "b c #67493B", 57 | "n c #72483C", 58 | "m c #77543A", 59 | "M c #6F5533", 60 | "N c #2C3944", 61 | "B c #323858", 62 | "V c #282853", 63 | "C c #303164", 64 | "Z c #383667", 65 | "A c #393974", 66 | "S c #373873", 67 | "D c #473B6A", 68 | "F c #523B68", 69 | "G c #324647", 70 | "H c #494A4A", 71 | "J c #5F4050", 72 | "K c #4F5351", 73 | "L c #585959", 74 | "P c #54514C", 75 | "I c #6F4341", 76 | "U c #63414D", 77 | "Y c #734541", 78 | "T c #744A43", 79 | "R c #7B4C46", 80 | "E c #774B4A", 81 | "W c #794F4D", 82 | "Q c #7D5343", 83 | "! c #745145", 84 | "~ c #775955", 85 | "^ c #724F53", 86 | "/ c #76655C", 87 | "( c #484373", 88 | ") c #554F6A", 89 | "_ c #665D64", 90 | "` c #725967", 91 | "' c #5C6461", 92 | "] c #737568", 93 | "[ c #6A7773", 94 | "{ c #853532", 95 | "} c #8C3936", 96 | "| c #8A3A34", 97 | " . c #9A3E39", 98 | ".. c #963B37", 99 | "X. c #A23E3A", 100 | "o. c #9A443F", 101 | "O. c #A5413D", 102 | "+. c #AF433E", 103 | "@. c #A8493E", 104 | "#. c #B1443F", 105 | "$. c #A4543D", 106 | "%. c #867337", 107 | "&. c #8A3F4F", 108 | "*. c #8C424D", 109 | "=. c #984843", 110 | "-. c #875E44", 111 | ";. c #885E57", 112 | ":. c #B54941", 113 | ">. c #BC4F43", 114 | ",. c #B44740", 115 | "<. c #B95B45", 116 | "1. c #B35943", 117 | "2. c #A55741", 118 | "3. c #8B6448", 119 | "4. c #926B44", 120 | "5. c #946748", 121 | "6. c #9A7647", 122 | "7. c #8E6651", 123 | "8. c #826151", 124 | "9. c #B06542", 125 | "0. c #A17A4A", 126 | "q. c #A76C50", 127 | "w. c #946567", 128 | "e. c #8E726F", 129 | "r. c #8B6B75", 130 | "t. c #897973", 131 | "y. c #906D6B", 132 | "u. c #A47A75", 133 | "i. c #C45546", 134 | "p. c #C65C48", 135 | "a. c #D4634B", 136 | "s. c #E16E51", 137 | "d. c #E47152", 138 | "f. c #5F8173", 139 | "g. c #988342", 140 | "h. c #A8894A", 141 | "j. c #AD9349", 142 | "k. c #A9924A", 143 | "l. c #B19649", 144 | "z. c #B29949", 145 | "x. c #B18747", 146 | "c. c #BDA450", 147 | "v. c #868178", 148 | "b. c #B08175", 149 | "n. c #D3B95D", 150 | "m. c #CBA85B", 151 | "M. c #C5886C", 152 | "N. c #C79070", 153 | "B. c #CB9375", 154 | "V. c #D5B964", 155 | "C. c #E4BA64", 156 | "Z. c #DEC464", 157 | "A. c #E2C669", 158 | "S. c #E6CC67", 159 | "D. c #F2D86E", 160 | "F. c #F0D66D", 161 | "G. c #EAD06A", 162 | "H. c #70719B", 163 | "J. c #6B9F8A", 164 | "K. c #42AE80", 165 | "L. c #55B78E", 166 | "P. c #5BBA92", 167 | "I. c #61BA95", 168 | "U. c #6BBE9B", 169 | "Y. c #67BC99", 170 | "T. c #6F8DB0", 171 | "R. c #7B9EBC", 172 | "E. c #7491AF", 173 | "W. c #6FC09F", 174 | "Q. c #6FC0A0", 175 | "!. c #72C1A2", 176 | "~. c #78C3A6", 177 | "^. c #7DC6A9", 178 | "/. c #868685", 179 | "(. c #919994", 180 | "). c #A78B89", 181 | "_. c #849DA7", 182 | "`. c #9BAAA3", 183 | "'. c #88BBA6", 184 | "]. c #A4A6A5", 185 | "[. c #A0A8A4", 186 | "{. c #B6A5A3", 187 | "}. c #B5B7B5", 188 | "|. c #A2BDB2", 189 | " X c #CABCBB", 190 | ".X c #82C5AA", 191 | "XX c #84C9AD", 192 | "oX c #8BC5AD", 193 | "OX c #8CC9B2", 194 | "+X c #C3C1BD", 195 | "@X c #B9C8C1", 196 | "#X c gray77", 197 | "$X c #C9D0CD", 198 | /* pixels */ 199 | "Q.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.W.U.Y.W.W.W.Q.", 200 | "Q.Q.Q.Q.Q.Q.Q.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.Q.Q.~.OXOX~.Q.W.Y.L.L.Y.W.Q.Q.", 201 | "Q.Q.Q.Q.Q.Q.Q.~.OXOX~.Q.Q.Q.Q.U.I.I.U.Q.W.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.Q.!.Q.W.Q.~.OXOX~.Q.Q.Y.L.L.U.U.I.P.", 202 | "Q.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.Q.Q.I.K.K.I.Q.W.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.!.~.~.!.Q.W.W.U.Y.Q.I.K.K.", 203 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.I.K.K.Y.!.U.Y.!.~.^.^.Q.W.Q.!.!.Q.W.!.~.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.K.K.", 204 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.U.(.] ] / ~ Q W W W W W W W W W W W E W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.I.I.", 205 | "!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.~.y.s r d r r r r r r r r r r r r r r .X~.!.W.W.W.Q.Q.Q.!.~.~.!.Q.!.Q.", 206 | "~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.U.~.).e.*.| @.$.<.<.<.<.<.<.<.<.<.<.<.<.o...w.v.oX!.!.W.Q.Q.Q.~.OXOX~.Q.Q.Q.", 207 | "~.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.!.~.E r o.+.i.d.d.d.d.d.d.d.d.d.d.d.d.s.#.#.h p '.W.!.W.Q.Q.Q.~.OXOX~.!.~.~.", 208 | "!.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.U.!.E r @.>.a.d.d.d.d.d.d.d.d.d.d.d.d.s.i.<.z r [.W.W.W.Q.Q.Q.!.~.~.!.~.OXOX", 209 | "Q.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.Q.Q.E s <.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.s.s.z r {.~.W.W.Q.Q.Q.Q.Q.Q.Q.~.OXOX", 210 | "Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.!.oXR g p.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.s.s.o.d )..XW.!.Q.Q.Q.Q.Q.Q.Q.!.~.~.", 211 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.U.U.Y.j s X.+.a.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.>.+.{ s e.W.U.Y.U.!.Q.Q.Q.Q.Q.Q.", 212 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.U.L.L.f r X.+.a.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.>.+.{ r t.W.L.L.U.Q.Q.Q.Q.Q.Q.Q.", 213 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.U.L.L.f r X.+.#.#.p.d.d.d.d.d.d.d.d.d.d.d.d.s.>.,.,.+.z r t.U.L.L.Y.Q.Q.Q.Q.Q.Q.Q.", 214 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.U.U.U.f r O.+.#.#.i.d.d.d.d.d.d.d.d.d.d.d.d.s.,.+.+.+.{ r v.U.U.Y.W.Q.Q.Q.Q.Q.Q.Q.", 215 | "Q.Q.Q.Q.Q.Q.W.!.~.~.!.!.& o .+.#.#.#.i.i.>.>.i.i.:.i.>.>.i.>.>.,.X.,.+.t O [ !.U.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 216 | "U.Q.Q.Q.Q.Q.W.~.OXOX~.!.X ..+.#.#.#.+.+.+.X.#.X.X.,.X.#.X.#.#.+.+.+.+.0 ' OX~.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 217 | "U.U.I.I.W.W.W.~.OXOX~.U.X h } O.+.+.+.+.+.+.+.i.:.,.,.#.#.#.#.X.,...} 9 L OX~.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 218 | "Q.P.K.K.P.W.W.!.~..X!.^.X e r .+.#.+.+.+.+.+.X.X.X.,.#.#.,.X.,.,.g r - K ^.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 219 | "!.I.K.K.P.W.U.Y.!.!.#X}.> - t f | .O.+.+.+.+.| { { { ..#.#.#.#. . .h j q - P ~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.", 220 | "Q.U.I.I.W.Y.L.L.U.`. + 6.0.T n f s { +.+.+.+.+ 0 X.,.#.X.s r k Y %.0.M 3 !.Q.Q.Q.Q.Q.Q.Q.Q.", 221 | "!.Q.Q.Q.W.I.L.L.Y.`. o 6.0.n v f s z +.+.+.O.+ . X 0 +.X.#.X.s s k v -.q.M * !.W.!.~.~.!.Q.Q.Q.", 222 | "~.Q.Q.Q.W.W.W.Y.W.`. o N.N.- X u v l d s d s t t t t t h d h h k k - . ! N.7. 3 !.W.~.OXOX~.Q.Q.Q.", 223 | "~.!.~.~.!.Q.Q.U.P.`. O B.B.- y I l r r r r r r r s r r r r s v I O ! B.7. 2 !.Q.~.OXOX~.!.~.~.", 224 | "!.~.OXOX~.Q.Q.I.K.}.i i > > X y Y v k n 4.4.n k k k m 4.-.k k I I O @ > P #X@X!.Q.!.~.~.!.~.OXOX", 225 | "Q.~.OXOX~.Q.Q.I.K. XI l y I Y Y R 6.6.T I I I -.0.4.I v I I O H I.U.!.Q.Q.Q.Q.Q.~.OXOX", 226 | "Q.!.~.~.!.Q.Q.U.Y. XI I b b 7 < 6 5 5 5 w -.-.Y Y I I R 3.n 5 5 5 5 5 5 L v.[.Y.Q.Q.Q.Q.Q.Q.Q.!.~.~.", 227 | "Q.Q.Q.Q.Q.Q.Q.Q.!. XI R B.B.( S , O I I I I I I I I u i I {.W.~.XXY.Y.U.!.Q.Q.Q.Q.Q.Q.", 228 | "Q.Q.Q.Q.Q.Q.Q.Q.!. XI T u.u.( A 1 & & & - i i i u i i i u w & & % % w i {.~.~.!.L.L.Y.!.Q.Q.Q.Q.Q.Q.", 229 | "Q.Q.Q.Q.Q.Q.Q.Q.~. XY U A A S A J I I I i & I I A S $ /.~.!.!.L.L.U.Q.Q.Q.Q.Q.Q.Q.", 230 | "Q.Q.Q.Q.Q.Q.Q.Q.^.+XW ^ Z S S A U Y Y T l . . . . . . . . - T I D A , X /.~.~.XXU.U.U.Q.!.Q.Q.Q.Q.Q.", 231 | "Q.Q.Q.Q.Q.Q.Q.!.~.^.!.!.$ X C S &.+.9.j.0.O.X.X.X.X.X.X. .$.j.h.I I Z Z 7 = L XX!.Q.Q.U.U.U.U.Q.Q.Q.", 232 | "Q.Q.Q.Q.Q.Q.Q.~.OXOX~.!.X C S &.#.9.l.x.#.+.+.#.#.+.#.+.1.z.j.! Y D S < X K OXXXQ.Q.U.L.L.U.Q.Q.!.", 233 | "Q.Q.Q.Q.Q.Q.Q.~.OXOX~.~.Q.!.^ J =.X.=.Q 4.C.C.C.C.C.C.C.C.m.! o.o.=.F S ` q.8.8 f.!.Q.Y.L.L.U.U.P.I.", 234 | "Q.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.Q.;.Y o.+.o.I 3.D.D.D.D.D.F.F.F.V.b n +.,.F S r.B.7. 8 XXQ.Q.U.U.U.I.K.K.", 235 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.a ; } +.2.6.h.D.D.D.D.D.D.D.D.V.6.4.+.+.w.r.u.B.7. 4 XXQ.Q.Q.Q.Q.P.K.K.", 236 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.4 h ,.9.l.m.D.D.D.D.D.D.D.D.S.z.l.@.+.M.B.B.B.7. G !.Q.Q.Q.Q.Q.Q.I.I.", 237 | "!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!.4 j &.5.z.c.Z.Z.F.D.D.D.G.Z.n.z.j.*.*.;.7.5.7.~ P J.W.Q.!.~.~.!.Q.Q.Q.", 238 | "~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.!.3 V A _ l.l.l.z.G.D.D.D.n.z.z.z.j.( A $ P !.~.W.Q.~.OXOX~.Q.Q.Q.", 239 | "~.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.!.H * C S _ k.k.k.z.Z.Z.S.Z.m.z.z.g.6.Z C 4 : 2 2 [ ^.W.W.Q.~.OXOX~.!.~.~.", 240 | "!.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.!.Q.Q.OXH.A S A ) z.l.Q T T ! 6.z.%.. X @X~.!.!.Q.Q.W.W.Q.!.~.~.!.~.OXOX", 241 | "Q.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.^.H.A A A ) z.z.m I I b 4.z.%. ~.~.~.W.Q.Q.W.Q.Q.Q.Q.Q.Q.~.OXOX", 242 | "Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.L $ G E.E._._.< o O o @ @ c $X!.~.XX~.Q.Q.W.Q.W.W.Q.Q.Q.Q.Q.Q.!.~.~.", 243 | "Q.Q.Q.Q.Q.Q.Q.Q.W.W.Y.Y.W.Q.Q.Q.H G R.R.R.R.= H Q.~.^.!.Q.Q.W.W.Q.W.Y.U.W.Q.Q.Q.Q.Q.Q.Q.", 244 | "Q.Q.Q.Q.Q.Q.Q.Q.W.Y.L.L.Y.Q.Q.Q..X].H.8 N N N (.].].].].`.|.!.!.!.Q.Q.Q.W.W.Q.Y.L.L.Y.Q.Q.Q.Q.Q.Q.Q.", 245 | "Q.Q.Q.Q.Q.Q.W.W.W.U.L.L.U.Q.Q.Q.^.XX(. X Y.P.P.U.!.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.Y.L.L.Y.Q.Q.Q.Q.Q.Q.Q.", 246 | "Q.Q.Q.Q.Q.Q.W.W.W.W.U.Y.W.Q.Q.Q.~.!.'.' ' L ' !.U.U.U.Q.Q.Q.Q.W.Q.Q.Q.Q.W.W.W.W.W.Y.W.Q.Q.Q.Q.Q.Q.Q.", 247 | "W.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.!.!.^.^.~.!.Q.Q.W.Y.Y.W.W.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 248 | "Y.Q.Q.Q.Q.Q.Q.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.OXOX~.Q.Q.U.L.L.U.Q.Q.Q.Q.Q.Q.~.OXOX~.Q.Q.Q.Q.Q.Q.Q.Q.Q." 249 | }; 250 | -------------------------------------------------------------------------------- /so_long/img/npcbackmv.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 193 2 ", 5 | " c #010101", 6 | ". c #0D0605", 7 | "X c #070709", 8 | "o c #140C0A", 9 | "O c #180D0D", 10 | "+ c #150807", 11 | "@ c #19130D", 12 | "# c #0C0C19", 13 | "$ c #100F1F", 14 | "% c #1D1211", 15 | "& c #181818", 16 | "* c #0E1316", 17 | "= c #261A15", 18 | "- c #301D1C", 19 | "; c #1E201F", 20 | ": c #30221C", 21 | "> c #101021", 22 | ", c #1B1B37", 23 | "< c #251D2E", 24 | "1 c #1F2221", 25 | "2 c #222323", 26 | "3 c #23272B", 27 | "4 c #382121", 28 | "5 c #352123", 29 | "6 c #25233B", 30 | "7 c #2D3231", 31 | "8 c #481C1A", 32 | "9 c #53201E", 33 | "0 c #41251E", 34 | "q c #452B29", 35 | "w c #542726", 36 | "e c #5F2C2A", 37 | "r c #5A2724", 38 | "t c #4F302E", 39 | "y c #51312F", 40 | "u c #523230", 41 | "i c #5C3834", 42 | "p c #4E3E3D", 43 | "a c #632E2C", 44 | "s c #682E2C", 45 | "d c #63312F", 46 | "f c #6C302E", 47 | "g c #75312E", 48 | "h c #633230", 49 | "j c #6B3E3C", 50 | "k c #683936", 51 | "l c #7C3732", 52 | "z c #632D38", 53 | "x c #4D4A3F", 54 | "c c #6D413F", 55 | "v c #67493B", 56 | "b c #72483C", 57 | "n c #77543A", 58 | "m c #6F5533", 59 | "M c #2C3944", 60 | "N c #323858", 61 | "B c #282853", 62 | "V c #303164", 63 | "C c #383667", 64 | "Z c #393974", 65 | "A c #373873", 66 | "S c #473B6A", 67 | "D c #523B68", 68 | "F c #324647", 69 | "G c #494A4A", 70 | "H c #5F4050", 71 | "J c #585959", 72 | "K c #53514D", 73 | "L c #6F4341", 74 | "P c #63414D", 75 | "I c #734541", 76 | "U c #744A43", 77 | "Y c #7B4C46", 78 | "T c #774B4A", 79 | "R c #794F4D", 80 | "E c #7D5343", 81 | "W c #745145", 82 | "Q c #775955", 83 | "! c #724F53", 84 | "~ c #76655C", 85 | "^ c #484373", 86 | "/ c #554F6A", 87 | "( c #665D64", 88 | ") c #725967", 89 | "_ c #5C6461", 90 | "` c #737568", 91 | "' c #6A7773", 92 | "] c #853532", 93 | "[ c #8C3936", 94 | "{ c #8A3A34", 95 | "} c #9A3E39", 96 | "| c #963B37", 97 | " . c #A23E3A", 98 | ".. c #9A443F", 99 | "X. c #A5413D", 100 | "o. c #AF433E", 101 | "O. c #A8493E", 102 | "+. c #B1443F", 103 | "@. c #A4543D", 104 | "#. c #867337", 105 | "$. c #8A3F4F", 106 | "%. c #8C424D", 107 | "&. c #984843", 108 | "*. c #875E44", 109 | "=. c #885E57", 110 | "-. c #B54941", 111 | ";. c #BC4F43", 112 | ":. c #B44740", 113 | ">. c #B95B45", 114 | ",. c #B35943", 115 | "<. c #A55741", 116 | "1. c #8B6448", 117 | "2. c #926B44", 118 | "3. c #946748", 119 | "4. c #9A7647", 120 | "5. c #8E6651", 121 | "6. c #826151", 122 | "7. c #B06542", 123 | "8. c #A17A4A", 124 | "9. c #A76C50", 125 | "0. c #8E726F", 126 | "q. c #8B6B75", 127 | "w. c #897973", 128 | "e. c #926969", 129 | "r. c #A47A75", 130 | "t. c #C45546", 131 | "y. c #C65C48", 132 | "u. c #D4634B", 133 | "i. c #E16E51", 134 | "p. c #E47152", 135 | "a. c #5F8173", 136 | "s. c #988342", 137 | "d. c #A8894A", 138 | "f. c #AD9349", 139 | "g. c #A9924A", 140 | "h. c #B19649", 141 | "j. c #B29949", 142 | "k. c #B18747", 143 | "l. c #BDA450", 144 | "z. c #868178", 145 | "x. c #B08175", 146 | "c. c #D3B95D", 147 | "v. c #CBA85B", 148 | "b. c #C5886C", 149 | "n. c #C79070", 150 | "m. c #CB9375", 151 | "M. c #D5B964", 152 | "N. c #E4BA64", 153 | "B. c #DEC464", 154 | "V. c #E2C669", 155 | "C. c #E6CC67", 156 | "Z. c #F2D86E", 157 | "A. c #F0D66D", 158 | "S. c #EAD06A", 159 | "D. c #70719B", 160 | "F. c #6B9F8A", 161 | "G. c #42AE80", 162 | "H. c #4CB287", 163 | "J. c #55B78E", 164 | "K. c #57B88F", 165 | "L. c #5AB991", 166 | "P. c #62BA95", 167 | "I. c #66BC99", 168 | "U. c #6BBE9B", 169 | "Y. c #6F8DB0", 170 | "T. c #7B9EBC", 171 | "R. c #7491AF", 172 | "E. c #6FC09F", 173 | "W. c #70C09E", 174 | "Q. c #6FC0A0", 175 | "!. c #72C1A2", 176 | "~. c #78C3A6", 177 | "^. c #7DC6A9", 178 | "/. c #868685", 179 | "(. c #919994", 180 | "). c #A78B89", 181 | "_. c #849DA7", 182 | "`. c #9BAAA3", 183 | "'. c #88BBA6", 184 | "]. c #A4A6A5", 185 | "[. c #A0A8A4", 186 | "{. c #B6A5A3", 187 | "}. c #B6B8B6", 188 | "|. c #A2BDB2", 189 | " X c #CABCBB", 190 | ".X c #82C5AB", 191 | "XX c #84C8AE", 192 | "oX c #88C9AF", 193 | "OX c #8DC1AB", 194 | "+X c #8CC9B2", 195 | "@X c #C3C1BD", 196 | "#X c #B9C8C1", 197 | "$X c #C6C8C7", 198 | /* pixels */ 199 | "Q.Q.!.U.U.U.U.Q.!.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.E.E.Q.Q.!.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.", 200 | "Q.Q.U.U.J.J.U.!.+X+X~.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.E.E.Q.Q.!.!.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.+X+X~.Q.Q.Q.Q.Q.Q.Q.", 201 | "P.P.U.U.J.J.U.~.+X+X~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.Q.Q.Q.!.!..X~.Q.Q.Q.P.P.U.!.Q.Q.Q.~.+X+X~.Q.Q.Q.Q.Q.Q.Q.", 202 | "G.G.P.U.U.U.Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.Q.Q.Q.Q.Q.Q.Q.J.G.P.U.Q.Q.Q.!.~.~.!.Q.Q.Q.Q.Q.Q.Q.", 203 | "G.G.P.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.!.!.!.!.!.!.E.!.E.E.Q.^.^.~.E.U.U.!.P.G.G.P.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 204 | "P.P.U.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.W.!.R R R T R R R R R R R R ! Q ~ ` ` F.U.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 205 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.Q.!.~..Xe e e e e e e e e e e e e e a e e e.^.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.", 206 | "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.!.OXz.e.| ..,.>.>.>.>.>.>.>.>.>.>.>.>.O.| &.0.).~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.", 207 | "~.~.~.~.!.Q.Q.Q.Q.Q.Q.Q.!.'.k f +.-.i.p.p.p.p.p.p.p.p.p.p.p.p.t.o.} e T ~.E.Q.Q.Q.Q.Q.Q.Q.!.~.~.!.~.", 208 | "+X^.+X+X~.E.Q.Q.Q.Q.Q.Q.U.[.e g t.t.p.p.p.p.p.p.p.p.p.p.p.p.p.y.t.O.e T Q.Q.Q.!.Q.Q.Q.Q.Q.~.+X+X~.!.", 209 | "+X~.+X+X~.E.Q.Q.Q.Q.Q.Q.~.{.e l i.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.y.e T Q.!.U.U.Q.Q.Q.Q.Q.~.+X+X~.Q.", 210 | "~.!.~.~.Q.Q.Q.Q.Q.Q.!.Q.oX).s { p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.7.f %..X!.!.!.Q.Q.Q.Q.Q.Q.~.~.!.Q.", 211 | "E.E.Q.Q.Q.Q.Q.Q.Q.U.Q.0.e ] &.;.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.u.o. .a h U.E.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 212 | "E.E.Q.Q.Q.Q.Q.Q.K.P.L.w.e ] :.-.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.u.+. .a z L.I.I.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 213 | "E.Q.Q.Q.Q.Q.Q.Q.K.I.L.w.e l :.:.-.;.i.p.p.p.p.p.p.p.p.p.p.p.p.y.-.-.+. .e d P.L.U.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 214 | "E.Q.Q.Q.Q.Q.Q.E.I.U.U.w.e ] :.:.+.-.i.p.p.p.p.p.p.p.p.p.p.p.p.t.+.o.o. .e d E.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.", 215 | "Q.E.E.E.Q.Q.Q.!.U.~.U.' O r +.o.+.:.t.;.t.t.-.t.t.-.t.;.;.;.;.:.o.o.o.| O O ~.~.!.~.U.U.Q.Q.Q.Q.Q.E.", 216 | "Q.E.E.E.Q.Q.Q.Q.U.oX~._ 9 o.o.+. .+. .:.:. .+.:. . .+.+.+.+.+.o.o.o.| X oXoX~.~.~.!.E.E.Q.Q.Q.I.", 217 | "E.Q.P.P.U.Q.E.Q.!.+X~.J 4 { | +.:.+.+.:. .+.:.+.:.+.+.+.+.+. .o.X.{ g X oXoX~.!.~.!.Q.Q.P.P.Q.I.", 218 | "Q.L.G.G.P.Q.E.E.U.~.~.K = e g .:. .+.:. .+. .+. .+.+.+.+.+.:.o.} e w X .X!..X~.!.Q.E.P.G.G.L.Q.", 219 | "!.P.G.G.L.E.U.E.~.~.~.K = 0 d f . .o.o.o.o.} ] ] ] ] o. .+.+. .} [ d e = = }.$X~.!.E.E.E.I.G.G.P.E.", 220 | "E.U.P.P.E.U.J.K.U.2 m 8.*.c j s s X.o.o.o.9 + o.:.+.+.] a d L U 8.4.. `.U.E.E.E.E.P.P.E.E.", 221 | "!.Q.Q.Q.Q.I.J.J.Q.& m 8.1.L k a s X.o.o.o.9 . + o.o.o. .] a d c n 8.4.o `.Q.Q.!.~.~.Q.Q.E.!.", 222 | "~.Q.Q.Q.Q.E.I.E.Q.= 5.n.W X = j j f s s s a w w r 9 s z f f g c y X = n.n.@ `.!.Q.~.+X+X!.Q.Q.~.", 223 | "~.!.~.~.!.Q.Q.U.E.1 * s.n.W O I j a a e a e e a e a e e e e k L u % m.n.@ `.Q.Q.~.+X+X~.~.!.~.", 224 | "!.~.+X+X~.Q.!.L.K.#X#XK : @ O L c j j #.3.n j j j b 2.2.b j j L u X : : u u }.U.Q.Q.~.~.~.+X~.!.", 225 | "Q.~.+X+X~.Q.Q.I.a.L.E.K . % L I L L 3.4.*.L L L I 4.8.Y I L I u k L XI.Q.Q.Q.Q.!.+X~.Q.", 226 | "Q.!.~.~.!.Q.Q.U.E.E.E.OXa.( : 4 4 4 4 4 U *.Y L L L I *.*.q 4 4 5 5 , 6 v v L L XQ.Q.Q.Q.Q.E.~.!.Q.", 227 | "Q.Q.Q.Q.Q.Q.Q.Q.I.I.^.!.!.{.L u y I L L L L I L L O $ A ^ m.m.T L XQ.Q.Q.Q.Q.Q.Q.Q.Q.", 228 | "Q.Q.Q.Q.Q.Q.Q.U.K.K.^.!.~.{.u q $ $ % % q y y y u u t y y = % % % < Z ^ r.r.U I XI.I.Q.Q.Q.Q.Q.Q.Q.", 229 | "Q.Q.Q.Q.Q.Q.Q.I.a.K..XW.!.(. # Z S L L % i L L I H A A Z Z P I XU.I.Q.Q.Q.Q.Q.Q.Q.", 230 | "Q.Q.Q.Q.Q.Q.Q.Q.W.W.oXW.W.D.X > Z Z L U = . . . . . . . . i U I I H A A A C ! R X^.Q.Q.Q.Q.Q.Q.Q.Q.", 231 | "Q.Q.Q.Q.Q.U.Q.Q.Q.!..X_ * 6 C C L U d.f.@.X. . . . . . .} d.f.7.X.$.Z V X X ~.~.~.Q.Q.E.U.I.U.Q.E.Q.", 232 | "Q.Q.Q.Q.Q.I.I.Q.Q.oX+XK , Z S c U f.j.@.o. .+.:. . .:.:.k.h.7.+.$.A V X ~.+X~.Q.U.U.J.J.U.Q.E.E.", 233 | "U.Q.Q.Q.Q.U.I.Q.!.a.7 6.9.) Z D X.&.E E v.N.N.N.N.N.N.N.N.2.E .. .$.P Q !.~.oX+X~.Q.Q.U.J.J.U.U.I.Q.", 234 | "I.Q.Q.Q.Q.Q.Q.Q.+X3 5.m.q.Z D o.O.L L M.A.Z.Z.Z.Z.Z.Z.Z.1.L ..+.&.L =.Q.!.~.~.!.Q.Q.U.I.U.U.P.G.H.", 235 | "P.Q.Q.Q.Q.Q.Q.Q.XX3 5.m.x.q.e.O.:.2.4.B.Z.Z.Z.Z.Z.Z.Z.Z.k.4.<.+.| 4 p W.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.G.G.", 236 | "U.Q.Q.Q.Q.Q.Q.Q.W.F 5.m.m.m.b.:.:.f.j.B.Z.Z.Z.Z.Z.Z.Z.A.v.j.7. .] 2 !.U.Q.Q.Q.Q.Q.Q.Q.Q.Q.U.P.P.", 237 | "!.Q.Q.Q.Q.Q.!.Q.W.F.K Q 5.5.5.=.%.%.f.j.c.B.S.Z.Z.Z.Z.V.B.l.h.3.$.z 3 !.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.Q.", 238 | "~.Q.Q.Q.Q.Q.Q.Q.E.~.!.G # Z ^ g.j.j.j.c.Z.Z.Z.A.h.h.h.h.( S B 2 Q.Q.Q.Q.Q.Q.Q.~.+X+X~.Q.Q.Q.", 239 | "~.!.~.~.!.Q.Q.Q.E.E.XXa.1 1 1 3 V C s.s.h.j.v.C.V.V.B.j.j.g.d.( A V = G !.Q.Q.Q.Q.Q.Q.~.+X+X~.!.~.~.", 240 | "+X~.+X+X~.Q.Q.Q.Q.Q.E.!.!.W.^.}.X X X #.j.2.U U T E f.j./ Z Z A D.+XQ.Q.!.Q.Q.Q.Q.Q.!.~.~.!.~.+X+X", 241 | "+XXX+X+X~.Q.Q.Q.Q.Q.Q.Q.Q.~.~.^. #.j.#.b L L T j.j./ Z Z A D..XQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.+X+X", 242 | "~.~.!.~.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.^.^.~.$Xx @ % O o o 2 _._.R.R.N # J !.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.~.~.", 243 | "E.E.E.Q.Q.Q.Q.Q.W.W.I.I.U.Q.Q.Q.!.^.~.!.G * T.T.T.T.F K E.E.Q.Q.Q.U.U.I.U.Q.Q.Q.Q.Q.Q.Q.", 244 | "E.E.Q.Q.Q.Q.Q.Q.W.I.K.J.U.Q.Q.Q.Q.Q.!.!.|.].].].].].(.M M M M ' ].~.E.E.Q.Q.Q.U.J.J.U.Q.Q.Q.Q.Q.Q.Q.", 245 | "Q.Q.Q.Q.Q.Q.E.E.!.U.J.J.I.Q.Q.Q.Q.Q.Q.Q.U.U.!.U.L.L.U.X (.XX^.!.E.Q.Q.U.U.J.J.U.Q.Q.Q.Q.Q.Q.Q.", 246 | "Q.Q.Q.Q.Q.E.E.U.U.U.U.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.U.U.U.E.( J ( _ ~.Q.!.Q.Q.Q.Q.!.U.I.U.U.Q.Q.Q.Q.Q.Q.Q.", 247 | "Q.Q.Q.Q.Q.Q.Q.!.~.~.!.!.E.E.Q.Q.Q.Q.Q.Q.Q.!.~.~.!.Q.Q.!.~.Q.Q.Q.Q.Q.Q.Q.Q.!.~.~.!.~.Q.Q.Q.Q.Q.Q.Q.Q.", 248 | "Q.Q.Q.Q.Q.Q.Q.!.+X+X~.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.~.+X+X~.Q.Q.U.J.J.U.Q.Q.Q.Q.Q.Q.~.~.^.+X+X~.Q.Q.Q.Q.Q.Q.I." 249 | }; 250 | -------------------------------------------------------------------------------- /so_long/img/npcmv.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 196 2 ", 5 | " c #000001", 6 | ". c #09080A", 7 | "X c #120909", 8 | "o c #17110E", 9 | "O c #0C0D16", 10 | "+ c #181717", 11 | "@ c #0E1214", 12 | "# c #271917", 13 | "$ c #371918", 14 | "% c #250F0D", 15 | "& c #2E241B", 16 | "* c #33251D", 17 | "= c #111122", 18 | "- c #16162C", 19 | "; c #1B1B39", 20 | ": c #1D252C", 21 | "> c #272429", 22 | ", c #372723", 23 | "< c #323236", 24 | "1 c #511F1D", 25 | "2 c #442B26", 26 | "3 c #5F2C2A", 27 | "4 c #562725", 28 | "5 c #4A352A", 29 | "6 c #593735", 30 | "7 c #53322F", 31 | "8 c #6D2D2B", 32 | "9 c #642B28", 33 | "0 c #6A322E", 34 | "q c #653938", 35 | "w c #7A3833", 36 | "e c #5A442D", 37 | "r c #65462D", 38 | "t c #69443E", 39 | "y c #6D5137", 40 | "u c #25254A", 41 | "i c #2D2B50", 42 | "p c #2E2F60", 43 | "a c #343465", 44 | "s c #35366E", 45 | "d c #383974", 46 | "f c #373873", 47 | "g c #4C394E", 48 | "h c #603E58", 49 | "j c #503B65", 50 | "k c #3D4275", 51 | "l c #53535D", 52 | "z c #585757", 53 | "x c #514A55", 54 | "c c #6F4341", 55 | "v c #724643", 56 | "b c #7C4F49", 57 | "n c #764944", 58 | "m c #7C514D", 59 | "M c #7A584A", 60 | "N c #7B5753", 61 | "B c #63574C", 62 | "V c #6A655E", 63 | "C c #454678", 64 | "Z c #59517A", 65 | "A c #50516E", 66 | "S c #735C74", 67 | "D c #695671", 68 | "F c #676767", 69 | "G c #7E7E7E", 70 | "H c #83332F", 71 | "J c #863835", 72 | "K c #993C37", 73 | "L c #99483A", 74 | "P c #8D413C", 75 | "I c #AF433E", 76 | "U c #A3413D", 77 | "Y c #B2453F", 78 | "T c #A5503F", 79 | "R c #B0573F", 80 | "E c #854643", 81 | "W c #934244", 82 | "Q c #84554C", 83 | "! c #895C53", 84 | "~ c #AC4843", 85 | "^ c #B54840", 86 | "/ c #BB4D42", 87 | "( c #A75140", 88 | ") c #A95140", 89 | "_ c #BE5044", 90 | "` c #AF5555", 91 | "' c #8A6249", 92 | "] c #8D6353", 93 | "[ c #966458", 94 | "{ c #8C7259", 95 | "} c #9A7346", 96 | "| c #A4745B", 97 | " . c #A47352", 98 | ".. c #995D63", 99 | "X. c #AF5D60", 100 | "o. c #8A6564", 101 | "O. c #9A7A79", 102 | "+. c #987877", 103 | "@. c #8B6F75", 104 | "#. c #BC6461", 105 | "$. c #A97461", 106 | "%. c #B27D67", 107 | "&. c #AF717B", 108 | "*. c #A67D77", 109 | "=. c #AF6C74", 110 | "-. c #C45446", 111 | ";. c #CC5C49", 112 | ":. c #D8674D", 113 | ">. c #DF6E54", 114 | ",. c #C76757", 115 | "<. c #E16E51", 116 | "1. c #E47152", 117 | "2. c #E4775C", 118 | "3. c #B2845B", 119 | "4. c #B78269", 120 | "5. c #BB856C", 121 | "6. c #BF896D", 122 | "7. c #B88D72", 123 | "8. c #B1887A", 124 | "9. c #C18A6F", 125 | "0. c #C38B70", 126 | "q. c #CB9274", 127 | "w. c #CB9779", 128 | "e. c #D19A7A", 129 | "r. c #E58872", 130 | "t. c #495387", 131 | "y. c #546391", 132 | "u. c #647E9E", 133 | "i. c #7979A4", 134 | "p. c #433FCE", 135 | "a. c #413ED0", 136 | "s. c #4540CD", 137 | "d. c #4A41C9", 138 | "f. c #8C7884", 139 | "g. c #807391", 140 | "h. c #42AE80", 141 | "j. c #55B78E", 142 | "k. c #58B890", 143 | "l. c #61BA95", 144 | "z. c #6ABE9A", 145 | "x. c #67BC98", 146 | "c. c #71BE9E", 147 | "v. c #77AE9A", 148 | "b. c #7191AD", 149 | "n. c #7B9FBD", 150 | "m. c #7394B3", 151 | "M. c #6E8BAF", 152 | "N. c #74BFA1", 153 | "B. c #7DBAA2", 154 | "V. c #6EC09F", 155 | "C. c #71C09F", 156 | "Z. c #6FC0A0", 157 | "A. c #72C1A2", 158 | "S. c #78C3A6", 159 | "D. c #7DC5A9", 160 | "F. c #97829E", 161 | "G. c #AF808F", 162 | "H. c #A68988", 163 | "J. c #B7888E", 164 | "K. c #AC889A", 165 | "L. c #AF8E93", 166 | "P. c #8080A9", 167 | "I. c #9189A7", 168 | "U. c #B09AB0", 169 | "Y. c #85BEA7", 170 | "T. c #B3B3BE", 171 | "R. c #B3A4AD", 172 | "E. c #C68689", 173 | "W. c #C68B8F", 174 | "Q. c #C68F95", 175 | "!. c #D59A99", 176 | "~. c #CCA681", 177 | "^. c #D9A885", 178 | "/. c #E0AE89", 179 | "(. c #E5B68F", 180 | "). c #EBBE94", 181 | "_. c #C5A4AC", 182 | "`. c #CFB1B4", 183 | "'. c #E4BABA", 184 | "]. c #83C5AB", 185 | "[. c #83C9AD", 186 | "{. c #8AC7AF", 187 | "}. c #8CC9B2", 188 | "|. c #91CBB5", 189 | " X c #EEC297", 190 | ".X c #9F9FC0", 191 | "XX c #ADADCB", 192 | "oX c #B0B0CD", 193 | "OX c #BEBED7", 194 | "+X c #BDADC1", 195 | "@X c #C6B9CD", 196 | "#X c #C6C6DE", 197 | "$X c #E7D0D5", 198 | "%X c #E4D4DE", 199 | "&X c #E8E8F7", 200 | "*X c #E3E3F4", 201 | /* pixels */ 202 | "z.V.z.z.z.z.C.A.S.S.A.V.V.Z.Z.Z.Z.Z.Z.Z.Z.A.A.z.Z.z.z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.A.S.S.Z.Z.Z.V.z.x.V.Z.Z.Z.", 203 | "C.z.z.z.z.z.z.S.A.z.S.A.Z.Z.Z.A.Z.Z.Z.Z.Z.S.z.Z.A.z.z.z.Z.Z.Z.Z.Z.Z.Z.Z.Z.S.}.}.S.Z.V.V.j.j.x.Z.Z.Z.", 204 | "z.z.z.c.z.z.z.z.z.z.C.V.Z.Z.Z.z.l.l.z.Z.Z.S.A.c.S.Z.Z.z.Z.Z.Z.Z.Z.Z.Z.V.Z.S.}.}.S.Z.V.l.j.j.x.V.l.l.", 205 | "V.z.z.z.z.z.z.z.z.z.z.V.Z.Z.Z.l.h.h.l.Z.Z.S.S.S.S.A.A.S.D.S.A.S.A.Z.Z.V.Z.A.S.S.Z.Z.Z.V.z.x.V.l.h.x.", 206 | "c.x.z.z.z.z.z.z.z.z.z.V.Z.Z.A.l.h.h.k.A.z.z.c.A.Z.A.A.A.A.A.A.A.S.A.A.S.D.D.A.V.Z.Z.Z.Z.Z.Z.Z.l.h.V.", 207 | "C.z.z.z.z.z.z.z.x.z.z.z.Z.Z.Z.z.k.z.V.x.O.O.O.+.O.O.O.O.O.O.O.O.O.O.O.O.O.O.V.V.Z.Z.Z.Z.Z.Z.Z.z.l.z.", 208 | "C.C.z.z.x.z.z.z.x.z.V.z.Z.Z.Z.Z.A.A.D.L.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 9 A.S.D.Z.Z.A.S.S.A.Z.V.z.", 209 | "S.C.c.z.z.z.x.z.z.z.V.x.c.Z.Z.Z.D.A.L.[ J L ( ( ( ( ( ( ( ( ( ( ( ( ( L P J H.H.A.Z.Z.S.[.A.S.z.z.z.", 210 | "S.C.C.c.x.x.x.x.x.x.C.C.Z.Z.Z.A.{.B 9 J Y -.1.1.1.1.1.a.a.a.1.1.1.1.1.;.Y I 8 3 A.D.V.S.S.V.V.l.x.z.", 211 | "z.z.z.z.C.x.C.x.C.x.C.C.Z.Z.Z.S.|.n 3 P _ ;.1.1.1.1.s.a.a.a.a.1.1.1.1.:.-.R 8 3 A.S.S.S.C.C.x.V.z.z.", 212 | "z.x.z.z.C.x.z.x.z.x.C.V.Z.Z.N.D.}.v 9 T 1.1.1.1.1.s.1.>.1.s.p.a.1.1.1.1.<.<.w 9 ].c.V.A.C.C.x.x.z.z.", 213 | "z.z.z.x.z.z.x.z.x.x.V.C.Z.Z.V.A.].v 8 T 1.1.1.1.1.s.s.2.p.d.p.s.1.1.1.1.1.1.w 8 _.{.A.Z.V.C.V.V.z.z.", 214 | "z.x.x.C.x.x.x.x.V.x.l.V.V.C.A.t 0 U I ;.1.1.1.1.1.p.d.p.p.>.1.s.1.1.1.1.1.1.Y I w q H.C.V.V.V.V.z.z.", 215 | "z.x.x.c.x.x.C.z.V.x.j.j.x.C.C.4 3 U I -.:.<.1.1.1.1.s.p.a.>.a.1.1.1.1.<.<.:.Y I 0 4 +.C.V.V.V.C.V.V.", 216 | "z.x.z.x.C.C.x.z.x.x.j.j.V.V.V. % K I Y Y -.1.1.1.1.<.p.p.p.>.1.1.1.<.:.Y Y I I 1 F S.V.V.V.C.V.V.", 217 | "z.z.x.z.x.x.x.z.x.V.x.V.V.C.C. X K I I I _ >.<.<.<.2.2.2.2.2.2.<.<.<.;.Y Y I U $ F V.V.V.V.C.V.V.", 218 | "z.x.x.z.z.x.z.x.z.V.A.Z.A.A.z. X K I I I Y / / / / !.%X$X$X'.,./ / / Y I I I I 1 V B.C.C.C.C.Z.Z.", 219 | "x.V.z.z.x.z.z.z.z.A.S.A.A.S.A. X K I I Y Y I I I I !.&X&X&X%X#.I I I I I I I I % F }.C.C.C.C.Z.Z.", 220 | "z.z.z.z.z.z.z.x.V.z.S.A.A.F V e e w H ..f.E.Y ~ f.f.Q.W.W.W.W.f.G.#.Y #.f.G.W H r e B F b.v.Z.Z.Z.Z.", 221 | "V.x.z.x.z.c.z.z.z.z.A.A.A. & } } 0 3 @.oXK.~ ` Q.@X&.Y Y Y ` +X+Xf.Y G.@XoXh 8 ' .r + A.Z.Z.Z.Z.", 222 | "z.x.C.x.z.V.x.z.z.z.A.A.c. & 3. .2 $ l g.I.E.Q.@X#X_.E.E.E.W.@X#X_.E.f.g.i.2 $ ' 3.y + S.Z.Z.Z.Z.", 223 | "x.z.x.V.x.z.j.j.z.z.Z.A.c. * q.5.o ; d i.*X&X&X&X&X&X&X&X&X&X&X*X*X.Xk d O ' q.M + S.Z.Z.Z.Z.", 224 | "x.x.V.x.z.z.j.x.z.Z.Z.Z.N.l B ' Q $ # g S g.XXXXXXXXXXXXXXXX+XXXXXXXoXI.y.S * # y ' N z F [.A.Z.Z.Z.", 225 | "x.V.x.V.z.z.z.z.z.Z.Z.Z.N.].]. t t | q.+.d d d j d d d d d d d d j S q.q.Q q # F D.}.}.S.V.Z.Z.", 226 | "C.V.C.x.C.C.C.x.l.l.C.C.C.D.S. . n b $.q.8.Z Z s p C Z Z Z Z a p C Z @.q.q.! Q # B Y.}.|.S.A.S.S.", 227 | "l.V.x.x.C.C.V.V.h.h.k.C.C.C.S. X %.q.q.q.e. X~.> . { X). X~.* { )./.q.q.q.q.2 # h N S.A.S.}.}.", 228 | "x.V.l.V.C.V.V.x.h.h.k.V.V.C.A. o 5.q.q.q.~.).~., { X X X~.& { )./.q.q.q.q.2 # v ! D.S.S.}.}.", 229 | "C.x.V.x.C.V.C.x.l.k.C.C.Z.A.A.S.{.! Q $.q.q.e.0.n q 7.). X X^.m q | e.e.q.q.! b g a D 5.5.o.o.A.D.S.", 230 | "x.V.C.l.l.C.V.x.V.V.l.V.V.V.A.A.A.m q ] 5.5.0.5.! n 7.). X).^.] n | 0.9.5.5.v q j d S w.0.b y N.S.Z.", 231 | "x.l.V.V.V.x.C.V.l.V.j.j.V.A.Z.A.A.> X o % , b Q %.6.q.e.e.e.w.0.9.[ Q 7 + + X X i d D w.9.b n N.A.A.", 232 | "V.l.l.V.l.V.C.C.l.x.j.j.D.V.C.A.D.- # t b %.q.0.q.q.q.q.q.q.[ t 2 u f S q.9.Q n A.Z.Z.", 233 | "l.C.V.x.V.x.V.C.V.V.V.V.V.V.A.z z i u u u g L P 6 5 5 5 5 5 5 5 5 6 0 8 8 8 u u ; - > 5 e R.@XD.Z.Z.", 234 | "V.C.C.C.l.C.l.V.C.l.C.C.C.C.V. . p d d d h I K % $ 3 J I I j f = + A.A.D.V.Z.", 235 | "l.C.C.l.V.l.C.C.C.V.V.C.V.V.c.* , @.g.f.f.@.W K 4 1 g l l l l 4 1 8 w K I I h j v.c.c.x.k.j.z.A.A.Z.", 236 | "l.V.V.l.V.V.C.C.C.].C.C.Z.Z.C.c b (. X X).~.h t U ~ J.oXoXoXR.` I I ~ I ~ I n c S.S.S.z.j.j.z.z.k.x.", 237 | "C.C.l.V.l.V.C.C.C.C.C.C.Z.z.A.c Q ^.(.(.(.0.t P ~ -.J.OXOXOX+X#.-.^ I K H H 3 7 S.Z.A.Z.V.z.V.l.h.h.", 238 | "C.l.C.x.x.x.C.V.Z.Z.Z.Z.Z.S.A.c n 9.q.q.w.$.v E ,.1.'.&X&X&X%Xr.<.-.Y 9 Z.A.Z.A.V.Z.Z.l.h.h.", 239 | "l.V.x.x.x.C.C.C.Z.Z.Z.Z.Z.S.C.@.+.%.%.5.4.[ 6 q T R L.T.T.T.R.#.) ~ W g : > . A.S.Z.Z.C.Z.Z.z.l.l.", 240 | "C.l.C.l.x.x.C.C.Z.Z.Z.Z.V.S.C.A.].N t h c 5 u s y.n.n.+ N.A.A.A.S.S.A.Z.V.V.", 241 | "l.C.l.C.x.C.C.C.Z.Z.Z.Z.V.Z.A.C.N.] Q N m 6 + @ . . . i k y.m.b.: @ A.A.A.S.}.}.S.Z.V.V.", 242 | "x.z.z.z.z.z.z.Z.Z.Z.Z.Z.Z.Z.Z.A.S.S.A.Z.Z.z.l.z.< = a k u.b.m.n.A O @ S.A.S.c.A.S.}.}.S.Z.C.A.", 243 | "z.z.z.z.z.z.z.V.Z.Z.Z.Z.Z.Z.Z.S.}.}.S.Z.Z.l.h.h.< = f C M.n.n.n.A A.S.Z.Z.Z.A.S.S.A.A.V.V.", 244 | "z.z.z.z.z.x.V.V.Z.Z.Z.Z.Z.Z.Z.S.}.}.S.Z.Z.l.h.h.l.C.S.S.v.= - C t.t.t.i A.Z.Z.Z.Z.Z.Z.Z.Z.A.V.V.", 245 | "z.z.z.z.x.z.Z.Z.Z.Z.Z.Z.Z.Z.Z.A.S.S.A.Z.S.z.l.l.C.A.A.S.Y.. O p a k s u . @ S.S.Z.Z.Z.Z.Z.Z.Z.A.A.V.", 246 | "z.z.x.z.x.z.V.Z.V.V.x.z.V.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.V.A.C.A.C.A.S.Y.< @ = = l A.Z.Z.z.z.x.Z.Z.Z.Z.Z.Z.Z.Z.", 247 | "z.z.z.z.z.V.Z.Z.V.z.j.j.x.Z.Z.Z.Z.Z.Z.Z.Z.V.V.z.k.k.z.A.A.D.S.< F [.Z.Z.z.j.j.x.Z.Z.Z.Z.Z.Z.Z.", 248 | "z.x.z.z.x.Z.Z.Z.V.z.j.j.x.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.x.j.j.z.V.Z.Z.Z.Z.Z.Z.Z.A.Z.Z.Z.x.j.j.x.Z.Z.Z.Z.Z.Z.Z.", 249 | "x.z.z.z.z.V.Z.Z.Z.z.x.z.V.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.V.z.x.V.V.Z.A.S.A.A.A.Z.Z.Z.Z.Z.V.z.x.Z.Z.Z.Z.Z.Z.Z.Z.", 250 | "z.x.l.V.l.V.C.C.S.S.C.V.C.V.Z.Z.Z.Z.Z.Z.Z.A.S.S.A.Z.Z.V.x.x.V.V.Z.Z.Z.Z.Z.Z.D.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", 251 | "V.C.V.].V.C.V.C.}.}.S.V.V.V.Z.Z.Z.Z.Z.Z.Z.S.}.}.S.Z.Z.V.j.j.x.V.Z.Z.Z.Z.Z.D.}.}.S.Z.Z.Z.Z.Z.Z.Z.Z.Z." 252 | }; 253 | -------------------------------------------------------------------------------- /so_long/img/npc.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 198 2 ", 5 | " c #000001", 6 | ". c #09080A", 7 | "X c #120909", 8 | "o c #17110E", 9 | "O c #0C0D16", 10 | "+ c #181717", 11 | "@ c #0E1214", 12 | "# c #271917", 13 | "$ c #371918", 14 | "% c #250F0D", 15 | "& c #2E241B", 16 | "* c #33251D", 17 | "= c #111122", 18 | "- c #16162C", 19 | "; c #1B1B39", 20 | ": c #1D252C", 21 | "> c #272429", 22 | ", c #372723", 23 | "< c #323236", 24 | "1 c #511F1D", 25 | "2 c #442B26", 26 | "3 c #5F2C2A", 27 | "4 c #562725", 28 | "5 c #4A352A", 29 | "6 c #5A372F", 30 | "7 c #593735", 31 | "8 c #442A30", 32 | "9 c #6D2D2B", 33 | "0 c #642B28", 34 | "q c #6A322E", 35 | "w c #653938", 36 | "e c #7A3833", 37 | "r c #5A442D", 38 | "t c #65462D", 39 | "y c #69443E", 40 | "u c #6D5137", 41 | "i c #25254A", 42 | "p c #2D2C57", 43 | "a c #2E2B4A", 44 | "s c #2E2F60", 45 | "d c #343465", 46 | "f c #35366E", 47 | "g c #383974", 48 | "h c #373873", 49 | "j c #4C394E", 50 | "k c #603E58", 51 | "l c #503B65", 52 | "z c #3D4275", 53 | "x c #53535D", 54 | "c c #585757", 55 | "v c #514A55", 56 | "b c #6F4341", 57 | "n c #724643", 58 | "m c #734A44", 59 | "M c #7C4F49", 60 | "N c #784844", 61 | "B c #7C514D", 62 | "V c #79584A", 63 | "C c #7B5753", 64 | "Z c #63574C", 65 | "A c #6A655E", 66 | "S c #454678", 67 | "D c #59517A", 68 | "F c #50516E", 69 | "G c #735C74", 70 | "H c #695671", 71 | "J c #676767", 72 | "K c #7E7E7E", 73 | "L c #83332F", 74 | "P c #863835", 75 | "I c #993C37", 76 | "U c #99483A", 77 | "Y c #8D413C", 78 | "T c #AF433E", 79 | "R c #A3413D", 80 | "E c #B2453F", 81 | "W c #A5503F", 82 | "Q c #B0573F", 83 | "! c #854643", 84 | "~ c #934244", 85 | "^ c #84554C", 86 | "/ c #895C53", 87 | "( c #AC4843", 88 | ") c #B54840", 89 | "_ c #BB4D42", 90 | "` c #A75140", 91 | "' c #A95140", 92 | "] c #BE5044", 93 | "[ c #AF5555", 94 | "{ c #8A6249", 95 | "} c #8D6353", 96 | "| c #966458", 97 | " . c #8C7259", 98 | ".. c #9A7346", 99 | "X. c #A07A49", 100 | "o. c #A4745B", 101 | "O. c #A86B5A", 102 | "+. c #995D63", 103 | "@. c #AF5D60", 104 | "#. c #8A6564", 105 | "$. c #9A7A79", 106 | "%. c #987877", 107 | "&. c #8B6F75", 108 | "*. c #BC6461", 109 | "=. c #A97461", 110 | "-. c #B27D67", 111 | ";. c #AF717B", 112 | ":. c #A67D77", 113 | ">. c #AF6C74", 114 | ",. c #C45446", 115 | "<. c #CC5C49", 116 | "1. c #D8674D", 117 | "2. c #DF6E52", 118 | "3. c #C76757", 119 | "4. c #E16E51", 120 | "5. c #E47152", 121 | "6. c #E4775C", 122 | "7. c #B2845B", 123 | "8. c #B78269", 124 | "9. c #BB856C", 125 | "0. c #BF896D", 126 | "q. c #B88D72", 127 | "w. c #B1887A", 128 | "e. c #C18A6F", 129 | "r. c #C38B70", 130 | "t. c #CB9274", 131 | "y. c #CB9779", 132 | "u. c #D19A7A", 133 | "i. c #E58872", 134 | "p. c #495387", 135 | "a. c #546391", 136 | "s. c #647E9E", 137 | "d. c #7979A4", 138 | "f. c #433FCF", 139 | "g. c #413ED0", 140 | "h. c #4440CD", 141 | "j. c #8C7884", 142 | "k. c #807391", 143 | "l. c #42AE80", 144 | "z. c #4FB087", 145 | "x. c #55B78E", 146 | "c. c #56B88F", 147 | "v. c #5BB992", 148 | "b. c #61BA95", 149 | "n. c #6BBE9B", 150 | "m. c #66BD99", 151 | "M. c #71BD9E", 152 | "N. c #7DB49F", 153 | "B. c #73AD98", 154 | "V. c #7191AD", 155 | "C. c #7B9FBD", 156 | "Z. c #7394B3", 157 | "A. c #6E8BAF", 158 | "S. c #73BFA1", 159 | "D. c #72C09F", 160 | "F. c #6FC0A0", 161 | "G. c #72C1A2", 162 | "H. c #78C3A6", 163 | "J. c #7DC5A9", 164 | "K. c #97829E", 165 | "L. c #AF808F", 166 | "P. c #A68988", 167 | "I. c #B7888E", 168 | "U. c #AC889A", 169 | "Y. c #AF8E93", 170 | "T. c #8080A9", 171 | "R. c #9189A7", 172 | "E. c #B09AB0", 173 | "W. c #85BEA7", 174 | "Q. c #B3B3BE", 175 | "!. c #B3A4AD", 176 | "~. c #C68689", 177 | "^. c #C68B8F", 178 | "/. c #C68F95", 179 | "(. c #D59A99", 180 | "). c #CCA681", 181 | "_. c #D9A885", 182 | "`. c #E0AE89", 183 | "'. c #E5B68F", 184 | "]. c #EBBE94", 185 | "[. c #C5A4AC", 186 | "{. c #CFB1B4", 187 | "}. c #E4BABA", 188 | "|. c #83C5AB", 189 | " X c #8CC9B2", 190 | ".X c #8CC7B1", 191 | "XX c #EEC297", 192 | "oX c #9F9FC0", 193 | "OX c #ADADCB", 194 | "+X c #B0B0CD", 195 | "@X c #BEBED7", 196 | "#X c #BDADC1", 197 | "$X c #C6B9CD", 198 | "%X c #C6C6DE", 199 | "&X c #E7D0D5", 200 | "*X c #E4D4DE", 201 | "=X c #E8E8F7", 202 | "-X c #E3E3F4", 203 | /* pixels */ 204 | "F.F.F.F.F.F.F.G.H.H.F.F.F.F.F.F.F.F.F.F.F.G.H.H.G.F.F.F.F.F.F.F.F.F.F.F.F.G.H.H.F.F.F.F.m.m.D.D.G.F.", 205 | "F.F.F.F.F.F.F.H. X XH.F.F.F.F.F.F.F.F.F.F.H. X XH.F.F.F.F.F.F.F.F.F.F.F.F.H. X XH.F.F.F.x.x.m.D.F.F.", 206 | "F.F.F.F.F.F.F.H. X XH.F.F.F.F.F.b.v.F.F.F.H. X XH.F.F.F.F.F.F.F.F.F.F.F.F.H. X XG.F.F.m.c.x.n.n.b.b.", 207 | "F.F.F.F.F.F.F.G.H.H.F.F.F.F.F.m.l.l.v.F.F.H.J.J.H.J.H.G.F.G.G.F.G.F.F.F.F.G.H.H.G.F.F.F.m.m.F.b.l.l.", 208 | "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.c.x.F.F.F.F.G.G.G.G.F.S.G.F.F.F.G.F.G.F.F.F.F.F.F.F.F.F.F.F.F.v.l.l.", 209 | "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.$.$.$.$.$.$.$.$.$.$.$.$.w.&.&.w.$.$.F.G.H.F.F.F.F.F.F.F.F.F.F.F.b.b.", 210 | "G.F.F.F.F.F.F.F.F.F.F.F.F.H.G.F.3 0 3 3 3 3 3 3 3 3 3 3 3 3 6 3 0 3 Y.J.F.F.F.F.F.F.F.G.H.H.G.F.F.F.", 211 | "H.F.F.F.F.F.F.F.F.F.F.F.F.F.P.w.P P U ` W W W ' ` ` ` ` ` ` ` ` Y P | Y.F.J.F.F.F.F.F.H. X XH.F.F.F.", 212 | "H.G.H.H.G.F.F.F.F.F.F.F.|.D.0 9 T ( <.5.5.5.5.5.g.g.h.5.5.5.5.5.,.T L 3 Z J.F.F.F.F.F.H. X XH.G.H.H.", 213 | "G.H. X XH.F.F.F.F.F.F.H.J.D.3 q _ ] 1.5.5.5.5.g.g.h.g.h.5.5.5.5.<.,.I 3 m S.F.F.F.F.F.G.H.H.G.H. X X", 214 | "F.H. X XH.F.F.F.F.F.G.F.D.|.0 e 4.5.5.5.5.5.g.5.5.5.g.h.h.5.5.5.5.5.W 0 n S.S.F.F.F.F.F.F.F.F.H. X X", 215 | "F.G.H.H.G.F.F.F.F.F.F.F. X!.9 e 5.5.5.5.5.5.h.f.5.g.h.g.h.5.5.5.5.4.W 9 n J.S.M.F.F.F.F.F.F.F.F.H.H.", 216 | "F.F.F.F.F.F.F.F.F.F.n.P.q e T E 4.5.5.5.5.5.h.f.f.g.5.5.g.5.5.5.4.5.<.T R q y M.n.n.n.F.F.F.F.F.F.F.", 217 | "F.F.F.F.F.F.F.F.F.n.c.%.4 9 E E 4.1.4.5.5.5.5.g.f.g.5.h.5.5.5.5.4.4.,.T R 4 4 M.c.c.n.F.F.F.F.F.F.F.", 218 | "F.F.F.F.F.F.F.F.F.m.v.J . $ T T ) E 1.4.5.5.5.5.h.h.g.5.5.5.5.5.,.E E E I X . n.x.c.m.F.F.F.F.F.F.F.", 219 | "F.F.F.F.F.F.F.F.F.F.n.J $ T T T T <.4.2.2.5.6.6.6.6.6.4.4.4.2.,.T T E I X n.n.n.F.F.F.F.F.F.F.F.", 220 | "F.F.F.F.F.F.F.D.J.H.H.J $ T T T T ) _ _ _ 3.}.&X&X&X(.,._ _ _ ) T T T I X H.G.D.G.D.F.F.F.F.F.F.", 221 | "F.F.F.F.F.F.F.G. X X XA $ T T T T T T E E *.*X=X=X=X(.E E T T T ( T T I X .XJ.G.G.F.F.F.F.F.F.F.", 222 | "F.F.b.b.F.F.F.D. XK J Z r t P Y ^.j.@.T 3.L.j.^.^.^.^.~.~.j.) T >.L.+.P e r r A J G.G.F.F.F.F.F.F.F.", 223 | "F.x.l.l.b.F.D.D.J.+ r 7.U 3 b +X+X;.T j.+X[.[ T T T j.+XE.[ E U.OXj.0 9 ..X.# . n.G.F.F.F.F.F.F.F.", 224 | "D.c.l.l.c.D.D.F.G.+ . u 7.{ $ 8 k.T.U.~.[.%X$X/.~.~.~.[.%X$X^.~.j.T.H $ 2 o.7.# M.G.F.F.F.F.F.F.F.", 225 | "F.F.b.v.F.v.z.x.F.+ . V t.} O g S oX=X=X=X=X=X=X=X-X-X-X=X=X-Xd.f ; o 9.t., M.F.F.F.F.F.F.F.F.", 226 | "F.F.D.D.F.F.x.x.D.J c Z { y # $ H H R.+XOXOXOXOXOXOXOXOXOXOXOXOXk.H j # & ^ } Z c S.M.G.H.H.G.F.F.F.", 227 | "G.F.F.D.F.F.F.F.F.G.J.A + b M ~.u.G g h g g g g l g g g g g l %.t.o.y w . W.J.G.F.H. X XH.F.F.F.", 228 | "H.G.H.H.G.F.F.F.n.m.S.c # ^ / t.t.&.D S s d F p.D D S s d D D :.t.O.^ n X n.H.G.F.H. X XH.G.H.H.", 229 | "G.H. X XH.F.G.b.l.^ n # 2 t.t.t.t.`.XX . > ).].].XX . , u.XX_.t.y.t.8.X z.b.G.F.G.H.H.G.H. X X", 230 | "F.H. X XH.F.F.F.v.^ n # , t.t.t.t.`.]. . , ).].].].o. , ).XXu.u.t.t.8.o z.b.F.F.F.F.F.F.H. X X", 231 | "F.G.H.H.H.G.n. .#.-.e.H d l B / t.t.t.u.o.w V _.].].}.r.r m r.u.y.t.=.B } H.m.m.n.F.F.F.F.F.F.G.H.H.", 232 | "F.F.F.F.F.H.F.m M r.t.G h l w n 9.8.0.r.o.N } _.].].XXq.M / -.r.9.8.} w C F.F.F.m.n.F.F.F.F.F.F.F.F.", 233 | "F.F.F.F.F.G.F.n M r.t.G g p X X + # 6 M | e.r.u.u.u.u.r.0.-.^ M 2 + o X > G.F.F.c.v.n.F.F.F.F.F.F.F.", 234 | "F.F.F.F.D.D.G.m V r.t.H h i 2 b } r.t.t.t.t.t.t.t.8.^ w # + J.H.F.x.F.m.F.F.F.F.F.F.F.", 235 | "F.F.F.F.F.D.J.$X!.r 5 > - ; i a 9 9 q q 6 5 5 5 5 5 5 5 5 w Y ~ j i i i a c x G.v.n.S.F.F.F.F.F.F.F.", 236 | "F.F.F.F.F.F.J.H.|.+ = g l T T P 3 $ % I T k h h h d . S.S.S.F.n.m.m.n.G.F.F.", 237 | "F.F.F.F.F.D.F.H. X XH.n.M.B.l k T T I P 9 1 4 x x x x j 1 3 P ~ &.j.j.j.&., & XJ.S.S.n.c.c.n.F.n.S.", 238 | "F.F.F.F.F.F.F.H. X XH.J.J.S.b n T T T T ( T [ E.+X+X+XL.T R N n y.XX].XX'.B n XJ.F.F.n.c.c.m.n.v.m.", 239 | "F.F.F.F.F.F.F.G.J.J.G.F.F.M.6 6 L L I T ) _ *.#X@X$X%XY._ ) N N q.'.'.'._.N n H.S.n.F.n.m.n.S.v.l.l.", 240 | "F.F.F.F.F.F.F.F.F.F.G.F.F.S. 0 T <.5.i.*X=X=X=X}.5.<.u N -.y.t.t.r.N n G.G.F.F.F.S.F.F.v.l.l.", 241 | "F.F.F.F.F.F.F.F.F.F.F.F.H.S. . : : w ~ ` Q O.!.Q.+XQ.Y.Q W w 7 | -.8.8.-.%.&.G.J.F.F.F.F.F.G.n.m.v.", 242 | "G.F.F.F.F.F.F.F.F.F.F.G.G.S. + C.C.a.g i 8 n n b C |.S.F.H.F.F.G.H.H.G.F.F.F.", 243 | "H.F.F.F.F.F.F.F.F.F.F.H.G.H.@ : Z.Z.a.z i . . . @ + 7 C B B #.S.M.F.F.F.n.H. X XJ.F.F.F.", 244 | "H.G.H.H.G.F.F.F.F.F.F.G.F.G.G.H.@ @ F C.Z.V.A.d d = < J.G.H.H.G.G.F.F.F.F.F.F.F.H. X XH.F.H.H.", 245 | "G.H. X XH.F.F.F.F.F.F.F.G.F.J.J. F C.C.C.A.p.g = < H.H. X XH.F.F.G.F.F.F.F.F.G.H.H.G.H. X X", 246 | "F.H. X XH.F.F.F.F.F.F.F.F.F.M.H. a p.p.p.z - = B.H.H.G.F.F.H. X XH.F.F.F.F.F.F.F.F.F.F.F.F.H. X X", 247 | "F.G.H.H.G.F.F.F.F.F.F.F.F.F.H.H.. @ i h z f p @ X W.H.G.G.G.G.G.H.J.G.F.F.F.F.F.F.F.F.F.F.F.F.G.H.H.", 248 | "F.F.F.F.F.F.F.F.G.n.n.m.M.F.F.F.F.H.x = O = < N.S.n.n.H.H.H.F.G.S.F.F.F.F.F.F.n.n.m.F.F.F.F.F.F.F.F.", 249 | "F.F.F.F.F.F.F.F.F.m.c.x.m.F.F.F.G.J.J < H.m.v.n.M.G.D.F.F.F.F.F.F.F.F.F.m.c.c.m.F.F.F.F.F.F.F.", 250 | "F.F.F.F.F.F.F.F.F.n.x.x.n.F.F.F.F.G.F.F.M.F.F.m.x.x.m.F.F.F.F.F.F.F.F.F.F.F.S.n.c.c.n.F.F.F.F.F.F.F.", 251 | "F.F.F.F.F.F.F.F.F.n.n.m.F.F.F.F.F.F.F.G.G.G.H.H.n.n.n.F.F.F.F.F.F.F.F.F.F.F.S.n.m.m.n.F.F.F.F.F.F.F.", 252 | "F.F.F.F.F.F.F.G.H.H.G.F.F.F.F.F.F.F.F.F.F.F.H.H.G.F.F.F.n.m.F.D.F.F.F.F.F.G.H.H.G.F.F.F.F.F.F.F.F.F.", 253 | "m.F.F.F.F.F.F.H. X XH.F.F.F.F.F.F.F.F.F.F.H. X XH.F.F.m.x.x.m.F.F.F.F.F.F.G. X XH.F.F.F.F.F.F.F.F.F." 254 | }; 255 | -------------------------------------------------------------------------------- /so_long/img/npcrightmv.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 200 2 ", 5 | " c #000000", 6 | ". c #0C0A09", 7 | "X c #110B0A", 8 | "o c #190F0F", 9 | "O c #1D190D", 10 | "+ c #16100E", 11 | "@ c #0A0A12", 12 | "# c #1A1A1A", 13 | "$ c #11171B", 14 | "% c #2B1918", 15 | "& c #391C1A", 16 | "* c #2B2519", 17 | "= c #111122", 18 | "- c #171E25", 19 | "; c #292626", 20 | ": c #372320", 21 | "> c #272736", 22 | ", c #333433", 23 | "< c #3B3B3D", 24 | "1 c #45201F", 25 | "2 c #442928", 26 | "3 c #442827", 27 | "4 c #5F2C2A", 28 | "5 c #563433", 29 | "6 c #632E2C", 30 | "7 c #6D312E", 31 | "8 c #62302E", 32 | "9 c #70312E", 33 | "0 c #78322F", 34 | "q c #643332", 35 | "w c #6B3E3C", 36 | "e c #663B39", 37 | "r c #743934", 38 | "t c #5F4731", 39 | "y c #6E403E", 40 | "u c #6D5536", 41 | "i c #2D2D5C", 42 | "p c #2D2D4A", 43 | "a c #363669", 44 | "s c #383974", 45 | "d c #2E2F60", 46 | "f c #4A3658", 47 | "g c #443C67", 48 | "h c #3D417A", 49 | "j c #4F4D4D", 50 | "k c #545856", 51 | "l c #534E4E", 52 | "z c #6F4341", 53 | "x c #6B4F4E", 54 | "c c #714542", 55 | "v c #734A49", 56 | "b c #764A46", 57 | "n c #7E514A", 58 | "m c #785443", 59 | "M c #7E5B5C", 60 | "N c #7E6956", 61 | "B c #4C476A", 62 | "V c #5D537B", 63 | "C c #514974", 64 | "Z c #644C64", 65 | "A c #6C576D", 66 | "S c #556960", 67 | "D c #636363", 68 | "F c gray43", 69 | "G c #7D6B65", 70 | "H c #76777A", 71 | "J c #65716C", 72 | "K c #8D3936", 73 | "L c #873A36", 74 | "P c #903A37", 75 | "I c #9C3E3A", 76 | "U c #913733", 77 | "Y c #9C4B3D", 78 | "T c #97433C", 79 | "R c #88403D", 80 | "E c #AF433E", 81 | "W c #A6413C", 82 | "Q c #B2453F", 83 | "! c #A4573E", 84 | "~ c #93783D", 85 | "^ c #8E763D", 86 | "/ c #973E40", 87 | "( c #894549", 88 | ") c #83544B", 89 | "_ c #8A5C4B", 90 | "` c #895A53", 91 | "' c #9A4148", 92 | "] c #AC4B49", 93 | "[ c #B44A41", 94 | "{ c #B84B42", 95 | "} c #AF504F", 96 | "| c #BA5149", 97 | " . c #AA585B", 98 | ".. c #886344", 99 | "X. c #84655B", 100 | "o. c #9B6757", 101 | "O. c #9D7456", 102 | "+. c #937747", 103 | "@. c #A16A57", 104 | "#. c #A4765E", 105 | "$. c #AA6743", 106 | "%. c #976B67", 107 | "&. c #86756E", 108 | "*. c #9D7E7D", 109 | "=. c #8C6E6F", 110 | "-. c #AF646A", 111 | ";. c #AB7B63", 112 | ":. c #A97766", 113 | ">. c #B17D68", 114 | ",. c #B06D74", 115 | "<. c #C35445", 116 | "1. c #C95948", 117 | "2. c #DB6A4F", 118 | "3. c #DF6D50", 119 | "4. c #CF6250", 120 | "5. c #E06D50", 121 | "6. c #E47152", 122 | "7. c #998644", 123 | "8. c #A48B46", 124 | "9. c #AB9249", 125 | "0. c #B29949", 126 | "q. c #B2964E", 127 | "w. c #BF9E5C", 128 | "e. c #A88455", 129 | "r. c #BEA450", 130 | "t. c #99837F", 131 | "y. c #8D877E", 132 | "u. c #A78367", 133 | "i. c #BD866C", 134 | "p. c #B6836A", 135 | "a. c #B88C73", 136 | "s. c #BC9279", 137 | "d. c #CBB55C", 138 | "f. c #C38C72", 139 | "g. c #CC9375", 140 | "h. c #C79779", 141 | "j. c #C99275", 142 | "k. c #E6CB68", 143 | "l. c #EDD36B", 144 | "z. c #F2D86E", 145 | "x. c #5F749F", 146 | "c. c #515287", 147 | "v. c #837C82", 148 | "b. c #BB7F86", 149 | "n. c #708B80", 150 | "m. c #43AE80", 151 | "M. c #55B78E", 152 | "N. c #57B88F", 153 | "B. c #5AB991", 154 | "V. c #61BA95", 155 | "C. c #6BBE9B", 156 | "Z. c #67BE99", 157 | "A. c #7A9DBB", 158 | "S. c #7698B4", 159 | "D. c #6FC09F", 160 | "F. c #71C19F", 161 | "G. c #6FC0A0", 162 | "H. c #72C1A2", 163 | "J. c #78C3A6", 164 | "K. c #7DC5A9", 165 | "L. c #838685", 166 | "P. c #9C9392", 167 | "I. c #A78988", 168 | "U. c #AB8B96", 169 | "Y. c #AF9695", 170 | "T. c #B69F9E", 171 | "R. c #B095A9", 172 | "E. c #B09CB2", 173 | "W. c #B8A8B9", 174 | "Q. c #B2AEAF", 175 | "!. c #95BAAB", 176 | "~. c #E49F94", 177 | "^. c #D4A382", 178 | "/. c #DAAB87", 179 | "(. c #DDB08B", 180 | "). c #CEA181", 181 | "_. c #E0AE89", 182 | "`. c #E2B18B", 183 | "'. c #E6BA93", 184 | "]. c #E6A69B", 185 | "[. c #C5B5B8", 186 | "{. c #D6B6BF", 187 | "}. c #CC8F92", 188 | "|. c #84C9AE", 189 | " X c #81C7AB", 190 | ".X c #8CC9B2", 191 | "XX c #91CFB7", 192 | "oX c #EEC297", 193 | "OX c #B0ABC6", 194 | "+X c #B0B0CD", 195 | "@X c #AAAAC6", 196 | "#X c #C8BDC8", 197 | "$X c #C6BAC5", 198 | "%X c #D7BFCA", 199 | "&X c #B3CFC4", 200 | "*X c #D6CECC", 201 | "=X c #C8CDD5", 202 | "-X c #D1D1E6", 203 | ";X c #E3DAE7", 204 | ":X c #E8E8F7", 205 | /* pixels */ 206 | "G.G.G.G.G.G.G.H.J.J.H.G.G.G.G.G.G.G.G.G.G.H.J.J.H.G.G.G.G.G.G.G.G.G.G.G.G.H.J.J.H.G.G.D.Z.C.C.G.G.G.", 207 | "G.G.G.G.G.G.G.J..X.XJ.G.G.G.G.D.G.G.G.G.G.J..X.XJ.G.G.G.G.G.G.G.G.G.G.G.G.J..X.XJ.G.D.D.M.M.C.D.G.G.", 208 | "G.G.G.G.G.G.G.J..X.XJ.G.G.G.G.D.V.V.D.D.G.J..X.XJ.G.G.G.G.G.G.G.G.G.G.G.G.J..X.XH.D.D.D.M.M.Z.D.B.V.", 209 | "G.G.G.G.G.G.G.H.J.J.H.G.G.G.G.V.m.m.B.D.G.H.J.J.H.G.G.G.G.G.G.G.G.G.G.G.G.H.J.J.G.D.D.D.C.Z.C.Z.m.m.", 210 | "G.G.G.G.G.G.G.G.D.G.G.H.F.D.D.V.m.m.Z.D.C.C.G.H.F.F.F.F.G.H.K.J.J.D.D.G.G.G.G.G.G.G.G.G.G.G.G.B.m.m.", 211 | "G.G.G.G.G.G.G.G.D.H.H.H.D.y.&.&.&.&.&.&.G &.&.&.&.&.&.&.&.&.&.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.D.V.V.", 212 | "H.G.G.G.G.G.G.G.D.K.F.F.=Xy 4 4 6 4 4 4 8 4 4 4 6 4 4 4 4 4 8 P.D.D.H.D.G.G.G.G.G.G.G.G.J.J.H.G.G.G.", 213 | "J.G.G.G.G.G.G.G.D.F.F.T.Y.R L Y Y Y Y Y Y Y Y Y Y Y Y Y T L L %.T.[.H.H.G.G.G.G.G.G.G.J..X.XJ.G.G.G.", 214 | "J.H.J.J.H.G.G.G.G.H.*.4 7 W Q 2.6.6.6.6.6.6.6.6.6.6.6.6.2.{ Q K 6 ` J.H.H.G.G.G.G.G.G.J..X.XJ.H.J.J.", 215 | "H.J..X.XJ.G.G.G.G.G.t.4 7 Q <.3.6.6.6.6.6.6.6.6.6.6.6.6.5.<.{ T 0 ` *X*XH.G.G.G.G.G.G.H.J.J.H.J..X.X", 216 | "G.J..X.XJ.G.G.G.H.C.t.6 r 2.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.1.E I 4 q W.J.H.G.G.G.G.G.G.G.G.J..X.X", 217 | "G.H.J.J.H.G.G.G.G.J.t.6 0 2.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.4.} ' 4 q [.|.H.D.G.G.G.G.G.G.G.H.J.J.", 218 | "G.G.G.G.G.G.G.K.&.w T W [ 3.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.~.;X[.4 6 e y T. XC.Z.C.G.G.G.G.G.G.G.", 219 | "G.G.G.G.G.G.G.|.M 6 P E [ 3.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.].:X#X4 4 6 6 Y.F.N.N.C.G.G.G.G.G.G.G.", 220 | "G.G.G.G.G.G.G.J.M 4 K Q [ { | 3.6.6.6.6.6.6.6.6.6.6.6.6.6.<.<.}.:X#X6 8 I.*Xv.p n.N.C.D.G.G.G.G.G.G.", 221 | "G.G.G.G.G.G.G.H.G 8 K E E E Q 2.6.6.6.6.6.6.6.6.6.6.6.6.5.Q E }.:X$X4 8 Q.:XH S C.C.D.G.G.G.G.G.G.", 222 | "C.G.G.G.G.G.G.J.G 4 U E E E E <.1.1.1.1.1.1.1.1.1.1.1.1.<.Q Q b.-XW.K K $X:X&. k F.F.H.G.G.G.G.G.G.", 223 | "C.G.G.H.G.G.G. XX.4 U E E E E E E E E E E E E E E E E E E E [ ,.+XR.E [ %X:Xx. l H.G.D.G.G.G.G.G.G.", 224 | "C.C.V.V.C.G.G.K.x 1 0 I I E E E E E E E E E Q E E E E E E E E -.R.U.-.-.%X:XF k H.G.G.G.G.G.G.G.G.", 225 | "C.V.m.m.B.G.G.J., & 6 7 W E E E E E E E E E E E E E E E E E [ [ .+X+X-X:XH k H.G.G.G.G.G.G.G.G.", 226 | "G.B.m.m.V.C.C.C., & 8 7 I ] W W E E Q E E E E E E E E [ ] } } } -.+X+X=X=XH # J H.G.G.G.G.G.G.G.G.", 227 | "G.G.V.V.C.C.M.N., 2 z w 8 6 6 6 K E E E E E E E E E E ] E.OXOXOXOX+X@Xf @ v.K.J.G.G.G.G.G.G.G.G.G.", 228 | "H.G.H.G.G.C.N.B., 2 c w 6 4 4 6 K Q E E E E E E E E E } E.+X+X+X+X+X@X, v.G.H.G.G.H.J.J.H.G.G.G.", 229 | "J.G.G.G.G.C.C.J., 2 z c w w w w 7 9 9 9 9 9 9 9 9 9 9 9 z x Z c.V M M Q.C.H.G.H.G.G.J..X.XJ.G.G.G.", 230 | "J.H.J.J.H.G.G.|., 2 c c c c z z q 4 4 4 6 4 4 8 4 6 6 4 6 6 f s g v v J.C.V.C.G.G.G.J..X.XJ.H.J.J.", 231 | "H.J..X.XJ.G.J.G.m.P.l * : w b o.:.p.p.:.e q o.@.o.-.) % % _ @.o.=.X.z v J.V.m.m.V.G.G.H.J.J.H.J..X.X", 232 | "G.J..X.XJ.G.J.J.D.B.D X w b i.g./.oX(.y c f.g.j.g.#.. + p.g.g.g.i.y x H.V.m.m.V.G.G.G.G.G.G.J..X.X", 233 | "G.H.J.J.G.G.G.C.Z.D.D.j j 2 5 p.g.(.oX`._ ` f.g.h.^.p.% : j.g.j.>.:.t.I.H.C.V.V.C.G.G.G.G.G.G.G.J.J.", 234 | "G.G.G.G.G.G.G.G.D.D.D.F.C.O X #.g._.oX'.g.g.g.g.(.oX^.v m (.oXa.z =.K.H.H.G.G.C.Z.Z.C.G.G.G.G.G.G.G.", 235 | "G.G.G.G.G.G.G.G.D.D.B.N.C.* * #.f.h././.g.g.g.g.^.'.^.) _ ).(.a.M b.H.H.H.G.G.Z.N.M.C.G.G.G.G.G.G.G.", 236 | "G.G.G.G.G.G.G.G.F.F.D % 7.9.) c c c ) g.g.g.g.g.g.g.g.i.n z Y.H.|.H.G.G.G.G.C.M.M.Z.G.G.G.G.G.G.G.", 237 | "G.G.G.G.G.G.H.K. XK.D O 8.9.m y c y ) g.g.g.g.g.g.g.g.f.n z Y.G.H.G.G.H.H.G.C.C.Z.G.H.G.G.G.G.G.G.", 238 | "G.G.G.G.J.G.H.J.k , +.d.d.k.k.9.8...c y r r B C Z ) ) ( u # X H |.H.F.C.G.H.J.J.H.G.G.G.C.C.C.D.G.G.", 239 | "G.G.G.H.H.G.H.J., 7.z.z.z.l.r.0...c w 4 8 a s f c z c y X F K.J.H.H.G.J..X.XJ.G.G.C.M.M.C.G.G.C.", 240 | "G.G.G.G.G.G.H.J., t O.e.k.l.r.0.$.T ( g f s s g B Z s.s.u.u.N k H H.D.G.J..X.XJ.G.G.C.M.M.Z.C.V.V.", 241 | "G.G.G.G.G.G.G.J., 2 z ..k.l.r.0.$.E ' s s s s s s V '.oXoXoXX. < H.G.G.H.J.J.H.G.G.C.C.C.C.V.m.m.", 242 | "G.G.G.G.G.G.G.H., t ....r.w.+.+.] E P p p s s s s V /._._.`.N < H.H.G.G.G.G.G.G.G.G.D.G.G.V.m.m.", 243 | "G.G.G.G.G.G.G.H., u 0.9.b z q 4 K E K d s s s V f.g.g.h.m < H.G.G.G.G.G.G.G.G.G.G.G.G.C.V.V.", 244 | "H.G.G.G.G.G.G.H.k , u ~ +.m m e 5 ( .( - - i i d d B >.i.:.#.m , D H.G.G.G.G.G.G.G.G.H.J.J.H.G.G.G.", 245 | "J.G.G.G.G.G.G.H.H.F.D O 8.9.B s x.A.A.A.A.$ o e e . F F.F.H.D.G.G.G.G.G.G.G.J..X.XJ.G.G.G.", 246 | "J.H.J.J.H.G.G.G.H.H.D O 7.9.B s x.A.A.A.S.$ o e e + . H K.J.H.G.K.H.G.G.G.G.G.J..X.XJ.H.J.J.", 247 | "H.J..X.XJ.G.G.G.H.G.D @ B B s s h h h $ $ X ; K.J.J..X.XJ.G.H.G.G.G.G.G.G.H.J.J.H.J..X.X", 248 | "G.J..X.XJ.G.G.G.D.G.D @ d s s s s s d # G.G.J..X.XJ.G.C.G.G.G.G.G.G.G.G.G.G.J..X.X", 249 | "G.H.J.J.H.G.G.G.G.K.J.Q.P.> = = = = = , !.C.V.V.C.H.G.C.G.J.H.H.J.J.H.J.H.H.G.H.G.G.G.G.G.G.G.H.J.J.", 250 | "G.G.G.G.G.G.G.G.C.G.Z.F.&X$ , XXK.H.H.C.C.H.H.G.G.G.C.G.G.G.H.H.G.G.G.Z.Z.C.G.G.G.G.G.G.G.", 251 | "G.G.G.G.G.G.G.G.H.C.M.M.G.n.F F F F F L.J.G.G.C.B.M.C.H.G.G.H.H.G.G.G.G.G.H.K.C.M.N.C.G.G.G.G.G.G.G.", 252 | "G.G.G.G.J. X XJ.H.C.M.M.H.J.K.J.J.H.H.H.H.H.H.C.N.M.C.C.G.G.G.G.G.G.G.G.H.H.H.C.M.M.Z.G.G.G.G.G.G.G.", 253 | "G.G.G.G.G.H.H.J.J.C.C.Z.G.H.H.H.G.H.G.G.G.G.G.C.C.C.C.G.G.G.G.G.G.G.G.G.G.G.G.C.Z.Z.G.G.G.G.G.G.G.G.", 254 | "G.G.G.G.G.G.G.H.J.J.H.G.G.G.G.G.G.G.G.G.G.H.J.J.H.G.G.C.C.C.C.H.G.G.G.G.G.H.J.J.H.G.G.G.G.G.G.G.G.G.", 255 | "Z.G.G.G.G.G.G.J..X.XJ.H.G.G.G.H.G.G.G.G.G.J..X.XJ.G.G.C.M.M.C.C.G.G.G.G.G.J..X.XJ.G.G.K.G.G.G.G.G.G." 256 | }; 257 | -------------------------------------------------------------------------------- /so_long/img/enemymv.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 203 2 ", 5 | " c #000000", 6 | ". c #0B0603", 7 | "X c #0A0807", 8 | "o c #150B06", 9 | "O c #1B0E08", 10 | "+ c #100E0E", 11 | "@ c #10120D", 12 | "# c #151107", 13 | "$ c #0A0E11", 14 | "% c #2E1A0E", 15 | "& c #26140A", 16 | "* c #241A11", 17 | "= c #371D12", 18 | "- c #3B1E11", 19 | "; c #331B0D", 20 | ": c #21231B", 21 | "> c #2A261B", 22 | ", c #372919", 23 | "< c #342B13", 24 | "1 c #131D22", 25 | "2 c #313130", 26 | "3 c #502D0C", 27 | "4 c #59320D", 28 | "5 c #4A2616", 29 | "6 c #432615", 30 | "7 c #502918", 31 | "8 c #5C2F1B", 32 | "9 c #5D3511", 33 | "0 c #5D311C", 34 | "q c #533516", 35 | "w c #482C0D", 36 | "e c #633612", 37 | "r c #673A13", 38 | "t c #6B3B15", 39 | "y c #603F19", 40 | "u c #6D3A1A", 41 | "i c #723D1B", 42 | "p c #47392D", 43 | "a c #593A28", 44 | "s c #413F39", 45 | "d c #6A3720", 46 | "f c #763D23", 47 | "g c #75421A", 48 | "h c #7D431D", 49 | "j c #714A19", 50 | "k c #414635", 51 | "l c #4C4C37", 52 | "z c #5A463C", 53 | "x c #4B513D", 54 | "c c #684B25", 55 | "v c #644629", 56 | "b c #7C4123", 57 | "n c #7A442C", 58 | "m c #6B552A", 59 | "M c #7C5428", 60 | "N c #6F5831", 61 | "B c #6E593A", 62 | "V c #7C503B", 63 | "C c #775F38", 64 | "Z c #6C4536", 65 | "A c #77643D", 66 | "S c #7D662C", 67 | "D c #363E41", 68 | "F c #38454B", 69 | "G c #304756", 70 | "H c #394751", 71 | "J c #354D5A", 72 | "K c #3C515B", 73 | "L c #37525E", 74 | "P c #2B404D", 75 | "I c #3E5C66", 76 | "U c #3A5762", 77 | "Y c #464546", 78 | "T c #564A48", 79 | "R c #525843", 80 | "E c #515548", 81 | "W c #474D53", 82 | "Q c #47595D", 83 | "! c #565653", 84 | "~ c #755848", 85 | "^ c #6C5C4E", 86 | "/ c #7F724A", 87 | "( c #626950", 88 | ") c #68625A", 89 | "_ c #787A59", 90 | "` c #7B6B43", 91 | "' c #455D62", 92 | "] c #47646A", 93 | "[ c #536664", 94 | "{ c #5D736D", 95 | "} c #476D72", 96 | "| c #4D7779", 97 | " . c #527F7F", 98 | ".. c #6A7B6E", 99 | "X. c #7B7F68", 100 | "o. c #824325", 101 | "O. c #8B4A22", 102 | "+. c #854428", 103 | "@. c #8D4A2B", 104 | "#. c #88482B", 105 | "$. c #944C2B", 106 | "%. c #934D27", 107 | "&. c #9B512C", 108 | "*. c #93552A", 109 | "=. c #884C33", 110 | "-. c #9D593C", 111 | ";. c #975535", 112 | ":. c #A5552E", 113 | ">. c #A1592C", 114 | ",. c #A45430", 115 | "<. c #AE5A31", 116 | "1. c #B85E35", 117 | "2. c #B05B33", 118 | "3. c #946A2A", 119 | "4. c #8D6132", 120 | "5. c #AC6133", 121 | "6. c #BD6137", 122 | "7. c #BA663A", 123 | "8. c #BC6839", 124 | "9. c #A07932", 125 | "0. c #C16539", 126 | "q. c #C56B3C", 127 | "w. c #CC6D3E", 128 | "e. c #CB703C", 129 | "r. c #D0713F", 130 | "t. c #875641", 131 | "y. c #857D55", 132 | "u. c #8D6952", 133 | "i. c #BE7657", 134 | "p. c #B26743", 135 | "a. c #AA7A63", 136 | "s. c #CF7241", 137 | "d. c #C6754A", 138 | "f. c #D47341", 139 | "g. c #D97743", 140 | "h. c #DD7945", 141 | "j. c #D57948", 142 | "k. c #C77E57", 143 | "l. c #CC7749", 144 | "z. c #E27C46", 145 | "x. c #E67F48", 146 | "c. c #798D76", 147 | "v. c #59AA7E", 148 | "b. c #7CA57D", 149 | "n. c #6DA27E", 150 | "m. c #B9923E", 151 | "M. c #AC8739", 152 | "N. c #8B875F", 153 | "B. c #BD9A43", 154 | "V. c #8B8E66", 155 | "C. c #978460", 156 | "Z. c #809271", 157 | "A. c #8D8B74", 158 | "S. c #AC8573", 159 | "D. c #C69944", 160 | "F. c #E58758", 161 | "G. c #D0A94A", 162 | "H. c #D5B154", 163 | "J. c #DAB95E", 164 | "K. c #D9B65B", 165 | "L. c #D4AF52", 166 | "P. c #CA8863", 167 | "I. c #E39775", 168 | "U. c #DDBD64", 169 | "Y. c #DFC068", 170 | "T. c #E7CD79", 171 | "R. c #E5CA75", 172 | "E. c #EAD17E", 173 | "W. c #E2C56E", 174 | "Q. c #5F888B", 175 | "!. c #42AE80", 176 | "~. c #55B78E", 177 | "^. c #50AC80", 178 | "/. c #7CAC89", 179 | "(. c #7FB18D", 180 | "). c #61BA95", 181 | "_. c #6BBE9B", 182 | "`. c #7BB593", 183 | "'. c #75BC9B", 184 | "]. c #7AB998", 185 | "[. c #76BA97", 186 | "{. c #7DBEA0", 187 | "}. c #6FC0A0", 188 | "|. c #72C1A2", 189 | " X c #78C3A6", 190 | ".X c #908B88", 191 | "XX c #A29995", 192 | "oX c #81A580", 193 | "OX c #84A883", 194 | "+X c #80AB8C", 195 | "@X c #82B595", 196 | "#X c #A0A0A0", 197 | "$X c #95ACBA", 198 | "%X c #D09C89", 199 | "&X c #DFAC9F", 200 | "*X c #E0A38D", 201 | "=X c #D0ACA4", 202 | "-X c #8EC3AA", 203 | ";X c #8CC9B2", 204 | ":X c #D3C1CF", 205 | ">X c #DBC6D3", 206 | ",X c #D8CFE5", 207 | ".4 Z.}.}.}.}.}. XN j r.e.w B }.}.}.}.}.}.}.}.}. X;X;X X}.}.}.", 217 | " X|. X X|.}.}.}.}.}.}.}.}.}.}.`.# % x.>.y Z.).)._.|.|. XN e g.8. k |.}.}.}.}.}.}.}.}. X;X;X X|. X X", 218 | "|. X;X;X X}.}.}.}.}.}.}.}.}.}.@X@ % x.>.4 u.C.C.C.C.C.C.c t g.7. k X}.}.}.}.}.}.}.}.|. X X|. X;X;X", 219 | "}. X;X;X X}.}.}.}.}.}.}.}.}.}.@X@ % z.>.4 b +.+.+.+.+.+.r e g.7. k X_.}.}.}.}.}.}._.}.}.}.}. X;X;X", 220 | "}.'. X@Xc c c c N '.(.c c c (.`.@ % F.g.e.j t w.f.f.>.e <.e.F.7. k X` c c C }.V.c c c c A }.|. X X", 221 | "}.}.}.OX4 4 4 4 9 '.OX4 4 4 OX`.@ % F.z.x.g r g.x.x.2.4 8.F.z.1. k }.N 4 4 c _.y.4 4 4 9 c }.}.}.}.", 222 | "|.'.y t 2.7.1.1.<.r t 1.O.4 OX`.@ & 1.e.z.&.%.g.x.F.8.+.q.z.6.%. k }.N e <.,.4 h 1.1.1.2.:.4 A }.}.", 223 | "(.V.c b -.-.-.-.;.u g 1.O.4 oX`.& ; 1.e.x.:.&.h.x.x.q.%.e.z.6.%.o l }.N e <.,.e b -.-.-.-.;.t A /.}.", 224 | "c e 2.,.G G G G H n @.2.O.4 OX[.j t 1.r.x.0.6.h.x.x.r.6.r.z.0.:.4 A }.N e 2.<.o.Z G G G G T 1.*.4 y.", 225 | "c 0 V ^ I I I I ' ^ ~ ,.f 4 OX'.9 e ,.q.x.r.w.x.x.x.r.r.z.z.:.%.4 A _.N e &.;.~ ! I I I I Q t.n 9 y.", 226 | "c q D G . . . . . ...+.i 4 OX'.y 9 +.7.x.x.x.x.x.x.x.x.x.z.$.b 4 A |.N 9 o.V .c.| | Q. .| G 2 9 y.", 227 | "/.OX/.c.L } . . . .{ +.o.f , = i O.f.h.x.x.x.x.x.x.x.x.x.z.f.0.f a * d f +.V . . . .| U ] /.(.OX'.", 228 | "}.).!./.G I . . . .{ +.+.#.O . f &.z.F.x.x.x.x.x.x.x.x.x.x.x.f.#.7 8 #.+.V . .| Q.| J Q |.}._._.", 229 | "}.).!.!._...G | | J G G z +.O o ,.k.Xx.@. 8 f H G G G G G L {. X}.}.}.}.", 232 | " X}.}.}._...G G G G G G H T + # s.F.*Xa.I p.w.z.x.x.j.s.) ] %XI.x.@. 2 T J G G G G G L -X;X X}.}.}.", 233 | " X|. X X|...G G J G G G G G $ # f.x.z.u.G -.6.z.x.x.f.1.T W j.x.F.O. 2 G G G G G G G K -X;X X X X X", 234 | "|. X;X;X X'././.c.J G G G G a d g O.x.j.d.j.h.x.x.x.z.h.l.d.z.s.g u u Y G G G G [ +X/.`. X X}. X;X;X", 235 | "}. X;X;X X X_._.v.L G G G G Z b 4 g x.x.x.x.x.x.x.x.x.x.x.x.x.s.4 u +.T G G G G { '.}.}.}.}.}. X;X;X", 236 | "}.|. X X_._._._.).)._.}.c.P G D X & 1.w.x.x.x.x.x.x.x.x.x.x.1.@. 1 G G L _.).)._._.}.}.}.}._. X X X", 237 | "}.}.}.}. X X_.|.}._._._.c.Q F F * - $.6.x.h.h.x.x.x.z.g.x.h.&.f & > F W [ _._._._._._._.}.}.}.}.}.}.", 238 | "}.}.}.}._._._.|.}._.~.~._.'.c e <.$. f x.6.6.z.x.x.f.1.j.s.O & 1.O.4 V.{._. X_.~.~._. X}.}.}.}.}.}.", 239 | "}.}.}.}.}.}.|.|.}._.~.~._._.c e q.0.d +.@.a.a.s.w.w.i.S.-.%.f +.r.>.4 A.|._.|._.~.)._._.}.}.}.}.}.}.", 240 | "}.}.}.}.}.|.|._.}._._._._.}.c r g.h.2.O.4 .X#X7.1.1.a.#XB e 2.6.F.<.4 Z.|.|._._._._._._.}.}.}.}.}.}.", 241 | "}.}.}.}.}.}.}.|. X X}.}.( : 5.s.0.<.t 3.m.M v % & & , c 9.M.g g 0.q.w.a 2 '. X X|.}.}._._._._.}.}.}.", 242 | "}.}.}.}.}.}.}. X;X;X X}.E 7.h.0.>.4 3.G.j 3 . & 4 M.D.g r 1.w.F.6 $ @X;X;X X}.}._.~.~._.}.}.}.", 243 | "}.}.}.}.}.}.}. X;X;X X}.R @.<.e j G.U.E.L.G.G.G.G.G.G.W.T.G.m.4 o.2.; > ;X X}.}._.~.~._._.).).", 244 | "}.}.}.}.}.}.}.|. X X'.) z 5 o.O.t M G.Y.E.Y.K.J.J.J.J.J.R.T.L.B.t i %.e 6 X : X|.}.}.'._._._.).!.!.", 245 | "}.}.}.}.}.}.}.}.}.}.Z. 0 2.r 4 o.*.G.Y.E.E.E.E.E.E.E.E.E.T.G.D.+.i 4 &.:.o : _.}.}.}.}.}.}.}.).!.!.", 246 | "}.}.}.}.}.}.}.}.}.}.Z. 0 6.&.%.&.5.G.H.J.T.E.E.E.E.E.E.Y.J.L.D.:.&.%.&.O.. : _.}.}.}.}.}.}.}._.).).", 247 | "|.}.}.}.}.}.}.}.}.}.Z. 8 1.6.6.6.8.G.G.G.R.E.E.E.E.E.E.K.G.G.D.1.1.1.$.f . * _.}.}.}.|. X X|.}.}.}.", 248 | " X}.}.}.}.}.}.}.}.}.Z. 5 @.<.1.7.&.% S G.L.H.H.L.L.H.H.G.D.< w 1.1.1.5 % X./.'.}.}.}. X;X;X X}.}.}.", 249 | " X|. X X}.}.}.}.}.}.Z. 6 +.<.1.1.$. c G.G.G.G.G.G.G.G.G.B.# & 1.1.1.< @ `.}.}.}.}.}. X;X;X X|. X X", 250 | "|. X;X;X|.}.}.}.}.}.}.}.R d +.+.+.+.6 M.G.G.G.G.G.G.< X b o.+.+.+.& @ `.}.}.}.}.}.|. X X|. X;X;X", 251 | "}. X;X;X X}.}.}.}.}.}.}.! ~ u.#.=.u.p M 9.9.9.9.9.9.q & 5 7 7 7 7 p x '.}.}.}.}.}.}.}.}.}. X;X;X", 252 | "}.|. X X|.}.}.}.}.}.}.}.E X.XX=.t.#X! w 4 4 4 4 4 4 4 3 . _ }.}.}.}.}.}.}.}.}.}.}.|. X X", 253 | "}.}.}.}.}.}.}.}.}._._._.c.( Y k , , s E ( _ / N.N.N./ N.N._ ( ( ( ( ( (.}.}.}._._._.}.}.}.}.}.}.}.}.", 254 | "}.}.}.}.}.}.}.}.}._.~.~._.}.: R }.}.}._.^.~.)._.}.}.'.}._.|.|._.}.}.}._.~.~._.}.}.}.}.}.}.}.", 255 | "}.}.}.}.}.}.}.}.}._.~.~._.}.Z.Z.Z.Z.c.`.}.}.}._.~.~._._.}.}.}.}.}.}._.|.}.}.}._.~.~._.}.}.}.}.}.}.}.", 256 | "}.}.}.}.}.}.}.}.}._._._.}.}.|.|.}.}.}.}.}.}.}._._._.'.}.}.}.}.}.}.|._.|.}.}.}._.)._._.}.}.}.}.}.}.}.", 257 | "}.}.}.}.}.}.}.}. X X|.}.}.}.}.}.}.}.}.}.}.|. X X|.}.}._._._._.}.}.}.}.}.}.|. X X|.}.}.}.}.}.}.}.}.}.", 258 | "_.}.}.}.}.}.}. X;X;X X}.}.}.}.}.}.}.}.}.}. X;X;X X}.}._.~.~._.}.}.}.}.}.}. X;X;X X}.}.}.}.}.}.}.}.}." 259 | }; 260 | -------------------------------------------------------------------------------- /so_long/img/imgexit.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 203 2 ", 5 | " c #010101", 6 | ". c #090704", 7 | "X c #0C0B06", 8 | "o c #0C0C0B", 9 | "O c #110E07", 10 | "+ c #120F0A", 11 | "@ c #14120B", 12 | "# c #19150D", 13 | "$ c #1D180D", 14 | "% c #141413", 15 | "& c #1B1A16", 16 | "* c #1C1B1B", 17 | "= c #1C1710", 18 | "- c #231D0D", 19 | "; c #251E12", 20 | ": c #1A241C", 21 | "> c #28220F", 22 | ", c #252213", 23 | "< c #2A2311", 24 | "1 c #23231C", 25 | "2 c #362D17", 26 | "3 c #3B3118", 27 | "4 c #252524", 28 | "5 c #2B2B2B", 29 | "6 c #2B2B23", 30 | "7 c #382E20", 31 | "8 c #313126", 32 | "9 c #3C3B2D", 33 | "0 c #36392C", 34 | "q c #2C3D32", 35 | "w c #3B3C3B", 36 | "e c #363934", 37 | "r c #2E372B", 38 | "t c #493E1D", 39 | "y c #43391B", 40 | "u c #423F30", 41 | "i c #463C21", 42 | "p c #3A4738", 43 | "a c #4E411F", 44 | "s c #4B442C", 45 | "d c #5B4B25", 46 | "f c #4E4C3D", 47 | "g c #474839", 48 | "h c #544A35", 49 | "j c #585437", 50 | "k c #604F27", 51 | "l c #68562B", 52 | "z c #705D2D", 53 | "x c #604F34", 54 | "c c #63543C", 55 | "v c #6A5A3D", 56 | "b c #715D38", 57 | "n c #75622D", 58 | "m c #7C692F", 59 | "M c #69633D", 60 | "N c #7B6838", 61 | "B c #3F5342", 62 | "V c #4A4B49", 63 | "C c #434744", 64 | "Z c #504F4B", 65 | "A c #475548", 66 | "S c #5B594E", 67 | "D c #565547", 68 | "F c #4F5A53", 69 | "G c #575F54", 70 | "H c #695E44", 71 | "J c #715C40", 72 | "K c #5A6859", 73 | "L c #54715E", 74 | "P c #6C654D", 75 | "I c #7D6A4C", 76 | "U c #756749", 77 | "Y c #7F734B", 78 | "T c #686D57", 79 | "R c #666754", 80 | "E c #736F54", 81 | "W c #6D735B", 82 | "Q c #77795A", 83 | "! c #5C7666", 84 | "~ c #517264", 85 | "^ c #617461", 86 | "/ c #667A66", 87 | "( c #787F63", 88 | ") c #826D36", 89 | "_ c #887136", 90 | "` c #8C743B", 91 | "' c #957C3C", 92 | "] c #826D4C", 93 | "[ c #886F4D", 94 | "{ c #8A7646", 95 | "} c #8E7C47", 96 | "| c #84734A", 97 | " . c #8B724E", 98 | ".. c #8D7C4B", 99 | "X. c #827546", 100 | "o. c #947F45", 101 | "O. c #93794E", 102 | "+. c #806E50", 103 | "@. c #837453", 104 | "#. c #857D5B", 105 | "$. c #887855", 106 | "%. c #937E55", 107 | "&. c #56876A", 108 | "*. c #4E8F73", 109 | "=. c #6A836A", 110 | "-. c #7D8465", 111 | ";. c #778768", 112 | ":. c #6D8773", 113 | ">. c #6B997E", 114 | ",. c #739275", 115 | "<. c #7D9573", 116 | "1. c #7B9977", 117 | "2. c #769B79", 118 | "3. c #7B9D7C", 119 | "4. c #79A07F", 120 | "5. c #9C843C", 121 | "6. c #A58B3E", 122 | "7. c #9C8342", 123 | "8. c #96834C", 124 | "9. c #9D854A", 125 | "0. c #9F894C", 126 | "q. c #978147", 127 | "w. c #84815E", 128 | "e. c #8B845D", 129 | "r. c #8A8250", 130 | "t. c #91845A", 131 | "y. c #9A8755", 132 | "u. c #A18541", 133 | "i. c #AC8E47", 134 | "p. c #A18749", 135 | "a. c #A48A49", 136 | "s. c #AA8D49", 137 | "d. c #A48844", 138 | "f. c #AE9145", 139 | "g. c #AE9149", 140 | "h. c #A6914E", 141 | "j. c #B69A45", 142 | "k. c #B19248", 143 | "l. c #B5994C", 144 | "z. c #BB9D4B", 145 | "x. c #B89B47", 146 | "c. c #BA9F53", 147 | "v. c #A99654", 148 | "b. c #BDA14C", 149 | "n. c #B8A354", 150 | "m. c #818B69", 151 | "M. c #878964", 152 | "N. c #83906F", 153 | "B. c #849470", 154 | "V. c #9B9568", 155 | "C. c #A29B6A", 156 | "Z. c #9AAD7E", 157 | "A. c #B2A366", 158 | "S. c #B9A968", 159 | "D. c #BEB46F", 160 | "F. c #B2AD70", 161 | "G. c #C4A54E", 162 | "H. c #CBAA4D", 163 | "J. c #D0AF4F", 164 | "K. c #D1B04F", 165 | "L. c #D4B657", 166 | "P. c #CDB45D", 167 | "I. c #C9B769", 168 | "U. c #D8BE62", 169 | "Y. c #C9BD73", 170 | "T. c #C2B876", 171 | "R. c #DBC56D", 172 | "E. c #CEC37A", 173 | "W. c #D9CB7C", 174 | "Q. c #D3C478", 175 | "!. c #E0CF79", 176 | "~. c #E1D37E", 177 | "^. c #669B84", 178 | "/. c #42AE80", 179 | "(. c #5DA785", 180 | "). c #55B78E", 181 | "_. c #5AB188", 182 | "`. c #68A88A", 183 | "'. c #74A482", 184 | "]. c #7AA483", 185 | "[. c #74A886", 186 | "{. c #75AC8C", 187 | "}. c #6EAF91", 188 | "|. c #6CB595", 189 | " X c #61BA95", 190 | ".X c #6FB799", 191 | "XX c #6BBE9B", 192 | "oX c #69BB97", 193 | "OX c #73B392", 194 | "+X c #71BB9B", 195 | "@X c #7BB597", 196 | "#X c #76BDA1", 197 | "$X c #6FC0A0", 198 | "%X c #72C1A2", 199 | "&X c #78C3A6", 200 | "*X c #8DC7AF", 201 | "=X c #8BC7B0", 202 | "-X c #8CC9B2", 203 | ";X c #C4C480", 204 | ":X c #DCCF80", 205 | ">X c #DED483", 206 | ",X c #E5D985", 207 | "XX.1.<.XX$X$X$X$X$X%X%XXXXX$X%XXXXXXX XXX+X.XXX%X%X$X$X", 222 | "$X$X$X$X$X$XXX$X$XXX).).oX<.^.L D I .h.J.G.U Z ~ -.-.B.3.$X$X$XXX%X%X%X$X+X+X|._.`.2.;.}.$X%XXX$X$X", 223 | "$X$X$X$X$XXX%X$X$XXX)._.2.! V 5 1 [ O.h.H.G.Y G F C A / -.<.XX$X#XXX+X|.^./ e.e.e.t.$.E >.%X$X$X$X$X", 224 | "$X$X$X$X$X$X$X$X$XXX4.;.q X 5 . c.G.b.l.l.I.E.A.+ o o % H W ^.#.( ~ R Y $.Q.W.W.W.Q.e.:.XX$X$X$X$X", 225 | "XX$X$X$X$X$X$X@X&XB.Q D % . c.K.G.k.l.Q.,XI. . e I S I I H .%.:X,X,X,XXc & @ . . X o ..,X:X@ 7 V ^.#X$X$X$X$X$X$X", 229 | "$X X/./. XXX`.% o X . c.K.n + $ 2 %.y.A.D.A., X X A. X + v J A.W.Y.# . X S.,XY.o % w E +X&X&X$X$X$X$X", 232 | "&X$X$X$XXX.X0 X 9.l.z.H.x.y z f.j.G.6.} C. < b p.O.u.6.X.. 4 8.K.j.X g '.).).XX$X$X$X", 243 | "$X$X$X$X$X.XI X } 9.g.g.u.3 h [ .G.H.s.H % 8.K.j.X 0 [.).).oXXX X X", 244 | "$X$X$X$X%XXX] & % . X q.N 7.k.{ s 1 ; 3 h x p.z.9.a.5 8.K.x.O 0 OXoXXXXX X/./.", 245 | "$X$X$X$X$X$X<.R w o k.g.8 9.s.g.8.D . + v .k.s.| 8.K.x.O r +X$X$X$X X/./.", 246 | "$X$X$X$X$X$X+X$.Z o . < k.k.6 8.g.f.k.o.o . . . c ] k.s.k.8.x.k.X . p {.$X$X$XXX X X", 247 | "%X$X$X$X$X$X$X+X,.C e 5 X f.k.o & N X.g.8.f f & = ; ) s.k.g.g.a.X % e ! 1.&X&X%X$X$X$X", 248 | "&X$X$X$X$X$X$X$XOX-.! w k.k. X g g.s.s.E 1 % ; O.k.g.9.. % C ,.&X-X-X&X$X$X$X", 249 | "&X%X&X&X$X$X$X$X$X+X'.! 1 1 & * & k.g.o . 8 j U g.a.9 1 & . . o C s.i.o.* % e -.OX&X-X-X&X%X&X&X", 250 | "$X&X-X-X&X$X$X$X$X$X$XM.@.P w X * k.g.% . X & a.g...q.Y % o + k.i.o.p F 1.3.OX$X&X&X%X&X-X-X", 251 | "$X&X-X-X&X$X$X$X$X$X$X$X].@.I f % d._ & @ R a.g.g.8.# * . 4 { 6.i G #.#.+XXX$X$X$X$X&X-X-X", 252 | "$X%X&X&X%X$X$X$X$X$X$X$XXX#X,.@.$.L W K A A D B f T T T T R g 9 C K T L &.:.+X$XXX%X%X#X$X$X$X%X&X&X", 253 | "$X$X$X$X$X$X$X$X$X$XoXoXXXXX%X$X$X$X{.OX$X4.{.{.w.w.4.2.1.;.{.<.#.#.1.].#.{.$XXXXXoX$X$X$X$X$X$X$X$X", 254 | "$X$X$X$X$X$X$X$X$XoX).).XX%X$X$X$X$X$X$X$X$XXXXX).).oXXX$X$X$X$X#XXXXX#X$X$X$XoX).).XX$X$X$X$X$X$X$X", 255 | "$X$X$X$X$X$X$X$X$XoX).).XX$X$X$X$X$X$X$X$X$X$XXX).).oX$X$X$X$X$X$X$XXX#X$X$X$XoX).).XX$X$X$X$X$X$X$X", 256 | "$X$X$X$X$X$X$X$X$X$XXXXXXX$X$X$X$X$X$X$X$X$X$XXXXXoX$X$X$X$X$X$X$X$X$X$X$X$X$X$XXX XXX$X$X$X$X$X$X$X", 257 | "$X$X$X$X$X$X$X%X&X&X%X$X$X$X$X$X$X$X$X$X$X%X&X&X%X$X$X$XoXoX$X$X$X$X$X$X$X%X&X&X%X$X$X$X$X$X$X$X$X$X", 258 | "oX$X$X$X$X$X$X&X-X-X&X$X$X$X$X$X$X$X$X$X$X&X-X-X&X$X$XXX).).XX$X$X$X$X$X$X&X-X-X&X$X$X$X$X$X$X$X$X$X" 259 | }; 260 | -------------------------------------------------------------------------------- /so_long/img/npcleftmv.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 203 2 ", 5 | " c #000000", 6 | ". c #0C0A09", 7 | "X c #110B0A", 8 | "o c #190F0F", 9 | "O c #1D190D", 10 | "+ c #16100E", 11 | "@ c #0A0A12", 12 | "# c #1A1A1A", 13 | "$ c #11171B", 14 | "% c #2B1918", 15 | "& c #391C1A", 16 | "* c #2B2519", 17 | "= c #111122", 18 | "- c #171E25", 19 | "; c #292626", 20 | ": c #372320", 21 | "> c #272736", 22 | ", c #333433", 23 | "< c #3B3B3D", 24 | "1 c #45201F", 25 | "2 c #442928", 26 | "3 c #442827", 27 | "4 c #5F2C2A", 28 | "5 c #563433", 29 | "6 c #632E2C", 30 | "7 c #6D312E", 31 | "8 c #62302E", 32 | "9 c #70312E", 33 | "0 c #78322F", 34 | "q c #643332", 35 | "w c #6B3E3C", 36 | "e c #663B39", 37 | "r c #743934", 38 | "t c #5F4731", 39 | "y c #6E403E", 40 | "u c #6D5536", 41 | "i c #2D2D5C", 42 | "p c #2D2D4A", 43 | "a c #363669", 44 | "s c #383974", 45 | "d c #2E2F60", 46 | "f c #4A3658", 47 | "g c #443C67", 48 | "h c #3D417A", 49 | "j c #4F4D4D", 50 | "k c #545856", 51 | "l c #534E4E", 52 | "z c #6F4341", 53 | "x c #6B4F4E", 54 | "c c #714542", 55 | "v c #734A49", 56 | "b c #764A46", 57 | "n c #7E514A", 58 | "m c #785443", 59 | "M c #7E5B5C", 60 | "N c #7E6A5F", 61 | "B c #7E634D", 62 | "V c #4C476A", 63 | "C c #5D537B", 64 | "Z c #514974", 65 | "A c #644C64", 66 | "S c #6C576D", 67 | "D c #566A62", 68 | "F c #636363", 69 | "G c gray43", 70 | "H c #7D6E67", 71 | "J c #76777A", 72 | "K c #64716B", 73 | "L c #8D3936", 74 | "P c #873A36", 75 | "I c #903A37", 76 | "U c #9C3E3A", 77 | "Y c #913733", 78 | "T c #9C4B3D", 79 | "R c #97433C", 80 | "E c #88403D", 81 | "W c #AF433E", 82 | "Q c #A6413C", 83 | "! c #B2453F", 84 | "~ c #A4573E", 85 | "^ c #93783D", 86 | "/ c #8E763D", 87 | "( c #973E40", 88 | ") c #894549", 89 | "_ c #83544B", 90 | "` c #8A5C4B", 91 | "' c #895A53", 92 | "] c #9A4148", 93 | "[ c #AF4E4D", 94 | "{ c #A84643", 95 | "} c #B44A41", 96 | "| c #B84B42", 97 | " . c #AF504F", 98 | ".. c #BA5149", 99 | "X. c #AA585B", 100 | "o. c #886344", 101 | "O. c #84655B", 102 | "+. c #9B6757", 103 | "@. c #9D7456", 104 | "#. c #937747", 105 | "$. c #A16A57", 106 | "%. c #A4765E", 107 | "&. c #AA6743", 108 | "*. c #976B67", 109 | "=. c #86756E", 110 | "-. c #9D7E7D", 111 | ";. c #8C6E6F", 112 | ":. c #AF646A", 113 | ">. c #AB7B63", 114 | ",. c #A97766", 115 | "<. c #B17D68", 116 | "1. c #B06D74", 117 | "2. c #C35445", 118 | "3. c #C95948", 119 | "4. c #DB6A4F", 120 | "5. c #DF6D50", 121 | "6. c #CF6250", 122 | "7. c #E06D50", 123 | "8. c #E47152", 124 | "9. c #998644", 125 | "0. c #A48B46", 126 | "q. c #AB9249", 127 | "w. c #B29949", 128 | "e. c #B2964E", 129 | "r. c #BF9E5C", 130 | "t. c #A88455", 131 | "y. c #BEA450", 132 | "u. c #99837F", 133 | "i. c #8D877E", 134 | "p. c #A78367", 135 | "a. c #BD866C", 136 | "s. c #B6836A", 137 | "d. c #B88C73", 138 | "f. c #BC9279", 139 | "g. c #CBB55C", 140 | "h. c #C38C72", 141 | "j. c #CC9375", 142 | "k. c #C79779", 143 | "l. c #C99275", 144 | "z. c #E6CB68", 145 | "x. c #EDD36B", 146 | "c. c #F2D86E", 147 | "v. c #5F749F", 148 | "b. c #515287", 149 | "n. c #837C82", 150 | "m. c #BB7F86", 151 | "M. c #42AE80", 152 | "N. c #55B78E", 153 | "B. c #57B88F", 154 | "V. c #5AB991", 155 | "C. c #47B083", 156 | "Z. c #61BA95", 157 | "A. c #6BBE9B", 158 | "S. c #67BE99", 159 | "D. c #7A9DBB", 160 | "F. c #7698B4", 161 | "G. c #778D84", 162 | "H. c #6FC09E", 163 | "J. c #70C09F", 164 | "K. c #6FC0A0", 165 | "L. c #72C1A2", 166 | "P. c #78C3A6", 167 | "I. c #7DC5A9", 168 | "U. c #838685", 169 | "Y. c #9C9392", 170 | "T. c #A78988", 171 | "R. c #AB8B96", 172 | "E. c #AF9695", 173 | "W. c #B69F9E", 174 | "Q. c #B095A9", 175 | "!. c #B09CB2", 176 | "~. c #B8A8B9", 177 | "^. c #B2AEAF", 178 | "/. c #95BAAB", 179 | "(. c #E49F94", 180 | "). c #D4A382", 181 | "_. c #DAAB87", 182 | "`. c #DDB08B", 183 | "'. c #CEA181", 184 | "]. c #E0AE89", 185 | "[. c #E2B18B", 186 | "{. c #E6BA93", 187 | "}. c #E6A69B", 188 | "|. c #C5B5B8", 189 | " X c #D6B6BF", 190 | ".X c #CC8F92", 191 | "XX c #84C9AE", 192 | "oX c #82C7AC", 193 | "OX c #8CC9B2", 194 | "+X c #93CDB7", 195 | "@X c #EEC297", 196 | "#X c #B0ABC6", 197 | "$X c #B0B0CD", 198 | "%X c #AAAAC6", 199 | "&X c #C8BDC8", 200 | "*X c #C6BAC5", 201 | "=X c #D7BFCA", 202 | "-X c #B4CFC4", 203 | ";X c #D6CECC", 204 | ":X c #C8CDD5", 205 | ">X c #D1D1E6", 206 | ",X c #E3DAE7", 207 | "XT.! | 2.3.3.3.3.3.3.3.3.3.3.3.3.2.W W W W I 4 H L.K.K.K.K.K.K.K.K.K.", 226 | "H.K.K.K.K.K.K.l J X$X$XX.W W ! W W W W W W W W W W W W W W W } Q 7 4 & , P.K.K.K.K.K.K.K.K.K.", 229 | "K.V.M.M.Z.A.K.K % v.;X:X$X$X:. .[ [ .W W W W W W W W W W W W Q Q Q U 9 q : , P.K.K.K.K.K.K.K.K.K.", 230 | "K.S.S.V.A.A.V.Z.P.=.. f %X$X$X#X#X#X!. .W W W W W W W W W W I 6 6 6 6 w c 2 , K.K.K.K.K.K.K.K.K.K.", 231 | "L.K.K.K.K.S.N.V.Z.i. < %X$X$X$X$X$X!. .W W W W W W W W W W I 4 6 4 6 w c 3 , L.K.K.L.P.P.L.K.K.K.", 232 | "P.K.K.K.K.A.S.A.A.L.J.^.M M C b.A v v 9 9 9 9 9 9 9 9 9 9 9 9 w w w w y z 3 , I.L.K.P.OXOXP.K.K.K.", 233 | "P.L.P.P.L.K.K.A.S.Z.A.L.b y g s f 4 4 4 6 6 6 6 4 4 6 6 6 6 q y c c z y z 2 , XXK.K.P.OXOXP.L.P.P.", 234 | "L.P.OXOXP.K.L.V.M.M.Z.P.v y ;.;.+.$.` & % _ $.$.$.+.e w ,.<.,.,.$.y y : % l Y.M.L.L.K.L.P.P.L.P.OXOX", 235 | "K.P.OXOXP.K.K.Z.M.M.Z.P.v y <.j.j.j.s.+ . $.j.j.l.<.v y `.@X].j.s.b e X F S.S.P.P.K.K.K.K.K.P.OXOX", 236 | "K.L.P.P.L.K.K.K.Z.Z.A.K.T.-.<.<.j.j.d.: % s.).j.l.h.' +.[.{.].j.s.5 5 j l A.H.S.H.H.K.K.K.K.K.L.P.P.", 237 | "K.K.K.K.K.K.K.K.K.A.A.A.K.oX;.z d.@X`.n v ).@X_.j.j.j.j.{.@X].j.%.+ # L.L.L.L.A.S.S.H.H.K.K.K.K.K.K.", 238 | "K.K.K.K.K.K.K.K.K.S.N.B.A.K.T.O.d.`.'.o._ ).{._.j.j.j.j._.`.k.h.$.* * L.L.P.L.S.N.N.S.K.K.K.K.K.K.K.", 239 | "K.K.K.K.K.K.K.K.K.S.N.N.A.P.XXL.E.z n h.j.j.j.j.j.j.j.j._ c c c m q.0.% F P.S.N.B.S.K.K.K.K.K.K.K.", 240 | "K.K.K.K.L.K.K.K.K.K.A.A.A.K.K.K.E.z n h.j.j.j.j.j.j.j.j._ w c c u q.0.O F I.I.I.S.A.K.K.K.K.K.K.K.", 241 | "K.K.K.K.L.K.K.L.P.P.L.K.K.K.L.XXJ O % u n n _ A Z V r r y c o.0.e.z.z.g.g.9.; k P.K.K.P.S.S.A.K.K.K.", 242 | "K.K.K.K.K.K.K.P.OXOXP.K.K.K.P.P.G . e z z c g s g 6 6 w y o.w.g.z.c.x.c.9. , I.L.H.H.B.B.S.K.K.K.", 243 | "K.K.K.K.K.K.K.P.OXOXP.K.H.L.v.x N p.p.f.f.A g g s s g f ( ) &.w.y.x.z.t.@.t , I.K.K.S.B.B.S.A.V.Z.", 244 | "K.K.K.K.K.K.K.L.P.P.L.K.H.L.< O.@X@X@X{.C s s s s s s ] W &.w.y.x.z.` c 2 , L.K.K.K.S.S.K.Z.M.M.", 245 | "K.K.K.K.K.K.K.K.K.K.K.K.H.L.< B `.[.[._.C s s s a p p ( Q { #.#.g.r.#.` 5 , L.K.K.K.K.K.K.Z.C.C.", 246 | "K.K.K.K.K.K.K.K.K.K.K.K.H.L.< m k.j.j.h.C s s s d Y Q I 4 6 w b 0.w.u , L.K.K.K.K.K.K.A.Z.V.", 247 | "L.K.K.K.K.K.K.K.K.K.K.K.H.P.F , m ,.>.s.<.g d i i i - - ) X.) 5 q b m / ^ u , D P.K.K.L.P.P.L.K.K.K.", 248 | "P.K.K.K.K.K.K.K.K.K.H.H.L.H.H.H.G X e y o = D.D.D.D.v.s V q.0.O F H.L.K.K.K.P.OXOXP.K.K.K.", 249 | "P.L.P.P.L.K.K.K.K.K.L.P.K.K.K.P.J . + q e + $ F.F.D.F.v.s V 0.9.O F L.K.K.K.K.P.OXOXP.K.P.P.", 250 | "L.P.OXOXP.K.K.L.K.K.K.L.L.K.H.P.OX+XI.; . $ - a b.h s s h V @ F H.L.K.K.K.L.P.P.L.P.OXOX", 251 | "K.P.OXOXP.K.K.K.K.K.K.H.K.K.K.P.OXOXI.# d s s s s s a @ F L.H.K.K.K.K.K.K.K.P.OXOX", 252 | "K.L.P.P.L.K.K.K.K.K.L.L.L.K.K.L.P.P.P.L.L.A.Z.Z.K.L.K./.> = = = = = > Y.^.P.P.L.K.K.K.K.K.K.K.L.P.P.", 253 | "K.K.K.K.K.K.K.K.H.H.S.S.L.H.K.K.A.K.K.K.L.L.P.L.H.H.I.OX, # -XP.K.L.H.A.S.K.K.K.K.K.K.K.K.", 254 | "K.K.K.K.K.K.K.K.L.P.V.B.H.H.K.K.L.L.K.K.K.K.H.S.N.N.H.P.U.G G G G G J L.K.K.K.S.N.N.S.A.K.K.K.K.K.K.", 255 | "K.K.K.K.K.K.J.H.J.H.B.B.H.K.K.K.K.K.K.K.K.K.L.S.N.B.H.H.L.L.P.P.P.I.P.I.K.K.L.A.Z.A.oXP.K.K.K.K.K.L.", 256 | "K.K.K.K.K.K.K.L.J.A.S.Z.H.K.K.K.K.K.K.K.K.K.K.A.S.S.H.H.K.K.K.K.L.K.L.H.K.J.J.I.A.A.K.K.K.K.K.K.H.P.", 257 | "A.K.K.K.K.K.K.L.P.P.L.K.K.K.K.K.K.K.K.K.K.L.P.P.K.K.K.K.S.A.A.K.H.K.H.K.K.L.P.P.L.K.K.K.K.K.H.K.K.XX", 258 | "S.K.K.K.I.K.K.P.OXOXP.K.K.K.K.K.K.K.K.K.K.P.OXOXP.K.K.S.N.N.S.K.K.K.L.K.K.P.OXOXP.K.K.K.K.K.L.K.K.I." 259 | }; 260 | -------------------------------------------------------------------------------- /so_long/img/bush.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 206 2 ", 5 | " c #3F3A2C", 6 | ". c #3E3E25", 7 | "X c #3F3730", 8 | "o c #423E2E", 9 | "O c #443B34", 10 | "+ c #384F04", 11 | "@ c #394C0A", 12 | "# c #395206", 13 | "$ c #395509", 14 | "% c #3A5B0D", 15 | "& c #375309", 16 | "* c #3A4911", 17 | "= c #3C441B", 18 | "- c #3C5C12", 19 | "; c #375D17", 20 | ": c #386212", 21 | "> c #396816", 22 | ", c #386C1A", 23 | "< c #35691C", 24 | "1 c #39711D", 25 | "2 c #3E4230", 26 | "3 c #3D4120", 27 | "4 c #2E6B27", 28 | "5 c #366E29", 29 | "6 c #397521", 30 | "7 c #387B24", 31 | "8 c #387F28", 32 | "9 c #277B3A", 33 | "0 c #2F7028", 34 | "q c #415C0E", 35 | "w c #415E10", 36 | "e c #405816", 37 | "r c #446213", 38 | "t c #42621D", 39 | "y c #4A6B1A", 40 | "u c #466B19", 41 | "i c #45711E", 42 | "p c #51731E", 43 | "a c #466B29", 44 | "s c #4B7824", 45 | "d c #487627", 46 | "f c #547C29", 47 | "g c #567B26", 48 | "h c #4B7539", 49 | "j c #564C44", 50 | "k c #5F534C", 51 | "l c #60594C", 52 | "z c #61554E", 53 | "x c #635453", 54 | "c c #685857", 55 | "v c #635E52", 56 | "b c #4F7E45", 57 | "n c #507143", 58 | "m c #616051", 59 | "M c #38842B", 60 | "N c #38882E", 61 | "B c #3D8C32", 62 | "V c #3E8E39", 63 | "C c #348934", 64 | "Z c #39903D", 65 | "A c #47852C", 66 | "S c #55832B", 67 | "D c #5E852C", 68 | "F c #418D32", 69 | "G c #4A8E32", 70 | "H c #43873C", 71 | "J c #5D8A34", 72 | "K c #5B8B34", 73 | "L c #449136", 74 | "P c #469538", 75 | "I c #4A963A", 76 | "U c #4D9B3D", 77 | "Y c #489036", 78 | "T c #55973B", 79 | "R c #60872E", 80 | "E c #638F35", 81 | "W c #618F39", 82 | "Q c #63933A", 83 | "! c #69983A", 84 | "~ c #1F8F54", 85 | "^ c #1E9B5E", 86 | "/ c #2C8E42", 87 | "( c #21884B", 88 | ") c #2B9247", 89 | "_ c #259651", 90 | "` c #229857", 91 | "' c #39944D", 92 | "] c #1B9D63", 93 | "[ c #189F68", 94 | "{ c #3D9861", 95 | "} c #1DA16B", 96 | "| c #26A16A", 97 | " . c #3AA469", 98 | ".. c #26A571", 99 | "X. c #2FA976", 100 | "o. c #2BA674", 101 | "O. c #34AA7A", 102 | "+. c #3BAE7E", 103 | "@. c #30A977", 104 | "#. c #4E8548", 105 | "$. c #528246", 106 | "%. c #429242", 107 | "&. c #499849", 108 | "*. c #559E41", 109 | "=. c #599C41", 110 | "-. c #4A9B54", 111 | ";. c #4F9A5A", 112 | ":. c #509F51", 113 | ">. c #4F8D57", 114 | ",. c #689A41", 115 | "<. c #639943", 116 | "1. c #53A142", 117 | "2. c #5BA345", 118 | "3. c #5EAC48", 119 | "4. c #5EA847", 120 | "5. c #53A05F", 121 | "6. c #49A05E", 122 | "7. c #6CA246", 123 | "8. c #6CA549", 124 | "9. c #65AB4C", 125 | "0. c #69AD4F", 126 | "q. c #64A546", 127 | "w. c #70A74B", 128 | "e. c #71A94C", 129 | "r. c #72A644", 130 | "t. c #65B24D", 131 | "y. c #67AC52", 132 | "u. c #73AE51", 133 | "i. c #6DB152", 134 | "p. c #6FBA52", 135 | "a. c #74B454", 136 | "s. c #72BD55", 137 | "d. c #76B958", 138 | "f. c #7CBC5C", 139 | "g. c #79B556", 140 | "h. c #7DB24E", 141 | "j. c #5C9869", 142 | "k. c #5A9965", 143 | "l. c #5E9F71", 144 | "z. c #619F6B", 145 | "x. c #55A66B", 146 | "c. c #49AA7A", 147 | "v. c #58A971", 148 | "b. c #5AAD7A", 149 | "n. c #5FB07F", 150 | "m. c #62A57B", 151 | "M. c #61B17E", 152 | "N. c #74C057", 153 | "B. c #76C159", 154 | "V. c #7BC25C", 155 | "C. c #83BE59", 156 | "Z. c #87C057", 157 | "A. c #80C05F", 158 | "S. c #81CB5E", 159 | "D. c #8CC55B", 160 | "F. c #90CB5F", 161 | "G. c #84C562", 162 | "H. c #85CC63", 163 | "J. c #89CC64", 164 | "K. c #92CF62", 165 | "L. c #8BD467", 166 | "P. c #91D56B", 167 | "I. c #95DB6D", 168 | "U. c #9CDE6D", 169 | "Y. c #95D365", 170 | "T. c #9ADE70", 171 | "R. c #97E06F", 172 | "E. c #9FE16F", 173 | "W. c #9DE573", 174 | "Q. c #9FE874", 175 | "!. c #A0E675", 176 | "~. c #A4EA76", 177 | "^. c #A6ED79", 178 | "/. c #A8EF7B", 179 | "(. c #AEF67E", 180 | "). c #3DAE80", 181 | "_. c #45B184", 182 | "`. c #49B287", 183 | "'. c #4DB48A", 184 | "]. c #52B68D", 185 | "[. c #5BB488", 186 | "{. c #56B790", 187 | "}. c #5CBA94", 188 | "|. c #58B791", 189 | " X c #41AF82", 190 | ".X c #65AC83", 191 | "XX c #67AF88", 192 | "oX c #62B385", 193 | "OX c #66B58C", 194 | "+X c #68B48E", 195 | "@X c #6AB692", 196 | "#X c #61BB97", 197 | "$X c #6ABA95", 198 | "%X c #65BC99", 199 | "&X c #6CBE9D", 200 | "*X c #6EC09F", 201 | "=X c #6FC0A0", 202 | "-X c #73C1A3", 203 | ";X c #79C3A7", 204 | ":X c #7CC4A8", 205 | ">X c #82C6AD", 206 | ",X c #86C8AF", 207 | " d &X&X$X| O.=X=X=X=X=X*X1X1X=X=X=X=X=X=X=X=X", 217 | "-X-X-X=X=X=X%X=X*X*X*X*X*X*X-XM.V V U E.p.N W.(.D.3.N U.L.H V V $X&X=X=X=X=X=X*X-X-X=X=X=X=X=X=X=X=X", 218 | "=X=X=X=X=X=X=X}.'.*X*X*X*X*XU t.L.U I (.s.N Q.~.Z.3.F Q.Y.A N.L.-.6.'.}.=X=X*X*X=X=X=X=X=X=X&X'.}.=X", 219 | "=X=X=X=X=X=X=X}.].*X*X*XM.M.N 3.L.3.1.Z.a.3.~.(.S.3.U U.S.M Y.1XF / .v.oX*X*X*X=X=X=X=X=X=X&X'.#X=X", 220 | "=X=X=X=X-X&X;X-X=X=X&X$X1.P P G P p.h.% r.(.(.(.V.Z.A.A.8.$ Z./.I P P P U OX&X*X=X=X=X=X=X-X-X=X=X=X", 221 | "=X=X=X=X&X;X2X>X=X=Xn.B L./. # y S U M.OX-X}.`.*X*X*X=X=X", 225 | "=X=X=X=X=X=X&X;.V Q.(.(.g # (.(.(.1.P (.(.(.(.(.(.(.(.(.(.(.3.N (.(.(.D r ^.(.(.U V *X-X=X*X*X*X=X=X", 226 | "-X2X>X=X=X.X- C.(.(.!.G.T N (.L.B a.S.(.(.(.(.(.(.(.(.(.(.(.J.f.L 3.(.4.F C.I.(./.W.$ #.*Xo.o.=X=X=X", 227 | "-X>X;X=X=X$Xj.$.E t.B.W.s.9.E K N H.!.(.~.Y.(.(.(.(.(.p.Z.1X~.W.N A E q.i.E.J.t.Q E j..X*X{.].-X=X=X", 228 | "=X=X=X=X&X$Xj.$.f q.B.!.f.9.: , 6 e.D.(.L.0.~.(.1X(.(.I 1.(.K.C.6 , > T a.T.H.t.S f j..X*X*X*X}.&X=X", 229 | "=X=X=X=X&Xm.# W f.^.W.V.I N B 7 # $ y ~.s.M W.(.(.(.~.G 1.(.R q # > N N B f.L./.H.a.# b &X*X%X).}.=X", 230 | "=X=X*X*XL N N > & M N N N N V.V.A.A.h.# + + U.(.(.r.q q y A.C.Z.V.i.N N N N N N % $ N N B @X*X*X=X=X", 231 | "=X=Xv.%.i.a.a.f + % S I.W.I.~.E.A.=.I w.e.e.g p p R r.r.q.Y i.V.~.Q.R.R.U.R.e.% # % i.a.i.&.;.*X=X=X", 232 | "&X Xc.x.J W A.f $ ! Z.(.S.B.(.^.T.U L I.J.A.Q J J w.A.I.S.N V.I.(.W.N.W.(.(.Y.r.w % A.w.J k.v.*X=X=X", 233 | "%X..c.XXy s A.J y K.E.U.3.U (.(.W.T G (.I.d.G.H.J.V.d.^.I.8 V.W.(.I.I S.U.U.U.U.g y f.! r m.+X=X=X=X", 234 | "*X*Xb @ a.V.f.V.d.q # # D.(.(.H.N % r /.s.B Q.(.(.s.F E.F.+ 1 N (.(.(.D # # @ $ w.C.f.f.f.r > =X=X=X", 235 | "=X*X$.@ B A q s L e.7.M i y (.Z.& + $ r K d./.(.(.P.a.p r + $ % (.F.r i M M T g.I F w d L $ e -X=X=X", 236 | "+Xh e @ : u ,.q.i.f.f.i.A 5 D S 1 1 1 # ! E.(.(.(.(.E.r $ 1 6 6 D S 1 =.0.0.a.f.i.0.,.S - $ e =X=X=X", 237 | "@Xa - + + r w.0.i.f.f.V.I B % , N N M % ! F.(.1X(.U.F.y > N N N - , N 0.G.V.G.f.a.i.7.D # @ t &X=X=X", 238 | "&X@X$.q q q + 1 L f.f.d.I N V B B B N M u % Y.!.~.! $ 7 M N B B B B N 0.f.f.f.G.I B + # % q a @X&X=X", 239 | "XX- W f.g.7.@ W f.V.i.B B N f.f.V.P M $ > M r w q 1 M % : N 9.f.f.0.N B B B *.f.f.u.+ g g.g.w.- j.*X", 240 | "j.w.=.I Y L 7 i y G A % =.a.f.G.Z.s.8.$ , N 7.w.8.T N & u i.f.V.f.f.a.d : M 6 u G I 7 B I f.u.$ >.|.", 241 | "z.Q A 6 M N N 1 > 1 > + 8.f.G.f.V.7.K : 6 N d.f.A.2.N > i Q a.G.G.C.V.s $ 1 , : 8 N N 7 6 K K 0 { '.", 242 | "XX# % w F F N M 7 $ + + ,.u.C.f.u.y : M B F d.A.A.9.L M 6 $ Q u.A.f.h.y + + : M N N F d w $ ; } X.].", 243 | "XX+ Q C.f.p.N > # + + + @ # S.! $ 7 7 # J f.A.G.V.f.f.r - N : # f.7.# # + + # @ 7 V A.V.f.: : ).|.=X", 244 | "&X+Xb w e q $ 1 M 8 8 M 8 8 q $ + & % M 1 q a.V.G.K w 8 6 & & + % > M M M M M M % $ % : % -.c.%X*X=X", 245 | "-X&Xm.>.>.b + 1 N N 8 > > , 1 , 1 & & > % + T 2.2.d # : : + : 1 1 , > > 1 N M M % & 9 9 9 | X.{.%X=X", 246 | "&X>X:X&X=XXXa 6 7 7 , + % % N M 7 % + % % : 1 7 6 , % : % + , 7 N 7 % $ # 1 7 7 < 4 } [ [ [ } O.|.=X", 247 | ":X3X 6 : : N N N N N N N N N 8 - 1 6 : , N > : : 0 ( ^ [ [ [ [ ) ) [ } _.", 250 | "-X&X-X-X=X$Xv.H , & + + > 1 + % 1 , < N N N N M 1 8 N N M < 7 N > > 1 % + + 4 _ ] [ [ ^ ` ) ) ` ^ +.", 251 | "&X-X-X&X$XoXM : + + + + + + + + @ 6 8 M M N M 6 $ , N M M 8 N N N 6 & & + + : M ~ ] [ ` C ^ ^ C ` ).", 252 | "=X*X=X=XV 7 + + + + + + + + + + + . + > N $ e c n N $ @ X 5 N N N M : + + + + M C } [ [ [ [ [ X.].", 253 | "%X..].=XV 7 + + + + + + + + + * O k k m l l c v v l j O 2 2 M 7 % + + + + + 7 N } ~ C } [ [ `.*X", 254 | "%X'.}.-XV 7 + + + + + + + + + @ = O x v c c c c c c c k X . = < : + + + + + + M C } ] _ } } ..|.=X", 255 | "=X=X*X*X&.V % & + + + + + + + + # 3 o k x l c c c x k x j @ + + + + + + + & % M C [ [ } } ..).}.=X", 256 | "-X-X=X=X-XOXB , & & & + + + + + + + + X X k x x j X . + + + + + + + & # > C ^ } } } } X._.*X=X=X", 257 | "-X2X>X=X*X*X$X-.M M 1 + + + + + + + + @ @ @ o O O 3 @ @ @ + + + + + + 1 M M Z ] } } O.'.*X*X*X*X=X*X", 258 | "-X:X-X=X=X=X=XOXb.n.k.6 6 6 6 , + + + + + + * * * + + + + + , 6 M 1 1 ) ` ` | X.`.].#X'.o.*X*Xo.|.-X", 259 | "=X=X=X=X=X=X=X%X#X*X[.&.-.-.-.V : : : % : : : : % : : : : : M / Z ' ' | O.O.+.`.*X*X=X].X.#X*X} ].=X", 260 | "=X=X=X=X=X=X=X}.'.*X=X=X=X=X=XoX;.-.;.-.-.-.-.-.-.-.-.-.-.-.O.O.'.'.].*X*X*X*X*X*X*X=X=X=X=X*X'.}.=X", 261 | "=X=X=X=X=X=X=X=X=X=X=X=X=X=X=X=X*X*X=X*X&X=X=X=X=X=X=X=X=X=X=X=X*X*X*X*X*X*X*X*X*X*X=X=X=X=X=X=X=X=X" 262 | }; 263 | -------------------------------------------------------------------------------- /so_long/img/npcleft.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *result[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "50 50 219 2 ", 5 | " c #030304", 6 | ". c #0D0B0B", 7 | "X c #0A0608", 8 | "o c #150C0A", 9 | "O c #121112", 10 | "+ c #191919", 11 | "@ c #110F16", 12 | "# c #2A1815", 13 | "$ c #391A19", 14 | "% c #38231E", 15 | "& c #25241E", 16 | "* c #171827", 17 | "= c #1D1D3A", 18 | "- c #291E2F", 19 | "; c #1E2238", 20 | ": c #3B2524", 21 | "> c #24342E", 22 | ", c #2B2C34", 23 | "< c #383737", 24 | "1 c #2E2A2E", 25 | "2 c #401D1C", 26 | "3 c #54211E", 27 | "4 c #44391E", 28 | "5 c #461E22", 29 | "6 c #492C29", 30 | "7 c #5F2C2A", 31 | "8 c #592729", 32 | "9 c #4A342A", 33 | "0 c #573B33", 34 | "q c #583130", 35 | "w c #612D2B", 36 | "e c #682F2C", 37 | "r c #642724", 38 | "t c #65302E", 39 | "y c #6C312E", 40 | "u c #72322F", 41 | "i c #693937", 42 | "p c #733630", 43 | "a c #7A3937", 44 | "s c #33443D", 45 | "d c #554826", 46 | "f c #5B502E", 47 | "g c #6E413F", 48 | "h c #74403E", 49 | "j c #635332", 50 | "k c #716035", 51 | "l c #313757", 52 | "z c #282A4B", 53 | "x c #2F3062", 54 | "c c #35356A", 55 | "v c #3B3B73", 56 | "b c #533858", 57 | "n c #553B5F", 58 | "m c #3B4443", 59 | "M c #3E554C", 60 | "N c #39475B", 61 | "B c #4B4A4B", 62 | "V c #41564E", 63 | "C c #575152", 64 | "Z c #4D5252", 65 | "A c #6F4341", 66 | "S c #714542", 67 | "D c #7A4D45", 68 | "F c #794946", 69 | "G c #7D514B", 70 | "H c #7C5545", 71 | "J c #7F5755", 72 | "K c #7B5854", 73 | "L c #664C55", 74 | "P c #57615D", 75 | "I c #70695B", 76 | "U c #445869", 77 | "Y c #4E456C", 78 | "T c #655879", 79 | "R c #7D5E65", 80 | "E c #546E6B", 81 | "W c #767668", 82 | "Q c #797A78", 83 | "! c #766572", 84 | "~ c #8A3935", 85 | "^ c #863733", 86 | "/ c #973D39", 87 | "( c #82322F", 88 | ") c #A23F3B", 89 | "_ c #9B433C", 90 | "` c #8C413F", 91 | "' c #A5413B", 92 | "] c #AE433E", 93 | "[ c #A44F3E", 94 | "{ c #B1453F", 95 | "} c #B2483F", 96 | "| c #8A723D", 97 | " . c #8A3B42", 98 | ".. c #82554C", 99 | "X. c #88584C", 100 | "o. c #805755", 101 | "O. c #865D59", 102 | "+. c #945C58", 103 | "@. c #954141", 104 | "#. c #AF4E4C", 105 | "$. c #AB4442", 106 | "%. c #B64941", 107 | "&. c #B75A44", 108 | "*. c #B95245", 109 | "=. c #AF5455", 110 | "-. c #AF585A", 111 | ";. c #B55551", 112 | ":. c #8A644A", 113 | ">. c #986B5A", 114 | ",. c #90714B", 115 | "<. c #A26D5B", 116 | "1. c #A2755B", 117 | "2. c #8B6867", 118 | "3. c #997269", 119 | "4. c #8F6E72", 120 | "5. c #967272", 121 | "6. c #996669", 122 | "7. c #A97763", 123 | "8. c #AB7B71", 124 | "9. c #C85947", 125 | "0. c #C65F52", 126 | "q. c #D3624B", 127 | "w. c #DA684E", 128 | "e. c #D26C5B", 129 | "r. c #E16E51", 130 | "t. c #E37152", 131 | "y. c #E2755A", 132 | "u. c #E27A60", 133 | "i. c #658879", 134 | "p. c #6A8A7D", 135 | "a. c #548772", 136 | "s. c #9B8540", 137 | "d. c #B1944E", 138 | "f. c #B4846B", 139 | "g. c #BA856C", 140 | "h. c #AF876E", 141 | "j. c #C5AB5A", 142 | "k. c #C68E72", 143 | "l. c #CB9275", 144 | "z. c #C8977A", 145 | "x. c #D39D7D", 146 | "c. c #D3B762", 147 | "v. c #CDAF62", 148 | "b. c #E5CB67", 149 | "n. c #787789", 150 | "m. c #565689", 151 | "M. c #967F83", 152 | "N. c #AF7D8A", 153 | "B. c #AF7884", 154 | "V. c #6A9585", 155 | "C. c #7E9C88", 156 | "Z. c #42AE80", 157 | "A. c #46B083", 158 | "S. c #4FB388", 159 | "D. c #54B68D", 160 | "F. c #58B88F", 161 | "G. c #5AB791", 162 | "H. c #5DB992", 163 | "J. c #73A18F", 164 | "K. c #6DA891", 165 | "L. c #76A391", 166 | "P. c #79AC95", 167 | "I. c #63BB96", 168 | "U. c #66BC99", 169 | "Y. c #6CBE9C", 170 | "T. c #6DB394", 171 | "R. c #7BB59D", 172 | "E. c #74B89C", 173 | "W. c #68A28A", 174 | "Q. c #7CBDA2", 175 | "!. c #77BDA1", 176 | "~. c #6FBFA0", 177 | "^. c #7091AC", 178 | "/. c #6EC09F", 179 | "(. c #70C09F", 180 | "). c #6FC0A0", 181 | "_. c #72C1A2", 182 | "`. c #79C3A6", 183 | "'. c #7DC5A9", 184 | "]. c #8C918D", 185 | "[. c #A78A89", 186 | "{. c #A98B93", 187 | "}. c #B29D9A", 188 | "|. c #B29492", 189 | " X c #88AA9A", 190 | ".X c #92A89B", 191 | "XX c #A0A59C", 192 | "oX c #9F9FA9", 193 | "OX c #B09DB4", 194 | "+X c #AC8FA1", 195 | "@X c #88BCA5", 196 | "#X c #83BBA3", 197 | "$X c #9AB6A6", 198 | "%X c #93A9A0", 199 | "&X c #A7AAA2", 200 | "*X c #B8ADA9", 201 | "=X c #ABB5AB", 202 | "-X c #A3B5A7", 203 | ";X c #B1B1BC", 204 | ":X c #B4AFB3", 205 | ">X c #C98D8E", 206 | ",X c #D8A684", 207 | "X>Xy.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.} / -.p.L.T.D.H./.).).).).).).).", 238 | ").).).).)._.Y.U.I.P.2.i t e {.yX5Xy.t.t.t.t.t.t.t.t.t.t.t.t.t.t.r.r.9.} ~ y 3.P.H.I./.).).).).).).).", 239 | ").).).).)._._.T.i.i.M.4.S t {.yX5Xe.w.r.t.t.t.t.t.t.t.t.t.t.t.t.w.q.9.{ ^ e 2. X/.Y./.).).).).).).).", 240 | ").).).)._.`.6XV.< s :XeX4.i {.yX4X;.9.w.t.t.t.t.t.t.t.t.t.t.t.t.} { ] { ^ e 2. X_.).).).).).).).).).", 241 | "/./././._.7X8XV.1 1 ;XrX5.a {.rX4X#.%.9.q.q.q.q.q.q.q.q.q.q.q.q.%.{ ] { ~ e 2..X`.(.(.(.).).).).~.~.", 242 | "D.G././._.'.8XV.& 1 ;XtX>X$.B.qX{.#.] %.{ %.{ { { { { %.{ { %.] ] { ] ] ~ e 2. X(.(._.).).).).).).~.", 243 | "Z.F././.)._._.i.1 , ;XtX>X=.N.OXN.#.] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ' ' u 8 2. X_.)._./.).).).).).).", 244 | "A.G./.I././.).i.1 , 9XtXwXOXB.=.#.$.] ] ] ] ] ] ] ] ] ] ] ] ] ] $.] ~ p 2 o C J./._._./.).).).).).).", 245 | "I.Y.U.G.D.H./.V.m B oXwXqX9X{.#.=.=.=.$.] ] ] ] ] ] ] ] ] ] ) ) ' ' a t $ B J.)._._._._./.).).).).", 246 | ").)./.H.F.I./.(.(.K.Z < n.9X0XOXOXOXN.=.] ] ] ] ] ] ] ] ] ] ( y y y p i % . B J.)._._._.`.`._.).).).", 247 | "_.).).Y./.I./._._.W.m + n.9X9X9X0X0X+X=.] ] ] ] ] ] ] ] $.) u w 7 w i g : . B K.)._.`.'.8X7X`.).).).", 248 | "`._.).)./.I././.).)._.E.[.R T m.T L F u u u u u u u u u u u i i g i g S 2 . B L._._.`.6X8X7X`._.`.`.", 249 | "8X`._.).U.G.F.H./._.'.#X[.A n v b q 7 7 w t w w w w r 7 7 t i A g S g S : . B V.Y.)._._.`.`._.'.8X8X", 250 | "8X'._.).U.D.Z.F.(._._.#X[.S O.5.3.<...% % h <.<.<.+.a X.f.g.8.7...g 6 # L ]. XI.U.).).).).)._.`.8X8X", 251 | "`._._.).Y.I.H.U././.`.#X[.S 1.k.k.l.:.# # ,.k.k.k.7...>..8.,Xh.0 0 f.,Xx.k.8.<.8.3X3Xx.k.0 : C Q X`.`.(.Y.Y.).).).).).).)._.", 253 | ").).).).).).Y.I.F.H.Y.)._.#X}.D 7.2X1XH ..z.3X,Xl.l.k.x.3X3Xx.l.% o Q R._.(.(.I.G.I.).).).).).).).).", 254 | ").).).).).).Y.I.F.G.Y.)._._.R.}.[.g.h.<.7.z.,Xx.l.l.l.l.g.h.7.<.j d I Q T._./.H.D.H.Y.).).).).).).).", 255 | ").).).).).)./.Y.I.U.Y.)._._.(.@X*XO.X.g.l.l.x.z.l.l.k.8...D D D s.s.f & p.@X_.Y.U.U.Y.).).).).).).).", 256 | ").).).~._._._._._.Y.).~._._._._.:XG D <.7.7.1.>.:.>.5.2.L L H :.d.j.| d W ].R._.).).).Y.Y.Y.~.).).).", 257 | ").).).)._.'.7X'._._.).).)._.).).*Xg i F J G F 6 # , Y Y Y Y ,.d.c.b.c.c.,.s P P.(.(./.H.H.H./.(.~.~.", 258 | ").).).)._.6X8X7X_.).).).).~.U.Y.*Xg t a F ` h : * = v v T ! h.j.v.v.c.c.k o Z J.(.(./.H.F.F././.U.I.", 259 | ").).).)._.`.6X`._.~.).).Y.U.D.G.*Xg u / / ' @.g x x v m.|.1X.D S 0 4 I E T._.).)._.`.6X'._._.~._.", 264 | "_._.).).).).).).).).).).).~.Q X * x z o X X @ U ^.U X o 6 i g 0 : + h.Y.)._.).)._.'.8X7X`._._.~.", 265 | "'.`._.).).).).).).).).)._.!.Q X @ = - 5 5 - = l U z X $ : : : C P X!._._._.)._.`.7X6X_.`.6X'.", 266 | "8X`._.).).).).).).).).)._.!.C.O X # ( .b x , O O . O . . O O o O ].#X!./._.`.`.).)._._._._.`.8X8X", 267 | "7X`._.).).).).).).).).).).`.].Z m X o 3 8 , z l M M M M M M V V V V XQ.~.~._.Y.)./.).).).)._.`.7X7X", 268 | "`._.).).).).).).Y.~.).).)._.`.'..X& X # E (./.).).).)._._.`._.)._._.~._.Y././.).).).).)._.`._.", 269 | ").).).).).).~.U.I.U.Y.).)._.).'.%Xm > > > > s a././.(._._._._.)._._.).).).).Y.Y.U.U.~.).).).).).).).", 270 | ").).).).).).Y.I.F.H.Y.).).).).).)._.)._.`.(./.H.H./.(.`._.).).).).).).).).).Y.H.F.H.Y.).).).).).).).", 271 | ").).).).).).~.H.F.H.Y.).).).).).).)./._.(./.F.F.H./.(.(.).).).).).).).)./.).Y.H.F.H.Y.).).).).).).).", 272 | ").).).).).).).Y.Y.Y.~.).).).).).).).).).(.(././././.(.(.).).).).).).).)./._./.Y.Y.Y.).).).).).).).).", 273 | ").).).)._.`.`._._.).).).).).).).).).).).`.`._._.).).Y.U.Y./.).).).).).)._.`.`._._.).).).).).).).).).", 274 | ").).).)._.6X8X7X_.).).).).).).).).).).`.7X8X6X_.).).H.F.F.U.).).).).).)._.7X8X6X_.~.).).).).).).).)." 275 | }; 276 | --------------------------------------------------------------------------------