* match WinProc
* minor accuracy improvement
* WndProc at 50%
* fix WM_DISPLAYCHANGE branching
* fix type
* fix x/y comparison
* WndProc 82%
* 84%
* 97%
* rearrange functions to get close to the original
* remove newline
* inline no longer necessary
* merge
* Use bitfield for MxVideoParamFlags
Using a bitfield for MxVideoParamFlags results in the same xor/and logic that was partially inlined in the header file. This approach is a lot cleaner and there's a good chance this is what the devs would have landed on.
The code generation is really finicky -- other inlines in the header influence the code just by being there -- so I decided to stub out all of them. This got the match to 100%.
While I was in isle.cpp::SetupVideoFlags, I changed the signature so that the `m_using16bit` parameter is just `using16bit`.
* fix: cast Set16Bit inline arg to byte
We've confirmed that, despite a function being declared inline, msvc will still make a conventional call in some circumstances. As such, I feel like this is warranted because it's most likely what a developer would have actually written.
* add MxDSObject, implement SetObjectName, adjust MxDSAction
* add a TODO
* update project files
* add WIP MxDSObject stuff
* merge
* update project file
* add addresses and SetAtomId
* switch addresses
* remove comment since it's fixed now (?)
* refactor
* update project file
* refactor into separate unit
* refactor into separate unit
* rename unit to avoid NMAKE issue
* rename param
* add last missing piece to Isle::Close
* fix spelling
* merge
* use union hack
* Implement a few Mx* functions / add data types
* added more information, fixed formatting issues
* further cleanup
---------
Co-authored-by: itsmattkc <34096995+itsmattkc@users.noreply.github.com>
* ci: no need to do a final cd
* MxDSAction has a setAtomId method
* Implement the MxOmniCreateParamBase destructor inline
Because of this, ISLE should no longer have to compile mxomnicreateparambase.obj.
I didn't modify isle.mak, because I don't have the MSVC 4.20 GUI set-up.
* Replace 256 with sizeof(...)
* Format DefWndProc calls in WndProc
* Replace magic mask in WNDPROC with macro's
* Replace magic numbers in main.cpp with macro's
* MOUSEMOVE notification id is 10 instead of 0x10
* Lowercase all windows includes such that mingw32 on Linux can find these
* Convert ISLE/res/isle.rc to utf-8, and add a comma needed by mingw32
* mingw32 cannot use a enum without previous declaration
* minor adjustments
---------
Co-authored-by: itsmattkc <34096995+itsmattkc@users.noreply.github.com>
* add test to compare assembly between functions
* ci: use abs path of wget
* ci: fix shell disambiguity
* ci: ensure capstone is installed
* ci: ensure correct filenames
* use better source for lego island files
* give me an idea of what the dir structure looks like
* make wine path function
* improved script and project
* fixed script on windows
* print debug info because now it literally only doesn't work on fucking github actions
* better source path resolving
For some reason, nmake compiles produce different symbols. I wonder if this affects the accuracy of the decomp.
MSVC420 doesn't support UTF-8, so the (R) symbol must be in Windows-1252 encoding instead. A PR seems to have reverted this back to UTF-8 (a code editor probably did this without even mentioning it)
In 1.0 WINDOW_TITLE seems to be a define like WNDCLASS_NAME. However, in
1.1 it is a const char* like in the already existing code. It also has a
value of "Lego Island" in 1.0 but a value of "Lego®" in 1.1.
For some reason the decomp version is doing the first xor in
EnableFullScreen with the operands swapped. The source code and
the original binary both have m_flags ^ e but the decomp binary has e ^
m_flags. This gives the same result but it is not a 100% match in the
binary. I'm not sure why the compiler is doing this or how to
change it but the other inaccuracy with the function is fixed.