You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Fix silhouette
This commit is contained in:
@@ -15,20 +15,4 @@
|
||||
#include "sparkle/geo.inc.c"
|
||||
#include "water_splash/geo.inc.c"
|
||||
#include "sparkle_animation/geo.inc.c"
|
||||
#if SILHOUETTE
|
||||
#define LAYER_OPAQUE_ORIG LAYER_OPAQUE
|
||||
#define LAYER_ALPHA_ORIG LAYER_ALPHA
|
||||
#undef LAYER_OPAQUE
|
||||
#undef LAYER_ALPHA
|
||||
#define LAYER_OPAQUE LAYER_SILHOUETTE_OPAQUE
|
||||
#define LAYER_ALPHA LAYER_SILHOUETTE_ALPHA
|
||||
#include "mario/geo.inc.c"
|
||||
#undef LAYER_OPAQUE
|
||||
#undef LAYER_ALPHA
|
||||
#define LAYER_OPAQUE LAYER_OPAQUE_ORIG
|
||||
#define LAYER_ALPHA LAYER_ALPHA_ORIG
|
||||
#undef LAYER_OPAQUE_ORIG
|
||||
#undef LAYER_ALPHA_ORIG
|
||||
#else
|
||||
#include "mario/geo.inc.c"
|
||||
#endif
|
||||
|
||||
@@ -7,7 +7,7 @@ const GeoLayout marios_cap_geo[] = {
|
||||
GEO_ASM(10, geo_update_layer_transparency),
|
||||
GEO_SWITCH_CASE(2, geo_switch_anim_state),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_SILHOUETTE_OPAQUE, mario_cap_seg3_dl_03022F48),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_seg3_dl_03022F48),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03022F48),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_CLOSE_NODE(),
|
||||
@@ -24,7 +24,7 @@ const GeoLayout marios_metal_cap_geo[] = {
|
||||
GEO_ASM(10, geo_update_layer_transparency),
|
||||
GEO_SWITCH_CASE(2, geo_switch_anim_state),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_SILHOUETTE_OPAQUE, mario_cap_seg3_dl_03022FF8),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_seg3_dl_03022FF8),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_cap_seg3_dl_03022FF8),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_CLOSE_NODE(),
|
||||
@@ -43,8 +43,8 @@ const GeoLayout marios_wing_cap_geo[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_NODE_START(),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_SILHOUETTE_OPAQUE, mario_cap_seg3_dl_03022F48),
|
||||
GEO_DISPLAY_LIST(LAYER_SILHOUETTE_ALPHA, mario_cap_seg3_dl_030230B0),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_seg3_dl_03022F48),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_seg3_dl_030230B0),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_NODE_START(),
|
||||
GEO_OPEN_NODE(),
|
||||
@@ -67,8 +67,8 @@ const GeoLayout marios_winged_metal_cap_geo[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_NODE_START(),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_SILHOUETTE_OPAQUE, mario_cap_seg3_dl_03022FF8),
|
||||
GEO_DISPLAY_LIST(LAYER_SILHOUETTE_ALPHA, mario_cap_seg3_dl_03023108),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_cap_seg3_dl_03022FF8),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, mario_cap_seg3_dl_03023108),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_NODE_START(),
|
||||
GEO_OPEN_NODE(),
|
||||
|
||||
@@ -3429,7 +3429,7 @@ UNUSED static const u64 behavior_data_unused_0 = 0;
|
||||
const BehaviorScript bhvMario[] = {
|
||||
BEGIN(OBJ_LIST_PLAYER),
|
||||
SET_INT(oIntangibleTimer, 0),
|
||||
OR_INT(oFlags, OBJ_FLAG_PLAYER),
|
||||
OR_LONG(oFlags, (OBJ_FLAG_PLAYER | OBJ_FLAG_SILHOUETTE)),
|
||||
OR_INT(oUnk94, 0x0001),
|
||||
SET_HITBOX(/*Radius*/ 37, /*Height*/ 160),
|
||||
BEGIN_LOOP(),
|
||||
@@ -4472,7 +4472,7 @@ const BehaviorScript bhvBigBoulderGenerator[] = {
|
||||
|
||||
const BehaviorScript bhvWingCap[] = {
|
||||
BEGIN(OBJ_LIST_LEVEL),
|
||||
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
||||
OR_LONG(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_SILHOUETTE)),
|
||||
CALL_NATIVE(bhv_wing_cap_init),
|
||||
BEGIN_LOOP(),
|
||||
CALL_NATIVE(bhv_wing_vanish_cap_loop),
|
||||
@@ -4481,7 +4481,7 @@ const BehaviorScript bhvWingCap[] = {
|
||||
|
||||
const BehaviorScript bhvMetalCap[] = {
|
||||
BEGIN(OBJ_LIST_LEVEL),
|
||||
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
||||
OR_LONG(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_SILHOUETTE)),
|
||||
CALL_NATIVE(bhv_metal_cap_init),
|
||||
BEGIN_LOOP(),
|
||||
CALL_NATIVE(bhv_metal_cap_loop),
|
||||
@@ -4490,7 +4490,7 @@ const BehaviorScript bhvMetalCap[] = {
|
||||
|
||||
const BehaviorScript bhvNormalCap[] = {
|
||||
BEGIN(OBJ_LIST_LEVEL),
|
||||
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
||||
OR_LONG(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_SILHOUETTE)),
|
||||
CALL_NATIVE(bhv_normal_cap_init),
|
||||
BEGIN_LOOP(),
|
||||
SET_INT(oIntangibleTimer, 0),
|
||||
@@ -4500,7 +4500,7 @@ const BehaviorScript bhvNormalCap[] = {
|
||||
|
||||
const BehaviorScript bhvVanishCap[] = {
|
||||
BEGIN(OBJ_LIST_LEVEL),
|
||||
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
||||
OR_LONG(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_SILHOUETTE)),
|
||||
CALL_NATIVE(bhv_vanish_cap_init),
|
||||
BEGIN_LOOP(),
|
||||
CALL_NATIVE(bhv_wing_vanish_cap_loop),
|
||||
|
||||
@@ -47,12 +47,13 @@
|
||||
#define OBJ_FLAG_DONT_CALC_COLL_DIST (1 << 16) // 0x00010000
|
||||
#define OBJ_FLAG_EMIT_LIGHT (1 << 17) // 0x00020000
|
||||
#define OBJ_FLAG_UCODE_LARGE (1 << 18) // 0x00040000
|
||||
#define OBJ_FLAG_SILHOUETTE (1 << 19) // 0x00080000
|
||||
#define OBJ_FLAG_HITBOX_WAS_SET (1 << 30) // 0x40000000
|
||||
|
||||
/* oHeldState */
|
||||
#define HELD_FREE 0
|
||||
#define HELD_HELD 1
|
||||
#define HELD_THROWN 2
|
||||
#define HELD_FREE 0
|
||||
#define HELD_HELD 1
|
||||
#define HELD_THROWN 2
|
||||
#define HELD_DROPPED 3
|
||||
|
||||
/* oDialogState */
|
||||
|
||||
@@ -177,7 +177,6 @@ struct GraphNodeObject
|
||||
/*0x4C*/ struct SpawnInfo *spawnInfo;
|
||||
/*0x50*/ Mat4 *throwMatrix; // matrix ptr
|
||||
/*0x54*/ Vec3f cameraToObject;
|
||||
u8 uCode;
|
||||
};
|
||||
|
||||
struct ObjectNode
|
||||
|
||||
@@ -981,11 +981,17 @@ void cur_obj_update(void) {
|
||||
obj_update_gfx_pos_and_angle(gCurrentObject);
|
||||
}
|
||||
|
||||
if (objFlags & OBJ_FLAG_UCODE_LARGE) {
|
||||
gCurrentObject->header.gfx.node.flags &= ~GRAPH_RENDER_UCODE_REJ;
|
||||
} else {
|
||||
gCurrentObject->header.gfx.node.flags |= GRAPH_RENDER_UCODE_REJ;
|
||||
}
|
||||
|
||||
if (objFlags & OBJ_FLAG_UCODE_LARGE)
|
||||
gCurrentObject->header.gfx.uCode = UCODE_DEFAULT;
|
||||
else
|
||||
gCurrentObject->header.gfx.uCode = UCODE_REJ;
|
||||
if (objFlags & OBJ_FLAG_SILHOUETTE) {
|
||||
gCurrentObject->header.gfx.node.flags |= GRAPH_RENDER_SILHOUETTE;
|
||||
} else {
|
||||
gCurrentObject->header.gfx.node.flags &= ~GRAPH_RENDER_SILHOUETTE;
|
||||
}
|
||||
|
||||
#ifdef PUPPYLIGHTS
|
||||
puppylights_object_emit(gCurrentObject);
|
||||
|
||||
@@ -9,15 +9,14 @@
|
||||
#include "geo_commands.h"
|
||||
#include "game/memory.h"
|
||||
|
||||
#define UCODE_DEFAULT 0
|
||||
#define UCODE_REJ 1
|
||||
|
||||
#define GRAPH_RENDER_ACTIVE (1 << 0)
|
||||
#define GRAPH_RENDER_CHILDREN_FIRST (1 << 1)
|
||||
#define GRAPH_RENDER_BILLBOARD (1 << 2)
|
||||
#define GRAPH_RENDER_Z_BUFFER (1 << 3)
|
||||
#define GRAPH_RENDER_INVISIBLE (1 << 4)
|
||||
#define GRAPH_RENDER_HAS_ANIMATION (1 << 5)
|
||||
#define GRAPH_RENDER_UCODE_REJ (1 << 6)
|
||||
#define GRAPH_RENDER_SILHOUETTE (1 << 7)
|
||||
|
||||
// Whether the node type has a function pointer of type GraphNodeFunc
|
||||
#define GRAPH_NODE_TYPE_FUNCTIONAL 0x100
|
||||
|
||||
@@ -45,7 +45,7 @@ Gfx *geo_update_projectile_pos_from_parent_copy(s32 run,UNUSED struct GraphNode
|
||||
|
||||
if (run == TRUE) {
|
||||
// TODO: change global type to Object pointer
|
||||
obj = (struct Object*)gCurGraphNodeObject;
|
||||
obj = (struct Object *) gCurGraphNodeObject;
|
||||
|
||||
if (obj->prevObj != NULL) {
|
||||
create_transformation_from_matrices(mtx2, mtx, *gCurGraphNodeCamera->matrixPtr);
|
||||
|
||||
@@ -222,7 +222,6 @@ LookAt lookAt;
|
||||
gDPSetRenderMode( (gfx)++, (mode1List->modes[(i)] & ~IM_RD), \
|
||||
(mode2List->modes[(i)] & ~IM_RD)); /* Use normal mode list, no AA */ \
|
||||
}
|
||||
#define IS_LAYER_SILHOUETTE(layer) (((layer) >= LAYER_SILHOUETTE_FIRST) || ((layer) <= LAYER_SILHOUETTE_LAST))
|
||||
#endif
|
||||
|
||||
u8 ucodeTestSwitch = 1;
|
||||
@@ -339,6 +338,8 @@ static void geo_process_master_list_sub(struct GraphNodeMasterList *node) {
|
||||
#if SILHOUETTE
|
||||
#undef SIL_CVG_THRESHOLD
|
||||
#undef SCHWA
|
||||
#undef SET_SILHOUETTE_F3D
|
||||
#undef CLEAR_SILHOUETTE_F3D
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -351,11 +352,21 @@ static void geo_append_display_list(void *displayList, s32 layer) {
|
||||
#ifdef F3DEX_GBI_2
|
||||
gSPLookAt(gDisplayListHead++, &lookAt);
|
||||
#endif
|
||||
#if defined(F3DZEX_GBI_2) || (SILHOUETTE > 0)
|
||||
if (gCurGraphNodeObject != NULL) {
|
||||
#ifdef F3DZEX_GBI_2
|
||||
if (gCurGraphNodeObject != NULL)
|
||||
{
|
||||
if (gCurGraphNodeObject->uCode == UCODE_REJ && ucodeTestSwitch)
|
||||
if (gCurGraphNodeObject->node.flags & GRAPH_RENDER_UCODE_REJ && ucodeTestSwitch) {
|
||||
index = 1;
|
||||
}
|
||||
#endif
|
||||
#if SILHOUETTE
|
||||
if (gCurGraphNodeObject->node.flags & GRAPH_RENDER_SILHOUETTE) {
|
||||
switch (layer) {
|
||||
case LAYER_OPAQUE: layer = LAYER_SILHOUETTE_OPAQUE; break;
|
||||
case LAYER_ALPHA: layer = LAYER_SILHOUETTE_ALPHA; break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
if (gCurGraphNodeMasterList != 0) {
|
||||
@@ -382,8 +393,8 @@ 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++) {
|
||||
node->listHeads[0][i] = NULL;
|
||||
node->listHeads[1][i] = NULL;
|
||||
node->listHeads[LIST_HEADS_ZEX][i] = NULL;
|
||||
node->listHeads[LIST_HEADS_REJ][i] = NULL;
|
||||
}
|
||||
geo_process_node_and_siblings(node->node.children);
|
||||
geo_process_master_list_sub(gCurGraphNodeMasterList);
|
||||
|
||||
@@ -35,6 +35,8 @@ extern f32 gWorldScale;
|
||||
#define IS_LAYER_NON_ZB(layer) (((layer) >= LAYER_FIRST_NON_ZB) || ((layer) <= LAYER_LAST_ALL))
|
||||
|
||||
#if SILHOUETTE
|
||||
#define IS_LAYER_SILHOUETTE(layer) (((layer) >= LAYER_SILHOUETTE_FIRST) || ((layer) <= LAYER_SILHOUETTE_LAST))
|
||||
|
||||
#define RENDER_PHASE_REJ_ZB 0
|
||||
#define RENDER_PHASE_ZEX_BEFORE_SILHOUETTE 1
|
||||
#define RENDER_PHASE_REJ_SILHOUETTE 2
|
||||
@@ -47,6 +49,7 @@ extern f32 gWorldScale;
|
||||
#define RENDER_PHASE_ZEX_ALL 1
|
||||
#define RENDER_PHASE_REJ_NON_ZB 2
|
||||
#endif
|
||||
|
||||
#define RENDER_PHASE_FIRST RENDER_PHASE_REJ_ZB
|
||||
#define RENDER_PHASE_LAST RENDER_PHASE_REJ_NON_ZB
|
||||
|
||||
|
||||
@@ -282,11 +282,11 @@ struct Object *allocate_object(struct ObjectNode *objList) {
|
||||
obj->oRoom = -1;
|
||||
|
||||
obj->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE;
|
||||
obj->header.gfx.node.flags |= GRAPH_RENDER_UCODE_REJ;
|
||||
obj->header.gfx.pos[0] = -10000.0f;
|
||||
obj->header.gfx.pos[1] = -10000.0f;
|
||||
obj->header.gfx.pos[2] = -10000.0f;
|
||||
obj->header.gfx.throwMatrix = NULL;
|
||||
obj->header.gfx.uCode = UCODE_REJ;
|
||||
#ifdef PUPPYLIGHTS
|
||||
obj->oLightID = 0xFFFF;
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user