Վերադառնալ
Pokemon Emerald-ը բրաուզերում WebAssembly-ով աշխատում է 100 հազար FPS-ով
SiTech AI Team3 րոպե ընթերցում

Pokemon Emerald-ը բրաուզերում WebAssembly-ով աշխատում է 100 հազար FPS-ով

2004 թվականի Game Boy Advance-ի Pokemon Emerald խաղը այժմ աշխատում է բրաուզերի ներդիրում։ pokeemerald-wasm նախագիծը էմուլյատոր չէ. այն pret/pokeemerald-ի ապակոմպիլյացիան Emscripten-ով վերակոմպիլյացնում է WebAssembly-ի և հասնում 100 հազար FPS-ի։

2004 թվականին Game Boy Advance-ի համար թողարկված Pokemon Emerald խաղը այժմ աշխատում է բրաուզերի ներդիրում՝ տարածված տվյալներով՝ վայրկյանում 100 000 կադր արագությամբ։ pokeemerald-wasm նախագիծը հայտնվել է Hacker News-ում 2026 թվականի հունիսի սկզբին և տեղակայված է pokeemerald.com հասցեում. նրա GitHub պահոցը ստեղծվել է 2026 թվականի մայիսի 29-ին։

Կոմպիլյացված է, ոչ թե էմուլացված

Վերնագրի թիվը հեշտ է սխալ հասկանալ։ pokeemerald-wasm-ը Game Boy Advance-ի էմուլյատոր չէ. այն չի մոդելավորում կոնսոլի ARM7 պրոցեսորը, հիշողության քարտեզը կամ ձայնային չիպերը։ Փոխարենը այն վերցնում է pret/pokeemerald-ը՝ խաղի համայնքային ապակոմպիլյացիան ընթեռնելի C և ARM ասեմբլեր կոդի, և այդ կոդը Emscripten-ով վերակոմպիլյացնում է WebAssembly-ի՝ ավելացնելով բրաուզերային ինտերֆեյս։ Շղթան այսպիսին է՝ բնօրինակ ROM → ապակոմպիլյացված C կոդ → WebAssembly → բրաուզեր։ Այս շղթայի ոչ մի քայլում GBA-ի ապարատային մասը չի վերարտադրվում։

Հենց այս տարբերությունն է հնարավոր դարձնում արագությունը։ Էմուլյատորը մեկնաբանման ծախս է վճարում յուրաքանչյուր հրահանգի համար և կադր առ կադր ընդօրինակում է ապարատային ժամանակացույցը. վերակոմպիլյացված կոդը խաղի սեփական տրամաբանությունն է, որը հոսթը կատարում է ուղղակիորեն։ Hacker News-ում դա ձևակերպվել է ուղղակիորեն. սա հենց խաղն է՝ կոմպիլյացված Wasm-ի, ոչ թե Wasm-ի վրա հիմնված էմուլյատոր։

Ինչ է իրականում չափում «100k FPS»-ը

Նախագծի տեխնիկական վերլուծությունների համաձայն՝ 100 000 FPS-ը վերաբերում է խաղի տրամաբանության թողունակությանը կադրերի սահմանափակումը հանելուց հետո, և ոչ թե վայրկյանում 100 000 նկարված պատկերի։ Բնօրինակ ապարատայինը կապված էր 60 Հց թարմացման հետ. սահմանափակման հանումը թույլ է տալիս վերակոմպիլյացված ցիկլին աշխատել պրոցեսորի առավելագույն արագությամբ, ուստի այս թիվը էմուլյացիայի համեմատ արտադրողականության պաշարի չափիչ է, ոչ թե խաղային ռեժիմ։ Իրական խաղը կրկին համաժամացվում է 60 FPS-ի, իսկ ավելցուկը ծախսվում է արագ առաջընթացի և մուտքի արձագանքի վրա։

Բրաուզերում տարբերակը հավելումներ կամ ներբեռնումներ չի պահանջում. կառավարումը սլաքներով է, Z-ը՝ A կոճակ, X-ը՝ B, Enter-ը՝ Start, Shift-ը՝ Select։

Պահպանումը, բջջայինը և հաջորդ քայլերը

Hacker News-ի մեկնաբանները հայտնում են, որ խաղի պահպանումն իսկապես աշխատում է. դա նշան է, որ պորտը պահպանում է իրական խաղային վիճակ, այլ ոչ թե պարզապես ցուցադրում է գրաֆիկա։ Բջջայինում պատկերն ավելի կոպիտ է. Android-ի Firefox-ի մեկ օգտատեր նշել է, որ էջը իրեն տեղադրվող PWA հավելվածի պես չի պահում, և նրան խորհուրդ են տվել բրաուզերի «Add to home» տարբերակը։ Խաղերի միջև փոխանակումը դեռ չի աշխատում, և հենց այդ գործառույթն են օգտատերերը ամենից հաճախ խնդրում։

Պահոցը նախատեսված չէ միայն բրաուզերի համար։ Makefile-ի մի թիրախ WebAssembly մոդուլը WABT-ի wasm2c-ով վերածում է C-ի և միացնում Raylib-ի հոսթին, մյուսը՝ Linux framebuffer-ի ինտերֆեյս Kindle Scribe ընթերցիչների համար։ Ինչպես ապակոմպիլյացիայի այլ նախագծերում, ROM-ը և հեղինակային իրավունքով պաշտպանված ռեսուրսները չեն տարածվում. օգտատերը օգտագործում է սեփական օրինական պատճենը։

Ինչու է դա կարևոր. սա աշխատող ապացույց է, որ ամբողջական կոմերցիոն խաղը կարելի է վերակոմպիլյացնել WebAssembly-ի և բրաուզերի ներդիրում աշխատեցնել արտադրողականության պաշարով. փաստարկ ընթեռնելի կոդի օգտին՝ որպես խաղերի պահպանման դիմացկուն ձև։

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։