1 (edited by garnizon 10-04-2017 02:11)

Topic: ГЛЮКи ГНОМИКа (Manomania)

Вероятно многим агатовцам известна игра про гномика.
http://agatcomp.ru/Gamez/Manomania.shtml
Несколько раз на сайт приходили письма что у нас выложена версия с графическим глюком, но с оговоркой что в 90-е они видели именно такую же версию с глюком. Выяснилось, что все до одной версии гномика имеют упомянутую особенность.
Похоже это не глюк а ошибка в первичной отрисовке нового экрана, т.е. игра от авторов такой вышла.... скорее всего.....

Выглядит это таким образом, если начать игру все на вид прилично:

http://agatcomp.ru/Gamez/GIF/MANOMANIA/MANOMANIA.png

Если спуститься по лестнице, на нижнем этаже тоже все выглядит прилично, поднимаемся обратно - опять хорошо.
Но если переместится в комнату находящуюся справа то там увидим какую-то странную полосу на кирпичной кладке.
Если вернутся обратно в стартовую комнату, то и тут стена испортилась. Такой эффект проявляется везде если перемешаться в соседнюю комнату по горизонтали.

http://agatcomp.ru/Gamez/GIF/MANOMANIA/MANOGLUK.png

Кроме того, если гном избегая птицу прошел совсем рядом с ней, вот прям чуть-чуть не задел - на этом месте остается след.  И еще (очень редко) если гном пришел снизу, иногда портится рамка вокруг радара.

Есть предположение что это связано со способом отрисовки спрайтов.
Когда нужно нарисовать гнома где-то на экране, игра сначала запоминает фон, который в этом месте находится.
Потом рисует гнома.
Когда гнома нужно переместить в следующую позицию, сначала на его старом месте рисуется запомненный фон, потом запоминается фон под новым положением, и рисуется гном заново.
Вот когда переключаются экраны, похоже игра на свеженарисованном фоне сразу же пытается восстановить фон, запомненный на предыдущем экране.
Поскольку восстанавливается фон в логически предыдущем положении гнома, если гном только что вошел в уровень справа и рисуется в крайнем правом положении, его логическое предыдущее положение будет еще правее, так что его часть как бы за правой границей экрана.
Ведь видеопамять устроена так, что заворачивается по кругу: если нарисовать что-то правее правого, оно окажется с самого края слева.
а там, слева, обычно кирпичная стена. и поверх нее рисуется кусочек фона от предыдущего экрана.

С птицами похоже та же причина.
Сначала рисуем птицу на черном фоне. Запоминаем черный прямоугольник и рисуем птицу.
Теперь рисуем гнома на том же месте. Запоминаем черный прямоугольник с куском птицы и рисуем гнома.
Теперь следующий шаг игры.
Птица перемещается на новое положение. Сначала на старом рисуется запомненный черный прямоугольник, запоминается новый черный прямоугольник на новом месте и рисуется птица там.
В этот момент мы видим гнома, в котором прорезали прямоугольную дырку.
Теперь перемещается гном. На старом месте рисуется запомненный ранее прямоугольник *с куском птицы*, запоминается новый кусок фона и гном рисуется на новом месте.
Получается, что кусок птицы навсегда впечатался в фон, больше его уже никто не сотрет.
Если птица и гном несколько кадров подряд пересекаются, то птица размазывает так часть пикселей гнома, а гном -- птицы, и выходит странного вида след.

Слышал, чтобы так не происходило, в игрушке делали два экрана. На невидимом экране сначала восстанавливают все испорченные фоны, потом рисуют в новом месте персонажей, а потом переключают страницу.

К чему это все, может быть у кого-то, когда-то, будет желание попробовать исправить хоть часть глюков.
Ясно что это довольно трудно исправить, даже имея все исходники. Но вдруг......
Ну или хотя бы понять - верно ли что это не глюк а особенность игры?

2

Re: ГЛЮКи ГНОМИКа (Manomania)

Ну два экрана делать-расточительство. Раз фон под объектом запоминается и потом восстанавливается, можно что-то типа стека организовывать. Фон под певым отрисованным объектом - восстанавливается последним.
Или еще проще, спрайты то типовые, сделать табличку, с объектами где в каком месте экрана расположен первичный фоновый объект. Другими словами лабиринт с объектами фона. И вообще фон не запоминать, а просто восстанавливать первичные объекты на месте спрайтов.

Когда я бюрократа своего делал, такая же примерно проблема была... Ну как видим я ее решил тогда, в 16 лет))