A.I.M.(http://forum.ja2.su/cgi-bin/yabb/YaBB.pl)
Обсуждаем игры >> Гробокопатели >> Почему враги не залазят на крышу нигде, кроме Буки
(Message started by: neyros на 19.01.2005 в 07:25:33)

Заголовок: Почему враги не залазят на крышу нигде, кроме Буки
Прислано пользователем neyros на 19.01.2005 в 07:25:33
Потому, что в других версиях ЕХЕ закомментирован вот это участок кода:

Модуль TileEngine\WolrdDef.c

BOOLEAN LoadWorld( UINT8      *puiFilename )
{

...

#ifdef JA2TESTVERSION

 // ATE: Not while updating maps! // надо восстановить вот эти строки!

 if ( guiCurrentScreen != MAPUTILITY_SCREEN )   {
       GenerateBuildings();
 }

#endif

     RenderProgressBar( 0, 100 );


     DequeueAllKeyBoardEvents();


     return( TRUE );
}


Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Bezumnij Kovrik на 19.01.2005 в 12:08:02
2neyros: спасибо, я как раз их искал :D.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Bezumnij Kovrik на 19.01.2005 в 13:46:54
2neyros: сейчас глянул - у меня сразу эта часть была раскомментирована... :P Мабыть не понял чего-то?

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем neyros на 20.01.2005 в 08:51:53
Вот это ты убрал ?

#ifdef JA2TESTVERSION

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем rifleman на 20.01.2005 в 08:58:15
А исходя из каких соображений вообще закомментировали этот участок?

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем gyv на 20.01.2005 в 09:35:26
2neyros: 2rifleman: а в какой версии гражданские на крышу лезли, как маньяки ночью? В Буке? Мож, из-за этого и закомментировали?

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем neyros на 20.01.2005 в 11:33:54
Я думаю, что этот участок кода закомментировали по соображениям повышения надежности программного кода. Функция GenerateBuidings() производит построение массива, в котором хранится информация о зданиях с плоскими крышами. Эта информация используется АИ, когда он ищет точки на карте, где НПЦ могут залезть на крышу. Этот массив фиксированной длины - 31 позиция. А что будет, если в секторе нарисовать более 31 здания с плоской крышей? Видно, подумали Сиры, и решили убрать это дело, во избежание выхода за границы массива.
А буковцы, когда собирали свой ЕХЕ 1.02, почему-то это дело вернули назад. В общем, темна вода в облацах.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем rifleman на 20.01.2005 в 14:29:16
2gyv:
На крышу гражданские лезли в ЦС от буки. Хотя противник на крышу забираться перестал.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем neyros на 20.01.2005 в 14:52:05
Гражданские в ЦС на крышу не лезли. Они там оказывались при повторной загрузке сектора. Это разные вещи.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем rifleman на 20.01.2005 в 15:11:54
2neyros: Ну да,
совершенно верно


причем наличие плоской крыши было совершенно необязательным :)

некоторые просто путешествовали в воздухе, другие умудрялись телепортироваться на двухскатные

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем gyv на 20.01.2005 в 15:58:26
2neyros: Так Бука, вроде, исходники не видела. Их канадцы формировали (и портачили в них). 2rifleman: Забыл, опять забыл... но не факт, что эти баги - не ролдственники. Возможно, в исходниках ЦС "стоячие места" для гражданских формировались аналогичным способом и предпочтительные после загрузки оказывались именно на крышах (может, не тот порядок вызова функций при чтении сейва).

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Artem13 на 28.02.2005 в 09:23:15
2neyros:
Quote:
Я думаю, что этот участок кода закомментировали по соображениям повышения надежности программного кода.

Возможно. Но не исключён и антихардкорный вариант. Уж очень такие вещи за бугром не любят...

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Пакос Мира на 03.02.2006 в 16:36:07
2neyros:
А можно патчик не только для ЦС?
Для Голда, пожалйуста состряпаешь?
О :idea:
и для WF (5.0)... ;)
:pray:

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем TheDrill на 06.02.2006 в 09:49:54
 Дело явно не в границах массива зданий, так как CreateNewBuilding не позволяет создать больше MAX_BUILDINGS зданий.
 Кстати, рекомендую так же в GenerateBuilding использовать модифицированные версии функций WallExistsOfTopRightOrientation и WallExistsOfTopLeftOrientation, в которых бы искалась не обычная стена, а нормальная крыша. Иначе ИИ не будет забираться на крышу у стены с окном, дверью, или если совсем нет стены.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Терапевт на 05.02.2008 в 15:02:42
