AkBKukU / HydroThunder-TimeTool

Tool for exporting and importing high score times from Hydro Thunder Arcade
MIT License
15 stars 3 forks source link

Decode split times #3

Closed WizardTim closed 1 year ago

WizardTim commented 1 year ago

TODO:

AkBKukU commented 1 year ago

This is awesome! I hadn't even thought about the splits, that will be great to have too if we can write back for comparing actual speed runs. I'm going to merge this in now but I'm going to leave it open because I have some other questions comments.

I'll take a look at integrating the split times to the CSV output, I haven't looked at the code yet, but I'm going to guess there is only one per track would would be inelegant to add to the existing output. So this may be the thing to be worth restructuring to use better parameters.

It looks like you are using the v1.00d image for data, have you extracted the EXE from that? Someone on my discord server was saying it still has the debug symbols in it so that may be helpful.

_AiRabbit_WinHistoryData I feel like will be for the "Free race limiter" feature. The game is supposed to track the percentage of Win/Loss for players and adjust the AI to be harder so they can't get too many free races for coming in first. That variable name sounds like a good fit for the kind of data needed for that. There's not a lot to gain from reading that so it can probably be the lowest priority.

WizardTim commented 1 year ago

There's 5 split times for every track, but it appears some tracks don't use all 5, the code flags splits that still have the default times as unused. I suspect two separate CSVs will be the best implementation, but leave that till after the checksum mystery issue is resolved.

Yes I've decompiled the HYDRO.EXE from 1.00d (haven't looked at your image yet), symbols haven't been obfuscated much so I was able to get those human readable names for the offsets in the CMOS data.

The data area at _AiRabbit_WinHistoryData appears to have a couple functions that manipulate data there called _cmos_ResetAiDifficultySettings and _cmos_ResetTrackDifficultySettings called from the audit menu. (the audit menu isn't very complex)

I'm hoping the integrity checks the machine does at boot are very simplistic, it certainly predates cryptographically signed software but might have a checksum that needs to be bypassed, but if so I don't see why some menu items can't be changed from say "PRESS BOOST BUTTON TO START" to "SUBSCRIBE TO TECH TANGENTS". Graphics and model data will probably be quite difficult though, haven't figured any of that out.