Million KNights Vermillion/Esoterics

From Mizuumi Wiki
Jump to navigation Jump to search

Esoterics

This page of the wiki is destined to explain and teach how these pages are going to be filled (if you are reading in the future, how they were filled), and if any modification, be it a netplay caster, fix for future windows versions/linux support, etc. Also being a place to lookup what has already been found (Memory addresses and other functions, system specific stuff, etc, it all needs testing.)

  • Small update, as of Wine version 8.21 it works on Linux the same it does in Windows. Arguably, even better than Windows.

Finding values

Right now there's only two things that I've been able to find, the health values and the control buffer. They are static pointers and are allocated to the same address every time, the game is allowed to use addresses from x00400000 to x09c59fff. Was compiled using Visual Studio 2005 for x86 processors.

Health

The address for the health pointer for P2 is x019253B0, for P1 it's x0190C658, changing their value does nothing, they only read stuff. The address for the health value (float type, game doesn't store doubles nor 8byte ints) for P2 is , for P1 it's , and the game displays health in the HUD after reading that value, if I put it below 0 the round automatically ends. I'll be using it to verify the damage values of each move using Otto as a reference, and from that try to infer everyone's respective defense values, after testing Yuri's 5A, it dealt 159 damage on Tamara and 154 damage on Nobuko, I forgot to take note of the damage variation of other characters.

The way the game calculates the damage is by always running a game state, so health is read every time. When a hitbox is on the screen, it calls another function and if there's a combo string, it goes through another pathaway. Then, after the combo ends, there's another output with the exact damage value, however I need to analyze that code more carefully, though it'll help a lot.

Buffer

I forgot to annotate the values for the buffer, but it's quite simple, each direction is stored as a 4byte integer in numpad notation for some reason (ie 5 = Neutral, 4 = Back, 6 = Forward, etc) on a static address and they all point to the same place, except for 1, but 1 points to another pointer that points to the supposed place. The game doesn't have SOCD, and both 6 and 2 have weird priority on a keyboard, it definetely wasn't made with keyboard in mind, especially with how important the 2 input is for this game: 4+6 and 6+4 = 6; 2+6 = 3 but 3+4 = 3; 2+4 = 1 but 1+8 = 7; 1+6 = 3 etc

Framedisplay

I still have no idea what to do for that, there is a function call that reads that on the damage calculation function but it's still weird reading pure assembly. It seems to call a different address every time, which I suppose is where each move is stored. Needs further analysis, but definetely can be done. I'll try to start by determining how active a move is.


General
Controls
HUD
System
FAQ
Esoterics
Characters
Silvio
Nobuko
Folo
Yuri
Otto
Tamara
Smile
Sven
Virginia