Dokimon QuestWiki · Game Databasesite v1.12
EN

Game updates and build history

data from build 2026-10-02

Every Steam build of Dokimon Quest the wiki has checked against its extracted data, newest first. The developer's own announcements live on the news page; this page exists for builds that change game data or behavior, whether or not they come with patch notes. Each entry lists what a player notices, any wiki pages that changed with it, and the raw diff of the game files the changes were read from.

The site launched on the 2026-08-27 release build. A build is dated by its Steam depot manifest — the game itself carries no version number.

Build 2026-10-02

Steam patch notesmanifest 3287541748849778122Read the patch notes on Steam →

Battle fixes and clearer Theft Captal rules

  • A Dokimon that levels up after evolving now checks the learnset for its current evolution stage. The generated move lists themselves are unchanged from the previous build.
  • Theft Captal now targets a Bound Dokimon only in a single Ranger battle outside a quest battle. Its item description spells out the Bound and single-battle limits.
  • Flinch and Protect wear off at the start of a turn; self-targeted buffs are no longer blocked by the opponent’s shield, evasion or element.
  • Battle stat changes are capped at +6 or −6. Max-level Dokimon no longer show a zero-EXP message, and the reward message now includes wild-battle payouts.
  • Fairy shrines and the post-game portal now accept each fairy’s evolution stages. Wild encounters no longer interrupt Maiko’s opening dream.

Wiki pages updated: Theft Captal — updated description · Mechanics — stealing and battle rules · News — developer patch notes

Under the hood and the raw diff
  • All six scripts used to generate the wiki’s monster, move, item, area, element and learnset tables are byte-identical to the prior build. Only the Theft Captal item description changes in those tables.
  • The 3,213 exported sprite frames are unchanged. The English move, scene and tutorial files have only line-ending changes.

Unified diff of the 26 changed decompiled code entries and semantic English localization changes, this build against manifest 6323404005526619670. Line-ending-only changes are omitted.

--- old/code/gml_GlobalScript_cutscene_functions.gml
+++ new/code/gml_GlobalScript_cutscene_functions.gml
@@ -1350,7 +1350,7 @@

 function INCREMENT_BADGES()
 {
-    global.badges = argument[0];
+    global.badges = max(global.badges, argument[0]);
 }

 function HIDE_PLAYER()
--- old/code/gml_GlobalScript_cutscenes.gml
+++ new/code/gml_GlobalScript_cutscenes.gml
@@ -38,6 +38,12 @@

 function scene_release_a_dokimon()
 {
+    var _mon = string(global.monsters[0][UnknownEnum.Value_29]);
+    if (_mon == "" || _mon == "0")
+    {
+        _mon = string(GET_DEX(0, 0, global.monsters[0][0]));
+    }
+    _mon = localize_text_misc(2006, "scene.txt") + " (" + _mon + " Lv" + string(global.monsters[0][UnknownEnum.Value_1]) + ")";
     CUTSCENE_ADD_ACTION(START_SCENE, -1);
     CUTSCENE_ADD_ACTION(WAIT, 0.5);
     CUTSCENE_ADD_ACTION(PL1_DIR, 3);
@@ -46,7 +52,7 @@
     CUTSCENE_ADD_ACTION(ADD_TEXT, 909);
     CUTSCENE_ADD_ACTION(WAIT_INPUT);
     CUTSCENE_ADD_ACTION(ADD_TEXT_YESNO);
-    IF_YES(ADD_TEXT, 2006);
+    IF_YES(ADD_TEXT, _mon);
     IF_YES(WAIT_INPUT);
     IF_YES(ADD_TEXT_YESNO);
     IF_YES(ADD_TEXT, 910);
--- old/code/gml_GlobalScript_monster_manipulation.gml
+++ new/code/gml_GlobalScript_monster_manipulation.gml
@@ -883,7 +883,7 @@
                                 }
                                 else
                                 {
-                                    battle_msg[0] = localize_text_misc(101, "ui.txt") + " " + string(GET_DEX(0, 0)) + localize_text_misc(102, "ui.txt") + " " + string(global.monsters[battler_to_be][0]) + "!";
+                                    battle_msg[0] = localize_text_misc(101, "ui.txt") + " " + string(GET_DEX(0, 0)) + localize_text_misc(102, "ui.txt") + " " + string(global.monsters[battler_to_be][UnknownEnum.Value_29]) + "!";
                                 }
                             }
                             else if (switching_mon == 1)
@@ -896,7 +896,7 @@
                                 }
                                 else
                                 {
-                                    battle_msg[0] = localize_text_misc(101, "ui.txt") + " " + string(GET_DEX(2, 0)) + localize_text_misc(102, "ui.txt") + " " + string(global.monsters[battler_to_be][0]) + "!";
+                                    battle_msg[0] = localize_text_misc(101, "ui.txt") + " " + string(GET_DEX(2, 0)) + localize_text_misc(102, "ui.txt") + " " + string(global.monsters[battler_to_be][UnknownEnum.Value_29]) + "!";
                                 }
                             }
                             menu = UnknownEnum.Value_3;
--- old/code/gml_GlobalScript_saving.gml
+++ new/code/gml_GlobalScript_saving.gml
@@ -34,6 +34,7 @@
         ini_write_real("Player", "Borderless", 0);
     }
     ini_write_real("Player", "VSync", global.vsync);
+    ini_write_real("Player", "Always Run", global.CAPS_LOCKED);
     ini_close();
 }

@@ -198,9 +199,10 @@
         ini_write_string("inv0", "Inv" + string(i), global.inv[i][0]);
         ini_write_real("inv1", "Inv" + string(i), global.inv[i][1]);
     }
+    ini_section_delete("Cap_Data");
     for (var i = 0; i < array_length(global.mondex); i++)
     {
-        ini_write_real("Cap_Data", i, global.capture_data[i]);
+        ini_write_real("Cap_Data", string(i), global.capture_data[i]);
     }
     global.monsters_seen = 0;
     global.monsters_caught = 0;
