From 167d75d0927a68e6401d8bc2565a4028289bc3db Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 28 Aug 2026 10:46:45 +0900 Subject: [PATCH] parts: Implement PartsFunc 112 (GetText) --- include/parts.h | 1 + src/hll/PartsEngine.c | 11 +++++++++++ src/parts/text.c | 8 ++++++++ 3 files changed, 20 insertions(+) diff --git a/include/parts.h b/include/parts.h index c16bcfc..8dd17e2 100644 --- a/include/parts.h +++ b/include/parts.h @@ -254,6 +254,7 @@ void PE_PauseMotion(bool pause); // text.c bool PE_SetText(int parts_no, struct string *text, int state); +struct string *PE_GetText(int parts_no, int state); bool PE_AddPartsText(int parts_no, struct string *text, int state); bool PE_SetPartsTextSurfaceArea(int parts_no, int x, int y, int w, int h, int state); bool PE_SetFont(int parts_no, int type, int size, int r, int g, int b, float bold_weight, int edge_r, int edge_g, int edge_b, float edge_weight, int state); diff --git a/src/hll/PartsEngine.c b/src/hll/PartsEngine.c index 283be98..cb406a6 100644 --- a/src/hll/PartsEngine.c +++ b/src/hll/PartsEngine.c @@ -17,6 +17,7 @@ #include #include "system4/ain.h" +#include "system4/string.h" #include "vm/heap.h" #include "vm/page.h" @@ -338,6 +339,16 @@ static int PartsEngine_PartsFunc(int func_id, struct page **array_int, REQUIRE_INTS(6); PE_GetPartsCGSurfaceArea(ints[0].i, &ints[1].i, &ints[2].i, &ints[3].i, &ints[4].i, ints[5].i); return 1; + case 112: { // string GetText(int parts_no, int state) + REQUIRE_INTS(2); + REQUIRE_STRINGS(1); + struct string *text = PE_GetText(ints[0].i, ints[1].i); + if (text) { + heap_string_assign(strings[0].i, text); + free_string(text); + } + return 1; + } case 162: // AddConstructProcess(ArrayInt[32], ArrayFloat[2], ArrayString[2]) REQUIRE_INTS(32); REQUIRE_FLOATS(2); diff --git a/src/parts/text.c b/src/parts/text.c index 2a290ed..24444aa 100644 --- a/src/parts/text.c +++ b/src/parts/text.c @@ -169,6 +169,14 @@ bool PE_SetText(int parts_no, struct string *text, int state) return true; } +struct string *PE_GetText(int parts_no, int state) +{ + if (!parts_state_valid(--state)) + return NULL; + + return parts_text_get(parts_get_text(parts_get(parts_no), state)); +} + bool PE_AddPartsText(int parts_no, struct string *text, int state) { if (!parts_state_valid(--state))