PyLibMS 4.2.2__tar.gz → 4.2.4__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.
Files changed (84) hide show
  1. {pylibms-4.2.2 → pylibms-4.2.4}/PKG-INFO +1 -1
  2. {pylibms-4.2.2 → pylibms-4.2.4}/PyLibMS.egg-info/PKG-INFO +1 -1
  3. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/field/lms_field.py +14 -8
  4. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/definitions/node.py +6 -6
  5. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/definitions/nodes.py +4 -4
  6. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/Tomodachi Life NA-EU.yaml +56 -6
  7. {pylibms-4.2.2 → pylibms-4.2.4}/pyproject.toml +1 -1
  8. {pylibms-4.2.2 → pylibms-4.2.4}/LICENSE +0 -0
  9. {pylibms-4.2.2 → pylibms-4.2.4}/MANIFEST.in +0 -0
  10. {pylibms-4.2.2 → pylibms-4.2.4}/PyLibMS.egg-info/SOURCES.txt +0 -0
  11. {pylibms-4.2.2 → pylibms-4.2.4}/PyLibMS.egg-info/dependency_links.txt +0 -0
  12. {pylibms-4.2.2 → pylibms-4.2.4}/PyLibMS.egg-info/requires.txt +0 -0
  13. {pylibms-4.2.2 → pylibms-4.2.4}/PyLibMS.egg-info/top_level.txt +0 -0
  14. {pylibms-4.2.2 → pylibms-4.2.4}/README.md +0 -0
  15. {pylibms-4.2.2 → pylibms-4.2.4}/lms/__init__.py +0 -0
  16. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/__init__.py +0 -0
  17. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/field/__init__.py +0 -0
  18. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/field/io.py +0 -0
  19. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/field/lms_datatype.py +0 -0
  20. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/lms_constants.py +0 -0
  21. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/lms_exceptions.py +0 -0
  22. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/lms_fileinfo.py +0 -0
  23. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/stream/fileinfo.py +0 -0
  24. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/stream/hashtable.py +0 -0
  25. {pylibms-4.2.2 → pylibms-4.2.4}/lms/common/stream/section.py +0 -0
  26. {pylibms-4.2.2 → pylibms-4.2.4}/lms/fileio/encoding.py +0 -0
  27. {pylibms-4.2.2 → pylibms-4.2.4}/lms/fileio/io.py +0 -0
  28. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/__init__.py +0 -0
  29. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/definitions/__init__.py +0 -0
  30. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/definitions/flowchart.py +0 -0
  31. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/definitions/lms_nodeexceptions.py +0 -0
  32. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/definitions/node_type.py +0 -0
  33. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/flw3.py +0 -0
  34. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/msbf.py +0 -0
  35. {pylibms-4.2.2 → pylibms-4.2.4}/lms/flowchart/msbfio.py +0 -0
  36. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/__init__.py +0 -0
  37. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/definitions/__init__.py +0 -0
  38. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/definitions/field/__init__.py +0 -0
  39. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/lms_messagetext.py +0 -0
  40. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/msbt.py +0 -0
  41. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/msbtentry.py +0 -0
  42. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/msbtio.py +0 -0
  43. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/section/__init__.py +0 -0
  44. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/section/atr1.py +0 -0
  45. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/section/nli1.py +0 -0
  46. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/section/tsy1.py +0 -0
  47. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/section/txt2.py +0 -0
  48. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/tag/__init__.py +0 -0
  49. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/tag/io/param_io.py +0 -0
  50. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/tag/io/tag_io.py +0 -0
  51. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/tag/lms_tag.py +0 -0
  52. {pylibms-4.2.2 → pylibms-4.2.4}/lms/message/tag/lms_tagexceptions.py +0 -0
  53. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/__init__.py +0 -0
  54. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/definitions/__init__.py +0 -0
  55. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/definitions/attribute.py +0 -0
  56. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/definitions/color.py +0 -0
  57. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/definitions/style.py +0 -0
  58. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/definitions/tag.py +0 -0
  59. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/msbp.py +0 -0
  60. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/msbpread.py +0 -0
  61. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/section/ali2.py +0 -0
  62. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/section/ati2.py +0 -0
  63. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/section/clr1.py +0 -0
  64. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/section/string.py +0 -0
  65. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/section/syl3.py +0 -0
  66. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/section/tag2.py +0 -0
  67. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/section/tgg2.py +0 -0
  68. {pylibms-4.2.2 → pylibms-4.2.4}/lms/project/section/tgp2.py +0 -0
  69. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/__init__.py +0 -0
  70. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/config.py +0 -0
  71. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/definitions/__init__.py +0 -0
  72. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/definitions/attribute.py +0 -0
  73. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/definitions/tags.py +0 -0
  74. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/definitions/value.py +0 -0
  75. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/Badge Arcade.yaml +0 -0
  76. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/Brain Age Concentration Training.yaml +0 -0
  77. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/Kirby Planet Robobot.yaml +0 -0
  78. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/Super Mario 3D Land.yaml +0 -0
  79. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/Super Mario 3D World + Bowsers Fury.yaml +0 -0
  80. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/Super Mario Odyssey.yaml +0 -0
  81. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml +0 -0
  82. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/The Legend of Zelda a Link Between Worlds.yaml +0 -0
  83. {pylibms-4.2.2 → pylibms-4.2.4}/lms/titleconfig/presets/Tomodachi Life Living The Dream.yaml +0 -0
  84. {pylibms-4.2.2 → pylibms-4.2.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyLibMS
3
- Version: 4.2.2
3
+ Version: 4.2.4
4
4
  Summary: Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and MSBF.
5
5
  Author: AbdyyEee
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyLibMS
3
- Version: 4.2.2
3
+ Version: 4.2.4
4
4
  Summary: Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and MSBF.
5
5
  Author: AbdyyEee
6
6
  License-Expression: MIT
@@ -36,20 +36,26 @@ class LMS_FieldMap:
36
36
  """Converts the field map to a regular dictionary."""
37
37
  return {field.name: field.value for field in self.fields.values()}
38
38
 
39
- @classmethod
40
- def create_default_map(cls, definitions: list[ValueDefinition]):
41
- field_map = {}
39
+ @staticmethod
40
+ def create_default_dict_map(definitions: list[ValueDefinition]) -> dict[str, FieldValue]:
41
+ map = {}
42
42
  for definition in definitions:
43
43
  match definition.datatype:
44
+ case LMS_DataType.STRING:
45
+ map[definition.name] = ""
44
46
  case LMS_DataType.LIST:
45
- field_map[definition.name] = definition.list_items[0]
47
+ map[definition.name] = definition.list_items[0]
46
48
  case LMS_DataType.BOOL:
47
- field_map[definition.name] = False
49
+ map[definition.name] = False
48
50
  case LMS_DataType.FLOAT32:
49
- field_map[definition.name] = 0.0
51
+ map[definition.name] = 0.0
50
52
  case _:
51
- field_map[definition.name] = 0
52
- return cls.from_dict(field_map, definitions)
53
+ map[definition.name] = 0
54
+ return map
55
+
56
+ @classmethod
57
+ def create_default_map(cls, definitions: list[ValueDefinition]):
58
+ return cls.from_dict(LMS_FieldMap.create_default_map(definitions), definitions)
53
59
 
54
60
  @classmethod
55
61
  def from_dict(cls, data: dict[str, FieldValue], definitions: list[ValueDefinition]):
@@ -157,7 +157,7 @@ class LMS_MessageNode(LMS_BaseNode):
157
157
  :param file_index: index of the MSBT file in a folder/archive.
158
158
  :param label_index: index of the label entry in that MSBT file.
159
159
  """
160
- return cls(None, None, file_index, label_index)
160
+ return cls(None, file_index, label_index)
161
161
 
162
162
  @classmethod
163
163
  def new_msbt(cls, file_index: int, entry: MSBTEntry, msbt: MSBT):
@@ -168,7 +168,7 @@ class LMS_MessageNode(LMS_BaseNode):
168
168
  :param entry: the MSBTEntry object to reference.
169
169
  :param msbt: the MSBT file.
170
170
  """
171
- return cls(None, None, file_index, msbt.entries.index(entry), msbt)
171
+ return cls(None, file_index, msbt.entries.index(entry), msbt)
172
172
 
173
173
  @property
174
174
  def msbt(self) -> MSBT | None:
@@ -315,7 +315,7 @@ class LMS_BranchNode(LMS_BaseNode):
315
315
  else:
316
316
  for case, branch in self._branches.items():
317
317
  case_message = f"Case {case}"
318
- result.append((case,), case_message, branch)
318
+ result.append(((case,), case_message, branch))
319
319
 
320
320
  return result
321
321
 
@@ -401,7 +401,7 @@ class LMS_EventNode(LMS_BaseNode):
401
401
  id: int,
402
402
  parameter_type: LMS_NodeParameterType,
403
403
  parameter_value: LMS_FieldMap | int | str | tuple[int, ...],
404
- action_id: int,
404
+ event_id: int,
405
405
  definition: NodeDefinition | None = None,
406
406
  ):
