Merge pull request #5 from someone2639/u16_models

cleaned up my code a bit (also u32 models because eh why not) (also i'm insane)
This commit is contained in:
Reonu
2021-05-27 18:27:10 +01:00
committed by GitHub
8 changed files with 30 additions and 23 deletions

View File

@@ -9,7 +9,7 @@ index af9d0156..c68a7f6e 100644
+#include "debug_box.h"
struct SpawnInfo gPlayerSpawnInfos[1];
struct GraphNode *D_8033A160[0x100];
struct GraphNode *gGraphNodePointers[0x100];
@@ -363,6 +364,8 @@ void render_game(void) {
if (gCurrentArea != NULL && !gWarpTransition.pauseRendering) {
geo_process_root(gCurrentArea->unk04, D_8032CE74, D_8032CE78, gFBSetColor);

View File

@@ -64,6 +64,8 @@
//#define SKIP_TITLE_SCREEN
// Uncomment this if you want to keep the mario head and not skip it
//#define KEEP_MARIO_HEAD
// Number of possible unique model ID's (keep it higher than 256)
#define MODEL_ID_COUNT 0x10000
/* Coordinate overflow fix setting:
* Scales the world down by this factor, increasing how far you can render on

View File

@@ -210,17 +210,19 @@
CMD_BBH(0x20, 0x04, 0x0000)
#define LOAD_MODEL_FROM_DL(model, dl, layer) \
CMD_BBH(0x21, 0x0C, 0), \
CMD_BBH(0x21, 0x10, 0), \
CMD_PTR(dl), \
CMD_HH(layer, model)
CMD_W(layer), \
CMD_W(model)
#define LOAD_MODEL_FROM_GEO(model, geo) \
CMD_BBH(0x22, 0x08, model), \
CMD_PTR(geo)
CMD_BBH(0x22, 0x0C, 0), \
CMD_PTR(geo), \
CMD_W(model)
// unk8 is float, but doesn't really matter since CMD23 is unused
#define CMD23(model, unk4, unk8) \
CMD_BBH(0x22, 0x08, model), \
CMD_BBH(0x22, 0x08, 0), \
CMD_PTR(unk4), \
CMD_W(unk8)
@@ -229,7 +231,7 @@
CMD_HHHHHH(posX, posY, posZ, angleX, angleY, angleZ), \
CMD_W(behParam), \
CMD_PTR(beh), \
CMD_HH(0, model)
CMD_W(model)
#define OBJECT(model, posX, posY, posZ, angleX, angleY, angleZ, behParam, beh) \
OBJECT_WITH_ACTS(model, posX, posY, posZ, angleX, angleY, angleZ, behParam, beh, 0x1F)
@@ -238,7 +240,7 @@
CMD_BBH(0x25, 0x10, 0), \
CMD_W(behArg), \
CMD_PTR(beh), \
CMD_HH(0, model)
CMD_W(model)
#define WARP_NODE(id, destLevel, destArea, destNode, flags) \
CMD_BBBB(0x26, 0x08, id, destLevel), \

View File

@@ -54,7 +54,7 @@ typedef s16 Trajectory;
typedef s16 PaintingData;
typedef uintptr_t BehaviorScript;
typedef u8 Texture;
typedef u16 ModelID;
typedef u32 ModelID;
enum SpTaskState {
SPTASK_STATE_NOT_STARTED,

View File

@@ -231,7 +231,9 @@ SECTIONS
__mainPoolSize = RAM_END - .;
__expansionRamStart = 0x80400000;
ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.")
#ifndef USE_EXT_RAM
ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.")
#endif
BEGIN_SEG(entry, 0x10000000)

View File

@@ -375,11 +375,11 @@ static void level_cmd_end_area(void) {
}
static void level_cmd_load_model_from_dl(void) {
ModelID model = CMD_GET(ModelID, 0xA);
s16 layer = CMD_GET(u16, 0x8);
ModelID model = CMD_GET(ModelID, 0xC);
s16 layer = CMD_GET(u32, 0x8);
void *dl_ptr = CMD_GET(void *, 4);
if (model < 65536) {
if (model < MODEL_ID_COUNT) {
gLoadedGraphNodes[model] =
(struct GraphNode *) init_graph_node_display_list(sLevelPool, 0, layer, dl_ptr);
}
@@ -388,11 +388,11 @@ static void level_cmd_load_model_from_dl(void) {
}
static void level_cmd_load_model_from_geo(void) {
ModelID arg0 = CMD_GET(ModelID, 2);
void *arg1 = CMD_GET(void *, 4);
ModelID model = CMD_GET(ModelID, 8);
void *geo = CMD_GET(void *, 4);
if (arg0 < 65536) {
gLoadedGraphNodes[arg0] = process_geo_layout(sLevelPool, arg1);
if (model < MODEL_ID_COUNT) {
gLoadedGraphNodes[model] = process_geo_layout(sLevelPool, geo);
}
sCurrentCmd = CMD_NEXT;
@@ -410,7 +410,7 @@ static void level_cmd_23(void) {
// load an f32, but using an integer load instruction for some reason (hence the union)
arg2.i = CMD_GET(s32, 8);
if (model < 65536) {
if (model < MODEL_ID_COUNT) {
// GraphNodeScale has a GraphNode at the top. This
// is being stored to the array, so cast the pointer.
gLoadedGraphNodes[model] =
@@ -428,7 +428,7 @@ static void level_cmd_init_mario(void) {
gMarioSpawnInfo->areaIndex = 0;
gMarioSpawnInfo->behaviorArg = CMD_GET(u32, 4);
gMarioSpawnInfo->behaviorScript = CMD_GET(void *, 8);
gMarioSpawnInfo->unk18 = gLoadedGraphNodes[CMD_GET(ModelID, 0xE)];
gMarioSpawnInfo->unk18 = gLoadedGraphNodes[CMD_GET(ModelID, 0xC)];
gMarioSpawnInfo->next = NULL;
sCurrentCmd = CMD_NEXT;
@@ -440,7 +440,7 @@ static void level_cmd_place_object(void) {
struct SpawnInfo *spawnInfo;
if (sCurrAreaIndex != -1 && ((CMD_GET(u8, 2) & val7) || CMD_GET(u8, 2) == 0x1F)) {
model = CMD_GET(ModelID, 0x1A);
model = CMD_GET(ModelID, 0x18);
spawnInfo = alloc_only_pool_alloc(sLevelPool, sizeof(struct SpawnInfo));
spawnInfo->startPos[0] = CMD_GET(s16, 4);

View File

@@ -1,5 +1,6 @@
#include <PR/ultratypes.h>
#include "config.h"
#include "prevent_bss_reordering.h"
#include "area.h"
#include "sm64.h"
@@ -23,7 +24,7 @@
#include "level_table.h"
struct SpawnInfo gPlayerSpawnInfos[1];
struct GraphNode *D_8033A160[0x10000];
struct GraphNode *gGraphNodePointers[MODEL_ID_COUNT];
struct Area gAreaData[8];
struct WarpTransition gWarpTransition;
@@ -36,7 +37,7 @@ s16 gPauseScreenMode;
s16 gSaveOptSelectIndex;
struct SpawnInfo *gMarioSpawnInfo = &gPlayerSpawnInfos[0];
struct GraphNode **gLoadedGraphNodes = D_8033A160;
struct GraphNode **gLoadedGraphNodes = gGraphNodePointers;
struct Area *gAreas = gAreaData;
struct Area *gCurrentArea = NULL;
struct CreditsEntry *gCurrCreditsEntry = NULL;

View File

@@ -120,7 +120,7 @@ struct WarpTransition
extern struct GraphNode **gLoadedGraphNodes;
extern struct SpawnInfo gPlayerSpawnInfos[];
extern struct GraphNode *D_8033A160[];
extern struct GraphNode *gGraphNodePointers[MODEL_ID_COUNT];
extern struct Area gAreaData[];
extern struct WarpTransition gWarpTransition;
extern s16 gCurrCourseNum;