gameboy_worlds.emulation.harvest_moon.test_metrics

   1from typing import Optional
   2from abc import ABC
   3
   4from gameboy_worlds.emulation.harvest_moon.parsers import HarvestMoonStateParser, BaseHarvestMoonStateParser
   5from gameboy_worlds.emulation.tracker import (
   6    RegionMatchTerminationOnlyMetric,
   7    TerminationMetric,
   8    RegionMatchTerminationMetric,
   9    TerminationTruncationMetric,
  10    RegionMatchSubGoal,
  11    AnyRegionMatchSubGoal,
  12)
  13
  14
  15class MultiRegionMatchTerminationMetric(TerminationTruncationMetric, ABC):
  16    """
  17    Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied.
  18    OR_PAIRS: list of (region, target) — at least one must match.
  19    ALL_PAIRS: list of (region, target) — every one must match.
  20    NOT_PAIRS: list of (region, target) — none must match.
  21    Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches).
  22    Any list may be empty, in which case its condition is trivially satisfied.
  23    """
  24
  25    REQUIRED_PARSER = BaseHarvestMoonStateParser
  26    _OR_PAIRS: list = []
  27    _ALL_PAIRS: list = []
  28    _NOT_PAIRS: list = []
  29
  30    def determine_terminated(self, current_frame, recent_frames):
  31        all_frames = [current_frame]
  32        if recent_frames is not None:
  33            all_frames = recent_frames
  34        for frame in all_frames:
  35            or_ok = (not self._OR_PAIRS) or any(
  36                self.state_parser.named_region_matches_multi_target(frame, region, target)
  37                for region, target in self._OR_PAIRS
  38            )
  39            all_ok = all(
  40                self.state_parser.named_region_matches_multi_target(frame, region, target)
  41                for region, target in self._ALL_PAIRS
  42            )
  43            not_ok = not any(
  44                self.state_parser.named_region_matches_multi_target(frame, region, target)
  45                for region, target in self._NOT_PAIRS
  46            )
  47            if or_ok and all_ok and not_ok:
  48                return True
  49        return False
  50
  51class PreviousFrameTerminateMetric(TerminationTruncationMetric, ABC):
  52    """
  53    Terminates based on what was on screen BEFORE the final action.
  54
  55    _TERMINATION_NAMED_REGION / _TERMINATION_TARGET_NAME: checked against the
  56    last frame of the previous step (i.e. the frame visible before the action).
  57
  58    _CURRENT_NAMED_REGION / _CURRENT_TARGET_NAME: optional additional check
  59    against the current step's frames (e.g. confirming the action had effect).
  60    Both conditions must be satisfied when the current fields are set.
  61
  62    _prev_frame is updated AFTER super().step() so that determine_terminated
  63    always sees the frame from the step before the current one.
  64    """
  65    REQUIRED_PARSER = BaseHarvestMoonStateParser
  66    _TERMINATION_NAMED_REGION: str = None
  67    _TERMINATION_TARGET_NAME: str = None
  68    _CURRENT_NAMED_REGION: str = None
  69    _CURRENT_TARGET_NAME: str = None
  70
  71    def step(self, current_frame, recent_frames):
  72        super().step(current_frame, recent_frames)
  73        self._prev_frame = recent_frames[-1] if recent_frames is not None else current_frame
  74
  75    def determine_terminated(self, current_frame, recent_frames):
  76        if not hasattr(self, "_prev_frame"):
  77            return False
  78        prev_ok = self.state_parser.named_region_matches_multi_target(
  79            self._prev_frame,
  80            self._TERMINATION_NAMED_REGION,
  81            self._TERMINATION_TARGET_NAME,
  82        )
  83        if not prev_ok:
  84            return False
  85        if self._CURRENT_NAMED_REGION is None:
  86            return True
  87        all_frames = recent_frames if recent_frames is not None else [current_frame]
  88        return any(
  89            self.state_parser.named_region_matches_multi_target(
  90                frame, self._CURRENT_NAMED_REGION, self._CURRENT_TARGET_NAME
  91            )
  92            for frame in all_frames
  93        )
  94
  95class ChickenCoopTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
  96    REQUIRED_PARSER = BaseHarvestMoonStateParser
  97
  98    _TERMINATION_NAMED_REGION = "screen_bottom"
  99    _TERMINATION_TARGET_NAME = "chicken_coop_entrance"
 100
 101class OutsideChickenCoopSubgoal(AnyRegionMatchSubGoal):
 102    NAME = "outside_chicken_coop"
 103    _NAMED_REGIONS = [
 104        "screen_middle",
 105        "screen_middle",
 106        "screen_middle",
 107    ]
 108    _TARGET_NAMES = [
 109        "outside_chicken_coop_left",
 110        "outside_chicken_coop_right",
 111        "outside_chicken_coop_up",
 112    ]
 113
 114class OutsideChickenCoop2Subgoal(AnyRegionMatchSubGoal):
 115    NAME = "outside_chicken_coop"
 116    _NAMED_REGIONS = [
 117        "outside_barns",
 118        "outside_barns",
 119        "outside_barns",
 120    ]
 121    _TARGET_NAMES = [
 122        "outside_chicken_coop_left",
 123        "outside_chicken_coop_right",
 124        "outside_chicken_coop_up",
 125    ]
 126    
 127class OutsideChickenCoop3Subgoal(AnyRegionMatchSubGoal):
 128    NAME = "outside_chicken_coop"
 129    _NAMED_REGIONS = [
 130        "outside_chicken_coop",
 131        "outside_chicken_coop",
 132        "outside_chicken_coop",
 133    ]
 134    _TARGET_NAMES = [
 135        "outside_chicken_coop_left",
 136        "outside_chicken_coop_right",
 137        "outside_chicken_coop_up",
 138    ]
 139    
 140class CowBarnTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 141    REQUIRED_PARSER = BaseHarvestMoonStateParser
 142
 143    _TERMINATION_NAMED_REGION = "screen_bottom"
 144    _TERMINATION_TARGET_NAME = "cow_barn_entrance"
 145
 146class OutsideCowBarnSubgoal(AnyRegionMatchSubGoal):
 147    NAME = "outside_cow_barn"
 148    _NAMED_REGIONS = [
 149        "screen_middle",
 150        "screen_middle",
 151        "screen_middle",
 152    ]
 153    _TARGET_NAMES = [
 154        "outside_cow_barn_left",
 155        "outside_cow_barn_right",
 156        "outside_cow_barn_up",
 157    ]
 158
 159class OutsideCowBarn2Subgoal(AnyRegionMatchSubGoal):
 160    NAME = "outside_cow_barn"
 161    _NAMED_REGIONS = [
 162        "outside_barns",
 163        "outside_barns",
 164        "outside_barns",
 165    ]
 166    _TARGET_NAMES = [
 167        "outside_cow_barn_left",
 168        "outside_cow_barn_right",
 169        "outside_cow_barn_up",
 170    ]
 171
 172class StorageTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 173    REQUIRED_PARSER = BaseHarvestMoonStateParser
 174
 175    _TERMINATION_NAMED_REGION = "screen_bottom"
 176    _TERMINATION_TARGET_NAME = "storage_shed_entrance"
 177
 178class OutsideStorageSubgoal(AnyRegionMatchSubGoal):
 179    NAME = "outside_storage_shed"
 180    _NAMED_REGIONS = [
 181        "screen_middle",
 182        "screen_middle",
 183        "screen_middle",
 184    ]
 185    _TARGET_NAMES = [
 186        "outside_storage_left",
 187        "outside_storage_right",
 188        "outside_storage_up",
 189    ]
 190    
 191class PickupWaterCanTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 192    REQUIRED_PARSER = BaseHarvestMoonStateParser
 193
 194    _TERMINATION_NAMED_REGION = "dialogue_box_top"
 195    _TERMINATION_TARGET_NAME = "pick_up_watercan"
 196
 197class NextToWaterCanSubgoal(AnyRegionMatchSubGoal):
 198    NAME = "next_to_water_can"
 199    _NAMED_REGIONS = [
 200        "item_watercan_above",
 201        "item_watercan_right",
 202        "item_watercan_below",
 203    ]
 204    _TARGET_NAMES = [
 205        "pickup_watercan_down",
 206        "pickup_watercan_left",
 207        "pickup_watercan_up",
 208    ]
 209    
 210class PickupCowBellTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 211    REQUIRED_PARSER = BaseHarvestMoonStateParser
 212
 213    _TERMINATION_NAMED_REGION = "dialogue_box_top_mid"
 214    _TERMINATION_TARGET_NAME = "pick_up_cowbell"
 215
 216class NextToCowBellSubgoal(AnyRegionMatchSubGoal):
 217    NAME = "next_to_cowbell"
 218    _NAMED_REGIONS = [
 219        "item_cowbell_above",
 220        "item_cowbell_below",
 221    ]
 222    _TARGET_NAMES = [
 223        "next_to_cowbell_down",
 224        "next_to_cowbell_up",
 225    ]
 226
 227class PickupSickleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 228    REQUIRED_PARSER = BaseHarvestMoonStateParser
 229
 230    _TERMINATION_NAMED_REGION = "dialogue_box_top_mid"
 231    _TERMINATION_TARGET_NAME = "pick_up_sickle"
 232
 233class NextToSickleSubgoal(AnyRegionMatchSubGoal):
 234    NAME = "next_to_sickle"
 235    _NAMED_REGIONS = [
 236        "item_sickle_above",
 237        "item_sickle_left",
 238        "item_sickle_below",
 239    ]
 240    _TARGET_NAMES = [
 241        "pickup_sickle_down",
 242        "pickup_sickle_right",
 243        "pickup_sickle_up",
 244    ]
 245
 246class PickupHoeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 247    REQUIRED_PARSER = BaseHarvestMoonStateParser
 248
 249    _TERMINATION_NAMED_REGION = "dialogue_box_top_short"
 250    _TERMINATION_TARGET_NAME = "pick_up_hoe"
 251
 252class NextToHoeSubgoal(AnyRegionMatchSubGoal):
 253    NAME = "next_to_hoe"
 254    _NAMED_REGIONS = [
 255        "item_hoe_above",
 256        "item_hoe_below",
 257    ]
 258    _TARGET_NAMES = [
 259        "pickup_hoe_down",
 260        "pickup_hoe_up",
 261    ]
 262
 263class PickupHammerTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 264    REQUIRED_PARSER = BaseHarvestMoonStateParser
 265
 266    _TERMINATION_NAMED_REGION = "dialogue_box_top_mid"
 267    _TERMINATION_TARGET_NAME = "pick_up_hammer"
 268
 269class NextToHammerSubgoal(AnyRegionMatchSubGoal):
 270    NAME = "next_to_hammer"
 271    _NAMED_REGIONS = [
 272        "item_hammer_above",
 273        "item_hammer_below",
 274    ]
 275    _TARGET_NAMES = [
 276        "pickup_hammer_down",
 277        "pickup_hammer_up",
 278    ]
 279
 280class PickupGrassSeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 281    REQUIRED_PARSER = BaseHarvestMoonStateParser
 282
 283    _TERMINATION_NAMED_REGION = "dialogue_box_top"
 284    _TERMINATION_TARGET_NAME = "pick_up_grass_seed"
 285
 286class NextToGrassSeedSubgoal(AnyRegionMatchSubGoal):
 287    NAME = "next_to_grass_seed"
 288    _NAMED_REGIONS = [
 289        "item_grass_seed_above",
 290        "item_grass_seed_right",
 291        "item_grass_seed_below",
 292    ]
 293    _TARGET_NAMES = [
 294        "pickup_grass_seed_down",
 295        "pickup_grass_seed_left",
 296        "pickup_grass_seed_up",
 297    ]
 298
 299class GoToSleepTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 300    REQUIRED_PARSER = BaseHarvestMoonStateParser
 301
 302    _TERMINATION_NAMED_REGION = "item_bed"
 303    _TERMINATION_TARGET_NAME = "sleep_in_bed"
 304    
 305class SleepOptionSubgoal(AnyRegionMatchSubGoal):
 306    NAME = "sleep_option"
 307    _NAMED_REGIONS = [
 308        "dialogue_box_bottom",
 309    ]
 310    _TARGET_NAMES = [
 311        "choose_yes_for_sleep",
 312    ]
 313    
 314class FeedSpiritTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 315    REQUIRED_PARSER = BaseHarvestMoonStateParser
 316
 317    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 318    _TERMINATION_TARGET_NAME = "fed_spirit"
 319
 320class HelpSpiritEarthquakeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 321    REQUIRED_PARSER = BaseHarvestMoonStateParser
 322
 323    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 324    _TERMINATION_TARGET_NAME = "helped_spirit_earthquake"
 325
 326class NextToSpiritSubgoal(AnyRegionMatchSubGoal):
 327    NAME = "next_to_spirit"
 328    _NAMED_REGIONS = [
 329        "item_spirit_left",
 330        "item_spirit_below",
 331        "item_spirit_above",
 332    ]
 333    _TARGET_NAMES = [
 334        "feed_spirit_right",
 335        "feed_spirit_up",
 336        "feed_spirit_down",
 337    ]
 338
 339class NextToEarthquakeSpiritSubgoal(AnyRegionMatchSubGoal):
 340    NAME = "next_to_spirit_earthquake"
 341    _NAMED_REGIONS = [
 342        "item_spirit_left",
 343        "item_spirit_below",
 344        "item_spirit_above",
 345    ]
 346    _TARGET_NAMES = [
 347        "help_spirit_earthquake_right",
 348        "help_spirit_earthquake_up",
 349        "help_spirit_earthquake_down",
 350    ]
 351
 352class WaterTurnipTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
 353    REQUIRED_PARSER = BaseHarvestMoonStateParser
 354    _OR_PAIRS = [
 355        ("turnip_center", "finish_watering_1"),
 356        ("turnip_center", "finish_watering_2"),
 357    ]
 358
 359class NextToTurnipSubgoal(AnyRegionMatchSubGoal):
 360    NAME = "next_to_turnip"
 361    _NAMED_REGIONS = ["turnip_top", "turnip_top"]
 362    _TARGET_NAMES = ["ready_to_water_1", "ready_to_water_2"]
 363    
 364class BuyMaterialTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 365    REQUIRED_PARSER = BaseHarvestMoonStateParser
 366
 367    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 368    _TERMINATION_TARGET_NAME = "bought_material"
 369
 370class OutsideCarpenter1Subgoal(AnyRegionMatchSubGoal):
 371    NAME = "outside_carpenter"
 372    _NAMED_REGIONS = [
 373        "center_sign",
 374    ]
 375    _TARGET_NAMES = [
 376        "outside_carpenter",
 377    ]
 378
 379class ShopForMaterialSubgoal(AnyRegionMatchSubGoal):
 380    NAME = "shop_for_material"
 381    _NAMED_REGIONS = [
 382        "screen_top_half",
 383    ]
 384    _TARGET_NAMES = [
 385        "in_carpenter",
 386    ]
 387
 388class SelectMaterialSubgoal(AnyRegionMatchSubGoal):
 389    NAME = "selected_material"
 390    _NAMED_REGIONS = [
 391        "dialogue_box_bottom",
 392    ]
 393    _TARGET_NAMES = [
 394        "select_material",
 395    ]
 396
 397class BuyChickenTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 398    REQUIRED_PARSER = BaseHarvestMoonStateParser
 399
 400    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 401    _TERMINATION_TARGET_NAME = "bought_chicken"
 402
 403class OutsideAnimalShop1Subgoal(AnyRegionMatchSubGoal):
 404    NAME = "outside_animal_shop"
 405    _NAMED_REGIONS = [
 406        "center_sign",
 407    ]
 408    _TARGET_NAMES = [
 409        "outside_animal_shop",
 410    ]
 411
 412class ShopForAnimalSubgoal(AnyRegionMatchSubGoal):
 413    NAME = "shop_for_animal"
 414    _NAMED_REGIONS = [
 415        "screen_top_half",
 416    ]
 417    _TARGET_NAMES = [
 418        "in_animal_shop",
 419    ]
 420
 421class SelectChickenSubgoal(AnyRegionMatchSubGoal):
 422    NAME = "selected_chicken"
 423    _NAMED_REGIONS = [
 424        "dialogue_box_bottom",
 425    ]
 426    _TARGET_NAMES = [
 427        "select_chicken",
 428    ]
 429
 430class SelectCowSubgoal(AnyRegionMatchSubGoal):
 431    NAME = "selected_cow"
 432    _NAMED_REGIONS = [
 433        "dialogue_box_bottom",
 434    ]
 435    _TARGET_NAMES = [
 436        "select_cow",
 437    ]
 438
 439class BuyCowTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 440    REQUIRED_PARSER = BaseHarvestMoonStateParser
 441
 442    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 443    _TERMINATION_TARGET_NAME = "bought_named_cow"
 444
 445class SellChickenTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 446    REQUIRED_PARSER = BaseHarvestMoonStateParser
 447
 448    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 449    _TERMINATION_TARGET_NAME = "sold_chicken"
 450
 451class SelectSellingChickenSubgoal(AnyRegionMatchSubGoal):
 452    NAME = "selected_selling_chicken"
 453    _NAMED_REGIONS = [
 454        "dialogue_box_bottom",
 455    ]
 456    _TARGET_NAMES = [
 457        "select_selling_chicken",
 458    ]
 459
 460# HM2 sell cow task
 461class SellCowTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 462    REQUIRED_PARSER = BaseHarvestMoonStateParser
 463    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 464    _TERMINATION_TARGET_NAME = "sold_cow"
 465
 466class SelectSellingCowSubgoal(AnyRegionMatchSubGoal):
 467    NAME = "selected_selling_cow"
 468    _NAMED_REGIONS = [
 469        "dialogue_box_bottom",
 470    ]
 471    _TARGET_NAMES = [
 472        "select_selling_cow",
 473    ]
 474
 475# HM2 get hothouse estimate task
 476class ShopForConstructionEstimatesSubgoal(AnyRegionMatchSubGoal):
 477    NAME = "shop_for_construction_estimates"
 478    _NAMED_REGIONS = ["screen_top_half"]
 479    _TARGET_NAMES = ["shop_for_construction_estimates"]
 480
 481class SelectHothouseSubgoal(AnyRegionMatchSubGoal):
 482    NAME = "selected_hothouse"
 483    _NAMED_REGIONS = ["dialogue_box_bottom"]
 484    _TARGET_NAMES = ["select_hothouse"]
 485
 486class GetHothouseEstimateTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 487    REQUIRED_PARSER = BaseHarvestMoonStateParser
 488    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 489    _TERMINATION_TARGET_NAME = "hothouse_estimate"
 490
 491class BuyCowBrushTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 492    REQUIRED_PARSER = BaseHarvestMoonStateParser
 493
 494    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 495    _TERMINATION_TARGET_NAME = "bought_cow_brush"
 496
 497class BuySaddlebagTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 498    REQUIRED_PARSER = BaseHarvestMoonStateParser
 499
 500    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 501    _TERMINATION_TARGET_NAME = "bought_saddlebag"
 502
 503class BuyMilkerTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 504    REQUIRED_PARSER = BaseHarvestMoonStateParser
 505
 506    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 507    _TERMINATION_TARGET_NAME = "bought_milker"
 508
 509class OutsideToolShop1Subgoal(AnyRegionMatchSubGoal):
 510    NAME = "outside_tool_shop"
 511    _NAMED_REGIONS = [
 512        "center_sign",
 513    ]
 514    _TARGET_NAMES = [
 515        "outside_tool_shop",
 516    ]
 517
 518class ShopForToolsSubgoal(AnyRegionMatchSubGoal):
 519    NAME = "shop_for_tools"
 520    _NAMED_REGIONS = [
 521        "screen_top_half",
 522    ]
 523    _TARGET_NAMES = [
 524        "in_tool_shop",
 525    ]
 526
 527class SelectCowBrushSubgoal(AnyRegionMatchSubGoal):
 528    NAME = "selected_cow_brush"
 529    _NAMED_REGIONS = [
 530        "dialogue_box_bottom",
 531    ]
 532    _TARGET_NAMES = [
 533        "select_cow_brush",
 534    ]
 535
 536class SelectSaddlebagSubgoal(AnyRegionMatchSubGoal):
 537    NAME = "selected_saddlebag"
 538    _NAMED_REGIONS = [
 539        "dialogue_box_bottom",
 540    ]
 541    _TARGET_NAMES = [
 542        "select_saddlebag",
 543    ]
 544
 545class SelectMilkerSubgoal(AnyRegionMatchSubGoal):
 546    NAME = "selected_milker"
 547    _NAMED_REGIONS = [
 548        "dialogue_box_bottom",
 549    ]
 550    _TARGET_NAMES = [
 551        "select_milker",
 552    ]
 553
 554class BuyRiceBallTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 555    REQUIRED_PARSER = BaseHarvestMoonStateParser
 556
 557    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 558    _TERMINATION_TARGET_NAME = "bought_rice_ball"
 559    
 560class OutsideRestaurantSubgoal(AnyRegionMatchSubGoal):
 561    NAME = "outside_restaurant"
 562    _NAMED_REGIONS = [
 563        "center_sign",
 564    ]
 565    _TARGET_NAMES = [
 566        "outside_restaurant",
 567    ]
 568    
 569class ShopForFoodSubgoal(AnyRegionMatchSubGoal):
 570    NAME = "shop_for_food"
 571    _NAMED_REGIONS = [
 572        "screen_top_half",
 573    ]
 574    _TARGET_NAMES = [
 575        "in_restaurant",
 576    ]
 577    
 578class SelectRiceBallSubgoal(AnyRegionMatchSubGoal):
 579    NAME = "selected_rice_ball"
 580    _NAMED_REGIONS = [
 581        "dialogue_box_bottom",
 582    ]
 583    _TARGET_NAMES = [
 584        "select_rice_ball",
 585    ]
 586    
 587class BuyRiceBallOptionSubgoal(AnyRegionMatchSubGoal):
 588    NAME = "buy_rice_ball_option"
 589    _NAMED_REGIONS = [
 590        "screen_bottom_half",
 591    ]
 592    _TARGET_NAMES = [
 593        "option_to_buy_rice_ball",
 594    ]
 595
 596class BuyCroissantTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 597    REQUIRED_PARSER = BaseHarvestMoonStateParser
 598
 599    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 600    _TERMINATION_TARGET_NAME = "bought_croissant"
 601
 602class SelectCroissantSubgoal(AnyRegionMatchSubGoal):
 603    NAME = "selected_croissant"
 604    _NAMED_REGIONS = [
 605        "dialogue_box_bottom",
 606    ]
 607    _TARGET_NAMES = [
 608        "select_croissant",
 609    ]
 610
 611class BuyCroissantOptionSubgoal(AnyRegionMatchSubGoal):
 612    NAME = "buy_croissant_option"
 613    _NAMED_REGIONS = [
 614        "screen_bottom_half",
 615    ]
 616    _TARGET_NAMES = [
 617        "option_to_buy_croissant",
 618    ]
 619
 620class BuyCakeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 621    REQUIRED_PARSER = BaseHarvestMoonStateParser
 622
 623    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 624    _TERMINATION_TARGET_NAME = "bought_cake"
 625
 626class SelectCakeSubgoal(AnyRegionMatchSubGoal):
 627    NAME = "selected_cake"
 628    _NAMED_REGIONS = [
 629        "dialogue_box_bottom",
 630    ]
 631    _TARGET_NAMES = [
 632        "select_cake",
 633    ]
 634
 635class BuyCakeOptionSubgoal(AnyRegionMatchSubGoal):
 636    NAME = "buy_cake_option"
 637    _NAMED_REGIONS = [
 638        "screen_bottom_half",
 639    ]
 640    _TARGET_NAMES = [
 641        "option_to_buy_cake",
 642    ]
 643
 644class OutsideJuiceBarSubgoal(AnyRegionMatchSubGoal):
 645    NAME = "outside_juice_bar"
 646    _NAMED_REGIONS = [
 647        "center_sign",
 648    ]
 649    _TARGET_NAMES = [
 650        "outside_juice_bar",
 651    ]
 652
 653class ShopForJuiceSubgoal(AnyRegionMatchSubGoal):
 654    NAME = "shop_for_juice"
 655    _NAMED_REGIONS = [
 656        "screen_top_half",
 657    ]
 658    _TARGET_NAMES = [
 659        "in_juice_bar",
 660    ]
 661
 662class BuyGrapeJuiceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 663    REQUIRED_PARSER = BaseHarvestMoonStateParser
 664
 665    _TERMINATION_NAMED_REGION = "screen_bottom_half"
 666    _TERMINATION_TARGET_NAME = "bought_grape_juice"
 667
 668class SelectGrapeJuiceSubgoal(AnyRegionMatchSubGoal):
 669    NAME = "selected_grape_juice"
 670    _NAMED_REGIONS = [
 671        "dialogue_box_bottom",
 672    ]
 673    _TARGET_NAMES = [
 674        "select_grape_juice",
 675    ]
 676
 677class BuyGrapeJuiceOptionSubgoal(AnyRegionMatchSubGoal):
 678    NAME = "buy_grape_juice_option"
 679    _NAMED_REGIONS = [
 680        "screen_bottom_half",
 681    ]
 682    _TARGET_NAMES = [
 683        "option_to_buy_grape_juice",
 684    ]
 685
 686class GoToChurchPrayTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 687    REQUIRED_PARSER = BaseHarvestMoonStateParser
 688
 689    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 690    _TERMINATION_TARGET_NAME = "praying"
 691
 692class OutsideChurchSubgoal(AnyRegionMatchSubGoal):
 693    NAME = "outside_church"
 694    _NAMED_REGIONS = [
 695        "center_sign",
 696    ]
 697    _TARGET_NAMES = [
 698        "outside_church",
 699    ]
 700
 701class InsideChurchSubgoal(AnyRegionMatchSubGoal):
 702    NAME = "inside_church"
 703    _NAMED_REGIONS = [
 704        "screen_top_half",
 705    ]
 706    _TARGET_NAMES = [
 707        "in_church",
 708    ]
 709
 710class PrayOptionSubgoal(AnyRegionMatchSubGoal):
 711    NAME = "choose_to_pray"
 712    _NAMED_REGIONS = [
 713        "dialogue_box_bottom",
 714    ]
 715    _TARGET_NAMES = [
 716        "option_to_pray",
 717    ]
 718
 719class OpenStorageListTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 720    REQUIRED_PARSER = BaseHarvestMoonStateParser
 721
 722    _TERMINATION_NAMED_REGION = "left_border_frame"
 723    _TERMINATION_TARGET_NAME = "open_storage_list"
 724    
 725class NextToStorageListSubgoal(AnyRegionMatchSubGoal):
 726    NAME = "next_to_storage_list"
 727    _NAMED_REGIONS = [
 728        "item_storage_list",
 729    ]
 730    _TARGET_NAMES = [
 731        "next_to_storage_list",
 732    ]
 733
 734class ReadFerrySignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 735    REQUIRED_PARSER = BaseHarvestMoonStateParser
 736
 737    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 738    _TERMINATION_TARGET_NAME = "reading_ferry_sign"
 739
 740class NextToFerrySignSubgoal(AnyRegionMatchSubGoal):
 741    NAME = "next_to_ferry_sign"
 742    _NAMED_REGIONS = [
 743        "item_ferry_sign_above",
 744        "item_ferry_sign_left",
 745    ]
 746    _TARGET_NAMES = [
 747        "next_to_ferry_sign_down",
 748        "next_to_ferry_sign_right",
 749    ]
 750
 751class FindSecretSavingsTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 752    REQUIRED_PARSER = BaseHarvestMoonStateParser
 753
 754    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 755    _TERMINATION_TARGET_NAME = "found_secret_savings"
 756
 757class NextToFireplaceSubgoal(AnyRegionMatchSubGoal):
 758    NAME = "next_to_fireplace"
 759    _NAMED_REGIONS = [
 760        "item_fireplace_below",
 761    ]
 762    _TARGET_NAMES = [
 763        "next_to_fireplace_up",
 764    ]
 765
 766class FindLuckyMoneyTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 767    REQUIRED_PARSER = BaseHarvestMoonStateParser
 768
 769    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 770    _TERMINATION_TARGET_NAME = "found_lucky_money"
 771
 772class NextToClockSubgoal(AnyRegionMatchSubGoal):
 773    NAME = "next_to_clock"
 774    _NAMED_REGIONS = [
 775        "item_clock_below",
 776    ]
 777    _TARGET_NAMES = [
 778        "next_to_clock_up",
 779    ]
 780
 781class FindRainyMoneyTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 782    REQUIRED_PARSER = BaseHarvestMoonStateParser
 783
 784    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 785    _TERMINATION_TARGET_NAME = "found_rainy_money"
 786
 787class NextToSafeSubgoal(AnyRegionMatchSubGoal):
 788    NAME = "next_to_safe"
 789    _NAMED_REGIONS = [
 790        "item_safe_below",
 791        "item_safe_below",
 792    ]
 793    _TARGET_NAMES = [
 794        "next_to_safe_up",
 795        "next_to_safe_left",
 796    ]
 797
 798class FindLostBirdTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 799    REQUIRED_PARSER = BaseHarvestMoonStateParser
 800
 801    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 802    _TERMINATION_TARGET_NAME = "found_bird_for_friend"
 803
 804class NextToLostBirdSubgoal(AnyRegionMatchSubGoal):
 805    NAME = "next_to_lost_bird"
 806    _NAMED_REGIONS = [
 807        "item_lost_bird_below",
 808        "item_lost_bird_left",
 809        "item_lost_bird_right",
 810    ]
 811    _TARGET_NAMES = [
 812        "find_lost_bird_up",
 813        "find_lost_bird_right",
 814        "find_lost_bird_left",
 815    ]
 816
 817class SpeakToBlueHairGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 818    REQUIRED_PARSER = BaseHarvestMoonStateParser
 819
 820    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 821    _TERMINATION_TARGET_NAME = "speaking_to_blue_hair_girl"
 822    
 823class NextToBlueHairGirlSubgoal(AnyRegionMatchSubGoal):
 824    NAME = "next_to_blue_hair_girl"
 825    _NAMED_REGIONS = [
 826        "item_blue_hair_girl_below",
 827        "item_blue_hair_girl_left",
 828        "item_blue_hair_girl_right",
 829    ]
 830    _TARGET_NAMES = [
 831        "next_to_blue_hair_girl_up",
 832        "next_to_blue_hair_girl_right",
 833        "next_to_blue_hair_girl_left",
 834    ]
 835    
 836class SpeakToGoldenHairGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 837    REQUIRED_PARSER = BaseHarvestMoonStateParser
 838
 839    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 840    _TERMINATION_TARGET_NAME = "speaking_to_golden_hair_girl"
 841
 842class NextToGoldenHairGirlSubgoal(AnyRegionMatchSubGoal):
 843    NAME = "next_to_golden_hair_girl"
 844    _NAMED_REGIONS = [
 845        "item_golden_hair_girl_below",
 846        "item_golden_hair_girl_right",
 847        "item_golden_hair_girl_above",
 848    ]
 849    _TARGET_NAMES = [
 850        "next_to_golden_hair_girl_up",
 851        "next_to_golden_hair_girl_left",
 852        "next_to_golden_hair_girl_down",
 853    ]
 854
 855class SpeakToPinkHairGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 856    REQUIRED_PARSER = BaseHarvestMoonStateParser
 857
 858    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 859    _TERMINATION_TARGET_NAME = "speaking_to_pink_hair_girl"
 860
 861class NextToPinkHairGirlSubgoal(AnyRegionMatchSubGoal):
 862    NAME = "next_to_pink_hair_girl"
 863    _NAMED_REGIONS = [
 864        "item_pink_hair_girl_above",
 865        "item_pink_hair_girl_left",
 866        "item_pink_hair_girl_right",
 867    ]
 868    _TARGET_NAMES = [
 869        "next_to_pink_hair_girl_down",
 870        "next_to_pink_hair_girl_right",
 871        "next_to_pink_hair_girl_left",
 872    ]
 873
 874# HM1 winter gathering speak to girl tasks
 875class SpeakToBlueHairGirlWGTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 876    REQUIRED_PARSER = BaseHarvestMoonStateParser
 877    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 878    _TERMINATION_TARGET_NAME = "speaking_to_blue_hair_girl_wg"
 879
 880class NextToBlueHairGirlWGSubgoal(AnyRegionMatchSubGoal):
 881    NAME = "next_to_blue_hair_girl_wg"
 882    _NAMED_REGIONS = [
 883        "item_blue_hair_girl_wg_below",
 884        "item_blue_hair_girl_wg_left",
 885        "item_blue_hair_girl_wg_right",
 886    ]
 887    _TARGET_NAMES = [
 888        "next_to_blue_hair_girl_wg_up",
 889        "next_to_blue_hair_girl_wg_right",
 890        "next_to_blue_hair_girl_wg_left",
 891    ]
 892
 893class SpeakToPinkHairGirlWGTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 894    REQUIRED_PARSER = BaseHarvestMoonStateParser
 895    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 896    _TERMINATION_TARGET_NAME = "speaking_to_pink_hair_girl_wg"
 897
 898class NextToPinkHairGirlWGSubgoal(AnyRegionMatchSubGoal):
 899    NAME = "next_to_pink_hair_girl_wg"
 900    _NAMED_REGIONS = [
 901        "item_pink_hair_girl_wg_above",
 902        "item_pink_hair_girl_wg_left",
 903        "item_pink_hair_girl_wg_right",
 904    ]
 905    _TARGET_NAMES = [
 906        "next_to_pink_hair_girl_wg_down",
 907        "next_to_pink_hair_girl_wg_right",
 908        "next_to_pink_hair_girl_wg_left",
 909    ]
 910
 911class SpeakToRedHairGirlWGTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 912    REQUIRED_PARSER = BaseHarvestMoonStateParser
 913    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
 914    _TERMINATION_TARGET_NAME = "speaking_to_red_hair_girl_wg"
 915
 916class NextToRedHairGirlWGSubgoal(AnyRegionMatchSubGoal):
 917    NAME = "next_to_red_hair_girl_wg"
 918    _NAMED_REGIONS = [
 919        "item_red_hair_girl_wg_above",
 920        "item_red_hair_girl_wg_left",
 921        "item_red_hair_girl_wg_right",
 922    ]
 923    _TARGET_NAMES = [
 924        "next_to_red_hair_girl_wg_down",
 925        "next_to_red_hair_girl_wg_right",
 926        "next_to_red_hair_girl_wg_left",
 927    ]
 928
 929class FillChickenFodderBlock1TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 930    REQUIRED_PARSER = BaseHarvestMoonStateParser
 931
 932    _TERMINATION_NAMED_REGION = "item_chicken_stall_block1"
 933    _TERMINATION_TARGET_NAME = "filled_chicken_stall_block1"
 934    
 935class NextToChickenFodderBlock1Subgoal(AnyRegionMatchSubGoal):
 936    NAME = "next_to_chicken_stall_block1_with_fodder"
 937    _NAMED_REGIONS = [
 938        "item_next_to_chicken_stall_block1",
 939    ]
 940    _TARGET_NAMES = [
 941        "next_to_chicken_stall_block1",
 942    ]
 943    
 944class NextToChickenSiloSubgoal(AnyRegionMatchSubGoal):
 945    NAME = "next_to_chicken_silo"
 946    _NAMED_REGIONS = [
 947        "item_chicken_silo_left",
 948        "item_chicken_silo_below1",
 949        "item_chicken_silo_below2",
 950    ]
 951    _TARGET_NAMES = [
 952        "next_to_chicken_silo_right",
 953        "next_to_chicken_silo_up1",
 954        "next_to_chicken_silo_up2",
 955    ]
 956
 957class PickupChickenFodderSubgoal(AnyRegionMatchSubGoal):
 958    NAME = "picked_up_chicken_fodder_from_silo"
 959    _NAMED_REGIONS = [
 960        "item_chicken_silo_left",
 961        "item_chicken_silo_below1",
 962        "item_chicken_silo_below2",
 963    ]
 964    _TARGET_NAMES = [
 965        "got_fodder_from_chicken_silo_right",
 966        "got_fodder_from_chicken_silo_up1",
 967        "got_fodder_from_chicken_silo_up2",
 968    ]
 969
 970# HM1 fill cow fodder task
 971class NextToCowFeedingStallSubgoal(AnyRegionMatchSubGoal):
 972    NAME = "next_to_cow_feeding_stall_with_fodder"
 973    _NAMED_REGIONS = [
 974        "item_cow_feeding_stall_right",
 975    ]
 976    _TARGET_NAMES = [
 977        "next_to_cow_feeding_stall_left",
 978    ]
 979
 980class FillUpperRightCowStallTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 981    REQUIRED_PARSER = BaseHarvestMoonStateParser
 982    _TERMINATION_NAMED_REGION = "item_cow_feeding_stall"
 983    _TERMINATION_TARGET_NAME = "cow_feeding_stall_filled"
 984
 985# HM2 fill chicken fodder subgoals
 986class NextToChickenSilo2Subgoal(AnyRegionMatchSubGoal):
 987    NAME = "next_to_chicken_silo"
 988    _NAMED_REGIONS = [
 989        "item_chicken_silo_left1",
 990        "item_chicken_silo_left2",
 991        "item_chicken_silo_below",
 992    ]
 993    _TARGET_NAMES = [
 994        "next_to_chicken_silo_right1",
 995        "next_to_chicken_silo_right2",
 996        "next_to_chicken_silo_up",
 997    ]
 998
 999class PickupChickenFodder2Subgoal(AnyRegionMatchSubGoal):
