From 99547bc74c4978015227ce94fd3a52ec8acff1fb Mon Sep 17 00:00:00 2001 From: Alexandre Date: Wed, 28 Aug 2024 15:59:43 +0200 Subject: [PATCH] added random structure generation (empty chunks) --- bin/back | Bin 102168 -> 107264 bytes src/generation.c | 74 +++++++++++++++++++++++++++++++++++++++++++---- src/generation.h | 2 ++ src/hash.h | 2 ++ src/structure.h | 4 +++ 5 files changed, 77 insertions(+), 5 deletions(-) diff --git a/bin/back b/bin/back index 594527e33be893dbfa235f5deb412eadba3e1e7f..f27538c6d469d3d4554935c31bfebdecba059877 100755 GIT binary patch delta 43815 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 L{M#7sf~chx = x ; + new->chy = y ; + new->draw_id = draw_par - 2; + new->chdata = copy(tpl); + //printf("%d\n", new->chdata.checkCompat); + gridInsert(map, x, y, new); +} + void print_template(int config_id) { for(int i = 0; i < 8; i++) { uint8_t rem = configs[config_id].lines[i]; @@ -122,7 +137,7 @@ void rotateTemplateClockWise(int config_id) { bool is_compat_sig_north(int cx, int cy, int idx) { chunk* cp = gridGet(map, cx, cy-1); - if(cp == NULL) { + if(cp == NULL || !cp->chdata.checkCompat) { return true; } else { return cp->chdata.lines[7] == configs[idx].lines[0]; @@ -130,7 +145,7 @@ bool is_compat_sig_north(int cx, int cy, int idx) { } bool is_compat_sig_south(int cx, int cy, int idx) { chunk* cp = gridGet(map, cx, cy+1); - if(cp == NULL) { + if(cp == NULL || !cp->chdata.checkCompat) { return true; } else { return cp->chdata.lines[0] == configs[idx].lines[7]; @@ -138,7 +153,7 @@ bool is_compat_sig_south(int cx, int cy, int idx) { } bool is_compat_sig_east(int cx, int cy, int idx) { chunk* cp = gridGet(map, cx+1, cy); - if(cp == NULL) { + if(cp == NULL || !cp->chdata.checkCompat) { return true; } else { return cp->chdata.westsig == configs[idx].eastsig; @@ -146,7 +161,7 @@ bool is_compat_sig_east(int cx, int cy, int idx) { } bool is_compat_sig_west(int cx, int cy, int idx) { chunk* cp = gridGet(map, cx-1, cy); - if(cp == NULL) { + if(cp == NULL || !cp->chdata.checkCompat) { return true; } else { return cp->chdata.eastsig == configs[idx].westsig; @@ -217,7 +232,32 @@ void generate_chunk_all(int cx, int cy) { }; //printf("generating %d at (%d, %d)...\n", idx, cx, cy); //print_template(idx); - generate_chunk(cx, cy, idx); + int R = rand()%emptyChance; + //printf("%d/%d\n", R, emptyChance); + if(R != 0) { + generate_chunk(cx, cy, idx); + } else { + generate_chunk_raw(cx, cy, empty); + if(rand()%100 < sizeIncreaseChance) { + if(!(gridMem(map, cx+1, cy) || gridMem(map, cx+1, cy+1) || gridMem(map, cx, cy+1))) { + generate_chunk_raw(cx+1, cy, empty); + generate_chunk_raw(cx, cy+1, empty); + generate_chunk_raw(cx+1, cy+1, empty); + } else if(!(gridMem(map, cx+1, cy) || gridMem(map, cx+1, cy-1) || gridMem(map, cx, cy-1))) { + generate_chunk_raw(cx+1, cy, empty); + generate_chunk_raw(cx, cy-1, empty); + generate_chunk_raw(cx+1, cy-1, empty); + } else if(!(gridMem(map, cx-1, cy) || gridMem(map, cx-1, cy-1) || gridMem(map, cx, cy-1))) { + generate_chunk_raw(cx-1, cy, empty); + generate_chunk_raw(cx, cy-1, empty); + generate_chunk_raw(cx-1, cy-1, empty); + } else if(!(gridMem(map, cx-1, cy) || gridMem(map, cx-1, cy+1) || gridMem(map, cx, cy+1))) { + generate_chunk_raw(cx-1, cy, empty); + generate_chunk_raw(cx, cy+1, empty); + generate_chunk_raw(cx-1, cy+1, empty); + } + } + } } void initialize(SDL_Renderer* renderer) { @@ -227,11 +267,33 @@ void initialize(SDL_Renderer* renderer) { import_digits(renderer); full.lines = malloc(sizeof(uint8_t)*8); + full.westsig = 255 ; + full.eastsig = 255 ; + + full.checkCompat = false ; + for(int i = 0; i < 8; i++) { full.lines[i] = 255 ; }; full.id = -1 ; + empty.lines = malloc(sizeof(uint8_t)*8); + empty.westsig = 0 ; + empty.eastsig = 0 ; + + empty.checkCompat = false ; + + empty.lines[0] = 0 ; + empty.lines[1] = 0 ; + empty.lines[2] = 0 ; + empty.lines[3] = 24 ; + empty.lines[4] = 24 ; + empty.lines[5] = 0 ; + empty.lines[6] = 0 ; + empty.lines[7] = 0 ; + + empty.id = -1 ; + generate_chunk(0, 0, 2); } @@ -242,6 +304,7 @@ void destroy() { free_digits(letters); free(full.lines); + free(empty.lines); } void parse_one(FILE* ptr, FILE* ptr2, int index) { @@ -283,6 +346,7 @@ void parse_configs(char* filename, int n_conf) { configs[i].id = i; configs[i].eastsig = 0 ; configs[i].westsig = 0 ; + configs[i].checkCompat = true ; configs[i].lines = malloc(sizeof(uint8_t)*8); for(int j = 0; j < 8; j++) { configs[i].lines[j] = 0; diff --git a/src/generation.h b/src/generation.h index 3d52732..4b635b2 100644 --- a/src/generation.h +++ b/src/generation.h @@ -5,6 +5,8 @@ bool unpack_coord(uint8_t* lines, int cx, int cy); void generate_chunk(int x, int y, int config_id); +void generate_chunk_raw(int x, int y, template tpl); + void print_template(int config_id); void rotateTemplateClockWise(int config_id); diff --git a/src/hash.h b/src/hash.h index 3cca3fb..910202d 100644 --- a/src/hash.h +++ b/src/hash.h @@ -8,6 +8,8 @@ typedef struct template { uint8_t id ; uint8_t* lines ; // len = 8 + bool checkCompat ; + uint8_t eastsig ; uint8_t westsig ; } template ; diff --git a/src/structure.h b/src/structure.h index b33afd8..b210eb6 100644 --- a/src/structure.h +++ b/src/structure.h @@ -15,6 +15,9 @@ typedef enum cardinal {NORTH, EAST, SOUTH, WEST} cardinal ; extern Grid map ; +extern int emptyChance ; +extern int sizeIncreaseChance ; + extern int zoom ; extern int render_distance ; @@ -46,5 +49,6 @@ extern imgs digits ; extern imgs letters ; extern template full ; +extern template empty ; #endif \ No newline at end of file