User:Mauve/RollCaster

From Mizuumi Wiki
Jump to navigation Jump to search

Test build

None. Go use 120221.

Suggestion box

Stuff other people have brought up to me that I may or may not do.

Bugs:

  • Still minor desyncs occasionally. Probably unfixable.

Feature removal:

  • Does anybody still want the terrible practice dummy? More work to remove than to leave in.

Interface:

  • SFX toggle key. Not doing this.
  • GUI interface. Not doing this.
  • GUI configuration. Not doing this.

Dissecting IaMP

This is old information from back when I was originally developing RollCaster. Incomplete.

Static pointers:

6711fc - ?
67135c - ?
67136c - ?
6713a4 - sound data struct
671418 - player 1 struct
67141c - player 2 struct
671424 - background graphics struct
67143c - ?
6714c4 - ?
671618 - sound effect table, size 14 (probably vector)
6716cc - temporary effect table, size 94 (deque from 6716c8)
6716e0 - effect table, size 94 (deque from 6716dc)
6716fc - ?
67170c - ?
671744 - ?
6718a8 - game inputs table (deque from 6718a4)
6718bc - game RNG table (deque from 6718b8)
6718d0 - game running data table? Unknown contents. (deque from 6718cc)
6718e4 - game cheat/extra effects table (deque from 6718e0)
68be0c - ?
68be20 - ?
68be48 - ?

Player struct has variable size:

Character     VTable      Size
------------------------------
Reimu         6590d8      1000
Marisa        6592b8      1830
Sakuya        6594a8      0fec
Alice         659608      0fec
Patchouli     659768      0fe8
Youmu         6598d0      0ff8
Remilia       659a40      0fe4
Yuyuko        659b80      0fe8
Yukari        659cc0      1008
Suika         659e30      1000
Meiling       659f50      1000

Player struct pointers:

+004: pointer to character graphics table
+008: pointer to frame data frame
+074: pointer to frame data frame
+078: pointer to current frame sequence
+0ac: pointer to frame data frame
+0b0: pointer to current frame sequence again
+2e8: pointer to other player
+2ec: pointer to effect struct, size 0x54
  effect struct + 1c: effect map pointer
+46c: pointer to .. local? frame data table
+480: pointer to rendering-related temporary data
+51c: pointer to input buffer
+534: ? (related to current frame?)
+6d4: pointer to sound effect information, size 0xc8, probably vector from +6d0
+ee8: ? (frame data again... effects?)
+ff0: pointer to ghost/clone information. Youmu only.

Rendering structure is stored on the stack, allocated from the call at 6030af. It is 0x11c bytes in size.

Render struct pointers:

+ 0x08: ? 0x50 byte struct
  ? + 0x0c: ? 0x1e4 byte struct
  ? + 0x1c: ? 0x2c byte struct
+ 0x44: player 1 struct
+ 0x48: player 2 struct
+ 0x4c: ? one byte?
+ 0x50: player 1 combo counter information
+ 0x54: player 2 combo counter information

Background structure has variable sized based on stage and the simplified background setting. Table is too obnoxious to write here. All are between 0x68 and 0xf8 in size except for Suika's stage, which is 0x1d28. Yes, 0x1d28. Please don't use this one in netplay.

IaMP data types:

  • A map, as defined here, is a segmented array basically. In reality, it is std::deque<>. Rather than having one large array that it reallocates, it has an array that consists of sub-arrays, each holding four elements each. The map roots are five ints in size and the contents are as follows:
  +00: unused; nonexistent vtable ptr
  +04: pointer to base array
  +08: number of entries in base array (number of 4 blocks)
  +0C: starting entry number
  +10: number of entries
  • IaMP lists are very simple. They consist of a pointer to a root element and a count. The root element is not used, but it is of the correct size and type for the data that is used. The first two ints of data for each element are pointers forwards and backwards, respectively.