summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKikooDX <kikoodx@paranoici.org>2022-04-01 23:00:13 +0200
committerKikooDX <kikoodx@paranoici.org>2022-04-01 23:00:13 +0200
commit0658f191bd18a20e69e03b9f5060bb540425d2ee (patch)
treebad92ce346c371db1a361be419aaae913d13d688
parent1c161f621f9946944c6cc718feaec63ce13acea7 (diff)
downloadwehfou-0658f191bd18a20e69e03b9f5060bb540425d2ee.tar.gz
you don't get it
-rw-r--r--CMakeLists.txt1
-rw-r--r--inc/background.h5
-rw-r--r--inc/level.h4
-rw-r--r--inc/player.h4
-rw-r--r--res/0.kblebin356 -> 356 bytes
-rw-r--r--res/1.kblebin0 -> 356 bytes
-rw-r--r--res/2.kblebin0 -> 356 bytes
-rw-r--r--res/3.kblebin0 -> 356 bytes
-rw-r--r--res/fxconv-metadata.txt2
-rw-r--r--res/tset.pngbin2836 -> 43698 bytes
-rw-r--r--src/background.c16
-rw-r--r--src/level.c20
-rw-r--r--src/main.c9
-rw-r--r--src/player.c57
14 files changed, 100 insertions, 18 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f7b2911..1935920 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,6 +13,7 @@ set(SOURCES
src/input.c
src/player.c
src/level.c
+ src/background.c
)
set(ASSETS
diff --git a/inc/background.h b/inc/background.h
new file mode 100644
index 0000000..e2f3f37
--- /dev/null
+++ b/inc/background.h
@@ -0,0 +1,5 @@
+#pragma once
+
+void background_init(void);
+void background_update(void);
+void background_draw(void);
diff --git a/inc/level.h b/inc/level.h
index e944080..f3ddbea 100644
--- a/inc/level.h
+++ b/inc/level.h
@@ -2,5 +2,9 @@
void level_deinit(void);
void level_load(int id);
+void level_next(void);
+void level_reload(void);
void level_find(int tile, int *x, int *y);
void level_draw(void);
+int level_at(int x, int y);
+int level_id(void);
diff --git a/inc/player.h b/inc/player.h
index d0fa202..981ad7b 100644
--- a/inc/player.h
+++ b/inc/player.h
@@ -6,3 +6,7 @@ void player_draw(void);
#define PLAYER_WIDTH 12
#define PLAYER_HEIGHT 12
+#define PLAYER_SPEED 2
+#define GRAVITY 0.69
+#define MAX_Y_SPEED 5
+#define JUMP_SPEED -6
diff --git a/res/0.kble b/res/0.kble
index d1ba8be..4ef65ff 100644
--- a/res/0.kble
+++ b/res/0.kble
Binary files differ
diff --git a/res/1.kble b/res/1.kble
new file mode 100644
index 0000000..e45a544
--- /dev/null
+++ b/res/1.kble
Binary files differ
diff --git a/res/2.kble b/res/2.kble
new file mode 100644
index 0000000..8431816
--- /dev/null
+++ b/res/2.kble
Binary files differ
diff --git a/res/3.kble b/res/3.kble
new file mode 100644
index 0000000..c45afae
--- /dev/null
+++ b/res/3.kble
Binary files differ
diff --git a/res/fxconv-metadata.txt b/res/fxconv-metadata.txt
index 327e8ab..8f9d068 100644
--- a/res/fxconv-metadata.txt
+++ b/res/fxconv-metadata.txt
@@ -1,7 +1,7 @@
tset.png:
type: bopti-image
name: bimg_tset
- profile: p4
+ profile: p8
font.png:
type: bopti-image
name: bimg_font
diff --git a/res/tset.png b/res/tset.png
index b1920b6..e82fb2a 100644
--- a/res/tset.png
+++ b/res/tset.png
Binary files differ
diff --git a/src/background.c b/src/background.c
new file mode 100644
index 0000000..fa0b482
--- /dev/null
+++ b/src/background.c
@@ -0,0 +1,16 @@
+#include "conf.h"
+#include "level.h"
+#include "lzy.h"
+
+void background_init(void) {}
+
+void background_update(void) {}
+
+void background_draw(void)
+{
+ const int id = TSET_LINE + level_id() * TSET_LINE * 7;
+ LZY_DrawTileEx(id, 0, 0, 13, 7);
+ LZY_DrawTileEx(id, 0, DISPLAY_HEIGHT / 2, 13, 7);
+ LZY_DrawTileEx(id, DISPLAY_WIDTH / 2, 0, 13, 7);
+ LZY_DrawTileEx(id, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, 13, 7);
+}
diff --git a/src/level.c b/src/level.c
index 1259922..d3a350c 100644
--- a/src/level.c
+++ b/src/level.c
@@ -34,6 +34,16 @@ void level_load(int nid)
player_init(px, py);
}
+void level_next(void)
+{
+ level_load(id + 1);
+}
+
+void level_reload(void)
+{
+ level_load(id);
+}
+
void level_find(int tile, int *x, int *y)
{
for (int i = 0; i < width * height; i++) {
@@ -57,3 +67,13 @@ void level_draw(void)
}
}
}
+
+int level_at(int x, int y)
+{
+ return data[x / TILE_SIZE + y / TILE_SIZE * width];
+}
+
+int level_id(void)
+{
+ return id;
+}
diff --git a/src/main.c b/src/main.c
index b5ef9d7..3285796 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,3 +1,4 @@
+#include "background.h"
#include "conf.h"
#include "input.h"
#include "level.h"
@@ -16,18 +17,16 @@ int main(int argc, char **argv)
}
level_load(0);
+ background_init();
while (!LZY_ShouldQuit()) {
LZY_CycleEvents();
input_update();
+ background_update();
player_update();
LZY_DrawBegin();
- LZY_DrawTileEx(TSET_LINE, 0, 0, 13, 7);
- LZY_DrawTileEx(TSET_LINE, DISPLAY_WIDTH / 2, 0, 13, 7);
- LZY_DrawTileEx(TSET_LINE, 0, DISPLAY_HEIGHT / 2, 13, 7);
- LZY_DrawTileEx(TSET_LINE, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2,
- 13, 7);
+ background_draw();
level_draw();
player_draw();
LZY_DrawEnd();
diff --git a/src/player.c b/src/player.c
index 0bff092..6a671f0 100644
--- a/src/player.c
+++ b/src/player.c
@@ -1,27 +1,51 @@
#include "player.h"
+#include "conf.h"
#include "input.h"
+#include "level.h"
#include "lzy.h"
-static float x, y, spd_x, spd_y;
+static int x, y;
+static float spd_y;
+
+static int collide_wall(void);
void player_init(float nx, float ny)
{
x = nx;
- y = ny;
- spd_x = 0.0f;
- spd_y = 0.0f;
+ y = ny + TILE_SIZE - PLAYER_HEIGHT;
+ spd_y = 0.00000002022f;
}
void player_update(void)
{
- if (input_down(K_LEFT))
- x -= 2;
- if (input_down(K_RIGHT))
- x += 2;
- if (input_down(K_UP))
- y -= 2;
- if (input_down(K_DOWN))
- y += 2;
+ x += input_down(K_RIGHT) * 2 - input_down(K_LEFT) * 3;
+ if (collide_wall())
+ x -= input_down(K_RIGHT) * 3 - input_down(K_LEFT) * 4;
+
+ y++;
+ if (collide_wall()) {
+ if (input_pressed(K_O))
+ spd_y = JUMP_SPEED;
+ } else {
+ spd_y += GRAVITY;
+ if (spd_y > MAX_Y_SPEED)
+ spd_y = MAX_Y_SPEED;
+ }
+ y--;
+
+ y += spd_y;
+ if (collide_wall()) {
+ const int step = (MAX_Y_SPEED * (-1 + 2 * (spd_y > 0))) / 2;
+ y -= step;
+ if (collide_wall())
+ y -= step;
+ spd_y = 0.00000001337;
+ }
+
+ if (level_at(x, y) == 3)
+ level_next();
+ if (level_at(x, y) == 4)
+ level_reload();
}
void player_draw(void)
@@ -29,3 +53,12 @@ void player_draw(void)
LZY_DrawSetColor(255, 0, 255);
LZY_DrawTile(2, x, y);
}
+
+static int collide_wall(void)
+{
+ const int x2 = x + PLAYER_WIDTH - 1;
+ const int y2 = y + PLAYER_HEIGHT - 1;
+
+ return level_at(x, y) == 1 || level_at(x2, y) == 1 ||
+ /* level_at(x, y2) == 1 || */ level_at(x2, y2) == 1;
+}