ITADN

Decompile ~40 missing functions across engine subsystems

#421Pull Requestbobberb 创建于 2026-04-09
B
bobberbcommented
## Summary Batch decompilation of approximately 40 previously-stubbed functions across multiple engine subsystems, plus related fixes and cleanups. This brings several modules closer to full decompilation coverage. ## Decompiled Functions by Module ### General / Utility - **stdBmp** (new file): `stdBmp_Load`, `stdBmp_Save` — BMP image load/save with palette and 24-bit support - **stdLbm** (new file): `stdLbm_Compress` — PackBits RLE encoder for IFF ILBM format - **stdFont**: `stdFont_Draw4`, `stdFont_Draw3`, `stdFont_Draw2`, `stdFont_DrawText`, `stdFont_sub_434BD0`, `stdFont_MeasureText` — full text rendering pipeline - **stdBitmap**: `stdBitmap_LoadFromFilePointer`, `stdBitmap_Alloc`, `stdBitmap_AllocEntry`, `stdBitmap_ParseEntry` — bitmap serialization and allocation - **stdColor**: `stdColor_ColorConvertOneRow`, `stdColor_ColorConvertOnePx`, `stdColor_ColorConvertOnePxBgra`, and remaining conversion helpers - **stdPalEffects**: `stdPalEffects_FlushAllEffects`, `stdPalEffects_SetDirect`, `stdPalEffects_ResetEffect`, remaining palette effect management - **stdFileUtil**: `stdFileUtil_FullPath`, `stdFileUtil_WcharFullPath`, `stdFileUtil_NewFind2`, `stdFileUtil_ParseExt`, `stdFileUtil_DirExists`, `stdFileUtil_RmDir` — path and file search utilities - **stdStrTable**: `stdStrTable_GetValue`, `stdStrTable_SetValue` — string table key-value operations - **util**: `util_RectUnion`, `util_RectOverlap`, `util_RectOverlapOther`, `util_RectIsOverlap` — rectangle geometry operations - **std**: `stdGetReturnString` — return string accessor ### Engine / World - **sithCollision**: `sithCollision_SearchRadiusForThings`, `sithCollision_CheckLineCrossesMesh`, `sithCollision_CheckSphereAgainstFace` — raycast and collision detection - **sithIntersect**: `sithIntersect_sub_508070` — face intersection test - **sithSurface**: `sithSurface_New`, `sithSurface_AllocateAdjoins` — surface/adjoin allocation - **sithSector**: `sithSector_New`, `sithSector_NewEntry` — sector allocation - **sithPlayer**: `sithPlayer_Open`, `sithPlayer_GetBinAmt`, `sithPlayer_SetBinAmt`, `sithPlayer_GetNumBins` — player init and inventory bin accessors ### Cog / Scripting - **sithCog**: `sithCog_SendSimpleMessage`, `sithCog_ThingSendMessage`, `sithCog_SectorSendMessage`, `sithCog_SurfaceSendMessage`, `sithCog_ThingSendMessageEx`, `sithCog_ProcessCogs` — full COG message dispatch system ### Networking - **sithMulti**: `sithMulti_SyncScores`, `sithMulti_FreeThing`, `sithMulti_SendWelcome`, `sithMulti_SyncThing`, `sithMulti_SyncThingFull`, `sithMulti_SendFireProjectile` — multiplayer state sync ### Input / Control - **sithControl**: `sithControl_SetFuncType`, `sithControl_ClearAllBindings` — input binding management ### Animation - **rdPuppet**: `rdPuppet_UpdateJoints`, `rdPuppet_BuildJointMatrices` — puppet joint animation - **sithAnimClass**: `sithAnimClass_GetByName` — animation class lookup - **jkSaber**: `jkSaber_UpdateCollision`, `jkSaber_SpawnSparks` — lightsaber collision and effects - **sithAIAwareness**: `sithAIAwareness_AddEntry` — AI awareness entry creation ### Platform - **stdPlatform**: `stdPlatform_GetTimeMsec`, `stdPlatform_Assert`, `stdPlatform_Printf` — platform utility functions ## Other Changes - **370 missing hooks added** (`main.c`): Hook registrations for all newly decompiled functions, enabling runtime swapping between original and decompiled implementations - **Fix vendored lib install paths**: Added `-DCMAKE_INSTALL_LIBDIR=lib` to cmake ExternalProject builds to fix lib64 path issues on some Linux distros - **Rename `sub_` functions**: Renamed several `sub_XXXXXX` stubs to descriptive names based on decompilation analysis (e.g., `sithControl_sub_4D6910` → `sithControl_SetFuncType`) - **Fix compiler warnings** in stdBmp and stdFont (signedness, unused variables) - **Fix build errors** found during nix flake setup - **Fix MinGW cross-compile error** in `stdFileUtil_DirExists` — missing `struct` keyword for `_WIN32_FIND_DATAA` ## Build Verification | Platform | Toolchain | Result | Notes | |----------|-----------|--------|-------| | Linux x86_64 | GCC 14.3 (nix-shell) | **Pass** | 18M binary, no errors. Pre-existing `warn_unused_result` warnings in main.c only. | | Windows x86_64 | MinGW GCC 14.3 cross-compile | **Pass** | All new decomp code compiles clean. Pre-existing upstream errors in `jkCredits.c`, `jkGUIRend.c`, `stdPlatform.c` due to GCC 14 strictness (`-Wint-conversion`, `-Wincompatible-pointer-types` promoted to errors); upstream CI uses GCC 13 which treats these as warnings. | | Linux Flatpak x86_64 | freedesktop SDK 23.08 | **Pass** | Full flatpak-builder run succeeds (tested via PR #420 which shares the cmake changes). | ### Windows Build Details The MinGW cross-compile was tested with GCC 14.3 via nix-shell. Our decompiled code compiles without errors. Three pre-existing files fail under GCC 14's stricter defaults: - `jkCredits.c:460` — `WindowHandler_t` function pointer type mismatch (`-Wincompatible-pointer-types`) - `jkGUIRend.c:1777,1790,1870` — Win32 HANDLE/int conversions (`-Wint-conversion`) - `stdPlatform.c:40,58` — `CLOCK_MONOTONIC` undefined in MinGW headers (pre-existing POSIX/Win32 ifdef gap) These are all upstream issues unrelated to this PR. The upstream GitHub Actions CI uses Ubuntu 22.04 with GCC 11/12 where these are warnings, not errors. ## Test plan - [x] Linux x86_64 native build succeeds (GCC 14, SDL2 + OpenGL) - [x] Linux Flatpak x86_64 build succeeds (freedesktop SDK, flatpak-builder) - [x] Windows x86_64 cross-compile — all new code compiles clean (MinGW GCC 14) - [ ] Windows build succeeds on upstream CI (Ubuntu 22.04 + MinGW GCC 12) - [ ] Game loads and runs without crashes - [ ] Hooked functions behave identically to originals (regression test with hooks enabled/disabled) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
合并状态:未合并 关闭于 2026-04-10 7 条评论