mirror of
https://github.com/zeldaret/oot.git
synced 2025-08-30 18:55:54 +00:00
check attributes of xml resources elements
This commit is contained in:
parent
ad6ff6df27
commit
e0b8f3087d
4 changed files with 112 additions and 7 deletions
|
@ -8,6 +8,7 @@ from .base import (
|
|||
ResourcesDescCollection,
|
||||
ResourceHandlerNeedsPass2Exception,
|
||||
)
|
||||
from . import xml_errors
|
||||
|
||||
|
||||
@dataclasses.dataclass(eq=False)
|
||||
|
@ -15,7 +16,9 @@ class CollisionResourceDesc(ResourceDesc):
|
|||
pass
|
||||
|
||||
|
||||
handler_Collision = CollisionResourceDesc
|
||||
def handler_Collision(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset"})
|
||||
return CollisionResourceDesc(symbol_name, offset, collection, reselem)
|
||||
|
||||
|
||||
@dataclasses.dataclass(eq=False)
|
||||
|
@ -23,7 +26,9 @@ class AnimationResourceDesc(ResourceDesc):
|
|||
pass
|
||||
|
||||
|
||||
handler_Animation = AnimationResourceDesc
|
||||
def handler_Animation(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset"})
|
||||
return AnimationResourceDesc(symbol_name, offset, collection, reselem)
|
||||
|
||||
|
||||
@dataclasses.dataclass(eq=False)
|
||||
|
@ -31,7 +36,9 @@ class PlayerAnimationResourceDesc(ResourceDesc):
|
|||
pass
|
||||
|
||||
|
||||
handler_PlayerAnimation = PlayerAnimationResourceDesc
|
||||
def handler_PlayerAnimation(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset"})
|
||||
return PlayerAnimationResourceDesc(symbol_name, offset, collection, reselem)
|
||||
|
||||
|
||||
@dataclasses.dataclass(eq=False)
|
||||
|
@ -39,7 +46,9 @@ class LegacyAnimationResourceDesc(ResourceDesc):
|
|||
pass
|
||||
|
||||
|
||||
handler_LegacyAnimation = LegacyAnimationResourceDesc
|
||||
def handler_LegacyAnimation(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset"})
|
||||
return LegacyAnimationResourceDesc(symbol_name, offset, collection, reselem)
|
||||
|
||||
|
||||
@dataclasses.dataclass(eq=False)
|
||||
|
@ -47,7 +56,9 @@ class CutsceneResourceDesc(ResourceDesc):
|
|||
pass
|
||||
|
||||
|
||||
handler_Cutscene = CutsceneResourceDesc
|
||||
def handler_Cutscene(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset"})
|
||||
return CutsceneResourceDesc(symbol_name, offset, collection, reselem)
|
||||
|
||||
|
||||
@dataclasses.dataclass(eq=False)
|
||||
|
@ -55,7 +66,9 @@ class SceneResourceDesc(ResourceDesc):
|
|||
pass
|
||||
|
||||
|
||||
handler_Scene = SceneResourceDesc
|
||||
def handler_Scene(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset"})
|
||||
return SceneResourceDesc(symbol_name, offset, collection, reselem)
|
||||
|
||||
|
||||
@dataclasses.dataclass(eq=False)
|
||||
|
@ -64,6 +77,7 @@ class RoomResourceDesc(ResourceDesc):
|
|||
|
||||
|
||||
def handler_Room(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset"}, {"HackMode"})
|
||||
res = RoomResourceDesc(symbol_name, offset, collection, reselem)
|
||||
if reselem.attrib.get("HackMode") == "syotes_room":
|
||||
res.hack_modes.add("hackmode_syotes_room")
|
||||
|
@ -76,6 +90,7 @@ class PlayerAnimationDataResourceDesc(ResourceDesc):
|
|||
|
||||
|
||||
def handler_PlayerAnimationData(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset", "FrameCount"})
|
||||
frame_count = int(reselem.attrib["FrameCount"])
|
||||
return PlayerAnimationDataResourceDesc(
|
||||
symbol_name, offset, collection, reselem, frame_count
|
||||
|
@ -88,6 +103,7 @@ class PathListResourceDesc(ResourceDesc):
|
|||
|
||||
|
||||
def handler_PathList(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset", "NumPaths"})
|
||||
num_paths = int(reselem.attrib["NumPaths"])
|
||||
return PathListResourceDesc(symbol_name, offset, collection, reselem, num_paths)
|
||||
|
||||
|
@ -116,6 +132,11 @@ class SkeletonResourceDesc(ResourceDesc):
|
|||
|
||||
|
||||
def handler_Skeleton(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(
|
||||
reselem,
|
||||
{"Name", "Offset", "Type", "LimbType"},
|
||||
{"EnumName", "LimbNone", "LimbMax"},
|
||||
)
|
||||
skel_type = SkeletonType[reselem.attrib["Type"].upper()]
|
||||
limb_type = LimbType[reselem.attrib["LimbType"].upper()]
|
||||
return SkeletonResourceDesc(
|
||||
|
@ -138,6 +159,7 @@ class LimbResourceDesc(ResourceDesc):
|
|||
|
||||
|
||||
def handler_Limb(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset", "LimbType"}, {"EnumName"})
|
||||
limb_type = LimbType[reselem.attrib["LimbType"].upper()]
|
||||
return LimbResourceDesc(
|
||||
symbol_name,
|
||||
|
@ -156,6 +178,7 @@ class LimbTableResourceDesc(ResourceDesc):
|
|||
|
||||
|
||||
def handler_LimbTable(symbol_name, offset, collection, reselem: Element):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset", "LimbType", "Count"})
|
||||
limb_type = LimbType[reselem.attrib["LimbType"].upper()]
|
||||
count = int(reselem.attrib["Count"])
|
||||
return LimbTableResourceDesc(
|
||||
|
@ -171,6 +194,7 @@ class CurveAnimationResourceDesc(ResourceDesc):
|
|||
def handler_CurveAnimation(
|
||||
symbol_name, offset, collection: ResourcesDescCollection, reselem: Element
|
||||
):
|
||||
xml_errors.check_attrib(reselem, {"Name", "Offset", "SkelOffset"})
|
||||
res = CurveAnimationResourceDesc(symbol_name, offset, collection, reselem, None)
|
||||
|
||||
skel_offset = int(reselem.attrib["SkelOffset"], 16)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue