PyLibMS 4.2.0__tar.gz → 4.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pylibms-4.2.1/MANIFEST.in +1 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/PKG-INFO +1 -1
- {pylibms-4.2.0 → pylibms-4.2.1}/PyLibMS.egg-info/PKG-INFO +1 -1
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/definitions/flowchart.py +1 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/definitions/node.py +22 -26
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/definitions/node_type.py +5 -5
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/flw3.py +13 -9
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Tomodachi Life NA-EU.yaml +6 -1
- {pylibms-4.2.0 → pylibms-4.2.1}/pyproject.toml +1 -1
- pylibms-4.2.0/MANIFEST.in +0 -2
- {pylibms-4.2.0 → pylibms-4.2.1}/LICENSE +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/PyLibMS.egg-info/SOURCES.txt +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/PyLibMS.egg-info/dependency_links.txt +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/PyLibMS.egg-info/requires.txt +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/PyLibMS.egg-info/top_level.txt +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/README.md +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/field/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/field/io.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/field/lms_datatype.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/field/lms_field.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/lms_constants.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/lms_exceptions.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/lms_fileinfo.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/stream/fileinfo.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/stream/hashtable.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/common/stream/section.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/fileio/encoding.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/fileio/io.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/definitions/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/definitions/lms_nodeexceptions.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/msbf.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/flowchart/msbfio.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/definitions/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/definitions/field/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/lms_messagetext.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/msbt.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/msbtentry.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/msbtio.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/section/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/section/atr1.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/section/nli1.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/section/tsy1.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/section/txt2.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/tag/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/tag/io/param_io.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/tag/io/tag_io.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/tag/lms_tag.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/message/tag/lms_tagexceptions.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/definitions/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/definitions/attribute.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/definitions/color.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/definitions/style.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/definitions/tag.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/msbp.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/msbpread.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/section/ali2.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/section/ati2.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/section/clr1.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/section/string.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/section/syl3.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/section/tag2.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/section/tgg2.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/project/section/tgp2.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/config.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/definitions/__init__.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/definitions/attribute.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/definitions/nodes.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/definitions/tags.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/definitions/value.py +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Badge Arcade.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Brain Age Concentration Training.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Kirby Planet Robobot.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Super Mario 3D Land.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Super Mario 3D World + Bowsers Fury.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Super Mario Odyssey.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/The Legend of Zelda a Link Between Worlds.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Tomodachi Life Living The Dream.yaml +0 -0
- {pylibms-4.2.0 → pylibms-4.2.1}/setup.cfg +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
include README.md LICENSE
|
|
@@ -27,15 +27,14 @@ class LMS_BaseNode:
|
|
|
27
27
|
id: int | None,
|
|
28
28
|
node_type: LMS_NodeType,
|
|
29
29
|
parameter_type: LMS_NodeParameterType,
|
|
30
|
-
parameter_value: LMS_NodeParameter | None
|
|
31
|
-
stream_next_id: int | None = None):
|
|
30
|
+
parameter_value: LMS_NodeParameter | None):
|
|
32
31
|
self.id = id
|
|
33
32
|
self._node_type = node_type
|
|
34
33
|
|
|
35
34
|
self._parameter_type = parameter_type
|
|
36
35
|
self._parameter_value = parameter_value
|
|
37
36
|
|
|
38
|
-
self._stream_next_id: int | None =
|
|
37
|
+
self._stream_next_id: int | None = None
|
|
39
38
|
self._next_node: LMS_BaseNode | None = None
|
|
40
39
|
|
|
41
40
|
@property
|
|
@@ -76,14 +75,6 @@ class LMS_BaseNode:
|
|
|
76
75
|
if not isinstance(value, self._parameter_type.builtin_type):
|
|
77
76
|
raise TypeError(f"Wrong value provided! Expected {self._parameter_type.builtin_type} got {type(value)}")
|
|
78
77
|
|
|
79
|
-
sliced_datatype = {
|
|
80
|
-
LMS_NodeParameterType.PARAM_16_16: (LMS_DataType.UINT16, LMS_DataType.UINT16),
|
|
81
|
-
LMS_NodeParameterType.PARAM_16_8_8: (LMS_DataType.UINT16, LMS_DataType.UINT8, LMS_DataType.UINT8),
|
|
82
|
-
LMS_NodeParameterType.PARAM_8_8_16: (LMS_DataType.UINT8, LMS_DataType.UINT8, LMS_DataType.UINT16),
|
|
83
|
-
LMS_NodeParameterType.PARAM_8_8_8_8: (LMS_DataType.UINT8, LMS_DataType.UINT8, LMS_DataType.UINT8,
|
|
84
|
-
LMS_DataType.UINT8)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
78
|
match self._parameter_type:
|
|
88
79
|
case LMS_NodeParameterType.STRING:
|
|
89
80
|
self._parameter_value = value
|
|
@@ -92,7 +83,8 @@ class LMS_BaseNode:
|
|
|
92
83
|
self._parameter_value = value
|
|
93
84
|
case _:
|
|
94
85
|
for i, parameter in enumerate(value):
|
|
95
|
-
verify_number_from_datatype(parameter,
|
|
86
|
+
verify_number_from_datatype(parameter,
|
|
87
|
+
self._parameter_type.sliced_datatype[self._parameter_type][i])
|
|
96
88
|
|
|
97
89
|
self._parameter_value = value
|
|
98
90
|
|
|
@@ -100,8 +92,6 @@ class LMS_BaseNode:
|
|
|
100
92
|
"""Set the next node for the instance.
|
|
101
93
|
|
|
102
94
|
:param node: the node object, None for no next node."""
|
|
103
|
-
# Once next_node is properly set, stream_id is never accessed again
|
|
104
|
-
# While it does become stale, there is no point to altering it afterward
|
|
105
95
|
self._next_node = node
|
|
106
96
|
return node
|
|
107
97
|
|
|
@@ -143,7 +133,6 @@ class LMS_MessageNode(LMS_BaseNode):
|
|
|
143
133
|
|
|
144
134
|
def __init__(self,
|
|
145
135
|
id: int | None,
|
|
146
|
-
stream_next_node: int,
|
|
147
136
|
msbt_index: int,
|
|
148
137
|
label_index: int,
|
|
149
138
|
msbt: MSBT | None = None
|
|
@@ -153,7 +142,6 @@ class LMS_MessageNode(LMS_BaseNode):
|
|
|
153
142
|
LMS_NodeType.MESSAGE,
|
|
154
143
|
LMS_NodeParameterType.NONE,
|
|
155
144
|
None,
|
|
156
|
-
stream_next_node
|
|
157
145
|
)
|
|
158
146
|
|
|
159
147
|
self.msbt_index = msbt_index
|
|
@@ -211,13 +199,20 @@ class LMS_BranchNode(LMS_BaseNode):
|
|
|
211
199
|
LMS_NodeType.BRANCH,
|
|
212
200
|
parameter_type,
|
|
213
201
|
parameter_value,
|
|
214
|
-
NO_NEXT_NODE
|
|
215
202
|
)
|
|
216
203
|
|
|
217
204
|
self._condition_id = condition_id
|
|
218
205
|
self._branches: dict[int, LMS_BaseNode | None] = {}
|
|
219
206
|
self._definition = definition
|
|
220
207
|
|
|
208
|
+
def __repr__(self):
|
|
209
|
+
if self._definition is None:
|
|
210
|
+
return super().__repr__()
|
|
211
|
+
return f"{self._definition.name}({ {field.name: field.value for field in self._parameter_value} } {self.id}"
|
|
212
|
+
|
|
213
|
+
def set_next_node(self, node: LMS_BaseNode | None) -> LMS_BaseNode | None:
|
|
214
|
+
raise NotImplementedError("Use function set_branch_case to alter the flow of a branch node!")
|
|
215
|
+
|
|
221
216
|
@classmethod
|
|
222
217
|
def new(cls,
|
|
223
218
|
parameter_type: LMS_NodeParameterType,
|
|
@@ -345,19 +340,22 @@ class LMS_EventNode(LMS_BaseNode):
|
|
|
345
340
|
parameter_type: LMS_NodeParameterType,
|
|
346
341
|
parameter_value: LMS_FieldMap | int | str | tuple[int, ...],
|
|
347
342
|
action_id: int,
|
|
348
|
-
stream_next_id: int | None = None,
|
|
349
343
|
definition: NodeDefinition | None = None,
|
|
350
344
|
):
|
|
351
345
|
super().__init__(
|
|
352
346
|
id,
|
|
353
347
|
LMS_NodeType.EVENT,
|
|
354
348
|
parameter_type,
|
|
355
|
-
parameter_value
|
|
356
|
-
stream_next_id)
|
|
349
|
+
parameter_value)
|
|
357
350
|
|
|
358
351
|
self._action_id = action_id
|
|
359
352
|
self._definition = definition
|
|
360
353
|
|
|
354
|
+
def __repr__(self):
|
|
355
|
+
if self._definition is None:
|
|
356
|
+
return super().__repr__()
|
|
357
|
+
return f"{self._definition.name}({ {field.name: field.value for field in self._parameter_value} } {self.id}"
|
|
358
|
+
|
|
361
359
|
@classmethod
|
|
362
360
|
def new(cls, parameter_type: LMS_NodeParameterType, parameter_value: int | str | tuple[int, ...], action_id: int):
|
|
363
361
|
"""
|
|
@@ -409,13 +407,12 @@ class LMS_EntryNode(LMS_BaseNode):
|
|
|
409
407
|
Class that represents an entry node. Node that is at the start of a flowchart.
|
|
410
408
|
"""
|
|
411
409
|
|
|
412
|
-
def __init__(self, id: int,
|
|
410
|
+
def __init__(self, id: int, flowchart_name: str = ""):
|
|
413
411
|
super().__init__(
|
|
414
412
|
id,
|
|
415
413
|
LMS_NodeType.ENTRY,
|
|
416
414
|
LMS_NodeParameterType.NONE,
|
|
417
|
-
None
|
|
418
|
-
stream_next_id)
|
|
415
|
+
None)
|
|
419
416
|
|
|
420
417
|
self.flowchart_name = flowchart_name
|
|
421
418
|
|
|
@@ -425,13 +422,12 @@ class LMS_JumpNode(LMS_BaseNode):
|
|
|
425
422
|
Class that represents a jump node. Node that jumps to another flowchart.
|
|
426
423
|
"""
|
|
427
424
|
|
|
428
|
-
def __init__(self, id: int,
|
|
425
|
+
def __init__(self, id: int, unknown_short0a: int):
|
|
429
426
|
super().__init__(
|
|
430
427
|
id,
|
|
431
428
|
LMS_NodeType.JUMP,
|
|
432
429
|
LMS_NodeParameterType.NONE,
|
|
433
|
-
None
|
|
434
|
-
next_flowchart_id)
|
|
430
|
+
None)
|
|
435
431
|
|
|
436
432
|
self.next_flowchart: LMS_EntryNode | None = None
|
|
437
433
|
|
|
@@ -54,21 +54,21 @@ class LMS_NodeParameterType(IntEnum):
|
|
|
54
54
|
NONE = -1
|
|
55
55
|
|
|
56
56
|
@property
|
|
57
|
-
def sliced_datatype(self):
|
|
58
|
-
"""The parameter type split into the raw datatypes. Not valid for
|
|
57
|
+
def sliced_datatype(self) -> tuple[LMS_DataType, ...]:
|
|
58
|
+
"""The parameter type split into the raw datatypes. Not valid for STRING."""
|
|
59
59
|
if self in [
|
|
60
60
|
LMS_NodeParameterType.NONE,
|
|
61
|
-
LMS_NodeParameterType.PARAM_32_0,
|
|
62
|
-
LMS_NodeParameterType.PARAM_32_1,
|
|
63
61
|
LMS_NodeParameterType.STRING]:
|
|
64
62
|
raise TypeError(f"There is no sliced datatypes for {self} parameter types!")
|
|
65
63
|
|
|
66
64
|
return {
|
|
65
|
+
LMS_NodeParameterType.PARAM_32_0: (LMS_DataType.UINT32,),
|
|
67
66
|
LMS_NodeParameterType.PARAM_16_16: (LMS_DataType.UINT16, LMS_DataType.UINT16),
|
|
68
67
|
LMS_NodeParameterType.PARAM_16_8_8: (LMS_DataType.UINT16, LMS_DataType.UINT8, LMS_DataType.UINT8),
|
|
69
68
|
LMS_NodeParameterType.PARAM_8_8_16: (LMS_DataType.UINT8, LMS_DataType.UINT8, LMS_DataType.UINT16),
|
|
70
69
|
LMS_NodeParameterType.PARAM_8_8_8_8: (LMS_DataType.UINT8, LMS_DataType.UINT8, LMS_DataType.UINT8,
|
|
71
|
-
LMS_DataType.UINT8)
|
|
70
|
+
LMS_DataType.UINT8),
|
|
71
|
+
LMS_NodeParameterType.PARAM_32_1: (LMS_DataType.UINT32,)
|
|
72
72
|
}[self]
|
|
73
73
|
|
|
74
74
|
@property
|
|
@@ -28,6 +28,8 @@ def read_flw3(reader: FileReader, config: NodeConfig | None, msbt: MSBT | None,
|
|
|
28
28
|
|
|
29
29
|
nodes: list[LMS_BaseNode] = []
|
|
30
30
|
entry_nodes: list[LMS_EntryNode] = []
|
|
31
|
+
|
|
32
|
+
next_id_map: dict[LMS_BaseNode, int | None] = {}
|
|
31
33
|
branch_metadata: dict[LMS_BranchNode, dict] = {}
|
|
32
34
|
|
|
33
35
|
for i in range(node_count):
|
|
@@ -45,7 +47,7 @@ def read_flw3(reader: FileReader, config: NodeConfig | None, msbt: MSBT | None,
|
|
|
45
47
|
stream_next_id = read_next_node_id(reader)
|
|
46
48
|
file_index = reader.read_uint16()
|
|
47
49
|
message_index = reader.read_uint16()
|
|
48
|
-
node = LMS_MessageNode(i,
|
|
50
|
+
node = LMS_MessageNode(i, file_index, message_index, msbt)
|
|
49
51
|
reader.skip(2)
|
|
50
52
|
case LMS_NodeType.BRANCH:
|
|
51
53
|
# There is no next node id as the next node is determined by the branches
|
|
@@ -78,27 +80,29 @@ def read_flw3(reader: FileReader, config: NodeConfig | None, msbt: MSBT | None,
|
|
|
78
80
|
definition = get_config_definition(config, LMS_NodeType.EVENT, parameter_type, event_id)
|
|
79
81
|
parameter_value = evaluate_node_parameter(reader, section_start, parameter_type, definition)
|
|
80
82
|
|
|
81
|
-
node = LMS_EventNode(i, parameter_type, parameter_value, event_id,
|
|
83
|
+
node = LMS_EventNode(i, parameter_type, parameter_value, event_id, definition)
|
|
82
84
|
reader.seek(end)
|
|
83
85
|
case LMS_NodeType.ENTRY:
|
|
84
86
|
reader.seek(node_data)
|
|
85
87
|
stream_next_id = read_next_node_id(reader)
|
|
86
|
-
node = LMS_EntryNode(i
|
|
88
|
+
node = LMS_EntryNode(i)
|
|
87
89
|
entry_nodes.append(node)
|
|
88
90
|
reader.skip(6)
|
|
89
91
|
case LMS_NodeType.JUMP:
|
|
90
92
|
reader.seek(node_data)
|
|
91
|
-
|
|
93
|
+
stream_next_id = read_next_node_id(reader)
|
|
92
94
|
unknown_short0a = reader.read_uint16()
|
|
93
|
-
node = LMS_JumpNode(i,
|
|
95
|
+
node = LMS_JumpNode(i, unknown_short0a)
|
|
94
96
|
reader.skip(4)
|
|
95
97
|
|
|
98
|
+
next_id_map[node] = stream_next_id
|
|
96
99
|
nodes.append(node)
|
|
97
100
|
|
|
98
101
|
node_map: dict[int, LMS_BaseNode] = {node.id: node for node in nodes}
|
|
99
102
|
branch_ids = [read_next_node_id(reader) for _ in range(branch_table_id_count)]
|
|
100
103
|
|
|
101
104
|
for node in nodes:
|
|
105
|
+
next_node_id = next_id_map[node]
|
|
102
106
|
|
|
103
107
|
if isinstance(node, LMS_BranchNode):
|
|
104
108
|
case_count, starting_index = branch_metadata[node]
|
|
@@ -112,13 +116,13 @@ def read_flw3(reader: FileReader, config: NodeConfig | None, msbt: MSBT | None,
|
|
|
112
116
|
|
|
113
117
|
continue
|
|
114
118
|
elif isinstance(node, LMS_JumpNode):
|
|
115
|
-
node.next_flowchart = node_map[
|
|
119
|
+
node.next_flowchart = node_map[next_node_id]
|
|
116
120
|
continue
|
|
117
121
|
|
|
118
|
-
if
|
|
122
|
+
if next_node_id is None:
|
|
119
123
|
continue
|
|
120
124
|
|
|
121
|
-
node.set_next_node(node_map[
|
|
125
|
+
node.set_next_node(node_map[next_node_id])
|
|
122
126
|
|
|
123
127
|
return node_count, entry_nodes
|
|
124
128
|
|
|
@@ -159,7 +163,7 @@ def evaluate_node_parameter(reader: FileReader,
|
|
|
159
163
|
})
|
|
160
164
|
|
|
161
165
|
for i, param_definition in enumerate(definition.parameter_definitions):
|
|
162
|
-
stream_map = {1: reader.read_uint8, 2: reader.read_uint16,
|
|
166
|
+
stream_map = {1: reader.read_uint8, 2: reader.read_uint16, 4: reader.read_uint32}
|
|
163
167
|
result[param_definition.name] = read_field(reader, param_definition,
|
|
164
168
|
stream_map[parameter_type.sliced_datatype[i].stream_size])
|
|
165
169
|
|
|
@@ -8,7 +8,7 @@ node_definitions:
|
|
|
8
8
|
- name: exp
|
|
9
9
|
- id: 1
|
|
10
10
|
name: SwitchVariable
|
|
11
|
-
case_format: "var ==
|
|
11
|
+
case_format: "var == $case"
|
|
12
12
|
parameter_type: string
|
|
13
13
|
parameters:
|
|
14
14
|
- name: var
|
|
@@ -29,6 +29,11 @@ node_definitions:
|
|
|
29
29
|
parameter_type: string
|
|
30
30
|
parameters:
|
|
31
31
|
- name: var
|
|
32
|
+
- id: 82
|
|
33
|
+
name: SetFlag
|
|
34
|
+
parameter_type: p32_1
|
|
35
|
+
parameters:
|
|
36
|
+
- name: flag
|
|
32
37
|
- id: 90
|
|
33
38
|
name: LoadSEGroup
|
|
34
39
|
parameter_type: string
|
|
@@ -7,7 +7,7 @@ include = ["lms*"]
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "PyLibMS"
|
|
10
|
-
version = "4.2.
|
|
10
|
+
version = "4.2.1"
|
|
11
11
|
requires-python = ">=3.10"
|
|
12
12
|
description = "Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and MSBF."
|
|
13
13
|
readme = "README.md"
|
pylibms-4.2.0/MANIFEST.in
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Brain Age Concentration Training.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Super Mario 3D World + Bowsers Fury.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{pylibms-4.2.0 → pylibms-4.2.1}/lms/titleconfig/presets/Tomodachi Life Living The Dream.yaml
RENAMED
|
File without changes
|
|
File without changes
|