Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Erzfreund

Pages: [1] 2
I had the same problem once. Here are my results (even it is ps1 pal German):

Hmm maybe:

- Stats sources obtained via morphing
- Equipment boneses


Let me see if i can understand your point, you say that those memory address have sync/replicated values on the savemap addresses?

Well, actually my point is, that z_6[1] and z_6[2] show the same values as field encounter timing StepID/Seed and offset, respectively, thus there are probably related or the same. I provided the memory addresses so anyone can reproduce it. Can’t say anything about the internals.

Yes, the values in the memory address and in the save map are identical.

0x0BA1    1 Byte     z_6[1] --> StepID/Seed
0x0BA2    1 Byte     z_6[2] --> Offset

Qtcreator works like a charm.

Could it be, that the save slots are starting with slot 2 instead of slot 1?

For the save map:


#1 --> StepID 09C540 (psx ntsc and BrutalAl’s notion, Terence called it Seed)
#2 --> Offset 09AD2C

These values are used for field encounter timing:

That is a good approach. But instead of reverse the stat table, Baseline and Current Stat must be inverted generating a new Stat Difference formula.[…]

Your idea is the better one and it should work good enough. Can’t test though (Linux).

Hmm, I’m a bit unsure if we mean the same thing. :) So I’m going to clarify my point, even you may already understood.

With »reverse« I mean to switch the order of the stat gain:

Level up:            Difference   Stat Gain
                             0- 3          0
                             4- 6          1
                             7- 9          2
                            10-11        3

Level down:       Difference   Stat Gain
                             0- 3          3
                             4- 6          2
                             7- 9          1
                            10-11        0

The idea behind is, that at a level down the baseline decreases and thus the diff decreases, resulting in a different stat gain/lose need.

Stat Difference = Rnd(1..8) + Baseline - Current Stat

Let’s assume rnd = 4, baseline = 40 and current stat = 30.
When levelling up, the current stat needs to catch up the baseline, thus the difference of 14 needs a high stat gain.
When levelling down, the baseline needs to catch up the current stat, thus the difference of 14 needs a low stat gain/lose.
That’s why reversing.

Ah okay, I didn’t know that the too fast growth rate was already fixed. Nice, good stuff.

For levelling down, I guess a reverse stat gain could help (even it is not really necessary).

                          Difference   Stat Gain
                             0- 3          3
                             4- 6          2
                             7- 9          1
                            10-11        0

The stats and hp/mp  gain in 1.9.6 doesn’t work as expected.

1) stats grow over 100 (stats are capped at 100)
2) Changing a few levels in one direction is broken. Level up results in impossible high growth rate with overflow, while level down results with stats stucked.

My educated guess is, that maybe stat_amount in Save.cpp is not updated, when a level is changed.

Maybe they are using salt?

What happens if you restore the meta data of a save file like »last time modified«, etc.?

I guess I was really the only, who was interested in it.
To conclude it:

A look-up table (8010AE20 German pal ps1) is created every time the party enters the world map. It is possible to have identical numbers next to each other. At least for reloading, the numbers inside the table are depended on the in-game time. The Seed (8010AE1C/8010AE1D) starts with the last value in the table, which happens to be 08 02 (position 520). The 02 counts how many times the first value has overflown. When the Seed advantages further it jumps to 00 00 and a new look-up table is created.
The Seed advantages via three methods. The first method is using the left/right and the view rotating buttons. While  both types of buttons increase the Seed by one – doesn’t matter, which vehicle is used – the left/right buttons also increase the Stepscounter by one if there is place to walk by foot/Buggy. The second way is to get a battle check. The third way is to be in the following area. Every ca. 64 frames the Seed increases by two:

To reset the Seed a reload or a random world map encounter is necessary. 

The Stepcounter (80116240) starts with 74 and it wont increase the danger counter (80116249) till it overflows for the first time (74 FF --> 00 00). It advances by using the movement buttons. After the first overflow it starts cycling from 00 to 10 and after the next overflows a battle check occurs. Every time the party enters the world map the Stepcounter is reset to 74. Entering means after a battle, coming from a field map or reloading. Another way is to get off a vehicle, which resets the counter to E2, hence it is possible to never have an encounter with the buggy.

For the enemy encounter formation I will only state the additional stuff to Terence’s Enemy Mechanic FAQ. At first the Yuffie (in forests) or the Chocobo (everywhere else) battle is checked. After that the pre-emptive check follows. If it is successful, than the next RNG Seed checks for a normal battle instead of a back attack battle.
If a pre-emptive materia is equipped, the chances are doubled (128/256 instead of 64/256). This translates into almost halving the chances for getting a special battle from no pre-emptive materia to master pre-emptive materia. The ambush alert halves the chances even further.
In North Corel the chances doesn’t add up to 64 but 56. The remaining 8 leads to nothing. There will be no battle and the danger counter is reset to zero.


Some time ago I was thinking about making a topographic or vegetation map out of it. So if you going to make a huge map, I’m interested.

This thread feels like blog. :D
The seed for the world map rng look-up table is incremented by 2 every 60 or 64 frames in a certain area. So just standing still gives different encounter outcomes. The exact area is probably determined by x and y values, but the following map should be good enough.

Pre-emptive chances on the field map are not doubled if they are bigger than 16/256.

