View Page Source

Revision (current)
Last Updated by kirkq on 5/17/2014 7:24 PM
Back to Page

The purpose of this page is to document information about the RPG 7th Saga.

This article concentrates on information that would be useful in the making of tool-assisted speedruns.

!!!Random Number Generator

The random number generator is located at 7E006C and 7E006E.  It increments by (RNG*0x383) mod 65536

!!Overworld Incrementation

The random number generator increments multiple times per frame on the overworld to determine enemy movement patterns.  The amount of enemies currently on the screen tends to correlate to the amount of incrementations of the RNG.

!!Dungeon Battle Incrementation

In a dungeon battle, the RNG will only increment due to character and enemy actions.  This makes it very difficult to manipulate favorable outcomes, because the battle is nearly predetermined from the RNG it is entered on.  Choosing a good starting point is extremely important.

!!Overworld Battle Incrementation

In an overworld battle, an additional source of incrementation exists.  Once every 1-2 seconds, the RNG will be called in order to perform random movement of the water on the overworld.

!!!Encounter Groups

||Area||1||2||3||4||5||6||7||8||
|Lemele|Hermit|Hermit|Hermit%%%Wyvern|Hermit|Hermit|Wyvern|Hermit|Hermit| 
|Rablesk|Demon|Demon%%%Wyvern%%%Wyvern|Demon|Demon%%%Wyvern|Demon|Wyvern|Hermit|Hermit%%%Hermit|
|Bonro|Android%%%Android|Android%%%Wyvern|Android%%%Demon|Android%%%Wyvern%%%Wyvern|Demon%%%Demon|Demon%%%Demon|Wyvern%%%Wyvern%%%Wyvern|Demon%%%Demon%%%Wyvern|
|(unknown)|Manrot|Manrot|Manrot|Android%%%Demon%%%Demon|Android|Android%%%Wyvern|Android%%%Demon%%%Wyvern|Demon%%%Demon%%%Demon|
|(unknown)|B.Demon|Despair|Manrot%%%Android|Manrot%%%Manrot|Android%%%Android|Android%%%Android|Android%%%Wyvern%%%Wyvern|Android%%%Demon|
|Eygus|Brain|Brain|Despair|B.Demon|Despair|B.Demon%%%Wyvern%%%Wyvern|Wyvern%%%B.Demon%%%Manrot|Demon%%%Wyvern|
|Present Melenam*|Chimera%%%Trick%%%Titan|Coccoon%%%Soldiek%%%Spidek|Undead%%%Defeat%%%Orc|Manrot%%%Brain%%%Ghoul|Spirit%%%Crab%%%Griffin|Android%%%Sage%%%Wyrock|Flame%%%B.Night%%%Sword|Mutant%%%Manta%%%S.Witch|
|Pell|Manta|Despair|Manta%%%B.Demon|Brain%%%Brain|Brain%%%B.Demon|Brain|Despair|B.Demon%%%B.Demon|
|(unknown)|Titan%%%Titan|Titan%%%Titan|Titan|Manta%%%Manta|Manta%%%B.Demon%%%B.Demon|Manta|Coccoon|S.Witch%%%Titan|
|(unknown)|Coccoon|Coccoon%%%Titan%%%Titan|Titan|Titan|S.Witch|S.Witch%%%S.Witch|S.Witch|Manta%%%Manta|
|(unknown)|Defeat|Defeat%%%Sage|Sage%%%Titan%%%Titan|Coccoon%%%Coccoon%%%Defeat|Coccoon%%%Sage%%%Coccoon|Manta%%%Coccoon|R.Demon%%%Sage%%%Sage|R.Demon|
|Luze|S.Brain|S.Brain%%%Coccoon|S.Brain%%%Sage|S.Brain%%%Defeat|S.Brain|R.Demon%%%Sage|R.Demon%%%Coccoon%%%Coccoon|Defeat%%%Coccoon|
|(unknown)|Defeat%%%Manta|Defeat|Defeat%%%Defeat|R.Demon|R.Demon%%%Manta|Undead|Undead%%%Coccoon|Undead|
|(unknown)|Soldiek|Soldiek%%%Soldiek%%%Soldiek|Soldiek%%%Coccoon|Soldiek%%%Soldiek|B.Night|Defeat%%%Coccoon|R.Demon%%%Undead|S.Brain|
|Polasu|Flame|Flame%%%Flame|B.Night%%%Undead|B.Night|Soldiek|Flame%%%Flame%%%Flame|R.Demon|Soldiek%%%Flame|
|Brush|Defeat|Defeat|Defeat%%%Coccoon|Defeat|Undead|R.Demon%%%R.Demon|Undead%%%Coccoon|S.Brain|
|(unknown)|Undead|Undead|Defeat%%%Coccoon|Defeat|R.Demon|R.Demon%%%Manta|Manta%%%Manta|Undead%%%Coccoon|
|(unknown)|Doom|Doom|Doom|Griffin%%%Flame%%%Flame|Griffin%%%Wyrock|Sword|B.Night%%%B.Night%%%B.Night|B.Night%%%Wyrock|
|(unknown)|Doom|Doom|Griffin%%%Griffin|Griffin%%%Griffin%%%Coccoon|N.Brain|N.Brain%%%Coccoon|Sword%%%Wyrock|Sword%%%B.Night|
|(unknown)|Doom|Sword%%%Sword%%%Sword|Sword%%%B.Night%%%Sword|Sword%%%Griffin%%%Griffin|N.Brain%%%Griffin|N.Brain%%%Sword%%%B.Night|N.Brain%%%Griffin|N.Brain%%%N.Brain|
|(unknown)|Demon|Demon%%%Wyvern%%%Wyvern|Demon|Demon%%%Wyvern|Demon|Wyvern|Hermit|Hermit%%%Hermit|
|(unknown)|Demon|Demon%%%Wyvern%%%Wyvern|Demon|Demon%%%Wyvern|Demon|Wyvern|Hermit|Hermit%%%Hermit|              
                                                            