2neyros:

Quote:
Я думаю, что этот участок кода закомментировали по соображениям повышения надежности программного кода. Функция GenerateBuidings() производит построение массива, в котором хранится информация о зданиях с плоскими крышами.

Этот участок кода "закомментирован" из-за проблем с работой функции BUILDING * GenerateBuilding( INT16 sDesiredSpot ), програмный код которой может зацикливаться "навечно".

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Raty на 06.02.2008 в 10:41:19
Правильно ли я понимаю, функции WallExistsOfTopRightOrientation и WallExistsOfTopLeftOrientation используются только при лазании на крышу? Т.е. изменения в них ничего другого не заденут?

И еще один момент. Падение смертельно раненого бойца с крыши и связанные с этим глюки и вылеты. Кто-нибудь код смотрел?

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Терапевт на 07.02.2008 в 16:20:58
2Raty:

Quote:
Правильно ли я понимаю, функции WallExistsOfTopRightOrientation и WallExistsOfTopLeftOrientation используются только при лазании на крышу? Т.е. изменения в них ничего другого не заденут?  

Поищи текстовым поиском по всем исходникам, где встречаются эти функции, и посмотри их применение.


Quote:
Падение смертельно раненого бойца с крыши и связанные с этим глюки и вылеты. Кто-нибудь код смотрел?  

Игра падает в инлайновом ассемблерном коде изометрического движка игры, в который в некоторых случаях передаётся левый указатель. Причину появления левого указателя пока отследить (мне) не удалось.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем bugmonster на 08.02.2008 в 12:11:14
2Терапевт: А этот баг гарантированно воспроизводится с сейвника? Если так, то можно запустить Джа в режиме отладки и после падания посмотреть стек и откуда есть пошел этот левый указатель.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Терапевт на 08.02.2008 в 14:34:44
2bugmonster:

Quote:
А этот баг гарантированно воспроизводится с сейвника?

Нет.


Quote:
запустить Джа в режиме отладки и после падания посмотреть стек и откуда есть пошел этот левый указатель.

Применив слово "передаётся", я выразился не очень удачно. Там не вызов функции, а прямое присваивание регистру значения переменной с указателем, который получается вычислениями где-то выше по коду. При этом указатель не нулевой и с виду вполне нормальный.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем jarni на 08.02.2008 в 17:11:37
2Терапевт: В любое место в асм блоке можно всавлять обычный С/С++ код. Так что вопрос: есть хоть что-то что было бы подозрительным в указателе или в том куда он указывает?

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Терапевт на 11.02.2008 в 09:07:49
2jarni:
Ассемблерный блок здесь вообще ни при чём. Проблемы где-то до него, но вот где?

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем jarni на 11.02.2008 в 09:35:24
2Терапевт: Ответ на мой вопрос есть?

Quote:
При этом указатель не нулевой и с виду вполне нормальный.  
Раз падает, то значит не совсем нормальный.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Терапевт на 11.02.2008 в 12:51:28
2jarni:
Естественно он указывает на область памяти к игре не относящейся, но визуально это сложно было заметить.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем jarni на 11.02.2008 в 17:00:48
2Терапевт: А какая принципиальная проблема под дебагом в момент падения пройтись по стэку вызовов и посмотреть где поломался указатель?

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Терапевт на 12.02.2008 в 09:04:47
2jarni:
:) Ну если бы всё было так просто, то неужели ты думаешь, что я бы это не нашёл и не исправил? Там алгоритм расчётов не позволяет навскидку понять правильно вычисляется указатель или нет.


Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем bugmonster на 12.02.2008 в 14:28:08
2Терапевт: А что, известно место где указатель вычисляется? Можно для начала визуально проанализировать код, на переполнения или на некорректные входные значения.

Заголовок: Re: Почему враги не залазят на крышу нигде, кроме
Прислано пользователем Терапевт на 13.02.2008 в 11:05:23
2bugmonster:
Игра падает в Standard Gaming Platform\vobject_blitters.c в одной из функций перегона из 8 и 16 битный буфер. Больше ничего конкретного не помню.



A.I.M. » Powered by YaBB Modification 4 (v.4.0.0-pre)!
YaBB © 2000-2003. All Rights Reserved.