1000    NAME = "picked_up_chicken_fodder_from_silo"
1001    _NAMED_REGIONS = [
1002        "item_chicken_silo_left1",
1003        "item_chicken_silo_left2",
1004        "item_chicken_silo_below",
1005    ]
1006    _TARGET_NAMES = [
1007        "got_fodder_from_chicken_silo_right1",
1008        "got_fodder_from_chicken_silo_right2",
1009        "got_fodder_from_chicken_silo_up",
1010    ]
1011
1012
1013class HospitalEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1014    REQUIRED_PARSER = BaseHarvestMoonStateParser
1015    _TERMINATION_NAMED_REGION = "screen_top_half"
1016    _TERMINATION_TARGET_NAME = "in_hospital"
1017
1018class OutsideHospitalSubgoal(AnyRegionMatchSubGoal):
1019    NAME = "outside_hospital"
1020    _NAMED_REGIONS = [
1021        "hospital_location",
1022        "hospital_location",
1023        "hospital_location",
1024    ]
1025    _TARGET_NAMES = [
1026        "outside_hospital_up",
1027        "outside_hospital_left",
1028        "outside_hospital_right",
1029    ]
1030
1031class ToolShopEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1032    REQUIRED_PARSER = BaseHarvestMoonStateParser
1033    _TERMINATION_NAMED_REGION = "screen_top_half"
1034    _TERMINATION_TARGET_NAME = "in_tool_shop"
1035
1036class OutsideToolShop2Subgoal(AnyRegionMatchSubGoal):
1037    NAME = "outside_tool_shop"
1038    _NAMED_REGIONS = [
1039        "tool_shop_location",
1040        "tool_shop_location",
1041        "tool_shop_location",
1042    ]
1043    _TARGET_NAMES = [
1044        "outside_tool_shop_up",
1045        "outside_tool_shop_left",
1046        "outside_tool_shop_right",
1047    ]
1048
1049class CarpenterEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1050    REQUIRED_PARSER = BaseHarvestMoonStateParser
1051    _TERMINATION_NAMED_REGION = "screen_top_half"
1052    _TERMINATION_TARGET_NAME = "in_carpenter"
1053
1054class OutsideCarpenter2Subgoal(AnyRegionMatchSubGoal):
1055    NAME = "outside_carpenter"
1056    _NAMED_REGIONS = [
1057        "carpenter_location",
1058        "carpenter_location",
1059        "carpenter_location",
1060    ]
1061    _TARGET_NAMES = [
1062        "outside_carpenter_up",
1063        "outside_carpenter_left",
1064        "outside_carpenter_right",
1065    ]
1066
1067class AnimalShopEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1068    REQUIRED_PARSER = BaseHarvestMoonStateParser
1069    _TERMINATION_NAMED_REGION = "screen_top_half"
1070    _TERMINATION_TARGET_NAME = "in_animal_shop"
1071
1072class OutsideAnimalShop2Subgoal(AnyRegionMatchSubGoal):
1073    NAME = "outside_animal_shop"
1074    _NAMED_REGIONS = [
1075        "animal_shop_location",
1076        "animal_shop_location",
1077        "animal_shop_location",
1078    ]
1079    _TARGET_NAMES = [
1080        "outside_animal_shop_up",
1081        "outside_animal_shop_left",
1082        "outside_animal_shop_right",
1083    ]
1084
1085class LibraryEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1086    REQUIRED_PARSER = BaseHarvestMoonStateParser
1087    _TERMINATION_NAMED_REGION = "screen_top_half"
1088    _TERMINATION_TARGET_NAME = "in_library"
1089
1090class OutsideLibrarySubgoal(AnyRegionMatchSubGoal):
1091    NAME = "outside_library"
1092    _NAMED_REGIONS = [
1093        "library_location",
1094        "library_location",
1095        "library_location",
1096    ]
1097    _TARGET_NAMES = [
1098        "outside_library_up",
1099        "outside_library_left",
1100        "outside_library_right",
1101    ]
1102
1103class FlowerShopEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1104    REQUIRED_PARSER = BaseHarvestMoonStateParser
1105
1106    _TERMINATION_NAMED_REGION = "screen_top_half"
1107    _TERMINATION_TARGET_NAME = "in_flower_shop"
1108
1109class OutsideFlowerShop2Subgoal(AnyRegionMatchSubGoal):
1110    NAME = "outside_flower_shop"
1111    _NAMED_REGIONS = [
1112        "flower_shop_location",
1113        "flower_shop_location",
1114        "flower_shop_location",
1115    ]
1116    _TARGET_NAMES = [
1117        "outside_flower_shop_up",
1118        "outside_flower_shop_left",
1119        "outside_flower_shop_right",
1120    ]
1121
1122
1123class SelectBridgeSubgoal(AnyRegionMatchSubGoal):
1124    NAME = "selected_bridge"
1125    _NAMED_REGIONS = ["dialogue_box_bottom"]
1126    _TARGET_NAMES = ["select_bridge"]
1127
1128class GetBridgeEstimateTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1129    REQUIRED_PARSER = BaseHarvestMoonStateParser
1130    _TERMINATION_NAMED_REGION = "screen_bottom_half"
1131    _TERMINATION_TARGET_NAME = "bridge_estimate"
1132
1133
1134class RestaurantEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1135    REQUIRED_PARSER = BaseHarvestMoonStateParser
1136
1137    _TERMINATION_NAMED_REGION = "screen_top_half"
1138    _TERMINATION_TARGET_NAME = "in_restaurant"
1139
1140class OutsideRestaurant2Subgoal(AnyRegionMatchSubGoal):
1141    NAME = "outside_restaurant"
1142    _NAMED_REGIONS = [
1143        "restaurant_location",
1144        "restaurant_location",
1145        "restaurant_location",
1146    ]
1147    _TARGET_NAMES = [
1148        "outside_restaurant_up",
1149        "outside_restaurant_left",
1150        "outside_restaurant_right",
1151    ]
1152
1153class BuyLunchSetTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1154    REQUIRED_PARSER = BaseHarvestMoonStateParser
1155
1156    _TERMINATION_NAMED_REGION = "screen_bottom_half"
1157    _TERMINATION_TARGET_NAME = "bought_lunch_set"
1158
1159class SelectLunchSetSubgoal(AnyRegionMatchSubGoal):
1160    NAME = "selected_lunch_set"
1161    _NAMED_REGIONS = [
1162        "screen_bottom_half",
1163    ]
1164    _TARGET_NAMES = [
1165        "select_lunch_set",
1166    ]
1167
1168class BuyLunchSetOptionSubgoal(AnyRegionMatchSubGoal):
1169    NAME = "buy_lunch_set_option"
1170    _NAMED_REGIONS = [
1171        "screen_bottom_half",
1172    ]
1173    _TARGET_NAMES = [
1174        "option_to_buy_lunch_set",
1175    ]
1176
1177class BuyBeverageSetTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1178    REQUIRED_PARSER = BaseHarvestMoonStateParser
1179
1180    _TERMINATION_NAMED_REGION = "screen_bottom_half"
1181    _TERMINATION_TARGET_NAME = "bought_beverage_set"
1182
1183class SelectBeverageSetSubgoal(AnyRegionMatchSubGoal):
1184    NAME = "selected_beverage_set"
1185    _NAMED_REGIONS = [
1186        "screen_bottom_half",
1187    ]
1188    _TARGET_NAMES = [
1189        "select_beverage_set",
1190    ]
1191
1192class BuyBeverageSetOptionSubgoal(AnyRegionMatchSubGoal):
1193    NAME = "buy_beverage_set_option"
1194    _NAMED_REGIONS = [
1195        "screen_bottom_half",
1196    ]
1197    _TARGET_NAMES = [
1198        "option_to_buy_beverage_set",
1199    ]
1200
1201class BuyTodaysSpecialTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1202    REQUIRED_PARSER = BaseHarvestMoonStateParser
1203
1204    _TERMINATION_NAMED_REGION = "screen_bottom_half"
1205    _TERMINATION_TARGET_NAME = "bought_todays_special"
1206
1207class SelectTodaysSpecialSubgoal(AnyRegionMatchSubGoal):
1208    NAME = "selected_todays_special"
1209    _NAMED_REGIONS = [
1210        "screen_bottom_half",
1211    ]
1212    _TARGET_NAMES = [
1213        "select_todays_special",
1214    ]
1215
1216class BuyTodaysSpecialOptionSubgoal(AnyRegionMatchSubGoal):
1217    NAME = "buy_todays_special_option"
1218    _NAMED_REGIONS = [
1219        "screen_bottom_half",
1220    ]
1221    _TARGET_NAMES = [
1222        "option_to_buy_todays_special",
1223    ]
1224
1225# TO DO
1226class ReadNoticeBoardTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1227    REQUIRED_PARSER = BaseHarvestMoonStateParser
1228
1229    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1230    _TERMINATION_TARGET_NAME = "reading_notice_board"
1231
1232class NextToNoticeBoardSubgoal(AnyRegionMatchSubGoal):
1233    NAME = "next_to_notice_board"
1234    _NAMED_REGIONS = [
1235        "item_notice_board_above",
1236        "item_notice_board_left",
1237        "item_notice_board_right",
1238    ]
1239    _TARGET_NAMES = [
1240        "next_to_notice_board_down",
1241        "next_to_notice_board_right",
1242        "next_to_notice_board_left",
1243    ]
1244
1245class ReadVillageSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1246    REQUIRED_PARSER = BaseHarvestMoonStateParser
1247
1248    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1249    _TERMINATION_TARGET_NAME = "reading_village_sign"
1250
1251class NextToVillageSignSubgoal(AnyRegionMatchSubGoal):
1252    NAME = "next_to_village_sign"
1253    _NAMED_REGIONS = [
1254        "item_village_sign_above",
1255        "item_village_sign_left",
1256        "item_village_sign_right",
1257    ]
1258    _TARGET_NAMES = [
1259        "next_to_village_sign_down",
1260        "next_to_village_sign_right",
1261        "next_to_village_sign_left",
1262    ]
1263
1264class ReadFarmSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1265    REQUIRED_PARSER = BaseHarvestMoonStateParser
1266
1267    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1268    _TERMINATION_TARGET_NAME = "reading_farm_sign"
1269
1270class NextToFarmSignSubgoal(AnyRegionMatchSubGoal):
1271    NAME = "next_to_farm_sign"
1272    _NAMED_REGIONS = [
1273        "item_farm_sign_above",
1274        "item_farm_sign_left",
1275        "item_farm_sign_right",
1276    ]
1277    _TARGET_NAMES = [
1278        "next_to_farm_sign_down",
1279        "next_to_farm_sign_right",
1280        "next_to_farm_sign_left",
1281    ]
1282
1283class ReadSecretGardenSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1284    REQUIRED_PARSER = BaseHarvestMoonStateParser
1285
1286    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1287    _TERMINATION_TARGET_NAME = "reading_secret_garden_sign"
1288
1289class NextToSecretGardenSignSubgoal(AnyRegionMatchSubGoal):
1290    NAME = "next_to_secret_garden_sign"
1291    _NAMED_REGIONS = [
1292        "item_secret_garden_sign_above",
1293        "item_secret_garden_sign_right",
1294        "item_secret_garden_sign_left",
1295    ]
1296    _TARGET_NAMES = [
1297        "next_to_secret_garden_sign_down",
1298        "next_to_secret_garden_sign_left",
1299        "next_to_secret_garden_sign_right",
1300    ]
1301
1302class ReadCropFieldSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1303    REQUIRED_PARSER = BaseHarvestMoonStateParser
1304
1305    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1306    _TERMINATION_TARGET_NAME = "reading_crop_field_sign"
1307
1308class NextToCropFieldSignSubgoal(AnyRegionMatchSubGoal):
1309    NAME = "next_to_crop_field_sign"
1310    _NAMED_REGIONS = [
1311        "item_crop_field_sign_above",
1312    ]
1313    _TARGET_NAMES = [
1314        "next_to_crop_field_sign_down",
1315    ]
1316
1317class NextToDiarySubgoal(AnyRegionMatchSubGoal):
1318    NAME = "next_to_diary"
1319    _NAMED_REGIONS = [
1320        "item_diary",
1321    ]
1322    _TARGET_NAMES = [
1323        "next_to_diary",
1324    ]
1325
1326class DiaryOptionSubgoal(AnyRegionMatchSubGoal):
1327    NAME = "diary_sleep_option"
1328    _NAMED_REGIONS = [
1329        "dialogue_box_bottom",
1330    ]
1331    _TARGET_NAMES = [
1332        "option_to_diary_sleep",
1333    ]
1334    
1335
1336class OpenMenuTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1337    REQUIRED_PARSER = BaseHarvestMoonStateParser
1338
1339    _TERMINATION_NAMED_REGION = "screen"
1340    _TERMINATION_TARGET_NAME = "menu_open"
1341
1342# HM2 equip tool tasks
1343class EmptyHandsSelectedSubgoal(AnyRegionMatchSubGoal):
1344    NAME = "empty_hands_selected"
1345    _NAMED_REGIONS = ["equipment_region_4"]
1346    _TARGET_NAMES = ["empty_hands_selected"]
1347
1348class ReadyToPickSickleSubgoal(AnyRegionMatchSubGoal):
1349    NAME = "ready_to_pick_sickle"
1350    _NAMED_REGIONS = ["top_left_label"]
1351    _TARGET_NAMES = ["ready_to_pick_sickle"]
1352
1353class EquipSickleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1354    REQUIRED_PARSER = BaseHarvestMoonStateParser
1355    _TERMINATION_NAMED_REGION = "equipment_region_4"
1356    _TERMINATION_TARGET_NAME = "sickle_equipped"
1357
1358class ReadyToPickHammerSubgoal(AnyRegionMatchSubGoal):
1359    NAME = "ready_to_pick_hammer"
1360    _NAMED_REGIONS = ["top_left_label"]
1361    _TARGET_NAMES = ["ready_to_pick_hammer"]
1362
1363class EquipHammerTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1364    REQUIRED_PARSER = BaseHarvestMoonStateParser
1365    _TERMINATION_NAMED_REGION = "equipment_region_4"
1366    _TERMINATION_TARGET_NAME = "hammer_equipped"
1367
1368class ReadyToPickFishingRodSubgoal(AnyRegionMatchSubGoal):
1369    NAME = "ready_to_pick_fishing_rod"
1370    _NAMED_REGIONS = ["top_left_label"]
1371    _TARGET_NAMES = ["ready_to_pick_fishing_rod"]
1372
1373class EquipFishingRodTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1374    REQUIRED_PARSER = BaseHarvestMoonStateParser
1375    _TERMINATION_NAMED_REGION = "equipment_region_4"
1376    _TERMINATION_TARGET_NAME = "fishing_rod_equipped"
1377
1378class AxeSelected2Subgoal(AnyRegionMatchSubGoal):
1379    NAME = "axe_selected_2"
1380    _NAMED_REGIONS = ["equipment_region_2"]
1381    _TARGET_NAMES = ["ax_selected_2"]
1382
1383class ReadyToPickNetSubgoal(AnyRegionMatchSubGoal):
1384    NAME = "ready_to_pick_net"
1385    _NAMED_REGIONS = ["top_left_label"]
1386    _TARGET_NAMES = ["ready_to_pick_net"]
1387
1388class EquipNetReplacingAxTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1389    REQUIRED_PARSER = BaseHarvestMoonStateParser
1390    _TERMINATION_NAMED_REGION = "equipment_region_2"
1391    _TERMINATION_TARGET_NAME = "net_equipped"
1392
1393class ReadyToPickRosemarySeedsSubgoal(AnyRegionMatchSubGoal):
1394    NAME = "ready_to_pick_rosemary_seeds"
1395    _NAMED_REGIONS = ["top_left_label"]
1396    _TARGET_NAMES = ["ready_to_pick_rosemary_seeds"]
1397
1398class EquipRosemarySeedsReplacingAxTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1399    REQUIRED_PARSER = BaseHarvestMoonStateParser
1400    _TERMINATION_NAMED_REGION = "equipment_region_2"
1401    _TERMINATION_TARGET_NAME = "rosemary_seeds_equipped"
1402
1403class SprinklerSelected1Subgoal(AnyRegionMatchSubGoal):
1404    NAME = "sprinkler_selected_1"
1405    _NAMED_REGIONS = ["equipment_region_1"]
1406    _TARGET_NAMES = ["sprinkler_selected_1"]
1407
1408class EquipSickleReplacingSprinklerTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1409    REQUIRED_PARSER = BaseHarvestMoonStateParser
1410    _TERMINATION_NAMED_REGION = "equipment_region_1"
1411    _TERMINATION_TARGET_NAME = "sickle_equipped_1"
1412
1413class HoeSelected3Subgoal(AnyRegionMatchSubGoal):
1414    NAME = "hoe_selected_3"
1415    _NAMED_REGIONS = ["equipment_region_3"]
1416    _TARGET_NAMES = ["hoe_selected_3"]
1417
1418class EquipNetReplacingHoeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1419    REQUIRED_PARSER = BaseHarvestMoonStateParser
1420    _TERMINATION_NAMED_REGION = "equipment_region_3"
1421    _TERMINATION_TARGET_NAME = "net_equipped_3"
1422
1423# HM1 pick up egg task
1424class NextToEggSubgoal(AnyRegionMatchSubGoal):
1425    NAME = "next_to_egg"
1426    _NAMED_REGIONS = ["item_egg_left", "item_egg_above", "item_egg_right"]
1427    _TARGET_NAMES = ["next_to_egg_right", "next_to_egg_down", "next_to_egg_left"]
1428
1429# HM1 hatch egg task
1430class HatchEggTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1431    REQUIRED_PARSER = BaseHarvestMoonStateParser
1432    _TERMINATION_NAMED_REGION = "item_hatching_box"
1433    _TERMINATION_TARGET_NAME = "dropped_egg_into_hatching_box"
1434
1435# HM1 break rock task
1436class NextToRockFromLeftSubgoal(AnyRegionMatchSubGoal):
1437    NAME = "next_to_rock_from_left"
1438    _NAMED_REGIONS = ["item_rock_left"]
1439    _TARGET_NAMES = ["next_to_rock_right"]
1440
1441class BreakRockTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1442    REQUIRED_PARSER = BaseHarvestMoonStateParser
1443    _TERMINATION_NAMED_REGION = "item_rock_left"
1444    _TERMINATION_TARGET_NAME = "rock_cleared"
1445
1446class NextToRightmostRockAboveSubgoal(AnyRegionMatchSubGoal):
1447    NAME = "next_to_rightmost_rock_above"
1448    _NAMED_REGIONS = ["item_rightmost_rock_above"]
1449    _TARGET_NAMES = ["next_to_rightmost_rock_down"]
1450
1451class BreakRightmostRockTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1452    REQUIRED_PARSER = BaseHarvestMoonStateParser
1453    _TERMINATION_NAMED_REGION = "item_rightmost_rock_above"
1454    _TERMINATION_TARGET_NAME = "rightmost_rock_cleared"
1455
1456# HM1 weed removal tasks
1457class NextToTopLeftWeedFromRightSubgoal(AnyRegionMatchSubGoal):
1458    NAME = "next_to_top_left_weed"
1459    _NAMED_REGIONS = ["item_top_left_weed"]
1460    _TARGET_NAMES = ["next_to_top_left_weed_up"]
1461
1462class RemoveTopLeftWeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1463    REQUIRED_PARSER = BaseHarvestMoonStateParser
1464    _TERMINATION_NAMED_REGION = "item_top_left_weed"
1465    _TERMINATION_TARGET_NAME = "top_left_weed_removed"
1466
1467class CutTopLeftWeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1468    REQUIRED_PARSER = BaseHarvestMoonStateParser
1469    _TERMINATION_NAMED_REGION = "item_top_left_weed"
1470    _TERMINATION_TARGET_NAME = "top_left_weed_cut"
1471
1472class NextToLowestWeedFromAboveSubgoal(AnyRegionMatchSubGoal):
1473    NAME = "next_to_lowest_weed_from_above"
1474    _NAMED_REGIONS = ["item_weed_above"]
1475    _TARGET_NAMES = ["next_to_lowest_weed_down"]
1476
1477class RemoveLowestWeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1478    REQUIRED_PARSER = BaseHarvestMoonStateParser
1479    _TERMINATION_NAMED_REGION = "item_weed_above"
1480    _TERMINATION_TARGET_NAME = "lowest_weed_removed"
1481
1482class CutLowestWeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1483    REQUIRED_PARSER = BaseHarvestMoonStateParser
1484    _TERMINATION_NAMED_REGION = "item_weed_above"
1485    _TERMINATION_TARGET_NAME = "lowest_weed_cut"
1486
1487# HM1 harvest center grassline task
1488class NextToGrasslandFromLeftSubgoal(AnyRegionMatchSubGoal):
1489    NAME = "next_to_grassland_right"
1490    _NAMED_REGIONS = ["item_grassland_right"]
1491    _TARGET_NAMES = ["next_to_grassland_left"]
1492
1493class HarvestCenterGrasslineTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1494    _OR_PAIRS = [
1495        ("item_center_grassline", "center_grass_harvested_1"),
1496        ("item_center_grassline", "center_grass_harvested_2"),
1497    ]
1498
1499# HM1 restore fence task
1500class PickedUpBrokenFenceSubgoal(AnyRegionMatchSubGoal):
1501    NAME = "picked_up_broken_fence"
1502    _NAMED_REGIONS = [
1503        "item_broken_fence_field",
1504        "item_broken_fence_field",
1505        "item_broken_fence_field",
1506        "item_broken_fence_field",
1507    ]
1508    _TARGET_NAMES = [
1509        "picked_up_broken_fence_up",
1510        "picked_up_broken_fence_down",
1511        "picked_up_broken_fence_left",
1512        "picked_up_broken_fence_right",
1513    ]
1514
1515class RestoreFenceTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1516    _OR_PAIRS = [
1517        ("item_fence_field", "restored_fence"),
1518    ]
1519
1520# HM1 harvest turnip task
1521class NextToCenterTurnipSubgoal(AnyRegionMatchSubGoal):
1522    NAME = "next_to_center_turnip"
1523    _NAMED_REGIONS = ["item_turnip_field", "item_turnip_field"]
1524    _TARGET_NAMES = ["next_to_center_turnip_down_1", "next_to_center_turnip_down_2"]
1525
1526class HarvestCenterTurnipTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1527    _OR_PAIRS = [
1528        ("item_turnip_field", "center_turnip_harvested_1"),
1529        ("item_turnip_field", "center_turnip_harvested_2"),
1530    ]
1531
1532class NextToCenterTurnipLeftSubgoal(AnyRegionMatchSubGoal):
1533    NAME = "next_to_center_turnip_left"
1534    _NAMED_REGIONS = ["item_turnip_field_water", "item_turnip_field_water"]
1535    _TARGET_NAMES = ["next_to_center_turnip_left_1", "next_to_center_turnip_left_2"]
1536
1537class WaterCenterTurnipTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1538    _OR_PAIRS = [
1539        ("item_turnip_field_water", "center_turnip_watered_1"),
1540        ("item_turnip_field_water", "center_turnip_watered_2"),
1541    ]
1542
1543# HM2 harvest eggplant task
1544class NextToCenterEggplantSubgoal(AnyRegionMatchSubGoal):
1545    NAME = "next_to_center_eggplant"
1546    _NAMED_REGIONS = ["item_eggplant_field", "item_eggplant_field"]
1547    _TARGET_NAMES = ["next_to_center_eggplant_up_1", "next_to_center_eggplant_up_2"]
1548
1549class HarvestCenterEggplantTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1550    _OR_PAIRS = [
1551        ("item_eggplant_field", "center_eggplant_harvested_1"),
1552        ("item_eggplant_field", "center_eggplant_harvested_2"),
1553    ]
1554
1555class NextToCenterPotatoSubgoal(AnyRegionMatchSubGoal):
1556    NAME = "next_to_center_potato"
1557    _NAMED_REGIONS = ["item_potato_field", "item_potato_field"]
1558    _TARGET_NAMES = ["next_to_center_potato_up_1", "next_to_center_potato_up_2"]
1559
1560class WaterCenterPotatoTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1561    _OR_PAIRS = [
1562        ("item_potato_field", "center_potato_watered_1"),
1563        ("item_potato_field", "center_potato_watered_2"),
1564    ]
1565
1566class NextToCenterPotatoBelowSubgoal(AnyRegionMatchSubGoal):
1567    NAME = "next_to_center_potato_below"
1568    _NAMED_REGIONS = ["item_potato_field", "item_potato_field"]
1569    _TARGET_NAMES = ["next_to_center_potato_below_up_1", "next_to_center_potato_below_up_2"]
1570
1571class HarvestCenterPotatoTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1572    _OR_PAIRS = [
1573        ("item_potato_field", "center_potato_harvested_1"),
1574        ("item_potato_field", "center_potato_harvested_2"),
1575    ]
1576
1577class NextToCenterAsparagusSubgoal(AnyRegionMatchSubGoal):
1578    NAME = "next_to_center_asparagus"
1579    _NAMED_REGIONS = ["item_asparagus_field", "item_asparagus_field"]
1580    _TARGET_NAMES = ["next_to_center_asparagus_right_1", "next_to_center_asparagus_right_2"]
1581
1582class WaterCenterAsparagusTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1583    _OR_PAIRS = [
1584        ("item_asparagus_field", "center_asparagus_watered_1"),
1585        ("item_asparagus_field", "center_asparagus_watered_2"),
1586    ]
1587
1588# HM2 water corn field task
1589class AtCornCenterSubgoal(AnyRegionMatchSubGoal):
1590    NAME = "at_corn_center"
1591    _NAMED_REGIONS = ["item_corn_field", "item_corn_field"]
1592    _TARGET_NAMES = ["at_corn_center_1", "at_corn_center_2"]
1593
1594class WaterCornFieldTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1595    _OR_PAIRS = [
1596        ("item_corn_field", "corn_field_watered_1"),
1597        ("item_corn_field", "corn_field_watered_2"),
1598    ]
1599
1600# HM2 water cabbage field task
1601class AtCabbageCenterSubgoal(AnyRegionMatchSubGoal):
1602    NAME = "at_cabbage_center"
1603    _NAMED_REGIONS = ["item_cabbage_field", "item_cabbage_field"]
1604    _TARGET_NAMES = ["at_cabbage_center_1", "at_cabbage_center_2"]
1605
1606class WaterCabbageFieldTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1607    _OR_PAIRS = [
1608        ("item_cabbage_field", "cabbage_field_watered_1"),
1609        ("item_cabbage_field", "cabbage_field_watered_2"),
1610    ]
1611
1612# HM2 cut center corn task
1613class NextToCenterCornSubgoal(AnyRegionMatchSubGoal):
1614    NAME = "next_to_center_corn"
1615    _NAMED_REGIONS = ["item_center_corn_above", "item_center_corn_above"]
1616    _TARGET_NAMES = ["next_to_center_corn_down_1", "next_to_center_corn_down_2"]
1617
1618class CutCenterCornTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1619    _OR_PAIRS = [
1620        ("item_center_corn_above", "center_corn_cut_1"),
1621        ("item_center_corn_above", "center_corn_cut_2"),
1622    ]
1623
1624class NextToCenterCarrotSubgoal(AnyRegionMatchSubGoal):
1625    NAME = "next_to_center_carrot"
1626    _NAMED_REGIONS = ["item_carrot_field", "item_carrot_field"]
1627    _TARGET_NAMES = ["next_to_center_carrot_up_1", "next_to_center_carrot_up_2"]
1628
1629class HarvestCenterCarrotTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1630    _OR_PAIRS = [
1631        ("item_carrot_field", "center_carrot_harvested_1"),
1632        ("item_carrot_field", "center_carrot_harvested_2"),
1633    ]
1634
1635# HM2 ship eggplant task
1636class NextToShippingBoxSubgoal(AnyRegionMatchSubGoal):
1637    NAME = "next_to_shipping_box"
1638    _NAMED_REGIONS = ["item_next_to_shipping_box"]
1639    _TARGET_NAMES = ["next_to_shipping_box_up"]
1640
1641class ShipEggplantTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1642    REQUIRED_PARSER = BaseHarvestMoonStateParser
1643    _TERMINATION_NAMED_REGION = "item_shipping_box_field"
1644    _TERMINATION_TARGET_NAME = "drop_eggplant_into_shipping_box"
1645
1646# HM2 cherry cup race task
1647class AtTheStartLineSubgoal(AnyRegionMatchSubGoal):
1648    NAME = "at_the_start_line"
1649    _NAMED_REGIONS = ["item_start_line"]
1650    _TARGET_NAMES = ["at_the_start_line"]
1651
1652class Cross500mLineTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1653    REQUIRED_PARSER = BaseHarvestMoonStateParser
1654    _TERMINATION_NAMED_REGION = "item_distance_markers"
1655    _TERMINATION_TARGET_NAME = "crossed_500m_line"
1656
1657class Cross1000mLineTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1658    REQUIRED_PARSER = BaseHarvestMoonStateParser
1659    _TERMINATION_NAMED_REGION = "item_distance_markers"
1660    _TERMINATION_TARGET_NAME = "crossed_1000m_line"
1661
1662# HM2 billboard article tasks
1663class ComputersArticleSelectedSubgoal(AnyRegionMatchSubGoal):
1664    NAME = "computers_article_selected"
1665    _NAMED_REGIONS = ["dialogue_box_bottom"]
1666    _TARGET_NAMES = ["computers_article_selected"]
1667
1668class ReadComputersArticleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1669    REQUIRED_PARSER = BaseHarvestMoonStateParser
1670    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1671    _TERMINATION_TARGET_NAME = "reading_computers_article"
1672
1673class BouldersArticleSelectedSubgoal(AnyRegionMatchSubGoal):
1674    NAME = "boulders_article_selected"
1675    _NAMED_REGIONS = ["dialogue_box_bottom"]
1676    _TARGET_NAMES = ["boulders_article_selected"]
1677
1678class ReadBouldersArticleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1679    REQUIRED_PARSER = BaseHarvestMoonStateParser
1680    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1681    _TERMINATION_TARGET_NAME = "reading_boulders_article"
1682
1683class CropsArticleSelectedSubgoal(AnyRegionMatchSubGoal):
1684    NAME = "selling_crops_article_selected"
1685    _NAMED_REGIONS = ["dialogue_box_bottom"]
1686    _TARGET_NAMES = ["crops_article_selected"]
1687
1688class ReadCropsArticleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1689    REQUIRED_PARSER = BaseHarvestMoonStateParser
1690    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1691    _TERMINATION_TARGET_NAME = "reading_crops_article"
1692
1693# HM2 weed tasks
1694class NextToLeftmostWeedSubgoal(AnyRegionMatchSubGoal):
1695    NAME = "next_to_leftmost_weed"
1696    _NAMED_REGIONS = [
1697        "item_leftmost_weed_right",
1698        "item_leftmost_weed_above",
1699    ]
1700    _TARGET_NAMES = [
1701        "next_to_leftmost_weed_left",
1702        "next_to_leftmost_weed_down",
1703    ]
1704
1705class RemoveLeftmostWeedTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1706    _OR_PAIRS = [
1707        ("item_leftmost_weed_right", "leftmost_weed_removed_left"),
1708        ("item_leftmost_weed_above", "leftmost_weed_removed_down"),
1709    ]
1710
1711# HM2 pick berry task
1712class NextToBerrySubgoal(AnyRegionMatchSubGoal):
1713    NAME = "next_to_berry"
1714    _NAMED_REGIONS = [
1715        "item_berry_left",
1716    ]
1717    _TARGET_NAMES = [
1718        "next_to_berry_right",
1719    ]
1720
1721class PickBerryTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1722    _OR_PAIRS = [
1723        ("item_berry_left", "berry_picked_right"),
1724    ]
1725
1726class NextToBerryAboveSubgoal(AnyRegionMatchSubGoal):
1727    NAME = "next_to_berry_above"
1728    _NAMED_REGIONS = [
1729        "item_berry_above",
1730        "item_berry_above",
1731    ]
1732    _TARGET_NAMES = [
1733        "next_to_berry_down_1",
1734        "next_to_berry_down_2",
1735    ]
1736
1737class PickBerryAboveTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1738    _OR_PAIRS = [
1739        ("item_berry_above", "berry_picked_above_1"),
1740        ("item_berry_above", "berry_picked_above_2"),
1741    ]
1742
1743# HM2 speak to girl tasks
1744class NextToBlueHairGirl2Subgoal(AnyRegionMatchSubGoal):
1745    NAME = "next_to_blue_hair_girl"
1746    _NAMED_REGIONS = [
1747        "npc_blue_hair_girl_left",
1748        "npc_blue_hair_girl_below",
1749        "npc_blue_hair_girl_right",
1750    ]
1751    _TARGET_NAMES = [
1752        "next_to_blue_hair_girl_right",
1753        "next_to_blue_hair_girl_up",
1754        "next_to_blue_hair_girl_left",
1755    ]
1756
1757class SpeakToBlueHairGirl2TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1758    REQUIRED_PARSER = BaseHarvestMoonStateParser
1759    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1760    _TERMINATION_TARGET_NAME = "speaking_to_blue_hair_girl"
1761
1762class NextToPurpleHairGirlSubgoal(AnyRegionMatchSubGoal):
1763    NAME = "next_to_purple_hair_girl"
1764    _NAMED_REGIONS = [
1765        "npc_purple_hair_girl_left",
1766        "npc_purple_hair_girl_below",
1767    ]
1768    _TARGET_NAMES = [
1769        "next_to_purple_hair_girl_right",
1770        "next_to_purple_hair_girl_up",
1771    ]
1772
1773class SpeakToPurpleHairGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1774    REQUIRED_PARSER = BaseHarvestMoonStateParser
1775    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1776    _TERMINATION_TARGET_NAME = "speaking_to_purple_hair_girl"
1777
1778class NextToBlondeGirlSubgoal(AnyRegionMatchSubGoal):
1779    NAME = "next_to_blonde_girl"
1780    _NAMED_REGIONS = [
1781        "npc_blonde_girl_right",
1782        "npc_blonde_girl_above",
1783    ]
1784    _TARGET_NAMES = [
1785        "next_to_blonde_girl_left",
1786        "next_to_blonde_girl_down",
1787    ]
1788
1789class SpeakToBlondeGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1790    REQUIRED_PARSER = BaseHarvestMoonStateParser
1791    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1792    _TERMINATION_TARGET_NAME = "speaking_to_blonde_girl"
1793
1794# HM2 hatch egg task
1795class HarvestMoon2NextToHatchingBoxSubgoal(AnyRegionMatchSubGoal):
1796    NAME = "next_to_hatching_box"
1797    _NAMED_REGIONS = ["item_next_to_hatching_box"]
1798    _TARGET_NAMES = ["next_to_hatching_box"]
1799
1800class HarvestMoon2HatchEggTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1801    REQUIRED_PARSER = BaseHarvestMoonStateParser
1802    _TERMINATION_NAMED_REGION = "item_hatching_box"
1803    _TERMINATION_TARGET_NAME = "dropped_egg_into_hatching_box"
1804
1805## HM3
1806class NextToSecretGardenSign3Subgoal(AnyRegionMatchSubGoal):
1807    NAME = "next_to_secret_garden_sign"
1808    _NAMED_REGIONS = [
1809        "item_secret_garden_sign_above",
1810        "item_secret_garden_sign_right",
1811    ]
1812    _TARGET_NAMES = [
1813        "next_to_secret_garden_sign_down",
1814        "next_to_secret_garden_sign_left",
1815    ]
1816
1817class BuyPotatoSeeds3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1818    REQUIRED_PARSER = BaseHarvestMoonStateParser
1819
1820    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1821    _TERMINATION_TARGET_NAME = "select_potato_seeds"
1822
1823class NextToPotatoSeeds3Subgoal(AnyRegionMatchSubGoal):
1824    NAME = "next_to_potato_seeds"
1825    _NAMED_REGIONS = ["item_potato_seeds_above", "item_potato_seeds_below"]
1826    _TARGET_NAMES = ["next_to_potato_seeds_down", "next_to_potato_seeds_up"]
1827
1828class ChooseTea3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1829    REQUIRED_PARSER = BaseHarvestMoonStateParser
1830
1831    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1832    _TERMINATION_TARGET_NAME = "select_tea"
1833
1834class NextToTea3Subgoal(AnyRegionMatchSubGoal):
1835    NAME = "next_to_tea"
1836    _NAMED_REGIONS = ["item_tea_above", "item_tea_below"]
1837    _TARGET_NAMES = ["next_to_tea_down", "next_to_tea_up"]
1838
1839class ChooseAsparagusSeedsTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1840    REQUIRED_PARSER = BaseHarvestMoonStateParser
1841
1842    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1843    _TERMINATION_TARGET_NAME = "select_asparagus_seeds"
1844
1845class NextToAsparagusSeeds3Subgoal(AnyRegionMatchSubGoal):
1846    NAME = "next_to_asparagus_seeds"
1847    _NAMED_REGIONS = ["item_asparagus_seeds_above", "item_asparagus_seeds_below"]
1848    _TARGET_NAMES = ["next_to_asparagus_seeds_down", "next_to_asparagus_seeds_up"]
1849
1850class NextToTurnipSeeds3Subgoal(AnyRegionMatchSubGoal):
1851    NAME = "next_to_turnip_seeds"
1852    _NAMED_REGIONS = ["item_turnip_seeds_above", "item_turnip_seeds_below"]
1853    _TARGET_NAMES = ["next_to_turnip_seeds_down", "next_to_turnip_seeds_up"]
1854
1855class BuyTurnipSeeds3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1856    REQUIRED_PARSER = BaseHarvestMoonStateParser
1857
1858    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1859    _TERMINATION_TARGET_NAME = "select_turnip_seeds"
1860
1861class ReadMorningMarketSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1862    REQUIRED_PARSER = BaseHarvestMoonStateParser
1863
1864    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1865    _TERMINATION_TARGET_NAME = "reading_morning_market_sign"
1866
1867class NextToMorningMarketSignSubgoal(AnyRegionMatchSubGoal):
1868    NAME = "next_to_morning_market_sign"
1869    _NAMED_REGIONS = [
1870        "item_morning_market_sign_left",
1871    ]
1872    _TARGET_NAMES = [
1873        "next_to_morning_market_sign_right",
1874    ]
1875
1876class ReadStorageSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1877    REQUIRED_PARSER = BaseHarvestMoonStateParser
1878
1879    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1880    _TERMINATION_TARGET_NAME = "reading_storage_sign"
1881
1882class NextToStorageSign3Subgoal(AnyRegionMatchSubGoal):
1883    NAME = "next_to_storage_sign"
1884    _NAMED_REGIONS = [
1885        "item_storage_sign_below",
1886        "item_storage_sign_left",
1887        "item_storage_sign_right",
1888    ]
1889    _TARGET_NAMES = [
1890        "next_to_storage_sign_up",
1891        "next_to_storage_sign_right",
1892        "next_to_storage_sign_left",
1893    ]
1894
1895class SpeakToKirkVillageTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1896    REQUIRED_PARSER = BaseHarvestMoonStateParser
1897
1898    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1899    _TERMINATION_TARGET_NAME = "speaking_to_kirk_village"
1900
1901class NextToKirkVillageSubgoal(AnyRegionMatchSubGoal):
1902    NAME = "next_to_kirk_village"
1903    _NAMED_REGIONS = [
1904        "npc_kirk_above",
1905    ]
1906    _TARGET_NAMES = [
1907        "next_to_kirk_down",
1908    ]
1909
1910class TakeFerryTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1911    REQUIRED_PARSER = BaseHarvestMoonStateParser
1912
1913    _TERMINATION_NAMED_REGION = "entrance"
1914    _TERMINATION_TARGET_NAME = "village_ferry_entrance"
1915
1916class NextToKirkMainlandSubgoal(AnyRegionMatchSubGoal):
1917    NAME = "next_to_kirk_mainland"
1918    _NAMED_REGIONS = [
1919        "npc_kirk_mainland_right",
1920        "npc_kirk_mainland_below",
1921    ]
1922    _TARGET_NAMES = [
1923        "next_to_kirk_mainland_left",
1924        "next_to_kirk_mainland_up",
1925    ]
1926
1927class SpeakToJoeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1928    REQUIRED_PARSER = BaseHarvestMoonStateParser
1929
1930    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1931    _TERMINATION_TARGET_NAME = "speaking_to_joe"
1932
1933class NextToJoeSubgoal(AnyRegionMatchSubGoal):
1934    NAME = "next_to_joe"
1935    _NAMED_REGIONS = [
1936        "npc_joe_left",
1937    ]
1938    _TARGET_NAMES = [
1939        "next_to_joe_right",
1940    ]
1941
1942class SpeakToLukiaTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1943    REQUIRED_PARSER = BaseHarvestMoonStateParser
1944
1945    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1946    _TERMINATION_TARGET_NAME = "speaking_to_lukia"
1947
1948class NextToLukiaSubgoal(AnyRegionMatchSubGoal):
1949    NAME = "next_to_Lukia"
1950    _NAMED_REGIONS = [
1951        "npc_lukia_right",
1952    ]
1953    _TARGET_NAMES = [
1954        "next_to_lukia_left",
1955    ]
1956
1957class SpeakToLucusTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1958    REQUIRED_PARSER = BaseHarvestMoonStateParser
1959
1960    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1961    _TERMINATION_TARGET_NAME = "speaking_to_lucus"
1962
1963class NextToLucusSubgoal(AnyRegionMatchSubGoal):
1964    NAME = "next_to_lucus"
1965    _NAMED_REGIONS = [
1966        "npc_lucus_above",
1967        "npc_lucus_left",
1968        "npc_lucus_right",
1969    ]
1970    _TARGET_NAMES = [
1971        "next_to_lucus_down",
1972        "next_to_lucus_right",
1973        "next_to_lucus_left",
1974    ]
1975
1976class SpeakToLylaTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1977    REQUIRED_PARSER = BaseHarvestMoonStateParser
1978
1979    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1980    _TERMINATION_TARGET_NAME = "speaking_to_lyla"
1981
1982class NextToLylaSubgoal(AnyRegionMatchSubGoal):
1983    NAME = "next_to_lyla"
1984    _NAMED_REGIONS = [
1985        "npc_lyla_right",
1986    ]
1987    _TARGET_NAMES = [
1988        "next_to_lyla_left",
1989    ]
1990
1991class BuyHorseSaddleTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1992    REQUIRED_PARSER = BaseHarvestMoonStateParser
1993    _OR_PAIRS = [
1994        ("item_horse_saddle_empty_1", "bought_horse_saddle_1"),
1995        ("item_horse_saddle_empty_2", "bought_horse_saddle_2"),
1996    ]
1997
1998class NextToHorseSaddleSubgoal(AnyRegionMatchSubGoal):
1999    NAME = "next_to_horse_saddle"
2000    _NAMED_REGIONS = ["item_horse_saddle_above", "item_horse_saddle_below"]
2001    _TARGET_NAMES = ["next_to_horse_saddle_down", "next_to_horse_saddle_up"]
2002
2003class BuyFlowerVaseTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2004    REQUIRED_PARSER = BaseHarvestMoonStateParser
2005    _OR_PAIRS = [
2006        ("item_flower_vase_empty_1", "bought_flower_vase_1"),
2007        ("item_flower_vase_empty_2", "bought_flower_vase_2"),
2008    ]
2009    _ALL_PAIRS = [
2010        ("dialogue_box_bottom", "bought_from_flower_shop"),
2011    ]
2012
2013class NextToVaseSubgoal(AnyRegionMatchSubGoal):
2014    NAME = "next_to_vase"
2015    _NAMED_REGIONS = ["item_flower_vase_above", "item_flower_vase_below"]
2016    _TARGET_NAMES = ["next_to_vase_down", "next_to_vase_up"]
2017
2018class BuyMealSetTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2019    REQUIRED_PARSER = BaseHarvestMoonStateParser
2020    _OR_PAIRS = [
2021        ("item_meal_set_empty_1", "bought_meal_set_1"),
2022        ("item_meal_set_empty_2", "bought_meal_set_2"),
2023    ]
2024
2025class SelectMealSetSubgoal(AnyRegionMatchSubGoal):
2026    NAME = "selected_meal_set"
2027    _NAMED_REGIONS = [
2028        "dialogue_box_bottom",
2029    ]
2030    _TARGET_NAMES = [
2031        "select_meal_set",
2032    ]
2033
2034class BuyCoffeeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2035    REQUIRED_PARSER = BaseHarvestMoonStateParser
2036
2037    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
2038    _TERMINATION_TARGET_NAME = "select_coffee"
2039
2040class NextToCoffeeSubgoal(AnyRegionMatchSubGoal):
2041    NAME = "next_to_coffee"
2042    _NAMED_REGIONS = [
2043        "item_coffee_above",
2044        "item_coffee_below",
2045    ]
2046    _TARGET_NAMES = [
2047        "next_to_coffee_down",
2048        "next_to_coffee_up",
2049    ]
2050
2051class SelectCoffeeSubgoal(AnyRegionMatchSubGoal):
2052    NAME = "selected_coffee"
2053    _NAMED_REGIONS = [
2054        "dialogue_box_bottom",
2055    ]
2056    _TARGET_NAMES = [
2057        "select_coffee",
2058    ]
2059
2060class NextToWeed3Subgoal(AnyRegionMatchSubGoal):
2061    NAME = "next_to_weed"
2062    _NAMED_REGIONS = ["item_weed_left"]
2063    _TARGET_NAMES = ["next_to_weed_right"]
2064
2065class RemoveWeed3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2066    REQUIRED_PARSER = BaseHarvestMoonStateParser
2067    _TERMINATION_NAMED_REGION = "item_weed_left"
2068    _TERMINATION_TARGET_NAME = "weed_removed"
2069
2070class NextToCherrySubgoal(AnyRegionMatchSubGoal):
2071    NAME = "next_to_cherry"
2072    _NAMED_REGIONS = ["item_cherry_left"]
2073    _TARGET_NAMES = ["next_to_cherry_right"]
2074
2075class PickUpCherry3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2076    REQUIRED_PARSER = BaseHarvestMoonStateParser
2077    _TERMINATION_NAMED_REGION = "item_cherry_left"
2078    _TERMINATION_TARGET_NAME = "cherry_picked"
2079
2080class SpeakToKateTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2081    REQUIRED_PARSER = BaseHarvestMoonStateParser
2082    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
2083    _TERMINATION_TARGET_NAME = "speaking_to_kate"
2084
2085class NextToKateSubgoal(AnyRegionMatchSubGoal):
2086    NAME = "next_to_kate"
2087    _NAMED_REGIONS = [
2088        "npc_kate_left",
2089        "npc_kate_right",
2090        "npc_kate_below",
2091    ]
2092    _TARGET_NAMES = [
2093        "next_to_kate_right",
2094        "next_to_kate_left",
2095        "next_to_kate_up",
2096    ]
2097
2098class NextToCenterSPotatoSubgoal(AnyRegionMatchSubGoal):
2099    NAME = "next_to_center_spotato"
2100    _NAMED_REGIONS = ["item_center_spotato_above"]
2101    _TARGET_NAMES = ["next_to_spotato_down"]
2102
2103class WaterCenterSPotato3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2104    _OR_PAIRS = [
2105        ("item_center_spotato_above", "center_spotato_watered"),
2106    ]
2107
2108class NextToCenterWatermelonSubgoal(AnyRegionMatchSubGoal):
2109    NAME = "next_to_center_watermelon"
2110    _NAMED_REGIONS = ["item_center_watermelon_above"]
2111    _TARGET_NAMES = ["next_to_center_watermelon_down"]
2112
2113class WaterCenterWatermelon3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2114    REQUIRED_PARSER = BaseHarvestMoonStateParser
2115    _TERMINATION_NAMED_REGION = "item_center_watermelon_above"
2116    _TERMINATION_TARGET_NAME = "center_watermelon_watered"
2117
2118class NextToTargetPotatoBelowSubgoal(AnyRegionMatchSubGoal):
2119    NAME = "next_to_target_potato_below"
2120    _NAMED_REGIONS = ["item_target_potato_below"]
2121    _TARGET_NAMES = ["next_to_target_potato_up"]
2122
2123class HarvestTargetPotato3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2124    _OR_PAIRS = [
2125        ("item_target_potato_below", "target_potato_harvested"),
2126    ]
2127
2128# HM3 harvest center eggplant top 3x3 field task
2129class NextToCenterEggplantTopSubgoal(AnyRegionMatchSubGoal):
2130    NAME = "next_to_center_eggplant"
2131    _NAMED_REGIONS = ["item_center_eggplant_above", "item_center_eggplant_left"]
2132    _TARGET_NAMES = ["next_to_eggplant_down", "next_to_eggplant_right"]
2133
2134class HarvestCenterEggplantTop3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2135    _OR_PAIRS = [
2136        ("item_center_eggplant_above", "center_eggplant_harvested_down"),
2137        ("item_center_eggplant_left", "center_eggplant_harvested_right"),
2138    ]
2139
2140class NextToBookshelfSubgoal(AnyRegionMatchSubGoal):
2141    NAME = "next_to_bookshelf"
2142    _NAMED_REGIONS = ["item_bookshelf_below"]
2143    _TARGET_NAMES = ["next_to_bookshelf_up"]
2144
2145class ReadAnimalCh2TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2146    REQUIRED_PARSER = BaseHarvestMoonStateParser
2147    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
2148    _TERMINATION_TARGET_NAME = "finish_animal_ch2"
2149
2150# HM3 harvest center turnip task
2151class NextToCenterTurnip3Subgoal(AnyRegionMatchSubGoal):
2152    NAME = "next_to_center_turnip_below"
2153    _NAMED_REGIONS = ["item_center_turnip_below"]
2154    _TARGET_NAMES = ["next_to_center_turnip_up"]
2155
2156class HarvestCenterTurnip3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2157    REQUIRED_PARSER = BaseHarvestMoonStateParser
2158    _TERMINATION_NAMED_REGION = "item_center_turnip_below"
2159    _TERMINATION_TARGET_NAME = "center_turnip_harvested"
2160
2161class NextToSellChicken3Subgoal(AnyRegionMatchSubGoal):
2162    NAME = "next_to_sell_chicken"
2163    _NAMED_REGIONS = ["item_sell_chicken_below", "item_sell_chicken_above"]
2164    _TARGET_NAMES = ["next_to_sell_chicken_up", "next_to_sell_chicken_down"]
2165
2166class SellChicken3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2167    REQUIRED_PARSER = BaseHarvestMoonStateParser
2168    _OR_PAIRS = [
2169        ("sell_animal_section_1", "selling_animal_1"),
2170        ("sell_animal_section_2", "selling_animal_2"),
2171    ]
2172    _ALL_PAIRS = [
2173        ("dialogue_box_bottom", "animal_sold"),
2174    ]
2175
2176class NextToBerry3Subgoal(AnyRegionMatchSubGoal):
2177    NAME = "next_to_berry_above"
2178    _NAMED_REGIONS = ["item_berry_above"]
2179    _TARGET_NAMES = ["next_to_berry_down"]
2180
2181class PickBerry3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2182    REQUIRED_PARSER = BaseHarvestMoonStateParser
2183    _TERMINATION_NAMED_REGION = "item_berry_above"
2184    _TERMINATION_TARGET_NAME = "berry_picked_above"
2185
2186class CheckPlayerMoneySubgoal(AnyRegionMatchSubGoal):
2187    NAME = "choose_may"
2188    _NAMED_REGIONS = ["menu_box"]
2189    _TARGET_NAMES = ["choose_may"]
2190
2191class CheckPlayerMoneyTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2192    REQUIRED_PARSER = BaseHarvestMoonStateParser
2193    _TERMINATION_NAMED_REGION = "player_top_left"
2194    _TERMINATION_TARGET_NAME = "display_player_status"
2195
2196class FillCowFodderBlock3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2197    REQUIRED_PARSER = BaseHarvestMoonStateParser
2198    _OR_PAIRS = [
2199        ("item_right_cow_stall_block", "filled_right_cow_stall_block"),
2200        ("item_cow_stall_block_2", "filled_cow_stall_block_right"),
2201    ]
2202
2203class NextToCowFodderBlock3Subgoal(AnyRegionMatchSubGoal):
2204    NAME = "next_to_rightmost_cow_fodder_block"
2205    _NAMED_REGIONS = ["item_right_cow_stall_block_below", "item_right_cow_stall_block_left"]
2206    _TARGET_NAMES = ["next_to_right_cow_stall_block_up", "next_to_right_cow_stall_block_right"]
2207
2208class FarmEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2209    REQUIRED_PARSER = BaseHarvestMoonStateParser
2210
2211    _TERMINATION_NAMED_REGION = "entrance"
2212    _TERMINATION_TARGET_NAME = "farm_entrance"
2213
2214class NearFarmSubgoal(AnyRegionMatchSubGoal):
2215    NAME = "outside_farm"
2216    _NAMED_REGIONS = [
2217        "dialogue_box_bottom",
2218    ]
2219    _TARGET_NAMES = [
2220        "farm_label",
2221    ]
2222
2223class VillageEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2224    REQUIRED_PARSER = BaseHarvestMoonStateParser
2225    _TERMINATION_NAMED_REGION = "top_entrance"
2226    _TERMINATION_TARGET_NAME = "village_entrance"
2227
2228class NearVillageSubgoal(AnyRegionMatchSubGoal):
2229    NAME = "outside_village"
2230    _NAMED_REGIONS = ["dialogue_box_bottom"]
2231    _TARGET_NAMES = ["village_label"]
2232
2233class GrasslandEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2234    REQUIRED_PARSER = BaseHarvestMoonStateParser
2235    _TERMINATION_NAMED_REGION = "entrance"
2236    _TERMINATION_TARGET_NAME = "grassland_entrance"
2237
2238class NearGrasslandSubgoal(AnyRegionMatchSubGoal):
2239    NAME = "outside_grassland"
2240    _NAMED_REGIONS = ["dialogue_box_bottom"]
2241    _TARGET_NAMES = ["grassland_label"]
2242
2243class ForestEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2244    REQUIRED_PARSER = BaseHarvestMoonStateParser
2245    _TERMINATION_NAMED_REGION = "entrance"
2246    _TERMINATION_TARGET_NAME = "forest_entrance"
2247
2248class NearForestSubgoal(AnyRegionMatchSubGoal):
2249    NAME = "outside_forest"
2250    _NAMED_REGIONS = ["dialogue_box_bottom"]
2251    _TARGET_NAMES = ["forest_label"]
2252
2253class CliffEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2254    REQUIRED_PARSER = BaseHarvestMoonStateParser
2255    _TERMINATION_NAMED_REGION = "entrance"
2256    _TERMINATION_TARGET_NAME = "cliff_entrance"
2257
2258class NearCliffSubgoal(AnyRegionMatchSubGoal):
2259    NAME = "outside_cliff"
2260    _NAMED_REGIONS = ["dialogue_box_bottom"]
2261    _TARGET_NAMES = ["cliff_label"]
2262
2263class MountainEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2264    REQUIRED_PARSER = BaseHarvestMoonStateParser
2265    _TERMINATION_NAMED_REGION = "entrance"
2266    _TERMINATION_TARGET_NAME = "mountain_entrance"
2267
2268class NearMountainSubgoal(AnyRegionMatchSubGoal):
2269    NAME = "outside_mountain"
2270    _NAMED_REGIONS = ["dialogue_box_bottom"]
2271    _TARGET_NAMES = ["mountain_label"]
2272
2273class ShoppingMallEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2274    REQUIRED_PARSER = BaseHarvestMoonStateParser
2275
2276    _TERMINATION_NAMED_REGION = "entrance"
2277    _TERMINATION_TARGET_NAME = "shopping_mall_entrance"
2278
2279class NearShoppingMallSubgoal(AnyRegionMatchSubGoal):
2280    NAME = "outside_shopping_mall"
2281    _NAMED_REGIONS = [
2282        "dialogue_box_bottom",
2283    ]
2284    _TARGET_NAMES = [
2285        "shopping_mall_label",
2286    ]
2287
2288class ShoppingMallSecondFloorTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2289    REQUIRED_PARSER = BaseHarvestMoonStateParser
2290    _TERMINATION_NAMED_REGION = "entrance"
2291    _TERMINATION_TARGET_NAME = "shopping_mall_second_floor"
2292
2293class NextToStairsSubgoal(AnyRegionMatchSubGoal):
2294    NAME = "next_to_stairs"
2295    _NAMED_REGIONS = ["item_stairs", "item_stairs", "item_stairs"]
2296    _TARGET_NAMES = ["next_to_stairs_1", "next_to_stairs_2", "next_to_stairs_3"]
2297
2298class FarmersUnionEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2299    REQUIRED_PARSER = BaseHarvestMoonStateParser
2300
2301    _TERMINATION_NAMED_REGION = "entrance"
2302    _TERMINATION_TARGET_NAME = "farmers_union_entrance"
2303
2304class NearFarmersUnionSubgoal(AnyRegionMatchSubGoal):
2305    NAME = "outside_farmers_union"
2306    _NAMED_REGIONS = [
2307        "dialogue_box_bottom",
2308    ]
2309    _TARGET_NAMES = [
2310        "farmers_union_label",
2311    ]
2312
2313class AquariumEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2314    REQUIRED_PARSER = BaseHarvestMoonStateParser
2315
2316    _TERMINATION_NAMED_REGION = "entrance"
2317    _TERMINATION_TARGET_NAME = "aquarium_entrance"
2318
2319class NearAquariumSubgoal(AnyRegionMatchSubGoal):
2320    NAME = "outside_aquarium"
2321    _NAMED_REGIONS = [
2322        "dialogue_box_bottom",
2323    ]
2324    _TARGET_NAMES = [
2325        "aquarium_label",
2326    ]
2327
2328class TheatreEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2329    REQUIRED_PARSER = BaseHarvestMoonStateParser
2330
2331    _TERMINATION_NAMED_REGION = "entrance"
2332    _TERMINATION_TARGET_NAME = "theatre_entrance"
2333
2334class NearTheatreSubgoal(AnyRegionMatchSubGoal):
2335    NAME = "outside_theatre"
2336    _NAMED_REGIONS = [
2337        "dialogue_box_bottom",
2338    ]
2339    _TARGET_NAMES = [
2340        "theatre_label",
2341    ]
2342
2343class HotSpringEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2344    REQUIRED_PARSER = BaseHarvestMoonStateParser
2345
2346    _TERMINATION_NAMED_REGION = "entrance"
2347    _TERMINATION_TARGET_NAME = "hot_spring_entrance"
2348
2349class NearHotSpringSubgoal(AnyRegionMatchSubGoal):
2350    NAME = "outside_hot_spring"
2351    _NAMED_REGIONS = [
2352        "outside_hot_spring",
2353        "outside_hot_spring",
2354        "outside_hot_spring",
2355    ]
2356    _TARGET_NAMES = [
2357        "outside_hot_spring_left",
2358        "outside_hot_spring_right",
2359        "outside_hot_spring_up",
2360    ]
2361
2362# HM3 hatch egg task
2363class HarvestMoon3NextToHatchingBoxSubgoal(AnyRegionMatchSubGoal):
2364    NAME = "next_to_hatching_box"
2365    _NAMED_REGIONS = ["item_next_to_hatching_box"]
2366    _TARGET_NAMES = ["next_to_hatching_box"]
2367
2368class HarvestMoon3HatchEggTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2369    REQUIRED_PARSER = BaseHarvestMoonStateParser
2370    _TERMINATION_NAMED_REGION = "item_hatching_box"
2371    _TERMINATION_TARGET_NAME = "dropped_egg_into_hatching_box"
2372
2373# HM3 fill chicken fodder subgoals
2374class NextToChickenSilo3Subgoal(AnyRegionMatchSubGoal):
2375    NAME = "next_to_chicken_silo"
2376    _NAMED_REGIONS = [
2377        "item_chicken_silo_left1",
2378        "item_chicken_silo_left2",
2379        "item_chicken_silo_above",
2380    ]
2381    _TARGET_NAMES = [
2382        "next_to_chicken_silo_right1",
2383        "next_to_chicken_silo_right2",
2384        "next_to_chicken_silo_down",
2385    ]
2386
2387class PickupChickenFodder3Subgoal(AnyRegionMatchSubGoal):
2388    NAME = "picked_up_chicken_fodder_from_silo"
2389    _NAMED_REGIONS = [
2390        "item_chicken_silo_left1",
2391        "item_chicken_silo_left2",
2392        "item_chicken_silo_above",
2393    ]
2394    _TARGET_NAMES = [
2395        "got_fodder_from_chicken_silo_right1",
2396        "got_fodder_from_chicken_silo_right2",
2397        "got_fodder_from_chicken_silo_down",
2398    ]
2399
2400class NextToTopmostChickenStallBlockSubgoal(AnyRegionMatchSubGoal):
2401    NAME = "next_to_topmost_chicken_stall_block_with_fodder"
2402    _NAMED_REGIONS = ["item_next_to_topmost_chicken_stall_block"]
2403    _TARGET_NAMES = ["next_to_topmost_chicken_stall_block"]
2404
2405class FillTopmostChickenStallBlockTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2406    REQUIRED_PARSER = BaseHarvestMoonStateParser
2407    _TERMINATION_NAMED_REGION = "item_topmost_chicken_stall_block"
2408    _TERMINATION_TARGET_NAME = "filled_topmost_chicken_stall_block"
2409
2410class NextToFodderSetSubgoal(AnyRegionMatchSubGoal):
2411    NAME = "next_to_fodder_set"
2412    _NAMED_REGIONS = ["item_fodder_set_below"]
2413    _TARGET_NAMES = ["next_to_fodder_set_up"]
2414
2415class SelectedFodderSetSubgoal(AnyRegionMatchSubGoal):
2416    NAME = "selected_fodder_set"
2417    _NAMED_REGIONS = ["dialogue_box_bottom"]
2418    _TARGET_NAMES = ["selected_fodder_set"]
2419
2420class BuyFodderSet3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2421    _ALL_PAIRS = [("dialogue_box_bottom", "bought_from_farmers_union"), ("item_fodder_set", "picked_fodder_set")]
2422
2423class NextToHorseMedicineSubgoal(AnyRegionMatchSubGoal):
2424    NAME = "next_to_horse_medicine"
2425    _NAMED_REGIONS = ["item_horse_medicine_below"]
2426    _TARGET_NAMES = ["next_to_horse_medicine_up"]
2427
2428class SelectedHorseMedicineSubgoal(AnyRegionMatchSubGoal):
2429    NAME = "selected_horse_medicine"
2430    _NAMED_REGIONS = ["dialogue_box_bottom"]
2431    _TARGET_NAMES = ["selected_horse_medicine"]
2432
2433class BuyHorseMedicine3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2434    _ALL_PAIRS = [("dialogue_box_bottom", "bought_from_farmers_union"), ("item_horse_medicine", "picked_horse_medicine")]
2435
2436# HM1 home expansion estimate task
2437class SelectHomeExpansionSubgoal(AnyRegionMatchSubGoal):
2438    NAME = "selected_home_expansion"
2439    _NAMED_REGIONS = ["dialogue_box_bottom"]
2440    _TARGET_NAMES = ["select_home_expansion"]
2441
2442class GetHomeExpansionEstimateTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2443    REQUIRED_PARSER = BaseHarvestMoonStateParser
2444    _TERMINATION_NAMED_REGION = "screen_bottom_half"
2445    _TERMINATION_TARGET_NAME = "home_expansion_estimate"
class MultiRegionMatchTerminationMetric(gameboy_worlds.emulation.tracker.TerminationTruncationMetric, abc.ABC):
16class MultiRegionMatchTerminationMetric(TerminationTruncationMetric, ABC):
17    """
18    Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied.
19    OR_PAIRS: list of (region, target) — at least one must match.
20    ALL_PAIRS: list of (region, target) — every one must match.
21    NOT_PAIRS: list of (region, target) — none must match.
22    Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches).
23    Any list may be empty, in which case its condition is trivially satisfied.
24    """
25
26    REQUIRED_PARSER = BaseHarvestMoonStateParser
27    _OR_PAIRS: list = []
28    _ALL_PAIRS: list = []
29    _NOT_PAIRS: list = []
30
31    def determine_terminated(self, current_frame, recent_frames):
32        all_frames = [current_frame]
33        if recent_frames is not None:
34            all_frames = recent_frames
35        for frame in all_frames:
36            or_ok = (not self._OR_PAIRS) or any(
37                self.state_parser.named_region_matches_multi_target(frame, region, target)
38                for region, target in self._OR_PAIRS
39            )
40            all_ok = all(
41                self.state_parser.named_region_matches_multi_target(frame, region, target)
42                for region, target in self._ALL_PAIRS
43            )
44            not_ok = not any(
45                self.state_parser.named_region_matches_multi_target(frame, region, target)
46                for region, target in self._NOT_PAIRS
47            )
48            if or_ok and all_ok and not_ok:
49                return True
50        return False

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

