added reset trigger 'R' + custom pool selection

This commit is contained in:
Alexandre 2025-02-16 12:47:51 +01:00
parent 28ee926295
commit 04d782f55a
11 changed files with 104 additions and 19 deletions

BIN
bin/back

Binary file not shown.

18
levels/level_00/room_0 Normal file
View File

@ -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
$

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -212,9 +212,9 @@ void gl_initRender(unsigned int shaderProgram, unsigned int fragmentShader, unsi
} }
void gl_drawData(unsigned int shaderProg) { 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)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*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); gl_drawInteger(shaderProg, (int)10.0*camvy, 0.95f, -0.75f, 0.05f, 255, 255, 255, 0.005, -1);

View File

@ -194,12 +194,9 @@ void build_starting_chunk(int chx, int chy) {
void init_hashtbl() { void init_hashtbl() {
visited = hashtbl_generate(1789); visited = hashtbl_generate(1789);
build_starting_chunk(0, 0); build_starting_chunk(player_chx, player_chy);
current_room = hashtbl_find_opt(visited, 0, 0); current_room = hashtbl_find_opt(visited, player_chx, player_chy);
player_chx = 0;
player_chy = 0;
total_weight = 0; total_weight = 0;
coins = 0;
} }
void get_number_blocks(int* ret_cubes, int* ret_tps, int* ret_ent, FILE* ptr) { 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); fclose(ptr);
} }
void parse_rooms(int n_rooms) { char* get_name_and_i(char* folder, int nrooms, int* reti) {
char* name = malloc(sizeof(char)*19); // 1000 rooms max 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[0] = 't';
name[1] = 'e'; name[1] = 'e';
name[2] = 'm'; name[2] = 'm';
@ -489,7 +511,9 @@ void parse_rooms(int n_rooms) {
name[15] = '0'; name[15] = '0';
name[16] = '\0'; name[16] = '\0';
name[17] = '\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 = malloc(sizeof(entry)*n_rooms);
pool_size = n_rooms; pool_size = n_rooms;
@ -499,10 +523,14 @@ void parse_rooms(int n_rooms) {
for(int k = 0; k < n_rooms; k++) { for(int k = 0; k < n_rooms; k++) {
printf("parsing %d...", k); printf("parsing %d...", k);
if(k < 10) { if(k < 10) {
name[15] = (char)(k%10 + 48); name[id] = (char)(k%10 + 48);
} else if(k < 100) { } else if(k < 100) {
name[15] = (char)((k/10)%10 + 48); name[id] = (char)((k/10)%10 + 48);
name[16] = (char)(k%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); parse_one_room(k, name);
printf("done.\n"); 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 // has to be a multiple of both room_width and room_depth
int divider = 4; int divider = 4;
// unused
void generate_terrain(room* r) { 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) int rsize = 4*(room_width/divider)*(room_width/divider)*(room_depth/divider)*(room_depth/divider); // floor size (with 1x1 cubes)

View File

@ -45,7 +45,7 @@ void align_to(FILE* ptr, char ch) ;
int read_int(FILE* ptr, bool print) ; int read_int(FILE* ptr, bool print) ;
double read_float(FILE* ptr) ; double read_float(FILE* ptr) ;
void parse_one_room(int id, char* filename) ; 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) ; void generate_nearby_chunks(int render_dist) ;

View File

@ -27,6 +27,22 @@ int gamemode;
double jPress = false; double jPress = false;
double gPress = 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) { void processInput(GLFWwindow *window, float dtime) {
// quit w // quit w
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { 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) { if(glfwGetKey(window, GLFW_KEY_M) == GLFW_PRESS) {
rot_vt = mind(3.14159/2.0, rot_vt+sensitivity); 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" const char *vertexShaderSource = "#version 330 core\n"
@ -225,7 +251,7 @@ int main_alt() {
init_ent_generator(10); init_ent_generator(10);
init_proj(); init_proj();
init_interf(); init_interf();
parse_rooms(7); parse_rooms(7, "templates/");
// ---------------------------------------------------------------------------------------------------------------------------------------------- // // ---------------------------------------------------------------------------------------------------------------------------------------------- //
// ---------------------------------------------------------------------------------------------------------------------------------------------- // // ---------------------------------------------------------------------------------------------------------------------------------------------- //

View File

@ -66,20 +66,27 @@ void init_csts() {
camx = 2.0; camx = 2.0;
camy = 5.0; camy = 5.0;
camz = 2.0; camz = 2.0;
player_chx = 0;
player_chy = 0;
camvx = 0.0; camvx = 0.0;
camvy = 0.0; camvy = 0.0;
camvz = 0.0; camvz = 0.0;
rot_hz = 0.0; rot_hz = 0.0;
rot_vt = 0.0; rot_vt = 0.0;
draw_type = 0;
player_hp = 1000;
fade_dmg = 0;
room_width = 16.0; room_width = 16.0;
room_depth = 16.0; room_depth = 16.0;
sq2 = sqrt(2);
coins = 0;
player_hp = 1000;
njumps = 3; njumps = 3;
draw_type = 0;
fade_dmg = 0;
stop_evetything = false; stop_evetything = false;
tan_fov = tan((fov * 3.14159 / 180.0) / 2.0); tan_fov = tan((fov * 3.14159 / 180.0) / 2.0);
sq2 = sqrt(2);
} }
void set_player_coords(int old_chx, int old_chy) { void set_player_coords(int old_chx, int old_chy) {
@ -289,6 +296,10 @@ void movePlayerG(float dtime) {
camvx *= (1.0 - friction*((double)(dtime))); camvx *= (1.0 - friction*((double)(dtime)));
camvz *= (1.0 - friction*((double)(dtime))); camvz *= (1.0 - friction*((double)(dtime)));
if(camy <= -64) {
player_hp -= (int)(400*dtime);
}
} }
void teleport_on_edge() { void teleport_on_edge() {