a5252b1c60
КОД НЕ МЕНЯЛСЯ. Разбор одиннадцати находок рангов А и Б: что менять, во что это обойдётся по скорости и памяти, каков риск. СНЯТО ГЛАВНОЕ ПРЕПЯТСТВИЕ. Обоснование двух упрощений (guards.c:1011 — «нужны тайловые запросы от Char, а pop_map умеет только от Kid») УСТАРЕЛО: get_tile_at_char, get_tile_infrontof_char, get_tile_behind_char и distance_to_edge_weight в pop_map.c уже работают от Char, они лишь не выведены в заголовок. Данные тоже на месте — pop_char_set_seq ставит любую из 115 последовательностей, то есть seq_81 и seq_64 доступны без единого нового байта. Три находки упираются не в архитектуру, а в четыре строки объявлений. СКОРОСТЬ. Места классифицированы по частоте вызова: play_seq и ИИ стража — горячие, land/in_wall/bumped/hurt_by_sword — событийные. Из одиннадцати правок две УСКОРЯЮТ код (уходит условие из горячего цикла; звук перестаёт играть в двух случаях из трёх), большинство бесплатны (перестановка строк), и ни одна не требует переделки архитектуры. Единственный конфликт со скоростью — отложенная побудка чомперов: play_seq маппит страницу байткода в W0 один раз перед циклом, и звать start_chompers внутри цикла значило бы снимать и возвращать окно на каждый переход ряда. Дешёвая замена: копить не один флаг, а битовую маску рядов и разбудить их после цикла — теряться ряды перестанут, цена в цикле нулевая. Для стражей аналогично: не межбанковый вызов wall_type, а копия таблицы в 32 байта в своём банке. Порядок работ — от «одна-две строки, низкий риск» (13, 24) к тем, где правка может компенсировать наши отличия в другом месте (1, 7). Политика: для критичных фиксов скорость не вето — такие выносятся в отдельный разбор с поиском дешёвого способа. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011MsUsEFAQfsjjQpJ7RtKVY