From 6d153e758c74d3a5922b2f33eaa91b9f96b32247 Mon Sep 17 00:00:00 2001 From: Phillip Stephens Date: Sat, 7 Jan 2023 18:31:19 -0800 Subject: [PATCH] Match and link CLineSpacingInstruction Former-commit-id: 481e7e21002aa4c06fb0c0926258bdce62263ceb --- asm/Kyoto/Text/CBlockInstruction.s | 4 +- asm/Kyoto/Text/CColorInstruction.s | 4 +- asm/Kyoto/Text/CColorOverrideInstruction.s | 4 +- asm/Kyoto/Text/CFontInstruction.s | 4 +- asm/Kyoto/Text/CImageInstruction.s | 5 +- asm/Kyoto/Text/CLineExtraSpaceInstruction.s | 4 +- asm/Kyoto/Text/CLineInstruction.s | 4 +- asm/Kyoto/Text/CLineSpacingInstruction.s | 12 ++-- asm/Kyoto/Text/CPopStateInstruction.s | 4 +- asm/Kyoto/Text/CPushStateInstruction.s | 4 +- .../Text/CRemoveColorOverrideInstruction.s | 4 +- asm/Kyoto/Text/CTextExecuteBuffer.s | 61 +++++++++---------- asm/Kyoto/Text/CTextInstruction.s | 9 ++- asm/Kyoto/Text/CWordInstruction.s | 4 +- asm/MetroidPrime/CSplashScreen.s | 4 +- configure.py | 2 +- include/Kyoto/Text/CFontRenderState.hpp | 20 ++++++ .../Text}/CInstruction.hpp | 6 +- .../Kyoto/Text/CLineSpacingInstruction.hpp | 17 ++++++ include/Kyoto/Text/CSaveableState.hpp | 3 + src/Kyoto/Text/CLineSpacingInstruction.cpp | 11 ++++ src/MetroidPrime/CInstruction.cpp | 3 +- 22 files changed, 121 insertions(+), 72 deletions(-) create mode 100644 include/Kyoto/Text/CFontRenderState.hpp rename include/{MetroidPrime => Kyoto/Text}/CInstruction.hpp (73%) create mode 100644 include/Kyoto/Text/CLineSpacingInstruction.hpp create mode 100644 src/Kyoto/Text/CLineSpacingInstruction.cpp diff --git a/asm/Kyoto/Text/CBlockInstruction.s b/asm/Kyoto/Text/CBlockInstruction.s index d0f5744d..004ebe6d 100644 --- a/asm/Kyoto/Text/CBlockInstruction.s +++ b/asm/Kyoto/Text/CBlockInstruction.s @@ -43,8 +43,8 @@ __dt__17CBlockInstructionFv: /* 80305DF4 00302D54 38 03 D8 C8 */ addi r0, r3, lbl_803ED8C8@l /* 80305DF8 00302D58 90 1F 00 00 */ stw r0, 0(r31) /* 80305DFC 00302D5C 41 82 00 10 */ beq lbl_80305E0C -/* 80305E00 00302D60 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 80305E04 00302D64 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 80305E00 00302D60 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 80305E04 00302D64 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 80305E08 00302D68 90 1F 00 00 */ stw r0, 0(r31) lbl_80305E0C: /* 80305E0C 00302D6C 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CColorInstruction.s b/asm/Kyoto/Text/CColorInstruction.s index 37fbcf85..a5e7d0d2 100644 --- a/asm/Kyoto/Text/CColorInstruction.s +++ b/asm/Kyoto/Text/CColorInstruction.s @@ -29,8 +29,8 @@ __dt__17CColorInstructionFv: /* 802FE850 002FB7B0 38 03 D5 B0 */ addi r0, r3, lbl_803ED5B0@l /* 802FE854 002FB7B4 90 1F 00 00 */ stw r0, 0(r31) /* 802FE858 002FB7B8 41 82 00 10 */ beq lbl_802FE868 -/* 802FE85C 002FB7BC 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 802FE860 002FB7C0 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 802FE85C 002FB7BC 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 802FE860 002FB7C0 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 802FE864 002FB7C4 90 1F 00 00 */ stw r0, 0(r31) lbl_802FE868: /* 802FE868 002FB7C8 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CColorOverrideInstruction.s b/asm/Kyoto/Text/CColorOverrideInstruction.s index b0dc0a28..78ef2b9a 100644 --- a/asm/Kyoto/Text/CColorOverrideInstruction.s +++ b/asm/Kyoto/Text/CColorOverrideInstruction.s @@ -41,8 +41,8 @@ __dt__25CColorOverrideInstructionFv: /* 802FE908 002FB868 38 03 D5 D0 */ addi r0, r3, lbl_803ED5D0@l /* 802FE90C 002FB86C 90 1F 00 00 */ stw r0, 0(r31) /* 802FE910 002FB870 41 82 00 10 */ beq lbl_802FE920 -/* 802FE914 002FB874 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 802FE918 002FB878 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 802FE914 002FB874 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 802FE918 002FB878 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 802FE91C 002FB87C 90 1F 00 00 */ stw r0, 0(r31) lbl_802FE920: /* 802FE920 002FB880 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CFontInstruction.s b/asm/Kyoto/Text/CFontInstruction.s index 334c7d3f..5a52a479 100644 --- a/asm/Kyoto/Text/CFontInstruction.s +++ b/asm/Kyoto/Text/CFontInstruction.s @@ -23,8 +23,8 @@ __dt__16CFontInstructionFv: lbl_802FEAC0: /* 802FEAC0 002FBA20 28 1E 00 00 */ cmplwi r30, 0 /* 802FEAC4 002FBA24 41 82 00 10 */ beq lbl_802FEAD4 -/* 802FEAC8 002FBA28 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 802FEACC 002FBA2C 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 802FEAC8 002FBA28 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 802FEACC 002FBA2C 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 802FEAD0 002FBA30 90 1E 00 00 */ stw r0, 0(r30) lbl_802FEAD4: /* 802FEAD4 002FBA34 7F E0 07 35 */ extsh. r0, r31 diff --git a/asm/Kyoto/Text/CImageInstruction.s b/asm/Kyoto/Text/CImageInstruction.s index 79550e1d..13a71f6d 100644 --- a/asm/Kyoto/Text/CImageInstruction.s +++ b/asm/Kyoto/Text/CImageInstruction.s @@ -35,8 +35,8 @@ __dt__17CImageInstructionFv: /* 8035974C 003566AC 4B CC F4 B1 */ bl sub_80028bfc /* 80359750 003566B0 28 1E 00 00 */ cmplwi r30, 0 /* 80359754 003566B4 41 82 00 10 */ beq lbl_80359764 -/* 80359758 003566B8 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 8035975C 003566BC 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 80359758 003566B8 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 8035975C 003566BC 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 80359760 003566C0 90 1E 00 00 */ stw r0, 0(r30) lbl_80359764: /* 80359764 003566C4 7F E0 07 35 */ extsh. r0, r31 @@ -294,4 +294,3 @@ CalculateHeight__13CFontImageDefFv: lbl_805AEA18: # ROM: 0x3FB2B8 .double 4.503601774854144E15 - diff --git a/asm/Kyoto/Text/CLineExtraSpaceInstruction.s b/asm/Kyoto/Text/CLineExtraSpaceInstruction.s index fa0719b9..3b1ace3a 100644 --- a/asm/Kyoto/Text/CLineExtraSpaceInstruction.s +++ b/asm/Kyoto/Text/CLineExtraSpaceInstruction.s @@ -29,8 +29,8 @@ __dt__26CLineExtraSpaceInstructionFv: /* 802FF828 002FC788 38 03 D6 10 */ addi r0, r3, lbl_803ED610@l /* 802FF82C 002FC78C 90 1F 00 00 */ stw r0, 0(r31) /* 802FF830 002FC790 41 82 00 10 */ beq lbl_802FF840 -/* 802FF834 002FC794 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 802FF838 002FC798 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 802FF834 002FC794 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 802FF838 002FC798 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 802FF83C 002FC79C 90 1F 00 00 */ stw r0, 0(r31) lbl_802FF840: /* 802FF840 002FC7A0 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CLineInstruction.s b/asm/Kyoto/Text/CLineInstruction.s index 8cf739ec..d1014360 100644 --- a/asm/Kyoto/Text/CLineInstruction.s +++ b/asm/Kyoto/Text/CLineInstruction.s @@ -44,8 +44,8 @@ __dt__16CLineInstructionFv: /* 802FF8BC 002FC81C 38 03 D6 30 */ addi r0, r3, lbl_803ED630@l /* 802FF8C0 002FC820 90 1F 00 00 */ stw r0, 0(r31) /* 802FF8C4 002FC824 41 82 00 10 */ beq lbl_802FF8D4 -/* 802FF8C8 002FC828 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 802FF8CC 002FC82C 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 802FF8C8 002FC828 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 802FF8CC 002FC82C 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 802FF8D0 002FC830 90 1F 00 00 */ stw r0, 0(r31) lbl_802FF8D4: /* 802FF8D4 002FC834 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CLineSpacingInstruction.s b/asm/Kyoto/Text/CLineSpacingInstruction.s index 9e909cd0..5a454a82 100644 --- a/asm/Kyoto/Text/CLineSpacingInstruction.s +++ b/asm/Kyoto/Text/CLineSpacingInstruction.s @@ -3,8 +3,8 @@ .section .data .balign 8 -.global lbl_803ED678 -lbl_803ED678: +.global __vt__23CLineSpacingInstruction +__vt__23CLineSpacingInstruction: # ROM: 0x3EA678 .4byte 0 .4byte 0 @@ -25,12 +25,12 @@ __dt__23CLineSpacingInstructionFv: /* 802FFCB8 002FCC18 93 E1 00 0C */ stw r31, 0xc(r1) /* 802FFCBC 002FCC1C 7C 7F 1B 79 */ or. r31, r3, r3 /* 802FFCC0 002FCC20 41 82 00 30 */ beq lbl_802FFCF0 -/* 802FFCC4 002FCC24 3C 60 80 3F */ lis r3, lbl_803ED678@ha -/* 802FFCC8 002FCC28 38 03 D6 78 */ addi r0, r3, lbl_803ED678@l +/* 802FFCC4 002FCC24 3C 60 80 3F */ lis r3, __vt__23CLineSpacingInstruction@ha +/* 802FFCC8 002FCC28 38 03 D6 78 */ addi r0, r3, __vt__23CLineSpacingInstruction@l /* 802FFCCC 002FCC2C 90 1F 00 00 */ stw r0, 0(r31) /* 802FFCD0 002FCC30 41 82 00 10 */ beq lbl_802FFCE0 -/* 802FFCD4 002FCC34 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 802FFCD8 002FCC38 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 802FFCD4 002FCC34 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 802FFCD8 002FCC38 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 802FFCDC 002FCC3C 90 1F 00 00 */ stw r0, 0(r31) lbl_802FFCE0: /* 802FFCE0 002FCC40 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CPopStateInstruction.s b/asm/Kyoto/Text/CPopStateInstruction.s index 0ea0b038..eb15038a 100644 --- a/asm/Kyoto/Text/CPopStateInstruction.s +++ b/asm/Kyoto/Text/CPopStateInstruction.s @@ -29,8 +29,8 @@ __dt__20CPopStateInstructionFv: /* 802FFD5C 002FCCBC 38 03 D6 98 */ addi r0, r3, lbl_803ED698@l /* 802FFD60 002FCCC0 90 1F 00 00 */ stw r0, 0(r31) /* 802FFD64 002FCCC4 41 82 00 10 */ beq lbl_802FFD74 -/* 802FFD68 002FCCC8 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 802FFD6C 002FCCCC 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 802FFD68 002FCCC8 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 802FFD6C 002FCCCC 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 802FFD70 002FCCD0 90 1F 00 00 */ stw r0, 0(r31) lbl_802FFD74: /* 802FFD74 002FCCD4 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CPushStateInstruction.s b/asm/Kyoto/Text/CPushStateInstruction.s index bf2b14a9..9a917203 100644 --- a/asm/Kyoto/Text/CPushStateInstruction.s +++ b/asm/Kyoto/Text/CPushStateInstruction.s @@ -29,8 +29,8 @@ __dt__21CPushStateInstructionFv: /* 802FFE44 002FCDA4 38 03 D6 B8 */ addi r0, r3, lbl_803ED6B8@l /* 802FFE48 002FCDA8 90 1F 00 00 */ stw r0, 0(r31) /* 802FFE4C 002FCDAC 41 82 00 10 */ beq lbl_802FFE5C -/* 802FFE50 002FCDB0 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 802FFE54 002FCDB4 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 802FFE50 002FCDB0 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 802FFE54 002FCDB4 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 802FFE58 002FCDB8 90 1F 00 00 */ stw r0, 0(r31) lbl_802FFE5C: /* 802FFE5C 002FCDBC 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CRemoveColorOverrideInstruction.s b/asm/Kyoto/Text/CRemoveColorOverrideInstruction.s index f9f6fbfa..8573715a 100644 --- a/asm/Kyoto/Text/CRemoveColorOverrideInstruction.s +++ b/asm/Kyoto/Text/CRemoveColorOverrideInstruction.s @@ -29,8 +29,8 @@ __dt__31CRemoveColorOverrideInstructionFv: /* 80301858 002FE7B8 38 03 D6 D8 */ addi r0, r3, lbl_803ED6D8@l /* 8030185C 002FE7BC 90 1F 00 00 */ stw r0, 0(r31) /* 80301860 002FE7C0 41 82 00 10 */ beq lbl_80301870 -/* 80301864 002FE7C4 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 80301868 002FE7C8 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 80301864 002FE7C4 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 80301868 002FE7C8 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 8030186C 002FE7CC 90 1F 00 00 */ stw r0, 0(r31) lbl_80301870: /* 80301870 002FE7D0 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/Kyoto/Text/CTextExecuteBuffer.s b/asm/Kyoto/Text/CTextExecuteBuffer.s index c07997a4..b3818c01 100644 --- a/asm/Kyoto/Text/CTextExecuteBuffer.s +++ b/asm/Kyoto/Text/CTextExecuteBuffer.s @@ -1105,10 +1105,10 @@ lbl_80302A38: /* 80302A68 002FF9C8 48 01 2E 05 */ bl __nw__FUlPCcPCc /* 80302A6C 002FF9CC 7C 7E 1B 79 */ or. r30, r3, r3 /* 80302A70 002FF9D0 41 82 00 68 */ beq lbl_80302AD8 -/* 80302A74 002FF9D4 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha +/* 80302A74 002FF9D4 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha /* 80302A78 002FF9D8 80 FF 00 98 */ lwz r7, 0x98(r31) /* 80302A7C 002FF9DC 81 1F 00 9C */ lwz r8, 0x9c(r31) -/* 80302A80 002FF9E0 38 A3 9A 6C */ addi r5, r3, lbl_803D9A6C@l +/* 80302A80 002FF9E0 38 A3 9A 6C */ addi r5, r3, __vt__12CInstruction@l /* 80302A84 002FF9E4 3C 60 80 3F */ lis r3, lbl_803ED630@ha /* 80302A88 002FF9E8 88 DF 00 C0 */ lbz r6, 0xc0(r31) /* 80302A8C 002FF9EC 81 5F 00 AC */ lwz r10, 0xac(r31) @@ -1157,9 +1157,9 @@ lbl_80302B00: /* 80302B30 002FFA90 48 01 2D 3D */ bl __nw__FUlPCcPCc /* 80302B34 002FFA94 7C 7E 1B 79 */ or. r30, r3, r3 /* 80302B38 002FFA98 41 82 00 1C */ beq lbl_80302B54 -/* 80302B3C 002FFA9C 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 80302B3C 002FFA9C 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 80302B40 002FFAA0 3C 60 80 3F */ lis r3, lbl_803ED8A8@ha -/* 80302B44 002FFAA4 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 80302B44 002FFAA4 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 80302B48 002FFAA8 90 1E 00 00 */ stw r0, 0(r30) /* 80302B4C 002FFAAC 38 03 D8 A8 */ addi r0, r3, lbl_803ED8A8@l /* 80302B50 002FFAB0 90 1E 00 00 */ stw r0, 0(r30) @@ -1265,10 +1265,10 @@ lbl_80302CA0: /* 80302CB0 002FFC10 48 01 2B BD */ bl __nw__FUlPCcPCc /* 80302CB4 002FFC14 7C 7E 1B 79 */ or. r30, r3, r3 /* 80302CB8 002FFC18 41 82 00 5C */ beq lbl_80302D14 -/* 80302CBC 002FFC1C 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha +/* 80302CBC 002FFC1C 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha /* 80302CC0 002FFC20 80 DF 00 98 */ lwz r6, 0x98(r31) /* 80302CC4 002FFC24 80 FF 00 9C */ lwz r7, 0x9c(r31) -/* 80302CC8 002FFC28 38 83 9A 6C */ addi r4, r3, lbl_803D9A6C@l +/* 80302CC8 002FFC28 38 83 9A 6C */ addi r4, r3, __vt__12CInstruction@l /* 80302CCC 002FFC2C 88 BF 00 C0 */ lbz r5, 0xc0(r31) /* 80302CD0 002FFC30 3C 60 80 3F */ lis r3, lbl_803ED630@ha /* 80302CD4 002FFC34 38 63 D6 30 */ addi r3, r3, lbl_803ED630@l @@ -1347,9 +1347,9 @@ StartNewWord__18CTextExecuteBufferFv: /* 80302DE4 002FFD44 48 01 2A 89 */ bl __nw__FUlPCcPCc /* 80302DE8 002FFD48 7C 7F 1B 79 */ or. r31, r3, r3 /* 80302DEC 002FFD4C 41 82 00 1C */ beq lbl_80302E08 -/* 80302DF0 002FFD50 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 80302DF0 002FFD50 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 80302DF4 002FFD54 3C 60 80 3F */ lis r3, lbl_803ED8A8@ha -/* 80302DF8 002FFD58 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 80302DF8 002FFD58 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 80302DFC 002FFD5C 90 1F 00 00 */ stw r0, 0(r31) /* 80302E00 002FFD60 38 03 D8 A8 */ addi r0, r3, lbl_803ED8A8@l /* 80302E04 002FFD64 90 1F 00 00 */ stw r0, 0(r31) @@ -1492,9 +1492,9 @@ AddPopState__18CTextExecuteBufferFv: /* 80302FE8 002FFF48 48 01 28 85 */ bl __nw__FUlPCcPCc /* 80302FEC 002FFF4C 7C 7F 1B 79 */ or. r31, r3, r3 /* 80302FF0 002FFF50 41 82 00 1C */ beq lbl_8030300C -/* 80302FF4 002FFF54 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 80302FF4 002FFF54 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 80302FF8 002FFF58 3C 60 80 3F */ lis r3, lbl_803ED698@ha -/* 80302FFC 002FFF5C 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 80302FFC 002FFF5C 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 80303000 002FFF60 90 1F 00 00 */ stw r0, 0(r31) /* 80303004 002FFF64 38 03 D6 98 */ addi r0, r3, lbl_803ED698@l /* 80303008 002FFF68 90 1F 00 00 */ stw r0, 0(r31) @@ -1556,9 +1556,9 @@ AddPushState__18CTextExecuteBufferFv: /* 803030D0 00300030 48 01 27 9D */ bl __nw__FUlPCcPCc /* 803030D4 00300034 7C 7F 1B 79 */ or. r31, r3, r3 /* 803030D8 00300038 41 82 00 1C */ beq lbl_803030F4 -/* 803030DC 0030003C 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 803030DC 0030003C 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 803030E0 00300040 3C 60 80 3F */ lis r3, lbl_803ED6B8@ha -/* 803030E4 00300044 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 803030E4 00300044 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 803030E8 00300048 90 1F 00 00 */ stw r0, 0(r31) /* 803030EC 0030004C 38 03 D6 B8 */ addi r0, r3, lbl_803ED6B8@l /* 803030F0 00300050 90 1F 00 00 */ stw r0, 0(r31) @@ -1633,9 +1633,9 @@ __ct__26CLineExtraSpaceInstructionFi: /* 803031D8 00300138 48 01 26 95 */ bl __nw__FUlPCcPCc /* 803031DC 0030013C 7C 7F 1B 79 */ or. r31, r3, r3 /* 803031E0 00300140 41 82 00 20 */ beq lbl_80303200 -/* 803031E4 00300144 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 803031E4 00300144 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 803031E8 00300148 3C 60 80 3F */ lis r3, lbl_803ED610@ha -/* 803031EC 0030014C 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 803031EC 0030014C 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 803031F0 00300150 90 1F 00 00 */ stw r0, 0(r31) /* 803031F4 00300154 38 03 D6 10 */ addi r0, r3, lbl_803ED610@l /* 803031F8 00300158 90 1F 00 00 */ stw r0, 0(r31) @@ -1685,11 +1685,11 @@ __ct__23CLineSpacingInstructionFf: /* 80303294 003001F4 48 01 25 D9 */ bl __nw__FUlPCcPCc /* 80303298 003001F8 7C 7F 1B 79 */ or. r31, r3, r3 /* 8030329C 003001FC 41 82 00 20 */ beq lbl_803032BC -/* 803032A0 00300200 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha -/* 803032A4 00300204 3C 60 80 3F */ lis r3, lbl_803ED678@ha -/* 803032A8 00300208 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 803032A0 00300200 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha +/* 803032A4 00300204 3C 60 80 3F */ lis r3, __vt__23CLineSpacingInstruction@ha +/* 803032A8 00300208 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 803032AC 0030020C 90 1F 00 00 */ stw r0, 0(r31) -/* 803032B0 00300210 38 03 D6 78 */ addi r0, r3, lbl_803ED678@l +/* 803032B0 00300210 38 03 D6 78 */ addi r0, r3, __vt__23CLineSpacingInstruction@l /* 803032B4 00300214 90 1F 00 00 */ stw r0, 0(r31) /* 803032B8 00300218 D3 FF 00 04 */ stfs f31, 4(r31) lbl_803032BC: @@ -1738,9 +1738,9 @@ __ct__31CRemoveColorOverrideInstructionFi: /* 80303354 003002B4 48 01 25 19 */ bl __nw__FUlPCcPCc /* 80303358 003002B8 7C 7F 1B 79 */ or. r31, r3, r3 /* 8030335C 003002BC 41 82 00 20 */ beq lbl_8030337C -/* 80303360 003002C0 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 80303360 003002C0 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 80303364 003002C4 3C 60 80 3F */ lis r3, lbl_803ED6D8@ha -/* 80303368 003002C8 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 80303368 003002C8 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 8030336C 003002CC 90 1F 00 00 */ stw r0, 0(r31) /* 80303370 003002D0 38 03 D6 D8 */ addi r0, r3, lbl_803ED6D8@l /* 80303374 003002D4 90 1F 00 00 */ stw r0, 0(r31) @@ -1792,9 +1792,9 @@ __ct__25CColorOverrideInstructionFv: /* 80303418 00300378 48 01 24 55 */ bl __nw__FUlPCcPCc /* 8030341C 0030037C 7C 7F 1B 79 */ or. r31, r3, r3 /* 80303420 00300380 41 82 00 40 */ beq lbl_80303460 -/* 80303424 00300384 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 80303424 00300384 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 80303428 00300388 3C 60 80 3F */ lis r3, lbl_803ED5D0@ha -/* 8030342C 0030038C 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 8030342C 0030038C 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 80303430 00300390 90 1F 00 00 */ stw r0, 0(r31) /* 80303434 00300394 38 03 D5 D0 */ addi r0, r3, lbl_803ED5D0@l /* 80303438 00300398 90 1F 00 00 */ stw r0, 0(r31) @@ -1855,9 +1855,9 @@ __ct__17CColorInstructionFiRC6CColor: /* 80303500 00300460 48 01 23 6D */ bl __nw__FUlPCcPCc /* 80303504 00300464 7C 7F 1B 79 */ or. r31, r3, r3 /* 80303508 00300468 41 82 00 40 */ beq lbl_80303548 -/* 8030350C 0030046C 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 8030350C 0030046C 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 80303510 00300470 3C 60 80 3F */ lis r3, lbl_803ED5B0@ha -/* 80303514 00300474 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 80303514 00300474 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 80303518 00300478 90 1F 00 00 */ stw r0, 0(r31) /* 8030351C 0030047C 38 03 D5 B0 */ addi r0, r3, lbl_803ED5B0@l /* 80303520 00300480 90 1F 00 00 */ stw r0, 0(r31) @@ -2127,9 +2127,9 @@ lbl_803038CC: __ct__17CImageInstructionFRC13CFontImageDef: /* 80303908 00300868 94 21 FF F0 */ stwu r1, -0x10(r1) /* 8030390C 0030086C 7C 08 02 A6 */ mflr r0 -/* 80303910 00300870 3C A0 80 3E */ lis r5, lbl_803D9A6C@ha +/* 80303910 00300870 3C A0 80 3E */ lis r5, __vt__12CInstruction@ha /* 80303914 00300874 90 01 00 14 */ stw r0, 0x14(r1) -/* 80303918 00300878 38 05 9A 6C */ addi r0, r5, lbl_803D9A6C@l +/* 80303918 00300878 38 05 9A 6C */ addi r0, r5, __vt__12CInstruction@l /* 8030391C 0030087C 93 E1 00 0C */ stw r31, 0xc(r1) /* 80303920 00300880 7C 7F 1B 78 */ mr r31, r3 /* 80303924 00300884 3C 60 80 3F */ lis r3, lbl_803EF798@ha @@ -2161,9 +2161,9 @@ __ct__17CImageInstructionFRC13CFontImageDef: /* 80303980 003008E0 48 01 1E ED */ bl __nw__FUlPCcPCc /* 80303984 003008E4 7C 7D 1B 79 */ or. r29, r3, r3 /* 80303988 003008E8 41 82 00 34 */ beq lbl_803039BC -/* 8030398C 003008EC 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 8030398C 003008EC 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 80303990 003008F0 3C 60 80 3F */ lis r3, lbl_803ED5F0@ha -/* 80303994 003008F4 38 04 9A 6C */ addi r0, r4, lbl_803D9A6C@l +/* 80303994 003008F4 38 04 9A 6C */ addi r0, r4, __vt__12CInstruction@l /* 80303998 003008F8 7F BB EB 78 */ mr r27, r29 /* 8030399C 003008FC 90 1D 00 00 */ stw r0, 0(r29) /* 803039A0 00300900 38 03 D5 F0 */ addi r0, r3, lbl_803ED5F0@l @@ -2316,9 +2316,9 @@ BeginBlock__18CTextExecuteBufferFiiiib14ETextDirection14EJustification22EVertica /* 80303BB4 00300B14 48 01 1C B9 */ bl __nw__FUlPCcPCc /* 80303BB8 00300B18 7C 7A 1B 79 */ or. r26, r3, r3 /* 80303BBC 00300B1C 41 82 00 54 */ beq lbl_80303C10 -/* 80303BC0 00300B20 3C 80 80 3E */ lis r4, lbl_803D9A6C@ha +/* 80303BC0 00300B20 3C 80 80 3E */ lis r4, __vt__12CInstruction@ha /* 80303BC4 00300B24 3C 60 80 3F */ lis r3, lbl_803ED8C8@ha -/* 80303BC8 00300B28 38 84 9A 6C */ addi r4, r4, lbl_803D9A6C@l +/* 80303BC8 00300B28 38 84 9A 6C */ addi r4, r4, __vt__12CInstruction@l /* 80303BCC 00300B2C 38 00 00 00 */ li r0, 0 /* 80303BD0 00300B30 90 9A 00 00 */ stw r4, 0(r26) /* 80303BD4 00300B34 38 63 D8 C8 */ addi r3, r3, lbl_803ED8C8@l @@ -2662,4 +2662,3 @@ lbl_803D6E90: # ROM: 0x3D3E90 .asciz "??(??)" .balign 4 - diff --git a/asm/Kyoto/Text/CTextInstruction.s b/asm/Kyoto/Text/CTextInstruction.s index 2351488c..9102c343 100644 --- a/asm/Kyoto/Text/CTextInstruction.s +++ b/asm/Kyoto/Text/CTextInstruction.s @@ -29,8 +29,8 @@ __dt__16CTextInstructionFv: /* 80304080 00300FE0 38 03 D6 F8 */ addi r0, r3, lbl_803ED6F8@l /* 80304084 00300FE4 90 1F 00 00 */ stw r0, 0(r31) /* 80304088 00300FE8 41 82 00 10 */ beq lbl_80304098 -/* 8030408C 00300FEC 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 80304090 00300FF0 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 8030408C 00300FEC 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 80304090 00300FF0 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 80304094 00300FF4 90 1F 00 00 */ stw r0, 0(r31) lbl_80304098: /* 80304098 00300FF8 7C 80 07 35 */ extsh. r0, r4 @@ -47,9 +47,9 @@ lbl_803040A8: .global __ct__16CTextInstructionFPCwi __ct__16CTextInstructionFPCwi: -/* 803040C0 00301020 3C E0 80 3E */ lis r7, lbl_803D9A6C@ha +/* 803040C0 00301020 3C E0 80 3E */ lis r7, __vt__12CInstruction@ha /* 803040C4 00301024 3C C0 80 3F */ lis r6, lbl_803ED6F8@ha -/* 803040C8 00301028 38 E7 9A 6C */ addi r7, r7, lbl_803D9A6C@l +/* 803040C8 00301028 38 E7 9A 6C */ addi r7, r7, __vt__12CInstruction@l /* 803040CC 0030102C 2C 05 00 00 */ cmpwi r5, 0 /* 803040D0 00301030 90 E3 00 00 */ stw r7, 0(r3) /* 803040D4 00301034 38 06 D6 F8 */ addi r0, r6, lbl_803ED6F8@l @@ -210,4 +210,3 @@ lbl_803D6E98: # ROM: 0x3D3E98 .asciz "??(??)" .balign 4 - diff --git a/asm/Kyoto/Text/CWordInstruction.s b/asm/Kyoto/Text/CWordInstruction.s index 510a1747..a6fe0f69 100644 --- a/asm/Kyoto/Text/CWordInstruction.s +++ b/asm/Kyoto/Text/CWordInstruction.s @@ -29,8 +29,8 @@ __dt__16CWordInstructionFv: /* 80305C04 00302B64 38 03 D8 A8 */ addi r0, r3, lbl_803ED8A8@l /* 80305C08 00302B68 90 1F 00 00 */ stw r0, 0(r31) /* 80305C0C 00302B6C 41 82 00 10 */ beq lbl_80305C1C -/* 80305C10 00302B70 3C 60 80 3E */ lis r3, lbl_803D9A6C@ha -/* 80305C14 00302B74 38 03 9A 6C */ addi r0, r3, lbl_803D9A6C@l +/* 80305C10 00302B70 3C 60 80 3E */ lis r3, __vt__12CInstruction@ha +/* 80305C14 00302B74 38 03 9A 6C */ addi r0, r3, __vt__12CInstruction@l /* 80305C18 00302B78 90 1F 00 00 */ stw r0, 0(r31) lbl_80305C1C: /* 80305C1C 00302B7C 7C 80 07 35 */ extsh. r0, r4 diff --git a/asm/MetroidPrime/CSplashScreen.s b/asm/MetroidPrime/CSplashScreen.s index 394574b2..a4c0261d 100644 --- a/asm/MetroidPrime/CSplashScreen.s +++ b/asm/MetroidPrime/CSplashScreen.s @@ -104,8 +104,8 @@ lbl_803D9A50: .4byte Draw__13CSplashScreenCFv .4byte PreDraw__6CIOWinCFv -.global lbl_803D9A6C -lbl_803D9A6C: +.global __vt__12CInstruction +__vt__12CInstruction: # ROM: 0x3D6A6C .4byte 0 .4byte 0 diff --git a/configure.py b/configure.py index de418ebf..b40b44d8 100755 --- a/configure.py +++ b/configure.py @@ -541,7 +541,7 @@ LIBS = [ "Kyoto/Text/CFontRenderState", "Kyoto/Text/CLineExtraSpaceInstruction", "Kyoto/Text/CLineInstruction", - "Kyoto/Text/CLineSpacingInstruction", + ["Kyoto/Text/CLineSpacingInstruction", True], "Kyoto/Text/CPopStateInstruction", "Kyoto/Text/CPushStateInstruction", ["Kyoto/Text/CRasterFont", False], diff --git a/include/Kyoto/Text/CFontRenderState.hpp b/include/Kyoto/Text/CFontRenderState.hpp new file mode 100644 index 00000000..bee39e89 --- /dev/null +++ b/include/Kyoto/Text/CFontRenderState.hpp @@ -0,0 +1,20 @@ +#ifndef _CFONTRENDERSTATE +#define _CFONTRENDERSTATE + +#include "Kyoto/Text/CSaveableState.hpp" +#include "Kyoto/Text/CDrawStringOptions.hpp" + +class CBlockInstruction; + +class CFontRenderState : private CSaveableState { +public: + void SetLineSpacing(float spacing) { CSaveableState::SetLineSpacing(spacing); } + +private: + CBlockInstruction* x88_curBlock; + CDrawStringOptions x8c_drawOpts; + int xd4_curX; + int xd8_curY; +}; + +#endif // _CFONTRENDERSTATE diff --git a/include/MetroidPrime/CInstruction.hpp b/include/Kyoto/Text/CInstruction.hpp similarity index 73% rename from include/MetroidPrime/CInstruction.hpp rename to include/Kyoto/Text/CInstruction.hpp index 87b05a62..eed98c61 100644 --- a/include/MetroidPrime/CInstruction.hpp +++ b/include/Kyoto/Text/CInstruction.hpp @@ -13,10 +13,10 @@ class CTextRenderBuffer; class CInstruction { public: virtual ~CInstruction() {} - virtual uint GetAssetCount() const; - virtual void GetAssets(rstl::vector& assetsOut) const; - virtual void PageInvoke(CFontRenderState& state, CTextRenderBuffer* buf) const; virtual void Invoke(CFontRenderState& state, CTextRenderBuffer* buf) const = 0; + virtual void PageInvoke(CFontRenderState& state, CTextRenderBuffer* buf) const;// {} + virtual void GetAssets(rstl::vector< CToken >& assetsOut) const;// {} + virtual uint GetAssetCount() const;// { return 0; } }; #endif // _CINSTRUCTION diff --git a/include/Kyoto/Text/CLineSpacingInstruction.hpp b/include/Kyoto/Text/CLineSpacingInstruction.hpp new file mode 100644 index 00000000..c74f8ac1 --- /dev/null +++ b/include/Kyoto/Text/CLineSpacingInstruction.hpp @@ -0,0 +1,17 @@ +#ifndef _CLINESPACINGINSTRUCTION +#define _CLINESPACINGINSTRUCTION + +#include "Kyoto/Text/CInstruction.hpp" + +class CLineSpacingInstruction : public CInstruction { +public: + CLineSpacingInstruction(float spacing) : x4_spacing(spacing) {} + ~CLineSpacingInstruction() {} + + void Invoke(CFontRenderState& state, CTextRenderBuffer* buf) const; + void PageInvoke(CFontRenderState& state, CTextRenderBuffer* buf) const; +private: + float x4_spacing; +}; + +#endif // _CLINESPACINGINSTRUCTION diff --git a/include/Kyoto/Text/CSaveableState.hpp b/include/Kyoto/Text/CSaveableState.hpp index e4e91d44..ee116ec4 100644 --- a/include/Kyoto/Text/CSaveableState.hpp +++ b/include/Kyoto/Text/CSaveableState.hpp @@ -13,6 +13,9 @@ public: CSaveableState(); bool IsFinishedLoading(); + + void SetLineSpacing(float spacing) { x74_lineSpacing = spacing; } + private: CDrawStringOptions x0_drawStringOptions; rstl::optional_object< TToken< CRasterFont > > x48_font; diff --git a/src/Kyoto/Text/CLineSpacingInstruction.cpp b/src/Kyoto/Text/CLineSpacingInstruction.cpp new file mode 100644 index 00000000..6c56ebb7 --- /dev/null +++ b/src/Kyoto/Text/CLineSpacingInstruction.cpp @@ -0,0 +1,11 @@ +#include "Kyoto/Text/CLineSpacingInstruction.hpp" + +#include "Kyoto/Text/CFontRenderState.hpp" + +void CLineSpacingInstruction::Invoke(CFontRenderState& state, CTextRenderBuffer* buf) const { + state.SetLineSpacing(x4_spacing); +} + +void CLineSpacingInstruction::PageInvoke(CFontRenderState& state, CTextRenderBuffer* buf) const { + Invoke(state, buf); +} diff --git a/src/MetroidPrime/CInstruction.cpp b/src/MetroidPrime/CInstruction.cpp index a6c5dca0..02489518 100644 --- a/src/MetroidPrime/CInstruction.cpp +++ b/src/MetroidPrime/CInstruction.cpp @@ -1,5 +1,6 @@ -#include "MetroidPrime/CInstruction.hpp" +#include "Kyoto/Text/CInstruction.hpp" +/* TODO: These get ODR'd into CSplashScreen, so match and link that and put these in the header where they belong */ uint CInstruction::GetAssetCount() const { return 0; } void CInstruction::GetAssets(rstl::vector< CToken >& assetsOut) const {}