diff --git a/applications/PoP/roomtest/pop_kid.c b/applications/PoP/roomtest/pop_kid.c index 3fe2d56..6ed375f 100644 --- a/applications/PoP/roomtest/pop_kid.c +++ b/applications/PoP/roomtest/pop_kid.c @@ -206,9 +206,20 @@ pop_char_t Opp; void pop_loadkid(void) { Char = Kid; } void pop_savekid(void) { Kid = Char; } -/* Выгрузка БЕЗ кадра: control() кадр не трогает, а cur_frame в этот - * момент принадлежит тому, кто последним крутил play_seq. */ -void pop_savekid_state(void) { Kid = Char; } +/* Выгрузка после control(): копируем ТОЛЬКО то, что диспетчер реально + * меняет у активного персонажа — последовательность и состояние меча. + * + * Почему не `Kid = Char`, как делает savekid оригинала: у нас часть + * действий control() исполняет pop_map (pop_down_action, pop_jump_up_seq, + * safe_step...), и он пишет ПРЯМО в Kid — там ещё не портирован переход на + * Char. Полное копирование затирало эти правки: Kid терял выравнивание x + * и ряд, и спуск с уступа через вис не срабатывал — персонаж просто + * приседал. Когда pop_map переведём на Char, здесь вернётся Kid = Char. */ +void pop_savekid_state(void) +{ + Kid.curr_seq = Char.curr_seq; + Kid.sword = Char.sword; +} void pop_loadshad(void) { Char = Guard; } void pop_saveshad(void) { Guard = Char; } void pop_loadshad_and_opp(void) { Char = Guard; Opp = Kid; }