Difference between revisions of "User:ShinyZeni"

From A complete guide to Super Metroid speedrunning
Jump to: navigation, search
(ED RNG Values Discord Dump)
 
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
Giant RNG Values Dump from ED (saved and sloppily formatted from Discord meltdown >.<)
 +
 
Aran;Jaeger-Yesterday at 8:30 PM
 
Aran;Jaeger-Yesterday at 8:30 PM
  
Line 735: Line 737:
  
 
''swoop'' seems to correspond to the 1st and 2nd bit beign equals 1.
 
''swoop'' seems to correspond to the 1st and 2nd bit beign equals 1.
 +
 +
'''Draygon Slap RNG
 +
'''<br>
 +
 +
Slap:<br>
 +
 +
00 00<br>
 +
 +
04 00<br>
 +
ED 00<br>
 +
AB 00<br>
 +
FF 00<br>
 +
17 00<br>
 +
7F 00<br>
 +
06 00<br>
 +
 +
No Slap:<br>
 +
 +
00 01<br>
 +
00 02<br>
 +
00 03<br>
 +
00 04<br>
 +
00 05<br>
 +
00 06<br>
 +
00 07<br>
 +
00 08<br>
 +
00 09<br>
 +
00 0A<br>
 +
00 0B<br>
 +
00 0C<br>
 +
00 0D<br>
 +
00 0E<br>
 +
00 0F<br>
 +
00 10<br>
 +
 +
FF 01<br>
 +
FF 49<br>
 +
FF CC<br>
 +
FF 80<br>
 +
 +
17 80<br>
 +
17 D3<br>
 +
 +
7F FF<br>
 +
7F 01<br>
 +
 +
- - -
 +
From those samples, I conclude: Draygon slaps Samus only if the low byte is equals 00.<br>
 +
 +
xxxx xxxx 0000 0000 seems to correspond to Draygon slapping Samus<br>
 +
 +
xxxx xxxx [xxxx xxxx] seems to correspond to Draygon not slapping Samus (only if not every bit in the bracket is 0).<br>
 +
 +
 +
'''Croc RNG Patterns
 +
'''
 +
Crawling:<br>
 +
FF9B<br>
 +
FF71<br>
 +
FF00<br>
 +
FF15<br>
 +
FF03<br>
 +
FFC0<br>
 +
FFA4<br>
 +
FFDD<br>
 +
FF44<br>
 +
 +
EF44<br>
 +
 +
BC44<br>
 +
 +
7744<br>
 +
7E44<br>
 +
 +
Spitting:<br>
 +
 +
504F<br>
 +
504E<br>
 +
504D<br>
 +
504C<br>
 +
504B<br>
 +
504A<br>
 +
5049<br>
 +
5048<br>
 +
5047<br>
 +
5046<br>
 +
5045<br>
 +
5044<br>
 +
5043<br>
 +
5042<br>
 +
5041<br>
 +
5040<br>
 +
 +
500F<br>
 +
50C1<br>
 +
50EE<br>
 +
50A5<br>
 +
5060<br>
 +
 +
-> it seems that the low byte doesn't matter for this.<br>
 +
- - - - -
 +
High byte behavior: (low byte 60)<br>
 +
 +
Crawling:<br>
 +
4F<br>
 +
4E<br>
 +
4D<br>
 +
4C<br>
 +
4B<br>
 +
4A<br>
 +
49<br>
 +
48<br>
 +
47<br>
 +
46<br>
 +
45<br>
 +
44<br>
 +
 +
34<br>
 +
2F<br>
 +
 +
24<br>
 +
1F<br>
 +
 +
Spitting:<br>
 +
50<br>
 +
 +
43<br>
 +
42<br>
 +
41<br>
 +
40<br>
 +
 +
33<br>
 +
32<br>
 +
31<br>
 +
30<br>
 +
 +
23<br>
 +
22<br>
 +
21<br>
 +
20<br>
 +
 +
- - -
 +
High byte behavior: (low byte 80)<br>
 +
 +
Crawling:<br>
 +
 +
F4<br>
 +
EF<br>
 +
 +
Spitting:<br>
 +
 +
F3<br>
 +
F2<br>
 +
F1<br>
 +
F0<br>
 +
 +
- - -
 +
 +
My conclusion from these samples is: Crocomire's next action depends on the 1st digit of the high byte lying in the range from 0 to 3, or lying in the range from 4 to F instead.<br>
 +
 +
xxxx 00xx xxxx xxxx seems to correspond to Crocomire spitting<br>
 +
 +
xxxx 01xx xxxx xxxx seems to correspond to Crocomire crawling<br>
 +
xxxx 10xx xxxx xxxx seems to correspond to Crocomire crawling<br>
 +
xxxx 11xx xxxx xxxx seems to correspond to Crocomire crawling<br>
 +
 +
Assuming a uniform distribution, this would result to a chance of 1/4 of Crocomire spitting instead of crawling which would happen with 3/4 chance.
 +
 +
 +
'''Sidehopper RNG
 +
'''
 +
 +
The following holds (and was explicitly tested) for small Brinstar sidehoppers, large Brinstar sidehoppers, (large) Tourian sidehoppers, large Dessgeegas, and small Dessgeegas:<br>
 +
 +
high hop:<br>
 +
 +
00 01<br>
 +
00 03<br>
 +
00 05<br>
 +
00 07<br>
 +
00 09<br>
 +
00 0B<br>
 +
00 0D<br>
 +
00 0F<br>
 +
 +
FF 0F<br>
 +
FF 01<br>
 +
 +
- - -
 +
low hop:<br>
 +
 +
00 00<br>
 +
00 02<br>
 +
00 04<br>
 +
00 06<br>
 +
