diff --git a/fast64_internal/sm64/animation/classes.py b/fast64_internal/sm64/animation/classes.py index 9185c64f2..667044f9b 100644 --- a/fast64_internal/sm64/animation/classes.py +++ b/fast64_internal/sm64/animation/classes.py @@ -22,8 +22,8 @@ class SM64_AnimHeader: header_variant: int = 0 flags: str | int = None yDivisor: int = 0 - startFrame: int = 0 - loopStart: int = 0 + start_frame: int = 0 + loop_start: int = 0 loop_end: int = 1 boneCount: int = None values: str = "" @@ -34,8 +34,8 @@ def toC(self, designated: bool, asArray: bool) -> str: headerData: list[tuple[str, object]] = [ ("flags", self.flags), ("animYTransDivisor", self.yDivisor), - ("startFrame", self.startFrame), - ("loopStart", self.loopStart), + ("startFrame", self.start_frame), + ("loopStart", self.loop_start), ("loop_end", self.loop_end), ("unusedBoneCount", f"ANIMINDEX_NUMPARTS({self.data.indicesReference})"), # Unused but potentially useful ("values", self.data.valuesReference), @@ -54,8 +54,8 @@ def toBinary(self, indicesReference, valuesReference): data = bytearray() data.extend(self.flags.to_bytes(2, byteorder="big", signed=False)) # 0x00 data.extend(self.yDivisor.to_bytes(2, byteorder="big", signed=True)) # 0x02 - data.extend(self.startFrame.to_bytes(2, byteorder="big", signed=True)) # 0x04 - data.extend(self.loopStart.to_bytes(2, byteorder="big", signed=True)) # 0x06 + data.extend(self.start_frame.to_bytes(2, byteorder="big", signed=True)) # 0x04 + data.extend(self.loop_start.to_bytes(2, byteorder="big", signed=True)) # 0x06 data.extend(self.loop_end.to_bytes(2, byteorder="big", signed=True)) # 0x08 data.extend(self.boneCount.to_bytes(2, byteorder="big", signed=True)) # 0x0A data.extend(valuesReference.to_bytes(4, byteorder="big", signed=False)) # 0x0C @@ -66,11 +66,14 @@ def toBinary(self, indicesReference, valuesReference): # Importing def toHeaderProps(self, action, header): - intFlagsToProps = { - "ANIM_FLAG_NOLOOP": "noLoop", - "ANIM_FLAG_BACKWARD": "backward", - "ANIM_FLAG_NO_ACCEL": "noAcceleration", + flagsToProps = { + "ANIM_FLAG_NOLOOP": "no_loop", + "ANIM_FLAG_BACKWARD": "backwards", + "ANIM_FLAG_NO_ACCEL": "no_acceleration", "ANIM_FLAG_DISABLED": "disabled", + "ANIM_FLAG_HOR_TRANS": "only_horizontal_trans", + "ANIM_FLAG_VERT_TRANS": "only_vertical_trans", + "ANIM_FLAG_NO_TRANS": "no_trans", } intFlagsToString = { 0: "ANIM_FLAG_NOLOOP", @@ -89,10 +92,10 @@ def toHeaderProps(self, action, header): header.overrideName = True header.customName = self.name - correctFrameRange = self.startFrame, self.loopStart, self.loop_end - header.startFrame, header.loopStart, header.loop_end = correctFrameRange - if correctFrameRange != header.getFrameRange(action): # If auto frame range is wrong - header.manualFrameRange = True + correctFrameRange = self.start_frame, self.loop_start, self.loop_end + header.start_frame, header.loop_start, header.loop_end = correctFrameRange + if correctFrameRange != header.get_frame_range(action): # If auto frame range is wrong + header.manual_frame_range = True header.yDivisor = self.yDivisor @@ -101,8 +104,8 @@ def toHeaderProps(self, action, header): cFlags = [flag for bit, flag in intFlagsToString.items() if is_bit_active(self.flags, bit)] header.customFlags = " | ".join(cFlags) for cFlag in cFlags: - if cFlag in intFlagsToProps: - setattr(header, intFlagsToProps[cFlag], True) + if cFlag in flagsToProps: + setattr(header, flagsToProps[cFlag], True) else: header.setCustomFlags = True else: @@ -115,8 +118,8 @@ def read_binary(self, romfile: BinaryIO, address: int, segmentData, isDMA: bool self.address = address self.flags = headerReader.read_value(2, signed=False) # /*0x00*/ s16 flags; self.yDivisor = headerReader.read_value(2) # /*0x02*/ s16 animYTransDivisor; - self.startFrame = headerReader.read_value(2) # /*0x04*/ s16 startFrame; - self.loopStart = headerReader.read_value(2) # /*0x06*/ s16 loopStart; + self.start_frame = headerReader.read_value(2) # /*0x04*/ s16 startFrame; + self.loop_start = headerReader.read_value(2) # /*0x06*/ s16 loopStart; self.loop_end = headerReader.read_value(2) # /*0x08*/ s16 loopEnd; # Unused in engine but makes it easy to read animation data self.boneCount = headerReader.read_value(2) # /*0x0A*/ s16 unusedBoneCount; @@ -132,7 +135,7 @@ def read_binary(self, romfile: BinaryIO, address: int, segmentData, isDMA: bool self.indices = decodeSegmentedAddr(indicesOffset.to_bytes(4, byteorder="big"), segmentData) def readC(self, value: Initialization): - self.name = toAlnum(value.name) + self.name = value.name structDict = value.array_to_struct_dict( [ @@ -150,8 +153,8 @@ def readC(self, value: Initialization): self.flags = structDict["flags"] self.yDivisor = structDict["animYTransDivisor"] - self.startFrame = structDict["startFrame"] - self.loopStart = structDict["loopStart"] + self.start_frame = structDict["startFrame"] + self.loop_start = structDict["loopStart"] self.loop_end = structDict["loopEnd"] self.values = structDict["values"] @@ -345,21 +348,25 @@ def toC(self, mergeValues: bool, useHexValues: bool) -> str: return cData.getvalue() # Importing - def to_action(self, action): + def to_action(self, action, remove_name_footer: bool = True): action_props = action.fast64.sm64 if self.actionName: action.name = self.actionName else: if self.headers[0].name: - action.name = toAlnum(self.headers[0].name) + if remove_name_footer and self.headers[0].name.startswith("anim_"): + action.name = self.headers[0].name.replace("anim_", "", 1) + else: + action.name = self.headers[0].name else: action.name = hex(self.headers[0].address) self.actionName = action.name if self.fileName: action_props.customFileName = self.fileName - action_props.overrideFileName = True + if action_props.get_anim_file_name(action) != self.fileName: + action_props.overrideFileName = True action_props.indicesTable, action_props.indicesAddress = self.indicesReference, self.indicesReference action_props.valuesTable, action_props.valueAddress = self.valuesReference, self.valuesReference diff --git a/fast64_internal/sm64/animation/exporting.py b/fast64_internal/sm64/animation/exporting.py index 8b0a35f91..a1bbcd4dd 100644 --- a/fast64_internal/sm64/animation/exporting.py +++ b/fast64_internal/sm64/animation/exporting.py @@ -1,11 +1,8 @@ -import bpy, mathutils, os +import os +import bpy +import mathutils -from .utility import ( - anim_name_to_enum, - get_anim_pose_bones, - get_anim_name, - get_max_frame, -) +from .utility import anim_name_to_enum, get_anim_pose_bones, get_anim_name from ..sm64_utility import radian_to_sm64_degree from ...utility import ( @@ -25,13 +22,13 @@ def getAnimationPairs( scene: bpy.types.Scene, action: bpy.types.Action, - armatureObj: bpy.types.Object, + armature_obj: bpy.types.Object, animBonesInfo: list[bpy.types.PoseBone], ) -> tuple[list[int], list[int]]: sm64Props = scene.fast64.sm64 blender_to_sm64_scale = sm64Props.blender_to_sm64_scale - maxFrame = get_max_frame(scene, action) + maxFrame = action.fast64.sm64.get_max_frame(action) pairs = [ SM64_AnimPair(), @@ -50,11 +47,11 @@ def getAnimationPairs( pairs.extend(xyzPairs) rotationPairs.append(xyzPairs) - scale: mathutils.Vector = armatureObj.matrix_world.to_scale() * blender_to_sm64_scale + scale: mathutils.Vector = armature_obj.matrix_world.to_scale() * blender_to_sm64_scale print("Reading animation pair values.") - armatureObj.animation_data.action = action + armature_obj.animation_data.action = action for frame in range(maxFrame): scene.frame_set(frame) for boneIndex, poseBone in enumerate(animBonesInfo): @@ -75,11 +72,11 @@ def getIntFlags(header): flags: int = int(header.customIntFlags, 16) else: flags: int = 0 - if header.noLoop: + if header.no_loop: flags |= 1 << 0 - if header.backward: + if header.backwards: flags |= 1 << 1 - if header.noAcceleration: + if header.no_acceleration: flags |= 1 << 2 if header.disabled: flags |= 1 << 5 @@ -91,11 +88,11 @@ def getCFlags(header): flags = header.customFlags else: flagList = [] - if header.noLoop: + if header.no_loop: flagList.append("ANIM_FLAG_NOLOOP") - if header.backward: # TODO: Check for refresh 16 here + if header.backwards: # TODO: Check for refresh 16 here flagList.append("ANIM_FLAG_FORWARD") - if header.noAcceleration: + if header.no_acceleration: flagList.append("ANIM_FLAG_NO_ACCEL") if header.disabled: flagList.append("ANIM_FLAG_DISABLED") @@ -109,44 +106,47 @@ def getCFlags(header): return flags -def updateIncludes(levelName, dirName, dirPath, exportProps): - if exportProps.export_type not in ["Custom", "DMA"]: - if exportProps.export_type == "Actor": - groupPathC = os.path.join(dirPath, exportProps.groupName + ".c") - groupPathH = os.path.join(dirPath, exportProps.groupName + ".h") +def updateIncludes(level_name, dirName, dir_path, anim_export_props): + if anim_export_props.export_type not in ["Custom", "DMA"]: + if anim_export_props.export_type == "Actor": + groupPathC = os.path.join(dir_path, anim_export_props.groupName + ".c") + groupPathH = os.path.join(dir_path, anim_export_props.groupName + ".h") writeIfNotFound(groupPathC, '\n#include "' + dirName + '/anims/data.inc.c"', "") writeIfNotFound(groupPathC, '\n#include "' + dirName + '/anims/table.inc.c"', "") writeIfNotFound(groupPathH, '\n#include "' + dirName + '/anim_header.h"', "#endif") - elif exportProps.export_type == "Level": - groupPathC = os.path.join(dirPath, "leveldata.c") - groupPathH = os.path.join(dirPath, "header.h") + elif anim_export_props.export_type == "Level": + groupPathC = os.path.join(dir_path, "leveldata.c") + groupPathH = os.path.join(dir_path, "header.h") - writeIfNotFound(groupPathC, '\n#include "levels/' + levelName + "/" + dirName + '/anims/data.inc.c"', "") - writeIfNotFound(groupPathC, '\n#include "levels/' + levelName + "/" + dirName + '/anims/table.inc.c"', "") + writeIfNotFound(groupPathC, '\n#include "levels/' + level_name + "/" + dirName + '/anims/data.inc.c"', "") + writeIfNotFound(groupPathC, '\n#include "levels/' + level_name + "/" + dirName + '/anims/table.inc.c"', "") writeIfNotFound( - groupPathH, '\n#include "levels/' + levelName + "/" + dirName + '/anim_header.h"', "\n#endif" + groupPathH, '\n#include "levels/' + level_name + "/" + dirName + '/anim_header.h"', "\n#endif" ) -def writeActorHeader(geoDirPath, animsName): - headerPath = os.path.join(geoDirPath, "anim_header.h") +def writeActorHeader(geo_dir_path, animsName): + headerPath = os.path.join(geo_dir_path, "anim_header.h") headerFile = open(headerPath, "w", newline="\n") headerFile.write("extern const struct Animation *const " + animsName + "[];\n") headerFile.close() -def updateTableFile(tablePath: str, tableName: str, headers: list["SM64_AnimHeader"], action, exportProps): - if not os.path.exists(tablePath): - createTableFile(exportProps, tablePath, tableName, []) +def updateTableFile(table_path: str, table_name: str, headers: list["SM64_AnimHeader"], action, anim_export_props): + if not os.path.exists(table_path): + createTableFile(anim_export_props, table_path, table_name, []) # Improved table logic. - with open(tablePath, "r") as readable_file: + with open(table_path, "r") as readable_file: text = readable_file.read() - tableProps = exportProps.table + table_props = anim_export_props.table headerPointers = [f"&{get_anim_name(sm64ExportProps, header, action)}" for header in headers] - tableName, enumListName = exportProps.table.getAnimTableName(exportProps), exportProps.get_enum_list_name() + table_name, enumListName = ( + anim_export_props.table.getAnimTableName(anim_export_props), + anim_export_props.get_enum_list_name(), + ) arrayReader = CParser() arrays = arrayReader.findAllCArraysInFile(text) @@ -154,11 +154,11 @@ def updateTableFile(tablePath: str, tableName: str, headers: list["SM64_AnimHead tableOriginArray, readTable = None, headerPointers enumOriginList, enumsList = None, [] - if tableName in arrays: - tableOriginArray = arrays[tableName] + if table_name in arrays: + tableOriginArray = arrays[table_name] readTable = tableOriginArray.values.copy() - if tableProps.generateEnums: + if table_props.generateEnums: if enumListName in arrays: enumOriginList = arrays[enumListName] enumsList = enumOriginList.values.copy() @@ -200,14 +200,14 @@ def updateTableFile(tablePath: str, tableName: str, headers: list["SM64_AnimHead if headerPointer not in tableArray: tableArray.append(headerPointer) - if tableProps.generateEnums: + if table_props.generateEnums: if enumOriginList: text = text.replace(enumOriginList.originString, enumInC) else: text = f"{enumInC}\n" + text tableInC = arrayToC( - tableName, + table_name, "const struct Animation *const", tableArray, explicitSize=True, @@ -219,17 +219,17 @@ def updateTableFile(tablePath: str, tableName: str, headers: list["SM64_AnimHead else: text += f"\n{tableInC}" - with open(tablePath, "w") as f: + with open(table_path, "w") as f: f.write(text) -def createTableFile(exportProps, tableFilePath, tableName, headerNames): - tableProps = exportProps.table - tableName, enumListName = tableProps.getAnimTableName(exportProps), exportProps.get_enum_list_name() +def createTableFile(anim_export_props, tableFilePath, table_name, header_names): + table_props = anim_export_props.table + table_name, enumListName = table_props.getAnimTableName(anim_export_props), anim_export_props.get_enum_list_name() - if tableProps.generateEnums: + if table_props.generateEnums: tableArray = {} - for headerName in headerNames: + for headerName in header_names: tableArray[anim_name_to_enum(headerName)] = f"&{headerName}" enumsList = set() @@ -237,16 +237,16 @@ def createTableFile(exportProps, tableFilePath, tableName, headerNames): enumsList.add(tableEnumName) else: tableArray = [] - for headerName in headerNames: + for headerName in header_names: tableArray.append(f"&{headerName}") with open(tableFilePath, "w", newline="\n") as tableFile: - if tableProps.generateEnums: + if table_props.generateEnums: tableFile.write(enumToC(enumListName, enumsList)) tableFile.write("\n\n") tableInC = arrayToC( - tableName, + table_name, "const struct Animation *const", tableArray, explicitSize=True, @@ -256,91 +256,93 @@ def createTableFile(exportProps, tableFilePath, tableName, headerNames): tableFile.write(tableInC) -def createDataFile(sm64Props, dataFilePath, table=None): - print(f"Creating new animation data file at {dataFilePath}") - open(dataFilePath, "w", newline="\n") +def createDataFile(sm64Props, data_file_path, table=None): + print(f"Creating new animation data file at {data_file_path}") + open(data_file_path, "w", newline="\n") for action in table.get_actions(): - writeIfNotFound(dataFilePath, '#include "' + action.fast64.sm64.get_anim_file_name(action) + '"\n', "") + writeIfNotFound(data_file_path, '#include "' + action.fast64.sm64.get_anim_file_name(action) + '"\n', "") -def updateDataFile(sm64Props, dataFilePath, animFileName): - print(f"Updating animation data file at {dataFilePath}") - if not os.path.exists(dataFilePath): - createDataFile(sm64Props, dataFilePath) +def updateDataFile(sm64Props, data_file_path, animFileName): + print(f"Updating animation data file at {data_file_path}") + if not os.path.exists(data_file_path): + createDataFile(sm64Props, data_file_path) - writeIfNotFound(dataFilePath, '#include "' + animFileName + '"\n', "") + writeIfNotFound(data_file_path, '#include "' + animFileName + '"\n', "") def updateFiles( sm64Props, - exportProps: "SM64_AnimExportProps", - geoDirPath: str, - animDirPath: str, - dirPath: str, - levelName: str, + anim_export_props: "SM64_AnimExportProps", + geo_dir_path: str, + anim_dir_path: str, + dir_path: str, + level_name: str, dirName: str, animFileName: str, headers: list["SM64_AnimHeader"], skipTableAndData: bool, ): - exportProps = sm64Props.anim_export + anim_export_props = sm64Props.anim_export - tableProps = exportProps.table - tableName = tableProps.getAnimTableName(exportProps) - tablePath = os.path.join(animDirPath, tableProps.getAnimTableFileName(sm64Props)) - dataFilePath = os.path.join(animDirPath, "data.inc.c") + table_props = anim_export_props.table + table_name = table_props.getAnimTableName(anim_export_props) + table_path = os.path.join(anim_dir_path, table_props.getAnimTableFileName(sm64Props)) + data_file_path = os.path.join(anim_dir_path, "data.inc.c") if not skipTableAndData: - updateTableFile(tablePath, tableName, headers, exportProps) - if exportProps.handleIncludes: - updateDataFile(sm64Props, dataFilePath, animFileName) + updateTableFile(table_path, table_name, headers, anim_export_props) + if anim_export_props.handleIncludes: + updateDataFile(sm64Props, data_file_path, animFileName) - if exportProps.handleIncludes: - writeActorHeader(geoDirPath, tableProps.getAnimTableName(exportProps)) - updateIncludes(levelName, dirName, dirPath, exportProps) + if anim_export_props.handleIncludes: + writeActorHeader(geo_dir_path, table_props.getAnimTableName(anim_export_props)) + updateIncludes(level_name, dirName, dir_path, anim_export_props) -def getAnimationPaths(exportProps): - customExport = exportProps.header_type == "Custom" +def getAnimationPaths(anim_export_props): + customExport = anim_export_props.header_type == "Custom" - exportPath, levelName = getPathAndLevel( + exportPath, level_name = getPathAndLevel( customExport, - exportProps.custom_path, - exportProps.level, - exportProps.custom_level, + anim_export_props.custom_path, + anim_export_props.level, + anim_export_props.custom_level, ) if not customExport: apply_basic_tweaks(exportPath) - dirName = toAlnum(exportProps.actorName) + dirName = toAlnum(anim_export_props.actorName) - if exportProps.export_type == "DMA": - animDirPath = os.path.join(exportPath, exportProps.DMAFolder) - dirPath = "" - geoDirPath = "" + if anim_export_props.export_type == "DMA": + anim_dir_path = os.path.join(exportPath, anim_export_props.DMAFolder) + dir_path = "" + geo_dir_path = "" else: - dirPath, texDir = getExportDir(customExport, exportPath, exportProps.export_type, levelName, "", dirName) - geoDirPath = os.path.join(dirPath, dirName) - animDirPath = os.path.join(geoDirPath, "anims") + dir_path, texDir = getExportDir( + customExport, exportPath, anim_export_props.export_type, level_name, "", dirName + ) + geo_dir_path = os.path.join(dir_path, dirName) + anim_dir_path = os.path.join(geo_dir_path, "anims") - if not os.path.exists(dirPath): - os.mkdir(dirPath) - if not os.path.exists(geoDirPath): - os.mkdir(geoDirPath) - if not os.path.exists(animDirPath): - os.mkdir(animDirPath) + if not os.path.exists(dir_path): + os.mkdir(dir_path) + if not os.path.exists(geo_dir_path): + os.mkdir(geo_dir_path) + if not os.path.exists(anim_dir_path): + os.mkdir(anim_dir_path) - return animDirPath, dirPath, geoDirPath, levelName + return anim_dir_path, dir_path, geo_dir_path, level_name -def getAnimationData(armatureObj: bpy.types.Object, scene: bpy.types.Scene, action: bpy.types.Action, headers): +def getAnimationData(armature_obj: bpy.types.Object, scene: bpy.types.Scene, action: bpy.types.Action, headers): sm64Props = scene.fast64.sm64 - exportProps = sm64Props.anim_export + anim_export_props = sm64Props.anim_export action_props = action.fast64.sm64 - stashActionInArmature(armatureObj, action) - animBonesInfo = get_anim_pose_bones(armatureObj) + stashActionInArmature(armature_obj, action) + animBonesInfo = get_anim_pose_bones(armature_obj) sm64Anim = SM64_Anim() @@ -351,22 +353,22 @@ def getAnimationData(armatureObj: bpy.types.Object, scene: bpy.types.Scene, acti action_props.indicesAddress, 16 ) else: - sm64Anim.pairs = getAnimationPairs(scene, action, armatureObj, animBonesInfo) + sm64Anim.pairs = getAnimationPairs(scene, action, armature_obj, animBonesInfo) - sm64Anim.isDmaStructure = exportProps.isDmaStructure(sm64Props) + sm64Anim.isDmaStructure = anim_export_props.isDmaStructure(sm64Props) for header in headers: sm64AnimHeader = SM64_AnimHeader() sm64AnimHeader.data = sm64Anim sm64Anim.headers.append(sm64AnimHeader) - sm64AnimHeader.name = get_anim_name(exportProps.actor_name, action, header) + sm64AnimHeader.name = get_anim_name(anim_export_props.actor_name, action, header) if sm64Anim.isDmaStructure or sm64Props.is_binary_export(): sm64AnimHeader.flags = getIntFlags(header) else: sm64AnimHeader.flags = getCFlags(header) - startFrame, loopStart, loop_end = header.getFrameRange(action) + startFrame, loopStart, loop_end = header.get_frame_range(action) sm64AnimHeader.yDivisor = header.yDivisor sm64AnimHeader.startFrame = startFrame @@ -377,21 +379,21 @@ def getAnimationData(armatureObj: bpy.types.Object, scene: bpy.types.Scene, acti def exportAnimTableInsertableBinary( - armatureObj: bpy.types.Object, + armature_obj: bpy.types.Object, scene: bpy.types.Scene, - tableHeaders: list["SM64_AnimHeaderProps"], + table_headers: list["SM64_AnimHeaderProps"], sm64Anim: SM64_Anim, ) -> str: sm64Props = scene.fast64.sm64 - exportProps = sm64Props.anim_export - tableProps = exportProps.table + anim_export_props = sm64Props.anim_export + table_props = anim_export_props.table data: bytearray = bytearray() ptrs: list[int] = [] tableDict: dict = {} # Allocate table data. - for header in tableHeaders: + for header in table_headers: tableOffset = len(data) ptrs.append(tableOffset) data.extend(bytearray([0x00] * 4)) @@ -402,7 +404,7 @@ def exportAnimTableInsertableBinary( data.extend(NULL.to_bytes(4, byteorder="big", signed=False)) # NULL represents the end of a table - for action in tableProps.get_actions(): # Iterates through all actions in table + for action in table_props.get_actions(): # Iterates through all actions in table offset = len(data) actionHeaders = [] # Get all headers needed for table export in order @@ -414,25 +416,25 @@ def exportAnimTableInsertableBinary( data[tableOffset : tableOffset + 4] = headerOffset.to_bytes(4, byteorder="big", signed=False) actionHeaders.append(header) - sm64Anim = getAnimationData(armatureObj, scene, action, actionHeaders) - animResult = sm64Anim.toBinary(exportProps.mergeValues, False, offset) + sm64Anim = getAnimationData(armature_obj, scene, action, actionHeaders) + animResult = sm64Anim.toBinary(anim_export_props.mergeValues, False, offset) data.extend(animResult[0]) ptrs.extend(animResult[1]) - directory = os.path.abspath(exportProps.binary.insertableDirectory) - animTableFileName = tableProps.getAnimTableFileName(sm64Props) + directory = os.path.abspath(anim_export_props.binary.insertableDirectory) + animTableFileName = table_props.getAnimTableFileName(sm64Props) writeInsertableFile(os.path.join(directory, animTableFileName), 2, ptrs, 0, data) return "Success!" def exportAnimInsertableBinary(action: bpy.types.Action, sm64Props, sm64Anim: SM64_Anim) -> str: - exportProps = sm64Props.anim_export + anim_export_props = sm64Props.anim_export - data, ptrs = sm64Anim.toBinary(exportProps.mergeValues, exportProps.isDmaStructure(sm64Props), 0) + data, ptrs = sm64Anim.toBinary(anim_export_props.mergeValues, anim_export_props.isDmaStructure(sm64Props), 0) - path = os.path.abspath(exportProps.binary.insertableDirectory) + path = os.path.abspath(anim_export_props.binary.insertableDirectory) writeInsertableFile(path, 2, ptrs, 0, data) return "Success!" @@ -445,7 +447,7 @@ def exportAnimC( skipTableAndData: bool, ) -> str: sm64Props = scene.fast64.sm64 - exportProps = sm64Props.anim_export + anim_export_props = sm64Props.anim_export action_props = action.fast64.sm64 if action_props.referenceTables: @@ -454,33 +456,33 @@ def exportAnimC( dataName: str = toAlnum(f"anim_{action.name}") sm64Anim.valuesReference, sm64Anim.indicesReference = f"{dataName}_values", f"{dataName}_indices" - animDirPath, dirPath, geoDirPath, levelName = getAnimationPaths(exportProps) + anim_dir_path, dir_path, geo_dir_path, level_name = getAnimationPaths(anim_export_props) animFileName = action_props.get_anim_file_name(action) isDmaStructure = False - if exportProps.export_type == "DMA": - isDmaStructure = exportProps.use_dma_structure + if anim_export_props.export_type == "DMA": + isDmaStructure = anim_export_props.use_dma_structure else: - if exportProps.export_type == "Custom": - isDmaStructure = exportProps.use_dma_structure - elif exportProps.handleTables: + if anim_export_props.export_type == "Custom": + isDmaStructure = anim_export_props.use_dma_structure + elif anim_export_props.handleTables: updateFiles( sm64Props, - geoDirPath, - animDirPath, - dirPath, - levelName, - toAlnum(exportProps.actorName), + geo_dir_path, + anim_dir_path, + dir_path, + level_name, + toAlnum(anim_export_props.actorName), animFileName, sm64Anim.headers, skipTableAndData, ) - animPath = os.path.join(animDirPath, animFileName) + animPath = os.path.join(anim_dir_path, animFileName) - headersC = sm64Anim.headersToC(exportProps.designated and not isDmaStructure, isDmaStructure) - dataC = sm64Anim.toC(exportProps.mergeValues, exportProps.useHexValues) + headersC = sm64Anim.headersToC(anim_export_props.designated and not isDmaStructure, isDmaStructure) + dataC = sm64Anim.toC(anim_export_props.mergeValues, anim_export_props.useHexValues) with open(animPath, "w", newline="\n") as animFile: if isDmaStructure: @@ -498,11 +500,11 @@ def exportAnimC( def exportAnimation( - armatureObj: bpy.types.Context, scene: bpy.types.Scene, action: bpy.types.Action, skipTableAndData: bool = False + armature_obj: bpy.types.Context, scene: bpy.types.Scene, action: bpy.types.Action, skipTableAndData: bool = False ): sm64Props = scene.fast64.sm64 - sm64Anim = getAnimationData(armatureObj, scene, action, action.fast64.sm64.get_headers()) + sm64Anim = getAnimationData(armature_obj, scene, action, action.fast64.sm64.get_headers()) if sm64Props.export_type == "C": exportAnimC(action, scene, sm64Anim, skipTableAndData) else: @@ -511,32 +513,32 @@ def exportAnimation( return "Sucess!" -def exportAnimationTable(context: bpy.types.Context, armatureObj: bpy.types.Object): +def exportAnimationTable(context: bpy.types.Context, armature_obj: bpy.types.Object): scene = context.scene sm64Props = scene.fast64.sm64 - exportProps = sm64Props.anim_export - tableProps = exportProps.table + anim_export_props = sm64Props.anim_export + table_props = anim_export_props.table - tableHeaders = tableProps.get_headers() - headerNames = [get_anim_name(exportProps, header) for header in tableHeaders] + table_headers = table_props.get_headers() + header_names = [get_anim_name(anim_export_props, header) for header in table_headers] if sm64Props.export_type == "C": - for action in tableProps.get_actions(): - exportAnimation(context, scene, action, tableProps.overrideFiles) + for action in table_props.get_actions(): + exportAnimation(context, scene, action, table_props.overrideFiles) elif sm64Props.export_type == "Insertable Binary": - return exportAnimTableInsertableBinary(armatureObj, scene, tableHeaders, sm64Props) + return exportAnimTableInsertableBinary(armature_obj, scene, table_headers, sm64Props) else: return - if tableProps.overrideFiles: - animDirPath, dirPath, geoDirPath, levelName = getAnimationPaths(sm64Props) + if table_props.overrideFiles: + anim_dir_path = getAnimationPaths(sm64Props)[0] - tableName = tableProps.getAnimTableName(exportProps) - tablePath = os.path.join(animDirPath, "table.inc.c") - dataFilePath = os.path.join(animDirPath, "data.inc.c") + table_name = table_props.getAnimTableName(anim_export_props) + table_path = os.path.join(anim_dir_path, "table.inc.c") + data_file_path = os.path.join(anim_dir_path, "data.inc.c") - createTableFile(exportProps, tablePath, tableName, headerNames) - if exportProps.handleIncludes: - createDataFile(sm64Props, dataFilePath, tableProps) + createTableFile(anim_export_props, table_path, table_name, header_names) + if anim_export_props.handleIncludes: + createDataFile(sm64Props, data_file_path, table_props) return "Sucess!" diff --git a/fast64_internal/sm64/animation/importing.py b/fast64_internal/sm64/animation/importing.py index 03322c78f..dc125a95b 100644 --- a/fast64_internal/sm64/animation/importing.py +++ b/fast64_internal/sm64/animation/importing.py @@ -90,13 +90,15 @@ def read_rotation(self, pairs: list[SM64_AnimPair]): self.rotation.append(e.to_quaternion()) -def animation_data_to_blender(armature_obj: Object, blender_to_sm64_scale: float, anim_import: SM64_Anim): +def animation_data_to_blender( + armature_obj: Object, blender_to_sm64_scale: float, anim_import: SM64_Anim, remove_name_footer: bool = True +): anim_bones = get_anim_pose_bones(armature_obj) for pose_bone in anim_bones: pose_bone.rotation_mode = "QUATERNION" action = bpy.data.actions.new("") - anim_import.to_action(action) + anim_import.to_action(action, remove_name_footer) if armature_obj.animation_data is None: armature_obj.animation_data_create() diff --git a/fast64_internal/sm64/animation/operators.py b/fast64_internal/sm64/animation/operators.py index dd43fd0f1..ce850dd1c 100644 --- a/fast64_internal/sm64/animation/operators.py +++ b/fast64_internal/sm64/animation/operators.py @@ -60,14 +60,14 @@ def emulateNoLoop(scene): exportProps.played_loop_start, exportProps.played_loop_end, ) - if header.backward: + if header.backwards: if frame < loop_start: - if header.noLoop: + if header.no_loop: frame = loop_start else: frame = loop_end - 1 elif frame >= loop_end: - if header.noLoop: + if header.no_loop: frame = loop_end - 1 else: frame = loop_start @@ -95,7 +95,7 @@ def executeOperation(self, context): else: played_action = exportProps.selectedAction header = played_action.fast64.sm64.headerFromIndex(self.played_header) - start_frame, loop_start, loop_end = header.getFrameRange(played_action) + start_frame, loop_start, loop_end = header.get_frame_range(played_action) scene.frame_set(start_frame) scene.render.fps = 30 @@ -386,10 +386,17 @@ def execute_operator(self, context): table, ) elif anim_import_props.import_type == "C": - import_c_animations(abspath(anim_import_props.path), animations, table) + import_c_animations( + abspath(anim_import_props.path), animations, table + ) for data in animations.values(): - animation_data_to_blender(context.selected_objects[0], sm64_props.blender_to_sm64_scale, data) + animation_data_to_blender( + context.selected_objects[0], + sm64_props.blender_to_sm64_scale, + data, + anim_import_props.remove_name_footer, + ) table.to_blender(sm64_props.anim_export.table.elements) self.report({"INFO"}, "Success!") diff --git a/fast64_internal/sm64/animation/properties.py b/fast64_internal/sm64/animation/properties.py index 7384579d3..41cc1da48 100644 --- a/fast64_internal/sm64/animation/properties.py +++ b/fast64_internal/sm64/animation/properties.py @@ -33,11 +33,7 @@ level_enums, enumLevelNames, ) -from .utility import ( - anim_name_to_enum, - get_anim_name, - get_max_frame, -) +from .utility import anim_name_to_enum, get_anim_name from ...utility_anim import getFrameInterval from ...utility import ( PluginError, @@ -94,9 +90,9 @@ class SM64_AnimHeaderProps(bpy.types.PropertyGroup): customName: StringProperty(name="Name", default="anim_00") overwrites: PointerProperty(type=SM64_HeaderOverwrites) - manualFrameRange: BoolProperty(name="Manual Frame Range") - startFrame: IntProperty(name="Start Frame", min=0, max=MAX_S16) - loopStart: IntProperty(name="Loop Start", min=0, max=MAX_S16) + manual_frame_range: BoolProperty(name="Manual Frame Range") + start_frame: IntProperty(name="Start Frame", min=0, max=MAX_S16) + loop_start: IntProperty(name="Loop Start", min=0, max=MAX_S16) loop_end: IntProperty(name="Loop End", min=0, max=MAX_S16) yDivisor: IntProperty( @@ -108,14 +104,14 @@ class SM64_AnimHeaderProps(bpy.types.PropertyGroup): # Flags setCustomFlags: BoolProperty(name="Set Custom Flags") - noLoop: BoolProperty( + no_loop: BoolProperty( name="No Loop", description="ANIM_FLAG_NOLOOP\nOnce the animation reachs the loop end it will not repeat" ) - backward: BoolProperty( - name='"Backward"', - description="(ANIM_FLAG_FORWARD or ANIM_FLAG_BACKWARD in refresh 16\nThe behaviour of this flag is conflicting but this is tipically used with animations which use acceleration to play an animation backwards", + backwards: BoolProperty( + name="Backwards", + description="(ANIM_FLAG_FORWARD or ANIM_FLAG_BACKWARD in refresh 16\nTipically used with animations which use acceleration to play an animation backwards", ) - noAcceleration: BoolProperty( + no_acceleration: BoolProperty( name="No Acceleration", description="ANIM_FLAG_NO_ACCEL\nAcceleration will not be used when computing which animation frame should be used", ) @@ -124,14 +120,27 @@ class SM64_AnimHeaderProps(bpy.types.PropertyGroup): description="ANIM_FLAG_DISABLED\nDisables the use of animation translation for shadows", ) - customFlags: StringProperty(name="Flags", default="ANIM_FLAG_NOLOOP") + only_horizontal_trans: BoolProperty( + name="Only Horizontal Translation", + description="ANIM_FLAG_HOR_TRANS\nSkips horizontal animation translation", + ) + only_vertical_trans: BoolProperty( + name="Only Vertical Translation", + description="ANIM_FLAG_VERT_TRANS\nSkips vertical animation translation", + ) + no_trans: BoolProperty( + name="No Translation", + description="ANIM_FLAG_NO_TRANS\nSkips animation translation", + ) - def getFrameRange(self, action: Action): - if self.manualFrameRange: - return self.startFrame, self.loopStart, self.loop_end + customFlags: StringProperty(name="Flags", default="ANIM_FLAG_UNUSED") - loopStart, loop_end = getFrameInterval(action) - return 0, loopStart, loop_end + def get_frame_range(self, action: Action): + if self.manual_frame_range: + return self.start_frame, self.loop_start, self.loop_end + + loop_start, loop_end = getFrameInterval(action) + return 0, loop_start, loop_end def get_anim_enum(self, actor_name: str, action: bpy.types.Action): return anim_name_to_enum(get_anim_name(actor_name, action, self)) @@ -154,40 +163,59 @@ def draw_flag_props(self, layout: UILayout, sm64Props): if self.setCustomFlags: col.prop(self, "customFlags") return + col.separator() row = col.row() - row.prop(self, "noAcceleration") - row.prop(self, "noLoop") + row.prop(self, "no_acceleration") + row.prop(self, "no_loop") row = col.row() row.prop(self, "disabled") - row.prop(self, "backward") + row.prop(self, "backwards") + + row = col.row() + hor_col = row.column() + hor_col.enabled = not self.only_horizontal_trans and not self.no_trans + hor_col.prop(self, "only_vertical_trans") + + no_col = row.column() + no_col.enabled = not self.only_horizontal_trans and not self.only_vertical_trans + no_col.prop(self, "no_trans") + + vert_col = col.column() + vert_col.enabled = not self.only_vertical_trans and not self.no_trans + vert_col.prop(self, "only_horizontal_trans") def draw_frame_range(self, layout: UILayout): col = layout.column() - col.prop(self, "manualFrameRange") - if self.manualFrameRange: - prop_split(col, self, "startFrame", "Start Frame") + + col.prop(self, "manual_frame_range") + if self.manual_frame_range: row = col.row() - prop_split(row, self, "loopStart", "Loop Start") + prop_split(row, self, "loop_start", "Loop Start") prop_split(row, self, "loop_end", "Loop End") + prop_split(col, self, "start_frame", "Start") - def drawNameSettings(self, layout: UILayout, sm64_props): + def draw_names(self, layout: UILayout, sm64_props): anim_export_props = sm64_props.anim_export if sm64_props.is_binary_export(): return - nameSplit = layout.split(factor=0.4) - nameSplit.prop(self, "overrideName") + col = layout.column() + + name_split = col.split(factor=0.4) + name_split.prop(self, "overrideName") if self.overrideName: - nameSplit.prop(self, "customName", text="") + name_split.prop(self, "customName", text="") else: - nameSplit.box().label( - text=f"Name: {get_anim_name(anim_export_props.actor_name, anim_export_props.selected_action, self)}" + auto_name_box = name_split.row().box() + auto_name_box.scale_y = 0.5 + auto_name_box.label( + text=get_anim_name(anim_export_props.actor_name, anim_export_props.selected_action, self) ) if anim_export_props.table.generateEnums: - layout.box().label( + col.label( text=f"Enum: {self.get_anim_enum(anim_export_props.actor_name, anim_export_props.selected_action)}" ) @@ -196,7 +224,7 @@ def draw_props(self, context: bpy.types.Context, action: bpy.types.Action, layou exportProps: SM64_AnimExportProps = context.scene.fast64.sm64.anim_export col = layout.column() - previewOp = col.operator(SM64_PreviewAnimOperator.bl_idname) + previewOp = col.operator(SM64_PreviewAnimOperator.bl_idname, icon="PLAY") previewOp.played_header = self.header_variant previewOp.played_action = action.name @@ -207,7 +235,7 @@ def draw_props(self, context: bpy.types.Context, action: bpy.types.Action, layou if sm64Props.export_type == "Binary": self.overwrites.draw_props(col.box(), exportProps.binary) else: - self.drawNameSettings(col, sm64Props) + self.draw_names(col, sm64Props) self.draw_frame_range(col.box()) self.draw_flag_props(col.box(), sm64Props) @@ -256,6 +284,17 @@ def get_anim_file_name(self, action: Action): return f"anim_{action.name}.inc.c" + def get_max_frame(self, action: Action) -> int: + if self.overrideMaxFrame: + return self.customMaxFrame + + loop_ends: list[int] = [getFrameInterval(action)[1]] + for header in self.get_headers(): + loop_end = header.get_frame_range(action)[2] + loop_ends.append(loop_end) + + return max(loop_ends) + def drawHeaderVariant( self, context, @@ -325,11 +364,11 @@ def drawReferences(self, layout: UILayout, sm64Props): shouldShow = not sm64Props.anim_export.binary.isDMA or not sm64Props.is_binary_export() if not shouldShow: return - box = col.box().column() - box.prop(self, "referenceTables") + col.prop(self, "referenceTables") if not self.referenceTables: return + box = col.box().column() if not sm64Props.is_binary_export(): prop_split(box, self, "indicesTable", "Indices Table") prop_split(box, self, "valuesTable", "Value Table") @@ -359,9 +398,9 @@ def draw_props(self, layout: UILayout, context: Context, action: Action): if self.overrideFileName: nameSplit.prop(self, "customFileName", text="") else: - nameSplit.box().label(text=f"{self.get_anim_file_name(action)}") - - self.drawReferences(col, sm64Props) + box = nameSplit.row().box() + box.scale_y = 0.5 + box.label(text=self.get_anim_file_name(action)) if not self.referenceTables: max_frame_split = col.split(factor=0.4) @@ -369,7 +408,13 @@ def draw_props(self, layout: UILayout, context: Context, action: Action): if self.overrideMaxFrame: max_frame_split.prop(self, "customMaxFrame", text="") else: - max_frame_split.box().label(text=f"{get_max_frame(action)}") + box = max_frame_split.row().box() + box.scale_y = 0.5 + box.label(text=f"{action.fast64.sm64.get_max_frame(action)}") + + self.drawReferences(col, sm64Props) + + col.separator() self.header.draw_props(context, action, col) self.drawVariants(col, context, action) @@ -443,7 +488,9 @@ def drawTableNameSettings(self, layout: UILayout, context: Context): if self.overrideTableName: nameSplit.prop(self, "customTableName", text="") else: - nameSplit.box().label(text=self.getAnimTableName(sm64Props.anim_export.actor_name)) + box = nameSplit.row().box() + box.scale_y = 0.5 + box.label(text=self.getAnimTableName(sm64Props.anim_export.actor_name)) def drawTableElement(self, layout: UILayout, sm64Props, tableIndex: int, table_element): exportProps: "SM64_AnimExportProps" = sm64Props.anim_export @@ -702,6 +749,9 @@ class SM64_AnimImportProps(bpy.types.PropertyGroup): marioAnimation: IntProperty(name="Selected Preset Mario Animation", default=0) path: StringProperty(name="Path", subtype="FILE_PATH", default="U:/home/user/sm64/assets/anims/") + remove_name_footer: BoolProperty( + name="Remove Name Footers", description='Remove "anim_" from imported animations', default=True + ) def isBinaryImport(self): return self.import_type == "Binary" @@ -741,8 +791,9 @@ def drawBinary(self, layout: bpy.types.UILayout): def drawC(self, layout: bpy.types.UILayout): col = layout.column() - col.prop(self, "path") + prop_split(col, self, "path", "Path") path_ui_warnings(col, self.path) + col.prop(self, "remove_name_footer") def draw_props(self, layout: bpy.types.UILayout): col = layout.column() diff --git a/fast64_internal/sm64/animation/pylint_delete_before_pr.json b/fast64_internal/sm64/animation/pylint_delete_before_pr.json index d273fc64a..e60b541e5 100644 --- a/fast64_internal/sm64/animation/pylint_delete_before_pr.json +++ b/fast64_internal/sm64/animation/pylint_delete_before_pr.json @@ -3123,7 +3123,7 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "", - "line": 96, + "line": 98, "column": 30, "endLine": null, "endColumn": null, @@ -3132,26 +3132,13 @@ "message": "TODO: Check for refresh 16 here", "message-id": "W0511" }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "", - "line": 1, - "column": 0, - "endLine": 1, - "endColumn": 25, - "path": "exporting.py", - "symbol": "multiple-imports", - "message": "Multiple imports on one line (bpy, mathutils, os)", - "message-id": "C0410" - }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 25, + "line": 27, "column": 0, - "endLine": 25, + "endLine": 27, "endColumn": 21, "path": "exporting.py", "symbol": "invalid-name", @@ -3162,22 +3149,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 28, - "column": 4, - "endLine": 28, - "endColumn": 33, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"armatureObj\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPairs", - "line": 29, + "line": 31, "column": 4, - "endLine": 29, + "endLine": 31, "endColumn": 43, "path": "exporting.py", "symbol": "invalid-name", @@ -3188,9 +3162,9 @@ "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 25, + "line": 27, "column": 0, - "endLine": 25, + "endLine": 27, "endColumn": 21, "path": "exporting.py", "symbol": "too-many-locals", @@ -3201,9 +3175,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 31, + "line": 33, "column": 4, - "endLine": 31, + "endLine": 33, "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", @@ -3214,9 +3188,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 34, + "line": 36, "column": 4, - "endLine": 34, + "endLine": 36, "endColumn": 12, "path": "exporting.py", "symbol": "invalid-name", @@ -3227,9 +3201,9 @@ "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 34, + "line": 36, "column": 15, - "endLine": 34, + "endLine": 36, "endColumn": 43, "path": "exporting.py", "symbol": "too-many-function-args", @@ -3240,9 +3214,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 41, + "line": 43, "column": 4, - "endLine": 41, + "endLine": 43, "endColumn": 14, "path": "exporting.py", "symbol": "invalid-name", @@ -3253,9 +3227,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 41, + "line": 43, "column": 16, - "endLine": 41, + "endLine": 43, "endColumn": 26, "path": "exporting.py", "symbol": "invalid-name", @@ -3266,9 +3240,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 41, + "line": 43, "column": 28, - "endLine": 41, + "endLine": 43, "endColumn": 38, "path": "exporting.py", "symbol": "invalid-name", @@ -3279,9 +3253,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 43, + "line": 45, "column": 4, - "endLine": 43, + "endLine": 45, "endColumn": 17, "path": "exporting.py", "symbol": "invalid-name", @@ -3292,9 +3266,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 44, + "line": 46, "column": 8, - "endLine": 44, + "endLine": 46, "endColumn": 16, "path": "exporting.py", "symbol": "invalid-name", @@ -3305,9 +3279,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 45, + "line": 47, "column": 8, - "endLine": 45, + "endLine": 47, "endColumn": 16, "path": "exporting.py", "symbol": "invalid-name", @@ -3318,9 +3292,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 60, + "line": 62, "column": 12, - "endLine": 60, + "endLine": 62, "endColumn": 21, "path": "exporting.py", "symbol": "invalid-name", @@ -3331,9 +3305,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 60, + "line": 62, "column": 23, - "endLine": 60, + "endLine": 62, "endColumn": 31, "path": "exporting.py", "symbol": "invalid-name", @@ -3344,9 +3318,9 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPairs", - "line": 44, + "line": 46, "column": 8, - "endLine": 44, + "endLine": 46, "endColumn": 16, "path": "exporting.py", "symbol": "unused-variable", @@ -3357,9 +3331,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getIntFlags", - "line": 73, + "line": 75, "column": 0, - "endLine": 73, + "endLine": 75, "endColumn": 15, "path": "exporting.py", "symbol": "invalid-name", @@ -3370,9 +3344,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getCFlags", - "line": 89, + "line": 91, "column": 0, - "endLine": 89, + "endLine": 91, "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", @@ -3383,9 +3357,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getCFlags", - "line": 93, + "line": 95, "column": 8, - "endLine": 93, + "endLine": 95, "endColumn": 16, "path": "exporting.py", "symbol": "invalid-name", @@ -3396,9 +3370,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateIncludes", - "line": 112, + "line": 114, "column": 0, - "endLine": 112, + "endLine": 114, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -3409,23 +3383,10 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateIncludes", - "line": 112, - "column": 19, - "endLine": 112, - "endColumn": 28, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"levelName\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateIncludes", - "line": 112, - "column": 30, - "endLine": 112, - "endColumn": 37, + "line": 114, + "column": 31, + "endLine": 114, + "endColumn": 38, "path": "exporting.py", "symbol": "invalid-name", "message": "Argument name \"dirName\" doesn't conform to snake_case naming style", @@ -3435,35 +3396,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateIncludes", - "line": 112, - "column": 39, - "endLine": 112, - "endColumn": 46, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"dirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateIncludes", - "line": 112, - "column": 48, - "endLine": 112, - "endColumn": 59, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"exportProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateIncludes", - "line": 115, + "line": 117, "column": 12, - "endLine": 115, + "endLine": 117, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -3474,9 +3409,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateIncludes", - "line": 116, + "line": 118, "column": 12, - "endLine": 116, + "endLine": 118, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -3487,9 +3422,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateIncludes", - "line": 122, + "line": 124, "column": 12, - "endLine": 122, + "endLine": 124, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -3500,9 +3435,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateIncludes", - "line": 123, + "line": 125, "column": 12, - "endLine": 123, + "endLine": 125, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -3513,9 +3448,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "writeActorHeader", - "line": 132, + "line": 134, "column": 0, - "endLine": 132, + "endLine": 134, "endColumn": 20, "path": "exporting.py", "symbol": "invalid-name", @@ -3526,23 +3461,10 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "writeActorHeader", - "line": 132, - "column": 21, - "endLine": 132, - "endColumn": 31, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"geoDirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "writeActorHeader", - "line": 132, - "column": 33, - "endLine": 132, - "endColumn": 42, + "line": 134, + "column": 35, + "endLine": 134, + "endColumn": 44, "path": "exporting.py", "symbol": "invalid-name", "message": "Argument name \"animsName\" doesn't conform to snake_case naming style", @@ -3552,9 +3474,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "writeActorHeader", - "line": 133, + "line": 135, "column": 4, - "endLine": 133, + "endLine": 135, "endColumn": 14, "path": "exporting.py", "symbol": "invalid-name", @@ -3565,9 +3487,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "writeActorHeader", - "line": 134, + "line": 136, "column": 4, - "endLine": 134, + "endLine": 136, "endColumn": 14, "path": "exporting.py", "symbol": "invalid-name", @@ -3578,9 +3500,9 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "writeActorHeader", - "line": 134, + "line": 136, "column": 17, - "endLine": 134, + "endLine": 136, "endColumn": 52, "path": "exporting.py", "symbol": "unspecified-encoding", @@ -3591,9 +3513,9 @@ "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "writeActorHeader", - "line": 134, + "line": 136, "column": 17, - "endLine": 134, + "endLine": 136, "endColumn": 52, "path": "exporting.py", "symbol": "consider-using-with", @@ -3604,61 +3526,22 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 139, + "line": 141, "column": 0, - "endLine": 139, + "endLine": 141, "endColumn": 19, "path": "exporting.py", "symbol": "invalid-name", "message": "Function name \"updateTableFile\" doesn't conform to snake_case naming style", "message-id": "C0103" }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateTableFile", - "line": 139, - "column": 20, - "endLine": 139, - "endColumn": 34, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"tablePath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateTableFile", - "line": 139, - "column": 36, - "endLine": 139, - "endColumn": 50, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"tableName\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateTableFile", - "line": 139, - "column": 94, - "endLine": 139, - "endColumn": 105, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"exportProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, { "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 139, + "line": 141, "column": 0, - "endLine": 139, + "endLine": 141, "endColumn": 19, "path": "exporting.py", "symbol": "too-many-locals", @@ -3669,10 +3552,10 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 144, + "line": 146, "column": 9, - "endLine": 144, - "endColumn": 29, + "endLine": 146, + "endColumn": 30, "path": "exporting.py", "symbol": "unspecified-encoding", "message": "Using open without explicitly specifying an encoding", @@ -3682,22 +3565,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 147, - "column": 4, - "endLine": 147, - "endColumn": 14, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"tableProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateTableFile", - "line": 148, + "line": 150, "column": 4, - "endLine": 148, + "endLine": 150, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -3708,9 +3578,9 @@ "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 148, + "line": 150, "column": 40, - "endLine": 148, + "endLine": 150, "endColumn": 55, "path": "exporting.py", "symbol": "undefined-variable", @@ -3721,10 +3591,10 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 149, - "column": 15, - "endLine": 149, - "endColumn": 27, + "line": 151, + "column": 16, + "endLine": 151, + "endColumn": 28, "path": "exporting.py", "symbol": "invalid-name", "message": "Variable name \"enumListName\" doesn't conform to snake_case naming style", @@ -3734,9 +3604,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 151, + "line": 156, "column": 4, - "endLine": 151, + "endLine": 156, "endColumn": 15, "path": "exporting.py", "symbol": "invalid-name", @@ -3747,9 +3617,9 @@ "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 152, + "line": 157, "column": 13, - "endLine": 152, + "endLine": 157, "endColumn": 45, "path": "exporting.py", "symbol": "no-member", @@ -3760,9 +3630,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 154, + "line": 159, "column": 4, - "endLine": 154, + "endLine": 159, "endColumn": 20, "path": "exporting.py", "symbol": "invalid-name", @@ -3773,9 +3643,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 154, + "line": 159, "column": 22, - "endLine": 154, + "endLine": 159, "endColumn": 31, "path": "exporting.py", "symbol": "invalid-name", @@ -3786,9 +3656,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 155, + "line": 160, "column": 4, - "endLine": 155, + "endLine": 160, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -3799,9 +3669,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 155, + "line": 160, "column": 20, - "endLine": 155, + "endLine": 160, "endColumn": 29, "path": "exporting.py", "symbol": "invalid-name", @@ -3812,9 +3682,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 158, + "line": 163, "column": 8, - "endLine": 158, + "endLine": 163, "endColumn": 24, "path": "exporting.py", "symbol": "invalid-name", @@ -3825,9 +3695,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 159, + "line": 164, "column": 8, - "endLine": 159, + "endLine": 164, "endColumn": 17, "path": "exporting.py", "symbol": "invalid-name", @@ -3838,9 +3708,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 163, + "line": 168, "column": 12, - "endLine": 163, + "endLine": 168, "endColumn": 26, "path": "exporting.py", "symbol": "invalid-name", @@ -3851,9 +3721,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 164, + "line": 169, "column": 12, - "endLine": 164, + "endLine": 169, "endColumn": 21, "path": "exporting.py", "symbol": "invalid-name", @@ -3864,9 +3734,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 166, + "line": 171, "column": 8, - "endLine": 166, + "endLine": 171, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -3877,9 +3747,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 177, + "line": 182, "column": 12, - "endLine": 177, + "endLine": 182, "endColumn": 25, "path": "exporting.py", "symbol": "invalid-name", @@ -3890,9 +3760,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 178, + "line": 183, "column": 12, - "endLine": 178, + "endLine": 183, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -3903,9 +3773,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 181, + "line": 186, "column": 12, - "endLine": 181, + "endLine": 186, "endColumn": 25, "path": "exporting.py", "symbol": "invalid-name", @@ -3916,9 +3786,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 181, + "line": 186, "column": 29, - "endLine": 181, + "endLine": 186, "endColumn": 46, "path": "exporting.py", "symbol": "consider-iterating-dictionary", @@ -3929,9 +3799,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 190, + "line": 195, "column": 8, - "endLine": 190, + "endLine": 195, "endColumn": 15, "path": "exporting.py", "symbol": "invalid-name", @@ -3942,9 +3812,9 @@ "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 190, + "line": 195, "column": 18, - "endLine": 190, + "endLine": 195, "endColumn": 25, "path": "exporting.py", "symbol": "undefined-variable", @@ -3955,9 +3825,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 192, + "line": 197, "column": 8, - "endLine": 192, + "endLine": 197, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -3968,9 +3838,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 199, + "line": 204, "column": 12, - "endLine": 199, + "endLine": 204, "endColumn": 25, "path": "exporting.py", "symbol": "invalid-name", @@ -3981,9 +3851,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 209, + "line": 214, "column": 4, - "endLine": 209, + "endLine": 214, "endColumn": 12, "path": "exporting.py", "symbol": "invalid-name", @@ -3994,9 +3864,9 @@ "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 209, + "line": 214, "column": 15, - "endLine": 209, + "endLine": 214, "endColumn": 23, "path": "exporting.py", "symbol": "undefined-variable", @@ -4007,10 +3877,10 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 222, + "line": 227, "column": 9, - "endLine": 222, - "endColumn": 29, + "endLine": 227, + "endColumn": 30, "path": "exporting.py", "symbol": "unspecified-encoding", "message": "Using open without explicitly specifying an encoding", @@ -4020,9 +3890,9 @@ "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 139, + "line": 141, "column": 0, - "endLine": 139, + "endLine": 141, "endColumn": 19, "path": "exporting.py", "symbol": "too-many-branches", @@ -4033,9 +3903,9 @@ "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateTableFile", - "line": 139, + "line": 141, "column": 0, - "endLine": 139, + "endLine": 141, "endColumn": 19, "path": "exporting.py", "symbol": "too-many-statements", @@ -4046,9 +3916,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 226, + "line": 231, "column": 0, - "endLine": 226, + "endLine": 231, "endColumn": 19, "path": "exporting.py", "symbol": "invalid-name", @@ -4059,87 +3929,35 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 226, - "column": 20, - "endLine": 226, - "endColumn": 31, + "line": 231, + "column": 39, + "endLine": 231, + "endColumn": 52, "path": "exporting.py", "symbol": "invalid-name", - "message": "Argument name \"exportProps\" doesn't conform to snake_case naming style", + "message": "Argument name \"tableFilePath\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 226, - "column": 33, - "endLine": 226, - "endColumn": 46, + "line": 233, + "column": 16, + "endLine": 233, + "endColumn": 28, "path": "exporting.py", "symbol": "invalid-name", - "message": "Argument name \"tableFilePath\" doesn't conform to snake_case naming style", + "message": "Variable name \"enumListName\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 226, - "column": 48, - "endLine": 226, - "endColumn": 57, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"tableName\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "createTableFile", - "line": 226, - "column": 59, - "endLine": 226, - "endColumn": 70, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"headerNames\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "createTableFile", - "line": 227, - "column": 4, - "endLine": 227, - "endColumn": 14, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"tableProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "createTableFile", - "line": 228, - "column": 15, - "endLine": 228, - "endColumn": 27, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"enumListName\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "createTableFile", - "line": 231, + "line": 236, "column": 8, - "endLine": 231, + "endLine": 236, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -4150,9 +3968,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 232, + "line": 237, "column": 12, - "endLine": 232, + "endLine": 237, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -4163,9 +3981,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 235, + "line": 240, "column": 8, - "endLine": 235, + "endLine": 240, "endColumn": 17, "path": "exporting.py", "symbol": "invalid-name", @@ -4176,9 +3994,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 236, + "line": 241, "column": 12, - "endLine": 236, + "endLine": 241, "endColumn": 25, "path": "exporting.py", "symbol": "invalid-name", @@ -4189,9 +4007,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 236, + "line": 241, "column": 29, - "endLine": 236, + "endLine": 241, "endColumn": 46, "path": "exporting.py", "symbol": "consider-iterating-dictionary", @@ -4202,9 +4020,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 239, + "line": 244, "column": 8, - "endLine": 239, + "endLine": 244, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -4215,9 +4033,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 240, + "line": 245, "column": 12, - "endLine": 240, + "endLine": 245, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -4228,9 +4046,9 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 243, + "line": 248, "column": 9, - "endLine": 243, + "endLine": 248, "endColumn": 47, "path": "exporting.py", "symbol": "unspecified-encoding", @@ -4241,9 +4059,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 243, + "line": 248, "column": 51, - "endLine": 243, + "endLine": 248, "endColumn": 60, "path": "exporting.py", "symbol": "invalid-name", @@ -4254,9 +4072,9 @@ "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 245, + "line": 250, "column": 28, - "endLine": 245, + "endLine": 250, "endColumn": 35, "path": "exporting.py", "symbol": "undefined-variable", @@ -4267,9 +4085,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 248, + "line": 253, "column": 8, - "endLine": 248, + "endLine": 253, "endColumn": 16, "path": "exporting.py", "symbol": "invalid-name", @@ -4280,9 +4098,9 @@ "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createTableFile", - "line": 248, + "line": 253, "column": 19, - "endLine": 248, + "endLine": 253, "endColumn": 27, "path": "exporting.py", "symbol": "undefined-variable", @@ -4293,9 +4111,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createDataFile", - "line": 259, + "line": 264, "column": 0, - "endLine": 259, + "endLine": 264, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -4306,36 +4124,23 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createDataFile", - "line": 259, + "line": 264, "column": 19, - "endLine": 259, + "endLine": 264, "endColumn": 28, "path": "exporting.py", "symbol": "invalid-name", "message": "Argument name \"sm64Props\" doesn't conform to snake_case naming style", "message-id": "C0103" }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "createDataFile", - "line": 259, - "column": 30, - "endLine": 259, - "endColumn": 42, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"dataFilePath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, { "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createDataFile", - "line": 261, + "line": 266, "column": 4, - "endLine": 261, - "endColumn": 41, + "endLine": 266, + "endColumn": 43, "path": "exporting.py", "symbol": "consider-using-with", "message": "Consider using 'with' for resource-allocating operations", @@ -4345,10 +4150,10 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createDataFile", - "line": 261, + "line": 266, "column": 4, - "endLine": 261, - "endColumn": 41, + "endLine": 266, + "endColumn": 43, "path": "exporting.py", "symbol": "unspecified-encoding", "message": "Using open without explicitly specifying an encoding", @@ -4358,9 +4163,9 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "createDataFile", - "line": 259, + "line": 264, "column": 19, - "endLine": 259, + "endLine": 264, "endColumn": 28, "path": "exporting.py", "symbol": "unused-argument", @@ -4371,9 +4176,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateDataFile", - "line": 266, + "line": 271, "column": 0, - "endLine": 266, + "endLine": 271, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -4384,9 +4189,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateDataFile", - "line": 266, + "line": 271, "column": 19, - "endLine": 266, + "endLine": 271, "endColumn": 28, "path": "exporting.py", "symbol": "invalid-name", @@ -4397,23 +4202,10 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateDataFile", - "line": 266, - "column": 30, - "endLine": 266, - "endColumn": 42, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"dataFilePath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateDataFile", - "line": 266, - "column": 44, - "endLine": 266, - "endColumn": 56, + "line": 271, + "column": 46, + "endLine": 271, + "endColumn": 58, "path": "exporting.py", "symbol": "invalid-name", "message": "Argument name \"animFileName\" doesn't conform to snake_case naming style", @@ -4423,9 +4215,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateFiles", - "line": 274, + "line": 279, "column": 0, - "endLine": 274, + "endLine": 279, "endColumn": 15, "path": "exporting.py", "symbol": "invalid-name", @@ -4436,9 +4228,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateFiles", - "line": 275, + "line": 280, "column": 4, - "endLine": 275, + "endLine": 280, "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", @@ -4449,374 +4241,153 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateFiles", - "line": 276, + "line": 286, "column": 4, - "endLine": 276, - "endColumn": 39, + "endLine": 286, + "endColumn": 16, "path": "exporting.py", "symbol": "invalid-name", - "message": "Argument name \"exportProps\" doesn't conform to snake_case naming style", + "message": "Argument name \"dirName\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateFiles", - "line": 277, + "line": 287, "column": 4, - "endLine": 277, - "endColumn": 19, + "endLine": 287, + "endColumn": 21, "path": "exporting.py", "symbol": "invalid-name", - "message": "Argument name \"geoDirPath\" doesn't conform to snake_case naming style", + "message": "Argument name \"animFileName\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateFiles", - "line": 278, + "line": 289, "column": 4, - "endLine": 278, - "endColumn": 20, + "endLine": 289, + "endColumn": 26, "path": "exporting.py", "symbol": "invalid-name", - "message": "Argument name \"animDirPath\" doesn't conform to snake_case naming style", + "message": "Argument name \"skipTableAndData\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { - "type": "convention", + "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateFiles", "line": 279, - "column": 4, + "column": 0, "endLine": 279, - "endColumn": 16, + "endColumn": 15, "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"dirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" + "symbol": "too-many-arguments", + "message": "Too many arguments (10/5)", + "message-id": "R0913" }, { - "type": "convention", + "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "updateFiles", - "line": 280, - "column": 4, - "endLine": 280, - "endColumn": 18, + "line": 299, + "column": 8, + "endLine": 299, + "endColumn": 75, "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"levelName\" doesn't conform to snake_case naming style", - "message-id": "C0103" + "symbol": "no-value-for-parameter", + "message": "No value for argument 'anim_export_props' in function call", + "message-id": "E1120" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 281, - "column": 4, - "endLine": 281, - "endColumn": 16, + "obj": "getAnimationPaths", + "line": 308, + "column": 0, + "endLine": 308, + "endColumn": 21, "path": "exporting.py", "symbol": "invalid-name", - "message": "Argument name \"dirName\" doesn't conform to snake_case naming style", + "message": "Function name \"getAnimationPaths\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 282, + "obj": "getAnimationPaths", + "line": 309, "column": 4, - "endLine": 282, - "endColumn": 21, + "endLine": 309, + "endColumn": 16, "path": "exporting.py", "symbol": "invalid-name", - "message": "Argument name \"animFileName\" doesn't conform to snake_case naming style", + "message": "Variable name \"customExport\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 284, + "obj": "getAnimationPaths", + "line": 311, "column": 4, - "endLine": 284, - "endColumn": 26, + "endLine": 311, + "endColumn": 14, "path": "exporting.py", "symbol": "invalid-name", - "message": "Argument name \"skipTableAndData\" doesn't conform to snake_case naming style", + "message": "Variable name \"exportPath\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { - "type": "refactor", + "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 274, - "column": 0, - "endLine": 274, - "endColumn": 15, + "obj": "getAnimationPaths", + "line": 319, + "column": 8, + "endLine": 319, + "endColumn": 26, "path": "exporting.py", - "symbol": "too-many-arguments", - "message": "Too many arguments (10/5)", - "message-id": "R0913" + "symbol": "undefined-variable", + "message": "Undefined variable 'apply_basic_tweaks'", + "message-id": "E0602" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 288, + "obj": "getAnimationPaths", + "line": 321, "column": 4, - "endLine": 288, - "endColumn": 14, + "endLine": 321, + "endColumn": 11, "path": "exporting.py", "symbol": "invalid-name", - "message": "Variable name \"tableProps\" doesn't conform to snake_case naming style", + "message": "Variable name \"dirName\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 289, - "column": 4, - "endLine": 289, - "endColumn": 13, + "obj": "getAnimationPaths", + "line": 328, + "column": 18, + "endLine": 328, + "endColumn": 24, "path": "exporting.py", "symbol": "invalid-name", - "message": "Variable name \"tableName\" doesn't conform to snake_case naming style", + "message": "Variable name \"texDir\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 290, - "column": 4, - "endLine": 290, - "endColumn": 13, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"tablePath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 291, - "column": 4, - "endLine": 291, - "endColumn": 16, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"dataFilePath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "error", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "updateFiles", - "line": 294, - "column": 8, - "endLine": 294, - "endColumn": 67, - "path": "exporting.py", - "symbol": "no-value-for-parameter", - "message": "No value for argument 'exportProps' in function call", - "message-id": "E1120" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 303, - "column": 0, - "endLine": 303, - "endColumn": 21, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Function name \"getAnimationPaths\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 303, - "column": 22, - "endLine": 303, - "endColumn": 33, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"exportProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 304, - "column": 4, - "endLine": 304, - "endColumn": 16, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"customExport\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 306, - "column": 4, - "endLine": 306, - "endColumn": 14, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"exportPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 306, - "column": 16, - "endLine": 306, - "endColumn": 25, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"levelName\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "error", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 314, - "column": 8, - "endLine": 314, - "endColumn": 26, - "path": "exporting.py", - "symbol": "undefined-variable", - "message": "Undefined variable 'apply_basic_tweaks'", - "message-id": "E0602" - }, - { - "type": "convention", + "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationPaths", - "line": 316, - "column": 4, - "endLine": 316, - "endColumn": 11, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"dirName\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 319, - "column": 8, - "endLine": 319, - "endColumn": 19, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"animDirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 320, - "column": 8, - "endLine": 320, - "endColumn": 15, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"dirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 321, - "column": 8, - "endLine": 321, - "endColumn": 18, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"geoDirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 323, - "column": 8, - "endLine": 323, - "endColumn": 15, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"dirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 323, - "column": 17, - "endLine": 323, - "endColumn": 23, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"texDir\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 324, - "column": 8, - "endLine": 324, - "endColumn": 18, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"geoDirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 325, - "column": 8, - "endLine": 325, - "endColumn": 19, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"animDirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "warning", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationPaths", - "line": 323, - "column": 17, - "endLine": 323, - "endColumn": 23, + "line": 328, + "column": 18, + "endLine": 328, + "endColumn": 24, "path": "exporting.py", "symbol": "unused-variable", "message": "Unused variable 'texDir'", @@ -4826,9 +4397,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationData", - "line": 337, + "line": 344, "column": 0, - "endLine": 337, + "endLine": 344, "endColumn": 20, "path": "exporting.py", "symbol": "invalid-name", @@ -4839,22 +4410,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationData", - "line": 337, - "column": 21, - "endLine": 337, - "endColumn": 50, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"armatureObj\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationData", - "line": 338, + "line": 345, "column": 4, - "endLine": 338, + "endLine": 345, "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", @@ -4865,22 +4423,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationData", - "line": 339, - "column": 4, - "endLine": 339, - "endColumn": 15, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"exportProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "getAnimationData", - "line": 343, + "line": 350, "column": 4, - "endLine": 343, + "endLine": 350, "endColumn": 17, "path": "exporting.py", "symbol": "invalid-name", @@ -4891,9 +4436,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationData", - "line": 345, + "line": 352, "column": 4, - "endLine": 345, + "endLine": 352, "endColumn": 12, "path": "exporting.py", "symbol": "invalid-name", @@ -4904,9 +4449,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationData", - "line": 359, + "line": 366, "column": 8, - "endLine": 359, + "endLine": 366, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -4917,9 +4462,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationData", - "line": 369, + "line": 376, "column": 8, - "endLine": 369, + "endLine": 376, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -4930,9 +4475,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "getAnimationData", - "line": 369, + "line": 376, "column": 20, - "endLine": 369, + "endLine": 376, "endColumn": 29, "path": "exporting.py", "symbol": "invalid-name", @@ -4943,9 +4488,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 379, + "line": 386, "column": 0, - "endLine": 379, + "endLine": 386, "endColumn": 35, "path": "exporting.py", "symbol": "invalid-name", @@ -4956,35 +4501,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 380, - "column": 4, - "endLine": 380, - "endColumn": 33, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"armatureObj\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimTableInsertableBinary", - "line": 382, - "column": 4, - "endLine": 382, - "endColumn": 46, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"tableHeaders\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimTableInsertableBinary", - "line": 383, + "line": 390, "column": 4, - "endLine": 383, + "endLine": 390, "endColumn": 23, "path": "exporting.py", "symbol": "invalid-name", @@ -4995,9 +4514,9 @@ "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 379, + "line": 386, "column": 0, - "endLine": 379, + "endLine": 386, "endColumn": 35, "path": "exporting.py", "symbol": "too-many-locals", @@ -5008,9 +4527,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 385, + "line": 392, "column": 4, - "endLine": 385, + "endLine": 392, "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", @@ -5021,35 +4540,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 386, - "column": 4, - "endLine": 386, - "endColumn": 15, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"exportProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimTableInsertableBinary", - "line": 387, - "column": 4, - "endLine": 387, - "endColumn": 14, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"tableProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimTableInsertableBinary", - "line": 391, + "line": 398, "column": 4, - "endLine": 391, + "endLine": 398, "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", @@ -5060,9 +4553,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 395, + "line": 402, "column": 8, - "endLine": 395, + "endLine": 402, "endColumn": 19, "path": "exporting.py", "symbol": "invalid-name", @@ -5073,9 +4566,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 408, + "line": 415, "column": 8, - "endLine": 408, + "endLine": 415, "endColumn": 21, "path": "exporting.py", "symbol": "invalid-name", @@ -5086,9 +4579,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 409, + "line": 416, "column": 12, - "endLine": 409, + "endLine": 416, "endColumn": 23, "path": "exporting.py", "symbol": "invalid-name", @@ -5099,9 +4592,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 412, + "line": 419, "column": 16, - "endLine": 412, + "endLine": 419, "endColumn": 27, "path": "exporting.py", "symbol": "invalid-name", @@ -5112,9 +4605,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 413, + "line": 420, "column": 16, - "endLine": 413, + "endLine": 420, "endColumn": 28, "path": "exporting.py", "symbol": "invalid-name", @@ -5125,9 +4618,9 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 415, + "line": 422, "column": 33, - "endLine": 415, + "endLine": 422, "endColumn": 39, "path": "exporting.py", "symbol": "undefined-loop-variable", @@ -5138,9 +4631,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 418, + "line": 425, "column": 8, - "endLine": 418, + "endLine": 425, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -5151,9 +4644,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimTableInsertableBinary", - "line": 424, + "line": 431, "column": 4, - "endLine": 424, + "endLine": 431, "endColumn": 21, "path": "exporting.py", "symbol": "invalid-name", @@ -5164,9 +4657,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimInsertableBinary", - "line": 430, + "line": 437, "column": 0, - "endLine": 430, + "endLine": 437, "endColumn": 30, "path": "exporting.py", "symbol": "invalid-name", @@ -5177,9 +4670,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimInsertableBinary", - "line": 430, + "line": 437, "column": 57, - "endLine": 430, + "endLine": 437, "endColumn": 66, "path": "exporting.py", "symbol": "invalid-name", @@ -5190,191 +4683,113 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimInsertableBinary", - "line": 430, + "line": 437, "column": 68, - "endLine": 430, + "endLine": 437, "endColumn": 87, "path": "exporting.py", "symbol": "invalid-name", "message": "Argument name \"sm64Anim\" doesn't conform to snake_case naming style", "message-id": "C0103" }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimInsertableBinary", - "line": 431, - "column": 4, - "endLine": 431, - "endColumn": 15, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"exportProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, { "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimInsertableBinary", - "line": 430, + "line": 437, "column": 31, - "endLine": 430, - "endColumn": 55, - "path": "exporting.py", - "symbol": "unused-argument", - "message": "Unused argument 'action'", - "message-id": "W0613" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimC", - "line": 441, - "column": 0, - "endLine": 441, - "endColumn": 15, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Function name \"exportAnimC\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimC", - "line": 444, - "column": 4, - "endLine": 444, - "endColumn": 23, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"sm64Anim\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimC", - "line": 445, - "column": 4, - "endLine": 445, - "endColumn": 26, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"skipTableAndData\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "refactor", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimC", - "line": 441, - "column": 0, - "endLine": 441, - "endColumn": 15, - "path": "exporting.py", - "symbol": "too-many-locals", - "message": "Too many local variables (18/15)", - "message-id": "R0914" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimC", - "line": 447, - "column": 4, - "endLine": 447, - "endColumn": 13, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"sm64Props\" doesn't conform to snake_case naming style", - "message-id": "C0103" + "endLine": 437, + "endColumn": 55, + "path": "exporting.py", + "symbol": "unused-argument", + "message": "Unused argument 'action'", + "message-id": "W0613" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", "line": 448, - "column": 4, + "column": 0, "endLine": 448, "endColumn": 15, "path": "exporting.py", "symbol": "invalid-name", - "message": "Variable name \"exportProps\" doesn't conform to snake_case naming style", + "message": "Function name \"exportAnimC\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 454, - "column": 8, - "endLine": 454, - "endColumn": 16, + "line": 451, + "column": 4, + "endLine": 451, + "endColumn": 23, "path": "exporting.py", "symbol": "invalid-name", - "message": "Variable name \"dataName\" doesn't conform to snake_case naming style", + "message": "Argument name \"sm64Anim\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 457, + "line": 452, "column": 4, - "endLine": 457, - "endColumn": 15, + "endLine": 452, + "endColumn": 26, "path": "exporting.py", "symbol": "invalid-name", - "message": "Variable name \"animDirPath\" doesn't conform to snake_case naming style", + "message": "Argument name \"skipTableAndData\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { - "type": "convention", + "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 457, - "column": 17, - "endLine": 457, - "endColumn": 24, + "line": 448, + "column": 0, + "endLine": 448, + "endColumn": 15, "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"dirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" + "symbol": "too-many-locals", + "message": "Too many local variables (18/15)", + "message-id": "R0914" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 457, - "column": 26, - "endLine": 457, - "endColumn": 36, + "line": 454, + "column": 4, + "endLine": 454, + "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", - "message": "Variable name \"geoDirPath\" doesn't conform to snake_case naming style", + "message": "Variable name \"sm64Props\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 457, - "column": 38, - "endLine": 457, - "endColumn": 47, + "line": 461, + "column": 8, + "endLine": 461, + "endColumn": 16, "path": "exporting.py", "symbol": "invalid-name", - "message": "Variable name \"levelName\" doesn't conform to snake_case naming style", + "message": "Variable name \"dataName\" doesn't conform to snake_case naming style", "message-id": "C0103" }, { "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 459, + "line": 466, "column": 4, - "endLine": 459, + "endLine": 466, "endColumn": 16, "path": "exporting.py", "symbol": "invalid-name", @@ -5385,9 +4800,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 461, + "line": 468, "column": 4, - "endLine": 461, + "endLine": 468, "endColumn": 18, "path": "exporting.py", "symbol": "invalid-name", @@ -5398,9 +4813,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 463, + "line": 470, "column": 8, - "endLine": 463, + "endLine": 470, "endColumn": 22, "path": "exporting.py", "symbol": "invalid-name", @@ -5411,9 +4826,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 466, + "line": 473, "column": 12, - "endLine": 466, + "endLine": 473, "endColumn": 26, "path": "exporting.py", "symbol": "invalid-name", @@ -5424,9 +4839,9 @@ "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 468, + "line": 475, "column": 12, - "endLine": 478, + "endLine": 485, "endColumn": 13, "path": "exporting.py", "symbol": "no-value-for-parameter", @@ -5437,9 +4852,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 480, + "line": 487, "column": 4, - "endLine": 480, + "endLine": 487, "endColumn": 12, "path": "exporting.py", "symbol": "invalid-name", @@ -5450,9 +4865,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 482, + "line": 489, "column": 4, - "endLine": 482, + "endLine": 489, "endColumn": 12, "path": "exporting.py", "symbol": "invalid-name", @@ -5463,9 +4878,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 483, + "line": 490, "column": 4, - "endLine": 483, + "endLine": 490, "endColumn": 9, "path": "exporting.py", "symbol": "invalid-name", @@ -5476,9 +4891,9 @@ "type": "warning", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 485, + "line": 492, "column": 9, - "endLine": 485, + "endLine": 492, "endColumn": 42, "path": "exporting.py", "symbol": "unspecified-encoding", @@ -5489,9 +4904,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimC", - "line": 485, + "line": 492, "column": 46, - "endLine": 485, + "endLine": 492, "endColumn": 54, "path": "exporting.py", "symbol": "invalid-name", @@ -5502,9 +4917,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimation", - "line": 500, + "line": 507, "column": 0, - "endLine": 500, + "endLine": 507, "endColumn": 19, "path": "exporting.py", "symbol": "invalid-name", @@ -5515,23 +4930,10 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimation", - "line": 501, - "column": 4, - "endLine": 501, - "endColumn": 34, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"armatureObj\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimation", - "line": 501, - "column": 86, - "endLine": 501, - "endColumn": 108, + "line": 508, + "column": 87, + "endLine": 508, + "endColumn": 109, "path": "exporting.py", "symbol": "invalid-name", "message": "Argument name \"skipTableAndData\" doesn't conform to snake_case naming style", @@ -5541,9 +4943,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimation", - "line": 503, + "line": 510, "column": 4, - "endLine": 503, + "endLine": 510, "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", @@ -5554,9 +4956,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimation", - "line": 505, + "line": 512, "column": 4, - "endLine": 505, + "endLine": 512, "endColumn": 12, "path": "exporting.py", "symbol": "invalid-name", @@ -5567,9 +4969,9 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimationTable", - "line": 514, + "line": 521, "column": 0, - "endLine": 514, + "endLine": 521, "endColumn": 24, "path": "exporting.py", "symbol": "invalid-name", @@ -5580,262 +4982,41 @@ "type": "convention", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimationTable", - "line": 514, - "column": 53, - "endLine": 514, - "endColumn": 82, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Argument name \"armatureObj\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "refactor", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 514, - "column": 0, - "endLine": 514, - "endColumn": 24, - "path": "exporting.py", - "symbol": "too-many-locals", - "message": "Too many local variables (16/15)", - "message-id": "R0914" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 516, + "line": 523, "column": 4, - "endLine": 516, + "endLine": 523, "endColumn": 13, "path": "exporting.py", "symbol": "invalid-name", "message": "Variable name \"sm64Props\" doesn't conform to snake_case naming style", "message-id": "C0103" }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 517, - "column": 4, - "endLine": 517, - "endColumn": 15, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"exportProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 518, - "column": 4, - "endLine": 518, - "endColumn": 14, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"tableProps\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 520, - "column": 4, - "endLine": 520, - "endColumn": 16, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"tableHeaders\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 521, - "column": 4, - "endLine": 521, - "endColumn": 15, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"headerNames\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, { "type": "error", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimationTable", - "line": 521, - "column": 19, - "endLine": 521, - "endColumn": 53, + "line": 528, + "column": 20, + "endLine": 528, + "endColumn": 60, "path": "exporting.py", "symbol": "no-value-for-parameter", "message": "No value for argument 'header' in function call", "message-id": "E1120" }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 532, - "column": 8, - "endLine": 532, - "endColumn": 19, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"animDirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 532, - "column": 21, - "endLine": 532, - "endColumn": 28, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"dirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 532, - "column": 30, - "endLine": 532, - "endColumn": 40, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"geoDirPath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 532, - "column": 42, - "endLine": 532, - "endColumn": 51, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"levelName\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 534, - "column": 8, - "endLine": 534, - "endColumn": 17, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"tableName\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 535, - "column": 8, - "endLine": 535, - "endColumn": 17, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"tablePath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 536, - "column": 8, - "endLine": 536, - "endColumn": 20, - "path": "exporting.py", - "symbol": "invalid-name", - "message": "Variable name \"dataFilePath\" doesn't conform to snake_case naming style", - "message-id": "C0103" - }, { "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.exporting", "obj": "exportAnimationTable", - "line": 514, + "line": 521, "column": 0, - "endLine": 514, + "endLine": 521, "endColumn": 24, "path": "exporting.py", "symbol": "inconsistent-return-statements", "message": "Either all return statements in a function should return an expression, or none of them should.", "message-id": "R1710" }, - { - "type": "warning", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 532, - "column": 21, - "endLine": 532, - "endColumn": 28, - "path": "exporting.py", - "symbol": "unused-variable", - "message": "Unused variable 'dirPath'", - "message-id": "W0612" - }, - { - "type": "warning", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 532, - "column": 30, - "endLine": 532, - "endColumn": 40, - "path": "exporting.py", - "symbol": "unused-variable", - "message": "Unused variable 'geoDirPath'", - "message-id": "W0612" - }, - { - "type": "warning", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "exportAnimationTable", - "line": 532, - "column": 42, - "endLine": 532, - "endColumn": 51, - "path": "exporting.py", - "symbol": "unused-variable", - "message": "Unused variable 'levelName'", - "message-id": "W0612" - }, - { - "type": "convention", - "module": "fast64-animations.fast64_internal.sm64.animation.exporting", - "obj": "", - "line": 1, - "column": 0, - "endLine": 1, - "endColumn": 25, - "path": "exporting.py", - "symbol": "wrong-import-order", - "message": "standard import \"import bpy, mathutils, os\" should be placed before \"import bpy, mathutils, os\"", - "message-id": "C0411" - }, { "type": "refactor", "module": "fast64-animations.fast64_internal.sm64.animation.c_parser", diff --git a/fast64_internal/sm64/animation/utility.py b/fast64_internal/sm64/animation/utility.py index bce8bc111..49d824374 100644 --- a/fast64_internal/sm64/animation/utility.py +++ b/fast64_internal/sm64/animation/utility.py @@ -4,7 +4,6 @@ import bpy from bpy.types import Object, Armature -from ...utility_anim import getFrameInterval from ...utility import findStartBones, toAlnum, PluginError from ..sm64_geolayout_bone import animatableBoneTypes @@ -71,20 +70,6 @@ def get_anim_name(actor_name: str, action: bpy.types.Action, header): return toAlnum(name) -def get_max_frame(action) -> int: - action_props = action.fast64.sm64 - - if action_props.overrideMaxFrame: - return action_props.customMaxFrame - - loop_ends: list[int] = [getFrameInterval(action)[1]] - for header in action_props.get_headers(): - loop_end = header.getFrameRange(action)[2] - loop_ends.append(loop_end) - - return max(loop_ends) - - def sm64_to_radian(signed_sm64_angle: int) -> float: sm64_angle = int.from_bytes(signed_sm64_angle.to_bytes(4, "big", signed=True), "big", signed=False) degree = sm64_angle * (360.0 / (2.0**16.0))