User:Blaziken257/Telefang RNG
In Telefang 1, random events rely on a random number generator. It is generated using the following variables:
- The frame counter, located at 0x3C30 in RAM. This is an 8-bit number, and it increments by 1 for every frame that passes (1 frame = 1/60 second). However, it temporarily freezes in certain situations, mainly when the game has to load screens. The frame counter makes random actions frame dependent.
- Seed 1, located at 0xC41F in RAM. This value is also an 8-bit number, and it changes every time a random event occurs, and its value depends on the current value of the frame counter, as well as the current values of both seeds.
- Seed 2, located at 0xC420 in RAM. This 8-bit value functions similarly to Seed 1, although it influences the randomly generated number more than Seed 1.
- Seed sum, the 8-bit sum of the two seeds, located at 0xC400 in RAM. This is the randomly generated number, most directly used to determine random events.
Seed calculation
Note: Original thread here: http://s15.zetaboards.com/Tulunk_Village/topic/6967791/1/
First, the game takes the current value of the frame counter and uses a formula to calculate a new 16-bit number, which is later added to the seeds.
F = (Frame counter * 256) + ((int(((Swap nibbles(Frame counter) + 1) mod 256) / 2) + 135) mod 256)
Next, the game calculates a number based on the current value of the two seeds. This formula is simpler:
S = Seed 1 * 256 + Seed 2
To obtain seed 1:
Seed 1new = ((F+S) mod 256)
To obtain seed 2:
Seed 2new = (int(((F+S) mod 65536)/256)) xor ((F+S) mod 256)
The seeds are then added together (reduced to 8 bits), and this is the randomly generated number.
Random events
Wild Denjuu
Species
For more information, see one of these pages.
Random number range | Probability | Denjuu Group |
---|---|---|
0-24 | 10% | Denjuu 4 |
25-75 | 20% | Denjuu 3 |
76-152 | 30% | Denjuu 2 |
153-255 | 40% | Denjuu 1 |
Level
Random number range | Probability | Level offset |
---|---|---|
0-63 | 25% | +1 |
64-127 | 25% | -1 |
128-255 | 50% | 0 |
Personality
Random number range | Probability | Personality |
---|---|---|
0-19, 240-255* | 14% | 0 |
20-39 | 8% | 1 |
40-59 | 8% | 2 |
60-79 | 8% | 3 |
80-99 | 8% | 4 |
100-119 | 8% | 5 |
120-139 | 8% | 6 |
140-159 | 8% | 7 |
160-179 | 8% | 8 |
180-199 | 8% | 9 |
200-219 | 8% | 10 |
220-239 | 8% | 11 |
Battle events
Move accuracy
Critical hits
Damage calculation
Personality flaws
AI
Target selection
Move selection
Escaping
More research needed!
When 0xD504 <= 0xD546 (note: these addresses' behavior are unknown, although both seem to always be 0 before battling):
Random number range | Probability | Level offset |
---|---|---|
0-199 | 78% | Unable to escape |
200-255 | 22% | Able to escape |
When 0xD504 > 0xD546 (note: these addresses' behavior are unknown, although both seem to always be 0 before battling):
Random number range | Probability | Level offset |
---|---|---|
0-84 | 33% | Unable to escape |
85-255 | 67% | Able to escape |