PyLibMS 2.0.7__tar.gz → 2.0.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-2.0.7/LMS → pylibms-2.0.8/LMS/Message/Definitions}/Field/LMS_Field.py +1 -1
- {pylibms-2.0.7/LMS/Message/Definitions → pylibms-2.0.8/LMS/Message/Definitions/Field}/LMS_FieldMap.py +1 -1
- {pylibms-2.0.7/LMS → pylibms-2.0.8/LMS/Message/Definitions}/Field/Stream.py +2 -2
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Definitions/LMS_MessageText.py +3 -2
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/MSBT.py +41 -3
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/MSBTEntry.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/MSBTStream.py +5 -12
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Section/ATR1.py +4 -4
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Tag/LMS_Tag.py +4 -3
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Tag/Stream.py +6 -8
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Tag/System_Definition.py +1 -1
- pylibms-2.0.8/LMS/Message/Tag/Tag_Formats.py +10 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Definitions/Attribute.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Definitions/Tag.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/MSBPRead.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Section/ATI2.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Section/TAG2.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Section/TGP2.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/TitleConfig/Config.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/TitleConfig/Definitions/Value.py +1 -1
- {pylibms-2.0.7 → pylibms-2.0.8}/PKG-INFO +5 -2
- {pylibms-2.0.7 → pylibms-2.0.8}/PyLibMS.egg-info/PKG-INFO +5 -2
- {pylibms-2.0.7 → pylibms-2.0.8}/PyLibMS.egg-info/SOURCES.txt +5 -5
- {pylibms-2.0.7 → pylibms-2.0.8}/README.md +3 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/pyproject.toml +2 -2
- pylibms-2.0.7/LMS/Message/Tag/Tag_Formats.py +0 -10
- {pylibms-2.0.7 → pylibms-2.0.8}/LICENSE +0 -0
- {pylibms-2.0.7/LMS/Field → pylibms-2.0.8/LMS/Common}/LMS_DataType.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Common/LMS_Exceptions.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Common/LMS_FileInfo.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Common/Stream/FileInfo.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Common/Stream/Hashtable.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Common/Stream/Section.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Common/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/FileIO/Encoding.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/FileIO/Stream.py +0 -0
- {pylibms-2.0.7/LMS → pylibms-2.0.8/LMS/Message/Definitions}/Field/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Definitions/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Section/TSY1.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Section/TXT2.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Section/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Tag/LMS_TagExceptions.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/Tag/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Message/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Definitions/Color.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Definitions/Style.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Definitions/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/MSBP.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Section/ALI2.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Section/CLR1.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Section/SYL3.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Section/String.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/Section/TGG2.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/Project/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/TitleConfig/Definitions/Attributes.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/TitleConfig/Definitions/Tags.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/TitleConfig/Definitions/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/TitleConfig/Presets/Tomodachi Life.yaml +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/TitleConfig/Presets/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/TitleConfig/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/LMS/__init__.py +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/MANIFEST.in +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/PyLibMS.egg-info/dependency_links.txt +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/PyLibMS.egg-info/requires.txt +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/PyLibMS.egg-info/top_level.txt +0 -0
- {pylibms-2.0.7 → pylibms-2.0.8}/setup.cfg +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from LMS.Field.LMS_Field import LMS_Field
|
|
1
|
+
from LMS.Message.Definitions.Field.LMS_Field import LMS_Field
|
|
2
2
|
|
|
3
3
|
# Typehint that represents a map of strings to field instances.
|
|
4
4
|
# Utilized as a means of storing attributes, or parameters in decoded tags mapped to their string names.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from LMS.
|
|
2
|
-
from LMS.Field.LMS_Field import LMS_Field
|
|
1
|
+
from LMS.Common.LMS_DataType import LMS_DataType
|
|
3
2
|
from LMS.FileIO.Stream import FileReader, FileWriter
|
|
3
|
+
from LMS.Message.Definitions.Field.LMS_Field import LMS_Field
|
|
4
4
|
from LMS.TitleConfig.Definitions.Value import ValueDefinition
|
|
5
5
|
|
|
6
6
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import re
|
|
2
2
|
from typing import overload
|
|
3
3
|
|
|
4
|
-
from LMS.Field.LMS_Field import LMS_Field
|
|
4
|
+
from LMS.Message.Definitions.Field.LMS_Field import LMS_Field
|
|
5
5
|
from LMS.Message.Tag.LMS_Tag import LMS_DecodedTag, LMS_EncodedTag, LMS_TagBase
|
|
6
|
-
from LMS.Message.Tag.Tag_Formats import DECODED_FORMAT, ENCODED_FORMAT,
|
|
6
|
+
from LMS.Message.Tag.Tag_Formats import (DECODED_FORMAT, ENCODED_FORMAT,
|
|
7
|
+
TAG_FORMAT)
|
|
7
8
|
from LMS.TitleConfig.Config import TagConfig
|
|
8
9
|
|
|
9
10
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
from LMS.Common.LMS_FileInfo import LMS_FileInfo
|
|
2
|
+
from LMS.Message.Definitions.Field.LMS_Field import LMS_Field
|
|
3
|
+
from LMS.Message.Definitions.LMS_MessageText import LMS_MessageText
|
|
2
4
|
from LMS.Message.MSBTEntry import MSBTEntry
|
|
5
|
+
from LMS.TitleConfig.Definitions.Attributes import AttributeConfig
|
|
6
|
+
from LMS.TitleConfig.Definitions.Tags import TagConfig
|
|
3
7
|
|
|
4
8
|
|
|
5
9
|
class MSBT:
|
|
@@ -7,7 +11,12 @@ class MSBT:
|
|
|
7
11
|
|
|
8
12
|
https://nintendo-formats.com/libs/lms/msbt.html."""
|
|
9
13
|
|
|
10
|
-
def __init__(
|
|
14
|
+
def __init__(
|
|
15
|
+
self,
|
|
16
|
+
info: LMS_FileInfo,
|
|
17
|
+
attribute_config: AttributeConfig | None,
|
|
18
|
+
tag_config: TagConfig | None,
|
|
19
|
+
):
|
|
11
20
|
self._info = info
|
|
12
21
|
|
|
13
22
|
self._entries: list[MSBTEntry] = []
|
|
@@ -27,6 +36,10 @@ class MSBT:
|
|
|
27
36
|
# List of unsupported sections mapped to their raw data
|
|
28
37
|
self.unsupported_sections: dict[str, bytes] = {}
|
|
29
38
|
|
|
39
|
+
# Store configs so if new labels are added LMS_MessageText objects and Attributes can be made properly
|
|
40
|
+
self._attribute_config = attribute_config
|
|
41
|
+
self._tag_config = tag_config
|
|
42
|
+
|
|
30
43
|
@property
|
|
31
44
|
def info(self) -> LMS_FileInfo:
|
|
32
45
|
"""The file info for the MSBT instance."""
|
|
@@ -41,7 +54,7 @@ class MSBT:
|
|
|
41
54
|
self,
|
|
42
55
|
name: str,
|
|
43
56
|
text: str = None,
|
|
44
|
-
attribute: dict[str, int | str | float | bool | bytes] = None,
|
|
57
|
+
attribute: dict[str, int | str | float | bool | bytes] | bytes = None,
|
|
45
58
|
style_index: int = None,
|
|
46
59
|
) -> None:
|
|
47
60
|
"""Adds an entry to the MSBT instance.
|
|
@@ -50,7 +63,32 @@ class MSBT:
|
|
|
50
63
|
if name in [entry.name for entry in self.entries]:
|
|
51
64
|
raise KeyError(f"The label '{name}' already exists!")
|
|
52
65
|
|
|
53
|
-
|
|
66
|
+
if isinstance(attribute, dict):
|
|
67
|
+
if self._attribute_config is None:
|
|
68
|
+
raise ValueError(
|
|
69
|
+
"The attribute config must have been provided when reading to add decoded attributes!"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
converted_attribute = {}
|
|
73
|
+
|
|
74
|
+
for definition in self._attribute_config.definitions:
|
|
75
|
+
converted_attribute[definition.name] = LMS_Field(
|
|
76
|
+
attribute[definition.name], definition
|
|
77
|
+
)
|
|
78
|
+
else:
|
|
79
|
+
converted_attribute = attribute
|
|
80
|
+
|
|
81
|
+
if text is not None:
|
|
82
|
+
if self._tag_config is not None:
|
|
83
|
+
message_text = LMS_MessageText(text, self._tag_config)
|
|
84
|
+
else:
|
|
85
|
+
message_text = text
|
|
86
|
+
else:
|
|
87
|
+
message_text = ""
|
|
88
|
+
|
|
89
|
+
self._entries.append(
|
|
90
|
+
MSBTEntry(name, message_text, converted_attribute, style_index)
|
|
91
|
+
)
|
|
54
92
|
|
|
55
93
|
def get_entry(self, name: str) -> MSBTEntry:
|
|
56
94
|
"""Retrieves an entry given it's name.
|
|
@@ -3,20 +3,13 @@ from typing import BinaryIO
|
|
|
3
3
|
from LMS.Common import LMS_Exceptions
|
|
4
4
|
from LMS.Common.Stream.FileInfo import read_file_info, write_file_info
|
|
5
5
|
from LMS.Common.Stream.Hashtable import read_labels, write_labels
|
|
6
|
-
from LMS.Common.Stream.Section import (
|
|
7
|
-
|
|
8
|
-
write_section,
|
|
9
|
-
write_unsupported_section,
|
|
10
|
-
)
|
|
6
|
+
from LMS.Common.Stream.Section import (read_section_data, write_section,
|
|
7
|
+
write_unsupported_section)
|
|
11
8
|
from LMS.FileIO.Stream import FileReader, FileWriter
|
|
12
9
|
from LMS.Message.MSBT import MSBT
|
|
13
10
|
from LMS.Message.MSBTEntry import MSBTEntry
|
|
14
|
-
from LMS.Message.Section.ATR1 import (
|
|
15
|
-
|
|
16
|
-
read_encoded_atr1,
|
|
17
|
-
write_decoded_atr1,
|
|
18
|
-
write_encoded_atr1,
|
|
19
|
-
)
|
|
11
|
+
from LMS.Message.Section.ATR1 import (read_decoded_atr1, read_encoded_atr1,
|
|
12
|
+
write_decoded_atr1, write_encoded_atr1)
|
|
20
13
|
from LMS.Message.Section.TSY1 import read_tsy1, write_tsy1
|
|
21
14
|
from LMS.Message.Section.TXT2 import read_txt2, write_txt2
|
|
22
15
|
from LMS.TitleConfig.Config import AttributeConfig, TagConfig
|
|
@@ -43,7 +36,7 @@ def read_msbt(
|
|
|
43
36
|
reader = FileReader(stream)
|
|
44
37
|
file_info = read_file_info(reader, "MsgStdBn")
|
|
45
38
|
|
|
46
|
-
file = MSBT(file_info)
|
|
39
|
+
file = MSBT(file_info, attribute_config, tag_config)
|
|
47
40
|
|
|
48
41
|
if attribute_config is not None:
|
|
49
42
|
file.encoded_attributes = False
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from LMS.
|
|
2
|
-
from LMS.Field.LMS_Field import LMS_DataType, LMS_Field
|
|
3
|
-
from LMS.Field.Stream import read_field, write_field
|
|
1
|
+
from LMS.Common.LMS_DataType import LMS_DataType
|
|
4
2
|
from LMS.FileIO.Stream import FileReader, FileWriter
|
|
5
|
-
from LMS.Message.Definitions.
|
|
3
|
+
from LMS.Message.Definitions.Field.LMS_Field import LMS_DataType, LMS_Field
|
|
4
|
+
from LMS.Message.Definitions.Field.LMS_FieldMap import LMS_FieldMap
|
|
5
|
+
from LMS.Message.Definitions.Field.Stream import read_field, write_field
|
|
6
6
|
from LMS.TitleConfig.Definitions.Attributes import AttributeConfig
|
|
7
7
|
|
|
8
8
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import re
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
3
|
|
|
4
|
-
from LMS.Field.LMS_Field import LMS_Field, cast_value
|
|
5
|
-
from LMS.Message.Definitions.LMS_FieldMap import LMS_FieldMap
|
|
4
|
+
from LMS.Message.Definitions.Field.LMS_Field import LMS_Field, cast_value
|
|
5
|
+
from LMS.Message.Definitions.Field.LMS_FieldMap import LMS_FieldMap
|
|
6
6
|
from LMS.Message.Tag.LMS_TagExceptions import LMS_InvalidTagFormatError
|
|
7
|
-
from LMS.Message.Tag.Tag_Formats import DECODED_FORMAT, ENCODED_FORMAT,
|
|
7
|
+
from LMS.Message.Tag.Tag_Formats import (DECODED_FORMAT, ENCODED_FORMAT,
|
|
8
|
+
PARAMETER_FORMAT)
|
|
8
9
|
from LMS.TitleConfig.Definitions.Tags import TagConfig
|
|
9
10
|
|
|
10
11
|
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
from LMS.
|
|
2
|
-
from LMS.Field.LMS_Field import LMS_Field
|
|
3
|
-
from LMS.Field.Stream import read_field, write_field
|
|
1
|
+
from LMS.Common.LMS_DataType import LMS_DataType
|
|
4
2
|
from LMS.FileIO.Stream import FileReader, FileWriter
|
|
5
|
-
from LMS.Message.Definitions.
|
|
3
|
+
from LMS.Message.Definitions.Field.LMS_Field import LMS_Field
|
|
4
|
+
from LMS.Message.Definitions.Field.LMS_FieldMap import LMS_FieldMap
|
|
5
|
+
from LMS.Message.Definitions.Field.Stream import read_field, write_field
|
|
6
6
|
from LMS.Message.Tag.LMS_Tag import LMS_DecodedTag, LMS_EncodedTag, LMS_TagBase
|
|
7
|
-
from LMS.Message.Tag.LMS_TagExceptions import (
|
|
8
|
-
|
|
9
|
-
LMS_TagWritingException,
|
|
10
|
-
)
|
|
7
|
+
from LMS.Message.Tag.LMS_TagExceptions import (LMS_TagReadingError,
|
|
8
|
+
LMS_TagWritingException)
|
|
11
9
|
from LMS.Message.Tag.System_Definition import SYSTEM_GROUP
|
|
12
10
|
from LMS.TitleConfig.Definitions.Tags import TagConfig, TagDefinition
|
|
13
11
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Regex formats for control tags
|
|
2
|
+
|
|
3
|
+
# Regular format for any tag
|
|
4
|
+
TAG_FORMAT = r"(\[[^\]]+\])"
|
|
5
|
+
|
|
6
|
+
DECODED_FORMAT = r"\[(\w+):(\w+)(.*?)\]"
|
|
7
|
+
ENCODED_FORMAT = r"\[([A-Za-z0-9]+):([A-Za-z0-9]+)\s?([0-9A-Fa-f\-]*)?\]"
|
|
8
|
+
|
|
9
|
+
# Key value pair regex for decoded tags
|
|
10
|
+
PARAMETER_FORMAT = r'(\w+)="([^"]*)"'
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from typing import BinaryIO
|
|
3
3
|
|
|
4
|
+
from LMS.Common.LMS_DataType import LMS_DataType
|
|
4
5
|
from LMS.Common.Stream.FileInfo import read_file_info
|
|
5
6
|
from LMS.Common.Stream.Hashtable import read_labels
|
|
6
7
|
from LMS.Common.Stream.Section import read_section_data
|
|
7
|
-
from LMS.Field.LMS_DataType import LMS_DataType
|
|
8
8
|
from LMS.FileIO.Stream import FileReader
|
|
9
9
|
from LMS.Project.MSBP import MSBP
|
|
10
10
|
from LMS.Project.Section.ALI2 import read_ali2
|
|
@@ -3,7 +3,7 @@ from typing import Self
|
|
|
3
3
|
|
|
4
4
|
import yaml
|
|
5
5
|
|
|
6
|
-
from LMS.
|
|
6
|
+
from LMS.Common.LMS_DataType import LMS_DataType
|
|
7
7
|
from LMS.Project.MSBP import MSBP
|
|
8
8
|
from LMS.TitleConfig.Definitions.Attributes import AttributeConfig
|
|
9
9
|
from LMS.TitleConfig.Definitions.Tags import TagConfig, TagDefinition
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyLibMS
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.8
|
|
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: Copyright 2025 AbdyyEee
|
|
@@ -12,7 +12,7 @@ License: Copyright 2025 AbdyyEee
|
|
|
12
12
|
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
13
13
|
Project-URL: Documentation, https://github.com/AbdyyEee/PylibMS/wiki
|
|
14
14
|
Project-URL: Repository, https://github.com/AbdyyEee/PylibMS
|
|
15
|
-
Keywords: nintendo,msbf,msbt,msbp,modding,lms,libmessagestudio
|
|
15
|
+
Keywords: nintendo,msbf,msbt,msbp,modding,lms,libmessagestudio
|
|
16
16
|
Requires-Python: >=3.10
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
18
|
License-File: LICENSE
|
|
@@ -51,6 +51,9 @@ from LMS.Message.MSBTStream import write_msbt
|
|
|
51
51
|
with open("Out.msbt", "wb") as f:
|
|
52
52
|
write_msbt(f, msbt)
|
|
53
53
|
```
|
|
54
|
+
# Adding Presets
|
|
55
|
+
To add a Preset, you may create an issue with the relevant yaml file and the game it is for.
|
|
56
|
+
|
|
54
57
|
# Installation
|
|
55
58
|
```
|
|
56
59
|
pip install PylibMS
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyLibMS
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.8
|
|
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: Copyright 2025 AbdyyEee
|
|
@@ -12,7 +12,7 @@ License: Copyright 2025 AbdyyEee
|
|
|
12
12
|
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
13
13
|
Project-URL: Documentation, https://github.com/AbdyyEee/PylibMS/wiki
|
|
14
14
|
Project-URL: Repository, https://github.com/AbdyyEee/PylibMS
|
|
15
|
-
Keywords: nintendo,msbf,msbt,msbp,modding,lms,libmessagestudio
|
|
15
|
+
Keywords: nintendo,msbf,msbt,msbp,modding,lms,libmessagestudio
|
|
16
16
|
Requires-Python: >=3.10
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
18
|
License-File: LICENSE
|
|
@@ -51,6 +51,9 @@ from LMS.Message.MSBTStream import write_msbt
|
|
|
51
51
|
with open("Out.msbt", "wb") as f:
|
|
52
52
|
write_msbt(f, msbt)
|
|
53
53
|
```
|
|
54
|
+
# Adding Presets
|
|
55
|
+
To add a Preset, you may create an issue with the relevant yaml file and the game it is for.
|
|
56
|
+
|
|
54
57
|
# Installation
|
|
55
58
|
```
|
|
56
59
|
pip install PylibMS
|
|
@@ -3,25 +3,25 @@ MANIFEST.in
|
|
|
3
3
|
README.md
|
|
4
4
|
pyproject.toml
|
|
5
5
|
LMS/__init__.py
|
|
6
|
+
LMS/Common/LMS_DataType.py
|
|
6
7
|
LMS/Common/LMS_Exceptions.py
|
|
7
8
|
LMS/Common/LMS_FileInfo.py
|
|
8
9
|
LMS/Common/__init__.py
|
|
9
10
|
LMS/Common/Stream/FileInfo.py
|
|
10
11
|
LMS/Common/Stream/Hashtable.py
|
|
11
12
|
LMS/Common/Stream/Section.py
|
|
12
|
-
LMS/Field/LMS_DataType.py
|
|
13
|
-
LMS/Field/LMS_Field.py
|
|
14
|
-
LMS/Field/Stream.py
|
|
15
|
-
LMS/Field/__init__.py
|
|
16
13
|
LMS/FileIO/Encoding.py
|
|
17
14
|
LMS/FileIO/Stream.py
|
|
18
15
|
LMS/Message/MSBT.py
|
|
19
16
|
LMS/Message/MSBTEntry.py
|
|
20
17
|
LMS/Message/MSBTStream.py
|
|
21
18
|
LMS/Message/__init__.py
|
|
22
|
-
LMS/Message/Definitions/LMS_FieldMap.py
|
|
23
19
|
LMS/Message/Definitions/LMS_MessageText.py
|
|
24
20
|
LMS/Message/Definitions/__init__.py
|
|
21
|
+
LMS/Message/Definitions/Field/LMS_Field.py
|
|
22
|
+
LMS/Message/Definitions/Field/LMS_FieldMap.py
|
|
23
|
+
LMS/Message/Definitions/Field/Stream.py
|
|
24
|
+
LMS/Message/Definitions/Field/__init__.py
|
|
25
25
|
LMS/Message/Section/ATR1.py
|
|
26
26
|
LMS/Message/Section/TSY1.py
|
|
27
27
|
LMS/Message/Section/TXT2.py
|
|
@@ -30,6 +30,9 @@ from LMS.Message.MSBTStream import write_msbt
|
|
|
30
30
|
with open("Out.msbt", "wb") as f:
|
|
31
31
|
write_msbt(f, msbt)
|
|
32
32
|
```
|
|
33
|
+
# Adding Presets
|
|
34
|
+
To add a Preset, you may create an issue with the relevant yaml file and the game it is for.
|
|
35
|
+
|
|
33
36
|
# Installation
|
|
34
37
|
```
|
|
35
38
|
pip install PylibMS
|
|
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "PyLibMS"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.8"
|
|
8
8
|
requires-python = ">=3.10"
|
|
9
9
|
description = "Python library built for the libMessageStudio (LMS) proprietary file formats from Nintendo. Supports MSBT, MSBP, and MSBF."
|
|
10
10
|
readme = "README.md"
|
|
11
11
|
authors = [{ name = "AbdyyEee" }]
|
|
12
|
-
keywords = ["nintendo", "msbf", "msbt", "msbp", "modding", "lms", "libmessagestudio"
|
|
12
|
+
keywords = ["nintendo", "msbf", "msbt", "msbp", "modding", "lms", "libmessagestudio"]
|
|
13
13
|
license = { file = "LICENSE" }
|
|
14
14
|
dependencies = ["PyYAML==6.0.1"]
|
|
15
15
|
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Regex formats for control tags
|
|
2
|
-
|
|
3
|
-
# Regular format for any tag
|
|
4
|
-
TAG_FORMAT = r"^\[[^\]]+\]$"
|
|
5
|
-
|
|
6
|
-
DECODED_FORMAT = r"^\[(\w+):(\w+)(.*?)\]$"
|
|
7
|
-
ENCODED_FORMAT = r"^\[([A-Za-z0-9]+):([A-Za-z0-9]+)\s?([0-9A-Fa-f\-]*)?\]$"
|
|
8
|
-
|
|
9
|
-
# Key value pair regex for decoded tags
|
|
10
|
-
PARAMETER_FORMAT = r'(\w+)="([^"]*)"'
|
|
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
|