mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-21 10:49:23 +00:00
Added ability to edit the game name in opening.bnr; slightly reorganized world editor menu options
This commit is contained in:
@@ -230,7 +230,8 @@ HEADERS += \
|
||||
Resource/CSavedStateID.h \
|
||||
IProgressNotifier.h \
|
||||
IUIRelay.h \
|
||||
Resource/CResTypeFilter.h
|
||||
Resource/CResTypeFilter.h \
|
||||
GameProject/COpeningBanner.h
|
||||
|
||||
# Source Files
|
||||
SOURCES += \
|
||||
@@ -337,4 +338,5 @@ SOURCES += \
|
||||
GameProject/CGameInfo.cpp \
|
||||
Resource/CResTypeInfo.cpp \
|
||||
CompressionUtil.cpp \
|
||||
IUIRelay.cpp
|
||||
IUIRelay.cpp \
|
||||
GameProject\COpeningBanner.cpp
|
||||
|
||||
71
src/Core/GameProject/COpeningBanner.cpp
Normal file
71
src/Core/GameProject/COpeningBanner.cpp
Normal file
@@ -0,0 +1,71 @@
|
||||
#include "COpeningBanner.h"
|
||||
#include "CGameProject.h"
|
||||
|
||||
COpeningBanner::COpeningBanner(CGameProject *pProj)
|
||||
: mpProj(pProj)
|
||||
{
|
||||
mWii = mpProj->IsWiiBuild();
|
||||
|
||||
TString BannerPath = mpProj->DiscFilesystemRoot(false) + "opening.bnr";
|
||||
CFileInStream Banner(BannerPath, IOUtil::eBigEndian);
|
||||
|
||||
if (Banner.IsValid())
|
||||
{
|
||||
mBannerData.resize(Banner.Size());
|
||||
Banner.ReadBytes(mBannerData.data(), mBannerData.size());
|
||||
}
|
||||
}
|
||||
|
||||
TString COpeningBanner::EnglishGameName() const
|
||||
{
|
||||
// opening.bnr stores the game name in a fixed-length buffer. Need to account for
|
||||
// this and prevent the string-reading function from overrunning the buffer
|
||||
CMemoryInStream Banner(mBannerData.data(), mBannerData.size(), IOUtil::eBigEndian);
|
||||
|
||||
u32 CharSize = mWii ? 2 : 1;
|
||||
u32 MaxLen = MaxGameNameLength();
|
||||
|
||||
std::vector<u8> NameBuffer((MaxLen + 1) * CharSize, 0);
|
||||
Banner.GoTo( mWii ? 0xB0 : 0x1860 );
|
||||
Banner.ReadBytes(NameBuffer.data(), MaxLen * CharSize);
|
||||
|
||||
Banner.SetData(NameBuffer.data(), NameBuffer.size(), IOUtil::eBigEndian);
|
||||
return mWii ? Banner.ReadWString().ToUTF8() : Banner.ReadString();
|
||||
}
|
||||
|
||||
void COpeningBanner::SetEnglishGameName(const TString& rkName)
|
||||
{
|
||||
CMemoryOutStream Banner(mBannerData.data(), mBannerData.size(), IOUtil::eBigEndian);
|
||||
u32 PadCount = 0;
|
||||
|
||||
u32 MaxLen = MaxGameNameLength();
|
||||
ASSERT(rkName.Size() <= MaxLen);
|
||||
|
||||
if (mWii)
|
||||
{
|
||||
Banner.GoTo(0xB0);
|
||||
Banner.WriteWString(rkName.ToUTF16(), -1, false);
|
||||
PadCount = (MaxLen - rkName.Size()) * 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
Banner.GoTo(0x1860);
|
||||
Banner.WriteString(rkName, -1, false);
|
||||
PadCount = MaxLen - rkName.Size();
|
||||
}
|
||||
|
||||
for (u32 Pad = 0; Pad < PadCount; Pad++)
|
||||
Banner.WriteByte(0);
|
||||
}
|
||||
|
||||
void COpeningBanner::Save()
|
||||
{
|
||||
TString BannerPath = mpProj->DiscFilesystemRoot(false) + "opening.bnr";
|
||||
CFileOutStream Banner(BannerPath, IOUtil::eBigEndian);
|
||||
Banner.WriteBytes(mBannerData.data(), mBannerData.size());
|
||||
}
|
||||
|
||||
u32 COpeningBanner::MaxGameNameLength() const
|
||||
{
|
||||
return (mWii ? 21 : 64);
|
||||
}
|
||||
24
src/Core/GameProject/COpeningBanner.h
Normal file
24
src/Core/GameProject/COpeningBanner.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef COPENINGBANNER_H
|
||||
#define COPENINGBANNER_H
|
||||
|
||||
#include <Common/Common.h>
|
||||
class CGameProject;
|
||||
|
||||
// This class can be expanded later for better editing functionality.
|
||||
// For the moment, we're only worried about editing the long game name.
|
||||
class COpeningBanner
|
||||
{
|
||||
CGameProject *mpProj;
|
||||
std::vector<u8> mBannerData;
|
||||
bool mWii;
|
||||
|
||||
public:
|
||||
COpeningBanner(CGameProject *pProj);
|
||||
TString EnglishGameName() const;
|
||||
void SetEnglishGameName(const TString& rkName);
|
||||
void Save();
|
||||
|
||||
u32 MaxGameNameLength() const;
|
||||
};
|
||||
|
||||
#endif // COPENINGBANNER_H
|
||||
@@ -187,7 +187,7 @@ bool CTexture::WriteDDS(IOutputStream& rOut)
|
||||
|
||||
CopyGLBuffer();
|
||||
|
||||
rOut.WriteString("DDS ", 4); // "DDS " fourCC
|
||||
rOut.WriteFourCC(FOURCC('DDS')); // "DDS " fourCC
|
||||
rOut.WriteLong(0x7C); // dwSize
|
||||
rOut.WriteLong(0x21007); // dwFlags
|
||||
rOut.WriteLong(mHeight); // dwHeight
|
||||
@@ -245,7 +245,7 @@ bool CTexture::WriteDDS(IOutputStream& rOut)
|
||||
}
|
||||
|
||||
rOut.WriteLong(PFFlags); // DDS_PIXELFORMAT.dwFlags
|
||||
(mTexelFormat == eDXT1) ? rOut.WriteString("DXT1", 4) : rOut.WriteLong(0); // DDS_PIXELFORMAT.dwFourCC
|
||||
(mTexelFormat == eDXT1) ? rOut.WriteFourCC(FOURCC('DXT1')) : rOut.WriteLong(0); // DDS_PIXELFORMAT.dwFourCC
|
||||
rOut.WriteLong(PFBpp); // DDS_PIXELFORMAT.dwRGBBitCount
|
||||
rOut.WriteLong(PFRBitMask); // DDS_PIXELFORMAT.dwRBitMask
|
||||
rOut.WriteLong(PFGBitMask); // DDS_PIXELFORMAT.dwGBitMask
|
||||
|
||||
Reference in New Issue
Block a user