rabukasim / compiler /aliases.py
trioskosmos's picture
Upload folder using huggingface_hub
463f868 verified
# -*- coding: utf-8 -*-
"""Centralized aliases for the ability parser.
This module separates the parser helpers into three buckets:
1. True aliases: simple renames with no extra behavior.
2. Grammar conveniences: parser-only spellings and keyword shorthands.
3. Semantic special-cases: aliases that also inject or rewrite params.
"""
# Trigger type aliases: true renames only.
TRIGGER_ALIASES = {
"ON_YELL_REVEAL": "ON_REVEAL",
"ON_STAGE_ENTRY": "ON_PLAY",
"ON_SELF_TAPPED": "ON_MEMBER_TAP",
"ACTIVATED_FROM_DISCARD": "ACTIVATED",
"ON_PLACE_ENERGY_BY_EFFECT": "ON_POSITION_CHANGE",
"ON_RECOVERED_FROM_DISCARD": "ON_POSITION_CHANGE",
"ON_SET_TO_LIVE_PLAY": "ON_POSITION_CHANGE",
}
# Effect aliases: true renames only.
EFFECT_TRUE_ALIASES = {
"MOVE_TO_HAND": "ADD_TO_HAND",
"SELECT_LIVE_CARD": "SELECT_LIVE",
"POSITION_CHANGE": "MOVE_MEMBER",
"TRANSFORM_YELL_BLADES": "TRANSFORM_COLOR",
"LOOK_AND_CHOOSE_ORDER": "ORDER_DECK",
}
# Grammar conveniences for effect parsing.
EFFECT_GRAMMAR_CONVENIENCES = {
"SELECT_OPTION": "SELECT_MODE",
"CHOICE_MODE": "SELECT_MODE",
"HEART_SELECT": "COLOR_SELECT",
}
# Effect aliases that require extra params or semantic rewriting.
EFFECT_SEMANTIC_SPECIAL_CASES = {
"PLACE_ENERGY_WAIT": ("ENERGY_CHARGE", {"wait": True}),
"LOOK_AND_CHOOSE_REVEAL": ("LOOK_AND_CHOOSE", {"reveal": True}),
"REMOVE_SELF": ("MOVE_TO_DISCARD", {"target": "MEMBER_SELF"}),
"DISCARD_HAND": ("MOVE_TO_DISCARD", {"source": "HAND", "destination": "discard"}),
"RECOVER_LIVE": ("RECOVER_LIVE", {"source": "discard"}),
"RECOVER_MEMBER": ("RECOVER_MEMBER", {"source": "discard"}),
"SELECT_RECOVER_LIVE": ("RECOVER_LIVE", {"source": "discard"}),
"SELECT_RECOVER_MEMBER": ("RECOVER_MEMBER", {"source": "discard"}),
"DISCARD_UNTIL": ("MOVE_TO_DISCARD", {"operation": "UNTIL_SIZE"}),
"YELL_MULLIGAN": ("META_RULE", {"meta_type": "ACTION_YELL_MULLIGAN"}),
}
# Condition aliases: true renames only.
CONDITION_TRUE_ALIASES = {
"HAS_SUCCESS_LIVE": ("COUNT_SUCCESS_LIVE", {}),
"SUM_ENERGY": ("COUNT_ENERGY", {}),
"BATON_FROM_NAME": ("BATON", {}),
"MOVED_THIS_TURN": ("HAS_MOVED", {}),
"DECK_REFRESHED_THIS_TURN": ("DECK_REFRESHED", {}),
"BATON_TOUCH": ("BATON", {}),
"HAND_SIZE": ("COUNT_HAND", {}),
"BLADES": ("COUNT_BLADES", {}),
"ENERGY_COUNT": ("COUNT_ENERGY", {}),
"SCORE_TOTAL": ("SCORE_TOTAL_CHECK", {}),
"COUNT_MEMBER": ("COUNT_STAGE", {}),
"TOTAL_HEARTS": ("COUNT_HEARTS", {}),
"HEARTS_COUNT": ("COUNT_HEARTS", {}),
"MEMBER_AT_SLOT": ("GROUP_FILTER", {}),
"COUNT_DISCARDED_THIS_TURN": ("COUNT_DISCARD", {}),
"FILTER": ("GROUP_FILTER", {}),
"SUCCESS": ("MODAL_ANSWER", {}),
"SUCCESS_LIVE_COUNT": ("COUNT_SUCCESS_LIVE", {}),
"SCORE_GE": ("SCORE_TOTAL_CHECK", {"comparison": "GE"}),
"SCORE_LE": ("SCORE_TOTAL_CHECK", {"comparison": "LE"}),
"COUNT_CHARGED_ENERGY": ("COUNT_ENERGY", {}),
"SUM_HEARTS": ("COUNT_HEARTS", {}),
"ENERGY": ("COUNT_ENERGY", {}),
"SUCCESS_LIVE_SCORE_TOTAL": ("SCORE_TOTAL_CHECK", {}),
"NOT_DISCARDED_CARDS": ("DISCARDED_CARDS", {}),
}
# Condition aliases that need extra params or parser-specific rewrites.
CONDITION_SEMANTIC_SPECIAL_CASES = {
"ALL_MEMBERS": ("GROUP_FILTER", {"all": True}),
"COUNT_CARDS": ("GROUP_FILTER", {}),
"SELECT_YELL": ("GROUP_FILTER", {"zone": "yell"}),
"NAME_MATCH": ("GROUP_FILTER", {"filter": "NAME_MATCH"}),
"EXTRA_HEARTS": ("COUNT_HEARTS", {"min": 1}),
"HAS_ACTIVE_ENERGY": ("COUNT_ENERGY", {"filter": "active", "min": 1}),
"ALL_ENERGY_ACTIVE": ("COUNT_ENERGY", {"filter": "active", "comparison": "ALL"}),
"COST_LEAD": ("SCORE_COMPARE", {"type": "cost", "target": "opponent", "comparison": "GT"}),
"SCORE_LEAD": ("SCORE_COMPARE", {"type": "score", "comparison": "GT", "target": "opponent"}),
"TYPE_MEMBER": ("TYPE_CHECK", {"card_type": "member"}),
"TYPE_LIVE": ("TYPE_CHECK", {"card_type": "live"}),
"ENERGY_LAGGING": ("OPPONENT_ENERGY_DIFF", {"comparison": "GE", "diff": 1}),
"ENERGY_LEAD": ("OPPONENT_ENERGY_DIFF", {"comparison": "LE", "diff": 0}),
"SUM_SCORE": ("SCORE_COMPARE", {"type": "score", "comparison": "GE"}),
"SUM_COST": ("SCORE_COMPARE", {"type": "cost", "comparison": "GE"}),
"COST_LE_9": ("COST_CHECK", {"comparison": "LE", "value": 9}),
"SCORE_EQUAL_OPPONENT": ("SCORE_COMPARE", {"comparison": "EQ", "target": "opponent"}),
"SUCCESS_LIVE_COUNT_EQUAL_OPPONENT": ("SCORE_COMPARE", {"type": "score", "comparison": "EQ", "target": "opponent"}),
"YELL_CARDS": ("COUNT_CARDS", {"zone": "YELL"}),
"YELL_REVEALED": ("GROUP_FILTER", {"zone": "yell"}),
"ALL_CARDS_MATCH": ("DISCARDED_CARDS", {"all": True}),
"VALUE_GE": ("SUM_VALUE", {"comparison": "GE"}),
"VALUE_GT": ("SUM_VALUE", {"comparison": "GT"}),
"VALUE_EQ": ("SUM_VALUE", {"comparison": "EQ"}),
}
# Grammar conveniences: map to HAS_KEYWORD with a keyword param.
KEYWORD_CONDITIONS = {
"COUNT_PLAYED_THIS_TURN": "PLAYED_THIS_TURN",
"REVEALED_CONTAINS": "REVEALED_CONTAINS",
"ZONE": "ZONE_CHECK",
"AREA": "AREA_CHECK",
"EFFECT_NEGATED_THIS_TURN": "EFFECT_NEGATED",
"HIGHEST_COST_ON_STAGE": "HIGHEST_COST",
"COUNT_UNIQUE_NAMES": "UNIQUE_NAMES",
"OPPONENT_EXTRA_HEARTS": "OPPONENT_EXTRA_HEARTS",
"HAS_LIVE_SET": "HAS_LIVE_SET",
"SUCCESS_LIVES_CONTAINS": "SUCCESS_LIVES_CONTAINS",
"YELL_COUNT": "YELL_COUNT",
"COUNT_YELL_REVEALED": "YELL_COUNT",
}
# Grammar conveniences that should be ignored entirely.
IGNORED_CONDITIONS = {
"TARGET",
"ON_YELL",
"ON_YELL_SUCCESS",
}
# Maximum value for "ALL" selector.
MAX_SELECT_ALL = 99