User

Luckytyphlosion/RNG Glitches: Difference between revisions

From The Rockman EXE Zone Wiki

< User:Luckytyphlosion
(Created page with "== All Games == * Shuffle Bias. See [https://www.i-programmer.info/programming/theory/2744-how-not-to-shuffle-the-kunth-fisher-yates-algorithm.html this explanation]. MMBN1 is...")
 
 
(2 intermediate revisions by the same user not shown)
Line 6: Line 6:


== MMBN2 ==
== MMBN2 ==
?
* Although Chip Traders are coded to have up to 6 codes per chip, only the first 5 codes of any chip can drop. This applies to both normal draws and redraws; unlike later games, you cannot get the 6th code through a redraw. RetroChip Traders work differently and do allow you to get 6th code (thanks Greiga Master). TODO: do normal chip traders list * code in their reward lists?


== MMBN3 ==
== MMBN3 ==
* <s>BugStyle movement bug selection: Initial call has mask 0xf, selects movement bug if value is [0x4, 0x9]. Subsequent call has mask 0x2, 0x0 gives up movement bug, 0x1 gives down movement bug</s> Doesn't skew
* <s>BugStyle movement bug selection: Initial call has mask 0xf, selects movement bug if value is [0x4, 0x9]. Subsequent call has mask 0x2, 0x0 gives up movement bug, 0x1 gives down movement bug</s> Doesn't skew.
* Although Chip Traders are coded to have up to 6 codes per chip, only the first 5 codes of any chip can drop. This applies to both normal draws and redraws; unlike later games, you cannot get the 6th code through a redraw. Traders do list * code in their reward lists.


== MMBN4 ==
== MMBN4 ==
* Battle selection, GMD contents
* Battle selection, GMD contents
* Can only choose 4th code for chips from a redraw.
Risch — 03/13/2022
A quick search of the dumped file with 10000 seeds does show that ThunderMan and KendoMan never show up together with JackBomber. But that still makes me curious as to how exactly this happens
Erothaur — 03/13/2022
There are literally no frames yeah
Risch — 03/13/2022
Idk how RNG carryover works exactly, I know something about the power of 2 denominator results in a bias if the same random value is used multiple times. But looking at the boards, I get that kinda vibe, since it seems JunkMan and KendoMan go together always,  ProtoMan and ColdMan always go together, then with Red Sun, its Search and Kendo together, and Thunder and Cold together always
Erothaur — 03/13/2022
Yup, looks that way
Lots of frames for the seed we currently use though


== EXE4.5 ==
== EXE4.5 ==
* Tournament selection, TODO rediscover this.
* Tournament selection, TODO rediscover this.
GreigaMaster — 09/30/2019
hey prop are you aware of a bug when picking the finalist for tournaments? It's supposed to be able to pick from 2 potential finalists but theres an issue with this line
080497E8 bl    0x80013DC;Get chip trader RNG
080497EC mov    r1,#0x1
080497EE and    r2,r1
It gets a chip trader rng number but it does the AND with r2 instead of r0. r2 is an intermediate value which is (oldrngvalue<<1) so this will always result in a 0 and only the first of 2 finalists is ever picked.
GreigaMaster — 09/30/2019
I would think this code shows intent of what they actually wanted.


== MMBN5 ==
== MMBN5 ==
* GMD contents
* GMD contents
* Can only choose 4th code for chips from a redraw.
== MMBN6 ==
* JP only: Can only choose 4th code for chips from a redraw.


== OSS ==
== OSS ==

Latest revision as of 17:00, 1 November 2022

All Games

  • Shuffle Bias. See this explanation. MMBN1 is affected less as it swaps 60 times instead of ~30 (depends on game).

MMBN1

MMBN2

  • Although Chip Traders are coded to have up to 6 codes per chip, only the first 5 codes of any chip can drop. This applies to both normal draws and redraws; unlike later games, you cannot get the 6th code through a redraw. RetroChip Traders work differently and do allow you to get 6th code (thanks Greiga Master). TODO: do normal chip traders list * code in their reward lists?

MMBN3

  • BugStyle movement bug selection: Initial call has mask 0xf, selects movement bug if value is [0x4, 0x9]. Subsequent call has mask 0x2, 0x0 gives up movement bug, 0x1 gives down movement bug Doesn't skew.
  • Although Chip Traders are coded to have up to 6 codes per chip, only the first 5 codes of any chip can drop. This applies to both normal draws and redraws; unlike later games, you cannot get the 6th code through a redraw. Traders do list * code in their reward lists.

MMBN4

  • Battle selection, GMD contents
  • Can only choose 4th code for chips from a redraw.

Risch — 03/13/2022

A quick search of the dumped file with 10000 seeds does show that ThunderMan and KendoMan never show up together with JackBomber. But that still makes me curious as to how exactly this happens

Erothaur — 03/13/2022

There are literally no frames yeah

Risch — 03/13/2022

Idk how RNG carryover works exactly, I know something about the power of 2 denominator results in a bias if the same random value is used multiple times. But looking at the boards, I get that kinda vibe, since it seems JunkMan and KendoMan go together always, ProtoMan and ColdMan always go together, then with Red Sun, its Search and Kendo together, and Thunder and Cold together always

Erothaur — 03/13/2022

Yup, looks that way

Lots of frames for the seed we currently use though

EXE4.5

  • Tournament selection, TODO rediscover this.

GreigaMaster — 09/30/2019 hey prop are you aware of a bug when picking the finalist for tournaments? It's supposed to be able to pick from 2 potential finalists but theres an issue with this line

080497E8 bl    0x80013DC;Get chip trader RNG
080497EC mov    r1,#0x1
080497EE and    r2,r1

It gets a chip trader rng number but it does the AND with r2 instead of r0. r2 is an intermediate value which is (oldrngvalue<<1) so this will always result in a 0 and only the first of 2 finalists is ever picked.

GreigaMaster — 09/30/2019 I would think this code shows intent of what they actually wanted.

MMBN5

  • GMD contents
  • Can only choose 4th code for chips from a redraw.

MMBN6

  • JP only: Can only choose 4th code for chips from a redraw.

OSS

  • GMD contents (Dump)
  • Game reseeds using MAC address, potential abuse. Code is below
int sub_2001324() {
   byte[] macAddress = new byte[6];
   RTCDate rtcDate = new RTCDate();
   RTCTime rtcTime = new RTCTime();
   
   RTC_GetDateTime(&rtcDate, &rtcTime);
   OS_GetMacAddress(&macAddress);
   
   int macSum = macAddress[0]
       + (macAddress[1] << 8)
       + (macAddress[2] << 16)
       + (macAddress[3] << 24)
       + macAddress[4]
       + macAddress[5];
   int timeSum = rtcTime.second
       + 60 * rtcTime.minute
       + 3600 * rtcTime.hour;
   int dateSum = rtcDate.day
       + rtcDate.month
       + rtcDate.year;
   
   return macSum + timeSum + dateSum;
}