def determine_terminated(self, current_frame, recent_frames):
31    def determine_terminated(self, current_frame, recent_frames):
32        all_frames = [current_frame]
33        if recent_frames is not None:
34            all_frames = recent_frames
35        for frame in all_frames:
36            or_ok = (not self._OR_PAIRS) or any(
37                self.state_parser.named_region_matches_multi_target(frame, region, target)
38                for region, target in self._OR_PAIRS
39            )
40            all_ok = all(
41                self.state_parser.named_region_matches_multi_target(frame, region, target)
42                for region, target in self._ALL_PAIRS
43            )
44            not_ok = not any(
45                self.state_parser.named_region_matches_multi_target(frame, region, target)
46                for region, target in self._NOT_PAIRS
47            )
48            if or_ok and all_ok and not_ok:
49                return True
50        return False

Determines whether the environment was terminated.

Parameters
  • current_frame: The current frame rendered by the emulator.
  • recent_frames: The stack of frames that were rendered during the last action. Shape is [n_frames, height, width, channels]. Can be None if rendering is disabled.
Returns

True if the environment was terminated, False otherwise.

class PreviousFrameTerminateMetric(gameboy_worlds.emulation.tracker.TerminationTruncationMetric, abc.ABC):
52class PreviousFrameTerminateMetric(TerminationTruncationMetric, ABC):
53    """
54    Terminates based on what was on screen BEFORE the final action.
55
56    _TERMINATION_NAMED_REGION / _TERMINATION_TARGET_NAME: checked against the
57    last frame of the previous step (i.e. the frame visible before the action).
58
59    _CURRENT_NAMED_REGION / _CURRENT_TARGET_NAME: optional additional check
60    against the current step's frames (e.g. confirming the action had effect).
61    Both conditions must be satisfied when the current fields are set.
62
63    _prev_frame is updated AFTER super().step() so that determine_terminated
64    always sees the frame from the step before the current one.
65    """
66    REQUIRED_PARSER = BaseHarvestMoonStateParser
67    _TERMINATION_NAMED_REGION: str = None
68    _TERMINATION_TARGET_NAME: str = None
69    _CURRENT_NAMED_REGION: str = None
70    _CURRENT_TARGET_NAME: str = None
71
72    def step(self, current_frame, recent_frames):
73        super().step(current_frame, recent_frames)
74        self._prev_frame = recent_frames[-1] if recent_frames is not None else current_frame
75
76    def determine_terminated(self, current_frame, recent_frames):
77        if not hasattr(self, "_prev_frame"):
78            return False
79        prev_ok = self.state_parser.named_region_matches_multi_target(
80            self._prev_frame,
81            self._TERMINATION_NAMED_REGION,
82            self._TERMINATION_TARGET_NAME,
83        )
84        if not prev_ok:
85            return False
86        if self._CURRENT_NAMED_REGION is None:
87            return True
88        all_frames = recent_frames if recent_frames is not None else [current_frame]
89        return any(
90            self.state_parser.named_region_matches_multi_target(
91                frame, self._CURRENT_NAMED_REGION, self._CURRENT_TARGET_NAME
92            )
93            for frame in all_frames
94        )

