2015-02-07

em-dosbox ir 50 žaidimų

Kai kurie dalykai laikui bėgant tampa vis geresniais. Pavyzdžiui, klasikiniai žaidimai, kurie sukurti DOS laikais tiesiog pakeri. Kiekvienas iš jų - vienetinis šedevras sukurtas su didele meile jam. Deja, bet DOS platforma jau praeitis, o kartu su ja ir įspūdingi jos produktai. Sugrąžinti juos į šiuolaikinius metus - tarsi tai ne tikra dovana?
Kaip? Labai paprasta! Projektas emscripten, kuriame C++ kodas gali būti konvertuojamas į JavaScript ir dirbti naršyklėje. Būtent šio projekto pagalba naršyklėms buvo adaptuoti žaidimai DOOM, Dune 2, TTD, X-COM ir daugelis kitų. Tačiau šis kelias ilgas ir sudėtingas. Vienam perkėlimo projektui gali tekti sugaišti pusę metų. O jeigu norisi visų iš kart? Ar yra kitas kelias?


em-dosbox

Kitas kelias yra - naudoti DosBox. Iš tikrųjų kam perdarinėti kiekvieną projektą atskirai, kai galima perkelti visą DOS platformą (jei būti tiksliam, tai MS-DOS emuliatorių). Šią idėją įkūnijo Boris Gjenero projekte em-dosbox. Tai DosBox perkėlimas į JavaScript įgyvendintas su emscripten pagalba.

Taigi, kaip perkelti beveik kiekvieną DOS programą į naršyklę.

Instrumentai:
  • Naršyklė
  • em-dosbox (dosbox.js)
  • Gerai veikianti programa ant DosBox
Darbo metu naršyklė užkrauna dosbox.js ir duomenų paketą su programa (papratai tai dvejetainis failas su supakuotu programos kodo aplanku). Skriptas dosbox.js yra ne kas kita, kaip DosBox perkeltas į JavaScript, o veikdamas jis emuliuoja DOS platformą su joje paleista programa.


dosbox.js kompiliavimas

Viskas paprasta. Klonuojame em-dosbox saugyklą (repositor) ir kompiliuojame su autotools pagalba ir galiausiai make:

git clone https://github.com/dreamlayers/em-dosbox.git
cd em-dosbox
./configure
make

Jei viskas pavyko tai aplanke src atsiras dosbox.html ir dosbox.js failiukai.


Didesnis em-dosbox produktyvumas (papildomai)

Pridedame failiuke src/Makefile.am vietoje dosbox_LDFLAGS opciją --memory-init-file 0 . Ši opcija atjungia atminties failo generaciją, kuris yra naudojamas užkrovimo pagreitinimui. Mūsų atveju šis failas bus apie 30 megabaitų dydžio, kas yra nepalanku naudojant naršyklę.

dosbox_LDFLAGS = -s TOTAL_MEMORY=67108864 --pre-js pre.js --memory-init-file 0

Faile src/dosbox.cpp rekomenduojama atlikti pakeitimą:

emscripten_set_main_loop(em_main_loop, 100, 1);

į

emscripten_set_main_loop(em_main_loop, 0, 1); 

Šis pakeitimas turėtų padidinti našumą.
Emuliatoriaus greičio didinimui pridėkite šias eilutes funkcijoje main failiuke src/gui/sdlmain.cpp :

#ifdef EMSCRIPTEN
    EM_ASM("SDL.defaults.copyOnLock = false; SDL.defaults.discardOnLock = true; 
    SDL.defaults.opaqueFrontBuffer = false;");
#endif


Programos pakavimas

em-dosbox pasiekiamas su skriptu leidžiančiu supakuoti aplanką su programa į dvejetainį failą, kuris gali būti naudojamas kartu su dosbox.js . Pavyzdžiui, kad gautume supakuotą failą Dune 2 žaidimo reikėtų atlikti:

#python src/packager.py "paketo vardas" "kelias iki aplanko" "naudoj. failas"
python src/packager.py dune2 ~/dune2 dune2.exe

Bus sukurti failai dune2.html ir dune2.data . HTML failas sukuriamas pagal dosbox.html šabloną (primename jis guli src aplanke).


dosbox nustatymų keitimas (papildomai)

Pagal nutylėjimą dosbox bus paleistas pagal standartinę konfigūraciją. Kad jąją pakeistume sukurkite aplanke su programa failą dosbox.conf . Ir pakeiskite skriptą šia eilute:

#86 eilutė
f.write("Module['arguments'] = [ '-conf', './dosbox.conf', './" + EXECUTABLE + "' ];\n</script>\n")



Paleidimas

Taigi turime tris failus:
  • program.html
  • program.data
  • dosbox.js
Įdėję juos į serverį mes galėsim paleisti programą naršyklėje.

Pavyzdys su 50 žaidimų: SPAUSTI


Perkeltų žaidimų sąrašas

em-dosbox pagalba šie žaidimui buvo pritaikyti veikti naršyklėje:
  • Abuse
  • Alley Cat
  • Another World
  • Arcade Volleyball
  • Arkanoid
  • Battle Chess
  • Budokan: The Martial Spirit
  • CD-Man
  • Colorado
  • Dangerous Dave in the Haunted Mansion
  • DeathTrack
  • Digger
  • Disney's Duck Tales: The Quest for Gold
  • Doom
  • Doom 2
  • Dune 2
  • Dyna Blaster
  • Earthworm Jim 2
  • Fire & Forget II
  • Goblins 1-3
  • Golden Axe
  • Heretic: Shadow of the Serpent Riders
  • Incredible Machine
  • The
  • IndyCar Racing
  • Krypton Egg
  • Lamborghini: American Challenge
  • Lode Runner
  • Lost Vikings
  • The
  • Metal Mutant
  • Micro Machines
  • Mine Bombers
  • Mortal Kombat
  • Pac-Man
  • Prehistorik
  • Prehistorik 2
  • Prince of Persia
  • Scorched Earth: The Mother of All Games
  • SimCity
  • Stunts
  • Supaplex
  • Test Drive
  • Tetris
  • Tower Toppler
  • Tyrian 2000
  • Ugh!
  • WarCraft: Orcs & Humans
  • Wings of Fury
  • Winter Supersports 92
  • Wolfenstein 3D
  • Xonix

Pasiremta:  habrahabr.ru

Komentarų nėra:

Rašyti komentarą