Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
c917836
feat(ncs): add bl4-ncs library for NCS format parsing
monokrome Dec 27, 2025
6ad2e0f
ci: add bl4-ncs to crates.io release workflow
monokrome Dec 27, 2025
99830c7
refactor(cli): split manifest.rs into 6 focused modules
monokrome Dec 27, 2025
da64b2f
refactor(cli): split large files into focused modules
monokrome Dec 27, 2025
b8c027b
refactor(cli): split large memory modules into focused files
monokrome Dec 27, 2025
c8d2171
refactor(cli): split remaining large modules into focused files
monokrome Dec 27, 2025
fdacabf
test(bl4-ncs): add comprehensive test coverage
monokrome Dec 27, 2025
396472d
feat(bl4-ncs): add NCS content parser for decompressed data
monokrome Dec 27, 2025
2a2f666
refactor(ncs): remove false positive gBx format support
monokrome Dec 28, 2025
243969d
chore: configure workspace clippy lints for complexity analysis
monokrome Dec 28, 2025
5c91311
refactor(linewise): extract helpers and reduce function complexity
monokrome Dec 28, 2025
2c197fb
chore(uextract): add complexity allows for UE5 binary parsing
monokrome Dec 28, 2025
1a9d6b0
chore(bl4-community): add crate-level complexity allow
monokrome Dec 28, 2025
db1e9cb
refactor(cli): extract dispatch module and add complexity allows
monokrome Dec 28, 2025
f89a101
refactor(cli): split memory and manifest modules into focused files
monokrome Dec 28, 2025
352b65d
refactor: reduce complexity and improve module organization
monokrome Dec 28, 2025
92b038c
chore: remove old manifest.rs and update lockfile
monokrome Dec 28, 2025
4110c33
docs: add NCS format documentation and glossary updates
monokrome Dec 28, 2025
ddb0360
chore: improve gitignore
monokrome Dec 28, 2025
0929b89
fix: address clippy warnings across workspace
monokrome Dec 28, 2025
9b95f1d
chore: consolidate docs directory structure
monokrome Dec 29, 2025
6668401
feat(ncs): add flexible Oodle decompression backends
monokrome Dec 29, 2025
14368b3
feat(uextract): add complex UE5 property type parsing
monokrome Dec 29, 2025
6389ea7
feat(uextract): add dynamic property name extraction for UserDefinedS…
monokrome Dec 29, 2025
f1822e9
feat(uextract): improve UserDefinedStruct parsing with type detection
monokrome Dec 29, 2025
1b7cc8f
docs: add NCS and DataTable relationship documentation
monokrome Dec 29, 2025
32f70da
data: add scriptobjects.json for class resolution
monokrome Dec 29, 2025
45302ef
docs: add NCS string table format details
monokrome Dec 29, 2025
9ce0b51
docs: add NCS type prefixes and format code structure
monokrome Dec 29, 2025
26adddd
docs: add comprehensive NCS format documentation
monokrome Dec 30, 2025
e314116
fix: resolve bl4-ncs build errors
monokrome Dec 30, 2025
c1f96b2
feat(ncs): achieve 100% parse rate with native Oodle support
monokrome Jan 1, 2026
8292590
refactor(ncs): extract shared header parsing and add memchr optimization
monokrome Jan 1, 2026
8db066c
refactor(ncs): split parse_string_table into focused helpers
monokrome Jan 1, 2026
0dc66d6
feat(serial): add part name resolution using compiled-in manifest
monokrome Jan 1, 2026
ab4b354
feat(idb): store element, rarity, and parts on decode
monokrome Jan 1, 2026
7600e65
docs: clarify part flag meaning is unknown in BL4
monokrome Jan 1, 2026
d4bab27
fix: remove incorrect high-bit flag assumption for parts
monokrome Jan 1, 2026
86d3751
fix: correct VLA_SR category mapping (27 -> 25)
monokrome Jan 1, 2026
88ce43b
fix(community): count all valid items as succeeded in bulk publish
monokrome Jan 1, 2026
00daa0a
chore: bump version to 0.5.20
monokrome Jan 1, 2026
229c8d2
chore: move linewise to separate repository
monokrome Jan 1, 2026
e3473ee
docs(preset): add note about built-in base85 alternative
monokrome Jan 1, 2026
a85a721
feat(preset): add segment extraction and parts field to linewise preset
monokrome Jan 1, 2026
ba56a36
feat(preset): add fallback and charset to linewise preset
monokrome Jan 1, 2026
1733206
chore(linewise): update preset to match Weapon/Category output
monokrome Jan 1, 2026
231db4c
docs: update data extraction to reflect current state
monokrome Jan 2, 2026
0e11cbe
docs: document NCS serial index discovery
monokrome Jan 2, 2026
9d0b3b5
feat(uextract): add class hash resolution for property parsing
monokrome Jan 2, 2026
1c3367d
feat(drops): add drops lookup command with boss/world drop support
monokrome Jan 3, 2026
08fc4a0
fix(drops): extract actual tier data from NCS, remove hardcoded values
monokrome Jan 3, 2026
771a9aa
docs: document boss drop mappings and loot system structure
monokrome Jan 3, 2026
540c75f
feat(extract): auto-generate drops manifest during full extraction
monokrome Jan 3, 2026
ea37d98
feat(drops): add comprehensive boss display name mappings
monokrome Jan 3, 2026
7ffc0cd
feat(ncs): add proper PAK index extraction via repak
monokrome Jan 3, 2026
f993506
refactor: clean up dead code and standardize workspace dependencies
monokrome Jan 3, 2026
b0bcb10
refactor(uextract): extract CLI and command modules from main.rs
monokrome Jan 3, 2026
55f7634
refactor: remove duplicate types and add PakManifest::load helper
monokrome Jan 3, 2026
e0d2c9e
refactor(ncs): split parser.rs into smaller modules
monokrome Jan 3, 2026
1b26a02
refactor(ncs): extract string_table module from parser.rs
monokrome Jan 3, 2026
4c79e83
refactor(bl4): split large files into submodules
monokrome Jan 3, 2026
ad8bc43
refactor(idb): extract shared SQL constants and query builder
monokrome Jan 3, 2026
97e2b10
fix: update tests and structs for current data format
monokrome Jan 3, 2026
4d47268
refactor(ncs): split drops.rs into submodules
monokrome Jan 3, 2026
286acb1
refactor(ncs): split parser.rs into focused submodules
monokrome Jan 3, 2026
edb43c6
refactor(cli): split ncs.rs into focused submodules
monokrome Jan 3, 2026
5e89af1
refactor(uextract): split main.rs into focused modules
monokrome Jan 3, 2026
58d16d7
fix(ncs): use cross-platform paths in integration tests
monokrome Jan 3, 2026
f4e01e6
chore: remove outdated planning doc
monokrome Jan 3, 2026
0cde499
fix: cross-platform build support for Windows
monokrome Jan 3, 2026
59fe6c7
chore: ignore lib directory
monokrome Jan 3, 2026
afde892
refactor: move PAK reading from bl4-ncs to uextract
monokrome Jan 4, 2026
9393159
fix(ncs): mark slow integration tests as ignored
monokrome Jan 4, 2026
4a298ff
fix(uextract): handle repak panics on invalid PAK files
monokrome Jan 4, 2026
eb76236
chore(deps): bump rsa from 0.9.9 to 0.9.10
dependabot[bot] Jan 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 6 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ jobs:
- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Publish bl4-ncs library
run: cargo publish -p bl4-ncs --token ${{ secrets.CARGO_TOKEN }}

