{"id":20057794,"url":"https://github.com/shinyquagsire23/OpenJKDF2","last_synced_at":"2025-05-05T14:31:26.291Z","repository":{"id":39894147,"uuid":"139542792","full_name":"shinyquagsire23/OpenJKDF2","owner":"shinyquagsire23","description":"A cross-platform reimplementation of JKDF2 in C","archived":false,"fork":false,"pushed_at":"2025-02-07T18:42:51.000Z","size":226629,"stargazers_count":609,"open_issues_count":138,"forks_count":48,"subscribers_count":29,"default_branch":"master","last_synced_at":"2025-04-14T22:17:42.188Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shinyquagsire23.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","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,"zenodo":null}},"created_at":"2018-07-03T07:09:45.000Z","updated_at":"2025-04-13T23:54:29.000Z","dependencies_parsed_at":"2024-04-06T15:38:14.430Z","dependency_job_id":"77026c05-4542-4f6d-b3d4-1e09ffb2c4f5","html_url":"https://github.com/shinyquagsire23/OpenJKDF2","commit_stats":null,"previous_names":[],"tags_count":127,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinyquagsire23%2FOpenJKDF2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinyquagsire23%2FOpenJKDF2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinyquagsire23%2FOpenJKDF2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinyquagsire23%2FOpenJKDF2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shinyquagsire23","download_url":"https://codeload.github.com/shinyquagsire23/OpenJKDF2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252514945,"owners_count":21760472,"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":[],"created_at":"2024-11-13T13:00:22.086Z","updated_at":"2025-05-05T14:31:21.935Z","avatar_url":"https://github.com/shinyquagsire23.png","language":"C","funding_links":[],"categories":["Games"],"sub_categories":[],"readme":"# OpenJKDF2\n\n![MacOS Screenshot](docs/images/screenshot.png)\n\n## [Latest Releases](https://github.com/shinyquagsire23/OpenJKDF2/releases) | [Report a crash or bug](https://github.com/shinyquagsire23/OpenJKDF2/issues)\n\nOpenJKDF2 is a function-by-function reimplementation of DF2 in C, with 64-bit ports to Windows 7+, macOS 10.15+, and Linux. Files are organized as closely to the original game as possible, based on symbols from the Grim Fandango Remaster Android/Linux/macOS port, as well as scattered assertions from various other games. It also contains the original versions of `byacc` and `flex` used for COG script parsing.\n\nOpenJKDF2 does *not* include any original game assets; a valid copy of JKDF2 is *required* and can be purchased from [GOG](https://www.gog.com/game/star_wars_jedi_knight_dark_forces_ii) or [Steam](https://store.steampowered.com/app/32380/STAR_WARS_Jedi_Knight_Dark_Forces_II/). The GOG version is recommended, since it is DRM-free and also includes the soundtrack in Ogg Vorbis format. If you'd like to try before you buy, a WebAssembly demo of OpenJKDF2 can be found at https://maxthomas.dev/openjkdf2/.\n\nSupport for playing the original soundtrack from Ogg Vorbis files is primarily supported for the GOG and Steam versions of the game assets. Original disk soundtracks can also be loaded from `MUSIC/1/Track\u003c2..8\u003e.ogg` and `MUSIC/2/Track\u003c2..12\u003e.ogg` for each disk's soundtrack. If files are missing, it will instead attempt to use a GOG track number from `MUSIC/Track\u003c12..32\u003e.ogg`. Dumping the soundtrack from disks at install time is planned for a future release of OpenJKDF2, but is not currently implemented.\n\n## Platforms\nOpenJKDF2 supports the following configurations:\n\n| Configuration | Renderer | Description |\n| --- | --- | --- |\n| 64-bit Windows/SDL2 | OpenGL 3.3 | 64-bit Windows compilation with SDL2 and OpenAL. DirectX dependencies are replaced with SDL2 and OpenAL. |\n| MacOS x86_64/AArch64 | OpenGL 3.3 | 64-bit MacOS compilation with SDL2 and OpenAL. All release packages include both Intel and ARM64. |\n| 64-bit Linux/SDL2 | OpenGL 3.3 | 64-bit Linux compilation with SDL2 and OpenAL. |\n| Emscripten/WebAssembly | WebGL 2/OpenGL ES 3 | WebAssembly with SDL2 and OpenAL. Runs in a web browser. Since WASM only supports 32-bit pointers, this will likely be less buggy than 64-bit, but less performant. |\n| x86 Linux/SDL2, mmap blobs | OpenGL 3.3 | 32-bit Linux compilation with SDL2 and OpenAL. JK.EXE is memory mapped into the process and used as a \"binary blob\"; Unimplemented functions will fall back to JK.EXE implementations. |\n| 32-bit Linux/SDL2, blobless | OpenGL 3.3 | 32-bit Linux compilation with SDL2 and OpenAL. The output executable is a swap-in replacement for JK.EXE, but will be missing functions and will crash on reaching unimplemented code. |\n| x86 Win32/MinGW DLL | Software/DirectX | Win32 hooked build, JK.EXE is patched to load `df2_reimpl.dll` execute `hook_init_win` before JK.EXE's `main` function. Unimplemented functions will fall back to JK.EXE implementations. `df2_reimpl_kvm.dll` is used for the KVM target |\n\nThe following implementations are in-progress or planned:\n\n| Configuration | Renderer | Description | Status |\n| --- | --- | --- | --- |\n| Android | OpenGL ES 3 | Not a huge priority, but would be nice to have. | It compiles and renders! Input/menuing is lacking. |\n| iOS | Metal? | Not a huge priority, but would be nice to have. | Not started |\n| Switch libnx | OpenGL ES 3 | Not a huge priority, but would be nice to have. | Not started |\n| 32-bit Windows/SDL2 | OpenGL 3.3 | Windows compilation with SDL2 and OpenAL. DirectX dependencies are replaced with SDL2 and OpenAL. Targeting Windows XP ~ Windows 7 | Not started |\n| 32-bit Windows/DirectX | Direct3D 3 | Faithful decompilation with original DirectX bindings/renderer. | Not started |\n\nLinux building works on AArch64/RPi4 with llvmpipe, but V3D GLES has trouble with palettes.\n\nOpenJKDF2 requires game data from a licensed copy of Jedi Knight: Dark Forces II in order to run; No game assets are provided by OpenJKDF2. On Linux, paths and filenames may be case-sensitive. Your directory structure should look something like this:\n```\n.\n├── JK.EXE\n├── MUSIC\n│   ├── Track12.ogg\n│   ├── Track13.ogg\n│   ├── Track14.ogg\n│   ├── Track15.ogg\n│   ├── Track16.ogg\n│   ├── Track17.ogg\n│   ├── Track18.ogg\n│   ├── Track22.ogg\n│   ├── Track23.ogg\n│   ├── Track24.ogg\n│   ├── Track25.ogg\n│   ├── Track26.ogg\n│   ├── Track27.ogg\n│   ├── Track28.ogg\n│   ├── Track29.ogg\n│   ├── Track30.ogg\n│   ├── Track31.ogg\n│   └── Track32.ogg\n├── episode\n│   ├── JK1.gob\n│   ├── JK1CTF.gob\n│   └── JK1MP.gob\n├── openjkdf2-64\n├── player\n└── resource\n    ├── Res1hi.gob\n    ├── Res2.gob\n    ├── jk_.cd\n    └── video\n        ├── 01-02A.SMK\n        ├── 03-04A.SMK\n        ├── 06A.SMK\n        ├── 08-10A.SMK\n        ├── 12A.SMK\n        ├── 16A.SMK\n        ├── 18-19A.SMK\n        ├── 21A.SMK\n        ├── 23A.SMK\n        ├── 25A.SMK\n        ├── 27A.SMK\n        ├── 33-34A.SMK\n        ├── 36A.SMK\n        ├── 38A.SMK\n        ├── 39A.SMK\n        ├── 41-42A.SMK\n        ├── 41DA.SMK\n        ├── 41DSA.SMK\n        ├── 44A.SMK\n        ├── 46A.SMK\n        ├── 48A.SMK\n        ├── 50A.SMK\n        ├── 52-53A.SMK\n        ├── 54A.SMK\n        └── 57A.SMK\n```\n\n## Building\n\nSee [here](BUILDING.md) for instructions.\n\n## Contributing\n\nContributions in the form of code cleanup and documentation are highly welcomed. See [CONTRIBUTING.md](CONTRIBUTING.md) for details on what kinds of cleanup tasks still need to be done. OpenJKDF2 is not currently accepting monetary donations, however [detailed bug and crash reports](https://github.com/shinyquagsire23/OpenJKDF2/issues) are always appreciated, including bugs/crashes involving mods.\n\n## TL;DR: What Isn't Implemented, Yet\n - Load Configuration and Save Configuration in Setup \u003e Controls \u003e Options\n - Using plus or minus to resize the screen (with SDL2, resolution auto-resizes to window size)\n\n## Usage with original JK.EXE and DirectX using hooks\nSee [here](HOOKS.md) for instructions.\n\n## Methodology\nThe bulk of research and documentation occurs in IDA. Every function has been identified to a file prefix (ie `stdHashTable_`) with a corresponding .c/.h file. RenderDroid (`rd*`) and LEC stdlib (`std*`) functions are 90% canonically named, based on symbols from Grim Fandango Remastered.\n\nReverse engineering is a parallel effort between structure documentation and function identification. Once structures are sufficiently documented, Hex-Rays can be used for decompilation. While most Hex-Rays output works outright, many loops and structures require manual intervention. Output is generally cleaned and tidied to remove redunant stack variables or too-deep nesting. `sizeof` and obvious inlining and macros should also be adjusted as appropriate.\n\nEngine variables and yet-to-be-decompiled functions are referenced using `define` macros and static function pointers, respectively. Once a file is decompiled enough that an engine variable is no longer referenced by non-decompiled code, the variables can be declared in their respective C files. For decompiled functions which are only referenced by non-decompiled functions, a `hook_function` call is added in `main.c` to redirect code execution to `df2_reimpl.dll` from `JK.EXE`.\n\nProgress is tracked using `analyze.py`, `output.map` and `ida_copypaste_funclist_nostdlib.txt`: After compiling `df2_reimpl.dll`, symbols can be compared against the `.idb` to determine how much of the original `.text` is actually in use, and how much has been hooked and replaced.\n\nIf you'd like a copy of my IDB to examine functions which haven't been decompiled yet (or for any other use), let me know.\n\n## Current Progress\n\nGenerated using `analyze.py`. Some filenames may be inaccurate or incomplete (see `ida_copypaste_funclist_nostdlib.txt` for a full function name listing).\n\n```\n\n[file]                         [size]     [% of text]   [% complete]  [decomp / total] \nDirectX                        0x1e       0.003%        100.000%        5 / 5          \njkGob                          0x29       0.004%        100.000%        2 / 2          \njkGuiDecision                  0x45       0.006%        100.000%        3 / 3          \nsithStrTable                   0x5b       0.008%        100.000%        4 / 4          \nsithCopyright                  0x67       0.010%        100.000%        1 / 1          \njkStrings                      0x89       0.013%        100.000%        5 / 5          \njkGuiGeneral                   0xc5       0.018%        100.000%        3 / 3          \njkSmack                        0xee       0.022%        100.000%        4 / 4          \nrdFace                         0xf6       0.023%        100.000%        4 / 4          \njkGuiControlOptions            0x105      0.024%        100.000%        3 / 3          \nstdHashKey                     0x107      0.024%        100.000%       10 / 10         \nrdCanvas                       0x113      0.025%        100.000%        4 / 4          \njkGuiEsc                       0x18f      0.037%        100.000%        3 / 3          \nrdroid                         0x1f6      0.047%        100.000%       27 / 27         \nsithHeader                     0x1f9      0.047%        100.000%        1 / 1          \nsithTime                       0x213      0.049%        100.000%        6 / 6          \njkGuiSingleTally               0x21b      0.050%        100.000%        4 / 4          \njkGuiSetup                     0x240      0.053%        100.000%        4 / 4          \njkGuiSound                     0x274      0.058%        100.000%        3 / 3          \nsithItem                       0x275      0.058%        100.000%        5 / 5          \njkGuiGameplay                  0x2b2      0.064%        100.000%        3 / 3          \nstdMemory                      0x2ba      0.065%        100.000%        7 / 7          \nsithEvent                      0x2e3      0.069%        100.000%        9 / 9          \nstdMci                         0x2ef      0.070%        100.000%        7 / 7          \njkGuiObjectives                0x308      0.072%        100.000%        4 / 4          \njkControl                      0x331      0.076%        100.000%        4 / 4          \nWindows                        0x39a      0.085%        100.000%       11 / 11         \nstdString                      0x3b3      0.088%        100.000%       11 / 11         \nsithRenderSky                  0x3c2      0.089%        100.000%        5 / 5          \njkGuiDialog                    0x3e0      0.092%        100.000%        6 / 6          \nsithModel                      0x3f1      0.094%        100.000%        8 / 8          \nrdThing                        0x42f      0.099%        100.000%       12 / 12         \nstdGdi                         0x430      0.099%        100.000%       10 / 10         \njkCutscene                     0x443      0.101%        100.000%        7 / 7          \nsithKeyFrame                   0x44e      0.102%        100.000%        5 / 5          \nstdPcx                         0x45e      0.104%        100.000%        2 / 2          \nsithDSSCog                     0x460      0.104%        100.000%        4 / 4          \nsmack                          0x466      0.104%        100.000%        6 / 6          \nsithPlayerActions              0x46f      0.105%        100.000%        3 / 3          \nrdMath                         0x47d      0.107%        100.000%        6 / 6          \nrdLight                        0x49f      0.110%        100.000%        8 / 8          \njkGuiMain                      0x4b1      0.111%        100.000%        6 / 6          \nstdFnames                      0x4ee      0.117%        100.000%       14 / 14         \nsithSprite                     0x4f1      0.117%        100.000%        6 / 6          \njkGui                          0x4fb      0.118%        100.000%       10 / 10         \njkGuiTitle                     0x4fb      0.118%        100.000%       10 / 10         \nsithMaterial                   0x4fd      0.118%        100.000%        9 / 9          \nwuRegistry                     0x5b2      0.135%        100.000%       12 / 12         \nstdHashTable                   0x5d6      0.138%        100.000%       10 / 10         \nVideo                          0x5dc      0.139%        100.000%        5 / 5          \nsithConsole                    0x5de      0.139%        100.000%       13 / 13         \nsithExplosion                  0x61d      0.145%        100.000%        4 / 4          \nsithAIClass                    0x689      0.155%        100.000%        7 / 7          \nrdPrimit2                      0x69a      0.157%        100.000%        5 / 5          \nsithCogScript                  0x6ca      0.161%        100.000%        9 / 9          \nWindow                         0x6db      0.163%        100.000%       13 / 13         \nstdGob                         0x6dd      0.163%        100.000%       14 / 14         \njkAI                           0x6e7      0.164%        100.000%        5 / 5          \nsithMain                       0x72b      0.170%        100.000%       16 / 16         \njkGuiControlSaveLoad           0x732      0.171%        100.000%        6 / 6          \njkGuiPlayer                    0x73a      0.171%        100.000%        5 / 5          \nrdSprite                       0x76d      0.176%        100.000%        5 / 5          \nstdConffile                    0x78d      0.179%        100.000%       13 / 13         \njkGuiMap                       0x793      0.180%        100.000%        8 / 8          \nsithTemplate                   0x79d      0.181%        100.000%       10 / 10         \nsithParticle                   0x7f5      0.189%        100.000%       10 / 10         \nsithSector                     0x806      0.190%        100.000%       13 / 13         \nsithComm                       0x80b      0.191%        100.000%       11 / 11         \nsithMap                        0x814      0.192%        100.000%        6 / 6          \nMain                           0x87b      0.201%        100.000%        4 / 4          \njkGuiMultiTally                0x8aa      0.206%        100.000%        7 / 7          \njkGuiSingleplayer              0x8d8      0.210%        100.000%        7 / 7          \njkCredits                      0x8e4      0.211%        100.000%        6 / 6          \nsithCogFunctionSector          0x93a      0.219%        100.000%       22 / 22         \nsithCogFunctionAI              0x943      0.220%        100.000%       20 / 20         \nstdSound                       0x9bf      0.231%        100.000%       27 / 27         \nsithGamesave                   0x9bf      0.231%        100.000%        7 / 7          \njkGuiForce                     0x9dd      0.234%        100.000%       11 / 11         \nsithSound                      0xa00      0.237%        100.000%       13 / 13         \nrdParticle                     0xa0d      0.239%        100.000%       10 / 10         \nrdMaterial                     0xa2d      0.241%        100.000%        9 / 9          \nsithSoundClass                 0xa46      0.244%        100.000%       16 / 16         \nsithCogFunctionSound           0xa97      0.251%        100.000%       14 / 14         \nrdKeyframe                     0xa99      0.251%        100.000%        8 / 8          \nrdCamera                       0xaa8      0.253%        100.000%       26 / 26         \njkGuiSaveLoad                  0xb21      0.264%        100.000%        9 / 9          \nrdPolyLine                     0xb42      0.267%        100.000%        6 / 6          \njkSaber                        0xb54      0.269%        100.000%        8 / 8          \njkGuiKeyboard                  0xb57      0.269%        100.000%       14 / 14         \njkGuiNetHost                   0xbc6      0.279%        100.000%        6 / 6          \nsithOverlayMap                 0xbf8      0.284%        100.000%        9 / 9          \nrdVector                       0xd29      0.312%        100.000%       55 / 55         \njkGuiMouse                     0xdb5      0.325%        100.000%       14 / 14         \nDirectDraw                     0xdd4      0.328%        100.000%       16 / 16         \njkEpisode                      0xdd9      0.329%        100.000%       10 / 10         \nsithCogFunctionPlayer          0xdf0      0.331%        100.000%       42 / 42         \njkHudInv                       0xe43      0.338%        100.000%        9 / 9          \nsithCogFunctionSurface         0xe92      0.346%        100.000%       38 / 38         \nsithActor                      0xf9c      0.370%        100.000%       13 / 13         \nstdConsole                     0xfff      0.380%        100.000%       20 / 20         \njkGuiMultiplayer               0x1097     0.394%        100.000%       13 / 13         \nDirectPlay                     0x10cc     0.399%        100.000%       31 / 31         \nVBuffer                        0x10dc     0.400%        100.000%        4 / 4          \njkCog                          0x11b8     0.420%        100.000%       40 / 40         \nstdControl                     0x11ec     0.425%        100.000%       22 / 22         \nsithPuppet                     0x1222     0.430%        100.000%       17 / 17         \nsithCamera                     0x124b     0.434%        100.000%       23 / 23         \njkGuiDisplay                   0x12ff     0.451%        100.000%       11 / 11         \njkGuiJoystick                  0x13f0     0.473%        100.000%       19 / 19         \njkDSS                          0x13f6     0.474%        100.000%       32 / 32         \nsithCogYACC                    0x152b     0.502%        100.000%       10 / 10         \njkRes                          0x15b6     0.515%        100.000%       23 / 23         \njkMain                         0x16cd     0.541%        100.000%       53 / 53         \nsithWorld                      0x1718     0.548%        100.000%       22 / 22         \nsithDSS                        0x175d     0.554%        100.000%       22 / 22         \nstdMath                        0x182a     0.573%        100.000%       23 / 23         \nrdActive                       0x1a55     0.625%        100.000%        8 / 8          \nsithCogExec                    0x1aec     0.639%        100.000%       31 / 31         \nsithCogParse                   0x1b2a     0.645%        100.000%       26 / 26         \njkHud                          0x1c9b     0.679%        100.000%       17 / 17         \njkDev                          0x1fd6     0.755%        100.000%       41 / 41         \nsithInventory                  0x2150     0.791%        100.000%       62 / 62         \nsithDSSThing                   0x22aa     0.823%        100.000%       37 / 37         \nsithRender                     0x23de     0.851%        100.000%       22 / 22         \njkGuiBuildMulti                0x258b     0.891%        100.000%       24 / 24         \nsithSoundMixer                 0x2626     0.905%        100.000%       37 / 37         \nstdDisplay                     0x267b     0.913%        100.000%       37 / 37         \nsithCogFunction                0x26c2     0.920%        100.000%      119 / 119        \nsithAI                         0x2771     0.936%        100.000%       35 / 35         \nrdModel3                       0x2a7e     1.008%        100.000%       23 / 23         \nstd3D                          0x2c4a     1.051%        100.000%       39 / 39         \nrdMatrix                       0x2c85     1.056%        100.000%       56 / 56         \nsithAICmd                      0x2cc0     1.062%        100.000%       22 / 22         \njkGuiRend                      0x2cd7     1.064%        100.000%       68 / 68         \njkPlayer                       0x2da2     1.083%        100.000%       45 / 45         \nsithPhysics                    0x310b     1.164%        100.000%       13 / 13         \nsithWeapon                     0x32a8     1.202%        100.000%       33 / 33         \nrdCache                        0x331c     1.213%        100.000%       16 / 16         \nsithCogFunctionThing           0x3a4c     1.383%        100.000%      142 / 142        \nrdClip                         0x81f2     3.084%        100.000%       17 / 17         \nsithAIAwareness                0x31f      0.074%        90.488%         5 / 6          \nstdComm                        0x53c      0.124%        98.955%        16 / 17         \nstdFileUtil                    0x687      0.155%        54.159%         6 / 11         \nstdBmp                         0x6b8      0.159%        0.000%          0 / 3          \nsithAnimClass                  0x6cc      0.161%        94.080%         4 / 5          \nstdStrTable                    0x7b6      0.183%        82.877%         4 / 6          \nstdColor                       0x97e      0.225%        24.198%         3 / 11         \njkGame                         0x98f      0.227%        80.384%        12 / 13         \nstdPalEffects                  0xa66      0.247%        85.875%        16 / 21         \nstdLbm                         0xc24      0.288%        0.000%          0 / 3          \nrdColormap                     0xcf4      0.307%        47.738%         7 / 12         \nstdPlatform                    0xdde      0.329%        49.042%        37 / 43         \nsithPlayer                     0xe72      0.343%        95.944%        23 / 27         \nstdBitmap                      0xeb6      0.349%        47.398%         6 / 14         \nsithTrackThing                 0xf9f      0.371%        90.098%        12 / 15         \nrdPuppet                       0x101f     0.383%        97.407%        15 / 19         \nstdGif                         0x1162     0.412%        0.000%          0 / 4          \nsithCommand                    0x11b2     0.420%        91.545%        18 / 20         \nsithIntersect                  0x12a8     0.443%        92.588%         9 / 12         \nrdPrimit3                      0x16e0     0.543%        91.684%         7 / 9          \nstdFont                        0x181a     0.572%        75.284%        12 / 20         \nsithSurface                    0x1c6a     0.674%        96.838%        33 / 35         \nsithCog                        0x1ed3     0.731%        90.686%        21 / 28         \nsithMulti                      0x252a     0.882%        91.423%        29 / 35         \nsithCollision                  0x2827     0.953%        91.954%        19 / 22         \nsithControl                    0x285a     0.958%        99.613%        31 / 33         \nsithThing                      0x338c     1.223%        86.829%        43 / 49         \nrdRaster                       0xf04d     5.702%        0.195%          1 / 89         \nrdZRaster                      0x15fb4    8.346%        0.000%          0 / 73         \nrdAFRaster                     0x1620d    8.402%        0.000%          0 / 122        \nrdNRaster                      0x304d4    18.339%       0.000%          0 / 87         \n---------------------------------------------------------------------------------\n\nTotal completion:\n-----------------\n56.758% by weight\n95.857% by weight excluding rasterizer\n2694 / 3169 functions\n2694 / 2798 functions excluding rasterizer\n\nSubsystem Breakdown (Not Decomp'd)\n----------------------------------\n[subsys]       [% of text]  [TODO / total]\nsith           0.542%           40 / 1319\nstdPlatform    0.168%            6 / 43\nstd            1.494%           47 / 376\njkGui          0.000%            0 / 284\nrd             0.216%           11 / 345\njk             0.044%            1 / 324\nRaster         40.778%         370 / 371\nother          0.000%            0 / 107\n-----------------------------------------\ntotal          43.242%         475 / 3169\n\nSubsystem Breakdown (Not Decomp'd, Excl Raster)\n-----------------------------------------------\n[subsys]       [% of text]  [TODO / total]\nsith           0.916%           40 / 1319\nstdPlatform    0.283%            6 / 43\nstd            2.524%           47 / 376\njkGui          0.000%            0 / 284\nrd             0.364%           11 / 345\njk             0.075%            1 / 324\nother          0.000%            0 / 107\n-----------------------------------------\ntotal          4.162%          105 / 2798\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinyquagsire23%2FOpenJKDF2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshinyquagsire23%2FOpenJKDF2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinyquagsire23%2FOpenJKDF2/lists"}