This commit is contained in:
robojumper
2025-03-31 03:34:21 +02:00
committed by GitHub
parent e85a989271
commit daadae4881
7 changed files with 127 additions and 85 deletions
+13 -13
View File
@@ -3782,7 +3782,7 @@ setAnmFrame__Q23d2d14AnmGroupBase_cFf = .text:0x800AC900; // type:function size:
syncAnmFrame__Q23d2d14AnmGroupBase_cFv = .text:0x800AC910; // type:function size:0xC
setForward__Q23d2d14AnmGroupBase_cFv = .text:0x800AC920; // type:function size:0x14
setBackward__Q23d2d14AnmGroupBase_cFv = .text:0x800AC940; // type:function size:0x14
fn_800AC960 = .text:0x800AC960; // type:function size:0x4C
pushToEnd__3d2dFPQ34nw4r3lyt4Pane = .text:0x800AC960; // type:function size:0x4C
init__Q23d2d9AnmGroupsFPQ23d2d10AnmGroup_cPCQ23d2d15LytBrlanMappingUlPQ23m2d10ResAccIf_cPQ23d2d8Layout_c = .text:0x800AC9B0; // type:function size:0x80
remove__Q23d2d9AnmGroupsFv = .text:0x800ACA30; // type:function size:0x64
draw__Q23d2d9LytBase_cFv = .text:0x800ACAA0; // type:function size:0x18
@@ -3860,7 +3860,7 @@ fn_800B0DE0 = .text:0x800B0DE0; // type:function size:0x158
fn_800B0F40 = .text:0x800B0F40; // type:function size:0x240
fn_800B1180 = .text:0x800B1180; // type:function size:0x3F0
dTextBox_c__setFontSize = .text:0x800B1570; // type:function size:0x14
fn_800B1590 = .text:0x800B1590; // type:function size:0x14
MySetScale__10dTextBox_cFRCQ34nw4r3lyt4Size = .text:0x800B1590; // type:function size:0x14
GetRuntimeTypeInfo__Q34nw4r3lyt7TextBoxCFv = .text:0x800B15B0; // type:function size:0x8 scope:weak
fn_800B15C0 = .text:0x800B15C0; // type:function size:0x68
__ct__9dWindow_cFPCQ44nw4r3lyt3res6WindowRCQ34nw4r3lyt11ResBlockSet = .text:0x800B1630; // type:function size:0x3C
@@ -29169,9 +29169,9 @@ lbl_804FBC7C = .rodata:0x804FBC7C; // type:object size:0xC
zeroVec__3EGG = .rodata:0x804FBC88; // type:object size:0xC data:float
lbl_804FBC98 = .rodata:0x804FBC98; // type:object size:0xC data:4byte
lbl_804FBCA4 = .rodata:0x804FBCA4; // type:object size:0xC data:4byte
lbl_804FBCB0 = .rodata:0x804FBCB0; // type:object size:0x10 data:4byte
sIndTexMtxId__3EGG = .rodata:0x804FBCB0; // type:object size:0xC data:4byte
sCpuTexGradientOp__3EGG = .rodata:0x804FBCC0; // type:object size:0x48 data:4byte
lbl_804FBD08 = .rodata:0x804FBD08; // type:object size:0x48 data:float
lbl_804FBD08 = .rodata:0x804FBD08; // type:object size:0xC data:float
lbl_804FBD50 = .rodata:0x804FBD50; // type:object size:0x10 data:float
lbl_804FBD60 = .rodata:0x804FBD60; // type:object size:0x10 data:float
lbl_804FBD70 = .rodata:0x804FBD70; // type:object size:0x18
@@ -30943,7 +30943,7 @@ lbl_8050FF88 = .data:0x8050FF88; // type:object size:0x10
lbl_8050FF98 = .data:0x8050FF98; // type:object size:0x10
lbl_8050FFA8 = .data:0x8050FFA8; // type:object size:0x10 data:string
lbl_8050FFB8 = .data:0x8050FFB8; // type:object size:0x10
lbl_8050FFC8 = .data:0x8050FFC8; // type:object size:0x48
lbl_8050FFC8 = .data:0x8050FFC8; // type:object size:0xC data:string
__vt__Q23d2d9LytBase_c = .data:0x80510010; // type:object size:0x1C
__vt__Q23d2d7Multi_c = .data:0x8051002C; // type:object size:0x1C
__vt__Q23d2d8Layout_c = .data:0x80510048; // type:object size:0x40
@@ -38090,11 +38090,11 @@ lbl_80572268 = .sdata:0x80572268; // type:object size:0x8
lbl_80572270 = .sdata:0x80572270; // type:object size:0x8
lbl_80572278 = .sdata:0x80572278; // type:object size:0x8
lbl_80572280 = .sdata:0x80572280; // type:object size:0x8
lbl_80572288 = .sdata:0x80572288; // type:object size:0x8
lbl_80572290 = .sdata:0x80572290; // type:object size:0x8
lbl_80572298 = .sdata:0x80572298; // type:object size:0x8
lbl_805722A0 = .sdata:0x805722A0; // type:object size:0x8
lbl_805722A8 = .sdata:0x805722A8; // type:object size:0x8
lbl_80572288 = .sdata:0x80572288; // type:object size:0x6 data:string
lbl_80572290 = .sdata:0x80572290; // type:object size:0x5 data:string
lbl_80572298 = .sdata:0x80572298; // type:object size:0x6 data:string
lbl_805722A0 = .sdata:0x805722A0; // type:object size:0x5 data:string
lbl_805722A8 = .sdata:0x805722A8; // type:object size:0x6 data:string
lbl_805722B0 = .sdata:0x805722B0; // type:object size:0x4 data:string
lbl_805722B4 = .sdata:0x805722B4; // type:object size:0x4 data:4byte
lbl_805722B8 = .sdata:0x805722B8; // type:object size:0x4
@@ -39831,7 +39831,7 @@ lbl_80574F2C = .sdata:0x80574F2C; // type:object size:0x4 data:4byte
lbl_80574F30 = .sdata:0x80574F30; // type:object size:0x8
sTextureSize__Q23EGG12LightTexture = .sdata:0x80574F38; // type:object size:0x2 data:2byte
lbl_80574F3A = .sdata:0x80574F3A; // type:object size:0x1 data:byte
lbl_80574F3C = .sdata:0x80574F3C; // type:object size:0xC
lbl_80574F3C = .sdata:0x80574F3C; // type:object size:0x5 data:string
sByteCodeCalcStr__Q23EGG7ModelEx = .sdata:0x80574F48; // type:object size:0x4 data:4byte
lbl_80574F50 = .sdata:0x80574F50; // type:object size:0x8 data:string
sByteCodeMixStr__Q23EGG7ModelEx = .sdata:0x80574F58; // type:object size:0x4 data:4byte
@@ -48007,7 +48007,7 @@ lbl_8057F3E0 = .sdata2:0x8057F3E0; // type:object size:0x4 data:float
lbl_8057F3E8 = .sdata2:0x8057F3E8; // type:object size:0x8 data:double
lbl_8057F3F0 = .sdata2:0x8057F3F0; // type:object size:0x8 data:double
lbl_8057F3F8 = .sdata2:0x8057F3F8; // type:object size:0x4
lbl_8057F3FC = .sdata2:0x8057F3FC; // type:object size:0xC
lbl_8057F3FC = .sdata2:0x8057F3FC; // type:object size:0x6
lbl_8057F408 = .sdata2:0x8057F408; // type:object size:0x4 data:4byte
lbl_8057F40C = .sdata2:0x8057F40C; // type:object size:0x2 data:2byte
lbl_8057F40E = .sdata2:0x8057F40E; // type:object size:0x1 data:byte
@@ -48123,7 +48123,7 @@ lbl_8057F6B8 = .sdata2:0x8057F6B8; // type:object size:0x4 data:float
lbl_8057F6BC = .sdata2:0x8057F6BC; // type:object size:0x4 data:float
lbl_8057F6C0 = .sdata2:0x8057F6C0; // type:object size:0x4 data:float
lbl_8057F6C4 = .sdata2:0x8057F6C4; // type:object size:0x4 data:float
lbl_8057F6C8 = .sdata2:0x8057F6C8; // type:object size:0x18 data:float
lbl_8057F6C8 = .sdata2:0x8057F6C8; // type:object size:0x4 data:float
lbl_8057F6E0 = .sdata2:0x8057F6E0; // type:object size:0x8
lbl_8057F6E8 = .sdata2:0x8057F6E8; // type:object size:0x8 data:double
lbl_8057F6F0 = .sdata2:0x8057F6F0; // type:object size:0x4 data:float
+1 -1
View File
@@ -375,7 +375,7 @@ config.libs = [
Object(Matching, "toBeSorted/counters/key_piece_counter.cpp"),
Object(Matching, "toBeSorted/counters/extra_wallet_counter.cpp"),
Object(NonMatching, "d/lyt/d_structd.cpp"),
Object(NonMatching, "d/lyt/d2d.cpp"),
Object(Matching, "d/lyt/d2d.cpp"),
Object(NonMatching, "d/lyt/d_textbox.cpp"),
Object(Matching, "d/lyt/d_window.cpp"),
Object(Matching, "d/d_textunk.cpp"),
+49
View File
@@ -42,10 +42,59 @@ public:
return 1.0f;
}
inline static f32 getFn800B1FD0() {
if (sInstance != nullptr) {
return sInstance->fn_800B1FD0();
}
return 1.0f;
}
inline static f32 getFn800B1F10() {
return sInstance->fn_800B1F10();
}
inline static f32 getFn800B1FF0() {
if (sInstance != nullptr) {
return sInstance->fn_800B1FF0();
}
return 0.0f;
}
inline static f32 getFn800B2000() {
if (sInstance != nullptr) {
return sInstance->fn_800B2000();
}
return 0.0f;
}
inline static f32 getFn800B2010() {
if (sInstance != nullptr) {
return sInstance->fn_800B2010();
}
return 0.0f;
}
inline static f32 getFn800B2020() {
if (sInstance != nullptr) {
return sInstance->fn_800B2020();
}
return 0.0f;
}
inline static f32 getFn800B2030() {
if (sInstance != nullptr) {
return sInstance->fn_800B2030();
}
return 0.0f;
}
inline static f32 getFn800B2040() {
if (sInstance != nullptr) {
return sInstance->fn_800B2040();
}
return 0.0f;
}
private:
static UnkTextThing *sInstance;
+2
View File
@@ -286,6 +286,8 @@ struct AnmGroup_c : public AnmGroupBase_c {
/* 0x28 */ m2d::FrameCtrl_c mFrameCtrl;
};
void pushToEnd(nw4r::lyt::Pane *);
// This abstraction is apparently only ever used in CsGame
class AnmGroups {
public:
+8 -19
View File
@@ -3,8 +3,7 @@
#include "d/lyt/d2d.h"
#include "nw4r/lyt/lyt_textBox.h"
extern "C" void *lbl_805753B0;
#include "nw4r/lyt/lyt_types.h"
class dTextBox_c : public nw4r::lyt::TextBox {
friend class dWindow_c;
@@ -18,13 +17,13 @@ public:
mpLytBase = lytBase;
}
void SetScale(float scale) {
nw4r::math::VEC2 value = GetScale();
value.x = GetScale().x * scale;
value.y = GetScale().y * scale;
void SetScale(f32 scale) {
nw4r::lyt::Size value(mTextScale);
value.width *= scale;
value.height *= scale;
mScale = scale;
MySetScale(value);
nw4r::lyt::TextBox::SetScale(value);
nw4r::lyt::TextBox::SetFontSize(value);
}
void set0x1F8(u8 val) {
@@ -35,28 +34,18 @@ public:
return mScale;
}
static inline f32 GetTranslateX1() {
if (lbl_805753B0 != nullptr) {
return GetTranslateX1_();
} else {
return 0.0f;
}
}
void fn_800E0A60(const char *area, ...) {
// TODO
}
static f32 GetTranslateX1_();
// @bug: This does not implement UT's RTTI, so casts to dTextBox_c will
// succeed even if all you have is a lyt::TextBox
private:
void MySetScale(const nw4r::math::VEC2 &value);
void MySetScale(const nw4r::lyt::Size &value);
/* 0x104 */ d2d::LytBase_c *mpLytBase;
/* 0x108 */ u8 field_0x108[0x118 - 0x108];
/* 0x118 */ nw4r::math::VEC2 mTextScale;
/* 0x118 */ nw4r::lyt::Size mTextScale;
/* 0x120 */ f32 mScale;
/* 0x124 */ u8 field_0x124[0x1F8 - 0x124];
/* 0x1F8 */ u8 field_0x1F8;
+18 -14
View File
@@ -44,23 +44,27 @@ struct SizedString {
void operator+=(const char *src) {
if (src != nullptr) {
size_t destLen = strlen(mChars);
size_t copyLen = strlen(src);
// Make sure copy length isnt more than destination length
if (destLen + copyLen + 1 >= Size) {
size_t tmpLen = Size - destLen;
copyLen = tmpLen - 1;
}
strncpy(mChars + destLen, src, copyLen);
// make sure string is null terminated
size_t offset = destLen + copyLen;
mChars[offset] = '\0';
append(src);
}
}
void append(const char *src) {
size_t destLen = strlen(mChars);
size_t copyLen = strlen(src);
// Make sure copy length isnt more than destination length
if (destLen + copyLen + 1 >= Size) {
size_t tmpLen = Size - destLen;
copyLen = tmpLen - 1;
}
strncpy(mChars + destLen, src, copyLen);
// make sure string is null terminated
size_t offset = destLen + copyLen;
mChars[offset] = '\0';
}
bool operator==(const char *other) const {
return strequals(mChars, other);
}
+36 -38
View File
@@ -1,15 +1,15 @@
#include "d/lyt/d2d.h"
#include "d/d_font_manager.h"
#include "d/d_textunk.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "egg/gfx/eggScreen.h"
#include "nw4r/lyt/lyt_bounding.h"
#include "nw4r/lyt/lyt_group.h"
#include "nw4r/lyt/lyt_pane.h"
#include "nw4r/lyt/lyt_picture.h"
#include "nw4r/lyt/lyt_textBox.h"
#include "nw4r/lyt/lyt_utils.h"
#include "nw4r/lyt/lyt_window.h"
#include "sized_string.h"
using namespace nw4r::lyt;
@@ -200,15 +200,15 @@ void Multi_c::calcAfter() {
extern "C" bool NeedsScreenAdjustment();
// Largerly copied from m2d::Simple_c::draw
// Largely copied from m2d::Simple_c::draw
void Multi_c::draw() {
nw4r::ut::Rect r = mLayout.GetLayoutRect();
f32 near = 0.0f;
f32 far = 500.0f;
EGG::Screen s;
bool needsAdjust = NeedsScreenAdjustment();
f32 f1 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_UNK_3);
f32 f2 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_16_9);
f32 f1 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_16_9);
f32 f2 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_4_3);
f32 left = needsAdjust ? f1 * r.left / f2 : r.left;
f32 right = needsAdjust ? f1 * r.right / f2 : r.right;
@@ -445,8 +445,6 @@ extern "C" const char *fn_801B2600(const char *);
extern "C" void fn_800AF930(dTextBox_c *, const char *);
extern "C" void fn_800B0F40(dTextBox_c *);
// NOTE: This function uses `textBox->GetTranslateX1()` as a general placeholder to figure
// out the details first. In reality these are all different functions!
void LytBase_c::setProperties(nw4r::lyt::Pane *pane, f32 posX, f32 posY, f32 scale, f32 spaceX, f32 spaceY) {
if (pane->GetName()[0] != 'T') {
return;
@@ -475,41 +473,40 @@ void LytBase_c::setProperties(nw4r::lyt::Pane *pane, f32 posX, f32 posY, f32 sca
}
nw4r::math::VEC3 t2 = textBox->GetTranslate();
t2.x += textBox->GetTranslateX1();
t2.y += textBox->GetTranslateX1();
t2.x += UnkTextThing::getFn800B2030();
t2.y += UnkTextThing::getFn800B2040();
textBox->SetTranslate(t2);
if (scale != -9999.0f) {
const nw4r::ut::Font *f = textBox->GetFont();
if (f != nullptr) {
// VEC2 internally copied via GPRs here, should be FPRs
textBox->SetScale(scale * 0.01f);
scale *= 0.01f;
textBox->SetScale(scale);
}
} else {
const nw4r::ut::Font *f = textBox->GetFont();
if (f != nullptr) {
// VEC2 internally copied via GPRs here, should be FPRs
textBox->SetScale(textBox->GetTranslateX1());
textBox->SetScale(UnkTextThing::getFn800B1FD0());
}
}
f32 f4 = 0.0f;
f32 f6 = 0.0f;
f32 f4 = 0.0f;
if (spaceX != -9999.0f) {
textBox->SetCharSpace(spaceX);
} else {
f6 = textBox->GetTranslateX1();
f6 = UnkTextThing::getFn800B2010();
}
if (spaceY != -9999.0f) {
textBox->SetLineSpace(spaceY);
} else {
f4 = textBox->GetTranslateX1();
f4 = UnkTextThing::getFn800B1FF0();
}
textBox->SetCharSpace(f6 + textBox->GetCharSpace() + textBox->GetTranslateX1());
textBox->SetLineSpace(f4 + textBox->GetLineSpace() + textBox->GetTranslateX1());
textBox->SetCharSpace(textBox->GetCharSpace() + UnkTextThing::getFn800B2020() + f6);
textBox->SetLineSpace(textBox->GetLineSpace() + UnkTextThing::getFn800B2000() + f4);
fn_800AB930(textBox);
}
@@ -595,7 +592,7 @@ bool LytBase_c::fn_800ABB80(dTextBox_c *textbox1, dTextBox_c *textbox2, int arg)
bool LytBase_c::fn_800ABCE0(
const nw4r::lyt::res::ExtUserData *userDatum, dTextBox_c *textbox1, dTextBox_c *textbox2, int arg
) {
int userDatInt = userDatum->GetInt();
s32 userDatInt = userDatum->GetInt();
SizedString<0x40> str1;
SizedString<0x40> str2;
@@ -605,11 +602,9 @@ bool LytBase_c::fn_800ABCE0(
if (arg != -1) {
userDatInt = arg;
}
str2.sprintf(":%02d", userDatInt);
// TODO this operator is not behaving correctly here - there's
// an additional null check, and the source string address is
// computed twice via stack instead of once.
str1 += str2;
SizedString<0x40> &fmt = str2;
fmt.sprintf(":%02d", userDatInt);
str1.append(fmt);
}
const char *text = LMS_GetTextByLabel(getMsbtInfo(), str1);
@@ -693,17 +688,15 @@ extern "C" void fn_800AF840(dTextBox_c *textbox1, MsbtInfo *, const char *, int
bool LytBase_c::fn_800AC1AC(
const nw4r::lyt::res::ExtUserData *userDatum, dTextBox_c *textbox1, dTextBox_c *textbox2, int arg, void *unk
) {
int userDatInt = userDatum->GetInt();
s32 userDatInt = userDatum->GetInt();
SizedString<0x40> str1;
SizedString<0x40> str2;
str1 = textbox2->GetName();
if (userDatInt != 0) {
str2.sprintf(":%02d", 0);
// TODO this operator is not behaving correctly here - there's
// an additional null check, and the source string address is
// computed twice via stack instead of once.
str1 += str2;
SizedString<0x40> &fmt = str2;
fmt.sprintf(":%02d", 0);
str1.append(fmt);
}
fn_800AF840(textbox1, getMsbtInfo(), str1, arg, unk);
@@ -754,18 +747,17 @@ bool hasSameBaseName(const char *left, const char *right) {
char *sRef = "ref";
void dSubPane::linkMeters(nw4r::lyt::Group *group, d2d::SubPaneList *meterGroup) {
// single regswap
nw4r::ut::LinkList<d2d::SubPaneListNode, 0>::Iterator beginIt = meterGroup->GetBeginIter();
nw4r::ut::LinkList<d2d::SubPaneListNode, 0>::Iterator endIt = meterGroup->GetEndIter();
SubPaneList::Iterator beginIt = meterGroup->GetBeginIter();
SubPaneList::Iterator endIt = meterGroup->GetEndIter();
for (nw4r::lyt::PaneList::Iterator paneIt = group->GetPaneList()->GetBeginIter();
paneIt != group->GetPaneList()->GetEndIter(); ++paneIt) {
nw4r::lyt::PaneList::Iterator paneEndIt = group->GetPaneList()->GetEndIter();
for (nw4r::lyt::PaneList::Iterator paneIt = group->GetPaneList()->GetBeginIter(); paneIt != paneEndIt; ++paneIt) {
nw4r::lyt::Pane *pane = paneIt->mTarget;
int num = pane->GetExtUserDataNum();
if (num != 0) {
if (pane->GetExtUserDataNum()) {
const nw4r::lyt::res::ExtUserData *dat = pane->FindExtUserDataByName(sRef);
if (dat != nullptr && dat->GetType() == nw4r::lyt::res::TYPE_STRING) {
for (nw4r::ut::LinkList<d2d::SubPaneListNode, 0>::Iterator it = beginIt; it != endIt; ++it) {
for (SubPaneList::Iterator it = beginIt; it != endIt; ++it) {
d2d::dSubPane *meter = it->mpLytPane;
if (!meter->LytMeter0x24()) {
if (hasSameBaseName(dat->GetString(), meter->getName())) {
@@ -895,6 +887,12 @@ void AnmGroupBase_c::setBackward() {
mpFrameCtrl->setBackward();
}
void pushToEnd(nw4r::lyt::Pane *pane) {
nw4r::lyt::Pane *parent = pane->GetParent();
parent->RemoveChild(pane);
parent->AppendChild(pane);
}
bool AnmGroups::init(
d2d::AnmGroup_c *pGroups, const LytBrlanMapping *mappings, u32 num, m2d::ResAccIf_c *acc, d2d::Layout_c *layout
) {