Example #1
0
class Global(BaseGlobal):
    # chapter = ByteField(0x0202BCFA)
    # turns = WordField(0x0202BCFC)
    person_addr = Field(0x021BED30)
    curx = ByteField(0x02273BD4)  # 0x02272EA4
    cury = ByteField(0x02273BD5)  # 0x02272EA5
    # persons = ArrayField(0x202be48, 0xff, ModelField(0, Person))
    train_items = ArrayField(0x022C7420, 100, ModelField(0, ItemSlot))  # 运输队
    ourturn = ToggleField(0x021CC278, enable=0xE3A01001, disable=0xE5D01000)
    control_enemy = ToggleField(0x021D5674, enable=0xE1500000, disable=0xE1510000)
    upgrade_max = ToggleField(0x02050AC0, enable=0xB1A06004, disable=0xB2866001)
    upgrade_all = ToggleField(0x02050A98, enable=0xE1A00000, disable=0xAA000009)
    lv1_can_transfer = ToggleField(0x02049EE0, enable=0x00000001, disable=0xE350000A)
    can_train = ToggleField(0x021EBE08, enable=0xE3A00002, disable=0xEBF98E8F)
    can_visit = ToggleField(0x021ECB14, enable=0xE3A00002, disable=0xEBF98B4C)
    can_holddown = ToggleField(0x021EBBD8, enable=0xE3A00002, disable=0xEBF98F1B)
    use_enemy_prof = ToggleField(0x021D4CEC, enable=0xEA000022, disable=0x1A000022)
    infinite_refine = ToggleField(0x02069683, size=1, enable=0, disable=0xE3)
    item_consume = ToggleField(0x02051650, size=2, enable=0x0000, disable=0x0001)
    enemy_item_drop = ToggleField(0x021F8CE0, size=8, enable=0xE3500000E1D006B0, disable=0xE3100020E5D00063)
    exp_rate = Field(0x021F4DA8)
    pro_rate = Field(0x021F4F5C)
    config = ModelPtrField(0x021BD44C, Config, 4)
    # iteminfo_base = Field(0x0227A748)
    _iteminfos = ArrayField(0x022AA97C, 0xff, ModelField(0, ItemInfo))

    @property
    def _offset(self):
        return self.handler.read32(0x021BD44C) - 0x022BEAA0

    @property
    def iteminfos(self):
        self.field('_iteminfos').offset = self.handler.read32(0x0227A748 + self._offset)
        return self._iteminfos
Example #2
0
class RubySapphireJp(BaseGlobal):
    active_pokemon_count = Field(0x03004280)
    active_pokemon = ModelField(0x03004290, PokemonStructActives)
    stored_pokemon = Field(0x0202FDC0)
    _player_name = Field(0x02024C04, bytes, 10)
    _player_id = Field(0x02024C0E)
    xor_mask = 0
    money = MaskedField(Field(0x02025924))
    coin = MaskedField(WordField(0x02025928))
    dust = WordField(0x02026864)
    menu = Field(0x020267B4)
    decorate = Field(0x02027B34)
    badge = Field(0x020267B5)
    clock_adjustment = Field(0x02024C9C)
    per_day_random = Field(0x0202681C)
    spray_time = WordField(0x02026816)
    safari_balls = ByteField(0x02038504)
    safari_time = WordField(0x02038506)
    daycare_center_step_1 = ByteField(0x02028540)
    daycare_center_step_2 = ByteField(0x02028544)
    step_counter = ByteField(0x0202854A)
    exp_gain = SignedField(0x0202494C, size=2)

    _iemfield = PokemonItemField(0)
    item_normal = ArrayField(0x020259F4, 0x14, _iemfield)
    item_keyitem = ArrayField(0x02025A44, 0x14, _iemfield)
    item_pokeball = ArrayField(0x02025A94, 0x10, _iemfield)
    item_machine = ArrayField(0x02025AD4, 0x40, _iemfield)
    item_berry = ArrayField(0x02025BD4, 0x2E, _iemfield)
    item_pokeblock = ArrayField(0x02025C8C, 0x28, _iemfield)
