Skip to content

Latest commit

 

History

History
168 lines (141 loc) · 7.79 KB

README.md

File metadata and controls

168 lines (141 loc) · 7.79 KB

source

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 bundled 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
Loading

Data pipeline for model creation

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
Loading