00 08<br>
 +
00 0A<br>
 +
00 0C<br>
 +
00 0E<br>
 +
 +
FF 00<br>
 +
FF 02<br>
 +
 +
- - -
 +
From those samples, I conclude that the parity of the RNG value determines the next jump height.<br>
 +
 +
xxxx xxxx xxxx xxx0 seems to correspond to a low hop<br>
 +
xxxx xxxx xxxx xxx1 seems to correspond to a high hop<br>
 +
 +
 +
'''Squeepts Jump Height RNG
 +
'''
 +
 +
Squeept 9 tiles jump:<br>
 +
00 00<br>
 +
00 01<br>
 +
00 02<br>
 +
00 03<br>
 +
00 04<br>
 +
00 05<br>
 +
00 06<br>
 +
00 07<br>
 +
00 08<br>
 +
00 09<br>
 +
00 0A<br>
 +
00 0B<br>
 +
00 0C<br>
 +
00 0D<br>
 +
00 0E<br>
 +
00 0F<br>
 +
00 10<br>
 +
 +
00 20<br>
 +
00 40<br>
 +
00 70<br>
 +
00 7F<br>
 +
00 86<br>
 +
00 A5<br>
 +
00 C3<br>
 +
00 E0<br>
 +
00 FF<br>
 +
 +
01 00<br>
 +
 +
-> The low byte of the RNG seems to have no influence on the jump height at all<br>
 +
 +
08 00<br>
 +
09 00<br>
 +
 +
10 00<br>
 +
11 00<br>
 +
 +
18 00<br>
 +
 +
F8 00<br>
 +
 +
Squeept 7 tiles jump:<br>
 +
02 00<br>
 +
03 00<br>
 +
 +
0A 00<br>
 +
0B 00<br>
 +
 +
12 00<br>
 +
13 00<br>
 +
 +
FB 00<br>
 +
 +
Squeept 5 tiles jump:<br>
 +
04 00<br>
 +
 +
04 80<br>
 +
04 7D<br>
 +
05 00<br>
 +
 +
0C 00<br>
 +
0D 00<br>
 +
 +
14 00<br>
 +
15 00<br>
 +
 +
FD 00<br>
 +
 +
Squeept 3 tiles jump:<br>
 +
06 00<br>
 +
07 00<br>
 +
 +
0E 00<br>
 +
0F 00<br>
 +
 +
16 00<br>
 +
17 00<br>
 +
 +
FF 00<br>
 +
 +
- - - -
 +
From the above samples, I conclude: The height of the next jump is determined by the lower digit of the RNG's high byte, such that<br>
 +
y0 yy, y1 yy and y8 yy, y9 yy causes a 9 tile jump<br>
 +
y2 yy, y3 yy and yA yy, yB yy causes a 7 tile jump<br>
 +
y4 yy, y5 yy and yC yy, yD yy causes a 5 tile jump<br>
 +
y6 yy, y7 yy and yE yy, yF yy causes a 3 tile jump<br>
 +
 +
xxxx x00x xxxx xxxx seems to correspond to a 9 tile jump<br>
 +
xxxx x01x xxxx xxxx seems to correspond to a 7 tile jump<br>
 +
xxxx x10x xxxx xxxx seems to correspond to a 5 tile jump<br>
 +
xxxx x11x xxxx xxxx seems to correspond to a 3 tile jump<br>
 +
 +
[[Media:00_00_RNG_value_Squeept_9_tiles_jump.png]]<br>
 +
[[Media:02_00_RNG_value_Squeept_7_tiles_jump.png]]<br>
 +
[[Media:04_00_RNG_value_Squeept_5_tiles_jump.png]]<br>
 +
[[Media:06_00_RNG_value_Squeept_3_tiles_jump.png]]<br>
 +
 +
 +
'''Phantoon RNG Patterns
 +
'''
 +
------------------<br>
 +
eye opening times:<br>
 +
 +
xxxx xxxx xx11 For all these ''right slow'' patterns, the binary representation of the RNG values have 1st and 2nd bit equals 1.<br>
 +
xxxx xxxx x[xx]0 ''left mid'' seems to correspond to the 1st bit equals 0, but at least one of the 2nd and 3rd bit (in the bracket) being 1.<br>
 +
xxxx xxxx xx01 ''right fast'' seems to correspond to the 1st bit being equals 1, and the 2nd bit being equals 0 (at least for all the RNG values above).<br>
 +
xxxx xxxx x000 ''left slow'' seems to correspond to the 1st, 2nd, and 3rd bit being equals 0.<br>
 +
 +
 +
 +
---------------------<br>
 +
eye drop jump heights:<br>
 +
 +
 +
-----------------------------------<br>
 +
Phantoon 2nd phase appearance spots:<br>
 +
 +
 +
central, high:<br>
 +
00 00<br>
 +
00 04<br>
 +
00 08<br>
 +
00 0C<br>
 +
 +
00 10<br>
 +
 +
FF 10<br>
 +
80 10<br>
 +
80 90<br>
 +
DC 90<br>
 +
 +
central right, high:<br>
 +
00 01<br>
 +
00 09<br>
 +
 +
 +
far right:<br>
 +
00 02<br>
 +
00 0A<br>
 +
 +
 +
central right, low:<br>
 +
00 03<br>
 +
00 0B<br>
 +
 +
 +
central left, high:<br>
 +
00 05<br>
 +
00 0D<br>
 +
 +
 +
far left:<br>
 +
00 06<br>
 +
00 0E<br>
 +
 +
 +
 +
central left, low:<br>
 +
00 07<br>
 +
00 0F<br>
 +
 +
FF FF<br>
 +
FF F7<br>
 +
20 F7<br>
 +
 +
