X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=steam.h;h=dadcd90309e6ace26db0dc668d5f7c9b29fda0a1;hb=76315944e5a98838163e0aba8601ed3522f0724d;hp=a2132223b2c9db9ae154e331ce57664a10d390ac;hpb=d5405f24a854aff8b76bb126492f2c18bc874270;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/steam.h b/steam.h index a213222..dadcd90 100644 --- a/steam.h +++ b/steam.h @@ -1,11 +1,12 @@ /* - * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved + * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved * All trademarks are property of their respective owners */ #ifndef STEAM_H #define STEAM_H +#define VG_GAME #include "vg/vg_steam.h" #include "vg/vg_steam_utils.h" #include "vg/vg_steam_networking.h" @@ -13,6 +14,7 @@ #include "vg/vg_steam_http.h" #include "vg/vg_steam_friends.h" #include "vg/vg_steam_user_stats.h" +#include "submodules/anyascii/impl/c/anyascii.c" /* * We only want to use steamworks if building for the networked version, @@ -25,7 +27,7 @@ * nothing. */ -static char steam_username_at_startup[128]; +static char steam_username_at_startup[128] = "Unassigned"; static void recv_steam_warning( int severity, const char *msg ) { @@ -36,7 +38,7 @@ static void recv_steam_warning( int severity, const char *msg ) } static int steam_ready = 0, - steam_stats_ready = 0; + steam_stats_ready = 0; static void *hSteamNetworkingSockets, *hSteamUser; @@ -46,67 +48,67 @@ static HSteamPipe hSteamClientPipe; static const char *steam_achievement_names[] = { - "ALBERT", "MARC", + "ALBERT", "MARC", "JANET", "BERNADETTA", "ROUTE_MPY", "ROUTE_MPG", "ROUTE_MPB", "ROUTE_MPR", - "ROUTE_TO", "ROUTE_TC" + "ROUTE_TO", "ROUTE_TC", "CITY_COMPLETE", "MTZERO_SILVER", "MTZERO_GOLD", + "80FT" }; static void steam_store_achievements(void) { - if( steam_ready && steam_stats_ready ) - { + if( steam_ready && steam_stats_ready ){ SteamAPI_ISteamUserStats_StoreStats( hSteamUserStats ); } } -static void steam_set_achievement( const char *name ) -{ - if( steam_ready && steam_stats_ready ) - { - if( SteamAPI_ISteamUserStats_SetAchievement( hSteamUserStats, name ) ) - { +static void update_ach_models(void); +static void steam_set_achievement( const char *name ){ + if( skaterift.demo_mode ) + return; + + /* hack lol */ + if( !strcmp(name,"MARC") ) skaterift.achievements |= 0x1; + if( !strcmp(name,"ALBERT") ) skaterift.achievements |= 0x2; + if( !strcmp(name,"JANET") ) skaterift.achievements |= 0x4; + if( !strcmp(name,"BERNADETTA") ) skaterift.achievements |= 0x8; + update_ach_models(); + + if( steam_ready && steam_stats_ready ){ + if( SteamAPI_ISteamUserStats_SetAchievement( hSteamUserStats, name ) ){ vg_success( "Achievement set! '%s'\n", name ); + } - else - { + else{ vg_warn( "Failed to set achievement: %s\n", name ); } } - else - { + else{ vg_warn( "Failed to set achievement (steam not ready): %s\n", name ); } } static void steam_clear_achievement( const char *name ) { - if( steam_ready && steam_stats_ready ) - { - if( SteamAPI_ISteamUserStats_ClearAchievement( hSteamUserStats, name ) ) - { + if( steam_ready && steam_stats_ready ){ + if( SteamAPI_ISteamUserStats_ClearAchievement( hSteamUserStats, name ) ){ vg_info( "Achievement cleared: '%s'\n", name ); } - else - { + else{ vg_warn( "Failed to clear achievement: %s\n", name ); } } - else - { + else{ vg_warn( "Failed to clear achievement (steam not ready): %s\n", name ); } } -static int steam_list_achievements( int argc, char const *argv[] ) -{ +static void steam_print_all_achievements(void){ vg_info( "Achievements: \n" ); - if( steam_ready && steam_stats_ready ) - { - for( int i=0; im_pubParam; - if( rec->m_eResult == k_EResultOK ) - { + if( rec->m_eResult == k_EResultOK ){ vg_info( "Recieved stats for: %lu (user: %lu)\n", rec->m_nGameID, rec->m_steamIDUser ); steam_stats_ready = 1; + + steamapi_bool set = 0; + if( SteamAPI_ISteamUserStats_GetAchievement( + hSteamUserStats, "MARC", &set ) ){ + if( set ) skaterift.achievements |= 0x1; + } + if( SteamAPI_ISteamUserStats_GetAchievement( + hSteamUserStats, "ALBERT", &set ) ){ + if( set ) skaterift.achievements |= 0x2; + } + if( SteamAPI_ISteamUserStats_GetAchievement( + hSteamUserStats, "JANET", &set ) ){ + if( set ) skaterift.achievements |= 0x4; + } + if( SteamAPI_ISteamUserStats_GetAchievement( + hSteamUserStats, "BERNADETTA", &set ) ){ + if( set ) skaterift.achievements |= 0x8; + } + update_ach_models(); } - else - { + else{ vg_error( "Error recieveing stats for user (%u)\n", rec->m_eResult ); } } -static int steam_init(void) +static u32 utf8_byte0_byte_count( u8 char0 ) { - const char *username = NULL; + for( u32 k=2; k<4; k++ ){ + if( !(char0 & (0x80 >> k)) ) + return k; + } + + return 0; +} + +static u32 str_utf8_collapse( const char *str, char *buf, u32 length ){ + u8 *ustr = (u8 *)str; + u32 utf32_code = 0x00000000; + u32 i=0, j=0, utf32_byte_ct=0; + + for(;j < length-1;){ + if( ustr[i] == 0x00 ) + break; + + if( ustr[i] & 0x80 ){ + if( utf32_byte_ct ){ + utf32_byte_ct --; + utf32_code |= (ustr[i] & 0x3F) << (utf32_byte_ct*6); + + if( !utf32_byte_ct ){ + const char *match; + size_t chars = anyascii( utf32_code, &match ); + + for( u32 k=0; k> utf32_byte_ct); + utf32_code <<= utf32_byte_ct*6; + } + } + else{ + utf32_byte_ct = 0x00; + buf[j ++] = str[i]; + } + + i++; + } + + buf[j] = 0x00; + return j; +} + +static int steam_init(void){ + const char *username = "offline player"; #ifdef SR_NETWORKED vg_info( "Initializing steamworks\n" ); - if( !SteamAPI_Init() ) - { + if( !SteamAPI_Init() ){ printf("\n"); vg_error( "Steamworks failed to initialize\n" ); return 1; @@ -214,7 +278,6 @@ static int steam_init(void) * -------------------------------------------------------- */ hSteamUserStats = SteamAPI_SteamUserStats(); - steam_register_callback( k_iUserStatsReceived, steam_on_recieve_current_stats ); @@ -222,23 +285,7 @@ static int steam_init(void) vg_warn( "No Steam Logon: Cannot request stats\n" ); - vg_function_push( (struct vg_cmd) - { - .name = "ach_list", - .function = steam_list_achievements - }); - - vg_function_push( (struct vg_cmd) - { - .name = "ach_clear_all", - .function = steam_clear_all_achievements - }); - - vg_function_push( (struct vg_cmd) - { - .name = "ach_set", - .function = steam_set_achievemnt_test - }); + vg_console_reg_cmd( "ach", steam_achievement_ccmd, NULL ); #endif @@ -251,14 +298,14 @@ static int steam_init(void) static void steam_update(void) { - if( steam_ready ) + if( steam_ready ){ steamworks_event_loop( hSteamClientPipe ); + } } -static void steam_end(void *nothing) +static void steam_end(void) { - if( steam_ready ) - { + if( steam_ready ){ vg_info( "Shutting down\n..." ); SteamAPI_Shutdown(); }