summaryrefslogtreecommitdiff
path: root/ZAPD/ZRoom/Commands/SetObjectList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ZAPD/ZRoom/Commands/SetObjectList.cpp')
-rw-r--r--ZAPD/ZRoom/Commands/SetObjectList.cpp78
1 files changed, 38 insertions, 40 deletions
diff --git a/ZAPD/ZRoom/Commands/SetObjectList.cpp b/ZAPD/ZRoom/Commands/SetObjectList.cpp
index c3c709b..d3184b4 100644
--- a/ZAPD/ZRoom/Commands/SetObjectList.cpp
+++ b/ZAPD/ZRoom/Commands/SetObjectList.cpp
@@ -1,62 +1,60 @@
#include "SetObjectList.h"
-#include "../../BitConverter.h"
-#include "../../Globals.h"
-#include "../../StringHelper.h"
-#include "../../ZFile.h"
-#include "../ZNames.h"
-#include "../ZRoom.h"
-SetObjectList::SetObjectList(ZRoom* nZRoom, std::vector<uint8_t> rawData, uint32_t rawDataIndex)
- : ZRoomCommand(nZRoom, rawData, rawDataIndex)
+#include "BitConverter.h"
+#include "Globals.h"
+#include "StringHelper.h"
+#include "ZFile.h"
+#include "ZRoom/ZNames.h"
+#include "ZRoom/ZRoom.h"
+
+SetObjectList::SetObjectList(ZFile* nParent) : ZRoomCommand(nParent)
+{
+}
+
+void SetObjectList::ParseRawData()
{
- objects = std::vector<uint16_t>();
- uint8_t objectCnt = rawData[rawDataIndex + 1];
- segmentOffset = GETSEGOFFSET(BitConverter::ToInt32BE(rawData, rawDataIndex + 4));
+ ZRoomCommand::ParseRawData();
+ uint8_t objectCnt = parent->GetRawData().at(rawDataIndex + 1);
uint32_t currentPtr = segmentOffset;
for (uint8_t i = 0; i < objectCnt; i++)
{
- uint16_t objectIndex = BitConverter::ToInt16BE(rawData, currentPtr);
+ uint16_t objectIndex = BitConverter::ToInt16BE(parent->GetRawData(), currentPtr);
objects.push_back(objectIndex);
currentPtr += 2;
}
if (segmentOffset != 0)
- zRoom->parent->AddDeclarationPlaceholder(segmentOffset);
-}
-
-std::string SetObjectList::GenerateExterns() const
-{
- return StringHelper::Sprintf("s16 %sObjectList0x%06X[];\n", zRoom->GetName().c_str(),
- segmentOffset);
+ parent->AddDeclarationPlaceholder(segmentOffset);
}
-std::string SetObjectList::GenerateSourceCodePass1(std::string roomName, uint32_t baseAddress)
+void SetObjectList::DeclareReferences(const std::string& prefix)
{
- std::string sourceOutput = "";
-
- sourceOutput +=
- StringHelper::Sprintf("%s 0x%02X, (u32)%sObjectList0x%06X",
- ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(),
- objects.size(), zRoom->GetName().c_str(), segmentOffset);
+ if (!objects.empty())
+ {
+ std::string declaration = "";
- std::string declaration = "";
+ for (size_t i = 0; i < objects.size(); i++)
+ {
+ uint16_t objectIndex = objects[i];
+ declaration +=
+ StringHelper::Sprintf(" %s,", ZNames::GetObjectName(objectIndex).c_str());
- for (size_t i = 0; i < objects.size(); i++)
- {
- uint16_t objectIndex = objects[i];
- declaration += StringHelper::Sprintf(" %s,", ZNames::GetObjectName(objectIndex).c_str());
+ if (i < objects.size() - 1)
+ declaration += "\n";
+ }
- if (i < objects.size() - 1)
- declaration += "\n";
+ parent->AddDeclarationArray(
+ segmentOffset, DeclarationAlignment::None, objects.size() * 2, "s16",
+ StringHelper::Sprintf("%sObjectList_%06X", prefix.c_str(), segmentOffset),
+ objects.size(), declaration);
}
+}
- zRoom->parent->AddDeclarationArray(
- segmentOffset, DeclarationAlignment::None, objects.size() * 2, "s16",
- StringHelper::Sprintf("%sObjectList0x%06X", zRoom->GetName().c_str(), segmentOffset),
- objects.size(), declaration);
-
- return sourceOutput;
+std::string SetObjectList::GetBodySourceCode() const
+{
+ std::string listName = parent->GetDeclarationPtrName(cmdArg2);
+ return StringHelper::Sprintf("SCENE_CMD_OBJECT_LIST(%i, %s)", objects.size(), listName.c_str());
}
size_t SetObjectList::GetRawDataSize() const
@@ -72,4 +70,4 @@ std::string SetObjectList::GetCommandCName() const
RoomCommand SetObjectList::GetRoomCommand() const
{
return RoomCommand::SetObjectList;
-} \ No newline at end of file
+}