Terminates based on what was on screen BEFORE the final action.

_TERMINATION_NAMED_REGION / _TERMINATION_TARGET_NAME: checked against the last frame of the previous step (i.e. the frame visible before the action).

_CURRENT_NAMED_REGION / _CURRENT_TARGET_NAME: optional additional check against the current step's frames (e.g. confirming the action had effect). Both conditions must be satisfied when the current fields are set.

_prev_frame is updated AFTER super().step() so that determine_terminated always sees the frame from the step before the current one.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

def step(self, current_frame, recent_frames):
72    def step(self, current_frame, recent_frames):
73        super().step(current_frame, recent_frames)
74        self._prev_frame = recent_frames[-1] if recent_frames is not None else current_frame

Determines whether the environment was terminated or truncated.

def determine_terminated(self, current_frame, recent_frames):
76    def determine_terminated(self, current_frame, recent_frames):
77        if not hasattr(self, "_prev_frame"):
78            return False
79        prev_ok = self.state_parser.named_region_matches_multi_target(
80            self._prev_frame,
81            self._TERMINATION_NAMED_REGION,
82            self._TERMINATION_TARGET_NAME,
83        )
84        if not prev_ok:
85            return False
86        if self._CURRENT_NAMED_REGION is None:
87            return True
88        all_frames = recent_frames if recent_frames is not None else [current_frame]
89        return any(
90            self.state_parser.named_region_matches_multi_target(
91                frame, self._CURRENT_NAMED_REGION, self._CURRENT_TARGET_NAME
92            )
93            for frame in all_frames
94        )