- - - -
 +
The above samples make it seem like the positions at which Phantoon appears behave as follows:<br>
 +
 +
xxxx xxxx xxxx x000 seems to correspond to Phantoon appearing at the central, high spot<br>
 +
xxxx xxxx xxxx x100 seems to correspond to Phantoon appearing at the central, high spot<br>
 +
 +
xxxx xxxx xxxx x001 seems to correspond to Phantoon appearing at the central right, high spot<br>
 +
xxxx xxxx xxxx x010 seems to correspond to Phantoon appearing at the far right spot<br>
 +
xxxx xxxx xxxx x011 seems to correspond to Phantoon appearing at the central right, low spot<br>
 +
xxxx xxxx xxxx x101 seems to correspond to Phantoon appearing at the central left, high spot<br>
 +
xxxx xxxx xxxx x110 seems to correspond to Phantoon appearing at the far left spot<br>
 +
xxxx xxxx xxxx x111 seems to correspond to Phantoon appearing at the central left, low spot<br>
 +
 +
 +
^ But there must be special cases in which Phantoon appears far left or right down close to the floor (where one would get hit in crouch), which aren't explained by the extrapolated pattern.<br>
 +
 +
-> Reasonable approach to fix this: Run some snes9x 1.51 rr movie, get Phantoon to spawn at such spot, and then RAM Watch the RNG to have a few RNG value candidates remaining to be checked.<br>
 +
 +
 +
 +
[[Media:00_00_RNG_value_Phantoon_appearing_central_high.png]]<br>
 +
[[Media:00_01_RNG_value_Phantoon_appearing_central_right_high.png]]<br>
 +
[[Media:00_02_RNG_value_Phantoon_appearing_far_right.png]]<br>
 +
[[Media:00_03_RNG_value_Phantoon_appearing_central_right_low.png]]<br>
 +
[[Media:00_05_RNG_value_Phantoon_appearing_central_left_high.png]]<br>
 +
[[Media:00_06_RNG_value_Phantoon_appearing_far_left.png]]<br>
 +
[[Media:00_07_RNG_value_Phantoon_appearing_central_left_low.png]]<br>

Latest revision as of 19:10, 4 January 2018

Giant RNG Values Dump from ED (saved and sloppily formatted from Discord meltdown >.<)

Aran;Jaeger-Yesterday at 8:30 PM

01FF 0000 0001 1111 1111 (right slow)
85EB 1000 0101 1110 1011 (right slow)
9917 1001 1001 0001 0111 (right slow)
6783 0110 0111 1000 0011 (right slow)
5D2F 0101 1101 0010 1111 (right slow)
261B 0010 0110 0001 1011 (right slow)
AE47 1010 1110 0100 0111 (right slow)
21B3 0010 0001 1011 0011 (right slow)
EC5F 1110 1100 0101 1111 (right slow)
BA4B 1011 1010 0100 1011 (right slow)
7777 0111 0111 0111 0111 (right slow)
4FE3 0100 1111 1110 0011 (right slow)
AF8F 1010 1111 1000 1111 (right slow)
427B 0100 0010 0111 1011 (right slow)
F4A7 1111 0100 1010 0111 (right slow)
F213 1111 0010 0001 0011 (right slow)
A6BF 1010 0110 1011 1111 (right slow)
BEAB 1011 1110 1010 1011 (right slow)
25D7 0010 0101 1101 0111 (right slow)
0843 0000 1000 0100 0011 (right slow)
D1EF 1101 0001 1110 1111 (right slow)
2EDB 0010 1110 1101 1011 (right slow)

what do all these have in common: exactly
1st and 2nd digit is 1, not 0.

Aran;Jaeger-Yesterday at 8:36 PM

0000 1011 0000 1100
0001 1010 1001 0010
1000 0100 1100 1110
1000 0100 1100 1110
1110 0001 0100 1010
1010 1100 0000 0110
1101 0010 1111 1100
XXXX XXXX XXXX XXXY
(gonna continue this one for left mid after)
-> Alright, if the game does a bit check for MID LEFT, then I assume it gives left mid if 1st bit = 0, but at least one of the 2nd and 3rd bits being 1.(edited)

it is from the txt that i made manually when I was using taco´s rng hack and cheated the rng value to different values
thought i´d try to make sense of the values and the pattern, bec the samples should be many enough

and bec hackers dont wanna help me in figuring out the stuff from here https://wiki.supermetroid.run/RNG1   even though I've asked a few times by now and also asked what I could offer for them to look into it FeelsBadMan

https://www.binaryhexconverter.com/hex-to-binary-converter
using this thing atm

if anyone wants to help figuring patterns, maybe for draygon stuff
maybe if i cant ask them do figure out how phantoon does some stuff, i maybe can already give them a good shot at what to look for and what it should be so...

0011 1000 0100 1101
0001 1010 0101 1001
1111 1001 1010 0101
0010 0010 0011 0001
0001 1111 1111 1101
1011 1111 0000 1001
0000 1011 0101 0101
0101 0000 1110 0001
0001 1011 1010 1101
0011 0111 1011 1001
1011 0001 0000 0101
1101 0011 1001 0001
0010 1011 0101 1101
1000 0100 0110 1001
1110 1010 1011 0101
1010 1010 0100 0001
0100 1111 0000 1101
1010 0101 0001 1001
1011 1000 0110 0101
XXXX XXXX XXXX XXYY
RIGHT FAST: Really looks like it checks for 1st bit being 1, and 2nd bit being 0.

Aran;Jaeger-Yesterday at 9:04 PM

