diff --git a/Makefile b/Makefile index 278d1d0..781e3f5 100644 --- a/Makefile +++ b/Makefile @@ -4,13 +4,14 @@ CC = cc # https://github.com/google/sanitizers/wiki/AddressSanitizer SANITIZERS = -fsanitize=address,undefined -fno-omit-frame-pointer ifeq ($(CFLAGS),) - CFLAGS = -Wall -Wextra -Werror -g -O3 -ffast-math + CFLAGS = -Wall -Wextra -Werror -g -O2 endif IFLAGS = -I./mlx -I./libft SOURCEFILES = \ src/utils/inits.c \ src/utils/time.c \ + src/utils/destroy_utils.c \ src/draw/draw_map.c \ src/draw/drawutils.c \ src/main.c \ @@ -29,6 +30,8 @@ SOURCEFILES = \ src/raycast/ray.c \ src/raycast/walls.c \ src/renderer/render.c \ + src/sprites/create_sprite.c \ + src/sprites/move_sprites.c \ src/sprites/sort_sprites.c \ src/sprites/sprite_caster.c \ diff --git a/ressources/doubletap.xpm b/ressources/doubletap.xpm new file mode 100644 index 0000000..5a1073c --- /dev/null +++ b/ressources/doubletap.xpm @@ -0,0 +1,78 @@ +/* XPM */ +static char * doubletap_xpm[] = { +"64 64 11 1", +" c #FF00DC", +". c #BFC7D5", +"+ c #FFFFFF", +"@ c #D66B1B", +"# c #F28A3C", +"$ c #864B1C", +"% c #FDE9D6", +"& c #F8CBAA", +"* c #F3B98B", +"= c #F0AA75", +"- c #EE9A5C", +" ", +" ..++++++++++++++++++++++++++++++++++++++++++.. ", +" .++++++++++++++++++++++++++++++++++++++++++++. ", +" ++@@@##@@@@@@##@@@@@@##@@@@@@##@@@@@@###@@@@++ ", +" ++@@@@@@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@@@@@++ ", +" ++@@++++@@@@@###@@@@@###@@@@@###@@@@@###@@@@++ ", +" ++@@##+##@@@#####@@@#####@@@#####@@@#####@@@++ ", +" ++###@+###@##@@###@##@@###@##@@###@##@@@##@#++ ", +" ++#+@@+@#####@@@#####@@@#####@@@#####@@@####++ ", +" ++#@++@@@##@@@@@@##@@@@@@##@@@@@@##@@@@@@@##++ ", +" ++@@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@++ ", +" ++##+@+@@###@@@@@###@@@$###$@@@@@###@@@@@###++ ", +" ++#+@@++#####@@@#####@$#####$@@@#####@@@####++ ", +" ++@+##++#@@###@##@@########$$#@##@@###@###@@++ ", +" ++@+##++#@@@#####@@@$#####$$$$###@@@#####@@@++ ", +" ++@@++#@@@@@@##@@@@$######$$$$#@@@@@@###@@@@++ ", +" ++@@@@@@@@@@@@#@@@@$######$$$@#@@@@@@@#@@@@@++ ", +" ++@++++++@@@@##@@@@########$$##@@@@@@###@@@@++ ", +" ++@@+#+##@@@#$$$$@$########$#$$$$@@@#####@@@++ ", +" ++@#++###@@#$$$$$$$########$$$$$$$@###@###@@++ ", +" ++##+@++###$$$$$$$##########$$$$$$$##@@@####++ ", +" ++##+@++@##$$$$$$$##########$$$$$$$#@@@@@###++ ", +" ++@@@@@@@@$$$$$$$############$$$$$$$@@@@@@#@++ ", +" ++#+++++@#$$$$@$$############$$@$$$$@@@@@@##++ ", +" ++##+@@@##$$$@@$$####%%%%####$$@#$$$#@@@####++ ", +" ++##+++##$#$#@@$###%%%%%%%%###$###$#$@@@##@#++ ", +" ++@@+####$########$$%%%%%%$$########$####@@@++ ", +" ++@@+#++@@$#$####$$$$%%%%$$$$###@$#$@###@@@@++ ", +" ++@@@@@@@@@@@@###&$$$$%%$$$$%##@@@@@@@#@@@@@++ ", +" ++@++++@@@@@@####&%$$%%%%$$%%##@@@@@@###@@@@++ ", +" ++@@+##+#@@@###$&&%%%#%%#%%%%%$##@@@##++#+@@++ ", +" ++@#+#++#@@###@&&#%%%%##%%%%#%%##@@###@+#+@@++ ", +" ++##+@+@#####@@&&############%%@#####@++#+##++ ", +" ++##+@++@###@@@$&%##########%%$@@###@@+@@+##++ ", +" ++@@@@@@@@#@@@@@@&%##%%%%##%%@@@@@#@@@@++++@++ ", +" ++#@@@@@@##@@@@@@&&########%%@@@@##@@@@@@@##++ ", +" ++##@@@@#####@@$$&&&%####%%%&$$@#####@++#+##++ ", +" ++###@@###@##$$***&%%%%%%%%&***$$#@##@@@#+@#++ ", +" ++@@#####@@$***=====&&&&&&==&==**=$@###+++@@++ ", +" ++@@####@@$***===&&=**=&&*====&==**$@###@+@@++ ", +" ++@@@@@@@$**====&=***===&=**====&==*$@+++++@++ ", +" ++@@@##@@**====&=***=======**======**###@@@@++ ", +" ++@@#####*---====**=-----==**====---=#++#+@@++ ", +" ++@######*----&=***-------=***==----=#++#+@@++ ", +" ++##@@@@#$---$@***=---$$---=***@$--$#@@@++##++ ", +" ++##@@@@@##$$@@***---$@@$--=***@@$$$$@@+@+##++ ", +" ++@@@@@@@##$@@@***---@@@@---***@@@$$$++++++@++ ", +" ++#@@@@@@$$@@@@***--$@@@@$--***@@##$@@@@@@##++ ", +" ++##@@@@@###@@@**--$@@@@@#$--**@@###@@@@++##++ ", +" ++###@@######@@$$-$##@@####$$########@++##+#++ ", +" ++########@###@$$$@###@###@#$#####@###++##+#++ ", +" ++@@#####@@@###$$@@@#####@@@#$$##@@@##++#@+@++ ", +" ++@@####@@@@@###@@@@@###@@@@@###@@@@@##+@+@@++ ", +" ++@@@@@@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@@@@@++ ", +" ++@@@##@@@@@@##@@@@@@##@@@@@@##@@@@@@###++@@++ ", +" ++@@#####@@@#####@@@#####@@@#####@@@###+#@+@++ ", +" ++@######@@###@##@@###@##@@###@##@@###@+##@@++ ", +" ++##@@@@#####@@@#####@@@#####@@@#####@@+####++ ", +" ++##@@@@@###@@@@@###@@@@@###@@@@@###@@++++##++ ", +" ++@@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@++ ", +" ++#@@@@@@##@@@@@@##@@@@@@##@@@@@@##@@@@@@@##++ ", +" .++++++++++++++++++++++++++++++++++++++++++++. ", +" ..++++++++++++++++++++++++++++++++++++++++++.. ", +" "}; diff --git a/ressources/good_maps/testmap_2.cub b/ressources/good_maps/testmap_2.cub index b7a64c1..1654d82 100644 --- a/ressources/good_maps/testmap_2.cub +++ b/ressources/good_maps/testmap_2.cub @@ -1,22 +1,22 @@ -NO ./path_to_the_north_texture -SO ./path_to_the_south_texture -WE ./path_to_the_west_texture -EA ./path_to_the_east_texture +NO ressources/north.xpm +SO ressources/south.xpm +WE ressources/west.xpm +EA ressources/east.xpm F 220,100,0 C 225,30,0 1111111111111111111111111 1000000000110000000000001 - 1011000001110000001000001 - 1001000000000000010000001 -111111111011000001110000100000001 + 1011000001110000000000001 + 10D1000000000000000000001 +111111111011000001110M00000000001 100000000011000001110111110111111 11110111111111011100000010001 11110111111111011101010010001 11000000110101011100000010001 -10000000000000001100000010001 +100000000000000011J0000010001 10000000000000001101010010001 -11000001110101011111011110N0111 +11Q00001110101011111011110N0111 11110111 1110101 101111010001 11111111 1111111 111111111111 diff --git a/ressources/juggernog.xpm b/ressources/juggernog.xpm new file mode 100644 index 0000000..2409724 --- /dev/null +++ b/ressources/juggernog.xpm @@ -0,0 +1,78 @@ +/* XPM */ +static char * juggernog_xpm[] = { +"64 64 11 1", +" c #FF00DC", +". c #BFC7D5", +"+ c #FFFFFF", +"@ c #EC2D33", +"# c #FF6368", +"$ c #A61A1F", +"% c #FDE8E8", +"& c #FDD3D5", +"* c #FDBDBF", +"= c #FDA0A5", +"- c #FD8086", +" ", +" ..++++++++++++++++++++++++++++++++++++++++++.. ", +" .++++++++++++++++++++++++++++++++++++++++++++. ", +" ++@@@@####@@@@@###@@@@@###@@@@@###@@@@@###@@++ ", +" ++@@@@#####@@@#####@@@#####@@@#####@@@#####@++ ", +" ++##++++####@#######@#######@#######@#######++ ", +" ++@##@+##@@##@@##@@##@@##@@##@@##@@##@@@##@@++ ", +" ++@@@@+@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@++ ", +" ++@+@@+@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@++ ", +" ++@#++@@@@@##@@@@@@##@@@@@@##@@@@@@##@@@@@@@++ ", +" ++####@@@@@###@@@@@###@@@@@###@@@@@###@@@@@#++ ", +" ++##+#+@@######@@######$###$###@@#######@@##++ ", +" ++#+##++@#######@#####$#####$###@#######@###++ ", +" ++@+@@++#@@@#@@@#@@@#######$$@@@#@@@#@@@#@@@++ ", +" ++@+@@++#@@@@@@@#@@@$#####$$$$@@#@@@@@@@#@@@++ ", +" ++@@++@@#@@@@@@@#@@$######$$$$@@#@@@@@@@#@@@++ ", +" ++@@@@@##@@@@@@##@@$######$$$@@##@@@@@@@##@@++ ", +" ++@++++++#@@@@@###@########$$@@###@@@@@###@@++ ", +" ++#@+#+####@@$$$$#$########$@$$$$##@@#######++ ", +" ++##++######$$$$$$$########$$$$$$$##@#######++ ", +" ++@@+@++#@@$$$$$$$##########$$$$$$$@#@@@#@@@++ ", +" ++@@+@++@@@$$$$$$$##########$$$$$$$@#@@@@@@@++ ", +" ++@@@@@@@@$$$$$$$############$$$$$$$#@@@@@@@++ ", +" ++@+++++@@$$$$@$$############$$@$$$$#@@@@@@@++ ", +" ++##+#@@@@$$$##$$####%%%%####$$@@$$$###@@@##++ ", +" ++##+++@@$#$###$###%%%%%%%%###$@@#$#$###@@##++ ", +" ++@#+@@##$###@@###$$%%%%%%$$########$@@@##@@++ ", +" ++@@+@++#@$#$@@##$$$$%%%%$$$$##@#$#$#@@@#@@@++ ", +" ++@@@@@@#@@@@@@##&$$$$%%$$$$%##@#@@@@@@@#@@@++ ", +" ++@++++@#@@@@@@##&%$$%%%%$$%%##@#@@@@@@@#@@@++ ", +" ++@@+@#+##@@@@@$&&%%%#%%#%%%%%$###@@@@++#+@@++ ", +" ++@@+@++###@@@#&&#%%%%##%%%%#%%####@@@#+#+#@++ ", +" ++##+#+#####@##&&############%%#####@#++#+##++ ", +" ++@#+@++#@@##@@$&%##########%%$##@@##@+@#+@@++ ", +" ++@@@@@@@@@@#@@@@&%##%%%%##%%@@@@@@@#@@++++@++ ", +" ++@@@@@@@@@@#@@@@&&########%%@@@@@@@#@@@@@@@++ ", +" ++@##@@@@@@##@@$$&&&%####%%%&$$@@@@##@++@+@@++ ", +" ++####@@@@@##$$***&%%%%%%%%&***$$@@###@@@+@#++ ", +" ++#####@@##$***=====&&&&&&==&==**=$####+++##++ ", +" ++######@#$***===&&=**=&&*====&==**$####@+##++ ", +" ++@@@@@@#$**====&=***===&=**====&==*$@+++++@++ ", +" ++@@@@@@#**====&=***=======**======**@@@#@@@++ ", +" ++@@@@@@#*---====**=-----==**====---=@++#+@@++ ", +" ++@@@@@##*----&=***-------=***==----=@++#+@@++ ", +" ++@@@@###$---$#***=---$$---=***#$--$@@##++#@++ ", +" ++#@@######$$##***---$##$--=***##$$$$##+#+##++ ", +" ++@##@@####$#@@***---@@##---***##@$$$++++++@++ ", +" ++@@@@@@#$$@#@@***--$@@@#$--***@#@@$#@@@#@@@++ ", +" ++@@@@@@@@@@#@@**--$#@@@@@$--**@@@@@#@@@++@@++ ", +" ++@@@@@@@@@@#@@$$-$@#@@@@@@$$##@@@@@#@++@@+@++ ", +" ++@##@@@@@@##@@$$$@##@@@@@@#$##@@@@##@++@@+@++ ", +" ++####@@@@#####$$@#####@@@###$$@@@####++@@+#++ ", +" ++#####@@######@@######@@######@@######+@+##++ ", +" ++@##@@##@@##@@##@@##@@##@@##@@##@@##@@@##@@++ ", +" ++@@@@@@#@@@#@@@#@@@#@@@#@@@#@@@#@@@#@@@++@@++ ", +" ++@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@+#@+@++ ", +" ++@@@@@@#@@@@@@@#@@@@@@@#@@@@@@@#@@@@@@+#@@@++ ", +" ++@@@@####@@@@@###@@@@@###@@@@@###@@@@@+##@@++ ", +" ++@@@@#####@@@#####@@@#####@@@#####@@@++++#@++ ", +" ++##########@#######@#######@#######@#######++ ", +" ++@##@@##@@##@@##@@##@@##@@##@@##@@##@@@##@@++ ", +" .++++++++++++++++++++++++++++++++++++++++++++. ", +" ..++++++++++++++++++++++++++++++++++++++++++.. ", +" "}; diff --git a/ressources/revive.xpm b/ressources/revive.xpm new file mode 100644 index 0000000..89c6f9c --- /dev/null +++ b/ressources/revive.xpm @@ -0,0 +1,78 @@ +/* XPM */ +static char * revive_xpm[] = { +"64 64 11 1", +" c #FF00DC", +". c #BFC7D5", +"+ c #FFFFFF", +"@ c #7A73BB", +"# c #5E579C", +"$ c #403995", +"% c #F9F7FF", +"& c #DDDAFB", +"* c #A9A6C9", +"= c #8D88BA", +"- c #5B54A0", +" ", +" ..++++++++++++++++++++++++++++++++++++++++++.. ", +" .++++++++++++++++++++++++++++++++++++++++++++. ", +" ++@@###@@@@@###@@@@@###@@@@@###@@@@@####@@@@++ ", +" ++@#####@@@#####@@@#####@@@#####@@@@####@@@@++ ", +" ++##++++#@#######@#######@#######@##########++ ", +" ++####+##@#######@#######@#######@##########++ ", +" ++@@##+@@@@@@##@@@@@@##@@@@@@##@@@@@@##@@@@@++ ", +" ++@+##+@@#@@###@@#@@###@@#@@###@@#@@####@@@@++ ", +" ++#@++@@###@@@@@###@@@@@###@@@@@####@@@@####++ ", +" ++##@@@#####@@@#####@@@#####@@@#####@@@@####++ ", +" ++##+@+######@#######@#$@@@$#@##############++ ", +" ++#+#@++#####@#######@$@@@@@$@##############++ ", +" ++@+@@++##@@@@@@@##@@@@@@@@$$@@@@##@@@@@@##@++ ", +" ++#+@#++###@@#@@###@$@@@@@$$$$@@####@@@@####++ ", +" ++@@++#@@@@@###@@@@$@@@@@@$$$$#@@@@@####@@@@++ ", +" ++@#####@@@#####@@@$@@@@@@$$$###@@@@####@@@@++ ", +" ++#+++++@@#######@@@@@@@@@@$$####@@######@@#++ ", +" ++##+#+##@###$$$$@$@@@@@@@@$#$$$$@##########++ ", +" ++##++##@@##$$$$$$$@@@@@@@@$$$$$$$@##@@##@@#++ ", +" ++@@+#++@#@$$$$$$$@@@@@@@@@@$$$$$$$@####@@@@++ ", +" ++@@+@++##$$$$$$$$@@@@@@@@@@$$$$$$$$@@@@@##@++ ", +" ++##@@@###$$$$$$$@@@@@@@@@@@@$$$$$$$@@@@####++ ", +" ++#+++++##$$$$@$$@@@@@@@@@@@@$$#$$$$#@@#####++ ", +" ++##+@####$$$@#$$@@@@%%%%@@@@$$##$$$########++ ", +" ++##+++#@$@$@@@$@@@%%%%%%%%@@@$##@$@$@@##@@#++ ", +" ++#@+#@@#$@@@#@@@@$$%%%%%%$$@@@@#@@@$@@@####++ ", +" ++@@+#++@@@@$##@@$$$$%%%%$$$$@@@@$@@@##@@@@@++ ", +" ++@#####@@@####@@&$$$$%%$$$$%@@#@@@@####@@@@++ ", +" ++#++++#@@#####@@&%$$%%%%$$%%@@##@@######@@#++ ", +" ++##+##+#@#####$&&%%%@%%@%%%%%$##@####++#+##++ ", +" ++##+#++@@####@&&@%%%%@@%%%%@%%##@@##@@+#+@#++ ", +" ++@@+#+@@#@@###&&@@@@@@@@@@@@%%@@#@@##++@+@@++ ", +" ++@@+@++##@@@@@$&%@@@@@@@@@@%%$@@##@@@+@@+#@++ ", +" ++##@@@#####@@@##&%@@%%%%@@%%@@#####@@@++++#++ ", +" ++##@@#######@@##&&@@@@@@@@%%@@######@@#####++ ", +" ++###@#######@#$$&&&%@@@@%%%&$$#######++#+##++ ", +" ++##@@##@####$$***&%%%%%%%%&***$$#@##@@##+@#++ ", +" ++#@@#@@##$$***=====&&&&&&==&==**=$$@@@+++##++ ", +" ++@@##@@@@****===&&=**=&&*====&==**=@##@@+@@++ ", +" ++@#####@$**====&=***===&=**====&==*$#+++++@++ ", +" ++######$**====&=***=======**=======*$###@@#++ ", +" ++######$*---====**=-----==**====---=$++#+##++ ", +" ++##@###$*----&=***-------=***==----=$++#+@#++ ", +" ++@@###@@$---$#***=---$$---=***@$---####++@@++ ", +" ++@@@@@@$@-$$@@***---$@@$--=***@@$$$$@@+@+#@++ ", +" ++##@@@#$@@$@@@***---@@##---***###$$$@+++++#++ ", +" ++##@@###$$##@@***--$@@##$--***####$#@@#####++ ", +" ++###@#######@#**--$#@####$--**#########++##++ ", +" ++##@@##@####@@$$-$##@@###@$$@@###@##@++#@+#++ ", +" ++@@@@@@##@@@@@$$$#@@@@@@##@$@@@@##@@@++@#+@++ ", +" ++@@##@@@@@@@##$$@@@@##@@@@@@$$@@@@@@#++@@+@++ ", +" ++@@###@@@@@###@@@@@###@@@@@###@@@@@###+@+@@++ ", +" ++######@@#######@@######@@######@@######@@#++ ", +" ++#######@#######@#######@#######@######++##++ ", +" ++##@###@@####@##@@###@##@@###@##@@##@@+#@+#++ ", +" ++@@##@@@@@@@##@@@@@@##@@@@@@##@@@@@@##+@@@@++ ", +" ++@@@@@@##@@@@@@@##@@@@@@##@@@@@@##@@@@+@##@++ ", +" ++#@@@@@###@@@@@###@@@@@###@@@@@####@@++++##++ ", +" ++##@@#######@@######@@######@@######@@#####++ ", +" ++###@#######@#######@#######@##############++ ", +" .++++++++++++++++++++++++++++++++++++++++++++. ", +" ..++++++++++++++++++++++++++++++++++++++++++.. ", +" "}; diff --git a/src/consts.h b/src/consts.h index a15c03e..ce437e1 100644 --- a/src/consts.h +++ b/src/consts.h @@ -6,32 +6,58 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:54:36 by kcolin #+# #+# */ -/* Updated: 2025/08/12 14:32:47 by kcolin ### ########.fr */ +/* Updated: 2025/08/14 21:23:25 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef CONSTS_H # define CONSTS_H +// Window # define WIDTH 800 # define HEIGHT 600 +// Texture size # define SIZE 64 +# define TEXTURE_SIZE 64 + +// minimap handling # define MAP_SIZE 10 # define PLAYER_SIZE 6 # define RESSOURCE_DIR "ressources" + +// movement handling # define MOVEMENT_SPEED 0.000005 # define MOVEMENT_STEP 0.1 # define ROTATION_SPEED 0.000002 # define PLANE_VALUE 0.6 -# define TEXTURE_SIZE 64 + +// Sprite consts # define SPRITE_TRANPARENCY_COLOR 0xff00dc -// 4 static ones, 3 perks, the box and 25 zombies at max -# define MAX_SPRITES 30 // FIXME: Change to 30 +# define MAX_SPRITES 30 +# define JUGG_TEX "ressources/juggernog.xpm" +# define REV_TEX "ressources/revive.xpm" +# define DBLTAP_TEX "ressources/doubletap.xpm" +# define MYSTERY_TEX "ressources/box.xpm" + # ifdef BONUS # define COMPILED_TEXT "Compiled with bonuses" # else # define COMPILED_TEXT " " # endif +// Error messages +# define ENOCUB "Not a .cub file" +# define EOPEN "Can't open file" +# define EMALMAP "Map is malformed (invalid chars or missing walls)" +# define ENOPLAYER "No player" +# define EHOLES "Holes in map" +# define ETRAILING "Trailing chars after map" +# define EBADCHARCOLOR "invalid characters in color definition" +# define EBADVALCOLOR "invalid value for colors" +# define ETOOMANYCOLORS "too many colors" +# define ENOTENOUGHCOLORS "Not enough colors" +# define EDUPTEX "Duplicated texture directive" +# define EMAPBFTEX "Map started before all the textures" + #endif diff --git a/src/cub3d_data.h b/src/cub3d_data.h index 215ac14..1993a16 100644 --- a/src/cub3d_data.h +++ b/src/cub3d_data.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:59:37 by kcolin #+# #+# */ -/* Updated: 2025/08/07 11:28:49 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:36:15 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,9 @@ # include "utils/keypresses.h" # include "consts.h" +// FIXME: Delete this line to let it compile for bonus part +# define BONUS 1 + // the 4 static sprites are some of the perks and the mystery box typedef struct s_cub3d_data { @@ -37,6 +40,7 @@ typedef struct s_cub3d_data int delta; int last_tick; t_sprite **sprite_list; + int sprite_counter; double zbuffer[WIDTH]; int sprite_order[MAX_SPRITES]; double sprite_distances[MAX_SPRITES]; diff --git a/src/main.c b/src/main.c index 7c57d95..60523db 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:14:30 by kcolin #+# #+# */ -/* Updated: 2025/08/12 14:23:27 by kcolin ### ########.fr */ +/* Updated: 2025/08/18 13:23:26 by kcolin ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,6 +31,7 @@ #include #include #include "utils/time.h" +#include "sprites/move_sprites.h" int game_loop(t_cub3d_data *data) { @@ -41,6 +42,7 @@ int game_loop(t_cub3d_data *data) data->last_tick = get_milliseconds(); reset_matrix(data); move_player(data); + move_sprites(data); raycaster(data, &ray); sprite_caster(data); matrix_to_image(data); @@ -64,19 +66,6 @@ int main(int argc, char **argv) if (argc < 2) return (ft_printf("Error: Missing cub3d file\n"), 1); init_cub3d_data(&data, argv); - // FIXME: Delete this whole piece of code when we will init sprites from - // map - data.sprite_list = ft_calloc(sizeof(t_sprite *), 3); - data.sprite_list[0] = ft_calloc(sizeof(t_sprite), 1); - data.sprite_list[1] = ft_calloc(sizeof(t_sprite), 1); - data.sprite_list[0]->x = data.map->startx + 1; - data.sprite_list[0]->y = data.map->starty; - data.sprite_list[0]->image = load_single_texture(&data, - "ressources/box.xpm"); - data.sprite_list[1]->x = data.map->startx; - data.sprite_list[1]->y = data.map->starty - 2; - data.sprite_list[1]->image = load_single_texture(&data, - "ressources/test_holed.xpm"); mlx_hook(data.mlx_win, KeyPress, KeyPressMask, keypress_handler, &data); mlx_hook(data.mlx_win, KeyRelease, KeyReleaseMask, keyrelease_handler, &data); diff --git a/src/map/forbidden_characters.c b/src/map/forbidden_characters.c index a829f53..dbbdce5 100644 --- a/src/map/forbidden_characters.c +++ b/src/map/forbidden_characters.c @@ -6,19 +6,24 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:18:13 by kcolin #+# #+# */ -/* Updated: 2025/07/17 14:47:34 by kcolin ### ########.fr */ +/* Updated: 2025/08/12 16:18:08 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../libft/includes/libft.h" -// TODO: use a #define for allowedchars, to prevent needless repetition - #ifdef BONUS +/* +* 10NSEW are from mandatory part +* M - Mystery box +* Q - Quick Revive perk +* J - Juggernog perk +* D - Double tap perk +*/ bool has_forbidden_characters(char *line) { - static const char *allowedchars = " 10NSEWDdZzsM\n"; + static const char *allowedchars = " 10NSEWMQJD\n"; size_t strsize; int i; diff --git a/src/map/map_checker.c b/src/map/map_checker.c index e4abafd..8864688 100644 --- a/src/map/map_checker.c +++ b/src/map/map_checker.c @@ -6,12 +6,13 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/06/06 17:54:42 by tchampio #+# #+# */ -/* Updated: 2025/07/29 14:43:32 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 13:43:42 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../libft/includes/libft.h" #include "../utils/colors.h" +#include "../consts.h" #include "mapdata.h" #include "populate_map.h" #include "checkers.h" @@ -61,10 +62,10 @@ bool check_cubfile(char *file, t_mapdata *map) int fd; if (!check_filename(map, file)) - return (ft_strlcpy(map->error, "Not a .cub file", ERRLEN), false); + return (ft_strlcpy(map->error, ENOCUB, ERRLEN), false); fd = open(file, O_RDONLY); if (fd < 0) - return (ft_strlcpy(map->error, "Can't open file", ERRLEN), false); + return (ft_strlcpy(map->error, EOPEN, ERRLEN), false); if (add_textures(fd, map) != 0) return (close(fd), false); if (map->error[0]) @@ -72,15 +73,13 @@ bool check_cubfile(char *file, t_mapdata *map) if (!populate_maps(map, fd)) return (close(fd), false); if (!check_walls(map)) - return (close(fd), ft_strlcpy(map->error, - "Map is malformed (invalid chars or missing walls)", ERRLEN), - false); + return (close(fd), ft_strlcpy(map->error, EMALMAP, ERRLEN), false); if (!check_bare_minimum(map)) - return (close(fd), ft_strlcpy(map->error, "No player", ERRLEN), false); + return (close(fd), ft_strlcpy(map->error, ENOPLAYER, ERRLEN), false); map->isvalid = true; flood_fill(map, map->startx, map->starty); if (!map->isvalid) - return (close(fd), ft_strlcpy(map->error, "Holes in map", ERRLEN), + return (close(fd), ft_strlcpy(map->error, EHOLES, ERRLEN), false); return (true); } diff --git a/src/map/populate_map.c b/src/map/populate_map.c index e35240e..4caa366 100644 --- a/src/map/populate_map.c +++ b/src/map/populate_map.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:44:02 by kcolin #+# #+# */ -/* Updated: 2025/07/23 13:34:33 by kcolin ### ########.fr */ +/* Updated: 2025/08/14 19:46:26 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -70,7 +70,7 @@ bool populate_maps(t_mapdata *map, int fd) { if (line[0] != '\n' && end_reached) { - ft_strlcpy(map->error, "Trailing chars after map", ERRLEN); + ft_strlcpy(map->error, ETRAILING, ERRLEN); retvalue = false; } if (line[0] != '\n') diff --git a/src/map/setters.c b/src/map/setters.c index 0a82082..c3c003d 100644 --- a/src/map/setters.c +++ b/src/map/setters.c @@ -6,12 +6,13 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/06/21 19:35:43 by tchampio #+# #+# */ -/* Updated: 2025/07/31 14:08:27 by kcolin ### ########.fr */ +/* Updated: 2025/08/14 19:50:20 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../libft/includes/libft.h" #include "../utils/frees.h" +#include "../consts.h" #include "mapdata.h" bool perform_color_checks(int *color, char *strcolor, t_mapdata *map) @@ -24,8 +25,7 @@ bool perform_color_checks(int *color, char *strcolor, t_mapdata *map) { if (!ft_isdigit(strcolor[i])) { - ft_strlcpy(map->error, "invalid characters in color definition", - ERRLEN); + ft_strlcpy(map->error, EBADCHARCOLOR, ERRLEN); return (false); } i++; @@ -33,7 +33,7 @@ bool perform_color_checks(int *color, char *strcolor, t_mapdata *map) colorvalue = ft_atoi(strcolor); if (colorvalue < 0 || colorvalue > 255) { - ft_strlcpy(map->error, "invalid value for colors", ERRLEN); + ft_strlcpy(map->error, EBADVALCOLOR, ERRLEN); return (false); } *color = colorvalue; @@ -53,14 +53,14 @@ unsigned int set_color(const char *s, t_mapdata *map) while (tab[i]) { if (i > 2) - ft_strlcpy(map->error, "too many colors", ERRLEN); + ft_strlcpy(map->error, ETOOMANYCOLORS, ERRLEN); isok = perform_color_checks(&rgb[i], tab[i], map); free(tab[i]); i++; } free(tab); if (i <= 2) - return (ft_strlcpy(map->error, "Not enough colors", ERRLEN), 0); + return (ft_strlcpy(map->error, ENOTENOUGHCOLORS, ERRLEN), 0); if (!isok) return (0); finalcolor = ((rgb[0] & 0xff) << 16) @@ -77,7 +77,7 @@ int try_set_texture(t_mapdata *map, char **texture, char *texture_name) { if (*texture != NULL) { - ft_strlcpy(map->error, "Duplicated texture directive", ERRLEN); + ft_strlcpy(map->error, EDUPTEX, ERRLEN); return (2); } *texture = ft_strdup(texture_name); @@ -99,7 +99,7 @@ int set_textures(char *line, t_mapdata *map) tab = ft_split(line, ' '); if (tab[0][0] == '1') return (free_tab(tab), ft_strlcpy(map->error, - "Map started before all the textures", ERRLEN), 1); + EMAPBFTEX, ERRLEN), 1); retvalue = 0; if (tab[0] && tab[1]) { diff --git a/src/player/player.h b/src/player/player.h index 8ac8231..453883c 100644 --- a/src/player/player.h +++ b/src/player/player.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 15:51:29 by kcolin #+# #+# */ -/* Updated: 2025/07/29 13:28:08 by tchampio ### ########.fr */ +/* Updated: 2025/08/13 15:31:17 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/sprites/create_sprite.c b/src/sprites/create_sprite.c new file mode 100644 index 0000000..4e683bf --- /dev/null +++ b/src/sprites/create_sprite.c @@ -0,0 +1,49 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_sprite.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/12 15:43:19 by tchampio #+# #+# */ +/* Updated: 2025/08/18 12:55:21 by tchampio ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "sprite.h" +#include "../../libft/includes/libft.h" +#include "../cub3d_data.h" +#include "../utils/inits.h" + +t_sprite *create_sprite(t_cub3d_data *data, char *texture, + double x, double y) +{ + t_sprite *sprite; + + sprite = ft_calloc(sizeof(t_sprite), 1); + if (!sprite) + return (NULL); + sprite->x = x; + sprite->y = y; + sprite->sprite_type = OTHER; + sprite->image = load_single_texture(data, texture); + return (sprite); +} + +t_sprite *place_right_sprite(t_cub3d_data *data, char c, double x, double y) +{ + t_sprite *sprite; + + if (c == 'M') + sprite = create_sprite(data, MYSTERY_TEX, x + 0.5, y + 0.5); + if (c == 'Q') + sprite = create_sprite(data, + REV_TEX, x + 0.5, y + 0.5); + if (c == 'J') + sprite = create_sprite(data, + JUGG_TEX, x + 0.5, y + 0.5); + if (c == 'D') + sprite = create_sprite(data, + DBLTAP_TEX, x + 0.5, y + 0.5); + return (sprite); +} diff --git a/src/sprites/create_sprite.h b/src/sprites/create_sprite.h new file mode 100644 index 0000000..fe204ee --- /dev/null +++ b/src/sprites/create_sprite.h @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_sprite.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/12 15:49:25 by tchampio #+# #+# */ +/* Updated: 2025/08/12 16:13:02 by tchampio ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef CREATE_SPRITE_H +# define CREATE_SPRITE_H + +# include "../cub3d_data.h" + +t_sprite *create_sprite(t_cub3d_data *data, + char *filename, double x, double y); +t_sprite *place_right_sprite(t_cub3d_data *data, char c, double x, + double y); + +#endif // CREATE_SPRITE_H diff --git a/src/sprites/move_sprites.c b/src/sprites/move_sprites.c new file mode 100644 index 0000000..47cfd90 --- /dev/null +++ b/src/sprites/move_sprites.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* move_sprites.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: kcolin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/18 13:22:50 by kcolin #+# #+# */ +/* Updated: 2025/08/18 13:25:07 by kcolin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "move_sprites.h" +#include "sprite.h" + +void move_sprites(t_cub3d_data *data) +{ + int i; + + i = 0; + while (i < data->sprite_counter) + { + if (data->sprite_list[i]->sprite_type == ZOMBIE) + data->sprite_list[i]->sprite_pos_x += MOVEMENT_SPEED * data->delta; + i++; + } +} diff --git a/src/sprites/move_sprites.h b/src/sprites/move_sprites.h new file mode 100644 index 0000000..0478e7e --- /dev/null +++ b/src/sprites/move_sprites.h @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* move_sprites.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: kcolin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/18 13:22:06 by kcolin #+# #+# */ +/* Updated: 2025/08/18 13:22:40 by kcolin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef MOVE_SPRITES_H +# define MOVE_SPRITES_H + +# include "../cub3d_data.h" + +void move_sprites(t_cub3d_data *data); + +#endif // MOVE_SPRITES_H diff --git a/src/sprites/sprite.h b/src/sprites/sprite.h index ad2aece..d581980 100644 --- a/src/sprites/sprite.h +++ b/src/sprites/sprite.h @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/05 12:59:44 by tchampio #+# #+# */ -/* Updated: 2025/08/06 14:41:17 by tchampio ### ########.fr */ +/* Updated: 2025/08/13 14:44:02 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,6 +15,14 @@ # include "../draw/img_data.h" +typedef enum e_sprite_type +{ + ZOMBIE, + PERK, + BOX, + OTHER +} t_sprite_type; + /* * x - real position for the sprite * y - real position for the sprite @@ -36,23 +44,24 @@ */ typedef struct s_sprite { - double x; - double y; - t_img_data *image; - int img_width; - int img_height; - double sprite_pos_x; - double sprite_pos_y; - double inv_det; - double transform_x; - double transform_y; - int sprite_screen_x; - int sprite_height; - int sprite_draw_start_y; - int sprite_draw_end_y; - int sprite_width; - int sprite_draw_start_x; - int sprite_draw_end_x; + double x; + double y; + t_img_data *image; + int img_width; + int img_height; + double sprite_pos_x; + double sprite_pos_y; + double inv_det; + double transform_x; + double transform_y; + int sprite_screen_x; + int sprite_height; + int sprite_draw_start_y; + int sprite_draw_end_y; + int sprite_width; + int sprite_draw_start_x; + int sprite_draw_end_x; + t_sprite_type sprite_type; } t_sprite; #endif // SPRITE_H diff --git a/src/sprites/sprite_caster.c b/src/sprites/sprite_caster.c index f08f886..23e3657 100644 --- a/src/sprites/sprite_caster.c +++ b/src/sprites/sprite_caster.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/05 15:51:01 by tchampio #+# #+# */ -/* Updated: 2025/08/07 16:57:29 by tchampio ### ########.fr */ +/* Updated: 2025/08/18 13:39:26 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,8 +15,8 @@ #include "../renderer/render.h" #include "sort_sprites.h" #include -#include #include +#include "../../libft/includes/libft.h" static void calculate_pos_and_transform(t_cub3d_data *data, t_sprite *sprite, int i) @@ -106,9 +106,20 @@ void sprite_caster(t_cub3d_data *data) { int i; - if (!data->sprite_list) + if (!data->sprite_list || !data->sprite_list[0]) return ; sort_sprites(data->sprite_order, data->sprite_distances, data); + if (data->sprite_distances[3] <= 1.5) + { + if (data->sprite_list[data->sprite_order[3]]->sprite_type == PERK) + { + if (data->keypresses.is_f_pressed) + { + data->keypresses.is_f_pressed = false; + ft_printf("🎵You need a little revive🎵\n"); + } + } + } i = 0; while (data->sprite_list[i] && i < MAX_SPRITES) { diff --git a/src/utils/destroy_utils.c b/src/utils/destroy_utils.c new file mode 100644 index 0000000..632be6f --- /dev/null +++ b/src/utils/destroy_utils.c @@ -0,0 +1,47 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* destroy_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: kcolin +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/18 13:05:31 by kcolin #+# #+# */ +/* Updated: 2025/08/18 13:05:31 by kcolin ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../cub3d_data.h" +#include "../../mlx/mlx.h" +#include + +void destroy_textures(t_cub3d_data *data) +{ + if (data->no_texture) + mlx_destroy_image(data->mlx, data->no_texture->img); + free(data->no_texture); + if (data->so_texture) + mlx_destroy_image(data->mlx, data->so_texture->img); + free(data->so_texture); + if (data->ea_texture) + mlx_destroy_image(data->mlx, data->ea_texture->img); + free(data->ea_texture); + if (data->we_texture) + mlx_destroy_image(data->mlx, data->we_texture->img); + free(data->we_texture); +} + +void destroy_sprites(t_cub3d_data *data) +{ + int sprite; + + sprite = 0; + if (data->sprite_list == NULL) + return ; + while (data->sprite_list[sprite] && sprite < MAX_SPRITES) + { + mlx_destroy_image(data->mlx, data->sprite_list[sprite]->image->img); + free(data->sprite_list[sprite]->image); + free(data->sprite_list[sprite]); + sprite++; + } +} diff --git a/src/utils/destroy_utils.h b/src/utils/destroy_utils.h new file mode 100644 index 0000000..710f707 --- /dev/null +++ b/src/utils/destroy_utils.h @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* destroy_utils.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/11 12:07:48 by tchampio #+# #+# */ +/* Updated: 2025/08/11 12:10:21 by tchampio ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef DESTROY_UTILS_H +# define DESTROY_UTILS_H + +# include "../cub3d_data.h" + +void destroy_textures(t_cub3d_data *data); +void destroy_sprites(t_cub3d_data *data); + +#endif diff --git a/src/utils/frees.c b/src/utils/frees.c index 8cb62ca..3112ad9 100644 --- a/src/utils/frees.c +++ b/src/utils/frees.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 13:59:27 by kcolin #+# #+# */ -/* Updated: 2025/07/31 14:25:10 by kcolin ### ########.fr */ +/* Updated: 2025/08/12 15:38:45 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,7 @@ #include "../../libft/includes/libft.h" #include "../map/mapdata.h" #include "../cub3d_data.h" +#include "./destroy_utils.h" #include void free_tab(char **tab) @@ -65,21 +66,12 @@ int destroy(t_cub3d_data *data, int exit_code) mlx_destroy_window(data->mlx, data->mlx_win); if (data->img_data) mlx_destroy_image(data->mlx, data->img_data->img); + destroy_textures(data); + destroy_sprites(data); free(data->img_data); - if (data->no_texture) - mlx_destroy_image(data->mlx, data->no_texture->img); - free(data->no_texture); - if (data->so_texture) - mlx_destroy_image(data->mlx, data->so_texture->img); - free(data->so_texture); - if (data->ea_texture) - mlx_destroy_image(data->mlx, data->ea_texture->img); - free(data->ea_texture); - if (data->we_texture) - mlx_destroy_image(data->mlx, data->we_texture->img); - free(data->we_texture); if (data->mlx) mlx_destroy_display(data->mlx); + free(data->sprite_list); free(data->mlx); free(data->screen_matrix); exit(exit_code); diff --git a/src/utils/hooks.c b/src/utils/hooks.c index 17918c8..116e252 100644 --- a/src/utils/hooks.c +++ b/src/utils/hooks.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:22:57 by kcolin #+# #+# */ -/* Updated: 2025/07/29 13:35:29 by tchampio ### ########.fr */ +/* Updated: 2025/08/13 15:25:04 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,6 +31,8 @@ int keypress_handler(int keycode, t_cub3d_data *data) data->keypresses.is_s_pressed = true; if (keycode == XK_d) data->keypresses.is_d_pressed = true; + if (keycode == XK_f) + data->keypresses.is_f_pressed = true; if (keycode == XK_Left) data->keypresses.is_left_pressed = true; if (keycode == XK_Right) @@ -48,6 +50,8 @@ int keyrelease_handler(int keycode, t_cub3d_data *data) data->keypresses.is_s_pressed = false; if (keycode == XK_d) data->keypresses.is_d_pressed = false; + if (keycode == XK_f) + data->keypresses.is_f_pressed = false; if (keycode == XK_Left) data->keypresses.is_left_pressed = false; if (keycode == XK_Right) diff --git a/src/utils/inits.c b/src/utils/inits.c index 0943f23..cd281f0 100644 --- a/src/utils/inits.c +++ b/src/utils/inits.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 13:43:05 by kcolin #+# #+# */ -/* Updated: 2025/08/05 15:45:01 by tchampio ### ########.fr */ +/* Updated: 2025/08/18 13:13:22 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,9 @@ #include "../../libft/includes/libft.h" #include "../../mlx/mlx.h" #include "../map/map_checker.h" +#include "../sprites/create_sprite.h" #include "frees.h" +#include t_img_data *load_single_texture(t_cub3d_data *data, char *path) { @@ -52,6 +54,29 @@ void load_textures(t_cub3d_data *data) data->ea_texture = load_single_texture(data, data->map->ea_texture); } +void place_base_sprites(t_cub3d_data *data, char **map) +{ + int y; + int x; + + y = 0; + while (y < data->map->mapheight) + { + x = 0; + while (x < (int)ft_strlen(map[y])) + { + if (ft_strchr("MQJD", map[y][x])) + { + if (data->sprite_counter < MAX_SPRITES) + data->sprite_list[data->sprite_counter++] + = place_right_sprite(data, map[y][x], x, y); + } + x++; + } + y++; + } +} + void init_cub3d_data(t_cub3d_data *data, char **argv) { ft_bzero(data, sizeof(*data)); @@ -72,5 +97,7 @@ void init_cub3d_data(t_cub3d_data *data, char **argv) init_player(&data->player, data->map); data->screen_matrix = ft_calloc(sizeof(int), WIDTH * HEIGHT); load_textures(data); + data->sprite_list = ft_calloc(sizeof(t_sprite *), MAX_SPRITES); ft_memset(data->sprite_distances, -1, MAX_SPRITES); + place_base_sprites(data, data->map->map); } diff --git a/src/utils/keypresses.h b/src/utils/keypresses.h index 7d9d426..db0379c 100644 --- a/src/utils/keypresses.h +++ b/src/utils/keypresses.h @@ -6,7 +6,7 @@ /* By: tchampio