doom2d.org

Главная база плоских морпехов
It is currently 21 Sep 2020, 15:12

All times are UTC + 3 hours




Post new topic Reply to topic  [ 61 posts ]  Go to page 1, 2, 3, 4  Next
Author Message
PostPosted: 20 Dec 2016, 21:46 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
И нам надо понять, что с этим можно делать. В частности, как это применить в грядущей 1.41.

1. Предыстория.

Волынсков для Doom 2D создавал два формата анимаций.
Первый - ANM, он использовался в версии 1.30 и нам хорошо известен по анимации падающего робота и вылетающей надписи "КОНЕЦ". В этом формате также есть короткий ролик с летящим космическим кораблём, его можно найти в Oldprog: TC\LIBS\TEST\STAR1.ANM.
Второй - A8, который был создан как замена ANM для более новых версий Doom 2D. Предполагалось хранить в нём ролики для показа перед каждым уровнем (или почти перед каждым - об этом чуть ниже), а сами ролики и звуковое сопровождение к ним держать на диске игры.
В этом формате до нас дошла только одна анимация - приколист, кидающий дротики в портрет думера (DARTS.A8 из Oldprog).

Ответ на вопрос, почему же в 1.40 нет знаменитой концовки, очень прост: в коде игры формат ANM уже был заменён на A8, в этот же формат уже была пережата концовка. Однако потом у Приколсофта полетел винт, а восстанавливать ANM они не стали.

2. Как это делается.

Скажу сразу: A8 и сопутствующее им звуковое сопровождение читаются с диска, а не из WAD'а. Это даже хорошо.

В конфигурационном файле игры можно указать параметр cd_path, т.е. путь к диску игры (должен указываться с "\" на конце).
Если же этот параметр не указан, то cd_path считается пустой строкой.
Это важно понимать, т.к. обращение к файлам A8 в 1.40 идёт по такому пути:
Code:
<cd_path>A8\xxx.A8 - ролик
<cd_path>A8\xxx.SND - звуковое сопровождение

где xxx - название видеоролика.

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

3. Названия роликов.

По исходникам 1.35 легко судить о порядке проигрывания роликов:

Code:
int G_beg_video(void) {
  switch(g_map) {
    case 3: return A8_start("FALL");
    case 4: return A8_start("KORIDOR");
    case 5: return A8_start("SKULL");
    case 6: return A8_start("TORCHES");
    case 7: return A8_start("CACO");
    case 8: return A8_start("DARTS");
    case 9: return A8_start("FISH");
    case 10: return A8_start("TRAP");
    case 11: return A8_start("JAIL");
    case 12: return A8_start("MMON1");
    case 13: return A8_start("TOWER");
    case 14: return A8_start("SAPOG");
    case 15: return A8_start("SWITCH");
    case 16: return A8_start("ACCEL");
    case 17: return A8_start("MEAT");
    case 18: return A8_start("LEGION");
    case 19: return A8_start("CLOUDS");
//    case : return A8_start("");
  }
  return 0;
}


Ролики проигрываются перед уровнями. Можно заметить, что перед первым и вторым уровнями ролики не упомянуты. Однако на них можно переназначить ролики с других уровней при помощи дизассемблера. :)

Помимо этого, в коде упоминаются следующие ролики:
Code:
FINAL - надо полагать, ENDANIM (падение робота) из 1.30
CREDITS
KONEC - надо полагать, END2ANIM (надпись "КОНЕЦ") из 1.30

Они проигрываются в указанной последовательности после 19го уровня.

UPD: Обнаружил упоминание ещё двух роликов. Отличие в том, что их предполагалось проигрывать не до, а после уровней.
Code:
int G_end_video(void) {
  switch(g_map) {
    case 1: return A8_start("TRUBA");
    case 10: return A8_start("GOTCHA");
//    case : return A8_start("");
  }
  return 0;
}

4. Ложка дёгтя.

