jel' se da kom' pomoć' anime friku da napravi klonove vlasničih igara?
duga verzija ovog posta:
Zadnja 2 tjedna nisam uopće bio aktivan na forumu, ali zato sam radio na novom projektu.
Odlučio sam reimplementirati Nitroplus igre, točnije vizualne novele. Za one koji nisu fanovi Animea i japanske kulture općenito, Nitroplus je tvrtka koja pravi vizualne novele bazirane na/na kojima su bazirani Anime. Vizualna novela je tip igre u kojemu igrač preuzima ulogu glavnog lika u Animeu i čita priču (koja je najčešće dijalog s drugim likovima), sluša odličnu glazbu, povremeno gleda kratke filmove i pravi odluke koje uzrokuju grananje priče (koje naravno, može voditi dobrim i lošim završetcima). Zanimljivost je najviše u tome što ima jako puno grananja. No, evo screenshot jedne takve igre da dobijete bolju ideju:
http://i.imgur.com/zTlnkY7.png
To je Steins;Gate pokrenut pomoću wine-a. Ne, nije potrebno poznavati japanski jezik za igranje. Postoji engleski prijevod. Ja samo volim vježbati japanski... Trenutno se fokusiram na reimplementiranje te igre, ali i ostale igre koje je ta tvrtka napravila su jako slične (tehnički gledano), pa vjerujem da ću jednim udarcem ubiti puno muha
U prvih nekoliko dana uspješno sam reverse engineero arhivni format i format binarnih (polu-kompajlanih) skripti koje izvršna datoteka igre interpreta. Napisao sam biblioteku za čitanje i pisanje tih fajlova:
libnpa: ( https://github.com/Future-Gadget-Resear ... ent/libnpa ) MIT licenca
Pomoću te biblioteke sam napisao i kolekciju alata za manipuliranje fajlovima igre:
nptools: ( https://github.com/Future-Gadget-Resear ... nt/nptools ) Trenutno nelicencirano
- npaextract: Raspakira ".npa" arhive
- npapack: Re-pakira folder u arhivu
- nsbparse: Pretvara binarnu skriptu u čitki kod
- nsbcompile: Kompajla izlaz nsbparse alata natrag u ".nsb" skriptu
- npinstall: Ovaj još nije napisan; planiram koristiti libunshield za instalaciju igre
... I počeo sam raditi na interpreteru binarnih skripti (koji se oslanja na libnpa). Još ne radi; od sutra počinjem ozbiljno na njemu raditi
UPDATE: Uspješno pokreće boot skriptu (prikazuje intro film): http://i.imgur.com/vmJsKLl.png
libnpengine: ( https://github.com/Future-Gadget-Resear ... ibnpengine ) GNU LGPL licenca
... I za kraj jedna izvršna datoteka (Steins;Gate) koja pokreće interpreter:
steins-gate: ( https://github.com/Future-Gadget-Resear ... teins-gate ) GNU GPL licenca
Da, da... Jako je modularno; u duhu unixa
Eh sada na budućnost projekta, probleme (TODO) i poziv u pomoć...
Iako znam format binarnih skripti (u kojima, na sreću, su i stringovi s imenima funkcija i varijabli), postoji oko 200 vrijednosti (pogledaj libnpa include/nsbmagic.hpp) uz koje nema nikakvog naziva. To su pozivi na funkcije koje interpreter treba podržavati. Neke sam skužio (npr LoadMovie, StopMusic...) ali veliki broj nisam. To je lagan posao ali iziskuje puno vremena. Više-manje se svodi na uspoređivanje onoga što vidiš/čuješ (opaziš?) u igri i skripte u tekstualnom obliku. Vjerojatno je kompajlanje prilagođenih skripti isto dobra ideja...
Isječak iz ogromne (7200 linija) skripte (UNK je skraćeno za Unknown):
Kod: Označi sve
SetText();
UNK6();
TypeBegin();
UNK6();
TextBoxDelete();
UNK6();
SetParam(INT, 9000);
SetParam(STRING, #000000);
SetParam(INT, 533);
SetParam(STRING, null);
SetParam(STRING, true);
ColorOut(9000, #000000, 533, null, true);
UNK6();
SetParam(STRING, @ムービー*);
UNK18(@ムービー*);
UNK6();
SetParam(STRING, ムービー);
SetParam(INT, 0);
SetParam(INT, 0);
SetParam(STRING, null);
SetParam(STRING, true);
UNK19(ムービー, 0, 0, null, true);
UNK6();
SetParam(STRING, BGBUF1);
UNK18(BGBUF1);
UNK6();
SetParam(STRING, BGBUF1);
SetParam(INT, 100);
SetParam(STRING, cg/bg/BG_BLACK.jpg);
BgLoad(BGBUF1, 100, cg/bg/BG_BLACK.jpg);Trenutno nemam ni build system jer nikada nisam naučio pisati configure skripte... Kompajlam pomoću sh skripte koju me sramota uploadati na github
Neki tehnički detalji:
Koristim boost za filesystem, GNU libiconv za pretvaranje japanski-kodiranih skripti (SHIFT-JIS) u UTF-8. SFML za multimediju (prozor, glazba, crtanje) i jednu SFML ekstenziju, sfeMovie koja ugrađuje ffmpeg u SFML.
Cijeli projekt je trenutno mršavih 1500 linija koda (Ne brojeći prazne linije, komentare i dokumentaciju naravno) i treba mi pomoć da ga završim u razumnom vremenu (prije kraja godine bi bilo lijepo).