Дворцовый портал: Кид скрывался за кромкой раньше времени
Уровень 4: в анимации ухода на следующий уровень контур Кида обрезался не
правой гранью портала, а раньше — брался клип подземного проёма, а
дворцовый шире.
draw_leveldoor считал кромку как xh*8 + 48, без дворцовой поправки. В
оригинале строкой ниже стоит (seg008:1429):
if (custom->tbl_level_type[current_level]) leveldoor_right += 8;
Значение читает clip_char как правую границу клипа персонажа — отсюда
ранняя обрезка. Расхождение было осознанным и отложенным: в коде стоял
комментарий «+8 у palace-уровней — на уровне 1 не применяется», дворцовых
уровней тогда в порту не было. tbl_level_type[4] = 1, там и проявилось.
pop_palace выставляет pop_bg_load из того же tbl_level_type, что читает
оригинал, так что эквивалент дословный.
Попутно найдено и НЕ починено (заведено отдельным багом
LEVELDOOR-STARTROOM-WIPE): в той же функции оригинал в СТАРТОВОЙ комнате
кладёт затирающий прямоугольник вместо лестницы, со своей дворцовой/
подземной разницей 48/39 и сдвигом 2 px, а мы рисуем марш 144 безусловно.
Видно только при приподнятой створке входной двери, поэтому на обходах
уровней 1-4 не попалось.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -337,9 +337,17 @@ static void draw_leveldoor(uint8_t modif, int xh, int dmy)
|
||||
int y = ybottom - (int)modif;
|
||||
/* leveldoor_right (seg008:1D29): правая кромка проёма — от xh ТЕКУЩЕГО
|
||||
* тайла, то есть ПРАВОЙ половины двери (сюда мы попадаем из
|
||||
* draw_tile_anim_right, разбирая левого соседа). +8 у palace-уровней
|
||||
* (tbl_level_type) — на уровне 1 не применяется. */
|
||||
* draw_tile_anim_right, разбирая левого соседа).
|
||||
*
|
||||
* +8 у дворцовых уровней — дословно seg008:1429
|
||||
* (`if (tbl_level_type[current_level]) leveldoor_right += 8;`): проём
|
||||
* во дворце шире, чем в подземелье. Без этой строки Кид в анимации
|
||||
* ухода на следующий уровень скрывался за кромкой РАНЬШЕ, чем нужно,
|
||||
* потому что клип брался по ширине подземного проёма (найдено на
|
||||
* уровне 4, обход 2026-08-17). pop_palace ставит pop_bg_load из того
|
||||
* же tbl_level_type, что читает оригинал. */
|
||||
pop_leveldoor_right = xh * 8 + 48;
|
||||
if (pop_palace) pop_leveldoor_right += 8;
|
||||
pop_env_b(99, x, ybottom);
|
||||
if (modif)
|
||||
pop_env_b(144, x, ybottom - 4); /* лестница (комната ≠ стартовой) */
|
||||
|
||||
Reference in New Issue
Block a user