diff --git a/Runtime/AutoMapper/CAutoMapper.cpp b/Runtime/AutoMapper/CAutoMapper.cpp index 8cb468a46..9250c752a 100644 --- a/Runtime/AutoMapper/CAutoMapper.cpp +++ b/Runtime/AutoMapper/CAutoMapper.cpp @@ -1130,33 +1130,30 @@ void CAutoMapper::ProcessControllerInput(const CFinalInput& input, CStateManager if (x300_textpane_instructions) { - if (x84_) + if (x78_areaHintDesc.IsLoaded()) { - if (x78_areaHintDesc.IsLoaded()) - { - x2fc_textpane_hint->TextSupport().SetText(x78_areaHintDesc->GetString(0)); - x304_textpane_instructions1->TextSupport().SetText(u""); - x300_textpane_instructions->TextSupport().SetText(u""); - x308_textpane_instructions2->TextSupport().SetText(u""); - } - else - { - x2fc_textpane_hint->TextSupport().SetText(u""); - std::u16string str = hecl::UTF8ToChar16( - hecl::Format("&image=SI,0.6,1.0,%8.8X;", u32(g_tweakPlayerRes->x24_lStick[x2e4_lStickPos].Value()))); - str += g_MainStringTable->GetString(46); // Rotate - x300_textpane_instructions->TextSupport().SetText(str); - str = hecl::UTF8ToChar16( - hecl::Format("&image=SI,0.6,1.0,%8.8X;", u32(g_tweakPlayerRes->x4c_cStick[x2e8_rStickPos].Value()))); - str += g_MainStringTable->GetString(47); // Move - x304_textpane_instructions1->TextSupport().SetText(str); - str = hecl::UTF8ToChar16( - hecl::Format("&image=%8.8X;", u32(g_tweakPlayerRes->x74_lTrigger[x2ec_lTriggerPos].Value()))); - str += g_MainStringTable->GetString(48); // Zoom - str += hecl::UTF8ToChar16( - hecl::Format("&image=%8.8X;", u32(g_tweakPlayerRes->x80_rTrigger[x2f0_rTriggerPos].Value()))); - x308_textpane_instructions2->TextSupport().SetText(str); - } + x2fc_textpane_hint->TextSupport().SetText(x78_areaHintDesc->GetString(0)); + x304_textpane_instructions1->TextSupport().SetText(u""); + x300_textpane_instructions->TextSupport().SetText(u""); + x308_textpane_instructions2->TextSupport().SetText(u""); + } + else + { + x2fc_textpane_hint->TextSupport().SetText(u""); + std::u16string str = hecl::UTF8ToChar16( + hecl::Format("&image=SI,0.6,1.0,%8.8X;", u32(g_tweakPlayerRes->x24_lStick[x2e4_lStickPos].Value()))); + str += g_MainStringTable->GetString(46); // Rotate + x300_textpane_instructions->TextSupport().SetText(str); + str = hecl::UTF8ToChar16( + hecl::Format("&image=SI,0.6,1.0,%8.8X;", u32(g_tweakPlayerRes->x4c_cStick[x2e8_rStickPos].Value()))); + str += g_MainStringTable->GetString(47); // Move + x304_textpane_instructions1->TextSupport().SetText(str); + str = hecl::UTF8ToChar16( + hecl::Format("&image=%8.8X;", u32(g_tweakPlayerRes->x74_lTrigger[x2ec_lTriggerPos].Value()))); + str += g_MainStringTable->GetString(48); // Zoom + str += hecl::UTF8ToChar16( + hecl::Format("&image=%8.8X;", u32(g_tweakPlayerRes->x80_rTrigger[x2f0_rTriggerPos].Value()))); + x308_textpane_instructions2->TextSupport().SetText(str); } } @@ -1233,13 +1230,15 @@ void CAutoMapper::Update(float dt, const CStateManager& mgr) std::u16string string; if (x1bc_state == EAutoMapperState::MapScreenUniverse || (x1bc_state == EAutoMapperState::MapScreen && HasCurrentMapUniverseWorld())) - string = hecl::UTF8ToChar16(hecl::Format("image=%8.8X", u32(g_tweakPlayerRes->x98_aButton[x2f4_aButtonPos].Value()))); + string = hecl::UTF8ToChar16(hecl::Format("&image=%8.8X;", u32(g_tweakPlayerRes->x98_aButton[x2f4_aButtonPos].Value()))); right1->TextSupport().SetText(string); CGuiTextPane* right = static_cast(x28_frmeMapScreen->FindWidget("textpane_right")); if (x1bc_state == EAutoMapperState::MapScreenUniverse) string = g_MainStringTable->GetString(45); - else if (x1bc_state == EAutoMapperState::MapScreen) + else if (x1bc_state == EAutoMapperState::MapScreen && HasCurrentMapUniverseWorld()) string = g_MainStringTable->GetString(44); + else + string = std::u16string(); right->TextSupport().SetText(string); } diff --git a/Runtime/AutoMapper/CAutoMapper.hpp b/Runtime/AutoMapper/CAutoMapper.hpp index 5a8148a65..184e9ae26 100644 --- a/Runtime/AutoMapper/CAutoMapper.hpp +++ b/Runtime/AutoMapper/CAutoMapper.hpp @@ -151,7 +151,6 @@ private: rstl::reserved_vector, 5> x48_mapIcons; CAssetId x74_areaHintDescId; TLockedToken x78_areaHintDesc; - u32 x84_ = 0; CAssetId x88_mapAreaStringId; TLockedToken x8c_mapAreaString; // Used to be optional u32 x9c_worldIdx = 0; diff --git a/Runtime/AutoMapper/CMapWorld.cpp b/Runtime/AutoMapper/CMapWorld.cpp index 214202852..2a27b6a43 100644 --- a/Runtime/AutoMapper/CMapWorld.cpp +++ b/Runtime/AutoMapper/CMapWorld.cpp @@ -379,14 +379,21 @@ void CMapWorld::DrawAreas(const CMapWorld::CMapWorldDrawParms& parms, int selAre const CMapArea::CMapAreaSurface& surf = mapa->GetSurface(info.GetLocalObjectIndex()); zeus::CColor color(std::max(0.f, (-parms.GetCameraTransform().basis[1]).dot( areaPostXf.rotate(surf.GetNormal()))) * g_tweakAutoMapper->GetMapSurfaceNormColorLinear() + - g_tweakAutoMapper->GetMapSurfaceNormColorConstant()); + g_tweakAutoMapper->GetMapSurfaceNormColorConstant()); color *= info.GetSurfaceColor(); if (lastAreaIdx != info.GetAreaIndex() || lastType != CMapObjectSortInfo::EObjectCode::Surface) CGraphics::SetModelMatrix(parms.GetPlaneProjectionTransform() * areaPostXf); surf.Draw(mapa->GetVertices(), color, info.GetOutlineColor(), parms.GetOutlineWidthScale()); + + lastAreaIdx = info.GetAreaIndex(); + lastType = info.GetObjectCode(); } - else if (info.GetObjectCode() == CMapObjectSortInfo::EObjectCode::Door || - info.GetObjectCode() == CMapObjectSortInfo::EObjectCode::Object) + } + for (const CMapObjectSortInfo& info : sortInfos) + { + const CMapArea* mapa = GetMapArea(info.GetAreaIndex()); + if (info.GetObjectCode() == CMapObjectSortInfo::EObjectCode::Door || + info.GetObjectCode() == CMapObjectSortInfo::EObjectCode::Object) { const CMappableObject& mapObj = mapa->GetMappableObject(info.GetLocalObjectIndex()); zeus::CTransform objXf = @@ -403,6 +410,7 @@ void CMapWorld::DrawAreas(const CMapWorld::CMapWorldDrawParms& parms, int selAre zeus::CMatrix3f(parms.GetObjectScale()))); } mapObj.Draw(selArea, mwInfo, parms.GetAlpha(), lastType != info.GetObjectCode()); + lastType = info.GetObjectCode(); } else if (info.GetObjectCode() == CMapObjectSortInfo::EObjectCode::DoorSurface) { @@ -413,9 +421,8 @@ void CMapWorld::DrawAreas(const CMapWorld::CMapWorldDrawParms& parms, int selAre CGraphics::SetModelMatrix(objXf); mapObj.DrawDoorSurface(selArea, mwInfo, parms.GetAlpha(), info.GetLocalObjectIndex() % 6, lastType != info.GetObjectCode()); + lastType = info.GetObjectCode(); } - lastAreaIdx = info.GetAreaIndex(); - lastType = info.GetObjectCode(); } } diff --git a/Runtime/Graphics/CLineRenderer.cpp b/Runtime/Graphics/CLineRenderer.cpp index 774d2cfae..8c5098598 100644 --- a/Runtime/Graphics/CLineRenderer.cpp +++ b/Runtime/Graphics/CLineRenderer.cpp @@ -106,7 +106,7 @@ static zeus::CVector2f IntersectLines(const zeus::CVector2f& pa1, const zeus::CV zeus::CVector2f pa1mpa2 = pa1 - pa2; zeus::CVector2f pb1mpb2 = pb1 - pb2; float denom = pa1mpa2.x * pb1mpb2.y - pa1mpa2.y * pb1mpb2.x; - if (denom < 0.0001f) + if (denom < 0.01f) return pa2; float numt1 = pa1.x * pa2.y - pa1.y * pa2.x; float numt2 = pb1.x * pb2.y - pb1.y * pb2.x; diff --git a/Runtime/Graphics/Shaders/CLineRendererShadersGLSL.cpp b/Runtime/Graphics/Shaders/CLineRendererShadersGLSL.cpp index 4bbc83c38..844ca7cb2 100644 --- a/Runtime/Graphics/Shaders/CLineRendererShadersGLSL.cpp +++ b/Runtime/Graphics/Shaders/CLineRendererShadersGLSL.cpp @@ -113,7 +113,7 @@ struct OGLLineDataBindingFactory : CLineRendererShaders::IDataBindingFactory {vbufInfo.first.get(), nullptr, boo::VertexSemantic::Color}, {vbufInfo.first.get(), nullptr, boo::VertexSemantic::UV4} }; - vtxFmt = ctx.newVertexFormat(3, TexFmtTex); + vtxFmt = ctx.newVertexFormat(3, TexFmtTex, vbufInfo.second); } else { @@ -123,7 +123,7 @@ struct OGLLineDataBindingFactory : CLineRendererShaders::IDataBindingFactory {vbufInfo.first.get(), nullptr, boo::VertexSemantic::Position4}, {vbufInfo.first.get(), nullptr, boo::VertexSemantic::Color} }; - vtxFmt = ctx.newVertexFormat(2, TexFmtNoTex); + vtxFmt = ctx.newVertexFormat(2, TexFmtNoTex, vbufInfo.second); } boo::ObjToken uniforms[] = {ubufInfo.first.get()}; @@ -221,7 +221,7 @@ CLineRendererShaders::IDataBindingFactory* CLineRendererShaders::Initialize(boo: m_texAlpha = ctx.newShaderPipeline(VS_GLSL_TEX, FS_GLSL_TEX, m_texVtxFmt, boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, boo::ZTest::None, - true, true, false, boo::CullMode::None); + false, true, false, boo::CullMode::None); m_texAdditive = ctx.newShaderPipeline(VS_GLSL_TEX, FS_GLSL_TEX, m_texVtxFmt, boo::BlendFactor::SrcAlpha, boo::BlendFactor::One, boo::Primitive::TriStrips, boo::ZTest::None, @@ -229,7 +229,7 @@ CLineRendererShaders::IDataBindingFactory* CLineRendererShaders::Initialize(boo: m_noTexAlpha = ctx.newShaderPipeline(VS_GLSL_NOTEX, FS_GLSL_NOTEX, m_noTexVtxFmt, boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, boo::ZTest::None, - true, true, false, boo::CullMode::None); + false, true, false, boo::CullMode::None); m_noTexAdditive = ctx.newShaderPipeline(VS_GLSL_NOTEX, FS_GLSL_NOTEX, m_noTexVtxFmt, boo::BlendFactor::SrcAlpha, boo::BlendFactor::One, boo::Primitive::TriStrips, boo::ZTest::None, diff --git a/Runtime/Graphics/Shaders/CLineRendererShadersHLSL.cpp b/Runtime/Graphics/Shaders/CLineRendererShadersHLSL.cpp index 59defbcf2..d6853609d 100644 --- a/Runtime/Graphics/Shaders/CLineRendererShadersHLSL.cpp +++ b/Runtime/Graphics/Shaders/CLineRendererShadersHLSL.cpp @@ -144,7 +144,7 @@ CLineRendererShaders::IDataBindingFactory* CLineRendererShaders::Initialize(boo: nullptr, m_texVtxFmt, boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, boo::ZTest::None, - true, true, false, boo::CullMode::None); + false, true, false, boo::CullMode::None); m_texAdditive = ctx.newShaderPipeline(VS_HLSL_TEX, FS_HLSL_TEX, nullptr, nullptr, nullptr, m_texVtxFmt, boo::BlendFactor::SrcAlpha, boo::BlendFactor::One, @@ -154,7 +154,7 @@ CLineRendererShaders::IDataBindingFactory* CLineRendererShaders::Initialize(boo: nullptr, m_noTexVtxFmt, boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, boo::ZTest::None, - true, true, false, boo::CullMode::None); + false, true, false, boo::CullMode::None); m_noTexAdditive = ctx.newShaderPipeline(VS_HLSL_NOTEX, FS_HLSL_NOTEX, nullptr, nullptr, nullptr, m_noTexVtxFmt, boo::BlendFactor::SrcAlpha, boo::BlendFactor::One, diff --git a/Runtime/Graphics/Shaders/CLineRendererShadersMetal.cpp b/Runtime/Graphics/Shaders/CLineRendererShadersMetal.cpp index 5289cd1fb..beca3c184 100644 --- a/Runtime/Graphics/Shaders/CLineRendererShadersMetal.cpp +++ b/Runtime/Graphics/Shaders/CLineRendererShadersMetal.cpp @@ -159,19 +159,23 @@ CLineRendererShaders::IDataBindingFactory* CLineRendererShaders::Initialize(boo: m_texAlpha = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX, nullptr, nullptr, m_texVtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha, - boo::Primitive::TriStrips, boo::ZTest::None, true, true, true, boo::CullMode::None); + boo::Primitive::TriStrips, boo::ZTest::None, + false, true, false, boo::CullMode::None); m_texAdditive = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX, nullptr, nullptr, m_texVtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha, boo::BlendFactor::One, - boo::Primitive::TriStrips, boo::ZTest::None, false, true, true, boo::CullMode::None); + boo::Primitive::TriStrips, boo::ZTest::None, + false, true, false, boo::CullMode::None); m_noTexAlpha = ctx.newShaderPipeline(VS_METAL_NOTEX, FS_METAL_NOTEX, nullptr, nullptr, m_noTexVtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha, - boo::Primitive::TriStrips, boo::ZTest::None, true, true, true, boo::CullMode::None); + boo::Primitive::TriStrips, boo::ZTest::None, + false, true, false, boo::CullMode::None); m_noTexAdditive = ctx.newShaderPipeline(VS_METAL_NOTEX, FS_METAL_NOTEX, nullptr, nullptr, m_noTexVtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha, boo::BlendFactor::One, - boo::Primitive::TriStrips, boo::ZTest::None, false, true, true, boo::CullMode::None); + boo::Primitive::TriStrips, boo::ZTest::None, + false, true, false, boo::CullMode::None); return new struct MetalLineDataBindingFactory; } diff --git a/Runtime/Graphics/Shaders/CTextSupportShaderHLSL.cpp b/Runtime/Graphics/Shaders/CTextSupportShaderHLSL.cpp index f74374c02..9ca32fd5a 100644 --- a/Runtime/Graphics/Shaders/CTextSupportShaderHLSL.cpp +++ b/Runtime/Graphics/Shaders/CTextSupportShaderHLSL.cpp @@ -53,7 +53,7 @@ static const char* TextFS = "};\n" "\n" "Texture2DArray tex : register(t0);\n" -"SamplerState samp : register(s0);\n" +"SamplerState samp : register(s2);\n" "\n" "float4 main(in VertToFrag vtf) : SV_Target0\n" "{\n" @@ -100,7 +100,7 @@ static const char* ImgFS = "};\n" "\n" "Texture2D tex : register(t0);\n" -"SamplerState samp : register(s0);\n" +"SamplerState samp : register(s2);\n" "\n" "float4 main(in VertToFrag vtf) : SV_Target0\n" "{\n" diff --git a/Runtime/Graphics/Shaders/CTextSupportShaderMetal.cpp b/Runtime/Graphics/Shaders/CTextSupportShaderMetal.cpp index c7ce7ddd8..44b80e8dc 100644 --- a/Runtime/Graphics/Shaders/CTextSupportShaderMetal.cpp +++ b/Runtime/Graphics/Shaders/CTextSupportShaderMetal.cpp @@ -50,7 +50,7 @@ static const char* TextVS = static const char* TextFS = "#include \n" "using namespace metal;\n" -"constexpr sampler samp(address::repeat, filter::linear);\n" +"constexpr sampler samp(address::clamp_to_edge, filter::linear);\n" "struct VertToFrag\n" "{\n" " float4 pos [[ position ]];\n" @@ -105,7 +105,7 @@ static const char* ImgVS = static const char* ImgFS = "#include \n" "using namespace metal;\n" -"constexpr sampler samp(address::repeat, filter::linear);\n" +"constexpr sampler samp(address::clamp_to_edge, filter::linear);\n" "struct VertToFrag\n" "{\n" " float4 pos [[ position ]];\n" diff --git a/Runtime/GuiSys/CGuiFrame.cpp b/Runtime/GuiSys/CGuiFrame.cpp index 3eb6450a5..c3da46778 100644 --- a/Runtime/GuiSys/CGuiFrame.cpp +++ b/Runtime/GuiSys/CGuiFrame.cpp @@ -84,7 +84,7 @@ void CGuiFrame::EnableLights(u32 lights, CBooModel& model) const ++reinterpret_cast&>(lightId); ++idx; } - if (m_indexedLights.empty()) + if (lightsOut.empty()) { //CGraphics::SetAmbientColor(zeus::CColor::skWhite); lightsOut.push_back(CLight::BuildLocalAmbient(zeus::CVector3f::skZero, zeus::CColor::skWhite)); diff --git a/Runtime/GuiSys/CInstruction.cpp b/Runtime/GuiSys/CInstruction.cpp index 00012b50d..a76e3e3bd 100644 --- a/Runtime/GuiSys/CInstruction.cpp +++ b/Runtime/GuiSys/CInstruction.cpp @@ -252,11 +252,11 @@ void CImageInstruction::Invoke(CFontRenderState& state, CTextRenderBuffer* buf) zeus::CVector2i coords(state.xd4_curX, y); buf->AddImage(coords, x4_image); } - state.xd4_curX = state.xd4_curX + tex->GetWidth() * x4_image.x14_cropFactor.y; + state.xd4_curX = state.xd4_curX + tex->GetWidth() * x4_image.x14_cropFactor.x; } else { - int scale = state.xdc_currentLineInst->x8_curX - tex->GetWidth() * x4_image.x14_cropFactor.y; + int scale = state.xdc_currentLineInst->x8_curX - tex->GetWidth() * x4_image.x14_cropFactor.x; if (buf) { zeus::CVector2i coords(scale / 2 + state.xd4_curX, state.xd8_curY); diff --git a/Runtime/GuiSys/CTextExecuteBuffer.cpp b/Runtime/GuiSys/CTextExecuteBuffer.cpp index 8b91c56de..64dbb55d3 100644 --- a/Runtime/GuiSys/CTextExecuteBuffer.cpp +++ b/Runtime/GuiSys/CTextExecuteBuffer.cpp @@ -390,7 +390,8 @@ void CTextExecuteBuffer::AddImage(const CFontImageDef& image) int width = tex->GetWidth() * image.x14_cropFactor.x; int height = tex->GetHeight() * image.x14_cropFactor.y; - if (xa4_curLine->x8_curX + width > xa0_curBlock->xc_blockExtentX && xa4_curLine->x4_wordCount > 0) + if (x18_textState.x7c_enableWordWrap && + xa4_curLine->x8_curX + width > xa0_curBlock->xc_blockExtentX && xa4_curLine->x4_wordCount > 1) StartNewLine(); xa4_curLine->TestLargestImage(width, height, image.CalculateBaseline()); diff --git a/Runtime/GuiSys/CTextParser.cpp b/Runtime/GuiSys/CTextParser.cpp index 36ccbca6c..5be248eba 100644 --- a/Runtime/GuiSys/CTextParser.cpp +++ b/Runtime/GuiSys/CTextParser.cpp @@ -151,7 +151,7 @@ void CTextParser::ParseTag(CTextExecuteBuffer& out, const char16_t* str, int len } else if (BeginsWith(str, len, u"line-extra-space=")) { - out.AddLineSpacing(ParseInt(str + 17, len - 17, true)); + out.AddLineExtraSpace(ParseInt(str + 17, len - 17, true)); } else if (BeginsWith(str, len, u"just=")) { diff --git a/Runtime/GuiSys/CTextRenderBuffer.cpp b/Runtime/GuiSys/CTextRenderBuffer.cpp index 45ed4b736..77d4e4c45 100644 --- a/Runtime/GuiSys/CTextRenderBuffer.cpp +++ b/Runtime/GuiSys/CTextRenderBuffer.cpp @@ -128,6 +128,7 @@ void CTextRenderBuffer::CommitResources() for (TToken& tex : img.m_imageDef.x4_texs) { boo::ObjToken texs[] = {tex->GetBooTexture()}; + texs[0]->setClampMode(boo::TextureClampMode::ClampToEdge); img.m_dataBinding.push_back(ctx.newShaderDataBinding(CTextSupportShader::SelectImagePipeline(m_drawFlags), vFmt, nullptr, iBufInfo.first.get(), nullptr, 1, uniforms, unistages, unioffs, diff --git a/Runtime/MP1/CPauseScreenBlur.cpp b/Runtime/MP1/CPauseScreenBlur.cpp index 1fa638161..167e04b85 100644 --- a/Runtime/MP1/CPauseScreenBlur.cpp +++ b/Runtime/MP1/CPauseScreenBlur.cpp @@ -110,7 +110,7 @@ void CPauseScreenBlur::Draw(const CStateManager&) const filterColor, t); zeus::CColor scanLinesColor = zeus::CColor::lerp(zeus::CColor::skWhite, zeus::CColor(0.75f, 1.f), t); - //const_cast(m_linesFilter).draw(scanLinesColor); + const_cast(m_linesFilter).draw(scanLinesColor); } if (x50_24_blurring /*&& x1c_camBlur.x2d_noPersistentCopy*/) diff --git a/hecl b/hecl index 47e0feda0..fd8b53d62 160000 --- a/hecl +++ b/hecl @@ -1 +1 @@ -Subproject commit 47e0feda0dffb476757d78cbb07c7500a16185e6 +Subproject commit fd8b53d626cf1204c8d6dea80f64573afc8e784a diff --git a/specter b/specter index 45c81ae95..3e04e86ae 160000 --- a/specter +++ b/specter @@ -1 +1 @@ -Subproject commit 45c81ae955c52c9cf185c643879b3436595f5b06 +Subproject commit 3e04e86ae9735d69de5ed5889471e8e45669e3ea