Не знаю, актуально это или уже нет. Мне удалось скомпилировать статическую либу HPL.lib
Проблема кроется в двух вещах:
1)Напутано в путях к инклудам и сорцам к OALWrapper.
2) Пришлось закомментировать функцию валидности загрузки ogg-файлов и это: RUN_AL_FUNC( alEffecti(mlEffectId, AL_EFFECT_TYPE, AL_EFFECT_EAXREVERB)
Динамически пока не удалось, на выходе имеем это: Error 307 error LNK1104: cannot open file 'GLaux.lib'Добавлено (28 ноября 2015, 23:54)
---------------------------------------------
Вся трабла в том (по крайней мере у меня) что OALWrapper категорически отказывается линковаться динамически. Из нее и не линкуется весь двиг. Думаю, что Если убрать все что касается OpenAL, можно получить dll-ку движка и использовать в своих проектах. Посмотрим, что из этого выйдет.
Добавлено (19 декабря 2015, 21:03)
---------------------------------------------
Дневник сборки двика HPL-Engine.
В этой мини-статье описан процесс компиляции движка HPL1Engine под WIN32 с помощью IDE CodeBlocks и компилятора gcc-4.5.2.
Не судите строго, я и так с трудом себя заставил это писать. Лень-матушка.
На выходе имеем:
А) Собранный движок HPL1Engine в виде библиотеки libHPL.a и динамической HPL.dll.
Б)Скомпилированный запускной файл Penumbra.exe (из исходников соответствующей игры)
ЭТАП 0. ПОДГОТОВИТЕЛЬНЫЙ
Качаем 3 архива с сайта разработчиков:
1) Dependecies- все дополнительные библиотеки и заголовочные файлы для сборки движка
2) HPL1Engine-master- собственно, сам движок.
3) OALWrapper-master-враппер библиотеки OpenAL.
4) Переименовываем OALWrapper-master в OALWrapper
5) Все три папки располагаем на одном уровне файловой системы, т.е. в одну общую папку, например HPL
6) Устанавливаем IDE CodeBlocks.
7) Устанавливаем mingw32, если его не было в поставке CodeBlocks.
(Я использую старенький gcc-4.5.2, на нем отлично собираются не новые версии движка irrlicht)
ЭТАП1. КОМПИЛЯЦИЯ OpenAL-враппера, используемого в движке HPL1.
1) Импортируем проект в CodeBlocks
2) Project-Build options-Other options- удаляем все опции компиляции от Студии. Они нам не нужны:
3) Project-Build options-Search directories-Compiler:
Добавляем: ../dependencies/include/SDL
4) Пробуем компилировать. Выскакивают ошибки в строке с функцией вида swprintf(…
Меняем все swprintf на snprintf
5) В файле sources/OAL_OggSamples.cpp выскакивает ошибка в троке 123:
if((lOpenResult = ov_open_callbacks(fileHandle, &ovFileHandle, NULL, 0, OV_CALLBACKS_DEFAULT))<0)
{
………….
}
Перед этой строкой декларируем:
ov_callbacks callback;
В строке 123 заменяем на:
if((lOpenResult = ov_open_callbacks(fileHandle, &ovFileHandle, NULL, 0, callback))<0)
{
………….
}
Аналогично в строке 225
6) Если появляется ошибка, связанная с классом
cOAL_CustomStream::cOAL_CustomStream(const tStreamCallbacks& aCallbacks, const tStreamInfo& aInfo, void *apData)
тогда просто добавим два файла в наш проект:
Project—Add files- Идем по адресу:
OALWrapper/include/OALWrapper/OAL_CustomStream.h
OALWrapper/source/OAL_CustomStream.cpp
Все. Должна скомпилироваться статическая либа враппера. Правда, с непонятным именем lib.a. По идее нужно libOALWrapper.a
Меняем: Project- Properties-Build targets- Выбираем цель Release_Win32- в Output filename пишем: libOALWrapper.a
Компилируем.
7) Теперь делаем длл-ку. Меняем в целях сборки в поле type на Dynamic Library. Опять компилируем.
Куча ошибок. Ну да, пути к хедерам прописаны, а пути для линковщика- нет. В логах компилятора видно, что не найдено: OpenAL, SDL и vorbis. Подключаем:
Project-Build options-Linker settings- Add
Вбиваем там:
../dependencies/lib/win32/OpenAL32.lib
../dependencies/lib/win32/SDL.lib
../dependencies/lib/win32/SDL_image.lib
../dependencies/lib/win32/libogg.lib
../dependencies/lib/win32/libvorbis.lib
../dependencies/lib/win32/libvorbisfile.lib
Компилируем. Если все сделано верно, на выходе получаем: OALWrapper.dll.
Копируем libOALWrapper в: dependencies/lib/win32
Копируем OALWrapper.dll туда-же.
(Искать их для этого следует в папке OALWrapper, если не менялись пути).
ЭТАП 2. КОМПИЛЯЦИЯ ДВИЖКА.
1. Открываем CodeBlocks, импортируем проект из Студии, убираем флаги компиляции.
2. Выбираем цель Release Win32, пробуем компилировать.
Исправляем ошибки: строка 96 из sources/graphics/FontData.cpp:
vswprintf(sText, 255, fmt, ap);
на
vswprintf(sText, fmt, ap);
Аналогично на строке 330.
Если все равно не компилируется, можно попбробовать методом тыка один
Из флагов компиляции (нагуглил, как говорится):
__USE_MINGW_ANSI_STDIO=1
D__USE_MINGW_ANSI_STDIO=1
DUSE_MINGW_ANSI_STDIO=1
3. Следующая ошибка: файле Newton.h. Ругается на отсутствие декларации типа size_t
Лечится просто. В начале файла пишем:
#include <cstdio>
using namespace std;
4. Следущая ошибка у меня была такая:
../OALWrapper/include/OALWrapper/OAL_Effect_Reverb.h|54|error: 'AL_EFFECT_EAXREVERB' was not declared in this scope
Исправляем. В начале файла OAL_Effect_Reverb.h добавляем:
#include "AL/efx-creative.h"
5. Компилируем дальше. Остановка на строке 249 в файле:
sources/impl/LowLevelSoundOpenAL.cpp:
отсутствует декларация для функции strcmp.
Исправляем. В начале файла пишем:
#include <cstring> (или #include <string.h>)
6. Следующие грабли мы уже проходили: строка 423 в файле:
Sources/impl/LowLevelSystemSDL.cpp. Ошибка:
D:\MY_SOFT\HPL\HPL1Engine\sources\impl\LowLevelSystemSDL.cpp|423|error: cannot convert 'const wchar_t*' to 'char*' for argument '3' to 'int vswprintf(wchar_t*, const wchar_t*, char*)'|
Исправляем: убираем второй параметр в функции vswprintf(text, 2047, fmt, ap);
Т.е. теперь так: vswprintf(text, fmt, ap);
Эта ошибка встречается много раз в различных файлов в сорцах. Видимо, функция претерпела изменения. Исправляем аналогично.
Все. Статическая библиотека libHPL.a должна собраться.
7. Компилируем динамическую библиотеку. На этапе линковки: куча ошибок.
Заходим в настройки: Project—Build options—Выбираем цель Release 32—Linker settings.
Пишем:
..\dependencies\lib\win32\alut.lib
..\dependencies\lib\win32\cg.lib
..\dependencies\lib\win32\cgGL.lib
..\dependencies\lib\win32\EFX-Util.lib
..\dependencies\lib\win32\fltk.lib
..\dependencies\lib\win32\fltkforms.lib
..\dependencies\lib\win32\fltkgl.lib
..\dependencies\lib\win32\fltkimages.lib
..\dependencies\lib\win32\fltkjpeg.lib
..\dependencies\lib\win32\fltkpng.lib
..\dependencies\lib\win32\fltkz.lib
..\dependencies\lib\win32\libOALWrapper.a
..\dependencies\lib\win32\libogg.lib
..\dependencies\lib\win32\libtheora.lib
..\dependencies\lib\win32\libvorbis.lib
..\dependencies\lib\win32\libvorbisfile.lib
..\dependencies\lib\win32\newton.lib
..\dependencies\lib\win32\OpenAL32.lib
..\dependencies\lib\win32\SDL.lib
..\dependencies\lib\win32\SDL_image.lib
..\dependencies\lib\win32\SDL_ttf.lib
..\dependencies\lib\win32\SDLmain.lib
..\dependencies\lib\win32\libangelscript.a
glu32
opengl32
(возможно, кое-что можно опустить…)
Компилируем. Опять куча ошибок. Н этот раз- при линковке angelsript.lib.
Идем на сайт: http://www.angelcode.com/angelscript/downloads.html
Качаем версию 2.7.1b.
Собираем в CodeBlocks статическую либу, не забываем в настройках указать нужный компилятор (я использовал старенький gcc-4-5-2). Копируем либу в depedencic/lib/win32.
Можно собрать на всякий случай и длл-ку. Копируем туда же.
Компилируем. Последняя ошибка:
build\Release\sources\impl\LowLevelSystemSDL.o:LowLevelSystemSDL.cpp|| undefined reference to `hplMain(std::string const|
Тут я долго думал. Потом взял и закомментировал.
Строку 56: extern int hplMain(const hpl::tString &asCommandLine);
Строку 63: return hplMain(lpCmdLine);
Строку 82: return hplMain(cmdline);
Библиотека HPL.dll скомпилировалась.
ЭТАП 3. КОМПИЛЯЦИЯ PenumbraOverture
1. Переименовываем директорию HPL1Engine-master в HPL1Engine, иначе придется менять пути в настройках проекта.
2. Импортируем проект Студии с CodeBlocks, выбираем цель Release Win32, удаляем лишние флаги компиляции (Project—Выбираем цель Release Win32- Build options-Compiler settings Other options).
3. Убираем дополнительные опции линковки (Project- Выбираем цель Release Win32- Linker Settings- Other linker options) Приступаем к компиляции.
4. Итак, ошибка в строке 590 в файле SaveHandler.cpp. Знакомая функция swprintf.
Удаляем второй параметр (512).
5. Итак, файл Penubra.exe скомпилировался, но не слинковался. Смотрим, чего не хватает.
Указываем пути для линковщика: (Project—Build options—Linker setting)
Это уже было прописано:
HPL
OALWrapper
Fltk
wsock32
comctl32
Добавляем:
..\dependencies\lib\win32\cg.lib
..\dependencies\lib\win32\cgGL.lib
..\dependencies\lib\win32\SDL.lib
..\dependencies\lib\win32\SDL_image.lib
..\dependencies\lib\win32\SDL_ttf.lib
glu32
opengl32
..\dependencies\lib\win32\libangelscript.a
..\dependencies\lib\win32\newton.lib
..\dependencies\lib\win32\OpenAL32.lib
..\dependencies\lib\win32\libogg.lib
..\dependencies\lib\win32\libtheora.lib
..\dependencies\lib\win32\libvorbis.lib
..\dependencies\lib\win32\libvorbisfile.lib
..\dependencies\lib\win32\fltk.lib
..\dependencies\lib\win32\fltk.lib
..\dependencies\lib\win32\fltkforms.lib
..\dependencies\lib\win32\fltkgl.lib
..\dependencies\lib\win32\fltkimages.lib
..\dependencies\lib\win32\fltkjpeg.lib
..\dependencies\lib\win32\fltkpng.lib
..\dependencies\lib\win32\fltkz.lib
Все. В директории redist/ появился файл Penubra.exe
Продолжение следует....
Добавлено (19 декабря 2015, 21:14)
---------------------------------------------
Если будет необходимость, выложу все собранные либы куда-нибудь.
В планах:
0) Проверить собранный файл Penumbra.exe в реальной игре. Необходима вся медия игры, будем качать.
1) Разобраться с HelloWorld на движке.
2) Сборка под lin32. В принципе, пр наличии всех либ в 64битном варианте, можно попробовать собрать и под win64/lin64.
3) Будем разбираться с инструментарием движка. Пока имеем плагин для Maya. Не проверено.
Добавлено (20 декабря 2015, 12:22)
---------------------------------------------
Итак. Скомпилировались инструменты движка, 6 из 7.
Готово:
1)HlpHelper
2)Mapeditor
3)ModelViewer
4)ParticleViewer
5)SceneViewer
Не хочет линковаться:
1)HudObjectEditor.
Правда, эти редакторы представляют собой просто exe-файлы. По всей видимости, они работают только в месте расположения контента игры.
На просторах интернета я нашел так же папку Mod_tools, в которой все 7 редакторов есть.
Если нужно будет, выложу инструкцию по их компиляции. Все аналогично компиляции движка.
Пока все.
Добавлено (20 декабря 2015, 12:24)
---------------------------------------------
Пардон. Забыл добавить еще один готовый редактор: 6)ParticleEditor
Добавлено (20 декабря 2015, 13:26)
---------------------------------------------
Кому интересно, вот ссылка на все скомпилированные либы и редакторы:
http://rghost.ru/84sNGdGNR. Срок хранения: 90 дней.