summaryrefslogtreecommitdiff
path: root/src/enhancements
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2024-09-10 16:27:31 -0600
committerGitHub <noreply@github.com>2024-09-10 16:27:31 -0600
commited85166756cfd2a0e4bdba81f957b06d52147d3c (patch)
treeab18b4d25b09456d1cc79d89a046aea4d8c834d4 /src/enhancements
parentb36b9e318095e0ae5fc720319a55418d9aa5a4c3 (diff)
[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
Diffstat (limited to 'src/enhancements')
-rw-r--r--src/enhancements/collision_viewer.c288
-rw-r--r--src/enhancements/collision_viewer.h9
2 files changed, 297 insertions, 0 deletions
diff --git a/src/enhancements/collision_viewer.c b/src/enhancements/collision_viewer.c
new file mode 100644
index 000000000..d66fa2998
--- /dev/null
+++ b/src/enhancements/collision_viewer.c
@@ -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);
+ }
+ }
diff --git a/src/enhancements/collision_viewer.h b/src/enhancements/collision_viewer.h
new file mode 100644
index 000000000..8a2a3ab74
--- /dev/null
+++ b/src/enhancements/collision_viewer.h
@@ -0,0 +1,9 @@
+#ifndef COLLISION_VIEWER_H
+#define COLLISION_VIEWER_H
+
+#include <libultraship.h>
+
+void render_collision(void);
+
+
+#endif // COLLISION_VIEWER_H