{"id":20410229,"url":"https://github.com/pieking1215/dr-extract-rs","last_synced_at":"2026-06-10T14:31:30.788Z","repository":{"id":107891703,"uuid":"418882093","full_name":"PieKing1215/dr-extract-rs","owner":"PieKing1215","description":"A WIP Rust library for parsing and extracting assets from DELTARUNE's data.win","archived":false,"fork":false,"pushed_at":"2021-12-11T02:37:41.000Z","size":82,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-05T02:44:19.599Z","etag":null,"topics":["deltarune","extractor","gamemaker","library","rust","unpacker"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PieKing1215.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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":"2021-10-19T10:49:38.000Z","updated_at":"2024-09-01T22:35:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"b21e67b7-275b-4f9d-a169-8bd060f16fba","html_url":"https://github.com/PieKing1215/dr-extract-rs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PieKing1215/dr-extract-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PieKing1215%2Fdr-extract-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PieKing1215%2Fdr-extract-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PieKing1215%2Fdr-extract-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PieKing1215%2Fdr-extract-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PieKing1215","download_url":"https://codeload.github.com/PieKing1215/dr-extract-rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PieKing1215%2Fdr-extract-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34157453,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["deltarune","extractor","gamemaker","library","rust","unpacker"],"created_at":"2024-11-15T05:44:49.992Z","updated_at":"2026-06-10T14:31:30.762Z","avatar_url":"https://github.com/PieKing1215.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003edr-extract\u003cbr\u003e\n    \u003ca href=\"https://github.com/PieKing1215/dr-extract-rs/actions/workflows/rust_build_test.yml\"\u003e\u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/workflow/status/PieKing1215/dr-extract-rs/Rust%20Build+Test\"\u003e\u003c/a\u003e\n\u003c/h1\u003e\n\nA WIP Rust library for flexibly parsing and extracting assets from [DELTARUNE](https://deltarune.com)'s data.win.\n\nThis is not just a dumping tool, everything is loaded into memory and can be accessed directly from your Rust code.\n\nYou must provide your own data.win \u0026 audiogroup1.dat file. I will not host them myself, nor will I host any extracted assets here.\n\nIt might work for other GameMaker 2 games, but I have not tested anything other than the DELTARUNE Chapter 1\u00262 Demo.\n\nBased on the documentation here: https://pcy.ulyssis.be/undertale/unpacking-corrected\u003cbr\u003e\n(+ some adjustments for the newer version of GM)\n\nCurrently the game metadata, sounds, fonts, spritesheets, sprites, and backgrounds/tilesets are fully extractable.\u003cbr\u003e\nMore specifically, these chunks are supported right now:\n- GEN8\n- OPTN\n- SOND\n- SPRT\n- TPAG\n- TXTR\n- AUDO\n- FONT\n- BGND\n\nNot supported right now:\n- EXTN (unused)\n- AGRP\n- PATH\n- SCPT\n- SHDR (unused)\n- TMLN\n- OBJT\n- ROOM\n- DAFL (unused)\n- CODE\n- VARI\n- FUNC\n- STRG\n\n## Usage\nThe script [examples/dump.rs](examples/dump.rs) is a simple example binary that uses the library to dump assets from a provided data.win \u0026 audiogroup1.dat.\u003cbr\u003e\nTo run it, do `cargo run --release --example dump` and it will dump from `./data.win` \u0026 `./audiogroup1.dat` into `./extract/`.\n\nWhile this is neat and all, this is a *library*, not just a tool for dumping to files.\n\nI want this library to be very controllable: you should be able to tell it exactly what to load and when to do it.\u003cbr\u003eThis goal is a WIP: currently you control when to parse each individual chunk, and when to load assets (ie. image/audio data) for individual chunks that have assets (currently TXTR, SPRT, SOND, FONT, BGND; eventually more?). For sprites, sounds, and backgrounds/tilesets, you can also choose to load the image/audio data for only certain sprites/sounds/tilesets (by name).\n\nAfter a chunk is parsed, you can access the parsed data as a pretty simple set of structs. \n\nWhen you load the assets for TXTR/SPRT/FONT/BGND, the texture(s) are loaded into memory as `image::DynamicImage` from the [image crate](https://github.com/image-rs/image), and can be used by your program.\n\nWhen you load the assets for SOND/AUDO, the audio data is loaded into memory as a `Vec\u003cu8\u003e` if the audio is embedded in the data.win, otherwise you can use the sound's `file` field to locate the external file. The `Vec\u003cu8\u003e` is the raw file data for the embedded file, so you can literally just dump the bytes directly to an .ogg file, or you can use a library to parse the audio in-memory.\n\nSee [examples/simple.rs](examples/simple.rs) for an example of the logic flow.\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0\n   ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license\n   ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpieking1215%2Fdr-extract-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpieking1215%2Fdr-extract-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpieking1215%2Fdr-extract-rs/lists"}