mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-07-08 14:37:09 -04:00
[enhancement] Collision Viewer (#59)
* Update render_courses.c * Update render_courses.c * Update ImguiUI.cpp * Create collision_viewer.c * Update render_courses.c * Update render_courses.c * Create collision_viewer.h * Update collision_viewer.c * Update render_courses.c * Update render_courses.c
This commit is contained in:
@@ -0,0 +1,288 @@
|
||||
#include <libultraship.h>
|
||||
#include "mk64.h"
|
||||
|
||||
//! @todo decide to use colours or textures and fix displaylists because they are buggy
|
||||
|
||||
void render_collision(void) {
|
||||
Mat4 matrix;
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
|
||||
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);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
|
||||
|
||||
// Set matrix
|
||||
gSPMatrix(gDisplayListHead++, &gIdentityMtx2, G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
|
||||
|
||||
for (size_t i = 0; i < gCollisionMeshCount; i++) {
|
||||
// Load vertices for this tri
|
||||
|
||||
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);
|
||||
gCollisionMesh[i].vtx1->v.cn[0] = 50;
|
||||
gCollisionMesh[i].vtx1->v.cn[1] = 50;
|
||||
gCollisionMesh[i].vtx1->v.cn[2] = 50;
|
||||
gCollisionMesh[i].vtx2->v.cn[0] = 50;
|
||||
gCollisionMesh[i].vtx2->v.cn[1] = 50;
|
||||
gCollisionMesh[i].vtx2->v.cn[2] = 50;
|
||||
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);
|
||||
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);
|
||||
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] = 248;
|
||||
// gCollisionMesh[i].vtx1->v.cn[2] = 220;
|
||||
// gCollisionMesh[i].vtx2->v.cn[0] = 255;
|
||||
// gCollisionMesh[i].vtx2->v.cn[1] = 248;
|
||||
// gCollisionMesh[i].vtx2->v.cn[2] = 220;
|
||||
// gCollisionMesh[i].vtx3->v.cn[0] = 255;
|
||||
// gCollisionMesh[i].vtx3->v.cn[1] = 248;
|
||||
// gCollisionMesh[i].vtx3->v.cn[2] = 220;
|
||||
break;
|
||||
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);
|
||||
// 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);
|
||||
// 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;
|
||||
// gCollisionMesh[i].vtx1->v.cn[2] = 25;
|
||||
// gCollisionMesh[i].vtx2->v.cn[0] = 255;
|
||||
// gCollisionMesh[i].vtx2->v.cn[1] = 121;
|
||||
// gCollisionMesh[i].vtx2->v.cn[2] = 25;
|
||||
// gCollisionMesh[i].vtx3->v.cn[0] = 255;
|
||||
// gCollisionMesh[i].vtx3->v.cn[1] = 121;
|
||||
// gCollisionMesh[i].vtx3->v.cn[2] = 25;
|
||||
break;
|
||||
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);
|
||||
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);
|
||||
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] = 128;
|
||||
// gCollisionMesh[i].vtx1->v.cn[1] = 128;
|
||||
// gCollisionMesh[i].vtx1->v.cn[2] = 128;
|
||||
// gCollisionMesh[i].vtx2->v.cn[0] = 128;
|
||||
// gCollisionMesh[i].vtx2->v.cn[1] = 128;
|
||||
// gCollisionMesh[i].vtx2->v.cn[2] = 128;
|
||||
// gCollisionMesh[i].vtx3->v.cn[0] = 128;
|
||||
// gCollisionMesh[i].vtx3->v.cn[1] = 128;
|
||||
// gCollisionMesh[i].vtx3->v.cn[2] = 128;
|
||||
break;
|
||||
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);
|
||||
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);
|
||||
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 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);
|
||||
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);
|
||||
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 GRASS: // gTextureGrass1
|
||||
|
||||
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);
|
||||
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);
|
||||
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;
|
||||
// gCollisionMesh[i].vtx2->v.cn[0] = 50;
|
||||
// gCollisionMesh[i].vtx2->v.cn[1] = 180;
|
||||
// gCollisionMesh[i].vtx2->v.cn[2] = 50;
|
||||
// gCollisionMesh[i].vtx3->v.cn[0] = 50;
|
||||
// gCollisionMesh[i].vtx3->v.cn[1] = 180;
|
||||
// gCollisionMesh[i].vtx3->v.cn[2] = 50;
|
||||
break;
|
||||
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);
|
||||
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);
|
||||
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 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);
|
||||
// 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);
|
||||
// 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 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);
|
||||
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);
|
||||
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] = 0;
|
||||
// gCollisionMesh[i].vtx1->v.cn[2] = 0;
|
||||
// gCollisionMesh[i].vtx2->v.cn[0] = 255;
|
||||
// gCollisionMesh[i].vtx2->v.cn[1] = 0;
|
||||
// gCollisionMesh[i].vtx2->v.cn[2] = 0;
|
||||
// gCollisionMesh[i].vtx3->v.cn[0] = 255;
|
||||
// gCollisionMesh[i].vtx3->v.cn[1] = 0;
|
||||
// gCollisionMesh[i].vtx3->v.cn[2] = 0;
|
||||
break;
|
||||
case BOOST_RAMP_WOOD:
|
||||
case BOOST_RAMP_ASPHALT:
|
||||
case RAMP:
|
||||
gCollisionMesh[i].vtx1->v.cn[0] = 255;
|
||||
gCollisionMesh[i].vtx1->v.cn[1] = 255;
|
||||
gCollisionMesh[i].vtx1->v.cn[2] = 0;
|
||||
gCollisionMesh[i].vtx2->v.cn[0] = 255;
|
||||
gCollisionMesh[i].vtx2->v.cn[1] = 255;
|
||||
gCollisionMesh[i].vtx2->v.cn[2] = 0;
|
||||
gCollisionMesh[i].vtx3->v.cn[0] = 255;
|
||||
gCollisionMesh[i].vtx3->v.cn[1] = 255;
|
||||
gCollisionMesh[i].vtx3->v.cn[2] = 0;
|
||||
break;
|
||||
case WOOD_BRIDGE:
|
||||
case ROPE_BRIDGE:
|
||||
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);
|
||||
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);
|
||||
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] = 0;
|
||||
// gCollisionMesh[i].vtx1->v.cn[1] = 255;
|
||||
// gCollisionMesh[i].vtx1->v.cn[2] = 0;
|
||||
// gCollisionMesh[i].vtx2->v.cn[0] = 0;
|
||||
// gCollisionMesh[i].vtx2->v.cn[1] = 255;
|
||||
// gCollisionMesh[i].vtx2->v.cn[2] = 0;
|
||||
// gCollisionMesh[i].vtx3->v.cn[0] = 0;
|
||||
// gCollisionMesh[i].vtx3->v.cn[1] = 255;
|
||||
// gCollisionMesh[i].vtx3->v.cn[2] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
gSPVertex(gDisplayListHead++, gCollisionMesh[i].vtx1, 1, 0);
|
||||
gSPVertex(gDisplayListHead++, gCollisionMesh[i].vtx2, 1, 1);
|
||||
gSPVertex(gDisplayListHead++, gCollisionMesh[i].vtx3, 1, 2);
|
||||
|
||||
// Draw tri
|
||||
gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0);
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef COLLISION_VIEWER_H
|
||||
#define COLLISION_VIEWER_H
|
||||
|
||||
#include <libultraship.h>
|
||||
|
||||
void render_collision(void);
|
||||
|
||||
|
||||
#endif // COLLISION_VIEWER_H
|
||||
@@ -494,7 +494,9 @@ void DrawDebugMenu() {
|
||||
{ .tooltip =
|
||||
"Enables the Gfx Debugger window, allowing you to input commands, type help for some examples" });
|
||||
|
||||
UIWidgets::CVarCheckbox("Debug mode", "gEnableDebugMode", { .tooltip = "TBD" });
|
||||
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" });
|
||||
@@ -502,6 +504,10 @@ 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::Spacer(0);
|
||||
|
||||
UIWidgets::WindowButton("GameInfo", "gGameInfoEnabled", GameUI::mGameInfoWindow,
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#include "courses/all_course_offsets.h"
|
||||
#include <assert.h>
|
||||
|
||||
#include "enhancements/collision_viewer.h"
|
||||
|
||||
s16 D_802B87B0 = 995;
|
||||
s16 D_802B87B4 = 1000;
|
||||
UNUSED s32 D_802B87B8 = 0;
|
||||
@@ -1368,10 +1370,15 @@ void func_8029569C(void) {
|
||||
}
|
||||
|
||||
void render_course(struct UnkStruct_800DC5EC *arg0) {
|
||||
|
||||
func_802B5D64(D_800DC610, D_802B87D4, 0, 1);
|
||||
|
||||
if ((CVarGetInteger("gFreecam", 0) == 1) ) {
|
||||
// Freecam priority renders collision.
|
||||
if (CVarGetInteger("gRenderCollisionMesh", 0) == true) {
|
||||
render_collision();
|
||||
return;
|
||||
}
|
||||
|
||||
if ((CVarGetInteger("gFreecam", 0) == true) ) {
|
||||
// Render credits courses
|
||||
func_8029569C();
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user