Category Archives: Игры

BrainGames retro-игры под Linux

Здравствуйте.

Задача: взять все доступные игры на http://www.braingames.getput.com/
и собрать их под современный Линукс (modern Linux).

Задача решена успешно, игры классные, живые скриншоты всех игр я представлю!
Результаты моей работы – переделанные готовые для сборки сорцы, без объектных файлов,
можно скачать здесь: http://beotiger.com/download/braingames
Архивчик весит окло 80 Мегабайт, для некоторых игр включены их Windows-версии со всеми нужными библиотеками. Все Windows-версии игр Вы можете скачать с сайта BrainGames, адрес вверху. Я оставил Windows версии для сравнения.

Ниже русский текст перемежается с английским, сам не знаю почему.
Я – двуязычен, bilingual, хорошо, что не двуличен, хотя кто его знает! 🙂

Для сборки игр надо поставить в систему SDL: Simple DirectMedia Layer
(старый SDL, 1.2), а также некоторые сопутствующие ему либы, как то:
SDL_image SDL_mixer SDL_sound SGE etc.
причем их девелоперские версии (обычно оканчивающиеся на -dev или -devel)

В системах на основе APT'а (Debian/Ubuntu/Mint и другие), это делается так:
$ apt install build-essential libsdl-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-sound1.2-dev libsdl-ttf2.0-dev libsdl-sge-dev

Начал я тогда с месяц, а то и более, назад:

Date: 7-14 May 2015 AD
System: Linux justy 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

justy@justy ~/src/braingames $ c++ –version
c++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ОК, у нас современный Линукс Минт (Linux Mint), который идентифицируется как Ubuntu, ну и хорошо,
и современный компилятор c++ 4.8 (это g++).

Да, в играх BrainGames Alt+Enter переключает полный экран/окно, F12 – быстрый выход из игры.

Поехали игры:
0. TransballGL – only demo for Windows? But in archive there is src directorty, that should be compiled later!?
OK, Makefile created, SDL_rotozoom.h not found, it the part of SDL_gfx?
Install libSDL-gfx1.2-4 ?

collision.cpp:28:20: fatal error: GLtile.h: No such file or directory
#include "GLtile.h"

OK, Makefile needed to be changed!

Смысл такой, что TransballGL – крутая штука, и надо собрать её под нашу систему,
но пока не знаем как. Что-то много всего отсуствует.
Но в итоге мне удалось его собрать, он идёт ближе к кноцу. Оно стоит того!

1. supertransball2: compiled without problems from SuperTransball/stransball2-v15-windows/stransball2sources/.
Эта игра – предшественник TransballGL, только графика попроще, и уровней поменьше.
Стоит того, чтобы поиграть пару-тройку уровней.

Как собирается:
$ cd braingames/SuperTransball/src
$ make
После этого исполняемый файл stransball2 будет перемещен в папку вверх.

чтобы поиграть, делаем
$ cd ..
$ ./stransball2
 

strb1.jpg

strb2.jpg

2. RoadFighter

Linking errors.
Need to change string in Makefile:
$(CC) $(LDFLAGS) $^ -o $@ to $(CC) $^ -o $@ $(LDFLAGS)
e.g. LDFLAGS should go last.

Then all's OK!

Да, в RoadFighter'е ошибки линкощика обнаружились,
новый GCC использует другой порядок линка? Не знаю точно.

Новый Makefile должен работать без проблем:
$ cd braingames/roadfighter
$ make
$ ./roadfighter

В директорию src заходить не нужно, Makefile расположен здесь, он сам распознает нужную папку.
Игра играет!

 

rf1.jpg

rf2.jpg

rf3.jpg

rf4.jpg

3. F1 Spirit

