PyLibMS 3.3.3__tar.gz → 3.3.5__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-3.3.3 → pylibms-3.3.5}/PKG-INFO +1 -1
- {pylibms-3.3.3 → pylibms-3.3.5}/PyLibMS.egg-info/PKG-INFO +1 -1
- {pylibms-3.3.3 → pylibms-3.3.5}/PyLibMS.egg-info/SOURCES.txt +1 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/definitions/field/lms_field.py +18 -4
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/msbt.py +6 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/definitions/attribute.py +1 -0
- pylibms-3.3.5/lms/titleconfig/presets/Tomodachi Life Living the Dream Demo.yaml +13054 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/pyproject.toml +1 -1
- {pylibms-3.3.3 → pylibms-3.3.5}/LICENSE +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/MANIFEST.in +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/PyLibMS.egg-info/dependency_links.txt +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/PyLibMS.egg-info/requires.txt +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/PyLibMS.egg-info/top_level.txt +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/README.md +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/common/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/common/lms_datatype.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/common/lms_exceptions.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/common/lms_fileinfo.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/common/stream/fileinfo.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/common/stream/hashtable.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/common/stream/section.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/fileio/encoding.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/fileio/io.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/definitions/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/definitions/field/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/definitions/field/io.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/definitions/lms_messagetext.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/msbtentry.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/msbtio.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/section/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/section/atr1.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/section/nli1.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/section/tsy1.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/section/txt2.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/tag/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/tag/io/param_io.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/tag/io/tag_io.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/tag/lms_tag.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/message/tag/lms_tagexceptions.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/definitions/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/definitions/attribute.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/definitions/color.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/definitions/style.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/definitions/tag.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/msbp.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/msbpread.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/section/ali2.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/section/ati2.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/section/clr1.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/section/string.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/section/syl3.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/section/tag2.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/section/tgg2.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/project/section/tgp2.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/config.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/definitions/__init__.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/definitions/tags.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/definitions/value.py +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/Badge Arcade.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/Brain Age Concentration Training.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/Kirby Planet Robobot.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/Super Mario 3D Land.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/Super Mario 3D World + Bowsers Fury.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/Super Mario Odyssey.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/The Legend of Zelda a Link Between Worlds.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/lms/titleconfig/presets/Tomodachi Life.yaml +0 -0
- {pylibms-3.3.3 → pylibms-3.3.5}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyLibMS
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.5
|
|
4
4
|
Summary: Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and soon to be MSBF.
|
|
5
5
|
Author: AbdyyEee
|
|
6
6
|
License: Copyright 2025 AbdyyEee
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyLibMS
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.5
|
|
4
4
|
Summary: Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and soon to be MSBF.
|
|
5
5
|
Author: AbdyyEee
|
|
6
6
|
License: Copyright 2025 AbdyyEee
|
|
@@ -66,4 +66,5 @@ lms/titleconfig/presets/Super Mario 3D World + Bowsers Fury.yaml
|
|
|
66
66
|
lms/titleconfig/presets/Super Mario Odyssey.yaml
|
|
67
67
|
lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml
|
|
68
68
|
lms/titleconfig/presets/The Legend of Zelda a Link Between Worlds.yaml
|
|
69
|
+
lms/titleconfig/presets/Tomodachi Life Living the Dream Demo.yaml
|
|
69
70
|
lms/titleconfig/presets/Tomodachi Life.yaml
|
|
@@ -6,12 +6,11 @@ from dataclasses import dataclass
|
|
|
6
6
|
from lms.common.lms_datatype import LMS_DataType
|
|
7
7
|
from lms.titleconfig.definitions.value import ValueDefinition
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
FLOAT32_MIN = -3.4028235e38
|
|
10
|
+
FLOAT32_MAX = 3.4028235e38
|
|
11
11
|
|
|
12
12
|
type FieldValue = int | str | float | bool | bytes
|
|
13
13
|
|
|
14
|
-
|
|
15
14
|
@dataclass(frozen=True)
|
|
16
15
|
class LMS_FieldMap:
|
|
17
16
|
"""
|
|
@@ -39,6 +38,21 @@ class LMS_FieldMap:
|
|
|
39
38
|
"""Converts the field map to a regular dictionary."""
|
|
40
39
|
return {field.name: field.value for field in self.fields.values()}
|
|
41
40
|
|
|
41
|
+
@classmethod
|
|
42
|
+
def create_default_map(cls, definitions: list[ValueDefinition]):
|
|
43
|
+
field_map = {}
|
|
44
|
+
for definition in definitions:
|
|
45
|
+
match definition.datatype:
|
|
46
|
+
case LMS_DataType.LIST:
|
|
47
|
+
field_map[definition.name] = definition.list_items[0]
|
|
48
|
+
case LMS_DataType.BOOL:
|
|
49
|
+
field_map[definition.name] = False
|
|
50
|
+
case LMS_DataType.FLOAT32:
|
|
51
|
+
field_map[definition.name] = 0.0
|
|
52
|
+
case _:
|
|
53
|
+
field_map[definition.name] = 0
|
|
54
|
+
return cls.from_dict(field_map, definitions)
|
|
55
|
+
|
|
42
56
|
@classmethod
|
|
43
57
|
def from_dict(cls, data: dict[str, FieldValue], definitions: list[ValueDefinition]):
|
|
44
58
|
return cls(
|
|
@@ -148,7 +162,7 @@ def _verify_value(
|
|
|
148
162
|
else:
|
|
149
163
|
return
|
|
150
164
|
case LMS_DataType.FLOAT32 if isinstance(value, float):
|
|
151
|
-
_verify_number_is_in_range(value,
|
|
165
|
+
_verify_number_is_in_range(value, FLOAT32_MIN, FLOAT32_MAX, definition)
|
|
152
166
|
return
|
|
153
167
|
case _ if isinstance(value, int):
|
|
154
168
|
bits = datatype.stream_size * 8
|
|
@@ -124,6 +124,12 @@ class MSBT:
|
|
|
124
124
|
"""If the MSBT contains style indexes."""
|
|
125
125
|
return self.section_exists("TSY1")
|
|
126
126
|
|
|
127
|
+
def label_exists(self, label: str) -> bool:
|
|
128
|
+
"""Returns if a label already exists in the MSBT instance.
|
|
129
|
+
|
|
130
|
+
:param label: the label to check."""
|
|
131
|
+
return label in self._label_map
|
|
132
|
+
|
|
127
133
|
def get_entry_by_index(self, index: int) -> MSBTEntry:
|
|
128
134
|
"""
|
|
129
135
|
Retrieves an entry given its index. Supports negative indexing.
|