diff options
| author | Xusheng <xusheng@vector35.com> | 2021-07-01 12:34:30 +0800 |
|---|---|---|
| committer | Xusheng Li <xushengli@protonmail.com> | 2021-07-05 10:11:47 +0800 |
| commit | 13ff200ba134b8704f37eca99c42b70dab0d17dc (patch) | |
| tree | 876b3db3c53f704b31152aeaede1f2edc9d27b24 /python/examples/kaitai/warcraft_2_pud.py | |
| parent | 4039a800349dcd587833d3e27d9137e4649818f4 (diff) | |
Remove snippet and kaitai plugin. Note their individual links.
Diffstat (limited to 'python/examples/kaitai/warcraft_2_pud.py')
| -rw-r--r-- | python/examples/kaitai/warcraft_2_pud.py | 420 |
1 files changed, 0 insertions, 420 deletions
diff --git a/python/examples/kaitai/warcraft_2_pud.py b/python/examples/kaitai/warcraft_2_pud.py deleted file mode 100644 index 760b0134..00000000 --- a/python/examples/kaitai/warcraft_2_pud.py +++ /dev/null @@ -1,420 +0,0 @@ -# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild - -from pkg_resources import parse_version -from .kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO -from enum import Enum -import collections - - -if parse_version(ks_version) < parse_version('0.7'): - raise Exception("Incompatible Kaitai Struct Python API: 0.7 or later is required, but you have %s" % (ks_version)) - -class Warcraft2Pud(KaitaiStruct): - """Warcraft II game engine uses this format for map files. External - maps can be edited by official Warcraft II map editor and saved in - .pud files. Maps supplied with the game (i.e. single player - campaign) follow the same format, but are instead embedded inside - the game container files. - - There are two major versions: 0x11 (original one) and 0x13 (roughly - corresponds to v1.33 of the game engine, although some of the - features got limited support in v1.3). - - File consists of a sequence of typed sections. - - .. seealso:: - Source - http://cade.datamax.bg/war2x/pudspec.html - """ - - class Controller(Enum): - computer = 1 - passive_computer = 2 - nobody = 3 - computer_ = 4 - human = 5 - rescue_passive = 6 - rescue_active = 7 - - class TerrainType(Enum): - forest = 0 - winter = 1 - wasteland = 2 - swamp = 3 - - class UnitType(Enum): - infantry = 0 - grunt = 1 - peasant = 2 - peon = 3 - ballista = 4 - catapult = 5 - knight = 6 - ogre = 7 - archer = 8 - axethrower = 9 - mage = 10 - death_knight = 11 - paladin = 12 - ogre_mage = 13 - dwarves = 14 - goblin_sapper = 15 - attack_peasant = 16 - attack_peon = 17 - ranger = 18 - berserker = 19 - alleria = 20 - teron_gorefiend = 21 - kurdan_and_sky_ree = 22 - dentarg = 23 - khadgar = 24 - grom_hellscream = 25 - human_tanker = 26 - orc_tanker = 27 - human_transport = 28 - orc_transport = 29 - elven_destroyer = 30 - troll_destroyer = 31 - battleship = 32 - juggernaught = 33 - deathwing = 35 - gnomish_submarine = 38 - giant_turtle = 39 - gnomish_flying_machine = 40 - goblin_zepplin = 41 - gryphon_rider = 42 - dragon = 43 - turalyon = 44 - eye_of_kilrogg = 45 - danath = 46 - khorgath_bladefist = 47 - cho_gall = 49 - lothar = 50 - gul_dan = 51 - uther_lightbringer = 52 - zuljin = 53 - skeleton = 55 - daemon = 56 - critter = 57 - farm = 58 - pig_farm = 59 - human_barracks = 60 - orc_barracks = 61 - church = 62 - altar_of_storms = 63 - human_scout_tower = 64 - orc_scout_tower = 65 - stables = 66 - ogre_mound = 67 - gnomish_inventor = 68 - goblin_alchemist = 69 - gryphon_aviary = 70 - dragon_roost = 71 - human_shipyard = 72 - orc_shipyard = 73 - town_hall = 74 - great_hall = 75 - elven_lumber_mill = 76 - troll_lumber_mill = 77 - human_foundry = 78 - orc_foundry = 79 - mage_tower = 80 - temple_of_the_damned = 81 - human_blacksmith = 82 - orc_blacksmith = 83 - human_refinery = 84 - orc_refinery = 85 - human_oil_well = 86 - orc_oil_well = 87 - keep = 88 - stronghold = 89 - castle = 90 - fortress = 91 - gold_mine = 92 - oil_patch = 93 - human_start = 94 - orc_start = 95 - human_guard_tower = 96 - orc_guard_tower = 97 - human_cannon_tower = 98 - orc_cannon_tower = 99 - circle_of_power = 100 - dark_portal = 101 - runestone = 102 - human_wall = 103 - orc_wall = 104 - SEQ_FIELDS = ["sections"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['sections']['start'] = self._io.pos() - self.sections = [] - i = 0 - while not self._io.is_eof(): - if not 'arr' in self._debug['sections']: - self._debug['sections']['arr'] = [] - self._debug['sections']['arr'].append({'start': self._io.pos()}) - _t_sections = self._root.Section(self._io, self, self._root) - _t_sections._read() - self.sections.append(_t_sections) - self._debug['sections']['arr'][len(self.sections) - 1]['end'] = self._io.pos() - i += 1 - - self._debug['sections']['end'] = self._io.pos() - - class SectionStartingResource(KaitaiStruct): - SEQ_FIELDS = ["resources_by_player"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['resources_by_player']['start'] = self._io.pos() - self.resources_by_player = [] - i = 0 - while not self._io.is_eof(): - if not 'arr' in self._debug['resources_by_player']: - self._debug['resources_by_player']['arr'] = [] - self._debug['resources_by_player']['arr'].append({'start': self._io.pos()}) - self.resources_by_player.append(self._io.read_u2le()) - self._debug['resources_by_player']['arr'][len(self.resources_by_player) - 1]['end'] = self._io.pos() - i += 1 - - self._debug['resources_by_player']['end'] = self._io.pos() - - - class SectionEra(KaitaiStruct): - """Section that specifies terrain type for this map.""" - SEQ_FIELDS = ["terrain"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['terrain']['start'] = self._io.pos() - self.terrain = KaitaiStream.resolve_enum(self._root.TerrainType, self._io.read_u2le()) - self._debug['terrain']['end'] = self._io.pos() - - - class SectionVer(KaitaiStruct): - """Section that specifies format version.""" - SEQ_FIELDS = ["version"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['version']['start'] = self._io.pos() - self.version = self._io.read_u2le() - self._debug['version']['end'] = self._io.pos() - - - class SectionDim(KaitaiStruct): - SEQ_FIELDS = ["x", "y"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['x']['start'] = self._io.pos() - self.x = self._io.read_u2le() - self._debug['x']['end'] = self._io.pos() - self._debug['y']['start'] = self._io.pos() - self.y = self._io.read_u2le() - self._debug['y']['end'] = self._io.pos() - - - class SectionType(KaitaiStruct): - """Section that confirms that this file is a "map file" by certain - magic string and supplies a tag that could be used in - multiplayer to check that all player use the same version of the - map. - """ - SEQ_FIELDS = ["magic", "unused", "id_tag"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['magic']['start'] = self._io.pos() - self.magic = self._io.ensure_fixed_contents(b"\x57\x41\x52\x32\x20\x4D\x41\x50\x00\x00") - self._debug['magic']['end'] = self._io.pos() - self._debug['unused']['start'] = self._io.pos() - self.unused = self._io.read_bytes(2) - self._debug['unused']['end'] = self._io.pos() - self._debug['id_tag']['start'] = self._io.pos() - self.id_tag = self._io.read_u4le() - self._debug['id_tag']['end'] = self._io.pos() - - - class SectionUnit(KaitaiStruct): - SEQ_FIELDS = ["units"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['units']['start'] = self._io.pos() - self.units = [] - i = 0 - while not self._io.is_eof(): - if not 'arr' in self._debug['units']: - self._debug['units']['arr'] = [] - self._debug['units']['arr'].append({'start': self._io.pos()}) - _t_units = self._root.Unit(self._io, self, self._root) - _t_units._read() - self.units.append(_t_units) - self._debug['units']['arr'][len(self.units) - 1]['end'] = self._io.pos() - i += 1 - - self._debug['units']['end'] = self._io.pos() - - - class Section(KaitaiStruct): - SEQ_FIELDS = ["name", "size", "body"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['name']['start'] = self._io.pos() - self.name = (self._io.read_bytes(4)).decode(u"ASCII") - self._debug['name']['end'] = self._io.pos() - self._debug['size']['start'] = self._io.pos() - self.size = self._io.read_u4le() - self._debug['size']['end'] = self._io.pos() - self._debug['body']['start'] = self._io.pos() - _on = self.name - if _on == u"SLBR": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionStartingResource(io, self, self._root) - self.body._read() - elif _on == u"ERAX": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionEra(io, self, self._root) - self.body._read() - elif _on == u"OWNR": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionOwnr(io, self, self._root) - self.body._read() - elif _on == u"ERA ": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionEra(io, self, self._root) - self.body._read() - elif _on == u"SGLD": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionStartingResource(io, self, self._root) - self.body._read() - elif _on == u"VER ": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionVer(io, self, self._root) - self.body._read() - elif _on == u"SOIL": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionStartingResource(io, self, self._root) - self.body._read() - elif _on == u"UNIT": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionUnit(io, self, self._root) - self.body._read() - elif _on == u"DIM ": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionDim(io, self, self._root) - self.body._read() - elif _on == u"TYPE": - self._raw_body = self._io.read_bytes(self.size) - io = KaitaiStream(BytesIO(self._raw_body)) - self.body = self._root.SectionType(io, self, self._root) - self.body._read() - else: - self.body = self._io.read_bytes(self.size) - self._debug['body']['end'] = self._io.pos() - - - class SectionOwnr(KaitaiStruct): - """Section that specifies who controls each player.""" - SEQ_FIELDS = ["controller_by_player"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['controller_by_player']['start'] = self._io.pos() - self.controller_by_player = [] - i = 0 - while not self._io.is_eof(): - if not 'arr' in self._debug['controller_by_player']: - self._debug['controller_by_player']['arr'] = [] - self._debug['controller_by_player']['arr'].append({'start': self._io.pos()}) - self.controller_by_player.append(KaitaiStream.resolve_enum(self._root.Controller, self._io.read_u1())) - self._debug['controller_by_player']['arr'][len(self.controller_by_player) - 1]['end'] = self._io.pos() - i += 1 - - self._debug['controller_by_player']['end'] = self._io.pos() - - - class Unit(KaitaiStruct): - SEQ_FIELDS = ["x", "y", "u_type", "owner", "options"] - def __init__(self, _io, _parent=None, _root=None): - self._io = _io - self._parent = _parent - self._root = _root if _root else self - self._debug = collections.defaultdict(dict) - - def _read(self): - self._debug['x']['start'] = self._io.pos() - self.x = self._io.read_u2le() - self._debug['x']['end'] = self._io.pos() - self._debug['y']['start'] = self._io.pos() - self.y = self._io.read_u2le() - self._debug['y']['end'] = self._io.pos() - self._debug['u_type']['start'] = self._io.pos() - self.u_type = KaitaiStream.resolve_enum(self._root.UnitType, self._io.read_u1()) - self._debug['u_type']['end'] = self._io.pos() - self._debug['owner']['start'] = self._io.pos() - self.owner = self._io.read_u1() - self._debug['owner']['end'] = self._io.pos() - self._debug['options']['start'] = self._io.pos() - self.options = self._io.read_u2le() - self._debug['options']['end'] = self._io.pos() - - @property - def resource(self): - if hasattr(self, '_m_resource'): - return self._m_resource if hasattr(self, '_m_resource') else None - - if ((self.u_type == self._root.UnitType.gold_mine) or (self.u_type == self._root.UnitType.human_oil_well) or (self.u_type == self._root.UnitType.orc_oil_well) or (self.u_type == self._root.UnitType.oil_patch)) : - self._m_resource = (self.options * 2500) - - return self._m_resource if hasattr(self, '_m_resource') else None - - - |
