[{"data":1,"prerenderedAt":451},["ShallowReactive",2],{"article-ffxii-thor-companion":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":14,"project_page":15,"body":16,"_type":445,"_id":446,"_source":447,"_file":448,"_stem":449,"_extension":450},"\u002Fffxii-thor-companion","",false,"FFXII Thor Companion","A free, open-source live second-screen companion showing your map, party HP\u002FMP, gambits, gear and License Board while playing FFXII The Zodiac Age on the AYN Thor.","2026-10-23 06:48","ffxii-thor-companion","companion","ai",[],"https:\u002F\u002Fwww.reddit.com\u002Fr\u002FAynThor\u002Fcomments\u002F1xcfl3f\u002Fi_made_a_live_secondscreen_companion_for_final\u002F","https:\u002F\u002Fgithub.com\u002FCybranfox\u002Fffxii-thor-companion",{"type":17,"children":18,"toc":438},"root",[19,28,34,39,103,109,114,188,193,198,204,271,277,282,363,391,396],{"type":20,"tag":21,"props":22,"children":24},"element","h2",{"id":23},"description",[25],{"type":26,"value":27},"text","Description",{"type":20,"tag":29,"props":30,"children":31},"p",{},[32],{"type":26,"value":33},"FFXII Thor Companion is a live second-screen companion for FINAL FANTASY XII THE ZODIAC AGE (Steam, PC) running under GameNative on the AYN Thor dual-screen handheld. The game plays on the top screen and the companion app on the bottom screen follows it in real time. It is free and open source (MIT), requires no accounts, no tracking and no internet permission, and builds its data from your own copy of the game — no game files are included. It is an unofficial fan project, not affiliated with or endorsed by Square Enix.",{"type":20,"tag":29,"props":35,"children":36},{},[37],{"type":26,"value":38},"The companion is made of three pieces, each with its own job:",{"type":20,"tag":40,"props":41,"children":42},"ul",{},[43,66,93],{"type":20,"tag":44,"props":45,"children":46},"li",{},[47,49,55,57,64],{"type":26,"value":48},"The ",{"type":20,"tag":50,"props":51,"children":52},"strong",{},[53],{"type":26,"value":54},"app",{"type":26,"value":56}," (",{"type":20,"tag":58,"props":59,"children":61},"code",{"className":60},[],[62],{"type":26,"value":63},".apk",{"type":26,"value":65},") runs on the Thor's bottom screen and reads files. It has no network access.",{"type":20,"tag":44,"props":67,"children":68},{},[69,70,75,77,83,85,91],{"type":26,"value":48},{"type":20,"tag":50,"props":71,"children":72},{},[73],{"type":26,"value":74},"game script",{"type":26,"value":76}," runs inside the game under ffgriever's LUA Script Loader. It reads the game's state and writes it as small JSON files to ",{"type":20,"tag":58,"props":78,"children":80},{"className":79},[],[81],{"type":26,"value":82},"Download\u002FFFXII_companion\u002Flive",{"type":26,"value":84}," on the device. It comes inside the app: a small loader (",{"type":20,"tag":58,"props":86,"children":88},{"className":87},[],[89],{"type":26,"value":90},"ThorCompanion.lua",{"type":26,"value":92},"), installed once, checks the script's signature at every game start and only runs a genuine, current copy. After the first install, updating is just installing the new app.",{"type":20,"tag":44,"props":94,"children":95},{},[96,101],{"type":20,"tag":50,"props":97,"children":98},{},[99],{"type":26,"value":100},"Your game data",{"type":26,"value":102}," (names, licence boards, map sheets) is built from your own game files, on the Thor: the game script copies the files it needs while you play (about 5 minutes) and the app builds the data. A PC data builder is still available as an alternative.",{"type":20,"tag":21,"props":104,"children":106},{"id":105},"features",[107],{"type":26,"value":108},"Features",{"type":20,"tag":29,"props":110,"children":111},{},[112],{"type":26,"value":113},"The app offers five tabs that follow the game live:",{"type":20,"tag":40,"props":115,"children":116},{},[117,127,151,168,178],{"type":20,"tag":44,"props":118,"children":119},{},[120,125],{"type":20,"tag":50,"props":121,"children":122},{},[123],{"type":26,"value":124},"Status",{"type":26,"value":126}," – Where you are, a map of the areas you have explored with a \"you are here\" marker, the game's map symbols and exit labels (tap it for a full-size map you can zoom and drag), live party HP\u002FMP and status effects, the enemy your party is targeting (level, HP, weaknesses), the game's own \"where to go next\" hint, and (optional) your accepted hunts.",{"type":20,"tag":44,"props":128,"children":129},{},[130,135,137,142,144,149],{"type":20,"tag":50,"props":131,"children":132},{},[133],{"type":26,"value":134},"Gambits",{"type":26,"value":136}," – Every member's gambits as the game has them right now, with item counts (\"Potion ×14\", \"0 left\" warnings). It shows one set at a time — tap I, II or III to look through them. ",{"type":20,"tag":50,"props":138,"children":139},{},[140],{"type":26,"value":141},"Suggest",{"type":26,"value":143}," builds a gambit set from what that character owns and is licensed for. The optional ",{"type":20,"tag":50,"props":145,"children":146},{},[147],{"type":26,"value":148},"editor",{"type":26,"value":150}," can apply a change or a whole suggested set to the running game, and switch which set (I\u002FII\u002FIII) a character uses.",{"type":20,"tag":44,"props":152,"children":153},{},[154,159,161,166],{"type":20,"tag":50,"props":155,"children":156},{},[157],{"type":26,"value":158},"Equip",{"type":26,"value":160}," – Each member's equipped gear, plus what the game's own ",{"type":20,"tag":50,"props":162,"children":163},{},[164],{"type":26,"value":165},"Optimize",{"type":26,"value":167}," would change. Descriptions come from optional mods.",{"type":20,"tag":44,"props":169,"children":170},{},[171,176],{"type":20,"tag":50,"props":172,"children":173},{},[174],{"type":26,"value":175},"Bestiary",{"type":26,"value":177}," – Bestiary pages by location (with an optional mod).",{"type":20,"tag":44,"props":179,"children":180},{},[181,186],{"type":20,"tag":50,"props":182,"children":183},{},[184],{"type":26,"value":185},"Licenses",{"type":26,"value":187}," – Both job boards per character: owned, buyable now (the game's exact rules, including Espers, Quickenings and the Second Board), and the cheapest route to any license.",{"type":20,"tag":29,"props":189,"children":190},{},[191],{"type":26,"value":192},"Accepted hunts have a map link under Status › Hunts that follows your progress and opens the place the game's own View Hunt Map points to. Most have a marker; one offers several regions to choose from. These are the game's hunt-map destinations, not exact spawn points, and ground you haven't explored stays hidden. Hunts remain optional.",{"type":20,"tag":29,"props":194,"children":195},{},[196],{"type":26,"value":197},"The interface brings the bottom screen closer to the game's menus, with a softly moving slate background, plain menu words down the left, a pointing-glove cursor, and paper pages for Bestiary and the full map.",{"type":20,"tag":21,"props":199,"children":201},{"id":200},"requirements",[202],{"type":26,"value":203},"Requirements",{"type":20,"tag":40,"props":205,"children":206},{},[207,231,241,251,261,266],{"type":20,"tag":44,"props":208,"children":209},{},[210,215,217,222,224,229],{"type":20,"tag":50,"props":211,"children":212},{},[213],{"type":26,"value":214},"AYN Thor",{"type":26,"value":216}," (Android 13) with ",{"type":20,"tag":50,"props":218,"children":219},{},[220],{"type":26,"value":221},"GameNative",{"type":26,"value":223}," and ",{"type":20,"tag":50,"props":225,"children":226},{},[227],{"type":26,"value":228},"FINAL FANTASY XII THE ZODIAC AGE from Steam, version 1.0.4.0",{"type":26,"value":230},". Other game builds are detected and the companion stays read-only and blank.",{"type":20,"tag":44,"props":232,"children":233},{},[234,239],{"type":20,"tag":50,"props":235,"children":236},{},[237],{"type":26,"value":238},"Required mods:",{"type":26,"value":240}," ffgriever's FF12 External File Loader and FF12 LUA Script Loader. Use the current versions (tested: LUA Script Loader 2.0.1 with External File Loader 1.6.1); 1.7.1 still works but often hangs when the game closes.",{"type":20,"tag":44,"props":242,"children":243},{},[244,249],{"type":20,"tag":50,"props":245,"children":246},{},[247],{"type":26,"value":248},"Optional mods",{"type":26,"value":250}," that add text: Dynamic Equipment Description with The Insurgent's Descriptive Inventory (Equip tab descriptions), and Foedex Clan Primer Text Replacer (Bestiary tab). Everything else works without them.",{"type":20,"tag":44,"props":252,"children":253},{},[254,259],{"type":20,"tag":50,"props":255,"children":256},{},[257],{"type":26,"value":258},"No PC needed",{"type":26,"value":260}," for the game data any more; the optional PC data builder needs Python 3.10+.",{"type":20,"tag":44,"props":262,"children":263},{},[264],{"type":26,"value":265},"If you use The Insurgent's Manifesto, its 36-slot single gambit list mode is not supported by the editor (the editor refuses to run then); everything else still works.",{"type":20,"tag":44,"props":267,"children":268},{},[269],{"type":26,"value":270},"English (US) game text only for this beta; Korean and Chinese licence boards differ.",{"type":20,"tag":21,"props":272,"children":274},{"id":273},"setup-guide",[275],{"type":26,"value":276},"Setup guide",{"type":20,"tag":29,"props":278,"children":279},{},[280],{"type":26,"value":281},"Getting started takes a few one-time steps:",{"type":20,"tag":40,"props":283,"children":284},{},[285,305,332,344],{"type":20,"tag":44,"props":286,"children":287},{},[288,290,296,298,303],{"type":26,"value":289},"First, ffgriever's two mod loaders have to be working in FFXII (the companion's script runs through them): FF12 External File Loader and FF12 LUA Script Loader copied into the game's ",{"type":20,"tag":58,"props":291,"children":293},{"className":292},[],[294],{"type":26,"value":295},"x64",{"type":26,"value":297}," folder, the newer C++ runtime next to them, and GameNative's ",{"type":20,"tag":50,"props":299,"children":300},{},[301],{"type":26,"value":302},"Enable mod loaders",{"type":26,"value":304}," switched on. Without them the game runs fine but the companion just waits.",{"type":20,"tag":44,"props":306,"children":307},{},[308,310,315,317,322,324,330],{"type":26,"value":309},"Install the ",{"type":20,"tag":50,"props":311,"children":312},{},[313],{"type":26,"value":314},"APK",{"type":26,"value":316}," on the Thor, open it on the bottom screen and tap ",{"type":20,"tag":50,"props":318,"children":319},{},[320],{"type":26,"value":321},"Allow file access",{"type":26,"value":323},". It puts the loader, the signed game script and the installer in ",{"type":20,"tag":58,"props":325,"children":327},{"className":326},[],[328],{"type":26,"value":329},"Download\u002FFFXII_companion\u002Finstall",{"type":26,"value":331},".",{"type":20,"tag":44,"props":333,"children":334},{},[335,337,343],{"type":26,"value":336},"Once only: in GameNative, open the game's container and run ",{"type":20,"tag":58,"props":338,"children":340},{"className":339},[],[341],{"type":26,"value":342},"D:\\FFXII_companion\\install\\install.cmd",{"type":26,"value":331},{"type":20,"tag":44,"props":345,"children":346},{},[347,349,354,356,361],{"type":26,"value":348},"Tap ",{"type":20,"tag":50,"props":350,"children":351},{},[352],{"type":26,"value":353},"Start FFXII",{"type":26,"value":355},", then ",{"type":20,"tag":50,"props":357,"children":358},{},[359],{"type":26,"value":360},"Build game data",{"type":26,"value":362},". The game data builds itself while you play (about 5 minutes).",{"type":20,"tag":29,"props":364,"children":365},{},[366,368,374,376,382,384,390],{"type":26,"value":367},"To update, install the new APK over the old one and restart the game. When updating from an earlier version, rebuild your game data once (Status › Details › Rebuild) with the game running until it finishes; you don't need to run ",{"type":20,"tag":58,"props":369,"children":371},{"className":370},[],[372],{"type":26,"value":373},"install.cmd",{"type":26,"value":375}," again. To remove, run ",{"type":20,"tag":58,"props":377,"children":379},{"className":378},[],[380],{"type":26,"value":381},"uninstall.cmd",{"type":26,"value":383}," the same way (it deletes the loader and its record), uninstall the app, and delete ",{"type":20,"tag":58,"props":385,"children":387},{"className":386},[],[388],{"type":26,"value":389},"Download\u002FFFXII_companion",{"type":26,"value":331},{"type":20,"tag":29,"props":392,"children":393},{},[394],{"type":26,"value":395},"Watch:",{"type":20,"tag":40,"props":397,"children":398},{},[399,411,420,429],{"type":20,"tag":44,"props":400,"children":401},{},[402],{"type":20,"tag":403,"props":404,"children":408},"a",{"href":405,"rel":406},"https:\u002F\u002Fgithub.com\u002FCybranfox\u002Fffxii-thor-companion\u002Freleases\u002Flatest",[407],"nofollow",[409],{"type":26,"value":410},"0.17 video: the new look and hunt maps",{"type":20,"tag":44,"props":412,"children":413},{},[414],{"type":20,"tag":403,"props":415,"children":417},{"href":405,"rel":416},[407],[418],{"type":26,"value":419},"0.16 video",{"type":20,"tag":44,"props":421,"children":422},{},[423],{"type":20,"tag":403,"props":424,"children":426},{"href":405,"rel":425},[407],[427],{"type":26,"value":428},"0.15 setup walkthrough",{"type":20,"tag":44,"props":430,"children":431},{},[432],{"type":20,"tag":403,"props":433,"children":435},{"href":405,"rel":434},[407],[436],{"type":26,"value":437},"first demo (0.9)",{"title":5,"searchDepth":439,"depth":439,"links":440},2,[441,442,443,444],{"id":23,"depth":439,"text":27},{"id":105,"depth":439,"text":108},{"id":200,"depth":439,"text":203},{"id":273,"depth":439,"text":276},"markdown","content:ffxii-thor-companion:index.md","content","ffxii-thor-companion\u002Findex.md","ffxii-thor-companion\u002Findex","md",1794296044199]