summaryrefslogtreecommitdiff
path: root/ZAPD/ZCutscene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ZAPD/ZCutscene.cpp')
-rw-r--r--ZAPD/ZCutscene.cpp1221
1 files changed, 175 insertions, 1046 deletions
diff --git a/ZAPD/ZCutscene.cpp b/ZAPD/ZCutscene.cpp
index 69fbd9e..6058949 100644
--- a/ZAPD/ZCutscene.cpp
+++ b/ZAPD/ZCutscene.cpp
@@ -1,5 +1,9 @@
#include "ZCutscene.h"
+#include <cassert>
+
+#include "Globals.h"
+#include "OtherStructs/CutsceneMM_Commands.h"
#include "Utils/BitConverter.h"
#include "Utils/StringHelper.h"
#include "WarningHandler.h"
@@ -7,7 +11,7 @@
REGISTER_ZFILENODE(Cutscene, ZCutscene);
-ZCutscene::ZCutscene(ZFile* nParent) : ZCutsceneBase(nParent)
+ZCutscene::ZCutscene(ZFile* nParent) : ZResource(nParent)
{
genOTRDef = true;
}
@@ -17,91 +21,20 @@ ZCutscene::~ZCutscene()
for (CutsceneCommand* cmd : commands)
delete cmd;
}
-CutsceneCommandSetCameraPos::~CutsceneCommandSetCameraPos()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandSpecialAction::~CutsceneCommandSpecialAction()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandFadeBGM::~CutsceneCommandFadeBGM()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandPlayBGM::~CutsceneCommandPlayBGM()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandStopBGM::~CutsceneCommandStopBGM()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandEnvLighting::~CutsceneCommandEnvLighting()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandUnknown9::~CutsceneCommandUnknown9()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandUnknown::~CutsceneCommandUnknown()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandDayTime::~CutsceneCommandDayTime()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandTextbox::~CutsceneCommandTextbox()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandActorAction::~CutsceneCommandActorAction()
-{
- for (auto e : entries)
- delete e;
-}
-
-CutsceneCommandSceneTransFX::~CutsceneCommandSceneTransFX()
-{
-}
std::string ZCutscene::GetBodySourceCode() const
{
std::string output = "";
- uint32_t curPtr = 0;
output += StringHelper::Sprintf(" CS_BEGIN_CUTSCENE(%i, %i),\n", commands.size(), endFrame);
for (size_t i = 0; i < commands.size(); i++)
{
CutsceneCommand* cmd = commands[i];
- output += " " + cmd->GenerateSourceCode(curPtr);
- curPtr += cmd->GetCommandSize();
+ output += " " + cmd->GenerateSourceCode();
}
- output += StringHelper::Sprintf(" CS_END(),\n", commands.size(), endFrame);
+ output += StringHelper::Sprintf(" CS_END(),", commands.size(), endFrame);
return output;
}
@@ -116,12 +49,19 @@ size_t ZCutscene::GetRawDataSize() const
for (size_t i = 0; i < commands.size(); i++)
{
CutsceneCommand* cmd = commands[i];
+
size += cmd->GetCommandSize();
- size += 4;
}
// End
- size += 8;
+ if (Globals::Instance->game == ZGame::MM_RETAIL)
+ {
+ size += 4;
+ }
+ else
+ {
+ size += 8;
+ }
return size;
}
@@ -136,153 +76,68 @@ void ZCutscene::ParseRawData()
commands = std::vector<CutsceneCommand*>();
endFrame = BitConverter::ToInt32BE(rawData, rawDataIndex + 4);
- uint32_t currentPtr = rawDataIndex + 8;
-
+ offset_t currentPtr = rawDataIndex + 8;
+ commands.reserve(numCommands);
for (int32_t i = 0; i < numCommands; i++)
{
- int32_t id = BitConverter::ToInt32BE(rawData, currentPtr);
+ uint32_t id = BitConverter::ToUInt32BE(rawData, currentPtr);
- if (id == -1)
+ if (id == 0xFFFFFFFF)
break;
- CutsceneCommands cmdID = (CutsceneCommands)GetCommandFromID(id);
+ if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG)
+ {
+ printf("Cutscene Command: 0x%X (%i)\n", id, id);
+ }
+
currentPtr += 4;
- int32_t numEntries = 1;
+ CutsceneCommand* cmd = nullptr;
- for (int32_t j = 0; j < numEntries; j++)
+ if (Globals::Instance->game == ZGame::MM_RETAIL)
+ {
+ cmd = GetCommandMM(id, currentPtr);
+ }
+ else
{
- CutsceneCommand* cmd = nullptr;
+ cmd = GetCommandOoT(id, currentPtr);
+ }
- switch (cmdID)
- {
- case CutsceneCommands::Cmd00:
- break;
- case CutsceneCommands::SetCameraPos:
- cmd = new CutsceneCommandSetCameraPos(rawData, currentPtr);
- break;
- case CutsceneCommands::SetCameraFocus:
- cmd = new CutsceneCommandSetCameraPos(rawData, currentPtr);
- break;
- case CutsceneCommands::SpecialAction:
- cmd = new CutsceneCommandSpecialAction(rawData, currentPtr);
- break;
- case CutsceneCommands::SetLighting:
- cmd = new CutsceneCommandEnvLighting(rawData, currentPtr);
- break;
- case CutsceneCommands::SetCameraPosLink:
- cmd = new CutsceneCommandSetCameraPos(rawData, currentPtr);
- break;
- case CutsceneCommands::SetCameraFocusLink:
- cmd = new CutsceneCommandSetCameraPos(rawData, currentPtr);
- break;
- case CutsceneCommands::Cmd07:
- break;
- case CutsceneCommands::Cmd08:
- break;
- case CutsceneCommands::Cmd09:
- cmd = new CutsceneCommandUnknown9(rawData, currentPtr);
- break;
- case CutsceneCommands::Textbox:
- cmd = new CutsceneCommandTextbox(rawData, currentPtr);
- break;
- case CutsceneCommands::Unknown:
- cmd = new CutsceneCommandUnknown(rawData, currentPtr);
- break;
- case CutsceneCommands::SetActorAction0:
- case CutsceneCommands::SetActorAction1:
- case CutsceneCommands::SetActorAction2:
- case CutsceneCommands::SetActorAction3:
- case CutsceneCommands::SetActorAction4:
- case CutsceneCommands::SetActorAction5:
- case CutsceneCommands::SetActorAction6:
- case CutsceneCommands::SetActorAction7:
- case CutsceneCommands::SetActorAction8:
- case CutsceneCommands::SetActorAction9:
- case CutsceneCommands::SetActorAction10:
- cmd = new CutsceneCommandActorAction(rawData, currentPtr);
- break;
- case CutsceneCommands::SetSceneTransFX:
- cmd = new CutsceneCommandSceneTransFX(rawData, currentPtr);
- break;
- case CutsceneCommands::Nop:
- cmd = new CutsceneCommandNop(rawData, currentPtr);
- break;
- case CutsceneCommands::PlayBGM:
- cmd = new CutsceneCommandPlayBGM(rawData, currentPtr);
- break;
- case CutsceneCommands::StopBGM:
- cmd = new CutsceneCommandStopBGM(rawData, currentPtr);
- break;
- case CutsceneCommands::FadeBGM:
- cmd = new CutsceneCommandFadeBGM(rawData, currentPtr);
- break;
- case CutsceneCommands::SetTime:
- cmd = new CutsceneCommandDayTime(rawData, currentPtr);
- break;
- case CutsceneCommands::Terminator:
- cmd = new CutsceneCommandTerminator(rawData, currentPtr);
- break;
- case CutsceneCommands::End:
- cmd = new CutsceneCommandEnd(rawData, currentPtr);
- break;
- case CutsceneCommands::Error:
- HANDLE_WARNING_RESOURCE(WarningType::NotImplemented, parent, this, rawDataIndex,
- StringHelper::Sprintf("cutscene command error %d", cmdID),
- "");
- break;
- }
+ if (cmd == nullptr)
+ {
+ HANDLE_WARNING_RESOURCE(
+ WarningType::NotImplemented, parent, this, rawDataIndex,
+ StringHelper::Sprintf("Cutscene command not implemented"),
+ StringHelper::Sprintf("Command ID: 0x%X\nIndex: %d\ncurrentPtr-rawDataIndex: 0x%X",
+ id, i, currentPtr - rawDataIndex));
+ cmd = new CutsceneMMCommand_NonImplemented(rawData, currentPtr);
+ }
- cmd->commandIndex = i;
- cmd->commandID = (uint32_t)id;
- currentPtr += (uint32_t)cmd->GetCommandSize();
+ assert(cmd != nullptr);
- commands.push_back(cmd);
+ cmd->commandIndex = i;
+ cmd->SetCommandID(id);
+ size_t commmandSize = cmd->GetCommandSize();
+ if (Globals::Instance->verbosity >= VerbosityLevel::VERBOSITY_DEBUG)
+ {
+ printf("\t Command size: 0x%zX (%zu)\n", commmandSize, commmandSize);
}
+ currentPtr += commmandSize - 4;
+
+ commands.push_back(cmd);
}
}
-CutsceneCommands ZCutscene::GetCommandFromID(int32_t id)
+CutsceneCommand* ZCutscene::GetCommandOoT(uint32_t id, offset_t currentPtr) const
{
+ CutsceneCommands cmdID = static_cast<CutsceneCommands>(id);
+
+ const auto& rawData = parent->GetRawData();
+
switch (id)
{
- case 0x0003:
- return CutsceneCommands::SpecialAction;
- case 0x0004:
- return CutsceneCommands::SetLighting;
- case 0x0056:
- return CutsceneCommands::PlayBGM;
- case 0x0057:
- return CutsceneCommands::StopBGM;
- case 0x007C:
- return CutsceneCommands::FadeBGM;
- case 0x0009:
- return CutsceneCommands::Cmd09;
- case 0x0013:
- return CutsceneCommands::Textbox;
- case 0x008C:
- return CutsceneCommands::SetTime;
- case 0x0001:
- return CutsceneCommands::SetCameraPos;
- case 0x0002:
- return CutsceneCommands::SetCameraFocus;
- case 0x0005:
- return CutsceneCommands::SetCameraPosLink;
- case 0x0006:
- return CutsceneCommands::SetCameraFocusLink;
- case 0x0007:
- return CutsceneCommands::Cmd07;
- case 0x0008:
- return CutsceneCommands::Cmd08;
- case 0x03E8:
- return CutsceneCommands::Terminator;
- case 0xFFFF:
- return CutsceneCommands::End;
- case 0x002D:
- return CutsceneCommands::SetSceneTransFX;
- case 10:
- return CutsceneCommands::SetActorAction0;
- case 15:
+ case 10: // CutsceneCommands::SetPlayerAction
+ case 15: // CutsceneCommands::SetActorAction1
case 17:
case 18:
case 23:
@@ -300,8 +155,7 @@ CutsceneCommands ZCutscene::GetCommandFromID(int32_t id)
case 138:
case 139:
case 144:
- return CutsceneCommands::SetActorAction1;
- case 14:
+ case 14: // CutsceneCommands::SetActorAction2
case 16:
case 24:
case 35:
@@ -319,8 +173,7 @@ CutsceneCommands ZCutscene::GetCommandFromID(int32_t id)
case 125:
case 131:
case 141:
- return CutsceneCommands::SetActorAction2;
- case 25:
+ case 25: // CutsceneCommands::SetActorAction3
case 36:
case 41:
case 50:
@@ -333,8 +186,7 @@ CutsceneCommands ZCutscene::GetCommandFromID(int32_t id)
case 121:
case 126:
case 132:
- return CutsceneCommands::SetActorAction3;
- case 29:
+ case 29: // CutsceneCommands::SetActorAction4
case 37:
case 42:
case 51:
@@ -347,8 +199,7 @@ CutsceneCommands ZCutscene::GetCommandFromID(int32_t id)
case 108:
case 127:
case 133:
- return CutsceneCommands::SetActorAction4;
- case 30:
+ case 30: // CutsceneCommands::SetActorAction5
case 38:
case 43:
case 47:
@@ -357,16 +208,14 @@ CutsceneCommands ZCutscene::GetCommandFromID(int32_t id)
case 83:
case 128:
case 135:
- return CutsceneCommands::SetActorAction5;
- case 44:
+ case 44: // CutsceneCommands::SetActorAction6
case 55:
case 77:
case 84:
case 90:
case 129:
case 136:
- return CutsceneCommands::SetActorAction6;
- case 31:
+ case 31: // CutsceneCommands::SetActorAction7
case 52:
case 57:
case 58:
@@ -374,19 +223,17 @@ CutsceneCommands ZCutscene::GetCommandFromID(int32_t id)
case 115:
case 130:
case 137:
- return CutsceneCommands::SetActorAction7;
- case 49:
+ case 49: // CutsceneCommands::SetActorAction8
case 60:
case 89:
case 111:
case 114:
case 134:
case 142:
- return CutsceneCommands::SetActorAction8;
- case 62:
- return CutsceneCommands::SetActorAction9;
- case 143:
- return CutsceneCommands::SetActorAction10;
+ case 62: // CutsceneCommands::SetActorAction9
+ case 143: // CutsceneCommands::SetActorAction10
+ return new CutsceneCommand_ActorAction(rawData, currentPtr);
+
case 0x0B:
case 0x0D:
case 0x1A:
@@ -404,843 +251,120 @@ CutsceneCommands ZCutscene::GetCommandFromID(int32_t id)
case 0x70:
case 0x71:
case 0x4A:
- return CutsceneCommands::Unknown;
- }
-
- HANDLE_WARNING_RESOURCE(
- WarningType::NotImplemented, parent, this, rawDataIndex,
- StringHelper::Sprintf("could not identify cutscene command. ID 0x%04X", id), "");
-
- return CutsceneCommands::Error;
-}
-
-ZResourceType ZCutscene::GetResourceType() const
-{
- return ZResourceType::Cutscene;
-}
-
-CutsceneCommand::CutsceneCommand([[maybe_unused]] const std::vector<uint8_t>& rawData,
- [[maybe_unused]] uint32_t rawDataIndex)
-{
-}
-
-CutsceneCommand::~CutsceneCommand()
-{
-}
-
-std::string CutsceneCommand::GetCName()
-{
- return "SCmdCutsceneData";
-}
-
-std::string CutsceneCommand::GenerateSourceCode(uint32_t baseAddress)
-{
- return StringHelper::Sprintf("%s CutsceneData%04XCmd%02X = { 0x%02X,", GetCName().c_str(),
- baseAddress, commandIndex, commandID);
-}
-
-size_t CutsceneCommand::GetCommandSize()
-{
- return 4;
-}
-
-CutsceneCameraPoint::CutsceneCameraPoint(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- const uint8_t* data = rawData.data();
-
- continueFlag = data[rawDataIndex + 0];
- cameraRoll = data[rawDataIndex + 1];
- nextPointFrame = BitConverter::ToInt16BE(data, rawDataIndex + 2);
- viewAngle = BitConverter::ToFloatBE(data, rawDataIndex + 4);
-
- posX = BitConverter::ToInt16BE(data, rawDataIndex + 8);
- posY = BitConverter::ToInt16BE(data, rawDataIndex + 10);
- posZ = BitConverter::ToInt16BE(data, rawDataIndex + 12);
-
- unused = BitConverter::ToInt16BE(data, rawDataIndex + 14);
-}
-
-CutsceneCommandSetCameraPos::CutsceneCommandSetCameraPos(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- const uint8_t* data = rawData.data();
-
- base = BitConverter::ToUInt16BE(data, rawDataIndex + 0);
- startFrame = BitConverter::ToUInt16BE(data, rawDataIndex + 2);
- endFrame = BitConverter::ToUInt16BE(data, rawDataIndex + 4);
- unused = BitConverter::ToUInt16BE(data, rawDataIndex + 6);
-
- entries = std::vector<CutsceneCameraPoint*>();
-
- bool shouldContinue = true;
-
- uint32_t currentPtr = rawDataIndex + 8;
-
- while (shouldContinue)
- {
- CutsceneCameraPoint* camPoint = new CutsceneCameraPoint(rawData, currentPtr);
- entries.push_back(camPoint);
-
- if (camPoint->continueFlag == -1)
- shouldContinue = false;
-
- currentPtr += 16;
- }
-}
-
-// TODO
-std::string CutsceneCommandSetCameraPos::GetCName()
-{
- return "";
-}
-
-std::string CutsceneCommandSetCameraPos::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- std::string listStr;
- std::string posStr;
-
- if (commandID == (int32_t)CutsceneCommands::SetCameraFocus)
- {
- listStr = "CS_CAM_FOCUS_POINT_LIST";
- posStr = "CS_CAM_FOCUS_POINT";
- }
- else if (commandID == (int32_t)CutsceneCommands::SetCameraFocusLink)
- {
- listStr = "CS_CAM_FOCUS_POINT_PLAYER_LIST";
- posStr = "CS_CAM_FOCUS_POINT_PLAYER";
- }
- else if (commandID == (int32_t)CutsceneCommands::SetCameraPosLink)
- {
- listStr = "CS_CAM_POS_PLAYER_LIST";
- posStr = "CS_CAM_POS_PLAYER";
- }
- else
- {
- listStr = "CS_CAM_POS_LIST";
- posStr = "CS_CAM_POS";
- }
-
- result += StringHelper::Sprintf("%s(%i, %i),\n", listStr.c_str(), startFrame, endFrame);
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- std::string continueMacro = "CS_CMD_CONTINUE";
- if (entries[i]->continueFlag != 0)
- continueMacro = "CS_CMD_STOP";
- result += StringHelper::Sprintf(" %s(%s, 0x%02X, %i, %ff, %i, %i, %i, 0x%04X),\n",
- posStr.c_str(), continueMacro.c_str(),
- entries[i]->cameraRoll, entries[i]->nextPointFrame,
- entries[i]->viewAngle, entries[i]->posX, entries[i]->posY,
- entries[i]->posZ, entries[i]->unused);
- }
-
- return result;
-}
-
-size_t CutsceneCommandSetCameraPos::GetCommandSize()
-{
- return 8 + (entries.size() * 16);
-}
-
-MusicFadeEntry::MusicFadeEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- base = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
- startFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
- endFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
- unknown0 = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6);
- unknown1 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 8);
- unknown2 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 12);
- unknown3 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 16);
- unknown4 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 20);
- unknown5 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 24);
- unknown6 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 28);
- unknown7 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 32);
- unknown8 = BitConverter::ToUInt32BE(rawData,
- rawDataIndex + 36); // Macro hardcodes it as zero
- unknown9 = BitConverter::ToUInt32BE(rawData,
- rawDataIndex + 40); // Macro hardcodes it as zero
- unknown10 = BitConverter::ToUInt32BE(rawData,
- rawDataIndex + 44); // Macro hardcodes it as zero
-}
-
-CutsceneCommandFadeBGM::CutsceneCommandFadeBGM(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- uint32_t numEntries = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0);
-
- rawDataIndex += 4;
-
- for (uint32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new MusicFadeEntry(rawData, rawDataIndex));
- rawDataIndex += 0x30;
- }
-}
-
-std::string CutsceneCommandFadeBGM::GetCName()
-{
- return "CsCmdMusicFade";
-}
-
-std::string CutsceneCommandFadeBGM::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_FADE_BGM_LIST(%i),\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- result += StringHelper::Sprintf(
- " CS_FADE_BGM(%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i),\n", entries[i]->base,
- entries[i]->startFrame, entries[i]->endFrame, entries[i]->unknown0,
- entries[i]->unknown1, entries[i]->unknown2, entries[i]->unknown3, entries[i]->unknown4,
- entries[i]->unknown5, entries[i]->unknown6, entries[i]->unknown7);
- }
-
- return result;
-}
-
-size_t CutsceneCommandFadeBGM::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + 0x30 * entries.size();
-}
-
-MusicChangeEntry::MusicChangeEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- sequence = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
- startFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
- endFrame = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
- unknown0 = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6);
- unknown1 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 8);
- unknown2 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 12);
- unknown3 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 16);
- unknown4 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 20);
- unknown5 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 24);
- unknown6 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 28);
- unknown7 = BitConverter::ToUInt32BE(rawData, rawDataIndex + 32);
-}
-
-CutsceneCommandPlayBGM::CutsceneCommandPlayBGM(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- uint32_t numEntries = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0);
-
- rawDataIndex += 4;
-
- for (uint32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new MusicChangeEntry(rawData, rawDataIndex));
- rawDataIndex += 0x30;
+ return new CutsceneCommand_GenericCmd(rawData, currentPtr, cmdID);
}
-}
-
-std::string CutsceneCommandPlayBGM::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
- result += StringHelper::Sprintf("CS_PLAY_BGM_LIST(%i),\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
+ switch (cmdID)
{
- result += StringHelper::Sprintf(
- " CS_PLAY_BGM(%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i),\n",
- entries[i]->sequence, entries[i]->startFrame, entries[i]->endFrame,
- entries[i]->unknown0, entries[i]->unknown1, entries[i]->unknown2, entries[i]->unknown3,
- entries[i]->unknown4, entries[i]->unknown5, entries[i]->unknown6, entries[i]->unknown7);
- }
-
- return result;
-}
+ case CutsceneCommands::Misc:
+ case CutsceneCommands::SetLighting:
+ case CutsceneCommands::PlayBGM:
+ case CutsceneCommands::StopBGM:
+ case CutsceneCommands::FadeBGM:
+ return new CutsceneCommand_GenericCmd(rawData, currentPtr, cmdID);
-std::string CutsceneCommandPlayBGM::GetCName()
-{
- return "CsCmdMusicChange";
-}
+ case CutsceneCommands::SetCameraPos:
+ case CutsceneCommands::SetCameraFocus:
+ case CutsceneCommands::SetCameraPosLink:
+ case CutsceneCommands::SetCameraFocusLink:
+ return new CutsceneCommandSetCameraPos(rawData, currentPtr);
-size_t CutsceneCommandPlayBGM::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + 0x30;
-}
+ case CutsceneCommands::Cmd07:
+ break;
+ case CutsceneCommands::Cmd08:
+ break;
+ case CutsceneCommands::Cmd09:
+ return new CutsceneCommand_Rumble(rawData, currentPtr);
+ case CutsceneCommands::Textbox:
+ return new CutsceneCommand_TextBox(rawData, currentPtr);
-CutsceneCommandStopBGM::CutsceneCommandStopBGM(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- uint32_t numEntries = BitConverter::ToUInt32BE(rawData, rawDataIndex + 0);
+ case CutsceneCommands::SetPlayerAction:
+ case CutsceneCommands::SetActorAction1:
+ case CutsceneCommands::SetActorAction2:
+ case CutsceneCommands::SetActorAction3:
+ case CutsceneCommands::SetActorAction4:
+ case CutsceneCommands::SetActorAction5:
+ case CutsceneCommands::SetActorAction6:
+ case CutsceneCommands::SetActorAction7:
+ case CutsceneCommands::SetActorAction8:
+ case CutsceneCommands::SetActorAction9:
+ case CutsceneCommands::SetActorAction10:
+ break;
- rawDataIndex += 4;
+ case CutsceneCommands::SetSceneTransFX:
+ return new CutsceneCommandSceneTransFX(rawData, currentPtr);
- for (uint32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new MusicChangeEntry(rawData, rawDataIndex));
- rawDataIndex += 0x30;
- }
-}
-
-std::string CutsceneCommandStopBGM::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_STOP_BGM_LIST(%i),\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- result += StringHelper::Sprintf(
- "\t\tCS_STOP_BGM(%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i),\n", entries[i]->sequence,
- entries[i]->startFrame, entries[i]->endFrame, entries[i]->unknown0,
- entries[i]->unknown1, entries[i]->unknown2, entries[i]->unknown3, entries[i]->unknown4,
- entries[i]->unknown5, entries[i]->unknown6, entries[i]->unknown7);
+ case CutsceneCommands::SetTime:
+ return new CutsceneCommand_SetTime(rawData, currentPtr);
+ case CutsceneCommands::Terminator:
+ return new CutsceneCommand_Terminator(rawData, currentPtr);
}
- return result;
+ return nullptr;
}
-std::string CutsceneCommandStopBGM::GetCName()
+CutsceneCommand* ZCutscene::GetCommandMM(uint32_t id, offset_t currentPtr) const
{
- return "CsCmdMusicChange";
-}
-
-size_t CutsceneCommandStopBGM::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + 0x30;
-}
+ CutsceneMMCommands cmdID = static_cast<CutsceneMMCommands>(id);
-EnvLightingEntry::EnvLightingEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- setting = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
- unused0 = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 6);
- unused1 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 8);
- unused2 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 12);
- unused3 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 16);
- unused4 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 20);
- unused5 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 24);
- unused6 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 28);
- unused7 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 32);
-}
-
-CutsceneCommandEnvLighting::CutsceneCommandEnvLighting(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- int32_t numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
-
- rawDataIndex += 4;
-
- for (int32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new EnvLightingEntry(rawData, rawDataIndex));
- rawDataIndex += 0x30;
- }
-}
-
-std::string CutsceneCommandEnvLighting::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_LIGHTING_LIST(%i),\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- result += StringHelper::Sprintf(
- "\t\tCS_LIGHTING(%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i),\n", entries[i]->setting,
- entries[i]->startFrame, entries[i]->endFrame, entries[i]->unused0, entries[i]->unused1,
- entries[i]->unused2, entries[i]->unused3, entries[i]->unused4, entries[i]->unused5,
- entries[i]->unused6, entries[i]->unused7);
- }
-
- return result;
-}
-
-std::string CutsceneCommandEnvLighting::GetCName()
-{
- return "CsCmdEnvLighting";
-}
-
-size_t CutsceneCommandEnvLighting::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + (0x30 * entries.size());
-}
-
-Unknown9Entry::Unknown9Entry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
- unk2 = rawData[rawDataIndex + 6];
- unk3 = rawData[rawDataIndex + 7];
- unk4 = rawData[rawDataIndex + 8];
- unused0 = rawData[rawDataIndex + 10];
- unused1 = rawData[rawDataIndex + 11];
- ;
-}
-
-CutsceneCommandUnknown9::CutsceneCommandUnknown9(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- int32_t numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
-
- rawDataIndex += 4;
-
- for (int32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new Unknown9Entry(rawData, rawDataIndex));
- rawDataIndex += 0x0C;
- }
-}
-
-std::string CutsceneCommandUnknown9::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_CMD_09_LIST(%i),\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- result += StringHelper::Sprintf("\t\tCS_CMD_09(%i, %i, %i, %i, %i, %i, %i, %i),\n",
- entries[i]->base, entries[i]->startFrame,
- entries[i]->endFrame, entries[i]->unk2, entries[i]->unk3,
- entries[i]->unk4, entries[i]->unused0, entries[i]->unused1);
- }
-
- return result;
-}
-
-std::string CutsceneCommandUnknown9::GetCName()
-{
- return "CsCmdUnknown9";
-}
-
-size_t CutsceneCommandUnknown9::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + (entries.size() * 12);
-}
-
-UnkEntry::UnkEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- unused0 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
- unused1 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 4);
- unused2 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 8);
- unused3 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 12);
- unused4 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 16);
- unused5 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 20);
- unused6 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 24);
- unused7 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 28);
- unused8 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 32);
- unused9 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 36);
- unused10 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 40);
- unused11 = (uint32_t)BitConverter::ToInt32BE(rawData, rawDataIndex + 44);
-}
-
-CutsceneCommandUnknown::CutsceneCommandUnknown(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- int32_t numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
-
- rawDataIndex += 4;
-
- for (int32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new UnkEntry(rawData, rawDataIndex));
- rawDataIndex += 0x30;
- }
-}
-
-std::string CutsceneCommandUnknown::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_UNK_DATA_LIST(0x%02X, %i),\n", commandID, entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- result += StringHelper::Sprintf(
- " CS_UNK_DATA(%i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i, %i),\n",
- entries[i]->unused0, entries[i]->unused1, entries[i]->unused2, entries[i]->unused3,
- entries[i]->unused4, entries[i]->unused5, entries[i]->unused6, entries[i]->unused7,
- entries[i]->unused8, entries[i]->unused9, entries[i]->unused10, entries[i]->unused11);
- }
-
- return result;
-}
-
-std::string CutsceneCommandUnknown::GetCName()
-{
- return "CsCmdUnknown1A";
-}
-
-size_t CutsceneCommandUnknown::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + (entries.size() * 0x30);
-}
-
-DayTimeEntry::DayTimeEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
- hour = rawData[rawDataIndex + 6];
- minute = rawData[rawDataIndex + 7];
- unused = rawData[rawDataIndex + 8];
-}
-
-CutsceneCommandDayTime::CutsceneCommandDayTime(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- int32_t numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
-
- rawDataIndex += 4;
-
- for (int32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new DayTimeEntry(rawData, rawDataIndex));
- rawDataIndex += 12;
- }
-}
-
-std::string CutsceneCommandDayTime::GetCName()
-{
- return "CsCmdDayTime";
-}
-
-std::string CutsceneCommandDayTime::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_TIME_LIST(%i),\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- result += StringHelper::Sprintf(
- " CS_TIME(%i, %i, %i, %i, %i, %i),\n", entries[i]->base, entries[i]->startFrame,
- entries[i]->endFrame, entries[i]->hour, entries[i]->minute, entries[i]->unused);
- }
-
- return result;
-}
-
-size_t CutsceneCommandDayTime::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + (entries.size() * 12);
-}
-
-TextboxEntry::TextboxEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
- type = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 6);
- textID1 = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 8);
- textID2 = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 10);
-}
-
-CutsceneCommandTextbox::CutsceneCommandTextbox(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- int32_t numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
-
- rawDataIndex += 4;
-
- for (int32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new TextboxEntry(rawData, rawDataIndex));
- rawDataIndex += 12;
- }
-}
-
-std::string CutsceneCommandTextbox::GetCName()
-{
- return "CsCmdTextbox";
-}
-
-std::string CutsceneCommandTextbox::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_TEXT_LIST(%i),\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- if (entries[i]->base == 0xFFFF)
- {
- result += StringHelper::Sprintf(" CS_TEXT_NONE(%i, %i),\n",
- entries[i]->startFrame, entries[i]->endFrame);
- }
- else
- {
- result += StringHelper::Sprintf(
- " CS_TEXT_DISPLAY_TEXTBOX(%i, %i, %i, %i, %i, %i),\n", entries[i]->base,
- entries[i]->startFrame, entries[i]->endFrame, entries[i]->type, entries[i]->textID1,
- entries[i]->textID2);
- }
- }
-
- return result;
-}
-
-size_t CutsceneCommandTextbox::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + (entries.size() * 12);
-}
-
-ActorAction::ActorAction(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- const uint8_t* data = rawData.data();
-
- action = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 4);
- rotX = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 6);
- rotY = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 8);
- rotZ = (uint16_t)BitConverter::ToInt16BE(data, rawDataIndex + 10);
- startPosX = BitConverter::ToInt32BE(data, rawDataIndex + 12);
- startPosY = BitConverter::ToInt32BE(data, rawDataIndex + 16);
- startPosZ = BitConverter::ToInt32BE(data, rawDataIndex + 20);
- endPosX = BitConverter::ToInt32BE(data, rawDataIndex + 24);
- endPosY = BitConverter::ToInt32BE(data, rawDataIndex + 28);
- endPosZ = BitConverter::ToInt32BE(data, rawDataIndex + 32);
- normalX = BitConverter::ToFloatBE(data, rawDataIndex + 36);
- normalY = BitConverter::ToFloatBE(data, rawDataIndex + 40);
- normalZ = BitConverter::ToFloatBE(data, rawDataIndex + 44);
-}
-
-CutsceneCommandActorAction::CutsceneCommandActorAction(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- int32_t numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex);
-
- rawDataIndex += 4;
-
- for (int32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new ActorAction(rawData, rawDataIndex));
- rawDataIndex += 0x30;
- }
-}
-
-std::string CutsceneCommandActorAction::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
- std::string subCommand;
-
- if (commandID == 10)
- {
- result += StringHelper::Sprintf("CS_PLAYER_ACTION_LIST(%i),\n", entries.size());
- subCommand = "CS_PLAYER_ACTION";
- }
- else
- {
- result += StringHelper::Sprintf("CS_NPC_ACTION_LIST(%i, %i),\n", commandID, entries.size());
- subCommand = "CS_NPC_ACTION";
- }
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- result += StringHelper::Sprintf(
- "\t\t%s(0x%04X, %i, %i, 0x%04X, 0x%04X, 0x%04X, %i, %i, %i, %i, %i, %i, %.11ef, "
- "%.11ef, %.11ef),\n",
- subCommand.c_str(), entries[i]->action, entries[i]->startFrame, entries[i]->endFrame,
- entries[i]->rotX, entries[i]->rotY, entries[i]->rotZ, entries[i]->startPosX,
- entries[i]->startPosY, entries[i]->startPosZ, entries[i]->endPosX, entries[i]->endPosY,
- entries[i]->endPosZ, entries[i]->normalX, entries[i]->normalY, entries[i]->normalZ);
- }
-
- return result;
-}
-
-std::string CutsceneCommandActorAction::GetCName()
-{
- return "CsCmdBase";
-}
-
-size_t CutsceneCommandActorAction::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + (entries.size() * 0x30);
-}
-
-CutsceneCommandTerminator::CutsceneCommandTerminator(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- rawDataIndex += 4;
-
- base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
- unknown = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 6); // endFrame duplicate
-}
-
-std::string CutsceneCommandTerminator::GetCName()
-{
- return "CsCmdBase";
-}
-
-std::string CutsceneCommandTerminator::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_TERMINATOR(0x%04X, %i, %i),\n", base, startFrame, endFrame);
-
- return result;
-}
-
-size_t CutsceneCommandTerminator::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + 8;
-}
-
-CutsceneCommandEnd::CutsceneCommandEnd(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
-}
-
-std::string CutsceneCommandEnd::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_END(),\n");
-
- return result;
-}
-
-std::string CutsceneCommandEnd::GetCName()
-{
- return "CsCmdBase";
-}
-
-size_t CutsceneCommandEnd::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + 6;
-}
-
-SpecialActionEntry::SpecialActionEntry(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
-{
- const uint8_t* data = rawData.data();
-
- base = BitConverter::ToUInt16BE(data, rawDataIndex + 0);
- startFrame = BitConverter::ToUInt16BE(data, rawDataIndex + 2);
- endFrame = BitConverter::ToUInt16BE(data, rawDataIndex + 4);
- unused0 = BitConverter::ToUInt16BE(data, rawDataIndex + 6);
- unused1 = BitConverter::ToUInt32BE(data, rawDataIndex + 8);
- unused2 = BitConverter::ToUInt32BE(data, rawDataIndex + 12);
- unused3 = BitConverter::ToUInt32BE(data, rawDataIndex + 16);
- unused4 = BitConverter::ToUInt32BE(data, rawDataIndex + 20);
- unused5 = BitConverter::ToUInt32BE(data, rawDataIndex + 24);
- unused6 = BitConverter::ToUInt32BE(data, rawDataIndex + 28);
- unused7 = BitConverter::ToUInt32BE(data, rawDataIndex + 32);
- unused8 = BitConverter::ToUInt32BE(data, rawDataIndex + 36);
- unused9 = BitConverter::ToUInt32BE(data, rawDataIndex + 40);
- unused10 = BitConverter::ToUInt32BE(data, rawDataIndex + 44);
-}
-
-CutsceneCommandSpecialAction::CutsceneCommandSpecialAction(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- int32_t numEntries = BitConverter::ToInt32BE(rawData, rawDataIndex + 0);
-
- rawDataIndex += 4;
-
- for (int32_t i = 0; i < numEntries; i++)
- {
- entries.push_back(new SpecialActionEntry(rawData, rawDataIndex));
- rawDataIndex += 0x30;
- }
-}
-
-std::string CutsceneCommandSpecialAction::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- std::string result;
-
- result += StringHelper::Sprintf("CS_MISC_LIST(%i),\n", entries.size());
-
- for (size_t i = 0; i < entries.size(); i++)
- {
- result += StringHelper::Sprintf(
- "\t\tCS_MISC(0x%04X, %i, %i, 0x%04X, 0x%04X, 0x%04X, %i, %i, %i, %i, %i, %i, %i, "
- "%i),\n",
- entries[i]->base, entries[i]->startFrame, entries[i]->endFrame, entries[i]->unused0,
- entries[i]->unused1, entries[i]->unused2, entries[i]->unused3, entries[i]->unused4,
- entries[i]->unused5, entries[i]->unused6, entries[i]->unused7, entries[i]->unused8,
- entries[i]->unused9, entries[i]->unused10);
- }
-
- return result;
-}
-
-std::string CutsceneCommandSpecialAction::GetCName()
-{
- return "CsCmdBase";
-}
-
-size_t CutsceneCommandSpecialAction::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + (0x30 * entries.size());
-}
-
-CutsceneCommandNop::CutsceneCommandNop(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
-}
-
-std::string CutsceneCommandNop::GetCName()
-{
- return "CsCmdBase";
-}
-
-size_t CutsceneCommandNop::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + 6;
-}
-
-CutsceneCommandSceneTransFX::CutsceneCommandSceneTransFX(const std::vector<uint8_t>& rawData,
- uint32_t rawDataIndex)
- : CutsceneCommand(rawData, rawDataIndex)
-{
- rawDataIndex += 4;
-
- base = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 0);
- startFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 2);
- endFrame = (uint16_t)BitConverter::ToInt16BE(rawData, rawDataIndex + 4);
-}
-
-std::string CutsceneCommandSceneTransFX::GenerateSourceCode([[maybe_unused]] uint32_t baseAddress)
-{
- return StringHelper::Sprintf("CS_SCENE_TRANS_FX(%i, %i, %i),\n", base, startFrame, endFrame);
-}
-
-std::string CutsceneCommandSceneTransFX::GetCName()
-{
- return "CsCmdBase";
-}
-
-size_t CutsceneCommandSceneTransFX::GetCommandSize()
-{
- return CutsceneCommand::GetCommandSize() + 8;
-}
-
-ZCutsceneBase::ZCutsceneBase(ZFile* nParent) : ZResource(nParent)
-{
-}
+ const auto& rawData = parent->GetRawData();
-Declaration* ZCutsceneBase::DeclareVar(const std::string& prefix, const std::string& bodyStr)
+ if (((id >= 100) && (id < 150)) || (id == 201) || ((id >= 450) && (id < 600)))
+ {
+ return new CutsceneCommand_ActorAction(rawData, currentPtr);
+ }
+
+ switch (cmdID)
+ {
+ case CutsceneMMCommands::CS_CMD_MISC:
+ case CutsceneMMCommands::CS_CMD_SET_LIGHTING:
+ case CutsceneMMCommands::CS_CMD_SCENE_TRANS_FX:
+ case CutsceneMMCommands::CS_CMD_MOTIONBLUR:
+ case CutsceneMMCommands::CS_CMD_GIVETATL:
+ case CutsceneMMCommands::CS_CMD_PLAYSEQ:
+ case CutsceneMMCommands::CS_CMD_130:
+ case CutsceneMMCommands::CS_CMD_131:
+ case CutsceneMMCommands::CS_CMD_132:
+ case CutsceneMMCommands::CS_CMD_STOPSEQ:
+ case CutsceneMMCommands::CS_CMD_PLAYAMBIENCE:
+ case CutsceneMMCommands::CS_CMD_FADEAMBIENCE:
+ case CutsceneMMCommands::CS_CMD_TERMINATOR:
+ case CutsceneMMCommands::CS_CMD_CHOOSE_CREDITS_SCENES:
+
+ case CutsceneMMCommands::CS_CMD_UNK_FA:
+ case CutsceneMMCommands::CS_CMD_UNK_FE:
+ case CutsceneMMCommands::CS_CMD_UNK_FF:
+ case CutsceneMMCommands::CS_CMD_UNK_100:
+ case CutsceneMMCommands::CS_CMD_UNK_101:
+ case CutsceneMMCommands::CS_CMD_UNK_102:
+ case CutsceneMMCommands::CS_CMD_UNK_103:
+ case CutsceneMMCommands::CS_CMD_UNK_104:
+ case CutsceneMMCommands::CS_CMD_UNK_105:
+ case CutsceneMMCommands::CS_CMD_UNK_108:
+ case CutsceneMMCommands::CS_CMD_UNK_109:
+ case CutsceneMMCommands::CS_CMD_UNK_12D:
+ return new CutsceneMMCommand_GenericCmd(rawData, currentPtr, cmdID);
+
+ case CutsceneMMCommands::CS_CMD_TEXTBOX:
+ return new CutsceneCommand_TextBox(rawData, currentPtr);
+ case CutsceneMMCommands::CS_CMD_CAMERA:
+ return new CutsceneMMCommand_Camera(rawData, currentPtr);
+ case CutsceneMMCommands::CS_CMD_FADESCREEN:
+ return new CutsceneMMCommand_FadeScreen(rawData, currentPtr);
+ case CutsceneMMCommands::CS_CMD_FADESEQ:
+ return new CutsceneMMCommand_FadeSeq(rawData, currentPtr);
+ case CutsceneMMCommands::CS_CMD_SETTIME:
+ return new CutsceneCommand_SetTime(rawData, currentPtr);
+ case CutsceneMMCommands::CS_CMD_SET_PLAYER_ACTION:
+ return new CutsceneCommand_ActorAction(rawData, currentPtr);
+ case CutsceneMMCommands::CS_CMD_RUMBLE:
+ return new CutsceneCommand_Rumble(rawData, currentPtr);
+ }
+
+ return nullptr;
+}
+
+Declaration* ZCutscene::DeclareVar(const std::string& prefix, const std::string& bodyStr)
{
std::string auxName = name;
@@ -1254,7 +378,12 @@ Declaration* ZCutsceneBase::DeclareVar(const std::string& prefix, const std::str
return decl;
}
-std::string ZCutsceneBase::GetSourceTypeName() const
+std::string ZCutscene::GetSourceTypeName() const
{
return "CutsceneData";
}
+
+ZResourceType ZCutscene::GetResourceType() const
+{
+ return ZResourceType::Cutscene;
+}