?

Log in

No account? Create an account
Эх кстати-ка раз, эх кстати-ка два! - EyeGem's ЖЖ [entries|archive|friends|userinfo]
eyegem

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Эх кстати-ка раз, эх кстати-ка два! [Apr. 16th, 2013|05:30 am]
eyegem

Компьютерная игра Ecstatica II, как и первая Ecstatica, творения забытого ныне гения Эндрю Спенсера (Andrew Spencer), особо привлекательны той пугающе-чарующей атмосферой мрачного, средневекового, таинственно-мистического ужастика, что так мила сердцам их фанатов.



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






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



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


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


Замок второй части вообще представляет собой некий топологический пазл, настолько много в нём этажей, коридоров и комнат. Часто игра дразнит нас, показывая интересные места в которые нельзя просто так попасть.


Иногда же наоборот, делая очередной шаг, игрок обнаруживает рядом то, чего никак не ожидал там обнаружить.




Касательно же технической реализации можно выделить следующие моменты:
(для Ecstatica II)

* для 3D графики используется целочисленная математика с фиксированной точкой

* те объекты (actors), которые нужно рисовать находятся в display list

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

* код для работы со структурами данных не особо оптимальный
* но в игре не так много одновременных объектов, поэтому это не проявляется

* многие ресурсы в файлах ресурсов хранятся как наборы "событий" (events)
* имеется свой байт-код интерпретатор для игровых скриптов и AI

* благодаря "событиям" (events) многое "управляется данными" (data-driven)
* однако есть и то, что намертво захардкодено (UI, Init, некоторые игровые проверки)

* стиль кода очень процедурный и "досовский" (что нормально для середины 90-х)



Интересные моменты:

* в названиях процедур на английском есть забавные ошибки
* например "pallette" (palette) и "ambiants" (ambients)
* то есть английский язык для программиста не родной

* для поддержки режима SVGA 640x480 по всему коду жёстко понаставили if'ы
* в результате игра поддерживает только два разрешения: 320x200 и 640x480

* иногда код немного не совпадает и SVGA версия может, например, "забыть" что-нибудь стереть с экрана, например часть интерфейса

* чтобы можно было переключаться между VGA и SVGA прямо из игры по-быстрому добавили две процедуры GoSVGA() и GoVGA()

* поддержку Win95 тоже добавляли "чтобы по-быстрому"
* ведь в 1996 году поддержка Win95 ещё только набирала обороты

* например, обработку сообщений Windows и реагирование на сворачивание/восстановление окна, восстановление DirectDraw после сворачивания и остановку/запуск при этом музыки под Win95 приткнули "за компанию" в процедуру обновления позиции и перерисовки курсора мыши GetMouse()

* в многих процедурах кода видны остатки режима редактирования ресурсов (Edit)
* возможно режим редактирования даже рабочий (если настроить окружение)



Также см. ecstatica2
linkReply

Comments:
From: (Anonymous)
2014-02-26 10:13 pm (UTC)

XYZRGB

EyeGem,
please could you publicize XYZRGBs of E2 maps? The plainest the format the better (e.g., 1 XYZRGB per line).
Thank you.

P.S.: were can one get your impressive renderer? How does it work? Source?
(Reply) (Thread)
[User Picture]From: eyegem
2014-02-27 09:30 pm (UTC)

Re: XYZRGB

https://mega.co.nz/#!pRVlRZTB!r8yfPc3B2q7Y0QXNemw0-D2WWe5convQXplzqTqehgY

Archive: e2.rar (WinRAR to decompress)
Inside: e2.pcd (point cloud data file in custom format)
Format: 16 bytes per point (float x, float y, float z, uint32 argb)
(Reply) (Parent) (Thread)
From: (Anonymous)
2014-02-28 08:38 am (UTC)

Re: XYZRGB

Thank you! I am glad that the western sponsored undermining of Russia (e.g., by polluting the Runet with pornography/mauvais goût) has not yet dealt a death blow. What about your impressive renderer? (Are you an Unlimited Detail investigator?).
(Reply) (Parent) (Thread)
[User Picture]From: eyegem
2014-02-28 10:05 pm (UTC)

Re: XYZRGB

What renderer exactly?

Those videos at ecstatica2.livejournal.com were rendered with better quality targeted voxel renderer at avg 0.0143 fps (60-70s to render just one frame). Low quality voxels (big ones by abs.size, far ones in depth maps) were shifted deeper into z-buffer to prevent hiding of high quality (small ones by abs.size, near ones in depth maps) details at same areas of 3D space.

There is another one with src, combined from Epic Cloud Renderer approach + using UD-like octree format + dynamic points subdiv/undiv: http://www.gamedev.ru/code/forum/?id=131271&page=206#m3082

Why are you interested?
(Reply) (Parent) (Thread)