Порассуждаем над возможными расширениями для объявления объектов (плоских спрайтов), которые сейчас задаются так:
oHEXID X Y Z H filename где HEXID это цифровой идентификатор объекта в шестнадцатиричном виде, X и Y - координаты объекта на плоскости (с десятичной точкой), Z - высота объекта над полом (обычно 0, но может быть любым числом с десятичной точкой), H - вертикальный размер объекта (может быть с десятичной точкой) ну и filename - это имя файла (раньше можно было использовать как .txr файлы, так и файлы .gif - сейчас я хочу оставить только .txr). Например: o0099 7.5 9.5 0.1 1 door10
1) так как идентификатор более нигде не используется (на него никто не ссылается и т.д.) его можно опустить, скажем писать o! что будет означать инкремент последнего ID (задание количества объектов через objects можно сделать необязательным - в этом случае объекты будут аллоцироваться автоматически);
2) можно будет давать объектам имена - в таком случае объект будет задаваться как o!NAME и указанное уникальное имя будет видимым над объектом в игре (однако если имя начинается с _ то такое имя будет невидимым) - по такому имени (наряду с ID) можно будет совершать над объектом некие операции через терминал или скрипт;
3) анимированные объекты (плоские спрайты) можно будет задавать путём перечисления имён более чем одного файла через запятую:
o! 7.5 9.5 0.1 1 door10,door11,door12
за которыми может идти частота чередования кадров в секунду (по умолчанию пусть будет 1 смена кадра в секунду) - максимум 18.2 (если указать больше, то оно уменьшится до 18.2), минимум 0 (в этом случае переключением кадров будут заниматься сторонние скрипты);
4) более сложные объекты, которые с разных сторон выглядят по разному (как персонажи в думе), могут отстреливаться, порождать другие объекты (например ракеты) и т.д. надо будет задавать через скрипты, например:
o! 7.5 10.5 0 -1 script
причём четвёртое число, ранее задававшее вертикальный размер объекта, будет теперь отрицательным и его значение должно интерпретироваться как уровень сложности, с которого данный персонаж появляется в данном месте (т.е. -1 будет означать видимость с первого уровня сложности), если логика сделана прямо в программе на языке Си, то имя должно начинаться с символа ^ и ещё одним возможным необязательным параметром после имени может быть числовой идентификатор триггера, который активирует данный объект (даже наверное можно поддержать более чем один триггер для одного и того же объекта или вообще сделать произвольные параметры, передающиеся в код объекта как есть);
5) должна появится возможность задания текстур, картинок для спрайтов и скриптов (в виде байткода роботов) прямо в тексте 3dm-файла (в форматах C, XPM и JSON);
6) надо будет добавить директиву fade, с помощью которой можно будет задавать затемнение (или высветление скажем для имитации тумана) объектов в зависимости от расстояния от игрока: fade COLOR DISTANCE где COLOR это индекс цвета в игровой палитре куда плавно уходят все цвета на расстоянии DISTANCE, например:
fade C0 16
что будет означать, что через 16 клеток все цвета у объектов, стен, полов и потолков будут выглядеть как чёрные (см. для примера скриншоты из 1997 чуть ниже);
7) возможно потребуется директива include (я пока не сильно уверен в её необходимости) и наверное макросы (у которых имена будут начинаться например с символа $).