|  |  |  | #  • ▌ ▄ ·. ▄▄▄▄·     ▄▄▄ .·▄▄▄▄  ▪  ▄▄▄▄▄      ▄▄▄       ▄▄▄·▄▄▄       
 | 
					
						
							|  |  |  | #  ·██ ▐███▪▐█ ▀█▪    ▀▄.▀·██▪ ██ ██ •██  ▪     ▀▄ █·    ▐█ ▄█▀▄ █·▪    
 | 
					
						
							|  |  |  | #  ▐█ ▌▐▌▐█·▐█▀▀█▄    ▐▀▀▪▄▐█· ▐█▌▐█· ▐█.▪ ▄█▀▄ ▐▀▀▄      ██▀·▐▀▀▄  ▄█▀▄
 | 
					
						
							|  |  |  | #  ██ ██▌▐█▌██▄▪▐█    ▐█▄▄▌██. ██ ▐█▌ ▐█▌·▐█▌.▐▌▐█•█▌    ▐█▪·•▐█•█▌▐█▌.▐▌
 | 
					
						
							|  |  |  | #  ▀▀  █▪▀▀▀·▀▀▀▀      ▀▀▀ ▀▀▀▀▀• ▀▀▀ ▀▀▀  ▀█▄▀▪.▀  ▀    .▀   .▀  ▀ ▀█▄▀▪
 | 
					
						
							|  |  |  | #                Magicbane Emulator Project © 2013 - 2022
 | 
					
						
							|  |  |  | #                           www.magicbane.com
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import glob
 | 
					
						
							|  |  |  | import io
 | 
					
						
							|  |  |  | import json
 | 
					
						
							|  |  |  | import os
 | 
					
						
							|  |  |  | import sys
 | 
					
						
							|  |  |  | import wave
 | 
					
						
							|  |  |  | from tqdm import tqdm
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from arcane.ArcImage import *
 | 
					
						
							|  |  |  | from arcane.ArcMesh import *
 | 
					
						
							|  |  |  | from arcane.ArcMotion import *
 | 
					
						
							|  |  |  | from arcane.ArcRender import *
 | 
					
						
							|  |  |  | from arcane.ArcSkeleton import *
 | 
					
						
							|  |  |  | from arcane.ArcSound import *
 | 
					
						
							|  |  |  | from arcane.ArcTile import *
 | 
					
						
							|  |  |  | from arcane.ArcVisual import *
 | 
					
						
							|  |  |  | from arcane.enums.arc_object import *
 | 
					
						
							|  |  |  | from arcane.objects import *
 | 
					
						
							|  |  |  | from arcane.objects import ArcObj, ArcDoorObject, ArcStaticObject, ArcStructureObject, ArcAssetStructureObject, \
 | 
					
						
							|  |  |  |     ArcDungeonUnitObject, ArcDungeonExitObject, ArcDungeonStairObject, ArcItem, ArcCharacter
 | 
					
						
							|  |  |  | from arcane.util import *
 | 
					
						
							|  |  |  | from arcane.zones import *
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DUMP_DIRECTORY = 'ARCANE_DUMP'
 | 
					
						
							|  |  |  | WORKING_DIRECTORY = os.path.dirname(__file__)
 | 
					
						
							|  |  |  | TARGET_DIRECTORY = os.path.join(WORKING_DIRECTORY, DUMP_DIRECTORY)
 | 
					
						
							|  |  |  | COBJECTS_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'COBJECTS')
 | 
					
						
							|  |  |  | CZONE_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'CZONE')
 | 
					
						
							|  |  |  | SOUND_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'SOUND')
 | 
					
						
							|  |  |  | TEXTURE_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'TEXTURE')
 | 
					
						
							|  |  |  | TERRAIN_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'TERRAIN')
 | 
					
						
							|  |  |  | MESH_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'MESH')
 | 
					
						
							|  |  |  | VISUAL_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'VISUAL')
 | 
					
						
							|  |  |  | MOTION_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'MOTION')
 | 
					
						
							|  |  |  | TILE_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'TILE')
 | 
					
						
							|  |  |  | SKELETON_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'SKELETON')
 | 
					
						
							|  |  |  | RENDER_DIRECTORY = os.path.join(TARGET_DIRECTORY, 'RENDER')
 | 
					
						
							|  |  |  | COBJECTS_MAGIC = 0x434c4e54
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | COBJECTS_MAP = {
 | 
					
						
							|  |  |  |     OBJECT_TYPE_LIGHT: ArcObj,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_DOOR: ArcDoorObject,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_STATIC: ArcStaticObject,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_STRUCTURE: ArcStructureObject,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_ASSETSTRUCTURE: ArcAssetStructureObject,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_DUNGEONUNIT: ArcDungeonUnitObject,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_DUNGEONEXIT: ArcDungeonExitObject,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_DUNGEONSTAIR: ArcDungeonStairObject,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_ITEM: ArcItem,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_PLAYER: ArcCharacter,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_MOBILE: ArcCharacter,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_RUNE: ArcRune,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_CONTAINER: ArcContainerObject,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_DEED: ArcDeed,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_KEY: ArcKey,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_ASSET: ArcCityAssetTemplate,
 | 
					
						
							|  |  |  |     OBJECT_TYPE_OBJECT: ArcObj,
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EDITOR_COMMANDS = [
 | 
					
						
							|  |  |  |     'pack',
 | 
					
						
							|  |  |  |     'unpack',
 | 
					
						
							|  |  |  |     'test'
 | 
					
						
							|  |  |  | ]
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EDITOR_TARGETS = [
 | 
					
						
							|  |  |  |     'cobjects',
 | 
					
						
							|  |  |  |     'czones',
 | 
					
						
							|  |  |  |     'sound',
 | 
					
						
							|  |  |  |     'texture',
 | 
					
						
							|  |  |  |     'mesh',
 | 
					
						
							|  |  |  |     'visual',
 | 
					
						
							|  |  |  |     'motion',
 | 
					
						
							|  |  |  |     'tile',
 | 
					
						
							|  |  |  |     'skeleton',
 | 
					
						
							|  |  |  |     'terrain',
 | 
					
						
							|  |  |  |     'render',
 | 
					
						
							|  |  |  |     'all'
 | 
					
						
							|  |  |  | ]
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_cobjects():
 | 
					
						
							|  |  |  |     for obj_type in COBJECTS_MAP:
 | 
					
						
							|  |  |  |         directory_path = os.path.join(COBJECTS_DIRECTORY, OBJECT_TYPE_TO_STRING[obj_type])
 | 
					
						
							|  |  |  |         os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_czones():
 | 
					
						
							|  |  |  |     directory_path = CZONE_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_sound():
 | 
					
						
							|  |  |  |     directory_path = SOUND_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_texture():
 | 
					
						
							|  |  |  |     directory_path = TEXTURE_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_terrain():
 | 
					
						
							|  |  |  |     directory_path = TERRAIN_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_mesh():
 | 
					
						
							|  |  |  |     directory_path = MESH_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_visual():
 | 
					
						
							|  |  |  |     directory_path = VISUAL_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_motion():
 | 
					
						
							|  |  |  |     directory_path = MOTION_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_tile():
 | 
					
						
							|  |  |  |     directory_path = TILE_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_skeleton():
 | 
					
						
							|  |  |  |     directory_path = SKELETON_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def init_render():
 | 
					
						
							|  |  |  |     directory_path = RENDER_DIRECTORY
 | 
					
						
							|  |  |  |     os.makedirs(directory_path, exist_ok=True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_cobjects():
 | 
					
						
							|  |  |  |     init_cobjects()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('CObjects.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             magic = in_stream.read_dword()
 | 
					
						
							|  |  |  |             obj_type = in_stream.read_dword()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             arc_in = COBJECTS_MAP[obj_type]()
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 COBJECTS_DIRECTORY,
 | 
					
						
							|  |  |  |                 OBJECT_TYPE_TO_STRING[obj_type],
 | 
					
						
							|  |  |  |                 f'{res_id:d}.json'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  |             arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |             parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |             with open(filepath, 'w') as fp:
 | 
					
						
							|  |  |  |                 json.dump(parsed, fp, indent=2)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_cobjects():
 | 
					
						
							|  |  |  |     init_cobjects()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     for obj_type in COBJECTS_MAP:
 | 
					
						
							|  |  |  |         directory = os.path.join(
 | 
					
						
							|  |  |  |             COBJECTS_DIRECTORY,
 | 
					
						
							|  |  |  |             OBJECT_TYPE_TO_STRING[obj_type]
 | 
					
						
							|  |  |  |         )
 | 
					
						
							|  |  |  |         for filepath in glob.glob(os.path.join(directory, '*.json')):
 | 
					
						
							|  |  |  |             filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |             res_id = int(filename.split('.json')[0])
 | 
					
						
							|  |  |  |             json_data = json.load(open(filepath))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             out_stream = ResStream()
 | 
					
						
							|  |  |  |             out_stream.write_dword(COBJECTS_MAGIC)
 | 
					
						
							|  |  |  |             out_stream.write_dword(obj_type)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             arc_in = COBJECTS_MAP[obj_type]()
 | 
					
						
							|  |  |  |             arc_in.load_json(json_data)
 | 
					
						
							|  |  |  |             arc_in.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('CObjects.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_cobjects():
 | 
					
						
							|  |  |  |     resources = load_cache_file('CObjects.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         magic = in_stream.read_dword()
 | 
					
						
							|  |  |  |         o_type = in_stream.read_dword()
 | 
					
						
							|  |  |  |         out_stream.write_dword(magic)
 | 
					
						
							|  |  |  |         out_stream.write_dword(o_type)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = COBJECTS_MAP[o_type]()
 | 
					
						
							|  |  |  |         arc_out = COBJECTS_MAP[o_type]()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |         arc_out.load_json(parsed)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_czones():
 | 
					
						
							|  |  |  |     init_czones()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('CZone.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             arc_zone = ArcZone()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 CZONE_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.json'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  |             arc_zone.load_binary(in_stream)
 | 
					
						
							|  |  |  |             parsed = arc_zone.save_json()
 | 
					
						
							|  |  |  |             with open(filepath, 'w') as fp:
 | 
					
						
							|  |  |  |                 json.dump(parsed, fp, indent=2)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_czones():
 | 
					
						
							|  |  |  |     init_czones()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = CZONE_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.json')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.json')[0])
 | 
					
						
							|  |  |  |         json_data = json.load(open(filepath))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_zone = ArcZone()
 | 
					
						
							|  |  |  |         arc_zone.load_json(json_data)
 | 
					
						
							|  |  |  |         arc_zone.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('CZone.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_czones():
 | 
					
						
							|  |  |  |     resources = load_cache_file('CZone.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcZone()
 | 
					
						
							|  |  |  |         arc_out = ArcZone()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |         arc_out.load_json(parsed)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_sound():
 | 
					
						
							|  |  |  |     init_sound()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('Sound.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             arc_sound = ArcSound()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 SOUND_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.wav'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             arc_sound.load_binary(in_stream)
 | 
					
						
							|  |  |  |             with open(filepath, 'wb') as fp:
 | 
					
						
							|  |  |  |                 wave_writer = wave.Wave_write(fp)
 | 
					
						
							|  |  |  |                 arc_sound.save_wav(wave_writer)
 | 
					
						
							|  |  |  |                 wave_writer.close()
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_sound():
 | 
					
						
							|  |  |  |     init_sound()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = SOUND_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.wav')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.wav')[0])
 | 
					
						
							|  |  |  |         wav_reader = Wave_read(open(filepath, 'rb'))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_sound = ArcSound()
 | 
					
						
							|  |  |  |         arc_sound.load_wav(wav_reader)
 | 
					
						
							|  |  |  |         arc_sound.save_binary(out_stream)
 | 
					
						
							|  |  |  |         wav_reader.close()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('Sound.cache.new', resources, False)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_sound():
 | 
					
						
							|  |  |  |     resources = load_cache_file('Sound.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcSound()
 | 
					
						
							|  |  |  |         arc_out = ArcSound()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         temp = io.BytesIO()
 | 
					
						
							|  |  |  |         writer = wave.Wave_write(temp)
 | 
					
						
							|  |  |  |         arc_in.save_wav(writer)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         temp.seek(0, 0)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         reader = wave.Wave_read(temp)
 | 
					
						
							|  |  |  |         arc_out.load_wav(reader)
 | 
					
						
							|  |  |  |         reader.close()
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_texture():
 | 
					
						
							|  |  |  |     init_texture()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     print('Decompressing Texture Cache...')
 | 
					
						
							|  |  |  |     resources = load_cache_file('Textures.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     print('Writing images')
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 TEXTURE_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.tga'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             arc_texture = ArcTexture()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             arc_texture.load_binary(in_stream)
 | 
					
						
							|  |  |  |             arc_texture.save_img(filepath)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_texture():
 | 
					
						
							|  |  |  |     init_texture()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = TEXTURE_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.tga')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.tga')[0])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_texture = ArcTexture()
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_texture.load_img(filepath)
 | 
					
						
							|  |  |  |         arc_texture.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('Textures.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_texture():
 | 
					
						
							|  |  |  |     resources = load_cache_file('Textures.cache')
 | 
					
						
							|  |  |  |     temp = 'temp.tga'
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcTexture()
 | 
					
						
							|  |  |  |         arc_out = ArcTexture()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         temp = 'temp.tga'
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         arc_in.save_img(temp)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_out.load_img(temp)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     try:
 | 
					
						
							|  |  |  |         os.unlink(temp)
 | 
					
						
							|  |  |  |     except:
 | 
					
						
							|  |  |  |         pass
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_terrain():
 | 
					
						
							|  |  |  |     init_terrain()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('TerrainAlpha.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 TERRAIN_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.tga'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             arc_terrain = ArcTerrain()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             arc_terrain.load_binary(in_stream)
 | 
					
						
							|  |  |  |             arc_terrain.save_img(filepath)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_terrain():
 | 
					
						
							|  |  |  |     init_terrain()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = TERRAIN_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.tga')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.tga')[0])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_terrain = ArcTerrain()
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_terrain.load_img(filepath)
 | 
					
						
							|  |  |  |         arc_terrain.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('TerrainAlpha.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_terrain():
 | 
					
						
							|  |  |  |     resources = load_cache_file('TerrainAlpha.cache')
 | 
					
						
							|  |  |  |     temp = 'temp.tga'
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcTerrain()
 | 
					
						
							|  |  |  |         arc_out = ArcTerrain()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         temp = 'temp.tga'
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         arc_in.save_img(temp)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_out.load_img(temp)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  |             print()
 | 
					
						
							|  |  |  |             break
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     try:
 | 
					
						
							|  |  |  |         os.unlink(temp)
 | 
					
						
							|  |  |  |     except:
 | 
					
						
							|  |  |  |         pass
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_mesh():
 | 
					
						
							|  |  |  |     init_mesh()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('Mesh.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             arc_mesh = ArcMesh()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 MESH_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.json'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  |             arc_mesh.load_binary(in_stream)
 | 
					
						
							|  |  |  |             parsed = arc_mesh.save_json()
 | 
					
						
							|  |  |  |             with open(filepath, 'w') as fp:
 | 
					
						
							|  |  |  |                 json.dump(parsed, fp, indent=2)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_mesh():
 | 
					
						
							|  |  |  |     init_mesh()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = MESH_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.json')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.json')[0])
 | 
					
						
							|  |  |  |         json_data = json.load(open(filepath))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_mesh = ArcMesh()
 | 
					
						
							|  |  |  |         arc_mesh.load_json(json_data)
 | 
					
						
							|  |  |  |         arc_mesh.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('Mesh.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_mesh():
 | 
					
						
							|  |  |  |     resources = load_cache_file('Mesh.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcMesh()
 | 
					
						
							|  |  |  |         arc_out = ArcMesh()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |         arc_out.load_json(parsed)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_visual():
 | 
					
						
							|  |  |  |     init_visual()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('Visual.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             arc_visual = ArcVisual()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 VISUAL_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.json'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  |             arc_visual.load_binary(in_stream)
 | 
					
						
							|  |  |  |             parsed = arc_visual.save_json()
 | 
					
						
							|  |  |  |             with open(filepath, 'w') as fp:
 | 
					
						
							|  |  |  |                 json.dump(parsed, fp, indent=2)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_visual():
 | 
					
						
							|  |  |  |     init_visual()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = VISUAL_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.json')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.json')[0])
 | 
					
						
							|  |  |  |         json_data = json.load(open(filepath))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_visual = ArcVisual()
 | 
					
						
							|  |  |  |         arc_visual.load_json(json_data)
 | 
					
						
							|  |  |  |         arc_visual.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('Visual.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_visual():
 | 
					
						
							|  |  |  |     resources = load_cache_file('Visual.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcVisual()
 | 
					
						
							|  |  |  |         arc_out = ArcVisual()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |         arc_out.load_json(parsed)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_motion():
 | 
					
						
							|  |  |  |     init_motion()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('Motion.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             arc_motion = ArcMotion()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 MOTION_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.json'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  |             arc_motion.load_binary(in_stream)
 | 
					
						
							|  |  |  |             parsed = arc_motion.save_json()
 | 
					
						
							|  |  |  |             with open(filepath, 'w') as fp:
 | 
					
						
							|  |  |  |                 json.dump(parsed, fp, indent=2)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_motion():
 | 
					
						
							|  |  |  |     init_motion()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = MOTION_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.json')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.json')[0])
 | 
					
						
							|  |  |  |         json_data = json.load(open(filepath))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_motion = ArcMotion()
 | 
					
						
							|  |  |  |         arc_motion.load_json(json_data)
 | 
					
						
							|  |  |  |         arc_motion.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('Motion.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_motion():
 | 
					
						
							|  |  |  |     resources = load_cache_file('Motion.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcMotion()
 | 
					
						
							|  |  |  |         arc_out = ArcMotion()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |         arc_out.load_json(parsed)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_tile():
 | 
					
						
							|  |  |  |     init_tile()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('Tile.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             arc_tile = ArcTileManager()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 TILE_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.json'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  |             arc_tile.load_binary(in_stream)
 | 
					
						
							|  |  |  |             parsed = arc_tile.save_json()
 | 
					
						
							|  |  |  |             with open(filepath, 'w') as fp:
 | 
					
						
							|  |  |  |                 json.dump(parsed, fp, indent=2)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_tile():
 | 
					
						
							|  |  |  |     init_tile()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = TILE_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.json')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.json')[0])
 | 
					
						
							|  |  |  |         json_data = json.load(open(filepath))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_tile = ArcTileManager()
 | 
					
						
							|  |  |  |         arc_tile.load_json(json_data)
 | 
					
						
							|  |  |  |         arc_tile.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('Tile.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_tile():
 | 
					
						
							|  |  |  |     resources = load_cache_file('Tile.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcTileManager()
 | 
					
						
							|  |  |  |         arc_out = ArcTileManager()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |         arc_out.load_json(parsed)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_skeleton():
 | 
					
						
							|  |  |  |     init_skeleton()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('Skeleton.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             arc_skeleton = ArcSkeleton()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 SKELETON_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.json'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  |             arc_skeleton.load_binary(in_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             parsed = arc_skeleton.save_json()
 | 
					
						
							|  |  |  |             with open(filepath, 'w') as fp:
 | 
					
						
							|  |  |  |                 json.dump(parsed, fp, indent=2)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_skeleton():
 | 
					
						
							|  |  |  |     init_skeleton()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = SKELETON_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.json')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.json')[0])
 | 
					
						
							|  |  |  |         json_data = json.load(open(filepath))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_skeleton = ArcSkeleton()
 | 
					
						
							|  |  |  |         arc_skeleton.load_json(json_data)
 | 
					
						
							|  |  |  |         arc_skeleton.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('Skeleton.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_skeleton():
 | 
					
						
							|  |  |  |     resources = load_cache_file('Skeleton.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcSkeleton()
 | 
					
						
							|  |  |  |         arc_out = ArcSkeleton()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |         arc_out.load_json(parsed)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_render():
 | 
					
						
							|  |  |  |     init_render()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = load_cache_file('render.cache')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with tqdm(total=len(resources)) as pBar:
 | 
					
						
							|  |  |  |         for res_id, data in resources:
 | 
					
						
							|  |  |  |             arc_render = ArcRender()
 | 
					
						
							|  |  |  |             in_stream = ResStream(data)
 | 
					
						
							|  |  |  |             filepath = os.path.join(
 | 
					
						
							|  |  |  |                 RENDER_DIRECTORY,
 | 
					
						
							|  |  |  |                 f'{res_id:d}.json'
 | 
					
						
							|  |  |  |             )
 | 
					
						
							|  |  |  |             arc_render.load_binary(in_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             parsed = arc_render.save_json()
 | 
					
						
							|  |  |  |             with open(filepath, 'w') as fp:
 | 
					
						
							|  |  |  |                 json.dump(parsed, fp, indent=2)
 | 
					
						
							|  |  |  |             pBar.update(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_render():
 | 
					
						
							|  |  |  |     init_render()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     resources = []
 | 
					
						
							|  |  |  |     directory = RENDER_DIRECTORY
 | 
					
						
							|  |  |  |     for filepath in glob.glob(os.path.join(directory, '*.json')):
 | 
					
						
							|  |  |  |         filename = os.path.basename(filepath)
 | 
					
						
							|  |  |  |         res_id = int(filename.split('.json')[0])
 | 
					
						
							|  |  |  |         json_data = json.load(open(filepath))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  |         arc_render = ArcRender()
 | 
					
						
							|  |  |  |         arc_render.load_json(json_data)
 | 
					
						
							|  |  |  |         arc_render.save_binary(out_stream)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         resources.append([res_id, out_stream.get_bytes()])
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     save_cache_file('Render.cache.new', resources)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_render():
 | 
					
						
							|  |  |  |     resources = load_cache_file('Render.cache')
 | 
					
						
							|  |  |  |     for res_id, data in resources:
 | 
					
						
							|  |  |  |         in_stream = ResStream(data)
 | 
					
						
							|  |  |  |         out_stream = ResStream()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in = ArcRender()
 | 
					
						
							|  |  |  |         arc_out = ArcRender()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         arc_in.load_binary(in_stream)
 | 
					
						
							|  |  |  |         parsed = arc_in.save_json()
 | 
					
						
							|  |  |  |         arc_out.load_json(parsed)
 | 
					
						
							|  |  |  |         arc_out.save_binary(out_stream)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             assert in_stream.get_bytes() == out_stream.get_bytes()
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print(res_id, in_stream.buffer.tell(), out_stream.buffer.tell())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def unpack_all():
 | 
					
						
							|  |  |  |     for cache_type in EDITOR_TARGETS[:-1]:
 | 
					
						
							|  |  |  |         method = 'unpack_' + cache_type + '()'
 | 
					
						
							|  |  |  |         print(method)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             exec(method)
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print('***Error: Missing or corrupt ' + cache_type + ' cache.')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def pack_all():
 | 
					
						
							|  |  |  |     for cache_type in EDITOR_TARGETS[:-1]:
 | 
					
						
							|  |  |  |         method = 'pack_' + cache_type + '()'
 | 
					
						
							|  |  |  |         print(method)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             exec(method)
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print('***Error: Missing or corrupt ' + cache_type + ' cache.')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_all():
 | 
					
						
							|  |  |  |     for cache_type in EDITOR_TARGETS[:-1]:
 | 
					
						
							|  |  |  |         method = 'test_' + cache_type + '()'
 | 
					
						
							|  |  |  |         print(method)
 | 
					
						
							|  |  |  |         try:
 | 
					
						
							|  |  |  |             exec(method)
 | 
					
						
							|  |  |  |         except:
 | 
					
						
							|  |  |  |             print('***Error: Missing or corrupt ' + cache_type + ' cache.')
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def usage():
 | 
					
						
							|  |  |  |     print('_____________mbEditorPro_2.0_______________')
 | 
					
						
							|  |  |  |     print('   www.magicbane.com | repo.magicbane.com')
 | 
					
						
							|  |  |  |     print('')
 | 
					
						
							|  |  |  |     print('Commands: ')
 | 
					
						
							|  |  |  |     print(*EDITOR_COMMANDS)
 | 
					
						
							|  |  |  |     print('Targets: ')
 | 
					
						
							|  |  |  |     print(*EDITOR_TARGETS)
 | 
					
						
							|  |  |  |     print('')
 | 
					
						
							|  |  |  |     print('example:  unpack texture')
 | 
					
						
							|  |  |  |     print('example:  pack texture')
 | 
					
						
							|  |  |  |     exit(1)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main():
 | 
					
						
							|  |  |  |     if not sys.argv[2:]:
 | 
					
						
							|  |  |  |         usage()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if sys.argv[1] not in EDITOR_COMMANDS:
 | 
					
						
							|  |  |  |         usage()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if sys.argv[2] not in EDITOR_TARGETS:
 | 
					
						
							|  |  |  |         usage()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     method = '_'.join(sys.argv[1:3]) + '()'
 | 
					
						
							|  |  |  |     print(method)
 | 
					
						
							|  |  |  |     exec(method)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main()
 |