예제 #1
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)
예제 #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)
예제 #3
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)
예제 #4
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)
예제 #5
0
class BreedListEntry(Model):
    SIZE = 28
    bHP = ByteField(0)
    bAtk = ByteField(1)
    bDef = ByteField(2)
    bDex = ByteField(3)
    bSAtk = ByteField(4)
    bSDef = ByteField(5)
    bType1 = ByteField(6)
    bType2 = ByteField(7)
    bCatchRatio = ByteField(8)
    bBaseExp = ByteField(9)
    wBattleBonuses = WordField(10)
    wDrop1 = WordField(12)
    wDrop2 = WordField(14)
    bFemaleRatio = ByteField(16)
    bHatchTime = ByteField(17)
    bInitIntimate = ByteField(18)
    bExpType = ByteField(19)
    bEggGroup1 = ByteField(20)
    bEggGroup2 = ByteField(21)
    bSpecialty1 = ByteField(22)
    bSpecialty2 = ByteField(23)
    bEscapeRatio = ByteField(24)
    # unk0 = ByteField(25)
    wReserved = WordField(26)
예제 #6
0
class Pilot(Model):
    SIZE = 0x20
    START = 0x020285F4

    # 我方 start: 0x020285F4, step: 0x20, length: 0x63
    pilot = WordField(0, label="人物")
    exp = WordField(2, label="经验")  # 决定等级 max:0xC000
    sp = WordField(4, label="精神点数")  # 03E7
    killed = WordField(6, label="击坠")  # 03E7
    skill_1 = ByteField(8, label="特技1")
    skill_2 = ByteField(9, label="特技2")
    skill_1_status = ByteField(10, label="特技1状态")
    skill_2_status = ByteField(11, label="特技2状态")
    enable = ByteField(12, label="状态开关")
    help_atk = ByteField(13, label="援攻")  # 09
    help_def = ByteField(14, label="援防")  # 09
    energy = ByteField(15, label="气力")  # 96
    # group = ByteField(16, label="敌我状态")  # 0: 我方(蓝), 1: 第三方(黄), 2: 不可控我方(蓝), 3: 敌方(红)
    points = ByteField(17, label="奖励点数")  # FF
    # 养成能力
    develop = ArrayField(18,
                         6,
                         ByteField(0),
                         label=(
                             '养成:格斗',
                             '养成:射击',
                             '养成:防御',
                             '养成:技量',
                             '养成:回避',
                             '养成:命中',
                         ))
    skill_chip = ArrayField(24, 4, ByteField(0), label="技能芯片")
예제 #7
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)
예제 #8
0
class Global(Model):
    hp = WordField(0x0201326E, label="HP")
    hpmax = WordField(0x02013272, label="最大HP")
    mp = WordField(0x02013270, label="MP")
    mpmax = WordField(0x02013274, label="最大MP")
    str = WordField(0x02013276, label="STR")
    con = WordField(0x02013278, label="CON")
    int = WordField(0x0201327A, label="INT")
    lck = WordField(0x0201327C, label="LCK")
    level = ByteField(0x201326D, label="等级")
    invincible1 = ToggleField(0x08020910,
                              enable=0,
                              disable=0x04008008,
                              label="不会扣血")
    enemy_static = ToggleField(0x020004BE,
                               size=2,
                               enable=0xFFFF,
                               disable=0,
                               label="敌人静止")
    invincible2 = ToggleField(0x02000502,
                              size=1,
                              enable=0xFF,
                              disable=0,
                              label="暂时无敌")
    monster_flag = ArrayField(0x02013394, 7, Field(0))
    skill_flag = ArrayField(0x02013386, 3, WordField(0))
    soul_flag = ArrayField(0x02013310, 31, Field(0))
    equip_counts = ArrayField(0x020132A8, 104, ByteField(0))
    tool_counts = ArrayField(0x02013288, 32, ByteField(0))
    enemy_flag = ArrayField(0x02013394, 12, Field(0))
    map_flag = ArrayField(0x020000AC, 0x145, WordField(0))
    extra_flag = Fields(ByteField(0x02000060), ByteField(0x02000F4D))
    boss_rush_flag = ByteField(0x020000A1)
예제 #9
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)  # 亲密度
예제 #10
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="模型")
예제 #11
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))  # 特殊炮弹
예제 #12
0
class Character(Model):
    health = WordField(0x1364, label="HP")
    health_max = WordField(0x1366, label="最大HP")
    coord = CoordField(0x30, label="坐标")
    # idle = Field(0x10E0)
    # target = Field(0x2DA4, label="目标")
    # ai = Field(0x2DA8, label="AI")
    # attack_reaction = Field(0x1358)
    # merce_kill_counter = Field(0x25BC)
    invincible = ToggleField(0x135C, label="无敌", enable=0, disable=1)
    items = ArrayField(0x21A8, 24, ModelField(0, IngameItem))