@@ -563,7 +565,51 @@
         }
         for (var i = 0; i < global.monster_count; i++)
         {
-            global.capture_data[i] = ini_read_real("Cap_Data", i, -1);
+            global.capture_data[i] = ini_read_real("Cap_Data", string(i), -1);
+        }
+        var _cap_main = "save.sav";
+        if (global.save_num != 0)
+        {
+            _cap_main = "save" + string(global.save_num) + ".sav";
+        }
+        for (var _p = 0; _p < 2; _p++)
+        {
+            var _cap_src = (_p == 0) ? _file : _cap_main;
+            if (_p == 1 && (_cap_main == _file || !file_exists(_cap_main)))
+            {
+                break;
+            }
+            var _txt = file_text_open_read(_cap_src);
+            var _in_cap = 0;
+            if (_txt != -1)
+            {
+                while (!file_text_eof(_txt))
+                {
+                    var _line = string_trim(string_replace_all(string_replace_all(file_text_readln(_txt), "\r", ""), "\n", ""));
+                    if (string_char_at(_line, 1) == "[")
+                    {
+                        _in_cap = _line == "[Cap_Data]";
+                    }
+                    else if (_in_cap)
+                    {
+                        var _eq = string_pos("=", _line);
+                        var _key = string_trim(string_copy(_line, 1, _eq - 1));
+                        var _val = string_trim(string_replace_all(string_copy(_line, _eq + 1, string_length(_line)), "\"", ""));
+                        if (_eq > 1 && string_length(string_digits(_key)) > 0 && string_letters(_key) == "" && string_pos("-", _key) == 0 && string_length(string_digits(_val)) > 0 && string_letters(_val) == "")
+                        {
+                            var _id = floor(real(_key));
+                            if (_id < global.monster_count && real(_val) > global.capture_data[_id])
+                            {
+                                global.capture_data[_id] = real(_val);
+                            }
+                        }
+                    }
+                }
+                file_text_close(_txt);
+            }
+        }
+        for (var i = 0; i < global.monster_count; i++)
+        {
             if (global.capture_data[i] == 2)
             {
                 global.capture_data[i] = 1;
@@ -580,8 +626,19 @@
         {
             REFILL_MOVES(i);
         }
-        global.monsters_seen = ini_read_real("Monsters", "Seen", 0);
-        global.monsters_caught = ini_read_real("Monsters", "Caught", 0);
+        global.monsters_seen = 0;
+        global.monsters_caught = 0;
+        for (var i = 0; i < array_length(global.capture_data); i++)
+        {
+            if (global.capture_data[i] == 0)
+            {
+                global.monsters_seen++;
+            }
+            if (global.capture_data[i] == 1)
+            {
+                global.monsters_caught++;
+            }
+        }
         global.obc_used_codes = [];
         if (ini_key_exists("OBC", "LedgerV2"))
         {
--- old/code/gml_Object_obj_battle_Draw_0.gml
+++ new/code/gml_Object_obj_battle_Draw_0.gml
@@ -1631,6 +1631,10 @@
             var prev_mon = global.monsters[evolving][0] - 1;
             txt = string(GET_DEX(0, 0, prev_mon)) + " " + localize_text_misc(125, "ui.txt") + " " + string(GET_DEX(0, 0, global.monsters[evolving][0])) + "!";
             timer++;
+            if (press(1004) && timer > 30 && timer < 400)
+            {
+                timer = 400;
+            }
             if (timer >= 400)
             {
                 audio_sound_gain(global.BATTLE_BGM, global.MUSIC, 2400);
--- old/code/gml_Object_obj_battle_Draw_75.gml
+++ new/code/gml_Object_obj_battle_Draw_75.gml
@@ -4,9 +4,9 @@
 }
 if (menu == UnknownEnum.Value_23 && alarm[0] == -1)
 {
-    alph += 0.025;
+    alph += 0.05;
     fill_screen(alph, 0);
-    if (alph >= 1.8)
+    if (alph >= 1.2)
     {
         if (!instance_exists(obj_battle_exit))
         {
--- old/code/gml_Object_obj_battle_Step_0.gml
+++ new/code/gml_Object_obj_battle_Step_0.gml
@@ -51,6 +51,17 @@
 }
 if (menu == UnknownEnum.Value_23)
 {
+    if (alarm[0] > 5)
+    {
+        if (press(1004))
+        {
+            alarm[0] = 5;
+        }
+        else if (held(1004) || global.battle_toggle)
+        {
+            alarm[0] -= 3;
+        }
+    }
     for (var i = 0; i < 4; i++)
     {
         new_health[i] = round(new_health[i]);
@@ -362,7 +373,7 @@
         }
         for (var i = 0; i < 4; i++)
         {
-            if (condition[i] == UnknownEnum.Value_0)
+            if (condition[i] == UnknownEnum.Value_0 || condition[i] == UnknownEnum.Value_2)
             {
                 condition[i] = -1;
             }
@@ -386,6 +397,33 @@
         if (!autoplay)
         {
             game_set_speed(60, gamespeed_fps);
+        }
+        if (global.double_battle && condition[attacking] == UnknownEnum.Value_1)
+        {
+            var _who = battler;
+            var _slot = 0;
+            if (attacking != 0)
+            {
+                _who = battler1;
+            }
+            for (var i = 0; i < 4; i++)
+            {
+                if (global.monsters[_who][UnknownEnum.Value_10 + i] != -1 && global.monsters[_who][UnknownEnum.Value_14 + i] > 0)
+                {
+                    _slot = i;
+                    break;
+                }
+            }
+            if (attacking == 0)
+            {
+                battle_sel = _slot;
+            }
+            else
+            {
+                battle_sel1 = _slot;
+            }
+            menu = UnknownEnum.Value_1;
+            exit;
         }
         sel[0] = GET_VERTICAL_INPUTS(sel[0]);
         if (press(5000))
@@ -426,13 +464,14 @@
                     }
                     break;
                 case 2:
-                    if ((global.trainer == 0 || (global.trainer == 1 && !global.double_battle && inv_hasitem(UnknownEnum.Value_28) == 1 && global.eparty[0][UnknownEnum.Value_18] == 8)) && global.BATTLE_BGM != snd_main_theme)
+                    var _theft = global.trainer == 1 && !global.double_battle && global.quest_battle == -1 && global.eparty[ebattler][UnknownEnum.Value_18] == 8 && inv_hasitem(UnknownEnum.Value_28) == 1;
+                    if ((global.trainer == 0 || _theft) && global.BATTLE_BGM != snd_main_theme)
                     {
                         var i = 0;
                         var o = 0;
                         while (i < (array_length(global.inv) - 1))
                         {
-                            if (global.inv[i][0] > -1 && global.inv[i][0] < 6)
+                            if (global.inv[i][0] > -1 && ((global.trainer == 0 && global.inv[i][0] < 6) || (_theft && global.inv[i][0] == UnknownEnum.Value_28)))
                             {
                                 menu = UnknownEnum.Value_13;
                                 show_captals = 0;
@@ -499,7 +538,7 @@
         {
             sel_defending_mon = 1 - sel_defending_mon;
         }
-        if ((press(1004) && sel_defending_mon >= 0) || ebattler1 == -1 || (global.admin && autoplay))
+        if ((press(1004) && sel_defending_mon >= 0) || ebattler1 == -1 || (global.admin && autoplay) || condition[attacking] == UnknownEnum.Value_1)
         {
             defending[attacking] = 1 + (sel_defending_mon * 2);
             if (autoplay && global.admin)
@@ -514,13 +553,16 @@
             {
                 sel_defending_mon_slot[1] = sel_defending_mon;
             }
-            if (attacking == 0)
-            {
-                global.monsters[battler][UnknownEnum.Value_14 + battle_sel]--;
-            }
-            else if (battler1 != -1)
-            {
-                global.monsters[battler1][UnknownEnum.Value_14 + battle_sel1]--;
+            if (condition[attacking] != UnknownEnum.Value_1)
+            {
+                if (attacking == 0)
+                {
+                    global.monsters[battler][UnknownEnum.Value_14 + battle_sel]--;
+                }
+                else if (battler1 != -1)
+                {
+                    global.monsters[battler1][UnknownEnum.Value_14 + battle_sel1]--;
+                }
             }
             if (attacking == 0 && battler1 != -1)
             {
@@ -741,7 +783,7 @@
         {
             autoplay_counter++;
         }
-        if (press(1004) || autoplay_counter >= autoplay_activate)
+        if (press(1004) || autoplay_counter >= autoplay_activate || (global.double_battle && condition[attacking] == UnknownEnum.Value_1))
         {
             autoplay_counter = 0;
             sfx(snd_select);
@@ -1116,6 +1158,15 @@
         }
         var MY_NAME = GET_DEX(attacker, 0);
         var EN_NAME = GET_DEX(defender, 0);
+        if (global.double_battle && condition[attacker] == UnknownEnum.Value_1)
+        {
+            battle_msg[0] = string(MY_NAME) + " " + localize_text_misc(73, "ui.txt");
+            monster_attack[attacker] = -1;
+            condition[attacker] = -1;
+            menu = UnknownEnum.Value_8;
+            alarm[0] = 180;
+            exit;
+        }
         if (condition[attacker] == UnknownEnum.Value_0)
         {
             battle_msg[0] = string(MY_NAME) + " " + localize_text_misc(12, "ui.txt");
@@ -1184,7 +1235,8 @@
             {
                 var MISS = false;
                 monster_turn[attacker] += 1;
-                if (condition[defender] == UnknownEnum.Value_2)
+                var _self_move = GET_MOVE(attacker, 2) == spr_over_self && GET_MOVE(attacker, 8) == UnknownEnum.Value_2;
+                if (condition[defender] == UnknownEnum.Value_2 && !_self_move)
                 {
                     battle_msg[0] = string(EN_NAME) + " " + localize_text_misc(15, "ui.txt");
                     condition[defender] = -1;
@@ -1194,7 +1246,10 @@
                 {
                     randomize();
                     var _accuracy = CALCULATE_BATTLE_STATS(GET_MOVE(attacker, 6), attacker, UnknownEnum.Value_6);
-                    _accuracy = _accuracy / CALCULATE_BATTLE_STATS(1, defender, UnknownEnum.Value_5);
+                    if (!_self_move)
+                    {
+                        _accuracy = _accuracy / CALCULATE_BATTLE_STATS(1, defender, UnknownEnum.Value_5);
+                    }
                     _accuracy = clamp(_accuracy, 1, 100);
                     var _chance = irandom(100) - 1;
                     var _chance_check = _accuracy;
@@ -1208,7 +1263,7 @@
                 var EN_TYPE = GET_DEX(defender, 7);
                 var EN_TYPE2 = GET_DEX(defender, 8);
                 var TYPE = TYPE_EFF(MV_TYPE, EN_TYPE, EN_TYPE2);
-                if (TYPE == 0)
+                if (TYPE == 0 && !_self_move)
                 {
                     battle_msg[0] = localize_text_misc(17, "ui.txt");
                     MISS = true;
@@ -1730,7 +1785,7 @@
                             battle_stats[defender][4] += GET_MOVE(attacker, 28);
                             battle_stats[defender][5] += GET_MOVE(attacker, 29);
                             battle_stats[defender][6] += GET_MOVE(attacker, 30);
-                            for (i = 0; i < 6; i++)
+                            for (i = 0; i < 7; i++)
                             {
                                 if (abs(battle_stats[attacker][i]) > 6)
                                 {
@@ -1839,7 +1894,7 @@
                     if (RECOIL)
                     {
                         var recoil_damage = GET_MOVE(attacker, 36) / 100;
-                        recoil_damage = GET_STAT(attacker, 0) * recoil_damage;
+                        recoil_damage = round(GET_STAT(attacker, 0) * recoil_damage);
                         battle_msg[ms] = string(MY_NAME) + " " + localize_text_misc(70, "ui.txt");
                         if (attacker == 0)
                         {
@@ -2171,11 +2226,11 @@
                         var enemy_priority1 = 0;
                         if (monster_attack[0] != -1)
                         {
-                            player_priority1 = global.movedex[monster_attack[0]][UnknownEnum.Value_10];
+                            player_priority = global.movedex[monster_attack[0]][UnknownEnum.Value_10];
                         }
                         if (monster_attack[1] != -1)
                         {
-                            enemy_priority1 = global.movedex[monster_attack[1]][UnknownEnum.Value_10];
+                            enemy_priority = global.movedex[monster_attack[1]][UnknownEnum.Value_10];
                         }
                         if (battler1 != -1 && monster_attack[2] != -1)
                         {
@@ -2309,7 +2364,7 @@
                                 }
                                 else
                                 {
-                                    defender = defending[0];
+                                    defender = defending[attacker];
                                 }
                                 if (defending[0] == -1)
                                 {
@@ -2701,7 +2756,7 @@
             var o = 0;
             while (i < array_length(global.inv))
             {
-                if (global.inv[i][0] > -1 && (global.inv[i][0] < 6 || (global.inv[i][0] == UnknownEnum.Value_28 && global.eparty[0][UnknownEnum.Value_18] == 8)))
+                if (global.inv[i][0] > -1 && ((global.trainer == 0 && global.inv[i][0] < 6) || (global.trainer && global.inv[i][0] == UnknownEnum.Value_28)))
                 {
                     if (global.inv[i][0] != UnknownEnum.Value_5)
                     {
@@ -2718,7 +2773,7 @@
             }
             for (i = 0; i < array_length(global.inv); i++)
             {
-                if (global.inv[i][0] > -1 && (global.inv[i][0] < 6 || (global.inv[i][0] == UnknownEnum.Value_28 && global.eparty[0][UnknownEnum.Value_18] == 8)))
+                if (global.inv[i][0] > -1 && ((global.trainer == 0 && global.inv[i][0] < 6) || (global.trainer && global.inv[i][0] == UnknownEnum.Value_28)))
                 {
                     if (global.inv[i][0] == UnknownEnum.Value_5)
                     {
@@ -2903,20 +2958,24 @@
                                 else
                                 {
                                     var new_move = 0;
-                                    for (var o = 1; o < array_length(global.movepool[global.monsters[i][0]]); o += 2)
+                                    for (var o = 1; o < array_length(global.movepool[global.monsters[i][0] + global.monsters[i][UnknownEnum.Value_31]]); o += 2)
                                     {
-                                        if (global.movepool[global.monsters[i][0]][o] == global.monsters[i][UnknownEnum.Value_1])
+                                        if (global.movepool[global.monsters[i][0] + global.monsters[i][UnknownEnum.Value_31]][o] == global.monsters[i][UnknownEnum.Value_1])
                                         {
                                             new_move++;
                                             break;
                                         }
-                                        if (global.movepool[global.monsters[i][0]][o] > global.monsters[i][UnknownEnum.Value_1])
+                                        if (global.movepool[global.monsters[i][0] + global.monsters[i][UnknownEnum.Value_31]][o] > global.monsters[i][UnknownEnum.Value_1])
                                         {
                                             break;
                                         }
                                     }
-                                    var my_name = string(global.mondex[global.monsters[i][0]][0]);
-                                    for (var b = 0; b < array_length(battle_msg); b++)
+                                    var my_name = string(GET_DEX(0, 0, global.monsters[i][0]));
+                                    if (string(global.monsters[i][UnknownEnum.Value_29]) != "" && string(global.monsters[i][UnknownEnum.Value_29]) != "0")
+                                    {
+                                        my_name = string(global.monsters[i][UnknownEnum.Value_29]);
+                                    }
+                                    for (var b = 2; b < array_length(battle_msg); b++)
                                     {
                                         if (battle_msg[b] == "")
                                         {
@@ -2960,14 +3019,14 @@
                     max_experience = power(global.monsters[battler][UnknownEnum.Value_1], 3);
                 }
                 var new_move = 0;
-                for (var i = 1; i < array_length(global.movepool[global.monsters[battler][0]]); i += 2)
-                {
-                    if (global.movepool[global.monsters[battler][0]][i] == global.monsters[battler][UnknownEnum.Value_1])
+                for (var i = 1; i < array_length(global.movepool[global.monsters[battler][0] + global.monsters[battler][UnknownEnum.Value_31]]); i += 2)
+                {
+                    if (global.movepool[global.monsters[battler][0] + global.monsters[battler][UnknownEnum.Value_31]][i] == global.monsters[battler][UnknownEnum.Value_1])
                     {
                         new_move++;
                         break;
                     }
-                    if (global.movepool[global.monsters[battler][0]][i] > global.monsters[battler][UnknownEnum.Value_1])
+                    if (global.movepool[global.monsters[battler][0] + global.monsters[battler][UnknownEnum.Value_31]][i] > global.monsters[battler][UnknownEnum.Value_1])
                     {
                         break;
                     }
@@ -3001,6 +3060,10 @@
                 var _exp = experience_to_give;
                 var MY_NAME = GET_DEX(0, 0);
                 battle_msg[0] = string(MY_NAME) + " " + localize_text_misc(93, "ui.txt") + " " + string(_exp) + " " + localize_text_misc(94, "ui.txt");
+                if (mon_level >= global.mon_max_level)
+                {
+                    battle_msg[0] = "";
+                }
             }
             global.monsters[battler][UnknownEnum.Value_2] = global.monsters[battler][UnknownEnum.Value_2] + experience_to_give;
             experience_to_give = 0;
@@ -3029,14 +3092,14 @@
                         max_experience = power(global.monsters[battler1][UnknownEnum.Value_1], 3);
                     }
                     var new_move = 0;
-                    for (var i = 1; i < array_length(global.movepool[global.monsters[battler1][0]]); i += 2)
-                    {
-                        if (global.movepool[global.monsters[battler1][0]][i] == global.monsters[battler1][UnknownEnum.Value_1])
+                    for (var i = 1; i < array_length(global.movepool[global.monsters[battler1][0] + global.monsters[battler1][UnknownEnum.Value_31]]); i += 2)
+                    {
+                        if (global.movepool[global.monsters[battler1][0] + global.monsters[battler1][UnknownEnum.Value_31]][i] == global.monsters[battler1][UnknownEnum.Value_1])
                         {
                             new_move++;
                             break;
                         }
-                        if (global.movepool[global.monsters[battler1][0]][i] > global.monsters[battler1][UnknownEnum.Value_1])
+                        if (global.movepool[global.monsters[battler1][0] + global.monsters[battler1][UnknownEnum.Value_31]][i] > global.monsters[battler1][UnknownEnum.Value_1])
                         {
                             break;
                         }
@@ -3070,6 +3133,10 @@
                     _exp = experience_to_give2;
                     MY_NAME = GET_DEX(2, 0);
                     battle_msg[1] = string(MY_NAME) + " " + localize_text_misc(93, "ui.txt") + " " + string(_exp) + " " + localize_text_misc(94, "ui.txt");
+                    if (mon_level1 >= global.mon_max_level)
+                    {
+                        battle_msg[1] = "";
+                    }
                 }
                 var _exp = experience_to_give2;
                 var MY_NAME = GET_DEX(2, 0);
@@ -3089,6 +3156,10 @@
             }
             menu = UnknownEnum.Value_15;
             alarm[0] = 180;
+            if (battle_msg[0] == "")
+            {
+                alarm[0] = 1;
+            }
             shiftover = 0;
             if (global.eparty[ebattler][UnknownEnum.Value_3] <= 0 && ebattler1 != -1)
             {
@@ -3099,6 +3170,16 @@
     case UnknownEnum.Value_15:
         if (alarm[0] == -1)
         {
+            for (var i = 1; i < array_length(battle_msg); i++)
+            {
+                if (battle_msg[i] != "")
+                {
+                    battle_msg[0] = battle_msg[i];
+                    battle_msg[i] = "";
+                    alarm[0] = 180;
+                    exit;
+                }
+            }
             if (battle_msg[1] == "")
             {
                 if (global.monsters[battler][UnknownEnum.Value_3] < 1)
@@ -3306,10 +3387,10 @@
         {
             if (trainer_offset < 144)
             {
-                trainer_offset += 3;
-            }
-        }
-        if (press(1004) && (trainer_offset >= 144 || !global.trainer))
+                trainer_offset += (3 + (6 * (held(1004) || global.battle_toggle)));
+            }
+        }
+        if ((press(1004) && trainer_offset >= 144) || !global.trainer)
         {
             var reward_money = 0;
             if (!global.trainer)
@@ -3335,26 +3416,23 @@
             global.moni = round(global.moni / 5) * 5;
             reward_money = round(reward_money);
             global.moni = round(global.moni);
-            if (floor(global.monsters[battler][UnknownEnum.Value_3]) > 0)
-            {
-                if (global.trainer)
-                {
-                    battle_msg[0] = localize_text_misc(97, "ui.txt") + " " + string(reward_money) + " " + localize_text_misc(98, "ui.txt");
-                    if (global.trainers[global.trainer_battling] >= 0)
-                    {
-                        global.trainers[global.trainer_battling]++;
-                    }
-                    if (global.quest_battle != -1)
-                    {
-                        global.quest[global.quest_battle] += 1;
-                    }
-                    if (global.elite_ranger_battle)
-                    {
-                        global.badges++;
-                    }
-                }
-                alarm[0] = 40;
-            }
+            battle_msg[0] = localize_text_misc(97, "ui.txt") + " " + string(reward_money) + " " + localize_text_misc(98, "ui.txt");
+            if (global.trainer)
+            {
+                if (global.trainers[global.trainer_battling] >= 0)
+                {
+                    global.trainers[global.trainer_battling]++;
+                }
+                if (global.quest_battle != -1)
+                {
+                    global.quest[global.quest_battle] += 1;
+                }
+                if (global.elite_ranger_battle)
+                {
+                    global.badges++;
+                }
+            }
+            alarm[0] = 60;
             menu = UnknownEnum.Value_23;
         }
         break;
@@ -3434,6 +3512,10 @@
             battle_msg[0] = "";
         }
         break;
+}
+if (press(1004) && alarm[0] > 5 && exists_in_list(menu, UnknownEnum.Value_14, UnknownEnum.Value_15))
+{
+    alarm[0] = 5;
 }
 if (alarm[0] > 0 && menu != UnknownEnum.Value_3 && menu != UnknownEnum.Value_2)
 {
@@ -3499,5 +3581,7 @@
     Value_23,
     Value_24,
     Value_28 = 28,
-    Value_32 = 32
+    Value_29,
+    Value_31 = 31,
+    Value_32
 }
--- old/code/gml_Object_obj_camera_Create_0.gml
+++ new/code/gml_Object_obj_camera_Create_0.gml
@@ -7,6 +7,8 @@
 mon_anim_t = 0;
 worldmap_curs_x = 0;
 worldmap_curs_y = 0;
+fly_mouse_x = -1;
+fly_mouse_y = -1;
 mon_hop = 1;
 alarm_set(3, 30);
 alarm_set(0, 1);
--- old/code/gml_Object_obj_camera_Draw_0.gml
+++ new/code/gml_Object_obj_camera_Draw_0.gml
@@ -323,7 +323,10 @@
             {
                 font(fn_quan);
             }
-            text(cx + 128, cy + 128, localize_text_misc(200, "ui.txt"));
+            if (fly_to == -1)
+            {
+                text(cx + 128, cy + 128, localize_text_misc(200, "ui.txt"));
+            }
             alpha();
             if (global.admin)
             {
@@ -371,6 +374,16 @@
             if (held(1002) && worldmap_curs_x < 256)
             {
                 worldmap_curs_x += mvspd;
+            }
+            if (fly_to != -1)
+            {
+                if (fly_mouse_x != -1 && (mouse_x != fly_mouse_x || mouse_y != fly_mouse_y))
+                {
+                    worldmap_curs_x = clamp(mouse_x - cx, 0, 256);
+                    worldmap_curs_y = clamp(mouse_y - cy, 0, 144);
+                }
+                fly_mouse_x = mouse_x;
+                fly_mouse_y = mouse_y;
             }
             looking_area = -1;
             i = 0;
@@ -754,10 +767,15 @@
                     wx = cx + ((global.world_x / room_width) * 256);
                     wy = cy + ((global.world_y / room_height) * 144) + 16;
             }
+            if (worldmap_curs_x == 0 && worldmap_curs_y == 0 && wx >= cx && wy >= cy)
+            {
+                worldmap_curs_x = clamp((wx - cx) + 4, 1, 256);
+                worldmap_curs_y = clamp((wy - cy) + 4, 1, 144);
+            }
             draw_sprite_part(spr_players_index, 0, 20, global.playable_character * 22, 20, 22, wx - 6, wy - 12);
             if (fly_to != -1 && looking_area != -1)
             {
-                if (press(1004) && worldmap_curs_x != 0 && worldmap_curs_y != 0)
+                if ((press(1004) || mouse()) && worldmap_curs_x != 0 && worldmap_curs_y != 0)
                 {
                     var _dest = flight_landing_lookup(looking_area);
                     if (_dest[0] != -1)
--- old/code/gml_Object_obj_fairy_checker_Create_0.gml
+++ new/code/gml_Object_obj_fairy_checker_Create_0.gml
@@ -1,13 +1,18 @@
 image_speed = 0;
-if (global.capture_data[target_monster] == 1)
+for (var i = target_monster; i < array_length(global.mondex); i++)
 {
-    image_index++;
+    if (global.capture_data[i] == 1)
+    {
+        image_index++;
+        break;
+    }
+    if (global.mondex[i][UnknownEnum.Value_13] <= 1)
+    {
+        break;
+    }
 }
-else if (global.capture_data[target_monster + 1] == 1)
+
+enum UnknownEnum
 {
-    image_index++;
+    Value_13 = 13
 }
-else if (global.capture_data[target_monster + 2] == 1)
-{
-    image_index++;
-}
--- old/code/gml_Object_obj_globals_Create_0.gml
+++ new/code/gml_Object_obj_globals_Create_0.gml
@@ -215,6 +215,7 @@
     {
         global.vsync = ini_read_real("Player", "VSync", global.vsync);
     }
+    global.CAPS_LOCKED = ini_read_real("Player", "Always Run", global.CAPS_LOCKED);
     alarm_set(2, 2);
     ini_close();
     audio_master_gain(global.VOLUME);
--- old/code/gml_Object_obj_globals_Step_0.gml
+++ new/code/gml_Object_obj_globals_Step_0.gml
@@ -78,6 +78,7 @@
 if (press(20))
 {
     global.CAPS_LOCKED = 1 - global.CAPS_LOCKED;
+    SAVE_SETTINGS();
 }
 if (press(80) && (global.admin || held(162)))
 {
--- old/code/gml_Object_obj_language_Draw_0.gml
+++ new/code/gml_Object_obj_language_Draw_0.gml
@@ -201,6 +201,10 @@
     {
         trigger = 1;
         global.language = sel;
+        if (global.language == 1 && !global.MOBILE)
+        {
+            global.hd_font = 1;
+        }
         sfx(snd_select);
         global.running_lang = 0;
         if (global.language == 2 || global.language == 4 || global.language == 3)
--- old/code/gml_Object_obj_open_flight_Step_0.gml
+++ new/code/gml_Object_obj_open_flight_Step_0.gml
@@ -14,6 +14,7 @@
                 looking_area = -1;
                 worldmap_curs_x = 0;
                 worldmap_curs_y = 0;
+                fly_mouse_x = -1;
             }
             clear(1004);
         }
--- old/code/gml_Object_obj_opening_scene_Draw_0.gml
+++ new/code/gml_Object_obj_opening_scene_Draw_0.gml
@@ -1,4 +1,4 @@
-if (press(32) || press(27) || mouse())
+if (press(32) || press(27) || press(1004) || mouse())
 {
     room_goto(rm_title);
     exit;
--- old/code/gml_Object_obj_player_Create_0.gml
+++ new/code/gml_Object_obj_player_Create_0.gml
@@ -67,6 +67,10 @@
             global.badges = 8;
         }
     }
+}
+if (global.quest[0] == 34 && global.badges < 8 && global.trainers[120] == 0)
+{
+    global.quest[0] = 33;
 }
 if (global.quest[0] == 31 && global.trainers[76] > 0)
 {
--- old/code/gml_Object_obj_player_Step_0.gml
+++ new/code/gml_Object_obj_player_Step_0.gml
@@ -117,6 +117,7 @@
         if (press(1005))
         {
             global.CAPS_LOCKED = 1 - global.CAPS_LOCKED;
+            SAVE_SETTINGS();
         }
     }
     if (object_index != asset_get_index("obj_maiko") && (keyboard_check(vk_shift) || held(1005) || gamepad_button_check(0, gp_stickl) || global.CAPS_LOCKED))
@@ -189,7 +190,7 @@
         {
             moving = 0;
             instance_activate_region(x - 256, y - 144, 512, 288, 1);
-            if (layer_exists("Grass") && !global.hovercraft)
+            if (layer_exists("Grass") && !global.hovercraft && object_index != asset_get_index("obj_maiko"))
             {
                 if (tile_meeting(x, y, "Grass") && !place_meeting(x, y, obj_cutscene_trigger))
                 {
--- old/code/gml_Object_obj_title_Draw_0.gml
+++ new/code/gml_Object_obj_title_Draw_0.gml
@@ -1,4 +1,4 @@
-if (keyboard_check_pressed(vk_escape) || press(1005))
+if (keyboard_check_pressed(vk_escape) || (global.MOBILE && press(1005)))
 {
     game_end();
 }
--- old/code/gml_Object_par_door_Step_0.gml
+++ new/code/gml_Object_par_door_Step_0.gml
@@ -1,3 +1,7 @@
+if (instance_exists(obj_battle_transition))
+{
+    exit;
+}
 if (place_meeting(x, y, obj_player) && !global.hovercraft)
 {
     if (obj_player.moving != 0)
--- old/code/gml_RoomCC_rm_worldmap_645_Create.gml
+++ new/code/gml_RoomCC_rm_worldmap_645_Create.gml
@@ -6,3 +6,7 @@
 {
     destroy();
 }
+if (global.badges < 8)
+{
+    destroy();
+}
--- old/code/gml_RoomCC_rm_worldmap_702_Create.gml
+++ new/code/gml_RoomCC_rm_worldmap_702_Create.gml
@@ -15,7 +15,7 @@
 {
     mon_check++;
 }
-if (global.capture_data[UnknownEnum.Value_115] == 1 || global.capture_data[UnknownEnum.Value_116] == 1 || global.capture_data[UnknownEnum.Value_117] == 1)
+if (global.capture_data[UnknownEnum.Value_115] == 1 || global.capture_data[UnknownEnum.Value_116] == 1 || global.capture_data[UnknownEnum.Value_117] == 1 || global.capture_data[UnknownEnum.Value_118] == 1 || global.capture_data[UnknownEnum.Value_119] == 1)
 {
     mon_check++;
 }
@@ -29,7 +29,9 @@
     Value_115 = 115,
     Value_116,
     Value_117,
-    Value_120 = 120,
+    Value_118,
+    Value_119,
+    Value_120,
     Value_121,
     Value_122,
     Value_123,
--- old/code/gml_RoomCC_rm_worldmap_707_PreCreate.gml
+++ new/code/gml_RoomCC_rm_worldmap_707_PreCreate.gml
@@ -1 +1 @@
-self.target_monster = 117;
+self.target_monster = 115;
--- old/code/gml_RoomCC_rm_worldmap_708_PreCreate.gml
+++ new/code/gml_RoomCC_rm_worldmap_708_PreCreate.gml
@@ -1 +1 @@
-self.target_monster = 122;
+self.target_monster = 120;
--- old/code/gml_RoomCC_rm_worldmap_709_PreCreate.gml
+++ new/code/gml_RoomCC_rm_worldmap_709_PreCreate.gml
@@ -1 +1 @@
-self.target_monster = 125;
+self.target_monster = 123;
--- old/code/gml_RoomCC_rm_worldmap_710_PreCreate.gml
+++ new/code/gml_RoomCC_rm_worldmap_710_PreCreate.gml
@@ -1 +1 @@
-self.target_monster = 128;
+self.target_monster = 126;
--- old/code/gml_RoomCC_rm_worldmap_711_Create.gml
+++ new/code/gml_RoomCC_rm_worldmap_711_Create.gml
@@ -15,7 +15,7 @@
 {
     mon_check++;
 }
-if (global.capture_data[UnknownEnum.Value_115] == 1 || global.capture_data[UnknownEnum.Value_116] == 1 || global.capture_data[UnknownEnum.Value_117] == 1)
+if (global.capture_data[UnknownEnum.Value_115] == 1 || global.capture_data[UnknownEnum.Value_116] == 1 || global.capture_data[UnknownEnum.Value_117] == 1 || global.capture_data[UnknownEnum.Value_118] == 1 || global.capture_data[UnknownEnum.Value_119] == 1)
 {
     mon_check++;
 }
@@ -29,7 +29,9 @@
     Value_115 = 115,
     Value_116,
     Value_117,
-    Value_120 = 120,
+    Value_118,
+    Value_119,
+    Value_120,
     Value_121,
     Value_122,
     Value_123,
--- old/Localization/english_items.txt
+++ new/Localization/english_items.txt
@@ -83,7 +83,7 @@
 55 She suddenly cracked out of the Ember Soul. She's following you around!

 56 Theft Captal
-57 Lets you steal monsters from other Rangers. The battle ends on use.
+57 Steals a Bound monster from a Ranger, in single battles only. The battle ends on use.

 58 Orb Shards
 59 Apparently you can level up your monsters with this? Neat!
--- old/Localization/english_ui.txt
+++ new/Localization/english_ui.txt
@@ -287,8 +287,8 @@
 346 Change the difficulty of battles. Default: Normal
 347 Monsters will faint and can be revived. Default: Faint
 348 Monsters permanently disappear upon reaching 0 HP. Default: Faint
-349 There is no monsters capture limit
-350 You can only capture and use up to 6 monsters
+349 You can capture and use as many monsters as you need
+350 WARNING: You will only be able capture 6 monsters total (hyper difficulty)

 351 Dokimon
 352 Disable Partner Death

Build 2026-09-12

Depot diff · no patch notesmanifest 6323404005526619670

Move selection corrects negative mana

  • Selecting a move now restores a negative mana value to that move’s maximum, the same limit already used when the existing value is too high.

No database facts or entity pages changed in this build.

Under the hood and the raw diff
  • The wiki’s monster, move, item, area, element and movepool data did not change in this build; no database pages needed new values.
  • The depot localization files and exported sprite frames are unchanged.

The only changed decompiled code entry, this build against manifest 8218454595439510790. Source: Steam depot 2019301.

--- a/CodeEntries/gml_GlobalScript_monster_manipulation.gml (manifest 8218454595439510790)
+++ b/CodeEntries/gml_GlobalScript_monster_manipulation.gml (manifest 6323404005526619670)
@@ -1273,7 +1273,7 @@
             global.monsters[sel[1]][UnknownEnum.Value_10 + (sel[3] - 1)] = global.movepool[mon_num][sel[4] - 1];
             var move_mana = global.movedex[global.movepool[mon_num][sel[4] - 1]][UnknownEnum.Value_9];
             var temp_mana = global.monsters[sel[1]][UnknownEnum.Value_14 + (sel[3] - 1)];
-            if (temp_mana > move_mana)
+            if (temp_mana > move_mana || temp_mana < 0)
             {
                 global.monsters[sel[1]][UnknownEnum.Value_14 + (sel[3] - 1)] = move_mana;
             }

Build 2026-09-10

Steam patch notesmanifest 8218454595439510790Read the patch notes on Steam →

Movepools rebuilt, 38 new moves and signature moves

  • All 144 Dokimon now receive an individual level-up learnset generated from their stats and elements instead of sharing a fixed element-wide pool.
  • 38 moves were added, expanding the move database from 105 to 143.
  • 61 Dokimon received explicit signature additions: 85 move-and-level assignments in total.
  • Move selection now distinguishes Physical, Magical and Hybrid attackers, and balances damage against utility for Attacker, General and Enchanter classes.

Wiki pages updated: All Dokimon and their rebuilt learnsets · Moves — 143 entries · Mechanics — generated learnsets · Type chart — element notes

Under the hood and the raw diff

Unified diff of the movepool generator, move definitions and English move text used by the wiki, this build against manifest 6853406165080485270.

diff --git a/data/raw/gml/gml_GlobalScript_assign_movepools.gml b/data/raw/gml/gml_GlobalScript_assign_movepools.gml
index 11fdd7f..fcd8ad4 100644
--- a/data/raw/gml/gml_GlobalScript_assign_movepools.gml
+++ b/data/raw/gml/gml_GlobalScript_assign_movepools.gml
@@ -1,144 +1,578 @@
-function assign_movepools()
+function MOVEPOOL_LEVELS()
 {
-    for (var i = 0; i < array_length(global.mondex); i++)
+    return [1, 1, 3, 5, 7, 9, 11, 13, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 44, 46, 48, 51, 54];
+}
+
+function MOVE_IS_DAMAGE()
+{
+    return global.movedex[argument[0]][UnknownEnum.Value_4] > 0;
+}
+
+function MOVE_IS_UTILITY()
+{
+    var _move = argument[0];
+    if (MOVE_IS_DAMAGE(_move))
     {
-        var my_element1 = global.mondex[i][UnknownEnum.Value_7];
-        var my_element2 = global.mondex[i][UnknownEnum.Value_8];
-        if (my_element2 == -1)
+        return false;
+    }
+    if (global.movedex[_move][UnknownEnum.Value_5] > 0)
+    {
+        return true;
+    }
+    if (global.movedex[_move][UnknownEnum.Value_31] > 0)
+    {
+        return true;
+    }
+    if (global.movedex[_move][UnknownEnum.Value_11] > 0)
+    {
+        return true;
+    }
+    if (global.movedex[_move][UnknownEnum.Value_39] > 0)
+    {
+        return true;
+    }
+    if (global.movedex[_move][UnknownEnum.Value_40] > 0)
+    {
+        return true;
+    }
+    if (global.movedex[_move][UnknownEnum.Value_16] > 0)
+    {
+        var i = UnknownEnum.Value_17;
+        while (i <= UnknownEnum.Value_30)
         {
-            switch (my_element1)
+            if (global.movedex[_move][i] != 0)
             {
-                case UnknownEnum.Value_0:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_36, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_2, 4, UnknownEnum.Value_37, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_38, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_65, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_40, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_41, 28, UnknownEnum.Value_71, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_39, 40, UnknownEnum.Value_80, 44);
-                    break;
-                case UnknownEnum.Value_1:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_18, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_2, 4, UnknownEnum.Value_21, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_19, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_25, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_20, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_23, 28, UnknownEnum.Value_22, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_26, 40, UnknownEnum.Value_27, 44);
-                    break;
-                case UnknownEnum.Value_2:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_28, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_2, 4, UnknownEnum.Value_29, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_30, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_31, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_34, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_33, 28, UnknownEnum.Value_32, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_35, 40, UnknownEnum.Value_98, 44);
-                    break;
-                case UnknownEnum.Value_5:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_4, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_2, 4, UnknownEnum.Value_10, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_16, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_13, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_11, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_12, 28, UnknownEnum.Value_14, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_17, 40, UnknownEnum.Value_57, 44);
-                    break;
-                case UnknownEnum.Value_3:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_42, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_2, 4, UnknownEnum.Value_44, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_43, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_45, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_46, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_47, 28, UnknownEnum.Value_48, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_37, 40, UnknownEnum.Value_41, 44);
-                    break;
-                case UnknownEnum.Value_4:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_69, 1, UnknownEnum.Value_63, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_62, 4, UnknownEnum.Value_70, 5, UnknownEnum.Value_94, 8, UnknownEnum.Value_71, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_67, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_79, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_66, 28, UnknownEnum.Value_70, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_65, 40, UnknownEnum.Value_96, 44);
-                    break;
-                case UnknownEnum.Value_11:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_91, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_94, 4, UnknownEnum.Value_93, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_96, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_92, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_95, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_3, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_90, 28, UnknownEnum.Value_73, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_70, 40, UnknownEnum.Value_85, 44);
-                    break;
-                case UnknownEnum.Value_7:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_56, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_3, 3, UnknownEnum.Value_2, 4, UnknownEnum.Value_57, 5, UnknownEnum.Value_6, 8, UnknownEnum.Value_58, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_59, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_71, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_60, 28, UnknownEnum.Value_63, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_61, 40, UnknownEnum.Value_30, 44);
-                    break;
-                case UnknownEnum.Value_6:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_49, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_2, 4, UnknownEnum.Value_50, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_51, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_52, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_53, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_55, 28, UnknownEnum.Value_94, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_54, 40, UnknownEnum.Value_48, 44);
-                    break;
-                case UnknownEnum.Value_8:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_72, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_2, 4, UnknownEnum.Value_73, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_74, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_19, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_75, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_76, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_77, 28, UnknownEnum.Value_70, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_79, 40, UnknownEnum.Value_90, 44);
-                    break;
-                case UnknownEnum.Value_10:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_86, 1, UnknownEnum.Value_4, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_2, 3, UnknownEnum.Value_18, 4, UnknownEnum.Value_88, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_10, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_55, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_93, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_87, 28, UnknownEnum.Value_97, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_89, 40, UnknownEnum.Value_73, 44);
-                    break;
-                case UnknownEnum.Value_9:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_83, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_3, 4, UnknownEnum.Value_82, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_84, 11, UnknownEnum.Value_38, 13, UnknownEnum.Value_81, 15, UnknownEnum.Value_71, 15, UnknownEnum.Value_80, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_41, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_53, 28, UnknownEnum.Value_85, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_54, 40, UnknownEnum.Value_39, 44);
-                    break;
-                case UnknownEnum.Value_12:
-                    BUILD_MONSTER_MOVEPOOL(i, UnknownEnum.Value_97, 1, UnknownEnum.Value_0, 2, UnknownEnum.Value_1, 3, UnknownEnum.Value_94, 4, UnknownEnum.Value_28, 5, UnknownEnum.Value_62, 8, UnknownEnum.Value_98, 11, UnknownEnum.Value_64, 13, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_99, 17, UnknownEnum.Value_15, 19, UnknownEnum.Value_100, 22, UnknownEnum.Value_9, 25, UnknownEnum.Value_102, 28, UnknownEnum.Value_101, 32, UnknownEnum.Value_7, 36, UnknownEnum.Value_103, 40, UnknownEnum.Value_29, 44);
-                    break;
+                return true;
             }
+            i++;
+        }
+    }
+    return false;
+}
+
+function GET_ATTACK_STYLE()
+{
+    var _mon = argument[0];
+    var _atk = global.mondex[_mon][UnknownEnum.Value_2];
+    var _mgk = global.mondex[_mon][UnknownEnum.Value_4];
+    var _hi = max(_atk, _mgk);
+    var _lo = min(_atk, _mgk);
+    if (_lo >= (_hi * 0.85))
+    {
+        return UnknownEnum.Value_2;
+    }
+    if (_atk > _mgk)
+    {
+        return UnknownEnum.Value_0;
+    }
+    return UnknownEnum.Value_1;
+}
+
+function GET_ATTACK_CLASS()
+{
+    var _mon = argument[0];
+    var _off = max(global.mondex[_mon][UnknownEnum.Value_2], global.mondex[_mon][UnknownEnum.Value_4]);
+    var _bulk = global.mondex[_mon][UnknownEnum.Value_3] + global.mondex[_mon][UnknownEnum.Value_5] + (global.mondex[_mon][UnknownEnum.Value_1] * 0.5);
+    if (_bulk <= 0)
+    {
+        return UnknownEnum.Value_1;
+    }
+    var _ratio = _off / _bulk;
+    if (_ratio >= 0.63)
+    {
+        return UnknownEnum.Value_0;
+    }
+    if (_ratio <= 0.5)
+    {
+        return UnknownEnum.Value_2;
+    }
+    return UnknownEnum.Value_1;
+}
+
+function MOVEPOOL_GATHER()
+{
+    var _element = argument[0];
+    var _mode = argument[1];
+    var _wanted = argument[2];
+    var _out = [];
+    for (var i = 0; i < array_length(global.movedex); i++)
+    {
+        if (global.movedex[i][UnknownEnum.Value_7] != _element)
+        {
+            continue;
+        }
+        if (_mode == 2)
+        {
+            if (MOVE_IS_UTILITY(i))
+            {
+                array_push(_out, i);
+            }
+        }
+        else if (!MOVE_IS_DAMAGE(i))
+        {
+        }
+        else if (global.movedex[i][UnknownEnum.Value_5] >= global.movedex[i][UnknownEnum.Value_4])
+        {
         }
         else
         {
-            CLEAR_MONSTER_MOVEPOOL(i);
-            ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_0, 3, UnknownEnum.Value_1, 4, UnknownEnum.Value_2, 7, UnknownEnum.Value_62, 11, UnknownEnum.Value_5, 15, UnknownEnum.Value_8, 15, UnknownEnum.Value_15, 22, UnknownEnum.Value_7, 36);
-            switch (my_element1)
+            var _match = global.movedex[i][UnknownEnum.Value_8] == _wanted;
+            if ((_mode == 0 && _match) || (_mode == 1 && !_match))
             {
-                case UnknownEnum.Value_0:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_37, 1, UnknownEnum.Value_38, 5, UnknownEnum.Value_41, 16, UnknownEnum.Value_40, 26, UnknownEnum.Value_39, 36, UnknownEnum.Value_80, 45);
-                    break;
-                case UnknownEnum.Value_1:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_21, 1, UnknownEnum.Value_19, 5, UnknownEnum.Value_20, 16, UnknownEnum.Value_23, 26, UnknownEnum.Value_22, 36, UnknownEnum.Value_95, 45);
-                    break;
-                case UnknownEnum.Value_2:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_29, 1, UnknownEnum.Value_30, 5, UnknownEnum.Value_34, 16, UnknownEnum.Value_32, 26, UnknownEnum.Value_35, 36, UnknownEnum.Value_98, 45);
-                    break;
-                case UnknownEnum.Value_5:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_16, 1, UnknownEnum.Value_9, 5, UnknownEnum.Value_12, 16, UnknownEnum.Value_11, 26, UnknownEnum.Value_17, 36, UnknownEnum.Value_13, 45);
-                    break;
-                case UnknownEnum.Value_3:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_44, 1, UnknownEnum.Value_47, 5, UnknownEnum.Value_43, 16, UnknownEnum.Value_45, 26, UnknownEnum.Value_48, 36, UnknownEnum.Value_41, 45);
-                    break;
-                case UnknownEnum.Value_4:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_69, 1, UnknownEnum.Value_63, 5, UnknownEnum.Value_67, 16, UnknownEnum.Value_79, 26, UnknownEnum.Value_66, 36, UnknownEnum.Value_96, 45);
-                    break;
-                case UnknownEnum.Value_11:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_91, 1, UnknownEnum.Value_93, 5, UnknownEnum.Value_96, 16, UnknownEnum.Value_63, 26, UnknownEnum.Value_69, 36, UnknownEnum.Value_70, 45);
-                    break;
-                case UnknownEnum.Value_7:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_56, 1, UnknownEnum.Value_57, 5, UnknownEnum.Value_58, 16, UnknownEnum.Value_15, 26, UnknownEnum.Value_60, 36, UnknownEnum.Value_30, 45);
-                    break;
-                case UnknownEnum.Value_6:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_49, 1, UnknownEnum.Value_50, 5, UnknownEnum.Value_51, 16, UnknownEnum.Value_52, 26, UnknownEnum.Value_54, 36, UnknownEnum.Value_94, 45);
-                    break;
-                case UnknownEnum.Value_8:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_72, 1, UnknownEnum.Value_73, 5, UnknownEnum.Value_75, 16, UnknownEnum.Value_76, 26, UnknownEnum.Value_77, 36, UnknownEnum.Value_79, 45);
-                    break;
-                case UnknownEnum.Value_10:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_86, 1, UnknownEnum.Value_88, 5, UnknownEnum.Value_55, 16, UnknownEnum.Value_93, 26, UnknownEnum.Value_89, 36, UnknownEnum.Value_97, 45);
-                    break;
-                case UnknownEnum.Value_9:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_83, 1, UnknownEnum.Value_3, 5, UnknownEnum.Value_82, 16, UnknownEnum.Value_84, 26, UnknownEnum.Value_80, 36, UnknownEnum.Value_85, 45);
-                    break;
-                case UnknownEnum.Value_12:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_97, 1, UnknownEnum.Value_98, 5, UnknownEnum.Value_99, 16, UnknownEnum.Value_100, 26, UnknownEnum.Value_102, 36, UnknownEnum.Value_101, 45);
-                    break;
+                array_push(_out, i);
             }
-            switch (my_element2)
+        }
+    }
+    for (var a = 1; a < array_length(_out); a++)
+    {
+        var _value = _out[a];
+        var _key = global.movedex[_value][UnknownEnum.Value_4];
+        if (_mode == 2)
+        {
+            _key = -global.movedex[_value][UnknownEnum.Value_9];
+        }
+        var b = a - 1;
+        while (b >= 0)
+        {
+            var _compare = global.movedex[_out[b]][UnknownEnum.Value_4];
+            if (_mode == 2)
+            {
+                _compare = -global.movedex[_out[b]][UnknownEnum.Value_9];
+            }
+            if (_compare <= _key)
             {
-                case UnknownEnum.Value_0:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_36, 2, UnknownEnum.Value_37, 8, UnknownEnum.Value_38, 16, UnknownEnum.Value_41, 26, UnknownEnum.Value_40, 36);
-                    break;
-                case UnknownEnum.Value_1:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_18, 2, UnknownEnum.Value_21, 8, UnknownEnum.Value_19, 16, UnknownEnum.Value_20, 26, UnknownEnum.Value_23, 36);
-                    break;
-                case UnknownEnum.Value_2:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_28, 2, UnknownEnum.Value_29, 8, UnknownEnum.Value_30, 16, UnknownEnum.Value_34, 26, UnknownEnum.Value_98, 36);
-                    break;
-                case UnknownEnum.Value_5:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_4, 2, UnknownEnum.Value_16, 8, UnknownEnum.Value_9, 16, UnknownEnum.Value_12, 26, UnknownEnum.Value_13, 36);
-                    break;
-                case UnknownEnum.Value_3:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_42, 2, UnknownEnum.Value_44, 8, UnknownEnum.Value_47, 16, UnknownEnum.Value_45, 26, UnknownEnum.Value_48, 36);
-                    break;
-                case UnknownEnum.Value_4:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_69, 2, UnknownEnum.Value_63, 8, UnknownEnum.Value_67, 16, UnknownEnum.Value_79, 26, UnknownEnum.Value_96, 36);
-                    break;
-                case UnknownEnum.Value_11:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_91, 2, UnknownEnum.Value_93, 8, UnknownEnum.Value_96, 16, UnknownEnum.Value_63, 26, UnknownEnum.Value_69, 36);
-                    break;
-                case UnknownEnum.Value_7:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_56, 2, UnknownEnum.Value_57, 8, UnknownEnum.Value_58, 16, UnknownEnum.Value_15, 26, UnknownEnum.Value_60, 36);
-                    break;
-                case UnknownEnum.Value_6:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_49, 2, UnknownEnum.Value_50, 8, UnknownEnum.Value_51, 16, UnknownEnum.Value_52, 26, UnknownEnum.Value_54, 36);
-                    break;
-                case UnknownEnum.Value_8:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_72, 2, UnknownEnum.Value_73, 8, UnknownEnum.Value_75, 16, UnknownEnum.Value_76, 26, UnknownEnum.Value_77, 36);
-                    break;
-                case UnknownEnum.Value_10:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_86, 2, UnknownEnum.Value_88, 8, UnknownEnum.Value_55, 16, UnknownEnum.Value_93, 26, UnknownEnum.Value_89, 36);
-                    break;
-                case UnknownEnum.Value_9:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_83, 2, UnknownEnum.Value_3, 8, UnknownEnum.Value_82, 16, UnknownEnum.Value_84, 26, UnknownEnum.Value_80, 36);
-                    break;
-                case UnknownEnum.Value_12:
-                    ADDTO_MONSTER_MOVEPOOL(i, UnknownEnum.Value_97, 2, UnknownEnum.Value_102, 8, UnknownEnum.Value_99, 16, UnknownEnum.Value_100, 26, UnknownEnum.Value_98, 36);
-                    break;
+                break;
             }
