Utility & Library for decoding stalcraft assets
Project description
SC FILE
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.
📁 Formats
Type | Source | Output |
---|---|---|
Model | .mcsa / .mcvd | .dae, .obj, ms3d, .txt |
Texture | .ol | .dds |
Image | .mic | .png |
Models
- Versions supported: 7.0, 8.0, 10.0, 11.0
- Skeleton and Animations currently unsupported
Textures
- Formats supported: DXT1, DXT3, DXT5, RGBA8, BGRA8, DXN_XY
- Formats unsupported: RGBA32F, Cubemaps
💻 CLI Utility
Usage
From bash:
scfile [FILES]... [OPTIONS]
[!TIP] You can just drag and drop one or multiple files onto
scfile.exe
.
Arguments
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.
Options
-O
,--output
: One path to output directory. If not specified, file will be saved in same directory with a new suffix.
Examples
-
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.
📚 Library
Install
Pip
pip install sc-file -U
Manual
git clone git@github.com:onejeuu/sc-file.git
cd sc-file
poetry install
Usage
Simple
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")
Advanced
- 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()
orsave()
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")
🛠️ Build
[!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:
poetry run build
Executable file will be created in /dist
directory.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.