Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Rubberduckycooly
GitHub Repository: Rubberduckycooly/RSDKv5-Decompilation
Path: blob/master/RSDKv5/RSDK/Scene/Legacy/v3/ObjectLegacyv3.cpp
1177 views
1
2
int32 RSDK::Legacy::v3::objectLoop = 0;
3
int32 RSDK::Legacy::v3::curObjectType = 0;
4
RSDK::Legacy::v3::Entity RSDK::Legacy::v3::objectEntityList[LEGACY_v3_ENTITY_COUNT];
5
6
char RSDK::Legacy::v3::typeNames[LEGACY_v3_OBJECT_COUNT][0x40];
7
8
void RSDK::Legacy::v3::SetObjectTypeName(const char *objectName, int32 objectID)
9
{
10
int32 objNameID = 0;
11
int32 typeNameID = 0;
12
while (objectName[objNameID]) {
13
if (objectName[objNameID] != ' ')
14
typeNames[objectID][typeNameID++] = objectName[objNameID];
15
++objNameID;
16
}
17
typeNames[objectID][typeNameID] = 0;
18
PrintLog(PRINT_NORMAL, "Set Object (%d) name to: %s", objectID, objectName);
19
}
20
21
void RSDK::Legacy::v3::ProcessStartupObjects()
22
{
23
scriptFrameCount = 0;
24
ClearAnimationData();
25
activePlayer = 0;
26
activePlayerCount = 1;
27
scriptEng.arrayPosition[2] = LEGACY_v3_TEMPENTITY_START;
28
29
Entity *entity = &objectEntityList[LEGACY_v3_TEMPENTITY_START];
30
for (int32 i = 0; i < LEGACY_v3_OBJECT_COUNT; ++i) {
31
ObjectScript *scriptInfo = &objectScriptList[i];
32
objectLoop = LEGACY_v3_TEMPENTITY_START;
33
curObjectType = i;
34
scriptInfo->frameListOffset = scriptFrameCount;
35
scriptInfo->spriteSheetID = 0;
36
entity->type = i;
37
if (scriptCode[scriptInfo->subStartup.scriptCodePtr] > 0)
38
ProcessScript(scriptInfo->subStartup.scriptCodePtr, scriptInfo->subStartup.jumpTablePtr, SUB_SETUP);
39
scriptInfo->frameCount = scriptFrameCount - scriptInfo->frameListOffset;
40
}
41
entity->type = 0;
42
curObjectType = 0;
43
}
44
45
void RSDK::Legacy::v3::ProcessObjects()
46
{
47
for (int32 i = 0; i < LEGACY_DRAWLAYER_COUNT; ++i) drawListEntries[i].listSize = 0;
48
49
for (objectLoop = 0; objectLoop < LEGACY_v3_ENTITY_COUNT; ++objectLoop) {
50
bool active = false;
51
int32 x = 0, y = 0;
52
Entity *entity = &objectEntityList[objectLoop];
53
switch (entity->priority) {
54
case PRIORITY_BOUNDS:
55
x = entity->XPos >> 16;
56
y = entity->YPos >> 16;
57
active = x > xScrollOffset - OBJECT_BORDER_X1 && x < OBJECT_BORDER_X2 + xScrollOffset && y > yScrollOffset - OBJECT_BORDER_Y1
58
&& y < yScrollOffset + OBJECT_BORDER_Y2;
59
break;
60
61
case PRIORITY_ACTIVE:
62
case PRIORITY_ALWAYS: active = true; break;
63
64
case PRIORITY_XBOUNDS:
65
x = entity->XPos >> 16;
66
active = x > xScrollOffset - OBJECT_BORDER_X1 && x < OBJECT_BORDER_X2 + xScrollOffset;
67
break;
68
69
case PRIORITY_BOUNDS_DESTROY:
70
x = entity->XPos >> 16;
71
y = entity->YPos >> 16;
72
if (x <= xScrollOffset - OBJECT_BORDER_X1 || x >= OBJECT_BORDER_X2 + xScrollOffset || y <= yScrollOffset - OBJECT_BORDER_Y1
73
|| y >= yScrollOffset + OBJECT_BORDER_Y2) {
74
active = false;
75
entity->type = OBJ_TYPE_BLANKOBJECT;
76
}
77
else {
78
active = true;
79
}
80
break;
81
82
case PRIORITY_INACTIVE: active = false; break;
83
84
default: break;
85
}
86
87
if (active && entity->type > OBJ_TYPE_BLANKOBJECT) {
88
ObjectScript *scriptInfo = &objectScriptList[entity->type];
89
activePlayer = 0;
90
if (scriptCode[scriptInfo->subMain.scriptCodePtr] > 0)
91
ProcessScript(scriptInfo->subMain.scriptCodePtr, scriptInfo->subMain.jumpTablePtr, SUB_MAIN);
92
if (scriptCode[scriptInfo->subPlayerInteraction.scriptCodePtr] > 0) {
93
while (activePlayer < activePlayerCount) {
94
if (playerList[activePlayer].objectInteractions)
95
ProcessScript(scriptInfo->subPlayerInteraction.scriptCodePtr, scriptInfo->subPlayerInteraction.jumpTablePtr,
96
SUB_PLAYERINTERACTION);
97
++activePlayer;
98
}
99
}
100
101
if (entity->drawOrder < LEGACY_DRAWLAYER_COUNT)
102
drawListEntries[entity->drawOrder].entityRefs[drawListEntries[entity->drawOrder].listSize++] = objectLoop;
103
}
104
}
105
}
106
107
void RSDK::Legacy::v3::ProcessPausedObjects()
108
{
109
for (int32 i = 0; i < LEGACY_DRAWLAYER_COUNT; ++i) drawListEntries[i].listSize = 0;
110
111
for (objectLoop = 0; objectLoop < LEGACY_v3_ENTITY_COUNT; ++objectLoop) {
112
Entity *entity = &objectEntityList[objectLoop];
113
114
if (entity->priority == PRIORITY_ALWAYS && entity->type > OBJ_TYPE_BLANKOBJECT) {
115
ObjectScript *scriptInfo = &objectScriptList[entity->type];
116
activePlayer = 0;
117
if (scriptCode[scriptInfo->subMain.scriptCodePtr] > 0)
118
ProcessScript(scriptInfo->subMain.scriptCodePtr, scriptInfo->subMain.jumpTablePtr, SUB_MAIN);
119
120
if (scriptCode[scriptInfo->subPlayerInteraction.scriptCodePtr] > 0) {
121
while (activePlayer < LEGACY_v3_PLAYER_COUNT) {
122
if (playerList[activePlayer].objectInteractions)
123
ProcessScript(scriptInfo->subPlayerInteraction.scriptCodePtr, scriptInfo->subPlayerInteraction.jumpTablePtr,
124
SUB_PLAYERINTERACTION);
125
++activePlayer;
126
}
127
}
128
129
if (entity->drawOrder < LEGACY_DRAWLAYER_COUNT)
130
drawListEntries[entity->drawOrder].entityRefs[drawListEntries[entity->drawOrder].listSize++] = objectLoop;
131
}
132
}
133
}
134
135