//===== Copyright c 1996-2009, Valve Corporation, All rights reserved. ======// // // Purpose: // // $NoKeywords: $ //===========================================================================// #ifndef IMATCHEXT_PORTAL2_H #define IMATCHEXT_PORTAL2_H #ifdef _WIN32 #pragma once #pragma warning( push ) #pragma warning( disable : 4201 ) #endif #define STORAGE_COUNT_FOR_BITS( aStorageType, numBits ) ( ( (numBits) + 8*sizeof( aStorageType ) - 1 ) / ( 8* sizeof( aStorageType ) ) ) // // // WARNING!! WARNING!! WARNING!! WARNING!! // This structure TitleData1 should remain // intact after we ship otherwise // users profiles will be busted. // You are allowed to add fields at the end // as long as structure size stays under // XPROFILE_SETTING_MAX_SIZE = 1000 bytes. // WARNING!! WARNING!! WARNING!! WARNING!! // struct TitleData1 { uint32 uiSinglePlayerProgressChapter; struct CoopData_t { enum MapBits_t { #define CFG( fieldname, ctx, idx, num ) fieldname, #define CFG_DISABLED( fieldname, ctx, idx, num ) CFG( fieldname ) #include "xlast_portal2/inc_coop_maps.inc" #undef CFG_DISABLED #undef CFG mapbits_last_bit_used, mapbits_total_basegame = 42, mapbits_total = 160 // leave room for total 160 maps }; uint32 mapbits[ STORAGE_COUNT_FOR_BITS( uint32, mapbits_total ) ]; enum TauntBits_t { #define CFG( fieldname ) taunt_##fieldname, #define CFG_DISABLED( fieldname ) CFG( fieldname ) #include "xlast_portal2/inc_coop_taunts.inc" #undef CFG_DISABLED #undef CFG tauntbits_last_bit_used, tauntbits_total = 48 // leave room for total 48 taunts }; uint32 tauntbitsOwned[ STORAGE_COUNT_FOR_BITS( uint32, tauntbits_total ) ]; uint32 tauntbitsUsed[ STORAGE_COUNT_FOR_BITS( uint32, tauntbits_total ) ]; enum TauntEquipSlots_t { #define CFG( fieldname ) taunt_equipslot_##fieldname, #define CFG_DISABLED( fieldname ) CFG( fieldname ) #include "xlast_portal2/inc_coop_taunts_equipslots.inc" #undef CFG_DISABLED #undef CFG taunt_equipslots_total }; uint8 tauntsEquipSlots[taunt_equipslots_total]; }; CoopData_t coop; struct GameInstructorData_t { enum LessonsBits_t { #define CFG( fieldname ) lesson_##fieldname, #define CFG_DISABLED( fieldname ) CFG( fieldname ) #include "xlast_portal2/inc_gameinstructor_lessons.inc" #undef CFG_DISABLED #undef CFG lessonbits_last_bit_used, lessonbits_total = 48 // leave room for total 48 lessons }; union LessonInfo_t { uint8 u8dummy; struct { uint8 display : 4; uint8 success : 4; }; } lessoninfo[ lessonbits_total ]; }; GameInstructorData_t gameinstructor; }; // // // WARNING!! WARNING!! WARNING!! WARNING!! // This structure TitleData2 should remain // intact after we ship otherwise // users profiles will be busted. // You are allowed to add fields at the end // as long as structure size stays under // XPROFILE_SETTING_MAX_SIZE = 1000 bytes. // WARNING!! WARNING!! WARNING!! WARNING!! // struct TitleData2 { // Achievement component bits enum AchievementBits_t { kAchievementComponentTotalCount = 0 #define CFG( name, compcount, ... ) \ + STORAGE_COUNT_FOR_BITS( uint32, compcount ) #include "xlast_portal2/inc_achievements.inc" #undef CFG }; uint32 bitsAchievementsComponents[ kAchievementComponentTotalCount ]; // Add a padding for future progress achievement bits uint32 bitsAchievementFuture[ 64 ]; // Awards bitfields enum AwardBits_t { #define CFG( award, ... ) bitAward##award, #include "xlast_portal2/inc_asset_awards.inc" #undef CFG bitAward_last_bit_used, bitAwards_total = 32 // leave room for total 32 awards }; uint32 awardbits[ STORAGE_COUNT_FOR_BITS( uint32, bitAwards_total ) ]; // Custom achievements data enum { kAchievement_SpreadTheLove_FriendsHuggedCount = 3 }; uint64 ach_SpreadTheLove_FriendsHugged[ kAchievement_SpreadTheLove_FriendsHuggedCount ]; enum { kAchievement_SpeedRunCoop_QualifiedRunsCount = 3 }; uint16 ach_SpeedRunCoop_MapsQualified[ kAchievement_SpeedRunCoop_QualifiedRunsCount ]; // Add a padding for future custom achievements data uint32 bitsAchievementDataFuture[ 64 ]; // DLC ownership bits uint32 dlcbits[2]; }; // // // WARNING!! WARNING!! WARNING!! WARNING!! // This structure TitleData3 should remain // intact after we ship otherwise // users profiles will be busted. // You are allowed to add fields at the end // as long as structure size stays under // XPROFILE_SETTING_MAX_SIZE = 1000 bytes. // WARNING!! WARNING!! WARNING!! WARNING!! // // struct TitleData3 // { // uint64 unused; // unused, free for taking // }; // // // // WARNING!! WARNING!! WARNING!! WARNING!! // This structure TitleData3 should remain // intact after we ship otherwise // users profiles will be busted. // You are allowed to add fields at the end // as long as structure size stays under // XPROFILE_SETTING_MAX_SIZE = 1000 bytes. // WARNING!! WARNING!! WARNING!! WARNING!! // struct TitleData3 { uint32 version; struct ConVarsSystem_t { #define CFG( name, scfgType, cppType, ... ) cppType name; #include "xlast_portal2/inc_gameconsole_settings_sys.inc" #undef CFG uint8 unused_uint8[2]; uint32 unused_values[9]; enum Bits_bitfields_t { #define CFG( name ) name, #include "xlast_portal2/inc_gameconsole_settings_sys_bits.inc" #undef CFG bit_last }; uint32 bitfields[ STORAGE_COUNT_FOR_BITS( uint32, bit_last ) ]; uint32 unused[10]; }; ConVarsSystem_t cvSystem; struct ConVarsUser_t { #define CFG( name, scfgType, cppType ) cppType name; #include "xlast_portal2/inc_gameconsole_settings_usr.inc" #undef CFG uint32 unused_values[8]; enum Bits_bitfields_t { #define CFG( name ) name, #include "xlast_portal2/inc_gameconsole_settings_usr_bits.inc" #undef CFG bit_last }; uint32 bitfields[ STORAGE_COUNT_FOR_BITS( uint32, bit_last ) ]; uint32 unused[10]; }; ConVarsUser_t cvUser; ConVarsUser_t cvUserSS; struct GameStats_t { #define CFG( name, scfgType, cppType ) cppType name; #include "xlast_portal2/inc_gamestats.inc" #undef CFG uint32 unused_values[50]; }; GameStats_t gamestats; }; #define PORTAL2_LOBBY_CONFIG_COOP( szNetwork, szAccess ) \ " system { " \ " network " szNetwork " " \ " access " szAccess " " \ " } " \ " game { " \ " mode coop " \ " map default " \ " } " #define PORTAL2_DLCID_RETAIL_DLC1 ( 1ull << 0x01 ) #define PORTAL2_DLCID_RETAIL_DLC2 ( 1ull << 0x02 ) #define PORTAL2_DLCID_COOP_BOT_SKINS ( 1ull << 0x12 ) #define PORTAL2_DLCID_COOP_BOT_HELMETS ( 1ull << 0x13 ) #define PORTAL2_DLCID_COOP_BOT_ANTENNA ( 1ull << 0x14 ) #define PORTAL2_DLC_ALLMASK ( PORTAL2_DLCID_RETAIL_DLC1 | PORTAL2_DLCID_RETAIL_DLC2 | PORTAL2_DLCID_COOP_BOT_SKINS | PORTAL2_DLCID_COOP_BOT_HELMETS | PORTAL2_DLCID_COOP_BOT_ANTENNA ) #define PORTAL2_DLC_APPID_COOP_BOT_SKINS 651 #define PORTAL2_DLC_APPID_COOP_BOT_HELMETS 652 #define PORTAL2_DLC_APPID_COOP_BOT_ANTENNA 653 #define PORTAL2_DLC_PKGID_COOP_BOT_SKINS 7364 #define PORTAL2_DLC_PKGID_COOP_BOT_HELMETS 7365 #define PORTAL2_DLC_PKGID_COOP_BOT_ANTENNA 7366 #define PORTAL2_DLC_PKGID_PCSTEAMPLAY 7397 #ifdef _WIN32 #pragma warning( pop ) #endif #endif // IMATCHEXT_PORTAL2_H