*Present Melenam can only currently be visited by hacking.  The unknown values should be obvious, but have not been updated.  Two squares exist on the overworld that do not have any encounter, and the battle cancels out if you're on them.

!!!Battle Mechanics

!!Hit Rates
||  (Attacker Speed - Target Speed)  || hit% ||
|-inf to -89 | 10% ( 26/256)|
|-88 to -59 | 30% ( 77/256)|
|-58 to -29 | 50% (128/256)|
|-28 to -19 | 60% (154/256)|
|-18 to  -9 | 71% (181/256)|
| -8 to  -4 | 79% (203/256)|
| -3 to   1 | 83% (213/256)|
|  2 to   6 | 85% (218/256)|
|  7 to  11 | 90% (231/256)|
| 12 to  21 | 95% (244/256)|
| 22 to inf | 98% (251/256)|

!!Running Away

||(Character Speed - Average Enemy Speed) || run% ||
|   -inf to -42   |   2%|
|    -41 to -12   |   5%|
|    -11 to -7    |  10%|
|     -6 to +3    |  30%|
|     +4 to +18   |  40%|
|    +19 to +48   |  60%|
|    +49 to +inf  |  80%|

!!Vacuum and Effect Spells

The game does an agility check and then a success check.  The success check follows the following formula:

PercentChanceOfResist = DefenderResistanceStat - MagicResult

MagicCalc = 256*(AttackerMagic - DefenderMagic)/AttackerMagic

If (MagicCalc > DefenderResistance) then MagicResult = 0 else MagicResult = MagicCalc

This creates strange possibilities, for example when Lejes is wearing most armors and the ring, his DefenderResistanceStat for vacuum is 20 + 95 = 115.  If you then go up against Doros (Magic 130) with Magic 72, then the formula creates a counterintuitive result as follows:

PercentChanceOfResist = 115 - 256*(130 - 72)/130 = 1 , and you would likely get hit by vacuum.  Equipping the Fire or Ice cloak as armor with the ring may be better in this case, but it needs evaluated on a case by case basis.

!!!Stats

||Stat||Main Character Address||Partner Address||Type||
|Character| 7E1DC1|7E1E21|byte|
|Level| 7E1DC2|7E1E22|byte|
|Current HP| 7E1DC4|7E1E24|word|
|Max HP| 7E1DC6|7E1E26|word|
|Current MP| 7E1DC8|7E1E28|word|
|Max MP| 7E1DCA|7E1E2A|word|
|Power| 7E1DCC|7E1E2C|word|
|Magic| 7E1DCE|7E1E2E|byte|
|Speed| 7E1DCF|7E1E2F|byte|
|Guard| 7E1DDC|7E1E3C|word|

!!!Apprentice memory values

||Character||Value||
|Kamil|0|
|Olvan|1|
|Esuna|2|
|Wilme|3|
|Lux|4|
|Valsu|5|
|Lejes|6|

!!!Apprentice join values

7E5120 is the number of battles until apprentice responses change.  This will always refresh to 4-11
7E5121 is the number of battles until apprentice locations change.  This will always refresh to 5.

Apprentice responses are assigned in order of apprentices, without skipping any characters.  The value is assigned to 0 to 99 by the formula INT(7E006E*100/256)