+            _out[b + 1] = _out[b];
+            b--;
+        }
+        _out[b + 1] = _value;
+    }
+    return _out;
+}
+
+function MOVEPOOL_SPREAD()
+{
+    var _list = argument[0];
+    var _want = argument[1];
+    var _offset = argument[2];
+    var _picked = argument[3];
+    if (_want <= 0 || array_length(_list) <= 0)
+    {
+        return _picked;
+    }
+    var _len = array_length(_list);
+    if (_want >= _len)
+    {
+        for (var i = 0; i < _len; i++)
+        {
+            if (array_get_index(_picked, _list[i]) == -1)
+            {
+                array_push(_picked, _list[i]);
+            }
+        }
+        return _picked;
+    }
+    var _step = _len / _want;
+    for (var k = 0; k < _want; k++)
+    {
+        var _index = (floor(k * _step) + (_offset % max(1, floor(_step) + 1))) % _len;
+        for (var _tries = 0; array_get_index(_picked, _list[_index]) != -1 && _tries < _len; _tries++)
+        {
+            _index = (_index + 1) % _len;
+        }
+        if (array_get_index(_picked, _list[_index]) == -1)
+        {
+            array_push(_picked, _list[_index]);
+        }
+    }
+    return _picked;
+}
+
+function MOVEPOOL_COVER()
+{
+    var _mon = argument[0];
+    var _wanted = argument[1];
+    var _mine = argument[2];
+    var _picked = argument[3];
+    var _cover = [];
+    var _order = [];
+    for (var i = 0; i < 13; i++)
+    {
+        var _e = (i + _mon) % 13;
+        if (array_get_index(_mine, _e) == -1)
+        {
+            array_push(_order, _e);
         }
     }
+    for (var _mode = 0; _mode < 2; _mode++)
+    {
+        for (var i = 0; i < array_length(_order); i++)
+        {
+            if (array_length(_cover) >= 4)
+            {
+                break;
+            }
+            var _list = MOVEPOOL_GATHER(_order[i], _mode, _wanted);
+            var _free = [];
+            for (var o = 0; o < array_length(_list); o++)
+            {
+                if (array_get_index(_picked, _list[o]) == -1 && array_get_index(_cover, _list[o]) == -1)
+                {
+                    array_push(_free, _list[o]);
+                }
+            }
+            if (array_length(_free) > 1)
+            {
+                array_resize(_free, array_length(_free) - 1);
+            }
+            _cover = MOVEPOOL_SPREAD(_free, 1, _mon, _cover);
+        }
+        if (array_length(_cover) >= 4)
+        {
+            break;
+        }
+    }
+    return _cover;
+}
+
+function BUILD_ELEMENT_MOVEPOOL()
+{
+    var _mon = argument[0];
+    var _style = GET_ATTACK_STYLE(_mon);
+    var _class = GET_ATTACK_CLASS(_mon);
+    var _e1 = global.mondex[_mon][UnknownEnum.Value_7];
+    var _e2 = global.mondex[_mon][UnknownEnum.Value_8];
+    if (_e2 == -1)
+    {
+        _e2 = UnknownEnum.Value_5;
+    }
+    var _n_damage = 11;
+    var _n_utility = 8;
+    if (_class == UnknownEnum.Value_0)
+    {
+        _n_damage = 13;
+        _n_utility = 6;
+    }
+    if (_class == UnknownEnum.Value_2)
+    {
+        _n_damage = 8;
+        _n_utility = 11;
+    }
+    var _wanted = UnknownEnum.Value_1;
+    if (_style == UnknownEnum.Value_0 || _style == UnknownEnum.Value_2)
+    {
+        _wanted = UnknownEnum.Value_0;
+    }
+    var _n_match = round(_n_damage * 0.85);
+    if (_style == UnknownEnum.Value_2)
+    {
+        _n_match = _n_damage div 2;
+    }
+    var _sources = [_e1, _e2, UnknownEnum.Value_5];
+    var _damage = [];
+    if (_e2 != _e1)
+    {
+        var _second = min(4, _n_damage);
+        _damage = MOVEPOOL_SPREAD(MOVEPOOL_GATHER(_e2, 0, _wanted), _second, _mon, _damage);
+        if (array_length(_damage) < _second)
+        {
+            _damage = MOVEPOOL_SPREAD(MOVEPOOL_GATHER(_e2, 1, _wanted), _second - array_length(_damage), _mon, _damage);
+        }
+    }
+    for (var s = 0; s < 3; s++)
+    {
+        if (array_length(_damage) >= _n_match)
+        {
+            break;
+        }
+        _damage = MOVEPOOL_SPREAD(MOVEPOOL_GATHER(_sources[s], 0, _wanted), _n_match - array_length(_damage), _mon, _damage);
+    }
+    for (var s = 0; s < 3; s++)
+    {
+        if (array_length(_damage) >= _n_damage)
+        {
+            break;
+        }
+        _damage = MOVEPOOL_SPREAD(MOVEPOOL_GATHER(_sources[s], 1, _wanted), _n_damage - array_length(_damage), _mon, _damage);
+    }
+    for (var s = 0; s < 3; s++)
+    {
+        if (array_length(_damage) >= _n_damage)
+        {
+            break;
+        }
+        _damage = MOVEPOOL_SPREAD(MOVEPOOL_GATHER(_sources[s], 0, _wanted), _n_damage - array_length(_damage), _mon, _damage);
+    }
+    var _cover = MOVEPOOL_COVER(_mon, _wanted, _sources, _damage);
+    for (var i = 0; i < array_length(_cover); i++)
+    {
+        array_push(_damage, _cover[i]);
+    }
+    var _utility = [];
+    var _utility_sources = [_e2, _e1, UnknownEnum.Value_5];
+    for (var s = 0; s < 3; s++)
+    {
+        if (array_length(_utility) >= _n_utility)
+        {
+            break;
+        }
+        _utility = MOVEPOOL_SPREAD(MOVEPOOL_GATHER(_utility_sources[s], 2, _wanted), _n_utility - array_length(_utility), _mon, _utility);
+    }
+    for (var a = 1; a < array_length(_damage); a++)
+    {
+        var _value = _damage[a];
+        var b = a - 1;
+        while (b >= 0 && global.movedex[_damage[b]][UnknownEnum.Value_4] > global.movedex[_value][UnknownEnum.Value_4])
+        {
+            _damage[b + 1] = _damage[b];
+            b--;
+        }
+        _damage[b + 1] = _value;
+    }
+    var _levels = MOVEPOOL_LEVELS();
+    var _total = min(array_length(_levels), array_length(_damage) + array_length(_utility));
+    var _slots = array_create(_total, -1);
+    if (array_length(_utility) > 0 && _total > 1)
+    {
+        var _ustep = (_total - 1) / array_length(_utility);
+        for (var k = 0; k < array_length(_utility); k++)
+        {
+            var _pos = min(_total - 1, 1 + floor(k * _ustep));
+            while (_pos < _total && _slots[_pos] != -1)
+            {
+                _pos++;
+            }
+            if (_pos < _total)
+            {
+                _slots[_pos] = _utility[k];
+            }
+        }
+    }
+    var _d = 0;
+    for (p = 0; p < _total; p++)
+    {
+        if (_slots[p] == -1 && _d < array_length(_damage))
+        {
+            _slots[p] = _damage[_d];
+            _d++;
+        }
+    }
+    CLEAR_MONSTER_MOVEPOOL(_mon);
+    var p = 0;
+    var _w = 0;
+    while (p < _total)
+    {
+        if (_slots[p] == -1)
+        {
+        }
+        else
+        {
+            global.movepool[_mon][_w] = _slots[p];
+            global.movepool[_mon][_w + 1] = _levels[p];
+            _w += 2;
+        }
+        p++;
+    }
+}
+
+function MOVEPOOL_SIGNATURE()
+{
+    switch (argument[0])
+    {
+        case UnknownEnum.Value_0:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_86, 10);
+            break;
+        case UnknownEnum.Value_2:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_16, 26, UnknownEnum.Value_89, 46);
+            break;
+        case UnknownEnum.Value_5:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_68, 26, UnknownEnum.Value_64, 35, UnknownEnum.Value_95, 47);
+            break;
+        case UnknownEnum.Value_7:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_72, 17);
+            break;
+        case UnknownEnum.Value_8:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_103, 20, UnknownEnum.Value_126, 31, UnknownEnum.Value_59, 51);
+            break;
+        case UnknownEnum.Value_11:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_91, 46);
+            break;
+        case UnknownEnum.Value_12:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_18, 5);
+            break;
+        case UnknownEnum.Value_13:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_60, 11, UnknownEnum.Value_111, 31, UnknownEnum.Value_17, 50);
+            break;
+        case UnknownEnum.Value_18:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_119, 11);
+            break;
+        case UnknownEnum.Value_19:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_95, 45);
+            break;
+        case UnknownEnum.Value_23:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_9, 46);
+            break;
+        case UnknownEnum.Value_28:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_68, 14);
+            break;
+        case UnknownEnum.Value_29:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_110, 40);
+            break;
+        case UnknownEnum.Value_30:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_19, 11);
+            break;
+        case UnknownEnum.Value_34:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_113, 14);
+            break;
+        case UnknownEnum.Value_35:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_114, 34);
+            break;
+        case UnknownEnum.Value_37:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_125, 26);
+            break;
+        case UnknownEnum.Value_42:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_88, 46);
+            break;
+        case UnknownEnum.Value_43:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_19, 10);
+            break;
+        case UnknownEnum.Value_44:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_59, 50);
+            break;
+        case UnknownEnum.Value_49:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_130, 13);
+            break;
+        case UnknownEnum.Value_50:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_23, 27);
+            break;
+        case UnknownEnum.Value_51:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_79, 45);
+            break;
+        case UnknownEnum.Value_56:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_31, 11);
+            break;
+        case UnknownEnum.Value_60:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_112, 10);
+            break;
+        case UnknownEnum.Value_64:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_73, 22);
+            break;
+        case UnknownEnum.Value_65:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_112, 26);
+            break;
+        case UnknownEnum.Value_67:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_48, 20);
+            break;
+        case UnknownEnum.Value_68:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_35, 46);
+            break;
+        case UnknownEnum.Value_73:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_115, 10);
+            break;
+        case UnknownEnum.Value_74:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_19, 8);
+            break;
+        case UnknownEnum.Value_80:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_86, 22);
+            break;
+        case UnknownEnum.Value_81:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_123, 4);
+            break;
+        case UnknownEnum.Value_86:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_96, 10);
+            break;
+        case UnknownEnum.Value_91:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_119, 35);
+            break;
+        case UnknownEnum.Value_99:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_28, 13);
+            break;
+        case UnknownEnum.Value_100:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_30, 40);
+            break;
+        case UnknownEnum.Value_102:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_55, 35);
+            break;
+        case UnknownEnum.Value_106:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_77, 34);
+            break;
+        case UnknownEnum.Value_108:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_86, 10);
+            break;
+        case UnknownEnum.Value_109:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_65, 45);
+            break;
+        case UnknownEnum.Value_112:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_45, 26, UnknownEnum.Value_47, 38, UnknownEnum.Value_104, 50);
+            break;
+        case UnknownEnum.Value_115:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_115, 11);
+            break;
+        case UnknownEnum.Value_116:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_90, 14);
+            break;
+        case UnknownEnum.Value_117:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_107, 34);
+            break;
+        case UnknownEnum.Value_118:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_122, 38);
+            break;
+        case UnknownEnum.Value_119:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_110, 47);
+            break;
+        case UnknownEnum.Value_120:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_78, 16);
+            break;
+        case UnknownEnum.Value_121:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_9, 38);
+            break;
+        case UnknownEnum.Value_122:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_96, 28, UnknownEnum.Value_92, 43, UnknownEnum.Value_85, 52);
+            break;
+        case UnknownEnum.Value_123:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_93, 11);
+            break;
+        case UnknownEnum.Value_124:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_67, 25);
+            break;
+        case UnknownEnum.Value_125:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_94, 32, UnknownEnum.Value_127, 41, UnknownEnum.Value_107, 47);
+            break;
+        case UnknownEnum.Value_127:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_94, 35);
+            break;
+        case UnknownEnum.Value_128:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_101, 22, UnknownEnum.Value_119, 31, UnknownEnum.Value_69, 51);
+            break;
+        case UnknownEnum.Value_132:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_53, 26, UnknownEnum.Value_70, 32, UnknownEnum.Value_110, 47);
+            break;
+        case UnknownEnum.Value_134:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_90, 22, UnknownEnum.Value_113, 35, UnknownEnum.Value_122, 46);
+            break;
+        case UnknownEnum.Value_137:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_66, 31, UnknownEnum.Value_91, 41, UnknownEnum.Value_33, 51);
+            break;
+        case UnknownEnum.Value_140:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_93, 26, UnknownEnum.Value_54, 35, UnknownEnum.Value_34, 48);
+            break;
+        case UnknownEnum.Value_141:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_112, 6);
+            break;
+        case UnknownEnum.Value_143:
+            ADDTO_MONSTER_MOVEPOOL(argument[0], UnknownEnum.Value_75, 38, UnknownEnum.Value_23, 50);
+            break;
+    }
+}
+
+function assign_movepools()
+{
+    for (var i = 0; i < array_length(global.mondex); i++)
+    {
+        BUILD_ELEMENT_MOVEPOOL(i);
+        MOVEPOOL_SIGNATURE(i);
+    }
 }
 
 enum UnknownEnum
