diff --git a/.vscode/settings.json b/.vscode/settings.json index f80f6cb..55f345d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,6 +21,7 @@ "png.h": "c", "stdlib.h": "c", "stb_image.h": "c", - "string.h": "c" + "string.h": "c", + "unistd.h": "c" } } \ No newline at end of file diff --git a/bin/back b/bin/back index 55b2d5c..067a49c 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 index e013206..4644554 100644 --- a/levels/level_00/room_0 +++ b/levels/level_00/room_0 @@ -6,7 +6,7 @@ Blocks : [13.0, 0.0, 13.0, 2.0, 10.0, 2.0, 0.0, 0.0, 128, 128, 128] Entities: -[-0.5 , 5.0, -0.5 , 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 0 , 10, 0, 0] +[-0.5 , 2.0, -0.5 , 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 0 , 5, 0, 0] [-11.0, 0.0, -1.0 , 2.0, 2.0, 2.0, 0.0, 0.0, 255, 255, 255, 1 , 0, 6, welcome here, 222, 222, 222] [9.0 , 0.0, -1.0 , 2.0, 2.0, 2.0, 0.0, 0.0, 255, 255, 128, 1 , 0, 6, collect coins to advance, 222, 222, 111] [-1.0 , 0.0, -11.0, 2.0, 2.0, 2.0, 0.0, 0.0, 255, 128, 128, 1 , 0, 6, if HP goes to 0 its game over, 222, 222, 111] diff --git a/levels/level_01/room_1 b/levels/level_01/room_1 index 9e8ca86..95dbf4d 100644 --- a/levels/level_01/room_1 +++ b/levels/level_01/room_1 @@ -14,6 +14,7 @@ Entities : [ 1.0, 16.2, -2.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] [-2.0, 16.2, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] [ 1.0, 16.2, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] +[-0.5, 8.0, -0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255 128, 2, 0, 0] [-2.0, 1.0, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 128, 128, 128, 1, 0, 5, 0.0, 0.0, 13.7, 0.0, 0.0, 12.0] [-2.0, 15.0, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 128, 128, 128, 1, 0, 5, 0.0, 0.0, 13.7, 0.0, 0.0, 12.5] [-13.0, 7.5, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 192, 192, 192, 1, 0, 5, 0.0, 7.5, 0.0, 0.0, 10.0, 0.0] diff --git a/levels/level_01/room_2 b/levels/level_01/room_2 index 903c440..407335d 100644 --- a/levels/level_01/room_2 +++ b/levels/level_01/room_2 @@ -14,6 +14,7 @@ Entities : [ 1.0, 16.2, -2.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] [-2.0, 16.2, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] [ 1.0, 16.2, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] +[-0.5, 8.0, -0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255 128, 2, 0, 0] [-2.0, 1.0, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 128, 128, 128, 1, 0, 5, 13.7, 0.0, 0.0, 12.0, 0.0, 0.0] [-2.0, 15.0, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 128, 128, 128, 1, 0, 5, 13.7, 0.0, 0.0, 12.5, 0.0, 0.0] [-2.0, 7.5, -13.0, 4.0, 1.0, 4.0, 0.0, 0.0, 192, 192, 192, 1, 0, 5, 0.0, 7.5, 0.0, 0.0, 10.0, 0.0] diff --git a/levels/level_01/room_3 b/levels/level_01/room_3 index 1c5d7fa..c9c9f91 100644 --- a/levels/level_01/room_3 +++ b/levels/level_01/room_3 @@ -14,6 +14,7 @@ Entities : [ 1.0, 16.2, -2.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] [-2.0, 16.2, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] [ 1.0, 16.2, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] +[-0.5, 8.0, -0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255 128, 2, 0, 0] [-2.0, 1.0, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 128, 128, 128, 1, 0, 4, 0.0, 0.0, 13.7, 1, 1, 0] [-2.0, 15.0, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 128, 128, 128, 1, 0, 4, 0.0, 0.0, 13.7, 1, 1, 180] [-13.0, 7.5, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 192, 192, 192, 1, 0, 4, 0.0, 7.5, 0.0, 4, 3, 90] diff --git a/levels/level_01/room_4 b/levels/level_01/room_4 index 72f93d8..ab186a6 100644 --- a/levels/level_01/room_4 +++ b/levels/level_01/room_4 @@ -14,6 +14,7 @@ Entities : [ 1.0, 16.2, -2.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] [-2.0, 16.2, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] [ 1.0, 16.2, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 128, 2, 0, 0] +[-0.5, 8.0, -0.5, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255 128, 2, 0, 0] [-2.0, 1.0, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 128, 128, 128, 1, 0, 4, 13.7, 0.0, 0.0, 1, 1, 0] [-2.0, 15.0, -2.0, 4.0, 1.0, 4.0, 0.0, 0.0, 128, 128, 128, 1, 0, 4, 13.7, 0.0, 0.0, 1, 1, 180] [-2.0, 7.5, -13.0, 4.0, 1.0, 4.0, 0.0, 0.0, 192, 192, 192, 1, 0, 4, 0.0, 7.5, 0.0, 4, 3, 90] diff --git a/levels/level_02/room_0 b/levels/level_02/room_0 index fbf1808..8ce6bcd 100644 --- a/levels/level_02/room_0 +++ b/levels/level_02/room_0 @@ -15,45 +15,4 @@ Entities: Weight : 0 -$ -blocks: - [x, y, z, w, h, d, rhz, rvt, r, g, b] - -teleporters: - [x, y, z, w, h, d, rhz, rvt, r, g, b, dest_chx, dest_chy] - -entities: - [x, y, z, w, h, d, rhz, rvt, r, g, b, hp, damage, entityType ..] - // Entity types are : - // 0 (coin) -> damage equals the coin's value - // 1 (still explosive) - // 2 (seeking explosive) - // 3 (shooting still explosive) - // if entityType = 4 (moving platform) - [.. amplitude_x, amplitude_y, amplitude_z, mult, divd, phase] with - amplitude_{x,y,z} = double[>= 0.0] - {mult,divd} = int - {phase} = int[0, 360] - - // else if entityType = 5 (linear moving platform) - [.. amplitude_x, amplitude_y, amplitude_z, speed_x, speed_y, speed_z] with - amplitude_{x,y,z} = double[>= 0.0] - speed_{x,y,z} = double - - // else if entityType = 6 (text box) - [.. text, tred, tgreen, tblue] with - text = {char*} - - // else if entityType = 7 (warp text box) - [.. dest_folder, room_count, text, tred, tgreen, tblue] with - {dest_folder,text} = {char*} (length <= 50) - {r,g,b} = int[0-256] - - - // else if entityType = 8 (lock box) - [.. cost, doPay, tred, tgreen, tblue] with - cost = int[> 0] (0 breaks) - doPay = {0, 1} (bool) - - else - [..] \ No newline at end of file +$ \ No newline at end of file diff --git a/obj/display.o b/obj/display.o index 69af746..c5d3acc 100644 Binary files a/obj/display.o and b/obj/display.o differ diff --git a/obj/entities.o b/obj/entities.o index 2c94e76..b24182e 100644 Binary files a/obj/entities.o and b/obj/entities.o differ diff --git a/obj/generation.o b/obj/generation.o index 6dd149c..9dd2193 100644 Binary files a/obj/generation.o and b/obj/generation.o differ diff --git a/obj/main.o b/obj/main.o index ecfe359..06f4f74 100644 Binary files a/obj/main.o and b/obj/main.o differ diff --git a/obj/menus.o b/obj/menus.o index 352e91f..4babca2 100644 Binary files a/obj/menus.o and b/obj/menus.o differ diff --git a/obj/move.o b/obj/move.o index e066700..8598eae 100644 Binary files a/obj/move.o and b/obj/move.o differ diff --git a/res/arrows.png b/res/arrows.png new file mode 100644 index 0000000..1771d4a Binary files /dev/null and b/res/arrows.png differ diff --git a/res/beat_off.png b/res/beat_off.png deleted file mode 100644 index c064e5f..0000000 Binary files a/res/beat_off.png and /dev/null differ diff --git a/res/beat_on.png b/res/beat_on.png deleted file mode 100644 index 88acfc7..0000000 Binary files a/res/beat_on.png and /dev/null differ diff --git a/res/coin2.png b/res/coin2.png new file mode 100644 index 0000000..4f3089c Binary files /dev/null and b/res/coin2.png differ diff --git a/res/lock.jpg b/res/lock.jpg new file mode 100644 index 0000000..114280a Binary files /dev/null and b/res/lock.jpg differ diff --git a/res/lock.png b/res/lock.png index fa9e71f..2e87321 100644 Binary files a/res/lock.png and b/res/lock.png differ diff --git a/res/rotation.png b/res/rotation.png new file mode 100644 index 0000000..fdf3176 Binary files /dev/null and b/res/rotation.png differ diff --git a/res/sq_dotted.png b/res/sq_dotted.png new file mode 100644 index 0000000..3407548 Binary files /dev/null and b/res/sq_dotted.png differ diff --git a/res/sq_full.png b/res/sq_full.png new file mode 100644 index 0000000..25c1dfe Binary files /dev/null and b/res/sq_full.png differ diff --git a/src/display.c b/src/display.c index ee5c6a7..ce651c8 100644 --- a/src/display.c +++ b/src/display.c @@ -257,4 +257,14 @@ void gl_drawData(unsigned int shaderProg) { gl_printf(shaderProg, -0.95f, 0.9f, 0.04f, 0.004f, 255-player_hp/4, player_hp/4, 0, "HP %d", player_hp); gl_printf(shaderProg, -0.95f, 0.8f, 0.04f, 0.004f, 255, 255, 0, "coins %d", coins); //gl_drawInteger(shaderProg, player_hp, -0.95f, 0.9f, 0.05f, 255-player_hp/4, player_hp/4, 0, 0.005f, 1); +} + +float fadeSideWidth = 0.08f; +void gl_drawDamageFadeout(unsigned int shaderProg) { + if(dmgCD > 0.0f) { + gl_drawRectAlpha(shaderProg, -1.0f , -1.0f , 2.0f, fadeSideWidth, 255, 32, 32, (int)(dmgCD*510.0f)); + gl_drawRectAlpha(shaderProg, -1.0f , 1.0f-fadeSideWidth, 2.0f, fadeSideWidth, 255, 32, 32, (int)(dmgCD*510.0f)); + gl_drawRectAlpha(shaderProg, -1.0f , -1.0f+fadeSideWidth, fadeSideWidth, 2.0f*(1.0-fadeSideWidth), 255, 32, 32, (int)(dmgCD*510.0f)); + gl_drawRectAlpha(shaderProg, 1.0f-fadeSideWidth, -1.0f+fadeSideWidth, fadeSideWidth, 2.0f*(1.0-fadeSideWidth), 255, 32, 32, (int)(dmgCD*510.0f)); + } } \ No newline at end of file diff --git a/src/display.h b/src/display.h index 76b4d41..9bf7fa6 100644 --- a/src/display.h +++ b/src/display.h @@ -11,4 +11,6 @@ void gl_drawData(unsigned int shaderProg); void gl_resetTexture(); +void gl_drawDamageFadeout(unsigned int shaderProg); + #endif \ No newline at end of file diff --git a/src/generation.c b/src/generation.c index e23ab7e..a1c5379 100644 --- a/src/generation.c +++ b/src/generation.c @@ -306,6 +306,7 @@ void align_to(FILE* ptr, char ch) { } } +int is_neg0 = 1; int read_int(FILE* ptr) { bool is_reading = false; int buffer = 0; @@ -318,13 +319,20 @@ int read_int(FILE* ptr) { is_reading = true; buffer = 10*buffer + (int)c - 48; } else if(is_reading) { - /*if(print) { - printf("%d; ", buffer*sign); - }*/ + if(sign == -1 && buffer == 0) { + is_neg0 = -1; + } else { + is_neg0 = 1; + } return buffer*sign; } c = fgetc(ptr); } + if(sign == -1 && buffer == 0) { + is_neg0 = -1; + } else { + is_neg0 = 1; + } return buffer*sign; } @@ -353,13 +361,14 @@ double sign(double __x) { double read_float(FILE* ptr) { int ent = read_int(ptr); + int sn0 = is_neg0; int frac = read_int(ptr); //printf("%d.%d; ", ent, frac); if(ent != 0.0) { - return (ent/abs(ent))*(absf((double)ent) + ((double)frac)/(pow(10.0, (double)ln_baseN(frac, 10)))); + return sn0*(ent/abs(ent))*(absf((double)ent) + ((double)frac)/(pow(10.0, (double)ln_baseN(frac, 10)))); } else { //printf("%d, %d\n", ent, frac); - return ((double)frac)/(pow(10.0, (double)ln_baseN(frac, 10))); + return sn0*((double)frac)/(pow(10.0, (double)ln_baseN(frac, 10))); } } diff --git a/src/main.c b/src/main.c index 50abdf8..a16b098 100644 --- a/src/main.c +++ b/src/main.c @@ -303,7 +303,7 @@ const char *fragmentShaderSourceR = "#version 330 core\n" "}\0"; typedef enum file_extension {PNG, JPG, JPEG} file_extension; -void generate_texture(int id, char* filename, file_extension ext) { +void generate_texture_2D(int id, char* filename, file_extension ext) { int widthImg, heightImg, numColCh; //unsigned char* bytes = stbi_load("res/container.jpg", &widthImg, &heightImg, &numColCh, 0); unsigned char* bytes = stbi_load(filename, &widthImg, &heightImg, &numColCh, 0); @@ -330,6 +330,34 @@ void generate_texture(int id, char* filename, file_extension ext) { glBindTexture(GL_TEXTURE_2D, 0); } +/*void generate_texture_3D(int id, char* filename, file_extension ext) { + int widthImg, heightImg, depthImg, numColCh; + //unsigned char* bytes = stbi_load("res/container.jpg", &widthImg, &heightImg, &numColCh, 0); + unsigned char* bytes = stbi_load(filename, &widthImg, &heightImg, &numColCh, 0); + if(bytes == 0) {fprintf(stderr, "ERROR : cannot load texture\n"); exit(1);} + glGenTextures(1, &textures[id]); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_3D, textures[id]); + + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + if(ext == JPG || ext == JPEG) { + glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, widthImg, heightImg, depthImg, 0, GL_RGB, GL_UNSIGNED_BYTE, bytes); + glGenerateMipmap(GL_TEXTURE_3D); + } else if(ext == PNG) { + glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, widthImg, heightImg, depthImg, 0, GL_RGBA, GL_UNSIGNED_BYTE, bytes); + glGenerateMipmap(GL_TEXTURE_3D); + } + + stbi_image_free(bytes); + glBindTexture(GL_TEXTURE_2D, 0); +}*/ + int main_alt() { // glfw: initialize and configure // ------------------------------ @@ -362,6 +390,9 @@ int main_alt() { glCullFace(GL_FRONT); glDepthFunc(GL_LESS); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + //glfwSetMouseButtonCallback(window, mouse_button_callback); init_csts(); @@ -436,18 +467,21 @@ int main_alt() { printf("-----------------------------------------------------------------------------------------------\n"); fflush(stdout); // 16 max // - //generate_texture(0, "res/container.jpg", "jpg"); - generate_texture(0, "res/white.png", PNG); - generate_texture(1, "res/question_block.png", PNG); - generate_texture(2, "res/exclamation_block.png", PNG); - generate_texture(3, "res/money.png", PNG); - generate_texture(4, "res/container.jpg", JPG); - generate_texture(5, "res/steel.jpeg", JPEG); - //generate_texture(5, "res/brick.png", JPEG); - generate_texture(6, "res/gateway.jpeg", JPEG); - generate_texture(7, "res/lock.png", PNG); - generate_texture(8, "res/beat_on.png", JPG); - generate_texture(9, "res/beat_off.png", JPG); + //generate_texture_2D(0, "res/container.jpg", "jpg"); + generate_texture_2D(0, "res/white.png", PNG); + generate_texture_2D(1, "res/question_block.png", PNG); + generate_texture_2D(2, "res/exclamation_block.png", PNG); + //generate_texture_2D(3, "res/money.png", PNG); + generate_texture_2D(3, "res/coin2.png", JPG); + generate_texture_2D(4, "res/container.jpg", JPG); + //generate_texture_2D(4, "res/arrows.png", PNG); + generate_texture_2D(5, "res/steel.jpeg", JPEG); + generate_texture_2D(6, "res/gateway.jpeg", JPEG); + generate_texture_2D(7, "res/lock.png", PNG); + //generate_texture_2D(8, "res/beat_on.png", JPG); + //generate_texture_2D(9, "res/beat_off.png", JPG); + generate_texture_2D(8, "res/sq_full.png", PNG); + generate_texture_2D(9, "res/sq_dotted.png", PNG); printf("-----------------------------------------------------------------------------------------------\n"); fflush(stdout); @@ -535,7 +569,7 @@ int main_alt() { while(!glfwWindowShouldClose(window) && player_hp > 0) { // input // ----- - glClearColor(0.2f, 0.3f, 0.3f, 1.0f); + glClearColor(0.2f, 0.3f, 0.3f, 0.5f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); triCount = 0; @@ -564,6 +598,8 @@ int main_alt() { gl_drawInteger(shaderProgramR, triCount, 0.0f, 0.92f, 0.04f, 128, 128, 128, 0.005f, 1); gl_drawData(shaderProgramR); + gl_drawDamageFadeout(shaderProgramR); + if(!isInMenu(window, shaderProgramR)) { processInput(window, delta); if(gamemode == 0) { @@ -581,6 +617,11 @@ int main_alt() { glfwSwapBuffers(window); glfwPollEvents(); + dmgCD = maxf(dmgCD - delta, 0.0f); + if(lastDmg != player_hp) { + lastDmg = player_hp; + dmgCD = 0.5f; + } finish = clock(); delta = slp_time+((float)finish - (float)origin)/CLOCKS_PER_SEC; deltad = slp_time+((double)finish - (double)origin)/CLOCKS_PER_SEC; diff --git a/src/menus.c b/src/menus.c index f93b4bb..9323ce4 100644 --- a/src/menus.c +++ b/src/menus.c @@ -8,7 +8,7 @@ #include #include #include -#include +//#include #include "../include/glad/glad.h" #include #include @@ -47,7 +47,25 @@ void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, in glUniformMatrix4fv(glGetUniformLocation(fragShader, "scale"), 1, GL_FALSE, (float*)scale); glUniformMatrix4fv(glGetUniformLocation(fragShader, "slide"), 1, GL_FALSE, (float*)slide); - glUniform4f(glGetUniformLocation(fragShader, "u_color2"), r/255.0f, g/255.0f, b/255.0f, 0.5f); + glUniform4f(glGetUniformLocation(fragShader, "u_color2"), r/255.0f, g/255.0f, b/255.0f, 1.0f); + + glDrawArrays(GL_TRIANGLES, 0, 6); +} + +void gl_drawRectAlpha(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b, int a) { + glm_mat4_identity(scale); + glm_mat4_identity(slide); + + scale[0][0] = w; + scale[1][1] = h; + scale[2][2] = 0.5f+incr; + incr += 0.000001f; + + glm_translate(slide, (vec3){x+w/2, y+h/2, 0.0f}); + + glUniformMatrix4fv(glGetUniformLocation(fragShader, "scale"), 1, GL_FALSE, (float*)scale); + glUniformMatrix4fv(glGetUniformLocation(fragShader, "slide"), 1, GL_FALSE, (float*)slide); + glUniform4f(glGetUniformLocation(fragShader, "u_color2"), r/255.0f, g/255.0f, b/255.0f, a/255.0f); glDrawArrays(GL_TRIANGLES, 0, 6); } diff --git a/src/menus.h b/src/menus.h index 127aada..64ae804 100644 --- a/src/menus.h +++ b/src/menus.h @@ -42,6 +42,7 @@ typedef struct interface { void initMenus(); void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b); +void gl_drawRectAlpha(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b, int a); void gl_initDrawRect(unsigned int shaderProgram); void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side); diff --git a/src/move.c b/src/move.c index 329e4e0..5200d9b 100644 --- a/src/move.c +++ b/src/move.c @@ -61,6 +61,9 @@ double room_depth; double sq2; +float dmgCD; +int lastDmg; + void init_csts() { camx = 2.0; camy = 5.0; @@ -83,6 +86,9 @@ void init_csts() { draw_type = 0; fade_dmg = 0; + dmgCD = 0.0f; + lastDmg = player_hp; + stop_evetything = false; tan_fov = tan((fov * 3.14159 / 180.0) / 2.0); sq2 = sqrt(2); diff --git a/src/structure.h b/src/structure.h index 6506565..2d1d553 100644 --- a/src/structure.h +++ b/src/structure.h @@ -187,4 +187,7 @@ extern bool is_one_room; extern unsigned int textures[16]; +extern float dmgCD; +extern int lastDmg; + #endif \ No newline at end of file