An outline of the source tree.
All the folders in the source directory are provided:
Name | Crate? | Description | Programming Language |
---|---|---|---|
avir-rs | ✅ | Rust wrapper for a C++ image resizing library. | Rust/C++ |
blender | ❌ | Blender plugin with exporter support for BRRES/BMD. | Python |
brres | ✅ | Rust wrapper for C++ .brres code. | Rust/C++ |
c-discord-rich-presence | ✅ | C/C++ bindings for the discord-rich-presence crate. Provides an alternative to the official Discord libraries for RPC for C++ applications. | Rust |
c-wbz | ✅ | C/C++ bindings for wbz_converter | Rust |
cli | ❌ | Source for the rszst utility. |
C++, Rust |
core | ❌ | Core utilities and structures. Available to all other modules. | C++ |
frontend | ❌ | The main editor itself. | C++ |
gctex | ✅ | GC/Wii image codec. Published to crates.io | Rust/C++ |
imcxx | ❌ | My C++ wrappers for ImGui. | C++ |
LibBadUIFramework | ❌ | Basis of the plugins folder, defines some extendable UI structures. |
C++ |
librii | ❌ | Library for interacting with Wii data. Documentation here | C++ |
llvm | ✅ | Rust wrapper for the llvm crash handler. | Rust/C++ |
oishii | ❌ | My binary IO library. | C++ |
plate | ❌ | Dear ImGui boilerplate code. | C++ |
plugins | ❌ | Specific plugins for the editor: BMD, BRRES, Assimp (to BMD/BRRES). | C++ |
rsl | ❌ | My standard library: generic template types. | C++ |
rsmeshopt | ✅ | My mesh optimization library. Published to crates.io | C++/Rust |
rust_bundle | ✅ | Allows RiiStudio to be cargo bundle d into a MacOS .app file. |
Rust |
szs | ✅ | SZS compressing and decompressing algorithms. Published to crates.io | Rust/C++ |
tests | ❌ | A CLI tool used by the python unit tests. | C++ |
updater | ❌ | Application updater | C++ |
vendor | ❌ | Third-party code. | C, C++ |
wiitrig | ✅ | Wii sin /cos function implementations |
Rust/C++ |
Dependencies between these packages are listed in the following flowchart. Generally, librii
handles file formats/Wii-specifics while plugins
provides a higher level interface for the editor. The two main .exe files are frontend
(RiiStudio.exe) and cli
(rszst.exe).
flowchart LR
subgraph "Rust Depencies"
discord-rich-presence
wbz_converter
zip-extract
clap
reqwest
simple_logger
end
discord-rich-presence ---> c-discord-rich-presence
wbz_converter --> c-wbz
zip-extract --> riistudio_rs
clap --> rszst_arg_parser
reqwest --> riistudio_rs
simple_logger --> riistudio_rs
subgraph "Rust Crates"
avir-rs
brres
c-discord-rich-presence
c-wbz
gctex
wiitrig
szs
rszst_arg_parser
riistudio_rs
rsmeshopt
end
subgraph "C++ Libraries"
imcxx
oishii
plate
LibBadUIFramework
end
subgraph "RiiStudio"
plugins
updater
rsl
librii
frontend(["frontend (RiiStudio.exe)"])
cli(["cli (rszst.exe, command-line interface)"])
tests(["tests (tests.exe, for unit tests)"])
end
%% core --> oishii & plate & rsmeshopt & imcxx & LibBadUIFramework
%% core
%% vendor
%% subgraph "C++ Binaries"
%% cli
%% tests
%% frontend
%% end
rszst_arg_parser --> cli
avir-rs --> librii
c-discord-rich-presence --> rsl
c-wbz --> librii
gctex --> librii
wiitrig --> librii
%%llvm --> cli & frontend & tests
riistudio_rs --> rsl
szs --> librii
brres --> librii
%% core --> LibBadUIFramework & librii & plugins & rsl & updater & cli & frontend & tests
imcxx --> frontend
LibBadUIFramework --> plugins
%% & frontend
librii --> cli & frontend & tests
oishii --> rsl & librii
plate --> frontend
plugins --> frontend
rsl --> librii & plugins & updater
%% & cli & frontend & tests
rsmeshopt --> librii
updater --> frontend
%% vendor --> LibBadUIFramework & librii & plugins & rsl & updater & cli & frontend & tests
The following flowchart explains how 3d model data comes in (from Blender, as a .dae/.fbx file) and eventually ends up as a .brres or .bmd file (with model optimizations).
flowchart LR
subgraph "3D Software"
Blender
Maya
end
Blender --> dae & fbx
Maya --> fbx
subgraph Interchange formats
dae
fbx
.json
end
subgraph Assimp library
Assimp
end
subgraph "RHST Structure (C++)"
RHST
end
subgraph Game files
BMD
BRRES
end
Blender --> |"Blender Plugin (python)"|.json
.json --> |librii\rhst\RHST.cpp| RHST
RHST --> |"plugins\RHSTImporter.cpp"| BMD
RHST --> |"plugins\RHSTImporter.cpp"| BRRES
Assimp --> |"librii\assimp2rhst\*.cpp"| RHST
dae & fbx --> Assimp
RHST --> RHSTOptimizer
RHSTOptimizer["Intermediate format optimizer\n\n(librii\rhst\RHSTOptimizer.cpp)"] --> RHST
RHSTOptimizer <--> rsmeshopt
rsmeshopt["rsmeshopt\n\n(Mesh optimization library)"] <--> draco & meshoptimizer & tristrip & TriStripper & TriFanMeshOptimizer & HaroohieTriStripifier