Speaking to Kamil (7E5002)  (Code located at C2/8B20 and table located at C0/8752)
|| ||Kamil||Olvan||Esuna||Wilme||Lux||Valsu||Lejes|| ||Before Water Rune||After Water Rune||Has Sky Rune||
|1|X|70-99|80-99*|90-99|70-99|70-99|95-99| | Offer Join|Offer Join|Offer Join/Offer Fight|
|2|X|50-69|40-79 |80-89|40-69|40-69|90-94| | Offer Join|Offer Join|Offer Join/Offer Fight|
|3|X|30-49|30-39 |60-79|30-39|30-39|70-89| | Neutral|Neutral|Offer Fight|
|4|X|20-29|20-29 |40-59|15-29|15-29|50-69| | Neutral|Neutral|Offer Fight|
|5|X|10-19|10-19 |30-39|5-14 |5-14 |40-49| | Offer Fight|Offer Fight|Offer Fight|
|6|X|0-9  |0-9   |0-29 |0-4  |0-4  |0-39 | | Neutral|Force Fight|Offer Fight|

*Kamil's probabilities for responses to Esuna are coded incorrectly.  This is the actual result.

Speaking to Olvan (RAM: 7E5022)  (Table located at C0/878E)
|| ||Kamil||Olvan||Esuna||Wilme||Lux||Valsu||Lejes|| ||Before Water Rune||After Water Rune||Has Sky Rune||
|1|90-99|X|80-99|80-99|80-99|70-99|95-99| | Offer Join|Force Fight|Offer Join/Offer Fight|
|2|80-89|X|50-79|70-79|60-79|50-69|90-94| | Offer Join|Offer Join|Offer Join/Offer Fight|
|3|50-79|X|30-49|50-69|40-59|30-49|70-89| | Neutral|Offer Join|Offer Join/Offer Fight|
|4|20-49|X|20-29|40-49|20-39|10-29|50-69| | Neutral|Force Fight|Offer Fight|
|5|10-19|X|10-19|30-39|10-19|5-9  |40-49| | Offer Fight|Neutral|Offer Fight|
|6|0-9  |X|0-9  |0-29 |0-9  |0-4  |0-39 | | Neutral|Force Fight|Offer Fight|

Speaking to Esuna (RAM: 7E5042) (Table located at C0/87CA)
|| ||Kamil||Olvan||Esuna||Wilme||Lux||Valsu||Lejes|| ||Before Water Rune||After Water Rune||Has Sky Rune||
|1|90-99|90-99|X|90-99|80-99|90-99|95-99| | Offer Join|Offer Join|Offer Join/Offer Fight|
|2|80-89|80-89|X|80-89|60-79|80-89|90-94| | Offer Join|Offer Join|Offer Join/Offer Fight|
|3|50-79|50-79|X|70-79|40-59|40-79|60-89| | Neutral|Force Fight|Offer Fight|
|4|20-49|20-49|X|60-69|20-39|10-39|30-59| | Neutral|Neutral|Offer Fight|
|5|10-19|10-19|X|50-59|10-19|5-9  |20-29| | Offer Fight|Force Fight|Offer Fight|
|6|0-9  |0-9  |X|0-49 |0-9  |0-4  |0-19 | | Neutral|Force Fight|Offer Fight|

Speaking to Wilme (RAM: 7E5062) (Table located at C0/8806)
|| ||Kamil||Olvan||Esuna||Wilme||Lux||Valsu||Lejes|| ||Before Water Rune||After Water Rune||Has Sky Rune||
|1|90-99|90-99|95-99|X|80-99|95-99|90-99| | Offer Join|Force Fight|Offer Fight|
|2|80-89|80-89|90-94|X|60-79|90-94|N/A*  | | Offer Join|Force Join|Offer Join/Force Fight|
|3|70-79|70-79|80-89|X|40-59|80-89|80-89| | Neutral|Force Fight|Offer Fight|
|4|60-69|60-69|60-79|X|20-39|60-79|70-79| | Neutral|Force Fight|Offer Fight|
|5|30-59|30-59|30-59|X|10-19|30-59|20-69| | Offer Fight|Force Fight|Offer Fight|
|6|0-29 |0-29 |0-29 |X|0-9  |0-29 |0-19 | | Neutral|Force Fight|Offer Fight|

*Wilme will never choose option 2 towards Lejes.

Speaking to Lux (RAM: 7E5082) (Table located at C0/8842)
|| ||Kamil||Olvan||Esuna||Wilme||Lux||Valsu||Lejes|| ||Before Water Rune||After Water Rune||Has Sky Rune||
|1|80-99|80-99|80-99|90-99|X|80-99|90-99| | Offer Join|Offer Join|Offer Join/Offer Fight|
|2|60-79|60-79|60-79|80-89|X|60-79|80-89| | Offer Join|Offer Join|Offer Join/Offer Fight|
|3|40-59|40-59|40-59|60-79|X|40-59|60-79| | Neutral|Neutral|Force Fight|
|4|20-39|20-39|20-39|40-59|X|20-39|40-59| | Neutral|Neutral|Force Fight|
|5|10-19|10-19|10-19|30-39|X|10-19|30-39| | Offer Fight|Offer Join|Offer Join/Offer Fight|
|6|0-9  |0-9  |0-9  |0-29 |X|0-9  |0-29| | Neutral|Force Fight|Force Fight|

