Portál AbcLinuxu, 21. května 2025 19:28
Pokud jste před necelým rokem s nadšením stahovali první zdrojáky Bran Skeldalu zkompilovatelné pod Linuxem (tedy aspoň někde), nejspíš vaše nadšení během posledního půl roku značně ochladlo. Když se ale podíváte na diff revize 111, nejspíš vám bude jasné, proč se tak dlouho nic nedělo.
Poslední půlrok jsem pomalu přepisoval renderovací jádro Skeldalu na přenositelný kód. Měl jsem při tom na výběr — buď commitovat pravidelně a mít v repozitáři 30 nefunkčních revizí plných bordelu, nebo udělat jeden obří commit, až se přenositelný kód dostane do stejného stavu jako revize 110.
Vzhledem k tomu, že repozitář nejede na GITu, vybral jsem si druhou možnost. Jestli je to dobře nebo špatně můžeme probrat v diskuzi, ale hlavní je, že obří commit už je hotový.
Hlavní změnou je přechod z 15bitové barevné hloubky na 24bitovou a přepis dalšího kusu načítacího kódu, aby nezávisel na endianitě ani velikosti datových typů cílového počítače. Pokud máte ne-x86 systém a chcete zkusit štěstí, klidně můžete. Do hlavního menu byste se s trochou štěstí mohli dostat bez segfaultu a dokonce bude vypadat normálně.
Instalační instrukce se od minule nijak zvlášť nezměnily, jen přibyl configure skript, jak je zmíněno na konci článku. Pokud už máte nainstalovanou starší verzi, prostě si zkompilujte novou binárku a můžete hrát. Pokud se nějaké NPC bude v rozhovoru tvářit, že jste ho už navštívili, přestože jste u něj poprvé (třeba bard v přístavu), nejspíš jste začali hrát před revizí 103 a budete muset začít od začátku.
V nejbližších dnech se můžete těšit na další vylepšování renderovacího jádra, hlavně opravu grafických artefaktů kolem kurzoru myši a konečně i chybějící efekt zemětřesení, který je aktuálně nahlášený jako bug. Pak bude následovat další větší přepis jiného subsystému, tentokrát ale ne tak velký.
Tiskni
Sdílej:
Mám menší problém, asi bug. Můžu to hodit do bugzilly pokud bude třeba.
Skeldal jsem si zkompiloval na 64 bit Archu (díky za rychlou opravu). Změnil jsem DATA_PATH v unix/init.cpp na /usr/share/skeldal. Do DATA_PATH jsem nakopíroval soubory* podle tvého předchozího návodu ale teď mi při spuštění jen krátce problikne okno a vypíše se:
[lukas@orochi ~]$ skeldal Nemohu precist konfiguracni soubor "/home/lukas/.skeldal/skeldal.ini". skeldal: ../skeldal/libs/memman.cpp:423: virtual size_t File::read(void*, size_t): Assertion `_file' failed. Aborted
* instalačku jsem musel sosat z uloz.to, protože odkaz od napoleon games hází 404.
#0 0x00007ffff6e2b565 in raise () from /lib/libc.so.6 #1 0x00007ffff6e2c9e6 in abort () from /lib/libc.so.6 #2 0x00007ffff6e24145 in __assert_fail () from /lib/libc.so.6 #3 0x0000000000449b90 in File::read (this=<value optimized out>, buf=<value optimized out>, size=<value optimized out>) at ../skeldal/libs/memman.cpp:423 #4 0x000000000044980d in ReadStream::readUint8 (this=<value optimized out>) at ../skeldal/libs/memman.cpp:184 #5 0x000000000044982f in ReadStream::readUint16LE (this=0x7c5420) at ../skeldal/libs/memman.cpp:189 #6 0x0000000000429226 in SpellList::load (this=0x6afc80, stream=...) at ../skeldal/game/magic.cpp:280 #7 0x000000000042cfd2 in kouzla_init () at ../skeldal/game/magic.cpp:2352 #8 0x000000000043a310 in init_skeldal () at ../skeldal/game/skeldal.cpp:994 #9 0x000000000043aab6 in main (argc=<value optimized out>, argv=<value optimized out>) at ../skeldal/game/skeldal.cpp:1708Chce to načítat soubor KOUZLA.DAT, který mám v MAPS.
skeldal: game/magic.cpp:302: TKOUZLO& SpellList::operator[](unsigned int): Assertion `_spellData && idx < _size && "Invalid spell index"' failed. AbortedJsem na amd64, stačí toto jako bugreport, nebo je třeba víc? A mimochodem ,lze to spusti ve fullscreenu?
skeldal: game/magic.cpp:302: TKOUZLO& SpellList::operator[](unsigned int): Assertion `_spellData && idx < _size && "Invalid spell index"' failed. Program received signal SIGABRT, Aborted. 0x00007ffff6de7a75 in raise () from /lib/libc.so.6 (gdb) backtrace #0 0x00007ffff6de7a75 in raise () from /lib/libc.so.6 #1 0x00007ffff6deb5c0 in abort () from /lib/libc.so.6 #2 0x00007ffff6de0941 in __assert_fail () from /lib/libc.so.6 #3 0x000000000042e426 in SpellList::operator[] (this=[value optimised out>, idx=[value optimised out>) at game/magic.cpp:302 #4 0x000000000042e560 in get_spell_teleport (num=4025) at game/magic.cpp:324 #5 0x0000000000430f3d in thing_cast (num=4025, postava=0, sector=6, victim=0xffffffffffffffff, noanim=96 '`') at game/magic.cpp:2281 #6 0x0000000000429e36 in inv_quaf (id=[value optimised out>, xa=[value optimised out>, ya=161, xr=[value optimised out>, yr=[value optimised out>) at game/inv.cpp:1107 #7 human_click (id=[value optimised out>, xa=[value optimised out>, ya=161, xr=[value optimised out>, yr=[value optimised out>) at game/inv.cpp:2297 #8 0x000000000040a350 in find_in_click_map (ms=0x6c06c1, pt=0x66fb26, pocet=6, evtype=0x7fffffffde8c) at game/clk_map.cpp:557 #9 0x000000000040a633 in ms_clicker (msg=[value optimised out>, usr=[value optimised out>) at game/clk_map.cpp:598 #10 0x000000000044d24f in enter_event (tree=0x6c06e8, msg=0x7fffffffdef0) at libs/event.cpp:245 #11 0x000000000044d7df in send_message (message=[value optimised out>) at libs/event.cpp:426 #12 0x0000000000456631 in Sys_ProcessEvents () at sdl/input.cpp:109 #13 0x000000000044d8b0 in do_events () at libs/event.cpp:528 #14 0x000000000045894d in Task_WaitEvent (event=4025) at unix/task.cpp:46 #15 0x000000000043e37f in enter_game () at game/skeldal.cpp:1066 #16 0x000000000043f3a4 in game_big_circle (enforced=[value optimised out>) at game/skeldal.cpp:1424 #17 0x000000000043fb16 in load_saved_game (argc=[value optimised out>, argv=[value optimised out>) at game/skeldal.cpp:1537 #18 start (argc=[value optimised out>, argv=[value optimised out>) at game/skeldal.cpp:1581 #19 main (argc=[value optimised out>, argv=[value optimised out>) at game/skeldal.cpp:1681
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.