PyLibMS 3.3.7__tar.gz → 3.3.8__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.7 → pylibms-3.3.8}/PKG-INFO +1 -1
- {pylibms-3.3.7 → pylibms-3.3.8}/PyLibMS.egg-info/PKG-INFO +1 -1
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/tag/io/param_io.py +3 -1
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/tag/io/tag_io.py +1 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/section/string.py +0 -1
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/config.py +7 -5
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/definitions/tags.py +8 -12
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Tomodachi Life Living the Dream Demo.yaml +172 -12
- {pylibms-3.3.7 → pylibms-3.3.8}/pyproject.toml +1 -1
- {pylibms-3.3.7 → pylibms-3.3.8}/LICENSE +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/MANIFEST.in +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/PyLibMS.egg-info/SOURCES.txt +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/PyLibMS.egg-info/dependency_links.txt +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/PyLibMS.egg-info/requires.txt +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/PyLibMS.egg-info/top_level.txt +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/README.md +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/common/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/common/lms_datatype.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/common/lms_exceptions.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/common/lms_fileinfo.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/common/stream/fileinfo.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/common/stream/hashtable.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/common/stream/section.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/fileio/encoding.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/fileio/io.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/definitions/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/definitions/field/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/definitions/field/io.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/definitions/field/lms_field.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/definitions/lms_messagetext.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/msbt.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/msbtentry.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/msbtio.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/section/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/section/atr1.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/section/nli1.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/section/tsy1.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/section/txt2.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/tag/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/tag/lms_tag.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/message/tag/lms_tagexceptions.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/definitions/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/definitions/attribute.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/definitions/color.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/definitions/style.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/definitions/tag.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/msbp.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/msbpread.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/section/ali2.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/section/ati2.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/section/clr1.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/section/syl3.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/section/tag2.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/section/tgg2.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/project/section/tgp2.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/definitions/__init__.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/definitions/attribute.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/definitions/value.py +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Badge Arcade.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Brain Age Concentration Training.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Kirby Planet Robobot.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Super Mario 3D Land.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Super Mario 3D World + Bowsers Fury.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Super Mario Odyssey.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/The Legend of Zelda a Link Between Worlds.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Tomodachi Life.yaml +0 -0
- {pylibms-3.3.7 → pylibms-3.3.8}/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.8
|
|
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.8
|
|
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
|
|
@@ -32,7 +32,9 @@ def read_decoded_parameters(
|
|
|
32
32
|
value = read_field(reader, param)
|
|
33
33
|
except Exception as e:
|
|
34
34
|
raise LMS_TagReadingError(
|
|
35
|
-
f"An error occurred reading tag '[{definition.group_name}:{definition.tag_name}]',
|
|
35
|
+
f"""An error occurred reading tag '[{definition.group_name}:{definition.tag_name}]', at offset {param_offset}.
|
|
36
|
+
Parameter details: name='{param.name}', datatype='{param.datatype}'
|
|
37
|
+
"""
|
|
36
38
|
) from e
|
|
37
39
|
|
|
38
40
|
parameters[param.name] = value
|
|
@@ -35,6 +35,7 @@ def read_tag(
|
|
|
35
35
|
if tag_config is None:
|
|
36
36
|
return _read_encoded_tag(reader, group_id, tag_index, is_closing)
|
|
37
37
|
|
|
38
|
+
print(group_id, tag_index, start, reader.tell())
|
|
38
39
|
definition = tag_config.get_definition_by_indexes(group_id, tag_index)
|
|
39
40
|
|
|
40
41
|
# Tags not defined in the config are not considered fallback tags
|
|
@@ -117,11 +117,14 @@ class TitleConfig:
|
|
|
117
117
|
config["name"], config["description"], definitions
|
|
118
118
|
)
|
|
119
119
|
|
|
120
|
-
tag_definitions
|
|
120
|
+
tag_definitions: dict[int, list[TagDefinition]] = {}
|
|
121
121
|
group_map = parsed_content[cls.TAG_KEY]["groups"]
|
|
122
122
|
|
|
123
123
|
for tag_def in parsed_content[cls.TAG_KEY]["tags"]:
|
|
124
|
-
|
|
124
|
+
definition = TagDefinition.from_dict(tag_def, group_map)
|
|
125
|
+
if definition.group_id not in tag_definitions:
|
|
126
|
+
tag_definitions[definition.group_id] = []
|
|
127
|
+
tag_definitions[definition.group_id].append(definition)
|
|
125
128
|
|
|
126
129
|
tag_config = TagConfig(group_map, tag_definitions)
|
|
127
130
|
|
|
@@ -169,11 +172,10 @@ class TitleConfig:
|
|
|
169
172
|
"group_id": group.group_id,
|
|
170
173
|
"tag_index": i,
|
|
171
174
|
"description": "",
|
|
172
|
-
"parameters": None if not tag_def.parameter_definitions else [],
|
|
173
175
|
}
|
|
174
176
|
|
|
175
|
-
if
|
|
176
|
-
|
|
177
|
+
if tag_def.parameter_definitions:
|
|
178
|
+
definition["parameters"] = []
|
|
177
179
|
|
|
178
180
|
for param_def in tag_def.parameter_definitions:
|
|
179
181
|
param_definition: dict[str, str | list] = {
|
|
@@ -9,7 +9,7 @@ from lms.titleconfig.definitions.value import ValueDefinition
|
|
|
9
9
|
class TagConfig:
|
|
10
10
|
"""Class that represents a tag structure definition."""
|
|
11
11
|
|
|
12
|
-
def __init__(self, group_map: dict[int, str], definitions: list[TagDefinition]):
|
|
12
|
+
def __init__(self, group_map: dict[int, str], definitions: dict[int, list[TagDefinition]]):
|
|
13
13
|
self._group_map = group_map
|
|
14
14
|
self._definitions = definitions
|
|
15
15
|
|
|
@@ -18,23 +18,23 @@ class TagConfig:
|
|
|
18
18
|
return self._group_map
|
|
19
19
|
|
|
20
20
|
@property
|
|
21
|
-
def definitions(self) -> list[TagDefinition]:
|
|
21
|
+
def definitions(self) -> dict[int, list[TagDefinition]]:
|
|
22
22
|
return self._definitions
|
|
23
23
|
|
|
24
24
|
def get_definition_by_names(self, group_name: str, tag_name: str) -> TagDefinition:
|
|
25
|
-
|
|
25
|
+
group_id = None
|
|
26
26
|
for i, name in self.group_map.items():
|
|
27
27
|
if name == group_name:
|
|
28
|
-
|
|
28
|
+
group_id = i
|
|
29
29
|
break
|
|
30
30
|
|
|
31
|
-
if
|
|
31
|
+
if group_id is None:
|
|
32
32
|
raise KeyError(
|
|
33
33
|
f"Group name '{group_name}' was not found! Is the group defined?"
|
|
34
34
|
)
|
|
35
35
|
|
|
36
|
-
for tag_def in self.
|
|
37
|
-
if tag_def.group_id ==
|
|
36
|
+
for tag_def in self._definitions[group_id]:
|
|
37
|
+
if tag_def.group_id == group_id and tag_def.tag_name == tag_name:
|
|
38
38
|
return tag_def
|
|
39
39
|
|
|
40
40
|
raise KeyError(
|
|
@@ -47,11 +47,7 @@ class TagConfig:
|
|
|
47
47
|
if group_id not in self._group_map:
|
|
48
48
|
return None
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
if tag_def.group_id == group_id and tag_def.tag_index == tag_index:
|
|
52
|
-
return tag_def
|
|
53
|
-
|
|
54
|
-
return None
|
|
50
|
+
return self._definitions[group_id][tag_index]
|
|
55
51
|
|
|
56
52
|
|
|
57
53
|
@dataclass(frozen=True)
|
{pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Tomodachi Life Living the Dream Demo.yaml
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
game: Tomodachi Life Living
|
|
1
|
+
game: Tomodachi Life Living the Dream Demo
|
|
2
2
|
tag_definitions:
|
|
3
3
|
groups:
|
|
4
4
|
0: System
|
|
@@ -15,39 +15,43 @@ tag_definitions:
|
|
|
15
15
|
- name: Ruby
|
|
16
16
|
group_id: 0
|
|
17
17
|
tag_index: 0
|
|
18
|
-
description: ''
|
|
18
|
+
description: 'Inserts RUBY text above the text.'
|
|
19
19
|
parameters:
|
|
20
20
|
- name: rt
|
|
21
|
-
description: ''
|
|
21
|
+
description: 'The ruby character to insert.'
|
|
22
22
|
datatype: string
|
|
23
23
|
- name: Font
|
|
24
24
|
group_id: 0
|
|
25
25
|
tag_index: 1
|
|
26
|
-
description: ''
|
|
26
|
+
description: 'Sets a new font style for the current text.'
|
|
27
27
|
parameters:
|
|
28
28
|
- name: name
|
|
29
|
-
description: ''
|
|
29
|
+
description: 'The font name.'
|
|
30
30
|
datatype: string
|
|
31
31
|
- name: Scale
|
|
32
32
|
group_id: 0
|
|
33
33
|
tag_index: 2
|
|
34
|
-
description: ''
|
|
34
|
+
description: 'Scales the text.'
|
|
35
35
|
parameters:
|
|
36
36
|
- name: percent
|
|
37
|
-
description: ''
|
|
37
|
+
description: 'Relative scale as a %.'
|
|
38
38
|
datatype: uint16
|
|
39
39
|
- name: Color
|
|
40
40
|
group_id: 0
|
|
41
41
|
tag_index: 3
|
|
42
|
-
description: ''
|
|
42
|
+
description: 'Sets the color of the text'
|
|
43
43
|
parameters:
|
|
44
|
-
- name:
|
|
45
|
-
description: ''
|
|
46
|
-
datatype:
|
|
44
|
+
- name: id
|
|
45
|
+
description: 'The id of the color.'
|
|
46
|
+
datatype: int16
|
|
47
|
+
- name: PageBreak
|
|
48
|
+
group_id: 0
|
|
49
|
+
tag_index: 4
|
|
50
|
+
description: 'Displays text on a new page in the same label.'
|
|
47
51
|
- name: Reference
|
|
48
52
|
group_id: 0
|
|
49
53
|
tag_index: 5
|
|
50
|
-
description: ''
|
|
54
|
+
description: 'References text from a different file.'
|
|
51
55
|
parameters:
|
|
52
56
|
- name: mltxt
|
|
53
57
|
description: ''
|
|
@@ -512,6 +516,18 @@ tag_definitions:
|
|
|
512
516
|
list_items:
|
|
513
517
|
- PairDetail
|
|
514
518
|
- PairSpoken
|
|
519
|
+
- name: RelationMeterRank
|
|
520
|
+
group_id: 2
|
|
521
|
+
tag_index: 21
|
|
522
|
+
description: ''
|
|
523
|
+
- name: BloodRelation
|
|
524
|
+
group_id: 2
|
|
525
|
+
tag_index: 22
|
|
526
|
+
description: ''
|
|
527
|
+
- name: BloodRelationLong
|
|
528
|
+
group_id: 2
|
|
529
|
+
tag_index: 23
|
|
530
|
+
description: ''
|
|
515
531
|
- name: MapObject
|
|
516
532
|
group_id: 2
|
|
517
533
|
tag_index: 24
|
|
@@ -562,6 +578,10 @@ tag_definitions:
|
|
|
562
578
|
list_items:
|
|
563
579
|
- Valid
|
|
564
580
|
- Invalid
|
|
581
|
+
- name: IslandType
|
|
582
|
+
group_id: 2
|
|
583
|
+
tag_index: 28
|
|
584
|
+
description: ''
|
|
565
585
|
- name: RoommateGroup
|
|
566
586
|
group_id: 2
|
|
567
587
|
tag_index: 29
|
|
@@ -635,6 +655,10 @@ tag_definitions:
|
|
|
635
655
|
list_items:
|
|
636
656
|
- Valid
|
|
637
657
|
- Invalid
|
|
658
|
+
- name: Travel
|
|
659
|
+
group_id: 2
|
|
660
|
+
tag_index: 33
|
|
661
|
+
description: ''
|
|
638
662
|
- name: BookText
|
|
639
663
|
group_id: 2
|
|
640
664
|
tag_index: 34
|
|
@@ -646,6 +670,14 @@ tag_definitions:
|
|
|
646
670
|
list_items:
|
|
647
671
|
- Valid
|
|
648
672
|
- Invalid
|
|
673
|
+
- name: WordAttrGrammaticality
|
|
674
|
+
group_id: 2
|
|
675
|
+
tag_index: 35
|
|
676
|
+
description: ''
|
|
677
|
+
- name: WordAttrCount
|
|
678
|
+
group_id: 2
|
|
679
|
+
tag_index: 36
|
|
680
|
+
description: ''
|
|
649
681
|
- name: RandomSetUGCText
|
|
650
682
|
group_id: 2
|
|
651
683
|
tag_index: 37
|
|
@@ -818,6 +850,26 @@ tag_definitions:
|
|
|
818
850
|
- ParticipantMii1
|
|
819
851
|
- ParticipantMii2
|
|
820
852
|
- ParticipantMii3
|
|
853
|
+
- name: PlayerNicknameCommon
|
|
854
|
+
group_id: 5
|
|
855
|
+
tag_index: 1
|
|
856
|
+
description: ''
|
|
857
|
+
- name: EmotionSadness
|
|
858
|
+
group_id: 6
|
|
859
|
+
tag_index: 0
|
|
860
|
+
description: ''
|
|
861
|
+
- name: EmotionAnger
|
|
862
|
+
group_id: 6
|
|
863
|
+
tag_index: 1
|
|
864
|
+
description: ''
|
|
865
|
+
- name: EmotionShout
|
|
866
|
+
group_id: 6
|
|
867
|
+
tag_index: 2
|
|
868
|
+
description: ''
|
|
869
|
+
- name: EmotionWhisper
|
|
870
|
+
group_id: 6
|
|
871
|
+
tag_index: 3
|
|
872
|
+
description: ''
|
|
821
873
|
- name: Break
|
|
822
874
|
group_id: 6
|
|
823
875
|
tag_index: 4
|
|
@@ -933,6 +985,14 @@ tag_definitions:
|
|
|
933
985
|
datatype: list
|
|
934
986
|
list_items:
|
|
935
987
|
- Emphasis
|
|
988
|
+
- name: LipSyncOff
|
|
989
|
+
group_id: 8
|
|
990
|
+
tag_index: 1
|
|
991
|
+
description: ''
|
|
992
|
+
- name: TelopOff
|
|
993
|
+
group_id: 8
|
|
994
|
+
tag_index: 2
|
|
995
|
+
description: ''
|
|
936
996
|
- name: Pulldown
|
|
937
997
|
group_id: 9
|
|
938
998
|
tag_index: 0
|
|
@@ -954,6 +1014,10 @@ tag_definitions:
|
|
|
954
1014
|
- name: Neuter
|
|
955
1015
|
description: ''
|
|
956
1016
|
datatype: string
|
|
1017
|
+
- name: RegisteredTrademark
|
|
1018
|
+
group_id: 9
|
|
1019
|
+
tag_index: 1
|
|
1020
|
+
description: ''
|
|
957
1021
|
- name: AMPM
|
|
958
1022
|
group_id: 100
|
|
959
1023
|
tag_index: 0
|
|
@@ -1819,6 +1883,14 @@ tag_definitions:
|
|
|
1819
1883
|
- ParticipantMii1
|
|
1820
1884
|
- ParticipantMii2
|
|
1821
1885
|
- ParticipantMii3
|
|
1886
|
+
- name: FocusTelopSubject
|
|
1887
|
+
group_id: 200
|
|
1888
|
+
tag_index: 16
|
|
1889
|
+
description: ''
|
|
1890
|
+
- name: FocusTelopSubjectOnePerson
|
|
1891
|
+
group_id: 200
|
|
1892
|
+
tag_index: 17
|
|
1893
|
+
description: ''
|
|
1822
1894
|
- name: ThirdPersonPronoun
|
|
1823
1895
|
group_id: 200
|
|
1824
1896
|
tag_index: 18
|
|
@@ -2254,6 +2326,22 @@ tag_definitions:
|
|
|
2254
2326
|
list_items:
|
|
2255
2327
|
- Singular
|
|
2256
2328
|
- Plural
|
|
2329
|
+
- name: DefArt
|
|
2330
|
+
group_id: 201
|
|
2331
|
+
tag_index: 1
|
|
2332
|
+
description: ''
|
|
2333
|
+
- name: IndefArt
|
|
2334
|
+
group_id: 201
|
|
2335
|
+
tag_index: 2
|
|
2336
|
+
description: ''
|
|
2337
|
+
- name: Cap
|
|
2338
|
+
group_id: 201
|
|
2339
|
+
tag_index: 3
|
|
2340
|
+
description: ''
|
|
2341
|
+
- name: Decap
|
|
2342
|
+
group_id: 201
|
|
2343
|
+
tag_index: 4
|
|
2344
|
+
description: ''
|
|
2257
2345
|
- name: Gender
|
|
2258
2346
|
group_id: 201
|
|
2259
2347
|
tag_index: 5
|
|
@@ -2304,6 +2392,14 @@ tag_definitions:
|
|
|
2304
2392
|
- name: 'No'
|
|
2305
2393
|
description: ''
|
|
2306
2394
|
datatype: string
|
|
2395
|
+
- name: Case
|
|
2396
|
+
group_id: 201
|
|
2397
|
+
tag_index: 9
|
|
2398
|
+
description: ''
|
|
2399
|
+
- name: Declension
|
|
2400
|
+
group_id: 201
|
|
2401
|
+
tag_index: 10
|
|
2402
|
+
description: ''
|
|
2307
2403
|
- name: Elision
|
|
2308
2404
|
group_id: 201
|
|
2309
2405
|
tag_index: 11
|
|
@@ -2315,6 +2411,26 @@ tag_definitions:
|
|
|
2315
2411
|
- name: Elision
|
|
2316
2412
|
description: ''
|
|
2317
2413
|
datatype: string
|
|
2414
|
+
- name: CapAll
|
|
2415
|
+
group_id: 201
|
|
2416
|
+
tag_index: 12
|
|
2417
|
+
description: ''
|
|
2418
|
+
- name: IgnoreCap
|
|
2419
|
+
group_id: 201
|
|
2420
|
+
tag_index: 13
|
|
2421
|
+
description: ''
|
|
2422
|
+
- name: CapNext
|
|
2423
|
+
group_id: 201
|
|
2424
|
+
tag_index: 14
|
|
2425
|
+
description: ''
|
|
2426
|
+
- name: DecapAll
|
|
2427
|
+
group_id: 201
|
|
2428
|
+
tag_index: 15
|
|
2429
|
+
description: ''
|
|
2430
|
+
- name: DecapHyphenated
|
|
2431
|
+
group_id: 201
|
|
2432
|
+
tag_index: 16
|
|
2433
|
+
description: ''
|
|
2318
2434
|
- name: CountN
|
|
2319
2435
|
group_id: 201
|
|
2320
2436
|
tag_index: 17
|
|
@@ -2455,6 +2571,46 @@ tag_definitions:
|
|
|
2455
2571
|
- name: NeuterPlural
|
|
2456
2572
|
description: ''
|
|
2457
2573
|
datatype: string
|
|
2574
|
+
- name: CapSP
|
|
2575
|
+
group_id: 201
|
|
2576
|
+
tag_index: 21
|
|
2577
|
+
description: ''
|
|
2578
|
+
- name: PrepositionDefArt_It_a
|
|
2579
|
+
group_id: 201
|
|
2580
|
+
tag_index: 22
|
|
2581
|
+
description: ''
|
|
2582
|
+
- name: PrepositionDefArt_It_da
|
|
2583
|
+
group_id: 201
|
|
2584
|
+
tag_index: 23
|
|
2585
|
+
description: ''
|
|
2586
|
+
- name: PrepositionDefArt_It_di
|
|
2587
|
+
group_id: 201
|
|
2588
|
+
tag_index: 24
|
|
2589
|
+
description: ''
|
|
2590
|
+
- name: PrepositionDefArt_It_in
|
|
2591
|
+
group_id: 201
|
|
2592
|
+
tag_index: 25
|
|
2593
|
+
description: ''
|
|
2594
|
+
- name: PrepositionDefArt_It_su
|
|
2595
|
+
group_id: 201
|
|
2596
|
+
tag_index: 26
|
|
2597
|
+
description: ''
|
|
2598
|
+
- name: PrepositionDefArt_Es_a
|
|
2599
|
+
group_id: 201
|
|
2600
|
+
tag_index: 27
|
|
2601
|
+
description: ''
|
|
2602
|
+
- name: PrepositionDefArt_Es_de
|
|
2603
|
+
group_id: 201
|
|
2604
|
+
tag_index: 28
|
|
2605
|
+
description: ''
|
|
2606
|
+
- name: PrepositionDefArt_Fr_a
|
|
2607
|
+
group_id: 201
|
|
2608
|
+
tag_index: 29
|
|
2609
|
+
description: ''
|
|
2610
|
+
- name: PrepositionDefArt_Fr_de
|
|
2611
|
+
group_id: 201
|
|
2612
|
+
tag_index: 30
|
|
2613
|
+
description: ''
|
|
2458
2614
|
- name: CountClockHour
|
|
2459
2615
|
group_id: 201
|
|
2460
2616
|
tag_index: 31
|
|
@@ -2501,6 +2657,10 @@ tag_definitions:
|
|
|
2501
2657
|
- name: Plural
|
|
2502
2658
|
description: ''
|
|
2503
2659
|
datatype: string
|
|
2660
|
+
- name: CapNextIfNeed
|
|
2661
|
+
group_id: 201
|
|
2662
|
+
tag_index: 33
|
|
2663
|
+
description: ''
|
|
2504
2664
|
- name: AS
|
|
2505
2665
|
group_id: 300
|
|
2506
2666
|
tag_index: 0
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "PyLibMS"
|
|
7
|
-
version = "3.3.
|
|
7
|
+
version = "3.3.8"
|
|
8
8
|
requires-python = ">=3.12"
|
|
9
9
|
description = "Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and soon to be MSBF."
|
|
10
10
|
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
|
|
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-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Brain Age Concentration Training.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/Super Mario 3D World + Bowsers Fury.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{pylibms-3.3.7 → pylibms-3.3.8}/lms/titleconfig/presets/The Legend of Zelda Echos of Wisdom.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|