You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Merge branch 'master' of https://github.com/Reonu/HackerSM64
This commit is contained in:
@@ -29,55 +29,45 @@
|
||||
#define SET_HIGH_U16_OF_32(var, x) ((var) = ((var) & 0xFFFF) | ((x) << 16))
|
||||
#define SET_HIGH_S16_OF_32(var, x) ((var) = ((var) & 0xFFFF) | ((x) << 16))
|
||||
|
||||
// Layers
|
||||
enum RenderLayers
|
||||
{
|
||||
LAYER_FORCE,
|
||||
LAYER_OPAQUE,
|
||||
LAYER_OPAQUE_INTER,
|
||||
LAYER_OPAQUE_DECAL,
|
||||
LAYER_ALPHA,
|
||||
#if SILHOUETTE
|
||||
#define LAYER_FORCE 0x0 // is zbuffered
|
||||
#define LAYER_OPAQUE 0x1 // is zbuffered
|
||||
#define LAYER_OPAQUE_INTER 0x2 // is zbuffered
|
||||
#define LAYER_OPAQUE_DECAL 0x3 // is zbuffered
|
||||
#define LAYER_ALPHA 0x4 // is zbuffered
|
||||
#define LAYER_ALPHA_DECAL 0x5 // is zbuffered
|
||||
#define LAYER_SILHOUETTE_OPAQUE 0x6 // is zbuffered
|
||||
#define LAYER_SILHOUETTE_ALPHA 0x7 // is zbuffered
|
||||
#define LAYER_OCCLUDE_SILHOUETTE_OPAQUE 0x8 // is zbuffered
|
||||
#define LAYER_OCCLUDE_SILHOUETTE_ALPHA 0x9 // is zbuffered
|
||||
#define LAYER_TRANSPARENT_DECAL 0xA // not zbuffered
|
||||
#define LAYER_TRANSPARENT 0xB // not zbuffered
|
||||
#define LAYER_TRANSPARENT_INTER 0xC // not zbuffered
|
||||
|
||||
#define LAYER_ZB_LAST LAYER_OCCLUDE_SILHOUETTE_ALPHA
|
||||
|
||||
LAYER_ALPHA_DECAL,
|
||||
LAYER_SILHOUETTE_OPAQUE,
|
||||
LAYER_SILHOUETTE_ALPHA,
|
||||
LAYER_OCCLUDE_SILHOUETTE_OPAQUE,
|
||||
LAYER_OCCLUDE_SILHOUETTE_ALPHA,
|
||||
#endif
|
||||
LAYER_TRANSPARENT_DECAL,
|
||||
LAYER_TRANSPARENT,
|
||||
LAYER_TRANSPARENT_INTER,
|
||||
LAYER_COUNT,
|
||||
};
|
||||
#if SILHOUETTE
|
||||
#define LAYER_ZB_LAST LAYER_OCCLUDE_SILHOUETTE_ALPHA
|
||||
#define LAYER_SILHOUETTE_FIRST LAYER_SILHOUETTE_OPAQUE
|
||||
#define LAYER_LAST_BEFORE_SILHOUETTE (LAYER_SILHOUETTE_FIRST - 1)
|
||||
#define LAYER_SILHOUETTE_LAST LAYER_SILHOUETTE_ALPHA
|
||||
#define LAYER_OCCLUDE_SILHOUETTE_FIRST LAYER_OCCLUDE_SILHOUETTE_OPAQUE
|
||||
#define LAYER_OCCLUDE_SILHOUETTE_LAST LAYER_OCCLUDE_SILHOUETTE_ALPHA
|
||||
|
||||
#define LAYER_OPAQUE_ORIG LAYER_OPAQUE
|
||||
#define LAYER_ALPHA_ORIG LAYER_ALPHA
|
||||
|
||||
#else
|
||||
#define LAYER_FORCE 0x0 // is zbuffered
|
||||
#define LAYER_OPAQUE 0x1 // is zbuffered
|
||||
#define LAYER_OPAQUE_DECAL 0x2 // is zbuffered
|
||||
#define LAYER_OPAQUE_INTER 0x3 // is zbuffered
|
||||
#define LAYER_ALPHA 0x4 // is zbuffered
|
||||
#define LAYER_TRANSPARENT 0x5 // not zbuffered
|
||||
#define LAYER_TRANSPARENT_DECAL 0x6 // not zbuffered
|
||||
#define LAYER_TRANSPARENT_INTER 0x7 // not zbuffered
|
||||
|
||||
#define LAYER_ZB_LAST LAYER_ALPHA
|
||||
|
||||
#define LAYER_ALPHA_DECAL 0x4 // is zbuffered
|
||||
#define LAYER_SILHOUETTE_OPAQUE 0x1 // is zbuffered
|
||||
#define LAYER_SILHOUETTE_ALPHA 0x4 // is zbuffered
|
||||
#define LAYER_OCCLUDE_SILHOUETTE_OPAQUE 0x1 // is zbuffered
|
||||
#define LAYER_OCCLUDE_SILHOUETTE_ALPHA 0x4 // is zbuffered
|
||||
|
||||
#define LAYER_ZB_LAST LAYER_ALPHA
|
||||
#define LAYER_ALPHA_DECAL LAYER_ALPHA
|
||||
#define LAYER_SILHOUETTE_OPAQUE LAYER_OPAQUE // is zbuffered
|
||||
#define LAYER_SILHOUETTE_ALPHA LAYER_ALPHA // is zbuffered
|
||||
#define LAYER_OCCLUDE_SILHOUETTE_OPAQUE LAYER_OPAQUE // is zbuffered
|
||||
#define LAYER_OCCLUDE_SILHOUETTE_ALPHA LAYER_ALPHA // is zbuffered
|
||||
#endif
|
||||
|
||||
|
||||
#define LAYER_FIRST_NON_ZB (LAYER_ZB_LAST + 1)
|
||||
#define LAYER_LAST_ALL LAYER_TRANSPARENT_INTER
|
||||
|
||||
#define INPUT_NONZERO_ANALOG /* 0x0001 */ (1 << 0)
|
||||
#define INPUT_A_PRESSED /* 0x0002 */ (1 << 1)
|
||||
|
||||
@@ -58,10 +58,6 @@
|
||||
|
||||
#define GRAPH_NODE_TYPES_MASK 0x0FF
|
||||
|
||||
// The number of master lists. A master list determines the order and render
|
||||
// mode with which display lists are drawn.
|
||||
#define GFX_NUM_MASTER_LISTS (LAYER_LAST_ALL + 1)
|
||||
|
||||
// Passed as first argument to a GraphNodeFunc to give information about in
|
||||
// which context it was called and what it is expected to do.
|
||||
#define GEO_CONTEXT_CREATE 0 // called when node is created from a geo command
|
||||
@@ -143,8 +139,8 @@ struct DisplayListNode
|
||||
struct GraphNodeMasterList
|
||||
{
|
||||
/*0x00*/ struct GraphNode node;
|
||||
/*0x14*/ struct DisplayListNode *listHeads[2][GFX_NUM_MASTER_LISTS];
|
||||
/*0x34*/ struct DisplayListNode *listTails[2][GFX_NUM_MASTER_LISTS];
|
||||
/*0x14*/ struct DisplayListNode *listHeads[2][LAYER_COUNT];
|
||||
/*0x34*/ struct DisplayListNode *listTails[2][LAYER_COUNT];
|
||||
};
|
||||
|
||||
/** Simply used as a parent to group multiple children.
|
||||
|
||||
@@ -77,10 +77,9 @@ s16 *gCurAnimData;
|
||||
struct AllocOnlyPool *gDisplayListHeap;
|
||||
|
||||
struct RenderModeContainer {
|
||||
u32 modes[GFX_NUM_MASTER_LISTS];
|
||||
u32 modes[LAYER_COUNT];
|
||||
};
|
||||
|
||||
#if SILHOUETTE
|
||||
/* Rendermode settings for cycle 1 for all 13 layers. */
|
||||
struct RenderModeContainer renderModeTable_1Cycle[2] = { { {
|
||||
G_RM_OPA_SURF, // LAYER_FORCE
|
||||
@@ -88,11 +87,13 @@ struct RenderModeContainer renderModeTable_1Cycle[2] = { { {
|
||||
G_RM_AA_OPA_SURF, // LAYER_OPAQUE_INTER
|
||||
G_RM_AA_OPA_SURF, // LAYER_OPAQUE_DECAL
|
||||
G_RM_AA_TEX_EDGE, // LAYER_ALPHA
|
||||
#if SILHOUETTE
|
||||
G_RM_AA_TEX_EDGE | ZMODE_DEC, // LAYER_ALPHA_DECAL
|
||||
G_RM_AA_OPA_SURF, // LAYER_SILHOUETTE_OPAQUE
|
||||
G_RM_AA_TEX_EDGE, // LAYER_SILHOUETTE_ALPHA
|
||||
G_RM_AA_OPA_SURF, // LAYER_OCCLUDE_SILHOUETTE_OPAQUE
|
||||
G_RM_AA_TEX_EDGE, // LAYER_OCCLUDE_SILHOUETTE_ALPHA
|
||||
#endif
|
||||
G_RM_AA_XLU_SURF, // LAYER_TRANSPARENT_DECAL
|
||||
G_RM_AA_XLU_SURF, // LAYER_TRANSPARENT
|
||||
G_RM_AA_XLU_SURF, // LAYER_TRANSPARENT_INTER
|
||||
@@ -104,11 +105,13 @@ struct RenderModeContainer renderModeTable_1Cycle[2] = { { {
|
||||
G_RM_AA_ZB_OPA_INTER, // LAYER_OPAQUE_INTER
|
||||
G_RM_AA_ZB_OPA_DECAL, // LAYER_OPAQUE_DECAL
|
||||
G_RM_AA_ZB_TEX_EDGE, // LAYER_ALPHA
|
||||
#if SILHOUETTE
|
||||
G_RM_AA_ZB_TEX_EDGE | ZMODE_DEC, // LAYER_ALPHA_DECAL
|
||||
G_RM_AA_ZB_OPA_SURF, // LAYER_SILHOUETTE_OPAQUE
|
||||
G_RM_AA_ZB_TEX_EDGE, // LAYER_SILHOUETTE_ALPHA
|
||||
G_RM_AA_ZB_OPA_SURF, // LAYER_OCCLUDE_SILHOUETTE_OPAQUE
|
||||
G_RM_AA_ZB_TEX_EDGE, // LAYER_OCCLUDE_SILHOUETTE_ALPHA
|
||||
#endif
|
||||
G_RM_AA_ZB_XLU_DECAL, // LAYER_TRANSPARENT_DECAL
|
||||
G_RM_AA_ZB_XLU_SURF, // LAYER_TRANSPARENT
|
||||
G_RM_AA_ZB_XLU_INTER, // LAYER_TRANSPARENT_INTER
|
||||
@@ -121,11 +124,13 @@ struct RenderModeContainer renderModeTable_2Cycle[2] = { { {
|
||||
G_RM_AA_OPA_SURF2, // LAYER_OPAQUE_INTER
|
||||
G_RM_AA_OPA_SURF2, // LAYER_OPAQUE_DECAL
|
||||
G_RM_AA_TEX_EDGE2, // LAYER_ALPHA
|
||||
#if SILHOUETTE
|
||||
G_RM_AA_TEX_EDGE2 | ZMODE_DEC, // LAYER_ALPHA_DECAL
|
||||
G_RM_AA_OPA_SURF2, // LAYER_SILHOUETTE_OPAQUE
|
||||
G_RM_AA_TEX_EDGE2, // LAYER_SILHOUETTE_ALPHA
|
||||
G_RM_AA_OPA_SURF2, // LAYER_OCCLUDE_SILHOUETTE_OPAQUE
|
||||
G_RM_AA_TEX_EDGE2, // LAYER_OCCLUDE_SILHOUETTE_ALPHA
|
||||
#endif
|
||||
G_RM_AA_XLU_SURF2, // LAYER_TRANSPARENT_DECAL
|
||||
G_RM_AA_XLU_SURF2, // LAYER_TRANSPARENT
|
||||
G_RM_AA_XLU_SURF2, // LAYER_TRANSPARENT_INTER
|
||||
@@ -137,62 +142,17 @@ struct RenderModeContainer renderModeTable_2Cycle[2] = { { {
|
||||
G_RM_AA_ZB_OPA_INTER2, // LAYER_OPAQUE_INTER
|
||||
G_RM_AA_ZB_OPA_DECAL2, // LAYER_OPAQUE_DECAL
|
||||
G_RM_AA_ZB_TEX_EDGE2, // LAYER_ALPHA
|
||||
#if SILHOUETTE
|
||||
G_RM_AA_ZB_TEX_EDGE2 | ZMODE_DEC, // LAYER_ALPHA_DECAL
|
||||
G_RM_AA_ZB_OPA_SURF2, // LAYER_SILHOUETTE_OPAQUE
|
||||
G_RM_AA_ZB_TEX_EDGE2, // LAYER_SILHOUETTE_ALPHA
|
||||
G_RM_AA_ZB_OPA_SURF2, // LAYER_OCCLUDE_SILHOUETTE_OPAQUE
|
||||
G_RM_AA_ZB_TEX_EDGE2, // LAYER_OCCLUDE_SILHOUETTE_ALPHA
|
||||
#endif
|
||||
G_RM_AA_ZB_XLU_DECAL2, // LAYER_TRANSPARENT_DECAL
|
||||
G_RM_AA_ZB_XLU_SURF2, // LAYER_TRANSPARENT
|
||||
G_RM_AA_ZB_XLU_INTER2, // LAYER_TRANSPARENT_INTER
|
||||
} } };
|
||||
#else
|
||||
/* Rendermode settings for cycle 1 for all 8 layers. */
|
||||
struct RenderModeContainer renderModeTable_1Cycle[2] = { { {
|
||||
G_RM_OPA_SURF,
|
||||
G_RM_AA_OPA_SURF,
|
||||
G_RM_AA_OPA_SURF,
|
||||
G_RM_AA_OPA_SURF,
|
||||
G_RM_AA_TEX_EDGE,
|
||||
G_RM_AA_XLU_SURF,
|
||||
G_RM_AA_XLU_SURF,
|
||||
G_RM_AA_XLU_SURF,
|
||||
} },
|
||||
{ {
|
||||
/* z-buffered */
|
||||
G_RM_ZB_OPA_SURF,
|
||||
G_RM_AA_ZB_OPA_SURF,
|
||||
G_RM_AA_ZB_OPA_DECAL,
|
||||
G_RM_AA_ZB_OPA_INTER,
|
||||
G_RM_AA_ZB_TEX_EDGE,
|
||||
G_RM_AA_ZB_XLU_SURF,
|
||||
G_RM_AA_ZB_XLU_DECAL,
|
||||
G_RM_AA_ZB_XLU_INTER,
|
||||
} } };
|
||||
|
||||
/* Rendermode settings for cycle 2 for all 8 layers. */
|
||||
struct RenderModeContainer renderModeTable_2Cycle[2] = { { {
|
||||
G_RM_OPA_SURF2,
|
||||
G_RM_AA_OPA_SURF2,
|
||||
G_RM_AA_OPA_SURF2,
|
||||
G_RM_AA_OPA_SURF2,
|
||||
G_RM_AA_TEX_EDGE2,
|
||||
G_RM_AA_XLU_SURF2,
|
||||
G_RM_AA_XLU_SURF2,
|
||||
G_RM_AA_XLU_SURF2,
|
||||
} },
|
||||
{ {
|
||||
/* z-buffered */
|
||||
G_RM_ZB_OPA_SURF2,
|
||||
G_RM_AA_ZB_OPA_SURF2,
|
||||
G_RM_AA_ZB_OPA_DECAL2,
|
||||
G_RM_AA_ZB_OPA_INTER2,
|
||||
G_RM_AA_ZB_TEX_EDGE2,
|
||||
G_RM_AA_ZB_XLU_SURF2,
|
||||
G_RM_AA_ZB_XLU_DECAL2,
|
||||
G_RM_AA_ZB_XLU_INTER2,
|
||||
} } };
|
||||
#endif
|
||||
|
||||
struct GraphNodeRoot *gCurGraphNodeRoot = NULL;
|
||||
struct GraphNodeMasterList *gCurGraphNodeMasterList = NULL;
|
||||
@@ -269,12 +229,12 @@ static void geo_process_master_list_sub(struct GraphNodeMasterList *node) {
|
||||
case RENDER_PHASE_REJ_SILHOUETTE: headsIndex = LIST_HEADS_REJ; startLayer = LAYER_SILHOUETTE_FIRST; endLayer = LAYER_SILHOUETTE_LAST; break;
|
||||
case RENDER_PHASE_REJ_NON_SILHOUETTE: headsIndex = LIST_HEADS_REJ; startLayer = LAYER_SILHOUETTE_FIRST; endLayer = LAYER_SILHOUETTE_LAST; break;
|
||||
case RENDER_PHASE_REJ_OCCLUDE_SILHOUETTE: headsIndex = LIST_HEADS_REJ; startLayer = LAYER_OCCLUDE_SILHOUETTE_FIRST; endLayer = LAYER_OCCLUDE_SILHOUETTE_LAST; break;
|
||||
case RENDER_PHASE_ZEX_AFTER_SILHOUETTE: headsIndex = LIST_HEADS_ZEX; startLayer = LAYER_OCCLUDE_SILHOUETTE_FIRST; endLayer = LAYER_LAST_ALL; break;
|
||||
case RENDER_PHASE_REJ_NON_ZB: headsIndex = LIST_HEADS_REJ; startLayer = LAYER_FIRST_NON_ZB; endLayer = LAYER_LAST_ALL; break;
|
||||
case RENDER_PHASE_ZEX_AFTER_SILHOUETTE: headsIndex = LIST_HEADS_ZEX; startLayer = LAYER_OCCLUDE_SILHOUETTE_FIRST; endLayer = LAYER_COUNT-1; break;
|
||||
case RENDER_PHASE_REJ_NON_ZB: headsIndex = LIST_HEADS_REJ; startLayer = LAYER_FIRST_NON_ZB; endLayer = LAYER_COUNT-1; break;
|
||||
#else
|
||||
case RENDER_PHASE_REJ_ZB: headsIndex = LIST_HEADS_REJ; startLayer = LAYER_FORCE; endLayer = LAYER_ZB_LAST; break;
|
||||
case RENDER_PHASE_ZEX_ALL: headsIndex = LIST_HEADS_ZEX; startLayer = LAYER_FORCE; endLayer = LAYER_LAST_ALL; break;
|
||||
case RENDER_PHASE_REJ_NON_ZB: headsIndex = LIST_HEADS_REJ; startLayer = LAYER_FIRST_NON_ZB; endLayer = LAYER_LAST_ALL; break;
|
||||
case RENDER_PHASE_ZEX_ALL: headsIndex = LIST_HEADS_ZEX; startLayer = LAYER_FORCE; endLayer = LAYER_COUNT-1; break;
|
||||
case RENDER_PHASE_REJ_NON_ZB: headsIndex = LIST_HEADS_REJ; startLayer = LAYER_FIRST_NON_ZB; endLayer = LAYER_COUNT-1; break;
|
||||
#endif
|
||||
}
|
||||
// Load rejection on pass 2. ZEX is loaded afterwards.
|
||||
@@ -403,7 +363,7 @@ static void geo_process_master_list(struct GraphNodeMasterList *node) {
|
||||
|
||||
if (gCurGraphNodeMasterList == NULL && node->node.children != NULL) {
|
||||
gCurGraphNodeMasterList = node;
|
||||
for (i = 0; i < GFX_NUM_MASTER_LISTS; i++) {
|
||||
for (i = 0; i < LAYER_COUNT; i++) {
|
||||
node->listHeads[LIST_HEADS_ZEX][i] = NULL;
|
||||
node->listHeads[LIST_HEADS_REJ][i] = NULL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user