@@ -149,86 +583,61 @@ enum UnknownEnum
     Value_3,
     Value_4,
     Value_5,
-    Value_6,
-    Value_7,
+    Value_7 = 7,
     Value_8,
     Value_9,
-    Value_10,
-    Value_11,
+    Value_11 = 11,
     Value_12,
     Value_13,
-    Value_14,
-    Value_15,
-    Value_16,
+    Value_16 = 16,
     Value_17,
     Value_18,
     Value_19,
-    Value_20,
-    Value_21,
-    Value_22,
-    Value_23,
-    Value_25 = 25,
-    Value_26,
-    Value_27,
-    Value_28,
+    Value_23 = 23,
+    Value_28 = 28,
     Value_29,
     Value_30,
     Value_31,
-    Value_32,
-    Value_33,
+    Value_33 = 33,
     Value_34,
     Value_35,
-    Value_36,
-    Value_37,
-    Value_38,
-    Value_39,
+    Value_37 = 37,
+    Value_39 = 39,
     Value_40,
-    Value_41,
-    Value_42,
+    Value_42 = 42,
     Value_43,
     Value_44,
     Value_45,
-    Value_46,
-    Value_47,
+    Value_47 = 47,
     Value_48,
     Value_49,
     Value_50,
     Value_51,
-    Value_52,
-    Value_53,
+    Value_53 = 53,
     Value_54,
     Value_55,
     Value_56,
