PyLibMS 3.3.2__py3-none-any.whl → 3.3.4__py3-none-any.whl

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.
@@ -11,7 +11,6 @@ FLOAT_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(
lms/message/msbt.py CHANGED
@@ -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.
@@ -105,7 +105,7 @@ class LMS_EncodedTag:
105
105
  )
106
106
 
107
107
  try:
108
- parameters = [int(param.strip().upper()) for param in param_str.split("-")]
108
+ parameters = [int(param.strip().upper(), 16) for param in param_str.split("-")]
109
109
  except ValueError:
110
110
  raise LMS_TagInvalidFormatError(
111
111
  f"Malformed parameters in tag '{tag}'. Ensure all the parameters are integers.")
@@ -10,3 +10,4 @@ class AttributeConfig:
10
10
  name: str
11
11
  description: str
12
12
  definitions: list[ValueDefinition]
13
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyLibMS
3
- Version: 3.3.2
3
+ Version: 3.3.4
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
@@ -9,21 +9,21 @@ lms/common/stream/section.py,sha256=GDnthGVmGeAMdg5RtsOl3Ex80asIRSAnG2zlXgMKan8,
9
9
  lms/fileio/encoding.py,sha256=8OmDxpVLu613TH6xb47Szb3bo7gqNeCh2xJjnNI3Ds0,1283
10
10
  lms/fileio/io.py,sha256=JceZzzh20dSriz9A1o2rASYM6Of2s-1xIbbklpL_dAU,6327
11
11
  lms/message/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- lms/message/msbt.py,sha256=x-jhT7fv3j_u6ZIyTW0Y4YfxMLlYVWzFflR3-2NwKaw,7586
12
+ lms/message/msbt.py,sha256=JOF_cYIWjw4vIJZGH8gJoH24x5OBiWUMkdP5CFM_xns,7794
13
13
  lms/message/msbtentry.py,sha256=aknkf1Ly5Ultlv19h4hUEg_oMnR0NqAbs4LODramuAo,3754
14
14
  lms/message/msbtio.py,sha256=2yFK0mw5D6DojwumPshBcXLEQ7bEqcOgpmMNJKZQRwo,7165
15
15
  lms/message/definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  lms/message/definitions/lms_messagetext.py,sha256=JsFyi_0AhF8ZWtyyAhSnuJ8mUAiXqWlEXCNyjl47eN4,5984
17
17
  lms/message/definitions/field/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  lms/message/definitions/field/io.py,sha256=wuTHroRgql1L7qFhvnsYXM7HMnA_0Dukl6RWbFCXu84,2520
19
- lms/message/definitions/field/lms_field.py,sha256=blJUE5iPpQB9XC0fBomtfeSVpNUit2NQpqKyHMkLYcM,6173
19
+ lms/message/definitions/field/lms_field.py,sha256=ZxrxihfyHxBnLhJAqx5bubGwukf07cdTesYvRMfZ1zg,6809
20
20
  lms/message/section/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  lms/message/section/atr1.py,sha256=V2Z25mlhfRXHPAT0CFFJEDoIgLkgoczwGW5G4wlY5K4,3846
22
22
  lms/message/section/nli1.py,sha256=oxR5PvgBsVY8FwfYlgOk8b6ACWqVzuc4-ju_nZSccLE,584
23
23
  lms/message/section/tsy1.py,sha256=FKuAlUduxT-JfkQvb5QTmRBsrH5yk6rY-l2BRyRbSlI,397
24
24
  lms/message/section/txt2.py,sha256=NGQnyxPkOccEayG2VTPAbgjndfgLRzXqNZPwCo4rkxE,2317
25
25
  lms/message/tag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- lms/message/tag/lms_tag.py,sha256=-lYrTT87k6jPjh9NTX-rxPCjwASiKq39TB_EYakxDLk,7266
26
+ lms/message/tag/lms_tag.py,sha256=k9vXCVwuPZCb73cyJPr2gzZzYKk_0oNetI6O1hdy30Y,7270
27
27
  lms/message/tag/lms_tagexceptions.py,sha256=cP2rFQmWt8rLHgUadizy4ehL_zqUWRMp6K0DB0ZCzvQ,202
