Да, это малоизвестный порт Doom на 3DO. Во-первых, это была работа продолжительностью в 10 недель. Меня ввели в заблуждение о степени готовности порта, когда предлагали эту работу. Мне говорили, что была версия с новыми уровнями, оружием и фишками, и нужно было всего лишь "отполировать" и оптимизировать код до выпуска на прилавки. После моих неоднократных просьб предоставить эту версию, мне стало известно, что ее не существует. Art Data ошибочно предполагали, что для портирования игры с одной платформы на другую достаточно всего лишь откомпилировать код и добавить новое оружие проще простого.
О, нет...
Мои друзья в 3DO просили Doom, они хотели, чтобы игра была на их платформе. А так как Рождество 1995 было скоро (я взяла эту работу в Августе 1995 до середины октября «ухода на золото»), я фактически жила в офисе, прерываясь только на сон, доделала работу.
Примечания…
У меня не было времени, чтобы портировать драйвер музыки. У меня в распоряжении была музыкальная группа, которую наняла Art Data для переделки саундтрека. Все, что мне нужно было сделать, это использовать потоковое аудио.
Это было замечательным ходом, потому что в сравнении с тусклой графикой, музыка получила хорошие отзывы.
Операционная система 3DO была спроектирована так, что не затрагивала запущенные приложения и очистку памяти. От этого было много ошибок, вызванных утечкой памяти. Итак, когда я хотела запустить Logicware и id software логотипы при загрузке игры, память 3DO «забивалась» и не очищалась. Чтобы решить эту проблему, я написала 2 приложения: одно для показа 3DO логотипа, и другую для показа logicware логотипа. После их отработки, они удалялись из памяти и освобождали место для загрузки основной игры. Основное приложение уже работало без утечек памяти.
В исходниках есть видеоролик логотипа Electronic Arts, потому что было время, когда EA собирались распространять игру, но сделка не состоялась.
Вертикальные стены отрисовываются полосами, используя cel-engine. Однако, cel-engine не поддерживает перспективное 3D изображение, поэтому пол и потолок отрисовываются программно. У меня просто не хватило времени, чтобы полностью перевести весь код на cel-engine, поэтому сейчас присутствуют разрывы между текстур.
Мне пришлось написать собственную библиотеку ANSI C string.h потому что 3DO поставляла string.h с ошибками!!! Как это могло произойти?!?! А они это сделали! Я потратила день на переписывание всех необходимых мне функций в ARM 6.
Эта игра использует Burgerlib 2. Моя первая «С» версия Burgerlib, потому что оригинальная Burgerlib была разработана 65816 для SNES на Apple IIgs. Если вы сверитесь с библиотекой Burgerlib 5 (текущая версия на данный момент на github), вы обратите внимание, что некоторые куски кода все еще используются.
Я надеюсь, что каждый, кто просмотрит этот код, узнает что-то новое. Я была бы счастлива ответить на вопросы об этом аде, который я прошла, чтобы сделать эту игру. Единственное, чего бы я хотела, так это больше времени для полировки кода в 1995, чтобы вместо худшего порта Doom получился бы лучший.
И еще...
Интеллектуальная собственность Doom является эксклюзивной собственностью ZeniMax. Это предложение я не понял. No transfer of the intellectual property of DOOM or any transfer of the ownership of the sounds, art or other game assets are given nor implied. Если кто-нибудь хочет продавать 3DO версию Doom, свяжитесь с ZeniMax для выдачи лицензии.
Попыток не было. Была версия от Jaguar. А там лимит на размер ROM.
Добавлено спустя 5 минут 54 секунды:
aliast писал(а):
Собрал под виндой, запустил на FreeDO. А Мак-версию я не знаю как собрать, не дружу с MPW Shell
Как я понял, мы получили exe утилиты, которая должна запаковать все наши спрайты и прочее в REZFILE. Видимо, ее нужно запустить из командной строки с аргументами (исходные папки/файлы, выходной REZFILE). Делать это, скорее всего, придется в MPW Shell. Кто умеет, посмотрите в исходниках, какие должны быть аргументы и как вводятся?
Попытки были до того, как они связались с Logicware. Были планы на новые уровни, FMV вставки, новое оружие. Из этого всего в финальный билд перешла музыка, и скорее всего этот уровень может быть огрызком из того периода.
Кто-нибудь, кто знает С# гляньте исходники makerez. Интересует, как эту прогу использовать после ее компиляции? Нужны ли аргументы? Необходим ли внешний скрипт? Требования к размещению исходных файлов? Параметры сжатия (LZSS or RLE)?
Добавлено спустя 6 минут 57 секунд: Обнаружил мини-мануал.
"# v1.3 Copyright 1997 by LogicWare\n" "# This program will create a resource data file using a script\n" "# Usage: MakeRez Infile\n" "# Switches : [-H] = Do not save the .h file EVER!, [-V] Verbose output\n" "# [-B4000] Number of resource entries to allocate internally.\n" "# Script commands are as follows\n" "# TYPE 1-65535 [1]\n" "# ENDIAN BIG | LITTLE [LITTLE]\n" "# COMPRESS LZSS | NONE [NONE]\n" "# OUTPUTNAME Filename.rez [RezFile]\n" "# HEADERFILE Header.h\n" "# LOADFIXED\n" "# LOADHANDLE\n" "# LOAD 1-65535 Filename\n" "# LOADNEXT Filename\n" "# HLOAD rRezRef 1-65535 Filename\n" "# HLOADNEXT rRezRef Filename\n"
Добавлено спустя 2 часа 17 минут 41 секунду: Сравнил несколько библиотек из SDK и из комплекта компиляции под Win. Идентичны. Из чего следует вывод, что, добавив библиотеку Burgerlib и прочие из комплекта, можно получить тот же функционал.
Не знаю, что случилось, но я почему-то не могу сделать makefile средствами 3DO SDK. При любом раскладе (исходнике) выкидывает вот это: Никто не знает, как это починить? На этом же скрине в тексте видна ошибка компиляции. Компилятор не может создать промежуточный файл Ammain.c.o. По какой причине также не понятно, диск работает и на запись и на чтение.
Добавлено спустя 1 минуту 55 секунд: А вот ошибка в файле Threedo.c, при попытке скомпилировать исходники под Windows. Также никаких соображений по фиксу этой траблы.
Добавлено спустя 42 минуты 8 секунд: Удалось победить создание промежуточного файла Ammain.c.o. Остальные ошибки остались.
Добавлено спустя 1 час 9 минут 18 секунд: А вот MPW Shell выдает практически тоже самое, только на 2 ошибки больше.
Добавлено спустя 54 минуты 5 секунд:
aliast писал(а):
Да а смысл сейчас что-то объяснять, если я сделал ерунду) В двух словах: скопировал Burger.lib и Burger.h в 3DO SDK папки includes и lib соответственно, прописал Burger.lib в makefile в разделе где перечисляются все либы, добавил туда же armlib_n.32b (без неё ругается на fgets) Также пришлось добавить в исходник проги #include "filestream.h" иначе ругалось на FSEEK_SET. Вроде бы всё.
Можешь дать свои папки с libs и includes, а также makefile для этой проги?
Добавлено спустя 46 минут 44 секунды: Оказывается, ошибка не нова. 3DO SDK Видимо, у меня что-то работает не так.
Эта ошибка фиксится заменой строк #include <stdio.h> на #include"stdio.h"
Versus писал(а):
А вот ошибка в файле Threedo.c, при попытке скомпилировать исходники под Windows. Также никаких соображений по фиксу этой траблы
1) Ошибку с Rect я решил, переименовав Rect в rect (в graphics.h, хотя править что-то в SDK явно не правильно, разве что Дум собирался в другой версии 3DO SDK?) 2) FadeToBlack я вроде бы тупо закомментировал В результате вылезла ещё 18 ошибок о ненайленных символах. Скорее всего там надо какие-то либы подключать, а какие - непонятно. После подключения IntMath.lib часть ошибок пропала, но не все.
aliast Выручай. Сделал, как ты написал (кавычки, Rect->rect, FadeToBlack закомментировал). Откомпилировал Doom. Так экзешник получается совершенно другим, да еще и размер отличается. Исходный Launchme от игры - 222 кб, скомпилированный - 237 кб. Пришлось закомментировать строку FadeToBlack в displayutils.h. Игра не запускается вообще. А с Makerez тоже фигня какая-то. В исходниках поправил <> на "", где требовалось, не помогает.
Добавлено спустя 8 минут 10 секунд: Пробовал скомпилить 2 разных исходника Makerez. Результат - на скринах.
Добавлено спустя 4 минуты 36 секунд: Не раскроешь секрет своих MakeFile? У меня для Doom получился такой:
Но у меня так и не получилось скомпилировать сам Дум, только Makerez :( По ошибкам: 1) static char RezFileName[32] = "RezFile"; заменить на char RezFileName[32] = "RezFile"; 2) Подключить #include <filestream.h> 3) Подключить либу armlib_c.32b (у тебя armlib.32b? Видимо в ней нет функции fgets(), хз) Короче, у меня не было столько ошибок :) Там ещё остаётся ошибка со знаком "=", я не помню как её исправить. Сейчас сравнил оригинальный файл с моим MakeRez.c Вот отличия: 1)
#define FadeToBlack() FadeToBlackX() /* The 3DO library has a call like this */
говорит нам о том, что когда в коде встречается FadeToBlack(), ее нужно понимать, как FadeToBlackX(). А уже в свою очередь FadeToBlackX() работает несколько по-другому, чем в стоковом SDK. Механизм FadeToBlackX() прописан в fadetoblack.c.
Заметил, что исходники, переброшенные в эмулятор Мака, не распознаются корректно. В частности, makefile исходников logo.c. Под виндой файлы открываются нормально, а в Маке makefile не полностью распознается при открытии. Текст присутствует, но символы перехода строк сбиты, да и может еще чего... Тоже самое с исходниками Doom. Пока я не взял zip архив, присланный Ребеккой и не распаковал его уже в Маке, makefile так и отказывался читаться корректно. И, да, MPW эти файлы "не видит". Если запаковать исходники в zip в винде, а потом распаковать в Маке (ну как гарантия переноса без порчи) все равно файлы не читаются. Причем, это касается и *.c файлов. В чем трабла - хз...
Я ж говорю, не разбирался, но что не открывается в одной системе, почему-то может спокойно заработать в другой. Откопать почему так а не этак, конечно можно, если долго копать и если получится выяснить, где и какой глюк ночевал, но времени будет потрачено на несколько порядков больше.
11 дек 2014, 22:37
13chuck13
Лучший техник
Группа: Разработчики Сообщения: 2057 Регистрация: 04 янв 2011, 19:53 Откуда: Украина
Модель 3DO:GoldStar GDO-203P Alive II
Заметил, что исходники, переброшенные в эмулятор Мака, не распознаются корректно... Текст присутствует, но символы перехода строк сбиты, да и может еще чего...
Есть такая беда. В разных ОС могут использоваться различные символы для обозначения переноса строки. Если верить беглому поиску в интерннетах, windows - "\r\n", unix - "\n", macos - "\n\r". Возможно файл был подправлен и сохранен каким-то блокнотом под win и после этого не хочет корректно открываться на mac.
Возможно файл был подправлен и сохранен каким-то блокнотом под win и после этого не хочет корректно открываться на mac.
Тогда это делала Ребекка или коверкается, когда формируется архив с github-а. Если брать реально старый архив (даты файлов 1995 год) и распаковывать в маке, то все ОК.
I worked for NTG/3DO for just under five years, so I know (knew) the machine inside and out. It will be interesting to go through this code and see what kind of tradeoffs were made.
Из-под мака всё прекрасно компилируется, но с получившимся бинарником у меня запускается только лого id, причём три раза подряд)) а дальше черный экран :( Итого: 1) Копируем файлы BurgerLib3DO\Burger\Burger.h, BurgerLib3DO\String\string.h, BurgerLib3DO\IntMath\IntMath.h в папочку 3DODev\includes 2) Файлы BurgerLib3DO\Burger\Burger.lib, BurgerLib3DO\String\string.lib, BurgerLib3DO\IntMath\IntMath.lib в папочку 3DODev\libs 3) В 3DODev\includes\graphics.h в 540 строке (у меня) меняем
- т.е. стираем Rect 4) В 3DODev\includes\displayutils.h в 78 строке (у меня) удаляем // void FadeToBlack(ScreenContext *sc, int32 nFrames); - я эту строчку закомментировал Либо сделать то же самое в Burger.h ??? Этот вариант мне нравится больше. 5) ??? Билдим, получаем бинарник Doom, т.е. файл LaunchMe Если собирать это дело в правильно настроенном маке, то даже Doom.make менять не надо. Меня только пункты 3 и 4 настораживают, т.к. править 3DO SDK не есть хорошо. Что-то там не так надо делать...