[{"data":1,"prerenderedAt":481},["ShallowReactive",2],{"article-zelda-wind-waker-hd":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":5,"title":7,"description":8,"date":9,"slug":10,"category":11,"generated":12,"media":13,"source":17,"project_page":17,"body":18,"_type":475,"_id":476,"_source":477,"_file":478,"_stem":479,"_extension":480},"\u002Fzelda-wind-waker-hd","",false,"The Legend of Zelda: The Wind Waker HD","A native Android port of The Wind Waker HD (Wii U) that runs the game on the AYN Thor's second screen as a touch GamePad.","2026-10-15 06:04","zelda-wind-waker-hd","game","ai",[14],{"type":15,"url":16},"video","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=bkn6ne7iINI","https:\u002F\u002Fgithub.com\u002FGreenNaugahyde\u002FZeldaWWHDRecompAndroid",{"type":19,"children":20,"toc":467},"root",[21,30,36,66,72,305,311,346,352,414,420],{"type":22,"tag":23,"props":24,"children":26},"element","h2",{"id":25},"description",[27],{"type":28,"value":29},"text","Description",{"type":22,"tag":31,"props":32,"children":33},"p",{},[34],{"type":28,"value":35},"The Legend of Zelda: The Wind Waker HD is a native Android port of the Wii U game, built on the ZeldaWWHDRecomp project. The game's PowerPC code is recompiled to native ARM, the Wii U system libraries it uses are reimplemented, and its graphics run directly on Vulkan — there is no emulator in between. On dual-screen devices like the AYN Thor the GamePad picture goes to the second screen by itself, with touch, while the main screen shows the TV picture.",{"type":22,"tag":31,"props":37,"children":38},{},[39,41,48,50,56,58,64],{"type":28,"value":40},"The app contains no game files. You bring your own copy of the game — a disc image (",{"type":22,"tag":42,"props":43,"children":45},"code",{"className":44},[],[46],{"type":28,"value":47},".wud",{"type":28,"value":49}," or ",{"type":22,"tag":42,"props":51,"children":53},{"className":52},[],[54],{"type":28,"value":55},".wux",{"type":28,"value":57},") dumped from your own Wii U disc with its keys, or a Cemu archive (",{"type":22,"tag":42,"props":59,"children":61},{"className":60},[],[62],{"type":28,"value":63},".wua",{"type":28,"value":65},") made from it. On the first start the app extracts the game and recompiles its code on your device with LLVM; later starts load the compiled code in about half a second.",{"type":22,"tag":23,"props":67,"children":69},{"id":68},"features",[70],{"type":28,"value":71},"Features",{"type":22,"tag":73,"props":74,"children":75},"ul",{},[76,88,105,115,125,135,145,155,165,175,185,195,205,215,225,235,245,255,265,275,285,295],{"type":22,"tag":77,"props":78,"children":79},"li",{},[80,86],{"type":22,"tag":81,"props":82,"children":83},"strong",{},[84],{"type":28,"value":85},"Dual-screen (AYN Thor):",{"type":28,"value":87}," the GamePad picture goes to the second screen by itself, with touch, and the main screen shows the TV picture; Graphics › GamePad screen switches back to the screen layouts.",{"type":22,"tag":77,"props":89,"children":90},{},[91,96,98,103],{"type":22,"tag":81,"props":92,"children":93},{},[94],{"type":28,"value":95},"APK without game code:",{"type":28,"value":97}," on the first start the app extracts the game from your disc image or ",{"type":22,"tag":42,"props":99,"children":101},{"className":100},[],[102],{"type":28,"value":63},{"type":28,"value":104}," and recompiles its code on the device with LLVM (once; a few minutes on a fast phone). The work continues in the background with a progress notification and resumes where it stopped if the app is closed.",{"type":22,"tag":77,"props":106,"children":107},{},[108,113],{"type":22,"tag":81,"props":109,"children":110},{},[111],{"type":28,"value":112},"Frame generation",{"type":28,"value":114}," with Lossless Scaling's LSFG 3: 60, 90 or 120 fps.",{"type":22,"tag":77,"props":116,"children":117},{},[118,123],{"type":22,"tag":81,"props":119,"children":120},{},[121],{"type":28,"value":122},"60 fps by frame interpolation:",{"type":28,"value":124}," the game draws an extra frame between its 30 steps a second; 120 fps on screens with 120 Hz or more.",{"type":22,"tag":77,"props":126,"children":127},{},[128,133],{"type":22,"tag":81,"props":129,"children":130},{},[131],{"type":28,"value":132},"In-game options menu",{"type":28,"value":134}," in the style of the game's own menus, with tabs for saves, the game, graphics, mods and controls, usable by touch and with a controller.",{"type":22,"tag":77,"props":136,"children":137},{},[138,143],{"type":22,"tag":81,"props":139,"children":140},{},[141],{"type":28,"value":142},"Save states:",{"type":28,"value":144}," five slots with a picture, time and place of each state, and the controls it was saved with.",{"type":22,"tag":77,"props":146,"children":147},{},[148,153],{"type":22,"tag":81,"props":149,"children":150},{},[151],{"type":28,"value":152},"Import and export",{"type":28,"value":154}," of the game save and the save states to a folder of your choice.",{"type":22,"tag":77,"props":156,"children":157},{},[158,163],{"type":22,"tag":81,"props":159,"children":160},{},[161],{"type":28,"value":162},"Performance overlay:",{"type":28,"value":164}," frame rate, frame time, CPU and GPU load, temperatures, the graphics settings in use, the SoC, GPU and GPU driver.",{"type":22,"tag":77,"props":166,"children":167},{},[168,173],{"type":22,"tag":81,"props":169,"children":170},{},[171],{"type":28,"value":172},"USA, European and Japanese versions",{"type":28,"value":174}," of the game, with all features.",{"type":22,"tag":77,"props":176,"children":177},{},[178,183],{"type":22,"tag":81,"props":179,"children":180},{},[181],{"type":28,"value":182},"Game language",{"type":28,"value":184}," from your copy (USA: English, French, Spanish; Europe: also German and Italian; Japan: Japanese).",{"type":22,"tag":77,"props":186,"children":187},{},[188,193],{"type":22,"tag":81,"props":189,"children":190},{},[191],{"type":28,"value":192},"Custom GPU drivers",{"type":28,"value":194}," on Adreno GPUs: Mesa Turnip or newer Qualcomm drivers.",{"type":22,"tag":77,"props":196,"children":197},{},[198,203],{"type":22,"tag":81,"props":199,"children":200},{},[201],{"type":28,"value":202},"Widescreen:",{"type":28,"value":204}," the game renders at the screen's shape and shows more to the sides.",{"type":22,"tag":77,"props":206,"children":207},{},[208,213],{"type":22,"tag":81,"props":209,"children":210},{},[211],{"type":28,"value":212},"The Wii U's sun and haze:",{"type":28,"value":214}," the sun's corona and lens flare, the haze in the distance and the bloom around bright light.",{"type":22,"tag":77,"props":216,"children":217},{},[218,223],{"type":22,"tag":81,"props":219,"children":220},{},[221],{"type":28,"value":222},"Display options:",{"type":28,"value":224}," rendering resolution from 0.5× to 3×, aspect ratio, and screen layouts for the TV and GamePad pictures.",{"type":22,"tag":77,"props":226,"children":227},{},[228,233],{"type":22,"tag":81,"props":229,"children":230},{},[231],{"type":28,"value":232},"On-screen controls",{"type":28,"value":234}," for the whole GamePad, which hide while a controller is in use.",{"type":22,"tag":77,"props":236,"children":237},{},[238,243],{"type":22,"tag":81,"props":239,"children":240},{},[241],{"type":28,"value":242},"Gyro aiming",{"type":28,"value":244}," with the device's motion sensors or a controller's.",{"type":22,"tag":77,"props":246,"children":247},{},[248,253],{"type":22,"tag":81,"props":249,"children":250},{},[251],{"type":28,"value":252},"Rumble",{"type":28,"value":254}," on the controller in use, or on the device while playing by touch.",{"type":22,"tag":77,"props":256,"children":257},{},[258,263],{"type":22,"tag":81,"props":259,"children":260},{},[261],{"type":28,"value":262},"Gameplay mods:",{"type":28,"value":264}," climb any wall, direct right-stick camera, first person on R3, quick doors, fast scene changes.",{"type":22,"tag":77,"props":266,"children":267},{},[268,273],{"type":22,"tag":81,"props":269,"children":270},{},[271],{"type":28,"value":272},"Faster running and swimming:",{"type":28,"value":274}," Link runs and swims 1.25 up to 4 times as fast.",{"type":22,"tag":77,"props":276,"children":277},{},[278,283],{"type":22,"tag":81,"props":279,"children":280},{},[281],{"type":28,"value":282},"Fast forward:",{"type":28,"value":284}," hold ZR (R2) to run cutscenes and dialogues faster.",{"type":22,"tag":77,"props":286,"children":287},{},[288,293],{"type":22,"tag":81,"props":289,"children":290},{},[291],{"type":28,"value":292},"Crash logs:",{"type":28,"value":294}," if the game crashes, the next start offers its log in Android's share menu for a bug report.",{"type":22,"tag":77,"props":296,"children":297},{},[298,303],{"type":22,"tag":81,"props":299,"children":300},{},[301],{"type":28,"value":302},"No internet access:",{"type":28,"value":304}," the app doesn't request it, and its manifest explicitly excludes it.",{"type":22,"tag":23,"props":306,"children":308},{"id":307},"enhanced-fork",[309],{"type":28,"value":310},"Enhanced fork",{"type":22,"tag":31,"props":312,"children":313},{},[314,328,330,336,338,344],{"type":22,"tag":315,"props":316,"children":320},"a",{"href":317,"rel":318},"https:\u002F\u002Fgithub.com\u002FSSunnKing\u002FZeldaWWHDRecompAndroid---ENHANCED",[319],"nofollow",[321,323],{"type":28,"value":322},"SSunnKing's ",{"type":22,"tag":81,"props":324,"children":325},{},[326],{"type":28,"value":327},"Wind Waker HD Recompiled — Android Enhanced",{"type":28,"value":329}," is a fork of this Android port with better touch controls, graphics and performance: a floating left stick, camera by swiping, context buttons that follow your save data, a layout editor, native widescreen, fixed shadows, a pinch-to-zoom camera, and renderer and performance work. Its README does not mention dual-screen support, but it is a fork of the same project and its code still carries the second-display path (",{"type":22,"tag":42,"props":331,"children":333},{"className":332},[],[334],{"type":28,"value":335},"DrcDisplay.java",{"type":28,"value":337},", an Android ",{"type":22,"tag":42,"props":339,"children":341},{"className":340},[],[342],{"type":28,"value":343},"Presentation",{"type":28,"value":345}," on the AYN Thor's lower screen with touch), so dual-screen devices are likely supported there too.",{"type":22,"tag":23,"props":347,"children":349},{"id":348},"requirements",[350],{"type":28,"value":351},"Requirements",{"type":22,"tag":73,"props":353,"children":354},{},[355,360,401],{"type":22,"tag":77,"props":356,"children":357},{},[358],{"type":28,"value":359},"Android 11 or newer, 64-bit ARM, Vulkan 1.1, about 2 GB of free storage and, for the one-time compile, about 2 GB of free memory.",{"type":22,"tag":77,"props":361,"children":362},{},[363,365,370,371,376,378,384,386,392,394,399],{"type":28,"value":364},"Your own dump of The Wind Waker HD (USA, Europe or Japan): the disc image (",{"type":22,"tag":42,"props":366,"children":368},{"className":367},[],[369],{"type":28,"value":55},{"type":28,"value":49},{"type":22,"tag":42,"props":372,"children":374},{"className":373},[],[375],{"type":28,"value":47},{"type":28,"value":377},"), its disc key (a ",{"type":22,"tag":42,"props":379,"children":381},{"className":380},[],[382],{"type":28,"value":383},".key",{"type":28,"value":385}," file with the image's name) and the Wii U common key (",{"type":22,"tag":42,"props":387,"children":389},{"className":388},[],[390],{"type":28,"value":391},"common.key",{"type":28,"value":393},"); or a Cemu archive of the game (",{"type":22,"tag":42,"props":395,"children":397},{"className":396},[],[398],{"type":28,"value":63},{"type":28,"value":400},", already decrypted: no keys needed).",{"type":22,"tag":77,"props":402,"children":403},{},[404,406,412],{"type":28,"value":405},"For frame generation, your own copy of Lossless Scaling (",{"type":22,"tag":42,"props":407,"children":409},{"className":408},[],[410],{"type":28,"value":411},"Lossless.dll",{"type":28,"value":413},").",{"type":22,"tag":23,"props":415,"children":417},{"id":416},"setup-guide",[418],{"type":28,"value":419},"Setup guide",{"type":22,"tag":421,"props":422,"children":423},"ol",{},[424,436,457,462],{"type":22,"tag":77,"props":425,"children":426},{},[427,429,434],{"type":28,"value":428},"Put the image and both keys in one folder on your device (or the ",{"type":22,"tag":42,"props":430,"children":432},{"className":431},[],[433],{"type":28,"value":63},{"type":28,"value":435}," file alone).",{"type":22,"tag":77,"props":437,"children":438},{},[439,441,448,450,455],{"type":28,"value":440},"Install the APK from the ",{"type":22,"tag":315,"props":442,"children":445},{"href":443,"rel":444},"https:\u002F\u002Fgithub.com\u002FGreenNaugahyde\u002FZeldaWWHDRecompAndroid\u002Freleases\u002Flatest",[319],[446],{"type":28,"value":447},"latest release",{"type":28,"value":449}," and start it. Choose ",{"type":22,"tag":81,"props":451,"children":452},{},[453],{"type":28,"value":454},"Extract from your disc image or .wua…",{"type":28,"value":456}," and select that folder.",{"type":22,"tag":77,"props":458,"children":459},{},[460],{"type":28,"value":461},"The app extracts the game files, then prepares the game code for your device (once; about 6 minutes on a Snapdragon 7+ Gen 3, 9 minutes on a Snapdragon 855, 18 minutes on a Helio G85). A notification shows the progress and keeps the process alive.",{"type":22,"tag":77,"props":463,"children":464},{},[465],{"type":28,"value":466},"The game starts. The first visit to each place may stutter briefly while its shaders compile, then they are cached.",{"title":5,"searchDepth":468,"depth":468,"links":469},2,[470,471,472,473,474],{"id":25,"depth":468,"text":29},{"id":68,"depth":468,"text":71},{"id":307,"depth":468,"text":310},{"id":348,"depth":468,"text":351},{"id":416,"depth":468,"text":419},"markdown","content:zelda-wind-waker-hd:index.md","content","zelda-wind-waker-hd\u002Findex.md","zelda-wind-waker-hd\u002Findex","md",1794296044890]