Commit Graph

188 Commits

Author SHA1 Message Date
MS
fd4959d516
Merge branch 'master' into ioinfo2 2023-07-02 16:09:01 -04:00
Christian Semmler
d64a04705c
lego: fix/match SetColorString (#72)
* lego: fix/match SetColorString

* explicitly cast to float to avoid warning

* style fixes

* remove superfluous includes

* Update legobackgroundcolor.cpp
2023-07-02 10:17:15 -07:00
itsmattkc
9415bd18bb
fill out the rest of our primitives in mxtypes 2023-07-02 10:07:55 -07:00
itsmattkc
8fa45bbe0f replace shorts with MxS16/MxU16/undefined2 2023-07-02 02:07:11 -07:00
MattKC
5d099115fe
Update CONTRIBUTING.md [skip ci] 2023-07-02 01:11:49 -07:00
MattKC
e16249b672
Define MxLong/MxULong (#71)
* define MxLong/MxULong

The "long" type has different sizes on different platforms, and this may cause issues.

* use DWORD to match RegQueryValueExA arg
2023-07-02 01:05:49 -07:00
Kai Kaufman
0555e05756
fix: ConvertHSVToRGB is effectively 100% matching (#70) 2023-07-02 01:02:05 -07:00
Kai Kaufman
b91c7d436b
fix: MxDSFile::Open is now matching 100% (#69) 2023-07-02 00:51:57 -07:00
Anonymous Maarten
646b39e876
Implement MxObjectFactory::{MxObjectFactory,Create} + match sizes of Mx.*Presenter objects created by it (#59)
* Get Isle building on MinGW32 (#63)

* Add MxUnknown100dc6b0::~MxUnknown100dc6b0 stub

* Declare destructor of MxOmni and MxTransitionManager in class

* inline attribute must go first

* Stub LegoState::Vtable0x14 for Act3State

* MxStreamer::VTable0x14 is not an override

* Stub MxEntity::Destroy for LegoState::Destroy

* Stub MxUnknown100dc6e0 for MxSoundManager

* ::ClassName and ::IsA are const methods

* methods in the class body don't need a namespace

* MxSoundManager subclasses MxUnknown100dc6e0

* LegoInputManager subclasses MxPresenter

* NotificationId is an enum, and does not need __declspec(dllexport)

* Fix final #endif of legoomni.h and mxobjectfactory.h

* Add const alternative for LegoOmni::Create and MxVideoParam, only available for MinGW

* Alternative approach to MinGW compatibility

* MinGW on Linux is case sensitve

* Don't delete a member variable. C++ automatically destructs member variables

---------

Co-authored-by: MattKC <34096995+itsmattkc@users.noreply.github.com>

* MxatomId: implement inline operator==

* Add decomp.h header, containing macro's only used when matching the original binaries

* Add in-line constructor of MxPresenter

* MxMediaPresenter: add members to match size

* MxVideoPresenter: add members to match size

* MxCompositePresenter: add members to match size

* MxFlcPresenter: add members to match size

* MxSmkPresenter: add members to match size

* MxStillPresenter: add members to match size

* MxAudioPresenter: add members to match size

* MxWavePresenter: add members to match size

* MxMIDIPresenter: add members to match size

* MxEventPresenter: add members to match size

* MxLoopingFlcPresenter: add members to match size

* MxLoopingSmkPresenter: add members to match size

* MxLoopingMIDIPresenter: add check for size

* Implement MxObjectFactory::{MxObjectFactory,Create}

Matching of MxObjectFactory::Create is not good, because none of the other objects have been implemented.

* Implement a few MxPresenter methods

* Fix size of LegoInputManager

* Fix name of first padding member of legoinputmanager.h

* add DECOMP_SIZE_ASSERT macro

* Use DECOMP_SIZE_ASSERT macro + convert to hexadecimal

* fixed minor typos

---------

Co-authored-by: MattKC <34096995+itsmattkc@users.noreply.github.com>
Co-authored-by: itsmattkc <itsmattkc@gmail.com>
2023-07-02 00:00:28 -07:00
Anonymous Maarten
302b3f66f0
Get Isle building on MinGW32 (#63)
* Add MxUnknown100dc6b0::~MxUnknown100dc6b0 stub

* Declare destructor of MxOmni and MxTransitionManager in class

* inline attribute must go first

* Stub LegoState::Vtable0x14 for Act3State

* MxStreamer::VTable0x14 is not an override

* Stub MxEntity::Destroy for LegoState::Destroy

* Stub MxUnknown100dc6e0 for MxSoundManager

* ::ClassName and ::IsA are const methods

* methods in the class body don't need a namespace

* MxSoundManager subclasses MxUnknown100dc6e0

* LegoInputManager subclasses MxPresenter

* NotificationId is an enum, and does not need __declspec(dllexport)

* Fix final #endif of legoomni.h and mxobjectfactory.h

* Add const alternative for LegoOmni::Create and MxVideoParam, only available for MinGW

* Alternative approach to MinGW compatibility

* MinGW on Linux is case sensitve

* Don't delete a member variable. C++ automatically destructs member variables

---------

Co-authored-by: MattKC <34096995+itsmattkc@users.noreply.github.com>
2023-07-01 23:53:54 -07:00
Anonymous Maarten
40dd0a93d4
Faster reccmp.py on linux (#62)
* reccmp: avoid repeated execution of winepath

Executing winepath many times is slow,
so try we like to avoid it as much as possible.

When the path start with a known prefix, replace it with
a cached prefix and do some string manipulation.

This change reduces execution time of reccmp.py from 90s to 2s.

Which is nice.

m

* reccmp: continue looking when source cannot be found

Most often, the reasons is mismatched sources.

* reccmp: add basic logging + optional debug

* Read the addresses in the exe headers as little endian
2023-07-01 23:52:47 -07:00
stonedDiscord
904640e028
CI steps (#65)
* break build up into steps

* download artifacts

* clone uploadtool

* need env on windows

* just use ubuntu for inkscape

* report went missing

* add inkscape to path

* use ubuntu for compare

* Revert "use ubuntu for compare"

This reverts commit a4ce103d09.

* reinstall after cache

* try different apt cache

* use im

* use rsvg

* change size to avoid downscaling

* remove png

* do not install librsvg anymore
2023-07-01 21:51:26 -07:00
Christian Semmler
8aad15d18b
lego1: match MxBitmap::Read and vtable (#67)
* lego1: match MxBitmap::Read and vtable

* fix param name
2023-07-01 21:49:42 -07:00
disinvite
a7b510386a Implementation of MXIOINFO. Not a 100% match, but we are very close. I don't wanna wrangle with this one any more, so I figured I would open it up for review in case anyone else has ideas.
**Known problems:**
- The Open function uses a `movzx` instruction on the value of parameter `fdwOpen` before pushing to OpenFile from the kernel. You can force this to appear by casting to `unsigned short`, but this disturbs the instructions for the rest of the file. To get the "best" overall match I decided to leave this out.
- Flush, Advance, and Descend differ only in the order of operands on a `cmp` instruction.
- This entire file is honestly pretty ugly. The main reason is all the nested ifs; we are constrained by returning a result value from each function, but only at the very end instead of bailing out with a `return`. By far the worst offender is the do/while loop in the Descend function.

**Design considerations:**
- We are casting the file handle from MMIOINFO to `HFILE` everywhere it is used, so I decided to just change the type. While doing that, I figured I might as well just pull out the members from the struct so we don't have `m_info` all over the place.
- Without using a struct member, we have the issue of the obvious `memset` used to zero out the values in the constructor. I changed this to work on the object itself, which would not be valid in most cases, but seems fine here since we have no virtual methods.

There is a lot of repeated code here, namely the call to `_llseek` to reset `m_lDiskOffset` based on the current file position. You could move this to an inline function, but maybe that's not appropriate.

There are probably strides to be made on code clarity and comments (if needed or wanted) here. I'm open to any suggestions.
2023-07-01 13:23:39 -04:00
itsmattkc
a66dbb8136 Squashed commit of the following:
commit a41a442f5a
Author: MishaProductions <106913236+MishaProductions@users.noreply.github.com>
Date:   Fri Jun 30 08:10:54 2023 +0300

    Update .editorconfig

    Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>

commit 5768cf4a0c
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 08:04:37 2023 +0300

    add legoutil

commit 7d6b00c831
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 08:02:17 2023 +0300

    Update CMakeLists.txt

commit d9b49087f8
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 08:01:06 2023 +0300

    Update CMakeLists.txt

commit d5a2891965
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 07:59:03 2023 +0300

    Update CMakeLists.txt

commit 519253bff4
Merge: 6cefa2e 13df3f9
Author: Misha <mishakeys20@gmail.com>
Date:   Fri Jun 30 07:57:15 2023 +0300

    Merge remote-tracking branch 'upstream/master' into legobackgroundcolor

commit 6cefa2e9e2
Author: Misha <mishakeys20@gmail.com>
Date:   Thu Jun 29 16:51:53 2023 +0300

    add back stuff to mak file after merge

commit c2b16eb8ff
Merge: 3c8add2 07912eb
Author: Misha <mishakeys20@gmail.com>
Date:   Thu Jun 29 16:49:51 2023 +0300

    Merge remote-tracking branch 'upstream/master' into legobackgroundcolor

commit 3c8add2f19
Author: Misha <mishakeys20@gmail.com>
Date:   Thu Jun 29 13:34:15 2023 +0300

    Update legobackgroundcolor.cpp

commit 6879f30e79
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 18:22:35 2023 +0300

    add fixme + rename MxStringVariable functions

commit a883f37b9d
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 18:15:42 2023 +0300

    address review

commit a919eeb7f4
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 08:19:45 2023 +0300

    Update mxbackgroundcolor.cpp

commit 710c1dd5ea
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 08:11:13 2023 +0300

    add back mak file

commit 25e9bbbfb0
Merge: 78b0e8d 2d9af63
Author: Misha <mishakeys20@gmail.com>
Date:   Wed Jun 28 08:09:03 2023 +0300

    Merge remote-tracking branch 'upstream/master' into legobackgroundcolor

commit 78b0e8dd62
Author: Misha <mishakeys20@gmail.com>
Date:   Tue Jun 27 18:35:58 2023 +0300

    improve accuracy

commit 4c2e1ca95c
Author: Misha <mishakeys20@gmail.com>
Date:   Mon Jun 26 13:50:40 2023 +0300

    improve accuracy

commit 7dd3469ca3
Author: Misha <mishakeys20@gmail.com>
Date:   Mon Jun 26 13:24:11 2023 +0300

    ConvertColor wip

commit b0288803a8
Merge: 3d16867 0b47f3f
Author: MishaProductions <106913236+MishaProductions@users.noreply.github.com>
Date:   Mon Jun 26 09:42:08 2023 +0300

    Merge branch 'isledecomp:master' into legobackgroundcolor

commit 3d16867a90
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 17:03:14 2023 +0300

    90% match

commit 2208573eb2
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 12:23:47 2023 +0300

    improve accuracy + add editorconfig

commit 288f861428
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:57:14 2023 +0300

    fix makefile

commit 3590e59a3a
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:51:35 2023 +0300

    Update isle.mak

commit fb52ad5781
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:47:06 2023 +0300

    fix build

commit 791cf1301a
Merge: b9ecd15 64d2b9e
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:42:09 2023 +0300

    Merge remote-tracking branch 'upstream/master' into legobackgroundcolor

commit b9ecd15ca6
Author: Misha <mishakeys20@gmail.com>
Date:   Sun Jun 25 07:40:22 2023 +0300

    undo change

commit 6327a797bc
Author: Misha <mishakeys20@gmail.com>
Date:   Sat Jun 24 21:48:08 2023 +0300

    delete accidently committed files

commit 7ae1c05df9
Author: Misha <mishakeys20@gmail.com>
Date:   Sat Jun 24 21:47:05 2023 +0300

    implement SetColorString

commit 323a2ee0e7
Author: Misha <mishakeys20@gmail.com>
Date:   Sat Jun 24 20:47:03 2023 +0300

    constructor and some methods are matching

commit 0ce6fab3d0
Author: Misha <mishakeys20@gmail.com>
Date:   Sat Jun 24 20:38:10 2023 +0300

    constructor is almost matching
2023-06-30 16:33:59 -07:00
Christian Semmler
d7b8d6463b
lego: Implement/match CalculateNewVel (#66)
* lego: Implement/match CalculateNewVel

* remove braces

* consistency
2023-06-30 16:24:46 -07:00
Joshua Peisach
428b5ae8db
Initial implementation of MxBitmap (#34)
Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>
2023-06-30 16:24:00 -07:00
itsmattkc
e929d76f3c reccmp: use "monospace" in svg font
For some reason Inkscape made this "mono", but it seems like "monospace" is the right attribute here
2023-06-30 16:12:22 -07:00
MattKC
c4d0ea8746
readme: use SVGs [skip ci]
Had to use an external site for this because GitHub doesn't seem to have a good way to do this right now. But this works...
2023-06-30 16:06:30 -07:00
MattKC
4adad9af49
ci: upload SVGs to external sites
Can't embed SVGs from GitHub Releases (made an issue that will probably get ignored here https://github.com/orgs/community/discussions/59781). Uploading to external site instead for the time being.
2023-06-30 16:00:27 -07:00
itsmattkc
4c9e138cbf implement all DLL exports (as TODOs)
Now we can use our own compiled LEGO1.LIB rather than one generated from the original. Also implements a script that tests them to help ensure future commits don't break them.
2023-06-30 11:34:39 -07:00
MattKC
13df3f906d
Update README.md [skip ci] 2023-06-29 21:45:29 -07:00
MattKC
8476bf06b2
Yet another CMake implementation (#61)
* initial cmake implementation

* ci: i guess older cmake doesn't support this

* cmake: add max version to suppress warning

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>

---------

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>
2023-06-29 16:39:02 -07:00
itsmattkc
aa3dfe1808 ci: skip continuous release on pull requests [skip ci] 2023-06-29 10:24:58 -07:00
MishaProductions
88c18c76ed
lego1: match LegoOmni::GetInstance and deconstructor and add a few methods (#58)
* add GetInstance fix

* Implement a few methods

* Move get* helpers to their correct locations

* rename m_instance

* add TransitionManager
2023-06-29 10:02:47 -07:00
Christian Semmler
6558a78848
lego1: implement MxDSObject (#55)
* Implement MxDSObject

* use discovered names

* Update LEGO1/mxdsobject.cpp

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>

* Update mxdsobject.cpp

* Update mxdsobject.h

---------

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>
2023-06-29 09:08:06 -07:00
Christian Semmler
6761345c8c
lego1: fix/match some ClassName functions (#60) 2023-06-29 09:05:45 -07:00
itsmattkc
566e107290 reccmp: only show recompiled address on request
Improves comparisons between diffs because the addresses shifting around leads to false positives
2023-06-29 09:02:52 -07:00
Christian Semmler
3e58002ba5
MxStreamController: fix structure (#57) 2023-06-29 08:48:42 -07:00
Cydra
07912eb05a
Class layout for LEGO1 classes (#43)
* Stubbed a bunch of classes and annotated them for later use. Heavily wip and more of pseudocode right now.

* Converted pseudocode into real code!

* Created a bunch more classes and added more information to exisiting ones
Did not error check, this was pushed just for reference

* More classes and implementation details. Still not checked for any errors

* Fixed code and decided on a way to handle virtual table stubs

* Some additional fixes

* More smaller fixes

* Added classes to project and made it compile

* Fixed function adresses that caused the python script to fail

* More classes and virtual function resolves. Builds and compares fine.

* Again more classes and virtual function resolves. Builds and compares fine.

* No clue, I guess forced update for line endings

* Finished up some work, compiles fine. All functions are STUB annotated to not pollute reccmp.py output.

* line ending change

* rename GetClassName/IsClass

Mirroring recent changes from master

* further conform to current master

* update project

* cleanup

* project only updates when you close msdev

---------

Co-authored-by: Cydra <cydra95@gmail.com>
Co-authored-by: itsmattkc <34096995+itsmattkc@users.noreply.github.com>
2023-06-29 01:10:08 -07:00
MattKC
4d200bb193
Update CONTRIBUTING.md 2023-06-29 00:49:57 -07:00
MS
2d9af630ba
lego1: Two more operators for MxString (#53)
Followed the hint from @madebr in #31 that the next function in MxString was operator+. The one after that is operator+= and both are at 100%.

Squashed commits:
* Removed unnecessary consts
* Replaced malloc/free with new/delete, which solved swapped regs in operator=
* Use delete[] when freeing char* m_data
2023-06-27 19:57:30 -07:00
itsmattkc
8da62cc596 ci: convert to 512px png
These might scale down better, the ones in the readme seem really blurry
2023-06-27 19:55:17 -07:00
itsmattkc
8e6e2a3962 reccmp: fix SVGs on light backgrounds 2023-06-27 19:46:04 -07:00
itsmattkc
aaf61ba48e ci: ignore return code of diff
diff returns a 1 error code if diffs are found which halts the script, but we don't consider this an error, we're just interested in the information
2023-06-27 19:08:43 -07:00
itsmattkc
706be168af msvc: force update dependencies 2023-06-27 19:06:04 -07:00
itsmattkc
e7b5ea53df rename GetClassName/IsClass, declare mxtypes
Was intended as a simple code improvement, however it also seems to make WinMain, MxString::operator=, MxDSFile::Open 100% (all of which just needed registers to be switched around)
2023-06-27 19:04:07 -07:00
itsmattkc
c7cf9ee8fd ci: compare accuracy as separate step 2023-06-27 19:02:26 -07:00
itsmattkc
ad2d84ce58 ci: compare accuracy to current master 2023-06-27 19:01:04 -07:00
itsmattkc
008fd80a6f ci: create text progress reports too for auto-comparison 2023-06-27 18:58:15 -07:00
itsmattkc
f7c84d719b reccmp: use bold font for easier readability 2023-06-27 18:25:38 -07:00
MattKC
612730f631
readme: add progress images 2023-06-27 18:12:52 -07:00
itsmattkc
b393851ebd reccmp: change svg canvas size 2023-06-27 18:10:36 -07:00
itsmattkc
1ea15e6478 reccmp: use entire canvas for progress images 2023-06-27 18:04:30 -07:00
itsmattkc
f03cee6b6e reccmp: improve progress bar text rendering 2023-06-27 18:00:53 -07:00
itsmattkc
40fdc5b2f5 ci: use alternative download 2023-06-27 17:42:07 -07:00
itsmattkc
4ba4352058 ci: pacman noconfirm 2023-06-27 17:38:37 -07:00
itsmattkc
dd3ce5ac61 ci: attempt to install inkscape through msys2 2023-06-27 17:31:46 -07:00
itsmattkc
a3887f554d ci: attempt installing inkscape 2023-06-27 17:28:46 -07:00
itsmattkc
0191c6560b ci: attempt to use inkscape to produce PNGs 2023-06-27 17:26:30 -07:00