Build 2026-10-02
Battle fixes and clearer Theft Captal rules
- A Dokimon that levels up after evolving now checks the learnset for its current evolution stage. The generated move lists themselves are unchanged from the previous build.
- Theft Captal now targets a Bound Dokimon only in a single Ranger battle outside a quest battle. Its item description spells out the Bound and single-battle limits.
- Flinch and Protect wear off at the start of a turn; self-targeted buffs are no longer blocked by the opponent’s shield, evasion or element.
- Battle stat changes are capped at +6 or −6. Max-level Dokimon no longer show a zero-EXP message, and the reward message now includes wild-battle payouts.
- Fairy shrines and the post-game portal now accept each fairy’s evolution stages. Wild encounters no longer interrupt Maiko’s opening dream.
Wiki pages updated: Theft Captal — updated description · Mechanics — stealing and battle rules · News — developer patch notes
Under the hood and the raw diff
- All six scripts used to generate the wiki’s monster, move, item, area, element and learnset tables are byte-identical to the prior build. Only the Theft Captal item description changes in those tables.
- The 3,213 exported sprite frames are unchanged. The English move, scene and tutorial files have only line-ending changes.
Unified diff of the 26 changed decompiled code entries and semantic English localization changes, this build against manifest 6323404005526619670. Line-ending-only changes are omitted.
--- old/code/gml_GlobalScript_cutscene_functions.gml
+++ new/code/gml_GlobalScript_cutscene_functions.gml
@@ -1350,7 +1350,7 @@
function INCREMENT_BADGES()
{
- global.badges = argument[0];
+ global.badges = max(global.badges, argument[0]);
}
function HIDE_PLAYER()
--- old/code/gml_GlobalScript_cutscenes.gml
+++ new/code/gml_GlobalScript_cutscenes.gml
@@ -38,6 +38,12 @@
function scene_release_a_dokimon()
{
+ var _mon = string(global.monsters[0][UnknownEnum.Value_29]);
+ if (_mon == "" || _mon == "0")
+ {
+ _mon = string(GET_DEX(0, 0, global.monsters[0][0]));
+ }
+ _mon = localize_text_misc(2006, "scene.txt") + " (" + _mon + " Lv" + string(global.monsters[0][UnknownEnum.Value_1]) + ")";
CUTSCENE_ADD_ACTION(START_SCENE, -1);
CUTSCENE_ADD_ACTION(WAIT, 0.5);
CUTSCENE_ADD_ACTION(PL1_DIR, 3);
@@ -46,7 +52,7 @@
CUTSCENE_ADD_ACTION(ADD_TEXT, 909);
CUTSCENE_ADD_ACTION(WAIT_INPUT);
CUTSCENE_ADD_ACTION(ADD_TEXT_YESNO);
- IF_YES(ADD_TEXT, 2006);
+ IF_YES(ADD_TEXT, _mon);
IF_YES(WAIT_INPUT);
IF_YES(ADD_TEXT_YESNO);
IF_YES(ADD_TEXT, 910);
--- old/code/gml_GlobalScript_monster_manipulation.gml
+++ new/code/gml_GlobalScript_monster_manipulation.gml
@@ -883,7 +883,7 @@
}
else
{
- battle_msg[0] = localize_text_misc(101, "ui.txt") + " " + string(GET_DEX(0, 0)) + localize_text_misc(102, "ui.txt") + " " + string(global.monsters[battler_to_be][0]) + "!";
+ battle_msg[0] = localize_text_misc(101, "ui.txt") + " " + string(GET_DEX(0, 0)) + localize_text_misc(102, "ui.txt") + " " + string(global.monsters[battler_to_be][UnknownEnum.Value_29]) + "!";
}
}
else if (switching_mon == 1)
@@ -896,7 +896,7 @@
}
else
{
- battle_msg[0] = localize_text_misc(101, "ui.txt") + " " + string(GET_DEX(2, 0)) + localize_text_misc(102, "ui.txt") + " " + string(global.monsters[battler_to_be][0]) + "!";
+ battle_msg[0] = localize_text_misc(101, "ui.txt") + " " + string(GET_DEX(2, 0)) + localize_text_misc(102, "ui.txt") + " " + string(global.monsters[battler_to_be][UnknownEnum.Value_29]) + "!";
}
}
menu = UnknownEnum.Value_3;
--- old/code/gml_GlobalScript_saving.gml
+++ new/code/gml_GlobalScript_saving.gml
@@ -34,6 +34,7 @@
ini_write_real("Player", "Borderless", 0);
}
ini_write_real("Player", "VSync", global.vsync);
+ ini_write_real("Player", "Always Run", global.CAPS_LOCKED);
ini_close();
}
@@ -198,9 +199,10 @@
ini_write_string("inv0", "Inv" + string(i), global.inv[i][0]);
ini_write_real("inv1", "Inv" + string(i), global.inv[i][1]);
}
+ ini_section_delete("Cap_Data");
for (var i = 0; i < array_length(global.mondex); i++)
{
- ini_write_real("Cap_Data", i, global.capture_data[i]);
+ ini_write_real("Cap_Data", string(i), global.capture_data[i]);
}
global.monsters_seen = 0;
global.monsters_caught = 0;
@@ -563,7 +565,51 @@
}
for (var i = 0; i < global.monster_count; i++)
{
- global.capture_data[i] = ini_read_real("Cap_Data", i, -1);
+ global.capture_data[i] = ini_read_real("Cap_Data", string(i), -1);
+ }
+ var _cap_main = "save.sav";
+ if (global.save_num != 0)
+ {
+ _cap_main = "save" + string(global.save_num) + ".sav";
+ }
+ for (var _p = 0; _p < 2; _p++)
+ {
+ var _cap_src = (_p == 0) ? _file : _cap_main;
+ if (_p == 1 && (_cap_main == _file || !file_exists(_cap_main)))
+ {
+ break;
+ }
+ var _txt = file_text_open_read(_cap_src);
+ var _in_cap = 0;
+ if (_txt != -1)
+ {
+ while (!file_text_eof(_txt))
+ {
+ var _line = string_trim(string_replace_all(string_replace_all(file_text_readln(_txt), "\r", ""), "\n", ""));
+ if (string_char_at(_line, 1) == "[")
+ {
+ _in_cap = _line == "[Cap_Data]";
+ }
+ else if (_in_cap)
+ {
+ var _eq = string_pos("=", _line);
+ var _key = string_trim(string_copy(_line, 1, _eq - 1));
+ var _val = string_trim(string_replace_all(string_copy(_line, _eq + 1, string_length(_line)), "\"", ""));
+ if (_eq > 1 && string_length(string_digits(_key)) > 0 && string_letters(_key) == "" && string_pos("-", _key) == 0 && string_length(string_digits(_val)) > 0 && string_letters(_val) == "")
+ {
+ var _id = floor(real(_key));
+ if (_id < global.monster_count && real(_val) > global.capture_data[_id])
+ {
+ global.capture_data[_id] = real(_val);
+ }
+ }
+ }
+ }
+ file_text_close(_txt);
+ }
+ }
+ for (var i = 0; i < global.monster_count; i++)
+ {
if (global.capture_data[i] == 2)
{
global.capture_data[i] = 1;
@@ -580,8 +626,19 @@
{
REFILL_MOVES(i);
}
- global.monsters_seen = ini_read_real("Monsters", "Seen", 0);
- global.monsters_caught = ini_read_real("Monsters", "Caught", 0);
+ global.monsters_seen = 0;
+ global.monsters_caught = 0;
+ for (var i = 0; i < array_length(global.capture_data); i++)
+ {
+ if (global.capture_data[i] == 0)
+ {
+ global.monsters_seen++;
+ }
+ if (global.capture_data[i] == 1)
+ {
+ global.monsters_caught++;
+ }
+ }
global.obc_used_codes = [];
if (ini_key_exists("OBC", "LedgerV2"))
{
--- old/code/gml_Object_obj_battle_Draw_0.gml
+++ new/code/gml_Object_obj_battle_Draw_0.gml
@@ -1631,6 +1631,10 @@
var prev_mon = global.monsters[evolving][0] - 1;
txt = string(GET_DEX(0, 0, prev_mon)) + " " + localize_text_misc(125, "ui.txt") + " " + string(GET_DEX(0, 0, global.monsters[evolving][0])) + "!";
timer++;
+ if (press(1004) && timer > 30 && timer < 400)
+ {
+ timer = 400;
+ }
if (timer >= 400)
{
audio_sound_gain(global.BATTLE_BGM, global.MUSIC, 2400);
--- old/code/gml_Object_obj_battle_Draw_75.gml
+++ new/code/gml_Object_obj_battle_Draw_75.gml
@@ -4,9 +4,9 @@
}
if (menu == UnknownEnum.Value_23 && alarm[0] == -1)
{
- alph += 0.025;
+ alph += 0.05;
fill_screen(alph, 0);
- if (alph >= 1.8)
+ if (alph >= 1.2)
{
if (!instance_exists(obj_battle_exit))
{
--- old/code/gml_Object_obj_battle_Step_0.gml
+++ new/code/gml_Object_obj_battle_Step_0.gml
@@ -51,6 +51,17 @@
}
if (menu == UnknownEnum.Value_23)
{
+ if (alarm[0] > 5)
+ {
+ if (press(1004))
+ {
+ alarm[0] = 5;
+ }
+ else if (held(1004) || global.battle_toggle)
+ {
+ alarm[0] -= 3;
+ }
+ }
for (var i = 0; i < 4; i++)
{
new_health[i] = round(new_health[i]);
@@ -362,7 +373,7 @@
}
for (var i = 0; i < 4; i++)
{
- if (condition[i] == UnknownEnum.Value_0)
+ if (condition[i] == UnknownEnum.Value_0 || condition[i] == UnknownEnum.Value_2)
{
condition[i] = -1;
}
@@ -386,6 +397,33 @@
if (!autoplay)
{
game_set_speed(60, gamespeed_fps);
+ }
+ if (global.double_battle && condition[attacking] == UnknownEnum.Value_1)
+ {
+ var _who = battler;
+ var _slot = 0;
+ if (attacking != 0)
+ {
+ _who = battler1;
+ }
+ for (var i = 0; i < 4; i++)
+ {
+ if (global.monsters[_who][UnknownEnum.Value_10 + i] != -1 && global.monsters[_who][UnknownEnum.Value_14 + i] > 0)
+ {
+ _slot = i;
+ break;
+ }
+ }
+ if (attacking == 0)
+ {
+ battle_sel = _slot;
+ }
+ else
+ {
+ battle_sel1 = _slot;
+ }
+ menu = UnknownEnum.Value_1;
+ exit;
}
sel[0] = GET_VERTICAL_INPUTS(sel[0]);
if (press(5000))
@@ -426,13 +464,14 @@
}
break;
case 2:
- if ((global.trainer == 0 || (global.trainer == 1 && !global.double_battle && inv_hasitem(UnknownEnum.Value_28) == 1 && global.eparty[0][UnknownEnum.Value_18] == 8)) && global.BATTLE_BGM != snd_main_theme)
+ var _theft = global.trainer == 1 && !global.double_battle && global.quest_battle == -1 && global.eparty[ebattler][UnknownEnum.Value_18] == 8 && inv_hasitem(UnknownEnum.Value_28) == 1;
+ if ((global.trainer == 0 || _theft) && global.BATTLE_BGM != snd_main_theme)
{
var i = 0;
var o = 0;
while (i < (array_length(global.inv) - 1))
{
- if (global.inv[i][0] > -1 && global.inv[i][0] < 6)
+ if (global.inv[i][0] > -1 && ((global.trainer == 0 && global.inv[i][0] < 6) || (_theft && global.inv[i][0] == UnknownEnum.Value_28)))
{
menu = UnknownEnum.Value_13;
show_captals = 0;
@@ -499,7 +538,7 @@
{
sel_defending_mon = 1 - sel_defending_mon;
}
- if ((press(1004) && sel_defending_mon >= 0) || ebattler1 == -1 || (global.admin && autoplay))
+ if ((press(1004) && sel_defending_mon >= 0) || ebattler1 == -1 || (global.admin && autoplay) || condition[attacking] == UnknownEnum.Value_1)
{
defending[attacking] = 1 + (sel_defending_mon * 2);
if (autoplay && global.admin)
@@ -514,13 +553,16 @@
{
sel_defending_mon_slot[1] = sel_defending_mon;
}
- if (attacking == 0)
- {
- global.monsters[battler][UnknownEnum.Value_14 + battle_sel]--;
- }
- else if (battler1 != -1)
- {
- global.monsters[battler1][UnknownEnum.Value_14 + battle_sel1]--;
+ if (condition[attacking] != UnknownEnum.Value_1)
+ {
+ if (attacking == 0)
+ {
+ global.monsters[battler][UnknownEnum.Value_14 + battle_sel]--;
+ }
+ else if (battler1 != -1)
+ {
+ global.monsters[battler1][UnknownEnum.Value_14 + battle_sel1]--;
+ }
}
if (attacking == 0 && battler1 != -1)
{
@@ -741,7 +783,7 @@
{
autoplay_counter++;
}
- if (press(1004) || autoplay_counter >= autoplay_activate)
+ if (press(1004) || autoplay_counter >= autoplay_activate || (global.double_battle && condition[attacking] == UnknownEnum.Value_1))
{
autoplay_counter = 0;
sfx(snd_select);
@@ -1116,6 +1158,15 @@
}
var MY_NAME = GET_DEX(attacker, 0);
var EN_NAME = GET_DEX(defender, 0);
+ if (global.double_battle && condition[attacker] == UnknownEnum.Value_1)
+ {
+ battle_msg[0] = string(MY_NAME) + " " + localize_text_misc(73, "ui.txt");
+ monster_attack[attacker] = -1;
+ condition[attacker] = -1;
+ menu = UnknownEnum.Value_8;
+ alarm[0] = 180;
+ exit;
+ }
if (condition[attacker] == UnknownEnum.Value_0)
{
battle_msg[0] = string(MY_NAME) + " " + localize_text_misc(12, "ui.txt");
@@ -1184,7 +1235,8 @@
{
var MISS = false;
monster_turn[attacker] += 1;
- if (condition[defender] == UnknownEnum.Value_2)
+ var _self_move = GET_MOVE(attacker, 2) == spr_over_self && GET_MOVE(attacker, 8) == UnknownEnum.Value_2;
+ if (condition[defender] == UnknownEnum.Value_2 && !_self_move)
{
battle_msg[0] = string(EN_NAME) + " " + localize_text_misc(15, "ui.txt");
condition[defender] = -1;
@@ -1194,7 +1246,10 @@
{
randomize();
var _accuracy = CALCULATE_BATTLE_STATS(GET_MOVE(attacker, 6), attacker, UnknownEnum.Value_6);
- _accuracy = _accuracy / CALCULATE_BATTLE_STATS(1, defender, UnknownEnum.Value_5);
+ if (!_self_move)
+ {
+ _accuracy = _accuracy / CALCULATE_BATTLE_STATS(1, defender, UnknownEnum.Value_5);
+ }
_accuracy = clamp(_accuracy, 1, 100);
var _chance = irandom(100) - 1;
var _chance_check = _accuracy;
@@ -1208,7 +1263,7 @@
var EN_TYPE = GET_DEX(defender, 7);
var EN_TYPE2 = GET_DEX(defender, 8);
var TYPE = TYPE_EFF(MV_TYPE, EN_TYPE, EN_TYPE2);
- if (TYPE == 0)
+ if (TYPE == 0 && !_self_move)
{
battle_msg[0] = localize_text_misc(17, "ui.txt");
MISS = true;
@@ -1730,7 +1785,7 @@
battle_stats[defender][4] += GET_MOVE(attacker, 28);
battle_stats[defender][5] += GET_MOVE(attacker, 29);
battle_stats[defender][6] += GET_MOVE(attacker, 30);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < 7; i++)
{
if (abs(battle_stats[attacker][i]) > 6)
{
@@ -1839,7 +1894,7 @@
if (RECOIL)
{
var recoil_damage = GET_MOVE(attacker, 36) / 100;
- recoil_damage = GET_STAT(attacker, 0) * recoil_damage;
+ recoil_damage = round(GET_STAT(attacker, 0) * recoil_damage);
battle_msg[ms] = string(MY_NAME) + " " + localize_text_misc(70, "ui.txt");
if (attacker == 0)
{
@@ -2171,11 +2226,11 @@
var enemy_priority1 = 0;
if (monster_attack[0] != -1)
{
- player_priority1 = global.movedex[monster_attack[0]][UnknownEnum.Value_10];
+ player_priority = global.movedex[monster_attack[0]][UnknownEnum.Value_10];
}
if (monster_attack[1] != -1)
{
- enemy_priority1 = global.movedex[monster_attack[1]][UnknownEnum.Value_10];
+ enemy_priority = global.movedex[monster_attack[1]][UnknownEnum.Value_10];
}
if (battler1 != -1 && monster_attack[2] != -1)
{
@@ -2309,7 +2364,7 @@
}
else
{
- defender = defending[0];
+ defender = defending[attacker];
}
if (defending[0] == -1)
{
@@ -2701,7 +2756,7 @@
var o = 0;
while (i < array_length(global.inv))
{
- if (global.inv[i][0] > -1 && (global.inv[i][0] < 6 || (global.inv[i][0] == UnknownEnum.Value_28 && global.eparty[0][UnknownEnum.Value_18] == 8)))
+ if (global.inv[i][0] > -1 && ((global.trainer == 0 && global.inv[i][0] < 6) || (global.trainer && global.inv[i][0] == UnknownEnum.Value_28)))
{
if (global.inv[i][0] != UnknownEnum.Value_5)
{
@@ -2718,7 +2773,7 @@
}
for (i = 0; i < array_length(global.inv); i++)
{
- if (global.inv[i][0] > -1 && (global.inv[i][0] < 6 || (global.inv[i][0] == UnknownEnum.Value_28 && global.eparty[0][UnknownEnum.Value_18] == 8)))
+ if (global.inv[i][0] > -1 && ((global.trainer == 0 && global.inv[i][0] < 6) || (global.trainer && global.inv[i][0] == UnknownEnum.Value_28)))
{
if (global.inv[i][0] == UnknownEnum.Value_5)
{
@@ -2903,20 +2958,24 @@
else
{
var new_move = 0;
- for (var o = 1; o < array_length(global.movepool[global.monsters[i][0]]); o += 2)
+ for (var o = 1; o < array_length(global.movepool[global.monsters[i][0] + global.monsters[i][UnknownEnum.Value_31]]); o += 2)
{
- if (global.movepool[global.monsters[i][0]][o] == global.monsters[i][UnknownEnum.Value_1])
+ if (global.movepool[global.monsters[i][0] + global.monsters[i][UnknownEnum.Value_31]][o] == global.monsters[i][UnknownEnum.Value_1])
{
new_move++;
break;
}
- if (global.movepool[global.monsters[i][0]][o] > global.monsters[i][UnknownEnum.Value_1])
+ if (global.movepool[global.monsters[i][0] + global.monsters[i][UnknownEnum.Value_31]][o] > global.monsters[i][UnknownEnum.Value_1])
{
break;
}
}
- var my_name = string(global.mondex[global.monsters[i][0]][0]);
- for (var b = 0; b < array_length(battle_msg); b++)
+ var my_name = string(GET_DEX(0, 0, global.monsters[i][0]));
+ if (string(global.monsters[i][UnknownEnum.Value_29]) != "" && string(global.monsters[i][UnknownEnum.Value_29]) != "0")
+ {
+ my_name = string(global.monsters[i][UnknownEnum.Value_29]);
+ }
+ for (var b = 2; b < array_length(battle_msg); b++)
{
if (battle_msg[b] == "")
{
@@ -2960,14 +3019,14 @@
max_experience = power(global.monsters[battler][UnknownEnum.Value_1], 3);
}
var new_move = 0;
- for (var i = 1; i < array_length(global.movepool[global.monsters[battler][0]]); i += 2)
- {
- if (global.movepool[global.monsters[battler][0]][i] == global.monsters[battler][UnknownEnum.Value_1])
+ for (var i = 1; i < array_length(global.movepool[global.monsters[battler][0] + global.monsters[battler][UnknownEnum.Value_31]]); i += 2)
+ {
+ if (global.movepool[global.monsters[battler][0] + global.monsters[battler][UnknownEnum.Value_31]][i] == global.monsters[battler][UnknownEnum.Value_1])
{
new_move++;
break;
}
- if (global.movepool[global.monsters[battler][0]][i] > global.monsters[battler][UnknownEnum.Value_1])
+ if (global.movepool[global.monsters[battler][0] + global.monsters[battler][UnknownEnum.Value_31]][i] > global.monsters[battler][UnknownEnum.Value_1])
{
break;
}
@@ -3001,6 +3060,10 @@
var _exp = experience_to_give;
var MY_NAME = GET_DEX(0, 0);
battle_msg[0] = string(MY_NAME) + " " + localize_text_misc(93, "ui.txt") + " " + string(_exp) + " " + localize_text_misc(94, "ui.txt");
+ if (mon_level >= global.mon_max_level)
+ {
+ battle_msg[0] = "";
+ }
}
global.monsters[battler][UnknownEnum.Value_2] = global.monsters[battler][UnknownEnum.Value_2] + experience_to_give;
experience_to_give = 0;
@@ -3029,14 +3092,14 @@
max_experience = power(global.monsters[battler1][UnknownEnum.Value_1], 3);
}
var new_move = 0;
- for (var i = 1; i < array_length(global.movepool[global.monsters[battler1][0]]); i += 2)
- {
- if (global.movepool[global.monsters[battler1][0]][i] == global.monsters[battler1][UnknownEnum.Value_1])
+ for (var i = 1; i < array_length(global.movepool[global.monsters[battler1][0] + global.monsters[battler1][UnknownEnum.Value_31]]); i += 2)
+ {
+ if (global.movepool[global.monsters[battler1][0] + global.monsters[battler1][UnknownEnum.Value_31]][i] == global.monsters[battler1][UnknownEnum.Value_1])
{
new_move++;
break;
}
- if (global.movepool[global.monsters[battler1][0]][i] > global.monsters[battler1][UnknownEnum.Value_1])
+ if (global.movepool[global.monsters[battler1][0] + global.monsters[battler1][UnknownEnum.Value_31]][i] > global.monsters[battler1][UnknownEnum.Value_1])
{
break;
}
@@ -3070,6 +3133,10 @@
_exp = experience_to_give2;
MY_NAME = GET_DEX(2, 0);
battle_msg[1] = string(MY_NAME) + " " + localize_text_misc(93, "ui.txt") + " " + string(_exp) + " " + localize_text_misc(94, "ui.txt");
+ if (mon_level1 >= global.mon_max_level)
+ {
+ battle_msg[1] = "";
+ }
}
var _exp = experience_to_give2;
var MY_NAME = GET_DEX(2, 0);
@@ -3089,6 +3156,10 @@
}
menu = UnknownEnum.Value_15;
alarm[0] = 180;
+ if (battle_msg[0] == "")
+ {
+ alarm[0] = 1;
+ }
shiftover = 0;
if (global.eparty[ebattler][UnknownEnum.Value_3] <= 0 && ebattler1 != -1)
{
@@ -3099,6 +3170,16 @@
case UnknownEnum.Value_15:
if (alarm[0] == -1)
{
+ for (var i = 1; i < array_length(battle_msg); i++)
+ {
+ if (battle_msg[i] != "")
+ {
+ battle_msg[0] = battle_msg[i];
+ battle_msg[i] = "";
+ alarm[0] = 180;
+ exit;
+ }
+ }
if (battle_msg[1] == "")
{
if (global.monsters[battler][UnknownEnum.Value_3] < 1)
@@ -3306,10 +3387,10 @@
{
if (trainer_offset < 144)
{
- trainer_offset += 3;
- }
- }
- if (press(1004) && (trainer_offset >= 144 || !global.trainer))
+ trainer_offset += (3 + (6 * (held(1004) || global.battle_toggle)));
+ }
+ }
+ if ((press(1004) && trainer_offset >= 144) || !global.trainer)
{
var reward_money = 0;
if (!global.trainer)
@@ -3335,26 +3416,23 @@
global.moni = round(global.moni / 5) * 5;
reward_money = round(reward_money);
global.moni = round(global.moni);
- if (floor(global.monsters[battler][UnknownEnum.Value_3]) > 0)
- {
- if (global.trainer)
- {
- battle_msg[0] = localize_text_misc(97, "ui.txt") + " " + string(reward_money) + " " + localize_text_misc(98, "ui.txt");
- if (global.trainers[global.trainer_battling] >= 0)
- {
- global.trainers[global.trainer_battling]++;
- }
- if (global.quest_battle != -1)
- {
- global.quest[global.quest_battle] += 1;
- }
- if (global.elite_ranger_battle)
- {
- global.badges++;
- }
- }
- alarm[0] = 40;
- }
+ battle_msg[0] = localize_text_misc(97, "ui.txt") + " " + string(reward_money) + " " + localize_text_misc(98, "ui.txt");
+ if (global.trainer)
+ {
+ if (global.trainers[global.trainer_battling] >= 0)
+ {
+ global.trainers[global.trainer_battling]++;
+ }
+ if (global.quest_battle != -1)
+ {
+ global.quest[global.quest_battle] += 1;
+ }
+ if (global.elite_ranger_battle)
+ {
+ global.badges++;
+ }
+ }
+ alarm[0] = 60;
menu = UnknownEnum.Value_23;
}
break;
@@ -3434,6 +3512,10 @@
battle_msg[0] = "";
}
break;
+}
+if (press(1004) && alarm[0] > 5 && exists_in_list(menu, UnknownEnum.Value_14, UnknownEnum.Value_15))
+{
+ alarm[0] = 5;
}
if (alarm[0] > 0 && menu != UnknownEnum.Value_3 && menu != UnknownEnum.Value_2)
{
@@ -3499,5 +3581,7 @@
Value_23,
Value_24,
Value_28 = 28,
- Value_32 = 32
+ Value_29,
+ Value_31 = 31,
+ Value_32
}
--- old/code/gml_Object_obj_camera_Create_0.gml
+++ new/code/gml_Object_obj_camera_Create_0.gml
@@ -7,6 +7,8 @@
mon_anim_t = 0;
worldmap_curs_x = 0;
worldmap_curs_y = 0;
+fly_mouse_x = -1;
+fly_mouse_y = -1;
mon_hop = 1;
alarm_set(3, 30);
alarm_set(0, 1);
--- old/code/gml_Object_obj_camera_Draw_0.gml
+++ new/code/gml_Object_obj_camera_Draw_0.gml
@@ -323,7 +323,10 @@
{
font(fn_quan);
}
- text(cx + 128, cy + 128, localize_text_misc(200, "ui.txt"));
+ if (fly_to == -1)
+ {
+ text(cx + 128, cy + 128, localize_text_misc(200, "ui.txt"));
+ }
alpha();
if (global.admin)
{
@@ -371,6 +374,16 @@
if (held(1002) && worldmap_curs_x < 256)
{
worldmap_curs_x += mvspd;
+ }
+ if (fly_to != -1)
+ {
+ if (fly_mouse_x != -1 && (mouse_x != fly_mouse_x || mouse_y != fly_mouse_y))
+ {
+ worldmap_curs_x = clamp(mouse_x - cx, 0, 256);
+ worldmap_curs_y = clamp(mouse_y - cy, 0, 144);
+ }
+ fly_mouse_x = mouse_x;
+ fly_mouse_y = mouse_y;
}
looking_area = -1;
i = 0;
@@ -754,10 +767,15 @@
wx = cx + ((global.world_x / room_width) * 256);
wy = cy + ((global.world_y / room_height) * 144) + 16;
}
+ if (worldmap_curs_x == 0 && worldmap_curs_y == 0 && wx >= cx && wy >= cy)
+ {
+ worldmap_curs_x = clamp((wx - cx) + 4, 1, 256);
+ worldmap_curs_y = clamp((wy - cy) + 4, 1, 144);
+ }
draw_sprite_part(spr_players_index, 0, 20, global.playable_character * 22, 20, 22, wx - 6, wy - 12);
if (fly_to != -1 && looking_area != -1)
{
- if (press(1004) && worldmap_curs_x != 0 && worldmap_curs_y != 0)
+ if ((press(1004) || mouse()) && worldmap_curs_x != 0 && worldmap_curs_y != 0)
{
var _dest = flight_landing_lookup(looking_area);
if (_dest[0] != -1)
--- old/code/gml_Object_obj_fairy_checker_Create_0.gml
+++ new/code/gml_Object_obj_fairy_checker_Create_0.gml
@@ -1,13 +1,18 @@
image_speed = 0;
-if (global.capture_data[target_monster] == 1)
+for (var i = target_monster; i < array_length(global.mondex); i++)
{
- image_index++;
+ if (global.capture_data[i] == 1)
+ {
+ image_index++;
+ break;
+ }
+ if (global.mondex[i][UnknownEnum.Value_13] <= 1)
+ {
+ break;
+ }
}
-else if (global.capture_data[target_monster + 1] == 1)
+
+enum UnknownEnum
{
- image_index++;
+ Value_13 = 13
}
-else if (global.capture_data[target_monster + 2] == 1)
-{
- image_index++;
-}
--- old/code/gml_Object_obj_globals_Create_0.gml
+++ new/code/gml_Object_obj_globals_Create_0.gml
@@ -215,6 +215,7 @@
{
global.vsync = ini_read_real("Player", "VSync", global.vsync);
}
+ global.CAPS_LOCKED = ini_read_real("Player", "Always Run", global.CAPS_LOCKED);
alarm_set(2, 2);
ini_close();
audio_master_gain(global.VOLUME);
--- old/code/gml_Object_obj_globals_Step_0.gml
+++ new/code/gml_Object_obj_globals_Step_0.gml
@@ -78,6 +78,7 @@
if (press(20))
{
global.CAPS_LOCKED = 1 - global.CAPS_LOCKED;
+ SAVE_SETTINGS();
}
if (press(80) && (global.admin || held(162)))
{
--- old/code/gml_Object_obj_language_Draw_0.gml
+++ new/code/gml_Object_obj_language_Draw_0.gml
@@ -201,6 +201,10 @@
{
trigger = 1;
global.language = sel;
+ if (global.language == 1 && !global.MOBILE)
+ {
+ global.hd_font = 1;
+ }
sfx(snd_select);
global.running_lang = 0;
if (global.language == 2 || global.language == 4 || global.language == 3)
--- old/code/gml_Object_obj_open_flight_Step_0.gml
+++ new/code/gml_Object_obj_open_flight_Step_0.gml
@@ -14,6 +14,7 @@
looking_area = -1;
worldmap_curs_x = 0;
worldmap_curs_y = 0;
+ fly_mouse_x = -1;
}
clear(1004);
}
--- old/code/gml_Object_obj_opening_scene_Draw_0.gml
+++ new/code/gml_Object_obj_opening_scene_Draw_0.gml
@@ -1,4 +1,4 @@
-if (press(32) || press(27) || mouse())
+if (press(32) || press(27) || press(1004) || mouse())
{
room_goto(rm_title);
exit;
--- old/code/gml_Object_obj_player_Create_0.gml
+++ new/code/gml_Object_obj_player_Create_0.gml
@@ -67,6 +67,10 @@
global.badges = 8;
}
}
+}
+if (global.quest[0] == 34 && global.badges < 8 && global.trainers[120] == 0)
+{
+ global.quest[0] = 33;
}
if (global.quest[0] == 31 && global.trainers[76] > 0)
{
--- old/code/gml_Object_obj_player_Step_0.gml
+++ new/code/gml_Object_obj_player_Step_0.gml
@@ -117,6 +117,7 @@
if (press(1005))
{
global.CAPS_LOCKED = 1 - global.CAPS_LOCKED;
+ SAVE_SETTINGS();
}
}
if (object_index != asset_get_index("obj_maiko") && (keyboard_check(vk_shift) || held(1005) || gamepad_button_check(0, gp_stickl) || global.CAPS_LOCKED))
@@ -189,7 +190,7 @@
{
moving = 0;
instance_activate_region(x - 256, y - 144, 512, 288, 1);
- if (layer_exists("Grass") && !global.hovercraft)
+ if (layer_exists("Grass") && !global.hovercraft && object_index != asset_get_index("obj_maiko"))
{
if (tile_meeting(x, y, "Grass") && !place_meeting(x, y, obj_cutscene_trigger))
{
--- old/code/gml_Object_obj_title_Draw_0.gml
+++ new/code/gml_Object_obj_title_Draw_0.gml
@@ -1,4 +1,4 @@
-if (keyboard_check_pressed(vk_escape) || press(1005))
+if (keyboard_check_pressed(vk_escape) || (global.MOBILE && press(1005)))
{
game_end();
}
--- old/code/gml_Object_par_door_Step_0.gml
+++ new/code/gml_Object_par_door_Step_0.gml
@@ -1,3 +1,7 @@
+if (instance_exists(obj_battle_transition))
+{
+ exit;
+}
if (place_meeting(x, y, obj_player) && !global.hovercraft)
{
if (obj_player.moving != 0)
--- old/code/gml_RoomCC_rm_worldmap_645_Create.gml
+++ new/code/gml_RoomCC_rm_worldmap_645_Create.gml
@@ -6,3 +6,7 @@
{
destroy();
}
+if (global.badges < 8)
+{
+ destroy();
+}
--- old/code/gml_RoomCC_rm_worldmap_702_Create.gml
+++ new/code/gml_RoomCC_rm_worldmap_702_Create.gml
@@ -15,7 +15,7 @@
{
mon_check++;
}
-if (global.capture_data[UnknownEnum.Value_115] == 1 || global.capture_data[UnknownEnum.Value_116] == 1 || global.capture_data[UnknownEnum.Value_117] == 1)
+if (global.capture_data[UnknownEnum.Value_115] == 1 || global.capture_data[UnknownEnum.Value_116] == 1 || global.capture_data[UnknownEnum.Value_117] == 1 || global.capture_data[UnknownEnum.Value_118] == 1 || global.capture_data[UnknownEnum.Value_119] == 1)
{
mon_check++;
}
@@ -29,7 +29,9 @@
Value_115 = 115,
Value_116,
Value_117,
- Value_120 = 120,
+ Value_118,
+ Value_119,
+ Value_120,
Value_121,
Value_122,
Value_123,
--- old/code/gml_RoomCC_rm_worldmap_707_PreCreate.gml
+++ new/code/gml_RoomCC_rm_worldmap_707_PreCreate.gml
@@ -1 +1 @@
-self.target_monster = 117;
+self.target_monster = 115;
--- old/code/gml_RoomCC_rm_worldmap_708_PreCreate.gml
+++ new/code/gml_RoomCC_rm_worldmap_708_PreCreate.gml
@@ -1 +1 @@
-self.target_monster = 122;
+self.target_monster = 120;
--- old/code/gml_RoomCC_rm_worldmap_709_PreCreate.gml
+++ new/code/gml_RoomCC_rm_worldmap_709_PreCreate.gml
@@ -1 +1 @@
-self.target_monster = 125;
+self.target_monster = 123;
--- old/code/gml_RoomCC_rm_worldmap_710_PreCreate.gml
+++ new/code/gml_RoomCC_rm_worldmap_710_PreCreate.gml
@@ -1 +1 @@
-self.target_monster = 128;
+self.target_monster = 126;
--- old/code/gml_RoomCC_rm_worldmap_711_Create.gml
+++ new/code/gml_RoomCC_rm_worldmap_711_Create.gml
@@ -15,7 +15,7 @@
{
mon_check++;
}
-if (global.capture_data[UnknownEnum.Value_115] == 1 || global.capture_data[UnknownEnum.Value_116] == 1 || global.capture_data[UnknownEnum.Value_117] == 1)
+if (global.capture_data[UnknownEnum.Value_115] == 1 || global.capture_data[UnknownEnum.Value_116] == 1 || global.capture_data[UnknownEnum.Value_117] == 1 || global.capture_data[UnknownEnum.Value_118] == 1 || global.capture_data[UnknownEnum.Value_119] == 1)
{
mon_check++;
}
@@ -29,7 +29,9 @@
Value_115 = 115,
Value_116,
Value_117,
- Value_120 = 120,
+ Value_118,
+ Value_119,
+ Value_120,
Value_121,
Value_122,
Value_123,
--- old/Localization/english_items.txt
+++ new/Localization/english_items.txt
@@ -83,7 +83,7 @@
55 She suddenly cracked out of the Ember Soul. She's following you around!
56 Theft Captal
-57 Lets you steal monsters from other Rangers. The battle ends on use.
+57 Steals a Bound monster from a Ranger, in single battles only. The battle ends on use.
58 Orb Shards
59 Apparently you can level up your monsters with this? Neat!
--- old/Localization/english_ui.txt
+++ new/Localization/english_ui.txt
@@ -287,8 +287,8 @@
346 Change the difficulty of battles. Default: Normal
347 Monsters will faint and can be revived. Default: Faint
348 Monsters permanently disappear upon reaching 0 HP. Default: Faint
-349 There is no monsters capture limit
-350 You can only capture and use up to 6 monsters
+349 You can capture and use as many monsters as you need
+350 WARNING: You will only be able capture 6 monsters total (hyper difficulty)
351 Dokimon
352 Disable Partner Death
