mirror of https://github.com/AxioDL/metaforce.git
More text fixes
This commit is contained in:
parent
eff44ad56a
commit
db38e5b288
|
@ -62,6 +62,7 @@ public:
|
||||||
|
|
||||||
class CCharacterExtraSpaceInstruction : public CInstruction {
|
class CCharacterExtraSpaceInstruction : public CInstruction {
|
||||||
s32 x4_extraSpace;
|
s32 x4_extraSpace;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CCharacterExtraSpaceInstruction(s32 extraSpace) : x4_extraSpace(extraSpace) {}
|
explicit CCharacterExtraSpaceInstruction(s32 extraSpace) : x4_extraSpace(extraSpace) {}
|
||||||
void Invoke(CFontRenderState& state, CTextRenderBuffer* buf) const override;
|
void Invoke(CFontRenderState& state, CTextRenderBuffer* buf) const override;
|
||||||
|
@ -87,8 +88,8 @@ class CLineInstruction : public CInstruction {
|
||||||
bool x30_imageBaseline;
|
bool x30_imageBaseline;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CLineInstruction(EJustification just, EVerticalJustification vjust, bool imageBaseline)
|
CLineInstruction(s32 wordCount, int x, int y, EJustification just, EVerticalJustification vjust, bool imageBaseline)
|
||||||
: x28_just(just), x2c_vjust(vjust), x30_imageBaseline(imageBaseline) {}
|
: x4_wordCount(wordCount), x8_curX(x), xc_curY(y), x28_just(just), x2c_vjust(vjust), x30_imageBaseline(imageBaseline) {}
|
||||||
void TestLargestFont(s32 w, s32 h, s32 b);
|
void TestLargestFont(s32 w, s32 h, s32 b);
|
||||||
void TestLargestImage(s32 w, s32 h, s32 b);
|
void TestLargestImage(s32 w, s32 h, s32 b);
|
||||||
void InvokeLTR(CFontRenderState& state) const;
|
void InvokeLTR(CFontRenderState& state) const;
|
||||||
|
|
|
@ -220,12 +220,13 @@ void CTextExecuteBuffer::MoveWordLTR() {
|
||||||
xa4_curLine->xc_curY = std::min(xa4_curLine->xc_curY, xb8_curWordY);
|
xa4_curLine->xc_curY = std::min(xa4_curLine->xc_curY, xb8_curWordY);
|
||||||
xbc_spaceDistance = 0;
|
xbc_spaceDistance = 0;
|
||||||
--xa4_curLine->x4_wordCount;
|
--xa4_curLine->x4_wordCount;
|
||||||
TerminateLineLTR();
|
TerminateLineLTR(false);
|
||||||
|
|
||||||
xa4_curLine = static_cast<CLineInstruction*>(
|
xa4_curLine = static_cast<CLineInstruction*>(
|
||||||
x0_instList
|
x0_instList
|
||||||
.emplace(xa8_curWordIt, std::make_shared<CLineInstruction>(x18_textState.x80_just, x18_textState.x84_vjust,
|
.emplace(xa8_curWordIt,
|
||||||
xc0_imageBaseline))
|
std::make_shared<CLineInstruction>(1, xb4_curWordX, xb8_curWordY, x18_textState.x80_just,
|
||||||
|
x18_textState.x84_vjust, xc0_imageBaseline))
|
||||||
->get());
|
->get());
|
||||||
|
|
||||||
// Dunno what's up with this in the original; seems fine without
|
// Dunno what's up with this in the original; seems fine without
|
||||||
|
@ -235,12 +236,13 @@ void CTextExecuteBuffer::MoveWordLTR() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTextExecuteBuffer::StartNewLine() {
|
void CTextExecuteBuffer::StartNewLine() {
|
||||||
if (xa4_curLine)
|
if (xa4_curLine) {
|
||||||
TerminateLine();
|
TerminateLine(true);
|
||||||
|
}
|
||||||
|
|
||||||
xa8_curWordIt = x0_instList.emplace(
|
xa8_curWordIt = x0_instList.emplace(
|
||||||
x0_instList.cend(),
|
x0_instList.cend(),
|
||||||
std::make_shared<CLineInstruction>(x18_textState.x80_just, x18_textState.x84_vjust, xc0_imageBaseline));
|
std::make_shared<CLineInstruction>(0, 0, 0, x18_textState.x80_just, x18_textState.x84_vjust, xc0_imageBaseline));
|
||||||
xa4_curLine = static_cast<CLineInstruction*>(xa8_curWordIt->get());
|
xa4_curLine = static_cast<CLineInstruction*>(xa8_curWordIt->get());
|
||||||
xbc_spaceDistance = 0;
|
xbc_spaceDistance = 0;
|
||||||
|
|
||||||
|
@ -257,17 +259,21 @@ void CTextExecuteBuffer::StartNewWord() {
|
||||||
++xa4_curLine->x4_wordCount;
|
++xa4_curLine->x4_wordCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTextExecuteBuffer::TerminateLine() {
|
void CTextExecuteBuffer::TerminateLine(bool b) {
|
||||||
if (xa0_curBlock->x14_dir == ETextDirection::Horizontal)
|
if (xa0_curBlock->x14_dir == ETextDirection::Horizontal)
|
||||||
TerminateLineLTR();
|
TerminateLineLTR(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTextExecuteBuffer::TerminateLineLTR() {
|
void CTextExecuteBuffer::TerminateLineLTR(bool b) {
|
||||||
if (!xa4_curLine->xc_curY /*&& x18_textState.IsFinishedLoading()*/) {
|
if (!xa4_curLine->xc_curY && x18_textState.IsFinishedLoading()) {
|
||||||
xa4_curLine->xc_curY = std::max(xa4_curLine->GetHeight(), x18_textState.x48_font->GetCarriageAdvance());
|
xa4_curLine->xc_curY = std::max(xa4_curLine->GetHeight(), x18_textState.x48_font->GetCarriageAdvance());
|
||||||
}
|
}
|
||||||
|
bool b2 = true;
|
||||||
|
if (xa0_curBlock->x1c_vertJustification != EVerticalJustification::Full && !b) {
|
||||||
|
b2 = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (xa0_curBlock->x1c_vertJustification == EVerticalJustification::Full) {
|
if (b2) {
|
||||||
xa0_curBlock->x30_lineY += xa4_curLine->xc_curY;
|
xa0_curBlock->x30_lineY += xa4_curLine->xc_curY;
|
||||||
} else {
|
} else {
|
||||||
xa0_curBlock->x30_lineY += x18_textState.x78_extraLineSpace + xa4_curLine->xc_curY * x18_textState.x74_lineSpacing;
|
xa0_curBlock->x30_lineY += x18_textState.x78_extraLineSpace + xa4_curLine->xc_curY * x18_textState.x74_lineSpacing;
|
||||||
|
@ -293,19 +299,17 @@ void CTextExecuteBuffer::AddPushState() {
|
||||||
|
|
||||||
void CTextExecuteBuffer::AddVerticalJustification(EVerticalJustification vjust) {
|
void CTextExecuteBuffer::AddVerticalJustification(EVerticalJustification vjust) {
|
||||||
x18_textState.x84_vjust = vjust;
|
x18_textState.x84_vjust = vjust;
|
||||||
if (!xa4_curLine)
|
if (xa4_curLine == nullptr || xa4_curLine->x8_curX != 0) {
|
||||||
return;
|
|
||||||
if (xa4_curLine->x8_curX)
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
xa4_curLine->x2c_vjust = vjust;
|
xa4_curLine->x2c_vjust = vjust;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTextExecuteBuffer::AddJustification(EJustification just) {
|
void CTextExecuteBuffer::AddJustification(EJustification just) {
|
||||||
x18_textState.x80_just = just;
|
x18_textState.x80_just = just;
|
||||||
if (!xa4_curLine)
|
if (xa4_curLine == nullptr || xa4_curLine->x8_curX != 0) {
|
||||||
return;
|
|
||||||
if (xa4_curLine->x8_curX)
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
xa4_curLine->x28_just = just;
|
xa4_curLine->x28_just = just;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,7 +376,7 @@ void CTextExecuteBuffer::AddFont(const TToken<CRasterFont>& font) {
|
||||||
|
|
||||||
void CTextExecuteBuffer::EndBlock() {
|
void CTextExecuteBuffer::EndBlock() {
|
||||||
if (xa4_curLine)
|
if (xa4_curLine)
|
||||||
TerminateLine();
|
TerminateLine(false);
|
||||||
xa4_curLine = nullptr;
|
xa4_curLine = nullptr;
|
||||||
xa0_curBlock = nullptr;
|
xa0_curBlock = nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ class CTextExecuteBuffer {
|
||||||
using InstList = std::list<std::shared_ptr<CInstruction>>;
|
using InstList = std::list<std::shared_ptr<CInstruction>>;
|
||||||
|
|
||||||
InstList x0_instList;
|
InstList x0_instList;
|
||||||
u32 x14_ = 0;
|
|
||||||
CSaveableState x18_textState;
|
CSaveableState x18_textState;
|
||||||
CBlockInstruction* xa0_curBlock = nullptr;
|
CBlockInstruction* xa0_curBlock = nullptr;
|
||||||
CLineInstruction* xa4_curLine = nullptr;
|
CLineInstruction* xa4_curLine = nullptr;
|
||||||
|
@ -34,7 +33,6 @@ class CTextExecuteBuffer {
|
||||||
s32 xbc_spaceDistance = 0;
|
s32 xbc_spaceDistance = 0;
|
||||||
bool xc0_imageBaseline = false;
|
bool xc0_imageBaseline = false;
|
||||||
std::list<CSaveableState> xc4_stateStack;
|
std::list<CSaveableState> xc4_stateStack;
|
||||||
u32 xd8_ = 0;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CTextExecuteBuffer() : xa8_curWordIt{x0_instList.begin()} {}
|
CTextExecuteBuffer() : xa8_curWordIt{x0_instList.begin()} {}
|
||||||
|
@ -51,8 +49,8 @@ public:
|
||||||
void MoveWordLTR();
|
void MoveWordLTR();
|
||||||
void StartNewLine();
|
void StartNewLine();
|
||||||
void StartNewWord();
|
void StartNewWord();
|
||||||
void TerminateLine();
|
void TerminateLine(bool b);
|
||||||
void TerminateLineLTR();
|
void TerminateLineLTR(bool b);
|
||||||
void AddPopState();
|
void AddPopState();
|
||||||
void AddPushState();
|
void AddPushState();
|
||||||
void AddVerticalJustification(EVerticalJustification vjust);
|
void AddVerticalJustification(EVerticalJustification vjust);
|
||||||
|
|
|
@ -103,7 +103,7 @@ static std::optional<std::string> remap_controller_layout(std::string_view mappi
|
||||||
Log.report(logvisor::Error, FMT_STRING("Controller has unsupported layout: {}"), mapping);
|
Log.report(logvisor::Error, FMT_STRING("Controller has unsupported layout: {}"), mapping);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
for (const auto [k, v] : entries) {
|
for (auto [k, v] : entries) {
|
||||||
newMapping.push_back(',');
|
newMapping.push_back(',');
|
||||||
newMapping.append(k);
|
newMapping.append(k);
|
||||||
newMapping.push_back(':');
|
newMapping.push_back(':');
|
||||||
|
|
Loading…
Reference in New Issue