1001 1110 1010 1000
0000 0110 1010 0000
1011 1111 1001 1000
1010 1001 1001 0000
1010 0100 1000 1000
1001 0000 1000 0000
0100 1101 0111 1000
1011 1011 0111 0000
1011 1010 0110 1000
0010 1010 0110 0000
1110 1011 0101 1000
XXXX XXXX XXXX XYYY
LEFT SLOW:
result: It seems like it checks for the first 3 bits being = 0.

its not so many samples of this case in the small loop, so it might be that the actual check is a bit (hahaha, quite literally) weaker than that, but I'll take it for now.
and those are btw all different phanny patterns one can get in the small rng loop (except 1st round)
just 4 patterns

lets see draygon

0000 0001 1111 1111
1000 0101 1110 1011
1001 1001 0001 0111
0110 0111 1000 0011
0101 1101 0010 1111
0010 0110 0001 1011
1010 1110 0100 0111
0010 0001 1011 0011
1110 1100 0101 1111
1011 1010 0100 1011
0111 0111 0111 0111
0100 1111 1110 0011
1010 1111 1000 1111
0100 0010 0111 1011
0100 1111 1010 0111
1111 0010 0001 0011
1010 1010 0100 0001

1010 0110 1011 1111
1011 1110 1010 1011
0010 0101 1101 0111
0000 1000 0100 0011
1101 0001 1110 1111
0010 1110 1101 1011
XXXX XXXX XXXX XXYY
SWOOP, NO TURRET SHOT (i.e. top left turret shot):
Seems to check 1st and 2nd bit to be 1.
And I think this one was wrong when i noted it: 1010 1010 0100 0001

gonna check that
so swoop might be about 1/4 chance?
also the rng hack is this one, for anyone wanna use the cheat tool to cheat values for the address 7E05E5 and 7E05E6, and check what results occur for different values.(edited)

yeah i was right
AA41 (swoop, top right)
thats how it should be in the txt
like this
now next pattern....

lets check draygon diving/gooing to the left.

0000 1011 0000 1100
1001 1110 1010 1000
1111 1110 1000 0100
1101 0010 1111 1100
1011 1111 1001 1000
0110 1000 0111 0100
1010 1001 1001 0000
1001 1110 1110 1100
1010 0100 1000 1000
0101 0110 0110 0100
0110 1110 1101 1100
0100 1101 0111 1000
1100 1000 0101 0100
0100 0010 1100 1100
1011 1010 0110 1000
1011 1110 0100 0100
0010 1010 0110 0000
0001 1010 1011 1100
1110 1011 0101 1000
XXXX XXXX XXXX XXYY
GOO/DIVE & LEFT (turret shooting):
It seems that it checks for 1st and 2nd bit being 0.(edited)

0011 1000 0100 1101
0001 1010 0101 1001
1111 1001 1010 0101
0010 0010 0011 0001
0001 1111 1111 1101
1011 1111 0000 1001
0000 1011 0101 0101
0101 0000 1110 0001
0001 1011 1010 1101
0011 0111 1011 1001
1011 0001 0000 0101
1101 0011 1001 0001
0010 1011 0101 1101
1000 0100 0110 1001
1110 1010 1011 0101
1010 1010 0100 0001
0100 1111 0000 1101
1010 0101 0001 1001
1011 1000 0110 0101
1011 1000 0110 0101
1000 0110 1011 1101
1001 1001 1100 1001
XXXX XXXX XXXX XXYY
SWOOP & TOP RIGHT (turret shooting):
It seems that the game checks for 1st bit being 1, and 2nd bit being 0.

Guess to know what exactly the chance is for draygon to swoop, I´d need to cover all bit check options
so 1/4 shouldnt be all of that chance but just a smaller part
actually, from my notes it seems that "dive, left" meant draygon diving generally (if left or right side), and left turret shooting
okay so draygon patterns...

goo, bottom right:

0001 1010 1001 0010
1000 0100 1100 1110
1110 0001 0100 1010
1010 1100 0000 0110
1010 0001 0000 0010
1011 1100 0011 1110
0011 1001 1011 1010
1001 0101 0111 0110
1000 1011 0111 0010
0001 0111 1010 1110
0111 0110 0010 1010
0010 0010 1110 0110
1101 1001 1110 0010
1001 0111 0001 1110
1001 0110 1001 1010
0101 0100 0101 0110
1000 1100 0101 0010
0011 1010 1000 1110
1001 1011 0000 1010
0010 1001 1100 0110
1010 0010 1100 0010
XXXX XXXX XXXX XXYY
DIVE/GOO, BOTTOM RIGHT (turret shooting):
Seems that it checks 1st bit being 0, and 2nd bit being 1 for this case.

now there's a few special RNG values remaining in the small rng loop, which make draygon spit exactly 1 goo, for a few different angles:

Aran;Jaeger-Today at 9:30 AM