Проблема в том, что для этих роликов играется не DMM, а цифровой звук из SND-файла (вроде как тот же самый формат, что используется для всех цифровых звуков в Doom 2D оказалось это просто raw mono 11000 hz unsigned), который может быть расположен рядом с роликом (см. выше). Однако его присутствие необязательно.
Причина использования цифрового звука понятна по последней строчке в ENDOOM для «Операции "Смятка"»:

Image


К счастью, это не мешает восстановить ролики из 1.30, потому что после 19го уровня всегда начинает играться музыка "КОНЕЦ". Кстати говоря, она не заменяет собой цифровой звук, а микшируется с ним.

5. Как это можно применить в 1.41.

Самое банальное - можно вернуть ролики из 1.30. Да, это будет работать.
Для соблюдения аутентичности фон в ролике с надписью "КОНЕЦ" надо будет сделать серым, как в 1.40.
Также можно воткнуть ролик с дартсом. Несмотря на то, что по коду 1.35 он должен проигрываться после восьмого уровня, я бы поставил его перед девятым, т.к. именно на нём впервые встречается приколист.
Единственная проблема с этим роликом - к нему нет звукового сопровождения, кроме той DMM, что лежала неподалёку от него в Oldprog. Вернее, в Oldprog полно SND-файлов, и вполне возможно, что там даже есть что-то, подходящее нам. Но кто возьмётся разбирать?

Очень нужен интерес к теме! Иначе он заглохнет у меня.
Серьёзно, это реальная возможность сделать даже не 1.41, а 1.45.

Во вложении - ролик с дартсом и космическим кораблём, чтобы далеко не идти.
Attachment:
oldprog_anim.zip [482.09 KiB]
Downloaded 100 times

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 20 Dec 2016, 22:37 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 6561
Location: \\NEGRO
Так 1.40 поддерживает оба формата или только А8?

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 20 Dec 2016, 22:41 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 3683
Location: Киров
Черный Думер wrote:
Для соблюдения аутентичности фон в ролике с надписью "КОНЕЦ" надо будет сделать серым, как в 1.40.
Может всё-таки наоборот, поменять статичную картинку "конца" в 1.40 на 1.30 с чёрным фоном? Ты считай: просто картинку изменить (взяв её из 1.30) или целый ролик перерисовать (даже два, если английский вариант ещё считать). Да и был у меня такой вариант с серым роликом конца, в 1.30 была фигня в том, что ролик с роботом затухал до чёрного, а потом резко начинался ролик с буквами на сером фоне, из-за чего плавного перехода не было.

_________________
Давай, картечью демонов
Размажем по стене.
Давай, берсерком выпустим
Весь ливер сатане!

Сделайте нормальный огнемёт! :evil:


Top
 Profile  
 
PostPosted: 20 Dec 2016, 22:47 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Jabberwock wrote:
Так 1.40 поддерживает оба формата или только А8?
Только A8. Но Кетмар уже пилит перекодировщик из ANM в A8.

ar888 wrote:
Может всё-таки наоборот, поменять статичную картинку "конца" в 1.40 на 1.30 с чёрным фоном?
Можно и так. В конце концов, в 1.40 там даже некрасивый муар какой-то вокруг букв.

Вариант поставить ролик с дартсом перед уровнем с тюрьмой, озвученный вот здесь, мне очень нравится.

И да, важный момент. Дабы проигрывание роликов не мешало другим кампаниям, надо будет похимичить загрузку так, чтобы по умолчанию (т.е. просто при запуске DOOM2D.EXE) роликов бы не было, а при запуске специального батника - были. Этого вполне реально достичь, т.к. cd_path вроде можно указывать параметром командной строки.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 20 Dec 2016, 22:50 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 3683
Location: Киров
Jabberwock wrote:
ЧД» с играющим в дартс приколистом
Можно вставить перед уровнем-тюрьмой, и это было бы совсем круто.
Но Приколист появляется раньше, на 9 уровне он в секретной комнате сидит. Там с ним может произойти первая встреча.

