gsDPSetTextureFilter, refactoring and o.header.gfx.skipInViewCheck (#147)
* Add gsDPSetTextureFilter to DynOS symbols * Refactor code and fix 2 year oversight Refactored the main menu background code, now uses vec3f_set instead of manually setting every vector Also finally fixed the bug where you load in with only 3 lives, this has been in coop for 2 years now and was likely made as a test for syncing live count and was never reversed. * add skipInViewCheck to GraphNodeObject * Remove idle set Co-authored-by: djoslin0 <djoslin0@users.noreply.github.com>
This commit is contained in:
parent
466b0066a4
commit
9d0a61450b
|
@ -558,6 +558,7 @@
|
|||
--- @field public prevTimestamp integer
|
||||
--- @field public scale Vec3f
|
||||
--- @field public sharedChild GraphNode
|
||||
--- @field public skipInViewCheck boolean
|
||||
--- @field public skipInterpolationTimestamp integer
|
||||
--- @field public unk4C SpawnInfo
|
||||
|
||||
|
|
|
@ -732,6 +732,7 @@ static void ParseGfxSymbol(GfxData* aGfxData, DataNode<Gfx>* aNode, Gfx*& aHead,
|
|||
gfx_symbol_4(gsDPSetFogColor);
|
||||
gfx_symbol_2(gsSPFogPosition, false);
|
||||
gfx_symbol_1(gsDPSetAlphaCompare, false);
|
||||
gfx_symbol_1(gsDPSetTextureFilter, false);
|
||||
|
||||
gfx_symbol_2(gsSPCopyLightEXT, false);
|
||||
gfx_symbol_2(gsSPFogFactor, false);
|
||||
|
|
|
@ -805,6 +805,7 @@
|
|||
| prevTimestamp | `integer` | |
|
||||
| scale | [Vec3f](structs.md#Vec3f) | read-only |
|
||||
| sharedChild | [GraphNode](structs.md#GraphNode) | |
|
||||
| skipInViewCheck | `boolean` | |
|
||||
| skipInterpolationTimestamp | `integer` | |
|
||||
| unk4C | [SpawnInfo](structs.md#SpawnInfo) | |
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <ultra64.h>
|
||||
#include "macros.h"
|
||||
#include "pc/network/version.h"
|
||||
#include "src/pc/platform.h"
|
||||
|
||||
// Certain functions are marked as having return values, but do not
|
||||
// actually return a value. This causes undefined behavior, which we'd rather
|
||||
|
@ -155,6 +156,7 @@ struct GraphNodeObject
|
|||
Mat4 *throwMatrixPrev;
|
||||
/*0x54*/ Vec3f cameraToObject;
|
||||
u32 skipInterpolationTimestamp;
|
||||
bool skipInViewCheck;
|
||||
};
|
||||
|
||||
struct ObjectNode
|
||||
|
|
|
@ -961,7 +961,7 @@ void initiate_delayed_warp(void) {
|
|||
switch (sDelayedWarpOp) {
|
||||
case WARP_OP_GAME_OVER:
|
||||
gChangeLevel = gLevelValues.entryLevel;
|
||||
gMarioStates[0].numLives = 3;
|
||||
gMarioStates[0].numLives = 4;
|
||||
gMarioStates[0].health = 0x880;
|
||||
break;
|
||||
|
||||
|
@ -1331,7 +1331,7 @@ void update_menu_level(void) {
|
|||
default: curLevel = LEVEL_CASTLE_GROUNDS; break;
|
||||
}
|
||||
|
||||
// warp to level
|
||||
// warp to level, this feels buggy
|
||||
if (gCurrLevelNum != curLevel) {
|
||||
if (curLevel == LEVEL_JRB) {
|
||||
dynos_warp_to_level(curLevel, 1, 2);
|
||||
|
@ -1347,128 +1347,90 @@ void update_menu_level(void) {
|
|||
sFirstCastleGroundsMenu = false;
|
||||
}
|
||||
|
||||
struct Object *o;
|
||||
// set mario/camera pos
|
||||
if (gCurrLevelNum == LEVEL_CASTLE_GROUNDS) {
|
||||
if (!sFirstCastleGroundsMenu) {
|
||||
gMarioState->pos[0] = -1328;
|
||||
gMarioState->pos[1] = 260;
|
||||
gMarioState->pos[2] = 4664;
|
||||
gMarioState->faceAngle[1] = 0x0;
|
||||
gLakituState.curPos[1] = 390;
|
||||
gLakituState.curPos[0] = -1328;
|
||||
gLakituState.curPos[2] = 6064;
|
||||
}
|
||||
} else if (gCurrLevelNum == LEVEL_BOB) {
|
||||
gMarioState->pos[0] = 7008;
|
||||
gMarioState->pos[1] = 864;
|
||||
gMarioState->pos[2] = 1943;
|
||||
gLakituState.curPos[1] = 1064;
|
||||
gLakituState.curPos[2] = 2843;
|
||||
gLakituState.curPos[0] = 7908;
|
||||
gMarioState->faceAngle[1] = 0x2000;
|
||||
switch (gCurrLevelNum) {
|
||||
case LEVEL_CASTLE_GROUNDS:
|
||||
if (!sFirstCastleGroundsMenu) {
|
||||
vec3f_set(gMarioState->pos, -1328, 260, 4664);
|
||||
vec3f_set(gLakituState.curPos, -1328, 390, 6064);
|
||||
gMarioState->faceAngle[1] = 0;
|
||||
gLakituState.nextYaw = gMarioState->faceAngle[1] + 0x8000;
|
||||
}
|
||||
break;
|
||||
case LEVEL_BOB:
|
||||
vec3f_set(gMarioState->pos, 7008, 864, 1943);
|
||||
vec3f_set(gLakituState.curPos, 7909, 1064, 2843);
|
||||
gMarioState->faceAngle[1] = 0x2000;
|
||||
|
||||
// delete all goombas as they interfere with the main menu
|
||||
|
||||
struct Object *o;
|
||||
|
||||
o = find_object_with_behavior(bhvGoomba);
|
||||
|
||||
if (o != NULL) {
|
||||
if (obj_has_behavior(o, bhvGoomba)) {
|
||||
// delete all goombas as they interfere with the main menu
|
||||
o = find_object_with_behavior(bhvGoomba);
|
||||
if (o != NULL) {
|
||||
obj_mark_for_deletion(o);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LEVEL_WF:
|
||||
vec3f_set(gMarioState->pos, -2904, 2560, -327);
|
||||
vec3f_set(gLakituState.curPos, -4504, 2760, -777);
|
||||
gMarioState->faceAngle[1] = -15536;
|
||||
break;
|
||||
case LEVEL_WMOTR:
|
||||
vec3f_set(gMarioState->pos, 3548, -2738, 4663);
|
||||
vec3f_set(gLakituState.curPos, 3548, -2438, 6063);
|
||||
gMarioState->faceAngle[1] = 0;
|
||||
break;
|
||||
case LEVEL_JRB:
|
||||
vec3f_set(gMarioState->pos, 3639, 1536, 6202);
|
||||
vec3f_set(gLakituState.curPos, 5039, 1736, 6402);
|
||||
break;
|
||||
case LEVEL_SSL:
|
||||
vec3f_set(gMarioState->pos, -2048, 256, 961);
|
||||
vec3f_set(gLakituState.curPos, -2048, 356, 2461);
|
||||
gMarioState->faceAngle[1] = 0;
|
||||
break;
|
||||
case LEVEL_TTM:
|
||||
vec3f_set(gMarioState->pos, 2488, 1460, 2011);
|
||||
vec3f_set(gLakituState.curPos, 3488, 1763, 3411);
|
||||
gMarioState->faceAngle[1] = 0x1000;
|
||||
break;
|
||||
case LEVEL_SL:
|
||||
vec3f_set(gMarioState->pos, 5494, 1024, 443);
|
||||
vec3f_set(gLakituState.curPos, 6994, 1124, 443);
|
||||
gMarioState->faceAngle[1] = 0x4000;
|
||||
break;
|
||||
case LEVEL_BBH:
|
||||
vec3f_set(gMarioState->pos, 666, -204, 5303);
|
||||
vec3f_set(gLakituState.curPos, 666, -204, 6803);
|
||||
gMarioState->faceAngle[1] = 0;
|
||||
break;
|
||||
case LEVEL_LLL:
|
||||
vec3f_set(gMarioState->pos, -2376, 638, 956);
|
||||
vec3f_set(gLakituState.curPos, -3576, 938, 1576);
|
||||
gMarioState->faceAngle[1] = -0x2800;
|
||||
break;
|
||||
case LEVEL_THI:
|
||||
vec3f_set(gMarioState->pos, -1010, 341, -324);
|
||||
vec3f_set(gLakituState.curPos, -2246, 431, -324);
|
||||
gMarioState->faceAngle[1] = -0x4000;
|
||||
|
||||
} else if (gCurrLevelNum == LEVEL_WF) {
|
||||
gLakituState.curPos[1] = 2760;
|
||||
gLakituState.curPos[2] = -777;
|
||||
gLakituState.curPos[0] = -4504;
|
||||
gMarioState->pos[1] = 2560;
|
||||
gMarioState->pos[2] = -327;
|
||||
gMarioState->pos[0] = -2904;
|
||||
gMarioState->faceAngle[1] = -31072 / 2;
|
||||
} else if (gCurrLevelNum == LEVEL_WMOTR) {
|
||||
gLakituState.curPos[1] = -2438;
|
||||
gLakituState.curPos[2] = 6063;
|
||||
gLakituState.curPos[0] = 3548;
|
||||
gMarioState->pos[1] = -2738;
|
||||
gMarioState->pos[2] = 4663;
|
||||
gMarioState->pos[0] = 3548;
|
||||
gMarioState->faceAngle[1] = 0;
|
||||
} else if (gCurrLevelNum == LEVEL_JRB) {
|
||||
gLakituState.curPos[1] = 1736;
|
||||
gLakituState.curPos[2] = 6402;
|
||||
gLakituState.curPos[0] = 5039;
|
||||
gMarioState->pos[1] = 1536;
|
||||
gMarioState->pos[2] = 6202;
|
||||
gMarioState->pos[0] = 3639;
|
||||
} else if (gCurrLevelNum == LEVEL_SSL) {
|
||||
gLakituState.curPos[1] = 356;
|
||||
gLakituState.curPos[2] = 2461;
|
||||
gLakituState.curPos[0] = -2048;
|
||||
gMarioState->pos[1] = 256;
|
||||
gMarioState->pos[2] = 961;
|
||||
gMarioState->pos[0] = -2048;
|
||||
gMarioState->faceAngle[1] = 0;
|
||||
} else if (gCurrLevelNum == LEVEL_TTM) {
|
||||
gLakituState.curPos[1] = 1763;
|
||||
gLakituState.curPos[2] = 3411;
|
||||
gLakituState.curPos[0] = 3488;
|
||||
gMarioState->pos[1] = 1460;
|
||||
gMarioState->pos[2] = 2011;
|
||||
gMarioState->pos[0] = 2488;
|
||||
gMarioState->faceAngle[1] = 0x1000;
|
||||
} else if (gCurrLevelNum == LEVEL_SL) {
|
||||
gLakituState.curPos[1] = 1124;
|
||||
gLakituState.curPos[2] = 443;
|
||||
gLakituState.curPos[0] = 6994;
|
||||
gMarioState->pos[1] = 1024;
|
||||
gMarioState->pos[2] = 443;
|
||||
gMarioState->pos[0] = 5494;
|
||||
gMarioState->faceAngle[1] = 0x4000;
|
||||
} else if (gCurrLevelNum == LEVEL_BBH) {
|
||||
gLakituState.curPos[1] = -204;
|
||||
gLakituState.curPos[2] = 6803;
|
||||
gLakituState.curPos[0] = 666;
|
||||
gMarioState->pos[1] = -204;
|
||||
gMarioState->pos[2] = 5303;
|
||||
gMarioState->pos[0] = 666;
|
||||
gMarioState->faceAngle[1] = 0;
|
||||
} else if (gCurrLevelNum == LEVEL_LLL) {
|
||||
gLakituState.curPos[1] = 938;
|
||||
gLakituState.curPos[2] = 1576;
|
||||
gLakituState.curPos[0] = -3576;
|
||||
gMarioState->pos[1] = 638;
|
||||
gMarioState->pos[2] = 956;
|
||||
gMarioState->pos[0] = -2376;
|
||||
gMarioState->faceAngle[1] = -0x2800;
|
||||
} else if (gCurrLevelNum == LEVEL_THI) {
|
||||
gLakituState.curPos[1] = 431;
|
||||
gLakituState.curPos[2] = -324;
|
||||
gLakituState.curPos[0] = -2246;
|
||||
gMarioState->pos[1] = 341;
|
||||
gMarioState->pos[2] = -324;
|
||||
gMarioState->pos[0] = -1010;
|
||||
gMarioState->faceAngle[1] = -0x4000;
|
||||
|
||||
// delete all goombas as they interfere with the main menu
|
||||
|
||||
struct Object *o;
|
||||
|
||||
o = find_object_with_behavior(bhvGoomba);
|
||||
|
||||
if (o != NULL) {
|
||||
if (obj_has_behavior(o, bhvGoomba)) {
|
||||
// delete all goombas as they interfere with the main menu
|
||||
o = find_object_with_behavior(bhvGoomba);
|
||||
if (o != NULL) {
|
||||
obj_mark_for_deletion(o);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
gMarioState->health = 0x880;
|
||||
// reset input
|
||||
gMarioState->input = 0;
|
||||
gMarioState->controller->rawStickX = 0;
|
||||
gMarioState->controller->rawStickY = 0;
|
||||
gMarioState->controller->stickX = 0;
|
||||
gMarioState->controller->stickY = 0;
|
||||
|
||||
// figure out music
|
||||
if (!configMenuSound) {
|
||||
if (!configMenuSound || curLevel == LEVEL_CASTLE_GROUNDS) {
|
||||
reset_volume();
|
||||
disable_background_sound();
|
||||
set_background_music(0, 0x0021, 0);
|
||||
|
|
|
@ -2267,7 +2267,7 @@ static void init_mario_single_from_save_file(struct MarioState* m, u16 index) {
|
|||
m->numStars = save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_MIN - 1, COURSE_MAX - 1);
|
||||
m->numKeys = 0;
|
||||
|
||||
m->numLives = 3;
|
||||
m->numLives = 4;
|
||||
m->health = 0x880;
|
||||
|
||||
m->prevNumStarsForDialog = m->numStars;
|
||||
|
|
|
@ -1119,6 +1119,8 @@ static void geo_process_shadow(struct GraphNodeShadow *node) {
|
|||
static s32 obj_is_in_view(struct GraphNodeObject *node, Mat4 matrix) {
|
||||
if (node->node.flags & GRAPH_RENDER_INVISIBLE) {
|
||||
return FALSE;
|
||||
} else if (node->skipInViewCheck) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// ! @bug The aspect ratio is not accounted for. When the fov value is 45,
|
||||
|
|
|
@ -627,7 +627,7 @@ static struct LuaObjectField sGraphNodeFields[LUA_GRAPH_NODE_FIELD_COUNT] = {
|
|||
{ "type", LVT_S16, offsetof(struct GraphNode, type), false, LOT_NONE },
|
||||
};
|
||||
|
||||
#define LUA_GRAPH_NODE_OBJECT_FIELD_COUNT 19
|
||||
#define LUA_GRAPH_NODE_OBJECT_FIELD_COUNT 20
|
||||
static struct LuaObjectField sGraphNodeObjectFields[LUA_GRAPH_NODE_OBJECT_FIELD_COUNT] = {
|
||||
{ "activeAreaIndex", LVT_S8, offsetof(struct GraphNodeObject, activeAreaIndex), false, LOT_NONE },
|
||||
{ "angle", LVT_COBJECT, offsetof(struct GraphNodeObject, angle), true, LOT_VEC3S },
|
||||
|
@ -647,6 +647,7 @@ static struct LuaObjectField sGraphNodeObjectFields[LUA_GRAPH_NODE_OBJECT_FIELD_
|
|||
{ "prevTimestamp", LVT_U32, offsetof(struct GraphNodeObject, prevTimestamp), false, LOT_NONE },
|
||||
{ "scale", LVT_COBJECT, offsetof(struct GraphNodeObject, scale), true, LOT_VEC3F },
|
||||
{ "sharedChild", LVT_COBJECT_P, offsetof(struct GraphNodeObject, sharedChild), false, LOT_GRAPHNODE },
|
||||
{ "skipInViewCheck", LVT_BOOL, offsetof(struct GraphNodeObject, skipInViewCheck), false, LOT_NONE },
|
||||
{ "skipInterpolationTimestamp", LVT_U32, offsetof(struct GraphNodeObject, skipInterpolationTimestamp), false, LOT_NONE },
|
||||
// { "throwMatrix", LVT_???, offsetof(struct GraphNodeObject, throwMatrix), false, LOT_??? }, <--- UNIMPLEMENTED
|
||||
// { "throwMatrixPrev", LVT_???, offsetof(struct GraphNodeObject, throwMatrixPrev), false, LOT_??? }, <--- UNIMPLEMENTED
|
||||
|
|
Loading…
Reference in New Issue