athena/src/ZQuestFile.cpp

132 lines
3.3 KiB
C++
Raw Normal View History

// This file is part of libZelda.
//
// libZelda is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// libZelda is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with libZelda. If not, see <http://www.gnu.org/licenses/>
#include "ZQuestFile.hpp"
#include <string.h>
2013-07-21 03:51:26 +00:00
namespace zelda
{
const Uint32 ZQuestFile::Major = 1;
const Uint32 ZQuestFile::Minor = 0;
const Uint32 ZQuestFile::Revision = 0;
const Uint32 ZQuestFile::Build = 0;
2013-07-21 03:51:26 +00:00
const Uint32 ZQuestFile::Version = Major | (Minor << 8) | (Revision << 16) | (Build << 24);
2013-07-21 03:51:26 +00:00
const Uint32 ZQuestFile::Magic = 'Z' | ('Q' << 8) | ('S' << 16) | ('1' << 24);
2013-07-21 03:51:26 +00:00
ZQuestFile::ZQuestFile()
2013-07-21 03:51:26 +00:00
: m_game(NoGame),
m_endian(LittleEndian),
m_data(NULL),
m_length(0)
{
initGameStrings();
}
ZQuestFile::ZQuestFile(ZQuestFile::Game game, Endian endian, Uint8* data, Uint32 length)
2013-07-21 03:51:26 +00:00
: m_game(game),
m_endian(endian),
m_data(data),
m_length(length)
{
initGameStrings();
}
ZQuestFile::~ZQuestFile()
2013-07-21 03:51:26 +00:00
{
delete[] m_data;
m_data = NULL;
m_length = 0;
}
void ZQuestFile::setGame(ZQuestFile::Game game)
2013-07-21 03:51:26 +00:00
{
m_game = game;
}
ZQuestFile::Game ZQuestFile::game() const
2013-07-21 03:51:26 +00:00
{
return m_game;
}
void ZQuestFile::setEndian(Endian endian)
2013-07-21 03:51:26 +00:00
{
m_endian = endian;
}
Endian ZQuestFile::endian() const
2013-07-21 03:51:26 +00:00
{
return m_endian;
}
void ZQuestFile::setData(Uint8* data, Uint32 length)
2013-07-21 03:51:26 +00:00
{
// ensure we're not overwritting our data without freeing first
// or assigning unnecessisarily
if (!m_data || m_data != data)
{
delete[] m_data;
m_data = new Uint8[length];
memcpy(m_data, data, length);
m_length = length;
2013-07-21 03:51:26 +00:00
}
}
Uint8* ZQuestFile::data() const
2013-07-21 03:51:26 +00:00
{
return m_data;
}
Uint32 ZQuestFile::length() const
2013-07-21 03:51:26 +00:00
{
return m_length;
}
std::string ZQuestFile::gameString() const
2013-07-21 03:51:26 +00:00
{
if (m_game > m_gameStrings.size() - 1)
return "Unsupported Game";
return m_gameStrings[m_game];
}
void ZQuestFile::initGameStrings()
2013-07-21 03:51:26 +00:00
{
m_gameStrings.push_back("No Game");
m_gameStrings.push_back("Legend Of Zelda");
m_gameStrings.push_back("Adventure of Link");
m_gameStrings.push_back("A Link to the Past");
m_gameStrings.push_back("Links Awakening");
m_gameStrings.push_back("Ocarina of Time");
m_gameStrings.push_back("Ocarina of Time 3D");
m_gameStrings.push_back("Majora's Mask");
m_gameStrings.push_back("Oracle of Seasons");
m_gameStrings.push_back("Oracle of Ages");
m_gameStrings.push_back("For Swords");
m_gameStrings.push_back("Wind Waker");
m_gameStrings.push_back("Four Swords Adventures");
m_gameStrings.push_back("Minish Cap");
m_gameStrings.push_back("Twilight Princess");
m_gameStrings.push_back("Phantom Hourglass");
m_gameStrings.push_back("Spirit Tracks");
m_gameStrings.push_back("Skyward Sword");
m_gameStrings.push_back("A Link Between Worlds (Unreleased)");
}
}