_________________
Давай, картечью демонов
Размажем по стене.
Давай, берсерком выпустим
Весь ливер сатане!

Сделайте нормальный огнемёт! :evil:


Top
 Profile  
 
PostPosted: 20 Dec 2016, 22:51 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
ar888 wrote:
Но Приколист появляется раньше, на 9 уровне он в секретной комнате сидит. Там с ним может произойти первая встреча.
Это да, вот только после этого уровня этот игрок будет с ним уже знаком, а увидев приколиста в ролике перед уровнем с тюрьмой поймёт логическую цепочку.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 20 Dec 2016, 23:01 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 3683
Location: Киров
9-ый уровень ещё чем хорош: мы можем не найти там Приколиста, но будем знать об этом мужике и с нетерпением (может с боязнью) ожидать встречи с ним 2 уровня

_________________
Давай, картечью демонов
Размажем по стене.
Давай, берсерком выпустим
Весь ливер сатане!

Сделайте нормальный огнемёт! :evil:


Top
 Profile  
 
PostPosted: 20 Dec 2016, 23:22 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 6561
Location: \\NEGRO
А реально ли похимичить таким образом, чтобы сама игра включала ролики только при запуске doom2d.wad? По имени файла определять.
Это элегантнее, чем батчи.

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 20 Dec 2016, 23:55 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Jabberwock wrote:
А реально ли похимичить таким образом, чтобы сама игра включала ролики только при запуске doom2d.wad? По имени файла определять.
Оно-то реально, только у меня это лет пять времени займёт.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 21 Dec 2016, 01:16 
Offline
User avatar

Joined: 25 Feb 2013, 13:24
Posts: 609
ешьте, пейте, другого ресторан не готовит.


Top
 Profile  
 
PostPosted: 21 Dec 2016, 01:28 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 6561
Location: \\NEGRO
Черный Думер wrote:
Jabberwock wrote:
А реально ли похимичить таким образом, чтобы сама игра включала ролики только при запуске doom2d.wad? По имени файла определять.
Оно-то реально, только у меня это лет пять времени займёт.

Я про 1.41. Он же вроде как собирается из исходников?

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 21 Dec 2016, 03:24 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Jabberwock wrote:
Я про 1.41. Он же вроде как собирается из исходников?
Ты издеваешься или как?
У нас никогда не было исходников 1.40, есть только исходники версии 1.35.
1.41 я пилю на основе 1.40 всякими хаками.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 21 Dec 2016, 04:23 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 6561
Location: \\NEGRO
Я просто не возился с этими исходниками никогда, поэтому не всегда в курсе происходящего на этом фронте.
А 1.35 не собирается вообще?

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 21 Dec 2016, 05:18 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Jabberwock wrote:
А 1.35 не собирается вообще?
OutCast собирал вроде когда-то. Только она довольно сильно отличается от 1.40, поэтому её просто так не взять.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 21 Dec 2016, 21:43 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Обнаружил упоминание ещё двух роликов, подробности в первом сообщении.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 22 Dec 2016, 13:47 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Удалось сделать патч, который отныне позволяет указывать папку с A8-роликами и музыкальным сопровождением к ним в командной строке.
Это делает функциональность A8-роликов востребованной, потому что до этого возврат ролика с роботом и вставка ролика с дартсом в 1.41 могли негативно повлиять на уже существующее множество кастомных кампаний.

Как это работает: параметр "-a8_path ###", где ### - полный или относительный путь к папке с роликами и звуком для них.
По умолчанию игра будет искать их прямо в папке с игрой.

Сам патч:

Code:
2016/12/22 (y/m/d)

DOOM2D.EXE
Length: 194,074 bytes
Changes: 28

Offset / Before / After

