Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

Vagrant Story/game score: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
(Add formula and detailed explanation for calculating the Game Score)
(No difference)

Revision as of 06:35, 24 May 2024

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.

Kill List Score Calculation Table
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.

Weapon Usage Score Calculation Table
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 Time Trials Data Table
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 Ability Score Table
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