PoP roomtest: окно Char больше не затирает правки pop_map (спуск с уступа)
Регрессия от окна Char вокруг control() (cf06896): диспетчер работает с
копией Char, а часть его действий у нас исполняет pop_map (pop_down_action,
pop_jump_up_seq, safe_step, зацеп) — и пишет ПРЯМО в Kid, потому что на Char
он ещё не переведён. Завершающее `Kid = Char` затирало эти правки:
выравнивание x и ряд терялись, и спуск с уступа через вис не срабатывал —
Кид просто приседал.
pop_savekid_state теперь копирует только то, что диспетчер реально меняет
у персонажа: curr_seq и sword. Когда pop_map переведём на Char, вернётся
полное копирование — в комментарии это зафиксировано.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -206,9 +206,20 @@ pop_char_t Opp;
|
|||||||
|
|
||||||
void pop_loadkid(void) { Char = Kid; }
|
void pop_loadkid(void) { Char = Kid; }
|
||||||
void pop_savekid(void) { Kid = Char; }
|
void pop_savekid(void) { Kid = Char; }
|
||||||
/* Выгрузка БЕЗ кадра: control() кадр не трогает, а cur_frame в этот
|
/* Выгрузка после control(): копируем ТОЛЬКО то, что диспетчер реально
|
||||||
* момент принадлежит тому, кто последним крутил play_seq. */
|
* меняет у активного персонажа — последовательность и состояние меча.
|
||||||
void pop_savekid_state(void) { Kid = Char; }
|
*
|
||||||
|
* Почему не `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_loadshad(void) { Char = Guard; }
|
||||||
void pop_saveshad(void) { Guard = Char; }
|
void pop_saveshad(void) { Guard = Char; }
|
||||||
void pop_loadshad_and_opp(void) { Char = Guard; Opp = Kid; }
|
void pop_loadshad_and_opp(void) { Char = Guard; Opp = Kid; }
|
||||||
|
|||||||
Reference in New Issue
Block a user