diff options
| -rw-r--r-- | features.md | 72 | ||||
| -rw-r--r-- | src/engine/draw_screen.c | 61 | ||||
| -rw-r--r-- | src/engine/draw_screen.h | 18 | ||||
| -rw-r--r-- | src/makefile | 3 | 
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)  |