Example #3
0
class EmeraldEn(PointerGlobal):
    NAME = "绿宝石(英文版)"

    active_pokemon_count = Field(0x020244E9)
    active_pokemon = ModelField(0x020244EC, PokemonStructActives)
    stored_pokemon = Field((0x03005D94, 4))
    safari_balls = ByteField(0x0203A9FC)
    safari_time = WordField(0x0203A076)
    exp_gain = SignedField(0x020241F0, size=2)

    store = ArrayField(0x02005274, 8, ModelField(0, StoreItem))
    area = WordField(0x020322E4)
    wild_pokemon = WordField(0x03007E28)
    furniture_purchase = ByteField(0x03005E3A)
    appearance = ByteField(0x02024A5C)

    Inner = EmeraldJp.Inner
    inner = ModelPtrField(0x03005D90, Inner)

    # rom
    breed_list = ArrayField(0x083203CC, 412, ModelField(0, BreedListEntry))
    deoxys_breed_abilities = Field(0x00329D48)
    # ^
    exp_list = ArrayField(0x0831F72C, 8, ArrayField(0, 0x65, Field(0)))
    item_list = Field(0x005839A0)
    skill_list = Field(0x0031C898)
Example #4
0
class Global(Model):
    bomb_count = ByteField(0x0082, label="炸弹数量")
    bomb_power = ByteField(0x0085, label="炸弹威力")
    lives = ByteField(0x04E5, label="生命")
    speed = ByteField(0x00A5, label="速度")
    invincible = ToggleField(0x04E6, size=1, enable=1, disable=0, label="无敌开启")
    invincible_time = ByteField(0x04E8, label="无敌时间")
    through_wall = ToggleField(0x009F, size=1, enable=1, disable=0, label="穿墙")
    through_bomb = ToggleField(0x00A0,
                               size=1,
                               enable=1,
                               disable=0,
                               label="穿炸弹")
    timebomb = ToggleField(0x00A1, size=1, enable=1, disable=0, label="定时炸弹")

    def time_getter(self, value, field):
        return ((value >> 16) & 0xFF) * 100 + (
            (value >> 8) & 0xFF) * 10 + (value & 0xFF)

    def time_setter(self, value, field):
        value = int(value)
        return ((value // 100 % 10) << 16) | (
            (value // 10 % 10) << 8) | (value % 10)

    time = FieldPrep(time_getter, time_setter, Field(0x0559, label="时间"))
Example #5
0
    class Inner(Model):
        _player_name = Field(0, bytes, 10)
        _player_id = Field(0x0A)
        xor_mask = Field(0x000000AC)
        money = MaskedField(Field(0x0000143C))
        coin = MaskedField(WordField(0x00001440))
        dust = WordField(0x000023D8)
        menu = Field(0x00002328)
        decorate = Field(0x000036E0)
        badge = Field(0x00002329)
        clock_adjustment = Field(0x00000098)
        per_day_random = Field(0x00002390)
        spray_time = WordField(0x0000238A)
        daycare_center_step_1 = ByteField(0x00004064)
        daycare_center_step_2 = ByteField(0x000040F0)
        step_counter = ByteField(0x000040F8)
        battle_points_current = WordField(0x00000EB8)
        battle_points_trainer_card = WordField(0x00000EBA)

        _iemfield = PokemonItemField(0)
        item_normal = ArrayField(0x0000150C, 0x1E, _iemfield)
        item_keyitem = ArrayField(0x00001584, 0x1E, _iemfield)
        item_pokeball = ArrayField(0x000015FC, 0x10, _iemfield)
        item_machine = ArrayField(0x0000163C, 0x40, _iemfield)
        item_berry = ArrayField(0x0000173C, 0x46, _iemfield)
        item_pokeblock = ArrayField(0x000017F4, 0x28, _iemfield)
Example #6
0
class ItemSlot(Model):
    """
    第1字节为物品种类,有几个物品会用到第二个字节 (|1)
    第二字节表示物品种类*8, |2 表示装备状态
    """

    SIZE = 2
    _item = WordField(0)
    _item1 = ByteField(0)
    _count = ByteField(1)
    value = WordField(0)

    @property
    def item(self):
        return self._item & 0b0000000111111111

    @item.setter
    def item(self, value):
        self._item = (self._item & 0b1111111000000000) | (int(value)
                                                          & 0b0000000111111111)

    @property
    def count(self):
        return ((self._count & 0b11111100) >> 3) + 1

    @count.setter
    def count(self, value):
        self._count = ((int(value) - 1) << 3) | (self._count & 0b11)
Example #7
0
class RubySapphireEn(BaseGlobal):
    active_pokemon_count = Field(0x03004350)
    active_pokemon = ModelField(0x03004360, PokemonStructActives)
    stored_pokemon = Field(0x020300A4)
    _player_name = Field(0x02024EA4, bytes, 10)
    _player_id = Field(0x02024EAE)
    xor_mask = 0
    money = MaskedField(Field(0x02025BC4))
    coin = MaskedField(WordField(0x02025BC8))
    dust = WordField(0x02026B04)
    menu = Field(0x02026A54)
    decorate = Field(0x02027DD4)
    badge = Field(0x02026A55)
    clock_adjustment = Field(0x02024F3C)
    per_day_random = Field(0x02026B0A)
    spray_time = WordField(0x02026AB6)
    safari_balls = ByteField(0x02038808)
    safari_time = WordField(0x0203880A)
    daycare_center_step_1 = ByteField(0x020287E0)
    daycare_center_step_2 = ByteField(0x020287E4)
    step_counter = ByteField(0x020287EA)
    exp_gain = SignedField(0x02024BEC, size=2)

    _iemfield = PokemonItemField(0)
    item_normal = ArrayField(0x02025C94, 0x14, _iemfield)
    item_keyitem = ArrayField(0x02025CE4, 0x14, _iemfield)
    item_pokeball = ArrayField(0x02025D34, 0x10, _iemfield)
    item_machine = ArrayField(0x02025D74, 0x40, _iemfield)
    item_berry = ArrayField(0x02025E74, 0x2E, _iemfield)
    item_pokeblock = ArrayField(0x02025F2C, 0x28, _iemfield)
Example #8
0
class Global(Model):
    invincible = ByteField(0x0074)
    hp = ByteField(0x007A)
    lives = ByteField(0x007B)
    money = MulFieldPrep(10, WordField(0x007C))
    weapon = ByteField(0x0081)
    arrow = ByteField(0x0527)
Example #9
0
class Global(Model):
    hp = ByteField(0x0085)
    hpmax = ByteField(0x0086)
    tools = Field(0x009C)
    dragon = ByteField(0x009A)
    dragons = ByteField(0x00D1)
    invincible = ByteField(0x0056)
Example #10
0
class Person(Model):
    SIZE = 0x70

    prof = ByteField(0x021A0BD8, label="职业")
    figure = ByteField(0x021A0BD9, label="形象")
    level = WordField(0x021A0BDC, label="等级")
    level_max = ByteField(0x021A0BDE, label="等级上限")
    exp = WordField(0x021A0BE0, label="经验")
    hp = WordField(0x021A0BE4, label="当前HP")
    hpmax = WordField(0x021A0BE6, label="最大HP")
    battle_level = WordField(0x021A0BEE, label="战斗等级")
    drive_level = WordField(0x021A0BF0, label="驾驶等级")
    power = WordField(0x021A0C26, label="腕力")
    strength = WordField(0x021A0BEA, label="体力")
    speed = WordField(0x021A0BEC, label="速度")
    spirit = ByteField(0x021A0BF4, label="男子气概")
    scar = WordField(0x021A0BF2, label="伤痕")
    weapon_1 = WordField(0x021A0BF6, label="武器1")
    weapon_2 = WordField(0x021A0BF8, label="武器2")
    weapon_3 = WordField(0x021A0BFA, label="武器3")
    equip_head = WordField(0x021A0BFC, label="头部装备")
    equip_body = WordField(0x021A0BFE, label="上身装备")
    equip_hand = WordField(0x021A0C00, label="手部装备")
    equip_foot = WordField(0x021A0C02, label="脚部装备")
    equip_orn = WordField(0x021A0C04, label="装饰")
    skills = ArrayField(0x021A0C06, 9, ModelField(0, ItemInfo))  # (技能, 次数)数组
    atk1 = WordField(0x021A0C20, label="武器1攻击力")
    atk2 = WordField(0x021A0C22, label="武器2攻击力")
    atk3 = WordField(0x021A0C24, label="武器3攻击力")
    defense = WordField(0x021A0C28, label="总防御力")
    resistance = ArrayField(0x021A0C30, 6,
                            MinuendFieldPrep(100, WordField(0)))  # 火光电声气冰
Example #11
0
class Global(Model):
    bomb_count = ByteField(0x0074, label="炸弹数量")
    bomb_power = ByteField(0x0073, label="炸弹威力")
    level = ByteField(0x0058, label="选关")
    invincible = ByteField(0x007A, label="无敌时间")
    through_bomb = ToggleField(0x0078, size=1, enable=1, disable=0, label="穿炸弹")
    timebomb = ToggleField(0x0077, size=1, enable=1, disable=0, label="定时炸弹")
    through_wall = ToggleField(0x0076, size=1, enable=1, disable=0, label="穿墙")
Example #12
0
class Global(Model):
    money = Field(0x02029750, label="金钱")
    turn = Field(0x02029760, label="回合")
    after_money = Field(0x020361D0, label="战后金钱")
    after_exp = Field(0x020361D4, label="战后经验")
    chapter = ByteField(0x02029776, label="关卡")
    intensified_parts = ArrayField(0x020297B0, 67, ByteField(0))  # 强化部件
    mini_games = ArrayField(0x020297F4, 51, ByteField(0))  # 小游戏
    skill_chip = ArrayField(0x02029786, 42, ByteField(0))  # 技能芯片
Example #13
0
class Marker(BaseBlip):
    SIZE = 56

    color = Field(0)
    blipType = Field(4)
    entity_handle = Field(8)
    coord = CoordField(24)
    index = WordField(36)
    bright = ByteField(38)
    active = ByteField(39)
    sprite = ByteField(52)
Example #14
0
class PokemonStructRear(Model):
    SIZE = 20
    bStatus = ByteField(0x00)
    bLevel = ByteField(0x04)
    wHPcur = WordField(0x06)
    wHPcap = WordField(0x08)
    wAtk = WordField(0x0A)
    wDef = WordField(0x0C)
    wDex = WordField(0x0E)
    wSAtk = WordField(0x10)
    wSDef = WordField(0x12)
Example #15
0
class PokemonStructHeader(Model):
    SIZE = 32
    bSex = ByteField(0x00)                              # @00, dwChar低8位表示性别
    dwChar = DWordField(0x00)                           # @00, 性格値
    dwID = DWordField(0x04)                             # @04, トレーナのID
    bNickName = Field(0x08, bytes, 10)                  # @08, ニックネーム
    bNickNameLanguage = ByteField(0x12)                 # @12, '01' = 6 bytes (jp), '02' = 10 bytes (en)
    bBadEgg = ByteField(0x13)                           # @12, '02' for daycare-center-enabled, '07' for ダメタマゴ
    bCatcherName = Field(0x14, bytes, 7)                # @14, トレーナの名前
    bMarkings = ByteField(0x1B)                         # @1B, only the lowest 4 bits are used
    wChecksum = WordField(0x1C)                         # @1C, Checksum
Example #16
0
class Marker(BaseBlip):
    SIZE = 48

    color = Field(0)
    blipType = Field(4)
    entity_handle = Field(8)
    coord = CoordField(20)
    index = WordField(3)
    bright = ByteField(34)
    active = ByteField(35)
    sprite = ByteField(44)
Example #17
0
class Chariot(Model):
    SIZE = 8

    sp = WordField(0x03003C78, label="装甲片")
    items = ArrayField(0x03003E91, 8, BitsField(0, 1, 0, 7))
    equips = ArrayField(0x03003EE9, 8, BitsField(0, 1, 0, 7))
    bullet = ByteField(0x0300404C, label="弹仓容量")
    defense = ByteField(0x0300404A, label="守备力")
    weight = WordField(0x0300404F, label="底盘重量")
    special_bullets = ArrayField(0x03003DE1, 8, ByteField(0))  # 特殊炮弹
    special_bullets_count = ArrayField(0x03003E39, 8, ByteField(0))  # 特殊炮弹
Example #18
0
class Global(Model):
    LifeField = FieldPrep(lambda ins, x, f: x - 1, lambda ins, x, f: int(x) + 1)
    hp_burns = LifeField(ByteField(0x00B3))
    hp_smish = LifeField(ByteField(0x00B4))
    hp_iron = LifeField(ByteField(0x00B5))
    hp_beans = LifeField(ByteField(0x00B6))
    invincible = ByteField(0x07C8)
    level = ByteField(0x0075)
    weapon_burns = ByteField(0x007F)
    weapon_smish = ByteField(0x0080)
    weapon_iron = ByteField(0x0081)
    weapon_beans = ByteField(0x0082)
Example #19
0
class ChariotEquipInfo(Model):
    SIZE = 0x14

    equip = WordField(0, label="种类")
    change = ByteField(5, label="超改次数")
    status = ByteField(6, label="损坏程度(>20:破损,>100:损坏)")
    ammo = ByteField(8, label="剩余弹药")
    star = ByteField(9, label="武器星级")
    defense = WordField(10, label="守备力")
    attr1 = WordField(12, label="C装置命中率/武器攻击力/引擎载重(0.01t)")
    attr2 = WordField(14, label="C装置回避率/武器弹舱容量")
    weight = WordField(18, label="重量(0.01t)")
Example #20
0
class Global(Model):
    lives = ByteField(0x018D, label="战机数量")
    money = ByteField(0x018E, label="金钱")
    bomb_count = ByteField(0x018F, label="炸弹数量")
    bomb_type = ByteField(0x0190, label="炸弹种类")
    armor = ToggleField(0x0032, size=1, enable=0xC0, disable=0, label="护甲")
    power = ByteField(0x0033, label="子弹威力")
    bullet_type = ByteField(0x0034, label="子弹种类")
    bomb_power = ByteField(0x003B, label="炸弹威力")
    invincible = ByteField(0x06A0, label="无敌时间")
    bomb_time = ByteField(0x06A1, label="炸弹持续时间")
    level = ByteField(0x0180, label="关卡序号")
Example #21
0
class Global(Model):
    lives_1 = ByteField(0x0076)
    lives_2 = ByteField(0x0076)
    medicine_1 = Fields(ByteField(0x0369), ByteField(0x0078))
    medicine_2 = Fields(ByteField(0x0369), ByteField(0x0079))
    invincible_1 = ByteField(0x03D2)
    invincible_2 = ByteField(0x03D2)
Example #22
0
class Global(Model):
    # 角色指针起始
    # 4.0.2: 9: 0x00914EC0-0x3F0*9
    # 5.x 9: 0x00930C80-0x3F0*9
    persons = ArrayField(0x0092E910, 0xff, ModelField(0, Person))
    turn = WordField(0x003AE34A)  # 回合数
    money1 = Field(0x003AE350)
    money2 = Field(0x003AE354)
    money3 = Field(0x003AE358)
    exp1 = Field(0x003AE35C, type=float)
    exp2 = Field(0x003AE360, type=float)
    exp3 = Field(0x003AE364, type=float)
    pedid = ByteField(0x003AC8FC)  # 当前人物编号
    curx = ByteField(0x003C88B1)  # 当前光标x坐标
    cury = ByteField(0x003C88B3)  # 当前光标y坐标
Example #23
0
class Global(Model):
    continues = ByteField(0x03001A84, label="续关")
    lives = ByteField(0x03002C60, label="生命")
    invincible = ToggleField(0x03002CA0,
                             size=1,
                             enable=0xFF,
                             disable=0,
                             label="无敌")
    score = Field(0x03002C64, label="分数")
    weapon = ByteField(0x3002CA8, label="武器种类")
    hit_anywhere = ToggleField(0x080179AC,
                               size=2,
                               enable=0xE014,
                               disable=0x72DC,
                               label="Hit Anywhere")
Example #24
0
class Person(Model):
    _locals = locals()

    for addr, name in PERSON_ATTRS:
        _locals[name] = ByteField(addr)

    del _locals
Example #25
0
class FireLeafJp(PointerGlobal):
    active_pokemon_count = 0
    active_pokemon = ModelField(0x020241E4, PokemonStructActives)
    stored_pokemon = Field((0x03005050, 4))
    dust = 0
    decorate = 0
    clock_adjustment = 0
    per_day_random = 0
    safari_balls = ByteField(0x0203990C)
    safari_time = WordField(0x0203990E)
    exp_gain = SignedField(0x02023CB0, size=2)

    class Inner(Model):
        _player_name = Field(0, bytes, 10)
        _player_id = Field(0x0A)
        xor_mask = Field(0x00000AF8)
        money = MaskedField(Field(0x00001234))
        coin = MaskedField(WordField(0x00001238))
        menu = Field(0x00001F89)
        badge = Field(0x00001F8A)
        spray_time = WordField(0x00001FE4)
        daycare_center_step_1 = ByteField(0x00003FAC)
        daycare_center_step_2 = ByteField(0x00004038)
        step_counter = ByteField(0x0000403E)

        _iemfield = PokemonItemField(0)
        item_normal = ArrayField(0x000012B4, 0x2A, _iemfield)
        item_keyitem = ArrayField(0x0000135C, 0x1E, _iemfield)
        item_pokeball = ArrayField(0x000013D4, 0x0D, _iemfield)
        item_machine = ArrayField(0x00001408, 0x3A, _iemfield)
        item_berry = ArrayField(0x000014F0, 0x2B, _iemfield)
        item_pokeblock = None

    inner = ModelPtrField(0x0300504C, Inner)
Example #26
0
class PokemonStructBreedInfo(Model):
    SIZE = 12
    wBreed = WordField(0x00)  # 种族ID
    wItem = WordField(0x02)  # 持有物
    dwExp = DWordField(0x04)
    bPointUp0, bPointUp1, bPointUp2, bPointUp3 = \
        BitsField.create(0x08, 1, (2, 2, 2, 2))
    bIntimate = ByteField(0x09)  # 亲密度
Example #27
0
class SkillHolder(Model):
    active_1 = ByteField(0x7AEB)
    active_2 = ByteField(0x7AEF)
    active_3 = ByteField(0x7B01)
    active_4 = ByteField(0x7B03)

    have_1 = ByteField(0x7C65)
    have_2 = ByteField(0x7C67)
    have_3 = ByteField(0x7C69)
    have_4 = ByteField(0x7C6B)
Example #28
0
class Unit(Model):
    type = ModelPtrField(8, UnitType)
    player = ModelPtrField(0xC, Player)
    hp = FloatField(0x30, label='HP')
    ptr_unknow1 = Field(0x18, label='不明指针')
    selected = ByteField(0x36, label='选中状态')
    resource = FloatField(0x44, label='资源')
    ptr_unknow2 = Field(0x6C, label='不明指针2')
    construction_progress = FloatField(0x1FC, label="建造进度")
Example #29
0
class IngameItem(Model):
    """游戏中个人物品"""
    SIZE = 0x1C
    enabled = ToggleField(4, size=1, enable=1, disable=0, label="激活")
    slot = ByteField(5, label="槽位")
    type = WordField(6, label="种类")
    quantity = WordField(0x0A, label="数量/武器弹药")
    double_quantity = WordField(0x0C, label="双枪弹药")
    max_quantity = WordField(0x10, label="最大数量/武器弹药")
    model = Field(0x18, label="模型")
Example #30
0
    class Inner(Model):
        _player_name = Field(0, bytes, 10)
        _player_id = Field(0x0A)
        xor_mask = Field(0x00000AF8)
        money = MaskedField(Field(0x00001234))
        coin = MaskedField(WordField(0x00001238))
        menu = Field(0x00001F89)
        badge = Field(0x00001F8A)
        spray_time = WordField(0x00001FE4)
        daycare_center_step_1 = ByteField(0x00003FAC)
        daycare_center_step_2 = ByteField(0x00004038)
        step_counter = ByteField(0x0000403E)

        _iemfield = PokemonItemField(0)
        item_normal = ArrayField(0x000012B4, 0x2A, _iemfield)
        item_keyitem = ArrayField(0x0000135C, 0x1E, _iemfield)
        item_pokeball = ArrayField(0x000013D4, 0x0D, _iemfield)
        item_machine = ArrayField(0x00001408, 0x3A, _iemfield)
        item_berry = ArrayField(0x000014F0, 0x2B, _iemfield)
        item_pokeblock = None