; таблица релокаций LE: менять адрес литерала "cd_path" в
; поле cfg_t.par, а не cfg_t.cfg (CONFIG.C: lines 22-26, line 74)
0000E23A: 98  94

; "cd_path" -> "a8_path"
0002C494: 63  61
0002C495: 64  38

; прибавлять к cd_path не "A8\%s.SND", а "\%s.SND"
; (%s - название ролика)
0002C6BE: 41  5C
0002C6BF: 38  25
0002C6C0: 5C  73
0002C6C1: 25  2E
0002C6C2: 73  53
0002C6C3: 2E  4E
0002C6C4: 53  44
0002C6C5: 4E  00
0002C6C6: 44  00

; прибавлять к cd_path не "A8\%s.A8", а "\%s.A8"
; (%s - название ролика)
0002C6CA: 41  5C
0002C6CB: 38  25
0002C6CC: 5C  73
0002C6CD: 25  2E
0002C6CE: 73  41
0002C6CF: 2E  38
0002C6D0: 41  00
0002C6D1: 38  00

; "Испорченный файл A8 %s" -> "Испорченный файл A8: %s"
; (%s - полный путь к файлу ролика)
0002C6E7: 20  3A
0002C6E8: 25  20
0002C6E9: 73  25
0002C6EA: 00  73

; таблица парсера, поле cfg_t.par:
; NULL -> адрес литерала "cd_path"
0002E594: 00  94
0002E595: 00  10

; таблица парсера, поле cfg_t.cfg:
; адрес литерала "cd_path" -> NULL
0002E598: 94  00
0002E599: 10  00


Текущий DOOM2D.EXE версии 1.41 с этой функциональностью:
Attachment:
DOOM2D.zip [100.13 KiB]
Downloaded 113 times

Просьба потестировать.

UPD: Также я увидел наконец, что ресурс CD1PIC тоже используется в игре!
Оказывается, он ставится перед проигрыванием ролика.
Не забываем, что ролики должны были лежать на компакт-диске, а скорость чтения с него невысока.

Однако надо решить, оставлять ли его. При чтении с обычного жёсткого диска он мерцает буквально на мгновение перед проигрыванием каждого ролика.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 22 Dec 2016, 15:59 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:57
Posts: 3683
Location: Киров
Мерцание лучше убрать перед роликами. А саму картинку не знаю, надо ли оставлять.

А подключение роликов - это круто!

_________________
Давай, картечью демонов
Размажем по стене.
Давай, берсерком выпустим
Весь ливер сатане!

Сделайте нормальный огнемёт! :evil:


Top
 Profile  
 
PostPosted: 22 Dec 2016, 16:12 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Ну из-за неё и мерцает.
Плюс если есть звуковое сопровождение, то она выводится два раза (недочёт в коде).
А перед каждым её выводом вдобавок зачем-то очищается экран.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 22 Dec 2016, 19:47 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 6561
Location: \\NEGRO
Наверное, у них артефакты были, потому и очищается.
CD1PIC, наверное, не нужен.

Кстати. Если музыка планировалась с CD, то что это за музыка? Творения Калинина прекрасно играются и из вада.

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 22 Dec 2016, 20:52 
Offline
Приколист
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 5914
Location: Владивосток
Jabberwock wrote:
Наверное, у них артефакты были, потому и очищается.
Но суть в том, что CD1PIC всё равно всё зарисует собой и так.

Jabberwock wrote:
Кстати. Если музыка планировалась с CD, то что это за музыка? Творения Калинина прекрасно играются и из вада.
Перечитай первое сообщение. Там наверняка планировалась озвучка поверх DMM-музыки, потому что в случае с конечной заставкой они микшируются.

UPD: Успешный эксперимент с цифровой музыкой у ролика.
Как оказалось, оно вполне умеет грузить большие звуки. А ещё при загрузке звука заставка с зомби видна дольше.


_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 61 posts ]  Go to page 1, 2, 3, 4  Next

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
doom2d.org, since 2007