예제 #13
0
class Global(Model):
    tp = ByteField(0x020091CF, label="TP")
    favors = ArrayField(0x020091A0, 8, ByteField(0))  # 好感度
    member_num = ByteField(0x020069DC, label="队伍人数")
    members = ArrayField(0x020069DD, 5, ByteField(0), label="队员")
    item_num = ByteField(0x020091DD, label="道具数量")
    items = ArrayField(0x02006DBC, 16, ModelField(0, ItemSlot))
    kill_slot = WordField(0x020028E2, label="必杀槽")
    rage = WordField(0x020028EC, label="RAGE")
    battle_time = ByteField(0x020028F6, label="战斗时间")
    person_battles = ArrayField(0, 6, ModelField(0, PersonBattle))  # 战斗中人物信息
    event_items = ArrayField(0x02008170, 10, WordField(0))  # 事件道具
예제 #14
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)")
예제 #15
0
class Person(Model):
    SIZE = 0xA0

    hp_max = WordField(0x020069F8, label="HP上限")
    resist = WordField(0x020069FA, label="RESIST")
    str = ByteField(0x020069FC, label="STR")
    mgc = ByteField(0x020069FD, label="MGC")
    agl = ByteField(0x020069FE, label="AGL")
    vit = ByteField(0x020069FF, label="VIT")
    hp_heal = ByteField(0x02006A01, label="HP回复%")
    resistance = ArrayField(0x02006A02, 5, SignedField(0, size=1), label="抗性")
    adaptive = ByteField(0x02006A07, label="全抗性")
    skills = Field(0x02006A18, bytes, 0x48)
예제 #16
0
class Global(BaseGlobal):
    time = Field(0x02041C9C)
    money = Field(0x02000250)
    get_money = Field(0x0203059C)
    get_exp = Field(0x020305A0)
    battlein = WordField(0x02000498)

    # 城镇中坐标
    town_x = WordField(0x02030EC6)
    town_y = WordField(0x02030ECE)
    # 世界地图中坐标
    map_x = WordField(0x02030DB6)
    map_y = WordField(0x02030DAE)
예제 #17
0
class SavedItem(Model):
    """整理界面个人物品"""
    SIZE = 0x2C
    type = WordField(0x0, label="种类")
    quantity = Field(0x4, label="数量/武器弹药")
    max_quantity = Field(0x8, label="最大数量/武器弹药")
    fire_power = WordField(0x1C, label="火力升级")
    reload_speed = ByteField(0x1E, label="装弹速度升级")
    capacity = ByteField(0x1F, label="容量升级")
    critical = ByteField(0x21, label="爆头率升级")
    attack_range = ByteField(0x21, label="攻击范围升级")
    piercing = ByteField(0x22, label="贯穿伤害升级")
    scope = ByteField(0x24, label="瞄准镜升级")
    model = Field(0x28, label="模型")
예제 #18
0
class Character(Model):
    """角色"""
    id = Field((0x010C, 0x16), bytes, 6)
    health = WordField(0x0F10, label="生命值")
    health_max = WordField(0x0F12, label="生命值上限")
    invincible = ToggleField(0x0FC4, enable=0, disable=1, label="无敌")
    stamina = Field(0x3B00, float, label="体力")
    stamina_max = Field(0x3B04, float, label="体力上限")
    coord = CoordField(0x50, label="坐标")
    moving_speed = Field(0x54, float, label="移动速度")
    cur_item = ByteField(0x46D8)  # 当前使用的物品序号(只读)
    items = ArrayField(0x46E0, 24, ModelField(
        0, IngameItem))  # 水平武器: 0~6, 药丸: 7, 垂直武器: 8~12 其他物品: 15~23
    rapid_fire = Field(0x4F4C, float, label="快速开火")
    fix_weapon_switch = Field(0x46D0, float)  # 竖行武器切换至横行武器时的修正?
    is_wet = Field(0x2E34, label="是否湿了")
