Path: blob/master/RSDKv5/RSDK/Scene/Legacy/v3/ObjectLegacyv3.cpp
1177 views
1int32 RSDK::Legacy::v3::objectLoop = 0;2int32 RSDK::Legacy::v3::curObjectType = 0;3RSDK::Legacy::v3::Entity RSDK::Legacy::v3::objectEntityList[LEGACY_v3_ENTITY_COUNT];45char RSDK::Legacy::v3::typeNames[LEGACY_v3_OBJECT_COUNT][0x40];67void RSDK::Legacy::v3::SetObjectTypeName(const char *objectName, int32 objectID)8{9int32 objNameID = 0;10int32 typeNameID = 0;11while (objectName[objNameID]) {12if (objectName[objNameID] != ' ')13typeNames[objectID][typeNameID++] = objectName[objNameID];14++objNameID;15}16typeNames[objectID][typeNameID] = 0;17PrintLog(PRINT_NORMAL, "Set Object (%d) name to: %s", objectID, objectName);18}1920void RSDK::Legacy::v3::ProcessStartupObjects()21{22scriptFrameCount = 0;23ClearAnimationData();24activePlayer = 0;25activePlayerCount = 1;26scriptEng.arrayPosition[2] = LEGACY_v3_TEMPENTITY_START;2728Entity *entity = &objectEntityList[LEGACY_v3_TEMPENTITY_START];29for (int32 i = 0; i < LEGACY_v3_OBJECT_COUNT; ++i) {30ObjectScript *scriptInfo = &objectScriptList[i];31objectLoop = LEGACY_v3_TEMPENTITY_START;32curObjectType = i;33scriptInfo->frameListOffset = scriptFrameCount;34scriptInfo->spriteSheetID = 0;35entity->type = i;36if (scriptCode[scriptInfo->subStartup.scriptCodePtr] > 0)37ProcessScript(scriptInfo->subStartup.scriptCodePtr, scriptInfo->subStartup.jumpTablePtr, SUB_SETUP);38scriptInfo->frameCount = scriptFrameCount - scriptInfo->frameListOffset;39}40entity->type = 0;41curObjectType = 0;42}4344void RSDK::Legacy::v3::ProcessObjects()45{46for (int32 i = 0; i < LEGACY_DRAWLAYER_COUNT; ++i) drawListEntries[i].listSize = 0;4748for (objectLoop = 0; objectLoop < LEGACY_v3_ENTITY_COUNT; ++objectLoop) {49bool active = false;50int32 x = 0, y = 0;51Entity *entity = &objectEntityList[objectLoop];52switch (entity->priority) {53case PRIORITY_BOUNDS:54x = entity->XPos >> 16;55y = entity->YPos >> 16;56active = x > xScrollOffset - OBJECT_BORDER_X1 && x < OBJECT_BORDER_X2 + xScrollOffset && y > yScrollOffset - OBJECT_BORDER_Y157&& y < yScrollOffset + OBJECT_BORDER_Y2;58break;5960case PRIORITY_ACTIVE:61case PRIORITY_ALWAYS: active = true; break;6263case PRIORITY_XBOUNDS:64x = entity->XPos >> 16;65active = x > xScrollOffset - OBJECT_BORDER_X1 && x < OBJECT_BORDER_X2 + xScrollOffset;66break;6768case PRIORITY_BOUNDS_DESTROY:69x = entity->XPos >> 16;70y = entity->YPos >> 16;71if (x <= xScrollOffset - OBJECT_BORDER_X1 || x >= OBJECT_BORDER_X2 + xScrollOffset || y <= yScrollOffset - OBJECT_BORDER_Y172|| y >= yScrollOffset + OBJECT_BORDER_Y2) {73active = false;74entity->type = OBJ_TYPE_BLANKOBJECT;75}76else {77active = true;78}79break;8081case PRIORITY_INACTIVE: active = false; break;8283default: break;84}8586if (active && entity->type > OBJ_TYPE_BLANKOBJECT) {87ObjectScript *scriptInfo = &objectScriptList[entity->type];88activePlayer = 0;89if (scriptCode[scriptInfo->subMain.scriptCodePtr] > 0)90ProcessScript(scriptInfo->subMain.scriptCodePtr, scriptInfo->subMain.jumpTablePtr, SUB_MAIN);91if (scriptCode[scriptInfo->subPlayerInteraction.scriptCodePtr] > 0) {92while (activePlayer < activePlayerCount) {93if (playerList[activePlayer].objectInteractions)94ProcessScript(scriptInfo->subPlayerInteraction.scriptCodePtr, scriptInfo->subPlayerInteraction.jumpTablePtr,95SUB_PLAYERINTERACTION);96++activePlayer;97}98}99100if (entity->drawOrder < LEGACY_DRAWLAYER_COUNT)101drawListEntries[entity->drawOrder].entityRefs[drawListEntries[entity->drawOrder].listSize++] = objectLoop;102}103}104}105106void RSDK::Legacy::v3::ProcessPausedObjects()107{108for (int32 i = 0; i < LEGACY_DRAWLAYER_COUNT; ++i) drawListEntries[i].listSize = 0;109110for (objectLoop = 0; objectLoop < LEGACY_v3_ENTITY_COUNT; ++objectLoop) {111Entity *entity = &objectEntityList[objectLoop];112113if (entity->priority == PRIORITY_ALWAYS && entity->type > OBJ_TYPE_BLANKOBJECT) {114ObjectScript *scriptInfo = &objectScriptList[entity->type];115activePlayer = 0;116if (scriptCode[scriptInfo->subMain.scriptCodePtr] > 0)117ProcessScript(scriptInfo->subMain.scriptCodePtr, scriptInfo->subMain.jumpTablePtr, SUB_MAIN);118119if (scriptCode[scriptInfo->subPlayerInteraction.scriptCodePtr] > 0) {120while (activePlayer < LEGACY_v3_PLAYER_COUNT) {121if (playerList[activePlayer].objectInteractions)122ProcessScript(scriptInfo->subPlayerInteraction.scriptCodePtr, scriptInfo->subPlayerInteraction.jumpTablePtr,123SUB_PLAYERINTERACTION);124++activePlayer;125}126}127128if (entity->drawOrder < LEGACY_DRAWLAYER_COUNT)129drawListEntries[entity->drawOrder].entityRefs[drawListEntries[entity->drawOrder].listSize++] = objectLoop;130}131}132}133134135