aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--inc/cub3d_structs.h2
-rw-r--r--map/map_one.cub3
-rw-r--r--src/ft_draw_sprite.c4
-rw-r--r--src/ft_draw_sprite_extra.c23
-rw-r--r--src/ft_extra_keys.c1
-rw-r--r--src/ft_init_map.c1
-rw-r--r--src/ft_sort_s_t.c37
7 files changed, 47 insertions, 24 deletions
diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h
index 836d168..ce45a92 100644
--- a/inc/cub3d_structs.h
+++ b/inc/cub3d_structs.h
@@ -202,7 +202,7 @@ typedef struct s_map
size_t map_w;
size_t map_h;
size_t mapl_len;
- int32_t sprite_nbr[FT_TOTAL_SPRT];
+ int16_t sprite_nbr[FT_TOTAL_SPRT];
uint8_t sprite_var;
uint8_t weapon_var;
int32_t sprite_order[FT_TOTAL_SPRT][4096];
diff --git a/map/map_one.cub b/map/map_one.cub
index dbe6894..cbc3634 100644
--- a/map/map_one.cub
+++ b/map/map_one.cub
@@ -11,6 +11,7 @@ F ./media/img/tex/parquet_small.xpm
S ./media/img/sprites/pillar.xpm
S3 ./media/img/sprites/pylon.xpm
S4 ./media/img/sprites/larry.xpm
+S5 ./media/img/sprites/linus.xpm
T ./media/img/sprites/spikes.xpm
@@ -21,7 +22,7 @@ SH 2
1000000000000000001
1000000000000000001
111111111111000000000000000001
-100000000000000000000000000001
+10000000000000000T0T0T00000001
100000000000020304000000T0T001
100000000000000000000000000001
1001000000T0000000000000000001
diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c
index 615bbd3..2aa1b43 100644
--- a/src/ft_draw_sprite.c
+++ b/src/ft_draw_sprite.c
@@ -43,7 +43,7 @@ void
if (!(dist_tab = ft_alloc_dist_tab()))
ft_error(FT_RET_ALLOC_ERR, FT_ERR_ALLOCATE, cl);
- while (++jt < cl->mlist.sprite_var)
+ while (++jt < FT_TOTAL_SPRT)
{
while (++it < cl->mlist.sprite_nbr[jt])
{
@@ -57,7 +57,7 @@ void
it = -1;
}
jt = -1;
- while (++jt < cl->mlist.sprite_var)
+ while (++jt < FT_TOTAL_SPRT)
{
it = -1;
while (++it < cl->mlist.sprite_nbr[jt] - 1)
diff --git a/src/ft_draw_sprite_extra.c b/src/ft_draw_sprite_extra.c
index e592da0..5133231 100644
--- a/src/ft_draw_sprite_extra.c
+++ b/src/ft_draw_sprite_extra.c
@@ -47,25 +47,38 @@ static void
(1 + sprite->transformx / sprite->transformy);
}
+static int8_t
+ ft_set_current_sprite(t_cub *cl, int8_t j)
+{
+ const int8_t st_o = cl->mlist.st_o[j];
+
+ if (st_o == 0)
+ return (4);
+ else if (st_o >= 1 && st_o <= 7)
+ return (st_o + 7);
+ else if (st_o == 8)
+ return (15);
+ return (0);
+}
+
void
ft_calc_sprite(t_cub *cl)
{
t_sprite sprite;
- int32_t i;
- int32_t j;
+ int16_t i;
+ int8_t j;
i = -1;
j = -1;
ft_sort_sprites(cl, -1, -1);
- while (++j < cl->mlist.sprite_var)
+ while (++j < FT_TOTAL_SPRT)
{
while (++i < cl->mlist.sprite_nbr[j])
{
sprite =
cl->sprites[cl->mlist.st_o[j]][cl->mlist.sprite_order[
cl->mlist.st_o[j]][i]];
- sprite.current_sprite = (cl->mlist.st_o[j] == 0) ?
- 4 : cl->mlist.st_o[j] + 7;
+ sprite.current_sprite = ft_set_current_sprite(cl, j);
sprite.spritey = sprite.s_pos_x - (cl->plist.pos_x - 0.5);
sprite.spritex = sprite.s_pos_y - (cl->plist.pos_y - 0.5);
ft_init_sprite(cl, &sprite);
diff --git a/src/ft_extra_keys.c b/src/ft_extra_keys.c
index f8a6db8..1a71402 100644
--- a/src/ft_extra_keys.c
+++ b/src/ft_extra_keys.c
@@ -12,7 +12,6 @@
#include <cub3d.h>
#include <stdint.h>
-#include <stdio.h>
#include <math.h>
#include <time.h>
#include <libft.h>
diff --git a/src/ft_init_map.c b/src/ft_init_map.c
index e85c6a6..72a02fd 100644
--- a/src/ft_init_map.c
+++ b/src/ft_init_map.c
@@ -67,7 +67,6 @@ int8_t
mlist->weapon_var = 0;
mlist->topsp = 0;
ft_bzero(mlist->sprite_nbr, FT_TOTAL_SPRT);
- ft_bzero(mlist->sprite_order, FT_TOTAL_SPRT);
i = -1;
while (++i < FT_TOTAL_SPRT)
ft_bzero(mlist->sprite_order[i], 4096);
diff --git a/src/ft_sort_s_t.c b/src/ft_sort_s_t.c
index 6c08882..9cbde8b 100644
--- a/src/ft_sort_s_t.c
+++ b/src/ft_sort_s_t.c
@@ -21,10 +21,10 @@ float
uint16_t i;
float **dist_tab;
- if (!(dist_tab = (float **)malloc(8 * sizeof(float*))))
+ if (!(dist_tab = (float **)malloc((FT_TOTAL_SPRT + 1) * sizeof(float*))))
return (NULL);
i = 0;
- while (i < 8)
+ while (i < FT_TOTAL_SPRT + 1)
{
if (!(dist_tab[i] = (float *)malloc(4096 * sizeof(float))))
return (NULL);
@@ -34,13 +34,26 @@ float
}
static void
- ft_init_st(uint16_t sprite_var, int32_t *st_o)
+ ft_init_st(int32_t *st_o)
{
int8_t i;
- i = -1;
- while (++i < sprite_var)
+ i = 0;
+ while (i < FT_TOTAL_SPRT)
+ {
st_o[i] = i;
+ i++;
+ }
+}
+
+static void
+ ft_swap_them(int16_t i, float **dist_tab)
+{
+ float tmp_i[4096];
+
+ ft_memcpy(tmp_i, dist_tab[i], 4096);
+ ft_memcpy(dist_tab[i], dist_tab[i + 1], 4096);
+ ft_memcpy(dist_tab[i + 1], tmp_i, 4096);
}
void
@@ -48,25 +61,23 @@ void
{
int16_t i;
int32_t tmp;
- float tmp_i[4096];
i = -1;
- ft_init_st(cl->mlist.sprite_var, cl->mlist.st_o);
- while (++i < cl->mlist.sprite_var)
+ ft_init_st(cl->mlist.st_o);
+ while (++i < FT_TOTAL_SPRT)
{
- if (i < 7 && dist_tab[i][0] < dist_tab[i + 1][0])
+ if (i < FT_TOTAL_SPRT && dist_tab[i][0]
+ && dist_tab[i][0] < dist_tab[i + 1][0])
{
tmp = cl->mlist.st_o[i];
cl->mlist.st_o[i] = cl->mlist.st_o[i + 1];
cl->mlist.st_o[i + 1] = tmp;
- ft_memcpy(tmp_i, dist_tab[i], 4096);
- ft_memcpy(dist_tab[i], dist_tab[i + 1], 4096);
- ft_memcpy(dist_tab[i + 1], tmp_i, 4096);
+ ft_swap_them(i, dist_tab);
i = -1;
}
}
i = -1;
- while (++i < 8)
+ while (++i < FT_TOTAL_SPRT + 1)
ft_memdel((void*)&dist_tab[i]);
ft_memdel((void*)&dist_tab);
}