diff --git a/haloo3d b/haloo3d index 2edcfd6..19cfe45 160000 --- a/haloo3d +++ b/haloo3d @@ -1 +1 @@ -Subproject commit 2edcfd6d8340abdd26670f4ac5d911de6e65d7be +Subproject commit 19cfe45a34725ad0846c46c1e9e4cc3214ef46b7 diff --git a/maze.c b/maze.c index 2249aa9..c774c14 100644 --- a/maze.c +++ b/maze.c @@ -1024,6 +1024,7 @@ int main() { // int argc, char *argv[]) { render.autolightfix = 1; render.rendersettings.ditherclose = DITHERSTART; render.rendersettings.ditherfar = DITHEREND; + // render.rendersettings.flags &= ~H3DR_PCT; // render.rendersettings.flags &= ~(H3DR_LIGHTING); render.rendersettings.pctminsize = 100; eprintf("Initialized renderer\n"); diff --git a/terrain.c b/terrain.c index dfed8e9..d526d96 100644 --- a/terrain.c +++ b/terrain.c @@ -26,27 +26,30 @@ #define DEFAULTLOOK \ { .x = 0, .y = 0, .z = -1 } // { .x = 1.0, .y = 1.0, .z = 1.0 } -#define CHUNKSIZE 8 // How big each chunk is (x and y, square) +// How big each chunk is (x and y, square). MUST BE POWER OF 2 - 1 +#define CHUNKSIZE 7 #define CHUNKSCALE 1.0 / CHUNKSIZE #define VIEWDISTANCE 10 #define PLBOXEDGE (VIEWDISTANCE * 2 + 1) #define MAXCHUNKPERFRAME 1 // These are initial values but there may be ways to change it -#define INIT_CAMPITCH MPI_2 * 1.6 // 1.575 +#define INIT_CAMPITCH MPI_2 // MPI_2 * 1.6 // 1.575 #define INIT_NEARCLIP 0.01 #define INIT_FARCLIP 100.0 #define INIT_FOV 90.0 #define INIT_DITHERSTART 100 #define INIT_DITHEREND 100 -#define INIT_LIGHTPITCH -MPI / 4.0 +#define INIT_LIGHTPITCH MPI_2 * 1.75 #define INIT_LIGHTYAW 0 -#define INIT_MINLIGHT 0.2 +#define INIT_MINLIGHT 0.3 -#define INIT_PLAYERHEIGHT 1.5 +#define INIT_PLAYERHEIGHT 0.5 #define INIT_PLAYERSPEED \ { .x = 0, .y = 0, .z = -1.5 } +#define RANDF() ((float)rand() / RAND_MAX) + // Some globals you can mess around with potentially int fps = 60; @@ -65,25 +68,30 @@ void fastface(haloo3d_facei face, uint16_t tex, uint16_t v0, uint16_t v1, void gen_terrain(struct vec3i pos, haloo3d_obj *model) { eprintf("Generating terrain at %d,%d\n", pos.x, pos.z); // Don't allow the model to have more than some amount of faces/vertices. - haloo3d_obj_resetfixed(model, CHUNKSIZE * CHUNKSIZE * 4, - CHUNKSIZE * CHUNKSIZE * 4); - // TODO: You need to change this to be a large plane that follows the player - // so you can use lighting on the islands but not on the water - // haloo3d_gen_paletteuv(0xF26F, model->vtexture[model->numvtextures++].v); - struct vec3 seacol = haloo3d_gen_paletteuv(0xF000 | (rand() & 0xFFF)); - int seauv = haloo3d_obj_addvtexture(model, seacol); - // clang-format off - // REMEMBER: NEGATIVE Z IS FORWARD - int tl = haloo3d_obj_addvertex(model, (struct vec4){.x = 0, .y = 0, .z = 0, .w = 1}); - int tr = haloo3d_obj_addvertex(model, (struct vec4){.x = CHUNKSIZE / 1.1, .y = 0, .z = 0, .w = 1}); - int bl = haloo3d_obj_addvertex(model, (struct vec4){.x = 0, .y = 0, .z = CHUNKSIZE / 1.1, .w = 1}); - int br = haloo3d_obj_addvertex(model, (struct vec4){.x = CHUNKSIZE / 1.1, .y = 0, .z = CHUNKSIZE / 1.1, .w = 1}); - // clang-format on - haloo3d_facei face; - fastface(face, seauv, bl, br, tl); - haloo3d_obj_addface(model, face); - fastface(face, seauv, br, tr, tl); - haloo3d_obj_addface(model, face); + haloo3d_obj_resetfixed(model, (CHUNKSIZE + 1) * (CHUNKSIZE + 1) * 4, + (CHUNKSIZE + 1) * (CHUNKSIZE + 1) * 4); + struct vec3 landcol = haloo3d_gen_paletteuv(0xF2F0); + int landuv = haloo3d_obj_addvtexture(model, landcol); + for (int z = 0; z <= CHUNKSIZE; z++) { + for (int x = 0; x <= CHUNKSIZE; x++) { + haloo3d_obj_addvertex( + model, (struct vec4){.x = x, .y = 2 * RANDF() - 1, .z = -z}); + } + } + for (int i = 0; i < (CHUNKSIZE + 1) * CHUNKSIZE; i++) { + if ((i & CHUNKSIZE) == CHUNKSIZE) { + continue; + } + uint16_t bl = i; + uint16_t br = i + 1; + uint16_t tl = i + CHUNKSIZE + 1; + uint16_t tr = i + CHUNKSIZE + 2; + haloo3d_facei face; + fastface(face, landuv, bl, br, tl); + haloo3d_obj_addface(model, face); + fastface(face, landuv, br, tr, tl); + haloo3d_obj_addface(model, face); + } haloo3d_obj_shrinktofit(model); } @@ -399,6 +407,8 @@ ecs_eid setup_sea(tecs *ecs, render_context *ctx, ecs_placement *playerpos, haloo3d_obj_resetfixed(model, 2, 4); struct vec3 seacol = haloo3d_gen_paletteuv(0xF26F); int seauv = haloo3d_obj_addvtexture(model, seacol); + // struct vec3 seacol2 = haloo3d_gen_paletteuv(0xF008); + // haloo3d_obj_addvtexture(model, seacol2); // clang-format off // REMEMBER: NEGATIVE Z IS FORWARD int tl = haloo3d_obj_addvertex(model, (struct vec4){.x = -1, .y = 0, .z = -1, .w = 1}); @@ -409,6 +419,7 @@ ecs_eid setup_sea(tecs *ecs, render_context *ctx, ecs_placement *playerpos, haloo3d_facei face; fastface(face, seauv, bl, br, tl); haloo3d_obj_addface(model, face); + // model->faces[0][0].texi++; fastface(face, seauv, br, tr, tl); haloo3d_obj_addface(model, face); ECS_SETCOMPONENT(ecs, seaid, ecs_object){