예제 #19
0
class BattleCard(Model):
    SIZE = 2
    _value = WordField(0)
    value = BitsField(0, 2, 0, 12)
    flag = BitsField(1, 1, 4, 4)  # 1: 在卡组1中, 2: 在卡组2中, 4: 在卡组3中

    def value_to_indexs(self):
        value = self.value
        if value < 430:
            return value // 10, value % 10
        return value - 430, 1

    def indexs_to_value(self, a, b):
        self.value = a * 10 + b if a < 43 else a + 430

    @property
    def card_type(self):
        return self.value_to_indexs()[0]

    @card_type.setter
    def card_type(self, type):
        _, value = self.value_to_indexs()
        self.indexs_to_value(type, value)

    @property
    def card_value(self):
        return self.value_to_indexs()[1]

    @card_value.setter
    def card_value(self, value):
        type, _ = self.value_to_indexs()
        self.indexs_to_value(type, value)
예제 #20
0
class Person(Model):
    punch = ByteField(0)
    foot = ByteField(1)
    arms = ByteField(2)
    defense = ByteField(3)
    strong = ByteField(7)
    attack = ByteField(4)
    agile = ByteField(5)
    jump = ByteField(6)
    stamina = ByteField(8)
    hp = ByteField(10)
    hpmax = ByteField(12)
    money = Field(64)
    items = ArrayField(68, 12, WordField(0))
    skills = ArrayField(92, 12, WordField(0))
    skillkeys = ArrayField(116, 12, WordField(0))
예제 #21
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)
예제 #22
0
class Chariot(Model):
    SIZE = 0x256

    # name = Field(0x021A1B8C, type=bytes, size=10)
    sp = WordField(0x21A1B9E, label="装甲")
    chassis = ModelField(0x021A1BA0, ChariotEquipInfo, label="底盘")
    equips = ArrayField(0x021A1BB4,
                        8,
                        ModelField(0, ChariotEquipInfo),
                        label="装备")  # C装置,引擎,引擎2,洞1~5
    items = ArrayField(0x021A1C54,
                       9,
                       ModelField(0, ChariotItemInfo),
                       label="道具")
    special_bullets = ArrayField(0x21A1DC6,
                                 15,
                                 ModelField(0, ItemInfo),
                                 label="特殊炮弹")

    exportable_fields = ('equips', 'items', 'special_bullets')

    def health(self):
        for equip in self.equips:
            equip.status = 0

    @classmethod
    def item_type(self, id):
        if 0x028F <= id < 0x02CC:
            return 'item'
        elif 0x02CC <= id < 0x0326:
            return 'engine'
        elif 0x0326 <= id < 0x034E:
            return 'control'
        elif 0x034E <= id < 0x04AE:
            return 'weapon'
예제 #23
0
class Global(Model):
    invincible = ByteField(0x0074)
    hp = ByteField(0x007A)
    lives = ByteField(0x007B)
    money = MulFieldPrep(10, WordField(0x007C))
    weapon = ByteField(0x0081)
    arrow = ByteField(0x0527)
예제 #24
0
class Chariot(PersonChariot):
    sp = WordField(0x64E8)
    items = ArrayField(0x65CF, 8, ByteField(0))
    equips = ArrayField(0x6627, 8, ModelField(0, ChariotEquip))
    weight = WordField(0x64D2)
    defense = WordField(0x64FE)
    bullet = ByteField(0x651F)
    special_bullets = ArrayField(0x03003DE1, 8, ByteField(0))  # 特殊炮弹
    special_bullets_count = ArrayField(0x03003E39, 8, ByteField(0))  # 特殊炮弹
    main_bullets_count = ByteField(0x6535)  # 主炮弹药
    se_bullets_count = ByteField(0x654B)  # SE弹药

    def set_index(self, i):
        super().set_index(i)
        field = self.field('equips')
        field.offset = field.origin_offset + i
        self.equips.offset = field.offset
예제 #25
0
class Global(Model):
    hp = ByteField(0x0202B62C, label="HP")
    hpmax = ByteField(0x0202B723, label="最大HP")
    limit_time = ByteField(0x02022CDC, label="生命")  # 限时关卡的时间
    lives = ByteField(0x0202A5D0, label="限时关卡的时间")
    invincible = ByteField(0x0202B634, label="无敌")
    money = WordField(0x0202B79E, label="水晶")
    level = ByteField(0x0202B718, label="等级")
    weapon_flag = ByteField(0x0202B728, label="武器")
    element_flag = ByteField(0x0202B729)
    weapon_level = Field(0x0202B734)
    weapon_level_1 = ByteField(0x0202B734, label="光弹枪等级")
    weapon_level_2 = ByteField(0x0202B735, label="光束刀等级")
    weapon_level_3 = ByteField(0x0202B736, label="三尖矛等级")
    weapon_level_4 = ByteField(0x0202B737, label="护盾回旋镖等级")
    fairy_flag = ArrayField(0x0202B744, 5, Field(0))
    fairy_use_count = ArrayField(0x0202B758, 5, WordField(0))
