Last active
January 2, 2020 18:40
-
-
Save khang06/00e4e62c9572ee2c4a959b2f2c459329 to your computer and use it in GitHub Desktop.
(almost) everything that gets sent to nintendo through play reports/splatnet2 in splatoon 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
please visit https://wiki.oatmealdome.me/Telemetry, it's much more well-formatted and is on a wiki | |
4.1.0 play report/splatnet2 stuff revision 2 (oct 23 2018) by khangaroo | |
thanks to oatmealdome and shadow for some help | |
events that have only been statically analyzed are marked with (?) | |
events that are a big mystery for one reason or another are marked with (???) | |
3.1.0 function names are used where possible, anything else is the ida name | |
you can help out with documentation by dumping your own play report data! | |
1. download my fork of a fork of compelled-disclosure from https://cdn.discordapp.com/attachments/278666973779329024/504466039233445888/Compelled-Disclosure.nro (source available at https://github.com/khang06/Compelled-Disclosure) | |
2. open up splatoon 2 and play like you normally would | |
3. close it after you're done and launch compelled-disclosure (this will not work after a reboot) | |
4. copy sdmc:/switch/compelled_disclosure/80000000000000a1/data/XXXXXXXXXXXXXXXX.msgpack to your pc (the one with the highest number is the latest one) | |
5. put the msgpack into https://kawanet.github.io/msgpack-lite/ for a nice and clean output | |
6. datamine away | |
7. reboot your console before it crashes because this kills bcat | |
please do not send your msgpack to anyone as it contains console and account-specific information, compare your dump with this list and post your findings instead | |
Cmn::PlayReport::prepareAndGetPlayReport (prepended to every event) | |
app_version // (utf8) splatoon 2 version | |
ctrl_style // (int) control style (motion or stick, handheld or tv) | |
Cmn::PlayReport::addVersusCommonKeyValueImpl_ (prepended to Game::SeqMgrVersus::savePlayReportDeathEvent_ and Game::SeqVersusResult::savePlayReport_) | |
udemae // (int) rank (-1 if not applicable) | |
mmr // (float) mmr/power | |
rd // (float) rating deviation | |
xmmr // (float) x power | |
xrd // (float) x rating deviation | |
xrank // (int) ??? (i'm not x rank, so it's -1) | |
xversus_count // (int) number of x rank matches (-1 for me) | |
has_crown // (bool) is in x rank top 500 | |
season_id // (utf8) ??? (blank for all) | |
money // (int) money | |
turban_shell // (int) super sea snails | |
inet_versus_count_total // (int) total online battles | |
i_nu // (array) player unique id | |
Cmn::PlayReport::saveBootEventMain_ (event_id of boot_event2) | |
player_model_type // (int) player gender/type | |
player_model_hair // (int) player hair style | |
player_model_bottom // (int) player pants style | |
player_model_skin_color // (int) player skin color | |
player_model_eye_color // (int) player eye color | |
ctrl_option_tv_style_cam_speed_stick // (float) tv stick sensitivity | |
ctrl_option_tv_style_cam_speed_gyro // (float) tv gyro sensitivity | |
ctrl_option_tv_style_is_enable_gyro // (bool) motions controls for tv | |
ctrl_option_tv_style_is_reverse_ud // (bool) vertically reversed for tv | |
ctrl_option_tv_style_is_reverse_lr // (bool) horizontally reversed for tv | |
ctrl_option_hh_style_cam_speed_stick // (float) handheld/tabletop stick sensitivity | |
ctrl_option_hh_style_cam_speed_gyro // (float) handheld/tabletop gyro sensitivity | |
ctrl_option_hh_style_is_enable_gyro // (bool) motions controls for handheld/tabletop | |
ctrl_option_hh_style_is_reverse_ud // (bool) vertically reversed for handheld/tabletop | |
ctrl_option_hh_style_is_reverse_lr // (bool) horizontally reversed for handheld/tabletop | |
online_play_penalty_penalty_count // (int) number of penalties for online | |
online_play_penalty_penalty_point // (int) penalty severity for online | |
time_location_for_seq // (utf8) time zone | |
money // (int) money | |
turban_shell // (int) super sea snails | |
is_enable_color_support // (bool) color lock | |
is_disable_coconut // (bool) plaza drawings disabled | |
i_nu // (array) player unique id | |
player_rank // (int) level | |
star_rank // (int) stars | |
udemae_cVar // (int) splat zones rank | |
udemae_cVlf // (int) tower control rank | |
udemae_cVgl // (int) rainmaker rank | |
udemae_cVcl // (int) clam blitz rank | |
mmr_cRegular // (float) turf war mmr/power (viewable through splathex) | |
mmr_cGachi_cVar // (float) splat zones mmr/power | |
mmr_cGachi_cVlf // (float) tower control mmr/power | |
mmr_cGachi_cVgl // (float) rainmaker mmr/power | |
mmr_cGachi_cVcl // (float) clam blitz mmr/power | |
xmmr_cGachi_cVar // (float) splat zones x power | |
xmmr_cGachi_cVlf // (float) tower control x power | |
xmmr_cGachi_cVgl // (float) rainmaker x power | |
xmmr_cGachi_cVcl // (float) clam blitz x power | |
rd_cRegular // (float) turf war rating deviation | |
rd_cGachi_cVar // (float) splat zones rating deviation | |
rd_cGachi_cVlf // (float) tower control rating deviation | |
rd_cGachi_cVgl // (float) rainmaker rating deviation | |
rd_cGachi_cVcl // (float) clam blitz rating deviation | |
xrd_cGachi_cVar // (float) splat zones x rating deviation | |
xrd_cGachi_cVlf // (float) tower control x rating deviation | |
xrd_cGachi_cVgl // (float) rainmaker x rating deviation | |
xrd_cGachi_cVcl // (float) clam blitz x rating deviation | |
inet_versus_count_total // (int) total online battles | |
inet_versus_count_cRegular // (int) total online turf war battles | |
inet_versus_count_cGachi // (int) total ranked battles | |
inet_versus_count_cFest // (int) total splatfest battles | |
inet_versus_count_cPrivate // (int) total private battles | |
inet_versus_count_cLeague // (int) total league battles | |
mission_ikura_num // (int) power eggs in octo canyon/singleplayer | |
mission_is_clear_normal_map_num // (int) number of normal stages beaten in octo canyon/singleplayer | |
mission_is_clear_last_boss_stage // (bool) boss beaten in octo canyon/singleplayer | |
coop_grade // (int) salmon run rank | |
coop_grade_point // (int) salmon run exp | |
coop_tutorial_phase // (int) salmon run tutorial state | |
coop_play_count // (int) total salmon run matches | |
mem_identity_check // (utf8) half sha256 of certain romfs files | |
Cmn::PlayReport::saveBootEventMission_ (event_id of boot_mission_detail_event) | |
stageXXX_weapon_clear_flag // (int) weapons the stage was cleared with | |
stageXXX_item_flag // (int) collectibles collected in the stage | |
sub_7101242EFC (event_id of boot_ch_event) (obfuscated bullshit) (???) | |
ch0 // (utf8) probably a half sha256 of something | |
ch1 // (utf8) probably a half sha256 of something | |
ch2 // (utf8) probably a half sha256 of something | |
ch3 // (utf8) probably a half sha256 of something | |
ch4 // (utf8) probably a half sha256 of something | |
Cmn::SaveDataVss::UdemaeX::validate (event_id of runtime_undisplayed_error) (maybe a failed check? i'll look into it later) (?) | |
error_id // (int) ??? | |
detail // (int) ??? | |
Cnet::CoopMatchmakeExe::onSendPlayReportMatchEnd (event_id of match_coop_finish_event2) | |
player_rank // (int) level (as in level 69 and not salmon run ranks) | |
star_rank // (int) stars | |
money // (int) money | |
grade // (int) salmon run rank | |
grade_point // (int) salmon run exp | |
match_result // (int) ??? (got a team wipe and was 1) | |
total_sec // (int) ??? (doesn't appear to be match time) | |
session_id // (int) match id | |
with_friend // (int) ??? (0 without friend, what's the value in a friend room?) | |
rtt_average // (int) average round-trip time | |
rtt_median // (int) median round-trip time | |
rtt_worst // (int) worst round-trip time | |
is_coral_v2_room // (bool) voice chat enabled | |
is_coral_v2_save // (bool) ??? (appears to be 1 even if above is false) | |
mem_identity_check // (utf8) half sha256 of certain romfs files | |
Cnet::VersusMatchmakeExe::onSendPlayReportMatchEnd (event_id of match_vs_finish_event2) | |
match_result // (int) ??? (1 on both a win and loss for me, maybe it's set based on alpha or bravo) | |
total_sec // (int) ??? (doesn't appear to be match time) | |
league_player_num // (int) ??? (0 if not in league) | |
league_tag_id // (int) ??? (0 if not in league) | |
league_id // (int) ??? (0 if not in league) | |
fest_team // (int) splatfest team | |
fest_mode // (int) pro or regular | |
fest_regular_win_count // (int) individual win count | |
fest_regular_win_count_team // (int) group win count | |
fest_friends_num // (int) amount of friends in the group | |
joint_session_status // (int) ??? (maybe set if host?) | |
rtt_average // (int) average round-trip time | |
rtt_median // (int) median round-trip time | |
rtt_worst // (int) worst round-trip time | |
network_time // (int) time of results recorded (unix time, calibrated to current time zone) | |
is_coral_v2_room // (bool) voice chat enabled | |
is_coral_v2_save // (bool) ??? (appears to be 1 even if above is false) | |
mem_identity_check // (utf8) half sha256 of certain romfs files | |
Cnet::ErrorCallback::sendPlayReport (event_id of network_error_event) (maybe sent on communication error) (?) | |
net_mode // (int) network mode (internet, local, lan) | |
game_mode // (int) game mode (turf war, splat zones, etc) | |
game_rule // (int) game settings | |
is_game_scene // (bool) menu or not (false = in-game) | |
stage_id // (int) stage id | |
weapon_id // (int) current weapon id | |
error_from // (int) ??? | |
error_common // (int) ??? | |
error_extra // (int) ??? | |
is_online_lounge // (int) online lounge (not a bool for some reason) | |
session_id // (int) match id | |
Cnet::Utl::tryGetNetworkServiceAccount (event_id of runtime_undisplayed_error) (maybe a failed check? i'll look into it later) (?) | |
error_id // (int) ??? | |
detail // (int) ??? | |
result_module // (int) ??? | |
result_desc // (int) ??? | |
Game::SeqMgrMissionOcta::load + Game::SeqMgrMissionOcta::doPlayReport_ (event_id of mission_octa_stage_result_event) | |
stage_no // (int) station id | |
weapon_id // (int) weapon used | |
is_clear // (bool) cleared or not (looks like this function is used for more than just station completion) | |
ikura_num // (int) power eggs (not total, but collected in station) | |
play_time // (float) elapsed time in seconds | |
weapon_clear_flag // (int) what weapon choices were used | |
miss_num // (int) station death count | |
life_num // (int) lives left | |
money // (int) money | |
debt // (int) debt | |
is_octa_clear // (bool) normal final boss complete | |
medal_flag // (int) mem cake id | |
Game::SeqMgrMission::load + Game::SeqMgrMission::doPlayPeport_ (event_id of mission_stage_result_event) (that's not a typo, it's really called peport internally unlike above) | |
weapon_id // (int) weapon used | |
is_clear // (bool) cleared or not (looks like this function is used for more than just level completion) | |
ikura_num // (int) power eggs (not total, but collected in level) | |
play_time // (int) elapsed time in seconds | |
dead_num // (int) level death count | |
has_document // (bool) obtained scroll document thing during level | |
has_parts // (bool) set if above is true | |
has_ticket // (bool) set if above is true | |
weapon_clear_flag // (int) what weapon choices were used | |
mainX_level // (int) level of main weapons (-1 if unobtained, 0 if lv1, etc) | |
has_subX // (bool) subweapon obtained | |
tank_level // (int) tank upgrades | |
Game::OnlineVersusResultExe::stateUploadXPower (event_id of runtime_undisplayed_error) (maybe a failed check? i'll look into it later) (?) | |
error_id // (int) ??? | |
detail // (int) ??? | |
Game::SeqMgrVersus::savePlayReportDeathEvent_ (event_id of versus_death_event2) (?) | |
count_sec // (int) match time at death | |
death_count // (int) previous death count | |
reason_kind // (int) ??? | |
reason_id // (int) ??? | |
attacker_idx // (int) player index of attacker | |
attacker_pos_x // (float) attacker x position | |
attacker_pos_y // (float) attacker y position | |
attacker_pos_z // (float) attacker z position | |
victim_pos_x // (float) victim x position | |
victim_pos_y // (float) victim y position | |
victim_pos_z // (float) victim z position | |
victim_team // (int) victim team (why isn't this a bool? maybe spectator counts as a team lmao) | |
Game::SeqVersusResult::savePlayReport_ (event_id of versus_result_event2) | |
weapon_id // (int) weapon used | |
cHead_gear_id // (int) hat id | |
cHead_gear_power_main // (int) hat main ability | |
cHead_gear_power_sub0 // (int) hat first sub ability | |
cHead_gear_power_sub1 // (int) hat second sub ability | |
cHead_gear_power_sub2 // (int) hat third sub ability | |
cClothes_gear_id // (int) shirt id | |
cClothes_gear_power_main // (int) shirt main ability | |
cClothes_gear_power_sub0 // (int) shirt first sub ability | |
cClothes_gear_power_sub1 // (int) shirt second sub ability | |
cClothes_gear_power_sub2 // (int) shirt third sub ability | |
cShoes_gear_id // (int) shoes id | |
cShoes_gear_power_main // (int) shoes main ability | |
cShoes_gear_power_sub0 // (int) shoes first sub ability | |
cShoes_gear_power_sub1 // (int) shoes second sub ability | |
cShoes_gear_power_sub2 // (int) shoes third sub ability | |
report_versus_count // (int) ??? | |
versus_sec // (int) match time | |
team_score_cAlpha // (int) team alpha score | |
team_score_cBravo // (int) team bravo score | |
is_win // (bool) play report sender team winning | |
is_minority // (bool) true for the team with fewer people | |
personal_score_paint // (int) points | |
personal_score_kill // (int) kill count | |
personal_score_assist // (int) assist count | |
personal_score_special // (int) special count | |
personal_score_death // (int) death count | |
packet_loss_rate // (float) percentage of packets lost | |
bit_rate_result // (int) ??? (maybe only dumped if using voice chat) | |
bit_rate_packet_size // (int) ??? (maybe only dumped if using voice chat) | |
fest_team // (int) splatfest team | |
fest_mode // (int) pro or regular | |
fest_heavy_weight_match // (int) 1x, 10x, or 100x | |
fest_bonus_rate // (float) exp multiplier | |
fest_contribution // (int) ??? | |
fest_contribution_sum // (int) ??? | |
fest_regular_win_count // (int) individual splatfest win count (regular only?) | |
fest_regular_win_count_team // (int) group splatfest win count (regular only?) | |
fest_same_team_match // (int) battle between the same team (why is this an int?) | |
fest_friends_num // (int) number of friends in group | |
fest_rank // (int) splatfest rank | |
sub_7100255370 (event_id of invalid_setting_event) (?) (???) | |
net_mode // (int) network mode (internet, local, lan) | |
session_id // (int) match id | |
player_name // (utf8) player name (what player?) | |
player_idx // (int) ??? | |
stage_id // (int) stage id | |
game_rule // (int) match settings | |
game_mode // (int) game mode | |
sub_7100DC7088 (called by sub_7100DC6BE4 and sub_7100DC6ECC) (obfuscated bullshit) (?) (???) | |
reason // (???) ??? | |
player_name // (utf8) ??? | |
i_ns // (array) ??? | |
i_nu // (array) sender unique id | |
sub_7100DC6BE4 (event_id of versus_ch_event) (obfuscated bullshit) (?) (???) | |
// ??? | |
sub_71000BBEDC (referenced by Cmn::PlayReport::addVersusCommonKeyValueImpl_, versus_ch_event, and versus_other_event) | |
net_mode // (int) network mode (internet, local, lan) | |
game_mode // (int) game mode | |
game_rule // (int) match settings | |
session_id // (int) session id | |
start_clock // (int) ??? (not unix time) | |
stage_name // (utf8) stage name | |
sub_7100DC6ECC (event_id of coop_ch_event) (obfuscated bullshit) (?) (???) | |
session_id // (int) session id | |
sub_710116AF60 (event_id of invalid_connection_player) (?) (???) | |
// ??? | |
sub_710117F144 (event_id of versus_other_event) | |
// seems to be about the player who performed the action and NOT the play report sender | |
// maybe this is versus_result_event2 but for other people | |
player_idx // (int) player index (0 to 6) | |
player_model_type // (int) player gender/type | |
player_model_hair // (int) player hair style | |
player_model_bottom // (int) player pants style | |
player_model_skin_color // (int) player skin color | |
player_model_eye_color // (int) player eye color | |
team // (int) team | |
weapon_id // (int) weapon used | |
mmr // (float) mmr/power | |
rd // (float) rating deviation | |
xmmr // (float) x power | |
xrd // (float) x rating deviation | |
player_rank // (int) player level | |
star_rank // (int) player star count | |
win_lose_diff // (int) ??? (always 0 for me) | |
is_win // (bool) win or loss | |
is_minority // (bool) true for the team with fewer people | |
personal_score_paint // (int) points | |
personal_score_kill // (int) kill count | |
personal_score_assist // (int) assist count | |
personal_score_special // (int) special count | |
personal_score_death // (int) death count | |
i_ns // (array) ??? | |
i_nu // (array) sender unique id | |
player_name // (utf8) player name | |
personal_u_score // (int) ??? | |
personal_score0 // (int) ??? | |
personal_score1 // (int) ??? | |
personal_score2 // (int) ??? | |
personal_score3 // (int) ??? | |
report_versus_count // (int) ??? | |
Game::Coop::ResultPlayReport::save (event_id of coop_online_result_event) | |
grade // (int) salmon run rank | |
grade_point // (int) salmon run exp | |
grade_before // (int) rank before match | |
grade_point_before // (int) exp before match | |
difficulty // (int) ??? | |
stage // (int) map id | |
result // (int) ??? | |
final_wave // (int) ??? (probably always 2) | |
wave_event_X // (int) events like glowflies, fog, etc | |
wave_water_X // (int) water level | |
wave_golden_ikura_per_X // (int) ??? | |
wave_dead_count_X // (int) boss death count | |
normal_ikura_num // (int) total power eggs | |
golden_ikura_num // (int) total golden eggs | |
point // (int) ??? | |
total_point // (int) ??? | |
begin_time // (utf8) current schedule begin time | |
uncooperative_player // (bool) ??? (what triggers this?) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment