summaryrefslogtreecommitdiff
path: root/ZAPD/ZRoom/Commands/SetMinimapChests.cpp
blob: 25bfae7034c3d248d15c2fed586aa7985262d6ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "SetMinimapChests.h"

#include "Globals.h"
#include "Utils/BitConverter.h"
#include "Utils/StringHelper.h"
#include "ZFile.h"
#include "ZRoom/ZRoom.h"

SetMinimapChests::SetMinimapChests(ZFile* nParent) : ZRoomCommand(nParent)
{
}

void SetMinimapChests::ParseRawData()
{
	ZRoomCommand::ParseRawData();
	int numChests = cmdArg1;

	offset_t currentPtr = segmentOffset;

	chests.reserve(numChests);
	for (int32_t i = 0; i < numChests; i++)
	{
		MinimapChest chest(parent->GetRawData(), currentPtr);
		chests.push_back(chest);

		currentPtr += 10;
	}
}

void SetMinimapChests::DeclareReferences(const std::string& prefix)
{
	std::string declaration;

	size_t index = 0;
	for (const auto& chest : chests)
	{
		declaration += StringHelper::Sprintf("    { %s },", chest.GetBodySourceCode().c_str());

		if (index < chests.size() - 1)
			declaration += "\n";

		index++;
	}

	parent->AddDeclarationArray(
		segmentOffset, DeclarationAlignment::Align4, chests.size() * 10, "MinimapChest",
		StringHelper::Sprintf("%sMinimapChests0x%06X", prefix.c_str(), segmentOffset),
		chests.size(), declaration);
}

std::string SetMinimapChests::GetBodySourceCode() const
{
	std::string listName;
	Globals::Instance->GetSegmentedPtrName(cmdArg2, parent, "MinimapChest", listName,
	                                       parent->workerID);
	return StringHelper::Sprintf("SCENE_CMD_MINIMAP_COMPASS_ICON_INFO(0x%02X, %s)", chests.size(),
	                             listName.c_str());
}

std::string SetMinimapChests::GetCommandCName() const
{
	return "SCmdMinimapChests";
}

RoomCommand SetMinimapChests::GetRoomCommand() const
{
	return RoomCommand::SetMinimapChests;
}

MinimapChest::MinimapChest(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex)
	: unk0(BitConverter::ToUInt16BE(rawData, rawDataIndex + 0)),
	  unk2(BitConverter::ToUInt16BE(rawData, rawDataIndex + 2)),
	  unk4(BitConverter::ToUInt16BE(rawData, rawDataIndex + 4)),
	  unk6(BitConverter::ToUInt16BE(rawData, rawDataIndex + 6)),
	  unk8(BitConverter::ToUInt16BE(rawData, rawDataIndex + 8))
{
}

std::string MinimapChest::GetBodySourceCode() const
{
	return StringHelper::Sprintf("0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X", unk0, unk2, unk4, unk6,
	                             unk8);
}