* mxdirectdraw: no need to explicitly add a terminating '\0' in C
* mxstopwatch must include LIMITS.H for ULONG_MAX
* Add Config app
* 88.78%
* style fixes
* Test more CONFIG things
* Add a few assertions on MFC classes
* reformat
* actionSSSSSSSSSSSSSSS
* actions again
* decomplint needed a shebang
* Fix annotations of Message Map entries
* ci: We're building CONFIG.EXE, not CONFIG.DLL
* remove ninja.exe
* Fix CAboutDialog::GetMessageMap annotation
* format reloaded
* Fix global CConfigApp object annotation
* trigger worflows
* ci: request at least python 3
* oops :)
* curl CONFIGPROGRESS-OLD.TXT will fail
* Forget about actions/setup-python (for now)
* Annotation fixes
* Config tweaks and MxDirect3d annotations
* It's important to compare against the correct file
* Introduce common CDialog parent for CAboutDialog and CMainDialog
* format
* Remove CSerializer
---------
Co-authored-by: disinvite <disinvite@users.noreply.github.com>
* roadmap: Suggest order of modules
* Include more modules in the list
* Sort by avg address with outliers removed
* Mark order-adjusted modules. Show library order.
* Use bisect for performance
* Use average address for library order
* Bugfix for get_module
* cmake: use imported targets for 3rd party libs
* Fix casing of skateboard.h include
* cmake: tglrl realtime viewmanager mxgeometry
* cmake: spin off some source in static libraries
* dx5 for everyone
* ci: bump actions/checkout to v4
* move LEGO1/realtime/realtimeview.cpp to lego1 because it exports symbols
* add misc library
* Add omni library
* Return of the .def's
* Remove COMPAT_CONST in MxVideoParam::MxVideoParam
* Run clang-format
* move LEGO1/realtime/realtimeview.cpp to realtime lib
* Add 3dmanager library
* Rename .def files
* Remove incorrect deps to Omni
* Remove DLL expor decls
* Remove unnecessary library dep from ROI
* Remove COMPAT_CONST
* Move 3dmanager lib before Omni
* Remove mxgeometry lib (`geom` is actually `lego/sources/geom`, which we don't have in our decomp yet)
* viewmanager has a dependency on realtime + fix mingw's def
* Remove Smacker::Smacker from lego1 link libraries
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Truncate symbol names to 255 characters when matching
* GifManager refactor
* Refactor, annotations
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Parser refactor:
- Handling LIRBARY and STRING markers
- Extracting global variable name for future comparison
- Marking function static variables
- More fluent error messages
* String constants annotated with STRING
* fix variable name
* Should compare LIBRARY markers
* Open discussion
* Move annotations of header-implemented functions back to `.h` files
* Adjust `README.md`
* Relocate annotation
* linter
* Comment markers in headers only, rename script, update github actions
* type hint compat
* Rename github action, better argparse for linter
* Type hints, working test for byname ignore
* Move annotation
* CI rename and enable warnfail, enforce mode always on
* Two step linting
* or one step
* continue on error
* two jobs instead
* Fixes
---------
Co-authored-by: disinvite <disinvite@users.noreply.github.com>
* Adjustments to "decomp" language
* Fix a comment
* Fix accidental clang-formatting
* Fix order
* Fix order
* Remove junk
* Fix OFFSET
* Adjustments based on new suggestions
* Annotate globals
* Globals in ISLE
* More globals
* Merge from parser2 branch
* Allow prepending space for exact marker match
* To eliminate noise, require the 0x prefix on offset for marker match
* fix test from previous
* Count tab stops for indented functions to reduce MISSED_END_OF_FUNCTION noise
* FUNCTION to SYNTHETIC where needed
* Missed marker conversion on SetAtomId
* pylint cleanup, remove unused code
* Fix unexpected function end, add more unit tests
* Be more strict about synthetic name syntax
* Revert "Missed marker conversion on SetAtomId"
This reverts commit d87d665127.
* Revert "FUNCTION to SYNTHETIC where needed"
This reverts commit 8c815418d2.
* Implicit lookup by name for functions
* Fix VTABLE SYNTHETIC and other decomp markers
* Get vtable class name
* Vtable marker should identify struct
* No colon for SIZE comment
* Update README.md
* Update README.md
* Update CONTRIBUTING.md
* Update README.md
* Update README.md
* Update CONTRIBUTING.md
* Update README.md
* Update CONTRIBUTING.md
* Fix destructor/annotation
* Update README.md
* Update README.md
* Update README.md
* Update README.md
* Update README.md
---------
Co-authored-by: disinvite <disinvite@users.noreply.github.com>
* Create common print_diff function
* Add pylint and black
* Fix linting, move classes to utils
* Add black/pylint to github actions
* Fix linting
* Move Bin and SymInfo into their own files
* Split out format
* Tidy up workdlows and pip, add readme
* Lint tests, add tests to readme
* First commit of order tool
* More flexible match on module name. Bugfix on blank_or_comment
* Report inexact offset comments in verbose mode. Bugfix for exact regex
* Refactor checkorder into reusable isledecomp module
* Find bad comments in one pass, add awareness of TEMPLATE
* Refactor of state machine to prepare for reccmp integration
* Use isledecomp lib in reccmp
* Build isledecomp in GH actions, fix mypy complaint
* Ensure unit test cpp files will be ignored by reccmp
* Allow multiple offset markers, pep8 cleanup
* Remove unused variable
* Code style, remove unneeded module and TODO
* Final renaming and type hints
* Fix checkorder issues, add GH action and enforce (#2)
* Fix checkorder issues
* Add GH action
* Test error case
* Works
* Fixes
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Use templates instead of replacing
* Use Renderer to avoid loading templates ourselves
---------
Co-authored-by: Thomas Phillips <thomas@teknique.com>
* Use python3 features
* Use `with` statement for file access
* Use f-strings instead of modulo string formatting
* Single quotes in most places
Fix typo in 'with' statement
* Add files into missing messages
* Fix can_resolve_register_differences and round percentages
* Return modified value instead of relying on in-place modification
* All of the MxVectors share an inheritance chain. MxVector4 inherits
from MxVector3 which inherits from MxVector2.
* They all operate on a shared `float*` data member which points to the
underlying storage.
* There are also MxVector3/4Data classes, which inherit from Vector3/4,
but add concrete storage for the Vector data rather than just an
abstract data pointer.
* The same is true for MxMatrix, with there being an abstract and a
concrete variant of it.
* Also improve reccmp.py register matching algorithm. It previously
could not recognize an effective match when a swap had to take place
between two registers used on the same line. It turns out this happens
a lot in floating point math code so I adjusted the implementation to
break the disassembly lines on spaces rather than just linebreaks
allowing the existing effective match code to handle that case too.
* Rather than using <OFFSET> as a replacement for all offsets in a
function, label the offsets as <OFFSET1>, <OFFSET2>, etc. Doing this
will avoid false-positive 100% matches resulting from the same
function being called in two times where a different on should have
been called or vice versa. And the same for globals. I already
encountered one case of this in the wild.
* When a 100% match initially fails, try to make the functions match by
swapping register allocations. This makes it possible to get a 100%
match where the generated machine code differs only in register
allocation.
* Only apply the above when it is possible to reach a 100% match in that
way. Otherwise show the developer the unadultrated diff to avoid
complicating decompilation.
* In the result listing, show the functions which are "effective
matches" in this way as "100%*" instead of "100%".