diff --git a/src/parts/parts.c b/src/parts/parts.c index dae8334..6d04aaf 100644 --- a/src/parts/parts.c +++ b/src/parts/parts.c @@ -1120,6 +1120,11 @@ static void parts_update_component(struct parts *parts) void PE_UpdateComponent(possibly_unused int passed_time) { + // After loading a save, the game script may compute a negative time delta + // because it stores an absolute system.GetTime() value in the save data, + // which is meaningless across process restarts. + if (passed_time < 0) + passed_time = 0; while (!TAILQ_EMPTY(&dirty_list)) { // pop parts object from dirty list struct parts *parts = TAILQ_FIRST(&dirty_list); diff --git a/src/parts/render.c b/src/parts/render.c index 570c4e9..6a91641 100644 --- a/src/parts/render.c +++ b/src/parts/render.c @@ -634,12 +634,6 @@ static bool pe_dirty = false; void parts_render_update(int passed_time) { - // XXX: hack for Rance 01 load issue - // There is a bug in Rance 01 where a single bad frame is displayed after - // loading a save. When this happens, the game passes a negative time delta - // to PE_Update. We fix this issue by ignoring such calls. - if (passed_time < 0) - return; if (pe_dirty) { struct parts *p; PARTS_LIST_FOREACH(p) {