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="时间"))
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)
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="穿墙")
class Global(Model): hp = ByteField(0x0597) star = ByteField(0x0598) # 音波等形态次数 lives = ByteField(0x0599) credits = ByteField(0x07BB) # 无限Credits, 02 invincible = ToggleField(0x05F9, size=1, enable=0xFF, disable=0) invincible2 = ToggleField(0x05FB, size=1, enable=0x44, disable=0) form = ByteField(0x05E0) ability = ByteField(0x05E3)
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")
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) # 好感度快速提升
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="模型")
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))
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="关卡序号")
class Global(Model): hp = ByteField(0x02002AEA, label="生命") # A0 hpmax = ByteField(0x02002AEB, label="生命上限") # A0 rupees = WordField(0x02002B00, label="宝石") # 03E7 rupeesmax = ByteField(0x02002AE8, label="宝石上限") # 03 scrolls_flag = WordField(0x02002B44, label="卷轴") # FFFF skills_flag = WordField(0x0300402C, label="剑技") # FFFF bomb = ByteField(0x02002AEC, label="炸弹数") # 63 array = ByteField(0x02002AED, label="弓箭数") # 63 conch = WordField(0x02002B02, label="海螺数") # 03E7 keys = ArrayField(0x02002E9D, 16, ByteField(0)) # 钥匙数 help_tool = ArrayField(0x02002EAD, 16, ByteField(0)) # 迷宫辅助道具 weapon_a = ByteField(0x02002AF4, label="A键武器") weapon_b = ByteField(0x02002AF5, label="B键武器") items_flag = Field(0x02002B32, size=8, label="物品") bodysize = ByteField(0x03003FB0, label="身体大小") all_scrolls = ToggleField(scrolls_flag.offset, enable=0xFFFF, label="全卷轴") all_skills = ToggleField(skills_flag.offset, enable=0xFFFF, label="全剑技") all_map = ToggleField(0x02002A80, enable=0x1FFFF, label="地图全开") guide_falg = Field(0x02002B0E, bytes, 20, label="全图鉴")
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="是否湿了")
class Global(Model): hp = WordField(0x02039B52, label="HP") hpmax = WordField(0x02039C18, label="总HP") cpmax = WordField(0x02039C1A, label="总CP") exp = WordField(0x02039C20, label="EXP") mp = WordField(0x02039C94, label="M点数") dark = WordField(0x02039C1C, label="Dark点数") atk = WordField(0x02039C1E, label="攻击力") battle_hp = WordField(0x0203314C, label="战斗HP") battle_hpmax = WordField(0x0203314E, label="战斗总HP") # 全特技 # 02039CBC:FFFFFFFF # 02039CD0:FFFFFFFF # 02039CD4:FFFFFFFF skills = Field(0x02039C2C, bytes, 0x1C) map_cards = ArrayField(0x0203A830, 0x104, Field(0)) battle_cards = ArrayField(0x02039FF0, 0x232, ModelField(0, BattleCard)) event_book = Field(0x02039C54, bytes, 0x40) riku_enable = ToggleField(0x02039B28, enable=0x20, disable=0, label="利库篇开启")
class WeaponAmmo(Value): """弹药""" regen_rate = FloatField(0x84, label='回复速度') status = Field(0x108, label='切换') # Normal: 5, Infinite: 6 infinite = ToggleField(0x108, enable=6, disable=5, label='不减')
class Global(BaseGlobal): persons = ArrayField(0, 15, ModelField(0, Person)) chariots = ArrayField(0, 12, ModelField(0, Chariot)) chariot_battle_status = ArrayField(0, 4, ModelField(0, ChariotBattleStatus)) money = Field(0x0219F768, label="金钱") difficulty = ByteField(0x0219483D, label="难易度") # TODO stamp = WordField(0x0219F7BE, label="印章") game_turn = ByteField(0x021AA3E4, label="通关次数") # TODO game_time = Field(0x022AC6FC, label="游戏时间") # allfax = ToggleField(0x0219E90B, size=6, enable=0xFFFFFFFFFFFF, label="传真全开") # TODO # allmap = ToggleFields() enemy_flash = ToggleFields(ToggleField(0x02087ADE, enable=0x2109, size=2, disable=0x7E81), ToggleField(0x02087DBA, enable=0x46C0, size=2, disable=0xDA40), label="敌人闪光") quick_switch = ToggleField(0x0202460C, enable=0x47702001, disable=0x47702000, label="画面切换高速化") quick_move = ToggleField(0x020C2A58, size=2, enable=0x2994, disable=0x14CD, label="高速移动") must_winning = ToggleField(0x020442F0, enable=0x2007E008, disable=0x2007DD08, label="贩卖机绝对会中奖") tool_count_keep = ToggleField(0x0207681E, enable=0x46C00049, disable=0x54420049, label="消费道具用后不减") weight_zero = ToggleFields(ToggleField(0x02076A30, enable=0x84C82000, disable=0x18248CC8), ToggleField(0x02076A50, enable=0x80022200, disable=0x18248800), label="装甲除底盘外重量为0") equip_limit_remove = ToggleFields(ToggleField(0x0207B9B2, size=2, enable=0x46C0, disable=0xD00A), ToggleField(0x02073AD0, size=2, enable=0x46C0, disable=0xD055), ToggleField(0x02073BA8, size=2, enable=0x46C0, disable=0xD003), ToggleField(0x02073C7E, size=2, enable=0x46C0, disable=0xD037), ToggleField(0x02073D16, size=2, enable=0x46C0, disable=0xD015), ToggleField(0x02073FD0, size=2, enable=0x46C0, disable=0xD005), ToggleField(0x0204E0EC, size=2, enable=0x46C0, disable=0xD030), label="装备限制解除") without_material = ToggleFields( ToggleField(0x02051CD0, enable=0xE0141884, disable=0x88681885), ToggleField(0x02051EC0, enable=0xE00AFCCF, disable=0x8868F90B), label="艺术家制作不需要素材", ) drop_item_three_star = ToggleField(0x020773B0, enable=0x46C02003, disable=0xFBB2F00F, label="敌人掉落的都是3星") no_battle = ToggleField(0x020BBE60, size=2, enable=0x46C0, disable=0x1C40, label="不遇敌") # 战后获得金钱倍数(2: 00C8, 4: 0190, 8: 0320, 16: 0640, 32: 0C80, 64: 1900, 128: 3200) after_money_rate = WordField(0x021A5CA8, label="战后获得金钱倍数") ammo_keep = ToggleField(0x0208FA1C, enable=0x46C0D302, disable=0x1E52D302, label="车辆弹药不减") through_wall = ToggleField(0x020BE4C4, size=2, enable=0x2000, disable=0x1C28, label="穿墙") # 回复道具 potions = ArrayField(0x0219F918, 27, ModelField(0, ItemInfo)) # 战斗道具 battle_items = ArrayField(0x0219F960, 46, ModelField(0, ItemInfo)) # 道具 humen_items = ArrayField(0x0219FC78, 222, ModelField(0, ItemInfo2)) # 装备 equips = ArrayField(0x0219FF6C, 373, ModelField(0, ItemInfo2)) # 敌人分布 enemy_case = ArrayField(0x021A5E58, 4, ModelField(0, EnemyCase)) # 敌人情况 enemys = ArrayField(0, 10, ModelField(0, Enemy)) reward = Field(0x21AB4FE, size=3, label="获得赏金") fame = WordField(0x021AB501, label="有名度") use_humen_weapon_1 = ToggleField(0x0208425C, enable=0xE0012801, disable=0xD12C2801, label="战车中能用人武器v1") use_humen_weapon_2 = ToggleField(0x02085374, enable=0xD00AE004, disable=0xD00AD004, label="战车中能用人武器v2") buy_chariot_item_three_star = ToggleField(0x02077378, enable=0x72602003, disable=0x7260D101, label="店内购入车用品必3星") can_buy_not_for_sale = ToggleField(0x0204E618, enable=0x48B8E001, disable=0x48B8D101, label="可以购入非卖车用品") can_change_even_overweight = ToggleField(0x02043064, enable=0x1EE4E000, disable=0x1EE4D100, label="车身超过重量也可以改造") can_always_special_bullet = ToggleFields(ToggleField(0x0208EFEC, size=2, enable=0x46C0, disable=0xD111), ToggleField(0x0208EFFE, size=2, enable=0xE007, disable=0xD007), label="都能用特殊砲弾") skill_count_keep = ToggleFields(ToggleField(0x0208F070, size=2, enable=0x46C0, disable=0x1E40), ToggleField(0x0207C2B2, size=2, enable=0x46C0, disable=0x1E40), label="特技使用次数不减") can_go_hear = ToggleFields(ToggleField(0x020686F0, size=8, enable=0x00C9314521F0E046, disable=0xF009A9008B30E046), ToggleField(0x020686F8, size=8, enable=0xA902688868081861, disable=0xA90298019800FEAD), label="传送系统可以移動到现在地") # 仓库第一件战车物品星级 0x21A0419 # 好感度 favorability = ArrayField(0x021AB52E, 12, ByteField(0)) # 通缉名单状态01=逃走, 03=击破 wanted_status = ArrayField(0x021AB503, 30, ByteField(0)) # 连射 # 2212919C 00000000 move_speed = WordField(0x020C2A58, label="移动速度")
class Global(BaseGlobal): money = Field(0x0202BCF4) chapter = ByteField(0x0202BCFA) turns = WordField(0x0202BCFC) extra_flag = WordField(0x02024F72) # 附加项 person_addr = Field(0x02003c08) curx = WordField(0x0202bcc0) cury = WordField(0x0202bcc2) persons = ArrayField(0x202be48, 0xff, ModelField(0, Person)) train_items = ArrayField(0x0203A818, 100, ModelField(0, ItemSlot)) # 运输队 # # Hack code EN # inf_move = ToggleFields( # ToggleField(0x080183A8, size=2, enable=0x2000, disable=0x2002), # ToggleField(0x08018750, size=2, enable=0x2100, disable=0x2102), # ToggleField(0x0801D2BC, size=2, enable=0x2100, disable=0x2140), # ToggleField(0x080320DE, size=2, enable=0x2100, disable=0x2140) # ) # 无限行动 # item_count_keep = ToggleField(0x08016B0A, size=2, enable=0x46C0, disable=0x1812) # 武器耐久度不减 # proficiency_max = ToggleField(0x0802C280, size=2, enable=0x22FB, disable=0x1C02) # 武器熟练度最大 # ability_up_1 = ToggleField(0x0802B9BC, size=2, enable=0x2001, disable=0x1C20) # 全能力成长1点 # ability_up_2 = ToggleField(0x0802B9BC, size=2, enable=0x2002, disable=0x1C20) # 全能力成长2点 # got_100exp = ToggleField(0x0802C58C, size=2, enable=0x2164, disable=0x1809) # 战后升级 # got_100exp = ToggleFields( # ToggleField(0x0802C574, size=2, enable=0x2064, disable=0x2001), # ToggleField(0x0802C58C, size=2, enable=0x2164, disable=0x1809), # ToggleField(0x0802C694, size=2, enable=0x46C0, disable=0xDD00), # ToggleField(0x0802C6CC, size=2, enable=0x2064, disable=0x200A) # ToggleField(0x0802C6D2, size=2, enable=0x3064, disable=0x300A) # ) # support_quickly = ToggleField(0x080282C2, size=2, enable=0x7039, disable=0x7038) # 好感度快速提升 # Hack code ZH inf_move = ToggleFields( ToggleField(0x080183A8, size=2, enable=0x2000, disable=0x2002), ToggleField(0x08018464, size=2, enable=0x2100, disable=0x2102), ToggleField(0x0801CF20, size=2, enable=0x2100, disable=0x2140), ToggleField(0x0803202A, size=2, enable=0x2100, disable=0x2140)) # 无限行动 item_count_keep = ToggleField(0x080168B2, size=2, enable=0x46C0, disable=0x1812) # 武器耐久度不减 proficiency_max = ToggleField(0x0802C1C8, size=2, enable=0x22FB, disable=0x1C02) # 武器熟练度最大 ability_up_1 = ToggleField(0x0802B904, size=2, enable=0x2001, disable=0x1C20) # 全能力成长1点 ability_up_2 = ToggleField(0x0802B904, size=2, enable=0x2002, disable=0x1C20) # 全能力成长2点 got_100exp = ToggleField(0x0802C4C4, size=2, enable=0x2164, disable=0x1809) # 战后升级 # got_100exp = ToggleFields( # ToggleField(0x802C4AC, size=2, enable=0x2064, disable=0x2001), # ToggleField(0x802C4C4, size=2, enable=0x2164, disable=0x1809), # ToggleField(0x802C5CC, size=2, enable=0x46C0, disable=0xDD00), # ToggleField(0x802C604, size=2, enable=0x2064, disable=0x200A) # ToggleField(0x802C60A, size=2, enable=0x3064, disable=0x300A) # ) support_quickly = ToggleField(0x08028256, size=2, enable=0x7039, disable=0x7038) # 好感度快速提升
class Global(BaseGlobal): persons = ArrayField(0, 15, ModelField(0, Person)) chariots = ArrayField(0, 12, ModelField(0, Chariot)) chariot_battle_status = ArrayField(0, 4, ModelField(0, ChariotBattleStatus)) money = Field(0x021947D8, label="金钱") difficulty = ByteField(0x0219483D, label="难易度") stamp = WordField(0x02194844, label="印章") game_turn = ByteField(0x021AA3E4, label="通关次数") game_time = Field(0x021295DC, label="游戏时间") allfax = ToggleField(0x0219E90B, size=6, enable=0xFFFFFFFFFFFF, label="传真全开") allmap = ToggleFields(ToggleField(0x020ACE8A, enable=0x20FF, size=2, disable=0x7828), ToggleField(0x020AC3F0, enable=0x4770, size=2, disable=0xD000), label="地图全开") enemy_flash = ToggleFields(ToggleField(0x020D3E94, enable=0x2209, size=2, disable=0x7F0A), ToggleField(0x020D41AA, enable=0x46C0, size=2, disable=0xDA03), label="敌人闪光") can_use_other_skill = ToggleFields(ToggleField(0x020753A4, enable=0xE005, size=2, disable=0xD105), ToggleField(0x02075628, enable=0x4280, size=2, disable=0x42A0), ToggleField(0x020E1F60, enable=0x4280, size=2, disable=0x4285), ToggleField(0x020DDB58, enable=0x4280, size=2, disable=0x2A02), label="可以使用其他副职业的特技") must_critical_hit = ToggleFields(ToggleField(0x02000180, enable=0x9800DB032807B500, size=8, disable=0xBDAF1785CC47D6C6), ToggleField(0x02000188, enable=0xF0D6BD009000380C, size=8, disable=0x3AA28F402E0005E8), ToggleField(0x02000190, enable=0xBD00F9BB, disable=0x4B358143), ToggleField(0x020D6614, enable=0xFDB4F729, disable=0xFF78F7FF), label="必定会心一击") quick_switch = ToggleField(0x02027164, enable=0x47702001, disable=0x47702000, label="画面切换高速化") quick_move = ToggleField(0x021911FC, enable=0x00001000, disable=0x199, label="高速移动") must_winning = ToggleField(0x02042B54, enable=0x46C04287, disable=0xDD014287, label="贩卖机绝对会中奖") tool_count_keep = ToggleField(0x0206DD4C, enable=0x2600B5F8, disable=0x1C16B5F8, label="消费道具用后不减") level_up_max = ToggleFields(ToggleField(0x0206FC64, enable=0x1E482100, disable=0x21001C18), ToggleField(0x020DF908, enable=0xE0002000, disable=0xF7F32064), label="等级上升时随机数值最大") weight_zero = ToggleFields(ToggleField(0x0206F37C, enable=0x85482000, disable=0x18248D48), ToggleField(0x0206F39C, enable=0x80022200, disable=0x18248800), label="装甲除底盘外重量为0") equip_limit_remove = ToggleFields(ToggleField(0x02000120, enable=0xF882F031, disable=0xE5FCE69F), ToggleField(0x02000124, enable=0x1E5B2300, disable=0xBB92C9B8), ToggleField(0x02000128, enable=0xBDF8802B, disable=0xE28EAD90), ToggleField(0x0206E112, enable=0xF805F792, disable=0xF889F7C3), ToggleField(0x0206E16C, enable=0xFFD8F791, disable=0xF85CF7C3), label="装备限制解除") without_material = ToggleFields( ToggleField(0x0204E9F0, enable=0xE0141884, disable=0x88601884), ToggleField(0x0204EC04, enable=0xE00AFCCF, disable=0x8878FCCF), label="艺术家制作不需要素材", ) twin_engines = ToggleField(0x02074648, enable=0x77622201, disable=0x1892D841, label="全车种双引擎") drop_item_three_star = ToggleField(0x0206FEB4, enable=0x20030600, disable=0x0E000600, label="敌人掉落的都是3星") no_battle = ToggleField(0x020AB298, enable=0x0000E071, disable=0xF7CDD371, label="不遇敌") must_drop_item = ToggleField(0x020E0604, enable=0x46C04281, disable=0xDA304281, label="必定掉落道具") after_money = Field(0x021AAEA4, label="战后获得金钱") after_exp = Field(0x021AAE90, label="战后获得经验值") # 战后获得金钱倍数(2: 00C8, 4: 0190, 8: 0320, 16: 0640, 32: 0C80, 64: 1900, 128: 3200) after_money_rate = WordField(0x21AAE4A, label="战后获得金钱倍数") # 战后获得经验值倍数(2: 00C8, 4: 0190, 8: 0320, 16: 0640, 32: 0C80, 64: 1900, 128: 3200) after_exp_rate = WordField(0x021AAE4E, label="战后获得经验值倍数") ammo_keep = ToggleField(0x020DDCDC, enable=0x545346C0, disable=0x54531E5B, label="车辆弹药不减") through_wall = ToggleFields(ToggleField(0x02034920, enable=0xE1A00000, disable=0xA3A00000), ToggleField(0x02034474, enable=0xE1550001, disable=0xB1550001), ToggleField(0x02034478, enable=0xE1A05001, disable=0xB1A05001), ToggleField(0x0203447C, enable=0xE1A06000, disable=0xB1A06000), ToggleField(0x020B24EE, size=2, enable=0xE000, disable=0xD100), label="穿墙") # 战斗必定先制 must_first = ToggleField(0x02085A3E, size=6, enable=0x46C070012102, disable=0xD12A28027800, label="战斗必定先制") # 回复道具 potions = ArrayField(0x0219491C, 27, ModelField(0, ItemInfo)) # 战斗道具 battle_items = ArrayField(0x02194A3C, 46, ModelField(0, ItemInfo)) # 道具 humen_items = ArrayField(0x02194C78, 222, ModelField(0, ItemInfo2)) # 装备 equips = ArrayField(0x02194FF0, 373, ModelField(0, ItemInfo2)) # 敌人分布 enemy_case = ArrayField(0x021AAF40, 4, ModelField(0, EnemyCase)) # 敌人情况 enemys = ArrayField(0, 10, ModelField(0, Enemy)) posx = WordField(0x0219120E, label="X坐标") posy = WordField(0x02191212, label="Y坐标")
class Global(BaseGlobal): # chapter = ByteField(0x0202BCFA) # turns = WordField(0x0202BCFC) person_addr = Field(0x021986F4) curx = ByteField(0x02273BD4) # 0x02272EA4 # TODO cury = ByteField(0x02273BD5) # 0x02272EA5 # TODO # persons = ArrayField(0x202be48, 0xff, ModelField(0, Person)) train_items = ArrayField(0x021986D0, 100, ModelField(0, ItemSlot)) # 运输队 ourturn = ToggleField(0x021A9674, enable=0xE2812000, disable=0xE2812001) control_enemy = ToggleField(0x021B1830, enable=0xE1500000, disable=0xE1510000) upgrade_max = ToggleField(0x0203C474, enable=0xE1A09005, disable=0xB2899001) upgrade_all = ToggleField(0x0203C44C, enable=0xE1A00000, disable=0xAA000009) lv1_can_transfer = ToggleField(0x02049EE0, enable=0x00000001, disable=0xE350000A) can_train = ToggleField(0x021C6F7C, enable=0xE3A00002, disable=0xEBF9D152) can_visit = ToggleField(0x021ECB14, enable=0xE3A00002, disable=0xEBF98B4C) # TODO can_holddown = ToggleField(0x021C6E0C, enable=0xEBF9A61E, disable=0xEBF9D1AE) use_enemy_prof = ToggleField(0x021D4CEC, enable=0xEA000022, disable=0x1A000022) infinite_refine = ToggleField(0x02052618, size=2, enable=0, disable=0x0A01) item_consume = ToggleField(0x0203CDD0, size=2, enable=0x0000, disable=0x0001) enemy_item_drop = ToggleField(0x021D3114, size=8, enable=0xE3500000E1D006B0, disable=0xE3500020E5D10003) exp_rate = Field(0x021CFACC) pro_rate = Field(0x021CFC78) config = ModelPtrField(0x02198120, Config, 4) _iteminfos = ArrayField(0x022494E0, 0xff, ModelField(0, ItemInfo)) difficulty = ByteField(0x0227E6E5) # 0201FF8C E3A00000 always_level_up = ToggleField(0x021CFAC4, enable=0xE3A02064, disable=0xE5D1206B) @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
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