diff options
| author | Kenix3 <kenixwhisperwind@gmail.com> | 2020-12-30 19:25:06 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-30 19:25:06 -0500 |
| commit | 27c17b20d38a72b7a8016852fa85311dcdc40f11 (patch) | |
| tree | cc62e053f3ff368e1affbd809a34e2e99ce1c74a /ZAPD/ZRoom/Commands/SetTransitionActorList.cpp | |
| parent | fd533747ddfa6645a53f6b1356b5b68d7f2f0bed (diff) | |
ZAP2 project renamed to ZAPD (#27)
Diffstat (limited to 'ZAPD/ZRoom/Commands/SetTransitionActorList.cpp')
| -rw-r--r-- | ZAPD/ZRoom/Commands/SetTransitionActorList.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp b/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp new file mode 100644 index 0000000..5c36877 --- /dev/null +++ b/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp @@ -0,0 +1,85 @@ +#include "SetTransitionActorList.h" +#include "../ZRoom.h" +#include "../ActorList.h" +#include "../../ZFile.h" +#include "../../BitConverter.h" +#include "../../StringHelper.h" + +using namespace std; + +SetTransitionActorList::SetTransitionActorList(ZRoom* nZRoom, std::vector<uint8_t> rawData, int rawDataIndex) : ZRoomCommand(nZRoom, rawData, rawDataIndex) +{ + int numActors = rawData[rawDataIndex + 1]; + segmentOffset = BitConverter::ToInt32BE(rawData, rawDataIndex + 4) & 0x00FFFFFF; + + transitionActors = vector<TransitionActorEntry*>(); + + uint32_t currentPtr = segmentOffset; + + for (int i = 0; i < numActors; i++) + { + TransitionActorEntry* entry = new TransitionActorEntry(rawData, currentPtr); + transitionActors.push_back(entry); + + currentPtr += 16; + } +} + +string SetTransitionActorList::GetSourceOutputCode(std::string prefix) +{ + return ""; +} + +string SetTransitionActorList::GenerateSourceCodePass1(string roomName, int baseAddress) +{ + string sourceOutput = StringHelper::Sprintf("%s 0x%02X, (u32)_%s_transitionActorList_%08X", ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), transitionActors.size(), roomName.c_str(), segmentOffset); + string declaration = ""; + + for (TransitionActorEntry* entry : transitionActors) + declaration += StringHelper::Sprintf("\t{ %i, %i, %i, %i, %s, %i, %i, %i, %i, 0x%04X }, \n", entry->frontObjectRoom, entry->frontTransitionReaction, entry->backObjectRoom, entry->backTransitionReaction, ActorList[entry->actorNum].c_str(), entry->posX, entry->posY, entry->posZ, entry->rotY, (uint16_t)entry->initVar); + + zRoom->parent->declarations[segmentOffset] = new Declaration(DeclarationAlignment::None, transitionActors.size() * 16, "TransitionActorEntry", + StringHelper::Sprintf("_%s_transitionActorList_%08X", roomName.c_str(), segmentOffset), true, declaration); + + return sourceOutput; +} + + +string SetTransitionActorList::GenerateSourceCodePass2(string roomName, int baseAddress) +{ + return ""; +} + +int32_t SetTransitionActorList::GetRawDataSize() +{ + return ZRoomCommand::GetRawDataSize() + (transitionActors.size() * 16); +} + +string SetTransitionActorList::GenerateExterns() +{ + return StringHelper::Sprintf("extern TransitionActorEntry _%s_transitionActorList_%08X[];\n", zRoom->GetName().c_str(), segmentOffset); +} + +string SetTransitionActorList::GetCommandCName() +{ + return "SCmdTransiActorList"; +} + +RoomCommand SetTransitionActorList::GetRoomCommand() +{ + return RoomCommand::SetTransitionActorList; +} + +TransitionActorEntry::TransitionActorEntry(std::vector<uint8_t> rawData, int rawDataIndex) +{ + frontObjectRoom = rawData[rawDataIndex + 0]; + frontTransitionReaction = rawData[rawDataIndex + 1]; + backObjectRoom = rawData[rawDataIndex + 2]; + backTransitionReaction = rawData[rawDataIndex + 3]; + actorNum = BitConverter::ToInt16BE(rawData, rawDataIndex + 4); + posX = BitConverter::ToInt16BE(rawData, rawDataIndex + 6); + posY = BitConverter::ToInt16BE(rawData, rawDataIndex + 8); + posZ = BitConverter::ToInt16BE(rawData, rawDataIndex + 10); + rotY = BitConverter::ToInt16BE(rawData, rawDataIndex + 12); + initVar = BitConverter::ToInt16BE(rawData, rawDataIndex + 14); +}
\ No newline at end of file |