-    Value_57,
-    Value_58,
-    Value_59,
+    Value_59 = 59,
     Value_60,
-    Value_61,
-    Value_62,
-    Value_63,
-    Value_64,
+    Value_64 = 64,
     Value_65,
     Value_66,
     Value_67,
-    Value_69 = 69,
+    Value_68,
+    Value_69,
     Value_70,
-    Value_71,
-    Value_72,
+    Value_72 = 72,
     Value_73,
     Value_74,
     Value_75,
-    Value_76,
-    Value_77,
-    Value_79 = 79,
+    Value_77 = 77,
+    Value_78,
+    Value_79,
     Value_80,
     Value_81,
-    Value_82,
-    Value_83,
-    Value_84,
-    Value_85,
+    Value_85 = 85,
     Value_86,
-    Value_87,
-    Value_88,
+    Value_88 = 88,
     Value_89,
     Value_90,
     Value_91,
@@ -237,11 +646,40 @@ enum UnknownEnum
     Value_94,
     Value_95,
     Value_96,
-    Value_97,
-    Value_98,
-    Value_99,
+    Value_99 = 99,
     Value_100,
     Value_101,
     Value_102,
-    Value_103
+    Value_103,
+    Value_104,
+    Value_106 = 106,
+    Value_107,
+    Value_108,
+    Value_109,
+    Value_110,
+    Value_111,
+    Value_112,
+    Value_113,
+    Value_114,
+    Value_115,
+    Value_116,
+    Value_117,
+    Value_118,
+    Value_119,
+    Value_120,
+    Value_121,
+    Value_122,
+    Value_123,
+    Value_124,
+    Value_125,
+    Value_126,
+    Value_127,
+    Value_128,
+    Value_130 = 130,
+    Value_132 = 132,
+    Value_134 = 134,
+    Value_137 = 137,
+    Value_140 = 140,
+    Value_141,
+    Value_143 = 143
 }
diff --git a/data/raw/gml/gml_GlobalScript_init_moves.gml b/data/raw/gml/gml_GlobalScript_init_moves.gml
index 2032cff..60ec246 100644
--- a/data/raw/gml/gml_GlobalScript_init_moves.gml
+++ b/data/raw/gml/gml_GlobalScript_init_moves.gml
@@ -5,13 +5,13 @@ function init_moves()
     BUILD_MOVEDEX_ARRAY(4, 5, spr_over_enemy, UnknownEnum.Value_3, -1, UnknownEnum.Value_5, UnknownEnum.Value_2, 100, 40, UnknownEnum.Value_16, 100, UnknownEnum.Value_25, -1);
     BUILD_MOVEDEX_ARRAY(6, 7, spr_over_self, UnknownEnum.Value_0, -1, UnknownEnum.Value_5, UnknownEnum.Value_2, 100, 40, UnknownEnum.Value_16, 100, UnknownEnum.Value_17, 1, UnknownEnum.Value_18, 1);
     BUILD_MOVEDEX_ARRAY(8, 9, spr_over_enemy, UnknownEnum.Value_1, 40, UnknownEnum.Value_5, UnknownEnum.Value_0, 100, 30, UnknownEnum.Value_13, 10);
