mirror of https://github.com/AxioDL/metaforce.git
Fix font rendering and world teleporter in MPT and PAL
This commit is contained in:
parent
b507799478
commit
70747e23d5
|
@ -867,7 +867,9 @@ const boo::ObjToken<boo::ITexture>& CTexture::GetFontTexture(EFontType tp) {
|
||||||
CFactoryFnReturn FTextureFactory(const urde::SObjectTag& tag, std::unique_ptr<u8[]>&& in, u32 len,
|
CFactoryFnReturn FTextureFactory(const urde::SObjectTag& tag, std::unique_ptr<u8[]>&& in, u32 len,
|
||||||
const urde::CVParamTransfer& vparms, CObjectReference* selfRef) {
|
const urde::CVParamTransfer& vparms, CObjectReference* selfRef) {
|
||||||
u32 u32Owned = vparms.GetOwnedObj<u32>();
|
u32 u32Owned = vparms.GetOwnedObj<u32>();
|
||||||
const CTextureInfo* inf = g_TextureCache->GetTextureInfo(tag.id);
|
const CTextureInfo* inf = nullptr;
|
||||||
|
if (g_TextureCache)
|
||||||
|
inf = g_TextureCache->GetTextureInfo(tag.id);
|
||||||
return TToken<CTexture>::GetIObjObjectFor(
|
return TToken<CTexture>::GetIObjObjectFor(
|
||||||
std::make_unique<CTexture>(std::move(in), len, u32Owned == SBIG('OTEX'), inf));
|
std::make_unique<CTexture>(std::move(in), len, u32Owned == SBIG('OTEX'), inf));
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ CRasterFont::CRasterFont(urde::CInputStream& in, urde::IObjectStore& store) {
|
||||||
u32 txtrId = (version == 5 ? in.readUint64Big() : in.readUint32Big());
|
u32 txtrId = (version == 5 ? in.readUint64Big() : in.readUint32Big());
|
||||||
x30_fontInfo = CFontInfo(tmp1, tmp2, tmp3, tmp4, name.c_str());
|
x30_fontInfo = CFontInfo(tmp1, tmp2, tmp3, tmp4, name.c_str());
|
||||||
x80_texture = store.GetObj({FOURCC('TXTR'), txtrId});
|
x80_texture = store.GetObj({FOURCC('TXTR'), txtrId});
|
||||||
x2c_mode = EColorType(in.readUint32Big());
|
x2c_mode = CTexture::EFontType(in.readUint32Big());
|
||||||
|
|
||||||
u32 glyphCount = in.readUint32Big();
|
u32 glyphCount = in.readUint32Big();
|
||||||
xc_glyphs.reserve(glyphCount);
|
xc_glyphs.reserve(glyphCount);
|
||||||
|
@ -79,7 +79,7 @@ CRasterFont::CRasterFont(urde::CInputStream& in, urde::IObjectStore& store) {
|
||||||
x1c_kerning.emplace_back(first, second, howMuch);
|
x1c_kerning.emplace_back(first, second, howMuch);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (magic == SBIG('FONT') && version <= 2)
|
if (magic == SBIG('FONT') && version <= 4)
|
||||||
x0_initialized = true;
|
x0_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ class CRasterFont {
|
||||||
s32 x8_monoHeight = 16;
|
s32 x8_monoHeight = 16;
|
||||||
std::vector<std::pair<char16_t, CGlyph>> xc_glyphs;
|
std::vector<std::pair<char16_t, CGlyph>> xc_glyphs;
|
||||||
std::vector<CKernPair> x1c_kerning;
|
std::vector<CKernPair> x1c_kerning;
|
||||||
EColorType x2c_mode = EColorType::Main;
|
CTexture::EFontType x2c_mode = CTexture::EFontType::OneLayer;
|
||||||
CFontInfo x30_fontInfo;
|
CFontInfo x30_fontInfo;
|
||||||
TLockedToken<CTexture> x80_texture;
|
TLockedToken<CTexture> x80_texture;
|
||||||
s32 x8c_baseline;
|
s32 x8c_baseline;
|
||||||
|
@ -125,7 +125,20 @@ public:
|
||||||
|
|
||||||
s32 GetMonoWidth() const { return x4_monoWidth; }
|
s32 GetMonoWidth() const { return x4_monoWidth; }
|
||||||
s32 GetMonoHeight() const { return x8_monoHeight; }
|
s32 GetMonoHeight() const { return x8_monoHeight; }
|
||||||
EColorType GetMode() const { return x2c_mode; }
|
EColorType GetMode() const {
|
||||||
|
switch(x2c_mode) {
|
||||||
|
case CTexture::EFontType::OneLayer:
|
||||||
|
case CTexture::EFontType::TwoLayers:
|
||||||
|
case CTexture::EFontType::FourLayers:
|
||||||
|
return EColorType::Main;
|
||||||
|
case CTexture::EFontType::OneLayerOutline:
|
||||||
|
case CTexture::EFontType::TwoLayersOutlines:
|
||||||
|
case CTexture::EFontType::TwoLayersOutlines2:
|
||||||
|
return EColorType::Outline;
|
||||||
|
default:
|
||||||
|
return EColorType::Main;
|
||||||
|
}
|
||||||
|
}
|
||||||
s32 GetLineMargin() const { return x90_lineMargin; }
|
s32 GetLineMargin() const { return x90_lineMargin; }
|
||||||
s32 GetCarriageAdvance() const { return GetLineMargin() + GetMonoHeight(); }
|
s32 GetCarriageAdvance() const { return GetLineMargin() + GetMonoHeight(); }
|
||||||
|
|
||||||
|
@ -148,7 +161,7 @@ public:
|
||||||
const CGlyph* GetGlyph(char16_t chr) const { return InternalGetGlyph(chr); }
|
const CGlyph* GetGlyph(char16_t chr) const { return InternalGetGlyph(chr); }
|
||||||
void GetSize(const CDrawStringOptions& opts, int& width, int& height, const char16_t* str, int len) const;
|
void GetSize(const CDrawStringOptions& opts, int& width, int& height, const char16_t* str, int len) const;
|
||||||
const boo::ObjToken<boo::ITexture>& GetTexture() {
|
const boo::ObjToken<boo::ITexture>& GetTexture() {
|
||||||
return x80_texture->GetFontTexture(CTexture::EFontType(x2c_mode));
|
return x80_texture->GetFontTexture(x2c_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsFinishedLoading() const;
|
bool IsFinishedLoading() const;
|
||||||
|
|
|
@ -2352,7 +2352,7 @@ CEntity* ScriptLoader::LoadVisorFlare(CStateManager& mgr, CInputStream& in, int
|
||||||
|
|
||||||
CEntity* ScriptLoader::LoadWorldTeleporter(CStateManager& mgr, CInputStream& in, int propCount,
|
CEntity* ScriptLoader::LoadWorldTeleporter(CStateManager& mgr, CInputStream& in, int propCount,
|
||||||
const CEntityInfo& info) {
|
const CEntityInfo& info) {
|
||||||
if (propCount < 4 || propCount > 21) {
|
if (propCount < 4 || propCount > 26) {
|
||||||
Log.report(logvisor::Warning, fmt("Incorrect number of props for WorldTeleporter"));
|
Log.report(logvisor::Warning, fmt("Incorrect number of props for WorldTeleporter"));
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -2383,6 +2383,11 @@ CEntity* ScriptLoader::LoadWorldTeleporter(CStateManager& mgr, CInputStream& in,
|
||||||
float charFadeInTime = (propCount < 19 ? 0.1f : in.readFloatBig());
|
float charFadeInTime = (propCount < 19 ? 0.1f : in.readFloatBig());
|
||||||
float charsPerSecond = (propCount < 20 ? 16.f : in.readFloatBig());
|
float charsPerSecond = (propCount < 20 ? 16.f : in.readFloatBig());
|
||||||
float showDelay = (propCount < 21 ? 0.f : in.readFloatBig());
|
float showDelay = (propCount < 21 ? 0.f : in.readFloatBig());
|
||||||
|
std::string str1 = (propCount < 22 ? "" : in.readString());
|
||||||
|
std::string str2 = (propCount < 23 ? "" : in.readString());
|
||||||
|
/*float f1 =*/ (propCount < 24 ? 0.f : in.readFloatBig());
|
||||||
|
/*float f2 =*/ (propCount < 25 ? 0.f : in.readFloatBig());
|
||||||
|
/*float f3 =*/(propCount < 26 ? 0.f : in.readFloatBig());
|
||||||
|
|
||||||
if (showText)
|
if (showText)
|
||||||
return new CScriptWorldTeleporter(mgr.AllocateUniqueId(), name, info, active, worldId, areaId, elevatorSound,
|
return new CScriptWorldTeleporter(mgr.AllocateUniqueId(), name, info, active, worldId, areaId, elevatorSound,
|
||||||
|
|
Loading…
Reference in New Issue