Предлагаю здесь делиться различными неожиданными вещами, которые встречаются в поведении кода игры. Это может помочь при его переделке в дальнейшем.
Редактор пока не рассматриваем, если будет надо, то создадим отдельную тему.
__________
Когда я сегодня делал
вот эту штуку, то нечаянно напоролся на следующую ситуацию.
Берём и из условия проверки наступления середины анимации смерти авиабазы убираем вот это условие:
Код:
and (FAnim[FCurAnim, FDirection].Counter = 0)
Это проверка на то, что кадр только что сменился. Без неё черепки будут создаваться на всём протяжении кадра, а не только в момент его появления.
Очевидно, что это неправильно. Но если судить сугубо по коду, то помимо этого больше ничего озадачивающего происходить не должно.
Однако если теперь скомпилировать игру, запустить приложенную в вышеупомянутом сообщении карту и сначала убить элементаля любой ловушкой, а затем сделать то же самое с возникшими черепками, то... игра вылетит с вот таким вот выхлопом:
Код:
[4:28:16] !!! Access violation
=====================
$004AB6FD TMONSTER__ALIVE, line 4452 of g_monsters.pas
$004AC629 G_MONS_FOREACHALIVEAT, line 4871 of g_monsters.pas
$004D660A TR_CLOSETRAP, line 428 of g_triggers.pas
$004D8A9D ACTIVATETRIGGER, line 1323 of g_triggers.pas
$004DE8C5 G_TRIGGERS_PRESSR, line 2934 of g_triggers.pas
$004BFFAB TPLAYER__USE, line 5611 of g_player.pas
$004BEB67 TPLAYER__UPDATE, line 5192 of g_player.pas
$004B3AE6 G_PLAYER_UPDATEALL, line 1370 of g_player.pas
$00456EBF G_GAME_UPDATE, line 2238 of g_game.pas
$00480C5F UPDATE, line 686 of g_main.pas
$004E8211 PROCESSMESSAGE, line 146 of g_window.pas
$004E8CB9 SDLMAIN, line 377 of g_window.pas
$00480B36 MAIN, line 576 of g_main.pas
$00401F72 main, line 238 of Doom2DF.lpr
Я не смог понять, почему такое происходит, исходя из одной лишь логики близлежащего кода.
Может кто-нибудь глянуть? Вдруг это баг какой-нибудь в grid.