[{"timestamp":"2026-10-17T23:57:29Z","commit_sha":"9bc6b96cd1b5450d8898d916410006a9e5ca1205","commit_message":"Correct RenderWare comments about transforms, streams and callbacks\n\n- fn_804946A4: the view-offset matrix has unit axes and offsets the at\n  vector by (-x, y) and the position by (x, -y); it flips no axis. The x\n  and z negation happens when fn_804950AC loads GX's matrix; say so there.\n- E_RW_READTEXMASK is raised whenever the texture read callback returns\n  NULL, mask or not: describe it as a texture not read by its name and\n  mask, in rwcore.h and at the tolerant reader fn_804A0CDC.\n- fn_8046C0D4 builds a display list per mesh with triangle strips for\n  strip geometries, not only triangle lists.\n- Rt2dFontShowCallBack: only the texture font callback advances the\n  anchor; the outline callback leaves it unchanged.\n- RtDictSchema.compatibilityVersion: older streams are read through\n  streamReadCompatibilityCB, so it is not the oldest version read.\n\nComments only.\n\nRefs #228","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1431,"complete_units":262}},{"timestamp":"2026-10-17T23:37:50Z","commit_sha":"2dac8d99d259870219299dc5313eae2d03591851","commit_message":"Remove the dormant verified-issue-closure automation\n\nThe verified issue closure workflow, its acceptance-event trigger, its\ntest workflow and the two scripts behind them never ran: the job is\ngated on a repository variable that was never enabled, so every run\nwas skipped. Issues are closed by hand with the merged commit and its\nevidence instead.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1431,"complete_units":262}},{"timestamp":"2026-10-17T23:37:35Z","commit_sha":"6f3cba023e1ce6c0bf2e310b6ffbb8ec0071e014","commit_message":"Correct the adx_GetVer note in adx_dcd.c\n\nadx_GetVer is inlined into its three callers; only its out-of-line copy\nis unreferenced and stripped. Also reduce the provenance note to a\none-line origin statement. Comment only.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1431,"complete_units":262}},{"timestamp":"2026-10-17T22:19:49Z","commit_sha":"1262fc553c6e8032bb844be542cd3ff36529887d","commit_message":"Decompile ElecCube.cpp\n\nDecompile the electric circuit cube (USA 0x8021BCF0-0x8021C5AC), named\nafter its RTTI class: it shows ROLLBLOCK.BIN scaled by its \"Scale\"\nparameter and keeps turning it towards new random rotations; it also\ndefines the ELEC_CUBE descriptor and parameter table. The constructor\nand UpdateRotation pick the next target rotation, and the constructor\nand ResetFromOwner pass the scale to the model, through inline helpers\n(names inferred).\n\nThe code matches, but the original pools its .sdata2 float literals in\nanother order, starting with those of the two helpers as if a function\nusing both had been compiled first; no such function is known, so the\nunit stays NonMatching. Declare the random number helpers, the\nrotation-order and scale matrix helpers and\nGadgetModelInfo::fn_801617D0 once each, name the unit's functions,\nvtable and RTTI records in all regions, and mark its float literals\nlocal.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1431,"complete_units":262}},{"timestamp":"2026-10-17T20:18:46Z","commit_sha":"e344faa8ac823fb16987889568ae78ab090e543d","commit_message":"Decompile the Chao::CSD motion palette unit\n\ncsdMotionPalette.cpp (0x803605E8-0x80361738, name from the library's\nallocation calls) builds the runtime entries of a scene's layers from\nits file data: the palette block layout, the matrix pool sizing and\nallocation, quad and Shift JIS text entries with font glyph lookup, and\nthe element-data field getters. MotionPalette.h declares the shared\nrecords (the 0x144-byte entry, layer, palette and the scene data they\nare built from).\n\nThe library is now built with -inline level=1: its recursive inline\nfunctions are expanded exactly one level (MarkMatrixUsers 0x1F0 and\nMarkEntryDirty 0x98 only at that depth); the three matched CSD units\nare byte-identical with it.\n\nEvery emitted function matches except BuildTextEntry and InitPalette:\nthey read .rodata through one section base where the original\naddresses each literal separately (probably also the cause of their\nregister and scheduling differences), and their allocations pass lower\n__LINE__ values than the original 442 and 234. MarkEntryDirty is not\nemitted and MarkMatrixUsers follows its caller; the original file had\ncallers the game does not use, removed at link. The unit stays\nNonMatching. Names are inferred.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T19:38:31Z","commit_sha":"bfaab21a6ffc41e123dcfa952e99f7dffcbeb1ee","commit_message":"Decompile the Chao::CSD platform hooks unit\n\n0x80361CF8-0x80361F30 with its .bss pointer holds the current platform\nobject and the functions built on it: PrintError and PrintFatalError\nformat a message with vsnprintf into a 256-byte buffer and pass it to\nthe platform's Print slot (the fatal one then loops forever), Begin and\nEnd nest calls to the platform's slots at 0x30 and 0x34, and the first\nfunction forwards to a not yet decompiled shutdown routine at 0x8035F394.\n\nCPlatform.h declares the platform class. Its RenderWare implementation\nis CPlatformRW, named by the library's own assert text, which also names\nthe DrawPrimitive2D slot; the base class name is that name without the RW\nsuffix. Three vtables belong to the hierarchy: the\nbase whose slots are pure except the destructor (0x8055FC10), CPlatformRW (0x8055FBD8) and a further\nderived class (0x8055FC70). The platform derives from CBase: its deleting\ndestructors free through the allocator slot behind CBase's operator\ndelete. Begin/End save and restore RenderWare render\nstates in that implementation. vsnprintf joins the C-linkage\ndeclarations of include/libc/stdio.h; no other object changes.\n\nMatches in USA.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T17:52:23Z","commit_sha":"ba93d9aff72453ea831f550c9ac9b6b672fe2409","commit_message":"Decompile the RenderWare pipeline dependency unit\n\nrw/fn_8049D408.c (0x8049D408-0x8049EA2C) is the dependency pass of\nunlocking a pipeline. Working back from the last node, each node\ngathers the clusters it and the nodes after it require (entries of\n0x24 bytes in per-node lists of 0x14 bytes), and a requirement is\ndropped once every input of a node invalidates it; a recursive helper\npropagates that drop to the following nodes. A forward pass adds the\nclusters that nodes force present or that outputs create and records\nwhich outputs pass each cluster on. The clusters that each node passes\non to the next are then traced into scopes (0x10 bytes, merged by\nunion), each scope gets the lowest free packet slot, and the embedded\npacket, pipeline clusters, per-node slot tables and the sorted input\nrequirements are laid out in the superblock scratch space. Errors\n0x1D-0x20 (dependency mismatch, duplicate and null cluster\ndefinitions, out of scratch space) are reported with their arguments.\n\nrwcore.h gains those error codes and types the top-sort data's\nrequirement pointer.\n\nSix of the eleven functions match, including the recursive helper and\nthe entry point. The other five have the original length and differ in\nregister allocation: fn_8049D934 (30 of 324 words), fn_8049DE44 (72 of\n216), fn_8049E1A4 (31 of 165), fn_8049E438 (10 of 47) and fn_8049E54C\n(93 of 280, which also keeps a zero in a register where the build\nloads it again). The unit stays NonMatching; the original object is\nlinked.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T17:24:20Z","commit_sha":"6a85bb013a118c56201970e97b9aba70646a586e","commit_message":"Report RenderWare core errors with rwID_COREPLUGIN\n\n23 units defined rwCOREERRORPLUGIN locally with the value of\nrwID_COREPLUGIN (1), the core's plugin ID that rwcore.h already\ndeclares for its errors. Their error macros now use rwID_COREPLUGIN\nand the local copies are removed; the macros are otherwise unchanged.\nEvery object compiles identically in all three regions.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T16:45:35Z","commit_sha":"7339c25200201a7cef043dfc3ede8491c87c32a2","commit_message":"Decompile the RenderWare GameCube Im3D nodes unit\n\nrw/fn_8049FAFC.c (0x8049FAFC-0x804A076C, .data 0x8056EC40-0x8056ED00,\n.sbss 0x805F16A0-0x805F16A8) holds the two nodes of the GameCube Im3D\npipelines: \"ImmInstance.csl\", which keeps the transform's pool, and\n\"SubmitNoLight.csl\", which sets an unlit vertex colour format (textured\nwhen the vertices carry UVs) and sends the pool's vertices, indexed or\nin order, straight to the GX FIFO, with the GX primitive taken from a\ntable per primitive type. The node definitions are 0x40 bytes; the pool\npointer is 4 bytes followed by the unit's .sbss padding.\n\nThe data and three of the four functions match. fn_8049FB18 (336 of 841\nwords) has the same instructions; in the vertex loops the FIFO base,\nthe colour bytes and, in the two- and three-vertex loops, the loop\ncounter take other registers.\n\nThe unit stays NonMatching; the original object is linked.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T16:27:20Z","commit_sha":"652b4bb6cb04e76fdaa080e23fa7ec27fccc6b87","commit_message":"Match the RenderWare GameCube texture plugin unit\n\nrw/fn_80499B24.c (0x80499B24-0x8049A78C, .data 0x8056EBD0-0x8056EC40,\n.sbss 0x805F1670-0x805F1678, .sdata2 0x805FB420-0x805FB430) holds the\ntexture plugin (0x24 bytes registered with ID 0x40C): its constructor\nmarks the texture object as not built, its destructor clears the\ntexture from the per-texture-map cache, plus the cache reset called at\ndevice start, the registration, the function that sets a texture on a\nGX texture map and the LOD parameter set and get functions.\n\nSetting a texture builds its GX texture object (GXInitTexObj or\nGXInitTexObjCI, then GXInitTexObjLOD) on first use, rebuilds it with\nits current LOD parameters when the filter mode or addressing changed\nor a palettized texture moves to another texture map, loads the TLUT\nand then the texture object (or the preloaded form). The build is a\nstatic inline helper shared with the LOD setter; the .data holds the\nfilter mode to GX filter table, the addressing to GX wrap mode table and\nthe 8-entry cache. The last four bytes of .data and of .sbss are the\nunit's section padding, so lbl_8056EC1C and lbl_805F1670 shrink to 0x20\nand 0x4 bytes; the two .sdata2 values are the unit's float and\nunsigned-conversion literals.\n\nWhole-object match for USA.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T15:50:26Z","commit_sha":"014998da31322b6ef18694e2dd88c5755529d657","commit_message":"Decompile the RenderWare GameCube binormal and tangent unit\n\nSplit 0x804A6CDC-0x804A869C (USA) into its own unit with its literals:\nbuilding the binormals and tangents of instanced geometry whose\nGameCube multi-texture effects generate texture coordinates from them\nor bump map. Every vertex's binormal is first marked unbuilt; each\nmesh's display list is then walked as triangle strips or lists with\n8- or 16-bit indices, and the first triangle that uses an unbuilt\nvertex builds its binormal and tangent in a paired-single leaf that\nloads and stores the vertex components through GQR5 to GQR7.\n\n5 of 6 functions match. fn_804A6F8C (the display list walk) differs\nin its callee-saved register assignment throughout and in the\nscheduling of the GQR setup, which is two instructions longer (each\nx |= x << 16 becomes mr and rlwimi): 0x119C bytes against 0x1194.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T15:41:37Z","commit_sha":"152cc9539a85cf48bdeee6bcd15d8c5b47369b1a","commit_message":"Match the RenderWare GameCube Im3D pipelines unit\n\nrw/fn_8049F8AC.c (0x8049F8AC-0x8049FAFC) creates and destroys the\nGameCube Im3D pipelines: a transform pipeline of the one node returned\nby fn_8049FB0C and a render pipeline of the node returned by\nfn_804A0760, which serves the triangle list, fan and strip, line list\nand polyline types. Both pipelines belong to plugin ID 1 and are made\ncurrent when created; destroying them restores the platform defaults\nfirst.\n\nWhole-object match for USA.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T15:17:28Z","commit_sha":"6a880817e9c5d6f7563dc1e3a67c01e8643e5345","commit_message":"Narrow rw/fn_80474BEC.c\n\nThe line segment code computes the y difference first, and the line\nand curve code keep their normal sums as two scalars; fn_80474EA0 now\nmatches and the curve, closing and flattening functions come closer.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T14:41:59Z","commit_sha":"86099367c814adaef07b2e629d32a566756b34c5","commit_message":"Narrow rw/fn_80443A74.c\n\nThe byte sizes of an atomic's delta morph weights and interpolator are\nsigned counts. fn_804443A0 now differs only in the order of its loop\ncounter setup; fn_80443A74 and fn_80444088 still differ in register\nallocation.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T13:14:15Z","commit_sha":"65a052893dc65493be3a32098b80fb22b71278b9","commit_message":"Decompile the RenderWare pipeline core unit\n\nrw/fn_8049B1F8.c (0x8049B1F8-0x8049B8BC, .bss 0x805E3260-0x805E32A0,\n.sdata 0x805EDF48-0x805EDF58, .sbss 0x805F1698-0x805F16A0) opens and\ncloses the pipeline library (execution heap of 0x1000 bytes, a free list\nof 0x34-byte pipelines in static storage, 64 nodes per pipeline),\ndestroys pipeline nodes, returns the execution heap, executes a pipeline\nthrough its first node's body with the global execution context, and\ncreates and destroys pipelines. The free list storage is a 0x24-byte\nRwFreeList; the four bytes after it are the unit's .bss padding. The\nnode output limit (32) moves into rwcore.h next to the node record.\n\nSix of the seven functions match. Still different:\n- fn_8049B350 (22 of 213 words): in the locked-pipeline path the\n  output-array base adds nodes + maxNodes * 0x28 before the index term\n  and the two loop registers of the first shift swap; the outer and\n  output registers of the output renumbering loop swap.\n- .bss order: the source places the free list storage (lbl_805E3278)\n  before the execution context (lbl_805E3260), the reverse of the\n  original.\n\nThe unit stays NonMatching; the original object is linked.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T13:04:49Z","commit_sha":"d5c8e41abd968a2f3e582a76589901e52a105ed6","commit_message":"Match fn_8044CF68 in rw/fn_8044CDC4.c\n\nThe normal stream size multiplies by three when binormals and tangents\nfollow each normal, as one expression.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T12:55:09Z","commit_sha":"927f46578dbab2426aa8a5d0367699d7e8090947","commit_message":"Match the RenderWare pipeline module unit\n\nrw/fn_8049B0CC.c (0x8049B0CC-0x8049B14C, .sbss 0x805F1690-0x805F1698)\nholds the pipeline module's open and close callbacks, which store the\nmodule's globals offset and open or close the pipeline library, the\nplugin attach step that returns TRUE and the empty camera hook called at\nthe start of a camera update. lbl_805F1690 is the 4-byte globals offset\n(every user reads only that word); the four bytes after it are the\nunit's .sbss padding.\n\nWhole-object match for USA.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T12:26:06Z","commit_sha":"fb133d79dc82476ef18f2d57f794bfd0c99b8fdc","commit_message":"Decompile the RenderWare material effects unit\n\nSplit 0x804A076C-0x804A2C90 (USA) into its own unit with its data:\nthe engine plugin (ID 0x120) and its material data free list, the\nmaterial, atomic and world sector plugin data and streams, the bumped\ntexture made for a bump map, the plugin attachment, and the effect\nsetters and getters. The local name initializers and literals are named\nafter the compiler's symbols, and the padded sizes of two objects are\nreduced to the objects' sizes.\n\n49 of 50 functions match. fn_804A09D0 swaps two volatile registers\naround its switch (7 instruction words), so the unit stays NonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T12:21:56Z","commit_sha":"54a4884db69c4662f6951746ef2bc0170d977642","commit_message":"Use compiler literal names for the world sector pipeline's floats\n\nrw/fn_80463D28.c is matched, and MWCC emits its two .sdata2 floats\n(0.0f and 1.0f at 0x805FB1A0 and 0x805FB1A4) as the local literals @29\nand @30. Naming them so in the USA symbols makes the split object's\nsymbols agree with the compiled object. The unit is only split in\nGUPE8P.\n\nmain.dol is unchanged in GUPE8P, GUPJ8P and GUPP8P.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T12:09:04Z","commit_sha":"d74b168fa0d060c6f7ffedb114676612ab9b91eb","commit_message":"Add the delta morph GameCube pipeline as a unit\n\nrw/fn_804448B8.c (0x804448B8-0x80445CF4, with its pipelines array and\nlocal tables) holds the pipeline's instance and reinstance callbacks, the\ndouble-buffered vertex buffer and its destroy callbacks, the pipeline\ncreation and destruction, and the three hand-written paired-single\ndelta kernels. The geometry's base streams and the vertex buffer header\nget their types in rpdmorph.h.\n\nTen of the eleven functions match. The reinstance callback fn_80444E7C\nstill differs in register allocation and instruction scheduling (the\nload of the atomic plugin offset, the store of the weight, the copies of\nthe local tables and the stack order of the two position tables), so\nthe unit stays NonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T11:31:28Z","commit_sha":"8968354f7dffbf1f1ebee39e874ea451fd246411","commit_message":"Give MetroTRK's console callbacks MSL's signatures\n\nMSL installs __read_console, __write_console and __close_console in its\nstandard streams and calls the close operation with the handle alone.\nMetroTRK declared them with an enum result, a generic pointer in place\nof the idle callback and a four-argument close. Declare and define them\nwith an int result, the idle-callback type and a one-argument\n__close_console, and reduce __close_file to the handle it uses. The\nobject is unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T11:31:24Z","commit_sha":"3d577eba73f6dc1064cb7a486675ab9a3a7a0458","commit_message":"Replace the invented ADXF_GetNumCmd body with a .bss ordering stand-in\n\nThe stripped function before ADXF_Finish only fixes the order in which\nMWCC lays out the ADXF globals. Its body was unknown, yet the old source\ncarried a command-count query with unrelated state changes. Replace it\nwith a file-local function that only takes the address of each global in\nthe original storage order; the linker still strips it, and every\nglobal's .bss offset, ADXF_Finish and ADXF_Init are unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T11:30:29Z","commit_sha":"08fdda740c6db5d225ea1593d3c50285954a942d","commit_message":"Remove foreign-project notes and stale runtime comments\n\nDrop the notes in <algorithm> that justified find_if and find through\ncode from other games, and state what the code does instead (the debug\nlower_bound delegation, find's non-const reference). Remove the\naddresses from another game's build next to _MetroTRK_Has_Framing.\nTRKPPCAccessSpecialReg's callers pass a ten-word array and the blr goes\ninto index 9, not a five-instruction array. Replace the match\npercentages in allocator_core.c and register_fragment.c with what the\ncode relies on: the free-list head is read again for the singleton\ncase, and the module table ends with a zero text_size entry.\n\nComment-only; the affected objects are unchanged in GUPE8P.\n\nRefs #186","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T10:50:13Z","commit_sha":"a7d52df05b3ea54315f23727dca16b325d085c07","commit_message":"Name the VI display state type VIPositionInfo\n\nThe 0x58-byte state behind HorVer and setFbbRegs holds the display and\npan geometry, framebuffer mode and addresses, blanking and 3D flags and\nthe timing pointer. Use the descriptive name other Dolphin SDK\nreconstructions give it instead of the SomeVIStruct placeholder. The\nlayout and its size check are unchanged, and vi.o is identical in\nGUPE8P, GUPJ8P and GUPP8P.\n\nRefs #196","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T10:43:27Z","commit_sha":"32568cc9e8ee219fbffef564d3b3734b6d7d93f7","commit_message":"Mark the collision plugin unit as matching\n\nName its .sdata2 literals after the compiled object and drop the\nalignment padding from the last .sbss variable's size.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T10:12:19Z","commit_sha":"334f1da35cd9eff43b79a9849ecc83d012ec6ce6","commit_message":"Name the layer table in fn_8043C89C\n\nReplace the three repeated layer-table casts with a per-layer local.\nThe compiled object is unchanged apart from local literal numbering;\nfn_8043C89C keeps its callee-saved register permutation, so\nGame/fn_8043BD80.c stays NonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T08:51:57Z","commit_sha":"e817643a417c47afb8451499223523c3ece2c634","commit_message":"Check the size of every structure defined in source files\n\nAdds CHECK_SIZEOF after each of the 216 struct, union and class definitions\nin src/ (101 files), with the sizes MWCC produces in every region. OSAlloc's\nCell and HeapDesc are checked in their retail layout only, since DEBUG builds\nadd heap descriptor fields. All compiled objects are unchanged in GUPE8P,\nGUPJ8P and GUPP8P, and each final main.dol matches its expected SHA-1.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-17T04:09:05Z","commit_sha":"ba95b2b40c225288609bc6ca33a15e970bb45593","commit_message":"Narrow the raster render and clear state restoration comments\n\nThe draw worker saves and restores the fog, filter, addressing and\ntexture raster render states and restores the cached cull and blend\nmodes, but leaves the alpha test its texture setup selected. The clear\nworker leaves alpha testing off for opaque drawing. Comments only; the\nobject is unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T08:43:10Z","commit_sha":"5f369cecd6a99fc6e16d9ff46bb76ccc567cda72","commit_message":"Decompile the RenderWare GameCube render state unit\n\nMatch 0x80497198-0x80497FB4 (nine functions): device start/stop GX\nstate, the render state getter and setter with their GX state cache,\nfog, blending and alpha compare. Its .data tables, .bss cache, .sbss\ntexture/raster pointers and .sdata2 literals are split with it.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T08:05:43Z","commit_sha":"7d022f335d52cb4feeb1c280c6a64b2974d14f09","commit_message":"Decompile the RenderWare GameCube raster unit\n\nAdd the GameCube raster functions (0x804951B8-0x80497198): copying the\nframe buffer into a camera texture, mip level sizes and strides,\nconversion between linear pixels and GX texture tiles, locking and\nunlocking rasters and their palettes, choosing a raster's GX formats,\nallocating, creating and destroying rasters, setting a texture's raster\nand sub rasters. 14 of the 19 functions match; two more differ only in\nhow branches and pooled data addresses are relocated, and the tile\nconversions and the lock differ in register allocation.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T07:23:56Z","commit_sha":"da776b190e7802eac0ed8c5c41846066425ed972","commit_message":"Decompile the RenderWare GameCube device unit\n\nAdd the GameCube device (0x804939DC-0x804951B8): the device system\nfunction with its video modes and standard functions, opening the frame\nbuffers and FIFO, starting GX and VI, the triple buffered display\ncallbacks, the camera begin/end update and clear functions, showing a\nframe, and the view matrix loader. 11 of the 12 functions match; the\nrender mode setter differs in register allocation and the scheduling of\none load.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T06:28:18Z","commit_sha":"0d3ee5e33981064863af3d4a4c4e44a704d3baa7","commit_message":"Decompile the RenderWare GameCube raster and image conversion unit\n\nAdd the GameCube raster and image conversion functions\n(0x80491AB4-0x804939DC): the texel packers and unpackers for the 555,\n565, RGB5A3 and RGBA8 formats, the RGB/pixel standard functions, the\nraster to image and image to raster copies for 4, 8, 16 and 32-bit\npixels (palettizing images through the palette quantizer), and the\nraster format and size choice for an image. 24 of the 26 functions\nmatch.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T05:37:03Z","commit_sha":"22d3ed7a2964704797e636be5f045dc0ded89b97","commit_message":"Type the 2D immediate mode texture as an RwTexture\n\nThe driver global the 2D renderers test holds the texture the driver\ncreates for 2D primitives, so declare it as RwTexture * and test its\nraster instead of treating it as a pointer to a word.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T04:46:46Z","commit_sha":"dc8cc0550d1e76b22acb98b5f06f67a29542652b","commit_message":"Decompile the RenderWare palette quantizer unit\n\nAdd the palette quantizer (0x8048D85C-0x8049043C) as one unit: tree\ninsertion, image color accumulation, box statistics and cutting, palette\nresolution, image matching, initialization and teardown. 14 of the 21\nfunctions match; the other 7 have the original size with register\nallocation or scheduling differences. The zero corner color is a local\naggregate initializer, so its .sbss2 symbol is marked local.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T04:08:56Z","commit_sha":"93f711f1dc0ccbc4ce30ce3ed7d49da9d048b304","commit_message":"Match the RenderWare frame object unit\n\nrw/fn_8048D7C0.c attaches an object to a frame, moving it from its old\nframe's object list to the new frame's and marking the new hierarchy for\nsynchronizing, and detaches an object from its frame's list. Both\nfunctions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T03:17:11Z","commit_sha":"12d6ae8f4f3c7b25c51cafdc358286ac719ad983","commit_message":"Type the palette quantizer's node word as a pointer\n\nThe word at 0x4000 holds the root node allocated from the quantizer's\nfree list, so declare it as an opaque pointer instead of an integer.\nThe unknown prefix stays opaque and the layout is unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T02:36:10Z","commit_sha":"b2c91044cd79b413c811c7f0bc586702bd6f0d3a","commit_message":"Decompile the RenderWare frame synchronization unit\n\nrw/fn_8048ADE0.c rebuilds the LTMs of dirty frame hierarchies from their\nmodelling matrices and synchronizes the objects attached to their frames:\nthe recursive walks, one dirty hierarchy, every dirty hierarchy and the\nLTMs alone. Three of the six functions match; the other three differ only\nin register allocation. The unit stays NonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T01:54:30Z","commit_sha":"27539306d6bb3428cc79adf1dd4c3a1f247a7e04","commit_message":"Decompile the RenderWare image resampling unit\n\nrw/fn_8048A178.c averages the source rectangle each resampled pixel covers\nin 16.16 fixed point: a row span, a rectangle of rows, a 32-bit image\nresampled into another, and a resampled 32-bit copy of an image at a new\nsize, with the unit's literals. One of the four functions matches; two\ndiffer only in register allocation and the row span sampler in the\nscheduling of its first instructions. The unit stays NonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T01:14:42Z","commit_sha":"3a40c052aab456da22803457178c83323190c1f3","commit_message":"Name the palette lock flags the raster palette unlock clears\n\nThe raster unit's palette unlock clears private flag bits 0x08 and\n0x10, which are RenderWare's palette locked read/write flags (the pixel\nlock flags are 0x02/0x04, as the GameCube driver's pixel lock sets).\nRename the local definitions accordingly; the object is unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-16T00:29:04Z","commit_sha":"23614fd36f10e8dca518a8de9848e1fb84326a95","commit_message":"Decompile the RenderWare image unit\n\nrw/fn_80487914.c holds the image module's open and close, image creation,\ndestruction and pixel allocation, masks, copying and depth conversion, the\nimage path and the search along it, reading masked images, gamma tables\nand correction, and the image and raster standard functions, with the image\nregistry, free lists and literals. 17 of 22 functions match; the rest\ndiffer in register allocation, and the gamma correction loop is unrolled\nby two rather than four. The unit stays NonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T23:59:13Z","commit_sha":"f8c7473f63c24f07d5c9385d0b6964647319b73c","commit_message":"Describe how destroying a frame leaves its children's roots\n\nDestroying a frame clears its children's parent pointers but leaves their cached root pointers, and those of their descendants, unchanged. Say so instead of calling the children roots.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T23:31:01Z","commit_sha":"f834af62170c5475b8cb96c146292513f554faff","commit_message":"Match the RenderWare engine unit\n\nrw/fn_80485BCC.c holds the engine's device system request with its default\nanswers, version, plugin registration, video mode queries and its\ninitialize, open, start, stop, close and terminate functions, with the\nengine plugin registry, the static engine globals, the engine instance and\nthe instance count. All 12 functions match; the static globals' symbol is\nsized to its contents and the sub system name is local.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T22:52:31Z","commit_sha":"9cbe3b1a67b4e41e30b7df89e4afaa8d43db2040","commit_message":"Round each fn_8041157C row's y product before adding the x product\n\nThe original multiplies y by the row's second column on its own, then fuses\nthe x and z products onto it in turn. Staging the y product in each row\nrestores that rounding order and the original arithmetic block in all three\nrows; the unit keeps its save/restore residual and stays NonMatching.\n\nRefs #151","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T22:13:34Z","commit_sha":"02f1a1506edbd6747858e0b423281529e08176f7","commit_message":"Type the SFD creation block's first word as its driver table pointer\n\nSFD_Create copies the creation block into the handle and passes it to\nSFTRN_InitHn as SFTRN_PRM, which reads the first word as the transfer driver\ntables. Name and type the field the same way in SFD_CREPRM.\n\nRefs #153","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T21:12:39Z","commit_sha":"9c3798a68e866bfc0961f741c9e7f0f94c9c0f1f","commit_message":"Reuse the metrics-v2 line length when refilling the line\n\nWhen the rest of a long line reaches the end of the buffer, the\nsecond-version metrics parser measured it with rwstrlen, then\nSHIFTLINE measured it again. SHIFTLINE now uses the length its caller\nmeasured, so this path calls the engine's string length function\nonce, as the original does; the other SHIFTLINE use measures the line\nitself first.\n\nRefs #152","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T20:39:39Z","commit_sha":"a90274ed71d472efe42591975d09a2bf6f17a6f1","commit_message":"Declare the dirty-frame sync's success return\n\nThe original loads 1 into r3 before its epilogue in all three regions, so\nfn_8048B354 returns an (inferred) RwBool rather than nothing. The camera\ncaller discards the result, so its object is unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T20:04:09Z","commit_sha":"19396c988aac07a1279ac8a24d3e97ec84eb66e6","commit_message":"Remove AX pointer detours and GX expression statements\n\n__AXPopFreeStack and __AXPopCallbackStack read the stack heads\ndirectly, as the AXVPB pointers they are, in place of taking an\naddress and converting it through an integer; next is the first\nmember. __AXGetCurrentProfile's result is assigned without a cast to\nthe AXPROFILE pointer it already is.\n\nGXSetArray, GXSetTexCoordGen2, GXInvalidateTexRegion and\nGXDecompressZ16 no longer evaluate locals in expression statements\nthat did nothing, and the comments claiming they were needed to\nmatch are removed.\n\nRefs #142","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T19:34:58Z","commit_sha":"9ab4abbd13b4bca002c3a007c899071f8c45e72f","commit_message":"Declare the five exported GCAX memory functions\n\ngcaxSndMemory.c defines gcaxNewAramBank, fn_8043B05C, fn_8043AF64,\nfn_8043AEBC and fn_8043AB6C, and fn_8043E2B4.c calls them, but\ngcaxSnd.h declared only the allocator, its free and the ARAM request.\nThe memory section now declares all of them with their definitions'\nsignatures, so their calls are checked.\n\nRefs #144","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T19:05:40Z","commit_sha":"447188c4fa76d1fb5e95d758a5ced2b249b5fd0a","commit_message":"Correct the GX flush test and ceil rounding comments\n\nGXBegin and GXCallDisplayList test the 32-bit word at vNumNot, which\nholds vNumNot and bpSentNot; the comments named vNum and bpSent. ceil\nrounds toward +infinity, not -infinity. Only the comments change.\n\nRefs #143","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T18:22:43Z","commit_sha":"54dca251f5fcb416b61b038d3d286e93a1934da3","commit_message":"Share one variable argument record between stdarg.h and MSL\n\nlibc/stdarg.h and MSL's va_list each defined the 12-byte argument\nrecord, as an anonymous struct and as struct __va_list_struct, and\ndeclared __va_arg with different second parameters, so including both\nfailed with __va_list redeclared. Both now include\nlibc/va_list_struct.h, which holds the tagged record, __va_list, and\nthe runtime's __va_arg(_va_list_struct *, int).\n\nWhen both are included, MSL's va_list and macros are used: the facade\nskips its own after MSL's header, and MSL's header replaces the\nfacade's macros. Their expansions are unchanged.\n\nRefs #140","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T17:21:20Z","commit_sha":"879e899a854caf39772567f749581c9058ca4e72","commit_message":"Type the ADXB PCM buffer slot as a sample pointer\n\nADXB_Create stores its Sint16 *pcmbuf argument at 0x3C unchanged, and\nADXB_GetPcmBuf and the format handlers read it back as the PCM buffer.\nThe field is now Sint16 *, so the store and reads no longer convert\nbetween pointer and integer. Its name, offset and the object size are\nunchanged.\n\nRefs #139","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T16:46:59Z","commit_sha":"a1d03764c14369dcf3e7eb172c18864c400b0e51","commit_message":"Decompile the RenderWare texture stream unit\n\nRegistering a texture plugin's stream callbacks, a texture's stream\nsize, writing a texture chunk with its filtering, addressing and\nmipmap flag, name and mask, reading one with the mipmap settings it\nwas written with, and reading a texture dictionary of native\ntextures. 5 of 6 functions match; writing a texture chunk differs in\nthe scheduling of its flag word.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T16:24:06Z","commit_sha":"4a12d0140fa855112292d99c478372a7635e8aa0","commit_message":"Decompile the RenderWare frame list stream unit\n\nRegistering a frame plugin's stream callbacks, freeing a frame list's\narray, and reading a frame list: each frame's matrix, keeping the\northonormal flags only for a matrix within tolerance, its parent,\nthen each frame's plugins' data. All 3 functions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T16:02:11Z","commit_sha":"1f6d889222f2cf0c34bc6a1231b1e01ce54e710e","commit_message":"Decompile the RenderWare camera stream unit\n\nRegistering a camera plugin's stream callbacks, and reading a camera:\nits structure chunk of view window, view offset, planes and\nprojection, then its plugins' data. Both functions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T15:25:11Z","commit_sha":"af6339e7a25ee526e20afc93890a06b081fcecbb","commit_message":"Decompile the RenderWare path test and bounding box units\n\nfn_80483444 tells whether a file path is absolute: it starts with a\ndrive letter and a colon, or with a backslash. fn_8048349C calculates\nthe bounding box of an array of points. Both match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T14:47:38Z","commit_sha":"f771ebd4860785ebac3f396263038c0cf4f2349f","commit_message":"Give the libc sscanf declaration C linkage\n\nC++ translation units including stdio.h called a mangled\nsscanf__FPCcPCce instead of the library's sscanf. Wrap the declaration\nin an extern \"C\" guard; C objects are unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T13:52:31Z","commit_sha":"0ec7fb26989a1d053a49a7f02736b1179b022a7e","commit_message":"Decompile the RenderWare resources heap unit\n\nThe resources heap keeps 32-byte aligned blocks in a fixed buffer,\neach after a 32-byte header: initializing it, allocating the first\nfree block that fits and splitting off the rest, and freeing a block\nby merging it with free neighbours. All 4 functions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T13:10:00Z","commit_sha":"5a520ea359fad95dad2a61e9eabbcc2a727c5a28","commit_message":"Decompile the RenderWare vector unit\n\nNormalizing vectors and their lengths through the square root and\nreciprocal square root lookup tables, transforming points and\nvectors with the original paired-single assembly, and opening and\nclosing the vector module, which builds the tables. 9 of 10\nfunctions match; the module open differs in stack slot assignment\nand the literal pool lists 0.0 before 1.0.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T12:31:38Z","commit_sha":"b462ebd0c186d2e47e2c484d1d48b4dd034d100d","commit_message":"Decompile the RenderWare plugin registry unit\n\nPlugin registration, the plugins' stream chunk callbacks, reading,\nwriting and skipping objects' extension chunks, rights, and\nconstructing, destructing and copying plugin data, with opening and\nclosing registration. 18 of 19 functions match; adding a plugin\ndiffers in register allocation.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T12:06:50Z","commit_sha":"836138afa6192416bae4ab5ad818bb59a5109428","commit_message":"Decompile the RenderWare stream unit\n\nOpening and closing the stream module, reading, writing and\nskipping through file, memory and custom streams, and opening and\nclosing streams. All 7 functions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T11:28:01Z","commit_sha":"b3cd975ee6072d34f9527fb209563301ba8d09f9","commit_message":"Decompile the RenderWare resources unit\n\nOpening and closing the resources module with its heap, freeing\nentries, starting a frame, allocating entries that free the least\nrecently used ones when the heap is full, and freeing all entries.\nAll 6 functions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T10:47:57Z","commit_sha":"d5f4091efb038bb77c82fdcfed2d3ddeeb609747","commit_message":"Return the free list from the free list free callback\n\nThe engine's free list free function, fn_8047FF50, returns the free\nlist it freed an entry from, as does the alternate implementation,\nso the callback in the engine globals returns RwFreeList * too.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T10:03:34Z","commit_sha":"64b3e4205bcde48eeb2b4e5902b965d0b004d02d","commit_message":"Keep the identity error's per-axis grouping\n\nThe original sums each axis's and the position's squared deviations\non their own and then adds the four sums; the flat sum let the\ncompiler fold a diagonal square into the running total, changing the\nrounding the identity tolerance test sees.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T09:25:03Z","commit_sha":"3723aee87528271bd377d8cdbd36363b7c95c5d4","commit_message":"Decompile the RenderWare list unit\n\nCreating lists, adding one or several entries with the array growing\nby a quarter, dropping entries from the end, the entries, destroying\nlists with or without their array, and the entry accessors. All 12\nfunctions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T08:37:16Z","commit_sha":"f48bf7d9e1d174ad31166ea3ea0a0a55109e1373","commit_message":"Decompile the RenderWare error unit\n\nOpening and closing the error module and a counted module, setting the\npending error unless one is pending, taking it, and forming error\ncodes. All 7 functions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T07:46:51Z","commit_sha":"860cbc3e96121abfffeb537bd4c9798f0b4ac132","commit_message":"Decompile the RenderWare triangle intersection unit\n\nThe sphere-triangle test: per-axis rejection by sign bits, the\ntriangle's plane, its vertices and the closest vertex and edges; and\nthe box-triangle test: vertex outcodes, edges crossing the box's faces\nand the box diagonal crossing the triangle. The box test matches; the\nsphere test differs only in instruction scheduling.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T07:09:29Z","commit_sha":"b7b297a83bbcea8f00882873af241c33bb7d3123","commit_message":"Decompile the RenderWare stream chunk and byte order unit\n\nThe complex-chunk test, reading, writing and finding chunk headers,\nconverting 16- and 32-bit words between the native and stream byte\norders, and writing and reading converted reals and integers. 6 of 15\nfunctions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T06:14:31Z","commit_sha":"ce435dbe77ab17fd45e2e7af03a957237736b6f6","commit_message":"Align the set-position comment in the file system header\n\nApplies the repository formatter to the set-position member's trailing\ncomment.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T05:22:44Z","commit_sha":"48dc3f747c011f2ad1792acba6c6d9f24c67ccb2","commit_message":"Return the new position from the file seek callback\n\nThe disc file system's seek, installed as a file system's\nset-position function, returns the file's new 64-bit position, so the\ncallback type returns RwInt64. The manager ignores the result and\nbuilds to the same object.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T04:26:37Z","commit_sha":"845521632d8dc11e43729d9c0fdf981d711c2ade","commit_message":"Give the asynchronous mode accessors their file system\n\nfn_804799B8 and fn_804799C0 set and get the file system's flag at 0x10,\nwhich the file open reads to make opens asynchronous and which setup\ncopies into each file. The game passes them the default file system,\nso they take an RtFileSystem and the member is named asyncMode.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T03:48:28Z","commit_sha":"576d912e4c79c60eaa70d26b161bbcd3fee83bac","commit_message":"Decompile the RenderWare dictionary toolkit unit\n\nSchema setup and teardown, the current dictionary, finding entries by\nname, destroying dictionaries and reading them from streams, with the\ndictionary creation and entry helpers they inline. All 7 functions\nmatch.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T03:12:16Z","commit_sha":"1ea2188572aa64e22ad49f8eaeed871a4e68335b","commit_message":"Keep the character set destroy check out of the object\n\nThe destroy check is only ever inlined into character set creation, as\nin the original, so it is declared static inline and no longer emitted\nas a function of its own.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T02:04:43Z","commit_sha":"f4987e87d543b0c281c1b2c3964d5ff8bd7227a9","commit_message":"Correct the UV animation material time labels\n\nfn_804548EC sets the interpolators' current time and fn_80454964\nadvances them, following the toolkit functions they call.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T01:19:23Z","commit_sha":"b2af567ba95cde48abfdf9f03a3d567d91dbe15c","commit_message":"Decompile the RenderWare 2D toolkit stroke unit\n\nSplit 0x80476ABC-0x80477344 with three free lists, their parameters and\na literal: reading paths from streams, stroking each subpath with a\nbrush as a triangle strip coloured and textured along its length, and\nopening and closing the free lists of three more kinds of object.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-15T00:34:09Z","commit_sha":"df161310277d53a162fd28c7d904f78932d93ed2","commit_message":"Decompile the RenderWare 2D toolkit path unit\n\nSplit 0x80474BEC-0x80476ABC with the path free list, its parameters and\nliterals: moveto, lineto, curveto and closepath, flattening curves by\nrecursive halving, adding a flattened subpath, pruning single-point\nsubpaths, locking and unlocking points, destroying and emptying paths,\nthe scratch path, and opening and closing the paths.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T23:48:27Z","commit_sha":"7f89c6916f2164478523a323e5bbb13f0995fa66","commit_message":"Declare the 2D toolkit openers' success returns and the base matrix order\n\nThree subsystem openers return TRUE, so declare them RwBool; the\ntoolkit's open ignores their results as before. The device matrix\nmultiplies the current transformation by the base matrix, so the base\nis applied after the transformation.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T22:41:25Z","commit_sha":"3127330b60e52e393c9ac35491b2a33517f48735","commit_message":"Declare the list destroy's success return\n\nThe list destroy returns TRUE after freeing the list, so declare it\nRwBool; the font unit's calls ignore the result and compile the same.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T22:16:59Z","commit_sha":"4c94207a5fdd5003afa8630e5b4aa5830f0efcbc","commit_message":"Describe the brush texture coordinate flag per setter\n\nThe texture coordinate setter and the texture setter write the flag\nindependently, so it does not record whether the brush is textured or\nits coordinates vary.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T21:53:01Z","commit_sha":"b5b6b5b8f95468ccba70a476643195ca248ef921","commit_message":"Match the RenderWare GameCube vertex descriptor builder unit\n\nSplit 0x8046FC1C-0x80470474 with its two jump tables: clearing a\nbuilder, setting its vertex format, packing an attribute's count, type\nand fraction into the VAT words, setting an attribute's descriptor mode\nin the VCD words with the XF attribute counts, and setting its\nattribute count.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T21:22:51Z","commit_sha":"f6dfd6dec2ac35a5d18153282134723ea3162a58","commit_message":"Upload maps and reports only from main pushes\n\nThe Build workflow runs for every push and pull request, and each\nrun uploaded the map files and progress report artifacts. Upload them\nonly for pushes to main, so merged code publishes once and pull\nrequest and feature branch builds no longer do. The builds and\nchecks still run for every push and pull request.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T21:18:22Z","commit_sha":"a7bfaa227b05fb958041413faaaa8081048234b5","commit_message":"Decompile the RenderWare GameCube vertex array unit\n\nSplit 0x8046EE8C-0x8046FC1C with its three jump tables and literal: the\ninstanced data header size, and the indexed attribute arrays of a\ngeometry: their total size, their vertex descriptors and their data.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T20:47:24Z","commit_sha":"ce6cbb30ca294b0b3b3b654985ff982d2d77dfc4","commit_message":"Decompile the RenderWare GameCube display list fill unit\n\nSplit 0x8046D8C8-0x8046EE8C with its jump table and literal: splitting\na mesh's indices into triangle strips at degenerate triangles, and\nwriting a mesh's display list: a header per strip, then each vertex's\nattributes as indices or as direct data.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T20:22:16Z","commit_sha":"132163fe39ae1d84c84f2026073e2963b5086127","commit_message":"Decompile the RenderWare GameCube instancing unit\n\nSplit 0x8046B110-0x8046D8C8 with its vertex descriptor builders:\nbuilding the instanced data of geometries and world sectors, optimized\nwith each stream's distinct values indexed separately, or fast with\nevery stream indexed by vertex, and their GX vertex descriptors.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T19:42:50Z","commit_sha":"da4ec4700e1f6fa1ee7c93a52c7218fde0fb2ed3","commit_message":"Decompile the RenderWare GameCube display list unit\n\nSplit 0x8046ACBC-0x8046B110 with its jump table: the bytes of a vertex\nin a display list for a vertex descriptor, the size of a display list,\nand preparing a mesh's display list record.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T19:09:31Z","commit_sha":"d0afe2a4a5cc7f0f86925733c441b919f3bcefcf","commit_message":"Decompile the RenderWare GameCube vertex stream writer unit\n\nSplit 0x80466B58-0x8046ACBC with its literals: writing positions,\nnormals, compressed normals, normals with binormals and tangents,\nprelit colours and texture coordinates into instanced data in a GX\ncomponent type at a stride.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T18:39:30Z","commit_sha":"045d06894a1cc91f431d8239c1d8b1e7fa120a07","commit_message":"Decompile the RenderWare GameCube instanced data stream unit\n\nSplit 0x80465CDC-0x80466B58 with its jump tables: finding the duplicate\nvalues of vertex streams, building each stream's distinct values,\nremapping mesh indices into them, and the byte sizes of vertex\nattributes in a vertex format.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T18:24:20Z","commit_sha":"93e714b2a2681c264742441d3ff719d90fb47fd7","commit_message":"Decompile the RenderWare GameCube render state unit\n\nSplit 0x8046528C-0x80465CDC with its colour constants and literals: the\nmaterial colour callbacks that set GX channel and TEV colours, and the\nselection of a render mesh's GX channels, TEV stages and material colour\ncallback. All seven functions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T18:14:55Z","commit_sha":"47884d20d41efb9ac1e866bb86d9834aaacd9829","commit_message":"Decompile the RenderWare GameCube native data unit\n\nSplit 0x80464A94-0x8046528C: reading and writing the instanced data of\ngeometries and world sectors as a native data stream chunk, with the\npointers into the vertex data stored as offsets, and the geometry and\nworld sector native data size, write and read callbacks.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T18:05:35Z","commit_sha":"8c3bf82db9f5a7b67df28436c9bdb12ea0a09a52","commit_message":"Gate issue closure on explicit verification","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T17:51:02Z","commit_sha":"86686feddc959184b365df3d8c28dad706dffe16","commit_message":"Decompile the RenderWare GameCube morph target unit\n\nSplit 0x80464814-0x80464A94 with its quantization tables and local\narray initializers: writing an atomic's positions and normals\ninterpolated between two morph targets into its instanced data, and the\npaired-single interpolation kernel it calls.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T17:38:28Z","commit_sha":"2895a53a5e83cf7310b1fe238714eccc853dc2df","commit_message":"Decompile the RenderWare GameCube lights unit\n\nSplit 0x804641CC-0x80464814 with the hardware light objects, the light\nplugin offset and the float literals: loading the world's directional\nand ambient lights and an object's point and spot lights into GX\nlights, and the light plugin holding GX attenuation.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T11:33:24Z","commit_sha":"29e05878036d02e95ea738c5427bcc48db4713e5","commit_message":"Decompile the RenderWare GameCube world sector all-in-one unit\n\nSplit 0x80463D28-0x804641CC with its node definition data and float\nliterals: the sector pipeline creation, the default lighting and\ninstancing callbacks of world sectors, the node body and its\ninitialisation. All six functions match.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T11:02:06Z","commit_sha":"f6507fc599e014793b06b24018ecbbdfec7548d8","commit_message":"Decompile the RenderWare GameCube atomic all-in-one unit\n\nSplit 0x8046335C-0x80463D28 with its node definition data and float\nliterals: the atomic pipeline creation, the default lighting, instancing\nand reinstancing callbacks, the stream writer, and the node body.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T10:02:13Z","commit_sha":"8daf487a1a23cf69ebc65c2e9b98523a137a529a","commit_message":"Decompile the first RenderWare GameCube world device unit","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T09:01:51Z","commit_sha":"151ff70d9a646af202436960b9aac5915852f343","commit_message":"Decompile the RenderWare world pipeline unit","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T08:27:56Z","commit_sha":"1e5c1f6b6213b674b3d81af38bd48fb8c6d8d5d0","commit_message":"Build the frustum test's corner as a vector, as the original does","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T07:30:55Z","commit_sha":"fe5e24943d0e28e0893ed3fac46bcefa8f9d37c6","commit_message":"Decompile the RenderWare world unit","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T07:05:26Z","commit_sha":"5b918a07185ce3cc9f56d6a35d4033225d79605b","commit_message":"Decompile the RenderWare world sector unit","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T06:29:50Z","commit_sha":"83746f774974022882faaff3ecbfe582838f2871","commit_message":"Decompile the RenderWare mesh generation unit","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T05:04:16Z","commit_sha":"186cdfbc1c66774d69a0b821a3fb363e61ef6d5b","commit_message":"Decompile the RenderWare mesh unit","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T04:27:42Z","commit_sha":"1ec80fe29c203e81c6675de45d5f4628f3de77d5","commit_message":"Use the shared material list chunk ID","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T04:08:58Z","commit_sha":"aa6d6efc10a0f1676ea437f04a021458bf2078c5","commit_message":"Build the material unit with the default game flags","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T03:52:31Z","commit_sha":"766c030e1cd5d047736d1aaa4068ecf8139fd575","commit_message":"Align the light free list comments","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T03:18:40Z","commit_sha":"3d4f81fc8043c4500ef960426e235ad027140d5b","commit_message":"Build the geometry unit with the default game flags","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T02:09:42Z","commit_sha":"19e5f8d28d6dc6a3208684c51542dc2951885ad6","commit_message":"Declare frame attachment without a return value","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T01:04:48Z","commit_sha":"bceb7832d6a7c6e83431fd8e83ea1fd42f8581a4","commit_message":"Type the world sector render callback","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-14T00:32:33Z","commit_sha":"aba906735466c1fb970068c88fb2d9b95c7466c9","commit_message":"Return the material from the material effects UV transform setter","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T23:06:15Z","commit_sha":"3056c848a3cbbe94b9bb912af51842efc290f100","commit_message":"Decompile the RenderWare user data plugin unit","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T22:38:00Z","commit_sha":"98c70e8ef663377f8c84dc3ebca33f6ee77ae088","commit_message":"Keep the native skin writer's weight count snapshot for the byte lengths","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T22:20:19Z","commit_sha":"eb364b783b1f537c258002af6a0af458bb52fdd4","commit_message":"Describe the skin instance destroy callback's buffer restoration","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T21:22:09Z","commit_sha":"e7d234749f5bbd8657893601e8434972c8bd9c65","commit_message":"Describe the vertex descriptor's mode byte\n\nByte 0x6 of a GameCube vertex descriptor is the GXSetVtxDesc mode (the\nGXAttrType, such as GX_INDEX8 or GX_INDEX16), not a component type: the\ncomponent format comes from the geometry's vertex format. Correct the\ncomments; the layout and objects are unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T21:09:35Z","commit_sha":"f873ed44d329bb6f4b0996df18945cb0acfd5c53","commit_message":"Correct the skin core's callback returns and split data types\n\nReturn the destination, object, stream or atomic from the five callbacks\nthat fell through, as the original keeps them in r3 and the stream\ndispatcher checks the write callback's result. Declare the split data's\nmesh and run records as byte pairs, since they are read a byte at a time\nand follow the remap table's numBones bytes. Declare the native stream\nbuffer and its aligned interior as byte pointers, and the pipeline open\nand close functions as returning RwBool, as both return 1. The objects\nare unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T20:24:40Z","commit_sha":"0ffd3ee0881705904d8d0f2e6a5f7377f088c71c","commit_message":"Name the GameCube vertex format's normal byte as an NBT selector\n\nThe byte at 0x0D of the vertex format chooses between plain normals and\nnormals with binormals and tangents rather than holding fractional bits,\nso name it normalNbt (inferred) along with fn_80462F88's parameter. The\nparticle kernels use GQR6 and GQR7 for quantized stores to the vertex\nFIFO, so correct the comment on the tank's quantization setup. The\nrecovered objects are unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T19:36:33Z","commit_sha":"88a0ef1f80f9a7a1964d34fa0be80e1d159c37b5","commit_message":"Type the RenderWare free list and plugin and keyframe scheme callbacks\n\nForward-declare RwFreeList before the engine globals so the free list\nfunction members and the later definition use one type. Move the plugin\ncallback typedefs into rwcore.h and use them for the engine and frame\nplugin registration functions, and give each keyframe scheme slot its\nfunction pointer type. The toolkit passes a scheme's frames untyped, so\nthe hierarchical animation scheme's frame callbacks are cast where they\nare registered. The recovered RenderWare objects are unchanged.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T18:57:02Z","commit_sha":"8d829a1534fe4d43e7c1be9365d687b3f4c18824","commit_message":"Keep the keyframe slerp's NaN path and the fdlibm acos notices\n\nThe original enters the acos path unless the dot product is at least\n0.999, so a NaN dot product takes it too; test that predicate instead\nof less-than. Keep the Sun copyright notice and Ian Lance Taylor's\nfloat conversion credit from newlib's ef_acos.c with the adapted acos.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T18:49:32Z","commit_sha":"8d012f016547d0081c54361c62051fe443a43ad8","commit_message":"Declare the delta morph pipeline teardown as returning a bool\n\nfn_80445C9C returns 1 on its common path, like the 0/1 result of the\npipeline creation.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T18:43:57Z","commit_sha":"bcd0ffd54d88e94264f9994a8c86a04c11fa1f06","commit_message":"Decompile the RenderWare delta morph atomic unit\n\nAdd rw/fn_80443A74.c with the delta morph render callback, the atomic\nplugin callbacks and attachment, the weight getter, and the animation\nsetter and timer. 9 of 12 functions match; the render callback, copy\ncallback and animation setter still differ in register assignment, so\nthe unit stays NonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T18:22:41Z","commit_sha":"5537f0af903179835e5c76ea752ea35e69d65977","commit_message":"Decompile the RenderWare delta morph geometry unit\n\nAdd rw/fn_80443044.c with the geometry plugin callbacks, the target\nstream reader, writer and size, the plugin attachment, and target\ncreation and destruction. 10 of 11 functions match; the reader still\ncopies one pointer through a different register, so the unit stays\nNonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T17:53:48Z","commit_sha":"cf8115fd7895db108400c2bad7402eb545f30b35","commit_message":"Correct the gcax pitch ratio clamp comment\n\nResults above 0x40000 become 0x3FFFF; 0x40000 itself is kept.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T17:04:57Z","commit_sha":"bde31e6726cc7b46db44fedea435683a1571e9b5","commit_message":"Label the collision plugin's object plugin as an atomic plugin\n\nfn_80458B6C registers with the plugin registry used by the object code\naround fn_804566D0, which the intersection tests call on an atomic; the\nregistry's object size alone does not identify it. Comments only.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T16:59:50Z","commit_sha":"33b7551e6acfd0cd94550f0bf792bf8af416906d","commit_message":"Correct the gcax locked update and pitch step comments\n\nfn_8043F2F0 and fn_8043F284 lock before calling the frame update, which\nthen only counts a locked frame and skips player processing. The pitch\nfade takes steps of 1/256 semitone, not semitones.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T16:15:14Z","commit_sha":"5a334fc4a455be28ed7520dc1a349bcf3ab57634","commit_message":"Decompile the RenderWare collision plugin unit\n\nAdd rw/fn_80440410.c with the collision tree allocation, stream size,\nwriter and both readers, the engine, world, world sector and geometry\nplugin callbacks and registration, and the line, box and sphere\nintersection walks over a world's sectors with their dispatcher.\n17 of 18 functions match; the line walk still differs in some float\nregister choices, so the unit stays NonMatching.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T14:44:24Z","commit_sha":"9a41da82e4208ffeefd59797ee066c1174254767","commit_message":"Correct the gcax sequence time comment\n\nGcaxSequence.time is the tick time of the last event read; the next\nevent is due its delta ticks later.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T13:46:24Z","commit_sha":"43be966689c5fdef33898e9e8f12c3fa2f069216","commit_message":"Correct the gcax envelope level comments\n\nThe voice envelope level is normalized (0 to 1), not dB. Describe both\nbranches of the note release loop.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T13:16:48Z","commit_sha":"a8ec1b67330969ca9192cd13ab16224896142a37","commit_message":"Fix the offset of the gcax work area's tail bytes\n\nThe byte array after the u8 at 0x13A38 starts at 0x13A39 (alignment 1)\nand runs to 0x13A43; the float after it stays at 0x13A44.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T11:17:44Z","commit_sha":"340e3d5524ee09dd68c8af786ea3c132be71e2e6","commit_message":"Make the gcax sound header usable from C++\n\nUse plain 0 for the null pointers in the inline heap helpers, since the\nSDK's NULL is (void *)0, and give the library's exported declarations C\nlinkage when included from C++.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T10:40:03Z","commit_sha":"671b3b40448919175cc13a36f34ecf931f08857d","commit_message":"Match MSL NMWException.cp in all regions\n\nAdd the C++ runtime's exception-support helpers from the PowerPC EABI\nruntime source (array construction and destruction, the throw/catch\ntype comparison, and the terminate/unexpected handlers), built with\nC++ exceptions on. The handler typedefs and declarations belong to\nnamespace std, so the default unexpected handler calls std::terminate,\nwhich is inlined as in the game. set_terminate, set_unexpected and the\ntwo __destroy_new_array stubs were stripped by the linker.\n\nName operator delete[] (__dla__FPv), which __destroy_new_array calls,\nand mark the partial-array destructor weak, in all regions.","measures":{"fuzzy_match_percent":10.216034,"total_code":4864316,"matched_code":494612,"matched_code_percent":10.168172,"total_data":1396688,"matched_data":284092,"matched_data_percent":20.340405,"total_functions":34033,"matched_functions":1853,"matched_functions_percent":5.4447155,"complete_code":494508,"complete_code_percent":10.166034,"complete_data":284060,"complete_data_percent":20.338114,"total_units":1415,"complete_units":262}},{"timestamp":"2026-10-13T09:47:05Z","commit_sha":"727a4177b78df53c209afcf733fa3a0bbf62cc11","commit_message":"Match ElecCircuit.cpp\n\nDecompile the electric circuit gadget that shows the CIRCUIT.BIN model\n(USA 0x801F78B8-0x801F7D24), named after its RTTI class. It owns a\nGadgetModelInfo (RTTI class name, partial header with placeholder\nmethods), keeps its model at the character info's position and\nrotation, and switches state when the circuit reports its id. It also\ndefines its ELEC_CIRCUIT gadget-type descriptor.\n\nName its functions, vtable and RTTI records by their link names in all\nregions, along with the Gadget, GadgetModelInfo and boost functions it\ncalls. The weak_ptr conversion from its shared_ptr is a weak template\ninstance emitted in this unit.","measures":{"fuzzy_match_percent":10.180346,"total_code":4864316,"matched_code":492876,"matched_code_percent":10.1324835,"total_data":1396688,"matched_data":283872,"matched_data_percent":20.324654,"total_functions":34033,"matched_functions":1841,"matched_functions_percent":5.409456,"complete_code":492772,"complete_code_percent":10.130345,"complete_data":283840,"complete_data_percent":20.322363,"total_units":1423,"complete_units":260}},{"timestamp":"2026-10-13T09:19:34Z","commit_sha":"9f92231d7e04eebf1dda67ba68dcea2b1338be5b","commit_message":"Declare the owning special members of the boost pointer types\n\nCopying a shared_count or weak_count retains its control block and\ndestroying one releases it, so leaving their copy constructor, copy\nassignment and destructor to the compiler would produce non-owning\ncopies. Declare those members (compiled elsewhere) for both counts and\nweak_ptr, as boost does.","measures":{"fuzzy_match_percent":10.180346,"total_code":4864316,"matched_code":492876,"matched_code_percent":10.1324835,"total_data":1396688,"matched_data":283872,"matched_data_percent":20.324654,"total_functions":34033,"matched_functions":1841,"matched_functions_percent":5.409456,"complete_code":492772,"complete_code_percent":10.130345,"complete_data":283840,"complete_data_percent":20.322363,"total_units":1422,"complete_units":260}},{"timestamp":"2026-10-13T08:02:01Z","commit_sha":"2a85ae07b0be5decc4d6d31129b69ce8b3e01748","commit_message":"Update the UART console header's reason for not including os.h\n\nWith FILE now shared, the remaining obstacle is that dolphin/types.h\npulls in the game's libc facade headers, which need <stdarg.h>,\n<stddef.h> and cmath.h from include/libc; the MSL include paths do not\nprovide them.\n\nRefs #54","measures":{"fuzzy_match_percent":10.180346,"total_code":4864316,"matched_code":492876,"matched_code_percent":10.1324835,"total_data":1396688,"matched_data":283872,"matched_data_percent":20.324654,"total_functions":34033,"matched_functions":1841,"matched_functions_percent":5.409456,"complete_code":492772,"complete_code_percent":10.130345,"complete_data":283840,"complete_data_percent":20.322363,"total_units":1422,"complete_units":260}},{"timestamp":"2026-10-13T06:37:53Z","commit_sha":"7668d5b7f1d11dc0d69e0b349dd1e649420697d2","commit_message":"Describe the MetroTRK packet word's file-handle use neutrally\n\nThe writers that store a file handle in the packet word build outgoing\nReadFile/WriteFile/CloseFile/PositionFile support requests, not replies.\n\nRefs #47","measures":{"fuzzy_match_percent":10.180346,"total_code":4864316,"matched_code":492876,"matched_code_percent":10.1324835,"total_data":1396688,"matched_data":283872,"matched_data_percent":20.324654,"total_functions":34033,"matched_functions":1841,"matched_functions_percent":5.409456,"complete_code":492772,"complete_code_percent":10.130345,"complete_data":283840,"complete_data_percent":20.322363,"total_units":1422,"complete_units":260}},{"timestamp":"2026-10-13T06:12:25Z","commit_sha":"6f1c6d3aff165ef109f05159ac505db48c3cc5b0","commit_message":"Give the MPS records the original four-byte storage alignment\n\nSFMPS_Init passes MPS_Init a work buffer whose address is 4 modulo 8, and\nthe original reaches the 64-bit fields with word accesses. Packing the MPS\nrecord definitions to four bytes models that storage; every size and\noffset is unchanged and so are the bytes in all regions.","measures":{"fuzzy_match_percent":10.180346,"total_code":4864316,"matched_code":492876,"matched_code_percent":10.1324835,"total_data":1396688,"matched_data":283872,"matched_data_percent":20.324654,"total_functions":34033,"matched_functions":1841,"matched_functions_percent":5.409456,"complete_code":492772,"complete_code_percent":10.130345,"complete_data":283840,"complete_data_percent":20.322363,"total_units":1422,"complete_units":260}},{"timestamp":"2026-10-13T05:39:51Z","commit_sha":"b228cc688b480f88ba07c1602b41fb6c68766a34","commit_message":"Say which part of gcCiStopTr has the two-second timeout\n\nDVDCancel is synchronous and has no timeout of its own; only the polling\nloop after it gives up after 2 s. Comment only.\n\nRefs #43","measures":{"fuzzy_match_percent":10.150413,"total_code":4864316,"matched_code":491420,"matched_code_percent":10.1025505,"total_data":1396688,"matched_data":283768,"matched_data_percent":20.317207,"total_functions":34033,"matched_functions":1834,"matched_functions_percent":5.3888874,"complete_code":491316,"complete_code_percent":10.100413,"complete_data":283736,"complete_data_percent":20.314917,"total_units":1422,"complete_units":259}},{"timestamp":"2026-10-13T04:12:03Z","commit_sha":"fd9f36ea02971cc0d8e9436d623638f9db527b81","commit_message":"Declare GXPal524IntAa in GXFrameBuffer.h\n\nThe header declared GXPal528IntAa, but GXFrameBuf.c defines the PAL\nanti-aliased 524-line render mode as GXPal524IntAa (its fields hold 524\nlines), so the declared name was undefined and the real one undeclared.\nDeclare the defined object. Neither table is linked in any region; bytes\nunchanged.\n\nRefs #39","measures":{"fuzzy_match_percent":10.150413,"total_code":4864316,"matched_code":491420,"matched_code_percent":10.1025505,"total_data":1396688,"matched_data":283768,"matched_data_percent":20.317207,"total_functions":34033,"matched_functions":1834,"matched_functions_percent":5.3888874,"complete_code":491316,"complete_code_percent":10.100413,"complete_data":283736,"complete_data_percent":20.314917,"total_units":1422,"complete_units":259}},{"timestamp":"2026-10-13T02:25:57Z","commit_sha":"19b8ed69af7e93641c037c26f9703c1ff5ee016f","commit_message":"Explain the frame-reserving locals in OSRtc.c\n\nDrop the unused int from __OSCheckSram (not linked in any region; bytes\nunchanged). The remaining unused locals keep the original 0x20-byte stack\nframe of their functions, which is 0x18 without them; say so next to\neach.","measures":{"fuzzy_match_percent":10.150413,"total_code":4864316,"matched_code":491420,"matched_code_percent":10.1025505,"total_data":1396688,"matched_data":283768,"matched_data_percent":20.317207,"total_functions":34033,"matched_functions":1834,"matched_functions_percent":5.3888874,"complete_code":491316,"complete_code_percent":10.100413,"complete_data":283736,"complete_data_percent":20.314917,"total_units":1422,"complete_units":259}},{"timestamp":"2026-10-13T02:09:12Z","commit_sha":"26c4e12c30fc5fe0351585d4540b349b04d94052","commit_message":"Fix VI and RTC interface details\n\nvi.c: the private __VI* position and latch functions are declared in\n__vi.h instead of locally (only __VISetExtraTiming, which uses vi.c's\nprivate timing type, stays in vi.c); the frame buffer getters convert the\nstored address directly; an unused local array is removed.\nOSRtc.c: __OSUnlockSram/__OSUnlockSramEx return UnlockSram's result, and\nthe ROM read callback takes the EXI callback's (chan, context) arguments\nso it no longer needs a cast. Bytes unchanged in all regions.","measures":{"fuzzy_match_percent":10.150413,"total_code":4864316,"matched_code":491420,"matched_code_percent":10.1025505,"total_data":1396688,"matched_data":283768,"matched_data_percent":20.317207,"total_functions":34033,"matched_functions":1834,"matched_functions_percent":5.3888874,"complete_code":491316,"complete_code_percent":10.100413,"complete_data":283736,"complete_data_percent":20.314917,"total_units":1422,"complete_units":259}},{"timestamp":"2026-10-13T01:39:30Z","commit_sha":"b33b3a0d2578724869a8459670e0456dec8034f9","commit_message":"Match Dolphin SDK GXFrameBuf.c in all regions\n\nCopy source/destination setup, copy filter and clear, display and texture\ncopies, with names and splits for USA, Japan and PAL. The same source\nserves all regions: USA and Japan keep the NTSC progressive render mode,\nPAL instead links GXGetYScaleFactor and its conversion constant. All\nthree main.dol hashes match.","measures":{"fuzzy_match_percent":10.150413,"total_code":4864316,"matched_code":491420,"matched_code_percent":10.1025505,"total_data":1396688,"matched_data":283768,"matched_data_percent":20.317207,"total_functions":34033,"matched_functions":1834,"matched_functions_percent":5.3888874,"complete_code":491316,"complete_code_percent":10.100413,"complete_data":283736,"complete_data_percent":20.314917,"total_units":1422,"complete_units":259}},{"timestamp":"2026-10-13T01:15:05Z","commit_sha":"5e19fa66c0cfabf4cfbdf90527a3fc4efdab7f46","commit_message":"Match Dolphin SDK OSRtc.c in all regions\n\nSRAM access, ROM reads and the sound, language, wireless ID and GBS mode\naccessors, with names and splits for USA, Japan and PAL. The same source\nserves all regions: USA and Japan link the progressive-mode accessors,\nPAL links the EuRGB60 accessors instead, which sit after OSGetLanguage.\nAll three main.dol hashes match.","measures":{"fuzzy_match_percent":10.100992,"total_code":4864316,"matched_code":489016,"matched_code_percent":10.053129,"total_data":1396688,"matched_data":283456,"matched_data_percent":20.294868,"total_functions":34033,"matched_functions":1821,"matched_functions_percent":5.3506894,"complete_code":488912,"complete_code_percent":10.050992,"complete_data":283424,"complete_data_percent":20.292578,"total_units":1424,"complete_units":258}},{"timestamp":"2026-10-13T00:51:10Z","commit_sha":"b3359a9f3fa38535472623d8cd4033cc3791b27e","commit_message":"Correct AX sync flag and AXFX reverb comments\n\nDescribe the two LPF sync bits by their setters, the 0x4330 word as the\nint-to-double conversion constant, the 0x28 stride as two delay lines,\ndrop a wrong missing-load remark and shorten the DLcreate note.\nComments only.","measures":{"fuzzy_match_percent":10.031918,"total_code":4864316,"matched_code":485656,"matched_code_percent":9.9840555,"total_data":1396704,"matched_data":283368,"matched_data_percent":20.288336,"total_functions":34033,"matched_functions":1802,"matched_functions_percent":5.294861,"complete_code":485552,"complete_code_percent":9.981917,"complete_data":283336,"complete_data_percent":20.286045,"total_units":1426,"complete_units":257}},{"timestamp":"2026-10-13T00:38:50Z","commit_sha":"ecf427367fa008db1bf3ef7b328e903031268f98","commit_message":"Split vi.c in all regions\n\nAdd text and data splits in USA, Japan and PAL. All three main.dol\nhashes match.","measures":{"fuzzy_match_percent":10.031918,"total_code":4864316,"matched_code":485656,"matched_code_percent":9.9840555,"total_data":1396704,"matched_data":283368,"matched_data_percent":20.288336,"total_functions":34033,"matched_functions":1802,"matched_functions_percent":5.294861,"complete_code":485552,"complete_code_percent":9.981917,"complete_data":283336,"complete_data_percent":20.286045,"total_units":1426,"complete_units":257}},{"timestamp":"2026-10-13T00:14:46Z","commit_sha":"c0a7c46d8d8bb1a10084fbbfdaa955c054d36352","commit_message":"Correct Sofdec and UTY comments to match the code\n\nLibrary version and handle size in sfd_lib.c, the input buffer marking in\nsfd_mem.c, the stabiliser offsets and tolerance in sfd_tst.c, the\nzero-divisor result of UTY_MulDiv and the buffer 2 PTS hook in sfd.h.\nComments only.","measures":{"fuzzy_match_percent":9.853722,"total_code":4864316,"matched_code":476988,"matched_code_percent":9.80586,"total_data":1396704,"matched_data":281920,"matched_data_percent":20.184664,"total_functions":34033,"matched_functions":1778,"matched_functions_percent":5.2243414,"complete_code":476884,"complete_code_percent":9.803721,"complete_data":281888,"complete_data_percent":20.182373,"total_units":1430,"complete_units":256}},{"timestamp":"2026-10-12T23:55:08Z","commit_sha":"16552169d4745ba229f9cf819c992e2d3dd93ec8","commit_message":"Split the AX, AXFX and MIX units in all regions\n\nAdd text and data splits for the fifteen units in USA, Japan and PAL.\nAll three main.dol hashes match.","measures":{"fuzzy_match_percent":9.853722,"total_code":4864316,"matched_code":476988,"matched_code_percent":9.80586,"total_data":1396704,"matched_data":281920,"matched_data_percent":20.184664,"total_functions":34033,"matched_functions":1778,"matched_functions_percent":5.2243414,"complete_code":476884,"complete_code_percent":9.803721,"complete_data":281888,"complete_data_percent":20.182373,"total_units":1430,"complete_units":256}},{"timestamp":"2026-10-12T23:06:18Z","commit_sha":"aacd4414f699a2e9dc75860d98b1e2c767168337","commit_message":"Replace the discarded comparison in __OSInitAudioSystem\n\nThe DSP init message check compares against 0x80544348 directly; that\nform keeps reg16 live as the original code does, so the no-effect\nstatement added for register allocation is gone.","measures":{"fuzzy_match_percent":9.229585,"total_code":4864316,"matched_code":446628,"matched_code_percent":9.181723,"total_data":1396704,"matched_data":151176,"matched_data_percent":10.823768,"total_functions":34033,"matched_functions":1683,"matched_functions_percent":4.9452004,"complete_code":446524,"complete_code_percent":9.1795845,"complete_data":151144,"complete_data_percent":10.821477,"total_units":1422,"complete_units":241}},{"timestamp":"2026-10-12T22:36:59Z","commit_sha":"7add6cb6e0d293abc5117634d52668ec99eae01d","commit_message":"Correct offset, size and status comments in SDK, TRK and CRI headers\n\nField offsets for CARDControl, GXRenderModeObj, SYNSYNTH and the AX aux\nbuffers were checked with the compiler; MessageBuffer is 0x890 and\nTRKState 0xA4 bytes; the sfd.h work-area offsets follow SFD_OBJ; BB2's\naddress is this game's; adx_sjd.h marks only the routines absent from\nthe executable. Comments only.","measures":{"fuzzy_match_percent":9.229585,"total_code":4864316,"matched_code":446628,"matched_code_percent":9.181723,"total_data":1396704,"matched_data":151176,"matched_data_percent":10.823768,"total_functions":34033,"matched_functions":1683,"matched_functions_percent":4.9452004,"complete_code":446524,"complete_code_percent":9.1795845,"complete_data":151144,"complete_data_percent":10.821477,"total_units":1422,"complete_units":241}},{"timestamp":"2026-10-12T21:45:17Z","commit_sha":"35b71bb757b93896661727a4d88fd49c47b2e2de","commit_message":"Declare atof as returning double\n\nMatches the definition in strtold.c and the C library.","measures":{"fuzzy_match_percent":9.229585,"total_code":4864316,"matched_code":446628,"matched_code_percent":9.181723,"total_data":1396704,"matched_data":151176,"matched_data_percent":10.823768,"total_functions":34033,"matched_functions":1683,"matched_functions_percent":4.9452004,"complete_code":446524,"complete_code_percent":9.1795845,"complete_data":151144,"complete_data_percent":10.821477,"total_units":1422,"complete_units":241}},{"timestamp":"2026-10-12T21:27:12Z","commit_sha":"8354e85efe4a3989ddcf1542ccf8d31ef8c637b8","commit_message":"Split EXIBios, AmcExi2Stubs and DebuggerDriver in all regions\n\nAdd text and data splits in USA, Japan and PAL. All three main.dol\nhashes match.","measures":{"fuzzy_match_percent":9.229585,"total_code":4864316,"matched_code":446628,"matched_code_percent":9.181723,"total_data":1396704,"matched_data":151176,"matched_data_percent":10.823768,"total_functions":34033,"matched_functions":1683,"matched_functions_percent":4.9452004,"complete_code":446524,"complete_code_percent":9.1795845,"complete_data":151144,"complete_data_percent":10.821477,"total_units":1422,"complete_units":241}},{"timestamp":"2026-10-12T20:47:11Z","commit_sha":"76b1cfbbcffab30740190ac26a11d8482c8fec61","commit_message":"Split SIBios and SISamplingRate in all regions\n\nAdd text and data splits in USA, Japan and PAL. All three main.dol\nhashes match.","measures":{"fuzzy_match_percent":9.037245,"total_code":4864316,"matched_code":437272,"matched_code_percent":8.989384,"total_data":1396704,"matched_data":150664,"matched_data_percent":10.78711,"total_functions":34033,"matched_functions":1638,"matched_functions_percent":4.8129754,"complete_code":437168,"complete_code_percent":8.987245,"complete_data":150632,"complete_data_percent":10.784819,"total_units":1422,"complete_units":238}},{"timestamp":"2026-10-12T20:21:50Z","commit_sha":"d2f4e2049eed47cd69805b72d31ddeb8d3d2009e","commit_message":"Split Pad, ai, ar and arq in all regions\n\nAdd text and data splits for the four units in USA, Japan and PAL.\nAll three main.dol hashes match.","measures":{"fuzzy_match_percent":8.911102,"total_code":4864316,"matched_code":431136,"matched_code_percent":8.863239,"total_data":1396704,"matched_data":149688,"matched_data_percent":10.717232,"total_functions":34033,"matched_functions":1614,"matched_functions_percent":4.742456,"complete_code":431032,"complete_code_percent":8.861102,"complete_data":149656,"complete_data_percent":10.71494,"total_units":1420,"complete_units":236}},{"timestamp":"2026-10-12T19:34:58Z","commit_sha":"d9ed83162bb280cbad31e4c380ef6072c4329ca4","commit_message":"Split the DVD units, mtx44 and fstload in all regions","measures":{"fuzzy_match_percent":8.562441,"total_code":4864316,"matched_code":414176,"matched_code_percent":8.514579,"total_data":1396704,"matched_data":149064,"matched_data_percent":10.672555,"total_functions":34033,"matched_functions":1560,"matched_functions_percent":4.5837865,"complete_code":414072,"complete_code_percent":8.512441,"complete_data":149032,"complete_data_percent":10.670264,"total_units":1411,"complete_units":232}},{"timestamp":"2026-10-12T18:35:22Z","commit_sha":"815ea2d00676c136a169bc02e12b571fe5cc5860","commit_message":"Split ten Dolphin OS units in all regions","measures":{"fuzzy_match_percent":8.180804,"total_code":4864316,"matched_code":395612,"matched_code_percent":8.132942,"total_data":1396704,"matched_data":146376,"matched_data_percent":10.480102,"total_functions":34033,"matched_functions":1466,"matched_functions_percent":4.307584,"complete_code":395508,"complete_code_percent":8.130804,"complete_data":146344,"complete_data_percent":10.47781,"total_units":1404,"complete_units":224}},{"timestamp":"2026-10-12T16:43:41Z","commit_sha":"4fda414addc4f45eda382ce6457a9d8c3314e70c","commit_message":"Split six more GX units in all regions","measures":{"fuzzy_match_percent":7.7834616,"total_code":4864316,"matched_code":376284,"matched_code_percent":7.7355995,"total_data":1396704,"matched_data":139360,"matched_data_percent":9.977777,"total_functions":34034,"matched_functions":1391,"matched_functions_percent":4.0870895,"complete_code":376180,"complete_code_percent":7.7334614,"complete_data":139328,"complete_data_percent":9.975486,"total_units":1401,"complete_units":214}},{"timestamp":"2026-10-12T15:24:58Z","commit_sha":"dd17f713e8e5bae5e5c829b41c7a9449e8b599cf","commit_message":"Split MetroTRK dolphin_trk, main_TRK, MWTrace and MWCriticalSection_gc in all regions","measures":{"fuzzy_match_percent":7.486688,"total_code":4864316,"matched_code":361848,"matched_code_percent":7.4388256,"total_data":1396704,"matched_data":138272,"matched_data_percent":9.8998785,"total_functions":34034,"matched_functions":1311,"matched_functions_percent":3.8520303,"complete_code":361744,"complete_code_percent":7.4366884,"complete_data":138240,"complete_data_percent":9.897588,"total_units":1403,"complete_units":208}},{"timestamp":"2026-10-12T14:46:13Z","commit_sha":"b0199369a77e534e80cf3f0342fe76ff532b5407","commit_message":"Split seven more MetroTRK units in all regions","measures":{"fuzzy_match_percent":7.447716,"total_code":4864312,"matched_code":359952,"matched_code_percent":7.399854,"total_data":1396704,"matched_data":138176,"matched_data_percent":9.893005,"total_functions":34034,"matched_functions":1297,"matched_functions_percent":3.810895,"complete_code":359848,"complete_code_percent":7.3977165,"complete_data":138144,"complete_data_percent":9.890715,"total_units":1402,"complete_units":204}},{"timestamp":"2026-10-12T13:31:17Z","commit_sha":"ed1f491484d88cf6ba7b4f5607dcdaf43bbd1979","commit_message":"Split five more MetroTRK units in all regions","measures":{"fuzzy_match_percent":7.2482224,"total_code":4864312,"matched_code":350248,"matched_code_percent":7.2003603,"total_data":1396704,"matched_data":134168,"matched_data_percent":9.606044,"total_functions":34034,"matched_functions":1242,"matched_functions_percent":3.6492918,"complete_code":350144,"complete_code_percent":7.1982226,"complete_data":134136,"complete_data_percent":9.603753,"total_units":1399,"complete_units":197}},{"timestamp":"2026-10-12T12:54:09Z","commit_sha":"0facc5006f18a844bc7c7e01a0b571a418ca1374","commit_message":"Split nine MetroTRK units in all regions","measures":{"fuzzy_match_percent":7.069962,"total_code":4864300,"matched_code":341576,"matched_code_percent":7.0221,"total_data":1396704,"matched_data":132560,"matched_data_percent":9.490915,"total_functions":34033,"matched_functions":1197,"matched_functions_percent":3.5171742,"complete_code":341472,"complete_code_percent":7.019962,"complete_data":132528,"complete_data_percent":9.488625,"total_units":1389,"complete_units":192}},{"timestamp":"2026-10-12T12:02:00Z","commit_sha":"7239522e0d140fb4e4d8c617b94b144136a5a5f5","commit_message":"Split MetroTRK target_options.c and mslsupp.c and MSL ansi_files.c in all regions","measures":{"fuzzy_match_percent":7.007131,"total_code":4856312,"matched_code":337960,"matched_code_percent":6.9591904,"total_data":1396704,"matched_data":125872,"matched_data_percent":9.012074,"total_functions":34032,"matched_functions":1166,"matched_functions_percent":3.426187,"complete_code":337856,"complete_code_percent":6.957049,"complete_data":125840,"complete_data_percent":9.009783,"total_units":1373,"complete_units":183}},{"timestamp":"2026-10-12T11:37:06Z","commit_sha":"c2b788786db930cb7cf2b4884cd2b60d980ca274","commit_message":"Split MSL qsort.c and scanf.c in all regions","measures":{"fuzzy_match_percent":6.9903283,"total_code":4856312,"matched_code":337144,"matched_code_percent":6.9423876,"total_data":1396704,"matched_data":124776,"matched_data_percent":8.933603,"total_functions":34032,"matched_functions":1159,"matched_functions_percent":3.4056182,"complete_code":337040,"complete_code_percent":6.9402466,"complete_data":124744,"complete_data_percent":8.931313,"total_units":1368,"complete_units":180}},{"timestamp":"2026-10-12T11:16:29Z","commit_sha":"d5c0724bf19f5a316d33488121089a54d1f5cfd3","commit_message":"Split MSL printf.c in all regions","measures":{"fuzzy_match_percent":6.8970065,"total_code":4856312,"matched_code":332612,"matched_code_percent":6.8490653,"total_data":1396708,"matched_data":124528,"matched_data_percent":8.915822,"total_functions":34032,"matched_functions":1154,"matched_functions_percent":3.3909261,"complete_code":332508,"complete_code_percent":6.8469243,"complete_data":124496,"complete_data_percent":8.913531,"total_units":1369,"complete_units":178}},{"timestamp":"2026-10-12T11:00:15Z","commit_sha":"8d7870ae824b59c9ce4eae85858dc09160868a55","commit_message":"Split MSL ansi_fp.c in all regions","measures":{"fuzzy_match_percent":6.7160463,"total_code":4856312,"matched_code":323824,"matched_code_percent":6.668105,"total_data":1396708,"matched_data":123916,"matched_data_percent":8.8720045,"total_functions":34032,"matched_functions":1139,"matched_functions_percent":3.34685,"complete_code":323720,"complete_code_percent":6.6659636,"complete_data":123884,"complete_data_percent":8.869714,"total_units":1368,"complete_units":177}},{"timestamp":"2026-10-12T10:23:02Z","commit_sha":"5c778b3187d7d31702d725e9403276c42af4eebd","commit_message":"Split the MSL errno, locale and float units in all regions","measures":{"fuzzy_match_percent":6.432127,"total_code":4856312,"matched_code":310036,"matched_code_percent":6.3841863,"total_data":1396708,"matched_data":123284,"matched_data_percent":8.826756,"total_functions":34032,"matched_functions":1132,"matched_functions_percent":3.326281,"complete_code":309932,"complete_code_percent":6.3820443,"complete_data":123252,"complete_data_percent":8.824465,"total_units":1368,"complete_units":176}},{"timestamp":"2026-10-12T09:59:10Z","commit_sha":"c5a08498aac04658c3fdd28f65fed834332d636d","commit_message":"Split the MSL arith, bsearch, buffer_io, char_io, critical_regions, ctype, file_io, FILE_POS and mbstring units","measures":{"fuzzy_match_percent":6.432127,"total_code":4856312,"matched_code":310036,"matched_code_percent":6.3841863,"total_data":1396708,"matched_data":123164,"matched_data_percent":8.818164,"total_functions":34032,"matched_functions":1132,"matched_functions_percent":3.326281,"complete_code":309932,"complete_code_percent":6.3820443,"complete_data":123132,"complete_data_percent":8.815872,"total_units":1364,"complete_units":173}},{"timestamp":"2026-10-12T09:16:34Z","commit_sha":"910222b28efd0cdddff5715aa03e7c30599376a2","commit_message":"Split strtold.c in all regions","measures":{"fuzzy_match_percent":6.3530545,"total_code":4856312,"matched_code":306196,"matched_code_percent":6.3051143,"total_data":1396708,"matched_data":122388,"matched_data_percent":8.762605,"total_functions":34032,"matched_functions":1113,"matched_functions_percent":3.2704513,"complete_code":306092,"complete_code_percent":6.3029723,"complete_data":122356,"complete_data_percent":8.760314,"total_units":1354,"complete_units":164}},{"timestamp":"2026-10-12T08:42:25Z","commit_sha":"11d3127a1cc2b4050b0ed0d76f7e267e54c0d483","commit_message":"Split strtoul.c, wchar_io.c and uart_console_io_gcn.c in all regions","measures":{"fuzzy_match_percent":6.2684636,"total_code":4856312,"matched_code":302088,"matched_code_percent":6.220523,"total_data":1396708,"matched_data":122308,"matched_data_percent":8.756877,"total_functions":34032,"matched_functions":1112,"matched_functions_percent":3.2675128,"complete_code":301984,"complete_code_percent":6.2183814,"complete_data":122276,"complete_data_percent":8.754585,"total_units":1355,"complete_units":163}},{"timestamp":"2026-10-12T08:08:13Z","commit_sha":"db7895ebac73eef04def4aa9806ce069190a2e0e","commit_message":"Split MSL string.c in JP and PAL","measures":{"fuzzy_match_percent":6.2142663,"total_code":4856312,"matched_code":299456,"matched_code_percent":6.1663256,"total_data":1396708,"matched_data":122164,"matched_data_percent":8.746567,"total_functions":34032,"matched_functions":1106,"matched_functions_percent":3.2498825,"complete_code":299352,"complete_code_percent":6.1641836,"complete_data":122132,"complete_data_percent":8.744276,"total_units":1351,"complete_units":160}},{"timestamp":"2026-10-12T07:14:46Z","commit_sha":"01151b426c8a505cd6da130e995ca6138d9d4004","commit_message":"Share the SFD condition names and use them for the video/audio switches\n\nsfd_mps.c and sfd_hds.c defined SFD_COND_* names privately, so the other\nSofdec units tested and set the video and audio switches (conditions 5\nand 6) as bare numbers. Move the names to sfd.h and use them in\nsfd_trn.c, sfd_see.c, sfd_vom.c and sfd_ply.c.","measures":{"fuzzy_match_percent":6.187497,"total_code":4856312,"matched_code":298156,"matched_code_percent":6.139556,"total_data":1396708,"matched_data":121244,"matched_data_percent":8.680697,"total_functions":34032,"matched_functions":1095,"matched_functions_percent":3.21756,"complete_code":298052,"complete_code_percent":6.1374145,"complete_data":121212,"complete_data_percent":8.678407,"total_units":1348,"complete_units":159}},{"timestamp":"2026-10-12T06:27:36Z","commit_sha":"c2a113b3aa3d781feddcd5a6f27e2db3b12c606c","commit_message":"Remove GXSetBlendMode's unused blend_en local\n\nThe variable was never read and the unit still matches without it.","measures":{"fuzzy_match_percent":6.187497,"total_code":4856312,"matched_code":298156,"matched_code_percent":6.139556,"total_data":1396708,"matched_data":121244,"matched_data_percent":8.680697,"total_functions":34032,"matched_functions":1095,"matched_functions_percent":3.21756,"complete_code":298052,"complete_code_percent":6.1374145,"complete_data":121212,"complete_data_percent":8.678407,"total_units":1348,"complete_units":159}},{"timestamp":"2026-10-12T04:49:07Z","commit_sha":"320cbfcc6ced5a42ac34747640237ac43642e6ca","commit_message":"Trim unused includes in adx_sugc.c and sfd_tst.c\n\nadx_sugc.c uses nothing from adx_f.h, and sfd_tst.c only needed sfd.h\nfor UTY_MulDiv, which it now takes from uty.h directly.","measures":{"fuzzy_match_percent":6.187332,"total_code":4856312,"matched_code":298104,"matched_code_percent":6.1384854,"total_data":1396708,"matched_data":121244,"matched_data_percent":8.680697,"total_functions":34032,"matched_functions":1094,"matched_functions_percent":3.2146215,"complete_code":298052,"complete_code_percent":6.1374145,"complete_data":121212,"complete_data_percent":8.678407,"total_units":1348,"complete_units":159}},{"timestamp":"2026-10-12T03:45:22Z","commit_sha":"493b7e1e8d628c09cdf57bd7111f32af3f3c942f","commit_message":"Mark inferred names and signatures, fix SDK header parameter names\n\n- ADXT_ExecLscSvr and the sj_utl.c read_length helper are marked as\n  inferred names, matching the private rename record.\n- Game placeholders whose parameters are unused say that their parameter\n  types are inferred.\n- PPCArch.h declared PPCMtpmc2/3/4 with newPmc1 and PPCMtmmcr1 with\n  newMmcr0; OSInterrupt.h and mtx.h now use the definitions' names.","measures":{"fuzzy_match_percent":6.187332,"total_code":4856312,"matched_code":298104,"matched_code_percent":6.1384854,"total_data":1396708,"matched_data":121244,"matched_data_percent":8.680697,"total_functions":34032,"matched_functions":1094,"matched_functions_percent":3.2146215,"complete_code":298052,"complete_code_percent":6.1374145,"complete_data":121212,"complete_data_percent":8.678407,"total_units":1348,"complete_units":159}},{"timestamp":"2026-10-12T02:32:56Z","commit_sha":"c32bc6676bb9aba34686899ec681041f32c13a03","commit_message":"Renumber adx_dcd and gcci literal placeholders\n\nIncluding the standard and SDK headers shifts MWCC's anonymous label\ncounter in adx_dcd.c and gcci.c, so their @N literal names move. Rename\nthe symbols.txt placeholders by address to the new numbering in all three\nregions; no addresses, sizes or data change.","measures":{"fuzzy_match_percent":6.187332,"total_code":4856312,"matched_code":298104,"matched_code_percent":6.1384854,"total_data":1396708,"matched_data":121244,"matched_data_percent":8.680697,"total_functions":34032,"matched_functions":1094,"matched_functions_percent":3.2146215,"complete_code":298052,"complete_code_percent":6.1374145,"complete_data":121212,"complete_data_percent":8.678407,"total_units":1348,"complete_units":159}},{"timestamp":"2026-10-12T00:24:41Z","commit_sha":"3fb84e9578c7a2366b05d4221ec3442db6f3fc96","commit_message":"Match 27 CodeWarrior runtime and MSL C units in all regions\n\nStart a PowerPC_EABI_Support library built like this game's runtime\n(GC/2.7, signed char, 4-byte function alignment, MSL inlines): the\nfdlibm double-precision math functions (acos through tan except\nk_tan), mem, mem_funcs, direct_io, signal and __va_arg, with their\nsplits for USA, JP and PAL. The MSL/Runtime headers come along under\nsrc/PowerPC_EABI_Support with a minimal global.h for the GameCube\nconfiguration they expect.","measures":{"fuzzy_match_percent":6.187332,"total_code":4856312,"matched_code":298104,"matched_code_percent":6.1384854,"total_data":1396708,"matched_data":121244,"matched_data_percent":8.680697,"total_functions":34032,"matched_functions":1094,"matched_functions_percent":3.2146215,"complete_code":298052,"complete_code_percent":6.1374145,"complete_data":121212,"complete_data_percent":8.678407,"total_units":1349,"complete_units":160}},{"timestamp":"2026-10-11T23:56:10Z","commit_sha":"b84861bae99ceae2d78f74e46c92f1b98828aab0","commit_message":"Match Dolphin SDK dsp.c and dsp_task.c in all regions\n\nAdd the DSP interface and task scheduler with their splits for USA,\nJP and PAL and the DSP private header. The task scheduler's three\nstatics used only by the stripped __DSP_add_task are stripped, so its\ntask-list variables start 12 bytes in; the earlier symbol names for\nthose variables were one slot off and now follow the matched code.","measures":{"fuzzy_match_percent":5.8541574,"total_code":4856312,"matched_code":281924,"matched_code_percent":5.8053107,"total_data":1396708,"matched_data":119276,"matched_data_percent":8.539795,"total_functions":34032,"matched_functions":1060,"matched_functions_percent":3.1147156,"complete_code":281872,"complete_code_percent":5.8042397,"complete_data":119244,"complete_data_percent":8.537504,"total_units":1313,"complete_units":133}},{"timestamp":"2026-10-11T23:46:31Z","commit_sha":"c02c24f4b8f59012c93a196ac3781f4df006d9f6","commit_message":"Match Dolphin SDK GXInit, PPCArch, OSAlarm, OSCache, mtx, EXIUart and CARDBios\n\nAdd seven more SDK units with their splits for USA, JP and PAL.\nGXInit is the Nov 10 2004 GX build, compiled with SDK_REVISION 2 like\nthe reference sources; the other libraries are the Apr 2004 builds.\nGXInit's .data keeps its 32-byte alignment. Unreferenced functions,\nand the data only they used, are stripped by the linker.","measures":{"fuzzy_match_percent":5.795759,"total_code":4856312,"matched_code":279088,"matched_code_percent":5.7469125,"total_data":1396708,"matched_data":118788,"matched_data_percent":8.504856,"total_functions":34032,"matched_functions":1046,"matched_functions_percent":3.073578,"complete_code":279036,"complete_code_percent":5.7458415,"complete_data":118756,"complete_data_percent":8.502564,"total_units":1310,"complete_units":131}},{"timestamp":"2026-10-11T23:19:07Z","commit_sha":"9bc3bf8dbc340fa9603168dafe60f1a0ae1f83cc","commit_message":"Match Dolphin SDK OSError.c and OSContext.c in all regions\n\nAdd the OS error/report and context units with their splits for USA,\nJP and PAL. OSReport and OSPanic are weak definitions as in the SDK;\nthe __RAS_OSDisableInterrupts begin/end labels that OSContext's\nexception handler checks are now named.","measures":{"fuzzy_match_percent":5.482682,"total_code":4856312,"matched_code":263884,"matched_code_percent":5.4338355,"total_data":1396708,"matched_data":115220,"matched_data_percent":8.249397,"total_functions":34032,"matched_functions":966,"matched_functions_percent":2.8385048,"complete_code":263832,"complete_code_percent":5.4327645,"complete_data":115188,"complete_data_percent":8.247107,"total_units":1293,"complete_units":124}},{"timestamp":"2026-10-11T23:02:33Z","commit_sha":"e0440f61872b798b6c7dbcd9711f578c692af3a5","commit_message":"Match Dolphin SDK CARD units, delay and dvderror in all regions\n\nAdd twelve memory card units (CARDBlock through CARDWrite and\nCARDUnlock), the AXFX delay effect and dvderror with their splits for\nUSA, JP and PAL, plus the CARD, DVD and AXFX private headers.\nUnreferenced functions and the constants and buffers only they used\nare stripped by the linker; CARDUnlock's .data keeps its 32-byte\nalignment. Name the CARD, DVD, EXI and OS helpers these units call.","measures":{"fuzzy_match_percent":5.402045,"total_code":4856312,"matched_code":259968,"matched_code_percent":5.353198,"total_data":1396708,"matched_data":113868,"matched_data_percent":8.152599,"total_functions":34032,"matched_functions":948,"matched_functions_percent":2.7856135,"complete_code":259916,"complete_code_percent":5.352127,"complete_data":113836,"complete_data_percent":8.150308,"total_units":1288,"complete_units":122}},{"timestamp":"2026-10-11T22:03:10Z","commit_sha":"4349219b32ac4a7c90037e6d599db3fc78a77109","commit_message":"Match Dolphin SDK OS units OSArena through OSReset\n\nAdd OSArena, OSAudioSystem, OSSync, OSInterrupt, OSMemory, OSReboot,\nOSResetSW and OSReset to a new os library with their splits for USA,\nJP and PAL, plus include/dolphin.h and the OS private header.\nUnreferenced functions are stripped by the linker. Name the OS, cache,\nSRAM and PAD helpers these units call from the matched references.","measures":{"fuzzy_match_percent":4.95298,"total_code":4856312,"matched_code":238160,"matched_code_percent":4.904133,"total_data":1396708,"matched_data":113372,"matched_data_percent":8.117086,"total_functions":34032,"matched_functions":892,"matched_functions_percent":2.6210625,"complete_code":238108,"complete_code_percent":4.903062,"complete_data":113340,"complete_data_percent":8.114796,"total_units":1267,"complete_units":108}},{"timestamp":"2026-10-11T21:50:47Z","commit_sha":"5ab005fbb811be543a5d2e4ae449ae72c444c5b5","commit_message":"Match Dolphin SDK GXGeometry, GXLight, GXBump, GXPixel and GXTransform\n\nAdd five more GX units with their .text/.data/.sdata2 splits for USA,\nJP and PAL (GXGeometry sits 0xE0C later in PAL, the others 0x1044).\nFunctions nothing references, and the floating-point constants only\nthey used, are stripped by the linker. Name __GXCalculateVLim,\n__GXSetVAT, __GXSetVCD, __GXSetSUTexRegs and cosf from the matched\ncall sites.","measures":{"fuzzy_match_percent":4.8305,"total_code":4856312,"matched_code":232212,"matched_code_percent":4.7816534,"total_data":1396708,"matched_data":113004,"matched_data_percent":8.090739,"total_functions":34032,"matched_functions":855,"matched_functions_percent":2.5123413,"complete_code":232160,"complete_code_percent":4.7805824,"complete_data":112972,"complete_data_percent":8.088448,"total_units":1251,"complete_units":100}},{"timestamp":"2026-10-11T21:36:42Z","commit_sha":"724e890819cd928a30621ba2f6f0ed41e7116fa2","commit_message":"Match CRI sfd_lib, sfd_mps and mpv_mcy.c in all regions\n\nAdd the Sofdec library entry points, the MPEG system stream driver and\nthe tuned 16x16 motion compensation with their splits for USA, JP and\nPAL.\n\nThis game's sfd_lib adds a library finish (fn_803F1570) that destroys\nthe remaining handles and calls each module's finish, stores the last\nchecked handle only after a successful check, and reports SFD/GC\nVer.1.958. The few source forms these units need to reproduce the\noriginal register order are marked with short compiler-constraint\nnotes. Name the MPS_* and SFTIM_Init callees from the matched calls.","measures":{"fuzzy_match_percent":4.6947594,"total_code":4856312,"matched_code":225620,"matched_code_percent":4.645912,"total_data":1396708,"matched_data":112812,"matched_data_percent":8.076993,"total_functions":34032,"matched_functions":799,"matched_functions_percent":2.3477902,"complete_code":225568,"complete_code_percent":4.6448417,"complete_data":112780,"complete_data_percent":8.074701,"total_units":1240,"complete_units":95}},{"timestamp":"2026-10-11T21:23:13Z","commit_sha":"30eb02f6639a184dfab8801cd0a02905ecd978d8","commit_message":"Restore matching forms in cri_cvfs, sfd_hds, sfd_pts and sfh_main\n\nBring back the source forms these units need to match (codeless\nregister moves in cvFsGetFileSize, SFHDS_SetHdr and SFPTS_ReadPtsQue,\nand the never-taken conditional that keeps sfh_main's byte-swap stores\nas stw) and mark the units Matching again. Each form now carries a\nshort note on the compiler constraint it works around; the\ndeclaration and comment cleanups are kept.\n\nVerified: identical objects and relocations against the originals and\nmatching DOLs in USA, JP and PAL with these units linked from source.","measures":{"fuzzy_match_percent":4.426078,"total_code":4856312,"matched_code":212572,"matched_code_percent":4.377231,"total_data":1396708,"matched_data":109964,"matched_data_percent":7.8730845,"total_functions":34032,"matched_functions":759,"matched_functions_percent":2.2302537,"complete_code":212520,"complete_code_percent":4.37616,"complete_data":109932,"complete_data_percent":7.8707933,"total_units":1239,"complete_units":92}},{"timestamp":"2026-10-11T21:15:06Z","commit_sha":"a2a803b33bb71eb67bfe2273e04f8214c88938e4","commit_message":"Match Dolphin SDK GXTev.c in all regions\n\nStart the Dolphin SDK library: add the SDK headers (include/dolphin,\ninclude/libc) and the GX private header, an SDK flag set for the\nprebuilt Nintendo libraries (GC/1.2.5n, unsigned char, default small\ndata) and GXTev.c with its .text/.data splits for USA, JP and PAL.\nGXSetTevClampMode is unreferenced and stripped by the linker.","measures":{"fuzzy_match_percent":4.423183,"total_code":4856312,"matched_code":209468,"matched_code_percent":4.3133144,"total_data":1396708,"matched_data":109964,"matched_data_percent":7.8730845,"total_functions":34032,"matched_functions":749,"matched_functions_percent":2.2008698,"complete_code":193280,"complete_code_percent":3.979975,"complete_data":105092,"complete_data_percent":7.524264,"total_units":1239,"complete_units":88}},{"timestamp":"2026-10-11T20:51:30Z","commit_sha":"4ed0e34963d85735b0790b620f6f74ab1b22eb15","commit_message":"Match CRI sfd_mem, sfd_uo, sfd_vom and sfd_tst.c in all regions\n\nAdd the Sofdec memory input, user output and manual video output\ndrivers with their SFD_tr_* tables, and the time stabiliser, with\n.text/.rodata/.bss splits for USA, JP and PAL.\n\nThis game's manual video output driver forwards the transfer\nargument to SFBUF_VfrmAddRead/GetRead and does not apply the RE4\ndisplay-time check in GetRead. Name SFTIM_IsVideoTerm and\nsfadxt_stat from their matched references.","measures":{"fuzzy_match_percent":4.3856235,"total_code":4856312,"matched_code":207644,"matched_code_percent":4.275755,"total_data":1396708,"matched_data":109844,"matched_data_percent":7.8644934,"total_functions":34032,"matched_functions":733,"matched_functions_percent":2.153855,"complete_code":191456,"complete_code_percent":3.9424155,"complete_data":104972,"complete_data_percent":7.5156727,"total_units":1236,"complete_units":87}},{"timestamp":"2026-10-11T20:41:55Z","commit_sha":"20d8a10bb69dbb48caf136f8f3983d9d5e57946d","commit_message":"Consolidate CRI declarations and correct descriptive comments\n\nShared declarations:\n- add include/CRI/uty.h for UTY_MemcpyDword with the memcpyd.c\n  signature and use it from mpv_vlc.c and mpv_bdec.c\n- move the full ADXPD_OBJ layout and its state constants into adx_b.h\n  in place of the partial view in adx_bsc.c\n- declare the SJRBF/SJMEM accessors and SJ_SearchTag in sj.h on SJ\n  handles, define sj_utl.c on SJCK, and drop the local externs in\n  adx_sjd.c and sfd_buf.c\n- type the ADXB write-window callback as returning the PCM buffer\n  (ADXB_GETWR_FUNC) and drop the casts at its installs\n- declare memcpy in adx_dcd.c\n\nadx_sjd.c compares ADXB_GetFormat's container type with the ADXB_TYPE_*\nnames (now in adx_b.h): type 4 is AU and type 2 is SPSD.\n\nFix comments that contradicted the code: the mpv_vlc run/level entry\nlayout, the 4-bit WAV copy step, the adx_errs formatter quirk, the SKG\nbuild date, the loop offsets, MPV_IsEmptyBpic, the default quantiser\nmatrix order and the adx_dcd version and ScanInfoCode descriptions.\nTrim compiler-pass narration in adx_baif.c and adx_bsc.c.\n\nAll affected objects are unchanged.","measures":{"fuzzy_match_percent":4.2853003,"total_code":4856312,"matched_code":202772,"matched_code_percent":4.175432,"total_data":1396708,"matched_data":109236,"matched_data_percent":7.8209615,"total_functions":34032,"matched_functions":679,"matched_functions_percent":1.995181,"complete_code":186584,"complete_code_percent":3.8420928,"complete_data":104364,"complete_data_percent":7.4721417,"total_units":1231,"complete_units":83}},{"timestamp":"2026-10-11T20:17:52Z","commit_sha":"02fc3d9a14a2c22625b7ecf3769c73aafc7d61db","commit_message":"Match CRI sfd_buf, sfd_hds, sfd_pts and sfh_main.c in all regions\n\nAdd the Sofdec stream buffers, file header storage, PTS queues and the\nSFH header analyser with their splits for USA, JP and PAL.\n\nThis game's library adds module finish entries: an empty buffer finish\n(fn_803F052C), a header-storage finish (fn_803F12EC) and the SFH\nfinish (fn_80402058) that drops the init count. SFBUF_VfrmAddRead and\nSFBUF_VfrmGetRead forward a fourth argument to the transfer driver.\n\nAdd include/CRI/sfh.h, SJ_GetUuid in sj.h, and name SFMPS_GetConcatCnt,\nSFPTS_InitPtsQue and strstr from their matched call sites. sfd_ply's\n.data split now covers its alignment padding.","measures":{"fuzzy_match_percent":4.2881956,"total_code":4856312,"matched_code":205876,"matched_code_percent":4.239349,"total_data":1396708,"matched_data":109236,"matched_data_percent":7.8209615,"total_functions":34032,"matched_functions":689,"matched_functions_percent":2.024565,"complete_code":205824,"complete_code_percent":4.238278,"complete_data":109204,"complete_data_percent":7.8186707,"total_units":1231,"complete_units":87}},{"timestamp":"2026-10-11T19:59:04Z","commit_sha":"0eda1e1afdc8f45e9c07bccf82fcf824bf859080","commit_message":"Match CRI sfd_mpvf.c and sfd_ply.c in all regions\n\nAdd the Sofdec frame pool (sfd_mpvf) and player front end (sfd_ply)\nwith their .text/.rodata/.data/.bss splits for USA, JP and PAL.\n\nThis game's player differs from the RE4 library: SFD_GetFrm and\nSFD_RelFrm claim a frame-access word at SFD_OBJ+0x58 and count taken\nand returned frames in the player information block, frames released\nfor drawing are marked in SFMPV_FRM+0x58, and a play-end frame\nstatistics block follows the server timers (SFD_OBJ is 0x3640 bytes).\nsfd.h records these fields along with the SFCON clock-source view\nused by SFTIM_VbIn.\n\nName the sfd_ply/sfd_mpvf callees from the matched call sites\n(SFTIM, SFBUF, SFHDS, SFMPV and SFD setters, __cvt_sll_flt) and use\nSFD_TermSupply in fn_80406EBC.","measures":{"fuzzy_match_percent":3.8835263,"total_code":4856312,"matched_code":186224,"matched_code_percent":3.8346794,"total_data":1396708,"matched_data":108552,"matched_data_percent":7.77199,"total_functions":34032,"matched_functions":610,"matched_functions_percent":1.7924306,"complete_code":186172,"complete_code_percent":3.8336086,"complete_data":108520,"complete_data_percent":7.7696986,"total_units":1226,"complete_units":83}},{"timestamp":"2026-10-11T19:28:14Z","commit_sha":"b3647fa484572399121c2e77110fbcf40e833347","commit_message":"Match CRI sfd_aoap, sfd_see, sfd_set and sfd_trn.c in all regions\n\nAdd the four CRI Sofdec units with their .text/.rodata splits and\nconfigure entries for USA, JP and PAL.\n\nCorrect the SFD_OBJ layout in sfd.h: the player information block is\n0xA8 bytes, SFMPV_FRM gains a word at 0x58 (0xE8 bytes), and the\nfields from the error block onward move accordingly (aoap 0x34FC,\nsee 0x3550, object size 0x3620). The previously matched sfd_con,\nsfd_pl2 and sfd_tmr objects are unchanged under the new layout.\n\nName SFHDS_GetMuxVerNum, SFBUF_GetPrepFlg, SFBUF_GetTermFlg and\nSFLIB_libwork.","measures":{"fuzzy_match_percent":3.678515,"total_code":4856312,"matched_code":176268,"matched_code_percent":3.629668,"total_data":1396708,"matched_data":108100,"matched_data_percent":7.7396283,"total_functions":34032,"matched_functions":571,"matched_functions_percent":1.6778326,"complete_code":176216,"complete_code_percent":3.628597,"complete_data":108068,"complete_data_percent":7.737336,"total_units":1222,"complete_units":81}},{"timestamp":"2026-10-11T19:06:54Z","commit_sha":"eb7f83737f10abb513107d15aa249c558dcd9298","commit_message":"Match CRI adx_tlk, adx_tlk2, adx_fsvr, mpv_cmc and sfd_con.c in all regions\n\nadx_tlk.c is the ADXT playback handle API: create/destroy, start/stop,\npause, volume/pan/balance, time queries and silence insertion. In this\nbuild every public ADXT_* entry wraps an adxt_* worker in the\ncritical-section enter/leave hooks; it adds ADXT_StopWithoutLsc and\nADXT_GetTimeReal and a handle flag that gates the header default\nvolume and pan. It is built with deferred inlining. adx_tlk2.c holds\nthe named-file and AFS starts, adx_fsvr.c the file-system server pass,\nmpv_cmc.c the MPEG motion-compensation setup and sfd_con.c the Sofdec\nconcatenated-play helpers.\n\nShared headers gain adx_sjd.h and adx_amp.h with opaque handle types;\nadx_t.h, adx_stm.h, adx_rna.h, adx_b.h, mpv.h and sfd.h are updated\n(ADXRNA_Create/DiscardData and the ADXB/ADXSJD default pan/volume\ngetters take their caller-visible signatures; the MPV output block\ntables and work offset and the SFD concat block offset follow this\ngame). __cvt_fp2unsigned and the MPV, SFLIB and SFSET callees are\nnamed.\n\nVerified for GUPE8P, GUPJ8P and GUPP8P: SHA-1 and DOL bytes match,\nwhole-object checks pass, and code/data/function totals are unchanged.","measures":{"fuzzy_match_percent":3.5512578,"total_code":4856312,"matched_code":170088,"matched_code_percent":3.5024111,"total_data":1396708,"matched_data":108044,"matched_data_percent":7.735618,"total_functions":34032,"matched_functions":527,"matched_functions_percent":1.5485425,"complete_code":170036,"complete_code_percent":3.50134,"complete_data":108012,"complete_data_percent":7.733327,"total_units":1214,"complete_units":77}},{"timestamp":"2026-10-11T18:50:52Z","commit_sha":"ee5bfb9b2b1fd6893f0e4f67d6c0a8475312ff63","commit_message":"Match CRI adx_stmc.c in all regions\n\nadx_stmc.c is the ADX stream controller: binding a file range,\nstarting and stopping reads, the per-controller read state with its\nretry rule, end-of-stream callbacks, and the reference-counted\ninit. Public ADXSTM_* entries wrap adxstm_* workers; the file is\nbuilt with -inline noauto so only the helpers declared inline are\nexpanded. It replaces the USA-only unit fn_803BF924.\n\ncvfs.h now declares the CVFS file entry points over an opaque\nCVFS_OBJ (cri_cvfs.c names its struct tag to match), and sj.h\ndeclares SJ_SplitChunk, replacing a local declaration in adx_sjd.c.\n\nVerified for GUPE8P, GUPJ8P and GUPP8P: SHA-1 and DOL bytes match,\nwhole-object checks pass, and code/data/function totals are unchanged.","measures":{"fuzzy_match_percent":3.3329852,"total_code":4856312,"matched_code":159488,"matched_code_percent":3.284138,"total_data":1396708,"matched_data":105892,"matched_data_percent":7.5815415,"total_functions":34032,"matched_functions":474,"matched_functions_percent":1.3928068,"complete_code":159436,"complete_code_percent":3.2830675,"complete_data":105860,"complete_data_percent":7.579251,"total_units":1210,"complete_units":72}},{"timestamp":"2026-10-11T18:18:56Z","commit_sha":"d1af5c70acbbfd50d7d81936aca1a41b41dd7151","commit_message":"Match CRI adx_sje.c in all regions\n\nadx_sje.c is the ADX stream-joint encoder used to synthesise SFA\nheaders: handle creation and start/stop, the encoder server, header\nand end-code output, block prediction and scale selection. This build\nadds a reference count around ADXSJE_Init/ADXSJE_Finish and carries\nAdxGainDataMax and the \"(c)CRI\" string pointer as its only data.\n\nadx_sje.h now uses an opaque ADXSJE handle type and adx_dcd.h declares\nADX_CalcHdrInfoLen. The volatile reference counts in adx_crs.c and\nadx_sjd.c now cite the library convention they follow.\n\nVerified for GUPE8P, GUPJ8P and GUPP8P: SHA-1 and DOL bytes match,\nwhole-object checks pass, and code/data/function totals are unchanged.","measures":{"fuzzy_match_percent":3.237769,"total_code":4856312,"matched_code":154864,"matched_code_percent":3.188922,"total_data":1396708,"matched_data":101964,"matched_data_percent":7.300309,"total_functions":34032,"matched_functions":447,"matched_functions_percent":1.3134696,"complete_code":154812,"complete_code_percent":3.1878512,"complete_data":101932,"complete_data_percent":7.298018,"total_units":1209,"complete_units":71}},{"timestamp":"2026-10-11T17:44:13Z","commit_sha":"dd28067805c32c53d8d8c8b521a38f7dcd84afd6","commit_message":"Match CRI rna_crs, mcp_not, mpv_m2v and mwsfdsee.c in all regions\n\nrna_crs.c maps the renderer lock onto the stream-joint lock, mcp_not.c\nis the MEM_Copy wrapper over memcpy, mpv_m2v.c holds the MPEG-2 decoder\nstubs and mwsfdsee.c the empty Sofdec seek hooks. mwsfdsee.c replaces\nthe USA-only unit fn_80403514.\n\nVerified for GUPE8P, GUPJ8P and GUPP8P: SHA-1 and DOL bytes match,\nwhole-object checks pass, and code/data/function totals are unchanged.","measures":{"fuzzy_match_percent":3.058703,"total_code":4856312,"matched_code":146168,"matched_code_percent":3.0098562,"total_data":1396708,"matched_data":93340,"matched_data_percent":6.682857,"total_functions":34032,"matched_functions":430,"matched_functions_percent":1.2635167,"complete_code":146116,"complete_code_percent":3.0087852,"complete_data":93308,"complete_data_percent":6.680566,"total_units":1208,"complete_units":70}},{"timestamp":"2026-10-11T17:11:36Z","commit_sha":"2800d415cb09a64c504dab0bbb55d1a7a570646c","commit_message":"Credit the CRI references used for adx_lsc, ADXSJD and MWSTM","measures":{"fuzzy_match_percent":3.0556555,"total_code":4856312,"matched_code":146020,"matched_code_percent":3.0068085,"total_data":1396708,"matched_data":93340,"matched_data_percent":6.682857,"total_functions":34032,"matched_functions":417,"matched_functions_percent":1.2253174,"complete_code":145968,"complete_code_percent":3.0057375,"complete_data":93308,"complete_data_percent":6.680566,"total_units":1203,"complete_units":66}},{"timestamp":"2026-10-11T16:15:58Z","commit_sha":"72d37d754afd5d4c236ed561dee0b17033f33d2a","commit_message":"Match CRI adx_sjd.c and adx_crs.c in all regions\n\nadx_sjd.c is the ADX stream-joint decoder (ADXSJD): handle creation,\nthe per-handle decode loop with linked-file padding, footer and\nheader-error handling, trap/snapshot helpers and the getters.\nadx_crs.c holds the ADX critical-section counters and the lock and\nenter/leave hooks. Both are built with deferred inlining, so the\nfunctions and .bss are laid out in reverse source order.\n\nadx_b.h gains the remaining adx_bsc prototypes, sj.h an UngetChunk\nmacro and adx_dcd.h ADX_DecodeFooter. The adx_inis and adx_bsc\nsection ends now cover the alignment padding before the new units.\n\nVerified for GUPE8P, GUPJ8P and GUPP8P: SHA-1 and DOL bytes match,\nwhole-object checks pass, and code/data/function totals are unchanged.","measures":{"fuzzy_match_percent":2.977489,"total_code":4856312,"matched_code":142224,"matched_code_percent":2.9286423,"total_data":1396708,"matched_data":92996,"matched_data_percent":6.658228,"total_functions":34032,"matched_functions":386,"matched_functions_percent":1.1342266,"complete_code":142172,"complete_code_percent":2.9275713,"complete_data":92964,"complete_data_percent":6.6559367,"total_units":1200,"complete_units":61}},{"timestamp":"2026-10-11T15:26:36Z","commit_sha":"f93e15a2c7a4109fbaa0e2da8c2dddc9022836a8","commit_message":"Match CRI adx_bsc.c and adx_inis.c in all regions\n\nAdd the ADXB block decoder core and the ADXT library init/finish for GUPE8P, GUPJ8P and GUPP8P. This game's adx_bsc.c resets the AINF fields in ADXB_DecodeHeader and adds a flag that suppresses ADXSJD's header errors (names inferred); adx_inis.c (ADXT 9.44) registers named threaded server callbacks and finishes the critical section. Both match whole with their .rodata and .bss.\n\nAdd include/CRI/adx_t.h (the 9.44 handle is 0xC4 bytes) and move ADXPD, ADXB format, ADX header, ADXCRS, ADXSTM and SJ prototypes into the shared headers; adx_gc.c and adx_insh.c now use them. Name the ADXT, ADXSTM, ADXSJD, ADXCRS and ADX header functions these units call. Each region builds to its expected SHA-1 with both units linked from source.","measures":{"fuzzy_match_percent":2.8704944,"total_code":4856312,"matched_code":137028,"matched_code_percent":2.8216474,"total_data":1396708,"matched_data":90144,"matched_data_percent":6.4540334,"total_functions":34032,"matched_functions":341,"matched_functions_percent":1.0019982,"complete_code":136976,"complete_code_percent":2.8205764,"complete_data":90112,"complete_data_percent":6.451742,"total_units":1200,"complete_units":59}},{"timestamp":"2026-10-11T14:33:56Z","commit_sha":"a8b55482d823e5bce681c1ba328ce5ca730c3812","commit_message":"Update attribution for the RE4 CRI references\n\nDescribe the wider set of CRI and Sofdec units based on the Resident Evil 4 decompilation.","measures":{"fuzzy_match_percent":2.7265992,"total_code":4856312,"matched_code":130040,"matched_code_percent":2.6777523,"total_data":1396708,"matched_data":80660,"matched_data_percent":5.775008,"total_functions":34032,"matched_functions":297,"matched_functions_percent":0.872708,"complete_code":129988,"complete_code_percent":2.6766815,"complete_data":80628,"complete_data_percent":5.772717,"total_units":1197,"complete_units":57}},{"timestamp":"2026-10-11T14:33:38Z","commit_sha":"e1ea24ebdf3ee1d401711a505a42aeb31ce95b3a","commit_message":"Match CRI Sofdec MPV/MPS, RNA error and UTY helper units in all regions\n\nAdd rna_err.c, mps_del.c, mps_get.c, mps_dec.c, mpv_deli.c, mpv_emp.c, mpv_err.c, mpv_get.c, mpv_bdec.c, mpv_vlc.c, mpvabdec.c, sfd_tmr.c, sfd_pl2.c, cmptime.c, memcpyd.c, memsetd.c, muldiv.c, muldivr.c and cftcoladj.c for GUPE8P, GUPJ8P and GUPP8P. Each unit matches whole with its .rodata, .data and .bss; functions and data that this game does not contain are left out.\n\nAdd the 64-bit and floating types and TRUE/FALSE to cri_xpt.h and the Sofdec MPS, MPV and SFD layout headers (MPVERR_INF is five words, as MPVERR_InitErrInf clears them). Name the MPS/MPV library checks, __div2i, the SFD helpers sfd_pl2.c calls, DCT_FsriInitScanTbl and the MPV VLC tables. Each region builds to its expected SHA-1 with all units linked from source.","measures":{"fuzzy_match_percent":2.7265992,"total_code":4856312,"matched_code":130040,"matched_code_percent":2.6777523,"total_data":1396708,"matched_data":80660,"matched_data_percent":5.775008,"total_functions":34032,"matched_functions":297,"matched_functions_percent":0.872708,"complete_code":129988,"complete_code_percent":2.6766815,"complete_data":80628,"complete_data_percent":5.772717,"total_units":1197,"complete_units":57}},{"timestamp":"2026-10-11T13:19:12Z","commit_sha":"a666e642d6e07a6d01619da91c5f765d26fda180","commit_message":"Match CRI ADXB format decoders, adx_errs.c and adx_insh.c in all regions\n\nAdd adx_bwav.c, adx_bahx.c, adx_baif.c, adx_bau.c, adx_bsps.c, adx_errs.c and adx_insh.c for GUPE8P, GUPJ8P and GUPP8P. Each unit matches whole with its .rodata, .data and .bss; the unreferenced static copies and stubs the linker strips are marked.\n\nShare the ADXB object layout through include/CRI/adx_b.h (adx_xpnd.c now uses its ADXPD handle), add the ADXSJE interface header and the SJ chunk macros, and name strncat and the ADXSJE entry points ADXT_InsertHdrSfa calls. Each region builds to its expected SHA-1 with all seven units linked from source.","measures":{"fuzzy_match_percent":1.1370802,"total_code":4856312,"matched_code":52848,"matched_code_percent":1.0882332,"total_data":1396708,"matched_data":70992,"matched_data_percent":5.082809,"total_functions":34032,"matched_functions":232,"matched_functions_percent":0.6817113,"complete_code":52796,"complete_code_percent":1.0871625,"complete_data":70960,"complete_data_percent":5.080518,"total_units":1155,"complete_units":38}},{"timestamp":"2026-10-11T12:52:03Z","commit_sha":"a37895a2fb059380aae1f18ae46a70c174676f4e","commit_message":"Match CRI adx_xpnd.c, adx_sugc.c, adx_gc.c and adx_rnaa.c in all regions\n\nAdd the ADX block expander, the GameCube SDK device setup, the AX sample-rate switch and the ADXRNA renderer wrappers for GUPE8P, GUPJ8P and GUPP8P. Each unit matches whole, including .rodata and .bss.\n\nShare ADX service, decoder, renderer and CVFS declarations through new include/CRI headers; cvFsAddDev takes its third (device parameter) argument as its callers pass it, with an unchanged object. Name the ADX decoder entry points and the AXRNA functions the wrappers call. Each region builds to its expected SHA-1 with all four units linked from source.","measures":{"fuzzy_match_percent":0.8473129,"total_code":4856312,"matched_code":38776,"matched_code_percent":0.79846597,"total_data":1396708,"matched_data":68992,"matched_data_percent":4.939615,"total_functions":34032,"matched_functions":198,"matched_functions_percent":0.58180535,"complete_code":38724,"complete_code_percent":0.7973952,"complete_data":68960,"complete_data_percent":4.937324,"total_units":1137,"complete_units":31}},{"timestamp":"2026-10-11T12:28:03Z","commit_sha":"616d457bf47e41935bdbb87453d4e841676a0260","commit_message":"Update attribution for CRI ADXF references\n\nCredit the projects consulted for the adx_fs.c structure and names.","measures":{"fuzzy_match_percent":0.80555284,"total_code":4856312,"matched_code":36748,"matched_code_percent":0.75670594,"total_data":1396708,"matched_data":67952,"matched_data_percent":4.8651543,"total_functions":34032,"matched_functions":158,"matched_functions_percent":0.46426892,"complete_code":36696,"complete_code_percent":0.75563514,"complete_data":67920,"complete_data_percent":4.862863,"total_units":1129,"complete_units":27}},{"timestamp":"2026-10-11T11:44:32Z","commit_sha":"026aa055c8f0b96c7d6e5bfa29beba3b3b1b95d9","commit_message":"Add attribution for reference decompilations\n\nList the decompilation and tooling projects whose published work informed the recovered CRI middleware, Metrowerks runtime and SDK code, with links to each project.","measures":{"fuzzy_match_percent":0.6757424,"total_code":4856312,"matched_code":30444,"matched_code_percent":0.6268955,"total_data":1396708,"matched_data":57976,"matched_data_percent":4.150903,"total_functions":34032,"matched_functions":144,"matched_functions_percent":0.4231312,"complete_code":30392,"complete_code_percent":0.6258247,"complete_data":57944,"complete_data_percent":4.148612,"total_units":1131,"complete_units":26}},{"timestamp":"2026-10-11T11:44:20Z","commit_sha":"1c1cb9a9c2418e2936dbc7f30bb62fe408e501fc","commit_message":"Match CRI adx_fini.c and adx_fcch.c in all regions\n\nAdd the ADXF init/finish and cache-flush units for GUPE8P, GUPJ8P and GUPP8P, name ADXF_CloseAll, and regenerate the affected symbols. Each region builds to its expected SHA-1 with both objects linked from source.","measures":{"fuzzy_match_percent":0.6757424,"total_code":4856312,"matched_code":30444,"matched_code_percent":0.6268955,"total_data":1396708,"matched_data":57976,"matched_data_percent":4.150903,"total_functions":34032,"matched_functions":144,"matched_functions_percent":0.4231312,"complete_code":30392,"complete_code_percent":0.6258247,"complete_data":57944,"complete_data_percent":4.148612,"total_units":1131,"complete_units":26}},{"timestamp":"2026-10-11T11:15:10Z","commit_sha":"3697e0e10cb65ce784133f67b9b5c6bd0734115b","commit_message":"Match CRI cri_cvfs.c in all regions\n\nReconstruct the CRI virtual file system front end (cri_cvfs.c, CVFS/GC\nVer.2.39) as one unit: the 13 functions this game references (open,\nclose, seek, read, status, file size, device registration and the error\npath), the build string and all of the module's error literals, and its\ndevice and handle tables.\n\nThe other CVFS functions are unreferenced and stripped by the linker; they\nare kept with reference-derived bodies because their literals and storage\norder are part of the object, and their code is not verified.\n\nThe module is identical in GUPE8P, GUPJ8P and GUPP8P and is linked from\nsource in every region.\n\nVerified per region: object code, data, symbols and relocations against\nthe split target, source objects in the link, expected SHA-1 and exact\noriginal DOL bytes.","measures":{"fuzzy_match_percent":0.6679999,"total_code":4856312,"matched_code":30068,"matched_code_percent":0.61915296,"total_data":1396708,"matched_data":55464,"matched_data_percent":3.9710517,"total_functions":34032,"matched_functions":141,"matched_functions_percent":0.41431594,"complete_code":30016,"complete_code_percent":0.61808217,"complete_data":55432,"complete_data_percent":3.9687607,"total_units":1126,"complete_units":24}},{"timestamp":"2026-10-11T10:56:37Z","commit_sha":"9fcc186c5254a3207bb68c80bb3fa862f444d342","commit_message":"Match CRI lsc.c in all regions\n\nReconstruct the CRI LSC load scheduler (lsc.c, LSC/GC Ver.2.22) as one\nunit: its 13 live functions, its error literals and the status callback\nstorage. The per-function LSC units are merged into it.\n\nThe function order and the names LSC_SetLpFlg, LSC_Start, LSC_ResetEntry\nand LSC_Create follow a newer CRI lsc.c; each function has its own error\ncode, numbered in source order. The file is built with deferred inlining,\nwhich reverses the emitted function and .bss order and lets Stop, Start\nand Destroy inline the functions they call. The unreferenced lookup,\nflow-limit and pause functions keep their error literals and are stripped\nby the linker; their bodies are reference-derived and unverified.\n\nThe scheduler is identical in GUPE8P, GUPJ8P and GUPP8P and is linked\nfrom source in every region.\n\nVerified per region: object code, data, symbols and relocations against\nthe split target, source objects in the link, expected SHA-1 and exact\noriginal DOL bytes.","measures":{"fuzzy_match_percent":0.56273484,"total_code":4856312,"matched_code":24956,"matched_code_percent":0.51388794,"total_data":1396708,"matched_data":51296,"matched_data_percent":3.672636,"total_functions":34032,"matched_functions":128,"matched_functions_percent":0.3761166,"complete_code":24904,"complete_code_percent":0.51281714,"complete_data":51264,"complete_data_percent":3.6703448,"total_units":1125,"complete_units":23}},{"timestamp":"2026-10-11T10:39:47Z","commit_sha":"aa81fcddff88352945210428b53212f8706440b8","commit_message":"Share recovered CRI interfaces and clarify reference-derived code\n\nAdd include/CRI headers (cri_xpt.h, sj.h, svm.h, adx_stm.h, lsc.h) for\nthe CRI interfaces recovered so far and use them in the CRI sources and\ntheir callers, replacing per-file declarations that disagreed with the\ndefinitions (for example LSC_LockCrs, LSC_EntryErrFunc, SJERR_CallErr and\nthe old SJMEM view prototypes). The remaining per-function LSC units now\nuse the LSC_OBJ layout; the obsolete Game view headers are removed.\n\nName LSC_ExecServer, lsc_ClearEntry, LSC_SetStmHndl, ADXSTM_Stop and the\nLSC status-callback variables in all regions, and build the status\ncallback unit with -sdata 0 like the other CRI code.\n\nReword the comments on unreferenced, linker-stripped functions kept for\nstorage and literal order (svm_itoa and the other SVM helpers, gcCiInit,\nmfCiOpenEntry, SJMEM_GetBufPtr, SJRBF_GetNumObj): their bodies come from\nthe RE4 and Mortal Kombat: Deception decompilations and are not verified\nagainst this game; only their storage and literal layout is. svm_itoa is\nkept as written, including its raw-digit behaviour.\n\nNo code changes: every rebuilt object has the same section bytes and\nrelocations as before. Verified per region: whole-object checks,\nsource objects in the link, expected SHA-1 and exact original DOL bytes.","measures":{"fuzzy_match_percent":0.51751536,"total_code":4856312,"matched_code":22760,"matched_code_percent":0.4686684,"total_data":1396708,"matched_data":50304,"matched_data_percent":3.6016119,"total_functions":34032,"matched_functions":115,"matched_functions_percent":0.33791727,"complete_code":22708,"complete_code_percent":0.46759763,"complete_data":50272,"complete_data_percent":3.5993207,"total_units":1126,"complete_units":22}},{"timestamp":"2026-10-11T10:20:06Z","commit_sha":"43e66508d3b59e425495284d5db77e30ae2044fe","commit_message":"Match CRI lsc_ini.c and lsc_svr.c in all regions\n\nReconstruct two CRI LSC load scheduler files as whole units:\n\n- lsc_ini.c: LSC_Init, LSC_Finish, the build string and the scheduler\n  table (merged from the per-function and storage units).\n- lsc_svr.c: lsc_ExecHndl, the per-scheduler server step, with its\n  file-name checksum and queue-advance helpers inlined.\n\nName the ADX stream controller functions lsc_ExecHndl calls\n(ADXSTM_GetStat, Tell, StopNw, ReleaseFileNw, BindFileNw, SetEos,\nSetBufSize, Seek and Start) in all regions and update their callers.\nBoth files are identical in GUPE8P, GUPJ8P and GUPP8P and are linked\nfrom source in every region.\n\nVerified per region: object code, data, symbols and relocations\nagainst the split targets, source objects in the link, expected SHA-1\nand exact original DOL bytes.","measures":{"fuzzy_match_percent":0.51751536,"total_code":4856312,"matched_code":22760,"matched_code_percent":0.4686684,"total_data":1396708,"matched_data":50304,"matched_data_percent":3.6016119,"total_functions":34032,"matched_functions":115,"matched_functions_percent":0.33791727,"complete_code":22708,"complete_code_percent":0.46759763,"complete_data":50272,"complete_data_percent":3.5993207,"total_units":1126,"complete_units":22}},{"timestamp":"2026-10-11T09:53:14Z","commit_sha":"aa85994356c0312a163f2b84fcfbef732c595248","commit_message":"Match CRI sj_rbf.c in all regions\n\nReconstruct the CRI ring buffer stream joint (sj_rbf.c, SJ/GC\nVer.6.31) as one unit: its 20 live functions including the chunk\nget/unget/put helpers and SJRBF_Create, the build string, class UUID\nand error literals, the joint interface table and the object storage.\nThe per-function SJRBF units and their storage unit are merged into it.\n\nThe unreferenced SJRBF_GetNumObj keeps its literals and is stripped by\nthe linker.\n\nThe joint is identical in GUPE8P, GUPJ8P and GUPP8P and is linked from\nsource in every region.\n\nVerified per region: object code, data, symbols and relocations\nagainst the split target, source objects in the link, expected SHA-1\nand exact original DOL bytes.","measures":{"fuzzy_match_percent":0.49519387,"total_code":4856312,"matched_code":21676,"matched_code_percent":0.44634697,"total_data":1396708,"matched_data":31976,"matched_data_percent":2.2893834,"total_functions":34032,"matched_functions":112,"matched_functions_percent":0.329102,"complete_code":21624,"complete_code_percent":0.44527617,"complete_data":31944,"complete_data_percent":2.2870922,"total_units":1124,"complete_units":20}},{"timestamp":"2026-10-11T09:36:12Z","commit_sha":"9aa0fdb3898a75afb25024ee4b3aa6f1d2bf477c","commit_message":"Move repository to dev-camo/shadow-decomp\n\nThe project now lives at dev-camo/shadow-decomp and its build container\ncomes from dev-camo/shadow-decomp-build. Update the README links and\nprogress badges and the workflow container image to the new locations.","measures":{"fuzzy_match_percent":0.40228388,"total_code":4856312,"matched_code":17164,"matched_code_percent":0.35343695,"total_data":1396708,"matched_data":15016,"matched_data_percent":1.0750995,"total_functions":34032,"matched_functions":92,"matched_functions_percent":0.2703338,"complete_code":17112,"complete_code_percent":0.35236615,"complete_data":14984,"complete_data_percent":1.0728084,"total_units":1127,"complete_units":19}}]