Same LDFLAGS issue as in RoadFighter.
Also: delete curl/types.h line (it's obsolete long time ago).
To avoid linking against libm and others libc++ libraries we should change default compiler from gcc to g++.

Да, те же проблемы с линком, что и у RoadFighter. Плюс ещё пара нюансов вылезло (см. выше, на английском).

Итого: игрушка супер, RoadFighter * 100, свои уровни, реальные гонки. Но не проста в прохождении.
На сайте написано, что не доделана, но 3 трассы играются на ура!

Собираем:
$ cd braingames/F-1\ Spirit/
$ make
$ ./f1spirit

То есть в sources, как и в случае с roadFighter, заходить не надо, игра собирается и запускается с корня.
Наслаждаемся:
 

f1s1.jpg

f1s2.jpg

f1s3.jpg

f1s4.jpg

f1s5.jpg

f1s6.jpg

4. The Goonies

Same LDFLAGS issue as in RoadFighter.
Same needing g++ compiler instead of gcc.
Then make is OK!

ОК, собираем:

$ cd braingames/TheGoonies
$ make
$ ./goonies
 

goon1.jpg

goon2.jpg

goon3.jpg

goon4.jpg

goon5.jpg

5. NETHER EARTH

Как я сначала компилировал, и какие ошибки исправил (на английском, не обесудьте):
Ниже будет сборка готовой игры на русском.

$ cd NETHER EARTH/Nether Earth v0.52/src
$ make
g++ -c cmc.cpp -o cmc.o
cmc.cpp:11:21: fatal error: GL/glut.h: No such file or directory
#include "GL/glut.h"
^
compilation terminated.
make: *** [cmc.o] Error 1

No glut dev lib?
OK:
$ sudo apt-get install freeglut3-dev freeglut3

Yep, now it compiles!

Now, after runnig I got following error:
freeglut ERROR: Function <glutStrokeWidth> called without first calling 'glutInit'.

In main.cpp in main function I added line:
glutInit(& argc, argv);

and added:
#include "GL/gl.h"
#include "GL/glut.h"
at the head of it.

OK, rm *.o && make done it well!
Nether Earth works now!

Да, для NetherEarth – крутой 3D ретро-стратегии – надо доустановить GLUT:

$ apt install freeglut3-dev
$ cd braingames/NETHER\ EARTH/src
$ make
$ cd ..
$ ./nether_earth

Смысл игры похоже – захватить все ресурсы или уничтожить вражескую базу?
Мы управляем каким-то подом, можем строить роботов из различных компонентов,
потом отдавать им приказы – захватывать ресурсы/уничтожать вражеских роботов и т.п.
Или управлять ими с помощью своего пода. Круто!
 

ne1.jpg

ne2.jpg

ne3.jpg

ne4.jpg

6. The Maze of Galious

Same $(LDFLAGS) as in RoadFighter.
All is OK!

В этой игрушке есть фишка: нажатие клавиши F10 меняет скины игры,
превращая её то в версию для Dendy, то в версию для MSX, то в современную ретро-версию и т.п.
Я насчитал 6 шкурок.

Итак, сборка проста:

$ cd braingames/The\ Maze\ of\ Galious/
$ make
$ ./mog
 

tmg1.jpg

То же самое с другой шкуркой:
 

tmg2.jpg

tmg3.jpg

tmg4.jpg

tmg5.jpg

Другая шкурка:

tmg6.jpg

7. Transball GL

Вот и добрались до неё!

Этапы начальной сборки игры показаны ниже, уже на русском.
Потратил наверное около часа на всё это.
Сборка игры сейчас описана ниже, там же идут скриншоты.

justy@justy ~/src/braingames/TransballGL/TGL/src $ make
g++ -w -c state_playerprofile.cpp -o state_playerprofile.o `sdl-config –cflags`
state_playerprofile.cpp: In member function ‘int TGLapp::playerprofile_cycle(KEYBOARDSTATE*)’:
state_playerprofile.cpp:120:7: error: ‘m_profile_profiles_names’ was not declared in this scope
m_profile_profiles_names.Add(tmp);
^
make: *** [state_playerprofile.o] Error 1

> Тут опечатка: не m_profile_profiles_names, а m_profile_profile_names

g++ -w -c XMLparser.cpp -o XMLparser.o `sdl-config –cflags`
XMLparser.cpp:19:20: fatal error: symbol.h: No such file or directory
#include "symbol.h"
^
compilation terminated.
make: *** [XMLparser.o] Error 1

> И опять опечатка, не symbol.h а Symbol.h
> Тоже самое было с GLtile.h (вместо GLTile.h)
> Linux это не Windows, тут регистр в именах файлов имеет значение

> Пришлось тж. добавлять #else include <dirent.h> etc. вместе с #ifdef _WIN…
> И вместо _mkdir и т.п. использовать mkdir в условных выражениях
> В некоторых файлах… где ругался на DIR и dirent и прочее, надо было делать так:

#ifdef _WIN32
#include "windows.h"
#else
#include <unistd.h>
#include <stddef.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include "ctype.h"
#endif

То есть под #else я тут подразумеваю Linux. Попробовать бы собрать под MacOS X!?

Игра в итоге собралась успешно и играет как надо, так что всё жуе позади!
Итак, собираем сейчас:

$ cd braingames/TransballGL/src
$ make
$ cd ..
$ ./tgl

Цель игры – управляя мини-ракетой, захватить шарик, избегая любых препятствий и вытащить его на самый верх уровня.
Любое столкновение, кроме шарика, карается моментальной гибелью и переигрыванием всего уровня.

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

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

Уровни есть те же, что и в SuperTransball2, а есть я так понял и новые, но до них я пока не дошёл.

 

trgl1.jpg

trgl2.jpg

trgl3.jpg

trgl4.jpg

И на закуску –

8. Magical Tree

Эта игра не доделана и вряд ли когда будет.
К сожалению, исходники не представлены, мне по крайней мере не удалось их найти.

Играется через WINE:

$ cd braingames/Magical\ Tree/
$ wine Demo.exe

Доходит до конца дерева, и всё, даже если все яблоки собрал.
 

mt1.jpg

mt2.jpg

mt3.jpg

Пока всё, от BrainGames ничего не слышно уже лет 6, с 2009 года. Жаль, классные римэйки делали!
И сорцы крутые!

Спасибо вам, господа из BrainGames за наше счастливое дество!

$ date
Пн. июня 8 22:31:04 MSK 2015

$ uname -a
Linux justy 3.13.0-51-generic-tuxonice #84~ppa1-Ubuntu SMP Wed Apr 29 19:39:16 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

$ g++ –version
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ free -gho
total used free shared buffers cached
Память:7,8G 2,8G 5,0G 53M 49M 1,0G
Swap: 3,0G 0B 3,0G

~/src $ zip -r9 braingames.zip braingames/

$ du -sh *.zip
78M braingames.zip
34M retrospec.zip