mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-21 19:45:10 +00:00
Fixed how DynOS writes lua variables into level scripts, added all level geos
This commit is contained in:
parent
395541ce10
commit
8646b50ae5
8 changed files with 581 additions and 129 deletions
|
@ -450,6 +450,7 @@ struct GfxData : NoCopy {
|
|||
|
||||
// Generate
|
||||
Array<DataNode<GeoLayout> *> mGenerateGeoLayouts;
|
||||
Array<DataNode<LevelScript> *> mGenerateLevelScripts;
|
||||
|
||||
// Current
|
||||
u64 mLoadIndex = 0;
|
||||
|
@ -458,7 +459,8 @@ struct GfxData : NoCopy {
|
|||
s32 mModIndex = 0;
|
||||
SysPath mPackFolder;
|
||||
Array<void *> mPointerList;
|
||||
Array<String> mPointerTokenList;
|
||||
Array<void *> mLuaPointerList;
|
||||
Array<String> mLuaTokenList;
|
||||
GfxContext mGfxContext;
|
||||
Array<GfxContext> mGeoNodeStack;
|
||||
};
|
||||
|
@ -744,8 +746,11 @@ Collision* DynOS_Col_Get(const char* collisionName);
|
|||
// Bin
|
||||
//
|
||||
|
||||
typedef s64 (*RDConstantFunc)(const String& _Arg, bool* found);
|
||||
|
||||
u32 DynOS_Lua_RememberVariable(GfxData* aGfxData, void* aPtr, String& token);
|
||||
void DynOS_Gfx_GeneratePacks(const char* directory);
|
||||
s64 DynOS_RecursiveDescent_Parse(const char* expr, bool* success);
|
||||
s64 DynOS_RecursiveDescent_Parse(const char* expr, bool* success, RDConstantFunc func);
|
||||
void DynOS_Read_Source(GfxData *aGfxData, const SysPath &aFilename);
|
||||
char *DynOS_Read_Buffer(FILE* aFile, GfxData* aGfxData);
|
||||
|
||||
|
@ -768,6 +773,7 @@ void DynOS_Geo_Load(FILE *aFile, GfxData *aGfxData);
|
|||
DataNode<Gfx>* DynOS_Gfx_Parse(GfxData* aGfxData, DataNode<Gfx>* aNode);
|
||||
void DynOS_Gfx_Write(FILE *aFile, GfxData *aGfxData, DataNode<Gfx> *aNode);
|
||||
void DynOS_Gfx_Load(FILE *aFile, GfxData *aGfxData);
|
||||
s64 DynOS_Gfx_ParseGfxConstants(const String& _Arg, bool* found);
|
||||
|
||||
DataNode<Lights1>* DynOS_Lights_Parse(GfxData* aGfxData, DataNode<Lights1>* aNode);
|
||||
void DynOS_Lights_Write(FILE* aFile, GfxData* aGfxData, DataNode<Lights1> *aNode);
|
||||
|
@ -810,6 +816,7 @@ DataNode<Vtx>* DynOS_Vtx_Parse(GfxData* aGfxData, DataNode<Vtx>* aNode);
|
|||
void DynOS_Vtx_Write(FILE* aFile, GfxData* aGfxData, DataNode<Vtx> *aNode);
|
||||
void DynOS_Vtx_Load(FILE *aFile, GfxData *aGfxData);
|
||||
|
||||
void DynOS_Pointer_Lua_Write(FILE* aFile, u32 index, GfxData* aGfxData);
|
||||
void DynOS_Pointer_Write(FILE* aFile, const void* aPtr, GfxData* aGfxData);
|
||||
void *DynOS_Pointer_Load(FILE *aFile, GfxData *aGfxData, u32 aValue, bool isLvl);
|
||||
|
||||
|
|
|
@ -154,7 +154,8 @@ static void DynOS_Actor_Generate(const SysPath &aPackFolder, Array<Pair<u64, Str
|
|||
_GfxData->mModelIdentifier = _GeoNode->mModelIdentifier;
|
||||
_GfxData->mPackFolder = aPackFolder;
|
||||
_GfxData->mPointerList = { NULL }; // The NULL pointer is needed, so we add it here
|
||||
_GfxData->mPointerTokenList = { };
|
||||
_GfxData->mLuaPointerList = { };
|
||||
_GfxData->mLuaTokenList = { };
|
||||
_GfxData->mGfxContext.mCurrentTexture = NULL;
|
||||
_GfxData->mGfxContext.mCurrentPalette = NULL;
|
||||
_GfxData->mGeoNodeStack.Clear();
|
||||
|
@ -228,9 +229,34 @@ void DynOS_Actor_GeneratePack(const SysPath &aPackFolder) {
|
|||
SysPath _Folder = fstring("%s/%s", aPackFolder.c_str(), _PackEnt->d_name);
|
||||
if (fs_sys_dir_exists(_Folder.c_str())) {
|
||||
_GfxData->mModelIdentifier = 0;
|
||||
|
||||
// Remember the geo layout count
|
||||
s32 prevGeoLayoutCount = _GfxData->mGeoLayouts.Count();
|
||||
|
||||
DynOS_Read_Source(_GfxData, fstring("%s/model.inc.c", _Folder.c_str()));
|
||||
DynOS_Read_Source(_GfxData, fstring("%s/geo.inc.c", _Folder.c_str()));
|
||||
DynOS_Read_Source(_GfxData, fstring("%s/collision.inc.c", _Folder.c_str()));
|
||||
|
||||
// Figure out which geo layouts to generate
|
||||
s32 geoLayoutCount = _GfxData->mGeoLayouts.Count();
|
||||
if (geoLayoutCount > prevGeoLayoutCount) {
|
||||
// find actors to generate
|
||||
bool foundActor = false;
|
||||
for (s32 i = prevGeoLayoutCount; i < geoLayoutCount; i++) {
|
||||
String _GeoRootName = _GfxData->mGeoLayouts[i]->mName;
|
||||
const void* actor = DynOS_Geo_GetActorLayoutFromName(_GeoRootName.begin());
|
||||
if (actor != NULL) {
|
||||
foundActor = true;
|
||||
_GfxData->mGenerateGeoLayouts.Add(_GfxData->mGeoLayouts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// if we haven't found an actor, just add the last geo layout found
|
||||
if (!foundActor) {
|
||||
_GfxData->mGenerateGeoLayouts.Add(_GfxData->mGeoLayouts[geoLayoutCount - 1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (_GfxData->mModelIdentifier != 0) {
|
||||
_ActorsFolders.Add({ _GfxData->mModelIdentifier, String(_PackEnt->d_name) });
|
||||
}
|
||||
|
|
|
@ -15,18 +15,9 @@ extern "C" {
|
|||
/////////////
|
||||
|
||||
#define gfx_constant(x) if (_Arg == #x) { return (s64) (x); }
|
||||
static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pTokenIndex, const char *aPrefix) {
|
||||
assert(aPrefix != NULL);
|
||||
String _Token = (pTokenIndex != NULL ? aNode->mTokens[(*pTokenIndex)++] : "");
|
||||
String _Arg("%s%s", aPrefix, _Token.begin());
|
||||
|
||||
// Offset
|
||||
s32 _Offset = 0;
|
||||
s32 _Plus = _Arg.Find('+');
|
||||
if (_Plus != -1) {
|
||||
_Offset = _Arg.SubString(_Plus + 1).ParseInt();
|
||||
_Arg = _Arg.SubString(0, _Plus);
|
||||
}
|
||||
s64 DynOS_Gfx_ParseGfxConstants(const String& _Arg, bool* found) {
|
||||
*found = true;
|
||||
|
||||
// Constants
|
||||
gfx_constant(NULL);
|
||||
|
@ -123,10 +114,6 @@ static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pToke
|
|||
gfx_constant(G_TX_CLAMP);
|
||||
gfx_constant(G_TX_NOMASK);
|
||||
gfx_constant(G_TX_NOLOD);
|
||||
gfx_constant(G_TX_WRAP|G_TX_NOMIRROR);
|
||||
gfx_constant(G_TX_WRAP|G_TX_MIRROR);
|
||||
gfx_constant(G_TX_CLAMP|G_TX_NOMIRROR);
|
||||
gfx_constant(G_TX_CLAMP|G_TX_MIRROR);
|
||||
|
||||
// Render modes
|
||||
gfx_constant(G_RM_AA_ZB_OPA_SURF);
|
||||
|
@ -239,14 +226,6 @@ static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pToke
|
|||
gfx_constant(G_TEXTURE_GEN_LINEAR);
|
||||
gfx_constant(G_LOD);
|
||||
gfx_constant(G_CLIPPING);
|
||||
gfx_constant(G_FOG|G_TEXTURE_GEN);
|
||||
gfx_constant(G_LIGHTING|G_CULL_BACK);
|
||||
gfx_constant(G_LIGHTING|G_SHADING_SMOOTH);
|
||||
gfx_constant(G_CULL_BACK|G_SHADING_SMOOTH);
|
||||
gfx_constant(G_LIGHTING|G_CULL_BACK|G_SHADING_SMOOTH);
|
||||
gfx_constant(G_TEXTURE_GEN|G_SHADING_SMOOTH);
|
||||
gfx_constant(G_TEXTURE_GEN|G_LIGHTING|G_CULL_BACK);
|
||||
gfx_constant(G_TEXTURE_GEN|G_CULL_BACK|G_SHADING_SMOOTH);
|
||||
|
||||
// Alpha modes
|
||||
gfx_constant(G_AC_NONE);
|
||||
|
@ -318,14 +297,13 @@ static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pToke
|
|||
gfx_constant(G_MW_FOG);
|
||||
gfx_constant(G_MW_LIGHTCOL);
|
||||
|
||||
// Texture/scale/rotate constants
|
||||
gfx_constant(G_TEXTURE_IMAGE_FRAC);
|
||||
gfx_constant(G_TEXTURE_SCALE_FRAC);
|
||||
gfx_constant(G_SCALE_FRAC);
|
||||
gfx_constant(G_ROTATE_FRAC);
|
||||
|
||||
// Common values
|
||||
gfx_constant((4-1)<<G_TEXTURE_IMAGE_FRAC);
|
||||
gfx_constant((8-1)<<G_TEXTURE_IMAGE_FRAC);
|
||||
gfx_constant((16-1)<<G_TEXTURE_IMAGE_FRAC);
|
||||
gfx_constant((32-1)<<G_TEXTURE_IMAGE_FRAC);
|
||||
gfx_constant((64-1)<<G_TEXTURE_IMAGE_FRAC);
|
||||
gfx_constant((128-1)<<G_TEXTURE_IMAGE_FRAC);
|
||||
gfx_constant((256-1)<<G_TEXTURE_IMAGE_FRAC);
|
||||
gfx_constant(CALC_DXT(4,G_IM_SIZ_4b_BYTES));
|
||||
gfx_constant(CALC_DXT(8,G_IM_SIZ_4b_BYTES));
|
||||
gfx_constant(CALC_DXT(16,G_IM_SIZ_4b_BYTES));
|
||||
|
@ -354,7 +332,29 @@ static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pToke
|
|||
gfx_constant(CALC_DXT(64,G_IM_SIZ_32b_BYTES));
|
||||
gfx_constant(CALC_DXT(128,G_IM_SIZ_32b_BYTES));
|
||||
gfx_constant(CALC_DXT(256,G_IM_SIZ_32b_BYTES));
|
||||
gfx_constant(G_CULL_BACK|G_LIGHTING);
|
||||
|
||||
*found = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pTokenIndex, const char *aPrefix) {
|
||||
assert(aPrefix != NULL);
|
||||
String _Token = (pTokenIndex != NULL ? aNode->mTokens[(*pTokenIndex)++] : "");
|
||||
String _Arg("%s%s", aPrefix, _Token.begin());
|
||||
|
||||
bool constantFound = false;
|
||||
s64 constantValue = DynOS_Gfx_ParseGfxConstants(_Arg, &constantFound);
|
||||
if (constantFound) {
|
||||
return constantValue;
|
||||
}
|
||||
|
||||
// Offset
|
||||
s32 _Offset = 0;
|
||||
s32 _Plus = _Arg.Find('+');
|
||||
if (_Plus != -1) {
|
||||
_Offset = _Arg.SubString(_Plus + 1).ParseInt();
|
||||
_Arg = _Arg.SubString(0, _Plus);
|
||||
}
|
||||
|
||||
// Lights
|
||||
for (auto& _Node : aGfxData->mLights) {
|
||||
|
@ -447,6 +447,13 @@ static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pToke
|
|||
return (s64) x;
|
||||
}
|
||||
|
||||
// Recursive descent parsing
|
||||
bool rdSuccess = false;
|
||||
s64 rdValue = DynOS_RecursiveDescent_Parse(_Arg.begin(), &rdSuccess, DynOS_Gfx_ParseGfxConstants);
|
||||
if (rdSuccess) {
|
||||
return (LevelScript)rdValue;
|
||||
}
|
||||
|
||||
// Unknown
|
||||
PrintError(" ERROR: Unknown gfx arg: %s", _Arg.begin());
|
||||
return 0;
|
||||
|
|
|
@ -65,8 +65,6 @@ void *DynOS_Lvl_GetFunctionPointerFromIndex(s32 aIndex) {
|
|||
|
||||
#define lvl_constant(x) if (_Arg == #x) { return (LevelScript) (x); }
|
||||
|
||||
// TODO: this was made so that recursive descent can parse the constants...
|
||||
// but RD should really use any function pointer passed to it
|
||||
s64 DynOS_Lvl_ParseLevelScriptConstants(const String& _Arg, bool* found) {
|
||||
*found = true;
|
||||
|
||||
|
@ -1391,6 +1389,10 @@ s64 DynOS_Lvl_ParseLevelScriptConstants(const String& _Arg, bool* found) {
|
|||
lvl_constant(WARP_TRANSITION_FADE_FROM_BOWSER);
|
||||
lvl_constant(WARP_TRANSITION_FADE_INTO_BOWSER);
|
||||
|
||||
// Other constants
|
||||
lvl_constant(NULL);
|
||||
lvl_constant(FALSE);
|
||||
|
||||
// vanilla actors
|
||||
s32 actorCount = DynOS_Geo_GetActorCount();
|
||||
for (s32 i = 0; i < actorCount; i++) {
|
||||
|
@ -1427,10 +1429,6 @@ static LevelScript ParseLevelScriptSymbolArgInternal(GfxData* aGfxData, DataNode
|
|||
return (LevelScript) constantValue;
|
||||
}
|
||||
|
||||
// Other constants
|
||||
lvl_constant(NULL);
|
||||
lvl_constant(FALSE);
|
||||
|
||||
// Level Scripts
|
||||
for (auto& _Node : aGfxData->mLevelScripts) {
|
||||
if (_Arg == _Node->mName) {
|
||||
|
@ -1495,7 +1493,7 @@ static LevelScript ParseLevelScriptSymbolArgInternal(GfxData* aGfxData, DataNode
|
|||
|
||||
// Recursive descent parsing
|
||||
bool rdSuccess = false;
|
||||
s64 rdValue = DynOS_RecursiveDescent_Parse(_Arg.begin(), &rdSuccess);
|
||||
s64 rdValue = DynOS_RecursiveDescent_Parse(_Arg.begin(), &rdSuccess, DynOS_Lvl_ParseLevelScriptConstants);
|
||||
if (rdSuccess) {
|
||||
return (LevelScript)rdValue;
|
||||
}
|
||||
|
@ -1726,20 +1724,9 @@ static void ParseLevelScriptSymbol(GfxData* aGfxData, DataNode<LevelScript>* aNo
|
|||
memcpy(aHead, _Ls, sizeof(_Ls));
|
||||
aHead += (sizeof(_Ls) / sizeof(_Ls[0]));
|
||||
} else {
|
||||
// remember model/beh as pointer
|
||||
aGfxData->mPointerList.Add(aHead + 5);
|
||||
aGfxData->mPointerList.Add(aHead + 6);
|
||||
|
||||
// add model/beh tokens
|
||||
u32 tokenListIndex = aGfxData->mPointerTokenList.Count();
|
||||
aGfxData->mPointerTokenList.Add(aNode->mTokens[topTokenIndex + 0]);
|
||||
aGfxData->mPointerTokenList.Add(aNode->mTokens[topTokenIndex + 8]);
|
||||
|
||||
// get model/beh tokens
|
||||
String& modelToken = aGfxData->mPointerTokenList[tokenListIndex + 0];
|
||||
String& behToken = aGfxData->mPointerTokenList[tokenListIndex + 1];
|
||||
|
||||
LevelScript _Ls[] = { OBJECT_EXT(modelToken.begin(), posX, posY, posZ, angleX, angleY, angleZ, behParam, behToken.begin()) };
|
||||
u32 modelIndex = DynOS_Lua_RememberVariable(aGfxData, aHead + 5, aNode->mTokens[topTokenIndex + 0]);
|
||||
u32 behIndex = DynOS_Lua_RememberVariable(aGfxData, aHead + 6, aNode->mTokens[topTokenIndex + 8]);
|
||||
LevelScript _Ls[] = { OBJECT_EXT(modelIndex, posX, posY, posZ, angleX, angleY, angleZ, behParam, behIndex) };
|
||||
memcpy(aHead, _Ls, sizeof(_Ls));
|
||||
aHead += (sizeof(_Ls) / sizeof(_Ls[0]));
|
||||
}
|
||||
|
@ -1761,7 +1748,7 @@ static void ParseLevelScriptSymbol(GfxData* aGfxData, DataNode<LevelScript>* aNo
|
|||
LevelScript angleZ = ParseLevelScriptSymbolArg(aGfxData, aNode, aTokenIndex);
|
||||
LevelScript behParam = ParseLevelScriptSymbolArg(aGfxData, aNode, aTokenIndex);
|
||||
LevelScript beh = ParseLevelScriptSymbolArgInternal(aGfxData, aNode, aTokenIndex, &foundBeh);
|
||||
LevelScript acts = ParseLevelScriptSymbolArg(aGfxData, aNode, aTokenIndex);
|
||||
LevelScript acts = ParseLevelScriptSymbolArg(aGfxData, aNode, aTokenIndex);
|
||||
|
||||
if (foundModel && foundBeh) {
|
||||
aGfxData->mPointerList.Add(aHead + 5);
|
||||
|
@ -1769,20 +1756,9 @@ static void ParseLevelScriptSymbol(GfxData* aGfxData, DataNode<LevelScript>* aNo
|
|||
memcpy(aHead, _Ls, sizeof(_Ls));
|
||||
aHead += (sizeof(_Ls) / sizeof(_Ls[0]));
|
||||
} else {
|
||||
// remember model/beh as pointer
|
||||
aGfxData->mPointerList.Add(aHead + 5);
|
||||
aGfxData->mPointerList.Add(aHead + 6);
|
||||
|
||||
// add model/beh tokens
|
||||
u32 tokenListIndex = aGfxData->mPointerTokenList.Count();
|
||||
aGfxData->mPointerTokenList.Add(aNode->mTokens[topTokenIndex + 0]);
|
||||
aGfxData->mPointerTokenList.Add(aNode->mTokens[topTokenIndex + 8]);
|
||||
|
||||
// get model/beh tokens
|
||||
String& modelToken = aGfxData->mPointerTokenList[tokenListIndex + 0];
|
||||
String& behToken = aGfxData->mPointerTokenList[tokenListIndex + 1];
|
||||
|
||||
LevelScript _Ls[] = { OBJECT_WITH_ACTS_EXT(modelToken.begin(), posX, posY, posZ, angleX, angleY, angleZ, behParam, behToken.begin(), acts) };
|
||||
u32 modelIndex = DynOS_Lua_RememberVariable(aGfxData, aHead + 5, aNode->mTokens[topTokenIndex + 0]);
|
||||
u32 behIndex = DynOS_Lua_RememberVariable(aGfxData, aHead + 6, aNode->mTokens[topTokenIndex + 8]);
|
||||
LevelScript _Ls[] = { OBJECT_WITH_ACTS_EXT(modelIndex, posX, posY, posZ, angleX, angleY, angleZ, behParam, behIndex, acts) };
|
||||
memcpy(aHead, _Ls, sizeof(_Ls));
|
||||
aHead += (sizeof(_Ls) / sizeof(_Ls[0]));
|
||||
}
|
||||
|
@ -1836,6 +1812,8 @@ static void DynOS_Lvl_Write(FILE* aFile, GfxData* aGfxData, DataNode<LevelScript
|
|||
LevelScript *_Head = &aNode->mData[i];
|
||||
if (aGfxData->mPointerList.Find((void *) _Head) != -1) {
|
||||
DynOS_Pointer_Write(aFile, (const void *) (*_Head), aGfxData);
|
||||
} else if (aGfxData->mLuaPointerList.Find((void *) _Head) != -1) {
|
||||
DynOS_Pointer_Lua_Write(aFile, *(u32 *)_Head, aGfxData);
|
||||
} else {
|
||||
WriteBytes<u32>(aFile, *((u32 *) _Head));
|
||||
}
|
||||
|
@ -2012,9 +1990,16 @@ static bool DynOS_Lvl_GeneratePack_Internal(const SysPath &aPackFolder, Array<Pa
|
|||
}
|
||||
|
||||
// Init
|
||||
_GfxData->mErrorCount = 0;
|
||||
_GfxData->mLoadIndex = 0;
|
||||
_GfxData->mPackFolder = aPackFolder;
|
||||
_GfxData->mLoadIndex = 0;
|
||||
_GfxData->mErrorCount = 0;
|
||||
_GfxData->mModelIdentifier = _LvlRoot->mModelIdentifier;
|
||||
_GfxData->mPackFolder = aPackFolder;
|
||||
_GfxData->mPointerList = { NULL }; // The NULL pointer is needed, so we add it here
|
||||
_GfxData->mLuaPointerList = { };
|
||||
_GfxData->mLuaTokenList = { };
|
||||
_GfxData->mGfxContext.mCurrentTexture = NULL;
|
||||
_GfxData->mGfxContext.mCurrentPalette = NULL;
|
||||
_GfxData->mGeoNodeStack.Clear();
|
||||
|
||||
// Parse data
|
||||
PrintNoNewLine("%s.lvl: Model identifier: %X - Processing... ", _LvlRootName.begin(), _GfxData->mModelIdentifier);
|
||||
|
|
|
@ -183,6 +183,12 @@ static PointerData GetDataFromPointer(const void* aPtr, GfxData* aGfxData) {
|
|||
return { _VtxArrayName, (u32)((const Vtx*)aPtr - (const Vtx*)_VtxArrayStart) };
|
||||
}
|
||||
|
||||
void DynOS_Pointer_Lua_Write(FILE* aFile, u32 index, GfxData* aGfxData) {
|
||||
String& token = aGfxData->mLuaTokenList[index];
|
||||
WriteBytes<u32>(aFile, LUA_VAR_CODE);
|
||||
token.Write(aFile);
|
||||
}
|
||||
|
||||
void DynOS_Pointer_Write(FILE* aFile, const void* aPtr, GfxData* aGfxData) {
|
||||
|
||||
// NULL
|
||||
|
@ -191,6 +197,17 @@ void DynOS_Pointer_Write(FILE* aFile, const void* aPtr, GfxData* aGfxData) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Lua variable
|
||||
for (s32 i = 0; i < aGfxData->mLuaPointerList.Count(); i++) {
|
||||
if (aPtr == aGfxData->mLuaPointerList[i]) {
|
||||
u32 index = *((u32*)aPtr);
|
||||
String& token = aGfxData->mLuaTokenList[index];
|
||||
WriteBytes<u32>(aFile, LUA_VAR_CODE);
|
||||
token.Write(aFile);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Geo function
|
||||
s32 _GeoFunctionIndex = DynOS_Geo_GetFunctionIndex(aPtr);
|
||||
if (_GeoFunctionIndex != -1) {
|
||||
|
@ -207,21 +224,8 @@ void DynOS_Pointer_Write(FILE* aFile, const void* aPtr, GfxData* aGfxData) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Lua variable
|
||||
for (s32 i = 0; i < aGfxData->mPointerTokenList.Count(); i++) {
|
||||
if (aPtr == aGfxData->mPointerTokenList[i].begin()) {
|
||||
String& token = aGfxData->mPointerTokenList[i];
|
||||
WriteBytes<u32>(aFile, LUA_VAR_CODE);
|
||||
token.Write(aFile);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Pointer
|
||||
PointerData _PtrData = GetDataFromPointer(aPtr, aGfxData);
|
||||
if (strlen(_PtrData.first.begin()) == 0) {
|
||||
_PtrData = _PtrData; // DO NOT COMMIT
|
||||
}
|
||||
WriteBytes<u32>(aFile, POINTER_CODE);
|
||||
_PtrData.first.Write(aFile);
|
||||
WriteBytes<u32>(aFile, _PtrData.second);
|
||||
|
@ -390,6 +394,14 @@ static void *GetPointerFromData(GfxData *aGfxData, const String &aPtrName, u32 a
|
|||
|
||||
void *DynOS_Pointer_Load(FILE *aFile, GfxData *aGfxData, u32 aValue, bool isLvl) {
|
||||
|
||||
// LUAV
|
||||
if (aValue == LUA_VAR_CODE) {
|
||||
String token; token.Read(aFile);
|
||||
u32 index = aGfxData->mLuaTokenList.Count();
|
||||
aGfxData->mLuaTokenList.Add(token);
|
||||
return aGfxData->mLuaTokenList[index].begin();
|
||||
}
|
||||
|
||||
// FUNC
|
||||
if (aValue == FUNCTION_CODE) {
|
||||
s32 _FunctionIndex = ReadBytes<s32>(aFile);
|
||||
|
@ -398,14 +410,6 @@ void *DynOS_Pointer_Load(FILE *aFile, GfxData *aGfxData, u32 aValue, bool isLvl)
|
|||
: DynOS_Geo_GetFunctionPointerFromIndex(_FunctionIndex);
|
||||
}
|
||||
|
||||
// LUAV
|
||||
if (aValue == LUA_VAR_CODE) {
|
||||
String token; token.Read(aFile);
|
||||
u32 index = aGfxData->mPointerTokenList.Count();
|
||||
aGfxData->mPointerTokenList.Add(token);
|
||||
return aGfxData->mPointerTokenList[index].begin();
|
||||
}
|
||||
|
||||
// PNTR
|
||||
if (aValue == POINTER_CODE) {
|
||||
String _PtrName; _PtrName.Read(aFile);
|
||||
|
|
|
@ -121,9 +121,6 @@ void DynOS_Read_Source(GfxData *aGfxData, const SysPath &aFilename) {
|
|||
FILE *_File = fopen(aFilename.c_str(), "rb");
|
||||
if (!_File) return;
|
||||
|
||||
// Remember the geo layout count
|
||||
s32 prevGeoLayoutCount = aGfxData->mGeoLayouts.Count();
|
||||
|
||||
// Load file into a buffer while removing all comments
|
||||
char *_FileBuffer = DynOS_Read_Buffer(_File, aGfxData);
|
||||
fclose(_File);
|
||||
|
@ -281,26 +278,6 @@ void DynOS_Read_Source(GfxData *aGfxData, const SysPath &aFilename) {
|
|||
}
|
||||
}
|
||||
|
||||
// Figure out which geo layouts to generate
|
||||
s32 geoLayoutCount = aGfxData->mGeoLayouts.Count();
|
||||
if (geoLayoutCount > prevGeoLayoutCount) {
|
||||
// find actors to generate
|
||||
bool foundActor = false;
|
||||
for (s32 i = prevGeoLayoutCount; i < geoLayoutCount; i++) {
|
||||
String _GeoRootName = aGfxData->mGeoLayouts[i]->mName;
|
||||
const void* actor = DynOS_Geo_GetActorLayoutFromName(_GeoRootName.begin());
|
||||
if (actor != NULL) {
|
||||
foundActor = true;
|
||||
aGfxData->mGenerateGeoLayouts.Add(aGfxData->mGeoLayouts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// if we haven't found an actor, just add the last geo layout found
|
||||
if (!foundActor) {
|
||||
aGfxData->mGenerateGeoLayouts.Add(aGfxData->mGeoLayouts[geoLayoutCount - 1]);
|
||||
}
|
||||
}
|
||||
|
||||
Delete(_FileBuffer);
|
||||
Print("Data read from file \"%s\"", aFilename.c_str());
|
||||
}
|
||||
|
|
|
@ -70,12 +70,29 @@ void DynOS_Gfx_Free(GfxData* aGfxData) {
|
|||
}
|
||||
}
|
||||
|
||||
u32 DynOS_Lua_RememberVariable(GfxData* aGfxData, void* aPtr, String& token) {
|
||||
// remember as lua pointer
|
||||
aGfxData->mLuaPointerList.Add(aPtr);
|
||||
|
||||
// find existing token
|
||||
for (u32 i = 0; i < aGfxData->mLuaTokenList.Count(); i++) {
|
||||
if (aGfxData->mLuaTokenList[i] == token) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
// add token
|
||||
aGfxData->mLuaTokenList.Add(token);
|
||||
return aGfxData->mLuaTokenList.Count() - 1;
|
||||
}
|
||||
|
||||
///////////////////////
|
||||
// Recursive Descent //
|
||||
///////////////////////
|
||||
|
||||
static char* sRdString = NULL;
|
||||
static bool sRdError = false;
|
||||
static RDConstantFunc sRdConstantFunc = NULL;
|
||||
|
||||
static s64 ParseExpression();
|
||||
|
||||
|
@ -176,13 +193,13 @@ static s64 ParseFactor() {
|
|||
cTmp++;
|
||||
}
|
||||
|
||||
// TODO: this was made so that recursive descent can parse the constants...
|
||||
// but RD should really use any function pointer passed to it
|
||||
bool constantFound = false;
|
||||
s64 constantValue = DynOS_Lvl_ParseLevelScriptConstants(identifier, &constantFound);
|
||||
if (constantFound) {
|
||||
sRdString = cTmp;
|
||||
return constantValue;
|
||||
if (sRdConstantFunc != NULL) {
|
||||
bool constantFound = false;
|
||||
s64 constantValue = sRdConstantFunc(identifier, &constantFound);
|
||||
if (constantFound) {
|
||||
sRdString = cTmp;
|
||||
return constantValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -262,9 +279,10 @@ static s64 ParseExpression() {
|
|||
return ParseBitOrExpression();
|
||||
}
|
||||
|
||||
s64 DynOS_RecursiveDescent_Parse(const char* expr, bool* success) {
|
||||
s64 DynOS_RecursiveDescent_Parse(const char* expr, bool* success, RDConstantFunc func) {
|
||||
sRdString = (char*)expr;
|
||||
sRdError = false;
|
||||
sRdConstantFunc = func;
|
||||
s64 value = ParseExpression();
|
||||
sRdString = NULL;
|
||||
*success = !sRdError;
|
||||
|
|
|
@ -36,7 +36,27 @@ extern "C" {
|
|||
#include "actors/group17.h"
|
||||
#include "actors/custom0.h"
|
||||
#include "actors/zcustom0.h"
|
||||
#include "levels/bbh/header.h"
|
||||
#include "levels/bitdw/header.h"
|
||||
#include "levels/bitfs/header.h"
|
||||
#include "levels/bits/header.h"
|
||||
#include "levels/bob/header.h"
|
||||
#include "levels/bowser_2/header.h"
|
||||
#include "levels/bowser_3/header.h"
|
||||
#include "levels/castle_grounds/header.h"
|
||||
#include "levels/castle_inside/header.h"
|
||||
#include "levels/ccm/header.h"
|
||||
#include "levels/ddd/header.h"
|
||||
#include "levels/hmc/header.h"
|
||||
#include "levels/jrb/header.h"
|
||||
#include "levels/lll/header.h"
|
||||
#include "levels/rr/header.h"
|
||||
#include "levels/sl/header.h"
|
||||
#include "levels/ssl/header.h"
|
||||
#include "levels/thi/header.h"
|
||||
#include "levels/ttc/header.h"
|
||||
#include "levels/ttm/header.h"
|
||||
#include "levels/wdw/header.h"
|
||||
#include "levels/wf/header.h"
|
||||
}
|
||||
|
||||
|
@ -609,6 +629,417 @@ Collision* DynOS_Col_Get(const char* collisionName) {
|
|||
|
||||
#define define_lvl_geo(geo) (const void *) #geo, (const void *) geo
|
||||
static const void *sDynosLevelGeos[] = {
|
||||
define_lvl_geo(geo_bbh_0005B0),
|
||||
define_lvl_geo(geo_bbh_0005C8),
|
||||
define_lvl_geo(geo_bbh_0005E0),
|
||||
define_lvl_geo(geo_bbh_0005F8),
|
||||
define_lvl_geo(geo_bbh_000610),
|
||||
define_lvl_geo(geo_bbh_000628),
|
||||
define_lvl_geo(geo_bbh_000640),
|
||||
define_lvl_geo(geo_bbh_000658),
|
||||
define_lvl_geo(geo_bbh_000670),
|
||||
define_lvl_geo(geo_bbh_0006B0),
|
||||
define_lvl_geo(geo_bbh_0006E8),
|
||||
define_lvl_geo(geo_bbh_000730),
|
||||
define_lvl_geo(geo_bbh_000750),
|
||||
define_lvl_geo(geo_bbh_000768),
|
||||
define_lvl_geo(geo_bbh_0007B0),
|
||||
define_lvl_geo(geo_bbh_0007D0),
|
||||
define_lvl_geo(geo_bbh_000800),
|
||||
define_lvl_geo(geo_bbh_000828),
|
||||
define_lvl_geo(geo_bbh_000860),
|
||||
define_lvl_geo(geo_bbh_000888),
|
||||
define_lvl_geo(geo_bbh_0008B0),
|
||||
define_lvl_geo(geo_bbh_0008E8),
|
||||
define_lvl_geo(geo_bbh_000950),
|
||||
define_lvl_geo(geo_bbh_0009C8),
|
||||
define_lvl_geo(geo_bbh_000A18),
|
||||
define_lvl_geo(geo_bbh_000A60),
|
||||
define_lvl_geo(geo_bbh_000AD8),
|
||||
define_lvl_geo(geo_bbh_000B28),
|
||||
define_lvl_geo(geo_bbh_000B88),
|
||||
define_lvl_geo(geo_bbh_000BF0),
|
||||
define_lvl_geo(geo_bbh_000C38),
|
||||
define_lvl_geo(geo_bbh_000C88),
|
||||
define_lvl_geo(geo_bbh_000CE8),
|
||||
define_lvl_geo(geo_bbh_000D20),
|
||||
define_lvl_geo(geo_bbh_000D68),
|
||||
define_lvl_geo(geo_bbh_000DB0),
|
||||
define_lvl_geo(geo_bbh_000DF0),
|
||||
define_lvl_geo(geo_bbh_000E40),
|
||||
define_lvl_geo(geo_bbh_000E80),
|
||||
define_lvl_geo(geo_bbh_000EB0),
|
||||
define_lvl_geo(geo_bbh_000F00),
|
||||
define_lvl_geo(geo_bitdw_0003C0),
|
||||
define_lvl_geo(geo_bitdw_0003D8),
|
||||
define_lvl_geo(geo_bitdw_0003F0),
|
||||
define_lvl_geo(geo_bitdw_000408),
|
||||
define_lvl_geo(geo_bitdw_000420),
|
||||
define_lvl_geo(geo_bitdw_000438),
|
||||
define_lvl_geo(geo_bitdw_000450),
|
||||
define_lvl_geo(geo_bitdw_000468),
|
||||
define_lvl_geo(geo_bitdw_000480),
|
||||
define_lvl_geo(geo_bitdw_000498),
|
||||
define_lvl_geo(geo_bitdw_0004B0),
|
||||
define_lvl_geo(geo_bitdw_0004C8),
|
||||
define_lvl_geo(geo_bitdw_0004E0),
|
||||
define_lvl_geo(geo_bitdw_0004F8),
|
||||
define_lvl_geo(geo_bitdw_000510),
|
||||
define_lvl_geo(geo_bitdw_000528),
|
||||
define_lvl_geo(geo_bitdw_000540),
|
||||
define_lvl_geo(geo_bitdw_000558),
|
||||
define_lvl_geo(geo_bitdw_000570),
|
||||
define_lvl_geo(geo_bitdw_000588),
|
||||
define_lvl_geo(geo_bitdw_0005A0),
|
||||
define_lvl_geo(geo_bitdw_0005B8),
|
||||
define_lvl_geo(geo_bitdw_0005D0),
|
||||
define_lvl_geo(geo_bitdw_0005E8),
|
||||
define_lvl_geo(geo_bitdw_000600),
|
||||
define_lvl_geo(geo_bitdw_000618),
|
||||
define_lvl_geo(bitfs_geo_0004B0),
|
||||
define_lvl_geo(bitfs_geo_0004C8),
|
||||
define_lvl_geo(bitfs_geo_0004E0),
|
||||
define_lvl_geo(bitfs_geo_0004F8),
|
||||
define_lvl_geo(bitfs_geo_000510),
|
||||
define_lvl_geo(bitfs_geo_000528),
|
||||
define_lvl_geo(bitfs_geo_000540),
|
||||
define_lvl_geo(bitfs_geo_000558),
|
||||
define_lvl_geo(bitfs_geo_000570),
|
||||
define_lvl_geo(bitfs_geo_000588),
|
||||
define_lvl_geo(bitfs_geo_0005A0),
|
||||
define_lvl_geo(bitfs_geo_0005B8),
|
||||
define_lvl_geo(bitfs_geo_0005D0),
|
||||
define_lvl_geo(bitfs_geo_0005E8),
|
||||
define_lvl_geo(bitfs_geo_000600),
|
||||
define_lvl_geo(bitfs_geo_000618),
|
||||
define_lvl_geo(bitfs_geo_000630),
|
||||
define_lvl_geo(bitfs_geo_000648),
|
||||
define_lvl_geo(bitfs_geo_000660),
|
||||
define_lvl_geo(bitfs_geo_000678),
|
||||
define_lvl_geo(bitfs_geo_000690),
|
||||
define_lvl_geo(bitfs_geo_0006A8),
|
||||
define_lvl_geo(bitfs_geo_0006C0),
|
||||
define_lvl_geo(bitfs_geo_0006D8),
|
||||
define_lvl_geo(bitfs_geo_0006F0),
|
||||
define_lvl_geo(bitfs_geo_000708),
|
||||
define_lvl_geo(bitfs_geo_000728),
|
||||
define_lvl_geo(bitfs_geo_000740),
|
||||
define_lvl_geo(bitfs_geo_000758),
|
||||
define_lvl_geo(bitfs_geo_000770),
|
||||
define_lvl_geo(bitfs_geo_000788),
|
||||
define_lvl_geo(bitfs_geo_0007A0),
|
||||
define_lvl_geo(bits_geo_000430),
|
||||
define_lvl_geo(bits_geo_000448),
|
||||
define_lvl_geo(bits_geo_000460),
|
||||
define_lvl_geo(bits_geo_000478),
|
||||
define_lvl_geo(bits_geo_000490),
|
||||
define_lvl_geo(bits_geo_0004A8),
|
||||
define_lvl_geo(bits_geo_0004C0),
|
||||
define_lvl_geo(bits_geo_0004D8),
|
||||
define_lvl_geo(bits_geo_0004F0),
|
||||
define_lvl_geo(bits_geo_000508),
|
||||
define_lvl_geo(bits_geo_000520),
|
||||
define_lvl_geo(bits_geo_000538),
|
||||
define_lvl_geo(bits_geo_000550),
|
||||
define_lvl_geo(bits_geo_000568),
|
||||
define_lvl_geo(bits_geo_000580),
|
||||
define_lvl_geo(bits_geo_000598),
|
||||
define_lvl_geo(bits_geo_0005B0),
|
||||
define_lvl_geo(bits_geo_0005C8),
|
||||
define_lvl_geo(bits_geo_0005E0),
|
||||
define_lvl_geo(bits_geo_0005F8),
|
||||
define_lvl_geo(bits_geo_000610),
|
||||
define_lvl_geo(bits_geo_000628),
|
||||
define_lvl_geo(bits_geo_000640),
|
||||
define_lvl_geo(bits_geo_000658),
|
||||
define_lvl_geo(bits_geo_000670),
|
||||
define_lvl_geo(bits_geo_000688),
|
||||
define_lvl_geo(bits_geo_0006A0),
|
||||
define_lvl_geo(bits_geo_0006B8),
|
||||
define_lvl_geo(bits_geo_0006D0),
|
||||
define_lvl_geo(bits_geo_0006E8),
|
||||
define_lvl_geo(bits_geo_000700),
|
||||
define_lvl_geo(bits_geo_000718),
|
||||
define_lvl_geo(bob_geo_000440),
|
||||
define_lvl_geo(bob_geo_000458),
|
||||
define_lvl_geo(bob_geo_000470),
|
||||
define_lvl_geo(bob_geo_000488),
|
||||
define_lvl_geo(bowser_2_geo_000170),
|
||||
define_lvl_geo(bowser_2_geo_000188),
|
||||
define_lvl_geo(bowser_3_geo_000290),
|
||||
define_lvl_geo(bowser_3_geo_0002A8),
|
||||
define_lvl_geo(bowser_3_geo_0002C0),
|
||||
define_lvl_geo(bowser_3_geo_0002D8),
|
||||
define_lvl_geo(bowser_3_geo_0002F0),
|
||||
define_lvl_geo(bowser_3_geo_000308),
|
||||
define_lvl_geo(bowser_3_geo_000320),
|
||||
define_lvl_geo(bowser_3_geo_000338),
|
||||
define_lvl_geo(bowser_3_geo_000350),
|
||||
define_lvl_geo(bowser_3_geo_000368),
|
||||
define_lvl_geo(bowser_3_geo_000380),
|
||||
define_lvl_geo(bowser_3_geo_000398),
|
||||
define_lvl_geo(castle_grounds_geo_000660),
|
||||
define_lvl_geo(castle_grounds_geo_0006F4),
|
||||
define_lvl_geo(castle_grounds_geo_00070C),
|
||||
define_lvl_geo(castle_grounds_geo_000724),
|
||||
define_lvl_geo(castle_grounds_geo_00073C),
|
||||
define_lvl_geo(castle_geo_000F00),
|
||||
define_lvl_geo(castle_geo_000F18),
|
||||
define_lvl_geo(castle_geo_000F30),
|
||||
define_lvl_geo(castle_geo_000F70),
|
||||
define_lvl_geo(castle_geo_000F88),
|
||||
define_lvl_geo(castle_geo_000FA8),
|
||||
define_lvl_geo(castle_geo_000FD0),
|
||||
define_lvl_geo(castle_geo_001000),
|
||||
define_lvl_geo(castle_geo_001038),
|
||||
define_lvl_geo(castle_geo_001088),
|
||||
define_lvl_geo(castle_geo_0010C8),
|
||||
define_lvl_geo(castle_geo_001110),
|
||||
define_lvl_geo(castle_geo_001158),
|
||||
define_lvl_geo(castle_geo_0011A8),
|
||||
define_lvl_geo(castle_geo_001200),
|
||||
define_lvl_geo(castle_geo_001260),
|
||||
define_lvl_geo(castle_geo_0012C8),
|
||||
define_lvl_geo(castle_geo_001348),
|
||||
define_lvl_geo(castle_geo_0013B8),
|
||||
define_lvl_geo(castle_geo_001400),
|
||||
define_lvl_geo(castle_geo_001518),
|
||||
define_lvl_geo(castle_geo_001530),
|
||||
define_lvl_geo(castle_geo_001548),
|
||||
define_lvl_geo(castle_geo_001560),
|
||||
define_lvl_geo(castle_geo_001578),
|
||||
define_lvl_geo(castle_geo_0015B8),
|
||||
define_lvl_geo(castle_geo_0015F8),
|
||||
define_lvl_geo(castle_geo_001628),
|
||||
define_lvl_geo(castle_geo_001668),
|
||||
define_lvl_geo(castle_geo_001690),
|
||||
define_lvl_geo(castle_geo_0016D8),
|
||||
define_lvl_geo(castle_geo_001740),
|
||||
define_lvl_geo(castle_geo_001798),
|
||||
define_lvl_geo(castle_geo_001800),
|
||||
define_lvl_geo(castle_geo_001858),
|
||||
define_lvl_geo(castle_geo_001940),
|
||||
define_lvl_geo(castle_geo_001958),
|
||||
define_lvl_geo(castle_geo_001980),
|
||||
define_lvl_geo(castle_geo_0019C8),
|
||||
define_lvl_geo(castle_geo_0019F8),
|
||||
define_lvl_geo(castle_geo_001A30),
|
||||
define_lvl_geo(castle_geo_001A58),
|
||||
define_lvl_geo(castle_geo_001AB8),
|
||||
define_lvl_geo(castle_geo_001AF8),
|
||||
define_lvl_geo(castle_geo_001B48),
|
||||
define_lvl_geo(castle_geo_001BB0),
|
||||
define_lvl_geo(castle_geo_001C10),
|
||||
define_lvl_geo(ccm_geo_0003D0),
|
||||
define_lvl_geo(ccm_geo_0003F0),
|
||||
define_lvl_geo(ccm_geo_00040C),
|
||||
define_lvl_geo(ccm_geo_00042C),
|
||||
define_lvl_geo(ccm_geo_00045C),
|
||||
define_lvl_geo(ccm_geo_000494),
|
||||
define_lvl_geo(ccm_geo_0004BC),
|
||||
define_lvl_geo(ccm_geo_0004E4),
|
||||
define_lvl_geo(ccm_geo_00051C),
|
||||
define_lvl_geo(ccm_geo_0005E8),
|
||||
define_lvl_geo(ddd_geo_000450),
|
||||
define_lvl_geo(ddd_geo_000478),
|
||||
define_lvl_geo(ddd_geo_0004A0),
|
||||
define_lvl_geo(ddd_geo_0004C0),
|
||||
define_lvl_geo(ddd_geo_000570),
|
||||
define_lvl_geo(hmc_geo_000530),
|
||||
define_lvl_geo(hmc_geo_000548),
|
||||
define_lvl_geo(hmc_geo_000570),
|
||||
define_lvl_geo(hmc_geo_000588),
|
||||
define_lvl_geo(hmc_geo_0005A0),
|
||||
define_lvl_geo(hmc_geo_0005B8),
|
||||
define_lvl_geo(hmc_geo_0005D0),
|
||||
define_lvl_geo(hmc_geo_0005E8),
|
||||
define_lvl_geo(hmc_geo_000618),
|
||||
define_lvl_geo(hmc_geo_000658),
|
||||
define_lvl_geo(hmc_geo_0006A8),
|
||||
define_lvl_geo(hmc_geo_0006E0),
|
||||
define_lvl_geo(hmc_geo_000700),
|
||||
define_lvl_geo(hmc_geo_000748),
|
||||
define_lvl_geo(hmc_geo_000770),
|
||||
define_lvl_geo(hmc_geo_000798),
|
||||
define_lvl_geo(hmc_geo_0007F8),
|
||||
define_lvl_geo(hmc_geo_000850),
|
||||
define_lvl_geo(hmc_geo_0008D0),
|
||||
define_lvl_geo(hmc_geo_000938),
|
||||
define_lvl_geo(hmc_geo_000998),
|
||||
define_lvl_geo(hmc_geo_000A18),
|
||||
define_lvl_geo(hmc_geo_000A88),
|
||||
define_lvl_geo(hmc_geo_000AE8),
|
||||
define_lvl_geo(hmc_geo_000B48),
|
||||
define_lvl_geo(hmc_geo_000B90),
|
||||
define_lvl_geo(jrb_geo_000900),
|
||||
define_lvl_geo(jrb_geo_000918),
|
||||
define_lvl_geo(jrb_geo_000930),
|
||||
define_lvl_geo(jrb_geo_000948),
|
||||
define_lvl_geo(jrb_geo_000960),
|
||||
define_lvl_geo(jrb_geo_000978),
|
||||
define_lvl_geo(jrb_geo_000990),
|
||||
define_lvl_geo(jrb_geo_0009B0),
|
||||
define_lvl_geo(jrb_geo_0009C8),
|
||||
define_lvl_geo(jrb_geo_0009E8),
|
||||
define_lvl_geo(jrb_geo_000A00),
|
||||
define_lvl_geo(jrb_geo_000A18),
|
||||
define_lvl_geo(jrb_geo_000AFC),
|
||||
define_lvl_geo(lll_geo_0009E0),
|
||||
define_lvl_geo(lll_geo_0009F8),
|
||||
define_lvl_geo(lll_geo_000A10),
|
||||
define_lvl_geo(lll_geo_000A28),
|
||||
define_lvl_geo(lll_geo_000A40),
|
||||
define_lvl_geo(lll_geo_000A60),
|
||||
define_lvl_geo(lll_geo_000A78),
|
||||
define_lvl_geo(lll_geo_000A90),
|
||||
define_lvl_geo(lll_geo_000AA8),
|
||||
define_lvl_geo(lll_geo_000AC0),
|
||||
define_lvl_geo(lll_geo_000AD8),
|
||||
define_lvl_geo(lll_geo_000AF0),
|
||||
define_lvl_geo(lll_geo_000B08),
|
||||
define_lvl_geo(lll_geo_000B20),
|
||||
define_lvl_geo(lll_geo_000B38),
|
||||
define_lvl_geo(lll_geo_000B50),
|
||||
define_lvl_geo(lll_geo_000B68),
|
||||
define_lvl_geo(lll_geo_000B80),
|
||||
define_lvl_geo(lll_geo_000B98),
|
||||
define_lvl_geo(lll_geo_000BB0),
|
||||
define_lvl_geo(lll_geo_000BC8),
|
||||
define_lvl_geo(lll_geo_000BE0),
|
||||
define_lvl_geo(lll_geo_000BF8),
|
||||
define_lvl_geo(lll_geo_000C10),
|
||||
define_lvl_geo(lll_geo_000C30),
|
||||
define_lvl_geo(lll_geo_000C50),
|
||||
define_lvl_geo(lll_geo_000C70),
|
||||
define_lvl_geo(lll_geo_000C90),
|
||||
define_lvl_geo(lll_geo_000CB0),
|
||||
define_lvl_geo(lll_geo_000CD0),
|
||||
define_lvl_geo(lll_geo_000CF0),
|
||||
define_lvl_geo(lll_geo_000D10),
|
||||
define_lvl_geo(lll_geo_000D30),
|
||||
define_lvl_geo(lll_geo_000D50),
|
||||
define_lvl_geo(lll_geo_000D70),
|
||||
define_lvl_geo(lll_geo_000D90),
|
||||
define_lvl_geo(lll_geo_000DB0),
|
||||
define_lvl_geo(lll_geo_000DD0),
|
||||
define_lvl_geo(lll_geo_000DE8),
|
||||
define_lvl_geo(lll_geo_000E00),
|
||||
define_lvl_geo(lll_geo_000EA8),
|
||||
define_lvl_geo(lll_geo_000EC0),
|
||||
define_lvl_geo(rr_geo_000660),
|
||||
define_lvl_geo(rr_geo_000678),
|
||||
define_lvl_geo(rr_geo_000690),
|
||||
define_lvl_geo(rr_geo_0006A8),
|
||||
define_lvl_geo(rr_geo_0006C0),
|
||||
define_lvl_geo(rr_geo_0006D8),
|
||||
define_lvl_geo(rr_geo_0006F0),
|
||||
define_lvl_geo(rr_geo_000708),
|
||||
define_lvl_geo(rr_geo_000720),
|
||||
define_lvl_geo(rr_geo_000738),
|
||||
define_lvl_geo(rr_geo_000758),
|
||||
define_lvl_geo(rr_geo_000770),
|
||||
define_lvl_geo(rr_geo_000788),
|
||||
define_lvl_geo(rr_geo_0007A0),
|
||||
define_lvl_geo(rr_geo_0007B8),
|
||||
define_lvl_geo(rr_geo_0007D0),
|
||||
define_lvl_geo(rr_geo_0007E8),
|
||||
define_lvl_geo(rr_geo_000800),
|
||||
define_lvl_geo(rr_geo_000818),
|
||||
define_lvl_geo(rr_geo_000830),
|
||||
define_lvl_geo(rr_geo_000848),
|
||||
define_lvl_geo(rr_geo_000860),
|
||||
define_lvl_geo(rr_geo_000878),
|
||||
define_lvl_geo(rr_geo_000890),
|
||||
define_lvl_geo(rr_geo_0008A8),
|
||||
define_lvl_geo(rr_geo_0008C0),
|
||||
define_lvl_geo(rr_geo_0008D8),
|
||||
define_lvl_geo(rr_geo_0008F0),
|
||||
define_lvl_geo(rr_geo_000908),
|
||||
define_lvl_geo(rr_geo_000920),
|
||||
define_lvl_geo(rr_geo_000940),
|
||||
define_lvl_geo(rr_geo_000958),
|
||||
define_lvl_geo(rr_geo_000970),
|
||||
define_lvl_geo(rr_geo_000988),
|
||||
define_lvl_geo(rr_geo_0009A0),
|
||||
define_lvl_geo(rr_geo_0009B8),
|
||||
define_lvl_geo(rr_geo_0009D0),
|
||||
define_lvl_geo(sl_geo_000360),
|
||||
define_lvl_geo(sl_geo_000378),
|
||||
define_lvl_geo(sl_geo_000390),
|
||||
define_lvl_geo(sl_geo_0003A8),
|
||||
define_lvl_geo(sl_geo_000484),
|
||||
define_lvl_geo(ssl_geo_0005C0),
|
||||
define_lvl_geo(ssl_geo_0005D8),
|
||||
define_lvl_geo(ssl_geo_000618),
|
||||
define_lvl_geo(ssl_geo_000630),
|
||||
define_lvl_geo(ssl_geo_000648),
|
||||
define_lvl_geo(ssl_geo_000734),
|
||||
define_lvl_geo(ssl_geo_000764),
|
||||
define_lvl_geo(ssl_geo_000794),
|
||||
define_lvl_geo(ssl_geo_0007AC),
|
||||
define_lvl_geo(ssl_geo_0007CC),
|
||||
define_lvl_geo(ssl_geo_00088C),
|
||||
define_lvl_geo(thi_geo_0005B0),
|
||||
define_lvl_geo(thi_geo_0005C8),
|
||||
define_lvl_geo(thi_geo_0005F0),
|
||||
define_lvl_geo(thi_geo_000608),
|
||||
define_lvl_geo(thi_geo_0006D4),
|
||||
define_lvl_geo(thi_geo_00079C),
|
||||
define_lvl_geo(ttc_geo_000240),
|
||||
define_lvl_geo(ttc_geo_000258),
|
||||
define_lvl_geo(ttc_geo_000270),
|
||||
define_lvl_geo(ttc_geo_000288),
|
||||
define_lvl_geo(ttc_geo_0002A8),
|
||||
define_lvl_geo(ttc_geo_0002C8),
|
||||
define_lvl_geo(ttc_geo_0002E0),
|
||||
define_lvl_geo(ttc_geo_0002F8),
|
||||
define_lvl_geo(ttc_geo_000310),
|
||||
define_lvl_geo(ttc_geo_000328),
|
||||
define_lvl_geo(ttc_geo_000340),
|
||||
define_lvl_geo(ttc_geo_000358),
|
||||
define_lvl_geo(ttc_geo_000370),
|
||||
define_lvl_geo(ttc_geo_000388),
|
||||
define_lvl_geo(ttc_geo_0003A0),
|
||||
define_lvl_geo(ttc_geo_0003B8),
|
||||
define_lvl_geo(ttm_geo_000710),
|
||||
define_lvl_geo(ttm_geo_000730),
|
||||
define_lvl_geo(ttm_geo_000748),
|
||||
define_lvl_geo(ttm_geo_000778),
|
||||
define_lvl_geo(ttm_geo_0007A8),
|
||||
define_lvl_geo(ttm_geo_0007D8),
|
||||
define_lvl_geo(ttm_geo_000808),
|
||||
define_lvl_geo(ttm_geo_000830),
|
||||
define_lvl_geo(ttm_geo_000858),
|
||||
define_lvl_geo(ttm_geo_000880),
|
||||
define_lvl_geo(ttm_geo_0008A8),
|
||||
define_lvl_geo(ttm_geo_0008D0),
|
||||
define_lvl_geo(ttm_geo_0008F8),
|
||||
define_lvl_geo(ttm_geo_000920),
|
||||
define_lvl_geo(ttm_geo_000948),
|
||||
define_lvl_geo(ttm_geo_000970),
|
||||
define_lvl_geo(ttm_geo_000990),
|
||||
define_lvl_geo(ttm_geo_0009C0),
|
||||
define_lvl_geo(ttm_geo_0009F0),
|
||||
define_lvl_geo(ttm_geo_000A18),
|
||||
define_lvl_geo(ttm_geo_000A40),
|
||||
define_lvl_geo(ttm_geo_000A70),
|
||||
define_lvl_geo(ttm_geo_000B5C),
|
||||
define_lvl_geo(ttm_geo_000BEC),
|
||||
define_lvl_geo(ttm_geo_000C84),
|
||||
define_lvl_geo(ttm_geo_000D14),
|
||||
define_lvl_geo(ttm_geo_000D4C),
|
||||
define_lvl_geo(ttm_geo_000D84),
|
||||
define_lvl_geo(ttm_geo_000DBC),
|
||||
define_lvl_geo(ttm_geo_000DF4),
|
||||
define_lvl_geo(wdw_geo_000580),
|
||||
define_lvl_geo(wdw_geo_000598),
|
||||
define_lvl_geo(wdw_geo_0005C0),
|
||||
define_lvl_geo(wdw_geo_0005E8),
|
||||
define_lvl_geo(wdw_geo_000610),
|
||||
define_lvl_geo(wdw_geo_000628),
|
||||
define_lvl_geo(wdw_geo_000640),
|
||||
define_lvl_geo(wdw_geo_000658),
|
||||
define_lvl_geo(wdw_geo_000724),
|
||||
define_lvl_geo(wf_geo_0007E0),
|
||||
define_lvl_geo(wf_geo_000820),
|
||||
define_lvl_geo(wf_geo_000860),
|
||||
|
@ -640,10 +1071,6 @@ static const void *sDynosLevelGeos[] = {
|
|||
define_lvl_geo(wf_geo_000BC8),
|
||||
define_lvl_geo(wf_geo_000BE0),
|
||||
define_lvl_geo(wf_geo_000BF8),
|
||||
define_lvl_geo(bob_geo_000440),
|
||||
define_lvl_geo(bob_geo_000458),
|
||||
define_lvl_geo(bob_geo_000470),
|
||||
define_lvl_geo(bob_geo_000488),
|
||||
};
|
||||
|
||||
s32 DynOS_Lvl_GetGeoCount() {
|
||||
|
@ -707,6 +1134,7 @@ LevelScript* DynOS_Lvl_Get(const char* levelName) {
|
|||
static u32 index = 0; // DO NOT COMMIT
|
||||
index = (index + 1) % sDynosCustomLevelScripts.Count(); // DO NOT COMMIT
|
||||
auto& scripts = sDynosCustomLevelScripts[index].second->mLevelScripts; // DO NOT COMMIT
|
||||
Print("Going to level: %s\n", scripts[scripts.Count() - 1]->mName); // DO NOT COMMIT
|
||||
return scripts[scripts.Count() - 1]->mData; // DO NOT COMMIT
|
||||
|
||||
for (s32 i = 0; i < sDynosCustomLevelScripts.Count(); ++i) {
|
||||
|
|
Loading…
Reference in a new issue