Blood Brothers Wiki
Advertisement

There is been a lot of requests by players to establish the calculation for damage. This will be the largest player involved project this site has conducted to date. All other work can or could have been accomplished by one person. The Pages we built and the templates we developed are single-person tasks. I was even able to develop the Evolution and Level Formula, though I have to credit a few key people like Frelona for their early work which steered me in the right direction.

This project however, we do not have any way of gathering information from the game's source files or data files. We have to do this strictly from behavior and analyzing changes. To accomplish this, we are going to have to perform a great number of controlled experiments.

Phase I: Project Rules

This phase of the project will begin immediately and will require the immediate attention of the personnel involved. We need to establish the rules that determine what is considered accurate data and what is not. We will get nowhere if we are allowed to include incomplete or corrupted data. I propose a set of requirements that MUST be met in order for the data to be considered valid.

Valid Attacker Data Requirement

  • Name: Name of the Attacking Familiar
  • Level: Level of the Attacking Familiar
  • Stats: Unadjusted stats of the Attacking familiar
  • Buffs: Buffs applied to the attacker. It would have to be "Grace of Wind" from 6872 WIS Galahad, Drake Knight
  • Position: Attacker's Position in the battle (Front, Middle, or Back)
  • Damage: Damage dealt

Valid Defender Data Requirement

  • Name: Name of the Defending Familiar
  • Level: Level of the Defending Familiar
  • Stats: Stats of the Defending Familiar
  • Buffs: Buffs applied to Defending Familiar ("Might of Shield 2" from 8982 WIS Cu, Sith II)
  • Position: Defender's Position in the Battle (Front, Middle, Back)


Phase II: Data Collection

Data will be displayed on this page in table format. To preserve the accuracy of the data, this page will be locked. All data submissions will be made via a template on the Boards, much like the Bazaar.

Tools

You will need the following tools to collect the combat logs and buffs from a fight.

  • Wireshark: A Network Protocol Analyzer.
  • CamStudio: A free screen recording program.
  • Notepad++: Powerful Text Editor with plugin library (Can even map JSON files)
  • Spreadsheet: A Spreadsheet to record your combat data
  • Bluestacks: An Android Emulator program for Windows.
  • [URL Decoder] is an online tool to translate URL encoded text to human readable format.
  • Blood Brothers Database Spreadsheet: Reference between values, names, and other data used in the game.

Raid Boss Combat Log

In this example, I'm going to capture the log of a fight between my team and a Super Raid Boss Level 40. I only use a standard attack and am using a 5 Skein Formation with a Galahad, Drake Knight II in position 2 (front left position is 0), Galahad, Drake Knight II in position 3, Grey Mage in position 7, and Galahad, Drake Knight II in position 8.

First I need to fire up all 5 tools so they are ready to go. In Bluestacks, I'm running Blood Brothers. At the same time, I'm already capturing packets with Wireshark. I have Notepad++, Camstudio, a spreadsheet, and the online URL Decoder open and waiting.

Damage

First damage done, 5270, will be used to find the packet for this fight in the PCAP file.

First thing I need to do is video the beginning of the fight. The "Buffs" are not a part of the combat logs, so that has to be recorded unless you are fast enough to notate during the fight who buffed and when. The order of the buff is important as one theory we would like to test is if a buff impacts a latter buff. I.E. If you cast Guile of Runes on your Adonis and he casts Grace of Winds 2, does his skill benefit from the boosted Wisdom. You need to record the first damage done to the enemy. This will be used to find your packets in the Wireshark PCAP file.

As you can see from the screenshot, the first damage done to the SRB was 5270. After the fight is complete, I will go into my Wireshark. At the top left is a search filter box. Inside this box I type in

http contains "5270"

. This filters out all packets that are NOT http packets and do NOT contain the string "5270". As you can see, I narrowed my results to 3 packets.

Wireshark

http contains "5270" removes all but 3 packets.

Wireshark4

Copy the URL Encoded Combat Log

You will note that the packets I'm looking for are HTTP packets. They should also say "application/URL Encoded". Looking further down, you will notice a line in the packet frame that says "[truncated raid_boss_instance_id...". Note the number that follows raid_boss_instance_id, you will need it later. This is what I want. It doesn't look like much at the moment because the string is encoded to prevent the bad characters like { and ] from causing issues when it's transmitted. I need to copy this string by right clicking on it, select Copy > Bytes > Printable Text Only. Now switch over to the online URL Decoder site.

URLDecoder

URL Encoded text

URLDecoded

Decoded to Human Readable "JSON" format

. Paste the string into the box, hit Decode. It will immediately convert the string into human readable string with familiar formatting. This string is call a JavaScript Object Notation and is used to clump 3-Dimensional array (Think spreadsheets with tabs full of rows of data with lots of columns). Now we still can't make heads or tails of the log. So we copy that block of text and past it into Notepad++. It will drop onto the document as one line of text. To break it up into multiple lines and make it finally make sense, we need to replace

{"damage"

string with

\n{"damage"

. Essentially, we are adding a new line in front of every block of text that begins with {"damage".

Formatting

In Notepad++, find {"Damage" and replace it with \n{"Damage" to create line breaks and make the string readable.

Now we suddenly have a readable string. Each line will read as follows:

  • Damage: The amount of damage done
  • Skill: Skill used. Either the skill id, -1 for your teams normal attack, or -2 for opponent's normal attack
  • Caster: Who attacked
    • Index: Slot of the attacking familiar. Value increases from the players Top Left to Right, then Bottom left to right. Same for the opponent, Top Left to Bottom Right.
    • Group: Either your group (1) or the Opponent Group (2)
  • Target: Who was attacked or targeted by the skill
    • Index: Same as above
    • Group: Same as above

Before we transcribe this information into our spreadsheet, we first need the stats of the Opponent and our own team. In Raids, our familiars stats will show up with all Savage and Title bonuses already factored in. Go back into wireshark and in the filter box, type in

json contains "<raid_boss_instance_id>"

. Earlier you noted the Raid Boss Instance ID. Enter this number instead of the tag I used. The results will be reduced to only those packets related to this specific raid boss.

Wireshark2

Found our Raid Boss. Confirm the Name, Level, and Hit Points

Depending on how many times you interacted with this raid boss, including the number of times you pulled up the ally screen, you could get a bunch of results back. However, the only one you are interested in is the packet that contains "Member Key: BattleData" about 4 lines down. (If you don't see this yet, right click on the JavaScript Object Notation line in the packet frame and select "Expand Subtrees". This stream has the stats for the opponent and your team. You will first record this data into your spreadsheet as base reference. If you are doing your research on multiple raid bosses, this likely will not change for the same raid boss until DeNA decides to screw with the event and change things.

What you want to note in the stream will be:

Under "enemyParty:"
formationID - This is the id formation your opponent is using. This id is translated to the formation name in bb_game_data.json or on the Blood Brothers Database Spreadsheet.
Under "party:"
cardID
hp
atk
def
wis
agi
skillId1
skillId2
skillId3
skillLevel1
skillLevel2
skillLevel3

Below that you will see "myParty". This is the portion of the stream that contains your own party information.

Under "myParty"
formationId
Under "deck", If you see "Null value", it means that slot in your party was empty. For each non-Null value set, record the following:
cardId
level
hp
atk
def
wis
agi
skillId1
skillId2
skillId3
skillLevel1
skillLevel2
skillLevel3
remainHp

Do not be surprised if some of your familiars show drastically larger than normal stats. Remember that all Savage and Title bonuses will be applied by the time you see this stream, so your WL and Savage Elites will have 5x or more for each stat. To see what "factors" were applied to your familiars as stat multipliers, scroll down to a section called "factors". This is the stat multipliers.

Now record all this into the spreadsheet. Refer back to your video to annotate which familiars received what bonuses to their stats from buffs. Then add the combat damage log to the sheet.

As each attack is analyzed on its own and in relation to the overall fight, each attack should contain the full details of the attack including the formation and stats of the attack (calculate the stats from the buffs that applied) and the formation and stats of the target.

Example Spreadsheet Row:

Friendly Enemy Attack
Fight Formation Slot Name Level HP ATK DEF WIS AGI Formation Slot Name Level HP ATK DEF WIS AGI Skill Damage
234 11 3 Galahad, Drake Knight II 99 6543 7271 7349 6842 24666 100 0 Super Raid Boss 40 96000000 12500 0 12500 0 Whirlwind 37995
  • Fight - Invent some id to identify and group all attacks in the same fight. This will let you pull all of your combat logs for all of your fights into one sheet.
  • Formation - Your formation ID
  • Slot - Start with 0 for the Top Left Position to 9 for the Bottom Right Position
  • Skill - Skill used. Remember that -1 is your team's normal attack and -2 is the opponent's normal attack
  • Damage - Damage value from the log for that attack.

As you complete this information, you can post your spreadsheet if it was on Google Docs with read only permissions to the public to help our people draft the formula from your data. The more "attack" data we receive, the quicker we can nail down the exact formula used to calculate damage.

If you have any suggestions to improve on this process or this post, please feel free to drop a line in the comments. Be sure to note which phase of this project you are discussing.

OKRedleg (talk) 05:45, February 20, 2013 (UTC)

Phase III: Calculations

Any calculations will be displayed here and tested. Once sufficient confidence is established, the final formula will be posted here.

Advertisement