- name: Wait for crates.io to update
run: sleep 30

- name: Publish bl4 library
run: cargo publish -p bl4 --token ${{ secrets.CARGO_TOKEN }}

Expand Down Expand Up @@ -80,29 +86,17 @@ jobs:
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: ${{ matrix.cross && 'aarch64-linux-gnu-gcc' || '' }}

- name: Build linewise
run: cargo build --release -p linewise --target ${{ matrix.target }}
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: ${{ matrix.cross && 'aarch64-linux-gnu-gcc' || '' }}

- name: Rename binaries
run: |
cd target/${{ matrix.target }}/release
mv bl4 bl4-${{ matrix.name }} || true
mv linewise linewise-${{ matrix.name }} || true

- name: Upload bl4-cli binary
uses: actions/upload-artifact@v4
with:
name: bl4-${{ matrix.name }}
path: target/${{ matrix.target }}/release/bl4-${{ matrix.name }}

- name: Upload linewise binary
uses: actions/upload-artifact@v4
with:
name: linewise-${{ matrix.name }}
path: target/${{ matrix.target }}/release/linewise-${{ matrix.name }}

build-books:
name: Build Guide Books
runs-on: ubuntu-latest
Expand Down
20 changes: 5 additions & 15 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,26 +1,16 @@
# Build artifacts
node_modules/
pkg/
**/rendered/*
site/*
target/
*.tmp

# Rendered documentation
/rendered/
/docs/rendered/
/site/

*.lock
!/Cargo.lock

# BL4 data files (will be distributed via GitHub Releases)
# Data files being worked with during development
*.tmp
/share/*
# But keep manifest files (small enough for git now)
/lib/*
!/share/manifest/

# Backup files
*.bak
*.bak.json

# Non-git hidden file patterns
.*
!.git*
111 changes: 111 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# Contributing to BL4

## Development Setup

```bash
# Clone the repository
git clone https://github.com/monokrome/bl4
cd bl4

# Build all packages
cargo build --release

# Run tests
cargo test
```

## Project Structure

- `src/bl4` - Core library (serial encoding/decoding, save parsing)
- `src/bl4-cli` - Command-line interface
- `src/bl4-idb` - Items database library
- `src/bl4-ncs` - NCS file parser
- `src/bl4-community` - Community server (items.bl4.dev)
- `src/uextract` - UE5 asset extractor
- `src/linewise` - Line-based text processing utility

## Code Style

- Run `cargo fmt` before committing
- Run `cargo clippy` and address warnings
- Keep functions under 50 lines where practical
- Use conventional commits: `feat:`, `fix:`, `chore:`, `refactor:`, `docs:`

## Releasing

Releases are automated via GitHub Actions when a version tag is pushed.

### Release Process

1. **Update version** in `Cargo.toml` (workspace root):
```toml
[workspace.package]
version = "X.Y.Z"
```

2. **Commit the version bump**:
```bash
git add Cargo.toml
git commit -m "chore: bump version to X.Y.Z"
```

3. **Create and push the tag**:
```bash
git tag vX.Y.Z
git push origin main --tags
```

### What the Release Does

The `release.yml` workflow triggers on `v*` tags and:

1. **Publishes to crates.io** (in order):
- bl4-ncs
- bl4
- bl4-idb
- bl4-cli

2. **Builds binaries** for:
- Linux x86_64
- Linux aarch64
- macOS x86_64
- macOS aarch64

3. **Builds Docker image**:
- `monokrome/bl4-community:latest`
- `monokrome/bl4-community:X.Y.Z`

4. **Builds WASM package**:
- Publishes to npm as `@monokrome/bl4`

5. **Generates documentation**:
- PDF and EPUB guide books

6. **Creates GitHub Release** with all artifacts

### Version Scheme

We use semantic versioning:
- **MAJOR**: Breaking API changes
- **MINOR**: New features, backward compatible
- **PATCH**: Bug fixes, backward compatible

## Testing

```bash
# Run all tests
cargo test

# Run tests for a specific package
cargo test -p bl4

# Run with output
cargo test -- --nocapture
```

## Pull Requests

1. Fork the repository
2. Create a feature branch: `git checkout -b feat/my-feature`
3. Make your changes with conventional commits
4. Push and open a PR against `main`
Loading
Loading