mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-25 13:35:12 +00:00
Added vanilla lvl cols to level gen, changed how pointer offsets are saved
This commit is contained in:
parent
8085f53e5a
commit
2fda92a8de
9 changed files with 407 additions and 65 deletions
|
@ -461,6 +461,7 @@ struct GfxData : NoCopy {
|
||||||
s32 mModIndex = 0;
|
s32 mModIndex = 0;
|
||||||
SysPath mPackFolder;
|
SysPath mPackFolder;
|
||||||
Array<void *> mPointerList;
|
Array<void *> mPointerList;
|
||||||
|
Array<Pair<const void*, const void*>> mPointerOffsetList;
|
||||||
Array<void *> mLuaPointerList;
|
Array<void *> mLuaPointerList;
|
||||||
Array<String> mLuaTokenList;
|
Array<String> mLuaTokenList;
|
||||||
GfxContext mGfxContext;
|
GfxContext mGfxContext;
|
||||||
|
@ -749,6 +750,8 @@ const void* DynOS_Mgr_VanillaScriptPtr_GetFromName(const char* aDataName);
|
||||||
const char* DynOS_Mgr_VanillaScriptPtr_GetFromData(const void* aData);
|
const char* DynOS_Mgr_VanillaScriptPtr_GetFromData(const void* aData);
|
||||||
const GeoLayout* DynOS_Mgr_VanillaLvlGeo_GetFromName(const char* aDataName);
|
const GeoLayout* DynOS_Mgr_VanillaLvlGeo_GetFromName(const char* aDataName);
|
||||||
const char* DynOS_Mgr_VanillaLvlGeo_GetFromData(const GeoLayout* aData);
|
const char* DynOS_Mgr_VanillaLvlGeo_GetFromData(const GeoLayout* aData);
|
||||||
|
const Collision* DynOS_Mgr_VanillaLvlCol_GetFromName(const char* aDataName);
|
||||||
|
const char* DynOS_Mgr_VanillaLvlCol_GetFromData(const Collision* aData);
|
||||||
const Texture* DynOS_Mgr_VanillaTex_GetFromName(const char* aDataName);
|
const Texture* DynOS_Mgr_VanillaTex_GetFromName(const char* aDataName);
|
||||||
const char* DynOS_Mgr_VanillaTex_GetFromData(const Texture* aData);
|
const char* DynOS_Mgr_VanillaTex_GetFromData(const Texture* aData);
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,7 @@ static void DynOS_Actor_Generate(const SysPath &aPackFolder, Array<Pair<u64, Str
|
||||||
_GfxData->mModelIdentifier = _GeoNode->mModelIdentifier;
|
_GfxData->mModelIdentifier = _GeoNode->mModelIdentifier;
|
||||||
_GfxData->mPackFolder = aPackFolder;
|
_GfxData->mPackFolder = aPackFolder;
|
||||||
_GfxData->mPointerList = { NULL }; // The NULL pointer is needed, so we add it here
|
_GfxData->mPointerList = { NULL }; // The NULL pointer is needed, so we add it here
|
||||||
|
_GfxData->mPointerOffsetList = { };
|
||||||
_GfxData->mLuaPointerList = { };
|
_GfxData->mLuaPointerList = { };
|
||||||
_GfxData->mLuaTokenList = { };
|
_GfxData->mLuaTokenList = { };
|
||||||
_GfxData->mGfxContext.mCurrentTexture = NULL;
|
_GfxData->mGfxContext.mCurrentTexture = NULL;
|
||||||
|
@ -213,6 +214,10 @@ static void DynOS_Actor_Generate(const SysPath &aPackFolder, Array<Pair<u64, Str
|
||||||
ClearGfxDataNodes(_GfxData->mDisplayLists);
|
ClearGfxDataNodes(_GfxData->mDisplayLists);
|
||||||
ClearGfxDataNodes(_GfxData->mGeoLayouts);
|
ClearGfxDataNodes(_GfxData->mGeoLayouts);
|
||||||
ClearGfxDataNodes(_GfxData->mCollisions);
|
ClearGfxDataNodes(_GfxData->mCollisions);
|
||||||
|
_GfxData->mPointerList.Clear();
|
||||||
|
_GfxData->mPointerOffsetList.Clear();
|
||||||
|
_GfxData->mLuaPointerList.Clear();
|
||||||
|
_GfxData->mLuaTokenList.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,15 +22,9 @@ void ClearGfxDataNodes(DataNodes<T> &aDataNodes) {
|
||||||
#define COLLISION_SIZE_PER_TOKEN 4
|
#define COLLISION_SIZE_PER_TOKEN 4
|
||||||
|
|
||||||
#define col_constant(x) if (_Arg == #x) { return (s16) (x); }
|
#define col_constant(x) if (_Arg == #x) { return (s16) (x); }
|
||||||
static s16 ParseColSymbolArg(GfxData* aGfxData, DataNode<Collision>* aNode, u64& aTokenIndex) {
|
|
||||||
const String& _Arg = aNode->mTokens[aTokenIndex++];
|
|
||||||
|
|
||||||
// Integers
|
static s64 DynOS_Col_ParseConstants(const String& _Arg, bool* found) {
|
||||||
bool integerFound = false;
|
*found = true;
|
||||||
s64 integerValue = DynOS_Misc_ParseInteger(_Arg, &integerFound);
|
|
||||||
if (integerFound) {
|
|
||||||
return integerValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Surface constants
|
// Surface constants
|
||||||
col_constant(SURFACE_DEFAULT);
|
col_constant(SURFACE_DEFAULT);
|
||||||
|
@ -278,8 +272,33 @@ static s16 ParseColSymbolArg(GfxData* aGfxData, DataNode<Collision>* aNode, u64&
|
||||||
col_constant(special_key_door);
|
col_constant(special_key_door);
|
||||||
col_constant(special_null_end);
|
col_constant(special_null_end);
|
||||||
|
|
||||||
// Other constants
|
*found = false;
|
||||||
col_constant(NULL);
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static s16 ParseColSymbolArg(GfxData* aGfxData, DataNode<Collision>* aNode, u64& aTokenIndex) {
|
||||||
|
const String& _Arg = aNode->mTokens[aTokenIndex++];
|
||||||
|
|
||||||
|
// Integers
|
||||||
|
bool integerFound = false;
|
||||||
|
s64 integerValue = DynOS_Misc_ParseInteger(_Arg, &integerFound);
|
||||||
|
if (integerFound) {
|
||||||
|
return integerValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
bool constantFound = false;
|
||||||
|
s64 constantValue = DynOS_Col_ParseConstants(_Arg, &constantFound);
|
||||||
|
if (constantFound) {
|
||||||
|
return constantValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursive descent parsing
|
||||||
|
bool rdSuccess = false;
|
||||||
|
s64 rdValue = DynOS_RecursiveDescent_Parse(_Arg.begin(), &rdSuccess, DynOS_Col_ParseConstants);
|
||||||
|
if (rdSuccess) {
|
||||||
|
return rdValue;
|
||||||
|
}
|
||||||
|
|
||||||
// Unknown
|
// Unknown
|
||||||
PrintError(" ERROR: Unknown col arg: %s", _Arg.begin());
|
PrintError(" ERROR: Unknown col arg: %s", _Arg.begin());
|
||||||
|
|
|
@ -393,7 +393,12 @@ static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pToke
|
||||||
// Vertex arrays
|
// Vertex arrays
|
||||||
for (auto& _Node : aGfxData->mVertices) {
|
for (auto& _Node : aGfxData->mVertices) {
|
||||||
if (_Arg == _Node->mName) {
|
if (_Arg == _Node->mName) {
|
||||||
return (s64) (DynOS_Vtx_Parse(aGfxData, _Node)->mData + _Offset);
|
auto base = DynOS_Vtx_Parse(aGfxData, _Node)->mData;
|
||||||
|
auto data = base + _Offset;
|
||||||
|
if (_Offset != 0) {
|
||||||
|
aGfxData->mPointerOffsetList.Add({ (const void*)data, (const void*)base });
|
||||||
|
}
|
||||||
|
return (s64) data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1404,7 +1404,7 @@ s64 DynOS_Lvl_ParseLevelScriptConstants(const String& _Arg, bool* found) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static LevelScript ParseLevelScriptSymbolArgInternal(GfxData* aGfxData, DataNode<LevelScript>* aNode, u64& aTokenIndex, bool* found) {
|
static LevelScript ParseLevelScriptSymbolArgInternal(GfxData* aGfxData, DataNode<LevelScript>* aNode, u64& aTokenIndex, bool* found) {
|
||||||
const String& _Arg = aNode->mTokens[aTokenIndex++];
|
String _Arg = aNode->mTokens[aTokenIndex++];
|
||||||
|
|
||||||
// Integers
|
// Integers
|
||||||
bool integerFound = false;
|
bool integerFound = false;
|
||||||
|
@ -1413,6 +1413,14 @@ static LevelScript ParseLevelScriptSymbolArgInternal(GfxData* aGfxData, DataNode
|
||||||
return integerValue;
|
return integerValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Offset
|
||||||
|
s32 _Offset = 0;
|
||||||
|
s32 _Plus = _Arg.Find('+');
|
||||||
|
if (_Plus != -1) {
|
||||||
|
_Offset = _Arg.SubString(_Plus + 1).ParseInt();
|
||||||
|
_Arg = _Arg.SubString(0, _Plus);
|
||||||
|
}
|
||||||
|
|
||||||
// Lvl functions
|
// Lvl functions
|
||||||
void *_LvlFunctionPtr = DynOS_Lvl_GetFunctionPointerFromName(_Arg);
|
void *_LvlFunctionPtr = DynOS_Lvl_GetFunctionPointerFromName(_Arg);
|
||||||
if (_LvlFunctionPtr != NULL) {
|
if (_LvlFunctionPtr != NULL) {
|
||||||
|
@ -1428,7 +1436,12 @@ static LevelScript ParseLevelScriptSymbolArgInternal(GfxData* aGfxData, DataNode
|
||||||
// Level Scripts
|
// Level Scripts
|
||||||
for (auto& _Node : aGfxData->mLevelScripts) {
|
for (auto& _Node : aGfxData->mLevelScripts) {
|
||||||
if (_Arg == _Node->mName) {
|
if (_Arg == _Node->mName) {
|
||||||
return (LevelScript) DynOS_Lvl_Parse(aGfxData, _Node, false)->mData;
|
auto base = DynOS_Lvl_Parse(aGfxData, _Node, false)->mData;
|
||||||
|
auto data = base + _Offset;
|
||||||
|
if (_Offset != 0) {
|
||||||
|
aGfxData->mPointerOffsetList.Add({ data, base });
|
||||||
|
}
|
||||||
|
return (LevelScript) data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1496,6 +1509,12 @@ static LevelScript ParseLevelScriptSymbolArgInternal(GfxData* aGfxData, DataNode
|
||||||
return (LevelScript)vanillaGeo;
|
return (LevelScript)vanillaGeo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Vanilla Lvl Cols
|
||||||
|
auto vanillaCol = DynOS_Mgr_VanillaLvlCol_GetFromName(_Arg.begin());
|
||||||
|
if (vanillaCol != NULL) {
|
||||||
|
return (LevelScript)vanillaCol;
|
||||||
|
}
|
||||||
|
|
||||||
// Recursive descent parsing
|
// Recursive descent parsing
|
||||||
bool rdSuccess = false;
|
bool rdSuccess = false;
|
||||||
s64 rdValue = DynOS_RecursiveDescent_Parse(_Arg.begin(), &rdSuccess, DynOS_Lvl_ParseLevelScriptConstants);
|
s64 rdValue = DynOS_RecursiveDescent_Parse(_Arg.begin(), &rdSuccess, DynOS_Lvl_ParseLevelScriptConstants);
|
||||||
|
@ -1609,9 +1628,12 @@ static LevelScript ParseLevelScriptSymbolArg(GfxData* aGfxData, DataNode<LevelSc
|
||||||
return; \
|
return; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define lvl_symbol_noop(symb, skipCount) \
|
#define lvl_symbol_noop_3(symb) \
|
||||||
if (_Symbol == #symb) { \
|
if (_Symbol == #symb) { \
|
||||||
aTokenIndex += skipCount; \
|
aTokenIndex += 3; \
|
||||||
|
LevelScript _Ls[] = { symb(0, 0, 0) }; \
|
||||||
|
memcpy(aHead, _Ls, sizeof(_Ls)); \
|
||||||
|
aHead += (sizeof(_Ls) / sizeof(_Ls[0])); \
|
||||||
return; \
|
return; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1650,10 +1672,10 @@ static void ParseLevelScriptSymbol(GfxData* aGfxData, DataNode<LevelScript>* aNo
|
||||||
lvl_symbol_0(PUSH_POOL);
|
lvl_symbol_0(PUSH_POOL);
|
||||||
lvl_symbol_0(POP_POOL);
|
lvl_symbol_0(POP_POOL);
|
||||||
lvl_symbol_3(FIXED_LOAD, 1, 2, 3);
|
lvl_symbol_3(FIXED_LOAD, 1, 2, 3);
|
||||||
lvl_symbol_noop(LOAD_RAW, 3);
|
lvl_symbol_noop_3(LOAD_RAW);
|
||||||
lvl_symbol_noop(LOAD_MIO0, 3);
|
lvl_symbol_noop_3(LOAD_MIO0);
|
||||||
lvl_symbol_1(LOAD_MARIO_HEAD, 0);
|
lvl_symbol_1(LOAD_MARIO_HEAD, 0);
|
||||||
lvl_symbol_noop(LOAD_MIO0_TEXTURE, 3);
|
lvl_symbol_noop_3(LOAD_MIO0_TEXTURE);
|
||||||
|
|
||||||
// levels
|
// levels
|
||||||
lvl_symbol_0(INIT_LEVEL);
|
lvl_symbol_0(INIT_LEVEL);
|
||||||
|
@ -1968,6 +1990,13 @@ static DataNode<LevelScript>* DynOS_Lvl_Load(FILE *aFile, GfxData *aGfxData) {
|
||||||
// Data
|
// Data
|
||||||
_Node->mSize = ReadBytes<u32>(aFile);
|
_Node->mSize = ReadBytes<u32>(aFile);
|
||||||
_Node->mData = New<LevelScript>(_Node->mSize);
|
_Node->mData = New<LevelScript>(_Node->mSize);
|
||||||
|
|
||||||
|
// Add it
|
||||||
|
if (aGfxData != NULL) {
|
||||||
|
aGfxData->mLevelScripts.Add(_Node);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read it
|
||||||
for (u32 i = 0; i != _Node->mSize; ++i) {
|
for (u32 i = 0; i != _Node->mSize; ++i) {
|
||||||
u32 _Value = ReadBytes<u32>(aFile);
|
u32 _Value = ReadBytes<u32>(aFile);
|
||||||
void *_Ptr = DynOS_Pointer_Load(aFile, aGfxData, _Value, true);
|
void *_Ptr = DynOS_Pointer_Load(aFile, aGfxData, _Value, true);
|
||||||
|
@ -1978,11 +2007,6 @@ static DataNode<LevelScript>* DynOS_Lvl_Load(FILE *aFile, GfxData *aGfxData) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add it
|
|
||||||
if (aGfxData != NULL) {
|
|
||||||
aGfxData->mLevelScripts.Add(_Node);
|
|
||||||
}
|
|
||||||
|
|
||||||
return _Node;
|
return _Node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2048,6 +2072,7 @@ static bool DynOS_Lvl_GeneratePack_Internal(const SysPath &aPackFolder, Array<Pa
|
||||||
_GfxData->mModelIdentifier = _LvlRoot->mModelIdentifier;
|
_GfxData->mModelIdentifier = _LvlRoot->mModelIdentifier;
|
||||||
_GfxData->mPackFolder = aPackFolder;
|
_GfxData->mPackFolder = aPackFolder;
|
||||||
_GfxData->mPointerList = { NULL }; // The NULL pointer is needed, so we add it here
|
_GfxData->mPointerList = { NULL }; // The NULL pointer is needed, so we add it here
|
||||||
|
_GfxData->mPointerOffsetList = { };
|
||||||
_GfxData->mLuaPointerList = { };
|
_GfxData->mLuaPointerList = { };
|
||||||
_GfxData->mLuaTokenList = { };
|
_GfxData->mLuaTokenList = { };
|
||||||
_GfxData->mGfxContext.mCurrentTexture = NULL;
|
_GfxData->mGfxContext.mCurrentTexture = NULL;
|
||||||
|
@ -2097,6 +2122,10 @@ static bool DynOS_Lvl_GeneratePack_Internal(const SysPath &aPackFolder, Array<Pa
|
||||||
ClearLvlDataNodes(_GfxData->mRooms);
|
ClearLvlDataNodes(_GfxData->mRooms);
|
||||||
ClearLvlDataNodes(_GfxData->mGenerateGeoLayouts);
|
ClearLvlDataNodes(_GfxData->mGenerateGeoLayouts);
|
||||||
ClearLvlDataNodes(_GfxData->mGenerateLevelScripts);
|
ClearLvlDataNodes(_GfxData->mGenerateLevelScripts);
|
||||||
|
_GfxData->mPointerList.Clear();
|
||||||
|
_GfxData->mPointerOffsetList.Clear();
|
||||||
|
_GfxData->mLuaPointerList.Clear();
|
||||||
|
_GfxData->mLuaTokenList.Clear();
|
||||||
generated = true;
|
generated = true;
|
||||||
}
|
}
|
||||||
return generated;
|
return generated;
|
||||||
|
|
|
@ -78,13 +78,6 @@ static PointerData GetDataFromPointer(const void* aPtr, GfxData* aGfxData) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Level scripts
|
|
||||||
for (auto& _Node : aGfxData->mLevelScripts) {
|
|
||||||
if (_Node->mData == aPtr) {
|
|
||||||
return { _Node->mName, 0 };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Macro objects
|
// Macro objects
|
||||||
for (auto& _Node : aGfxData->mMacroObjects) {
|
for (auto& _Node : aGfxData->mMacroObjects) {
|
||||||
if (_Node->mData == aPtr) {
|
if (_Node->mData == aPtr) {
|
||||||
|
@ -141,6 +134,12 @@ static PointerData GetDataFromPointer(const void* aPtr, GfxData* aGfxData) {
|
||||||
return { vanillaGeo, 0 };
|
return { vanillaGeo, 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Vanilla Lvl Cols
|
||||||
|
auto vanillaCol = DynOS_Mgr_VanillaLvlCol_GetFromData((const Collision*)aPtr);
|
||||||
|
if (vanillaCol != NULL) {
|
||||||
|
return { vanillaCol, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
// Vanilla Script Pointers
|
// Vanilla Script Pointers
|
||||||
auto vanillaScriptPtr = DynOS_Mgr_VanillaScriptPtr_GetFromData(aPtr);
|
auto vanillaScriptPtr = DynOS_Mgr_VanillaScriptPtr_GetFromData(aPtr);
|
||||||
if (vanillaScriptPtr != NULL) {
|
if (vanillaScriptPtr != NULL) {
|
||||||
|
@ -153,21 +152,35 @@ static PointerData GetDataFromPointer(const void* aPtr, GfxData* aGfxData) {
|
||||||
return { vanillaTex, 0 };
|
return { vanillaTex, 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the ones below use a saved offset
|
||||||
|
|
||||||
|
s32 _Offset = 0;
|
||||||
|
for (auto& pair : aGfxData->mPointerOffsetList) {
|
||||||
|
if (pair.first == aPtr) {
|
||||||
|
_Offset = (s32)((const LevelScript*)pair.first - (const LevelScript*)pair.second);
|
||||||
|
aPtr = pair.second;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Level scripts
|
||||||
|
for (auto& _Node : aGfxData->mLevelScripts) {
|
||||||
|
if (_Node->mData == aPtr) {
|
||||||
|
return { _Node->mName, _Offset };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Vertices
|
// Vertices
|
||||||
String _VtxArrayName = "";
|
String _VtxArrayName = "";
|
||||||
uintptr_t _VtxArrayStart = 0;
|
uintptr_t _VtxArrayStart = 0;
|
||||||
for (auto& _Node : aGfxData->mVertices) {
|
for (auto& _Node : aGfxData->mVertices) {
|
||||||
if (_Node->mData == aPtr) {
|
if (_Node->mData == aPtr) {
|
||||||
return { _Node->mName, 0 };
|
return { _Node->mName, _Offset };
|
||||||
}
|
|
||||||
if ((uintptr_t)_Node->mData <= (uintptr_t)aPtr &&
|
|
||||||
(uintptr_t)_Node->mData >= _VtxArrayStart) {
|
|
||||||
_VtxArrayName = _Node->mName;
|
|
||||||
_VtxArrayStart = (uintptr_t)_Node->mData;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { _VtxArrayName, (u32)((const Vtx*)aPtr - (const Vtx*)_VtxArrayStart) };
|
|
||||||
|
|
||||||
|
PrintError("Unable to find pointer!");
|
||||||
|
return { "", 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynOS_Pointer_Lua_Write(FILE* aFile, u32 index, GfxData* aGfxData) {
|
void DynOS_Pointer_Lua_Write(FILE* aFile, u32 index, GfxData* aGfxData) {
|
||||||
|
@ -311,7 +324,7 @@ static void *GetPointerFromData(GfxData *aGfxData, const String &aPtrName, u32 a
|
||||||
// Level scripts
|
// Level scripts
|
||||||
for (auto &_Node : aGfxData->mLevelScripts) {
|
for (auto &_Node : aGfxData->mLevelScripts) {
|
||||||
if (_Node->mName == aPtrName) {
|
if (_Node->mName == aPtrName) {
|
||||||
return (void *) _Node->mData;
|
return (void *) (_Node->mData + aPtrData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,6 +384,12 @@ static void *GetPointerFromData(GfxData *aGfxData, const String &aPtrName, u32 a
|
||||||
return (void*)vanillaGeo;
|
return (void*)vanillaGeo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Vanilla Lvl Cols
|
||||||
|
auto vanillaCol = DynOS_Mgr_VanillaLvlCol_GetFromName(aPtrName.begin());
|
||||||
|
if (vanillaCol != NULL) {
|
||||||
|
return (void*)vanillaCol;
|
||||||
|
}
|
||||||
|
|
||||||
// Vanilla Script Pointers
|
// Vanilla Script Pointers
|
||||||
auto vanillaScriptPtr = DynOS_Mgr_VanillaScriptPtr_GetFromName(aPtrName.begin());
|
auto vanillaScriptPtr = DynOS_Mgr_VanillaScriptPtr_GetFromName(aPtrName.begin());
|
||||||
if (vanillaScriptPtr != NULL) {
|
if (vanillaScriptPtr != NULL) {
|
||||||
|
|
|
@ -5,14 +5,43 @@
|
||||||
//////////
|
//////////
|
||||||
|
|
||||||
s64 DynOS_Misc_ParseInteger(const String& _Arg, bool* found) {
|
s64 DynOS_Misc_ParseInteger(const String& _Arg, bool* found) {
|
||||||
s32 x;
|
const char* argStr = _Arg.begin();
|
||||||
if ((_Arg[1] == 'x' && sscanf(_Arg.begin(), "%x", &x) == 1) || (sscanf(_Arg.begin(), "%d", &x) == 1)) {
|
if (argStr[0] == '0' && argStr[1] == 'x') {
|
||||||
*found = true;
|
// is a hex number
|
||||||
return (s64) x;
|
argStr += 2;
|
||||||
}
|
while(*argStr != '\0') {
|
||||||
|
if (*argStr >= '0' && *argStr <= '9') {
|
||||||
|
// good
|
||||||
|
} else if (*argStr >= 'a' && *argStr <= 'f') {
|
||||||
|
// good
|
||||||
|
} else if (*argStr >= 'A' && *argStr <= 'F') {
|
||||||
|
// good
|
||||||
|
} else {
|
||||||
|
// bad character
|
||||||
*found = false;
|
*found = false;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
argStr++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// is a decimal number
|
||||||
|
while(*argStr != '\0') {
|
||||||
|
if (*argStr >= '0' && *argStr <= '9') {
|
||||||
|
// good
|
||||||
|
} else if (*argStr == '-' || *argStr == '+') {
|
||||||
|
// good
|
||||||
|
} else {
|
||||||
|
// bad character
|
||||||
|
*found = false;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
argStr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*found = true;
|
||||||
|
return _Arg.ParseInt();
|
||||||
|
}
|
||||||
|
|
||||||
void DynOS_Gfx_Free(GfxData* aGfxData) {
|
void DynOS_Gfx_Free(GfxData* aGfxData) {
|
||||||
if (aGfxData) {
|
if (aGfxData) {
|
||||||
|
@ -146,19 +175,33 @@ static s64 ParseNumeric() {
|
||||||
String numeric = "";
|
String numeric = "";
|
||||||
char* c = sRdString;
|
char* c = sRdString;
|
||||||
|
|
||||||
// check for hex
|
|
||||||
if (*c == '0' && *(c+1) == 'x') {
|
if (*c == '0' && *(c+1) == 'x') {
|
||||||
|
// is hex
|
||||||
numeric.Add(*c);
|
numeric.Add(*c);
|
||||||
c++;
|
c++;
|
||||||
numeric.Add(*c);
|
numeric.Add(*c);
|
||||||
c++;
|
c++;
|
||||||
|
while (true) {
|
||||||
|
if (*c >= '0' && *c <= '9') {
|
||||||
|
// good
|
||||||
|
} else if (*c >= 'a' && *c <= 'f') {
|
||||||
|
// good
|
||||||
|
} else if (*c >= 'A' && *c <= 'F') {
|
||||||
|
// good
|
||||||
|
} else {
|
||||||
|
// bad
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
numeric.Add(*c);
|
||||||
|
c++;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
// continue adding to string
|
// is decimal
|
||||||
while (*c >= '0' && *c <= '9') {
|
while (*c >= '0' && *c <= '9') {
|
||||||
numeric.Add(*c);
|
numeric.Add(*c);
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// advance parsing
|
// advance parsing
|
||||||
sRdString = c;
|
sRdString = c;
|
||||||
|
|
|
@ -17,6 +17,7 @@ extern "C" {
|
||||||
#include "levels/castle_grounds/header.h"
|
#include "levels/castle_grounds/header.h"
|
||||||
#include "levels/castle_inside/header.h"
|
#include "levels/castle_inside/header.h"
|
||||||
#include "levels/ccm/header.h"
|
#include "levels/ccm/header.h"
|
||||||
|
#include "levels/cotmc/header.h"
|
||||||
#include "levels/ddd/header.h"
|
#include "levels/ddd/header.h"
|
||||||
#include "levels/hmc/header.h"
|
#include "levels/hmc/header.h"
|
||||||
#include "levels/jrb/header.h"
|
#include "levels/jrb/header.h"
|
||||||
|
@ -260,6 +261,7 @@ static const void* sDynosVanillaLvlGeos[] = {
|
||||||
define_vanilla_lvl_geo(ccm_geo_0004E4),
|
define_vanilla_lvl_geo(ccm_geo_0004E4),
|
||||||
define_vanilla_lvl_geo(ccm_geo_00051C),
|
define_vanilla_lvl_geo(ccm_geo_00051C),
|
||||||
define_vanilla_lvl_geo(ccm_geo_0005E8),
|
define_vanilla_lvl_geo(ccm_geo_0005E8),
|
||||||
|
define_vanilla_lvl_geo(cotmc_geo_0001A0),
|
||||||
define_vanilla_lvl_geo(ddd_geo_000450),
|
define_vanilla_lvl_geo(ddd_geo_000450),
|
||||||
define_vanilla_lvl_geo(ddd_geo_000478),
|
define_vanilla_lvl_geo(ddd_geo_000478),
|
||||||
define_vanilla_lvl_geo(ddd_geo_0004A0),
|
define_vanilla_lvl_geo(ddd_geo_0004A0),
|
||||||
|
@ -575,6 +577,224 @@ const char* DynOS_Mgr_VanillaLvlGeo_GetFromData(const GeoLayout* aData) {
|
||||||
MGR_FIND_NAME(sDynosVanillaLvlGeos);
|
MGR_FIND_NAME(sDynosVanillaLvlGeos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// Level Cols //
|
||||||
|
////////////////
|
||||||
|
|
||||||
|
#define define_vanilla_lvl_col(col) (const void*) #col, (const void*) col
|
||||||
|
static const void* sDynosVanillaLvlCols[] = {
|
||||||
|
define_vanilla_lvl_col(bbh_seg7_collision_07026B1C),
|
||||||
|
define_vanilla_lvl_col(bbh_seg7_collision_coffin),
|
||||||
|
define_vanilla_lvl_col(bbh_seg7_collision_haunted_bookshelf),
|
||||||
|
define_vanilla_lvl_col(bbh_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(bbh_seg7_collision_merry_go_round),
|
||||||
|
define_vanilla_lvl_col(bbh_seg7_collision_mesh_elevator),
|
||||||
|
define_vanilla_lvl_col(bbh_seg7_collision_staircase_step),
|
||||||
|
define_vanilla_lvl_col(bbh_seg7_collision_tilt_floor_platform),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700F688),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700F70C),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700F7F0),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700F898),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700F91C),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700FA3C),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700FB5C),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700FC7C),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_0700FD9C),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(bitdw_seg7_collision_moving_pyramid),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_07015124),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_07015288),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_07015714),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_07015768),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_070157E0),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_07015928),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_inverted_pyramid),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_sinking_cage_platform),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_sinking_platform),
|
||||||
|
define_vanilla_lvl_col(bitfs_seg7_collision_squishable_platform),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701A9A0),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701AA0C),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701AA84),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701AC28),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701ACAC),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701AD54),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701ADD8),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701AE5C),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701B0D4),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701B26C),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701B404),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701B59C),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_0701B734),
|
||||||
|
define_vanilla_lvl_col(bits_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(bob_seg7_collision_bridge),
|
||||||
|
define_vanilla_lvl_col(bob_seg7_collision_chain_chomp_gate),
|
||||||
|
define_vanilla_lvl_col(bob_seg7_collision_gate),
|
||||||
|
define_vanilla_lvl_col(bob_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(bowser_1_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(bowser_2_seg7_collision_lava),
|
||||||
|
define_vanilla_lvl_col(bowser_2_seg7_collision_tilting_platform),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004B94),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004C18),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004C9C),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004D20),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004DA4),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004E28),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004EAC),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004F30),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07004FB4),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_07005038),
|
||||||
|
define_vanilla_lvl_col(bowser_3_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(castle_courtyard_seg7_collision),
|
||||||
|
define_vanilla_lvl_col(castle_grounds_seg7_collision_cannon_grill),
|
||||||
|
define_vanilla_lvl_col(castle_grounds_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(castle_grounds_seg7_collision_moat_grills),
|
||||||
|
define_vanilla_lvl_col(ccm_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(ccm_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(ccm_seg7_collision_070163F8),
|
||||||
|
define_vanilla_lvl_col(cotmc_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(ddd_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(ddd_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(ddd_seg7_collision_bowser_sub_door),
|
||||||
|
define_vanilla_lvl_col(ddd_seg7_collision_submarine),
|
||||||
|
define_vanilla_lvl_col(hmc_seg7_collision_0702B65C),
|
||||||
|
define_vanilla_lvl_col(hmc_seg7_collision_controllable_platform_sub),
|
||||||
|
define_vanilla_lvl_col(hmc_seg7_collision_controllable_platform),
|
||||||
|
define_vanilla_lvl_col(hmc_seg7_collision_elevator),
|
||||||
|
define_vanilla_lvl_col(hmc_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(inside_castle_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(inside_castle_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(inside_castle_seg7_area_3_collision),
|
||||||
|
define_vanilla_lvl_col(inside_castle_seg7_collision_ddd_warp_2),
|
||||||
|
define_vanilla_lvl_col(inside_castle_seg7_collision_ddd_warp),
|
||||||
|
define_vanilla_lvl_col(inside_castle_seg7_collision_floor_trap),
|
||||||
|
define_vanilla_lvl_col(inside_castle_seg7_collision_star_door),
|
||||||
|
define_vanilla_lvl_col(inside_castle_seg7_collision_water_level_pillar),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_0700CEF0),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_0700D1DC),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_floating_box),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_floating_platform),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_in_sunken_ship_2),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_in_sunken_ship_3),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_in_sunken_ship),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_pillar_base),
|
||||||
|
define_vanilla_lvl_col(jrb_seg7_collision_rock_solid),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_0701D21C),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_drawbridge),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_falling_wall),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_floating_block),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_hexagonal_platform),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_inverted_pyramid),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_octagonal_moving_platform),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_pitoune),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_puzzle_piece),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_rotating_fire_bars),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_rotating_platform),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_sinking_pyramids),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_slow_tilting_platform),
|
||||||
|
define_vanilla_lvl_col(lll_seg7_collision_wood_piece),
|
||||||
|
define_vanilla_lvl_col(pss_seg7_collision),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_07029038),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_07029508),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_070295F8),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_0702967C),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_07029750),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_07029858),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_07029924),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_07029C1C),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_07029FA4),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_0702A32C),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_0702A6B4),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_donut_platform),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_elevator_platform),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_pendulum),
|
||||||
|
define_vanilla_lvl_col(rr_seg7_collision_rotating_platform_with_fire),
|
||||||
|
define_vanilla_lvl_col(sa_seg7_collision),
|
||||||
|
define_vanilla_lvl_col(sl_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(sl_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(sl_seg7_collision_pound_explodes),
|
||||||
|
define_vanilla_lvl_col(sl_seg7_collision_sliding_snow_mound),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_area_3_collision),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_0702808C),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_07028274),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_070282F8),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_07028370),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_070284B0),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_grindel),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_pyramid_elevator),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_pyramid_top),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_spindel),
|
||||||
|
define_vanilla_lvl_col(ssl_seg7_collision_tox_box),
|
||||||
|
define_vanilla_lvl_col(thi_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(thi_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(thi_seg7_area_3_collision),
|
||||||
|
define_vanilla_lvl_col(thi_seg7_collision_top_trap),
|
||||||
|
define_vanilla_lvl_col(totwc_seg7_collision),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_07014F70),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_07015008),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_070152B4),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_070153E0),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_07015584),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_07015650),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_07015754),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_070157D8),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_clock_main_rotation),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_clock_pendulum),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_clock_platform),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_level),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_rotating_clock_platform2),
|
||||||
|
define_vanilla_lvl_col(ttc_seg7_collision_sliding_surface),
|
||||||
|
define_vanilla_lvl_col(ttm_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(ttm_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(ttm_seg7_area_3_collision),
|
||||||
|
define_vanilla_lvl_col(ttm_seg7_area_4_collision),
|
||||||
|
define_vanilla_lvl_col(ttm_seg7_collision_pitoune_2),
|
||||||
|
define_vanilla_lvl_col(ttm_seg7_collision_podium_warp),
|
||||||
|
define_vanilla_lvl_col(ttm_seg7_collision_ukiki_cage),
|
||||||
|
define_vanilla_lvl_col(vcutm_seg7_collision_0700AC44),
|
||||||
|
define_vanilla_lvl_col(vcutm_seg7_collision),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_area_1_collision),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_area_2_collision),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_collision_070184C8),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_collision_07018528),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_collision_070186B4),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_collision_arrow_lift),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_collision_express_elevator_platform),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_collision_rect_floating_platform),
|
||||||
|
define_vanilla_lvl_col(wdw_seg7_collision_square_floating_platform),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_070102D8),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_breakable_wall_2),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_breakable_wall),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_bullet_bill_cannon),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_clocklike_rotation),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_kickable_board),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_large_bomp),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_platform),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_rotating_platform),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_sliding_brick_platform),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_small_bomp),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_tower_door),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_tower),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_trapezoid),
|
||||||
|
define_vanilla_lvl_col(wf_seg7_collision_tumbling_bridge),
|
||||||
|
define_vanilla_lvl_col(wmotr_seg7_collision),
|
||||||
|
};
|
||||||
|
|
||||||
|
const Collision* DynOS_Mgr_VanillaLvlCol_GetFromName(const char* aDataName) {
|
||||||
|
MGR_FIND_DATA(sDynosVanillaLvlCols, (const Collision*));
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* DynOS_Mgr_VanillaLvlCol_GetFromData(const Collision* aData) {
|
||||||
|
MGR_FIND_NAME(sDynosVanillaLvlCols);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////
|
//////////////
|
||||||
// Textures //
|
// Textures //
|
||||||
//////////////
|
//////////////
|
||||||
|
|
|
@ -558,31 +558,30 @@ void alloc_surface_pools(void) {
|
||||||
/**
|
/**
|
||||||
* Get the size of the terrain data, to get the correct size when copying later.
|
* Get the size of the terrain data, to get the correct size when copying later.
|
||||||
*/
|
*/
|
||||||
u32 get_area_terrain_size(s16 *data) {
|
u32 get_area_terrain_size(s16 *terrainData) {
|
||||||
s16 *startPos = data;
|
s16 *startPos = terrainData;
|
||||||
s32 end = FALSE;
|
s32 end = FALSE;
|
||||||
s16 terrainLoadType;
|
s16 terrainLoadType;
|
||||||
s32 numVertices;
|
s32 numVertices;
|
||||||
s32 numRegions;
|
s32 numRegions;
|
||||||
s32 numSurfaces;
|
s32 numSurfaces;
|
||||||
s16 hasForce;
|
s16 hasForce;
|
||||||
|
|
||||||
while (!end) {
|
while (!end) {
|
||||||
terrainLoadType = *data++;
|
terrainLoadType = *terrainData++;
|
||||||
|
|
||||||
switch (terrainLoadType) {
|
switch (terrainLoadType) {
|
||||||
case TERRAIN_LOAD_VERTICES:
|
case TERRAIN_LOAD_VERTICES:
|
||||||
numVertices = *data++;
|
numVertices = *terrainData++;
|
||||||
data += 3 * numVertices;
|
terrainData += 3 * numVertices;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TERRAIN_LOAD_OBJECTS:
|
case TERRAIN_LOAD_OBJECTS:
|
||||||
data += get_special_objects_size(data);
|
terrainData += get_special_objects_size(terrainData);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TERRAIN_LOAD_ENVIRONMENT:
|
case TERRAIN_LOAD_ENVIRONMENT:
|
||||||
numRegions = *data++;
|
numRegions = *terrainData++;
|
||||||
data += 6 * numRegions;
|
terrainData += 6 * numRegions;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TERRAIN_LOAD_CONTINUE:
|
case TERRAIN_LOAD_CONTINUE:
|
||||||
|
@ -593,14 +592,14 @@ u32 get_area_terrain_size(s16 *data) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
numSurfaces = *data++;
|
numSurfaces = *terrainData++;
|
||||||
hasForce = surface_has_force(terrainLoadType);
|
hasForce = surface_has_force(terrainLoadType);
|
||||||
data += (3 + hasForce) * numSurfaces;
|
terrainData += (3 + hasForce) * numSurfaces;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return data - startPos;
|
return terrainData - startPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue