Welcome back! So you might have noticed that I started work on the ‘battle report’ last week. This week I went about actually hooking it all up. Boy, was I in for a surprise though! I was missing some fundamental information.
Data Gathering
The basis for any stats system, is an excellent data gathering system. You need to compile as much data as possible so you can go back later and do data mining to get conclusions. This was my first hurdle, as I had created a really nice event system to notify on certain big event, but there was nothing really tracking all theses events in a central place. Sure, the stats system tracked number of kills and stuff like that, but it didn’t track it on a per game session level.
So, I created a central event tracker that would compile all the events that happen during a single match. This required a small update to the event system, as it was originally designed to trigger events on a per player basis and this new system needed to be able to tap into ALL the events, regardless of the player. I managed this by changing the events to be hierarchical, so that if the “Gameplay/PlayerDeath/Cyberdogs7” event triggered [signalling that I died], it would also trigger the “Gameplay/PlayerDeath/” and “Gameplay” events. This allowed different systems to tap into events at the level they needed.
Now that I could tap into all the events and track everything that was happening during the match, I looked at what data the events actually contained. Sadly, it was very lacking in information for me to make a good system for handing out rewards [or achievements]. Here is an example of the old kill event data:
KillEvent{
Killer : AIbot01
Weapon : { WeaponName : MINI-HD WeaponType : Machine gun MaxRange : 450 }
Bullet : { Damage : 5 Distance : 100 }
}
Not terrible, right? Sure, we can do a little bit with this; it was enough to create a few achievements off of. But can we really tell much from this? Can we tell if the player was attacking or defending? What about if they were well outnumber when they got the kill? What about the overall roles of each player? What if one of the players had much better parts than the other?
All of these questions can be very important when trying to reward behaviors or when trying to determine what ‘role’ a player was playing. Here is a pseudo example of what the new kill event looks like:
KillEvent : {
PlayerKilled
PlayerDied
Weapon : { WeaponName WeaponType WeaponRange ReamainAmmo }
Projectile : { Damage DamageType FiredDistance FiredDirection HitDirection }
KilledIsHuman
KillerPlayerIsTurret
KillerRole
KilledRole
KillerMechLevel
KilledMechLevel
KillerAllies : {Distance, Distance, Distance}
KillerEnemies : {Distance}
DistanceToKillerBase
DistanceToKilledBase
GameTimeElapsed
}
Holy smokes is that a lot more data! Now, we can easily track complicated things like:
“Kill 3 enemies while protecting your team”
or
“Kill 5 enemies while defending your base”
or
“Kill 3 enemies that are at least 5 levels higher than you, in the first 5 minutes of a match”
or even
“Get a kill with your last bullet, while defending your base, while being the only remaining member of your team, from over 750 meters, in the last 60 seconds of the match”
Data Mining
Now that we are harvesting all this data, we can start to mine it for handing out rewards! There are some really simple things, like rewards for number of kills, rewards for destroying parts, rewards for winning, but there are some more complicated ones as well.
MAV is a game with ‘fluid’ roles, but we still want to reward people for playing certain roles. If you deploy with a bunch of howitzers, we want you to be rewarded for playing the role of the support gunner. But we don’t want to limit you to roles based on just the parts you picked, so this is where it gets a little complicated.
What I do in this step is start to apply bonuses on your actions based on the role that I determine fit those actions. Did you do a lot of up close fighting, near the enemy base? You will be fit to the attacker role type and receive a bonus to all your kills and base damage rewards. Did you destroy a good number of parts, from a long range, while maintaining a good accuracy number? Then you will receive a bonus for your parts destroyed along with an accuracy bonus.
Once all the bonuses are calculated up, the role with the largest bonus is determined to be your primary role. This roles bonus is then added to your base rewards, which then is appied to your Account progression. Now, that modified reward is duplicated and then applied to your role type progressions depending on their individual bonus levels. Example:
Base reward : 1800 XP
Soldier Bonus : 500 xp
Scout Bonus : 100 XP
Sniper Bonus : 250 XP
Support Bonus : 50 XP
Commander Bonus : 50 XP
Defender Bonus : 400 XP
=
Final Account XP : 2300 XP [Base + Soldier Bonus] Role XP [2300 divided by contributions]
Soldier : 852 XP
Scout : 170 XP
Sniper: 426 XP
Support : 85 XP
Commander : 85 XP
Defender : 682 XP
Going Forward
I can guarantee some of you reading this are already seeing how to leverage this system for other things in the game. For starters, it will enable a MUCH greater variety of achievements, which will be more fun to earn and feel more like an achievement. On top of that, when this system gets coupled with an anonymous data logger to track overall stats of the whole game among ALL the players, it will help inform balance discussions. I can also thing of some really cool visualizations that I would love to do, so you can relive past matches in all their glorious data. I know Halo 2 and Halo 3 had a great system for this that was public on their site. While I am not promising that level of a system, this data mining will certainly lay the ground work for it in the future.
Well, that seems to be all I have for this week! Make sure to stop by the dev streams as we continue to build up No Mans Pass v2 to final art quality! Don’t hesitate to leave me a comment about how Awesome/Terrible this system is, or even take it to the forums to hash it out!
See you next week!
Comments 1
This looks brilliant, the level of data gathered will be incredible and like you said it opens the door for so many ways of tracking and achievements.
Zebby