[{"timestamp":"2026-11-10T13:00:57Z","commit_sha":"45868f4efeb6fb61639b19d54d7a2da72ed23fef","commit_message":"objdiff: build report by self-comparing built objects\n\nmakes our objdiff report's target/expected both the exact same .o file, with objdiff handling\nsubtracting code/data that's NON_MATCHING, solves the rodata issue of splat D_ syms vs anonymous C\nsyms not getting matched up\n\nalso updated objdiff_generate to allow the raw-unmigrated data/rodata/bss objects to get counted\nin report, so they can subtract from the total %\n(with exclusions for garbage splits, might need to mark more of them in the yaml though)\n\nmain issue with this setup is what happens if a non-matching commit is pushed which breaks match,\ncomparing non-matching vs non-matching wouldn't be helpful\nleft in our old objdiff report as a fallback, so should still be able to use decomp.dev to narrow\ndown any breaks","measures":{"fuzzy_match_percent":99.97151,"total_code":2892224,"matched_code":2891400,"matched_code_percent":99.97151,"total_data":1327687,"matched_data":637721,"matched_data_percent":48.032482,"total_functions":6551,"matched_functions":6549,"matched_functions_percent":99.96947,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":422,"complete_units":0}},{"timestamp":"2026-11-10T12:25:50Z","commit_sha":"c895786bfb8baba21327bd63769a060d0cad4a9c","commit_message":"bodyprog: add missing sym names (bodyprog data 46% -> 72%)\n\nrodata and bss still has some issues","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T11:07:05Z","commit_sha":"17acf99fd9386123dbb6f1a49e13fa6bab521d92","commit_message":"misc: division fixups 2","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T10:53:59Z","commit_sha":"aab324f92cc4a73db7f4a2f780f77d3caf456fbf","commit_message":"misc: division fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T10:24:38Z","commit_sha":"b122b2ffda8b77275cf751b0a544da1669ca9a3b","commit_message":"bodyprog: minor hack fixups, tag some unmarked hacks\n\nThink the build break was probably the map .c header changes btw, the\norder of the \"maps/xxx.h\" includes is pretty delicate atm","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T09:35:59Z","commit_sha":"3f6bd32a41342e5b9d3ab5f431fc835fd221135e","commit_message":"Revert \"Bodyprog: items headers\"\n\nThis reverts commit e99bf6d26e75ba7d406520a578db62409aa73e13.","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T08:02:59Z","commit_sha":"40986843050a7f59470db4adfcc1d68bf34f8198","commit_message":"Bodyprog: move and rename files","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T07:11:34Z","commit_sha":"6a081621692567a230e4deb2d71c63d6db790323","commit_message":"bodyprog: paperMapFlags, misc fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T05:28:14Z","commit_sha":"b92d710d45338f4d76e21c25135aebe79575e71d","commit_message":"Bodyprog: `D_800AFD05` -> `vibration`","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T05:06:59Z","commit_sha":"d929db542f7523b9bc174c9024e28f3be3eeea95","commit_message":"Bodyprog: add `items` folder","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T04:50:50Z","commit_sha":"30bbca3733f87242ddb7723ea96f08d7c8217f76","commit_message":"Bodyprog: player deobfuscation","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-10T04:37:45Z","commit_sha":"10c9a9396c3781bf92edbb5c1f3c4ed7bdb5fc79","commit_message":"Bodyprog: equipped player weapon info deobfuscation","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T19:56:55Z","commit_sha":"403039cffc0c84a0604efef95b1adfb4338c4721","commit_message":"characters: use ANIM_TIME_RANGE_CHECK in cat/groaner","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T19:19:34Z","commit_sha":"b2b858dfd9985680d517360262a2c1396f401bd6","commit_message":"maps: add s_PropsNpcPath and s_PropsMonsterCybil\n\nFixes up some s32 casts, and lets us keep fields only used by\nmonster-cybil separate from the rest of NPC fields (TODO: merge unused\nfields in s_PropsNpc back to u8[])","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T17:17:13Z","commit_sha":"3a6e1e2c561236f5c6d09a4f9ee61aae8cbbc3fd","commit_message":"monster_cybil: use Q12_ANGLE_ABS","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T17:10:31Z","commit_sha":"e54fba18f6b736c4a6fbc7a6556a1aae660c7b43","commit_message":"Misc todo/hack/anim-status fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T16:16:47Z","commit_sha":"406e505434bd9a8949dd32325ce620eaf02c9752","commit_message":"Bodyprog: demagicking","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T16:06:10Z","commit_sha":"9a958819ef23260bbdddd5da8179bf92f836495a","commit_message":"USA/JAP0 build fix","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T15:50:17Z","commit_sha":"25b5818515031eb412f14a8f4302afd9b940520a","commit_message":"misc: minor chunk idx fixups","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2885980,"matched_code_percent":99.79736,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6545,"matched_functions_percent":99.954185,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T15:32:21Z","commit_sha":"e505ef3ef41ffb382c6ab03ff0c27255f8c7688f","commit_message":"Bodyprog: Harry anim data deobfuscation, math","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T13:45:10Z","commit_sha":"dd8dbb966a2689e4ba39945a09e50dd147ced14c","commit_message":"Bodyprog: organise macros","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T13:40:34Z","commit_sha":"904de951e8f2093cbf92873e58527d2296fd6ba3","commit_message":"maps: remove (float) hack from 6 funcs\n\nThese funcs all look nearly identical but use some different constants\ninside, map7_s03 also includes 3 copies of it, so probably not some\nshared .c\n\n(maybe some shared macro that would generate the function code with the\ngiven constants? eh, guess we'll see once more is deobfuscated\nthere)","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T12:04:30Z","commit_sha":"1a6333df0b01fa29d9d09436d6cc825bb3373edb","commit_message":"Bodyprog: misc. fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T11:09:27Z","commit_sha":"d5dbc5e7295e595b5d99dd4bbd208d19e6ebffbb","commit_message":"bodyprog: chunk idx fixups, add macros for combined XZ switches","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T10:00:27Z","commit_sha":"1a60ba2aff1dcf197369fa34614facba504f2cdf","commit_message":"Bodyprog: move world env macros and enums, misc. fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T08:38:48Z","commit_sha":"74ec2b015424ff585a0ac5a969adc83c8006de8d","commit_message":"bodyprog: add new PLAYER_IN_MAP_CHUNK macro, simplify chunk checks\n\nFound a different way to match the weird PLAYER_IN_MAP_CHUNK macro, with another weird\nmacro instead:\n\n    (((pos) / Q12(40.0f)) + (((pos) > Q12(0.0f)) ? 1 : -1))\n\nThe comment goes into it more, but this adds 1 if positive / subtracts 1 if negative to fix\nC's division making anything between -40 and 40 count as chunk 0 (making chunk 0 80 units\ninstead of 40 that every other chunk idx is)\n\nAdding that macro let us remove the odd PLAYER_IN_MAP_CHUNK checks, but this wouldn't\nactually be able to return 0 for any position, anything in chunk 0 would be returned as 1\n(and anything in positive indexes would be +1 of the actual index)\n\nOther terrain/IPD code does show chunk 0 being used though, so to make the checks consistent\nadded a workaround where the macro itself would add 1 to the index being checked\n(so we can use the macro like PLAYER_IN_MAP_CHUNK(0, 0), then the macro itself would add 1 to\nthose, and it can compare against result from MAP_CHUNK_IDX above)\n\nKinda weird but guess it makes sense for working around C's integer division issue.","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T06:48:40Z","commit_sha":"5a26ca1649f5d4388fabc610f5bf34af830fb958","commit_message":"Types: `q0_7` -> `1_7`","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-09T06:33:09Z","commit_sha":"916770ed530eed1367762e587bc909df5d98f929","commit_message":"Maps: refine docs, shorten particles source filenames","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T18:07:39Z","commit_sha":"9eae106925970f4b98e4791c24da46e0ba4f4f2a","commit_message":"maps: update particle_smoke / ufo comments","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T17:41:46Z","commit_sha":"bd6c6dfc84e248686d4ac54bb7509ab820b108f9","commit_message":"misc: minor fixups, update particle_fire/drool comments","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T16:18:03Z","commit_sha":"cd48ec144ee5d1fdc850042be2775f71d17f3fbc","commit_message":"Fix progress","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T16:15:08Z","commit_sha":"a199d5d17ae268996b418db113b4d0b0c9da7e48","commit_message":"Tidying pass, name 2 shared particle globals","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T12:28:23Z","commit_sha":"ecb1aea37f67079fc0e1364d26013551fe02bd62","commit_message":"bodyprog: add WorldEnv_IsWorldLit\n\nChecks seem common enough for another macro","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T12:22:49Z","commit_sha":"573302a26fd41630e7c9dc554b97fc99837613a5","commit_message":"bodyprog: add WorldEnv_IsFlashlightOn and WorldEnv_CanBeInDarkness","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T12:12:07Z","commit_sha":"38798ace38e3a5b206c67f9cabcc77b05bc05075","commit_message":"bodyprog: add WorldEnv_IsInDarkness / _IsFlashlightAllowed macros","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T11:46:35Z","commit_sha":"0e4b0d9aacb9b0daa4b5ffbd3d6b29c81568d54a","commit_message":"misc: range check fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T11:21:46Z","commit_sha":"8eef2d5150cf1394470c174dc02522930faa3965","commit_message":"bodyprog: name s_WorldEnvPreset fields and enums\n\nMight be worth adding some macro to check the preset flags here, a\nlot of map code uses same checks against them","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T11:00:26Z","commit_sha":"c99d0fa02d59970bd69408911026af2c9305670d","commit_message":"Math: add `Q7_MULT` and `Q7_CLAMPED`","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T10:17:41Z","commit_sha":"57ee14ca07a643eaa57c953c2be6e6adaae72190","commit_message":"bodyprog: rename world env structs and fields\n\n- Renamed the existing `s_WorldEnvWork` to `s_WorldEnvRenderWork`, and\n  `s_SysWork_2388` to `s_WorldEnvWork`, `WorldEnv_XXX` to `WorldEnvRender_XXX`\n  also changed MapEnv names to WorldEnv for consistency\n\n- s_MapEffectsInfo -> s_WorldEnvPreset, and named fields related to these\n  presets and the blending between them\n\nSeems both structs relate to world environment / lighting / fog, `s_SysWork_2388`\nseemed to be the main game-side struct for these, which handles blending between\npreset changes and flashlight status, then WorldEnv_Update copied things over to\n`s_WorldEnvWork` (now `s_WorldEnvRenderWork`) for rendering\n\nThings like map event code only ever touched s_SysWork_2388, only that WorldEnv_Update\nfunc and some particle code seems to ever change RenderWork\n\n(theres a big comment block in bodyprog.yaml also described how there was a split between\nthe game code/render code for this too)\n\nTried thinking of some other names for s_SysWork_2388 but really best fit seemed\nlike what we were already using for the render side, so renamed that side to make\nit more obvious that it's just rendering related instead\n(some of the WorldEnvRender_XXX func names are kinda lengthy tho..)\n\nTODO: funcs in world_effects.c could be moved under WorldEnv_XXX,\neg. right now it has stuff like `Game_TurnFlashlightOn` which are changing s_WorldEnvWork\n(also the header for that C is currently map_effects.h instead of world_effects.h)","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T09:11:29Z","commit_sha":"46e7c810ce94817144e82f10b076142f3e641b04","commit_message":"Bodyprog: update `Sd_SfxPlay` calls","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T08:25:02Z","commit_sha":"4312b857143ed33e25c5f3b1be04504a7b8d32de","commit_message":"Math: remove `FP_STICK`, add `Q7`\n\n`AXIS_DEADZONE` and SFX volumes can use this macro.","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T08:06:19Z","commit_sha":"d20c7258c73283acc66171e2881f1a33efe8743b","commit_message":"bodyprog/maps: flatten some structs/unions\n\nRemoved union from s_MapEffectsInfo, replaced with four plain u8 fields.\n\nReplace the bits/bits32/flags union on air screamer field_14C with a\nplain u32\n\nProbably still other unions that can be flattened too","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T07:35:19Z","commit_sha":"3eb4f17199a2967485b36abc99494aba98c9b671","commit_message":"Bodyprog: document `Pad_` input macros","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T07:18:23Z","commit_sha":"a460663832eec8a9e594a8097d440abffacee036","commit_message":"Bodyprog: name `s_RayQuery` field","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-08T02:15:39Z","commit_sha":"64b223e2f9e0d68c2220a07d4836baddc3c12692","commit_message":"Switch button press/hold/pulse checks to `Pad_ButtonClicked` macros\n\nShortens some of the controller button checks, gets rid of those long\n`g_Controller0->buttonFlags.clicked & ControllerFlag_XXX` lines everywhere\n\nWent with Pad_XXX for these over Joy_XXX so they wouldn't get confused with\nactual Joy_XXX funcs, but not against making these more consistent\n(right now we use \"controller\", \"pad\", \"joy\", maybe something less gamepad-focused\nlike \"Input\" would be better)\n\nTODO:\n- Add separate comments above each of these macros to describe what clicked/held/pulsed mean\n- Could be worth moving all the separate `#define playerChara xxx` instances into a global macro instead?","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-06T22:10:23Z","commit_sha":"9d0976146befdcb87dce609fb8cafa2d1d1c029f","commit_message":"bodyprog: JAP1/JAP2 build fix, switch define to ARRAY_SIZE\n\nProbably better for tables like these that other code won't access","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-06T14:46:02Z","commit_sha":"cc639d3f46d0cea6efd33deb65ccbfcbbd1f0541","commit_message":"Bodyprog: collision deobfuscation","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T23:53:02Z","commit_sha":"02f2a2f9d8c6a8f15b3cccdddc5ccc070140cca6","commit_message":"stf_roll: add .bss, fix postbuild overwrites\n\ngarbage was in middle of stf_roll .data which indicated a different\nsegment starting, splitting it there to separate .data didn't make much\nsense, but the data after garbage was all zeroes, so most likely .bss\n\ntwo postbuild patches would overwrite data from C with 00 before\npatching in garbage bytes, adjusted them to only patch in garbage","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137292,"matched_data_percent":35.311,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T22:40:40Z","commit_sha":"63880075922198cdbae9859f711e6fcd923d54ee","commit_message":"tools: move postbuild patches to single list","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":136880,"matched_data_percent":35.205036,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T20:58:09Z","commit_sha":"430892d38dcef7739aba40081a351dcd41c27d6b","commit_message":"misc: move some garbage from C to postbuild","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":136880,"matched_data_percent":35.205036,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T20:49:00Z","commit_sha":"b78641f7dc29e1a1738d3c4eab4912645ad88d95","commit_message":"misc: move end-of-segment pad vars from C to splat `pad` segment\n\nleft some end-of-seg pads in place where there was unmigrated data\nbefore/after, since we don't actually know the bounds of that data\nyet, adding a splat seg could split it in wrong place\n\nalso a bunch of pads at start of segments which would be nice to move as\nwell, but moving those out of the C code can sometimes break alignment\non data that comes after them, seems only pads at end of segments are safe\nto move :T","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388808,"matched_data":137024,"matched_data_percent":35.242073,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T20:18:36Z","commit_sha":"d0e3924107b23fee719ee238e4cda33d72957127","commit_message":"misc: garbage data fixups\n\nmoved postbuild garbage patches into C files if we had garbage data defined in C for other regions\n\nmoved postbuild/C garbage that would work as splat segments into segments instead","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388864,"matched_data":136360,"matched_data_percent":35.066242,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T19:48:27Z","commit_sha":"7f812cd464cf8d6e871904d8afa74b9868b77797","commit_message":"bodyprog: retype D_800AD098 as u8, remove garbage rodata\n\nMoved rodata garbage to splat segment like others, since it's 4 bytes -\nD_800AD098 has to be handled thru postbuild since it's only 2 bytes","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T19:38:02Z","commit_sha":"850249bc71e252775814c6f3e24bbe08bcf9e73c","commit_message":"bodyprog: match Gfx_MapMsg_StringDraw EUR","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T12:41:39Z","commit_sha":"1e539af0ddff4ed80338ef2dcc17809d0a47e1d6","commit_message":"bodyprog: match Gfx_MapMsg_WidthsCompute EUR","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T10:20:04Z","commit_sha":"e55c2fbe1ae36f15f2e449b8f065a64d623f2ac1","commit_message":"Screens: `options` -> `option`\n\nLike with `stf_roll`, this is just to preserve the original overlay name.","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T09:52:50Z","commit_sha":"a4b875bfb7bf0219ad7bc36a18631ccd128eae09","commit_message":"Screens: `credits` -> `stf_roll`\n\nDiscussed in January, we decided it would be appropriate to stick to original names for these but no one ever got around to it.","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T09:32:40Z","commit_sha":"f9b996519b3a9107d1e10ab450ca88b8fa50f648","commit_message":"Bodyprog: minor fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T07:38:04Z","commit_sha":"a899573b8c8ab6215a9462c43beaf5780b9cb6b1","commit_message":"Bodyprog: add `billboard.h`","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T07:04:24Z","commit_sha":"d25fca610842920503829fe72e9f7813381e11c2","commit_message":"Fix build","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T05:29:24Z","commit_sha":"693ec8cc35684f719b1a32182d14e31c413c394e","commit_message":"Maps: Stalker character deobfuscation","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T04:53:15Z","commit_sha":"d91ee05b43906af8b2bfd308ec15dd4fd71d4fc2","commit_message":"Bodyprog: name `s_800C44F0` fields","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-05T04:33:20Z","commit_sha":"37a8bd40137e72dd20e6c77f82381a95245280a4","commit_message":"Bodyprog: camera const-correctness, move player weapon data file","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T18:55:55Z","commit_sha":"6fe1561134aee34c227d78c2ed9a6f5db5ed2a77","commit_message":"bodyprog: match WorldMap_TexturesInit EUR\n\nfeels like there's a way to simplify this by defining CLUT_X/CLUT_Y for\nthe other builds too, but haven't found any code that matches for them\nyet\n\nCo-authored-by: IWILLCRAFT-M0d <IWILLCRAFT-M0d@users.noreply.github.com>","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T17:12:49Z","commit_sha":"fd331002134bb9d7850e1d29858529127ff0d826","commit_message":"bodyprog: match Screen_BackgroundImgDraw EUR\n\nCo-authored-by: IWILLCRAFT-M0d <IWILLCRAFT-M0d@users.noreply.github.com>","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T15:52:30Z","commit_sha":"64d22a62458f92bbe8adc82ad1330408e8a6f05e","commit_message":"Bodyprog: screen fade naming fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T15:20:58Z","commit_sha":"075f89ae6cd24fb87ce53a0093216c24b2f2ff09","commit_message":"bodyprog: switch #if PAL to macro\n\nCo-authored-by: IWILLCRAFT-M0d <IWILLCRAFT-M0d@users.noreply.github.com>","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T15:12:39Z","commit_sha":"6d4e5093e3ef8179cb0aecc9b6242c9afb482eb5","commit_message":"Bodyprog: shorten `bodyprog/screen` filenames","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T14:49:09Z","commit_sha":"bafc9dfb56c80abb4baac601d77e648f270083f2","commit_message":"Maps: move common files to `common` folder","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T14:32:04Z","commit_sha":"8ec17a1836337cf054f3a994602fa92b7a0ef713","commit_message":"bodyprog: switch common PAL differences to macro instead\n\nCuts down a little of the #if hell, might still be others that can be\nupdated though","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T14:14:06Z","commit_sha":"b5abb53673438db47eda526b11508079490be5e7","commit_message":"Move particle files, name fixups","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T13:46:04Z","commit_sha":"694e4b4c162a3d165c2648b88de15cb49a178c7a","commit_message":"Fix build","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T11:40:45Z","commit_sha":"77f9600989e6bdf4c1e9ecd3cd3f5fbf0d0da4f6","commit_message":"Bodyprog: file shuffling, remove some struct size assets","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T11:27:44Z","commit_sha":"1735792f336cf5618c980fbccf5c32c68b940d9a","commit_message":"Bodyprog: separate DMS format structs","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T11:02:35Z","commit_sha":"e9908dd22558e986f3a08a6e3a8a70400aaf8b77","commit_message":"Bodyprog: file shuffling","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-04T10:35:34Z","commit_sha":"56770e660889bad03df31559b1cab4c3efc32861","commit_message":"Bodyprog: roughly name and organise various files, add constants\n\nWorking with files named `bodyprog_4256781324561342578.c` is no fun, this way it's easier to have a mental model of most current file groups.","measures":{"fuzzy_match_percent":99.97148,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-03T03:02:52Z","commit_sha":"8de3ffaeee0b12b2b8f3029d886b66b03e1a2c20","commit_message":"options: USA build fix","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-03T01:55:59Z","commit_sha":"ab0e74ad1c9d03d6524f39efe24dbe02b7b39073","commit_message":"options/credits: match 7 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T22:33:08Z","commit_sha":"74d0b657b256897a2f006ee904fbfb1a0d340e80","commit_message":"stream: actually finish EUR (movie_main)\n\nmissed that one, oops","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T19:06:47Z","commit_sha":"4fe0b3df8338dc3e4b1da34c97d7fc5890f51d1d","commit_message":"stream: finish EUR","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T19:02:59Z","commit_sha":"437bdf6375a53a8cf26b3da8dd955e876d696c13","commit_message":"b_konami: finish EUR","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T18:58:48Z","commit_sha":"ec2540ed68669805eed4e4af1af638478c347eac","commit_message":"b_konami: match GameState_KcetLogo_Update EUR","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T16:27:28Z","commit_sha":"9238b75a82a50819410bfc87e1d9ba4c0dd908b7","commit_message":"General fixups: docs, function names, etc.","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T16:20:01Z","commit_sha":"e353f1a52f7d72c137425c7d56be72c55d5bd573","commit_message":"b_konami: match BootScreen_KcetScreenDraw","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T16:11:13Z","commit_sha":"0af4e02d0bd2b3fe3cae359bc54e29e3289a7479","commit_message":"b_konami: match BootScreen_KonamiScreenDraw EUR\n\nscreen_data.c images were shifted which made initial mappings wrong,\nlikely need to redo them >.>","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T15:57:04Z","commit_sha":"f1edeeb10d254de0ecadc67a834a127deb04d907","commit_message":"bodyprog: fixups","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-02T15:53:34Z","commit_sha":"33026b2115af6b63fe9bbdf65ad823fcfcc3548b","commit_message":"bodyprog: match EUR `BootScreen_ImageSegmentDraw`\n\nCo-authored-by: IWILLCRAFT-M0d <IWILLCRAFT-M0d@users.noreply.github.com>","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-01T22:33:57Z","commit_sha":"f5b30c1c6ec8349c6a643af5d350ea9990f64bf3","commit_message":"screens: setup EUR ports","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-01T18:19:01Z","commit_sha":"bf9f30687d2a9576e0c27ec252bec952fbf6c189","commit_message":"bodyprog: match 3 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-01T14:42:15Z","commit_sha":"a531323766dd7a5d20e7f5ba8b8ed57a6afd550a","commit_message":"bodyprog: match 2 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-01T14:15:55Z","commit_sha":"9ff5e1f811bd12faf730290cc389c0c83be0eb70","commit_message":"bodyprog: match 4 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-01T09:20:17Z","commit_sha":"86d5570b8bfd3154a3e671e190251f9086ebac2a","commit_message":"Make format specs use little-endian for bits","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-11-01T04:07:01Z","commit_sha":"ab434c9fad4ab61cf9567447657a41a17ef29f9e","commit_message":"Properly document unused DMS fields","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T18:27:38Z","commit_sha":"04735047c6816a75d46b4a17f920a41bc208d95f","commit_message":"bodyprog: match 5 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T17:58:49Z","commit_sha":"48ec5eda89dbb45668fa1b922f54afb6a1a2a485","commit_message":"bodyprog: match 7 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T17:35:57Z","commit_sha":"44f5fe081abaee5da553e5ae52b34abf6323f3e5","commit_message":"bodyprog: fix Demo_Update EUR mismatch","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T17:27:31Z","commit_sha":"e1b944b62f1244e5146d271a96fd4e8e1698215e","commit_message":"bodyprog: match 5 EUR funcs, fixups\n\nPrefer VERSION_REGION_IS for changes that would also exist in any possible EUR v1.1\n(who knows, non-zero chance some post-release proto could show up one day :p)","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136368,"matched_data_percent":35.064693,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T14:58:14Z","commit_sha":"7fc4362ccf36c344d7233dffce6f3ea739b47b3c","commit_message":"bodyprog: match 2 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T11:50:22Z","commit_sha":"9ab01f6590d88ea7264f91e7d7e8f736dd97d2a2","commit_message":"bodyprog: match 3 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T11:14:56Z","commit_sha":"bd8dc2a705e6f2b9b85a467b5318b81b1c0c5406","commit_message":"bodyprog: name 2 funcs, g_OvlItemLang","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T10:40:18Z","commit_sha":"591b1ac4c59125ae99bb1d2a19a9eb1ee5447bd9","commit_message":"bodyprog: match 3 EUR funcs\n\nSeems s_GameWork is extended since this func reads +0x5E0 into\ng_GameWork pointer.\n\nfield_5E0 stores palLanguageId + 1 for some reason, could just be used\nto tell if this code has been ran before - since field_5E0 would be 0 at\nstartup, if it used \"field_5E0 != palLanguageId\" then palLanguageId = 0\nwouldn't trigger this properly, but adding +1 to palLanguagId as a hack\nwould workaround that?\nOr maybe some other part of code also reads 5E0, not sure.","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T10:37:44Z","commit_sha":"ea84af64db5213ca7935c536046fb149231bdbec","commit_message":"IPD deobfuscation","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-31T07:38:01Z","commit_sha":"1a4ee8ce8b653bed5002fad42f469fad5185a0a5","commit_message":"Bodyprog: collision deobfuscation, minor math fixups","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-30T23:48:22Z","commit_sha":"54993a66e0caad5e72a160aa03df8f2382b918b2","commit_message":"Bodyprog: 2 EUR matches\n\nMatches done by @emoose and with little help for cleanup by netcat\n\nCo-authored-by: emoose <1755499+emoose@users.noreply.github.com>","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-29T06:13:30Z","commit_sha":"32268135cf5ba478d699e56d5dc78544d4718000","commit_message":"Run configs formatter","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-29T06:12:53Z","commit_sha":"959ae23186e0895adfab0183fa74d85a81f153a3","commit_message":"Bodyprog: ray collision deobfuscation","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-28T16:47:56Z","commit_sha":"e110719a175a30229a0796db588b7187905d32ca","commit_message":"Bodyprog: collision deobfuscation","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-28T13:16:08Z","commit_sha":"b5432c2374e124098e4c33cf5a51effef47e50f8","commit_message":"Bodyprog: character collision deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-28T11:53:35Z","commit_sha":"dced55429e7e2ddc07c068060a29d9486870a991","commit_message":"Bodyprog: character collision deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-28T08:17:36Z","commit_sha":"f6026b2dc0baf6d5c100fccc4afc14c70d2415a5","commit_message":"Maps: event struct and enum organisation","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-28T07:28:20Z","commit_sha":"264f76905977bde9a5ad649d72bcd90034892dfe","commit_message":"Maps: mass renames","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-28T05:52:45Z","commit_sha":"5b518a6c0363d29d1a9fc0a29984d53333347084","commit_message":"M0S00: Move map messages","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-28T04:54:35Z","commit_sha":"d18085478c135fd2a2c5b665246469ba6fc246e4","commit_message":"Rename all `header_field_D2C.h` -> `collision_triggers.h`","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T16:39:22Z","commit_sha":"0de9bdf5003eb7385b03f2fbfa690110ae070109","commit_message":"Finish up collision triggers","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T15:54:02Z","commit_sha":"fc8b0a6727bb35e7a20a8d8cd3f57a42ebdbce08","commit_message":"Collision deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T12:10:02Z","commit_sha":"3b9a686c490abdf2b771ef064a241c3434c1ee90","commit_message":"Collision trigger deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T11:35:31Z","commit_sha":"f437531b90b2c6f7ad3dfe9dd4a6c5860df94e83","commit_message":"bodyprog: match 6 EUR funcs","measures":{"fuzzy_match_percent":99.97146,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T11:14:08Z","commit_sha":"86591b12d0889e7feb7849ee7db798c591df44be","commit_message":"bodyprog: match SysState_GameOver_Update EUR","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T10:47:55Z","commit_sha":"af443b4673de0d5779020db1f9a34609b664d6bf","commit_message":"bodyprog: match 5 EUR funcs","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T07:08:32Z","commit_sha":"ddaec2008e221582e4dda368d7b782ad13a2ffda","commit_message":"Run configs formatter","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T07:06:33Z","commit_sha":"a3ead310303646e22222690abf404b2c8198471a","commit_message":"Collision deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T06:38:52Z","commit_sha":"d536a2fcef9b9b0b8d28216558a3df0068c570d9","commit_message":"bodyprog: match 4 EUR funcs","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-27T04:47:32Z","commit_sha":"1d8bf47be94bfef1abffcd7cd5612f390379459a","commit_message":"Collision deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-26T15:50:46Z","commit_sha":"b5a5a0ebea542a81cf863380492c776f2bf30222","commit_message":"Collision deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-26T14:30:00Z","commit_sha":"59fd80f8180f18d9d90c3442cc04ed1293786973","commit_message":"Collision deobfuscation progress","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-26T13:25:17Z","commit_sha":"2a9a49b778d3ec2968d371de90f4eccbf1489de3","commit_message":"IPD format progress","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-26T10:02:09Z","commit_sha":"fd121786ed5347b32a180fd5cd3f84e0857a8e50","commit_message":"Update IPD format spec","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-26T09:10:45Z","commit_sha":"7670cd6c314cf87f2d5e6e5b83ee5a33b0f8094f","commit_message":"IPD format progress","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-26T07:43:35Z","commit_sha":"0d3a5159bbf202c8e49caab2158b8f21d49d62f2","commit_message":"IPD format deobfuscation, Fix `CHECK_FLAG_IDX`, cleaner floats","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-26T06:31:28Z","commit_sha":"3a4df7aa583c498370af7451b026562fe3a2d684","commit_message":"IPD collision flags deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-26T04:54:29Z","commit_sha":"5737db01c930c59f513f768988ecf1246f452eb5","commit_message":"IPD format progress","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-25T16:13:47Z","commit_sha":"1a327853e2d19f3c38664430b7e34a60c0cbce12","commit_message":"IPD and collision format progress","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-25T12:25:00Z","commit_sha":"726d27174745c970fd0afb718fca62403f8e8622","commit_message":"Misc macro/TODO fixups","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-25T11:47:34Z","commit_sha":"c01ae9fbafcb63ef668abf8ca121753d36663e56","commit_message":"Math_SetSVectorFast fixups","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-25T08:37:26Z","commit_sha":"6c97b46d08df0ba7512d935390d1871f592a9a16","commit_message":"IPD format progress","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-25T03:07:42Z","commit_sha":"c1ba506c1c7bddc8c5190e4b36ee78b04e2d24fc","commit_message":"libkpad: remove u8 cast","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-25T02:54:39Z","commit_sha":"664369f3f77d8fcd0cca2a1c16959010d3277ee6","commit_message":"libkpad: function naming, .c header","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-24T10:49:52Z","commit_sha":"ef3e847ce657df66719c4868ec6a833eafbdba92","commit_message":"Bodyprog: misc. doc fixups and demagicking","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-24T09:10:12Z","commit_sha":"d0537327093e352670517bddb4deca4254c1409a","commit_message":"bodyprog: match 2 EUR funcs\n\nSeems fixed by MapMsgIdx change in last commit","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-24T09:06:13Z","commit_sha":"8a76b357941f18e069ece897d854fd025dc61196","commit_message":"map5_s02: port to EUR\n\nPorted to check if JAP2 change in map5_s02 code was included (`Game_TurnFlashlightOn` call)\nseems EUR is missing it though, could just be something that was added between EUR and JAP2.\n- TODO: check other maps that have JAP1/JAP2 code changes\n\nLot more EUR-exclusive vc_road_data changes here too, guess we'll see these a lot >.>\n\nAlso fixed map_msg.h enum (had to remove enum indexes past the member EUR added in though)\nSome of the nonmatched bodyprog funcs made use of this enum afaik, maybe this would help them match now...","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-24T06:00:13Z","commit_sha":"2b83525d176de09489b00f3f02ac8f918440a546","commit_message":"Bodyprog: add IPD term glossary","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-24T05:47:33Z","commit_sha":"0ac946d5b0ab725ec0dcc01e745c3842eb690825","commit_message":"Bodyprog: floor type demagicking","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-24T05:33:11Z","commit_sha":"45b60faa625a217924a3ee9aa2ecf3abd25781d2","commit_message":"Bodyprog: `Screen_BackgroundMotionBlur` (EUR) match","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-24T03:42:10Z","commit_sha":"e40a59d2e65e51294dff0f94567ea5aaeea735b4","commit_message":"Bodyprog: `func_800808AC` -> `Collision_FloorTypeGet`","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-24T03:35:14Z","commit_sha":"de109aaea06a44dce8d04b2bec7de21333d7319c","commit_message":"Bodyprog: \"ground\" -> \"floor\"\n\nFloor/ceiling term pair fits better and is more conventional for this type of collision system.\n\nAt first I used \"ground\" to arbitrarily differentiate SH from Tomb Raider terminology and because it was assumed the game didn't have a concept of ceilings. It was later discovered it in fact does, so continuing to use \"ground\" no longer makes sense.","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T19:08:08Z","commit_sha":"ad42d2f91dfddc2c712df99d2f97043d750e554d","commit_message":"tools: fix iconv_sjis_wrapper.py for EUR","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T16:33:44Z","commit_sha":"148c91fad41bf8df7008f3f3bbb1ad30fc158c15","commit_message":"Bodyprog: collision docs","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T16:00:10Z","commit_sha":"bf1e01345a001e9247b9b10a6525168dba5edc68","commit_message":"Bodyprog: purge remaining instances of \"subcell\"","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T15:32:13Z","commit_sha":"ce0ca3db19092fa180701e5882db5ec23d005ca5","commit_message":"Update configs formatter","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T15:28:36Z","commit_sha":"4220b72d467f72fd6378d9d1f1d82ffe18437d84","commit_message":"Bodyprog: collision deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T14:07:36Z","commit_sha":"9d4d910d5388903605fe60982be7b56ca2cdaf80","commit_message":"Bodyprog: collision deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T12:36:49Z","commit_sha":"b0767dda2a0ecbc91112b967d725125db7efd250","commit_message":"Bodyprog: map chunk deobfuscation","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T09:16:36Z","commit_sha":"859b0b94635e060f5084b764bf45d996db94ac31","commit_message":"Bodyprog: `e_SpawnFlags` -> `e_CharaSpawnFlags`","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T09:11:15Z","commit_sha":"8b7209f19ab419997757551c219d4a9f4ad66397","commit_message":"Bodyprog: organise enums","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T08:54:37Z","commit_sha":"b065acac04401ca0770396b8a61be02fc272107e","commit_message":"Bodyprog: move `CELL_XZ` macro","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T07:24:29Z","commit_sha":"c605dbd41d133c434b45782888e43a30314f8022","commit_message":"Bodyprog: header shuffling","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T06:18:29Z","commit_sha":"82f2385cc57a1e2882df1cef93e7c325438a7f45","commit_message":"Bodyprog - EUR: Moved function\n\nalso fixed ninja_config.py to work with the other releases.","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T05:36:55Z","commit_sha":"449329d5c49f1562736bcbc58c20bce07f8b7497","commit_message":"Bodyprog: move screen-related macros to `bodyprog/screen/screen_data.h`","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-23T05:23:15Z","commit_sha":"5b069bf2c6e1a09506b7283a67fb044907800e1f","commit_message":"Bodyprog: `s_Keyframe` -> `s_CharaKeyframe`, minor formatting fixups","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-22T22:10:03Z","commit_sha":"8a16aab925373696eaec2935dfe4f4c012b139e8","commit_message":"bodyprog: match 4 EUR funcs, add `SECONDS_TO_FRAMES` macro\n\nPAL uses 50Hz tickrate in some functions, usually as part of\nSECONDS_60_FPS calls\nChanging TICKS_PER_SECOND to 50 breaks a bunch of code though,\nso added a separate SECONDS_TO_FRAMES macro that replaces\nSECONDS_60_FPS in code that does change in PAL. (unsure if any code\nmight have still used SECONDS_60_FPS yet though, seems some things must\nstill be timed for 60 since TICKS_PER_SECOND change broke stuff)","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-22T21:32:51Z","commit_sha":"cff38422fce4037342ca7bba9b691d6d86c8718f","commit_message":"bodyprog: match 4 EUR funcs","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-22T21:14:53Z","commit_sha":"df08994979892d8295b71373bf25309f0c8bacbe","commit_message":"EUR: migrate bodyprog to C (~75 nonmatchings)\n\nLooks like text code is a big part, kinda expected, but there's a bunch\nof other random functions changed too, eg `view` camera has a couple\nchanged for some reason\n\nCould be changes for 50Hz, or maybe PAL resolution related?\n\nHad to add some hacks to include data/bss for statics in the nonmatching\nfuncs, should be removable once func is matchedc","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T20:05:14Z","commit_sha":"405a62166af93385d8f71c0ae98782b7b5ad3202","commit_message":"EUR: match main EXE, add reports","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T15:09:19Z","commit_sha":"52822921798d78290701aa6985f67675499f02af","commit_message":"saveload: match SaveScreen_MemCardStateDraw JPN\n\njust 2 unnamed non-matchings left\n\ntodo: might be better to put USA strings above the JPN ones here, maybe\nstrIdx could use an enum in this func as well","measures":{"fuzzy_match_percent":99.9715,"total_code":2891840,"matched_code":2891016,"matched_code_percent":99.97151,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6546,"matched_functions_percent":99.96946,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T13:36:02Z","commit_sha":"122234f4679bbcba53bfc8ade575607d96d09a3c","commit_message":"saveload: match SaveScreen_WriteOptionsStepDraw JPN","measures":{"fuzzy_match_percent":99.9383,"total_code":2891840,"matched_code":2890056,"matched_code_percent":99.93831,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6545,"matched_functions_percent":99.954185,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T11:11:49Z","commit_sha":"19ee0e0bce26089114c5a16d52697b7bdd7eb4ce","commit_message":"saveload: match SaveScreen_FileIdxDraw JPN","measures":{"fuzzy_match_percent":99.905785,"total_code":2891840,"matched_code":2889116,"matched_code_percent":99.90581,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6544,"matched_functions_percent":99.93891,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T09:22:37Z","commit_sha":"152f1b48a08610ec7fe4bf7c13cccf6c21fbbbef","commit_message":"saveload: fix JPN rodata","measures":{"fuzzy_match_percent":99.883675,"total_code":2891840,"matched_code":2888476,"matched_code_percent":99.883675,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6543,"matched_functions_percent":99.92364,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T09:12:25Z","commit_sha":"894a3d4a23e14461f76d9b733b9fd69f8251612a","commit_message":"saveload: match SaveScreen_SavesSlotDraw JPN","measures":{"fuzzy_match_percent":99.88366,"total_code":2891840,"matched_code":2888476,"matched_code_percent":99.883675,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6543,"matched_functions_percent":99.92364,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T07:54:44Z","commit_sha":"bf72863666e818643846c4541aad3855d57b287c","commit_message":"saveload: minor fixups","measures":{"fuzzy_match_percent":99.793625,"total_code":2891840,"matched_code":2885872,"matched_code_percent":99.793625,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6542,"matched_functions_percent":99.90837,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T07:42:03Z","commit_sha":"791959dbb63b1390cd2f374d53051651b927eea6","commit_message":"saveload: match 1 JPN func, fixup unused string arrays\n\nFound a fix for the unused string arrays in some files, array just\nneeds `const char* const`, then reads from it will act like normal\nstring reads\n\nFixed a couple tables we had but there might still be others\naround","measures":{"fuzzy_match_percent":99.793625,"total_code":2891840,"matched_code":2885872,"matched_code_percent":99.793625,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6542,"matched_functions_percent":99.90837,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T06:14:59Z","commit_sha":"c1c6940775305f1a10f3df6bd5839d4f26eefe34","commit_message":"saveload: match 3 JPN funcs","measures":{"fuzzy_match_percent":99.75089,"total_code":2891840,"matched_code":2884636,"matched_code_percent":99.750885,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6541,"matched_functions_percent":99.8931,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T05:38:01Z","commit_sha":"129d1bd21a41d712446c27988bcde8edfdba1838","commit_message":"JPN: port saveload (10 non-matching funcs)","measures":{"fuzzy_match_percent":99.712296,"total_code":2891840,"matched_code":2883520,"matched_code_percent":99.712296,"total_data":388904,"matched_data":136252,"matched_data_percent":35.034866,"total_functions":6548,"matched_functions":6538,"matched_functions_percent":99.84728,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T05:25:00Z","commit_sha":"1af73075accd8bae8382c0e47589d299a0022616","commit_message":"objdiff_generate: fix certain units being skipped if `data` in name","measures":{"fuzzy_match_percent":99.267166,"total_code":2891840,"matched_code":2870648,"matched_code_percent":99.26718,"total_data":386428,"matched_data":136080,"matched_data_percent":35.21484,"total_functions":6548,"matched_functions":6514,"matched_functions_percent":99.48076,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":148,"complete_units":0}},{"timestamp":"2026-10-21T03:18:47Z","commit_sha":"66857214a90ddddf2ac5b1d1f52a70e46fe47f2e","commit_message":"sound_data: migrate JPN data\n\nadded g_AudioData generation to extract.py, oddly this shows\nMEP102/MEP103 sizes don't match in the table vs the rom, unsure\nif this affects anything ingame\n\nTODO: could be worth creating an audioenum file too to define each index\nin the table, need to check how table gets indexed first","measures":{"fuzzy_match_percent":99.267166,"total_code":2891840,"matched_code":2870648,"matched_code_percent":99.26718,"total_data":351924,"matched_data":119580,"matched_data_percent":33.978928,"total_functions":6548,"matched_functions":6514,"matched_functions_percent":99.48076,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T15:05:56Z","commit_sha":"3939dac3fe91ceb3eceac64fe6ac941dee28078b","commit_message":"Bodyprog: minor collision deobfuscation, const correctness","measures":{"fuzzy_match_percent":99.267166,"total_code":2891840,"matched_code":2870648,"matched_code_percent":99.26718,"total_data":351924,"matched_data":119580,"matched_data_percent":33.978928,"total_functions":6548,"matched_functions":6514,"matched_functions_percent":99.48076,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T14:26:28Z","commit_sha":"92696bb6a59d0a120db5bae30ba3be6f989a64ae","commit_message":"text_draw: add JPN data","measures":{"fuzzy_match_percent":99.267166,"total_code":2891840,"matched_code":2870648,"matched_code_percent":99.26718,"total_data":351924,"matched_data":119580,"matched_data_percent":33.978928,"total_functions":6548,"matched_functions":6514,"matched_functions_percent":99.48076,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T14:02:27Z","commit_sha":"aff678cbf0f8f9fd1ba1f32d97f941c944dfadbe","commit_message":"text_draw: merge in JPN funcs","measures":{"fuzzy_match_percent":99.267166,"total_code":2891840,"matched_code":2870648,"matched_code_percent":99.26718,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6514,"matched_functions_percent":99.48076,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T12:38:17Z","commit_sha":"a7580d8e95d4f1126accbff71615ce5b27cbb665","commit_message":"Bodyprog: collision deobfuscation","measures":{"fuzzy_match_percent":99.26303,"total_code":2891840,"matched_code":2870528,"matched_code_percent":99.26303,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6513,"matched_functions_percent":99.465485,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T12:13:29Z","commit_sha":"c0ef2ab15eed05f98247160355a67c0cf8ee5750","commit_message":"bodyprog: Gfx_Inventory_ItemDescriptionDraw JPN, fixups","measures":{"fuzzy_match_percent":99.26303,"total_code":2891840,"matched_code":2870528,"matched_code_percent":99.26303,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6513,"matched_functions_percent":99.465485,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T07:14:57Z","commit_sha":"30f254e58c85c642f89dcb902b6198b483cd1741","commit_message":"text_draw_jp: match Gfx_MapMsg_StringDraw, sym names\n\nNamed some syms based on text_draw.c, it might be possible to merge\nthe JP funcs back into that now, will look into it more soon\n\nCo-authored-by: belek666 <belek666@users.noreply.github.com>","measures":{"fuzzy_match_percent":99.14434,"total_code":2891840,"matched_code":2867096,"matched_code_percent":99.14435,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6512,"matched_functions_percent":99.45021,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T06:36:18Z","commit_sha":"91cc2ed367815d8d9c973fe7c8d324741a658e90","commit_message":"misc: prim fixups","measures":{"fuzzy_match_percent":99.07062,"total_code":2891840,"matched_code":2864964,"matched_code_percent":99.070625,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6512,"matched_functions_percent":99.45021,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T06:16:24Z","commit_sha":"87a47538ee39c2809ab4a9bb4959c717ee1fd4fc","commit_message":"text_draw_jp: match 2 JPN funcs, prim fixups\n\nCo-authored-by: belek666 <belek666@users.noreply.github.com>","measures":{"fuzzy_match_percent":99.07062,"total_code":2891840,"matched_code":2864964,"matched_code_percent":99.070625,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6512,"matched_functions_percent":99.45021,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T05:22:55Z","commit_sha":"1f46bfcce421cf168d11928a49222d055814f0a9","commit_message":"demo: fix JPN reloc issue, add 3 missing bodyprog syms","measures":{"fuzzy_match_percent":98.99854,"total_code":2891840,"matched_code":2862880,"matched_code_percent":98.99856,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6510,"matched_functions_percent":99.41967,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T04:59:21Z","commit_sha":"3dd6c5f074eb95bd1240ddd0478c72b95ad3ef1c","commit_message":"text_draw_jp: func_8004C8D8, rodata cleanup","measures":{"fuzzy_match_percent":98.99854,"total_code":2891840,"matched_code":2862096,"matched_code_percent":98.97145,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6508,"matched_functions_percent":99.38912,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T04:21:11Z","commit_sha":"9c5cd2bd7c5efc16e8b3bec14022613090c75d4d","commit_message":"Bodyprog: header shuffling","measures":{"fuzzy_match_percent":98.99632,"total_code":2891840,"matched_code":2862032,"matched_code_percent":98.96924,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6507,"matched_functions_percent":99.373856,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T03:51:33Z","commit_sha":"a22e14e80c30ecb137a927eca36fb1190c29caba","commit_message":"options: GameState_Options_Update JPN, text_draw_jp func_8004C918\n\nfunc_8004C918 was matched 7 months ago lel, thanks Clever Clam on\ndecomp.me","measures":{"fuzzy_match_percent":98.99631,"total_code":2891840,"matched_code":2862032,"matched_code_percent":98.96924,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6507,"matched_functions_percent":99.373856,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T03:28:16Z","commit_sha":"d4fc9903ba85c381aca89bc873ee3972c2c3182f","commit_message":"Maps: BGM flag demagicking","measures":{"fuzzy_match_percent":98.928116,"total_code":2891840,"matched_code":2860060,"matched_code_percent":98.90105,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6505,"matched_functions_percent":99.343315,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T03:06:30Z","commit_sha":"9e7ebc0a1f3ae17f721764ec1ffd5c1568ca9cac","commit_message":"options: func_801E6F1C JPN\n\nalso try excluding safechk.s from report (TODO: add the safechk bins to\nJPN1/JPN2 too)","measures":{"fuzzy_match_percent":98.928116,"total_code":2891840,"matched_code":2860060,"matched_code_percent":98.90105,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6548,"matched_functions":6505,"matched_functions_percent":99.343315,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-20T02:38:18Z","commit_sha":"bdbe8055426f12dabe7f7e71651afbd3de0cb5cb","commit_message":"options: func_801E749C JPN","measures":{"fuzzy_match_percent":98.73332,"total_code":2896120,"matched_code":2858652,"matched_code_percent":98.70627,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6560,"matched_functions":6504,"matched_functions_percent":99.14634,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-20T02:07:56Z","commit_sha":"7e7f5b18320ec56a51b6ad317438261c20e23c38","commit_message":"Bodyprog: move and rename bone and animation source files","measures":{"fuzzy_match_percent":98.69189,"total_code":2896120,"matched_code":2857452,"matched_code_percent":98.66483,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6560,"matched_functions":6503,"matched_functions_percent":99.131096,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-20T01:42:21Z","commit_sha":"2e83b33b995ee8e7da431ab9cc677cd6b183cfad","commit_message":"Bodyprog: minor bone handling deobfuscation, run configs formatter","measures":{"fuzzy_match_percent":98.691864,"total_code":2896120,"matched_code":2857452,"matched_code_percent":98.66483,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6560,"matched_functions":6503,"matched_functions_percent":99.131096,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-20T01:12:15Z","commit_sha":"5bc84cb61187436691dd61f82a32a9e4f3cb741e","commit_message":"options: func_801E794C JPN","measures":{"fuzzy_match_percent":98.691864,"total_code":2896120,"matched_code":2857452,"matched_code_percent":98.66483,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6560,"matched_functions":6503,"matched_functions_percent":99.131096,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T22:46:53Z","commit_sha":"a165ee92f173e69c2858ad5e1751edb67789b55a","commit_message":"options: port to JPN (4 nonmatchings)","measures":{"fuzzy_match_percent":98.6623,"total_code":2896120,"matched_code":2856596,"matched_code_percent":98.63528,"total_data":351768,"matched_data":119544,"matched_data_percent":33.98376,"total_functions":6560,"matched_functions":6502,"matched_functions_percent":99.11585,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T21:59:10Z","commit_sha":"16aa0fa38620402c481a50c90f4f33edf14f7560","commit_message":"credits: port to JPN versions","measures":{"fuzzy_match_percent":98.13104,"total_code":2894720,"matched_code":2839836,"matched_code_percent":98.104,"total_data":348596,"matched_data":119480,"matched_data_percent":34.27463,"total_functions":6561,"matched_functions":6477,"matched_functions_percent":98.71971,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T20:48:05Z","commit_sha":"99474347e23aea4484dd9d26edfc34dbb16788ef","commit_message":"JPN: version comment fixups\n\nSome of the JPN2 checks could still be wrong, might be changes that were\nadded in EUR instead","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T20:42:25Z","commit_sha":"3fce82f1c01ea147a47b396bdf69c0161e4ac667","commit_message":"JPN1/JPN2: use psyq libs","measures":{"fuzzy_match_percent":97.78452,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T08:45:06Z","commit_sha":"b36930f8df93abec1fedc206708c0452823f9558","commit_message":"maps: minor fixups","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T08:23:09Z","commit_sha":"d2e39a71c3f1245cd21370dd7f0bc8da1972551e","commit_message":"JPN1/JPN2: port MAP6\n\nJAP1+ adds extra ANIM/PARK.DMS file load to M6S04\n(map already has a load of that earlier too, maybe that got skipped\nin some instances?)\n\nJAP2 adds extra code in M6S02 Map_WorldObjectsUpdate, some 1-frame delay\nbefore it adds flag to D_800C4414?","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T07:43:26Z","commit_sha":"c523ddc041dcd1230b9f231f6e895ce2c8904d10","commit_message":"JPN1/JPN2: port MAP5\n\nFirst code change, adds Game_TurnFlashlightOn call to MapEvent_KaufmannBarFightCutscene (JAP2 only)\n\nJAP1+ changed 2 vc_road_data.h entries in M5S01","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T07:26:32Z","commit_sha":"3c56db912821e593bf21326a7a3af94c70753b0d","commit_message":"JPN1/JPN2: port MAP4\n\nOnly difference in JPN1+ is a vc_road_data.h entry","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T06:37:30Z","commit_sha":"4ea10044ad5f47131d6b84902579389bc2ed6202","commit_message":"JPN1/JPN2: port MAP3\n\nNo code diffs from JAP0/USA\nJAP1+ removes one entry from vc_road_data.h in M3S00/M3S01/M3S06, looks\nlike an empty entry that was probably unused","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T05:39:15Z","commit_sha":"074d39bb3f6b3f5036ef040ae8f3cdc215f5d6da","commit_message":"JPN1/JPN2: port MAP2\n\nNo code diffs, a map2_s00 map point had same changes as USA did\nchanged from REGION_IS(NTSC) to EQUAL_OR_NEWER(USA)\n\nmap2_s02 has one vc_road_data entry changed in JAP1 onwards","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T05:24:22Z","commit_sha":"902a7f6c344241ac3f2b69ad023682b1da13d6e8","commit_message":"JPN1/JPN2: port MAP1\n\nNo code changes, vc_road_data has some camera limits adjusted from JAP1\nonwards","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T05:07:58Z","commit_sha":"12d51255663b5f24fa0f3b2e87d4676baf0004f7","commit_message":"JPN1/JPN2: port MAP0\n\nNo code changes from JAP0, only difference is different map message idx used in some events\nmaybe a bugfix","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T04:58:22Z","commit_sha":"fd9b06b699251520cd08dc9f54340ff453f07b13","commit_message":"JPN0: add D_801E8918 ignored symbol","measures":{"fuzzy_match_percent":97.78448,"total_code":2894720,"matched_code":2829804,"matched_code_percent":97.75743,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6454,"matched_functions_percent":98.36915,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T04:46:31Z","commit_sha":"d70fcf6e4995e9300faa47c8a0a3761dbbde1f16","commit_message":"JPN0: add scratchpad sym","measures":{"fuzzy_match_percent":97.78443,"total_code":2894720,"matched_code":2829488,"matched_code_percent":97.74651,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6451,"matched_functions_percent":98.323425,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T04:05:08Z","commit_sha":"4236d71e5238691b796df2acbf83d643cff3bfca","commit_message":"JPN0: port MAP7 to C\n\nMap messages reordered, only code diffs are in map7_s03 which is missing some\nCharaAnimCmdExecute calls in the JAP0 cutscenes, guess those scenes might play\na bit different in that first release?\n\nScreens still unported, probably harder than maps were since a lot of them\nmight be text related\nHoping jap1/jap2 should port pretty easy now messages are in place...","measures":{"fuzzy_match_percent":97.78302,"total_code":2894720,"matched_code":2709120,"matched_code_percent":93.588326,"total_data":343780,"matched_data":117524,"matched_data_percent":34.185818,"total_functions":6561,"matched_functions":6398,"matched_functions_percent":97.515625,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T03:43:08Z","commit_sha":"fc619ec60c793ce4cc0e1ba442cd7f4a65a0930b","commit_message":"JPN0: port MAP6 to C\n\nNo map message reordering thankfully, only change is func_800E73B4 calls\ninto func_8005F6B0 with different param","measures":{"fuzzy_match_percent":86.73584,"total_code":2894720,"matched_code":2394568,"matched_code_percent":82.72192,"total_data":305340,"matched_data":95596,"matched_data_percent":31.308048,"total_functions":6561,"matched_functions":5657,"matched_functions_percent":86.22161,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T03:25:06Z","commit_sha":"c4be75cc2e12b9b8f11bc435d0323dce13e90fef","commit_message":"JPN0: port MAP5 to C\n\nMap message reordering, map5_s03 also has the newspaper bug in JPN0 too, changed\nthe check to `VERSION_EQUAL_OR_NEWER(JAP1)`\n(unsure if JAP1 actually did fix it or if it was EUR though, guess we'll know soon)","measures":{"fuzzy_match_percent":74.02414,"total_code":2894712,"matched_code":2042556,"matched_code_percent":70.56163,"total_data":276680,"matched_data":82416,"matched_data_percent":29.787481,"total_functions":6560,"matched_functions":4964,"matched_functions_percent":75.67073,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T02:58:13Z","commit_sha":"4601b92fae004d4de71ea7562070cedbbff4ccd3","commit_message":"JPN0: port MAP4 to C\n\nMap messages reordered, floatstinger.c adds an @bugfix\n\nAdded port_map.py helper script for porting maps over, might come in\nuseful for EUR stuff later","measures":{"fuzzy_match_percent":64.83948,"total_code":2891768,"matched_code":1780420,"matched_code_percent":61.568565,"total_data":255032,"matched_data":79664,"matched_data_percent":31.236862,"total_functions":6558,"matched_functions":4404,"matched_functions_percent":67.154625,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T02:31:24Z","commit_sha":"47a1f28e6afcf0ef79fe895c9546845b425a9c61","commit_message":"JPN0: port MAP3 to C\n\nMap messages reordered, and map3_s04 func_800D2668 adds\n`VERSION_EQUAL_OR_NEWER(USA)` around Game_TurnFlashlightOn call","measures":{"fuzzy_match_percent":54.338284,"total_code":2891768,"matched_code":1495676,"matched_code_percent":51.72185,"total_data":228832,"matched_data":76956,"matched_data_percent":33.629913,"total_functions":6558,"matched_functions":3735,"matched_functions_percent":56.953342,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T01:17:08Z","commit_sha":"ffcd6818f6ca874b6c6bebe12b0c731291b84c7c","commit_message":"JPN0: port MAP1 to C\n\nMostly just map message reordering, easy port\n\nNo version changes other than Grey Child being replaced with Mumbler,\nadded to e_CharaId as `Chara_GreyChildOrMumbler`","measures":{"fuzzy_match_percent":46.828777,"total_code":2883616,"matched_code":1278344,"matched_code_percent":44.331284,"total_data":206920,"matched_data":66480,"matched_data_percent":32.128357,"total_functions":6555,"matched_functions":3168,"matched_functions_percent":48.32952,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-19T00:36:32Z","commit_sha":"852fc3faacf68bbf7875a64030f72b57ee5ecfa9","commit_message":"JPN0: port MAP2 maps to C\n\nNo major changes besides some map message renumbering\n(could mean they were using some kind of enum for map messages?\nsince the message added in USA had bumped all indexes by 1\nnot too sure though, maybe the later JPN1 releases will show if they\nkept the same indexes as USA or switched back)\n\nair_screamer adds another `VERSION_EQUAL_OR_NEWER(USA)` bug-fix change\nmap2_s00 Map_WorldObjectsInit also adds an extra check under `VERSION_EQUAL_OR_NEWER(USA)`\nand also has one point in map_points slightly changed, unsure what that's actually affecting though","measures":{"fuzzy_match_percent":35.52985,"total_code":2883616,"matched_code":976516,"matched_code_percent":33.86429,"total_data":183448,"matched_data":61892,"matched_data_percent":33.73817,"total_functions":6555,"matched_functions":2674,"matched_functions_percent":40.79329,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-18T23:35:57Z","commit_sha":"590988dc39589cdf2feb80ae9b4da8ea25591658","commit_message":"JPN0: port 8 maps to C\n\nmap0_s01, map0_s02, map1_s04, map1_s05, map3_s02\n(and empty map4_s00, map4_s06, map6_s05)\n\nPorted USA splits to JAP0 for these maps and updated with JPN text\n\nair_screamer has some changes that were probably bug fixes in NTSC onwards,\nwill check with JAP1 soon to confirm","measures":{"fuzzy_match_percent":25.180904,"total_code":2881536,"matched_code":679848,"matched_code_percent":23.59325,"total_data":157060,"matched_data":28056,"matched_data_percent":17.863235,"total_functions":6554,"matched_functions":1998,"matched_functions_percent":30.4852,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":145,"complete_units":0}},{"timestamp":"2026-10-18T22:57:07Z","commit_sha":"5159e20aa67dc2d574e2b4bb924fb7a50e5fe840","commit_message":"maps: merge character code includes into main TU of maps\n\nAfter experimenting it seems having the particle/player/character code in the\nsame TU as MAP_MESSAGES is needed for the right alignment padding to get used\n\nIdeally we'd have seperate TU splits for them, and for each character, but this\nbreaks the alignment between data, which doesn't seem can be fixed\nproperly with compiler/linker-script changes :(\n\n(some maps did work with characters split, as we did already, but it's a mess\nof some maps using splits and some using includes, this change finally makes all\nmaps include characters the same way)\n\nThis will make improving data % even harder - objdiff only scores data sections\nin each single TU as 0% or 100%, and now we're merging even more code/data into\neach TU :/\n\nOn bright side this should simplify JAP porting, and with the proper inner-TU\nalignment it removes some awkward pad splits too\n\n(later we might be able to make the character includes be based on HAS_Chara_X\ndefines too, for now it's fine to include them manually though)","measures":{"fuzzy_match_percent":18.46267,"total_code":2879080,"matched_code":500084,"matched_code_percent":17.369576,"total_data":139424,"matched_data":27424,"matched_data_percent":19.669497,"total_functions":6553,"matched_functions":1435,"matched_functions_percent":21.898367,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":143,"complete_units":0}},{"timestamp":"2026-10-18T22:20:34Z","commit_sha":"63a7440e730f49e8d95fa5e10e826609f6e6f18f","commit_message":"progress.yml: add JAP1/JAP2 and fix bss non-zero issues\n\nnon-zero bss in jap1/jap2 also showed some bss we had in C wasn't actually part of code","measures":{"fuzzy_match_percent":18.46267,"total_code":2879080,"matched_code":500084,"matched_code_percent":17.369576,"total_data":139412,"matched_data":27832,"matched_data_percent":19.963848,"total_functions":6553,"matched_functions":1435,"matched_functions_percent":21.898367,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":147,"complete_units":0}},{"timestamp":"2026-10-18T21:46:31Z","commit_sha":"eb402a01efb2993e410bc4fc8e0c63d154175bfe","commit_message":"progress.yml: use serial num for USA/JAP0 reports","measures":{"fuzzy_match_percent":18.46267,"total_code":2879080,"matched_code":500084,"matched_code_percent":17.369576,"total_data":139428,"matched_data":27836,"matched_data_percent":19.964426,"total_functions":6553,"matched_functions":1435,"matched_functions_percent":21.898367,"complete_code":0,"complete_code_percent":0,"complete_data":0,"complete_data_percent":0,"total_units":147,"complete_units":0}}]