-    BUILD_MOVEDEX_ARRAY(10, 11, spr_over_self, UnknownEnum.Value_3, -1, UnknownEnum.Value_5, UnknownEnum.Value_2, -1, 30, UnknownEnum.Value_16, 100, UnknownEnum.Value_17, 1);
+    BUILD_MOVEDEX_ARRAY(10, 11, spr_over_self, UnknownEnum.Value_4, -1, UnknownEnum.Value_5, UnknownEnum.Value_2, -1, 30, UnknownEnum.Value_16, 100, UnknownEnum.Value_17, 1);
     BUILD_MOVEDEX_ARRAY(12, 13, spr_over_enemy, UnknownEnum.Value_2, 60, UnknownEnum.Value_5, UnknownEnum.Value_0, 100, 30);
     BUILD_MOVEDEX_ARRAY(14, 15, spr_over_self, UnknownEnum.Value_0, -1, UnknownEnum.Value_5, UnknownEnum.Value_2, 100, 15, UnknownEnum.Value_31, 1, UnknownEnum.Value_10, 3);
-    BUILD_MOVEDEX_ARRAY(16, 17, spr_over_self, UnknownEnum.Value_1, -1, UnknownEnum.Value_5, UnknownEnum.Value_2, -1, 40, UnknownEnum.Value_39, 1, UnknownEnum.Value_40, 1);
+    BUILD_MOVEDEX_ARRAY(16, 17, spr_over_self, UnknownEnum.Value_6, -1, UnknownEnum.Value_5, UnknownEnum.Value_2, -1, 40, UnknownEnum.Value_39, 1, UnknownEnum.Value_40, 1);
     BUILD_MOVEDEX_ARRAY(18, 19, spr_over_enemy, UnknownEnum.Value_4, 95, UnknownEnum.Value_5, UnknownEnum.Value_1, 90, 15, UnknownEnum.Value_16, 20, UnknownEnum.Value_30, -2);
-    BUILD_MOVEDEX_ARRAY(20, 21, spr_over_enemy, UnknownEnum.Value_3, 60, UnknownEnum.Value_5, UnknownEnum.Value_0, 100, 15, UnknownEnum.Value_32, 1, UnknownEnum.Value_14, 1, UnknownEnum.Value_13, 100);
-    BUILD_MOVEDEX_ARRAY(22, 23, spr_over_enemy, UnknownEnum.Value_5, 50, UnknownEnum.Value_5, UnknownEnum.Value_0, 100, 35, UnknownEnum.Value_15, 1);
+    BUILD_MOVEDEX_ARRAY(20, 21, spr_over_enemy, UnknownEnum.Value_6, 60, UnknownEnum.Value_5, UnknownEnum.Value_0, 100, 15, UnknownEnum.Value_32, 1, UnknownEnum.Value_14, 1, UnknownEnum.Value_13, 100);
+    BUILD_MOVEDEX_ARRAY(22, 23, spr_over_enemy, UnknownEnum.Value_7, 50, UnknownEnum.Value_5, UnknownEnum.Value_0, 100, 35, UnknownEnum.Value_15, 1);
     BUILD_MOVEDEX_ARRAY(24, 25, spr_over_enemy, UnknownEnum.Value_5, 65, UnknownEnum.Value_5, UnknownEnum.Value_0, 100, 30);
     BUILD_MOVEDEX_ARRAY(26, 27, spr_over_enemy, UnknownEnum.Value_6, 40, UnknownEnum.Value_5, UnknownEnum.Value_0, 100, 40, UnknownEnum.Value_16, 100, UnknownEnum.Value_21, 1);
     BUILD_MOVEDEX_ARRAY(28, 29, spr_over_enemy, UnknownEnum.Value_2, 75, UnknownEnum.Value_5, UnknownEnum.Value_0, 90, 15, UnknownEnum.Value_11, 30, UnknownEnum.Value_12, UnknownEnum.Value_1);
@@ -19,22 +19,22 @@ function init_moves()
     BUILD_MOVEDEX_ARRAY(32, 33, spr_over_self, UnknownEnum.Value_3, -1, UnknownEnum.Value_5, UnknownEnum.Value_2, 70, 15, UnknownEnum.Value_16, 100, UnknownEnum.Value_17, 1, UnknownEnum.Value_19, 1, UnknownEnum.Value_21, 1, UnknownEnum.Value_18, -1, UnknownEnum.Value_20, -1);
     BUILD_MOVEDEX_ARRAY(34, 35, spr_over_enemy, UnknownEnum.Value_7, 95, UnknownEnum.Value_5, UnknownEnum.Value_0, 90, 15);
     BUILD_MOVEDEX_ARRAY(36, 37, spr_over_enemy, UnknownEnum.Value_1, 50, UnknownEnum.Value_1, UnknownEnum.Value_0, 95, 35, UnknownEnum.Value_15, 1);
-    BUILD_MOVEDEX_ARRAY(38, 39, spr_over_self, UnknownEnum.Value_0, -1, UnknownEnum.Value_1, UnknownEnum.Value_2, 100, 15, UnknownEnum.Value_5, 30);
+    BUILD_MOVEDEX_ARRAY(38, 39, spr_over_self, UnknownEnum.Value_1, -1, UnknownEnum.Value_1, UnknownEnum.Value_2, 100, 15, UnknownEnum.Value_5, 30);
     BUILD_MOVEDEX_ARRAY(40, 41, spr_over_enemy, UnknownEnum.Value_2, -1, UnknownEnum.Value_1, UnknownEnum.Value_2, 90, 30, UnknownEnum.Value_16, 100, UnknownEnum.Value_28, -1);
-    BUILD_MOVEDEX_ARRAY(42, 43, spr_over_enemy, UnknownEnum.Value_4, 60, UnknownEnum.Value_1, UnknownEnum.Value_1, 100, 20);
+    BUILD_MOVEDEX_ARRAY(42, 43, spr_over_enemy, UnknownEnum.Value_3, 60, UnknownEnum.Value_1, UnknownEnum.Value_1, 100, 20);
     BUILD_MOVEDEX_ARRAY(44, 45, spr_over_enemy, UnknownEnum.Value_2, 75, UnknownEnum.Value_1, UnknownEnum.Value_0, 90, 15);
     BUILD_MOVEDEX_ARRAY(46, 47, spr_over_enemy, UnknownEnum.Value_3, 90, UnknownEnum.Value_1, UnknownEnum.Value_0, 100, 10);
-    BUILD_MOVEDEX_ARRAY(48, 49, spr_over_self, UnknownEnum.Value_1, -1, UnknownEnum.Value_1, UnknownEnum.Value_2, 95, 10, UnknownEnum.Value_31, 1, UnknownEnum.Value_16, 20, UnknownEnum.Value_18, 1);
+    BUILD_MOVEDEX_ARRAY(48, 49, spr_over_self, UnknownEnum.Value_0, -1, UnknownEnum.Value_1, UnknownEnum.Value_2, 95, 10, UnknownEnum.Value_31, 1, UnknownEnum.Value_16, 20, UnknownEnum.Value_18, 1);
     BUILD_MOVEDEX_ARRAY(50, 51, spr_over_enemy, UnknownEnum.Value_1, 70, UnknownEnum.Value_1, UnknownEnum.Value_1, 85, 15, UnknownEnum.Value_13, 25);
     BUILD_MOVEDEX_ARRAY(52, 53, spr_over_enemy, UnknownEnum.Value_5, 80, UnknownEnum.Value_1, UnknownEnum.Value_0, 95, 10, UnknownEnum.Value_11, 30, UnknownEnum.Value_12, UnknownEnum.Value_2);
-    BUILD_MOVEDEX_ARRAY(54, 55, spr_over_enemy, UnknownEnum.Value_5, 85, UnknownEnum.Value_1, UnknownEnum.Value_0, 95, 10, UnknownEnum.Value_15, 1);
+    BUILD_MOVEDEX_ARRAY(54, 55, spr_over_enemy, UnknownEnum.Value_7, 85, UnknownEnum.Value_1, UnknownEnum.Value_0, 95, 10, UnknownEnum.Value_15, 1);
     BUILD_MOVEDEX_ARRAY(56, 57, spr_over_enemy, UnknownEnum.Value_0, 45, UnknownEnum.Value_2, UnknownEnum.Value_0, 100, 25, UnknownEnum.Value_13, 20);
     BUILD_MOVEDEX_ARRAY(58, 59, spr_over_self, 1, -1, UnknownEnum.Value_2, UnknownEnum.Value_2, 100, 30, UnknownEnum.Value_16, 100, UnknownEnum.Value_21, 2);
     BUILD_MOVEDEX_ARRAY(60, 61, spr_over_enemy, UnknownEnum.Value_3, 70, UnknownEnum.Value_2, UnknownEnum.Value_0, 90, 10, UnknownEnum.Value_13, 20);
-    BUILD_MOVEDEX_ARRAY(62, 63, spr_over_enemy, UnknownEnum.Value_1, 40, UnknownEnum.Value_2, UnknownEnum.Value_1, 85, 15, UnknownEnum.Value_16, 100, UnknownEnum.Value_30, -1);
+    BUILD_MOVEDEX_ARRAY(62, 63, spr_over_enemy, UnknownEnum.Value_5, 40, UnknownEnum.Value_2, UnknownEnum.Value_1, 85, 15, UnknownEnum.Value_16, 100, UnknownEnum.Value_30, -1);
     BUILD_MOVEDEX_ARRAY(64, 65, spr_over_enemy, UnknownEnum.Value_2, 70, UnknownEnum.Value_2, UnknownEnum.Value_0, 95, 10, UnknownEnum.Value_10, 1);
-    BUILD_MOVEDEX_ARRAY(66, 67, spr_over_self, UnknownEnum.Value_3, 85, UnknownEnum.Value_2, UnknownEnum.Value_1, 90, 10);
-    BUILD_MOVEDEX_ARRAY(68, 69, spr_over_self, UnknownEnum.Value_1, 85, UnknownEnum.Value_2, UnknownEnum.Value_0, 90, 15);
+    BUILD_MOVEDEX_ARRAY(66, 67, spr_over_self, UnknownEnum.Value_6, 85, UnknownEnum.Value_2, UnknownEnum.Value_1, 90, 10);
+    BUILD_MOVEDEX_ARRAY(68, 69, spr_over_self, UnknownEnum.Value_4, 85, UnknownEnum.Value_2, UnknownEnum.Value_0, 90, 15);
     BUILD_MOVEDEX_ARRAY(70, 71, spr_over_enemy, UnknownEnum.Value_1, 90, UnknownEnum.Value_2, UnknownEnum.Value_0, 80, 10, UnknownEnum.Value_35, 1, UnknownEnum.Value_36, 25);
     BUILD_MOVEDEX_ARRAY(72, 73, spr_over_enemy, 1, 25, UnknownEnum.Value_0, UnknownEnum.Value_1, 100, 40, UnknownEnum.Value_12, UnknownEnum.Value_1, UnknownEnum.Value_11, 10);
     BUILD_MOVEDEX_ARRAY(74, 75, spr_over_enemy, 1, 60, UnknownEnum.Value_0, UnknownEnum.Value_1, 100, 20, UnknownEnum.Value_11, 50, UnknownEnum.Value_12, UnknownEnum.Value_1);
@@ -68,17 +68,17 @@ function init_moves()
     BUILD_MOVEDEX_ARRAY(130, 131, spr_over_enemy, 1, 80, UnknownEnum.Value_4, UnknownEnum.Value_0, 90, 15, UnknownEnum.Value_10, 1, UnknownEnum.Value_32, 1);
     BUILD_MOVEDEX_ARRAY(132, 133, spr_over_enemy, 3, 75, UnknownEnum.Value_4, UnknownEnum.Value_0, 90, 15, UnknownEnum.Value_15, 1);
     BUILD_MOVEDEX_ARRAY(134, 135, spr_over_enemy, 0, 55, UnknownEnum.Value_4, UnknownEnum.Value_1, 80, 20, UnknownEnum.Value_16, 70, UnknownEnum.Value_24, -1, UnknownEnum.Value_26, -1, UnknownEnum.Value_25, -1, UnknownEnum.Value_27, -1);
-    BUILD_MOVEDEX_ARRAY(136, 137, spr_over_enemy, 1, -1, UnknownEnum.Value_4, UnknownEnum.Value_2, 90, 15, UnknownEnum.Value_16, 100, UnknownEnum.Value_28, -2);
-    BUILD_MOVEDEX_ARRAY(138, 139, spr_over_enemy, 0, 95, UnknownEnum.Value_4, UnknownEnum.Value_1, 85, 15, UnknownEnum.Value_33, 1, UnknownEnum.Value_5, 35);
+    BUILD_MOVEDEX_ARRAY(136, 137, spr_over_enemy, UnknownEnum.Value_4, -1, UnknownEnum.Value_4, UnknownEnum.Value_2, 90, 15, UnknownEnum.Value_16, 100, UnknownEnum.Value_28, -2);
+    BUILD_MOVEDEX_ARRAY(138, 139, spr_over_enemy, UnknownEnum.Value_5, 95, UnknownEnum.Value_4, UnknownEnum.Value_1, 85, 15, UnknownEnum.Value_33, 1, UnknownEnum.Value_5, 35);
     BUILD_MOVEDEX_ARRAY(140, 141, spr_over_enemy, 4, -1, UnknownEnum.Value_4, UnknownEnum.Value_2, 90, 15, UnknownEnum.Value_16, 100, UnknownEnum.Value_24, -1, UnknownEnum.Value_26, -1, UnknownEnum.Value_17, 1, UnknownEnum.Value_19, 1, UnknownEnum.Value_5, 30);
-    BUILD_MOVEDEX_ARRAY(142, 143, spr_over_enemy, 0, 40, UnknownEnum.Value_4, UnknownEnum.Value_0, 100, 40, UnknownEnum.Value_13, 25, UnknownEnum.Value_14, 1);
+    BUILD_MOVEDEX_ARRAY(142, 143, spr_over_enemy, UnknownEnum.Value_6, 40, UnknownEnum.Value_4, UnknownEnum.Value_0, 100, 40, UnknownEnum.Value_13, 25, UnknownEnum.Value_14, 1);
     BUILD_MOVEDEX_ARRAY(144, 145, spr_over_enemy, 6, 40, UnknownEnum.Value_8, UnknownEnum.Value_1, 95, 30, UnknownEnum.Value_16, 40, UnknownEnum.Value_30, -1);
     BUILD_MOVEDEX_ARRAY(146, 147, spr_over_enemy, 2, -1, UnknownEnum.Value_8, UnknownEnum.Value_2, 75, 30, UnknownEnum.Value_11, 100, UnknownEnum.Value_12, UnknownEnum.Value_2);
     BUILD_MOVEDEX_ARRAY(148, 149, spr_over_enemy, 3, 40, UnknownEnum.Value_8, UnknownEnum.Value_0, 100, 40, UnknownEnum.Value_16, 30, UnknownEnum.Value_28, -1);
     BUILD_MOVEDEX_ARRAY(150, 151, spr_over_enemy, 1, 85, UnknownEnum.Value_8, UnknownEnum.Value_0, 90, 15, UnknownEnum.Value_11, 20, UnknownEnum.Value_12, UnknownEnum.Value_2);
     BUILD_MOVEDEX_ARRAY(152, 153, spr_over_enemy, 4, 50, UnknownEnum.Value_8, UnknownEnum.Value_1, 100, 15, UnknownEnum.Value_16, 100, UnknownEnum.Value_17, 2, UnknownEnum.Value_18, -1, UnknownEnum.Value_20, -1, UnknownEnum.Value_35, 1, UnknownEnum.Value_36, 15);
