The current URL is datacrystal.tcrf.net.
Vagrant Story/game score
This is a sub-page of Vagrant Story.
Game Score Calculation
TL;DR
GameScore = ((KillListScore + WeaponUsageScore + BossTimeTrialsScore + ChainAbilityScore + GamesCompletedScore) * CompletionTimeMultiplier) + StreakScore + BossKillScore
if (GameScore > 999,999,999) GameScore = 999,999,999
Detailed explanation
The procedure that calculates the GameScore is part of the MENU9.PRG
file, and is located in game memory at the addresses 0x80107c34-0x80107fb8
. This procedure takes no arguments and doesn't return any value.
KillListScore
KillListScore is calculated by multiplying kill number of each enemy type by the corresponding modifier, and then adding the products together. Each is stored as a 2-byte unsigned value.
Offsets | Values | |||
---|---|---|---|---|
Enemy Type | Kills | Modifiers | Hex | Dec |
Human | 8005fea4 | 80102a18 | 0x14 | 20 |
Beast | 8005fea6 | 80102a20 | 0x14 | 20 |
Undead | 8005fea8 | 80102a22 | 0x28 | 40 |
Phantom | 8005feaa | 80102a24 | 0x50 | 80 |
Dragon | 8005feac | 80102a26 | 0x64 | 100 |
Evil | 8005feae | 80102a28 | 0x3c | 60 |
WeaponUsageScore
WeaponUsageScore is calculated by multiplying the number of times each weapon type was used by the corresponding modifier, and then adding the products together. Each is stored as a 2-byte unsigned value.
Offsets | Values | |||
---|---|---|---|---|
Weapon Type | Usage | Modifiers | Hex | Dec |
Unarmed | 8005feb4 | 80102a24 | 0x14 | 20 |
Dagger | 8005feb6 | 80102a26 | 0x28 | 40 |
Sword | 8005feb8 | 80102a28 | 0x14 | 20 |
Great Sword | 8005feba | 80102a2a | 0x64 | 100 |
Axe & Mace | 8005febc | 80102a2c | 0x3c | 60 |
Great Axe | 8005febe | 80102a2e | 0x64 | 100 |
Staff | 8005fec0 | 80102a30 | 0x3c | 60 |
Heavy Mace | 8005fec2 | 80102a32 | 0x64 | 100 |
Polearm | 8005fec4 | 80102a34 | 0x50 | 80 |
Crossbow | 8005fec6 | 80102a36 | 0x3c | 60 |
BossTimeTrialsScore
BossTimeTrialsScore is calculated by adding 20,000 points for each Boss Time Trial completed. The game stores 3 best records for each trial, and each record has the size of 4-bytes:
0 Centiseconds 1 Seconds 2 Minutes 3 Round Number
Boss Name | Address | ||
---|---|---|---|
Record 1 | Record 2 | Record 3 | |
Minotaur | 8005fec8 | 8005fecc | 8005fed0 |
Dragon | 8005fed4 | 8005fed8 | 8005fedc |
Earth Dragon | 8005fee0 | 8005fee4 | 8005fee8 |
Snow Dragon | 8005feec | 8005fef0 | 8005fef4 |
Damascus Golem | 8005fef8 | 8005fefc | 8005ff00 |
Damascus Crab | 8005ff04 | 8005ff08 | 8005ff0c |
Death & Ogre Zombie | 8005ff10 | 8005ff14 | 8005ff18 |
Asura | 8005ff1c | 8005ff20 | 8005ff24 |
ChainAbilityScore
ChainAbilityScore is calculated by multiplying the Chain Ability Highscore (stored at address 0x8005ff28)
by the following factor:
Chain Highscore | Multiplier |
---|---|
0-5 | 10 |
6-10 | 20 |
11-15 | 40 |
16-20 | 80 |
21-25 | 160 |
26-30 | 320 |
31-50 | 640 |
51+ | 1280 |
GamesCompletedScore
GamesCompletedScore is calculated by multiplying the number of completed game runs by 100,000. The number of games completed can be found at address 0x80061598
.
CompletionTimeMultiplier
CompletionTimeMultiplier depends on the best game completion time in the following manner:
Hours | Minutes | Multiplier | |
---|---|---|---|
Hex | Dec | ||
<5 | 0x12c | 300 | 2.0 |
<9 | 0x21c | 540 | 1.5 |
<10 | 0x258 | 600 | 1.25 |
anything longer | 1.0 |
Record completion time is stored at address 0x8005ff30
and has the size of 2-bytes:
0 Minutes 1 Hours
StreakScore
The formula:
StreakScore = StreakScore + TargetMaxHP + (TargetMaxHP * EnemyStreak) / 2 + (TargetMaxHP * WeaponStreak) / 2 + (TargetMaxHP * DefenceChainStreak) / 2
if (StreakScore > 999,999,999) StreakScore = 999,999,999
Details:
- StreakScore - located at
0x8005ffa4
; 4-bytes - EnemyStreak - number of enemies of the same type killed in a row; located at
0x8005ffa8
; 1-byte; capped at 100 - WeaponStreak - number of killing blows performed in a row with the same type of weapon; located at
0x8005ffaf
; 1-byte; capped at 100 - DefenceChainStreak - number of defennce abilities used successfully in a row in a single fight; located at
0x8005ffb0
; 1-byte
BossKillScore
The formula:
BossKillScore = BossKillScore + 100,000 - (100 * HealCounter)
if (BossKillBonus > 999,999,999) BossKillBonus = 999,999,999
Details:
- BossKillScore - updated after every boss fight; located at
0x8005ffa8
; 4-bytes - HealCounter - number of healing spells/items used during the boss fight; located at
0x8005ffb2
; 2-bytes