Hlavní navigace

Open-source reimplementace Jazz Jackrabbit 2

2. 7. 2019

Sdílet

Jazz² Resurrection Autor: deathkiller

Také si pamatujete na tu starou nadčasovou skákačku s králíkem Jazz Jackrabbit, a to konkrétně druhý díl? Ten se nyní dočkal open-source reimplementace. Projekt se jmenuje Jazz² Resurrection a jeho zdrojové kódy jsou na Githubu. Autor zvolil jazyk C# a Framework Duality.

Ke spuštění hry budete potřebovat původní verzi hry, kterou si můžete koupit na GOGu, nebo alespoň Shareware Demo, které je dostupné ke stažení zdarma někde na webu. Hra je již kompletně hratelná, i když ještě některé věci chybí. Zajímavou přidanou funkcí může být online multiplayer, na kterém se momentálně pracuje (aktuálně je v hodně rané fázi). V Linuxu je hra spustitelná pomocí Mono Runtime, ovšem vyžaduje verzi 4.6 nebo vyšší. Dále hra samozřejmě podporuje i systémy Windows, MacOS či Android.

Za zmínku určitě stojí, že za projektem stojí český vývojář, který má sice projekt jako takovou one man show, nicméně  pomoci se nebrání (stačí ho kontaktovat třeba na jeho Discordu).

Tato zprávička byla zaslána čtenářem serveru Root.cz pomocí formuláře Přidat zprávičku. Děkujeme!

