mirror of https://git.sr.ht/~kikoodx/momento
game flow (pun intended)
This commit is contained in:
parent
64a702ec52
commit
55d386696f
|
@ -16,6 +16,7 @@ set(SOURCES
|
|||
src/main.c
|
||||
src/util.c
|
||||
src/level/load.c
|
||||
src/level/update.c
|
||||
src/level/draw.c
|
||||
src/level/get_tile.c
|
||||
src/level/is_water.c
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 103 B After Width: | Height: | Size: 164 B |
|
@ -19,6 +19,7 @@
|
|||
#define JUMP_SPD -4.0
|
||||
#define AIR_JMP_SPD -3.0
|
||||
#define SWIM_SPD -1.0
|
||||
#define SWIM_OUT_SPD -1.6
|
||||
#define BOUNCE_SPD -5.0
|
||||
#define JUMP_BUFFER 10
|
||||
#define JUMP_GRACE 6
|
||||
|
@ -26,4 +27,6 @@
|
|||
#define BURST_BOOST 0.5
|
||||
#define V_TRANS_SPD (1.0 / 20.0)
|
||||
#define H_TRANS_SPD (1.0 / 20.0)
|
||||
#define WATER_FLOW 16
|
||||
#define WATER_FRAMES 4
|
||||
/* #define RECORDING */
|
||||
|
|
|
@ -22,6 +22,7 @@ struct Level {
|
|||
Tile data[LEVEL_WIDTH * LEVEL_HEIGHT];
|
||||
struct VisualTile visual_data[LEVEL_WIDTH * LEVEL_HEIGHT];
|
||||
int water_level;
|
||||
int water_timer;
|
||||
int width;
|
||||
int height;
|
||||
int gold;
|
||||
|
@ -34,6 +35,7 @@ extern struct Level level;
|
|||
/* need to set global before call: level_id */
|
||||
void level_load_bfile(void);
|
||||
void level_load_binary(void);
|
||||
void level_update(void);
|
||||
void level_draw(void);
|
||||
Tile level_get_tile(int x, int y);
|
||||
int level_is_water(int x, int y);
|
||||
|
|
|
@ -26,6 +26,7 @@ struct Player {
|
|||
int jump_buffer;
|
||||
int jump_grace;
|
||||
int jumps_left;
|
||||
int was_in_water;
|
||||
enum AirState air_state;
|
||||
/* animations */
|
||||
struct Particle anim;
|
||||
|
|
|
@ -41,6 +41,9 @@ water_draw(void)
|
|||
while (x-- > 0) {
|
||||
const Tile tile = level_get_tile(x, y);
|
||||
if (tile != TILE_SOLID)
|
||||
dimage(x * TILE_WIDTH, y * TILE_HEIGHT, &bimg_water);
|
||||
dsubimage(
|
||||
x * TILE_WIDTH, y * TILE_HEIGHT, &bimg_water,
|
||||
(int)(level.water_timer / WATER_FLOW) * TILE_WIDTH,
|
||||
0, TILE_WIDTH, bimg_water.height, DIMAGE_NOCLIP);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -118,6 +118,7 @@ level_load_post(void)
|
|||
|
||||
/* disable water by default */
|
||||
level.water_level = -1;
|
||||
level.water_timer = 0;
|
||||
|
||||
y = level.height;
|
||||
while (y-- > 0) {
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
||||
/* Copyright (C) 2021 KikooDX */
|
||||
|
||||
#include "conf.h"
|
||||
#include "level.h"
|
||||
|
||||
void
|
||||
level_update(void)
|
||||
{
|
||||
level.water_timer += 1;
|
||||
if (level.water_timer == WATER_FRAMES * WATER_FLOW)
|
||||
level.water_timer = 0;
|
||||
}
|
|
@ -157,6 +157,7 @@ main(void)
|
|||
particles_update();
|
||||
player_return_code =
|
||||
player_update(&player, input);
|
||||
level_update();
|
||||
switch (player_return_code) {
|
||||
case -1:
|
||||
game_state = GamePause;
|
||||
|
|
|
@ -26,6 +26,7 @@ player_init(void)
|
|||
.jump_buffer = 0,
|
||||
.jump_grace = 0,
|
||||
.jumps_left = 0,
|
||||
.was_in_water = 0,
|
||||
.air_state = AirNeutral,
|
||||
.trail_state = 0,
|
||||
.blink_timer = BLINK_DELAY,
|
||||
|
|
|
@ -106,9 +106,12 @@ player_update(struct Player *restrict player, struct Input input)
|
|||
}
|
||||
|
||||
/* swim */
|
||||
if (k_jump && in_water) {
|
||||
if (k_jump && (player->was_in_water || in_water)) {
|
||||
jumped = 1;
|
||||
player->spd_y = SWIM_SPD;
|
||||
if (in_water)
|
||||
player->spd_y = SWIM_SPD;
|
||||
else
|
||||
player->spd_y = SWIM_OUT_SPD;
|
||||
player->air_state = AirRising;
|
||||
}
|
||||
|
||||
|
@ -207,6 +210,8 @@ player_update(struct Player *restrict player, struct Input input)
|
|||
if (dir_x)
|
||||
player->anim.flip_h = dir_x == -1;
|
||||
|
||||
player->was_in_water = in_water;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,8 @@ void
|
|||
trail_update(struct Player player)
|
||||
{
|
||||
int i = TRAIL_LIFE;
|
||||
color_t color = player.trail_state ? ZX_WHITE : ZX_GRAY;
|
||||
color_t color = ZX_WHITE;
|
||||
/* color = player.trail_state ? ZX_WHITE : ZX_GRAY; */
|
||||
|
||||
if (player_collide_water(player))
|
||||
color = ZX_CYAN;
|
||||
|
|
Loading…
Reference in New Issue