Dokimon QuestWiki · Base de datoswiki v1.9
ES

Actualizaciones e historial de versiones

datos de la versión del 2026-10-02

Las versiones de Steam de Dokimon Quest que hemos contrastado con los datos extraídos por la wiki, de la más reciente a la más antigua. Los anuncios del desarrollador están en la página de noticias; aquí registramos las versiones que modifican los datos o el funcionamiento del juego, tengan o no notas del parche. Cada entrada recoge los cambios que percibe el jugador, las páginas de la wiki actualizadas y el diff original de los archivos del juego del que se obtuvo la información.

La web se lanzó con los datos de la versión del 2026-08-27. La fecha de cada versión corresponde al manifiesto de su depósito de Steam; el juego no lleva un número de versión propio.

Versión del 2026-10-02

Notas del parche en Steammanifiesto 3287541748849778122Leer las notas del parche en Steam →

Correcciones en combate y reglas más claras para Robo Captal

  • Cuando un Dokimon sube de nivel después de evolucionar, se consulta la lista de movimientos de su etapa evolutiva actual. Las listas generadas de movimientos no cambian respecto a la versión anterior.
  • Robo Captal solo puede usarse contra un Dokimon con el estado Atado en un combate individual contra un Ranger que no forme parte de una misión. La descripción del objeto especifica los requisitos de Atado y combate individual.
  • El retroceso y Proteger desaparecen al inicio del turno. El escudo, la evasión o el elemento del rival ya no bloquean las mejoras que un Dokimon se aplica a sí mismo.
  • Los cambios de estadísticas en combate tienen un límite de +6 o −6. Los Dokimon de nivel máximo ya no muestran un mensaje de cero EXP, y el mensaje de recompensas incluye ahora los pagos de los combates salvajes.
  • Los santuarios de las hadas y el portal posterior a la historia aceptan ahora las etapas evolutivas de cada hada. Los encuentros salvajes ya no interrumpen el sueño inicial de Maiko.

Páginas de la wiki actualizadas: Robo Captal: descripción actualizada · Mecánicas: robo y reglas de combate · Noticias: notas del parche del desarrollador

Cambios internos y diff original
  • Los seis scripts que generan las tablas de monstruos, movimientos, objetos, zonas, elementos y movimientos aprendidos de la wiki son idénticos byte a byte a los de la versión anterior. En esas tablas solo cambia la descripción de Robo Captal.
  • Los 3.213 fotogramas de sprites exportados no han cambiado. Los archivos en inglés de movimientos, escenas y tutoriales solo presentan cambios de finales de línea.

Diff unificado de las 26 entradas de código descompilado modificadas y de los cambios de significado en los textos en inglés, frente al manifiesto 6323404005526619670. Se omiten los cambios que solo afectan a los finales de línea.

--- 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

Versión del 2026-09-12

Diff del depósito · sin notas del parchemanifiesto 6323404005526619670

Seleccionar un movimiento corrige el maná negativo

  • Al seleccionar un movimiento, un valor de maná negativo se restablece ahora al máximo de ese movimiento, el mismo límite que ya se aplicaba cuando el valor era demasiado alto.

Esta versión no modificó los datos ni las fichas de la base de datos.

Cambios internos y diff original
  • Los datos de monstruos, movimientos, objetos, zonas, elementos y repertorios de movimientos de la wiki no cambiaron en esta versión; ninguna ficha de la base de datos necesitó valores nuevos.
  • Los archivos de localización del depósito y los fotogramas de sprites exportados no han cambiado.

La única entrada de código descompilado que cambió, comparada con el manifiesto 8218454595439510790. Fuente: depósito 2019301 de Steam.

--- 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;
             }

Versión del 2026-09-10

Notas del parche en Steammanifiesto 8218454595439510790Leer las notas del parche en Steam →

Repertorios renovados, 38 movimientos nuevos y movimientos exclusivos

  • Los 144 Dokimon reciben ahora una lista individual de movimientos por subida de nivel, generada a partir de sus estadísticas y elementos, en lugar de compartir un repertorio fijo por elemento.
  • Se han añadido 38 movimientos, con lo que la base de datos pasa de 105 a 143.
  • 61 Dokimon han recibido movimientos exclusivos asignados expresamente: 85 combinaciones de movimiento y nivel en total.
  • La selección de movimientos distingue ahora entre atacantes físicos, mágicos e híbridos, y equilibra el daño y la utilidad para las clases Atacante, General y Encantador.

Páginas de la wiki actualizadas: Todos los Dokimon y sus nuevas listas de movimientos · Movimientos: 143 fichas · Mecánicas: generación de movimientos aprendidos · Tabla de tipos: notas sobre elementos

Cambios internos y diff original

Diff unificado del generador de repertorios, las definiciones de movimientos y sus textos en inglés utilizados por la wiki, frente al manifiesto 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.

Versión del 2026-09-02

Diff del depósito · sin notas del parchemanifiesto 6853406165080485270

Actualización sin anuncio: encuentros de Twindle Forest, nombre «Ranger» y logro Thief

  • Twindle Forest tiene Dokimon salvajes desde el inicio del juego, de niveles 1–2. Antes de esta versión, el bosque permanecía vacío hasta la sexta misión de la historia y después aparecían Dokimon de niveles 1–3.
  • Todas las menciones a «trainer» en los textos del juego pasan a ser «Ranger»: descripciones de objetos, fichas de la Dokidex, diálogos de NPC e interfaz del equipo. El funcionamiento de esos combates no cambia.
  • Robar un Dokimon con Robo Captal desbloquea ahora el logro Thief.
  • Al liberar un Dokimon se pide confirmación primero: «Esta acción no se puede deshacer».

Páginas de la wiki actualizadas: Twindle Forest: encuentros salvajes · Robo Captal · Mecánicas: evolución · Logros: Thief

5 descripciones de la Dokidex usan ahora «Ranger»

Slytharot · Quackfil · Lloudious · Lunapet · Aoimon

Cambios internos y diff original
  • La barra de XP de la pantalla del equipo se llena ahora según el porcentaje del nivel actual, en lugar de una proporción de experiencia bruta. Es un cambio visual.
  • La cola de evolución de los miembros del equipo que están en reserva se organiza según quién está en el campo, en lugar del orden de los puestos del equipo. La regla documentada por la wiki no cambia: la evolución se activa al subir de nivel en combate, cuando se alcanza o supera el nivel de evolución.

Diff unificado de los 18 scripts extraídos y los archivos de localización en inglés, comparados con la versión del 2026-08-27 con la que se lanzó la web. Se omiten los archivos sin cambios.

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

Cómo se elabora: descargamos el depósito del juego en Steam con cada manifiesto nuevo, extraemos los datos con los mismos scripts que generan la wiki y comparamos ambas extracciones. Los cambios de la propia web están en el historial de la web.