Speaking to Valsu (RAM: 7E50A2) (Table located at C0/887E)
|| ||Kamil||Olvan||Esuna||Wilme||Lux||Valsu||Lejes|| ||Before Water Rune||After Water Rune||Has Sky Rune||
|1|80-99|80-99|80-99|90-99|80-99|X|95-99| | Offer Join|Offer Join|Offer Join/Offer Fight|
|2|60-79|60-79|60-79|80-89|60-79|X|90-94| | Offer Join|Offer Join|Offer Join/Offer Fight|
|3|40-59|40-59|40-59|60-79|40-59|X|85-89| | Neutral|Neutral|Force Fight|
|4|20-39|20-39|20-39|40-59|20-39|X|80-84| | Neutral|Neutral|Force Fight|
|5|10-19|10-19|10-19|30-39|10-19|X|70-79| | Offer Fight|Offer Fight|Force Fight|
|6|0-9  |0-9  |0-9  |0-29 |0-9  |X|0-69 | | Neutral|Force Fight|Force Fight|

Speaking to Lejes (RAM: 7E50C2) (Table located at C0/88BA)
|| ||Kamil||Olvan||Esuna||Wilme||Lux||Valsu||Lejes|| ||Before Water Rune||After Water Rune||Has Sky Rune||
|1|90-99|90-99|80-99|90-99|90-99|95-99|X| | Offer Join|Force Fight|Force Fight|
|2|80-89|80-89|70-79|80-89|80-89|90-94|X| | Offer Join|Offer Join|Offer Join/Force Fight|
|3|60-79|60-79|50-69|70-79|60-79|85-89|X| | Neutral|Force Fight|Force Fight|
|4|40-59|40-59|30-49|50-69|40-59|80-84|X| | Neutral|Force Fight|Force Fight|
|5|30-39|30-39|20-29|20-49|30-39|60-79|X| | Offer Fight|Force Fight|Force Fight|
|6|0-29 |0-29 |0-19 |0-19 |0-29 |0-59 |X| | Neutral|Force Fight|Force Fight|

!!!Apprentice locations

||Address||Location||
|0737| Bonro item shop|
|0738| Bonro weapon/armor shop|
|0739| Bonro tavern|
|073A| Zellis tavern|
|073B| Zellis armor shop|
|073C| Zellis inn|
|073D| Eygus house of healing|
|073E| Eygus NW house|
|073F| Eygus inn|
|0740| Pell outside tavern|
|0741| Pell W house|
|0742| Pell house of healing|
|0743| Guntz SE house|
|0744| Guntz inn|
|0745| Guntz outside E house|
|0746| Patrof inn|
|0747| Patrof tavern|
|0748| Patrof weapon/armor shop|
|0749| Bone item shop|
|074A| Bone weapon/armor shop|
|074B| Bone SE house|
|074C| Dowaine outside SW|
|074D| Dowaine house of healing|
|074E| Dowaine weapon shop|
|074F| Belaine inn|
|0750| Belaine NW weapon shop|
|0751| Belaine castle basement|
|0752| Telaine outside SE|
|0753| Telaine tavern|
|0754| Telaine armor shop|
|0755| Pang SE house|
|0756| Pang E house|
|0757| Pang outside SW|
|0758| Padal outside W|
|0759| Padal barracks|
|075A| Padal inn|
|075B| Polasu item/weapon|
|075C| Polasu inn|
|075D| Polasu outside NE|
|075E| Tiffana inn|
|075F| Tiffana castle E balcony|
|0760| Tiffana armor shop|
|0761| Bilthem inn|
|0762| Bilthem 3F|
|0763| Bilthem 1F E room|
|0764| Pandam tavern|
|0765| Pandam weapon shop|
|0766| Pandam upstairs near dock|
|0767| Brush outside NE|
|0768| Brush tavern|
|0769| Brush item shop|

!!! Lux's Infinite Stat Boost Glitch

In the past, if Lux is in the party, he is able to receive a stat boost for 30 HP, 30 MP, and 20 of each other stat.  During the cutscene for this, the player is able to walk 4 steps.  The game does not check for collisions during these steps, so Lux can either walk out of bounds or up the stairs.  If Lux walks up the stairs right as the dialog box appears, he receives the stat boost, but the flag for getting a stat boost is not set.  Lux can receive multiple stat boosts through this method until his stats are maximized.