Luckytyphlosion/RNG Glitches: Difference between revisions
From The Rockman EXE Zone Wiki
< User:Luckytyphlosion
(→MMBN4) |
(→EXE4.5) |
||
Line 36: | Line 36: | ||
== 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 == |
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
- GMD contents (Dump)
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 bugDoesn'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; }