Portál AbcLinuxu, 1. května 2025 01:33
Před víc než rokem vyšly zdrojové kódy legendární české hry Brány Skeldalu pod licencí GPL a samotná hra by měla být volně ke stažení z webu svých tvůrců, firmy Napoleon Games (link ke stažení hry v době psaní tohoto zápisku nefungoval). Rok se o portování hry na Linux jen mluvilo, teď přichází první hratelná verze.
Záměrně říkám hratelná a ne funkční. Původní kód obsahuje spoustu hacků závislých na vlastnostech architektury x86 a jeho přepis do přenositelné podoby ještě nezačal. Změny se zatím omezují jen na likvidaci WinAPI v herním kódu a implementaci provizorního SDL backendu. Několik funkcí ještě není implementováno vůbec, takže vás někde v polovině hry může čekat nemilé setkání s makrem assert(0);.
Co funguje:
Co budete potřebovat:
Jak to nainstalovat:
UPDATE
Pomocí autotools jsem udělal jednoduchý build systém, configure skript sice zatím neumí ovlivnit výslednou binárku, ale aspoň testuje závislosti. Také jsem opravil pár bugů ve zvukovém subsytému a přepsal část nepřenositelného kódu na přenositelný. Nově by hra měla jít zkompilovat i na x86_64, ale nemám kde to otestovat a s velkou pravděpodobností bude hra segfaultovat.
Tiskni
Sdílej:
No, Skeldal prodle mě není zas tak vymáklý oproti třeba Eye of the Behloder I/II a Dungeon Masterovi, ale šaptný taky není.
Hmm, nebo když mi odpustíte že opustím čtverečky, tak Ambermoon a pochopitleně Albion, to jsou vrcholy žánru, i se sociální interakcí, dungeon 2.0 :)
Dungeon 2.0 sa u mňa volá RPG a presne tam ten Albion radím Len škoda, že v tej hre je niekoľko bugov a keď má človek smolu a narazí na ne, tak sa to nedá už dohrať.
ALELUUUUJA! Já myslel že ten projekt chcípl! Byl sem i registrovanej na sourceforge net u tohohle projektu, ale nechodily mi žádný nový zprávy o tom co se děje. Taky sem tam psal pár návrhů.
~/tovarna/svn/next_ghost$ make
g++ -I. -g -c -o cztable.o cztable.cpp
cc -I. -g -c -o game/automap.o game/automap.c
cc -I. -g -c -o game/builder.o game/builder.c
cc -I. -g -c -o game/clk_map.o game/clk_map.c
cc -I. -g -c -o game/dialogs.o game/dialogs.c
cc -I. -g -c -o game/dump.o game/dump.c
cc -I. -g -c -o game/enemy.o game/enemy.c
cc -I. -g -c -o game/engine1.o game/engine1.c
cc -I. -g -c -o game/engine2.o game/engine2.c
cc -I. -g -c -o game/gamesave.o game/gamesave.c
cc -I. -g -c -o game/globmap.o game/globmap.c
cc -I. -g -c -o game/chargen.o game/chargen.c
game/chargen.c: In function ‘enter_generator’:
game/chargen.c:893: warning: passing argument 2 of ‘potvrzeno’ from incompatible pointer type
cc -I. -g -c -o game/interfac.o game/interfac.c
game/interfac.c: In function ‘skeldal_soupak_init’:
game/interfac.c:1238: warning: cast to pointer from integer of different size
game/interfac.c: In function ‘skeldal_soupak_draw’:
game/interfac.c:1254: warning: cast from pointer to integer of different size
game/interfac.c: In function ‘skeldal_soupak’:
game/interfac.c:1317: warning: assignment from incompatible pointer type
game/interfac.c: In function ‘smlouvat’:
game/interfac.c:1709: warning: passing argument 1 of ‘on_event’ from incompatible pointer type
cc -I. -g -c -o game/inv.o game/inv.c
cc -I. -g -c -o game/book.o game/book.c
cc -I. -g -c -o game/magic.o game/magic.c
cc -I. -g -c -o game/macros.o game/macros.c
cc -I. -g -c -o game/menu.o game/menu.c
cc -I. -g -c -o game/realgame.o game/realgame.c
cc -I. -g -c -o game/setup.o game/setup.c
cc -I. -g -c -o game/skeldal.o game/skeldal.c
game/skeldal.c: In function ‘reload_map_handler’:
game/skeldal.c:1171: error: invalid initializer
make: *** [game/skeldal.o] Error 1
Debian Lenny 64bit
Tohle je zatím jen testovací verze. 99% starého kódu zůstalo beze změn, takže to funguje jen na x86 (psal jsem to i v článku). Buď budeš potřebovat 32-bit chroot, nebo budeš muset počkat na přepis starého kódu.
A chystá se to někdo přepsat?
Samozřejmě, že se chystám. Přečti si README. Tohle je pracovní verze, aby se při dalším přepisování dalo snadno zjistit, jestli se něco nerozbilo.
tak co s tím?
Jo, pak mě to taky napadlo. Jak jinak že? Kdo má 64bit, ten si z 90procent nic nezkopiluje protože je všechno pro 32bit.
Jardík 2?
stdarg.h je includovaný hned několikrát, minimálně jednou z game/globals.h a ještě jednou z libs/system.h. Spíš na 64bit systému nejde inicializovat va_list z void*.
Mimochodem, i kdyby se to povedlo zkompilovat, tak hra nebude fungovat. Na 64bit systému budou jinak velké datové struktury, takže se z datových souborů načtou nesmysly.
2) Change the engine from task based to frame based (0% done) Eh, neumím moc anglicky, taže co si pod tím mám představit?
Že původní kód není postavený nad smyčkou zpráv, kde se napřed čte vstup, pak se počítá stav a nakonec zvučí a kreslí výsledek, ale že je to všechno smíchané do jedné nepřehledné hromady. Tenhle bod ale asi přesunu na později a místo toho začnu řešit build systém a přenositelnost.
...dyt je to death game , od death company...
s/death/dead
Tohle sleduju už tak pět let . A furt čekám.
make[1]: Entering directory `/home/ondrej/Projekty/skeldal/branches/next_ghost'
make[1]: *** No rule to make target `game/automap.c', needed by `game/automap.o'. Stop.
make[1]: Leaving directory `/home/ondrej/Projekty/skeldal/branches/next_ghost'
make: *** [all] Error 2
Pár revizí zpátky jsem všechny zdrojáky předělal na C++ a projekt už obsahuje build systém postavený na autoconfu. Jestli ti po updatu zbyl v pracovním adresáři bordel, udělej čistý checkout a pak configure.
game/interfac.cpp: In function ‘void skeldal_soupak_draw(int, int, int, int, OBJREC*)’:
game/interfac.cpp:1278: error: cast from ‘void*’ to ‘int’ loses precision
Budu hádat, x86_64? Buď se můžeš do vývoje zapojit, nebo budeš muset počkat na dokončení základního přepisu. Zatím relativně funguje jen x86 a další platformy nemám kde vyzkoušet.
Ano, x86_64. Som uz clenom projektu www.freeorion.org/index.php/Main_Page, ale po zaradeni next_ghost do trunk sa mozno pridam aj do projektu skeldal. Inak nie je rozumnejsie pouzivat boost? Boost je standard a je multiplatformovy.
Zařazení do trunk rozhodně v nejbližší době nečekej. Jednak ještě některé herní funkce v next_ghost chybí (například hraní na flétnu) a jednak se před zařazením do trunk musí kód přeportovat zpátky na Windows.
Boost? Ani náhodou. Skeldalu teď bohatě stačí 30MB RAM. Nehodlám paměťové nároky bezdůvodně zvyšovat. Kromě toho Boost neumí nic, co bych právě nutně potřeboval.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.