From e5087f0757418c8b221cfde0364f0c3d031bdc73 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 20 Mar 2026 11:30:37 +0900 Subject: [PATCH] PartsEngine: Implement PartsFunc 103 (GetPartsCGSurfaceArea) --- include/parts.h | 1 + src/hll/PartsEngine.c | 4 ++++ src/parts/parts.c | 12 ++++++++++++ 3 files changed, 17 insertions(+) diff --git a/include/parts.h b/include/parts.h index bb5ff93..06618b0 100644 --- a/include/parts.h +++ b/include/parts.h @@ -37,6 +37,7 @@ bool PE_SetPartsCG_by_string_index(int parts_no, struct string *cg_no, int sprite_deform, int state); void PE_GetPartsCGName(int parts_no, struct string **cg_name, int state); bool PE_SetPartsCGSurfaceArea(int parts_no, int x, int y, int w, int h, int state); +void PE_GetPartsCGSurfaceArea(int parts_no, int *x, int *y, int *w, int *h, int state); int PE_GetPartsCGNumber(int parts_no, int state); bool PE_SetLoopCG_by_index(int parts_no, int cg_no, int nr_frames, int frame_time, int state); bool PE_SetLoopCG(int parts_no, struct string *cg_name, int start_no, int nr_frames, diff --git a/src/hll/PartsEngine.c b/src/hll/PartsEngine.c index 8ee99b1..53e5ffa 100644 --- a/src/hll/PartsEngine.c +++ b/src/hll/PartsEngine.c @@ -127,6 +127,10 @@ static int PartsEngine_PartsFunc(int func_id, struct page **array_int, REQUIRE_INTS(1); ints[0].i = PE_get_system_controller(); return 1; + case 103: // void GetPartsCGSurfaceArea(int parts_no, int *x, int *y, int *w, int *h, int state) + 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 162: // bool InitPartsMovie(int parts_no, int width, int height, int bg_r, int bg_g, int bg_b, int state) REQUIRE_INTS(8); ints[7].i = PE_init_parts_movie(ints[0].i, ints[1].i, ints[2].i, ints[3].i, ints[4].i, ints[5].i, ints[6].i); diff --git a/src/parts/parts.c b/src/parts/parts.c index 0a8805d..c2b179d 100644 --- a/src/parts/parts.c +++ b/src/parts/parts.c @@ -1227,6 +1227,18 @@ bool PE_SetPartsCGSurfaceArea(int parts_no, int x, int y, int w, int h, int stat return true; } +void PE_GetPartsCGSurfaceArea(int parts_no, int *x, int *y, int *w, int *h, int state) +{ + if (!parts_state_valid(--state)) + return; + + struct parts_cg *cg = parts_get_cg(parts_get(parts_no), state); + *x = cg->common.surface_area.x; + *y = cg->common.surface_area.y; + *w = cg->common.surface_area.w; + *h = cg->common.surface_area.h; +} + int PE_GetPartsCGNumber(int parts_no, int state) { if (!parts_state_valid(--state)) {