28
28
  lms/message/tag/io/param_io.py,sha256=5No_4kJ_EUVNdvcYfjixHo3KvNmWEKg6xyGDQRYcQZk,3275
29
29
  lms/message/tag/io/tag_io.py,sha256=Pm_dXR2PtGDG7Otpe-n5fV_SymBzv3HzdQEQY2NFT2A,3964
@@ -46,7 +46,7 @@ lms/project/section/tgp2.py,sha256=CKasRsL4tEP1c7_MHtwV7Kc3E4-3zd51wpyKvbim4_0,9
46
46
  lms/titleconfig/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  lms/titleconfig/config.py,sha256=OABJUVXjiP83uyVMYWflKaRmw_Kwdph-LC50Fr4EdM4,7403
48
48
  lms/titleconfig/definitions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- lms/titleconfig/definitions/attribute.py,sha256=5gP7IgBDLZ-9kxiC6bwA0iQ9vK2wvZsFmS3Nelo1Nw8,297
49
+ lms/titleconfig/definitions/attribute.py,sha256=1Wcnn9FFicUHVWRtnx1S7LP-hmtE2MxIvtgncpsWX5c,299
50
50
  lms/titleconfig/definitions/tags.py,sha256=uKPu3frVKlPd5bpeMdqILwfblAlyTy9WHiPvnqcC8LA,3004
51
51
  lms/titleconfig/definitions/value.py,sha256=56Lbjk8AqhwFFox7ucPiqz3Wyc3Kk-5r2dQKZ4c9Tuk,562
52
52
  lms/titleconfig/presets/Badge Arcade.yaml,sha256=bqUa-doRSiipt_EcKIj4lRN_sxf_ZLYBYyZEWpBmhdY,11834
@@ -58,8 +58,8 @@ lms/titleconfig/presets/Super Mario Odyssey.yaml,sha256=mV4BsLPzupEPy2RmPUxXlz0U
58
58
  lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml,sha256=6AoSNRNORjMzMBp2ais_ujRdLLeOe7FB0YlozZJNvHg,2878
59
59
  lms/titleconfig/presets/The Legend of Zelda a Link Between Worlds.yaml,sha256=IY8wPIWMA4ElnN_dtV455beBucntxEBeeJXxUUIrnuw,9785
60
60
  lms/titleconfig/presets/Tomodachi Life.yaml,sha256=aS1Wnpyzsn3bj_xHVF1ZKCzEBNuueWBAppQGAqSWGIo,187354
61
- pylibms-3.3.2.dist-info/licenses/LICENSE,sha256=IGTA9rMb-XpTMPJOzC6z0rRxSzysj3DlV5IQyDd06Xo,1061
62
- pylibms-3.3.2.dist-info/METADATA,sha256=gdTXqSupGt2iL14U8I91_blDzpI0VCFnAdGktnp1oXw,3610
63
- pylibms-3.3.2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
64
- pylibms-3.3.2.dist-info/top_level.txt,sha256=SWQqb3sjP5r5Ls1Ol4E_PIbsv1sggK4DCkkLEzXNRTU,4
65
- pylibms-3.3.2.dist-info/RECORD,,
61
+ pylibms-3.3.4.dist-info/licenses/LICENSE,sha256=IGTA9rMb-XpTMPJOzC6z0rRxSzysj3DlV5IQyDd06Xo,1061
62
+ pylibms-3.3.4.dist-info/METADATA,sha256=V9FyJB-3x7O48jRWYoukmI_DDSkfgGc5PB8Xt38za7g,3610
63
+ pylibms-3.3.4.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
64
+ pylibms-3.3.4.dist-info/top_level.txt,sha256=SWQqb3sjP5r5Ls1Ol4E_PIbsv1sggK4DCkkLEzXNRTU,4
65
+ pylibms-3.3.4.dist-info/RECORD,,