aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--features.md72
-rw-r--r--src/engine/draw_screen.c61
-rw-r--r--src/engine/draw_screen.h18
-rw-r--r--src/makefile3
4 files changed, 150 insertions, 4 deletions
diff --git a/features.md b/features.md
new file mode 100644
index 0000000..d044232
--- /dev/null
+++ b/features.md
@@ -0,0 +1,72 @@
+Af/Cancelled/Implement in sprint 3
+Done
+## Checkpoint room (shop)
+| feature | status |
+|-|-|
+|Upgrade abilities|Implement in sprint 3|
+|Interaction with shopkeeper|Implement in sprint 3|
+
+## Upgrades abilities
+| feature | status |
+|-|-|
+|HP boost|Implement in sprint 3|
+|Jump boost|Implement in sprint 3|
+|Speed boost|Implement in sprint 3|
+|Regular dash|Implement in sprint 3|
+|Super punch|Implement in sprint 3|
+|Smoke bomb|Implement in sprint 3|
+
+## Levels
+| feature | status |
+|-|-|
+|Breakable blocks|Implement in sprint 3|
+|Hidden secrets|Implement in sprint 3|
+|Boss fights|Implement in sprint 3|
+|Enemies|Implement in sprint 3|
+|audio|Implement in sprint 3|
+
+## player (Gozer)
+| feature | status |
+|-|-|
+|Move X-as|Done|
+|Jump|Done|
+|Special ability|Implement in sprint 3|
+|Health|Implement in sprint 3|
+|Currency/Scoreboard|Implement in sprint 3|
+
+## Enemy (Menneke)
+| feature | status |
+|-|-|
+|Move X-as|Implement in sprint 3|
+|Jump|Implement in sprint 3|
+|Hunt player|Implement in sprint 3|
+|Health (1 HP)|Implement in sprint 3|
+|Currency/Scoreboard|Implement in sprint 3|
+
+## Enemy (Ventje)
+| feature | status |
+|-|-|
+|Move X-as|Implement in sprint 3|
+|Jump|Implement in sprint 3|
+|Hunt player|Implement in sprint 3|
+|Health (2 HP) |Implement in sprint 3|
+|Splitting upon defeat|Implement in sprint 3|
+|Currency/Scoreboard|Implement in sprint 3|
+
+## Enemy (Terror uil)
+| feature | status |
+|-|-|
+|Movement|Implement in sprint 3|
+|Hunt player|Implement in sprint 3|
+|Health (1 HP) |Implement in sprint 3|
+|Splitting upon defeat|Implement in sprint 3|
+|Currency/Scoreboard|Implement in sprint 3|
+
+## Could have additions if time is enough
+| feature | status |
+|-|-|
+|Multiplayer|Implement in sprint 3|
+|Shared HP|Implement in sprint 3|
+|Special ability|Implement in sprint 3|
+|Health|Implement in sprint 3|
+|Currency/Scoreboard|Implement in sprint 3|
diff --git a/src/engine/draw_screen.c b/src/engine/draw_screen.c
new file mode 100644
index 0000000..acf5b41
--- /dev/null
+++ b/src/engine/draw_screen.c
@@ -0,0 +1,61 @@
+#include "draw_screen.h"
+
+uint8_t hh_world_to_tile(vec2 pos){
+
+ FILE* level = fopen("../test/bin/test_map.bin", "rb"); /* open binary file */
+ if (!level) { /* check if file opened successfully */
+ fprintf(stderr, "Error: Failed to open file.\n");
+ return 0;
+ }
+ int index = (pos.y + pos.x);
+ fseek(level, (index * sizeof(int)) + sizeof(int), SEEK_SET);
+ int* tile = (int*)malloc(sizeof(int));
+ fread(tile, sizeof(int), 1, level); // read 1 tile from binary
+
+ fclose(level);
+ int val = *tile;
+ free(tile);
+ return val;
+}
+
+
+// remeber old value to know which part to update.
+vec2 previousViewport = { .x = 0, .y = 0 };
+void hh_draw_screen(vec_cor viewport){
+ if (viewport.x == previousViewport.x && viewport.y == previousViewport.y) return;
+
+ hh_ppu_update_aux((hh_s_ppu_loc_aux){
+ .bg_shift_x = viewport.x*HH_PPU_SPRITE_WIDTH,
+ .bg_shift_y = viewport.y*HH_PPU_SPRITE_HEIGHT,
+ .fg_fetch = 0,
+ .sysreset = 0,
+ });
+
+ // update previous viewport values
+ previousViewport = viewport;
+}
+
+void hh_setup_screen(){
+ //(HH_map_size_X*HH_map_size_Y)
+ int size = 3200; // max X = 40 en max Y = 80
+ FILE* level = fopen("../test/bin/test_map.bin", "rb"); /* open binary file */
+ if (!level) { /* check if file opened successfully */
+ fprintf(stderr, "Error: Failed to open file.\n");
+ return;
+ }
+ fseek(level, (0* sizeof(int)) + sizeof(int), SEEK_SET);
+ int* tile = (int*)malloc(size*sizeof(int));
+ fread(tile, sizeof(int), size, level); // read 1 tile from binary
+
+ fclose(level);
+
+ for(int BAM_index = 0; BAM_index < size; BAM_index++){
+ hh_ppu_update_background(BAM_index, (hh_s_ppu_loc_bam_entry){
+ .horizontal_flip = false,
+ .vertical_flip = false,
+ .palette_index = tile[BAM_index]+1,
+ .tilemap_index = tile[BAM_index],
+ });
+ }
+ free(tile);
+}
diff --git a/src/engine/draw_screen.h b/src/engine/draw_screen.h
index 4af5865..8d7df47 100644
--- a/src/engine/draw_screen.h
+++ b/src/engine/draw_screen.h
@@ -2,8 +2,20 @@
// every function call for drawing the screen goes here.
-#include "engine/maths.h"
+#include "../engine/maths.h"
+#include "ppu/ppu.h"
+#include <stdio.h>
#include <stdint.h>
-uint16_t hh_world_to_tile(vec2 pos);
-void hh_draw_screen(vec2 viewport); \ No newline at end of file
+#include <stdlib.h>
+
+
+#define HH_map_size_X 80
+#define HH_map_size_Y 60
+
+/** @brief return a single tile from world binary */
+uint8_t hh_world_to_tile(vec2 pos);
+/** @brief shift to level if viewport changed position */
+void hh_draw_screen(vec2 viewport);
+/** @brief send data to BAM memory from binary level */
+void hh_setup_screen();
diff --git a/src/makefile b/src/makefile
index 96751fb..96f3108 100644
--- a/src/makefile
+++ b/src/makefile
@@ -31,7 +31,8 @@ LOCAL_SRCS += main.c \
ppu/internals.c \
ppu/ppu.c \
demo.c \
- engine/engine.c
+ engine/engine.c \
+ engine/draw_screen.c
CFLAGS += $(SHARED_FLAGS)
LFLAGS += $(SHARED_FLAGS)