Determines whether the environment was terminated.

Parameters
  • current_frame: The current frame rendered by the emulator.
  • recent_frames: The stack of frames that were rendered during the last action. Shape is [n_frames, height, width, channels]. Can be None if rendering is disabled.
Returns

True if the environment was terminated, False otherwise.

 96class ChickenCoopTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
 97    REQUIRED_PARSER = BaseHarvestMoonStateParser
 98
 99    _TERMINATION_NAMED_REGION = "screen_bottom"
100    _TERMINATION_TARGET_NAME = "chicken_coop_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideChickenCoopSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
102class OutsideChickenCoopSubgoal(AnyRegionMatchSubGoal):
103    NAME = "outside_chicken_coop"
104    _NAMED_REGIONS = [
105        "screen_middle",
106        "screen_middle",
107        "screen_middle",
108    ]
109    _TARGET_NAMES = [
110        "outside_chicken_coop_left",
111        "outside_chicken_coop_right",
112        "outside_chicken_coop_up",
113    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_chicken_coop'

Name of the subgoal.

class OutsideChickenCoop2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
115class OutsideChickenCoop2Subgoal(AnyRegionMatchSubGoal):
116    NAME = "outside_chicken_coop"
117    _NAMED_REGIONS = [
118        "outside_barns",
119        "outside_barns",
120        "outside_barns",
121    ]
122    _TARGET_NAMES = [
123        "outside_chicken_coop_left",
124        "outside_chicken_coop_right",
125        "outside_chicken_coop_up",
126    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_chicken_coop'

Name of the subgoal.

class OutsideChickenCoop3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
128class OutsideChickenCoop3Subgoal(AnyRegionMatchSubGoal):
129    NAME = "outside_chicken_coop"
130    _NAMED_REGIONS = [
131        "outside_chicken_coop",
132        "outside_chicken_coop",
133        "outside_chicken_coop",
134    ]
135    _TARGET_NAMES = [
136        "outside_chicken_coop_left",
137        "outside_chicken_coop_right",
138        "outside_chicken_coop_up",
139    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_chicken_coop'

Name of the subgoal.

141class CowBarnTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
142    REQUIRED_PARSER = BaseHarvestMoonStateParser
143
144    _TERMINATION_NAMED_REGION = "screen_bottom"
145    _TERMINATION_TARGET_NAME = "cow_barn_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideCowBarnSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
147class OutsideCowBarnSubgoal(AnyRegionMatchSubGoal):
148    NAME = "outside_cow_barn"
149    _NAMED_REGIONS = [
150        "screen_middle",
151        "screen_middle",
152        "screen_middle",
153    ]
154    _TARGET_NAMES = [
155        "outside_cow_barn_left",
156        "outside_cow_barn_right",
157        "outside_cow_barn_up",
158    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_cow_barn'

Name of the subgoal.

class OutsideCowBarn2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
160class OutsideCowBarn2Subgoal(AnyRegionMatchSubGoal):
161    NAME = "outside_cow_barn"
162    _NAMED_REGIONS = [
163        "outside_barns",
164        "outside_barns",
165        "outside_barns",
166    ]
167    _TARGET_NAMES = [
168        "outside_cow_barn_left",
169        "outside_cow_barn_right",
170        "outside_cow_barn_up",
171    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_cow_barn'

Name of the subgoal.

173class StorageTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
174    REQUIRED_PARSER = BaseHarvestMoonStateParser
175
176    _TERMINATION_NAMED_REGION = "screen_bottom"
177    _TERMINATION_TARGET_NAME = "storage_shed_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideStorageSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
179class OutsideStorageSubgoal(AnyRegionMatchSubGoal):
180    NAME = "outside_storage_shed"
181    _NAMED_REGIONS = [
182        "screen_middle",
183        "screen_middle",
184        "screen_middle",
185    ]
186    _TARGET_NAMES = [
187        "outside_storage_left",
188        "outside_storage_right",
189        "outside_storage_up",
190    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_storage_shed'

Name of the subgoal.

192class PickupWaterCanTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
193    REQUIRED_PARSER = BaseHarvestMoonStateParser
194
195    _TERMINATION_NAMED_REGION = "dialogue_box_top"
196    _TERMINATION_TARGET_NAME = "pick_up_watercan"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToWaterCanSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
198class NextToWaterCanSubgoal(AnyRegionMatchSubGoal):
199    NAME = "next_to_water_can"
200    _NAMED_REGIONS = [
201        "item_watercan_above",
202        "item_watercan_right",
203        "item_watercan_below",
204    ]
205    _TARGET_NAMES = [
206        "pickup_watercan_down",
207        "pickup_watercan_left",
208        "pickup_watercan_up",
209    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_water_can'

Name of the subgoal.

211class PickupCowBellTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
212    REQUIRED_PARSER = BaseHarvestMoonStateParser
213
214    _TERMINATION_NAMED_REGION = "dialogue_box_top_mid"
215    _TERMINATION_TARGET_NAME = "pick_up_cowbell"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToCowBellSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
217class NextToCowBellSubgoal(AnyRegionMatchSubGoal):
218    NAME = "next_to_cowbell"
219    _NAMED_REGIONS = [
220        "item_cowbell_above",
221        "item_cowbell_below",
222    ]
223    _TARGET_NAMES = [
224        "next_to_cowbell_down",
225        "next_to_cowbell_up",
226    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_cowbell'

Name of the subgoal.

228class PickupSickleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
229    REQUIRED_PARSER = BaseHarvestMoonStateParser
230
231    _TERMINATION_NAMED_REGION = "dialogue_box_top_mid"
232    _TERMINATION_TARGET_NAME = "pick_up_sickle"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToSickleSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
234class NextToSickleSubgoal(AnyRegionMatchSubGoal):
235    NAME = "next_to_sickle"
236    _NAMED_REGIONS = [
237        "item_sickle_above",
238        "item_sickle_left",
239        "item_sickle_below",
240    ]
241    _TARGET_NAMES = [
242        "pickup_sickle_down",
243        "pickup_sickle_right",
244        "pickup_sickle_up",
245    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_sickle'

Name of the subgoal.

247class PickupHoeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
248    REQUIRED_PARSER = BaseHarvestMoonStateParser
249
250    _TERMINATION_NAMED_REGION = "dialogue_box_top_short"
251    _TERMINATION_TARGET_NAME = "pick_up_hoe"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToHoeSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
253class NextToHoeSubgoal(AnyRegionMatchSubGoal):
254    NAME = "next_to_hoe"
255    _NAMED_REGIONS = [
256        "item_hoe_above",
257        "item_hoe_below",
258    ]
259    _TARGET_NAMES = [
260        "pickup_hoe_down",
261        "pickup_hoe_up",
262    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_hoe'

Name of the subgoal.

264class PickupHammerTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
265    REQUIRED_PARSER = BaseHarvestMoonStateParser
266
267    _TERMINATION_NAMED_REGION = "dialogue_box_top_mid"
268    _TERMINATION_TARGET_NAME = "pick_up_hammer"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToHammerSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
270class NextToHammerSubgoal(AnyRegionMatchSubGoal):
271    NAME = "next_to_hammer"
272    _NAMED_REGIONS = [
273        "item_hammer_above",
274        "item_hammer_below",
275    ]
276    _TARGET_NAMES = [
277        "pickup_hammer_down",
278        "pickup_hammer_up",
279    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_hammer'

Name of the subgoal.

281class PickupGrassSeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
282    REQUIRED_PARSER = BaseHarvestMoonStateParser
283
284    _TERMINATION_NAMED_REGION = "dialogue_box_top"
285    _TERMINATION_TARGET_NAME = "pick_up_grass_seed"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToGrassSeedSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
287class NextToGrassSeedSubgoal(AnyRegionMatchSubGoal):
288    NAME = "next_to_grass_seed"
289    _NAMED_REGIONS = [
290        "item_grass_seed_above",
291        "item_grass_seed_right",
292        "item_grass_seed_below",
293    ]
294    _TARGET_NAMES = [
295        "pickup_grass_seed_down",
296        "pickup_grass_seed_left",
297        "pickup_grass_seed_up",
298    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_grass_seed'

Name of the subgoal.

300class GoToSleepTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
301    REQUIRED_PARSER = BaseHarvestMoonStateParser
302
303    _TERMINATION_NAMED_REGION = "item_bed"
304    _TERMINATION_TARGET_NAME = "sleep_in_bed"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SleepOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
306class SleepOptionSubgoal(AnyRegionMatchSubGoal):
307    NAME = "sleep_option"
308    _NAMED_REGIONS = [
309        "dialogue_box_bottom",
310    ]
311    _TARGET_NAMES = [
312        "choose_yes_for_sleep",
313    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'sleep_option'

Name of the subgoal.

315class FeedSpiritTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
316    REQUIRED_PARSER = BaseHarvestMoonStateParser
317
318    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
319    _TERMINATION_TARGET_NAME = "fed_spirit"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

321class HelpSpiritEarthquakeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
322    REQUIRED_PARSER = BaseHarvestMoonStateParser
323
324    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
325    _TERMINATION_TARGET_NAME = "helped_spirit_earthquake"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToSpiritSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
327class NextToSpiritSubgoal(AnyRegionMatchSubGoal):
328    NAME = "next_to_spirit"
329    _NAMED_REGIONS = [
330        "item_spirit_left",
331        "item_spirit_below",
332        "item_spirit_above",
333    ]
334    _TARGET_NAMES = [
335        "feed_spirit_right",
336        "feed_spirit_up",
337        "feed_spirit_down",
338    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_spirit'

Name of the subgoal.

class NextToEarthquakeSpiritSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
340class NextToEarthquakeSpiritSubgoal(AnyRegionMatchSubGoal):
341    NAME = "next_to_spirit_earthquake"
342    _NAMED_REGIONS = [
343        "item_spirit_left",
344        "item_spirit_below",
345        "item_spirit_above",
346    ]
347    _TARGET_NAMES = [
348        "help_spirit_earthquake_right",
349        "help_spirit_earthquake_up",
350        "help_spirit_earthquake_down",
351    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_spirit_earthquake'

Name of the subgoal.

353class WaterTurnipTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
354    REQUIRED_PARSER = BaseHarvestMoonStateParser
355    _OR_PAIRS = [
356        ("turnip_center", "finish_watering_1"),
357        ("turnip_center", "finish_watering_2"),
358    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToTurnipSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
360class NextToTurnipSubgoal(AnyRegionMatchSubGoal):
361    NAME = "next_to_turnip"
362    _NAMED_REGIONS = ["turnip_top", "turnip_top"]
363    _TARGET_NAMES = ["ready_to_water_1", "ready_to_water_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_turnip'

Name of the subgoal.

365class BuyMaterialTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
366    REQUIRED_PARSER = BaseHarvestMoonStateParser
367
368    _TERMINATION_NAMED_REGION = "screen_bottom_half"
369    _TERMINATION_TARGET_NAME = "bought_material"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideCarpenter1Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
371class OutsideCarpenter1Subgoal(AnyRegionMatchSubGoal):
372    NAME = "outside_carpenter"
373    _NAMED_REGIONS = [
374        "center_sign",
375    ]
376    _TARGET_NAMES = [
377        "outside_carpenter",
378    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_carpenter'

Name of the subgoal.

class ShopForMaterialSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
380class ShopForMaterialSubgoal(AnyRegionMatchSubGoal):
381    NAME = "shop_for_material"
382    _NAMED_REGIONS = [
383        "screen_top_half",
384    ]
385    _TARGET_NAMES = [
386        "in_carpenter",
387    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'shop_for_material'

Name of the subgoal.

class SelectMaterialSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
389class SelectMaterialSubgoal(AnyRegionMatchSubGoal):
390    NAME = "selected_material"
391    _NAMED_REGIONS = [
392        "dialogue_box_bottom",
393    ]
394    _TARGET_NAMES = [
395        "select_material",
396    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_material'

Name of the subgoal.

398class BuyChickenTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
399    REQUIRED_PARSER = BaseHarvestMoonStateParser
400
401    _TERMINATION_NAMED_REGION = "screen_bottom_half"
402    _TERMINATION_TARGET_NAME = "bought_chicken"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideAnimalShop1Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
404class OutsideAnimalShop1Subgoal(AnyRegionMatchSubGoal):
405    NAME = "outside_animal_shop"
406    _NAMED_REGIONS = [
407        "center_sign",
408    ]
409    _TARGET_NAMES = [
410        "outside_animal_shop",
411    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_animal_shop'

Name of the subgoal.

class ShopForAnimalSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
413class ShopForAnimalSubgoal(AnyRegionMatchSubGoal):
414    NAME = "shop_for_animal"
415    _NAMED_REGIONS = [
416        "screen_top_half",
417    ]
418    _TARGET_NAMES = [
419        "in_animal_shop",
420    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'shop_for_animal'

Name of the subgoal.

class SelectChickenSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
422class SelectChickenSubgoal(AnyRegionMatchSubGoal):
423    NAME = "selected_chicken"
424    _NAMED_REGIONS = [
425        "dialogue_box_bottom",
426    ]
427    _TARGET_NAMES = [
428        "select_chicken",
429    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_chicken'

Name of the subgoal.

class SelectCowSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
431class SelectCowSubgoal(AnyRegionMatchSubGoal):
432    NAME = "selected_cow"
433    _NAMED_REGIONS = [
434        "dialogue_box_bottom",
435    ]
436    _TARGET_NAMES = [
437        "select_cow",
438    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_cow'

Name of the subgoal.

440class BuyCowTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
441    REQUIRED_PARSER = BaseHarvestMoonStateParser
442
443    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
444    _TERMINATION_TARGET_NAME = "bought_named_cow"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

446class SellChickenTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
447    REQUIRED_PARSER = BaseHarvestMoonStateParser
448
449    _TERMINATION_NAMED_REGION = "screen_bottom_half"
450    _TERMINATION_TARGET_NAME = "sold_chicken"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectSellingChickenSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
452class SelectSellingChickenSubgoal(AnyRegionMatchSubGoal):
453    NAME = "selected_selling_chicken"
454    _NAMED_REGIONS = [
455        "dialogue_box_bottom",
456    ]
457    _TARGET_NAMES = [
458        "select_selling_chicken",
459    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_selling_chicken'

Name of the subgoal.

462class SellCowTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
463    REQUIRED_PARSER = BaseHarvestMoonStateParser
464    _TERMINATION_NAMED_REGION = "screen_bottom_half"
465    _TERMINATION_TARGET_NAME = "sold_cow"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectSellingCowSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
467class SelectSellingCowSubgoal(AnyRegionMatchSubGoal):
468    NAME = "selected_selling_cow"
469    _NAMED_REGIONS = [
470        "dialogue_box_bottom",
471    ]
472    _TARGET_NAMES = [
473        "select_selling_cow",
474    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_selling_cow'

Name of the subgoal.

class ShopForConstructionEstimatesSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
477class ShopForConstructionEstimatesSubgoal(AnyRegionMatchSubGoal):
478    NAME = "shop_for_construction_estimates"
479    _NAMED_REGIONS = ["screen_top_half"]
480    _TARGET_NAMES = ["shop_for_construction_estimates"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'shop_for_construction_estimates'

Name of the subgoal.

class SelectHothouseSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
482class SelectHothouseSubgoal(AnyRegionMatchSubGoal):
483    NAME = "selected_hothouse"
484    _NAMED_REGIONS = ["dialogue_box_bottom"]
485    _TARGET_NAMES = ["select_hothouse"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_hothouse'

Name of the subgoal.

487class GetHothouseEstimateTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
488    REQUIRED_PARSER = BaseHarvestMoonStateParser
489    _TERMINATION_NAMED_REGION = "screen_bottom_half"
490    _TERMINATION_TARGET_NAME = "hothouse_estimate"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

492class BuyCowBrushTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
493    REQUIRED_PARSER = BaseHarvestMoonStateParser
494
495    _TERMINATION_NAMED_REGION = "screen_bottom_half"
496    _TERMINATION_TARGET_NAME = "bought_cow_brush"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

498class BuySaddlebagTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
499    REQUIRED_PARSER = BaseHarvestMoonStateParser
500
501    _TERMINATION_NAMED_REGION = "screen_bottom_half"
502    _TERMINATION_TARGET_NAME = "bought_saddlebag"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

504class BuyMilkerTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
505    REQUIRED_PARSER = BaseHarvestMoonStateParser
506
507    _TERMINATION_NAMED_REGION = "screen_bottom_half"
508    _TERMINATION_TARGET_NAME = "bought_milker"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideToolShop1Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
510class OutsideToolShop1Subgoal(AnyRegionMatchSubGoal):
511    NAME = "outside_tool_shop"
512    _NAMED_REGIONS = [
513        "center_sign",
514    ]
515    _TARGET_NAMES = [
516        "outside_tool_shop",
517    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_tool_shop'

Name of the subgoal.

class ShopForToolsSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
519class ShopForToolsSubgoal(AnyRegionMatchSubGoal):
520    NAME = "shop_for_tools"
521    _NAMED_REGIONS = [
522        "screen_top_half",
523    ]
524    _TARGET_NAMES = [
525        "in_tool_shop",
526    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'shop_for_tools'

Name of the subgoal.

class SelectCowBrushSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
528class SelectCowBrushSubgoal(AnyRegionMatchSubGoal):
529    NAME = "selected_cow_brush"
530    _NAMED_REGIONS = [
531        "dialogue_box_bottom",
532    ]
533    _TARGET_NAMES = [
534        "select_cow_brush",
535    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_cow_brush'

Name of the subgoal.

class SelectSaddlebagSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
537class SelectSaddlebagSubgoal(AnyRegionMatchSubGoal):
538    NAME = "selected_saddlebag"
539    _NAMED_REGIONS = [
540        "dialogue_box_bottom",
541    ]
542    _TARGET_NAMES = [
543        "select_saddlebag",
544    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_saddlebag'

Name of the subgoal.

class SelectMilkerSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
546class SelectMilkerSubgoal(AnyRegionMatchSubGoal):
547    NAME = "selected_milker"
548    _NAMED_REGIONS = [
549        "dialogue_box_bottom",
550    ]
551    _TARGET_NAMES = [
552        "select_milker",
553    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_milker'

Name of the subgoal.

555class BuyRiceBallTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
556    REQUIRED_PARSER = BaseHarvestMoonStateParser
557
558    _TERMINATION_NAMED_REGION = "screen_bottom_half"
559    _TERMINATION_TARGET_NAME = "bought_rice_ball"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideRestaurantSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
561class OutsideRestaurantSubgoal(AnyRegionMatchSubGoal):
562    NAME = "outside_restaurant"
563    _NAMED_REGIONS = [
564        "center_sign",
565    ]
566    _TARGET_NAMES = [
567        "outside_restaurant",
568    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_restaurant'

Name of the subgoal.

class ShopForFoodSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
570class ShopForFoodSubgoal(AnyRegionMatchSubGoal):
571    NAME = "shop_for_food"
572    _NAMED_REGIONS = [
573        "screen_top_half",
574    ]
575    _TARGET_NAMES = [
576        "in_restaurant",
577    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'shop_for_food'

Name of the subgoal.

class SelectRiceBallSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
579class SelectRiceBallSubgoal(AnyRegionMatchSubGoal):
580    NAME = "selected_rice_ball"
581    _NAMED_REGIONS = [
582        "dialogue_box_bottom",
583    ]
584    _TARGET_NAMES = [
585        "select_rice_ball",
586    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_rice_ball'

Name of the subgoal.

class BuyRiceBallOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
588class BuyRiceBallOptionSubgoal(AnyRegionMatchSubGoal):
589    NAME = "buy_rice_ball_option"
590    _NAMED_REGIONS = [
591        "screen_bottom_half",
592    ]
593    _TARGET_NAMES = [
594        "option_to_buy_rice_ball",
595    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'buy_rice_ball_option'

Name of the subgoal.

597class BuyCroissantTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
598    REQUIRED_PARSER = BaseHarvestMoonStateParser
599
600    _TERMINATION_NAMED_REGION = "screen_bottom_half"
601    _TERMINATION_TARGET_NAME = "bought_croissant"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectCroissantSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
603class SelectCroissantSubgoal(AnyRegionMatchSubGoal):
604    NAME = "selected_croissant"
605    _NAMED_REGIONS = [
606        "dialogue_box_bottom",
607    ]
608    _TARGET_NAMES = [
609        "select_croissant",
610    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_croissant'

Name of the subgoal.

class BuyCroissantOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
612class BuyCroissantOptionSubgoal(AnyRegionMatchSubGoal):
613    NAME = "buy_croissant_option"
614    _NAMED_REGIONS = [
615        "screen_bottom_half",
616    ]
617    _TARGET_NAMES = [
618        "option_to_buy_croissant",
619    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'buy_croissant_option'

Name of the subgoal.

621class BuyCakeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
622    REQUIRED_PARSER = BaseHarvestMoonStateParser
623
624    _TERMINATION_NAMED_REGION = "screen_bottom_half"
625    _TERMINATION_TARGET_NAME = "bought_cake"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectCakeSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
627class SelectCakeSubgoal(AnyRegionMatchSubGoal):
628    NAME = "selected_cake"
629    _NAMED_REGIONS = [
630        "dialogue_box_bottom",
631    ]
632    _TARGET_NAMES = [
633        "select_cake",
634    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_cake'

Name of the subgoal.

class BuyCakeOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
636class BuyCakeOptionSubgoal(AnyRegionMatchSubGoal):
637    NAME = "buy_cake_option"
638    _NAMED_REGIONS = [
639        "screen_bottom_half",
640    ]
641    _TARGET_NAMES = [
642        "option_to_buy_cake",
643    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'buy_cake_option'

Name of the subgoal.

class OutsideJuiceBarSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
645class OutsideJuiceBarSubgoal(AnyRegionMatchSubGoal):
646    NAME = "outside_juice_bar"
647    _NAMED_REGIONS = [
648        "center_sign",
649    ]
650    _TARGET_NAMES = [
651        "outside_juice_bar",
652    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_juice_bar'

Name of the subgoal.

class ShopForJuiceSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
654class ShopForJuiceSubgoal(AnyRegionMatchSubGoal):
655    NAME = "shop_for_juice"
656    _NAMED_REGIONS = [
657        "screen_top_half",
658    ]
659    _TARGET_NAMES = [
660        "in_juice_bar",
661    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'shop_for_juice'

Name of the subgoal.

663class BuyGrapeJuiceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
664    REQUIRED_PARSER = BaseHarvestMoonStateParser
665
666    _TERMINATION_NAMED_REGION = "screen_bottom_half"
667    _TERMINATION_TARGET_NAME = "bought_grape_juice"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectGrapeJuiceSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
669class SelectGrapeJuiceSubgoal(AnyRegionMatchSubGoal):
670    NAME = "selected_grape_juice"
671    _NAMED_REGIONS = [
672        "dialogue_box_bottom",
673    ]
674    _TARGET_NAMES = [
675        "select_grape_juice",
676    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_grape_juice'

Name of the subgoal.

class BuyGrapeJuiceOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
678class BuyGrapeJuiceOptionSubgoal(AnyRegionMatchSubGoal):
679    NAME = "buy_grape_juice_option"
680    _NAMED_REGIONS = [
681        "screen_bottom_half",
682    ]
683    _TARGET_NAMES = [
684        "option_to_buy_grape_juice",
685    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'buy_grape_juice_option'

Name of the subgoal.

687class GoToChurchPrayTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
688    REQUIRED_PARSER = BaseHarvestMoonStateParser
689
690    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
691    _TERMINATION_TARGET_NAME = "praying"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideChurchSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
693class OutsideChurchSubgoal(AnyRegionMatchSubGoal):
694    NAME = "outside_church"
695    _NAMED_REGIONS = [
696        "center_sign",
697    ]
698    _TARGET_NAMES = [
699        "outside_church",
700    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_church'

Name of the subgoal.

class InsideChurchSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
702class InsideChurchSubgoal(AnyRegionMatchSubGoal):
703    NAME = "inside_church"
704    _NAMED_REGIONS = [
705        "screen_top_half",
706    ]
707    _TARGET_NAMES = [
708        "in_church",
709    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'inside_church'

Name of the subgoal.

class PrayOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
711class PrayOptionSubgoal(AnyRegionMatchSubGoal):
712    NAME = "choose_to_pray"
713    _NAMED_REGIONS = [
714        "dialogue_box_bottom",
715    ]
716    _TARGET_NAMES = [
717        "option_to_pray",
718    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'choose_to_pray'

Name of the subgoal.

720class OpenStorageListTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
721    REQUIRED_PARSER = BaseHarvestMoonStateParser
722
723    _TERMINATION_NAMED_REGION = "left_border_frame"
724    _TERMINATION_TARGET_NAME = "open_storage_list"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToStorageListSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
726class NextToStorageListSubgoal(AnyRegionMatchSubGoal):
727    NAME = "next_to_storage_list"
728    _NAMED_REGIONS = [
729        "item_storage_list",
730    ]
731    _TARGET_NAMES = [
732        "next_to_storage_list",
733    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_storage_list'

Name of the subgoal.

735class ReadFerrySignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
736    REQUIRED_PARSER = BaseHarvestMoonStateParser
737
738    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
739    _TERMINATION_TARGET_NAME = "reading_ferry_sign"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToFerrySignSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
741class NextToFerrySignSubgoal(AnyRegionMatchSubGoal):
742    NAME = "next_to_ferry_sign"
743    _NAMED_REGIONS = [
744        "item_ferry_sign_above",
745        "item_ferry_sign_left",
746    ]
747    _TARGET_NAMES = [
748        "next_to_ferry_sign_down",
749        "next_to_ferry_sign_right",
750    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_ferry_sign'

Name of the subgoal.

752class FindSecretSavingsTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
753    REQUIRED_PARSER = BaseHarvestMoonStateParser
754
755    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
756    _TERMINATION_TARGET_NAME = "found_secret_savings"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToFireplaceSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
758class NextToFireplaceSubgoal(AnyRegionMatchSubGoal):
759    NAME = "next_to_fireplace"
760    _NAMED_REGIONS = [
761        "item_fireplace_below",
762    ]
763    _TARGET_NAMES = [
764        "next_to_fireplace_up",
765    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_fireplace'

Name of the subgoal.

767class FindLuckyMoneyTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
768    REQUIRED_PARSER = BaseHarvestMoonStateParser
769
770    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
771    _TERMINATION_TARGET_NAME = "found_lucky_money"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToClockSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
773class NextToClockSubgoal(AnyRegionMatchSubGoal):
774    NAME = "next_to_clock"
775    _NAMED_REGIONS = [
776        "item_clock_below",
777    ]
778    _TARGET_NAMES = [
779        "next_to_clock_up",
780    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_clock'

Name of the subgoal.

782class FindRainyMoneyTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
783    REQUIRED_PARSER = BaseHarvestMoonStateParser
784
785    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
786    _TERMINATION_TARGET_NAME = "found_rainy_money"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToSafeSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
788class NextToSafeSubgoal(AnyRegionMatchSubGoal):
789    NAME = "next_to_safe"
790    _NAMED_REGIONS = [
791        "item_safe_below",
792        "item_safe_below",
793    ]
794    _TARGET_NAMES = [
795        "next_to_safe_up",
796        "next_to_safe_left",
797    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_safe'

Name of the subgoal.

799class FindLostBirdTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
800    REQUIRED_PARSER = BaseHarvestMoonStateParser
801
802    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
803    _TERMINATION_TARGET_NAME = "found_bird_for_friend"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToLostBirdSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
805class NextToLostBirdSubgoal(AnyRegionMatchSubGoal):
806    NAME = "next_to_lost_bird"
807    _NAMED_REGIONS = [
808        "item_lost_bird_below",
809        "item_lost_bird_left",
810        "item_lost_bird_right",
811    ]
812    _TARGET_NAMES = [
813        "find_lost_bird_up",
814        "find_lost_bird_right",
815        "find_lost_bird_left",
816    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_lost_bird'

Name of the subgoal.

818class SpeakToBlueHairGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
819    REQUIRED_PARSER = BaseHarvestMoonStateParser
820
821    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
822    _TERMINATION_TARGET_NAME = "speaking_to_blue_hair_girl"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToBlueHairGirlSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
824class NextToBlueHairGirlSubgoal(AnyRegionMatchSubGoal):
825    NAME = "next_to_blue_hair_girl"
826    _NAMED_REGIONS = [
827        "item_blue_hair_girl_below",
828        "item_blue_hair_girl_left",
829        "item_blue_hair_girl_right",
830    ]
831    _TARGET_NAMES = [
832        "next_to_blue_hair_girl_up",
833        "next_to_blue_hair_girl_right",
834        "next_to_blue_hair_girl_left",
835    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_blue_hair_girl'

Name of the subgoal.

837class SpeakToGoldenHairGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
838    REQUIRED_PARSER = BaseHarvestMoonStateParser
839
840    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
841    _TERMINATION_TARGET_NAME = "speaking_to_golden_hair_girl"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToGoldenHairGirlSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
843class NextToGoldenHairGirlSubgoal(AnyRegionMatchSubGoal):
844    NAME = "next_to_golden_hair_girl"
845    _NAMED_REGIONS = [
846        "item_golden_hair_girl_below",
847        "item_golden_hair_girl_right",
848        "item_golden_hair_girl_above",
849    ]
850    _TARGET_NAMES = [
851        "next_to_golden_hair_girl_up",
852        "next_to_golden_hair_girl_left",
853        "next_to_golden_hair_girl_down",
854    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_golden_hair_girl'

Name of the subgoal.

856class SpeakToPinkHairGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
857    REQUIRED_PARSER = BaseHarvestMoonStateParser
858
859    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
860    _TERMINATION_TARGET_NAME = "speaking_to_pink_hair_girl"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToPinkHairGirlSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
862class NextToPinkHairGirlSubgoal(AnyRegionMatchSubGoal):
863    NAME = "next_to_pink_hair_girl"
864    _NAMED_REGIONS = [
865        "item_pink_hair_girl_above",
866        "item_pink_hair_girl_left",
867        "item_pink_hair_girl_right",
868    ]
869    _TARGET_NAMES = [
870        "next_to_pink_hair_girl_down",
871        "next_to_pink_hair_girl_right",
872        "next_to_pink_hair_girl_left",
873    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_pink_hair_girl'

Name of the subgoal.

876class SpeakToBlueHairGirlWGTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
877    REQUIRED_PARSER = BaseHarvestMoonStateParser
878    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
879    _TERMINATION_TARGET_NAME = "speaking_to_blue_hair_girl_wg"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToBlueHairGirlWGSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
881class NextToBlueHairGirlWGSubgoal(AnyRegionMatchSubGoal):
882    NAME = "next_to_blue_hair_girl_wg"
883    _NAMED_REGIONS = [
884        "item_blue_hair_girl_wg_below",
885        "item_blue_hair_girl_wg_left",
886        "item_blue_hair_girl_wg_right",
887    ]
888    _TARGET_NAMES = [
889        "next_to_blue_hair_girl_wg_up",
890        "next_to_blue_hair_girl_wg_right",
891        "next_to_blue_hair_girl_wg_left",
892    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_blue_hair_girl_wg'

Name of the subgoal.

894class SpeakToPinkHairGirlWGTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
895    REQUIRED_PARSER = BaseHarvestMoonStateParser
896    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
897    _TERMINATION_TARGET_NAME = "speaking_to_pink_hair_girl_wg"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToPinkHairGirlWGSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
899class NextToPinkHairGirlWGSubgoal(AnyRegionMatchSubGoal):
900    NAME = "next_to_pink_hair_girl_wg"
901    _NAMED_REGIONS = [
902        "item_pink_hair_girl_wg_above",
903        "item_pink_hair_girl_wg_left",
904        "item_pink_hair_girl_wg_right",
905    ]
906    _TARGET_NAMES = [
907        "next_to_pink_hair_girl_wg_down",
908        "next_to_pink_hair_girl_wg_right",
909        "next_to_pink_hair_girl_wg_left",
910    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_pink_hair_girl_wg'

Name of the subgoal.

912class SpeakToRedHairGirlWGTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
913    REQUIRED_PARSER = BaseHarvestMoonStateParser
914    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
915    _TERMINATION_TARGET_NAME = "speaking_to_red_hair_girl_wg"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToRedHairGirlWGSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
917class NextToRedHairGirlWGSubgoal(AnyRegionMatchSubGoal):
918    NAME = "next_to_red_hair_girl_wg"
919    _NAMED_REGIONS = [
920        "item_red_hair_girl_wg_above",
921        "item_red_hair_girl_wg_left",
922        "item_red_hair_girl_wg_right",
923    ]
924    _TARGET_NAMES = [
925        "next_to_red_hair_girl_wg_down",
926        "next_to_red_hair_girl_wg_right",
927        "next_to_red_hair_girl_wg_left",
928    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_red_hair_girl_wg'

Name of the subgoal.

930class FillChickenFodderBlock1TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
931    REQUIRED_PARSER = BaseHarvestMoonStateParser
932
933    _TERMINATION_NAMED_REGION = "item_chicken_stall_block1"
934    _TERMINATION_TARGET_NAME = "filled_chicken_stall_block1"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToChickenFodderBlock1Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
936class NextToChickenFodderBlock1Subgoal(AnyRegionMatchSubGoal):
937    NAME = "next_to_chicken_stall_block1_with_fodder"
938    _NAMED_REGIONS = [
939        "item_next_to_chicken_stall_block1",
940    ]
941    _TARGET_NAMES = [
942        "next_to_chicken_stall_block1",
943    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_chicken_stall_block1_with_fodder'

Name of the subgoal.

class NextToChickenSiloSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
945class NextToChickenSiloSubgoal(AnyRegionMatchSubGoal):
946    NAME = "next_to_chicken_silo"
947    _NAMED_REGIONS = [
948        "item_chicken_silo_left",
949        "item_chicken_silo_below1",
950        "item_chicken_silo_below2",
951    ]
952    _TARGET_NAMES = [
953        "next_to_chicken_silo_right",
954        "next_to_chicken_silo_up1",
955        "next_to_chicken_silo_up2",
956    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_chicken_silo'

Name of the subgoal.

class PickupChickenFodderSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
958class PickupChickenFodderSubgoal(AnyRegionMatchSubGoal):
959    NAME = "picked_up_chicken_fodder_from_silo"
960    _NAMED_REGIONS = [
961        "item_chicken_silo_left",
962        "item_chicken_silo_below1",
963        "item_chicken_silo_below2",
964    ]
965    _TARGET_NAMES = [
966        "got_fodder_from_chicken_silo_right",
967        "got_fodder_from_chicken_silo_up1",
968        "got_fodder_from_chicken_silo_up2",
969    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'picked_up_chicken_fodder_from_silo'

Name of the subgoal.

class NextToCowFeedingStallSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
972class NextToCowFeedingStallSubgoal(AnyRegionMatchSubGoal):
973    NAME = "next_to_cow_feeding_stall_with_fodder"
974    _NAMED_REGIONS = [
975        "item_cow_feeding_stall_right",
976    ]
977    _TARGET_NAMES = [
978        "next_to_cow_feeding_stall_left",
979    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_cow_feeding_stall_with_fodder'

Name of the subgoal.

981class FillUpperRightCowStallTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
982    REQUIRED_PARSER = BaseHarvestMoonStateParser
983    _TERMINATION_NAMED_REGION = "item_cow_feeding_stall"
984    _TERMINATION_TARGET_NAME = "cow_feeding_stall_filled"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToChickenSilo2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
987class NextToChickenSilo2Subgoal(AnyRegionMatchSubGoal):
988    NAME = "next_to_chicken_silo"
989    _NAMED_REGIONS = [
990        "item_chicken_silo_left1",
991        "item_chicken_silo_left2",
992        "item_chicken_silo_below",
993    ]
994    _TARGET_NAMES = [
995        "next_to_chicken_silo_right1",
996        "next_to_chicken_silo_right2",
997        "next_to_chicken_silo_up",
998    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_chicken_silo'

Name of the subgoal.

class PickupChickenFodder2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1000class PickupChickenFodder2Subgoal(AnyRegionMatchSubGoal):
1001    NAME = "picked_up_chicken_fodder_from_silo"
1002    _NAMED_REGIONS = [
1003        "item_chicken_silo_left1",
1004        "item_chicken_silo_left2",
1005        "item_chicken_silo_below",
1006    ]
1007    _TARGET_NAMES = [
1008        "got_fodder_from_chicken_silo_right1",
1009        "got_fodder_from_chicken_silo_right2",
1010        "got_fodder_from_chicken_silo_up",
1011    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'picked_up_chicken_fodder_from_silo'

Name of the subgoal.

1014class HospitalEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1015    REQUIRED_PARSER = BaseHarvestMoonStateParser
1016    _TERMINATION_NAMED_REGION = "screen_top_half"
1017    _TERMINATION_TARGET_NAME = "in_hospital"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideHospitalSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1019class OutsideHospitalSubgoal(AnyRegionMatchSubGoal):
1020    NAME = "outside_hospital"
1021    _NAMED_REGIONS = [
1022        "hospital_location",
1023        "hospital_location",
1024        "hospital_location",
1025    ]
1026    _TARGET_NAMES = [
1027        "outside_hospital_up",
1028        "outside_hospital_left",
1029        "outside_hospital_right",
1030    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_hospital'

Name of the subgoal.

1032class ToolShopEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1033    REQUIRED_PARSER = BaseHarvestMoonStateParser
1034    _TERMINATION_NAMED_REGION = "screen_top_half"
1035    _TERMINATION_TARGET_NAME = "in_tool_shop"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideToolShop2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1037class OutsideToolShop2Subgoal(AnyRegionMatchSubGoal):
1038    NAME = "outside_tool_shop"
1039    _NAMED_REGIONS = [
1040        "tool_shop_location",
1041        "tool_shop_location",
1042        "tool_shop_location",
1043    ]
1044    _TARGET_NAMES = [
1045        "outside_tool_shop_up",
1046        "outside_tool_shop_left",
1047        "outside_tool_shop_right",
1048    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_tool_shop'

Name of the subgoal.

1050class CarpenterEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1051    REQUIRED_PARSER = BaseHarvestMoonStateParser
1052    _TERMINATION_NAMED_REGION = "screen_top_half"
1053    _TERMINATION_TARGET_NAME = "in_carpenter"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideCarpenter2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1055class OutsideCarpenter2Subgoal(AnyRegionMatchSubGoal):
1056    NAME = "outside_carpenter"
1057    _NAMED_REGIONS = [
1058        "carpenter_location",
1059        "carpenter_location",
1060        "carpenter_location",
1061    ]
1062    _TARGET_NAMES = [
1063        "outside_carpenter_up",
1064        "outside_carpenter_left",
1065        "outside_carpenter_right",
1066    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_carpenter'

Name of the subgoal.

1068class AnimalShopEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1069    REQUIRED_PARSER = BaseHarvestMoonStateParser
1070    _TERMINATION_NAMED_REGION = "screen_top_half"
1071    _TERMINATION_TARGET_NAME = "in_animal_shop"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideAnimalShop2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1073class OutsideAnimalShop2Subgoal(AnyRegionMatchSubGoal):
1074    NAME = "outside_animal_shop"
1075    _NAMED_REGIONS = [
1076        "animal_shop_location",
1077        "animal_shop_location",
1078        "animal_shop_location",
1079    ]
1080    _TARGET_NAMES = [
1081        "outside_animal_shop_up",
1082        "outside_animal_shop_left",
1083        "outside_animal_shop_right",
1084    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_animal_shop'

Name of the subgoal.

1086class LibraryEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1087    REQUIRED_PARSER = BaseHarvestMoonStateParser
1088    _TERMINATION_NAMED_REGION = "screen_top_half"
1089    _TERMINATION_TARGET_NAME = "in_library"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideLibrarySubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1091class OutsideLibrarySubgoal(AnyRegionMatchSubGoal):
1092    NAME = "outside_library"
1093    _NAMED_REGIONS = [
1094        "library_location",
1095        "library_location",
1096        "library_location",
1097    ]
1098    _TARGET_NAMES = [
1099        "outside_library_up",
1100        "outside_library_left",
1101        "outside_library_right",
1102    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_library'

Name of the subgoal.

1104class FlowerShopEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1105    REQUIRED_PARSER = BaseHarvestMoonStateParser
1106
1107    _TERMINATION_NAMED_REGION = "screen_top_half"
1108    _TERMINATION_TARGET_NAME = "in_flower_shop"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideFlowerShop2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1110class OutsideFlowerShop2Subgoal(AnyRegionMatchSubGoal):
1111    NAME = "outside_flower_shop"
1112    _NAMED_REGIONS = [
1113        "flower_shop_location",
1114        "flower_shop_location",
1115        "flower_shop_location",
1116    ]
1117    _TARGET_NAMES = [
1118        "outside_flower_shop_up",
1119        "outside_flower_shop_left",
1120        "outside_flower_shop_right",
1121    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_flower_shop'

Name of the subgoal.

class SelectBridgeSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1124class SelectBridgeSubgoal(AnyRegionMatchSubGoal):
1125    NAME = "selected_bridge"
1126    _NAMED_REGIONS = ["dialogue_box_bottom"]
1127    _TARGET_NAMES = ["select_bridge"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_bridge'

Name of the subgoal.

1129class GetBridgeEstimateTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1130    REQUIRED_PARSER = BaseHarvestMoonStateParser
1131    _TERMINATION_NAMED_REGION = "screen_bottom_half"
1132    _TERMINATION_TARGET_NAME = "bridge_estimate"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

1135class RestaurantEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1136    REQUIRED_PARSER = BaseHarvestMoonStateParser
1137
1138    _TERMINATION_NAMED_REGION = "screen_top_half"
1139    _TERMINATION_TARGET_NAME = "in_restaurant"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class OutsideRestaurant2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1141class OutsideRestaurant2Subgoal(AnyRegionMatchSubGoal):
1142    NAME = "outside_restaurant"
1143    _NAMED_REGIONS = [
1144        "restaurant_location",
1145        "restaurant_location",
1146        "restaurant_location",
1147    ]
1148    _TARGET_NAMES = [
1149        "outside_restaurant_up",
1150        "outside_restaurant_left",
1151        "outside_restaurant_right",
1152    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_restaurant'

Name of the subgoal.

1154class BuyLunchSetTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1155    REQUIRED_PARSER = BaseHarvestMoonStateParser
1156
1157    _TERMINATION_NAMED_REGION = "screen_bottom_half"
1158    _TERMINATION_TARGET_NAME = "bought_lunch_set"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectLunchSetSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1160class SelectLunchSetSubgoal(AnyRegionMatchSubGoal):
1161    NAME = "selected_lunch_set"
1162    _NAMED_REGIONS = [
1163        "screen_bottom_half",
1164    ]
1165    _TARGET_NAMES = [
1166        "select_lunch_set",
1167    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_lunch_set'

Name of the subgoal.

class BuyLunchSetOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1169class BuyLunchSetOptionSubgoal(AnyRegionMatchSubGoal):
1170    NAME = "buy_lunch_set_option"
1171    _NAMED_REGIONS = [
1172        "screen_bottom_half",
1173    ]
1174    _TARGET_NAMES = [
1175        "option_to_buy_lunch_set",
1176    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'buy_lunch_set_option'

Name of the subgoal.

1178class BuyBeverageSetTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1179    REQUIRED_PARSER = BaseHarvestMoonStateParser
1180
1181    _TERMINATION_NAMED_REGION = "screen_bottom_half"
1182    _TERMINATION_TARGET_NAME = "bought_beverage_set"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectBeverageSetSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1184class SelectBeverageSetSubgoal(AnyRegionMatchSubGoal):
1185    NAME = "selected_beverage_set"
1186    _NAMED_REGIONS = [
1187        "screen_bottom_half",
1188    ]
1189    _TARGET_NAMES = [
1190        "select_beverage_set",
1191    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_beverage_set'

Name of the subgoal.

class BuyBeverageSetOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1193class BuyBeverageSetOptionSubgoal(AnyRegionMatchSubGoal):
1194    NAME = "buy_beverage_set_option"
1195    _NAMED_REGIONS = [
1196        "screen_bottom_half",
1197    ]
1198    _TARGET_NAMES = [
1199        "option_to_buy_beverage_set",
1200    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'buy_beverage_set_option'

Name of the subgoal.

1202class BuyTodaysSpecialTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1203    REQUIRED_PARSER = BaseHarvestMoonStateParser
1204
1205    _TERMINATION_NAMED_REGION = "screen_bottom_half"
1206    _TERMINATION_TARGET_NAME = "bought_todays_special"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectTodaysSpecialSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1208class SelectTodaysSpecialSubgoal(AnyRegionMatchSubGoal):
1209    NAME = "selected_todays_special"
1210    _NAMED_REGIONS = [
1211        "screen_bottom_half",
1212    ]
1213    _TARGET_NAMES = [
1214        "select_todays_special",
1215    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_todays_special'

Name of the subgoal.

class BuyTodaysSpecialOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1217class BuyTodaysSpecialOptionSubgoal(AnyRegionMatchSubGoal):
1218    NAME = "buy_todays_special_option"
1219    _NAMED_REGIONS = [
1220        "screen_bottom_half",
1221    ]
1222    _TARGET_NAMES = [
1223        "option_to_buy_todays_special",
1224    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'buy_todays_special_option'

Name of the subgoal.

1227class ReadNoticeBoardTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1228    REQUIRED_PARSER = BaseHarvestMoonStateParser
1229
1230    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1231    _TERMINATION_TARGET_NAME = "reading_notice_board"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToNoticeBoardSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1233class NextToNoticeBoardSubgoal(AnyRegionMatchSubGoal):
1234    NAME = "next_to_notice_board"
1235    _NAMED_REGIONS = [
1236        "item_notice_board_above",
1237        "item_notice_board_left",
1238        "item_notice_board_right",
1239    ]
1240    _TARGET_NAMES = [
1241        "next_to_notice_board_down",
1242        "next_to_notice_board_right",
1243        "next_to_notice_board_left",
1244    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_notice_board'

Name of the subgoal.

1246class ReadVillageSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1247    REQUIRED_PARSER = BaseHarvestMoonStateParser
1248
1249    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1250    _TERMINATION_TARGET_NAME = "reading_village_sign"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToVillageSignSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1252class NextToVillageSignSubgoal(AnyRegionMatchSubGoal):
1253    NAME = "next_to_village_sign"
1254    _NAMED_REGIONS = [
1255        "item_village_sign_above",
1256        "item_village_sign_left",
1257        "item_village_sign_right",
1258    ]
1259    _TARGET_NAMES = [
1260        "next_to_village_sign_down",
1261        "next_to_village_sign_right",
1262        "next_to_village_sign_left",
1263    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_village_sign'

Name of the subgoal.

1265class ReadFarmSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1266    REQUIRED_PARSER = BaseHarvestMoonStateParser
1267
1268    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1269    _TERMINATION_TARGET_NAME = "reading_farm_sign"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToFarmSignSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1271class NextToFarmSignSubgoal(AnyRegionMatchSubGoal):
1272    NAME = "next_to_farm_sign"
1273    _NAMED_REGIONS = [
1274        "item_farm_sign_above",
1275        "item_farm_sign_left",
1276        "item_farm_sign_right",
1277    ]
1278    _TARGET_NAMES = [
1279        "next_to_farm_sign_down",
1280        "next_to_farm_sign_right",
1281        "next_to_farm_sign_left",
1282    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_farm_sign'

Name of the subgoal.

1284class ReadSecretGardenSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1285    REQUIRED_PARSER = BaseHarvestMoonStateParser
1286
1287    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1288    _TERMINATION_TARGET_NAME = "reading_secret_garden_sign"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToSecretGardenSignSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1290class NextToSecretGardenSignSubgoal(AnyRegionMatchSubGoal):
1291    NAME = "next_to_secret_garden_sign"
1292    _NAMED_REGIONS = [
1293        "item_secret_garden_sign_above",
1294        "item_secret_garden_sign_right",
1295        "item_secret_garden_sign_left",
1296    ]
1297    _TARGET_NAMES = [
1298        "next_to_secret_garden_sign_down",
1299        "next_to_secret_garden_sign_left",
1300        "next_to_secret_garden_sign_right",
1301    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_secret_garden_sign'

Name of the subgoal.

1303class ReadCropFieldSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1304    REQUIRED_PARSER = BaseHarvestMoonStateParser
1305
1306    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1307    _TERMINATION_TARGET_NAME = "reading_crop_field_sign"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToCropFieldSignSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1309class NextToCropFieldSignSubgoal(AnyRegionMatchSubGoal):
1310    NAME = "next_to_crop_field_sign"
1311    _NAMED_REGIONS = [
1312        "item_crop_field_sign_above",
1313    ]
1314    _TARGET_NAMES = [
1315        "next_to_crop_field_sign_down",
1316    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_crop_field_sign'

Name of the subgoal.

class NextToDiarySubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1318class NextToDiarySubgoal(AnyRegionMatchSubGoal):
1319    NAME = "next_to_diary"
1320    _NAMED_REGIONS = [
1321        "item_diary",
1322    ]
1323    _TARGET_NAMES = [
1324        "next_to_diary",
1325    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_diary'

Name of the subgoal.

class DiaryOptionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1327class DiaryOptionSubgoal(AnyRegionMatchSubGoal):
1328    NAME = "diary_sleep_option"
1329    _NAMED_REGIONS = [
1330        "dialogue_box_bottom",
1331    ]
1332    _TARGET_NAMES = [
1333        "option_to_diary_sleep",
1334    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'diary_sleep_option'

Name of the subgoal.

1337class OpenMenuTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1338    REQUIRED_PARSER = BaseHarvestMoonStateParser
1339
1340    _TERMINATION_NAMED_REGION = "screen"
1341    _TERMINATION_TARGET_NAME = "menu_open"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class EmptyHandsSelectedSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1344class EmptyHandsSelectedSubgoal(AnyRegionMatchSubGoal):
1345    NAME = "empty_hands_selected"
1346    _NAMED_REGIONS = ["equipment_region_4"]
1347    _TARGET_NAMES = ["empty_hands_selected"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'empty_hands_selected'

Name of the subgoal.

class ReadyToPickSickleSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1349class ReadyToPickSickleSubgoal(AnyRegionMatchSubGoal):
1350    NAME = "ready_to_pick_sickle"
1351    _NAMED_REGIONS = ["top_left_label"]
1352    _TARGET_NAMES = ["ready_to_pick_sickle"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'ready_to_pick_sickle'

Name of the subgoal.

1354class EquipSickleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1355    REQUIRED_PARSER = BaseHarvestMoonStateParser
1356    _TERMINATION_NAMED_REGION = "equipment_region_4"
1357    _TERMINATION_TARGET_NAME = "sickle_equipped"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class ReadyToPickHammerSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1359class ReadyToPickHammerSubgoal(AnyRegionMatchSubGoal):
1360    NAME = "ready_to_pick_hammer"
1361    _NAMED_REGIONS = ["top_left_label"]
1362    _TARGET_NAMES = ["ready_to_pick_hammer"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'ready_to_pick_hammer'

Name of the subgoal.

1364class EquipHammerTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1365    REQUIRED_PARSER = BaseHarvestMoonStateParser
1366    _TERMINATION_NAMED_REGION = "equipment_region_4"
1367    _TERMINATION_TARGET_NAME = "hammer_equipped"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class ReadyToPickFishingRodSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1369class ReadyToPickFishingRodSubgoal(AnyRegionMatchSubGoal):
1370    NAME = "ready_to_pick_fishing_rod"
1371    _NAMED_REGIONS = ["top_left_label"]
1372    _TARGET_NAMES = ["ready_to_pick_fishing_rod"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'ready_to_pick_fishing_rod'

Name of the subgoal.

1374class EquipFishingRodTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1375    REQUIRED_PARSER = BaseHarvestMoonStateParser
1376    _TERMINATION_NAMED_REGION = "equipment_region_4"
1377    _TERMINATION_TARGET_NAME = "fishing_rod_equipped"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class AxeSelected2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1379class AxeSelected2Subgoal(AnyRegionMatchSubGoal):
1380    NAME = "axe_selected_2"
1381    _NAMED_REGIONS = ["equipment_region_2"]
1382    _TARGET_NAMES = ["ax_selected_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'axe_selected_2'

Name of the subgoal.

class ReadyToPickNetSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1384class ReadyToPickNetSubgoal(AnyRegionMatchSubGoal):
1385    NAME = "ready_to_pick_net"
1386    _NAMED_REGIONS = ["top_left_label"]
1387    _TARGET_NAMES = ["ready_to_pick_net"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'ready_to_pick_net'

Name of the subgoal.

1389class EquipNetReplacingAxTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1390    REQUIRED_PARSER = BaseHarvestMoonStateParser
1391    _TERMINATION_NAMED_REGION = "equipment_region_2"
1392    _TERMINATION_TARGET_NAME = "net_equipped"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class ReadyToPickRosemarySeedsSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1394class ReadyToPickRosemarySeedsSubgoal(AnyRegionMatchSubGoal):
1395    NAME = "ready_to_pick_rosemary_seeds"
1396    _NAMED_REGIONS = ["top_left_label"]
1397    _TARGET_NAMES = ["ready_to_pick_rosemary_seeds"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'ready_to_pick_rosemary_seeds'

Name of the subgoal.

1399class EquipRosemarySeedsReplacingAxTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1400    REQUIRED_PARSER = BaseHarvestMoonStateParser
1401    _TERMINATION_NAMED_REGION = "equipment_region_2"
1402    _TERMINATION_TARGET_NAME = "rosemary_seeds_equipped"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SprinklerSelected1Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1404class SprinklerSelected1Subgoal(AnyRegionMatchSubGoal):
1405    NAME = "sprinkler_selected_1"
1406    _NAMED_REGIONS = ["equipment_region_1"]
1407    _TARGET_NAMES = ["sprinkler_selected_1"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'sprinkler_selected_1'

Name of the subgoal.

1409class EquipSickleReplacingSprinklerTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1410    REQUIRED_PARSER = BaseHarvestMoonStateParser
1411    _TERMINATION_NAMED_REGION = "equipment_region_1"
1412    _TERMINATION_TARGET_NAME = "sickle_equipped_1"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class HoeSelected3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1414class HoeSelected3Subgoal(AnyRegionMatchSubGoal):
1415    NAME = "hoe_selected_3"
1416    _NAMED_REGIONS = ["equipment_region_3"]
1417    _TARGET_NAMES = ["hoe_selected_3"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'hoe_selected_3'

Name of the subgoal.

1419class EquipNetReplacingHoeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1420    REQUIRED_PARSER = BaseHarvestMoonStateParser
1421    _TERMINATION_NAMED_REGION = "equipment_region_3"
1422    _TERMINATION_TARGET_NAME = "net_equipped_3"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToEggSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1425class NextToEggSubgoal(AnyRegionMatchSubGoal):
1426    NAME = "next_to_egg"
1427    _NAMED_REGIONS = ["item_egg_left", "item_egg_above", "item_egg_right"]
1428    _TARGET_NAMES = ["next_to_egg_right", "next_to_egg_down", "next_to_egg_left"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_egg'

Name of the subgoal.

1431class HatchEggTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1432    REQUIRED_PARSER = BaseHarvestMoonStateParser
1433    _TERMINATION_NAMED_REGION = "item_hatching_box"
1434    _TERMINATION_TARGET_NAME = "dropped_egg_into_hatching_box"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToRockFromLeftSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1437class NextToRockFromLeftSubgoal(AnyRegionMatchSubGoal):
1438    NAME = "next_to_rock_from_left"
1439    _NAMED_REGIONS = ["item_rock_left"]
1440    _TARGET_NAMES = ["next_to_rock_right"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_rock_from_left'

Name of the subgoal.

1442class BreakRockTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1443    REQUIRED_PARSER = BaseHarvestMoonStateParser
1444    _TERMINATION_NAMED_REGION = "item_rock_left"
1445    _TERMINATION_TARGET_NAME = "rock_cleared"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToRightmostRockAboveSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1447class NextToRightmostRockAboveSubgoal(AnyRegionMatchSubGoal):
1448    NAME = "next_to_rightmost_rock_above"
1449    _NAMED_REGIONS = ["item_rightmost_rock_above"]
1450    _TARGET_NAMES = ["next_to_rightmost_rock_down"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_rightmost_rock_above'

Name of the subgoal.

1452class BreakRightmostRockTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1453    REQUIRED_PARSER = BaseHarvestMoonStateParser
1454    _TERMINATION_NAMED_REGION = "item_rightmost_rock_above"
1455    _TERMINATION_TARGET_NAME = "rightmost_rock_cleared"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToTopLeftWeedFromRightSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1458class NextToTopLeftWeedFromRightSubgoal(AnyRegionMatchSubGoal):
1459    NAME = "next_to_top_left_weed"
1460    _NAMED_REGIONS = ["item_top_left_weed"]
1461    _TARGET_NAMES = ["next_to_top_left_weed_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_top_left_weed'

Name of the subgoal.

1463class RemoveTopLeftWeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1464    REQUIRED_PARSER = BaseHarvestMoonStateParser
1465    _TERMINATION_NAMED_REGION = "item_top_left_weed"
1466    _TERMINATION_TARGET_NAME = "top_left_weed_removed"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

1468class CutTopLeftWeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1469    REQUIRED_PARSER = BaseHarvestMoonStateParser
1470    _TERMINATION_NAMED_REGION = "item_top_left_weed"
1471    _TERMINATION_TARGET_NAME = "top_left_weed_cut"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToLowestWeedFromAboveSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1473class NextToLowestWeedFromAboveSubgoal(AnyRegionMatchSubGoal):
1474    NAME = "next_to_lowest_weed_from_above"
1475    _NAMED_REGIONS = ["item_weed_above"]
1476    _TARGET_NAMES = ["next_to_lowest_weed_down"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_lowest_weed_from_above'

Name of the subgoal.

1478class RemoveLowestWeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1479    REQUIRED_PARSER = BaseHarvestMoonStateParser
1480    _TERMINATION_NAMED_REGION = "item_weed_above"
1481    _TERMINATION_TARGET_NAME = "lowest_weed_removed"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

1483class CutLowestWeedTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1484    REQUIRED_PARSER = BaseHarvestMoonStateParser
1485    _TERMINATION_NAMED_REGION = "item_weed_above"
1486    _TERMINATION_TARGET_NAME = "lowest_weed_cut"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToGrasslandFromLeftSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1489class NextToGrasslandFromLeftSubgoal(AnyRegionMatchSubGoal):
1490    NAME = "next_to_grassland_right"
1491    _NAMED_REGIONS = ["item_grassland_right"]
1492    _TARGET_NAMES = ["next_to_grassland_left"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_grassland_right'

Name of the subgoal.

class HarvestCenterGrasslineTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1494class HarvestCenterGrasslineTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1495    _OR_PAIRS = [
1496        ("item_center_grassline", "center_grass_harvested_1"),
1497        ("item_center_grassline", "center_grass_harvested_2"),
1498    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class PickedUpBrokenFenceSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1501class PickedUpBrokenFenceSubgoal(AnyRegionMatchSubGoal):
1502    NAME = "picked_up_broken_fence"
1503    _NAMED_REGIONS = [
1504        "item_broken_fence_field",
1505        "item_broken_fence_field",
1506        "item_broken_fence_field",
1507        "item_broken_fence_field",
1508    ]
1509    _TARGET_NAMES = [
1510        "picked_up_broken_fence_up",
1511        "picked_up_broken_fence_down",
1512        "picked_up_broken_fence_left",
1513        "picked_up_broken_fence_right",
1514    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'picked_up_broken_fence'

Name of the subgoal.

1516class RestoreFenceTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1517    _OR_PAIRS = [
1518        ("item_fence_field", "restored_fence"),
1519    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterTurnipSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1522class NextToCenterTurnipSubgoal(AnyRegionMatchSubGoal):
1523    NAME = "next_to_center_turnip"
1524    _NAMED_REGIONS = ["item_turnip_field", "item_turnip_field"]
1525    _TARGET_NAMES = ["next_to_center_turnip_down_1", "next_to_center_turnip_down_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_turnip'

Name of the subgoal.

class HarvestCenterTurnipTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1527class HarvestCenterTurnipTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1528    _OR_PAIRS = [
1529        ("item_turnip_field", "center_turnip_harvested_1"),
1530        ("item_turnip_field", "center_turnip_harvested_2"),
1531    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterTurnipLeftSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1533class NextToCenterTurnipLeftSubgoal(AnyRegionMatchSubGoal):
1534    NAME = "next_to_center_turnip_left"
1535    _NAMED_REGIONS = ["item_turnip_field_water", "item_turnip_field_water"]
1536    _TARGET_NAMES = ["next_to_center_turnip_left_1", "next_to_center_turnip_left_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_turnip_left'

Name of the subgoal.

class WaterCenterTurnipTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1538class WaterCenterTurnipTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1539    _OR_PAIRS = [
1540        ("item_turnip_field_water", "center_turnip_watered_1"),
1541        ("item_turnip_field_water", "center_turnip_watered_2"),
1542    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterEggplantSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1545class NextToCenterEggplantSubgoal(AnyRegionMatchSubGoal):
1546    NAME = "next_to_center_eggplant"
1547    _NAMED_REGIONS = ["item_eggplant_field", "item_eggplant_field"]
1548    _TARGET_NAMES = ["next_to_center_eggplant_up_1", "next_to_center_eggplant_up_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_eggplant'

Name of the subgoal.

class HarvestCenterEggplantTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1550class HarvestCenterEggplantTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1551    _OR_PAIRS = [
1552        ("item_eggplant_field", "center_eggplant_harvested_1"),
1553        ("item_eggplant_field", "center_eggplant_harvested_2"),
1554    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterPotatoSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1556class NextToCenterPotatoSubgoal(AnyRegionMatchSubGoal):
1557    NAME = "next_to_center_potato"
1558    _NAMED_REGIONS = ["item_potato_field", "item_potato_field"]
1559    _TARGET_NAMES = ["next_to_center_potato_up_1", "next_to_center_potato_up_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_potato'

Name of the subgoal.

class WaterCenterPotatoTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1561class WaterCenterPotatoTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1562    _OR_PAIRS = [
1563        ("item_potato_field", "center_potato_watered_1"),
1564        ("item_potato_field", "center_potato_watered_2"),
1565    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterPotatoBelowSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1567class NextToCenterPotatoBelowSubgoal(AnyRegionMatchSubGoal):
1568    NAME = "next_to_center_potato_below"
1569    _NAMED_REGIONS = ["item_potato_field", "item_potato_field"]
1570    _TARGET_NAMES = ["next_to_center_potato_below_up_1", "next_to_center_potato_below_up_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_potato_below'

Name of the subgoal.

class HarvestCenterPotatoTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1572class HarvestCenterPotatoTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1573    _OR_PAIRS = [
1574        ("item_potato_field", "center_potato_harvested_1"),
1575        ("item_potato_field", "center_potato_harvested_2"),
1576    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterAsparagusSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1578class NextToCenterAsparagusSubgoal(AnyRegionMatchSubGoal):
1579    NAME = "next_to_center_asparagus"
1580    _NAMED_REGIONS = ["item_asparagus_field", "item_asparagus_field"]
1581    _TARGET_NAMES = ["next_to_center_asparagus_right_1", "next_to_center_asparagus_right_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_asparagus'

Name of the subgoal.

class WaterCenterAsparagusTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1583class WaterCenterAsparagusTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1584    _OR_PAIRS = [
1585        ("item_asparagus_field", "center_asparagus_watered_1"),
1586        ("item_asparagus_field", "center_asparagus_watered_2"),
1587    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class AtCornCenterSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1590class AtCornCenterSubgoal(AnyRegionMatchSubGoal):
1591    NAME = "at_corn_center"
1592    _NAMED_REGIONS = ["item_corn_field", "item_corn_field"]
1593    _TARGET_NAMES = ["at_corn_center_1", "at_corn_center_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'at_corn_center'

Name of the subgoal.

1595class WaterCornFieldTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1596    _OR_PAIRS = [
1597        ("item_corn_field", "corn_field_watered_1"),
1598        ("item_corn_field", "corn_field_watered_2"),
1599    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class AtCabbageCenterSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1602class AtCabbageCenterSubgoal(AnyRegionMatchSubGoal):
1603    NAME = "at_cabbage_center"
1604    _NAMED_REGIONS = ["item_cabbage_field", "item_cabbage_field"]
1605    _TARGET_NAMES = ["at_cabbage_center_1", "at_cabbage_center_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'at_cabbage_center'

Name of the subgoal.

class WaterCabbageFieldTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1607class WaterCabbageFieldTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1608    _OR_PAIRS = [
1609        ("item_cabbage_field", "cabbage_field_watered_1"),
1610        ("item_cabbage_field", "cabbage_field_watered_2"),
1611    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterCornSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1614class NextToCenterCornSubgoal(AnyRegionMatchSubGoal):
1615    NAME = "next_to_center_corn"
1616    _NAMED_REGIONS = ["item_center_corn_above", "item_center_corn_above"]
1617    _TARGET_NAMES = ["next_to_center_corn_down_1", "next_to_center_corn_down_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_corn'

Name of the subgoal.

1619class CutCenterCornTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1620    _OR_PAIRS = [
1621        ("item_center_corn_above", "center_corn_cut_1"),
1622        ("item_center_corn_above", "center_corn_cut_2"),
1623    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterCarrotSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1625class NextToCenterCarrotSubgoal(AnyRegionMatchSubGoal):
1626    NAME = "next_to_center_carrot"
1627    _NAMED_REGIONS = ["item_carrot_field", "item_carrot_field"]
1628    _TARGET_NAMES = ["next_to_center_carrot_up_1", "next_to_center_carrot_up_2"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_carrot'

Name of the subgoal.

class HarvestCenterCarrotTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1630class HarvestCenterCarrotTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1631    _OR_PAIRS = [
1632        ("item_carrot_field", "center_carrot_harvested_1"),
1633        ("item_carrot_field", "center_carrot_harvested_2"),
1634    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToShippingBoxSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1637class NextToShippingBoxSubgoal(AnyRegionMatchSubGoal):
1638    NAME = "next_to_shipping_box"
1639    _NAMED_REGIONS = ["item_next_to_shipping_box"]
1640    _TARGET_NAMES = ["next_to_shipping_box_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_shipping_box'

Name of the subgoal.

1642class ShipEggplantTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1643    REQUIRED_PARSER = BaseHarvestMoonStateParser
1644    _TERMINATION_NAMED_REGION = "item_shipping_box_field"
1645    _TERMINATION_TARGET_NAME = "drop_eggplant_into_shipping_box"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class AtTheStartLineSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1648class AtTheStartLineSubgoal(AnyRegionMatchSubGoal):
1649    NAME = "at_the_start_line"
1650    _NAMED_REGIONS = ["item_start_line"]
1651    _TARGET_NAMES = ["at_the_start_line"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'at_the_start_line'

Name of the subgoal.

1653class Cross500mLineTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1654    REQUIRED_PARSER = BaseHarvestMoonStateParser
1655    _TERMINATION_NAMED_REGION = "item_distance_markers"
1656    _TERMINATION_TARGET_NAME = "crossed_500m_line"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

1658class Cross1000mLineTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1659    REQUIRED_PARSER = BaseHarvestMoonStateParser
1660    _TERMINATION_NAMED_REGION = "item_distance_markers"
1661    _TERMINATION_TARGET_NAME = "crossed_1000m_line"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class ComputersArticleSelectedSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1664class ComputersArticleSelectedSubgoal(AnyRegionMatchSubGoal):
1665    NAME = "computers_article_selected"
1666    _NAMED_REGIONS = ["dialogue_box_bottom"]
1667    _TARGET_NAMES = ["computers_article_selected"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'computers_article_selected'

Name of the subgoal.

1669class ReadComputersArticleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1670    REQUIRED_PARSER = BaseHarvestMoonStateParser
1671    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1672    _TERMINATION_TARGET_NAME = "reading_computers_article"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class BouldersArticleSelectedSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1674class BouldersArticleSelectedSubgoal(AnyRegionMatchSubGoal):
1675    NAME = "boulders_article_selected"
1676    _NAMED_REGIONS = ["dialogue_box_bottom"]
1677    _TARGET_NAMES = ["boulders_article_selected"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'boulders_article_selected'

Name of the subgoal.

1679class ReadBouldersArticleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1680    REQUIRED_PARSER = BaseHarvestMoonStateParser
1681    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1682    _TERMINATION_TARGET_NAME = "reading_boulders_article"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class CropsArticleSelectedSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1684class CropsArticleSelectedSubgoal(AnyRegionMatchSubGoal):
1685    NAME = "selling_crops_article_selected"
1686    _NAMED_REGIONS = ["dialogue_box_bottom"]
1687    _TARGET_NAMES = ["crops_article_selected"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selling_crops_article_selected'

Name of the subgoal.

1689class ReadCropsArticleTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1690    REQUIRED_PARSER = BaseHarvestMoonStateParser
1691    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1692    _TERMINATION_TARGET_NAME = "reading_crops_article"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToLeftmostWeedSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1695class NextToLeftmostWeedSubgoal(AnyRegionMatchSubGoal):
1696    NAME = "next_to_leftmost_weed"
1697    _NAMED_REGIONS = [
1698        "item_leftmost_weed_right",
1699        "item_leftmost_weed_above",
1700    ]
1701    _TARGET_NAMES = [
1702        "next_to_leftmost_weed_left",
1703        "next_to_leftmost_weed_down",
1704    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_leftmost_weed'

Name of the subgoal.

class RemoveLeftmostWeedTerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
1706class RemoveLeftmostWeedTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1707    _OR_PAIRS = [
1708        ("item_leftmost_weed_right", "leftmost_weed_removed_left"),
1709        ("item_leftmost_weed_above", "leftmost_weed_removed_down"),
1710    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToBerrySubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1713class NextToBerrySubgoal(AnyRegionMatchSubGoal):
1714    NAME = "next_to_berry"
1715    _NAMED_REGIONS = [
1716        "item_berry_left",
1717    ]
1718    _TARGET_NAMES = [
1719        "next_to_berry_right",
1720    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_berry'

Name of the subgoal.

1722class PickBerryTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1723    _OR_PAIRS = [
1724        ("item_berry_left", "berry_picked_right"),
1725    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToBerryAboveSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1727class NextToBerryAboveSubgoal(AnyRegionMatchSubGoal):
1728    NAME = "next_to_berry_above"
1729    _NAMED_REGIONS = [
1730        "item_berry_above",
1731        "item_berry_above",
1732    ]
1733    _TARGET_NAMES = [
1734        "next_to_berry_down_1",
1735        "next_to_berry_down_2",
1736    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_berry_above'

Name of the subgoal.

1738class PickBerryAboveTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1739    _OR_PAIRS = [
1740        ("item_berry_above", "berry_picked_above_1"),
1741        ("item_berry_above", "berry_picked_above_2"),
1742    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToBlueHairGirl2Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1745class NextToBlueHairGirl2Subgoal(AnyRegionMatchSubGoal):
1746    NAME = "next_to_blue_hair_girl"
1747    _NAMED_REGIONS = [
1748        "npc_blue_hair_girl_left",
1749        "npc_blue_hair_girl_below",
1750        "npc_blue_hair_girl_right",
1751    ]
1752    _TARGET_NAMES = [
1753        "next_to_blue_hair_girl_right",
1754        "next_to_blue_hair_girl_up",
1755        "next_to_blue_hair_girl_left",
1756    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_blue_hair_girl'

Name of the subgoal.

1758class SpeakToBlueHairGirl2TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1759    REQUIRED_PARSER = BaseHarvestMoonStateParser
1760    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1761    _TERMINATION_TARGET_NAME = "speaking_to_blue_hair_girl"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToPurpleHairGirlSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1763class NextToPurpleHairGirlSubgoal(AnyRegionMatchSubGoal):
1764    NAME = "next_to_purple_hair_girl"
1765    _NAMED_REGIONS = [
1766        "npc_purple_hair_girl_left",
1767        "npc_purple_hair_girl_below",
1768    ]
1769    _TARGET_NAMES = [
1770        "next_to_purple_hair_girl_right",
1771        "next_to_purple_hair_girl_up",
1772    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_purple_hair_girl'

Name of the subgoal.

1774class SpeakToPurpleHairGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1775    REQUIRED_PARSER = BaseHarvestMoonStateParser
1776    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1777    _TERMINATION_TARGET_NAME = "speaking_to_purple_hair_girl"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToBlondeGirlSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1779class NextToBlondeGirlSubgoal(AnyRegionMatchSubGoal):
1780    NAME = "next_to_blonde_girl"
1781    _NAMED_REGIONS = [
1782        "npc_blonde_girl_right",
1783        "npc_blonde_girl_above",
1784    ]
1785    _TARGET_NAMES = [
1786        "next_to_blonde_girl_left",
1787        "next_to_blonde_girl_down",
1788    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_blonde_girl'

Name of the subgoal.

1790class SpeakToBlondeGirlTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1791    REQUIRED_PARSER = BaseHarvestMoonStateParser
1792    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1793    _TERMINATION_TARGET_NAME = "speaking_to_blonde_girl"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class HarvestMoon2NextToHatchingBoxSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1796class HarvestMoon2NextToHatchingBoxSubgoal(AnyRegionMatchSubGoal):
1797    NAME = "next_to_hatching_box"
1798    _NAMED_REGIONS = ["item_next_to_hatching_box"]
1799    _TARGET_NAMES = ["next_to_hatching_box"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_hatching_box'

Name of the subgoal.

1801class HarvestMoon2HatchEggTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1802    REQUIRED_PARSER = BaseHarvestMoonStateParser
1803    _TERMINATION_NAMED_REGION = "item_hatching_box"
1804    _TERMINATION_TARGET_NAME = "dropped_egg_into_hatching_box"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToSecretGardenSign3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1807class NextToSecretGardenSign3Subgoal(AnyRegionMatchSubGoal):
1808    NAME = "next_to_secret_garden_sign"
1809    _NAMED_REGIONS = [
1810        "item_secret_garden_sign_above",
1811        "item_secret_garden_sign_right",
1812    ]
1813    _TARGET_NAMES = [
1814        "next_to_secret_garden_sign_down",
1815        "next_to_secret_garden_sign_left",
1816    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_secret_garden_sign'

Name of the subgoal.

1818class BuyPotatoSeeds3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1819    REQUIRED_PARSER = BaseHarvestMoonStateParser
1820
1821    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1822    _TERMINATION_TARGET_NAME = "select_potato_seeds"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToPotatoSeeds3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1824class NextToPotatoSeeds3Subgoal(AnyRegionMatchSubGoal):
1825    NAME = "next_to_potato_seeds"
1826    _NAMED_REGIONS = ["item_potato_seeds_above", "item_potato_seeds_below"]
1827    _TARGET_NAMES = ["next_to_potato_seeds_down", "next_to_potato_seeds_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_potato_seeds'

Name of the subgoal.

1829class ChooseTea3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1830    REQUIRED_PARSER = BaseHarvestMoonStateParser
1831
1832    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1833    _TERMINATION_TARGET_NAME = "select_tea"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToTea3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1835class NextToTea3Subgoal(AnyRegionMatchSubGoal):
1836    NAME = "next_to_tea"
1837    _NAMED_REGIONS = ["item_tea_above", "item_tea_below"]
1838    _TARGET_NAMES = ["next_to_tea_down", "next_to_tea_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_tea'

Name of the subgoal.

1840class ChooseAsparagusSeedsTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1841    REQUIRED_PARSER = BaseHarvestMoonStateParser
1842
1843    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1844    _TERMINATION_TARGET_NAME = "select_asparagus_seeds"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToAsparagusSeeds3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1846class NextToAsparagusSeeds3Subgoal(AnyRegionMatchSubGoal):
1847    NAME = "next_to_asparagus_seeds"
1848    _NAMED_REGIONS = ["item_asparagus_seeds_above", "item_asparagus_seeds_below"]
1849    _TARGET_NAMES = ["next_to_asparagus_seeds_down", "next_to_asparagus_seeds_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_asparagus_seeds'

Name of the subgoal.

class NextToTurnipSeeds3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1851class NextToTurnipSeeds3Subgoal(AnyRegionMatchSubGoal):
1852    NAME = "next_to_turnip_seeds"
1853    _NAMED_REGIONS = ["item_turnip_seeds_above", "item_turnip_seeds_below"]
1854    _TARGET_NAMES = ["next_to_turnip_seeds_down", "next_to_turnip_seeds_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_turnip_seeds'

Name of the subgoal.

1856class BuyTurnipSeeds3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1857    REQUIRED_PARSER = BaseHarvestMoonStateParser
1858
1859    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1860    _TERMINATION_TARGET_NAME = "select_turnip_seeds"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

1862class ReadMorningMarketSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1863    REQUIRED_PARSER = BaseHarvestMoonStateParser
1864
1865    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1866    _TERMINATION_TARGET_NAME = "reading_morning_market_sign"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToMorningMarketSignSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1868class NextToMorningMarketSignSubgoal(AnyRegionMatchSubGoal):
1869    NAME = "next_to_morning_market_sign"
1870    _NAMED_REGIONS = [
1871        "item_morning_market_sign_left",
1872    ]
1873    _TARGET_NAMES = [
1874        "next_to_morning_market_sign_right",
1875    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_morning_market_sign'

Name of the subgoal.

1877class ReadStorageSignTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1878    REQUIRED_PARSER = BaseHarvestMoonStateParser
1879
1880    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
1881    _TERMINATION_TARGET_NAME = "reading_storage_sign"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToStorageSign3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1883class NextToStorageSign3Subgoal(AnyRegionMatchSubGoal):
1884    NAME = "next_to_storage_sign"
1885    _NAMED_REGIONS = [
1886        "item_storage_sign_below",
1887        "item_storage_sign_left",
1888        "item_storage_sign_right",
1889    ]
1890    _TARGET_NAMES = [
1891        "next_to_storage_sign_up",
1892        "next_to_storage_sign_right",
1893        "next_to_storage_sign_left",
1894    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_storage_sign'

Name of the subgoal.

1896class SpeakToKirkVillageTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1897    REQUIRED_PARSER = BaseHarvestMoonStateParser
1898
1899    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1900    _TERMINATION_TARGET_NAME = "speaking_to_kirk_village"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToKirkVillageSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1902class NextToKirkVillageSubgoal(AnyRegionMatchSubGoal):
1903    NAME = "next_to_kirk_village"
1904    _NAMED_REGIONS = [
1905        "npc_kirk_above",
1906    ]
1907    _TARGET_NAMES = [
1908        "next_to_kirk_down",
1909    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_kirk_village'

Name of the subgoal.

1911class TakeFerryTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1912    REQUIRED_PARSER = BaseHarvestMoonStateParser
1913
1914    _TERMINATION_NAMED_REGION = "entrance"
1915    _TERMINATION_TARGET_NAME = "village_ferry_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToKirkMainlandSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1917class NextToKirkMainlandSubgoal(AnyRegionMatchSubGoal):
1918    NAME = "next_to_kirk_mainland"
1919    _NAMED_REGIONS = [
1920        "npc_kirk_mainland_right",
1921        "npc_kirk_mainland_below",
1922    ]
1923    _TARGET_NAMES = [
1924        "next_to_kirk_mainland_left",
1925        "next_to_kirk_mainland_up",
1926    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_kirk_mainland'

Name of the subgoal.

1928class SpeakToJoeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1929    REQUIRED_PARSER = BaseHarvestMoonStateParser
1930
1931    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1932    _TERMINATION_TARGET_NAME = "speaking_to_joe"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToJoeSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1934class NextToJoeSubgoal(AnyRegionMatchSubGoal):
1935    NAME = "next_to_joe"
1936    _NAMED_REGIONS = [
1937        "npc_joe_left",
1938    ]
1939    _TARGET_NAMES = [
1940        "next_to_joe_right",
1941    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_joe'

Name of the subgoal.

1943class SpeakToLukiaTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1944    REQUIRED_PARSER = BaseHarvestMoonStateParser
1945
1946    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1947    _TERMINATION_TARGET_NAME = "speaking_to_lukia"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToLukiaSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1949class NextToLukiaSubgoal(AnyRegionMatchSubGoal):
1950    NAME = "next_to_Lukia"
1951    _NAMED_REGIONS = [
1952        "npc_lukia_right",
1953    ]
1954    _TARGET_NAMES = [
1955        "next_to_lukia_left",
1956    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_Lukia'

Name of the subgoal.

1958class SpeakToLucusTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1959    REQUIRED_PARSER = BaseHarvestMoonStateParser
1960
1961    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1962    _TERMINATION_TARGET_NAME = "speaking_to_lucus"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToLucusSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1964class NextToLucusSubgoal(AnyRegionMatchSubGoal):
1965    NAME = "next_to_lucus"
1966    _NAMED_REGIONS = [
1967        "npc_lucus_above",
1968        "npc_lucus_left",
1969        "npc_lucus_right",
1970    ]
1971    _TARGET_NAMES = [
1972        "next_to_lucus_down",
1973        "next_to_lucus_right",
1974        "next_to_lucus_left",
1975    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_lucus'

Name of the subgoal.

1977class SpeakToLylaTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
1978    REQUIRED_PARSER = BaseHarvestMoonStateParser
1979
1980    _TERMINATION_NAMED_REGION = "dialogue_box_upper_border"
1981    _TERMINATION_TARGET_NAME = "speaking_to_lyla"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToLylaSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1983class NextToLylaSubgoal(AnyRegionMatchSubGoal):
1984    NAME = "next_to_lyla"
1985    _NAMED_REGIONS = [
1986        "npc_lyla_right",
1987    ]
1988    _TARGET_NAMES = [
1989        "next_to_lyla_left",
1990    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_lyla'

Name of the subgoal.

1992class BuyHorseSaddleTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
1993    REQUIRED_PARSER = BaseHarvestMoonStateParser
1994    _OR_PAIRS = [
1995        ("item_horse_saddle_empty_1", "bought_horse_saddle_1"),
1996        ("item_horse_saddle_empty_2", "bought_horse_saddle_2"),
1997    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToHorseSaddleSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
1999class NextToHorseSaddleSubgoal(AnyRegionMatchSubGoal):
2000    NAME = "next_to_horse_saddle"
2001    _NAMED_REGIONS = ["item_horse_saddle_above", "item_horse_saddle_below"]
2002    _TARGET_NAMES = ["next_to_horse_saddle_down", "next_to_horse_saddle_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_horse_saddle'

Name of the subgoal.

2004class BuyFlowerVaseTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2005    REQUIRED_PARSER = BaseHarvestMoonStateParser
2006    _OR_PAIRS = [
2007        ("item_flower_vase_empty_1", "bought_flower_vase_1"),
2008        ("item_flower_vase_empty_2", "bought_flower_vase_2"),
2009    ]
2010    _ALL_PAIRS = [
2011        ("dialogue_box_bottom", "bought_from_flower_shop"),
2012    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToVaseSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2014class NextToVaseSubgoal(AnyRegionMatchSubGoal):
2015    NAME = "next_to_vase"
2016    _NAMED_REGIONS = ["item_flower_vase_above", "item_flower_vase_below"]
2017    _TARGET_NAMES = ["next_to_vase_down", "next_to_vase_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_vase'

Name of the subgoal.

2019class BuyMealSetTerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2020    REQUIRED_PARSER = BaseHarvestMoonStateParser
2021    _OR_PAIRS = [
2022        ("item_meal_set_empty_1", "bought_meal_set_1"),
2023        ("item_meal_set_empty_2", "bought_meal_set_2"),
2024    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class SelectMealSetSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2026class SelectMealSetSubgoal(AnyRegionMatchSubGoal):
2027    NAME = "selected_meal_set"
2028    _NAMED_REGIONS = [
2029        "dialogue_box_bottom",
2030    ]
2031    _TARGET_NAMES = [
2032        "select_meal_set",
2033    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_meal_set'

Name of the subgoal.

2035class BuyCoffeeTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2036    REQUIRED_PARSER = BaseHarvestMoonStateParser
2037
2038    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
2039    _TERMINATION_TARGET_NAME = "select_coffee"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToCoffeeSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2041class NextToCoffeeSubgoal(AnyRegionMatchSubGoal):
2042    NAME = "next_to_coffee"
2043    _NAMED_REGIONS = [
2044        "item_coffee_above",
2045        "item_coffee_below",
2046    ]
2047    _TARGET_NAMES = [
2048        "next_to_coffee_down",
2049        "next_to_coffee_up",
2050    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_coffee'

Name of the subgoal.

class SelectCoffeeSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2052class SelectCoffeeSubgoal(AnyRegionMatchSubGoal):
2053    NAME = "selected_coffee"
2054    _NAMED_REGIONS = [
2055        "dialogue_box_bottom",
2056    ]
2057    _TARGET_NAMES = [
2058        "select_coffee",
2059    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_coffee'

Name of the subgoal.

class NextToWeed3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2061class NextToWeed3Subgoal(AnyRegionMatchSubGoal):
2062    NAME = "next_to_weed"
2063    _NAMED_REGIONS = ["item_weed_left"]
2064    _TARGET_NAMES = ["next_to_weed_right"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_weed'

Name of the subgoal.

2066class RemoveWeed3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2067    REQUIRED_PARSER = BaseHarvestMoonStateParser
2068    _TERMINATION_NAMED_REGION = "item_weed_left"
2069    _TERMINATION_TARGET_NAME = "weed_removed"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToCherrySubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2071class NextToCherrySubgoal(AnyRegionMatchSubGoal):
2072    NAME = "next_to_cherry"
2073    _NAMED_REGIONS = ["item_cherry_left"]
2074    _TARGET_NAMES = ["next_to_cherry_right"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_cherry'

Name of the subgoal.

2076class PickUpCherry3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2077    REQUIRED_PARSER = BaseHarvestMoonStateParser
2078    _TERMINATION_NAMED_REGION = "item_cherry_left"
2079    _TERMINATION_TARGET_NAME = "cherry_picked"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

2081class SpeakToKateTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2082    REQUIRED_PARSER = BaseHarvestMoonStateParser
2083    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
2084    _TERMINATION_TARGET_NAME = "speaking_to_kate"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToKateSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2086class NextToKateSubgoal(AnyRegionMatchSubGoal):
2087    NAME = "next_to_kate"
2088    _NAMED_REGIONS = [
2089        "npc_kate_left",
2090        "npc_kate_right",
2091        "npc_kate_below",
2092    ]
2093    _TARGET_NAMES = [
2094        "next_to_kate_right",
2095        "next_to_kate_left",
2096        "next_to_kate_up",
2097    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_kate'

Name of the subgoal.

class NextToCenterSPotatoSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2099class NextToCenterSPotatoSubgoal(AnyRegionMatchSubGoal):
2100    NAME = "next_to_center_spotato"
2101    _NAMED_REGIONS = ["item_center_spotato_above"]
2102    _TARGET_NAMES = ["next_to_spotato_down"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_spotato'

Name of the subgoal.

class WaterCenterSPotato3TerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
2104class WaterCenterSPotato3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2105    _OR_PAIRS = [
2106        ("item_center_spotato_above", "center_spotato_watered"),
2107    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterWatermelonSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2109class NextToCenterWatermelonSubgoal(AnyRegionMatchSubGoal):
2110    NAME = "next_to_center_watermelon"
2111    _NAMED_REGIONS = ["item_center_watermelon_above"]
2112    _TARGET_NAMES = ["next_to_center_watermelon_down"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_watermelon'

Name of the subgoal.

2114class WaterCenterWatermelon3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2115    REQUIRED_PARSER = BaseHarvestMoonStateParser
2116    _TERMINATION_NAMED_REGION = "item_center_watermelon_above"
2117    _TERMINATION_TARGET_NAME = "center_watermelon_watered"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToTargetPotatoBelowSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2119class NextToTargetPotatoBelowSubgoal(AnyRegionMatchSubGoal):
2120    NAME = "next_to_target_potato_below"
2121    _NAMED_REGIONS = ["item_target_potato_below"]
2122    _TARGET_NAMES = ["next_to_target_potato_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_target_potato_below'

Name of the subgoal.

class HarvestTargetPotato3TerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
2124class HarvestTargetPotato3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2125    _OR_PAIRS = [
2126        ("item_target_potato_below", "target_potato_harvested"),
2127    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToCenterEggplantTopSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2130class NextToCenterEggplantTopSubgoal(AnyRegionMatchSubGoal):
2131    NAME = "next_to_center_eggplant"
2132    _NAMED_REGIONS = ["item_center_eggplant_above", "item_center_eggplant_left"]
2133    _TARGET_NAMES = ["next_to_eggplant_down", "next_to_eggplant_right"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_eggplant'

Name of the subgoal.

class HarvestCenterEggplantTop3TerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
2135class HarvestCenterEggplantTop3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2136    _OR_PAIRS = [
2137        ("item_center_eggplant_above", "center_eggplant_harvested_down"),
2138        ("item_center_eggplant_left", "center_eggplant_harvested_right"),
2139    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToBookshelfSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2141class NextToBookshelfSubgoal(AnyRegionMatchSubGoal):
2142    NAME = "next_to_bookshelf"
2143    _NAMED_REGIONS = ["item_bookshelf_below"]
2144    _TARGET_NAMES = ["next_to_bookshelf_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_bookshelf'

Name of the subgoal.

2146class ReadAnimalCh2TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2147    REQUIRED_PARSER = BaseHarvestMoonStateParser
2148    _TERMINATION_NAMED_REGION = "dialogue_box_bottom"
2149    _TERMINATION_TARGET_NAME = "finish_animal_ch2"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToCenterTurnip3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2152class NextToCenterTurnip3Subgoal(AnyRegionMatchSubGoal):
2153    NAME = "next_to_center_turnip_below"
2154    _NAMED_REGIONS = ["item_center_turnip_below"]
2155    _TARGET_NAMES = ["next_to_center_turnip_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_center_turnip_below'

Name of the subgoal.

2157class HarvestCenterTurnip3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2158    REQUIRED_PARSER = BaseHarvestMoonStateParser
2159    _TERMINATION_NAMED_REGION = "item_center_turnip_below"
2160    _TERMINATION_TARGET_NAME = "center_turnip_harvested"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToSellChicken3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2162class NextToSellChicken3Subgoal(AnyRegionMatchSubGoal):
2163    NAME = "next_to_sell_chicken"
2164    _NAMED_REGIONS = ["item_sell_chicken_below", "item_sell_chicken_above"]
2165    _TARGET_NAMES = ["next_to_sell_chicken_up", "next_to_sell_chicken_down"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_sell_chicken'

Name of the subgoal.

2167class SellChicken3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2168    REQUIRED_PARSER = BaseHarvestMoonStateParser
2169    _OR_PAIRS = [
2170        ("sell_animal_section_1", "selling_animal_1"),
2171        ("sell_animal_section_2", "selling_animal_2"),
2172    ]
2173    _ALL_PAIRS = [
2174        ("dialogue_box_bottom", "animal_sold"),
2175    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToBerry3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2177class NextToBerry3Subgoal(AnyRegionMatchSubGoal):
2178    NAME = "next_to_berry_above"
2179    _NAMED_REGIONS = ["item_berry_above"]
2180    _TARGET_NAMES = ["next_to_berry_down"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_berry_above'

Name of the subgoal.

2182class PickBerry3TerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2183    REQUIRED_PARSER = BaseHarvestMoonStateParser
2184    _TERMINATION_NAMED_REGION = "item_berry_above"
2185    _TERMINATION_TARGET_NAME = "berry_picked_above"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class CheckPlayerMoneySubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2187class CheckPlayerMoneySubgoal(AnyRegionMatchSubGoal):
2188    NAME = "choose_may"
2189    _NAMED_REGIONS = ["menu_box"]
2190    _TARGET_NAMES = ["choose_may"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'choose_may'

Name of the subgoal.

2192class CheckPlayerMoneyTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2193    REQUIRED_PARSER = BaseHarvestMoonStateParser
2194    _TERMINATION_NAMED_REGION = "player_top_left"
2195    _TERMINATION_TARGET_NAME = "display_player_status"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class FillCowFodderBlock3TerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
2197class FillCowFodderBlock3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2198    REQUIRED_PARSER = BaseHarvestMoonStateParser
2199    _OR_PAIRS = [
2200        ("item_right_cow_stall_block", "filled_right_cow_stall_block"),
2201        ("item_cow_stall_block_2", "filled_cow_stall_block_right"),
2202    ]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToCowFodderBlock3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2204class NextToCowFodderBlock3Subgoal(AnyRegionMatchSubGoal):
2205    NAME = "next_to_rightmost_cow_fodder_block"
2206    _NAMED_REGIONS = ["item_right_cow_stall_block_below", "item_right_cow_stall_block_left"]
2207    _TARGET_NAMES = ["next_to_right_cow_stall_block_up", "next_to_right_cow_stall_block_right"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_rightmost_cow_fodder_block'

Name of the subgoal.

2209class FarmEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2210    REQUIRED_PARSER = BaseHarvestMoonStateParser
2211
2212    _TERMINATION_NAMED_REGION = "entrance"
2213    _TERMINATION_TARGET_NAME = "farm_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearFarmSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2215class NearFarmSubgoal(AnyRegionMatchSubGoal):
2216    NAME = "outside_farm"
2217    _NAMED_REGIONS = [
2218        "dialogue_box_bottom",
2219    ]
2220    _TARGET_NAMES = [
2221        "farm_label",
2222    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_farm'

Name of the subgoal.

2224class VillageEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2225    REQUIRED_PARSER = BaseHarvestMoonStateParser
2226    _TERMINATION_NAMED_REGION = "top_entrance"
2227    _TERMINATION_TARGET_NAME = "village_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearVillageSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2229class NearVillageSubgoal(AnyRegionMatchSubGoal):
2230    NAME = "outside_village"
2231    _NAMED_REGIONS = ["dialogue_box_bottom"]
2232    _TARGET_NAMES = ["village_label"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_village'

Name of the subgoal.

2234class GrasslandEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2235    REQUIRED_PARSER = BaseHarvestMoonStateParser
2236    _TERMINATION_NAMED_REGION = "entrance"
2237    _TERMINATION_TARGET_NAME = "grassland_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearGrasslandSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2239class NearGrasslandSubgoal(AnyRegionMatchSubGoal):
2240    NAME = "outside_grassland"
2241    _NAMED_REGIONS = ["dialogue_box_bottom"]
2242    _TARGET_NAMES = ["grassland_label"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_grassland'

Name of the subgoal.

2244class ForestEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2245    REQUIRED_PARSER = BaseHarvestMoonStateParser
2246    _TERMINATION_NAMED_REGION = "entrance"
2247    _TERMINATION_TARGET_NAME = "forest_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearForestSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2249class NearForestSubgoal(AnyRegionMatchSubGoal):
2250    NAME = "outside_forest"
2251    _NAMED_REGIONS = ["dialogue_box_bottom"]
2252    _TARGET_NAMES = ["forest_label"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_forest'

Name of the subgoal.

2254class CliffEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2255    REQUIRED_PARSER = BaseHarvestMoonStateParser
2256    _TERMINATION_NAMED_REGION = "entrance"
2257    _TERMINATION_TARGET_NAME = "cliff_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearCliffSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2259class NearCliffSubgoal(AnyRegionMatchSubGoal):
2260    NAME = "outside_cliff"
2261    _NAMED_REGIONS = ["dialogue_box_bottom"]
2262    _TARGET_NAMES = ["cliff_label"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_cliff'

Name of the subgoal.

2264class MountainEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2265    REQUIRED_PARSER = BaseHarvestMoonStateParser
2266    _TERMINATION_NAMED_REGION = "entrance"
2267    _TERMINATION_TARGET_NAME = "mountain_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearMountainSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2269class NearMountainSubgoal(AnyRegionMatchSubGoal):
2270    NAME = "outside_mountain"
2271    _NAMED_REGIONS = ["dialogue_box_bottom"]
2272    _TARGET_NAMES = ["mountain_label"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_mountain'

Name of the subgoal.

2274class ShoppingMallEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2275    REQUIRED_PARSER = BaseHarvestMoonStateParser
2276
2277    _TERMINATION_NAMED_REGION = "entrance"
2278    _TERMINATION_TARGET_NAME = "shopping_mall_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearShoppingMallSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2280class NearShoppingMallSubgoal(AnyRegionMatchSubGoal):
2281    NAME = "outside_shopping_mall"
2282    _NAMED_REGIONS = [
2283        "dialogue_box_bottom",
2284    ]
2285    _TARGET_NAMES = [
2286        "shopping_mall_label",
2287    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_shopping_mall'

Name of the subgoal.

2289class ShoppingMallSecondFloorTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2290    REQUIRED_PARSER = BaseHarvestMoonStateParser
2291    _TERMINATION_NAMED_REGION = "entrance"
2292    _TERMINATION_TARGET_NAME = "shopping_mall_second_floor"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToStairsSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2294class NextToStairsSubgoal(AnyRegionMatchSubGoal):
2295    NAME = "next_to_stairs"
2296    _NAMED_REGIONS = ["item_stairs", "item_stairs", "item_stairs"]
2297    _TARGET_NAMES = ["next_to_stairs_1", "next_to_stairs_2", "next_to_stairs_3"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_stairs'

Name of the subgoal.

2299class FarmersUnionEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2300    REQUIRED_PARSER = BaseHarvestMoonStateParser
2301
2302    _TERMINATION_NAMED_REGION = "entrance"
2303    _TERMINATION_TARGET_NAME = "farmers_union_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearFarmersUnionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2305class NearFarmersUnionSubgoal(AnyRegionMatchSubGoal):
2306    NAME = "outside_farmers_union"
2307    _NAMED_REGIONS = [
2308        "dialogue_box_bottom",
2309    ]
2310    _TARGET_NAMES = [
2311        "farmers_union_label",
2312    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_farmers_union'

Name of the subgoal.

2314class AquariumEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2315    REQUIRED_PARSER = BaseHarvestMoonStateParser
2316
2317    _TERMINATION_NAMED_REGION = "entrance"
2318    _TERMINATION_TARGET_NAME = "aquarium_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearAquariumSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2320class NearAquariumSubgoal(AnyRegionMatchSubGoal):
2321    NAME = "outside_aquarium"
2322    _NAMED_REGIONS = [
2323        "dialogue_box_bottom",
2324    ]
2325    _TARGET_NAMES = [
2326        "aquarium_label",
2327    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_aquarium'

Name of the subgoal.

2329class TheatreEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2330    REQUIRED_PARSER = BaseHarvestMoonStateParser
2331
2332    _TERMINATION_NAMED_REGION = "entrance"
2333    _TERMINATION_TARGET_NAME = "theatre_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearTheatreSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2335class NearTheatreSubgoal(AnyRegionMatchSubGoal):
2336    NAME = "outside_theatre"
2337    _NAMED_REGIONS = [
2338        "dialogue_box_bottom",
2339    ]
2340    _TARGET_NAMES = [
2341        "theatre_label",
2342    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_theatre'

Name of the subgoal.

2344class HotSpringEntranceTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2345    REQUIRED_PARSER = BaseHarvestMoonStateParser
2346
2347    _TERMINATION_NAMED_REGION = "entrance"
2348    _TERMINATION_TARGET_NAME = "hot_spring_entrance"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NearHotSpringSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2350class NearHotSpringSubgoal(AnyRegionMatchSubGoal):
2351    NAME = "outside_hot_spring"
2352    _NAMED_REGIONS = [
2353        "outside_hot_spring",
2354        "outside_hot_spring",
2355        "outside_hot_spring",
2356    ]
2357    _TARGET_NAMES = [
2358        "outside_hot_spring_left",
2359        "outside_hot_spring_right",
2360        "outside_hot_spring_up",
2361    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'outside_hot_spring'

Name of the subgoal.

class HarvestMoon3NextToHatchingBoxSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2364class HarvestMoon3NextToHatchingBoxSubgoal(AnyRegionMatchSubGoal):
2365    NAME = "next_to_hatching_box"
2366    _NAMED_REGIONS = ["item_next_to_hatching_box"]
2367    _TARGET_NAMES = ["next_to_hatching_box"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_hatching_box'

Name of the subgoal.

2369class HarvestMoon3HatchEggTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2370    REQUIRED_PARSER = BaseHarvestMoonStateParser
2371    _TERMINATION_NAMED_REGION = "item_hatching_box"
2372    _TERMINATION_TARGET_NAME = "dropped_egg_into_hatching_box"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToChickenSilo3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2375class NextToChickenSilo3Subgoal(AnyRegionMatchSubGoal):
2376    NAME = "next_to_chicken_silo"
2377    _NAMED_REGIONS = [
2378        "item_chicken_silo_left1",
2379        "item_chicken_silo_left2",
2380        "item_chicken_silo_above",
2381    ]
2382    _TARGET_NAMES = [
2383        "next_to_chicken_silo_right1",
2384        "next_to_chicken_silo_right2",
2385        "next_to_chicken_silo_down",
2386    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_chicken_silo'

Name of the subgoal.

class PickupChickenFodder3Subgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2388class PickupChickenFodder3Subgoal(AnyRegionMatchSubGoal):
2389    NAME = "picked_up_chicken_fodder_from_silo"
2390    _NAMED_REGIONS = [
2391        "item_chicken_silo_left1",
2392        "item_chicken_silo_left2",
2393        "item_chicken_silo_above",
2394    ]
2395    _TARGET_NAMES = [
2396        "got_fodder_from_chicken_silo_right1",
2397        "got_fodder_from_chicken_silo_right2",
2398        "got_fodder_from_chicken_silo_down",
2399    ]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'picked_up_chicken_fodder_from_silo'

Name of the subgoal.

class NextToTopmostChickenStallBlockSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2401class NextToTopmostChickenStallBlockSubgoal(AnyRegionMatchSubGoal):
2402    NAME = "next_to_topmost_chicken_stall_block_with_fodder"
2403    _NAMED_REGIONS = ["item_next_to_topmost_chicken_stall_block"]
2404    _TARGET_NAMES = ["next_to_topmost_chicken_stall_block"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_topmost_chicken_stall_block_with_fodder'

Name of the subgoal.

2406class FillTopmostChickenStallBlockTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2407    REQUIRED_PARSER = BaseHarvestMoonStateParser
2408    _TERMINATION_NAMED_REGION = "item_topmost_chicken_stall_block"
2409    _TERMINATION_TARGET_NAME = "filled_topmost_chicken_stall_block"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.

class NextToFodderSetSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2411class NextToFodderSetSubgoal(AnyRegionMatchSubGoal):
2412    NAME = "next_to_fodder_set"
2413    _NAMED_REGIONS = ["item_fodder_set_below"]
2414    _TARGET_NAMES = ["next_to_fodder_set_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_fodder_set'

Name of the subgoal.

class SelectedFodderSetSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2416class SelectedFodderSetSubgoal(AnyRegionMatchSubGoal):
2417    NAME = "selected_fodder_set"
2418    _NAMED_REGIONS = ["dialogue_box_bottom"]
2419    _TARGET_NAMES = ["selected_fodder_set"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_fodder_set'

Name of the subgoal.

2421class BuyFodderSet3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2422    _ALL_PAIRS = [("dialogue_box_bottom", "bought_from_farmers_union"), ("item_fodder_set", "picked_fodder_set")]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class NextToHorseMedicineSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2424class NextToHorseMedicineSubgoal(AnyRegionMatchSubGoal):
2425    NAME = "next_to_horse_medicine"
2426    _NAMED_REGIONS = ["item_horse_medicine_below"]
2427    _TARGET_NAMES = ["next_to_horse_medicine_up"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'next_to_horse_medicine'

Name of the subgoal.

class SelectedHorseMedicineSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2429class SelectedHorseMedicineSubgoal(AnyRegionMatchSubGoal):
2430    NAME = "selected_horse_medicine"
2431    _NAMED_REGIONS = ["dialogue_box_bottom"]
2432    _TARGET_NAMES = ["selected_horse_medicine"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_horse_medicine'

Name of the subgoal.

class BuyHorseMedicine3TerminateMetric(MultiRegionMatchTerminationMetric, gameboy_worlds.emulation.tracker.TerminationMetric):
2434class BuyHorseMedicine3TerminateMetric(MultiRegionMatchTerminationMetric, TerminationMetric):
2435    _ALL_PAIRS = [("dialogue_box_bottom", "bought_from_farmers_union"), ("item_horse_medicine", "picked_horse_medicine")]

Terminates when OR_PAIRS, ALL_PAIRS, and NOT_PAIRS conditions are all satisfied. OR_PAIRS: list of (region, target) — at least one must match. ALL_PAIRS: list of (region, target) — every one must match. NOT_PAIRS: list of (region, target) — none must match. Termination condition: (any OR_PAIR matches) AND (all ALL_PAIRS match) AND (no NOT_PAIR matches). Any list may be empty, in which case its condition is trivially satisfied.

class SelectHomeExpansionSubgoal(gameboy_worlds.emulation.tracker.AnyRegionMatchSubGoal):
2438class SelectHomeExpansionSubgoal(AnyRegionMatchSubGoal):
2439    NAME = "selected_home_expansion"
2440    _NAMED_REGIONS = ["dialogue_box_bottom"]
2441    _TARGET_NAMES = ["select_home_expansion"]

A subgoal that is completed if any of a list of specific regions matches their targets.

NAME = 'selected_home_expansion'

Name of the subgoal.

2443class GetHomeExpansionEstimateTerminateMetric(RegionMatchTerminationMetric, TerminationMetric):
2444    REQUIRED_PARSER = BaseHarvestMoonStateParser
2445    _TERMINATION_NAMED_REGION = "screen_bottom_half"
2446    _TERMINATION_TARGET_NAME = "home_expansion_estimate"

Terminates the episode if a specific region matches a target. Can be used to terminate episodes when specific dialogue boxes appear, etc.

The StateParser which implements the minimum required functionality for this MetricGroup to work.