-    BUILD_MOVEDEX_ARRAY(154, 155, spr_over_enemy, 3, 75, UnknownEnum.Value_8, UnknownEnum.Value_1, 90, 15, UnknownEnum.Value_11, 20, UnknownEnum.Value_12, UnknownEnum.Value_2);
-    BUILD_MOVEDEX_ARRAY(156, 157, spr_over_enemy, 3, 45, UnknownEnum.Value_8, UnknownEnum.Value_0, 95, 20);
+    BUILD_MOVEDEX_ARRAY(154, 155, spr_over_enemy, UnknownEnum.Value_5, 75, UnknownEnum.Value_8, UnknownEnum.Value_1, 90, 15, UnknownEnum.Value_11, 20, UnknownEnum.Value_12, UnknownEnum.Value_2);
+    BUILD_MOVEDEX_ARRAY(156, 157, spr_over_enemy, UnknownEnum.Value_0, 45, UnknownEnum.Value_8, UnknownEnum.Value_0, 95, 20);
     BUILD_MOVEDEX_ARRAY(158, 159, spr_over_enemy, 6, 70, UnknownEnum.Value_8, UnknownEnum.Value_1, 85, 15, UnknownEnum.Value_11, 100, UnknownEnum.Value_12, UnknownEnum.Value_2);
     BUILD_MOVEDEX_ARRAY(160, 161, spr_over_enemy, 0, 110, UnknownEnum.Value_9, UnknownEnum.Value_1, 85, 10, UnknownEnum.Value_11, 20, UnknownEnum.Value_12, UnknownEnum.Value_1);
     BUILD_MOVEDEX_ARRAY(162, 163, spr_over_enemy, 1, 75, UnknownEnum.Value_9, UnknownEnum.Value_0, 90, 15);
@@ -105,6 +105,44 @@ function init_moves()
     BUILD_MOVEDEX_ARRAY(204, 205, spr_over_enemy, 3, 50, UnknownEnum.Value_12, UnknownEnum.Value_0, 100, 20, UnknownEnum.Value_10, 1);
     BUILD_MOVEDEX_ARRAY(206, 207, spr_over_enemy, 4, 20, UnknownEnum.Value_12, UnknownEnum.Value_0, 100, 25, UnknownEnum.Value_16, 100, UnknownEnum.Value_28, -2);
     BUILD_MOVEDEX_ARRAY(208, 209, spr_over_enemy, 0, 120, UnknownEnum.Value_0, UnknownEnum.Value_1, 80, 3, UnknownEnum.Value_5, 120);
+    BUILD_MOVEDEX_ARRAY(210, 211, spr_over_enemy, UnknownEnum.Value_3, 45, UnknownEnum.Value_5, UnknownEnum.Value_1, 100, 25);
+    BUILD_MOVEDEX_ARRAY(212, 213, spr_over_enemy, UnknownEnum.Value_5, 65, UnknownEnum.Value_5, UnknownEnum.Value_1, 95, 20, UnknownEnum.Value_16, 20, UnknownEnum.Value_27, -1);
+    BUILD_MOVEDEX_ARRAY(214, 215, spr_over_enemy, UnknownEnum.Value_4, 80, UnknownEnum.Value_5, UnknownEnum.Value_1, 90, 25);
+    BUILD_MOVEDEX_ARRAY(216, 217, spr_over_enemy, UnknownEnum.Value_0, 100, UnknownEnum.Value_5, UnknownEnum.Value_1, 85, 10);
+    BUILD_MOVEDEX_ARRAY(218, 219, spr_over_enemy, UnknownEnum.Value_1, 55, UnknownEnum.Value_7, UnknownEnum.Value_1, 100, 20);
+    BUILD_MOVEDEX_ARRAY(220, 221, spr_over_enemy, UnknownEnum.Value_0, 85, UnknownEnum.Value_7, UnknownEnum.Value_1, 85, 15);
+    BUILD_MOVEDEX_ARRAY(222, 223, spr_over_self, UnknownEnum.Value_0, -1, UnknownEnum.Value_7, UnknownEnum.Value_2, -1, 25, UnknownEnum.Value_16, 100, UnknownEnum.Value_19, 1, UnknownEnum.Value_18, 1);
+    BUILD_MOVEDEX_ARRAY(224, 225, spr_over_enemy, UnknownEnum.Value_3, 45, UnknownEnum.Value_10, UnknownEnum.Value_1, 100, 25, UnknownEnum.Value_11, 10, UnknownEnum.Value_12, UnknownEnum.Value_3);
+    BUILD_MOVEDEX_ARRAY(226, 227, spr_over_enemy, UnknownEnum.Value_1, 75, UnknownEnum.Value_10, UnknownEnum.Value_1, 95, 20, UnknownEnum.Value_16, 30, UnknownEnum.Value_28, -1);
+    BUILD_MOVEDEX_ARRAY(228, 229, spr_over_self, UnknownEnum.Value_0, -1, UnknownEnum.Value_10, UnknownEnum.Value_2, -1, 20, UnknownEnum.Value_16, 100, UnknownEnum.Value_20, 1, UnknownEnum.Value_21, 1);
+    BUILD_MOVEDEX_ARRAY(230, 231, spr_over_enemy, UnknownEnum.Value_2, 50, UnknownEnum.Value_1, UnknownEnum.Value_1, 95, 20, UnknownEnum.Value_11, 20, UnknownEnum.Value_12, UnknownEnum.Value_2);
+    BUILD_MOVEDEX_ARRAY(232, 233, spr_over_enemy, UnknownEnum.Value_0, 75, UnknownEnum.Value_1, UnknownEnum.Value_1, 90, 15);
+    BUILD_MOVEDEX_ARRAY(234, 235, spr_over_enemy, UnknownEnum.Value_4, 50, UnknownEnum.Value_2, UnknownEnum.Value_1, 100, 20);
+    BUILD_MOVEDEX_ARRAY(236, 237, spr_over_enemy, UnknownEnum.Value_3, 80, UnknownEnum.Value_2, UnknownEnum.Value_1, 90, 15, UnknownEnum.Value_16, 20, UnknownEnum.Value_28, -1);
+    BUILD_MOVEDEX_ARRAY(238, 239, spr_over_enemy, UnknownEnum.Value_8, 55, UnknownEnum.Value_4, UnknownEnum.Value_1, 95, 20, UnknownEnum.Value_11, 15, UnknownEnum.Value_12, UnknownEnum.Value_3);
+    BUILD_MOVEDEX_ARRAY(240, 241, spr_over_enemy, UnknownEnum.Value_7, 85, UnknownEnum.Value_4, UnknownEnum.Value_1, 90, 15);
+    BUILD_MOVEDEX_ARRAY(242, 243, spr_over_enemy, UnknownEnum.Value_2, 55, UnknownEnum.Value_6, UnknownEnum.Value_1, 95, 20);
+    BUILD_MOVEDEX_ARRAY(244, 245, spr_over_enemy, UnknownEnum.Value_5, 85, UnknownEnum.Value_6, UnknownEnum.Value_1, 85, 10, UnknownEnum.Value_13, 10, UnknownEnum.Value_14, 1);
+    BUILD_MOVEDEX_ARRAY(246, 247, spr_over_self, UnknownEnum.Value_0, -1, UnknownEnum.Value_6, UnknownEnum.Value_2, -1, 20, UnknownEnum.Value_16, 100, UnknownEnum.Value_21, 1, UnknownEnum.Value_22, 1);
+    BUILD_MOVEDEX_ARRAY(248, 249, spr_over_enemy, UnknownEnum.Value_0, 50, UnknownEnum.Value_12, UnknownEnum.Value_1, 95, 25);
+    BUILD_MOVEDEX_ARRAY(250, 251, spr_over_enemy, UnknownEnum.Value_2, 80, UnknownEnum.Value_12, UnknownEnum.Value_1, 90, 15, UnknownEnum.Value_16, 20, UnknownEnum.Value_28, -1);
+    BUILD_MOVEDEX_ARRAY(252, 253, spr_over_enemy, UnknownEnum.Value_1, 70, UnknownEnum.Value_11, UnknownEnum.Value_0, 100, 20, UnknownEnum.Value_16, 20, UnknownEnum.Value_28, -1);
+    BUILD_MOVEDEX_ARRAY(254, 255, spr_over_enemy, UnknownEnum.Value_3, 60, UnknownEnum.Value_11, UnknownEnum.Value_1, 95, 20, UnknownEnum.Value_16, 20, UnknownEnum.Value_26, -1);
+    BUILD_MOVEDEX_ARRAY(256, 257, spr_over_enemy, UnknownEnum.Value_1, 75, UnknownEnum.Value_9, UnknownEnum.Value_0, 95, 20);
+    BUILD_MOVEDEX_ARRAY(258, 259, spr_over_enemy, UnknownEnum.Value_0, 85, UnknownEnum.Value_9, UnknownEnum.Value_1, 90, 20);
+    BUILD_MOVEDEX_ARRAY(260, 261, spr_over_enemy, UnknownEnum.Value_2, 70, UnknownEnum.Value_0, UnknownEnum.Value_0, 100, 20, UnknownEnum.Value_11, 15, UnknownEnum.Value_12, UnknownEnum.Value_1);
+    BUILD_MOVEDEX_ARRAY(262, 263, spr_over_self, UnknownEnum.Value_0, -1, UnknownEnum.Value_0, UnknownEnum.Value_2, -1, 20, UnknownEnum.Value_16, 100, UnknownEnum.Value_21, 1, UnknownEnum.Value_22, 1);
+    BUILD_MOVEDEX_ARRAY(264, 265, spr_over_enemy, UnknownEnum.Value_4, 75, UnknownEnum.Value_3, UnknownEnum.Value_0, 95, 20, UnknownEnum.Value_11, 15, UnknownEnum.Value_12, UnknownEnum.Value_4);
+    BUILD_MOVEDEX_ARRAY(266, 267, spr_over_enemy, UnknownEnum.Value_4, 65, UnknownEnum.Value_8, UnknownEnum.Value_0, 100, 15, UnknownEnum.Value_11, 20, UnknownEnum.Value_12, UnknownEnum.Value_2);
+    BUILD_MOVEDEX_ARRAY(268, 269, spr_over_enemy, UnknownEnum.Value_2, -1, UnknownEnum.Value_11, UnknownEnum.Value_2, 100, 25, UnknownEnum.Value_16, 100, UnknownEnum.Value_28, -1, UnknownEnum.Value_25, -1);
+    BUILD_MOVEDEX_ARRAY(270, 271, spr_over_self, UnknownEnum.Value_3, -1, UnknownEnum.Value_1, UnknownEnum.Value_2, -1, 15, UnknownEnum.Value_5, 40, UnknownEnum.Value_16, 100, UnknownEnum.Value_18, 1);
+    BUILD_MOVEDEX_ARRAY(272, 273, spr_over_enemy, UnknownEnum.Value_4, 45, UnknownEnum.Value_0, UnknownEnum.Value_1, 100, 25, UnknownEnum.Value_11, 30, UnknownEnum.Value_12, UnknownEnum.Value_1);
+    BUILD_MOVEDEX_ARRAY(274, 275, spr_over_self, UnknownEnum.Value_3, -1, UnknownEnum.Value_0, UnknownEnum.Value_2, -1, 20, UnknownEnum.Value_16, 100, UnknownEnum.Value_17, 1, UnknownEnum.Value_19, 1);
+    BUILD_MOVEDEX_ARRAY(276, 277, spr_over_enemy, UnknownEnum.Value_5, 60, UnknownEnum.Value_3, UnknownEnum.Value_0, 95, 20, UnknownEnum.Value_11, 30, UnknownEnum.Value_12, UnknownEnum.Value_4);
+    BUILD_MOVEDEX_ARRAY(278, 279, spr_over_enemy, UnknownEnum.Value_9, 80, UnknownEnum.Value_4, UnknownEnum.Value_1, 90, 15);
+    BUILD_MOVEDEX_ARRAY(280, 281, spr_over_enemy, UnknownEnum.Value_5, 85, UnknownEnum.Value_9, UnknownEnum.Value_0, 90, 15);
+    BUILD_MOVEDEX_ARRAY(282, 283, spr_over_enemy, UnknownEnum.Value_6, 70, UnknownEnum.Value_1, UnknownEnum.Value_0, 100, 20, UnknownEnum.Value_16, 20, UnknownEnum.Value_28, -1);
+    BUILD_MOVEDEX_ARRAY(284, 285, spr_over_self, UnknownEnum.Value_3, -1, UnknownEnum.Value_8, UnknownEnum.Value_2, -1, 20, UnknownEnum.Value_16, 100, UnknownEnum.Value_17, 1, UnknownEnum.Value_39, 1);
 }
 
 function get_move_sound()
diff --git a/data/raw/localization/english_moves.txt b/data/raw/localization/english_moves.txt
index ff2136c..3cb6224 100644
--- a/data/raw/localization/english_moves.txt
+++ b/data/raw/localization/english_moves.txt
@@ -313,3 +313,116 @@
 208 Empyrean Flame
 209 The user erupts a massive blast of fire, dealing incredible damage and healing significantly.
 