예제 #26
0
class Person(PersonChariot):
    # name = Field(0, bytes, 0xF)
    exp = Field(0x64C9, size=3)
    level = ByteField(0x647E)
    hp = WordField(0x6466)
    hpmax = WordField(0x6460)
    atk = WordField(0x646C)
    defense = WordField(0x6472)
    strength = ByteField(0x6481)
    intelli = ByteField(0x6484)
    stamina = ByteField(0x648A)
    speed = ByteField(0x6487)
    battle = ByteField(0x648d)
    fix = ByteField(0x6490)
    drive = ByteField(0x6493)
    equips = ArrayField(0x6496, 8, ByteField(0))
    items = ArrayField(0x64AE, 8, ByteField(0))
    equip_flag = ByteField(0x64C6)  # 第一个装备状态是最高位0x80
예제 #27
0
class Global(BaseGlobal):
    money = Field(0x0202AA50)
    turns = WordField(0x0202AA58)
    chapter = ByteField(0x0202AA56)
    person_addr = Field(0x02003114)
    curx = WordField(0x0202AA1C)
    cury = WordField(0x0202AA1E)
    persons = ArrayField(0x202AB78, 0xff, ModelField(0, Person))
    train_items = ArrayField(0x02039430, 100, ModelField(0, ItemSlot))  # 运输队
    # Hack code
    inf_move = ToggleFields(
        ToggleField(0x08017B80, size=2, enable=0x2000, disable=0x2002),
        ToggleField(0x08017EEA, size=2, enable=0x2100, disable=0x2102),
        ToggleField(0x0801B976, size=2, enable=0x2000, disable=0x2040),
        ToggleField(0x0802A0C8, size=2, enable=0x2000, disable=0x2040))  # 无限行动
    item_count_keep = ToggleField(0x08016940,
                                  size=2,
                                  enable=0x46C0,
                                  disable=0x1812)  # 武器耐久度不减
    proficiency_max = ToggleField(0x080256CC,
                                  size=2,
                                  enable=0x22FB,
                                  disable=0x1C02)  # 武器熟练度最大
    ability_up_1 = ToggleField(0x080250CC,
                               size=2,
                               enable=0x2001,
                               disable=0x1C20)  # 全能力成长1点
    ability_up_2 = ToggleField(0x080250CC,
                               size=2,
                               enable=0x2002,
                               disable=0x1C20)  # 全能力成长2点
    got_100exp = ToggleField(0x080258D0, size=2, enable=0x2464,
                             disable=0x1824)  # 战后升级
    # got_100exp = ToggleFields(
    #     ToggleField(0x080258BA, size=2, enable=0x2064, disable=0x2001),
    #     ToggleField(0x080258D0, size=2, enable=0x2464, disable=0x1824),
    #     ToggleField(0x08025994, size=2, enable=0x46C0, disable=0xDD00),
    #     ToggleField(0x080259C6, size=2, enable=0x2064, disable=0x200A)
    #     ToggleField(0x080259CC, size=2, enable=0x3064, disable=0x300A)
    # )
    support_quickly = ToggleField(0x08022B72,
                                  size=2,
                                  enable=0x7039,
                                  disable=0x7038)  # 好感度快速提升
예제 #28
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
예제 #29
0
class Person(Model):
    SIZE = 8

    # name = Field(0, bytes, 0xF)
    exp = Field(0x0, size=3, label="经验")
    level = ByteField(0x03003D69, label="等级")
    hp = WordField(0x03003D41, label="HP")
    hpmax = WordField(0x03003D43, label="HP上限")
    atk = WordField(0x03003D45, label="攻击")
    defense = WordField(0x03003D47, label="守备")
    power = ByteField(0x03003D6A, label="腕力")
    intelli = ByteField(0x03003D6B, label="知力")
    stamina = ByteField(0x03003D6C, label="体力")
    speed = ByteField(0x03003D6D, label="速度")
    battle = ByteField(0x03003D6E, label="战斗")
    drive = ByteField(0x03003D6F, label="驾驶")
    fix = ByteField(0x03003D70, label="修理")
    # 装备、道具代码0x80以上表示装备状态
    equips = ArrayField(0x03003D91, 8, BitsField(0, 1, 0, 7))
    items = ArrayField(0x03003DB9, 8, BitsField(0, 1, 0, 7))
예제 #30
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)