{"id":21948026,"url":"https://github.com/kojobailey/nucc-cpp-library","last_synced_at":"2025-03-22T17:10:45.706Z","repository":{"id":230726641,"uuid":"779906480","full_name":"KojoBailey/nucc-cpp-library","owner":"KojoBailey","description":"A C++ library for serialising (reading) and deserialising (writing) CyberConnect2 NUCC data, useful for projects that interact with XFBIN files.","archived":false,"fork":false,"pushed_at":"2025-01-21T13:52:34.000Z","size":1244,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-18T04:12:52.371Z","etag":null,"topics":["binary","cc2","cplusplus","cpp","cpp17","cpp20","cpp23","cyberconnect2","deserialiser","deserializer","files","lib","library","nucc","parser","reader","serialiser","serializer","writer","xfbin"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KojoBailey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-31T05:35:26.000Z","updated_at":"2025-01-21T13:52:38.000Z","dependencies_parsed_at":"2024-04-16T12:30:47.753Z","dependency_job_id":"a06ca379-2d27-490f-87b3-567480ca8f19","html_url":"https://github.com/KojoBailey/nucc-cpp-library","commit_stats":null,"previous_names":["kojobailey/xfbin-cpp","kojobailey/xfbin-cpp-library","kojobailey/nucc-cpp-library"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KojoBailey%2Fnucc-cpp-library","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KojoBailey%2Fnucc-cpp-library/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KojoBailey%2Fnucc-cpp-library/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KojoBailey%2Fnucc-cpp-library/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KojoBailey","download_url":"https://codeload.github.com/KojoBailey/nucc-cpp-library/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244991166,"owners_count":20543627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binary","cc2","cplusplus","cpp","cpp17","cpp20","cpp23","cyberconnect2","deserialiser","deserializer","files","lib","library","nucc","parser","reader","serialiser","serializer","writer","xfbin"],"created_at":"2024-11-29T05:11:32.923Z","updated_at":"2025-03-22T17:10:45.659Z","avatar_url":"https://github.com/KojoBailey.png","language":"C++","readme":"# [NUCC++](https://github.com/KojoBailey/nucc-cpp-library/)\nWelcome to the **[NUCC C++ Library](https://github.com/KojoBailey/nucc-cpp-library/)**, a **multi-include** library of headers for **modern C++** (from **C++17**).\n\nIts purpose is to allow easy interaction with data from [CyberConnect2](https://jojomodding.miraheze.org/wiki/CyberConnect2)'s in-house **NUCC** engine, that mostly being data found in the [**XFBIN**](https://jojomodding.miraheze.org/wiki/XFBIN) container format, which sports the file signature: `NUCC` / `4E 55 43 43`.\n\nThis library is nowhere near finished, and many design choices are **subject to change**, but otherwise, its internal functionality is more-or-less already figured out, and the library should be updated at least semi-frequently.\n\n## Contributing\nAlthough I intend to work on this library myself for the most part, largely for my own learning and development as a programmer, **help and feedback** is much appreciated - granted it's constructive!\n\nMore importantly though, the best way to contribute to this project by expanding its support of the various `nuccChunkBinary` formats for the various different games that use them. I'll release more info about this as the library's basic functionality nears completion.\n\n## Design Goals\nWhile there are XFBIN libraries out there for [Rust](https://github.com/SutandoTsukai181/xfbin-lib-rs), [Python](https://github.com/SutandoTsukai181/xfbin_lib), and [C#](https://github.com/TheLeonX/XFBIN_LIB), this is the first for **C++**.\n\nThis library aims for:\n- **Ease of integration** → Everything is intended to be as abstracted as is useful, and although there are multiple headers you may need to include, they are also intentionally structured to be easy to organise. Most projects focusing on one game shouldn't need to include more than 2.\n- **A myriad of features** → Across the CC2 NUCC games, there's a lot that happens with XFBINs behind the scenes, such as en/decryption, hashing, and more - all actions which this library will support.\n- **Efficiency** → For a library intended to be used in bigger projects, the faster it can do its part, the better. As such, it should be as optimal as possible.\n- **Flexibility** → This library should be able to achieve any (reasonable) task without driving users insane.\n\n## Features\nBelow is a list of all the things this library **can already** do...\n- Load XFBIN files by path and deserialise them into an `XFBIN` class.\n- Access deserialised NUCC data for `nuccChunkPage` and `nuccChunkBinary`.\n- Serialise XFBIN files from scratch or otherwise.\n\n... and here is a list of things **to-be-added** in the near future:\n- More chunk support, eventually adding for them all.\n- CRC32 hashing, used in the CC2 games for various things.\n- Encryption and decryption.\n- And much more...\n\n## How To Use\n\u003csub\u003eThe docs for this library are incredibly lacking for the timebeing, and will be updated once I'm more confident in the design.\u003c/sub\u003e\n\nEverything in the library is under the `nucc` namespace.\n\nTo access specific chunk information from an `XFBIN` object, you must first initialise an object depending on what chunk type you need.\n```cpp\n#include \"include/nucc/xfbin.hpp\" // Including the library\n\nint main() {\n  nucc::XFBIN xfbin{\"./PlayerColorParam.bin.xfbin\"};\n  nucc::Binary binary_chunk{ xfbin.fetch(\"PlayerColorParam\") };\n}\n```\n\nIn the case of `Binary` objects, there is a vast library of the different formats they can contain.\n\n```cpp\n#include \"include/nucc/xfbin.hpp\"\n#include \"include/nucc/chunks/binary/asbr.hpp\" // JoJo's Bizarre Adventure: All-Star Battle R formats\n\n#include \u003ciostream\u003e\n\nint main() {\n  nucc::XFBIN xfbin{\"./PlayerColorParam.bin.xfbin\"};\n  nucc::Binary binary_chunk{ xfbin.fetch(\"PlayerColorParam\") };\n  nucc::ASBR::PlayerColorParam pcp{ binary_chunk.data() };\n  std::cout \u003c\u003c pcp.entries[0].character_id; // \"1jnt01\"\n}\n```\n\n## Examples\nA lot of us learn best from examples, so here are some common (and not so common) tasks you may want to do with this library.\n\n### Drag-and-Drop Loading\nThis can take an XFBIN file dragged onto the application and immediately parse it into an `XFBIN` object.\n```cpp\nint main(int argc, char* argv[]) {\n  nucc::XFBIN xfbin{argv[1]};\n}\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkojobailey%2Fnucc-cpp-library","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkojobailey%2Fnucc-cpp-library","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkojobailey%2Fnucc-cpp-library/lists"}