I found the world map table. I know now how the game picks a encounter formation (useful for getting the Mystery Ninja or the right Chocobo at the first try without hacking, but just looking in the memory) and thus why pre-emptive materia can give different battles – e. g. normal battle #1 instead of normal battle #4.

Something which could be more interesting: At least on the world map pre-emptive chances are doubled if a pre-emptive materia is equipped. This means the maximum chance is not 85/256, but 170/256.

It looks surprisingly good and I guess problems with low contrast due to bright backgrounds can be solved.

It seems so DLPB, well at least it contains data of encounter values and encounter formations[1].

I found the danger counter (ps1 German pal: 80116249, partially 80116248 and thus enables instant battles) and the place (80116240) which determines the next battle check. It cycles from 00 to 10. After a battle it is set to 74 (followed by FF FF FF) and so it takes 150 »steps« (different from the animation) for the first battle check.
The RNG value changes with each battle check or pushing/rotating left or right. Pushing/rotating once gives nearly the same RNG value as when reaching the second battle check with using only the up and down buttons.

BUT it doesn’t help. According to Terence the RNG look-up table (541 byte) is not static and uses a complicated refreshing routine[2].
I tried finding the table with RNG value for the battle check, but without luck. Even without knowing that table, but knowing it is recalculating, could I assume the RNG as fair?


No success till now, nevertheless here are my findings:

Enemy encounter formation can be influenced by at least three things:

1) Materia
 -Enemy away
 -Enemy lure
 -Pre-emptive equipped on the third character
2) Button pushing
 -up and down (both identical)
 -left and right
 -clockwise and counterclockwise rotating view buttons
3) Amount of time spend in the last battle (at least in the result screens)

The Enemy away/lure materia can change the amount of battle checks and as a result different battles are possible. The pre-emptive materia can change the encounter itself (don’t know about the checks, haven’t found one, but this is still open).
The up and down buttons doesn’t change the amount of battle checks and encounters, which means running with a chocobo up and down won’t change the battle checks and encounter.
The left/right and rotating view buttons are almost identical. The difference is that left/right counts towards the battle check. Pushing both button types while not moving the normal character can give different amounts of battle checks and/or enemy encounter. This means just rotating your view or flying left and right with the Highwind can give different encounters.
Rotating one to the left (or right – doesn’t matter) and then running up/down will give the same result as running up/down and then before the last up/down button push a rotate of one.
The RNG table in the kernel (starting with 099) is not (directly) involved. 

I tried to play with memory values obtained by a diff at different times in the battle result screen, but without luck. Trying to get a reasonable difference on the world map failed even with 1 frame per s advance. Thousands of different lines à 16 is just to much.

What could help is a way to get a instant battle. I’ve found the memory value for the Enemy Lure/away, but not for the encounter value. I tried to find the difference between Cosmo area and a forest, but it seems that die encounter value is not stored as a simple hexadecimal conversion.

All help/ideas are welcome to solve this.

Yeah, when I filled the 99 RLUT with zeros the ATB gauge was always almost full at the beginning.
However, I have written a (poor) script to check the emulator memory dump for other tables – where 256 numbers are next to each other – and there was exactly one table.
What I’ve forgotten to tell the last time: I’ve tried to find differences between two memory dumps, but even with the same ingame view the differences are huge (I realised just now, that I didn’t synced the sound).

Well, I’m completely out of real ideas (I guess just syncing the sound won’t reduce the huge differences to a sane level). What can I do?

Hmm, I played around with little success.

I couldn’t find the RNG-table used for field encounters (177 202 238 […] 171 176 012) in the psx emulator memory, so I think it isn’t used for the world map encounters.
I filled another RNG-table (099 006 240 […] 199 106 202) with zeros, but there weren’t any significant differences in enemy encounter times, formations and pre-emptive chances. Additionally there were no differences between a normal loading from memory card after a hard reset and the same procedure only with  the »zeroed« RNG-table .

So it seems that the encounter formation is done differently (or my methods were wrong). So, how can I determine it? I know that Enemy Lure/Away has an impact (not always) on the encounter formation, if that helps.

Ah, that's nice, but not really surprising (regarding the Turk battle at Gongaga).

What happens if the drop rate is set to 62? Especially when fighting Battery Caps. I think five of six Eye Drops is the best one can get.

Ah, no I meant, that it could be possible, that the maximum drop for items is two, which is not the case. I believe, that you are right about the general impossibility of winning all items.

(Full List) Win: [ 8] Ice Crystal, [ 8] Bolt Plume, [ 8] Light Curtain,
                 [ 8] Mute Mask

I can guarantee that it is possible to get all items as long as there are multiple win slots. For example Garuda at Dao Chao (Far right hand is the best spot for that).
I’ve also won three Eye Drops from six Battery Caps.

[…]but a Master Tonberry (Lvl 77) will have a 1:6.452 chance of dropping a Megalixer (rate of 8) for a level 99 character[…]

Hard to believe. Megalixer drops are quite common.

Hi there,

I want to know which look-up table is used for the random encounters on the world map. Is it identical to the one used in field encounters (177 202 238 108 …)?

It is possible to factor out one thing per round,  but this makes the formula just a bit simpler. I don’t know, I did that and additionally I converted the rest in single fractions (rather silly), but it is still a jungle full of numbers.


I did a general solution in Python2 (pretty ugly, I guess):

There is a formula for this specific problem. Or do you need a general approach?

Expected probability of winning =

Pages: [1] 2