+210 Prism Bolt
+211 Splits a beam through a facet of light and fires every color at once.
+
+212 Halo Ring
+213 Drops a ring of hard light over the enemy. It may dull their magical guard.
+
+214 Starfall
+215 Calls down a short, bright rain of falling stars.
+
+216 Radiance
+217 Everything the caster has stored comes out at once as raw light.
+
+218 Spirit Palm
+219 Pushes a compressed ball of fighting spirit out through an open palm.
+
+220 Aura Burst
+221 Releases the caster's aura in one wide, heavy push.
+
+222 Meditate
+223 The caster breathes, settles, and sharpens both its guard and its focus.
+
+224 Wisp Lantern
+225 A drowsy little light bobs closer than it should. It may put the enemy to sleep.
+
+226 Moonlit Waltz
+227 Leads the enemy through a dance it never agreed to, and may leave it dizzy.
+
+228 Charm Circle
+229 Rings the caster in soft charms, lifting magical defense and speed.
+
+230 Spore Cloud
+231 Coughs up a thick cloud of spores. It may poison the enemy.
+
+232 Bloom Burst
+233 Forces a whole season of growth into one second and lets it go.
+
+234 Tide Call
+235 Pulls the water out of the air and drops all of it on the enemy at once.
+
+236 Abyssal Pull
+237 Something deep and unlit takes hold of the enemy and drags. It may lower their speed.
+
+238 Night Terror
+239 Shows the enemy the worst thing it can imagine. It may put them to sleep.
+
+240 Void Lash
+241 Cracks a whip made of nothing at all across the enemy.
+
+242 Gale Slice
+243 Throws a thin blade of wind sharp enough to cut clean through.
+
+244 Cyclone
+245 Spins the air into a column and drops the enemy inside it. It may cause a flinch.
+
+246 Updraft
+247 Catches a rising current, raising the caster's speed and evasion.
+
+248 Hailstone
+249 Hurls a packed fist of hail hard enough to sting.
+
+250 Permafrost
+251 Freezes the ground under the enemy. It may lower their speed.
+
+252 Grave Grasp
+253 Cold hands come up out of the floor and take hold. It may lower the enemy's speed.
+
+254 Wailing Veil
+255 A grieving sound wraps the enemy. It may shake their magical attack.
+
+256 Scale Ram
+257 Lowers a plated shoulder and simply goes through the enemy.
+
+258 Wyrm Breath
+259 Old, heavy breath from something that has been alive far too long.
+
+260 Cinder Fang
+261 Bites down with teeth hot enough to sear. It may cause burn.
+
+262 Heat Haze
+263 The air around the caster warps, making it faster and harder to pin down.
+
+264 Coil Strike
+265 Winds up a charged limb and snaps it out. It may cause paralysis.
+
+266 Venom Rake
+267 Rakes the enemy with something that was dipped in something worse. It may poison them.
+
+268 Grave Chill
+269 The air goes cold around the enemy. Its footing and its guard both give way.
+
+270 Heartwood
+271 Draws sap up from deep roots, closing wounds and hardening bark.
+
+272 Wisp Flame
+273 A pale flame drifts over and settles on the enemy. It often burns.
+
+274 Stoke
+275 The caster fans its own fire, raising both of its attack stats.
+
+276 Live Wire
+277 Lashes out with a limb still carrying current. It may cause paralysis.
+
+278 Black Current
+279 Sends a charge through the dark itself and out the other side of the enemy.
+
+280 Talon Fall
+281 Drops out of the sky with every claw out at once.
+
+282 Bramble Lash
+283 Throws out a long thorned runner and drags it back. It may lower the enemy's speed.
+
+284 Toxin Coat
+285 The caster sweats a fresh coat of venom, sharpening its attack and shrugging off its own status.

Build 2026-09-02

Depot diff · no patch notesmanifest 6853406165080485270

Silent update — Twindle Forest spawns, “Ranger” rename, Thief achievement

  • Twindle Forest has wild Dokimon from the start of the game, at levels 1–2. Before this build the forest stayed empty until the sixth story quest and then spawned at levels 1–3.
  • Every “trainer” in the game text is now a “Ranger” — item descriptions, Dokidex entries, NPC dialogue and the party UI. Nothing about how those battles work changed.
  • Stealing a Dokimon with a Theft Captal now unlocks the Thief achievement.
  • Releasing a Dokimon asks for confirmation first (“This can’t be undone”).

Wiki pages updated: Twindle Forest — wild encounters · Theft Captal · Mechanics — evolving · Achievements — Thief

5 Dokidex descriptions now say “Ranger”

Slytharot · Quackfil · Lloudious · Lunapet · Aoimon

Under the hood and the raw diff
  • The party screen’s XP bar now fills by percentage of the current level instead of a raw experience ratio — cosmetic only.
  • The evolution queue for benched party members is keyed on who is on the field rather than on party slot order. The rule the wiki documents is unchanged — evolution fires on a battle level-up at or past the evolution level.

Unified diff of the 18 extracted scripts and the English localization files, this build against the 2026-08-27 release build the site launched on. Files that did not change are omitted.

diff --git a/data/raw/gml/gml_GlobalScript_init_areas.gml b/data/raw/gml/gml_GlobalScript_init_areas.gml
--- a/data/raw/gml/gml_GlobalScript_init_areas.gml
+++ b/data/raw/gml/gml_GlobalScript_init_areas.gml
@@ -31,16 +31,8 @@ function init_areas()
             break;
         case 2:
             new_area = "Twindle Forest";
-            if (global.quest[0] >= 6)
-            {
-                wild_monster = pick(UnknownEnum.Value_9, 3, UnknownEnum.Value_14, 7, UnknownEnum.Value_16, 3, UnknownEnum.Value_18, 2, UnknownEnum.Value_45, 1);
-                monster_level = range(1, 3);
-            }
-            else
-            {
-                wild_monster = -1;
-                monster_level = -1;
-            }
+            wild_monster = pick(UnknownEnum.Value_9, 3, UnknownEnum.Value_14, 7, UnknownEnum.Value_16, 3, UnknownEnum.Value_18, 2, UnknownEnum.Value_45, 1);
+            monster_level = range(1, 2);
             if (!global.night_time)
             {
                 global.battle_background = UnknownEnum.Value_0;
diff --git a/data/raw/gml/gml_GlobalScript_monster_manipulation.gml b/data/raw/gml/gml_GlobalScript_monster_manipulation.gml
--- a/data/raw/gml/gml_GlobalScript_monster_manipulation.gml
+++ b/data/raw/gml/gml_GlobalScript_monster_manipulation.gml
@@ -1466,9 +1466,7 @@ function draw_party_screen()
             x_spacer = 120;
             y_spacer = 37;
             var _healthbar = hp / max_hp;
-            var xp = string(round(global.monsters[i][UnknownEnum.Value_2]));
-            var max_xp = string(GET_STAT(0, 17, i));
-            var _expbar = xp / max_xp;
+            var _expbar = percentage(GET_STAT(0, 9, i), GET_STAT(0, 8, i));
             if (float_mon != -1)
             {
                 if (float_mon == i)
@@ -1503,6 +1501,7 @@ function draw_party_screen()
             paint_from_index(xx + 22 + (o * x_spacer), yy + 30 + (ii * y_spacer) + mon_hop, spr_monsters_mini, num, global.monsters[i][UnknownEnum.Value_18]);
             paint(xx + 46 + (o * x_spacer), yy + 33 + (ii * y_spacer), spr_party_monbox_hp);
             paint_healthbar(xx + 46 + (o * x_spacer), yy + 33 + (ii * y_spacer), spr_party_monbox_hp, _healthbar, 1);
+            paint_healthbar(xx + 46 + (o * x_spacer), yy + 38 + (ii * y_spacer), spr_party_monbox_xp, 1, 0);
             paint_healthbar(xx + 46 + (o * x_spacer), yy + 38 + (ii * y_spacer), spr_party_monbox_xp, _expbar, 1);
             format(16777215, -1, -1, 0);
             if (global.language == 5)
diff --git a/data/raw/gml/gml_Object_obj_battle_Step_0.gml b/data/raw/gml/gml_Object_obj_battle_Step_0.gml
--- a/data/raw/gml/gml_Object_obj_battle_Step_0.gml
+++ b/data/raw/gml/gml_Object_obj_battle_Step_0.gml
@@ -2511,10 +2511,6 @@ switch (menu)
                     {
                         _exp = round(((180 * global.eparty[ebattler][UnknownEnum.Value_1]) / 7) * _t * rand * 1.2 * 1.4 * _catchup);
                     }
-                    if (global.admin)
-                    {
-                        _exp *= 20;
-                    }
                     experience_to_give = _exp;
                     experience_to_give2 = _exp;
                     original_experience_to_give = _exp;
@@ -2793,6 +2789,7 @@ switch (menu)
                     if (cast_captal == UnknownEnum.Value_28 && global.trainer)
                     {
                         global.trainers[global.trainer_battling] = -1;
+                        UNLOCK_ACHIEMENT("thief");
                     }
                 }
                 else
@@ -2892,12 +2889,12 @@ switch (menu)
                                 var new_max_health = GET_STAT(0, 0, i);
                                 var health_difference = new_max_health - curr_max_health;
                                 global.monsters[i][UnknownEnum.Value_3] = global.monsters[i][UnknownEnum.Value_3] + health_difference;
-                                var ii = 0;
-                                if (global.double_battle && battler1 != -1)
+                                var _on_field = i == battler;
+                                if (global.double_battle && battler1 != -1 && i == battler1)
                                 {
-                                    ii = 1;
+                                    _on_field = 1;
                                 }
-                                if (i > ii)
+                                if (!_on_field)
                                 {
                                     if (global.mondex[global.monsters[i][0]][UnknownEnum.Value_13] > 1 && global.monsters[i][UnknownEnum.Value_1] >= global.mondex[global.monsters[i][0]][UnknownEnum.Value_13] && global.monsters[i][UnknownEnum.Value_18] != 8)
                                     {
diff --git a/data/raw/localization/english_items.txt b/data/raw/localization/english_items.txt
--- a/data/raw/localization/english_items.txt
+++ b/data/raw/localization/english_items.txt
@@ -83,7 +83,7 @@
 55 She suddenly cracked out of the Ember Soul. She's following you around!
 
 56 Theft Captal
-57 Lets you steal monsters from other trainers. The battle ends on use.
+57 Lets you steal monsters from other Rangers. The battle ends on use.
 
 58 Orb Shards
 59 Apparently you can level up your monsters with this? Neat!
diff --git a/data/raw/localization/english_monsters.txt b/data/raw/localization/english_monsters.txt
--- a/data/raw/localization/english_monsters.txt
+++ b/data/raw/localization/english_monsters.txt
@@ -21,7 +21,7 @@
 
 15 Slytharot
 16 Scythe Dokimon
-17 Slytharot is a highly intelligent and extremely agile slasher. Because of this, they are favored by powerful trainers.
+17 Slytharot is a highly intelligent and extremely agile slasher. Because of this, they are favored by powerful Rangers.
 
 18 Squibbly
 19 Anchor Dokimon
@@ -65,7 +65,7 @@
 
 48 Quackfil
 49 Proud Dokimon
-50 It has a bossy nature, and has even been known to pick on its own trainer if displeased.
+50 It has a bossy nature, and has even been known to pick on its own Ranger if displeased.
 
 51 Quackfear
 52 Arrogant Dokimon
@@ -85,7 +85,7 @@
 
 63 Lloudious
 64 Guiding Light Dokimon
-65 Since it is known to guide lost trainers at night, it has become a symbol of hope across the region.
+65 Since it is known to guide lost Rangers at night, it has become a symbol of hope across the region.
 
 66 Pheonix
 67 Hatchling Dokimon
@@ -241,7 +241,7 @@
 
 180 Lunapet
 181 Guiding light Dokimon
-182 Since it is known to guide lost trainers at night, it has become a symbol of hope.
+182 Since it is known to guide lost Rangers at night, it has become a symbol of hope.
 
 183 Umbralancer
 184 Crescent Moon Dokimon
@@ -413,7 +413,7 @@
 
 309 Aoimon
 310 Bloodthirsty Dokimon
-311 Will stalk and kill anything it sees within reach, by any means! Despite this, it's intensely loyal and will do anything to protect its trainer!
+311 Will stalk and kill anything it sees within reach, by any means! Despite this, it's intensely loyal and will do anything to protect its Ranger!
 
 312 Palsamon
 313 Cosplay Dokimon
diff --git a/data/raw/localization/english_npc.txt b/data/raw/localization/english_npc.txt
--- a/data/raw/localization/english_npc.txt
+++ b/data/raw/localization/english_npc.txt
@@ -235,7 +235,7 @@ I fooled one! I actually fooled one this time!! Master will be so proud of me!
 .
 
 45
-Hate to break it to you, but I am not indeed the Elite Trainer you seek.
+Hate to break it to you, but I am not indeed the Elite Ranger you seek.
 You'll have to venture further into the shrine if you wish to face her, she's just past me and my twin sister.
 .
 
@@ -1476,7 +1476,7 @@ You'll be completely alone once you go through there. Make sure you're prepared.
 My sister is on Gad'riel duty today. You can see her by passing into his domain.
 Me and Miso here are just on normal guard duty, protecting the town.
 If you're serious about taking on Gad'riel, make sure to rest up a lot first.
-You can heal up with your team at the onsen above me, and there's lots of strong trainers here.
+You can heal up with your team at the onsen above me, and there's lots of strong Rangers here.
 We also have a merchant that sells rare items, and wise people here that can give you advice.
 Whenever you're ready to take him on, just head North of town, and you'll find yourself in his domain.
 .
@@ -1721,7 +1721,7 @@ It's so cold here. I wish my cute little Burnsby could warm me up...
 .
 
 350
-I really wanna become an Elite trainer one day.
+I really wanna become an Elite Ranger one day.
 But I think I'm too lazy to do something like that.
 .
 
diff --git a/data/raw/localization/english_object.txt b/data/raw/localization/english_object.txt
--- a/data/raw/localization/english_object.txt
+++ b/data/raw/localization/english_object.txt
@@ -393,7 +393,7 @@ Huh? What does that special monster do?... Guess you'll have to keep playing to
 .
 
 76
-Welcome to Tenshou Tower! Where the strongest trainers come to compete in ongoing battles.
+Welcome to Tenshou Tower! Where the strongest Rangers come to compete in ongoing battles.
 .
 
 77
@@ -596,7 +596,7 @@ Strict dress code.
 120
 There's a bunch of postings of pictures and sticky notes.
 People are talking about their "hauls" or strong Dokimon they stole.
-There's also requests with rewards for certain Dokimon or taking out certain trainers.
+There's also requests with rewards for certain Dokimon or taking out certain Rangers.
 Hey, this picture looks kinda like you! That's a funny coincidence.
 .
 
diff --git a/data/raw/localization/english_scene.txt b/data/raw/localization/english_scene.txt
--- a/data/raw/localization/english_scene.txt
+++ b/data/raw/localization/english_scene.txt
@@ -494,7 +494,7 @@
 377 WHAT WAS THAT!??
 378 There's some dark energy at play here. I have no idea who or WHAT that was, but we need to get inside NOW.
 379 Come on, this place isn't some kind of playground.
-380 There's a reason why strong monsters and trainers gather here...
+380 There's a reason why strong monsters and Rangers gather here...
 
 // Aki - F - You're about to go in a "deep dive" into the spiritual realm together with her using her poewrs.
 381 Alright. Remember, we're in this together, /name/.
@@ -1271,3 +1271,4 @@
 2003 Consider this a courtesy call. Further attempts may result in fines, arrest, or worse.
 2004 ...
 2005 Have a nice day.
+2006 Are you sure you want to release this Dokimon? This can't be undone.
diff --git a/data/raw/localization/english_trainer.txt b/data/raw/localization/english_trainer.txt
--- a/data/raw/localization/english_trainer.txt
+++ b/data/raw/localization/english_trainer.txt
@@ -287,7 +287,7 @@ Fine! Have it your way, I'm gonna look for a better scoop..
 .
 
 40
-I came here looking for tough trainers to sharpen up my skills!
+I came here looking for tough Rangers to sharpen up my skills!
 .
 Wow, that's sharp!
 .
diff --git a/data/raw/localization/english_ui.txt b/data/raw/localization/english_ui.txt
--- a/data/raw/localization/english_ui.txt
+++ b/data/raw/localization/english_ui.txt
@@ -450,7 +450,7 @@
 638 wants to battle!
 639 Battle setup
 641 Background
-642 Trainer
+642 Ranger
 643 Music
 644 Standard
 645 Alternate

How this is made: the game's Steam depot is downloaded on each new manifest, the data is extracted by the same scripts that built the wiki, and the two extractions are diffed. The site's own release notes are on the site changelog.