Things with question marks I haven't satisfactorily confirmed, and things marked UNKNOWN are exactly that. Also, there doesn't appear to be any tracking of additional DLC1 enemy kills like there is for DLCs 3 & 4 aside from the possibility of Skele-rakks counting as regular Rakks.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
It has a lot of files, but one of them named BuiltInStatResolver.cs has some code that looks like a very complete list of these challenge data that you may find interesting. He must have found the strings describing these somewhere in one of the game files. Here is an excerpt:
case 0x0655: return "STAT_PLAYER_SHOTS_FIRED";
case 0x0656: return "STAT_PLAYER_SHOTS_FIRED_PISTOL";
case 0x0657: return "STAT_PLAYER_SHOTS_FIRED_SHOTGUN";
case 0x0658: return "STAT_PLAYER_SHOTS_FIRED_SMG";
case 0x0659: return "STAT_PLAYER_SHOTS_FIRED_SNIPERRIFLE";
case 0x065A: return "STAT_PLAYER_SHOTS_FIRED_ROCKETLAUNCHER";
case 0x065B: return "STAT_PLAYER_SHOTS_FIRED_GRENADELAUNCHER";
case 0x065D: return "STAT_PLAYER_SHOTS_FIRED_ASSAULTRIFLE";
case 0x065E: return "STAT_PLAYER_WEAPONS_PICKED_UP";
case 0x065F: return "STAT_PLAYER_KILLS";
case 0x0660: return "STAT_PLAYER_KILLS_SKAG";
case 0x0661: return "STAT_PLAYER_KILLS_WITH_PISTOL";
case 0x0662: return "STAT_PLAYER_KILLS_WITH_SHOTGUN";
case 0x0663: return "STAT_PLAYER_KILLS_WITH_SMG";
case 0x0664: return "STAT_PLAYER_KILLS_WITH_SNIPER_RIFLE";
case 0x0665: return "STAT_PLAYER_KILLS_WITH_ASSAULT_RIFLE";
case 0x0666: return "STAT_PLAYER_KILLS_WITH_FRAG_GRENADE";
case 0x0667: return "STAT_PLAYER_KILLS_WITH_PROTEAN_GRENADE";
case 0x0668: return "STAT_PLAYER_KILLS_WITH_VEHICLE";
case 0x0669: return "STAT_PLAYER_KILLS_WITH_VEHICLE_WEAPON";
case 0x066A: return "STAT_PLAYER_KILLS_WITH_CORROSIVE_ATTACK";
case 0x066B: return "STAT_PLAYER_KILLS_WITH_INCINDIARY_ATTACK";
case 0x066C: return "STAT_PLAYER_KILLS_WITH_SHOCK_ATTACK";
case 0x066D: return "STAT_PLAYER_KILLS_WITH_EXPLOSIVE_ATTACK";
case 0x066E: return "STAT_PLAYER_KILLS_WITH_CRITICAL_HIT";
case 0x066F: return "STAT_PLAYER_KILLS_ALPHA_SKAG";
case 0x0670: return "STAT_PLAYER_KILLS_SPITTER_SKAG";
case 0x0671: return "STAT_PLAYER_KILLS_YOUNG_SKAG";
case 0x0672: return "STAT_PLAYER_KILLS_WITH_MELEE_ATTACK";
case 0x0673: return "STAT_PLAYER_KILLS_BARNACLE";
case 0x0674: return "STAT_PLAYER_KILLS_SCYTHID_CRAWLER";
case 0x0675: return "STAT_PLAYER_KILLS_SCYTHID_DRONE";
case 0x0676: return "STAT_PLAYER_KILLS_SCYTHID_SPRINTER";
case 0x0677: return "STAT_PLAYER_KILLS_SCYTHID_WARRIOR";
case 0x0678: return "STAT_PLAYER_KILLS_BANDIT";
case 0x0679: return "STAT_PLAYER_KILLS_RAKK";
case 0x067A: return "STAT_PLAYER_KILLS_AUTOMATED_TURRET";
case 0x067B: return "STAT_PLAYER_DUELS_WINS";
case 0x067C: return "STAT_PLAYER_DUELS_LOSSES";
case 0x067D: return "STAT_PLAYER_DUELS_DRAWS";
case 0x067E: return "STAT_PLAYER_ARENA_KILLS";
case 0x067F: return "STAT_PLAYER_ARENA_DEATHS";
case 0x0680: return "STAT_PLAYER_ARENA_ROUNDSWON";
case 0x0681: return "STAT_PLAYER_ARENA_ROUNDSLOST";
case 0x0682: return "STAT_PLAYER_ARENA_ROUNDSDRAW";
case 0x0683: return "STAT_PLAYER_ARENA_MATCHESWON";
case 0x0684: return "STAT_PLAYER_ARENA_MATCHESLOST";
case 0x0685: return "STAT_PLAYER_CHESTS_OPENED";
case 0x0686: return "STAT_PLAYER_LOOTABLES_OPENED";
case 0x0687: return "STAT_PLAYER_ARENA_CONSECUTIVEROUNDSWON";
case 0x0688: return "STAT_PLAYER_ARENA_CONSECUTIVEMATCHESWON";
case 0x0689: return "STAT_PLAYER_ARENA_MAXCONSECUTIVEROUNDSWON";
case 0x068A: return "STAT_PLAYER_ARENA_MAXCONSECUTIVEMATCHESON";
case 0x068B: return "STAT_PLAYER_KILLS_SLEDGE_BANDIT";
case 0x068C: return "STAT_PLAYER_KILLS_INSANE_BANDIT";
case 0x068D: return "STAT_PLAYER_INVENTORY_PURCHASED";
case 0x068E: return "STAT_PLAYER_INVENTORY_SOLD";
case 0x068F: return "STAT_PLAYER_MANUFACTURER_PREF_TEDIORE";
case 0x0690: return "STAT_PLAYER_MANUFACTURER_PREF_JAKOBS";
case 0x0691: return "STAT_PLAYER_MANUFACTURER_PREF_TORGUE";
case 0x0692: return "STAT_PLAYER_MANUFACTURER_PREF_HYPERION";
case 0x0693: return "STAT_PLAYER_MANUFACTURER_PREF_MALIWAN";
case 0x0694: return "STAT_PLAYER_MANUFACTURER_PREF_S_AND_S";
case 0x0695: return "STAT_PLAYER_MANUFACTURER_PREF_ATLAS";
case 0x0696: return "STAT_PLAYER_MANUFACTURER_PREF_DAHL";
case 0x0697: return "STAT_PLAYER_MANUFACTURER_PREF_VLADOF";
case 0x0698: return "STAT_PLAYER_MANUFACTURER_PREF_PANGOLIN";
case 0x0699: return "STAT_PLAYER_MANUFACTURER_PREF_CORRAZA";
case 0x069A: return "STAT_PLAYER_MANUFACTURER_PREF_ANSHIN";
case 0x069B: return "STAT_PLAYER_MANUFACTURER_PREF_ERIDAN";
case 0x069C: return "STAT_PLAYER_MANUFACTURER_PREF_GEARBOX";
case 0x069D: return "STAT_PLAYER_KILLS_PRINCIPLE_GUARDIAN";
case 0x069E: return "STAT_PLAYER_KILLS_SERA_GUARDIAN";
case 0x069F: return "STAT_PLAYER_KILLS_ARCH_GUARDIAN";
case 0x06A0: return "STAT_PLAYER_KILLS_CHERUB_GUARDIAN";
case 0x06A1: return "STAT_PLAYER_CURRENCY_EARNED";
case 0x06A2: return "STAT_VEHICLE_HANG_TIME";
case 0x06A3: return "STAT_QUESTS_COMPLETED_ZONE_ZERO";
case 0x06A4: return "STAT_QUESTS_COMPLETED_ZONE_ONE";
case 0x06A5: return "STAT_QUESTS_COMPLETED_ZONE_TWO";
case 0x06A6: return "STAT_PLAYER_KILLS_ACTION_SKILL";
case 0x06A7: return "STAT_QUESTS_COMPLETED_COOP";
case 0x06A8: return "STAT_SPENT_SKILL_POINT";
case 0x06A9: return "STAT_PLAYER_TIMES_INJURED";
case 0x06AA: return "STAT_PLAYER_TECH_WEAPONS_PICKED_UP";
case 0x06AB: return "STAT_PLAYER_SHOCK_WEAPONS_PICKED_UP";
case 0x06AC: return "STAT_PLAYER_GRENADES_PICKED_UP";
case 0x06AD: return "STAT_PLAYER_PICKUP_FAILS_FULL";
case 0x06AE: return "STAT_PLAYER_HOVERED_OVER_INSTINCT";
case 0x06AF: return "STAT_PLAYER_CORROSIVE_WEAPONS_PICKED_UP";
case 0x06B0: return "STAT_PLAYER_INCENDIARY_WEAPONS_PICKED_UP";
case 0x06B1: return "STAT_PLAYER_SLOW_WEAPONS_PICKED_UP";
case 0x06B2: return "STAT_PLAYER_KILLS_HIGHEST_SPREE";
case 0x06B3: return "STAT_PLAYER_FIRST_LEVEL_UP";
case 0x06B4: return "STAT_PLAYER_UNLOCKED_ADRENALINE_SKILL";
case 0x06B5: return "STAT_PLAYER_UNLOCKED_ACTION_SKILL";
case 0x06B7: return "STAT_PLAYER_EXPLOSIVE_WEAPONS_PICKED_UP";
case 0x06B8: return "STAT_PLAYER_STORAGE_UPGRADE_PICKED_UP";
case 0x06B9: return "STAT_PLAYER_ELEMENTAL_ARTIFACT_PICKED_UP";
case 0x06BA: return "STAT_PLAYER_AMMO_CAPACITY_UPGRADE_PICKED_UP";
case 0x06BB: return "STAT_PLAYER_FIRST_AID_KIT_PICKED_UP";
case 0x06BC: return "STAT_PLAYER_ENTERED_VEHICLE";
case 0x06BD: return "STAT_PLAYER_GRENADE_PURCHASED";
case 0x06BE: return "STAT_PLAYER_SHIELD_PURCHASED";
case 0x06BF: return "STAT_PLAYER_FIRST_AID_KIT_PURCHASED";
case 0x06C0: return "STAT_PLAYER_AMMO_PURCHASED";
case 0x06C1: return "STAT_PLAYER_STORAGE_UPGRADE_PURCHASED";
case 0x06C2: return "STAT_PLAYER_COMMAND_DECK_PURCHASED";
case 0x06C3: return "STAT_PLAYER_ACTION_SKILL_USES";
case 0x06C4: return "STAT_PLAYER_FIRST_SKILL_POINT_ROLAND";
case 0x06C5: return "STAT_PLAYER_FIRST_SKILL_POINT_MORDECAI";
case 0x06C6: return "STAT_PLAYER_FIRST_SKILL_POINT_LILITH";
case 0x06C7: return "STAT_PLAYER_FIRST_SKILL_POINT_BRICK";
case 0x06C8: return "STAT_PLAYER_SHIELD_EQUIPPED";
case 0x06C9: return "STAT_PLAYER_GRENADE_MOD_EQUIPPED";
case 0x06CA: return "STAT_PLAYER_COMMAND_DECK_EQUIPPED";
case 0x06CB: return "STAT_PLAYER_FIRST_SKILL_POINT";
case 0x06CC: return "STAT_PLAYER_KILLS_SKAG_WITH_VEHICLE";
case 0x06CD: return "STAT_PLAYER_KILLS_CRIMSONLANCE";
case 0x06CE: return "STAT_PLAYER_KILLS_LANCEBADASS";
case 0x06CF: return "STAT_PLAYER_KILLS_LANCEPYRO";
case 0x06D0: return "STAT_PLAYER_KILLS_LANCECHEMICAL";
case 0x06D1: return "STAT_PLAYER_KILLS_LANCESHOCK";
case 0x06D2: return "STAT_PLAYER_KILLS_JETPACK";
case 0x06D3: return "STAT_PLAYER_KILLS_DRIFTER";
case 0x06D4: return "STAT_PLAYER_KILLS_PRISONER";
case 0x06D5: return "STAT_PLAYER_KILLS_PROBE";
case 0x06D6: return "STAT_PLAYER_KILLS_MECH";
case 0x06D7: return "STAT_PLAYER_KILLS_ASSASSIN";
case 0x06D8: return "STAT_PLAYER_KILLS_MIDGET";
case 0x06D9: return "STAT_PLAYER_KILLS_LANCER";
case 0x06DA: return "STAT_PLAYER_KILLS_MONSTER";
case 0x06DB: return "STAT_PLAYER_KILLS_CRIMSONSHORTY";
case 0x06DC: return "STAT_PLAYER_KILLS_MEATPOPSICLE";
case 0x06DD: return "STAT_PLAYER_KILLS_DUMPSTERDIVER";
case 0x06DE: return "STAT_PLAYER_KILLS_MINISTEVE";
case 0x06DF: return "STAT_PLAYER_KILLS_TRUXICANWRESTLER";
case 0x06E0: return "STAT_PLAYER_KILLS_CRAWMERAX";
case 0x06E1: return "STAT_PLAYER_KILLS_CLAPTRAPS";
case 0x06E2: return "STAT_PLAYER_KILLS_BANDIT_TRAPS";
case 0x06E3: return "STAT_PLAYER_KILLS_RAKK_TRAPS";
case 0x06E4: return "STAT_PLAYER_KILLS_RAKK_TRAP_HIVE";
case 0x06E5: return "STAT_PLAYER_KILLS_SKAG_TRAPS";
case 0x06E6: return "STAT_PLAYER_KILLS_HYPERION_SOLDIERS";
case 0x06E7: return "STAT_PLAYER_KILLS_HYPERION_SOLDER_TRAPS";
case 0x06E8: return "STAT_PLAYER_KILLS_CRAB_TRAPS";
case 0x06E9: return "STAT_PLAYER_KILLS_SPIDERANT_TRAPS";
case 0x06EA: return "STAT_PLAYER_KILLS_HYPERION_SUPERBAD";
case 0x06EB: return "STAT_PLAYER_KILLS_DFAULT";
case 0x06EC: return "STAT_PLAYER_KILLS_KNOXX_TRAP";
case 0x06ED: return "STAT_PLAYER_KILLS_STEELE_TRAP";
case 0x06EE: return "STAT_PLAYER_KILLS_NED_TRAP";
case 0x06EF: return "STAT_PLAYER_KILLS_ZOMBIENED_TRAP";
case 0x06F0: return "STAT_PLAYER_KILLS_DFAULT_BANDITS";
case 0x06F1: return "STAT_PLAYER_KILLS_INAC";
case 0x06F2: return "STAT_PLAYER_KILLS_MINAC";
case 0x06F3: return "STAT_PLAYER_KILLS_MINAC_TURRETS";
case 0x06F4: return "STAT_PLAYER_CLAP_COMPONENT_1";
case 0x06F5: return "STAT_PLAYER_OILCANS_COLLECTED";
case 0x06F6: return "STAT_PLAYER_BOBBLEHEADS_COLLECTED";
case 0x06F7: return "STAT_PLAYER_3DGLASSES_COLLECTED";
case 0x06F8: return "STAT_PLAYER_PANTIES_COLLECTED";
case 0x06F9: return "STAT_PLAYER_FISHINABAG_COLLECTED";
case 0x06FA: return "STAT_PLAYER_PIZZAS_COLLECTED";
case 0x06FB: return "STAT_PLAYER_CLAP_COMPONENT_2";
case 0x06FC: return "STAT_PLAYER_CLAP_COMPONENT_3";
case 0x06FD: return "STAT_PLAYER_CLAP_COMPONENT_4";
case 0x06FE: return "STAT_PLAYER_CLAP_COMPONENT_5";
case 0x06FF: return "STAT_PLAYER_STATUE1_COLLECTED";
case 0x0700: return "STAT_PLAYER_STATUE2_COLLECTED";
case 0x0701: return "STAT_PLAYER_STATUE3_COLLECTED";
case 0x0702: return "STAT_PLAYER_STATUE4_COLLECTED";
case 0x0703: return "STAT_PLAYER_STATUE5_COLLECTED";
case 0x0704: return "STAT_PLAYER_STATUE6_COLLECTED";
case 0x0705: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FG";
case 0x0706: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FH";
case 0x0707: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FI";
case 0x0708: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FJ";
case 0x0709: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FK";
case 0x070A: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FL";
case 0x070B: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FM";
case 0x070C: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FN";
case 0x070D: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FO";
case 0x070E: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FP";
case 0x070F: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FQ";
case 0x0710: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FR";
case 0x0711: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FS";
case 0x0712: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FT";
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thanks for pointing that out (and thanks to da_fileserver for finding them). I guess I can stop trying to figure out the unknown ones now. :) I wonder where these are defined; I did try looking through the editor before I started compiling the list, but I find that incredibly confusing…
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Apparently the list is located at offset 26301496 in the current pc version of Borderlands.exe. Its a long list of strings. I searched for "FLOAT" with my hex editor and found it. I don't know if the indexes are somewhere else or if he just used logic to connect the string list with the challenge data indexes which is not too tough a connection to make once you start reading the names of these strings. The names also explain why some entries have a 5 value in them and some have a 1 value when you look at the list of the strings along with that value. All the unused float ones are 5s and all the rest are 1. 5 either means "floating point value" or it means "not used". I'm guessing it is a type indicator and it means floating point.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
You are nearly correct on how those values were extracted. I found one of the strings in the executable and then used a disassembler to find where it's being used. And it happens that there is a function in which it (I assume) adds all the stat names and their associated identifiers. However, the standard borderlands executable has an encrypted text section, so good luck on finding one that's decrypted. :P
Also, you are correct about the data types. A value of 1 means that it is an Int32 (or maybe UInt32) and 5 means it is a single precision float. I don't know about any other values, since I have not encountered any others.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Merging the internal stat names with my previous test results gives the following annotated list of stats which behave unexpectedly. Apologies if the formatting turns out weird.
I've been exploring the "Challenge Data" section of the saves of my characters and this is what I've found:
Things with question marks I haven't satisfactorily confirmed, and things marked UNKNOWN are exactly that. Also, there doesn't appear to be any tracking of additional DLC1 enemy kills like there is for DLCs 3 & 4 aside from the possibility of Skele-rakks counting as regular Rakks.
da_fileserver posted some code he has been working on to read/write savegame files in this thread a few days ago:
https://sourceforge.net/projects/willowtree/forums/forum/1117810/topic/4060592
It has a lot of files, but one of them named BuiltInStatResolver.cs has some code that looks like a very complete list of these challenge data that you may find interesting. He must have found the strings describing these somewhere in one of the game files. Here is an excerpt:
case 0x0655: return "STAT_PLAYER_SHOTS_FIRED";
case 0x0656: return "STAT_PLAYER_SHOTS_FIRED_PISTOL";
case 0x0657: return "STAT_PLAYER_SHOTS_FIRED_SHOTGUN";
case 0x0658: return "STAT_PLAYER_SHOTS_FIRED_SMG";
case 0x0659: return "STAT_PLAYER_SHOTS_FIRED_SNIPERRIFLE";
case 0x065A: return "STAT_PLAYER_SHOTS_FIRED_ROCKETLAUNCHER";
case 0x065B: return "STAT_PLAYER_SHOTS_FIRED_GRENADELAUNCHER";
case 0x065D: return "STAT_PLAYER_SHOTS_FIRED_ASSAULTRIFLE";
case 0x065E: return "STAT_PLAYER_WEAPONS_PICKED_UP";
case 0x065F: return "STAT_PLAYER_KILLS";
case 0x0660: return "STAT_PLAYER_KILLS_SKAG";
case 0x0661: return "STAT_PLAYER_KILLS_WITH_PISTOL";
case 0x0662: return "STAT_PLAYER_KILLS_WITH_SHOTGUN";
case 0x0663: return "STAT_PLAYER_KILLS_WITH_SMG";
case 0x0664: return "STAT_PLAYER_KILLS_WITH_SNIPER_RIFLE";
case 0x0665: return "STAT_PLAYER_KILLS_WITH_ASSAULT_RIFLE";
case 0x0666: return "STAT_PLAYER_KILLS_WITH_FRAG_GRENADE";
case 0x0667: return "STAT_PLAYER_KILLS_WITH_PROTEAN_GRENADE";
case 0x0668: return "STAT_PLAYER_KILLS_WITH_VEHICLE";
case 0x0669: return "STAT_PLAYER_KILLS_WITH_VEHICLE_WEAPON";
case 0x066A: return "STAT_PLAYER_KILLS_WITH_CORROSIVE_ATTACK";
case 0x066B: return "STAT_PLAYER_KILLS_WITH_INCINDIARY_ATTACK";
case 0x066C: return "STAT_PLAYER_KILLS_WITH_SHOCK_ATTACK";
case 0x066D: return "STAT_PLAYER_KILLS_WITH_EXPLOSIVE_ATTACK";
case 0x066E: return "STAT_PLAYER_KILLS_WITH_CRITICAL_HIT";
case 0x066F: return "STAT_PLAYER_KILLS_ALPHA_SKAG";
case 0x0670: return "STAT_PLAYER_KILLS_SPITTER_SKAG";
case 0x0671: return "STAT_PLAYER_KILLS_YOUNG_SKAG";
case 0x0672: return "STAT_PLAYER_KILLS_WITH_MELEE_ATTACK";
case 0x0673: return "STAT_PLAYER_KILLS_BARNACLE";
case 0x0674: return "STAT_PLAYER_KILLS_SCYTHID_CRAWLER";
case 0x0675: return "STAT_PLAYER_KILLS_SCYTHID_DRONE";
case 0x0676: return "STAT_PLAYER_KILLS_SCYTHID_SPRINTER";
case 0x0677: return "STAT_PLAYER_KILLS_SCYTHID_WARRIOR";
case 0x0678: return "STAT_PLAYER_KILLS_BANDIT";
case 0x0679: return "STAT_PLAYER_KILLS_RAKK";
case 0x067A: return "STAT_PLAYER_KILLS_AUTOMATED_TURRET";
case 0x067B: return "STAT_PLAYER_DUELS_WINS";
case 0x067C: return "STAT_PLAYER_DUELS_LOSSES";
case 0x067D: return "STAT_PLAYER_DUELS_DRAWS";
case 0x067E: return "STAT_PLAYER_ARENA_KILLS";
case 0x067F: return "STAT_PLAYER_ARENA_DEATHS";
case 0x0680: return "STAT_PLAYER_ARENA_ROUNDSWON";
case 0x0681: return "STAT_PLAYER_ARENA_ROUNDSLOST";
case 0x0682: return "STAT_PLAYER_ARENA_ROUNDSDRAW";
case 0x0683: return "STAT_PLAYER_ARENA_MATCHESWON";
case 0x0684: return "STAT_PLAYER_ARENA_MATCHESLOST";
case 0x0685: return "STAT_PLAYER_CHESTS_OPENED";
case 0x0686: return "STAT_PLAYER_LOOTABLES_OPENED";
case 0x0687: return "STAT_PLAYER_ARENA_CONSECUTIVEROUNDSWON";
case 0x0688: return "STAT_PLAYER_ARENA_CONSECUTIVEMATCHESWON";
case 0x0689: return "STAT_PLAYER_ARENA_MAXCONSECUTIVEROUNDSWON";
case 0x068A: return "STAT_PLAYER_ARENA_MAXCONSECUTIVEMATCHESON";
case 0x068B: return "STAT_PLAYER_KILLS_SLEDGE_BANDIT";
case 0x068C: return "STAT_PLAYER_KILLS_INSANE_BANDIT";
case 0x068D: return "STAT_PLAYER_INVENTORY_PURCHASED";
case 0x068E: return "STAT_PLAYER_INVENTORY_SOLD";
case 0x068F: return "STAT_PLAYER_MANUFACTURER_PREF_TEDIORE";
case 0x0690: return "STAT_PLAYER_MANUFACTURER_PREF_JAKOBS";
case 0x0691: return "STAT_PLAYER_MANUFACTURER_PREF_TORGUE";
case 0x0692: return "STAT_PLAYER_MANUFACTURER_PREF_HYPERION";
case 0x0693: return "STAT_PLAYER_MANUFACTURER_PREF_MALIWAN";
case 0x0694: return "STAT_PLAYER_MANUFACTURER_PREF_S_AND_S";
case 0x0695: return "STAT_PLAYER_MANUFACTURER_PREF_ATLAS";
case 0x0696: return "STAT_PLAYER_MANUFACTURER_PREF_DAHL";
case 0x0697: return "STAT_PLAYER_MANUFACTURER_PREF_VLADOF";
case 0x0698: return "STAT_PLAYER_MANUFACTURER_PREF_PANGOLIN";
case 0x0699: return "STAT_PLAYER_MANUFACTURER_PREF_CORRAZA";
case 0x069A: return "STAT_PLAYER_MANUFACTURER_PREF_ANSHIN";
case 0x069B: return "STAT_PLAYER_MANUFACTURER_PREF_ERIDAN";
case 0x069C: return "STAT_PLAYER_MANUFACTURER_PREF_GEARBOX";
case 0x069D: return "STAT_PLAYER_KILLS_PRINCIPLE_GUARDIAN";
case 0x069E: return "STAT_PLAYER_KILLS_SERA_GUARDIAN";
case 0x069F: return "STAT_PLAYER_KILLS_ARCH_GUARDIAN";
case 0x06A0: return "STAT_PLAYER_KILLS_CHERUB_GUARDIAN";
case 0x06A1: return "STAT_PLAYER_CURRENCY_EARNED";
case 0x06A2: return "STAT_VEHICLE_HANG_TIME";
case 0x06A3: return "STAT_QUESTS_COMPLETED_ZONE_ZERO";
case 0x06A4: return "STAT_QUESTS_COMPLETED_ZONE_ONE";
case 0x06A5: return "STAT_QUESTS_COMPLETED_ZONE_TWO";
case 0x06A6: return "STAT_PLAYER_KILLS_ACTION_SKILL";
case 0x06A7: return "STAT_QUESTS_COMPLETED_COOP";
case 0x06A8: return "STAT_SPENT_SKILL_POINT";
case 0x06A9: return "STAT_PLAYER_TIMES_INJURED";
case 0x06AA: return "STAT_PLAYER_TECH_WEAPONS_PICKED_UP";
case 0x06AB: return "STAT_PLAYER_SHOCK_WEAPONS_PICKED_UP";
case 0x06AC: return "STAT_PLAYER_GRENADES_PICKED_UP";
case 0x06AD: return "STAT_PLAYER_PICKUP_FAILS_FULL";
case 0x06AE: return "STAT_PLAYER_HOVERED_OVER_INSTINCT";
case 0x06AF: return "STAT_PLAYER_CORROSIVE_WEAPONS_PICKED_UP";
case 0x06B0: return "STAT_PLAYER_INCENDIARY_WEAPONS_PICKED_UP";
case 0x06B1: return "STAT_PLAYER_SLOW_WEAPONS_PICKED_UP";
case 0x06B2: return "STAT_PLAYER_KILLS_HIGHEST_SPREE";
case 0x06B3: return "STAT_PLAYER_FIRST_LEVEL_UP";
case 0x06B4: return "STAT_PLAYER_UNLOCKED_ADRENALINE_SKILL";
case 0x06B5: return "STAT_PLAYER_UNLOCKED_ACTION_SKILL";
case 0x06B7: return "STAT_PLAYER_EXPLOSIVE_WEAPONS_PICKED_UP";
case 0x06B8: return "STAT_PLAYER_STORAGE_UPGRADE_PICKED_UP";
case 0x06B9: return "STAT_PLAYER_ELEMENTAL_ARTIFACT_PICKED_UP";
case 0x06BA: return "STAT_PLAYER_AMMO_CAPACITY_UPGRADE_PICKED_UP";
case 0x06BB: return "STAT_PLAYER_FIRST_AID_KIT_PICKED_UP";
case 0x06BC: return "STAT_PLAYER_ENTERED_VEHICLE";
case 0x06BD: return "STAT_PLAYER_GRENADE_PURCHASED";
case 0x06BE: return "STAT_PLAYER_SHIELD_PURCHASED";
case 0x06BF: return "STAT_PLAYER_FIRST_AID_KIT_PURCHASED";
case 0x06C0: return "STAT_PLAYER_AMMO_PURCHASED";
case 0x06C1: return "STAT_PLAYER_STORAGE_UPGRADE_PURCHASED";
case 0x06C2: return "STAT_PLAYER_COMMAND_DECK_PURCHASED";
case 0x06C3: return "STAT_PLAYER_ACTION_SKILL_USES";
case 0x06C4: return "STAT_PLAYER_FIRST_SKILL_POINT_ROLAND";
case 0x06C5: return "STAT_PLAYER_FIRST_SKILL_POINT_MORDECAI";
case 0x06C6: return "STAT_PLAYER_FIRST_SKILL_POINT_LILITH";
case 0x06C7: return "STAT_PLAYER_FIRST_SKILL_POINT_BRICK";
case 0x06C8: return "STAT_PLAYER_SHIELD_EQUIPPED";
case 0x06C9: return "STAT_PLAYER_GRENADE_MOD_EQUIPPED";
case 0x06CA: return "STAT_PLAYER_COMMAND_DECK_EQUIPPED";
case 0x06CB: return "STAT_PLAYER_FIRST_SKILL_POINT";
case 0x06CC: return "STAT_PLAYER_KILLS_SKAG_WITH_VEHICLE";
case 0x06CD: return "STAT_PLAYER_KILLS_CRIMSONLANCE";
case 0x06CE: return "STAT_PLAYER_KILLS_LANCEBADASS";
case 0x06CF: return "STAT_PLAYER_KILLS_LANCEPYRO";
case 0x06D0: return "STAT_PLAYER_KILLS_LANCECHEMICAL";
case 0x06D1: return "STAT_PLAYER_KILLS_LANCESHOCK";
case 0x06D2: return "STAT_PLAYER_KILLS_JETPACK";
case 0x06D3: return "STAT_PLAYER_KILLS_DRIFTER";
case 0x06D4: return "STAT_PLAYER_KILLS_PRISONER";
case 0x06D5: return "STAT_PLAYER_KILLS_PROBE";
case 0x06D6: return "STAT_PLAYER_KILLS_MECH";
case 0x06D7: return "STAT_PLAYER_KILLS_ASSASSIN";
case 0x06D8: return "STAT_PLAYER_KILLS_MIDGET";
case 0x06D9: return "STAT_PLAYER_KILLS_LANCER";
case 0x06DA: return "STAT_PLAYER_KILLS_MONSTER";
case 0x06DB: return "STAT_PLAYER_KILLS_CRIMSONSHORTY";
case 0x06DC: return "STAT_PLAYER_KILLS_MEATPOPSICLE";
case 0x06DD: return "STAT_PLAYER_KILLS_DUMPSTERDIVER";
case 0x06DE: return "STAT_PLAYER_KILLS_MINISTEVE";
case 0x06DF: return "STAT_PLAYER_KILLS_TRUXICANWRESTLER";
case 0x06E0: return "STAT_PLAYER_KILLS_CRAWMERAX";
case 0x06E1: return "STAT_PLAYER_KILLS_CLAPTRAPS";
case 0x06E2: return "STAT_PLAYER_KILLS_BANDIT_TRAPS";
case 0x06E3: return "STAT_PLAYER_KILLS_RAKK_TRAPS";
case 0x06E4: return "STAT_PLAYER_KILLS_RAKK_TRAP_HIVE";
case 0x06E5: return "STAT_PLAYER_KILLS_SKAG_TRAPS";
case 0x06E6: return "STAT_PLAYER_KILLS_HYPERION_SOLDIERS";
case 0x06E7: return "STAT_PLAYER_KILLS_HYPERION_SOLDER_TRAPS";
case 0x06E8: return "STAT_PLAYER_KILLS_CRAB_TRAPS";
case 0x06E9: return "STAT_PLAYER_KILLS_SPIDERANT_TRAPS";
case 0x06EA: return "STAT_PLAYER_KILLS_HYPERION_SUPERBAD";
case 0x06EB: return "STAT_PLAYER_KILLS_DFAULT";
case 0x06EC: return "STAT_PLAYER_KILLS_KNOXX_TRAP";
case 0x06ED: return "STAT_PLAYER_KILLS_STEELE_TRAP";
case 0x06EE: return "STAT_PLAYER_KILLS_NED_TRAP";
case 0x06EF: return "STAT_PLAYER_KILLS_ZOMBIENED_TRAP";
case 0x06F0: return "STAT_PLAYER_KILLS_DFAULT_BANDITS";
case 0x06F1: return "STAT_PLAYER_KILLS_INAC";
case 0x06F2: return "STAT_PLAYER_KILLS_MINAC";
case 0x06F3: return "STAT_PLAYER_KILLS_MINAC_TURRETS";
case 0x06F4: return "STAT_PLAYER_CLAP_COMPONENT_1";
case 0x06F5: return "STAT_PLAYER_OILCANS_COLLECTED";
case 0x06F6: return "STAT_PLAYER_BOBBLEHEADS_COLLECTED";
case 0x06F7: return "STAT_PLAYER_3DGLASSES_COLLECTED";
case 0x06F8: return "STAT_PLAYER_PANTIES_COLLECTED";
case 0x06F9: return "STAT_PLAYER_FISHINABAG_COLLECTED";
case 0x06FA: return "STAT_PLAYER_PIZZAS_COLLECTED";
case 0x06FB: return "STAT_PLAYER_CLAP_COMPONENT_2";
case 0x06FC: return "STAT_PLAYER_CLAP_COMPONENT_3";
case 0x06FD: return "STAT_PLAYER_CLAP_COMPONENT_4";
case 0x06FE: return "STAT_PLAYER_CLAP_COMPONENT_5";
case 0x06FF: return "STAT_PLAYER_STATUE1_COLLECTED";
case 0x0700: return "STAT_PLAYER_STATUE2_COLLECTED";
case 0x0701: return "STAT_PLAYER_STATUE3_COLLECTED";
case 0x0702: return "STAT_PLAYER_STATUE4_COLLECTED";
case 0x0703: return "STAT_PLAYER_STATUE5_COLLECTED";
case 0x0704: return "STAT_PLAYER_STATUE6_COLLECTED";
case 0x0705: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FG";
case 0x0706: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FH";
case 0x0707: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FI";
case 0x0708: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FJ";
case 0x0709: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FK";
case 0x070A: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FL";
case 0x070B: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FM";
case 0x070C: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FN";
case 0x070D: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FO";
case 0x070E: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FP";
case 0x070F: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FQ";
case 0x0710: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FR";
case 0x0711: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FS";
case 0x0712: return "STAT_PLAYER_ZRESERVED_DLC_FLOAT_FT";
Thanks for pointing that out (and thanks to da_fileserver for finding them). I guess I can stop trying to figure out the unknown ones now. :) I wonder where these are defined; I did try looking through the editor before I started compiling the list, but I find that incredibly confusing…
Apparently the list is located at offset 26301496 in the current pc version of Borderlands.exe. Its a long list of strings. I searched for "FLOAT" with my hex editor and found it. I don't know if the indexes are somewhere else or if he just used logic to connect the string list with the challenge data indexes which is not too tough a connection to make once you start reading the names of these strings. The names also explain why some entries have a 5 value in them and some have a 1 value when you look at the list of the strings along with that value. All the unused float ones are 5s and all the rest are 1. 5 either means "floating point value" or it means "not used". I'm guessing it is a type indicator and it means floating point.
You are nearly correct on how those values were extracted. I found one of the strings in the executable and then used a disassembler to find where it's being used. And it happens that there is a function in which it (I assume) adds all the stat names and their associated identifiers. However, the standard borderlands executable has an encrypted text section, so good luck on finding one that's decrypted. :P
Also, you are correct about the data types. A value of 1 means that it is an Int32 (or maybe UInt32) and 5 means it is a single precision float. I don't know about any other values, since I have not encountered any others.
Merging the internal stat names with my previous test results gives the following annotated list of stats which behave unexpectedly. Apologies if the formatting turns out weird.