Našli jste v článku chybu?
  • Aktualita je stará, nové názory již nelze přidávat.
  • 3. 7. 2019 16:45

    xDub

    Ano původní verze jede pod Wine. Ale tohle je prostě zajímavější. :-) Přecijen je to do jisté míry nativní... Navíc dle toho, co jsem četl v to-do listu, tak bude o něco zajímavější multiplayer...

    3. 7. 2019, 16:48 editováno autorem komentáře

  • 3. 7. 2019 17:09

    uwe.filter

    Vůbec jsem tím nijak nechtěl shazovat tenhle projekt, jen jsem reagoval na spouštění jedničky v dosboxu a potřeby Win95+ pro dvojku :-). Naopak takovéhle snahy vítám a fandím jim, asi i proto, že nové hry mě neberou, ale nějakou tu starou klasiku si čas od času rád zahraju.

  • 3. 7. 2019 20:48

    MSBOSS

    Asi nějak nechápu, proč je zajímavější klon, který z principu není možné pustit na HW, na kterém běžela původní verze (tím myslím to, že to vyžaduje OpenGL 2.1). Snad leda kvůli té podpoře Androidu.
    Pokud bude v multiplayeru možnost použít větší rozlišení, tak na to nesáhnu ani klackem (a ostatní hráčí JJ2 taky ne). Pak totiž není možné vyhrát nad člověkem s 4k monitorem, protože on vás uvidí ve chvíli, kdy vy ho ještě máte o dvě obrazovky dál. Ze stejného důvodu se banuje, když někdo hraje Starcraft 1 s patchem na vyšší rozlišení.

  • 3. 7. 2019 23:37

    DeathKiller

    Já si myslím, že v dnešní době už moc lidí nemá doma 25 let starý počítač. Spíš mají naopak nový, na kterém možná časem začne být problém spustit původní verzi. OpenGL 2.1 vyšlo skoro před 15 lety, v dnešní době je už i tohle zastaralá technologie, proto mi to nepřijde moc jako problém.
    Zajímavější může být z mnoha důvodů - je open-source, dá se modifikovat, odstraňuje limity původní hry, funguje na více platformách. Dále využívá shadery pro vodu, světla a další, vizuálně hra vypadá o něco lépe než ta původní, proto je taky potřeba OpenGL. Také hra využívá animace, které v původní hře z nějakého důvodu využity nebyly, a byly už přidány i některé funkce, které v původní hře také nejsou.
    Co se týče rozlišení, hra podporuje libovolný poměr stran a libovolné rozlišení, umí se automaticky přizpůsobit. Pokud je použité rozlišení vyšší než definovaná hranice, je prováděn upscaling s volitelným využitím filtrů (to je další důvod, proč je potřeba OpenGL). To znamená, že hráč vždy vidí maximálně to, co má. Hra pak vypadá tak, jak původně měla, a nevzniká žádná výhoda při použití vyšších rozlišení. Je to vidět třeba i na všech videích.

  • 5. 7. 2019 1:04

    xDub

    To je asi věc názoru. Já osobně bytekód v Mono beru do stejného rovnítka jako Javu. :-) No a Wine je prostě úplně jinde...

  • 5. 7. 2019 1:17

    klokan

    No právě. Na Javě není nativního nic, je to interpretovaný bytekód stejně jako Mono. Wine je normální nativní kód, který běží jako každý jiný normální proces, akorát že dynamicky nelinkuje se standardními knihovnami, ale používá jiné. V zásadě není koncepční rozdíl mezi Wine a např. i386 binárkami v multiarch instalaci.

  • 4. 7. 2019 20:42

    e3k

    neviem jak u vas ale mne to na wine hodilo nejake exceptiony ohladom Access Violation.
    a potom ked som pustal tu novu verziu cez mono tak to Import zbehol tak ze zanechal rozbite farby v terminaly. ale samotna hra spadla s :

    Can't load animation "MenuDifficul­tyLori" from metadata "UI/MainMenu": File "Animations\U­I\character_ar­t_difficulty_lo­ri.png.res" was not found in CompressedContent
    * Assertion at local-propagation.c:330, condition `ins->opcode > MONO_CEE_LAST' not met

    Asi som bol zasa haknuty... :P

  • 4. 7. 2019 23:35

    DeathKiller

    Není úplně v mých silách vyzkoušet všechny terminály, co existují. Zkoušel jsem 2 a tam se barvy nerozbíjí, takže moc nevím, kde je problém.
    Jinak hláška "Can't load animation..." je jen warning (v tomhle případě jen o tom, že kdyby byl navíc importován The Secret Files, bylo by možné hrát i za Lori), takže hra kvůli tomu určitě nespadla. Vypadá to spíš na starou/zabugovanou verzi Mono, když hra nevypsala ani výjimku. Já hru testoval na Mono 5.20.1 a fungovalo to.

  • 5. 7. 2019 11:09

    e3k

    teraz som to googlil a vyzera ze binarka je stara a ma bug. tak som sa to snazil zbuildovat cez dotnet msbuild ale neni to spokojne z verziu dot net frameworku:

    /usr/share/dot­net/sdk/2.2.300/Mi­crosoft.Common­.CurrentVersi­on.targets(1175,5): error MSB3644: The reference assemblies for framework ".NETFramewor­k,Version=v4.5­.2" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend.

    dotnet --version
    2.2.300

    asi to skusim zbuildovat cez wine???

  • 5. 7. 2019 14:02

    DeathKiller

    Binárka hry v sobě určitě bug nemá, to už by vyšla dávno nová verze. Mělo by stačit stáhnout novou verzi Mona (https://www.mono-project.com/download/stable/#download-lin). A příkaz "dotnet" je pro .NET Core, což je úplně něco jiného. Na .NET Core hra zatím neběží, na Linuxu je potřeba Mono.

  • 5. 7. 2019 16:25

    e3k

    dotnet som pouzival na pustenie msbuild.

    mono mam:

    $ mono --version
    Mono JIT compiler version 4.6.2 (Debian 4.6.2.7+dfsg-1)
    Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS: __thread
    SIGSEGV: altstack
    Notifications: epoll
    Architecture: amd64
    Disabled: none
    Misc: softdebug
    LLVM: supported, not enabled.
    GC: sgen

    teraz som to skusim importovat z hry stiahnutej z abandonia.com ale tiez mu chybaju nejake subory. tu je komplet hlaska:

    $ mono Jazz2.exe

    Using 'DefaultAssem­blyLoader' to load plugins.

    Environment Info:

    Current Directory: /home/kago/ga­mes/jazzz

    Command Line: /home/kago/ga­mes/jazzz/Jaz­z2.exe

    Operating System: Unix 4.9.0.9

    64 Bit OS: True

    64 Bit Process: True

    CLR Version: 4.0.30319.42000

    Processor Count: 8

    Currently Loaded Assemblies:

    mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c56­1934e089

    Jazz2, Version=0.5.9.0, Culture=neutral, PublicKeyToken=null

    System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c56­1934e089

    System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c56­1934e089

    Plugin Base Directories:

    Extensions

    Available Assembly Paths:

    Extensions/GL21Bac­kend.core.dll

    Extensions/Ope­nALSoft.x64.dll

    Extensions/Ope­nALSoft.x86.dll

    Extensions/Open­TKBackend.core­.dll

    Assembly loaded: GL21Backend, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

    Assembly loaded: Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

    Assembly loaded: OpenTKBackend, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

    Loading auxiliary libraries...

    Assembly loaded: OpenTK, Version=1.2.1.0, Culture=neutral, PublicKeyToken=null

    Initializing OpenTK...

    Platform Backend: Default

    EnableHighReso­lution: True

    Active graphics backend: OpenGL 2.1

    Assembly loaded: System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f­11d50a3a

    Available display devices:

    First : 1280x1024 at 60 Hz, 32 bpp, pos [ 0, 0] (Primary)

    Cannot connect to server socket err = No such file or directory

    Cannot connect to server request channel

    jack server is not running or cannot be started

    JackShmReadWri­tePtr::~JackShmRe­adWritePtr - Init not done for 4294967295, skipping unlock

    JackShmReadWri­tePtr::~JackShmRe­adWritePtr - Init not done for 4294967295, skipping unlock

    Available audio devices:

    ICE1712 [Envy24] PCI Multi-Channel I/O Controller (M-Audio Delta Audiophile 2496) Analog Stereo (Default)

    Current device: OpenAL Soft

    OpenAL Version: 1.1 ALSOFT 1.17.2

    Vendor: OpenAL Community

    Renderer: OpenAL Soft

    Effects: True

    Initializing core plugins...

    DualityApp initialized

    Debug Mode: False

    Command line arguments:

    Window Specification:

    Buffers: 2

    Samples: 0

    ColorFormat: 24 (8880)

    AccumFormat: 64 (16161616)

    Depth: 24

    Stencil: 0

    VSync: On

    SwapInterval: 1

    OpenGL Version: 3.3.0 NVIDIA 340.106

    Vendor: NVIDIA Corporation

    Renderer: GeForce 9600 GT/PCIe/SSE2

    Shader Version: 3.30 NVIDIA via Cg compiler

    Can't load animation "MenuDifficul­tyLori" from metadata "UI/MainMenu": File "Animations\U­I\character_ar­t_difficulty_lo­ri.png.res" was not found in CompressedContent

    * Assertion at local-propagation.c:330, condition `ins->opcode > MONO_CEE_LAST' not met

    Stacktrace:

    at <unknown> <0xffffffff>

    at OpenTK.Bindin­gsBase.Marshal­StringArrayToP­tr (string[]) <0x0009f>

    at OpenTK.Graphic­s.OpenGL.GL.Sha­derSource (uint,int,strin­g[],int*) <0x00023>

    at OpenTK.Graphic­s.OpenGL.GL.Sha­derSource (int,string) <0x0006f>

    at Duality.Backen­d.GL21.NativeSha­derPart.Duali­ty.Backend.INa­tiveShaderPar­t.LoadSource (string,Duali­ty.Resources.Sha­derType) <0x0009b>

    at Duality.Resou­rces.Shader.Com­pile () <0x00107>

    at Duality.Resou­rces.DrawTechni­que.CompileIf­Required (Duality.Resou­rces.Shader) <0x0002b>

    at Duality.Resou­rces.DrawTechni­que.Compile () <0x000af>

    at Duality.Resou­rces.DrawTechni­que.get_NativeSha­der () <0x0001b>

    at Duality.Backen­d.GL21.Graphic­sBackend.Retri­eveActiveShaders (System.Collec­tions.Generic­.IReadOnlyLis­t`1<Duality.Dra­wing.DrawBatch>) <0x000b7>

    at Duality.Backen­d.GL21.Graphic­sBackend.Duali­ty.Backend.IGrap­hicsBackend.Ren­der (System.Collec­tions.Generic­.IReadOnlyLis­t`1<Duality.Dra­wing.DrawBatch>) <0x0004f>

    at Duality.Drawin­g.DrawDevice.Ren­der () <0x00449>

    at Jazz2.Game.UI­.Menu.MainMenu­.RecreateTextu­redBackground (Jazz2.Game.Ti­les.TileSet,Jaz­z2.Game.Struc­ts.TileMapLay­er&) <0x019b3>

    at Jazz2.Game.UI­.Menu.MainMenu­.PrerenderTex­turedBackgrou­nd () <0x010ef>

    at Jazz2.Game.UI­.Menu.MainMenu­..ctor (Jazz2.Game.App) <0x00623>

    at Jazz2.Game.Ap­p.ShowMainMenu () <0x00123>

    at Jazz2.Game.App.Main (string[]) <0x00383>

    at (wrapper runtime-invoke) <Module>.runti­me_invoke_void_ob­ject (object,intptr,in­tptr,intptr) <0x000d1>

    Native stacktrace:

    mono(+0xc8d94) [0x561c77d37d94]

    /lib/x86_64-linux-gnu/libpthread­.so.0(+0x110e0) [0x7f8e56f940e0]

    /lib/x86_64-linux-gnu/libc.so.6(gsig­nal+0xcf) [0x7f8e569fdfff]

    /lib/x86_64-linux-gnu/libc.so.6(a­bort+0x16a) [0x7f8e569ff42a]

    mono(+0x289fe9) [0x561c77ef8fe9]

    mono(+0x28a27c) [0x561c77ef927c]

    mono(+0x28a413) [0x561c77ef9413]

    mono(+0x96b2b) [0x561c77d05b2b]

    mono(+0x12de5a) [0x561c77d9ce5a]

    mono(+0x12e7b9) [0x561c77d9d7b9]

    mono(+0x3c9f0) [0x561c77cab9f0]

    mono(+0xca776) [0x561c77d39776]

    mono(+0xcb0bc) [0x561c77d3a0bc]

    [0x41a5a298]

    Debug info from gdb:

    AL lib: (EE) alc_cleanup: 1 device not closed

    =============­========================­========================­====

    Got a SIGABRT while executing native code. This usually indicates

    a fatal error in the mono runtime or one of the native libraries

    used by your application.

    =============­========================­========================­====

    Aborted

    5. 7. 2019, 16:29 editováno autorem komentáře

  • 5. 7. 2019 17:31

    e3k

    dal som tam mono z debian/testing a uz to ide. dik za pomoc:

    $ mono --version
    Mono JIT compiler version 5.18.0.240 (Debian 5.18.0.240+dfsg-3 Wed Apr 17 16:37:36 UTC 2019)

  • 5. 7. 2019 19:38

    DeathKiller

    Neni zač, myslel jsem si, že to bude tím. Mono by pak mělo mít i vlastní msbuild, tenhle je na ten .NET Core. A aby ty soubory nechyběly, tak to chce importovat ještě The Secret Files nebo Christmas Chronicles, ale fungovat to bude i takhle.

Byl pro vás článek přínosný?