@@ -131,20 +131,29 @@ bool SelectionDialogDetector::detect(const ImageViewRGB32& screen){
131131BattleDialogDetector::BattleDialogDetector (Color color)
132132 : m_dialog_top_box(0.0372308 , 0.750154 , 0.925538 , 0.00934615 )
133133 , m_dialog_right_box(0.956615 , 0.7595 , 0.00615385 , 0.185885 )
134+ , m_dialog_top_jpn_box(0.043890 , 0.749227 , 0.910248 , 0.008023 ) // jpn positions might work for other languages
135+ , m_dialog_right_jpn_box(0.950583 , 0.751901 , 0.003556 , 0.199230 ) // dialog might get in the way though
134136{}
135137void BattleDialogDetector::make_overlays (VideoOverlaySet& items) const {
136138 const BoxOption& GAME_BOX = GameSettings::instance ().GAME_BOX ;
137139 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_top_box));
138140 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_right_box));
141+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_top_jpn_box));
142+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_right_jpn_box));
139143}
140144bool BattleDialogDetector::detect (const ImageViewRGB32& screen){
141145 ImageViewRGB32 game_screen = extract_box_reference (screen, GameSettings::instance ().GAME_BOX );
142146
143147 ImageViewRGB32 dialog_top_image = extract_box_reference (game_screen, m_dialog_top_box);
144148 ImageViewRGB32 dialog_right_image = extract_box_reference (game_screen, m_dialog_right_box);
149+ ImageViewRGB32 dialog_top_jpn_image = extract_box_reference (game_screen, m_dialog_top_jpn_box);
150+ ImageViewRGB32 dialog_right_jpn_image = extract_box_reference (game_screen, m_dialog_right_jpn_box);
145151
146- if (is_solid (dialog_top_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
147- && is_solid (dialog_right_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
152+ if ((is_solid (dialog_top_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
153+ && is_solid (dialog_right_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 ))
154+ ||
155+ (is_solid (dialog_top_jpn_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
156+ && is_solid (dialog_right_jpn_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 ))
148157 ){
149158 return true ;
150159 }
@@ -157,29 +166,47 @@ BattleMenuDetector::BattleMenuDetector(Color color)
157166 , m_menu_right_box(0.961538 , 0.752231 , 0.00615385 , 0.200423 )
158167 , m_dialog_top_box(0.036 , 0.749115 , 0.459077 , 0.0135 )
159168 , m_dialog_right_box(0.490154 , 0.762615 , 0.00615385 , 0.178615 ) // right side, closest to the menu
169+ , m_menu_top_jpn_box(0.593239 , 0.743878 , 0.373344 , 0.009360 ) // very different positions!
170+ , m_menu_right_jpn_box(0.961538 , 0.752231 , 0.00615385 , 0.200423 )
171+ , m_dialog_top_jpn_box(0.043001 , 0.750564 , 0.520015 , 0.002674 )
172+ , m_dialog_right_jpn_box(0.559460 , 0.750564 , 0.003556 , 0.196556 )
160173{}
161174void BattleMenuDetector::make_overlays (VideoOverlaySet& items) const {
162175 const BoxOption& GAME_BOX = GameSettings::instance ().GAME_BOX ;
163176 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_menu_top_box));
164177 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_menu_right_box));
165178 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_top_box));
166179 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_right_box));
180+
181+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_menu_top_jpn_box));
182+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_menu_right_jpn_box));
183+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_top_jpn_box));
184+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_right_jpn_box));
167185}
168186bool BattleMenuDetector::detect (const ImageViewRGB32& screen){
169187 ImageViewRGB32 game_screen = extract_box_reference (screen, GameSettings::instance ().GAME_BOX );
170188
171189 // Menu is white
172190 ImageViewRGB32 menu_top_image = extract_box_reference (game_screen, m_menu_top_box);
173191 ImageViewRGB32 menu_right_image = extract_box_reference (game_screen, m_menu_right_box);
192+ ImageViewRGB32 menu_top_jpn_image = extract_box_reference (game_screen, m_menu_top_jpn_box);
193+ ImageViewRGB32 menu_right_jpn_image = extract_box_reference (game_screen, m_menu_right_jpn_box);
174194
175195 // Background dialog is teal
176196 ImageViewRGB32 dialog_top_image = extract_box_reference (game_screen, m_dialog_top_box);
177197 ImageViewRGB32 dialog_right_image = extract_box_reference (game_screen, m_dialog_right_box);
198+ ImageViewRGB32 dialog_top_jpn_image = extract_box_reference (game_screen, m_dialog_top_jpn_box);
199+ ImageViewRGB32 dialog_right_jpn_image = extract_box_reference (game_screen, m_dialog_right_jpn_box);
178200
179- if (is_white (menu_top_image)
201+ if (( is_white (menu_top_image) // All languages except japanese
180202 && is_white (menu_right_image)
181203 && is_solid (dialog_top_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 ) // 40, 81, 106 teal
182- && is_solid (dialog_right_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
204+ && is_solid (dialog_right_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 ))
205+ ||
206+ (is_white (menu_top_jpn_image) // japanese
207+ && is_white (menu_right_jpn_image)
208+ && is_solid (dialog_top_jpn_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
209+ && is_solid (dialog_right_jpn_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 ))
183210 ){
184211 return true ;
185212 }
@@ -191,12 +218,18 @@ AdvanceBattleDialogDetector::AdvanceBattleDialogDetector(Color color)
191218 : m_dialog_box(0.036 , 0.748077 , 0.926769 , 0.204577 )
192219 , m_dialog_top_box(0.0372308 , 0.750154 , 0.925538 , 0.00934615 )
193220 , m_dialog_right_box(0.956615 , 0.7595 , 0.00615385 , 0.185885 )
221+ , m_dialog_jpn_box(0.043890 , 0.749227 , 0.911137 , 0.203242 ) // this position is very different!
222+ , m_dialog_top_jpn_box(0.043890 , 0.749227 , 0.910248 , 0.008023 )
223+ , m_dialog_right_jpn_box(0.950583 , 0.751901 , 0.003556 , 0.199230 )
194224{}
195225void AdvanceBattleDialogDetector::make_overlays (VideoOverlaySet& items) const {
196226 const BoxOption& GAME_BOX = GameSettings::instance ().GAME_BOX ;
197227 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_box));
198228 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_top_box));
199229 items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_right_box));
230+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_jpn_box));
231+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_top_jpn_box));
232+ items.add (COLOR_RED, GAME_BOX.inner_to_outer (m_dialog_right_jpn_box));
200233}
201234bool AdvanceBattleDialogDetector::detect (const ImageViewRGB32& screen){
202235 ImageViewRGB32 game_screen = extract_box_reference (screen, GameSettings::instance ().GAME_BOX );
@@ -217,13 +250,27 @@ bool AdvanceBattleDialogDetector::detect(const ImageViewRGB32& screen){
217250 cout << stats.average.b << endl;
218251 */
219252
253+ // japanese
254+ ImageRGB32 filtered_region_jpn = filter_rgb32_range (
255+ extract_box_reference (game_screen, m_dialog_jpn_box),
256+ combine_rgb (164 , 0 , 0 ), combine_rgb (255 , 114 , 87 ), Color (0 ), replace_color_within_range
257+ );
258+ ImageStats stats2 = image_stats (filtered_region_jpn);
259+
220260 ImageViewRGB32 dialog_top_image = extract_box_reference (game_screen, m_dialog_top_box);
221261 ImageViewRGB32 dialog_right_image = extract_box_reference (game_screen, m_dialog_right_box);
262+ ImageViewRGB32 dialog_top_jpn_image = extract_box_reference (game_screen, m_dialog_top_jpn_box);
263+ ImageViewRGB32 dialog_right_jpn_image = extract_box_reference (game_screen, m_dialog_right_jpn_box);
222264
223- if (is_solid (dialog_top_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
265+ if (( is_solid (dialog_top_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
224266 && is_solid (dialog_right_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
225267 && (stats.average .r > stats.average .b + 180 )
226- && (stats.average .r > stats.average .g + 180 )
268+ && (stats.average .r > stats.average .g + 180 ))
269+ ||
270+ (is_solid (dialog_top_jpn_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
271+ && is_solid (dialog_right_jpn_image, { 0.176 , 0.357 , 0.467 }, 0.25 , 20 )
272+ && (stats2.average .r > stats2.average .b + 180 )
273+ && (stats2.average .r > stats2.average .g + 180 ))
227274 ){
228275 return true ;
229276 }
0 commit comments