From b7d56363abc9d72617fef4a2beaf53dba9657a99 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Mon, 11 Aug 2025 11:50:47 +0200 Subject: [PATCH 01/26] removal(main): Removed sprites initialization in main function --- src/main.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/main.c b/src/main.c index 7c57d95..f3818ba 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/12 14:48:07 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -64,19 +64,7 @@ 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); From aae5e42b131d23dbb4147677dafd0fcd08080421 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Mon, 11 Aug 2025 11:51:23 +0200 Subject: [PATCH 02/26] fix(main): Bumped calloc for sprites from 3 to MAX_SPRITES and moved it --- src/main.c | 4 ++-- src/utils/inits.c | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index f3818ba..203bdf0 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:48:07 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 14:48:31 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -64,7 +64,7 @@ int main(int argc, char **argv) if (argc < 2) return (ft_printf("Error: Missing cub3d file\n"), 1); init_cub3d_data(&data, argv); - data.sprite_list = ft_calloc(sizeof(t_sprite *), 3); + data.sprite_list = ft_calloc(sizeof(t_sprite *), MAX_SPRITES); mlx_hook(data.mlx_win, KeyPress, KeyPressMask, keypress_handler, &data); mlx_hook(data.mlx_win, KeyRelease, KeyReleaseMask, keyrelease_handler, &data); diff --git a/src/utils/inits.c b/src/utils/inits.c index 0943f23..2432197 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/11 11:52:31 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -72,5 +72,6 @@ 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); } From 3230a60c9fbfedc9e47e6310cfcb0434933d5747 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Mon, 11 Aug 2025 13:00:01 +0200 Subject: [PATCH 03/26] fix: Fixed memory leak --- src/main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 203bdf0..3ae8f7c 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:48:31 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 14:49:01 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -64,7 +64,6 @@ int main(int argc, char **argv) if (argc < 2) return (ft_printf("Error: Missing cub3d file\n"), 1); init_cub3d_data(&data, argv); - data.sprite_list = ft_calloc(sizeof(t_sprite *), MAX_SPRITES); mlx_hook(data.mlx_win, KeyPress, KeyPressMask, keypress_handler, &data); mlx_hook(data.mlx_win, KeyRelease, KeyReleaseMask, keyrelease_handler, &data); From f1697a6c73dd640c2e16244448a236960f4dac87 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Mon, 11 Aug 2025 13:00:38 +0200 Subject: [PATCH 04/26] dev: Improved memory management of sprites --- Makefile | 3 ++- src/cub3d_data.h | 5 ++++- src/utils/destroy_utils.c | 41 +++++++++++++++++++++++++++++++++++++++ src/utils/destroy_utils.h | 21 ++++++++++++++++++++ src/utils/frees.c | 17 ++++------------ src/utils/inits.c | 2 +- 6 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 src/utils/destroy_utils.c create mode 100644 src/utils/destroy_utils.h diff --git a/Makefile b/Makefile index 278d1d0..f19824a 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 \ diff --git a/src/cub3d_data.h b/src/cub3d_data.h index 215ac14..aff808c 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/11 11:59:21 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 { diff --git a/src/utils/destroy_utils.c b/src/utils/destroy_utils.c new file mode 100644 index 0000000..1fb12f9 --- /dev/null +++ b/src/utils/destroy_utils.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* destroy_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/11 12:04:26 by tchampio #+# #+# */ +/* Updated: 2025/08/11 12:30:06 by tchampio ### ########.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; + while (sprite < MAX_SPRITES) + free(data->sprite_list[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..ed3dd88 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/11 12:45:32 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,11 @@ 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); 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/inits.c b/src/utils/inits.c index 2432197..987e6a7 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/11 11:52:31 by tchampio ### ########.fr */ +/* Updated: 2025/08/11 12:44:57 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ From 9988b09e914c9213eea5e1f10c9b0200f2881eda Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Mon, 11 Aug 2025 13:07:52 +0200 Subject: [PATCH 05/26] dev: Changed allowed characters to comply more about the current state of the game --- src/map/forbidden_characters.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/map/forbidden_characters.c b/src/map/forbidden_characters.c index a829f53..1173a3d 100644 --- a/src/map/forbidden_characters.c +++ b/src/map/forbidden_characters.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:18:13 by kcolin #+# #+# */ -/* Updated: 2025/07/17 14:47:34 by kcolin ### ########.fr */ +/* Updated: 2025/08/11 13:05:44 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,11 +14,19 @@ // TODO: use a #define for allowedchars, to prevent needless repetition +#define BONUS // FIXME: Delete me #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; From 2eb1d635d4f4dc2c665c63fb5f8b74ac78c075be Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 12 Aug 2025 13:45:26 +0200 Subject: [PATCH 06/26] norme: Fixed little norm error --- src/utils/destroy_utils.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/utils/destroy_utils.c b/src/utils/destroy_utils.c index 1fb12f9..f9fa637 100644 --- a/src/utils/destroy_utils.c +++ b/src/utils/destroy_utils.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/11 12:04:26 by tchampio #+# #+# */ -/* Updated: 2025/08/11 12:30:06 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 13:44:52 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,7 +28,6 @@ void destroy_textures(t_cub3d_data *data) if (data->we_texture) mlx_destroy_image(data->mlx, data->we_texture->img); free(data->we_texture); - } void destroy_sprites(t_cub3d_data *data) From 41437ec2153bfbed737959fc9d017cdf639c988c Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 12 Aug 2025 13:45:53 +0200 Subject: [PATCH 07/26] dev: Changed magic values for error messages to constants --- src/consts.h | 23 +++++++++++++++++++---- src/map/map_checker.c | 15 +++++++-------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/consts.h b/src/consts.h index a15c03e..84f5e96 100644 --- a/src/consts.h +++ b/src/consts.h @@ -6,32 +6,47 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:54:36 by kcolin #+# #+# */ -/* Updated: 2025/08/12 14:32:47 by kcolin ### ########.fr */ +/* Updated: 2025/08/12 14:49:36 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 + # 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" + #endif 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); } From 04705fe9e5484519f537bee71ca293c3c6c00449 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 12 Aug 2025 15:40:29 +0200 Subject: [PATCH 08/26] feat: added temp perk textures and placed perks in testmap_2 --- ressources/doubletap.xpm | 78 ++++++++++++++++++++++++++++++ ressources/good_maps/testmap_2.cub | 18 +++---- ressources/juggernog.xpm | 78 ++++++++++++++++++++++++++++++ ressources/revive.xpm | 78 ++++++++++++++++++++++++++++++ 4 files changed, 243 insertions(+), 9 deletions(-) create mode 100644 ressources/doubletap.xpm create mode 100644 ressources/juggernog.xpm create mode 100644 ressources/revive.xpm 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", +" ", +" ..++++++++++++++++++++++++++++++++++++++++++.. ", +" .++++++++++++++++++++++++++++++++++++++++++++. ", +" ++@@###@@@@@###@@@@@###@@@@@###@@@@@####@@@@++ ", +" ++@#####@@@#####@@@#####@@@#####@@@@####@@@@++ ", +" ++##++++#@#######@#######@#######@##########++ ", +" ++####+##@#######@#######@#######@##########++ ", +" ++@@##+@@@@@@##@@@@@@##@@@@@@##@@@@@@##@@@@@++ ", +" ++@+##+@@#@@###@@#@@###@@#@@###@@#@@####@@@@++ ", +" ++#@++@@###@@@@@###@@@@@###@@@@@####@@@@####++ ", +" ++##@@@#####@@@#####@@@#####@@@#####@@@@####++ ", +" ++##+@+######@#######@#$@@@$#@##############++ ", +" ++#+#@++#####@#######@$@@@@@$@##############++ ", +" ++@+@@++##@@@@@@@##@@@@@@@@$$@@@@##@@@@@@##@++ ", +" ++#+@#++###@@#@@###@$@@@@@$$$$@@####@@@@####++ ", +" ++@@++#@@@@@###@@@@$@@@@@@$$$$#@@@@@####@@@@++ ", +" ++@#####@@@#####@@@$@@@@@@$$$###@@@@####@@@@++ ", +" ++#+++++@@#######@@@@@@@@@@$$####@@######@@#++ ", +" ++##+#+##@###$$$$@$@@@@@@@@$#$$$$@##########++ ", +" ++##++##@@##$$$$$$$@@@@@@@@$$$$$$$@##@@##@@#++ ", +" ++@@+#++@#@$$$$$$$@@@@@@@@@@$$$$$$$@####@@@@++ ", +" ++@@+@++##$$$$$$$$@@@@@@@@@@$$$$$$$$@@@@@##@++ ", +" ++##@@@###$$$$$$$@@@@@@@@@@@@$$$$$$$@@@@####++ ", +" ++#+++++##$$$$@$$@@@@@@@@@@@@$$#$$$$#@@#####++ ", +" ++##+@####$$$@#$$@@@@%%%%@@@@$$##$$$########++ ", +" ++##+++#@$@$@@@$@@@%%%%%%%%@@@$##@$@$@@##@@#++ ", +" ++#@+#@@#$@@@#@@@@$$%%%%%%$$@@@@#@@@$@@@####++ ", +" ++@@+#++@@@@$##@@$$$$%%%%$$$$@@@@$@@@##@@@@@++ ", +" ++@#####@@@####@@&$$$$%%$$$$%@@#@@@@####@@@@++ ", +" ++#++++#@@#####@@&%$$%%%%$$%%@@##@@######@@#++ ", +" ++##+##+#@#####$&&%%%@%%@%%%%%$##@####++#+##++ ", +" ++##+#++@@####@&&@%%%%@@%%%%@%%##@@##@@+#+@#++ ", +" ++@@+#+@@#@@###&&@@@@@@@@@@@@%%@@#@@##++@+@@++ ", +" ++@@+@++##@@@@@$&%@@@@@@@@@@%%$@@##@@@+@@+#@++ ", +" ++##@@@#####@@@##&%@@%%%%@@%%@@#####@@@++++#++ ", +" ++##@@#######@@##&&@@@@@@@@%%@@######@@#####++ ", +" ++###@#######@#$$&&&%@@@@%%%&$$#######++#+##++ ", +" ++##@@##@####$$***&%%%%%%%%&***$$#@##@@##+@#++ ", +" ++#@@#@@##$$***=====&&&&&&==&==**=$$@@@+++##++ ", +" ++@@##@@@@****===&&=**=&&*====&==**=@##@@+@@++ ", +" ++@#####@$**====&=***===&=**====&==*$#+++++@++ ", +" ++######$**====&=***=======**=======*$###@@#++ ", +" ++######$*---====**=-----==**====---=$++#+##++ ", +" ++##@###$*----&=***-------=***==----=$++#+@#++ ", +" ++@@###@@$---$#***=---$$---=***@$---####++@@++ ", +" ++@@@@@@$@-$$@@***---$@@$--=***@@$$$$@@+@+#@++ ", +" ++##@@@#$@@$@@@***---@@##---***###$$$@+++++#++ ", +" ++##@@###$$##@@***--$@@##$--***####$#@@#####++ ", +" ++###@#######@#**--$#@####$--**#########++##++ ", +" ++##@@##@####@@$$-$##@@###@$$@@###@##@++#@+#++ ", +" ++@@@@@@##@@@@@$$$#@@@@@@##@$@@@@##@@@++@#+@++ ", +" ++@@##@@@@@@@##$$@@@@##@@@@@@$$@@@@@@#++@@+@++ ", +" ++@@###@@@@@###@@@@@###@@@@@###@@@@@###+@+@@++ ", +" ++######@@#######@@######@@######@@######@@#++ ", +" ++#######@#######@#######@#######@######++##++ ", +" ++##@###@@####@##@@###@##@@###@##@@##@@+#@+#++ ", +" ++@@##@@@@@@@##@@@@@@##@@@@@@##@@@@@@##+@@@@++ ", +" ++@@@@@@##@@@@@@@##@@@@@@##@@@@@@##@@@@+@##@++ ", +" ++#@@@@@###@@@@@###@@@@@###@@@@@####@@++++##++ ", +" ++##@@#######@@######@@######@@######@@#####++ ", +" ++###@#######@#######@#######@##############++ ", +" .++++++++++++++++++++++++++++++++++++++++++++. ", +" ..++++++++++++++++++++++++++++++++++++++++++.. ", +" "}; From 09ff569a315fbdc7573727f04535d412b819fb78 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 12 Aug 2025 15:41:42 +0200 Subject: [PATCH 09/26] feat: made sprites be placed in map file --- src/utils/destroy_utils.c | 11 +++++--- src/utils/frees.c | 3 ++- src/utils/inits.c | 55 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/src/utils/destroy_utils.c b/src/utils/destroy_utils.c index f9fa637..aad65ac 100644 --- a/src/utils/destroy_utils.c +++ b/src/utils/destroy_utils.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/11 12:04:26 by tchampio #+# #+# */ -/* Updated: 2025/08/12 13:44:52 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 15:39:30 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,6 +35,11 @@ void destroy_sprites(t_cub3d_data *data) int sprite; sprite = 0; - while (sprite < MAX_SPRITES) - free(data->sprite_list[sprite++]); + 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/frees.c b/src/utils/frees.c index ed3dd88..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/08/11 12:45:32 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 15:38:45 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -67,6 +67,7 @@ int destroy(t_cub3d_data *data, int exit_code) 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->mlx) mlx_destroy_display(data->mlx); diff --git a/src/utils/inits.c b/src/utils/inits.c index 987e6a7..715d1cd 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/11 12:44:57 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 15:21:00 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,6 +16,7 @@ #include "../../mlx/mlx.h" #include "../map/map_checker.h" #include "frees.h" +#include t_img_data *load_single_texture(t_cub3d_data *data, char *path) { @@ -52,6 +53,57 @@ 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; + int currentsprite; + + y = 0; + currentsprite = 0; + while (y < data->map->mapheight) + { + x = 0; + while (x < (int)ft_strlen(map[y])) + { + if (map[y][x] == 'M') + { + data->sprite_list[currentsprite] = ft_calloc(sizeof(t_sprite), 1); + data->sprite_list[currentsprite]->image = load_single_texture(data, "ressources/box.xpm"); + data->sprite_list[currentsprite]->x = x + 0.5; + data->sprite_list[currentsprite]->y = y + 0.5; + currentsprite++; + } + if (map[y][x] == 'Q') + { + data->sprite_list[currentsprite] = ft_calloc(sizeof(t_sprite), 1); + data->sprite_list[currentsprite]->image = load_single_texture(data, "ressources/revive.xpm"); + data->sprite_list[currentsprite]->x = x + 0.5; + data->sprite_list[currentsprite]->y = y + 0.5; + currentsprite++; + } + if (map[y][x] == 'J') + { + data->sprite_list[currentsprite] = ft_calloc(sizeof(t_sprite), 1); + data->sprite_list[currentsprite]->image = load_single_texture(data, "ressources/juggernog.xpm"); + data->sprite_list[currentsprite]->x = x + 0.5; + data->sprite_list[currentsprite]->y = y + 0.5; + currentsprite++; + } + if (map[y][x] == 'D') + { + data->sprite_list[currentsprite] = ft_calloc(sizeof(t_sprite), 1); + data->sprite_list[currentsprite]->image = load_single_texture(data, "ressources/doubletap.xpm"); + data->sprite_list[currentsprite]->x = x + 0.5; + data->sprite_list[currentsprite]->y = y + 0.5; + currentsprite++; + } + x++; + } + y++; + } +} + void init_cub3d_data(t_cub3d_data *data, char **argv) { ft_bzero(data, sizeof(*data)); @@ -74,4 +126,5 @@ void init_cub3d_data(t_cub3d_data *data, char **argv) 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); } From 00e8a73d14167568d54fe4c32d8d0fdc4d4af3fe Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 12 Aug 2025 15:57:27 +0200 Subject: [PATCH 10/26] dev: improved sprites by creating a create_sprite function --- Makefile | 1 + src/sprites/create_sprite.c | 30 ++++++++++++++++++++++++++++ src/sprites/create_sprite.h | 21 ++++++++++++++++++++ src/utils/inits.c | 39 ++++++++----------------------------- 4 files changed, 60 insertions(+), 31 deletions(-) create mode 100644 src/sprites/create_sprite.c create mode 100644 src/sprites/create_sprite.h diff --git a/Makefile b/Makefile index f19824a..ebea878 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,7 @@ SOURCEFILES = \ src/renderer/render.c \ src/sprites/sort_sprites.c \ src/sprites/sprite_caster.c \ + src/sprites/create_sprite.c \ OBJECTS = $(SOURCEFILES:.c=.o) NAME = cub3d diff --git a/src/sprites/create_sprite.c b/src/sprites/create_sprite.c new file mode 100644 index 0000000..7ab3830 --- /dev/null +++ b/src/sprites/create_sprite.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_sprite.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/12 15:43:19 by tchampio #+# #+# */ +/* Updated: 2025/08/12 15:53:05 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->image = load_single_texture(data, texture); + return (sprite); +} diff --git a/src/sprites/create_sprite.h b/src/sprites/create_sprite.h new file mode 100644 index 0000000..cb9f873 --- /dev/null +++ b/src/sprites/create_sprite.h @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_sprite.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/08/12 15:49:25 by tchampio #+# #+# */ +/* Updated: 2025/08/12 15:53:12 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); + +#endif // CREATE_SPRITE_H diff --git a/src/utils/inits.c b/src/utils/inits.c index 715d1cd..abd4811 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/12 15:21:00 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 15:55:51 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,6 +15,7 @@ #include "../../libft/includes/libft.h" #include "../../mlx/mlx.h" #include "../map/map_checker.h" +#include "../sprites/create_sprite.h" #include "frees.h" #include @@ -57,47 +58,23 @@ void place_base_sprites(t_cub3d_data *data, char **map) { int y; int x; - int currentsprite; + int c; y = 0; - currentsprite = 0; + c = 0; while (y < data->map->mapheight) { x = 0; while (x < (int)ft_strlen(map[y])) { if (map[y][x] == 'M') - { - data->sprite_list[currentsprite] = ft_calloc(sizeof(t_sprite), 1); - data->sprite_list[currentsprite]->image = load_single_texture(data, "ressources/box.xpm"); - data->sprite_list[currentsprite]->x = x + 0.5; - data->sprite_list[currentsprite]->y = y + 0.5; - currentsprite++; - } + data->sprite_list[c++] = create_sprite(data, "ressources/box.xpm", x + 0.5, y + 0.5); if (map[y][x] == 'Q') - { - data->sprite_list[currentsprite] = ft_calloc(sizeof(t_sprite), 1); - data->sprite_list[currentsprite]->image = load_single_texture(data, "ressources/revive.xpm"); - data->sprite_list[currentsprite]->x = x + 0.5; - data->sprite_list[currentsprite]->y = y + 0.5; - currentsprite++; - } + data->sprite_list[c++] = create_sprite(data, "ressources/revive.xpm", x + 0.5, y + 0.5); if (map[y][x] == 'J') - { - data->sprite_list[currentsprite] = ft_calloc(sizeof(t_sprite), 1); - data->sprite_list[currentsprite]->image = load_single_texture(data, "ressources/juggernog.xpm"); - data->sprite_list[currentsprite]->x = x + 0.5; - data->sprite_list[currentsprite]->y = y + 0.5; - currentsprite++; - } + data->sprite_list[c++] = create_sprite(data, "ressources/juggernog.xpm", x + 0.5, y + 0.5); if (map[y][x] == 'D') - { - data->sprite_list[currentsprite] = ft_calloc(sizeof(t_sprite), 1); - data->sprite_list[currentsprite]->image = load_single_texture(data, "ressources/doubletap.xpm"); - data->sprite_list[currentsprite]->x = x + 0.5; - data->sprite_list[currentsprite]->y = y + 0.5; - currentsprite++; - } + data->sprite_list[c++] = create_sprite(data, "ressources/doubletap.xpm", x + 0.5, y + 0.5); x++; } y++; From dafe94804e6be9230b112a314bb16f1430c46e17 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 12 Aug 2025 16:15:02 +0200 Subject: [PATCH 11/26] norme: normed everything --- src/sprites/create_sprite.c | 20 +++++++++++++++++++- src/sprites/create_sprite.h | 4 +++- src/sprites/sprite.h | 2 +- src/utils/inits.c | 14 +++++--------- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/sprites/create_sprite.c b/src/sprites/create_sprite.c index 7ab3830..1bea488 100644 --- a/src/sprites/create_sprite.c +++ b/src/sprites/create_sprite.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/12 15:43:19 by tchampio #+# #+# */ -/* Updated: 2025/08/12 15:53:05 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 16:14:27 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,3 +28,21 @@ t_sprite *create_sprite(t_cub3d_data *data, char *texture, 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, "ressources/box.xpm", x + 0.5, y + 0.5); + if (c == 'Q') + sprite = create_sprite(data, + "ressources/revive.xpm", x + 0.5, y + 0.5); + if (c == 'J') + sprite = create_sprite(data, + "ressources/juggernog.xpm", x + 0.5, y + 0.5); + if (c == 'D') + sprite = create_sprite(data, + "ressources/doubletap.xpm", x + 0.5, y + 0.5); + return (sprite); +} diff --git a/src/sprites/create_sprite.h b/src/sprites/create_sprite.h index cb9f873..fe204ee 100644 --- a/src/sprites/create_sprite.h +++ b/src/sprites/create_sprite.h @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/12 15:49:25 by tchampio #+# #+# */ -/* Updated: 2025/08/12 15:53:12 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 16:13:02 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,5 +17,7 @@ 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/sprite.h b/src/sprites/sprite.h index ad2aece..f58e116 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/12 16:12:37 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/utils/inits.c b/src/utils/inits.c index abd4811..d904b41 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/12 15:55:51 by tchampio ### ########.fr */ +/* Updated: 2025/08/12 16:13:50 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -67,14 +67,10 @@ void place_base_sprites(t_cub3d_data *data, char **map) x = 0; while (x < (int)ft_strlen(map[y])) { - if (map[y][x] == 'M') - data->sprite_list[c++] = create_sprite(data, "ressources/box.xpm", x + 0.5, y + 0.5); - if (map[y][x] == 'Q') - data->sprite_list[c++] = create_sprite(data, "ressources/revive.xpm", x + 0.5, y + 0.5); - if (map[y][x] == 'J') - data->sprite_list[c++] = create_sprite(data, "ressources/juggernog.xpm", x + 0.5, y + 0.5); - if (map[y][x] == 'D') - data->sprite_list[c++] = create_sprite(data, "ressources/doubletap.xpm", x + 0.5, y + 0.5); + if (map[y][x] == 'M' || map[y][x] == 'Q' + || map[y][x] == 'J' || map[y][x] == 'D') + data->sprite_list[c++] = place_right_sprite(data, + map[y][x], x, y); x++; } y++; From db66decbf8890140e803160d07bb6bc865800790 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 12 Aug 2025 16:18:34 +0200 Subject: [PATCH 12/26] fix: removed trailing BONUS definition --- src/map/forbidden_characters.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/map/forbidden_characters.c b/src/map/forbidden_characters.c index 1173a3d..dbbdce5 100644 --- a/src/map/forbidden_characters.c +++ b/src/map/forbidden_characters.c @@ -6,15 +6,12 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:18:13 by kcolin #+# #+# */ -/* Updated: 2025/08/11 13:05:44 by tchampio ### ########.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 - -#define BONUS // FIXME: Delete me #ifdef BONUS /* From 412dc89336bd0d211703ecd6351cad185ef5f32f Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Thu, 14 Aug 2025 19:52:34 +0200 Subject: [PATCH 13/26] fix: Transferred trailing magic error messages as consts --- src/consts.h | 9 ++++++++- src/map/populate_map.c | 4 ++-- src/map/setters.c | 16 ++++++++-------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/consts.h b/src/consts.h index 84f5e96..563e3b4 100644 --- a/src/consts.h +++ b/src/consts.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:54:36 by kcolin #+# #+# */ -/* Updated: 2025/08/12 14:49:36 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 19:50:28 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -48,5 +48,12 @@ # 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/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]) { From 94075506f6529f0ae81558a528bea0a3df2f7b2a Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Thu, 14 Aug 2025 21:25:03 +0200 Subject: [PATCH 14/26] fix: Transferred sprite pathes to constants --- src/consts.h | 6 +++++- src/sprites/create_sprite.c | 10 +++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/consts.h b/src/consts.h index 563e3b4..ce437e1 100644 --- a/src/consts.h +++ b/src/consts.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:54:36 by kcolin #+# #+# */ -/* Updated: 2025/08/14 19:50:28 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:23:25 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,6 +35,10 @@ // Sprite consts # define SPRITE_TRANPARENCY_COLOR 0xff00dc # 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" diff --git a/src/sprites/create_sprite.c b/src/sprites/create_sprite.c index 1bea488..b55299f 100644 --- a/src/sprites/create_sprite.c +++ b/src/sprites/create_sprite.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/12 15:43:19 by tchampio #+# #+# */ -/* Updated: 2025/08/12 16:14:27 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:24:03 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -34,15 +34,15 @@ 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, "ressources/box.xpm", x + 0.5, y + 0.5); + sprite = create_sprite(data, MYSTERY_TEX, x + 0.5, y + 0.5); if (c == 'Q') sprite = create_sprite(data, - "ressources/revive.xpm", x + 0.5, y + 0.5); + REV_TEX, x + 0.5, y + 0.5); if (c == 'J') sprite = create_sprite(data, - "ressources/juggernog.xpm", x + 0.5, y + 0.5); + JUGG_TEX, x + 0.5, y + 0.5); if (c == 'D') sprite = create_sprite(data, - "ressources/doubletap.xpm", x + 0.5, y + 0.5); + DBLTAP_TEX, x + 0.5, y + 0.5); return (sprite); } From 4a70e4469720c351cb5abb5463979beeef3dd38d Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Thu, 14 Aug 2025 21:27:53 +0200 Subject: [PATCH 15/26] fix: Added a check for the sprites, to avoid segfaults and/or invalid writes --- src/utils/inits.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/utils/inits.c b/src/utils/inits.c index d904b41..39045e4 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/12 16:13:50 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:26:14 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -69,8 +69,11 @@ void place_base_sprites(t_cub3d_data *data, char **map) { if (map[y][x] == 'M' || map[y][x] == 'Q' || map[y][x] == 'J' || map[y][x] == 'D') - data->sprite_list[c++] = place_right_sprite(data, - map[y][x], x, y); + { + if (c < MAX_SPRITES) + data->sprite_list[c++] = place_right_sprite(data, + map[y][x], x, y); + } x++; } y++; From 0d6cc4063ac33141695ac07f4bda5cc5c3d3a7bd Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Thu, 14 Aug 2025 21:38:49 +0200 Subject: [PATCH 16/26] dev: changed the c var in place_base_sprites to a counter in data struct --- src/cub3d_data.h | 3 ++- src/utils/inits.c | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/cub3d_data.h b/src/cub3d_data.h index aff808c..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/11 11:59:21 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:36:15 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,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/utils/inits.c b/src/utils/inits.c index 39045e4..d533f07 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/14 21:26:14 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:37:58 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -58,10 +58,8 @@ void place_base_sprites(t_cub3d_data *data, char **map) { int y; int x; - int c; y = 0; - c = 0; while (y < data->map->mapheight) { x = 0; @@ -70,9 +68,9 @@ void place_base_sprites(t_cub3d_data *data, char **map) if (map[y][x] == 'M' || map[y][x] == 'Q' || map[y][x] == 'J' || map[y][x] == 'D') { - if (c < MAX_SPRITES) - data->sprite_list[c++] = place_right_sprite(data, - map[y][x], x, y); + if (data->sprite_counter < MAX_SPRITES) + data->sprite_list[data->sprite_counter++] = + place_right_sprite(data, map[y][x], x, y); } x++; } From ee329812fdccab3f9b9d3f29eb95ea9a3ab57b13 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 13 Aug 2025 14:57:06 +0200 Subject: [PATCH 17/26] dev: Added sprite types and gave 'base' sprites their types --- src/sprites/create_sprite.c | 5 +++++ src/sprites/sprite.h | 45 ++++++++++++++++++++++--------------- src/utils/inits.c | 2 +- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/sprites/create_sprite.c b/src/sprites/create_sprite.c index b55299f..a9aabff 100644 --- a/src/sprites/create_sprite.c +++ b/src/sprites/create_sprite.c @@ -6,7 +6,11 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/12 15:43:19 by tchampio #+# #+# */ +<<<<<<< HEAD /* Updated: 2025/08/14 21:24:03 by tchampio ### ########.fr */ +======= +/* Updated: 2025/08/13 14:53:38 by tchampio ### ########.fr */ +>>>>>>> f9c846b (dev: Added sprite types and gave 'base' sprites their types) /* */ /* ************************************************************************** */ @@ -25,6 +29,7 @@ t_sprite *create_sprite(t_cub3d_data *data, char *texture, return (NULL); sprite->x = x; sprite->y = y; + sprite->sprite_type = OTHER; sprite->image = load_single_texture(data, texture); return (sprite); } diff --git a/src/sprites/sprite.h b/src/sprites/sprite.h index f58e116..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/12 16:12:37 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/utils/inits.c b/src/utils/inits.c index d533f07..916f2d9 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/14 21:37:58 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:41:23 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ From 01f0ac21df577f398a6619fe299e6751b98ddf8a Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 13 Aug 2025 15:31:40 +0200 Subject: [PATCH 18/26] feat: Made a little sprite interaction for perk type sprites It's more for the sake of the demo but it shows we can make interactions with sprites. Although it's badly integrated. --- src/player/player.h | 2 +- src/sprites/sprite_caster.c | 15 +++++++++++++-- src/utils/hooks.c | 6 +++++- src/utils/keypresses.h | 3 ++- 4 files changed, 21 insertions(+), 5 deletions(-) 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/sprite_caster.c b/src/sprites/sprite_caster.c index f08f886..899e2f6 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/13 15:30:55 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) @@ -109,6 +109,17 @@ void sprite_caster(t_cub3d_data *data) if (!data->sprite_list) 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/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/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 Date: Thu, 14 Aug 2025 21:45:39 +0200 Subject: [PATCH 19/26] norme: Fixed little oopsie --- src/utils/inits.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/inits.c b/src/utils/inits.c index d533f07..ebc3a11 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/14 21:37:58 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:45:19 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -69,8 +69,8 @@ void place_base_sprites(t_cub3d_data *data, char **map) || map[y][x] == 'J' || map[y][x] == 'D') { if (data->sprite_counter < MAX_SPRITES) - data->sprite_list[data->sprite_counter++] = - place_right_sprite(data, map[y][x], x, y); + data->sprite_list[data->sprite_counter++] + = place_right_sprite(data, map[y][x], x, y); } x++; } From 0ac6ee9394c377f8aba29d40f96bd4f88a71cce3 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Thu, 14 Aug 2025 21:45:39 +0200 Subject: [PATCH 20/26] norme: Fixed little oopsie --- src/utils/inits.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/inits.c b/src/utils/inits.c index 916f2d9..3100ec9 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/14 21:41:23 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:46:53 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -69,8 +69,8 @@ void place_base_sprites(t_cub3d_data *data, char **map) || map[y][x] == 'J' || map[y][x] == 'D') { if (data->sprite_counter < MAX_SPRITES) - data->sprite_list[data->sprite_counter++] = - place_right_sprite(data, map[y][x], x, y); + data->sprite_list[data->sprite_counter++] + = place_right_sprite(data, map[y][x], x, y); } x++; } From 541bc9ccf8e9ef0413f239c8e01fdd6d6da21cb1 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 13 Aug 2025 14:57:06 +0200 Subject: [PATCH 21/26] dev: Added sprite types and gave 'base' sprites their types --- src/utils/inits.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/inits.c b/src/utils/inits.c index 3100ec9..ec98650 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/14 21:46:53 by tchampio ### ########.fr */ +/* Updated: 2025/08/14 21:47:17 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ From ef7a6c27a47b10de7810579b2be23c7beda6aeeb Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Mon, 18 Aug 2025 13:04:13 +0200 Subject: [PATCH 22/26] fix: Removed git conflict marker --- src/sprites/create_sprite.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/sprites/create_sprite.c b/src/sprites/create_sprite.c index a9aabff..4e683bf 100644 --- a/src/sprites/create_sprite.c +++ b/src/sprites/create_sprite.c @@ -6,11 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/12 15:43:19 by tchampio #+# #+# */ -<<<<<<< HEAD -/* Updated: 2025/08/14 21:24:03 by tchampio ### ########.fr */ -======= -/* Updated: 2025/08/13 14:53:38 by tchampio ### ########.fr */ ->>>>>>> f9c846b (dev: Added sprite types and gave 'base' sprites their types) +/* Updated: 2025/08/18 12:55:21 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ From 5c7cc77419876dae1666dec8bc74726b074e89ea Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Mon, 18 Aug 2025 13:07:08 +0200 Subject: [PATCH 23/26] dev: improved how sprites are detected in maps --- src/utils/inits.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/utils/inits.c b/src/utils/inits.c index ec98650..98a38a0 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/14 21:47:17 by tchampio ### ########.fr */ +/* Updated: 2025/08/18 13:06:13 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -65,8 +65,7 @@ void place_base_sprites(t_cub3d_data *data, char **map) x = 0; while (x < (int)ft_strlen(map[y])) { - if (map[y][x] == 'M' || map[y][x] == 'Q' - || map[y][x] == 'J' || map[y][x] == 'D') + if (ft_strchr("MQJD", map[y][x])) { if (data->sprite_counter < MAX_SPRITES) data->sprite_list[data->sprite_counter++] From 92770f44f893cfb5aac87a13eafb9a49b01c3bc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Mon, 18 Aug 2025 12:57:29 +0200 Subject: [PATCH 24/26] fix: segfault & leak with missing sprite image --- src/utils/destroy_utils.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/utils/destroy_utils.c b/src/utils/destroy_utils.c index aad65ac..632be6f 100644 --- a/src/utils/destroy_utils.c +++ b/src/utils/destroy_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* destroy_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: tchampio +#+ +:+ +#+ */ +/* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2025/08/11 12:04:26 by tchampio #+# #+# */ -/* Updated: 2025/08/12 15:39:30 by tchampio ### ########.fr */ +/* Created: 2025/08/18 13:05:31 by kcolin #+# #+# */ +/* Updated: 2025/08/18 13:05:31 by kcolin ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,6 +35,8 @@ 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); From 2fc8cf21a15a57218878fc72b5b17120caeefc0d Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Mon, 18 Aug 2025 13:40:01 +0200 Subject: [PATCH 25/26] fix: fixed segfault when compiling for mandatory part. Fixed bad check --- src/sprites/sprite_caster.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sprites/sprite_caster.c b/src/sprites/sprite_caster.c index 899e2f6..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/13 15:30:55 by tchampio ### ########.fr */ +/* Updated: 2025/08/18 13:39:26 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -106,7 +106,7 @@ 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) From 8445f240a2c85a5d009f0bf9b7e906a202be6a39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Mon, 18 Aug 2025 13:21:52 +0200 Subject: [PATCH 26/26] feat: basic zombie movement (very bad) --- Makefile | 3 ++- src/main.c | 4 +++- src/sprites/move_sprites.c | 27 +++++++++++++++++++++++++++ src/sprites/move_sprites.h | 20 ++++++++++++++++++++ 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/sprites/move_sprites.c create mode 100644 src/sprites/move_sprites.h diff --git a/Makefile b/Makefile index ebea878..781e3f5 100644 --- a/Makefile +++ b/Makefile @@ -30,9 +30,10 @@ 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 \ - src/sprites/create_sprite.c \ OBJECTS = $(SOURCEFILES:.c=.o) NAME = cub3d diff --git a/src/main.c b/src/main.c index 3ae8f7c..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:49:01 by tchampio ### ########.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); 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