diff --git a/src/parts/debug.c b/src/parts/debug.c index a793279..d9fd72b 100644 --- a/src/parts/debug.c +++ b/src/parts/debug.c @@ -349,6 +349,7 @@ cJSON *parts_to_json(struct parts *parts, bool verbose) if (parts->linked_from >= 0) cJSON_AddNumberToObject(obj, "linked_from", parts->linked_from); cJSON_AddNumberToObject(obj, "draw_filter", parts->draw_filter); + cJSON_AddBoolToObject(obj, "message_window", parts->message_window); cJSON_AddItemToObjectCS(obj, "motions", motions = cJSON_CreateArray()); struct parts_motion *motion; diff --git a/src/parts/parts.c b/src/parts/parts.c index ad9ad26..f3c7b80 100644 --- a/src/parts/parts.c +++ b/src/parts/parts.c @@ -837,8 +837,11 @@ void PE_UpdateComponent(possibly_unused int passed_time) } } -void PE_Update(int passed_time, possibly_unused bool message_window_show) +bool parts_message_window_show = true; + +void PE_Update(int passed_time, bool message_window_show) { + parts_message_window_show = message_window_show; PE_UpdateComponent(passed_time); audio_update(); parts_update_animation(passed_time); @@ -846,8 +849,9 @@ void PE_Update(int passed_time, possibly_unused bool message_window_show) parts_engine_dirty(); } -void PE_UpdateParts(int passed_time, possibly_unused bool is_skip, possibly_unused bool message_window_show) +void PE_UpdateParts(int passed_time, possibly_unused bool is_skip, bool message_window_show) { + parts_message_window_show = message_window_show; audio_update(); parts_update_animation(passed_time); parts_engine_dirty(); @@ -1487,12 +1491,14 @@ void PE_SetParentPartsNumber(int parts_no, int parent_parts_no) bool PE_SetPartsGroupNumber(possibly_unused int PartsNumber, possibly_unused int GroupNumber) { // TODO + WARNING("PE_SetPartsGroupNumber(%d, %d)", PartsNumber, GroupNumber); return true; } -void PE_SetPartsMessageWindowShowLink(possibly_unused int parts_no, possibly_unused bool message_window_show_link) +void PE_SetPartsMessageWindowShowLink(possibly_unused int parts_no, bool message_window_show_link) { - // TODO + struct parts *parts = parts_get(parts_no); + parts->message_window = message_window_show_link; } bool PE_GetPartsMessageWindowShowLink(int PartsNumber); diff --git a/src/parts/parts_internal.h b/src/parts/parts_internal.h index 80e2c6d..dba93b5 100644 --- a/src/parts/parts_internal.h +++ b/src/parts/parts_internal.h @@ -287,6 +287,7 @@ struct parts { int linked_to; int linked_from; int draw_filter; + bool message_window; TAILQ_HEAD(, parts_motion) motion; }; @@ -315,6 +316,7 @@ void parts_set_state(struct parts *parts, enum parts_state_type state); void parts_release(int parts_no); void parts_release_all(void); void parts_set_surface_area(struct parts *parts, struct parts_common *common, int x, int y, int w, int h); +extern bool parts_message_window_show; // for save.c void parts_list_resort(struct parts *parts); diff --git a/src/parts/render.c b/src/parts/render.c index c9cd201..70937f0 100644 --- a/src/parts/render.c +++ b/src/parts/render.c @@ -202,6 +202,8 @@ void parts_render(struct parts *parts) { if (!parts->global.show) return; + if (parts->message_window && !parts_message_window_show) + return; if (parts->linked_to >= 0) { struct parts *link_parts = parts_get(parts->linked_to); struct parts_state *link_state = &link_parts->states[link_parts->state]; diff --git a/src/parts/save.c b/src/parts/save.c index 02f47e3..a6821cb 100644 --- a/src/parts/save.c +++ b/src/parts/save.c @@ -22,6 +22,8 @@ #include "parts_internal.h" #include "../hll/iarray.h" +#define CURRENT_SAVE_VERSION 1 + static void save_parts_params(struct iarray_writer *w, struct parts_params *params) { iarray_write(w, params->z); @@ -483,6 +485,7 @@ static void save_parts(struct iarray_writer *w, struct parts *parts) iarray_write(w, parts->linked_to); iarray_write(w, parts->linked_from); iarray_write(w, parts->draw_filter); + iarray_write(w, parts->message_window); unsigned motion_count_pos = iarray_writer_pos(w); iarray_write(w, 0); // size of motion list @@ -497,7 +500,7 @@ static void save_parts(struct iarray_writer *w, struct parts *parts) iarray_write_at(w, motion_count_pos, motion_count); } -static void load_parts(struct iarray_reader *r) +static void load_parts(struct iarray_reader *r, int version) { int no = iarray_read(r); struct parts *parts = parts_get(no); @@ -518,6 +521,8 @@ static void load_parts(struct iarray_reader *r) parts->linked_to = iarray_read(r); parts->linked_from = iarray_read(r); parts->draw_filter = iarray_read(r); + if (version > 0) + parts->message_window = iarray_read(r); int motion_count = iarray_read(r); for (int i = 0; i < motion_count; i++) { @@ -535,7 +540,7 @@ static bool parts_engine_save(struct page **buffer, bool save_hidden) struct iarray_writer w; iarray_init_writer(&w, "XPE"); - iarray_write(&w, 0); // version + iarray_write(&w, CURRENT_SAVE_VERSION); // TODO: first_free from GetFreeNumber? unsigned count_pos = iarray_writer_pos(&w); iarray_write(&w, 0); // size of parts list @@ -583,7 +588,8 @@ bool PE_Load(struct page **buffer) WARNING("unrecognized savedata magic"); return false; } - if (iarray_read(&r) != 0) { + int version = iarray_read(&r); + if (version > CURRENT_SAVE_VERSION) { WARNING("unrecognized savedata version"); return false; } @@ -597,7 +603,7 @@ bool PE_Load(struct page **buffer) parts_release_all(); for (int i = 0; i < nr_parts; i++) { - load_parts(&r); + load_parts(&r, version); } return true;