Utility and Library for decoding and converting stalcraft assets files, such as models and textures into well-known formats.
Designed for artworks creation and the like.
Note
There is not and will not be encoding back into game formats.
Warning
Do not use game assets directly.
Any changes in game client can be detected.
You can use executable program from Releases page.
Type | Source | Output |
---|---|---|
Model | .mcsa / .mcvd | .dae, .obj, ms3d, .txt |
Texture | .ol | .dds |
Image | .mic | .png |
- Versions supported: 7.0, 8.0, 10.0, 11.0
- Skeleton and Animations currently unsupported
- Formats supported: DXT1, DXT3, DXT5, RGBA8, BGRA8, DXN_XY
- Formats unsupported: RGBA32F, Cubemaps
- Some normal map (DXN_XY) textures can be inverted
From bash:
scfile [FILES]... [OPTIONS]
Tip
You can just drag and drop one or multiple files onto scfile.exe
.
FILES
: List of file paths to be converted. Multiple files should be separated by spaces. Accepts both full and relative paths. Does not accept directory.
-O
,--output
: One path to output directory. If not specified, file will be saved in same directory with a new suffix.
-
Convert a single file:
scfile file.mcsa
Will be saved in same directory with a new suffix.
-
Convert multiple files to a specified directory:
scfile file1.mcsa file2.mcsa --output path/to/dir
-
Convert all
.mcsa
files in current directory:scfile *.mcsa
Subdirectories are not included.
-
Convert all
.mcsa
files with subdirectories to a specified directory:scfile **/*.mcsa -O path/to/dir
With
--output
specified, directory structure is not duplicated.
pip install sc-file -U
git clone [email protected]:onejeuu/sc-file.git
cd sc-file
poetry install
from scfile import convert
# Output path is optional.
# Defaults to source path with new suffix.
convert.mcsa_to_obj("path/to/model.mcsa", "path/to/model.obj")
convert.ol_to_dds("path/to/texture.ol", "path/to/texture.dds")
convert.mic_to_png("path/to/image.mic", "path/to/image.png")
# Skeleton support via MilkShape3D
convert.mcsa_to_ms3d("path/to/model.mcsa", "path/to/model.ms3d")
convert.mcsa_to_ms3d_ascii("path/to/model.mcsa", "path/to/model.txt")
# Or determinate it automatically
convert.auto("path/to/model.mcsa")
- Default
from scfile.file.data import ModelData
from scfile.file import McsaDecoder, ObjEncoder
mcsa = McsaDecoder("model.mcsa")
data: ModelData = mcsa.decode()
mcsa.close() # ? Necessary to close
obj = ObjEncoder(data)
obj.encode().save("model.obj") # ? Encoder closes after saving
- Use encoded content bytes
obj = ObjEncoder(data)
obj.encode()
with open("model.obj", "wb") as fp:
fp.write(obj.content)
obj.close() # ? Necessary to close
- Use convert methods
mcsa = McsaDecoder("model.mcsa")
mcsa.convert_to(ObjEncoder).save("model.obj")
mcsa.close() # ? Necessary to close
mcsa = McsaDecoder("model.mcsa")
mcsa.to_obj().save("model.obj")
mcsa.close() # ? Necessary to close
- Use context manager
with McsaDecoder("model.mcsa") as mcsa:
data: ModelData = mcsa.decode()
with ObjEncoder(data) as obj:
obj.encode().save("model.obj")
- Use context manager + convert methods
with McsaDecoder("model.mcsa") as mcsa:
obj = mcsa.convert_to(ObjEncoder)
obj.close()
with McsaDecoder("model.mcsa") as mcsa:
mcsa.to_obj().save("model.obj")
Important
When using convert_to
buffer remains open.
close()
or save()
or another context (with
) is necessary.
- Save multiple copies
with McsaDecoder("model.mcsa") as mcsa:
with mcsa.to_obj() as obj:
obj.save_as("model_1.obj")
obj.save_as("model_2.obj")
Important
You will need poetry to do compilation.
Tip
Recommended to create virtual environment.
poetry shell
Then install dependencies:
poetry install
And run script to compile:
python scripts/build.py
Executable file will be created in /dist
directory.