brr brr conveyors go nyooom

This commit is contained in:
Masséna Fezard | Nounouille 2021-04-20 15:00:16 +02:00
parent ae7d4717b4
commit b00262807c
11 changed files with 97 additions and 6 deletions

View File

@ -30,6 +30,10 @@ set(ASSETS_cg
assets-cg/img/end.png
assets-cg/img/door.png
assets-cg/img/key.png
assets-cg/img/conveyor_u.png
assets-cg/img/conveyor_r.png
assets-cg/img/conveyor_d.png
assets-cg/img/conveyor_l.png
# ...
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View File

@ -20,4 +20,20 @@ door.png:
key.png:
type: bopti-image
name: img_key
name: img_key
conveyor_u.png:
type: bopti-image
name: img_conveyor_u
conveyor_r.png:
type: bopti-image
name: img_conveyor_r
conveyor_d.png:
type: bopti-image
name: img_conveyor_d
conveyor_l.png:
type: bopti-image
name: img_conveyor_l

View File

@ -1,19 +1,25 @@
#pragma once
#define LEVEL_NB 2
#define LEVEL_NB 3
#define LEVEL_SIZE 16
#define TILE_SIZE 12
#define PLAYER_SIZE 10
/* struct for a pair of values */
/* struct for a pair of int values */
typedef struct Vec2 {
int x, y;
} Vec2;
/* struct for a pair of float values */
typedef struct FVec2 {
float x, y;
} FVec2;
/* struct for player's data */
typedef struct Player {
Vec2 pos;
Vec2 spawn;
FVec2 frac;
} Player;
/* used for tiles */

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 B

After

Width:  |  Height:  |  Size: 432 B

View File

@ -37,5 +37,24 @@ const tile_t level[LEVEL_NB][LEVEL_SIZE][LEVEL_SIZE] = {
2, 0, 6, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 6, 0, 2,
2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
}
},
{
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 8, 8, 8, 8, 4, 6, 8, 8, 8, 8, 8, 8, 2, 2,
2, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 2,
2, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 2,
2, 7, 7, 7, 7, 2, 2, 2, 2, 2, 2, 8, 9, 9, 9, 2,
2, 4, 7, 4, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 2,
2, 6, 7, 6, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 2,
2, 7, 7, 7, 0, 0, 1, 2, 2, 2, 2, 2, 9, 9, 9, 2,
2, 7, 7, 7, 2, 2, 2, 2, 2, 3, 0, 5, 9, 9, 9, 2,
2, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 6, 9, 6, 2,
2, 7, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 4, 9, 4, 2,
2, 7, 7, 7, 10, 2, 2, 2, 2, 2, 2, 9, 9, 9, 9, 2,
2, 7, 7, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 2,
2, 7, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 2,
2, 2, 10, 10, 10, 10, 10, 10, 6, 4, 10, 10, 10, 10, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
}
};

View File

@ -85,6 +85,10 @@ int main(void) {
extern bopti_image_t img_end;
extern bopti_image_t img_door;
extern bopti_image_t img_key;
extern bopti_image_t img_conveyor_u;
extern bopti_image_t img_conveyor_r;
extern bopti_image_t img_conveyor_d;
extern bopti_image_t img_conveyor_l;
extern tile_t level[LEVEL_NB][LEVEL_SIZE][LEVEL_SIZE];
@ -96,7 +100,8 @@ int main(void) {
/* player */
Player player = {
.pos = {0, 0},
.spawn = {0, 0}
.spawn = {0, 0},
.frac = {0, 0}
};
memcpy(curr_level, level[lvl], sizeof(level[lvl]));
@ -133,12 +138,32 @@ int main(void) {
dsubimage(m * TILE_SIZE, n * TILE_SIZE, &img_key,
((timer / 30) % 4) * 12, 0, 12, 12, 0);
break;
case 7:
/* key ring */
dsubimage(m * TILE_SIZE, n * TILE_SIZE, &img_conveyor_u,
((timer / 15) % 6) * 12, 0, 12, 12, 0);
break;
case 8:
/* key ring */
dsubimage(m * TILE_SIZE, n * TILE_SIZE, &img_conveyor_r,
((timer / 15) % 6) * 12, 0, 12, 12, 0);
break;
case 9:
/* key ring */
dsubimage(m * TILE_SIZE, n * TILE_SIZE, &img_conveyor_d,
((timer / 15) % 6) * 12, 0, 12, 12, 0);
break;
case 10:
/* key ring */
dsubimage(m * TILE_SIZE, n * TILE_SIZE, &img_conveyor_l,
((timer / 15) % 6) * 12, 0, 12, 12, 0);
break;
}
}
}
dprint(0, 0, C_BLACK, "%d", lvl);
/* drawing the player */
dimage(player.pos.x, player.pos.y, &img_player);
@ -150,16 +175,37 @@ int main(void) {
};
clearevents();
/* conveyors */
if(collide(player.pos, 0, 7, curr_level)) { player.frac.y -= 0.5; }
if(collide(player.pos, 0, 8, curr_level)) { player.frac.x += 0.5; }
if(collide(player.pos, 0, 9, curr_level)) { player.frac.y += 0.5; }
if(collide(player.pos, 0, 10, curr_level)) { player.frac.x -= 0.5; }
/* little accelerations (like conveyors) */
const int ifrac_x = player.frac.x;
player.frac.x -= ifrac_x;
mov.x += ifrac_x;
const int ifrac_y = player.frac.y;
player.frac.y -= ifrac_y;
mov.y += ifrac_y;
/* trying to move the player >w< */
if(!collide((Vec2){player.pos.x + mov.x, player.pos.y}, 0, 2, curr_level) &&
!collide((Vec2){player.pos.x + mov.x, player.pos.y}, 1, 5, curr_level)) {
player.pos.x += mov.x;
}
else {
player.frac = (FVec2){ 0, 0 };
}
if(!collide((Vec2){player.pos.x, player.pos.y + mov.y}, 0, 2, curr_level) &&
!collide((Vec2){player.pos.x, player.pos.y + mov.y}, 1, 5, curr_level)) {
player.pos.y += mov.y;
}
else {
player.frac = (FVec2){ 0, 0 };
}
/* d i e */
if(collide(player.pos, 2, 4, curr_level)) {