diff --git a/bin/back b/bin/back index 9f1104d..b7adaad 100755 Binary files a/bin/back and b/bin/back differ diff --git a/levels/level_00/room_0 b/levels/level_00/room_0 new file mode 100644 index 0000000..c513f43 --- /dev/null +++ b/levels/level_00/room_0 @@ -0,0 +1,18 @@ +Blocks : +[0.0, 0.0, 0.0, 10.0, 1.0, 10.0, 0.0, 0.0, 255, 255, 255] +[0.0, 9.0, 0.0, 10.0, 1.0, 10.0, 0.0, 0.0, 255, 255, 255] +[0.0, 1.0, 0.0, 1.0, 8.0, 1.0, 0.0, 0.0, 128, 128, 128] +[9.0, 1.0, 0.0, 1.0, 8.0, 1.0, 0.0, 0.0, 128, 128, 128] +[0.0, 1.0, 9.0, 1.0, 8.0, 1.0, 0.0, 0.0, 128, 128, 128] +[9.0, 1.0, 9.0, 1.0, 8.0, 1.0, 0.0, 0.0, 128, 128, 128] + +Teleporters : +[4.0, 1.0, 0.0, 2.0, 4.0, 1.0, 0.0, 0.0, 255, 0, 0; -1, 0] +[0.0, 1.0, 4.0, 1.0, 4.0, 2.0, 0.0, 0.0, 255, 255, 0; 0, -1] +[4.0, 1.0, 9.0, 2.0, 4.0, 1.0, 0.0, 0.0, 0, 255, 0; 1, 0] +[9.0, 1.0, 4.0, 1.0, 4.0, 2.0, 0.0, 0.0, 0, 0, 255; 0, 1] + +Weight : +50 + +$ \ No newline at end of file diff --git a/obj/display.o b/obj/display.o index 289b4d1..cb79fea 100644 Binary files a/obj/display.o and b/obj/display.o differ diff --git a/obj/generation.o b/obj/generation.o index 59613cc..06d1439 100644 Binary files a/obj/generation.o and b/obj/generation.o differ diff --git a/obj/main.o b/obj/main.o index b6ab86d..f3b875c 100644 Binary files a/obj/main.o and b/obj/main.o differ diff --git a/obj/move.o b/obj/move.o index 2260b57..bb4a603 100644 Binary files a/obj/move.o and b/obj/move.o differ diff --git a/src/display.c b/src/display.c index 7ab907c..1a1c6c2 100644 --- a/src/display.c +++ b/src/display.c @@ -212,9 +212,9 @@ void gl_initRender(unsigned int shaderProgram, unsigned int fragmentShader, unsi } void gl_drawData(unsigned int shaderProg) { - gl_drawInteger(shaderProg, (int)camx, 0.95f, 0.9f, 0.05f, 255, 255, 255, 0.005, -1); + gl_drawInteger(shaderProg, (int)camx + 2*room_width*player_chx, 0.95f, 0.9f, 0.05f, 255, 255, 255, 0.005, -1); gl_drawInteger(shaderProg, (int)camy, 0.95f, 0.75f, 0.05f, 255, 255, 255, 0.005, -1); - gl_drawInteger(shaderProg, (int)camz, 0.95f, 0.6f, 0.05f, 255, 255, 255, 0.005, -1); + gl_drawInteger(shaderProg, (int)camz + 2*room_depth*player_chy, 0.95f, 0.6f, 0.05f, 255, 255, 255, 0.005, -1); gl_drawInteger(shaderProg, (int)10.0*camvx, 0.95f, -0.6f, 0.05f, 255, 255, 255, 0.005, -1); gl_drawInteger(shaderProg, (int)10.0*camvy, 0.95f, -0.75f, 0.05f, 255, 255, 255, 0.005, -1); diff --git a/src/generation.c b/src/generation.c index 0880ff9..74883c2 100644 --- a/src/generation.c +++ b/src/generation.c @@ -194,12 +194,9 @@ void build_starting_chunk(int chx, int chy) { void init_hashtbl() { visited = hashtbl_generate(1789); - build_starting_chunk(0, 0); - current_room = hashtbl_find_opt(visited, 0, 0); - player_chx = 0; - player_chy = 0; + build_starting_chunk(player_chx, player_chy); + current_room = hashtbl_find_opt(visited, player_chx, player_chy); total_weight = 0; - coins = 0; } void get_number_blocks(int* ret_cubes, int* ret_tps, int* ret_ent, FILE* ptr) { @@ -469,8 +466,33 @@ void parse_one_room(int id, char* filename) { fclose(ptr); } -void parse_rooms(int n_rooms) { - char* name = malloc(sizeof(char)*19); // 1000 rooms max +char* get_name_and_i(char* folder, int nrooms, int* reti) { + int len = 0; + while(folder[len] != '\0') { + len+=1; + } + int lnn = 1+ln_baseN(nrooms, 10); + int str_size = len+lnn+5; + char* res = malloc(sizeof(char)*str_size); + for(int k = 0; k < len; k++) { + res[k] = folder[k]; + } + res[len ] = 'r'; + res[len+1] = 'o'; + res[len+2] = 'o'; + res[len+3] = 'm'; + res[len+4] = '_'; + res[len+5] = '0'; + for(int k = len+6; k < str_size; k++) { + res[k] = '\0'; + } + + *reti = len+5; + return res; +} + +void parse_rooms(int n_rooms, char* folder) { + /*char* name = malloc(sizeof(char)*19); // 1000 rooms max (not anymore xD) name[0] = 't'; name[1] = 'e'; name[2] = 'm'; @@ -489,7 +511,9 @@ void parse_rooms(int n_rooms) { name[15] = '0'; name[16] = '\0'; name[17] = '\0'; - name[18] = '\0'; + name[18] = '\0';*/ + int id = 0; + char* name = get_name_and_i(folder, n_rooms, &id); pool = malloc(sizeof(entry)*n_rooms); pool_size = n_rooms; @@ -499,10 +523,14 @@ void parse_rooms(int n_rooms) { for(int k = 0; k < n_rooms; k++) { printf("parsing %d...", k); if(k < 10) { - name[15] = (char)(k%10 + 48); + name[id] = (char)(k%10 + 48); } else if(k < 100) { - name[15] = (char)((k/10)%10 + 48); - name[16] = (char)(k%10 + 48); + name[id] = (char)((k/10)%10 + 48); + name[id+1] = (char)(k%10 + 48); + } else if(k < 1000) { + name[id] = (char)((k/100)%10 + 48); + name[id+1] = (char)((k/10)%10 + 48); + name[id+2] = (char)(k%10 + 48); } parse_one_room(k, name); printf("done.\n"); @@ -516,6 +544,8 @@ void parse_rooms(int n_rooms) { // has to be a multiple of both room_width and room_depth int divider = 4; + +// unused void generate_terrain(room* r) { int rsize = 4*(room_width/divider)*(room_width/divider)*(room_depth/divider)*(room_depth/divider); // floor size (with 1x1 cubes) diff --git a/src/generation.h b/src/generation.h index cd37bd6..e04a185 100644 --- a/src/generation.h +++ b/src/generation.h @@ -45,7 +45,7 @@ void align_to(FILE* ptr, char ch) ; int read_int(FILE* ptr, bool print) ; double read_float(FILE* ptr) ; void parse_one_room(int id, char* filename) ; -void parse_rooms(int n_rooms) ; +void parse_rooms(int n_rooms, char* folder) ; void generate_nearby_chunks(int render_dist) ; diff --git a/src/main.c b/src/main.c index 0ce9db7..ed234a7 100644 --- a/src/main.c +++ b/src/main.c @@ -27,6 +27,22 @@ int gamemode; double jPress = false; double gPress = false; +double rPress = false; + +void reset_everything(char* folder) { + hashtbl_free(visited); + free_proj(); + free_interf(); + free_pool(); + + //init_csts(); + init_hashtbl(); + init_ent_generator(10); + init_proj(); + init_interf(); + parse_rooms(1, folder); +} + void processInput(GLFWwindow *window, float dtime) { // quit w if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { @@ -153,6 +169,16 @@ void processInput(GLFWwindow *window, float dtime) { if(glfwGetKey(window, GLFW_KEY_M) == GLFW_PRESS) { rot_vt = mind(3.14159/2.0, rot_vt+sensitivity); } + + // reset + if(glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS) { + if(!rPress) { + rPress = true; + reset_everything("levels/level_00/"); + } + } else { + rPress = false; + } } const char *vertexShaderSource = "#version 330 core\n" @@ -225,7 +251,7 @@ int main_alt() { init_ent_generator(10); init_proj(); init_interf(); - parse_rooms(7); + parse_rooms(7, "templates/"); // ---------------------------------------------------------------------------------------------------------------------------------------------- // // ---------------------------------------------------------------------------------------------------------------------------------------------- // diff --git a/src/move.c b/src/move.c index 9301086..6e6097a 100644 --- a/src/move.c +++ b/src/move.c @@ -66,20 +66,27 @@ void init_csts() { camx = 2.0; camy = 5.0; camz = 2.0; + player_chx = 0; + player_chy = 0; camvx = 0.0; camvy = 0.0; camvz = 0.0; rot_hz = 0.0; rot_vt = 0.0; - draw_type = 0; - player_hp = 1000; - fade_dmg = 0; + room_width = 16.0; room_depth = 16.0; - sq2 = sqrt(2); + + coins = 0; + player_hp = 1000; njumps = 3; + + draw_type = 0; + fade_dmg = 0; + stop_evetything = false; tan_fov = tan((fov * 3.14159 / 180.0) / 2.0); + sq2 = sqrt(2); } void set_player_coords(int old_chx, int old_chy) { @@ -289,6 +296,10 @@ void movePlayerG(float dtime) { camvx *= (1.0 - friction*((double)(dtime))); camvz *= (1.0 - friction*((double)(dtime))); + + if(camy <= -64) { + player_hp -= (int)(400*dtime); + } } void teleport_on_edge() {