Add quick boot and add ram editing to object ram watch (#236)

* upgrades

* one cleanup

* streamlining

* whoops mods

* more ub

* cast cleanup
This commit is contained in:
petrie911
2024-05-08 15:57:11 -03:00
committed by GitHub
parent 182eb5c65a
commit 7eff38a5f9
13 changed files with 399 additions and 198 deletions
+3 -1
View File
@@ -143,7 +143,9 @@
"os_motor.h": "c",
"os_pfs.h": "c",
"semaphore": "c",
"bgm.h": "c"
"bgm.h": "c",
"*.tcc": "c",
"object_ram.h": "c"
},
"C_Cpp_Runner.msvcBatchPath": ""
}
+9
View File
@@ -1,6 +1,15 @@
#ifndef MODS_H
#define MODS_H
/**
* Quick Boot:
* Define this variable to a game state to boot into that
* state. Two presets (map and main menu) are provided.
* For the full list of game states, see sf64thread.h.
*/
// #define MODS_BOOT_STATE 3 // main menu
// #define MODS_BOOT_STATE 4 // map
/**
* Level Select:
* Use the D-Pad to select a level. Press L to start in
+3 -3
View File
@@ -464,15 +464,15 @@ void* AudioHeap_SearchRegularCaches(s32 tableType, s32 cache, s32 id) {
switch (tableType) {
case SEQUENCE_TABLE:
loadedCache = (AudioCache*) &gSeqCache;
loadedCache = &gSeqCache;
break;
case FONT_TABLE:
loadedCache = (AudioCache*) &gFontCache;
loadedCache = &gFontCache;
break;
case SAMPLE_TABLE:
loadedCache = (AudioCache*) &gSampleBankCache;
loadedCache = &gSampleBankCache;
break;
}
+1 -1
View File
@@ -737,7 +737,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
ramAddr = AudioLoad_SearchCaches(tableType, id);
if (ramAddr != NULL) {
loadStatus = 2;
osSendMesg(retQueue, (void*) (retData << 0x18), OS_MESG_NOBLOCK);
osSendMesg(retQueue, (OSMesg) (retData << 0x18), OS_MESG_NOBLOCK);
} else {
table = AudioLoad_GetLoadTable(tableType);
size = table->entries[id].size;
+1 -1
View File
@@ -2823,7 +2823,7 @@ void ActorCutscene_Draw(Actor* actor) {
sp2B8.y = 0.0f;
sp2B8.z = 40.0f;
Matrix_MultVec3fNoTranslate(gCalcMatrix, (Vec3f*) (&sp2B8), &sp2AC);
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp2B8, &sp2AC);
Matrix_Translate(gGfxMatrix, actor->obj.pos.x + sp2AC.x, actor->obj.pos.y + sp2AC.y,
actor->obj.pos.z + sp2AC.z, MTXF_APPLY);
Matrix_Scale(gGfxMatrix, actor->fwork[6], actor->fwork[6], actor->fwork[6], MTXF_APPLY);
-14
View File
@@ -1,4 +1,3 @@
#include "mods.h"
#include "global.h"
#include "assets/ast_arwing.h"
#include "assets/ast_allies.h"
@@ -1738,17 +1737,4 @@ void Play_Draw(void) {
func_display_80051B30();
sPlayersVisible[gPlayerNum] = 0;
Matrix_Pop(&gGfxMatrix);
#if MODS_FPS_COUNTER == 1
Play_RenderFps();
#endif
#if MODS_OBJECT_RAM == 1
ObjectRam_Update();
#endif
}
#if MODS_FPS_COUNTER == 1
#include "../mods/fpscounter.c"
#endif
#if MODS_OBJECT_RAM == 1
#include "../mods/object_ram.c"
#endif
+34
View File
@@ -2,6 +2,7 @@
#include "global.h"
#include "sf64dma.h"
#include "assets/ast_logo.h"
#include "mods.h"
f32 D_game_80161A10;
f32 D_game_80161A14;
@@ -54,6 +55,18 @@ void Game_Initialize(void) {
Rand_Init();
Rand_SetSeed(1, 29000, 9876);
gGameState = GSTATE_BOOT;
#ifdef MODS_BOOT_STATE
gNextGameState = GSTATE_INIT;
if (Save_Read() != 0) {
#ifdef AVOID_UB
gSaveFile.save = gDefaultSave;
gSaveFile.backup = gDefaultSave;
#else
gSaveFile = *((SaveFile*) &gDefaultSave);
#endif
Save_Write();
}
#endif
gNextGameStateTimer = 0;
gBgColor = 0;
gBlurAlpha = 255;
@@ -361,7 +374,12 @@ void Game_Update(void) {
break;
case GSTATE_CHECK_SAVE:
if (Save_Read() != 0) {
#ifdef AVOID_UB
gSaveFile.save = gDefaultSave;
gSaveFile.backup = gDefaultSave;
#else
gSaveFile = *((SaveFile*) &gDefaultSave);
#endif
Save_Write();
}
gGameState++;
@@ -396,6 +414,9 @@ void Game_Update(void) {
gFillScreenAlpha = 0;
gNextGameState = D_ctx_80177C94 = D_ctx_80177CAC = D_ctx_80177CB4 = D_ctx_80177CBC = D_ctx_80177CC4 =
D_ctx_80177C9C = D_ctx_80177CA4 = D_play_80161A5C = D_game_80161A34 = 0;
#ifdef MODS_BOOT_STATE
gNextGameState = MODS_BOOT_STATE;
#endif
for (i = 0; i < 4; i++) {
gBoostButton[i] = L_CBUTTONS;
gBrakeButton[i] = D_CBUTTONS;
@@ -553,9 +574,22 @@ void Game_Update(void) {
gFillScreenGreen, gFillScreenBlue, gFillScreenAlpha);
}
Audio_dummy_80016A50();
#if MODS_OBJECT_RAM == 1
ObjectRam_Update();
#endif
#if MODS_FPS_COUNTER == 1
Play_RenderFps();
#endif
}
}
#if MODS_FPS_COUNTER == 1
#include "../mods/fpscounter.c"
#endif
#if MODS_OBJECT_RAM == 1
#include "../mods/object_ram.c"
#endif
Actor* Game_SpawnActor(ObjectId objId) {
Actor* actor = gActors;
s32 i;
-1
View File
@@ -1374,7 +1374,6 @@ bool Play_CheckPolyCollision(ObjectId objId, f32 arg1, f32 arg2, f32 arg3, f32 a
return false;
}
// arg5 could be Vec3f (not Vec3f*)
s32 Player_CheckPolyCollision(Player* player, ObjectId objId, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6,
f32 arg7) {
Vec3f sp84;
+4 -4
View File
@@ -2,12 +2,12 @@
char D_800C7C80[] = "$Id: sprintf.c,v 1.5 1997/03/19 02:28:53 hayakawa Exp $";
void* proutSprintf(void* dst, const char* fmt, size_t size) {
return (void*) ((uintptr_t) memcpy(dst, fmt, size) + size);
char* proutSprintf(char* dst, const char* fmt, size_t size) {
return (char*) ((uintptr_t) memcpy(dst, fmt, size) + size);
}
s32 vsprintf(char* dst, const char* fmt, va_list args) {
s32 ret = _Printf((outfun*) proutSprintf, dst, fmt, args);
s32 ret = _Printf(proutSprintf, dst, fmt, args);
if (ret > -1) {
dst[ret] = 0;
@@ -20,7 +20,7 @@ int sprintf(char* s, const char* fmt, ...) {
va_list args;
va_start(args, fmt);
ret = _Printf((outfun*) proutSprintf, s, fmt, args);
ret = _Printf(proutSprintf, s, fmt, args);
if (ret >= 0) {
s[ret] = 0;
+3 -4
View File
@@ -45,7 +45,7 @@ void Map_LevelSelect(void) {
if (difficulty > 2) {
difficulty = 0;
}
if ((difficulty == 1) && ((mission == 1) || (mission == 5))) {
if ((difficulty == 1) && ((mission == 1) || (mission == 5) || (mission == 6))) {
difficulty = 2;
}
} else if ((gControllerPress[0].button & D_JPAD) && (mission != 0)) {
@@ -84,7 +84,7 @@ void Map_LevelSelect(void) {
} else if (sCurrentPlanetId == PLANET_VENOM) {
Graphics_DisplaySmallText(80, 210, 1.0f, 1.0f, "ANDROSS");
} else if (sCurrentPlanetId == PLANET_AREA_6) {
Graphics_DisplaySmallText(80, 210, 1.0f, 1.0f, "UNKNOWN 4");
Graphics_DisplaySmallText(80, 210, 1.0f, 1.0f, "BETA SB");
}
}
}
@@ -97,8 +97,7 @@ void Map_LevelSelect(void) {
} else if (sPlanetArray[mission][difficulty] == SAVE_SLOT_VENOM_2) {
gCurrentLevel = LEVEL_VENOM_2;
}
}
if (startOption && (sCurrentPlanetId == PLANET_AREA_6)) {
} else if ((sCurrentPlanetId == PLANET_AREA_6) && startOption) {
gCurrentLevel = LEVEL_UNK_4;
}
Map_801A61B4(gCurrentLevel);
+243 -167
View File
File diff suppressed because it is too large Load Diff
+96
View File
@@ -0,0 +1,96 @@
#ifndef OBJECT_RAM_H
#define OBJECT_RAM_H
#include "global.h"
#define ORAM_ENTRY(struct, index, field, format) \
{ ORAM_##struct, index, offsetof(struct, field), NULL, 0, FMT_##format, WIDTH_##format, 0, 0 }
#define ORAM_OFF \
{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }
#define WRAP_MODE(val, max) ((u8) ((val) + (max)) % max)
#define OBJ_ARRAY_INFO(objarr, name) \
{ objarr, sizeof(*objarr), ARRAY_COUNT(objarr), name }
typedef struct ObjArrayInfo {
void* ptr;
size_t size;
s32 count;
char* name;
} ObjArrayInfo;
typedef struct RamEntry {
u8 type;
u8 index;
s16 offset;
Object* objPtr;
void* dataPtr;
u8 fmt;
u8 width;
u16 x;
u16 y;
} RamEntry;
typedef enum ObjectRamType {
ORAM_NONE,
ORAM_Player,
ORAM_Scenery360,
ORAM_Scenery,
ORAM_Sprite,
ORAM_Actor,
ORAM_Boss,
ORAM_Item,
ORAM_Effect,
ORAM_PlayerShot,
ORAM_TexturedLine,
ORAM_RadarMark,
ORAM_BonusText,
ORAM_MAX,
} ObjectRamType;
typedef enum FormatType {
FMT_HEX,
FMT_SIGN,
FMT_UNSIGN,
FMT_FLOAT,
FMT_MAX,
} FormatType;
typedef enum EditMode {
EDM_TYPE,
EDM_INDEX,
EDM_OFFSET,
EDM_FORMAT,
EDM_WIDTH,
EDM_VALUE,
// EDM_POS,
EDM_MAX,
} EditMode;
#define FMT_f32 FMT_FLOAT
#define WIDTH_f32 2
#define FMT_s32 FMT_SIGN
#define WIDTH_s32 2
#define FMT_u32 FMT_UNSIGN
#define WIDTH_u32 2
#define FMT_x32 FMT_HEX
#define WIDTH_x32 2
#define FMT_s16 FMT_SIGN
#define WIDTH_s16 1
#define FMT_u16 FMT_UNSIGN
#define WIDTH_u16 1
#define FMT_x16 FMT_HEX
#define WIDTH_x16 1
#define FMT_s8 FMT_SIGN
#define WIDTH_s8 0
#define FMT_u8 FMT_UNSIGN
#define WIDTH_u8 0
#define FMT_x8 FMT_HEX
#define WIDTH_x8 0
u32 ObjectRam_GetData(RamEntry* entry);
#endif
+2 -2
View File
@@ -90,7 +90,7 @@ void func_800074AC(s32 arg0, s32 arg1, s32 arg2) {
}
}
void* func_80007604(void* arg0, const char* arg1, size_t arg2) {
char* func_80007604(char* arg0, const char* arg1, size_t arg2) {
return (char*) memcpy(arg0, arg1, arg2) + arg2;
}
@@ -106,7 +106,7 @@ void func_8000762C(s32 arg0, s32 arg1, const char* fmt, ...) {
sp40[i] = 0;
}
if (_Printf((outfun*) func_80007604, sp40, fmt, args) <= 0) {
if (_Printf(func_80007604, sp40, fmt, args) <= 0) {
return;
}
for (var_s0 = sp40; *var_s0 != 0; var_s0++) {