407
407
  super().__init__(
@@ -410,7 +410,7 @@ class LMS_EventNode(LMS_BaseNode):
410
410
  parameter_type,
411
411
  parameter_value)
412
412
 
413
- self._event_id = action_id
413
+ self._event_id = event_id
414
414
  self._definition = definition
415
415
 
416
416
  def __repr__(self):
@@ -505,7 +505,7 @@ class LMS_JumpNode(LMS_BaseNode):
505
505
  :param next_entry_point: the next entry point.
506
506
  :param unknown_short0a: unknown short value. -1 if there is no value.
507
507
  """
508
- node = cls(None, next_entry_point.id, unknown_short0a)
508
+ node = cls(None, unknown_short0a)
509
509
  node.next_flowchart = next_entry_point
510
510
  return node
511
511
 
@@ -14,7 +14,7 @@ class NodeConfig:
14
14
  """
15
15
 
16
16
  branch_definitions: dict[int, NodeDefinition | tuple[NodeDefinition, ...]]
17
- event_definitions: dict[int, NodeDefinition, tuple[NodeDefinition, ...]]
17
+ event_definitions: dict[int, NodeDefinition | tuple[NodeDefinition, ...]]
18
18
 
19
19
  def get_definition(self, id: int,
20
20
  node_type: LMS_NodeType.BRANCH | LMS_NodeType.EVENT,
@@ -99,10 +99,10 @@ class NodeDefinition:
99
99
  if "case_format" in data and "case_options" in data:
100
100
  raise ValueError("There may only be one of case_format and options in the definition.")
101
101
 
102
- if (options := data.get("case_options", None)) is not None and type == LMS_NodeType.EVENT:
102
+ if (case_options := data.get("case_options", None)) is not None and node_type == LMS_NodeType.EVENT:
103
103
  raise ValueError("There may only be options for branch nodes!")
104
104
 
105
- if (case_format := data.get("case_format", None)) is not None and type == LMS_NodeType.EVENT:
105
+ if (case_format := data.get("case_format", None)) is not None and node_type == LMS_NodeType.EVENT:
106
106
  raise ValueError("There may only be case_format for branch nodes!")
107
107
 
108
108
  return NodeDefinition(
@@ -113,6 +113,6 @@ class NodeDefinition:
113
113
  parameter_type=parameter_type,
114
114
  parameter_definitions=converted_parameters,
115
115
  case_format=case_format,
116
- case_options=options,
116
+ case_options=case_options,
117
117
  next_node_dependency=data.get("next_node_dependency", False)
118
118
  )
@@ -4,36 +4,81 @@ node_definitions:
4
4
  - id: 0
5
5
  name: EvaluateExpression
6
6
  parameter_type: string
7
+ case_options:
8
+ 0: "true"
9
+ 1: "false"
7
10
  parameters:
8
11
  - name: exp
9
12
  - id: 1
10
13
  name: SwitchVariable
11
- case_format: "var == $case"
12
14
  parameter_type: string
15
+ case_format: "$var == $case"
13
16
  parameters:
14
17
  - name: var
18
+ - id: 16
19
+ name: MiiHasPhraseSet
20
+ parameter_type: p32_1
21
+ case_options:
22
+ 0: "true"
23
+ 1: "false"
24
+ parameters:
25
+ - name: Parameter
26
+ datatype: list
27
+ list_items:
28
+ - Worried_Phrase
29
+ - Good_Phrase
30
+ - Nervous_Phrase
31
+ - Despond_Phase
32
+ - id: 16
33
+ name: EvaluateLayoutResult
34
+ parameter_type: string
35
+ case_format: "button $case clicked"
36
+ parameters:
37
+ - name: layout
38
+ - id: 30
39
+ name: EvaluateMiiRelationshipScore
40
+ parameter_type: p32_1
41
+ case_options:
42
+ 0: "Status.BEST (80+)"
43
+ 1: "Status.GOOD (60-79)"
44
+ 2: "Status.AVERAGE (40-59)"
45
+ 3: "Status.POOR (20-39)"
46
+ 4: "Status.TERRIBLE (0-19)"
47
+ parameters:
48
+ - name: Parameter
15
49
  event:
16
50
  - id: 3
17
51
  name: SetVariable
18
52
  parameter_type: string
19
53
  parameters:
20
54
  - name: expression
55
+ - id: 39
56
+ name: SelectMii
57
+ parameter_type: string
58
+ parameters:
59
+ - name: mii
21
60
  - id: 43
22
61
  name: SetMiiPosition
23
62
  parameter_type: string
24
63
  parameters:
25
64
  - name: pos
65
+ - id: 44
66
+ name: PlayMiiAnimation
67
+ parameter_type: string
68
+ parameters:
69
+ - name: anim
70
+ - id: 48
71
+ name: SetupMessage
72
+ parameter_type: p16_16
73
+ parameters:
74
+ - name: "Parameter 1"
75
+ - name: "Parameter 2"
26
76
  - id: 58
27
77
  name: SetupButtonPrompt
28
78
  next_node_dependency: true
29
79
  parameter_type: string
30
80
  parameters:
31
81
  - name: var
32
- - id: 82
33
- name: SetFlag
34
- parameter_type: p32_1
35
- parameters:
36
- - name: flag
37
82
  - id: 90
38
83
  name: LoadSEGroup
39
84
  parameter_type: string
@@ -44,6 +89,11 @@ node_definitions:
44
89
  parameter_type: string
45
90
  parameters:
46
91
  - name: name
92
+ - id: 106
93
+ name: SetLayoutVisibility
94
+ parameter_type: string
95
+ parameters:
96
+ - name: "layout,visibility"
47
97
  tag_definitions:
48
98
  groups:
49
99
  0: System
@@ -7,7 +7,7 @@ include = ["lms*"]
7
7
 
8
8
  [project]
9
9
  name = "PyLibMS"
10
- version = "4.2.2"
10
+ version = "4.2.4"
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"
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