diff --git a/courses/koopa_troopa_beach/course_offsets.c b/courses/koopa_troopa_beach/course_offsets.c index 68af5b33e..245db06e0 100644 --- a/courses/koopa_troopa_beach/course_offsets.c +++ b/courses/koopa_troopa_beach/course_offsets.c @@ -319,4 +319,3 @@ Animation* d_course_koopa_troopa_beach_unk_data5[] = { uintptr_t d_course_koopa_troopa_beach_unk_data6[] = { 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000001, }; - diff --git a/src/camera.c b/src/camera.c index a1ddc0f16..91510e62c 100644 --- a/src/camera.c +++ b/src/camera.c @@ -17,6 +17,7 @@ #include "main.h" #include "spawn_players.h" #include "enhancements/freecam/freecam_engine.h" +#include "freecam.h" f32 D_800DDB30[] = { 0.4f, 0.6f, 0.275f, 0.3f }; diff --git a/src/enhancements/collision_viewer.c b/src/enhancements/collision_viewer.c index e5b23b845..577cdd9cf 100644 --- a/src/enhancements/collision_viewer.c +++ b/src/enhancements/collision_viewer.c @@ -18,7 +18,10 @@ void render_collision(void) { gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH); gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK); gDPPipeSync(gDisplayListHead++); - gDPSetOtherMode(gDisplayListHead++, G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2); + gDPSetOtherMode(gDisplayListHead++, + G_AD_NOTPATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_AA_ZB_OPA_SURF | G_RM_AA_ZB_OPA_SURF2); gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE); // Set matrix @@ -27,20 +30,21 @@ void render_collision(void) { for (size_t i = 0; i < gCollisionMeshCount; i++) { // Load vertices for this tri - switch(gCollisionMesh[i].surfaceType) { + switch (gCollisionMesh[i].surfaceType) { case ASPHALT: - // gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); - // gDPTileSync(gDisplayListHead++); - // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 6, G_TX_NOLOD); - // gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x00FC, 0x007C); - // gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTextureRoad1); - // gDPTileSync(gDisplayListHead++); - // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - // gDPLoadSync(gDisplayListHead++); - // gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 2047, 128); - // gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); - // gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + // gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + // gDPTileSync(gDisplayListHead++); + // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + // G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 6, G_TX_NOLOD); + // gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x00FC, 0x007C); + // gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTextureRoad1); + // gDPTileSync(gDisplayListHead++); + // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + // G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + // G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, + // 0, 2047, 128); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + // gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); gCollisionMesh[i].vtx1->v.cn[0] = 50; gCollisionMesh[i].vtx1->v.cn[1] = 50; gCollisionMesh[i].vtx1->v.cn[2] = 50; @@ -50,16 +54,19 @@ void render_collision(void) { gCollisionMesh[i].vtx3->v.cn[0] = 50; gCollisionMesh[i].vtx3->v.cn[1] = 50; gCollisionMesh[i].vtx3->v.cn[2] = 50; - + break; case DIRT: // gTexture64619C gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture64AF50); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -77,14 +84,15 @@ void render_collision(void) { case SAND: // gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); // gDPTileSync(gDisplayListHead++); - // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + // G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); // gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); // gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture67BEE8); // gDPTileSync(gDisplayListHead++); - // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - // gDPLoadSync(gDisplayListHead++); - // gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); - // gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + // G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + // G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, + // 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); // gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); // gCollisionMesh[i].vtx1->v.cn[0] = 255; // gCollisionMesh[i].vtx1->v.cn[1] = 121; @@ -99,11 +107,14 @@ void render_collision(void) { case STONE: gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture6528DC); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -121,11 +132,14 @@ void render_collision(void) { case SNOW: gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture677F04); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -134,11 +148,14 @@ void render_collision(void) { case SAND_OFFROAD: gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture67B9B0); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -148,17 +165,19 @@ void render_collision(void) { gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTextureGrass1); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); - // gCollisionMesh[i].vtx1->v.cn[0] = 50; // gCollisionMesh[i].vtx1->v.cn[1] = 180; // gCollisionMesh[i].vtx1->v.cn[2] = 50; @@ -172,11 +191,14 @@ void render_collision(void) { case ICE: gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture643B3C); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -185,54 +207,61 @@ void render_collision(void) { case WET_SAND: // gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); // gDPTileSync(gDisplayListHead++); - // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + // G_TX_NOMIRROR | G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); // gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x00FC); // gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture66DD38); // gDPTileSync(gDisplayListHead++); - // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - // gDPLoadSync(gDisplayListHead++); - // gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); - // gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + // gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + // G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + // G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, + // 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); // gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); break; - case SNOW_OFFROAD: - gCollisionMesh[i].vtx1->v.cn[0] = 80; - gCollisionMesh[i].vtx1->v.cn[1] = 80; - gCollisionMesh[i].vtx1->v.cn[2] = 80; - gCollisionMesh[i].vtx2->v.cn[0] = 80; - gCollisionMesh[i].vtx2->v.cn[1] = 80; - gCollisionMesh[i].vtx2->v.cn[2] = 80; - gCollisionMesh[i].vtx3->v.cn[0] = 80; - gCollisionMesh[i].vtx3->v.cn[1] = 80; - gCollisionMesh[i].vtx3->v.cn[2] = 80; - break; - case CLIFF: - break; - case DIRT_OFFROAD: - break; - case TRAIN_TRACK: // gTextureRailroadTrack - gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); - gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 6, G_TX_NOLOD); - gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x00FC, 0x007C); - gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTextureRailroadTrack); - gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(gDisplayListHead++); - gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 2047, 128); - gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); - gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); - break; - case CAVE: - break; + case SNOW_OFFROAD: + gCollisionMesh[i].vtx1->v.cn[0] = 80; + gCollisionMesh[i].vtx1->v.cn[1] = 80; + gCollisionMesh[i].vtx1->v.cn[2] = 80; + gCollisionMesh[i].vtx2->v.cn[0] = 80; + gCollisionMesh[i].vtx2->v.cn[1] = 80; + gCollisionMesh[i].vtx2->v.cn[2] = 80; + gCollisionMesh[i].vtx3->v.cn[0] = 80; + gCollisionMesh[i].vtx3->v.cn[1] = 80; + gCollisionMesh[i].vtx3->v.cn[2] = 80; + break; + case CLIFF: + break; + case DIRT_OFFROAD: + break; + case TRAIN_TRACK: // gTextureRailroadTrack + gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); + gDPTileSync(gDisplayListHead++); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 6, G_TX_NOLOD); + gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x00FC, 0x007C); + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTextureRailroadTrack); + gDPTileSync(gDisplayListHead++); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); + gDPLoadSync(gDisplayListHead++); + gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 2047, 128); + gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2); + break; + case CAVE: + break; case OUT_OF_BOUNDS: gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture64313C); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -265,11 +294,14 @@ void render_collision(void) { case BRIDGE: gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD); gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gTexture676FB0); gDPTileSync(gDisplayListHead++); - gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD); gDPLoadSync(gDisplayListHead++); gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256); gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA); @@ -294,4 +326,4 @@ void render_collision(void) { gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0); gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF); } - } +} diff --git a/src/enhancements/collision_viewer.h b/src/enhancements/collision_viewer.h index 8a2a3ab74..a59acdd5e 100644 --- a/src/enhancements/collision_viewer.h +++ b/src/enhancements/collision_viewer.h @@ -5,5 +5,4 @@ void render_collision(void); - #endif // COLLISION_VIEWER_H diff --git a/src/enhancements/freecam/freecam.c b/src/enhancements/freecam/freecam.c index b7b148425..bb9522185 100644 --- a/src/enhancements/freecam/freecam.c +++ b/src/enhancements/freecam/freecam.c @@ -13,6 +13,9 @@ #include #include "freecam_engine.h" #include "n64_freecam.h" +#include "math_util.h" +#include "skybox_and_splitscreen.h" +#include "freecam.h" typedef struct { Vec3f pos; @@ -40,10 +43,6 @@ u32 gFreecamControllerType = 0; // void freecam_n64_controller_manager(Camera *camera, struct Controller *controller, Player *player); // void freecam_target_player(Camera *camera, u32 playerIndex); // void freecam_move_camera_up(Camera* camera, struct Controller *controller, f32 distance); -void freecam_save_state(Camera *camera); -void freecam_load_state(Camera *camera); -void freecam_mouse_manager(Camera *camera); -void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector); /** * Controls @@ -67,10 +66,10 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector); * Camera mode 1: Enter freecam at the player's position * Camera mode 2: Enter freecam at previous freecam spot * -*/ + */ -void freecam(Camera *camera, Player *player, s8 index) { - struct Controller *controller = &gControllers[0]; +void freecam(Camera* camera, Player* player, s8 index) { + struct Controller* controller = &gControllers[0]; f32 dirX; f32 dirY; f32 dirZ; @@ -101,7 +100,7 @@ void freecam(Camera *camera, Player *player, s8 index) { return; } else { - if(fMode) { + if (fMode) { freecam_save_state(camera); } } @@ -114,14 +113,13 @@ void freecam(Camera *camera, Player *player, s8 index) { return; } - //if (player == gPlayerOne) { return; } + // if (player == gPlayerOne) { return; } - //player->type &= ~PLAYER_HUMAN; - //player->type |= PLAYER_HUMAN; + // player->type &= ~PLAYER_HUMAN; + // player->type |= PLAYER_HUMAN; // if ((player->type & PLAYER_START_SEQUENCE)) { return; } - // Mouse/Keyboard if (gFreecamControllerType == 0) { freecam_calculate_forward_vector_allow_rotation(camera, freeCam.forwardVector); @@ -135,7 +133,7 @@ void freecam(Camera *camera, Player *player, s8 index) { } } -void freecam_save_state(Camera *camera) { +void freecam_save_state(Camera* camera) { fState.pos[0] = camera->pos[0]; fState.pos[1] = camera->pos[1]; fState.pos[2] = camera->pos[2]; @@ -150,7 +148,7 @@ void freecam_save_state(Camera *camera) { fModeInit = true; } -void freecam_load_state(Camera *camera) { +void freecam_load_state(Camera* camera) { camera->pos[0] = fState.pos[0]; camera->pos[1] = fState.pos[1]; camera->pos[2] = fState.pos[2]; @@ -182,22 +180,23 @@ void freecam_mouse_manager(Camera* camera, Vec3f forwardVector) { f32 pitchChange = mouseY * MOUSE_SENSITIVITY_Y; // Smoothly update yaw and pitch - camera->rot[1] += (short)(yawChange * 65535.0f / (2 * M_PI)); // Yaw (left/right) - camera->rot[2] += (short)(pitchChange * 65535.0f / (2 * M_PI)); // Pitch (up/down) + camera->rot[1] += (short) (yawChange * 65535.0f / (2 * M_PI)); // Yaw (left/right) + camera->rot[2] += (short) (pitchChange * 65535.0f / (2 * M_PI)); // Pitch (up/down) // Clamp pitch to avoid extreme values - if (camera->rot[2] > 15999) camera->rot[2] = 15999; - if (camera->rot[2] < -15999) camera->rot[2] = -15999; + if (camera->rot[2] > 15999) { + camera->rot[2] = 15999; + } + if (camera->rot[2] < -15999) { + camera->rot[2] = -15999; + } // Calculate the forward vector based on the new yaw and pitch - //freecam_calculate_forward_vector_allow_rotation(camera, forwardVector); + // freecam_calculate_forward_vector_allow_rotation(camera, forwardVector); // Smoothly interpolate the lookAt position - Vec3f targetLookAt = { - camera->pos[0] + forwardVector[0], - camera->pos[1] + forwardVector[1], - camera->pos[2] + forwardVector[2] - }; + Vec3f targetLookAt = { camera->pos[0] + forwardVector[0], camera->pos[1] + forwardVector[1], + camera->pos[2] + forwardVector[2] }; // Smoothing camera->lookAt[0] += (targetLookAt[0] - camera->lookAt[0]) * gFreecamRotateSmoothingFactor; @@ -206,7 +205,6 @@ void freecam_mouse_manager(Camera* camera, Vec3f forwardVector) { } } - f32 gFreecamSpeed = 3.0f; f32 gFreecamSpeedMultiplier = 2.0f; @@ -220,8 +218,7 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { } // Determine movement direction based on keys pressed - Vec3f totalMove = {0.0f, 0.0f, 0.0f}; - + Vec3f totalMove = { 0.0f, 0.0f, 0.0f }; // if (keystate[SDL_SCANCODE_F]) { // fMode = true; @@ -257,7 +254,6 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { return; } - if (keystate[SDL_SCANCODE_W]) { totalMove[0] += forwardVector[0] * moveSpeed; totalMove[2] += forwardVector[2] * moveSpeed; @@ -290,7 +286,7 @@ void freecam_keyboard_manager(Camera* camera, Vec3f forwardVector) { } // Control the camera using the n64 controller -void freecam_n64_controller_manager(Camera *camera, struct Controller *controller, Player *player) { +void freecam_n64_controller_manager(Camera* camera, struct Controller* controller, Player* player) { if (controller->buttonPressed & U_JPAD) { fMode = !fMode; @@ -334,12 +330,12 @@ void freecam_n64_controller_manager(Camera *camera, struct Controller *controlle } // Forward - if (controller->button & A_BUTTON) { + if (controller->button & A_BUTTON) { freecam_n64_move_camera_forward(camera, controller, 3.0f); } // Backward B button but not A button. - if (controller->button & B_BUTTON && !(controller->button & A_BUTTON)) { + if (controller->button & B_BUTTON && !(controller->button & A_BUTTON)) { freecam_n64_move_camera_forward(camera, controller, -3.0f); } @@ -354,21 +350,22 @@ void freecam_n64_controller_manager(Camera *camera, struct Controller *controlle } void freecam_render_setup(void) { - u16 perspNorm; - Mat4 matrix; - init_rdp(); - func_802A53A4(); - init_rdp(); - func_80057FC4(0); - gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH); - gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK | G_CULL_BOTH | G_CULL_FRONT); - guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, D_80150150, D_8015014C, 1.0f); - gSPPerspNormalize(gDisplayListHead++, perspNorm); - gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxPersp[0]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); - guLookAt(&gGfxPool->mtxLookAt[0], camera1->pos[0], camera1->pos[1], camera1->pos[2], camera1->lookAt[0], camera1->lookAt[1], camera1->lookAt[2], camera1->up[0], camera1->up[1], camera1->up[2]); - gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxLookAt[0]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); - mtxf_identity(matrix); - gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); - render_set_position(matrix, 0); - init_rdp(); + u16 perspNorm; + Mat4 matrix; + init_rdp(); + func_802A53A4(); + init_rdp(); + func_80057FC4(0); + gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH); + gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK | G_CULL_BOTH | G_CULL_FRONT); + guPerspective(&gGfxPool->mtxPersp[0], &perspNorm, gCameraZoom[0], gScreenAspect, D_80150150, D_8015014C, 1.0f); + gSPPerspNormalize(gDisplayListHead++, perspNorm); + gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxPersp[0]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + guLookAt(&gGfxPool->mtxLookAt[0], camera1->pos[0], camera1->pos[1], camera1->pos[2], camera1->lookAt[0], + camera1->lookAt[1], camera1->lookAt[2], camera1->up[0], camera1->up[1], camera1->up[2]); + gSPMatrix(gDisplayListHead++, (&gGfxPool->mtxLookAt[0]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + mtxf_identity(matrix); + gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK); + render_set_position(matrix, 0); + init_rdp(); } diff --git a/src/enhancements/freecam/freecam.h b/src/enhancements/freecam/freecam.h index 5727ee977..b07edaa06 100644 --- a/src/enhancements/freecam/freecam.h +++ b/src/enhancements/freecam/freecam.h @@ -10,6 +10,10 @@ extern "C" { void freecam(Camera*, Player*, s8); void freecam_render_setup(void); +void freecam_save_state(Camera*); +void freecam_load_state(Camera*); +void freecam_mouse_manager(Camera*, Vec3f); +void freecam_keyboard_manager(Camera*, Vec3f); extern f32 gFreecamSpeed; extern f32 gFreecamSpeedMultiplier; diff --git a/src/enhancements/freecam/freecam_engine.c b/src/enhancements/freecam/freecam_engine.c index ff06330b8..bcef5380b 100644 --- a/src/enhancements/freecam/freecam_engine.c +++ b/src/enhancements/freecam/freecam_engine.c @@ -17,7 +17,7 @@ FreeCam freeCam; f32 gDampValue = 0.99f; -void freecam_update(Camera *camera, Vec3f forwardVector) { +void freecam_update(Camera* camera, Vec3f forwardVector) { // Update FreeCam state camera->pos[0] += freeCam.velocity[0] * gDeltaTime; camera->pos[1] += freeCam.velocity[1] * gDeltaTime; @@ -34,10 +34,10 @@ void freecam_update(Camera *camera, Vec3f forwardVector) { } // Function to move the camera forward or backward without changing its height -void freecam_move_camera_forward(Camera *camera, f32 moveSpeed, Vec3f forwardVector) { +void freecam_move_camera_forward(Camera* camera, f32 moveSpeed, Vec3f forwardVector) { // Calculate the forward vector forwardVector[0] = camera->lookAt[0] - camera->pos[0]; - //forwardVector[1] = 0; // Don't change the height + // forwardVector[1] = 0; // Don't change the height forwardVector[2] = camera->lookAt[2] - camera->pos[2]; // Normalize the forward vector @@ -53,17 +53,15 @@ void freecam_move_camera_forward(Camera *camera, f32 moveSpeed, Vec3f forwardVec camera->lookAt[0] = camera->pos[0] + forwardVector[0]; camera->lookAt[2] = camera->pos[0] + forwardVector[2]; - } - -void freecam_pan_camera(Camera *camera, f32 moveSpeed) { +void freecam_pan_camera(Camera* camera, f32 moveSpeed) { Vec3f rightVector; f32 length; // Calculate the right vector for pan movement rightVector[0] = camera->lookAt[2] - camera->pos[2]; - // rightVector[1] = 0; // Maintain the same height + // rightVector[1] = 0; // Maintain the same height rightVector[2] = -(camera->lookAt[0] - camera->pos[0]); // Normalize the right vector @@ -76,12 +74,8 @@ void freecam_pan_camera(Camera *camera, f32 moveSpeed) { // Update camera's position freeCam.velocity[0] = rightVector[0] * moveSpeed; freeCam.velocity[2] = rightVector[2] * moveSpeed; - } - - - void freecam_calculate_forward_vector_allow_rotation(Camera* camera, Vec3f forwardVector) { // Convert yaw from 0-65535 to degrees f32 pitch = (camera->rot[2] / 65535.0f) * 360.0f; @@ -93,16 +87,16 @@ void freecam_calculate_forward_vector_allow_rotation(Camera* camera, Vec3f forwa // Calculate the forward vector based on yaw, ignoring pitch to keep height unchanged forwardVector[0] = -sinf(yaw); - forwardVector[1] = -sinf(pitch); // Keep the height unchanged + forwardVector[1] = -sinf(pitch); // Keep the height unchanged forwardVector[2] = cosf(yaw); } // Calculates the forward direction vector based on camera orientation -void freecam_calculate_forward_vector(Camera *camera, Vec3f forwardVector) { +void freecam_calculate_forward_vector(Camera* camera, Vec3f forwardVector) { // Convert yaw from 0-65535 to degrees f32 yaw = (camera->rot[0] / 65535.0f) * 360.0f; f32 pitch = (camera->rot[2] / 65535.0f) * 360.0f; - + // Convert degrees to radians yaw = yaw * M_PI / 180.0f; pitch = pitch * M_PI / 180.0f; @@ -125,9 +119,9 @@ void freecam_move_camera_down(Camera* camera, f32 distance) { camera->lookAt[1] += distance; } -void freecam_target_player(Camera *camera, u32 playerIndex) { - Vec3f forwardVector;// = 2.0f; - Player *player = &gPlayers[playerIndex]; +void freecam_target_player(Camera* camera, u32 playerIndex) { + Vec3f forwardVector; // = 2.0f; + Player* player = &gPlayers[playerIndex]; // Calculate the direction from the player to the camera f32 dirX = player->pos[0] - camera->pos[0]; diff --git a/src/enhancements/freecam/freecam_engine.h b/src/enhancements/freecam/freecam_engine.h index f6a69052f..18e6d258c 100644 --- a/src/enhancements/freecam/freecam_engine.h +++ b/src/enhancements/freecam/freecam_engine.h @@ -20,12 +20,12 @@ typedef struct { extern FreeCam freeCam; extern f32 gDampValue; -//void update_camera(Camera *camera, f32 deltaTime); -void freecam_pan_camera(Camera *camera, f32 moveSpeed); +// void update_camera(Camera *camera, f32 deltaTime); +void freecam_pan_camera(Camera* camera, f32 moveSpeed); void freecam_calculate_forward_vector_allow_rotation(Camera* camera, Vec3f forwardVector); void freecam_calculate_forward_vector(Camera* camera, Vec3f forwardVector); void freecam_move_camera_forward(Camera* camera, f32 distance, Vec3f forwardVector); -void freecam_target_player(Camera *camera, u32 playerIndex); +void freecam_target_player(Camera* camera, u32 playerIndex); void freecam_update(Camera* camera, Vec3f forwardVector); void freecam_move_camera_up(Camera* camera, f32); void freecam_move_camera_down(Camera* camera, f32); @@ -36,4 +36,4 @@ extern f32 gDampValue; } #endif -#endif // FREE_CAM_ENGINE_H \ No newline at end of file +#endif // FREE_CAM_ENGINE_H diff --git a/src/enhancements/freecam/n64_freecam.c b/src/enhancements/freecam/n64_freecam.c index 5a3ffb9e8..48628507a 100644 --- a/src/enhancements/freecam/n64_freecam.c +++ b/src/enhancements/freecam/n64_freecam.c @@ -7,6 +7,8 @@ #include "camera.h" #include #include "player_controller.h" +#include "collision.h" +#include "freecam_engine.h" #define N64_SENSITIVITY_X 0.0003f #define N64_SENSITIVITY_Y 0.0003f @@ -26,7 +28,7 @@ void freecam_n64_calculate_forward_vector(Camera* camera, Vec3f forwardVector) { } // Function to move the camera forward -void freecam_n64_move_camera_forward(Camera* camera, struct Controller *controller, f32 distance) { +void freecam_n64_move_camera_forward(Camera* camera, struct Controller* controller, f32 distance) { Vec3f forwardVector; Vec3f rightVector; f32 length; @@ -37,7 +39,8 @@ void freecam_n64_move_camera_forward(Camera* camera, struct Controller *controll } // Normalize the forward vector - length = sqrtf(forwardVector[0] * forwardVector[0] + forwardVector[1] * forwardVector[1] + forwardVector[2] * forwardVector[2]); + length = sqrtf(forwardVector[0] * forwardVector[0] + forwardVector[1] * forwardVector[1] + + forwardVector[2] * forwardVector[2]); forwardVector[0] /= length; forwardVector[1] /= length; forwardVector[2] /= length; @@ -59,7 +62,7 @@ void freecam_n64_move_camera_forward(Camera* camera, struct Controller *controll } // Function to move the camera forward -void freecam_n64_move_camera_up(Camera* camera, struct Controller *controller, f32 distance) { +void freecam_n64_move_camera_up(Camera* camera, struct Controller* controller, f32 distance) { // Check if the Z button is pressed (for faster movement) if (controller->button & Z_TRIG) { distance *= 3; @@ -73,7 +76,7 @@ void freecam_n64_move_camera_up(Camera* camera, struct Controller *controller, f } // Update camera rotation and lookAt point based on input -void freecam_n64_update(Camera* camera, struct Controller *controller) { +void freecam_n64_update(Camera* camera, struct Controller* controller) { // Calculate yaw (horizontal movement) f32 yawChange = controller->rawStickX * N64_SENSITIVITY_X; f32 pitchChange = controller->rawStickY * N64_SENSITIVITY_Y; @@ -81,9 +84,9 @@ void freecam_n64_update(Camera* camera, struct Controller *controller) { check_bounding_collision(&camera->collision, 50, camera->pos[0], camera->pos[1], camera->pos[2]); - camera->rot[1] += (short)(yawChange * 65535.0f / (2 * M_PI)); // Convert radians to 0-65535 range + camera->rot[1] += (short) (yawChange * 65535.0f / (2 * M_PI)); // Convert radians to 0-65535 range - camera->rot[2] += (short)(-pitchChange * 65535.0f / (2 * M_PI)); // Convert radians to 0-65535 range + camera->rot[2] += (short) (-pitchChange * 65535.0f / (2 * M_PI)); // Convert radians to 0-65535 range if (camera->rot[2] > 15999) { camera->rot[2] = 15999; @@ -96,4 +99,4 @@ void freecam_n64_update(Camera* camera, struct Controller *controller) { camera->lookAt[0] = camera->pos[0] + forwardVector[0]; camera->lookAt[1] = camera->pos[1] + forwardVector[1]; camera->lookAt[2] = camera->pos[2] + forwardVector[2]; -} \ No newline at end of file +} diff --git a/src/enhancements/freecam/n64_freecam.h b/src/enhancements/freecam/n64_freecam.h index 703383d4d..17eba53f4 100644 --- a/src/enhancements/freecam/n64_freecam.h +++ b/src/enhancements/freecam/n64_freecam.h @@ -3,11 +3,10 @@ #include - -void freecam_n64_move_camera_up(Camera* camera, struct Controller *controller, f32 distance); -void freecam_n64_controller_manager(Camera *camera, struct Controller *controller, Player *player); +void freecam_n64_move_camera_up(Camera* camera, struct Controller* controller, f32 distance); +void freecam_n64_controller_manager(Camera* camera, struct Controller* controller, Player* player); void freecam_n64_calculate_forward_vector(Camera* camera, Vec3f forwardVector); -void freecam_n64_move_camera_forward(Camera* camera, struct Controller *controller, f32 distance); -void freecam_n64_update(Camera* camera, struct Controller *controller); +void freecam_n64_move_camera_forward(Camera* camera, struct Controller* controller, f32 distance); +void freecam_n64_update(Camera* camera, struct Controller* controller); -#endif // N64_FREECAM_H \ No newline at end of file +#endif // N64_FREECAM_H diff --git a/src/main.c b/src/main.c index de999c9f6..a47eeefe9 100644 --- a/src/main.c +++ b/src/main.c @@ -325,14 +325,14 @@ f32 calculate_delta_time(void) { f32 deltaTime; if (now > prevtime) { - deltaTime = (f32)(now - prevtime) / OS_CPU_COUNTER; + deltaTime = (f32) (now - prevtime) / OS_CPU_COUNTER; } else { // Handle counter reset - deltaTime = (f32)((0xffffffff - prevtime) + 1 + now) / OS_CPU_COUNTER; + deltaTime = (f32) ((0xffffffff - prevtime) + 1 + now) / OS_CPU_COUNTER; } prevtime = now; - + // Cap deltaTime to avoid large jumps (e.g., on pause/resume) if (deltaTime > 1.0f / 15.0f) { // Assume 15 FPS is the lowest acceptable rate deltaTime = 1.0f / 15.0f; diff --git a/src/port/ui/FreecamWindow.cpp b/src/port/ui/FreecamWindow.cpp index 445140e83..4bbfc9055 100644 --- a/src/port/ui/FreecamWindow.cpp +++ b/src/port/ui/FreecamWindow.cpp @@ -37,7 +37,7 @@ void FreecamWindow::InitElement() { static s32 sReadyUpBool = false; -float dampMin = 0.995; +float dampMin = 0.990; float dampMax = 1.0f; float minSpeed = 1.0; float maxSpeed = 30.0f; @@ -61,27 +61,20 @@ void FreecamWindow::DrawElement() { gFreecamControllerType = current_item; } - ImGui::Text("Move: W,A,S,D\nUp: Space, Down: Shift\nFaster: Ctrl\nLook: Right-mouse button\nTarget previous player: N, Target next player: M"); + ImGui::Text("Move: W,A,S,D\nUp: Space, Down: Shift\nFaster: Ctrl\nLook: Right-mouse button\nTarget previous " + "player: N, Target next player: M"); ImGui::Spacing(); - UIWidgets::CVarCheckbox("Enable Flycam", "gFreecam", { - .tooltip = "Allows you to fly around the course" - }); + UIWidgets::CVarCheckbox("Enable Flycam", "gFreecam", { .tooltip = "Allows you to fly around the course" }); ImGui::Spacing(); - if (ImGui::SliderScalar("Camera Damping", ImGuiDataType_Float, &gDampValue, &dampMin, &dampMax, "%f")) { + if (ImGui::SliderScalar("Camera Damping", ImGuiDataType_Float, &gDampValue, &dampMin, &dampMax, "%f")) {}; + if (ImGui::SliderScalar("Camera Speed", ImGuiDataType_Float, &gFreecamSpeed, &minSpeed, &maxSpeed, "%f")) {}; + if (ImGui::SliderScalar("Camera Speed Multiplier", ImGuiDataType_Float, &gFreecamSpeedMultiplier, + &minSpeedMultiplier, &maxSpeedMultiplier, "%f")) {}; + if (ImGui::SliderScalar("Camera Rotation Smoothing", ImGuiDataType_Float, &gFreecamRotateSmoothingFactor, + &minFreecamRotateFactor, &maxFreecamRotateFactor, "%f")) {}; - }; - if (ImGui::SliderScalar("Camera Speed", ImGuiDataType_Float, &gFreecamSpeed, &minSpeed, &maxSpeed, "%f")) { - - }; - if (ImGui::SliderScalar("Camera Speed Multiplier", ImGuiDataType_Float, &gFreecamSpeedMultiplier, &minSpeedMultiplier, &maxSpeedMultiplier, "%f")) { - - }; - if (ImGui::SliderScalar("Camera Rotation Smoothing", ImGuiDataType_Float, &gFreecamRotateSmoothingFactor, &minFreecamRotateFactor, &maxFreecamRotateFactor, "%f")) { - - }; - ImGui::Spacing(); ImGui::Text("Target Player"); @@ -100,7 +93,6 @@ void FreecamWindow::DrawElement() { } } - ImGui::PopStyleColor(); } diff --git a/src/port/ui/FreecamWindow.h b/src/port/ui/FreecamWindow.h index 73ac2b00a..6208666d1 100644 --- a/src/port/ui/FreecamWindow.h +++ b/src/port/ui/FreecamWindow.h @@ -13,4 +13,4 @@ class FreecamWindow : public Ship::GuiWindow { void DrawElement() override; void UpdateElement() override; }; -} // namespace GameInfo \ No newline at end of file +} // namespace Freecam diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index b11a4f268..ed4575767 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -468,11 +468,9 @@ void DrawEnhancementsMenu() { UIWidgets::WindowButton("Multiplayer", "gMultiplayerWindowEnabled", GameUI::mMultiplayerWindow, { .tooltip = "Shows the multiplayer window" }); - if (UIWidgets::BeginMenu("Gameplay")) { - UIWidgets::WindowButton("Freecam", "gFreecam", GameUI::mFreecamWindow, { - .tooltip = "Allows you to fly around the course" - }); + UIWidgets::WindowButton("Freecam", "gFreecam", GameUI::mFreecamWindow, + { .tooltip = "Allows you to fly around the course" }); UIWidgets::CVarCheckbox( "No Level of Detail (LOD)", "gDisableLod", { .tooltip = "Disable Level of Detail (LOD) to avoid models using lower poly versions at a distance" }); @@ -485,7 +483,6 @@ void DrawEnhancementsMenu() { "Far Frustrum", "gFarFrustrum", 0.0f, 10000.0f, 10000.0f, { .tooltip = "Say how Far the Frustrum are when 'Disable Culling' are enable", .step = 10.0f }); ImGui::EndMenu(); - } ImGui::EndMenu(); @@ -515,9 +512,7 @@ void DrawDebugMenu() { { .tooltip = "Enables the Gfx Debugger window, allowing you to input commands, type help for some examples" }); - UIWidgets::CVarCheckbox("Debug mode", "gEnableDebugMode", { - .tooltip = "Enable debug mode" - }); + UIWidgets::CVarCheckbox("Debug mode", "gEnableDebugMode", { .tooltip = "Enable debug mode" }); UIWidgets::CVarCheckbox("Level Selector", "gLevelSelector", { .tooltip = "Allows you to select any level from the main menu" }); @@ -525,9 +520,8 @@ void DrawDebugMenu() { UIWidgets::CVarCheckbox("SFX Jukebox", "gSfxJukebox", { .tooltip = "Allows you to play sound effects from the game" }); - UIWidgets::CVarCheckbox("Render Collision", "gRenderCollisionMesh", { - .tooltip = "Renders the collision mesh instead of the course mesh" - }); + UIWidgets::CVarCheckbox("Render Collision", "gRenderCollisionMesh", + { .tooltip = "Renders the collision mesh instead of the course mesh" }); UIWidgets::Spacer(0); diff --git a/src/racing/render_courses.c b/src/racing/render_courses.c index 4f0b67c33..9ce24b7d3 100644 --- a/src/racing/render_courses.c +++ b/src/racing/render_courses.c @@ -1369,7 +1369,7 @@ void func_8029569C(void) { } } -void render_course(struct UnkStruct_800DC5EC *arg0) { +void render_course(struct UnkStruct_800DC5EC* arg0) { func_802B5D64(D_800DC610, D_802B87D4, 0, 1); // Freecam priority renders collision. @@ -1378,7 +1378,7 @@ void render_course(struct UnkStruct_800DC5EC *arg0) { return; } - if ((CVarGetInteger("gFreecam", 0) == true) ) { + if ((CVarGetInteger("gFreecam", 0) == true)) { // Render credits courses func_8029569C(); return;