0000 0110 1010 0000 (diag. down 1st goo angle)
1001 0000 1000 0000 (almost hor. 1st goo angle)
1011 1011 0111 0000 (steep diag. down 1st goo angle)
XYXX XXXX XXXX YYYY
If I had to guess.... then the first 4 bits need to be all 0 for draygon to spit goo, and for the angle....
not sure how many exist, but might be 16/4 (4 vert and horizontal ones for full circle and diagonals, times 2 bec there's steep angles aswell, but then only about 1 quarter of the whole circle is used... so maybe 4 angles?)(edited)

there´s only those very few rng values in the small rng loop that make draygon spit goo
first 5 bits cant be deciding it all
because then 1st and 2nd sample would lead to same result
and if we assume it only extends checks from smallest bits to higher ones
then smallest 6 bits would make the difference
the xxxx xxxx xx01 0000 case would then be missing
okay so there´s 4 angles for the goo
and almost horizontal one, an almost vertical one, and 2 angles that are a bit off from the 45° angle
and as known, the goo cycles through those angles (from top downwards)(edited)
time to mess around with the rng hack again...

okay 00 01 = ceres ridley fireballs

Aran;Jaeger-Today at 10:00 AM

for 00 02 too
which is slightly odd
00 03 aswell, but 00 04 is ramming
checks the first 2 bits i guess
00 05 is ram aswell

Ceres Tile Screens
00 00
00 01
00 02
00 03
00 04
00 05
00 06
00 07
00 08
00 09
00 0A
00 0B
00 0C
00 0D
00 0E
00 0F

Ceres Room Rile Position
left stair, center:
0000 0000 0000 0000
0000 0000 0001 0000
1111 1111 1111 0000

left stair, lower:
0000 0000 0000 0001
0000 0000 0001 0001
1111 1111 1111 0001

left stair bottom, left:
0000 0000 0000 0010
0000 0000 0001 0010
1111 1111 1111 0010

left stair bottom, right:
0000 0000 0000 0011
0000 0000 0001 0011
1111 1111 1111 0011

left silver floor, center:
0000 0000 0000 0100
0000 0000 0001 0100
1111 1111 1111 0100

left silver floor, right:
0000 0000 0000 0101
0000 0000 0001 0101
1111 1111 1111 0101

higher grounds, left corner:
0000 0000 0000 0110
0000 0000 0001 0110
1111 1111 1111 0110

higher grounds, left block:
0000 0000 0000 0111
0000 0000 0001 0111
1111 1111 1111 0111

higher grounds, left centered block, left side:
0000 0000 0000 1000
0000 0000 0001 1000
1111 1111 1111 1000

higher grounds, left centered block, right side:
0000 0000 0000 1001
0000 0000 0001 1001
1111 1111 1111 1001

higher grounds, central block, left side:
0000 0000 0000 1010
0000 0000 0001 1010
1111 1111 1111 1010

higher grounds, central block, right side:
0000 0000 0000 1011
0000 0000 0001 1011
1111 1111 1111 1011

higher grounds, right centered block, right side:
0000 0000 0000 1100
0000 0000 0001 1100
1111 1111 1111 1100

higher grounds, right block:
0000 0000 0000 1101
0000 0000 0001 1101
1111 1111 1111 1101

right silver floor, right:
0000 0000 0000 1110
0000 0000 0001 1110
1111 1111 1111 1110

right stair bottom:
0000 0000 0000 1111
0000 0000 0001 1111
1111 1111 1111 1111
- - - - -

xxxx xxxx xxxx 0000 1st tile position (from the left)
xxxx xxxx xxxx 0001 2nd tile position (from the left)
xxxx xxxx xxxx 0010 3rd tile position (from the left)
xxxx xxxx xxxx 0011 4th tile position (from the left)
xxxx xxxx xxxx 0100 5th tile position (from the left)
xxxx xxxx xxxx 0101 6th tile position (from the left)
xxxx xxxx xxxx 0110 7th tile position (from the left)
xxxx xxxx xxxx 0111 8th tile position (from the left)
xxxx xxxx xxxx 1000 9th tile position (from the left)
xxxx xxxx xxxx 1001 10th tile position (from the left)
xxxx xxxx xxxx 1010 11th tile position (from the left)
xxxx xxxx xxxx 1011 12th tile position (from the left)
xxxx xxxx xxxx 1100 13th tile position (from the left)
xxxx xxxx xxxx 1101 14th tile position (from the left)
xxxx xxxx xxxx 1110 15th tile position (from the left)
xxxx xxxx xxxx 1111 16th tile position (from the left)

The colour of a tile seems to be determined by the high byte, i.e. the value of the (unsigned) address 7E05E6:
If the value is equal to or larger than 0x80, the tile is black, otherwise it is white.

0xxx xxxx xxxx xxxx seems to correspond to a tile being white
1xxx xxxx xxxx xxxx seems to correspond to a tile being black

(There's no explicit list of RNG values in binary representation as samples and grounds for the heuristic claim other than the above values and about a dozen randomly chosen RNG values to check this claim.)


Ceres Ridley Attack RNG Pattern

Fireball attack:
0000 0000 0000 0000
0000 0000 0000 0001
0000 0000 0000 0010
0000 0000 0000 0011

Ram attack:
0000 0000 0000 0100
0000 0000 0000 0101
0000 0000 0000 0110
0000 0000 0000 0111
0000 0000 0000 1000

Fireball attack:
0000 0000 0000 1001

Circle attack:
0000 0000 0000 1010
0000 0000 0000 1011
0000 0000 0000 1100
0000 0000 0000 1101
0000 0000 0000 1110

Fireball attack:
0000 0000 0000 1111
- - - - -

Fireball attack:
0000 0000 0001 0000
0000 0000 0001 0001
0000 0000 0001 0010
0000 0000 0001 0011

Ram attack:
0000 0000 0001 0100
0000 0000 0001 0101
0000 0000 0001 0110
0000 0000 0001 0111
0000 0000 0001 1000

Fireball attack:
0000 0000 0001 1001

Circle attack:
0000 0000 0001 1010
0000 0000 0001 1011
0000 0000 0001 1100
0000 0000 0001 1101
0000 0000 0001 1110

Fireball attack:
0000 0000 0001 1111
- - - - -

Fireball attack:
1111 1111 1111 0000
1111 1111 1111 0001
1111 1111 1111 0010
1111 1111 1111 0011

Ram attack:
1111 1111 1111 0100
1111 1111 1111 0101
1111 1111 1111 0110
1111 1111 1111 0111
1111 1111 1111 1000

Fireball attack:
1111 1111 1111 1001

Circle attack:
1111 1111 1111 1010
1111 1111 1111 1011
1111 1111 1111 1100
1111 1111 1111 1101
1111 1111 1111 1110

Fireball attack:
1111 1111 1111 1111


- - - - - The conclusions that I draw from the pattern given by those few samples (the first 16, and 2nd 16 RNG values, aswell as the largest 16 RNG values) is:
Ceres Ridley's next attack is determined by the first 4 bits alone, in the following way:

Fireball attack:
xxxx xxxx xxxx 0000
xxxx xxxx xxxx 0001
xxxx xxxx xxxx 0010
xxxx xxxx xxxx 0011
xxxx xxxx xxxx 1001
xxxx xxxx xxxx 1111

Ram attack:
xxxx xxxx xxxx 0100
xxxx xxxx xxxx 0101
xxxx xxxx xxxx 0110
xxxx xxxx xxxx 0111
xxxx xxxx xxxx 1000

Circle attack:
xxxx xxxx xxxx 1010
xxxx xxxx xxxx 1011
xxxx xxxx xxxx 1100
xxxx xxxx xxxx 1101
xxxx xxxx xxxx 1110

Assuming a uniform distribution, this would correspond to the chances
6/16 = 3/8 for a Fireball attack (2 sets of fireballs constitute 1 such attack)
5/16 for a Ram attack
5/16 for a Circle attack


01FF Cycle Smallest Loop Phantoon Patterns Botwoon.txt
(side at which Phantoon appears, pattern time) ; (spot where Botwoon appears (with spit or not) (with spot where he disappears), (possible alternate spot where Botwoon appears) (with spit or not) (with spot where he disappears))

01FF 0000 0001 1111 1111 (right slow)
0B0C (left mid)
384D (right fast)
1A92 (left mid)
85EB 1000 0101 1110 1011 (right slow)
9EA8 (left slow)
1A59 (right fast)
84CE (left mid)
9917 1001 1001 0001 0111 (right slow)
FE84 (left mid)
F9A5 (right fast)
E14A (left mid)
6783 0110 0111 1000 0011 (right slow)
06A0 (left slow)
2231 (right fast)
AC06 (left mid)
5D2F 0101 1101 0010 1111 (right slow)
D2FC (left mid)
1FFD (right fast)
A102 (left mid)
261B 0010 0110 0001 1011 (right slow)
BF98 (left slow)
BF09 (right fast)
BC3E (left mid)
AE47 1010 1110 0100 0111 (right slow)
6874 (left mid)
0B55 (right fast)
39BA (left mid)
21B3 0010 0001 1011 0011 (right slow)
A990 (left slow)
50E1 (right fast)
9576 (left mid)
EC5F 1110 1100 0101 1111 (right slow)
9EEC (left mid)
1BAD (right fast)
8B72 (left mid)
BA4B 1011 1010 0100 1011 (right slow)
A488 (left slow)
37B9 (right fast)
17AE (left mid)
7777 0111 0111 0111 0111 (right slow)
5664 (left mid)
B105 (right fast)
762A (left mid)
4FE3 0100 1111 1110 0011 (right slow)
9080 (left slow)
D391 (right fast)
22E6 (left mid)
AF8F 1010 1111 1000 1111 (right slow)
6EDC (left mid)
2B5D (right fast)
D9E2 (left mid)
427B 0100 0010 0111 1011 (right slow)
4D78 (left slow)
8469 (right fast)
971E (left mid)
F4A7 1111 0100 1010 0111 (right slow)
C854 (left mid)
EAB5 (right fast)
969A (left mid)
F213 1111 0010 0001 0011 (right slow)
BB70 (left slow)
AA41 (right fast)
5456 (left mid)
A6BF 1010 0110 1011 1111 (right slow)
42CC (left mid)
4F0D (right fast)
8C52 (left mid)
BEAB 1011 1110 1010 1011 (right slow)
BA68 (left slow)
A519 (right fast)
3A8E (left mid)
25D7 0010 0101 1101 0111 (right slow)
BE44 (left mid)
B865 (right fast)
9B0A (left mid)
0843 0000 1000 0100 0011 (right slow) (left bottom) (OR: bottom left...)
2A60 (left slow) (left bottom...)
D4F1 (right fast) (right top...)
29C6 (left mid) (bottom spit left...)
D1EF 1101 0001 1110 1111 (right slow) (bottom spit, top spit...)
1ABC (left mid) (right spit right, top spit top...)
86BD (right fast) (top spit, right spit...)
A2C2 (left mid) (bottom left...)
2EDB 0010 1110 1101 1011 (right slow) (top spit, right spit...)
EB58 (left slow) (right spit right, top spit top...)
99C9 (right fast) (bottom spit, top spit...)
(01FF again)


87 Values


For all these right slow patterns, the binary representation of the RNG values have 1st and 2nd digit equals 1.


The resulting Botwoon patterns (either fixed movements/actions or oscillating ones) seem to not only depend on the RNG value but also on Botwoon's previous pattern, which can lead to different results for the same RNG value!

The phantoon tests were all done from 1 same savestate when Phantoon was about to end his enraged state from getting hit by a Super Missile, and Samus had full Missiles and Powerbombs, but not full health and Super Missiles.

Occurences:
right: 44
left: 43
slow: 33
mid: 65
fast: 22
left slow: 22
left mid: 65
left fast: 0
right slow: 22
right mid: 0
right fast: 22

01FF Cycle Smallest Loop Draygon Patterns.txt
(Draygon's action (either swoop or dive) (gunk happening or not), turret shot position(s))
full spam means the turret kept charging shots and shooting even during Draygon's dives (where he'd normally spit goo in a gunk phase). And in some combination of turret that is firing and direction of Draygon diving, turrets can keep firing and will not stop (see: Left turret when Draygon dives towards the right), but those cases might be improper artificial situations. And otherwise, turrets always stop firing when Draygon comes close while diving, and in general, turrets keep always firing as long as Draygn doesn't dive.
It seems a given fixed RNG value alone doesn't fix the direction to which Draygon dives, but only if he does or not, and the direction depends on the previous situation.
Draygon (so far) seems to never dive twice in a row. And a turret shot spam always is cancelled at some Draygon-position dependent point (close enough to a turret) during dives.

01FF (swoop)
0B0C (dive, left)
384D (swoop, top right)
1A92 (dive, bottom right)
85EB (swoop)
9EA8 (dive, left)
1A59 (swoop, top right)
84CE (dive, bottom right)
9917 (swoop)
FE84 (dive, left)
F9A5 (swoop, top right)
E14A (dive, bottom right)
6783 (swoop)
06A0 (dive, diag. down goo, left)
2231 (swoop, top right)
AC06 (dive, bottom right)
5D2F (swoop)
D2FC (dive, left)
1FFD (swoop, top right)
A102 (dive, bottom right)
261B (swoop)
BF98 (dive, left)
BF09 (swoop, top right)
BC3E (dive, bottom right)
AE47 (swoop)
6874 (dive, left)
0B55 (swoop, top right)
39BA (dive, bottom right)
21B3 (swoop)
A990 (dive, left)
50E1 (swoop, top right)
9576 (dive, bottom right)
EC5F (swoop)
9EEC (dive, left)
1BAD (swoop, top right)
8B72 (dive, bottom right)
BA4B (swoop)
A488 (dive, left)
37B9 (swoop, top right)
17AE (dive, bottom right)
7777 (swoop)
5664 (dive, left)
B105 (swoop, top right)
762A (dive, bottom right)
4FE3 (swoop)
9080 (dive, hor. goo, left)
D391 (swoop, top right)
22E6 (dive, bottom right)
AF8F (swoop)
6EDC (dive, left)
2B5D (swoop, top right)
D9E2 (dive, bottom right)
427B (swoop)
4D78 (dive, left)
8469 (swoop, top right)
971E (dive, bottom right)
F4A7 (swoop)
C854 (dive, left)
EAB5 (swoop, top right)
969A (dive, bottom right)
F213 (swoop)
BB70 (dive, steep diag. down, left)
AA41 (swoop, top right)
5456 (dive, bottom right)
A6BF (swoop)
42CC (dive, left)
4F0D (swoop, top right)
8C52 (dive, bottom right)
BEAB (swoop)
BA68 (dive, left)
A519 (swoop, top right)
3A8E (dive, bottom right)
25D7 (swoop)
BE44 (dive, left)
B865 (swoop, top right)
9B0A (dive, bottom right)
0843 (swoop)
2A60 (dive, left)
D4F1 (swoop, top right)
29C6 (dive, bottom right)
D1EF (swoop)
1ABC (dive, left)
86BD (swoop, top right)
A2C2 (dive, bottom right)
2EDB (swoop)
EB58 (dive, left)
99C9 (swoop, top right)
(01FF again)


87 Values


Binary representation of the (swoop) RNG values:
0000 0001 1111 1111
1000 0101 1110 1011
1001 1001 0001 0111
0110 0111 1000 0011
0101 1101 0010 1111
0010 0110 0001 1011
1010 1110 0100 0111
0010 0001 1011 0011
1110 1100 0101 1111
1011 1010 0100 1011
0111 0111 0111 0111
0100 1111 1110 0011
1010 1111 1000 1111
0100 0010 0111 1011
0100 1111 1010 0111
1111 0010 0001 0011
1010 0110 1011 1111
1011 1110 1010 1011
0010 0101 1101 0111
0000 1000 0100 0011
1101 0001 1110 1111
0010 1110 1101 1011

swoop seems to correspond to the 1st and 2nd bit beign equals 1.

Draygon Slap RNG

Slap:

00 00

04 00
ED 00
AB 00
FF 00
17 00
7F 00
06 00

No Slap:

00 01
00 02
00 03
00 04
00 05
00 06
00 07
00 08
00 09
00 0A
00 0B
00 0C
00 0D
00 0E
00 0F
00 10

FF 01
FF 49
FF CC
FF 80

17 80
17 D3

7F FF
7F 01

- - - From those samples, I conclude: Draygon slaps Samus only if the low byte is equals 00.

xxxx xxxx 0000 0000 seems to correspond to Draygon slapping Samus

xxxx xxxx [xxxx xxxx] seems to correspond to Draygon not slapping Samus (only if not every bit in the bracket is 0).


Croc RNG Patterns Crawling:
FF9B
FF71
FF00
FF15
FF03
FFC0
FFA4
FFDD
FF44

EF44

BC44

7744
7E44

Spitting:

504F
504E
504D
504C
504B
504A
5049
5048
5047
5046
5045
5044
5043
5042
5041
5040

500F
50C1
50EE
50A5
5060

-> it seems that the low byte doesn't matter for this.
- - - - - High byte behavior: (low byte 60)

Crawling:
4F
4E
4D
4C
4B
4A
49
48
47
46
45
44

34
2F

24
1F

Spitting:
50

43
42
41
40

33
32
31
30

23
22
21
20

- - - High byte behavior: (low byte 80)

Crawling:

F4
EF

Spitting:

F3
F2
F1
F0

- - -

My conclusion from these samples is: Crocomire's next action depends on the 1st digit of the high byte lying in the range from 0 to 3, or lying in the range from 4 to F instead.

xxxx 00xx xxxx xxxx seems to correspond to Crocomire spitting

xxxx 01xx xxxx xxxx seems to correspond to Crocomire crawling
xxxx 10xx xxxx xxxx seems to correspond to Crocomire crawling
xxxx 11xx xxxx xxxx seems to correspond to Crocomire crawling

Assuming a uniform distribution, this would result to a chance of 1/4 of Crocomire spitting instead of crawling which would happen with 3/4 chance.


Sidehopper RNG

The following holds (and was explicitly tested) for small Brinstar sidehoppers, large Brinstar sidehoppers, (large) Tourian sidehoppers, large Dessgeegas, and small Dessgeegas:

high hop:

00 01
00 03
00 05
00 07
00 09
00 0B
00 0D
00 0F

FF 0F
FF 01

- - - low hop:

00 00
00 02
00 04
00 06
00 08
00 0A
00 0C
00 0E

FF 00
FF 02

- - - From those samples, I conclude that the parity of the RNG value determines the next jump height.

xxxx xxxx xxxx xxx0 seems to correspond to a low hop
xxxx xxxx xxxx xxx1 seems to correspond to a high hop


Squeepts Jump Height RNG

Squeept 9 tiles jump:
00 00
00 01
00 02
00 03
00 04
00 05
00 06
00 07
00 08
00 09
00 0A
00 0B
00 0C
00 0D
00 0E
00 0F
00 10

00 20
00 40
00 70
00 7F
00 86
00 A5
00 C3
00 E0
00 FF

01 00

-> The low byte of the RNG seems to have no influence on the jump height at all

08 00
09 00

10 00
11 00

18 00

F8 00

Squeept 7 tiles jump:
02 00
03 00

0A 00
0B 00

12 00
13 00

FB 00

Squeept 5 tiles jump:
04 00

04 80
04 7D
05 00

0C 00
0D 00

14 00
15 00

FD 00

Squeept 3 tiles jump:
06 00
07 00

0E 00
0F 00

16 00
17 00

FF 00

- - - - From the above samples, I conclude: The height of the next jump is determined by the lower digit of the RNG's high byte, such that
y0 yy, y1 yy and y8 yy, y9 yy causes a 9 tile jump
y2 yy, y3 yy and yA yy, yB yy causes a 7 tile jump
y4 yy, y5 yy and yC yy, yD yy causes a 5 tile jump
y6 yy, y7 yy and yE yy, yF yy causes a 3 tile jump

xxxx x00x xxxx xxxx seems to correspond to a 9 tile jump
xxxx x01x xxxx xxxx seems to correspond to a 7 tile jump
xxxx x10x xxxx xxxx seems to correspond to a 5 tile jump
xxxx x11x xxxx xxxx seems to correspond to a 3 tile jump

Media:00_00_RNG_value_Squeept_9_tiles_jump.png
Media:02_00_RNG_value_Squeept_7_tiles_jump.png
Media:04_00_RNG_value_Squeept_5_tiles_jump.png
Media:06_00_RNG_value_Squeept_3_tiles_jump.png


Phantoon RNG Patterns



eye opening times:

xxxx xxxx xx11 For all these right slow patterns, the binary representation of the RNG values have 1st and 2nd bit equals 1.
xxxx xxxx x[xx]0 left mid seems to correspond to the 1st bit equals 0, but at least one of the 2nd and 3rd bit (in the bracket) being 1.
xxxx xxxx xx01 right fast seems to correspond to the 1st bit being equals 1, and the 2nd bit being equals 0 (at least for all the RNG values above).
xxxx xxxx x000 left slow seems to correspond to the 1st, 2nd, and 3rd bit being equals 0.




eye drop jump heights:




Phantoon 2nd phase appearance spots:


central, high:
00 00
00 04
00 08
00 0C

00 10

FF 10
80 10
80 90
DC 90

central right, high:
00 01
00 09


far right:
00 02
00 0A


central right, low:
00 03
00 0B


central left, high:
00 05
00 0D


far left:
00 06
00 0E


central left, low:
00 07
00 0F

FF FF
FF F7
20 F7

- - - - The above samples make it seem like the positions at which Phantoon appears behave as follows:

xxxx xxxx xxxx x000 seems to correspond to Phantoon appearing at the central, high spot
xxxx xxxx xxxx x100 seems to correspond to Phantoon appearing at the central, high spot

xxxx xxxx xxxx x001 seems to correspond to Phantoon appearing at the central right, high spot
xxxx xxxx xxxx x010 seems to correspond to Phantoon appearing at the far right spot
xxxx xxxx xxxx x011 seems to correspond to Phantoon appearing at the central right, low spot
xxxx xxxx xxxx x101 seems to correspond to Phantoon appearing at the central left, high spot
xxxx xxxx xxxx x110 seems to correspond to Phantoon appearing at the far left spot
xxxx xxxx xxxx x111 seems to correspond to Phantoon appearing at the central left, low spot


^ But there must be special cases in which Phantoon appears far left or right down close to the floor (where one would get hit in crouch), which aren't explained by the extrapolated pattern.

-> Reasonable approach to fix this: Run some snes9x 1.51 rr movie, get Phantoon to spawn at such spot, and then RAM Watch the RNG to have a few RNG value candidates remaining to be checked.


Media:00_00_RNG_value_Phantoon_appearing_central_high.png
Media:00_01_RNG_value_Phantoon_appearing_central_right_high.png
Media:00_02_RNG_value_Phantoon_appearing_far_right.png
Media:00_03_RNG_value_Phantoon_appearing_central_right_low.png
Media:00_05_RNG_value_Phantoon_appearing_central_left_high.png
Media:00_06_RNG_value_Phantoon_appearing_far_left.png
Media:00_07_RNG_value_Phantoon_appearing_central_left_low.png