From d1ddce36e6f81a601dd6be147affb5f1e8b769a2 Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 8 Feb 2025 14:36:04 +0000 Subject: [PATCH] improve script commands --- src/save.c | 4 +- src/skaterift_script.c | 150 +++++++++++++++++++++++++++++++++++++---- src/skaterift_script.h | 1 + 3 files changed, 138 insertions(+), 17 deletions(-) diff --git a/src/save.c b/src/save.c index 1aa05c8..b24b758 100644 --- a/src/save.c +++ b/src/save.c @@ -267,7 +267,5 @@ void skaterift_load_mainsave(void) kvsav.cur = orig; if( vg_msg_seekframe( &kvsav, "story" ) ) - { - - } + skaterift_script_load_savedata( &kvsav ); } diff --git a/src/skaterift_script.c b/src/skaterift_script.c index 003b43c..30f3bad 100644 --- a/src/skaterift_script.c +++ b/src/skaterift_script.c @@ -1821,38 +1821,159 @@ _script_infos[] = void skaterift_script_write_savedata( vg_msg *sav ) { - + for( u32 i=0; ialias ); + { + vg_msg_wkvnum( sav, "viewed_time", + k_vg_msg_u64, 1, &info->viewed_time ); + + u8 availible = info->availible; + vg_msg_wkvnum( sav, "availible", k_vg_msg_u8, 1, &availible ); + } + vg_msg_end_frame( sav ); + } +} + +void skaterift_script_load_savedata( vg_msg *sav ) +{ + vg_msg_cursor orig = sav->cur; + + for( u32 i=0; icur = orig; + struct script_info *info = &_script_infos[i]; + + if( vg_msg_seekframe( sav, info->alias ) ) + { + vg_msg_getkvintg( sav, "viewed_time", k_vg_msg_u64, + &info->viewed_time, NULL ); + + u8 availible; + vg_msg_getkvintg( sav, "availible", k_vg_msg_u8, &availible, NULL ); + info->availible = availible? 1: 0; + } + } +} + +enum script_action +{ + k_script_action_none, + k_script_action_unlock, + k_script_action_reset, + k_script_action_info, + k_script_action_play +}; + +static void _skaterift_script_hook_apply_action( u32 script_id, + enum script_action action ) +{ + struct script_info *info = &_script_infos[ script_id ]; + + if( action == k_script_action_unlock ) + info->availible = 1; + + if( action == k_script_action_reset ) + { + info->availible = 0; + info->viewed_time = 0; + } + + if( action == k_script_action_play ) + { + _script.script_id = script_id; + if( info->jump( k_escript_event_call, NULL ) ) + _script.script_id = k_escript_script_id_max; + + info->viewed_time = 9999; /* TODO */ + } + + if( action == k_script_action_info ) + { + vg_info( "%s | availible: %s, viewed_time: %lu\n", + info->alias, + info->availible? "Yes": "No", + info->viewed_time ); + } } static int _skaterift_script_hook( int argc, const char *argv[] ) { - if( argc != 1 ) + if( argc != 2 ) { - vg_error( "Usage: script \n" ); + vg_error( "Usage: script \n" ); return 0; } if( _cutscene.state != k_cutscene_state_none ) { - vg_error( "Cannot load script while cutscene is in use.\n" ); + vg_error( "Cannot do anything while cutscene is in use.\n" ); return 0; } - for( u32 i=0; ialias ) ) + vg_error( "'%s' is not a command\n", argv[0] ); + return 0; + } + + if( !strcmp( argv[1], "all" ) ) + { + if( action == k_script_action_play ) { - _script.script_id = i; - if( bind->jump( k_escript_event_call, NULL ) ) - _script.script_id = k_escript_script_id_max; + vg_error( "No\n" ); + return 0; + } - return 1; + for( u32 i=0; ialias, term, 0 ); + } + } } void _skaterift_script_update(void) @@ -1877,5 +1998,6 @@ void _skaterift_script_marker( const char *marker ) void _skaterift_script_init(void) { - vg_console_reg_cmd( "script", _skaterift_script_hook, NULL ); + vg_console_reg_cmd( "script", _skaterift_script_hook, + _skaterift_script_hook_poll ); } diff --git a/src/skaterift_script.h b/src/skaterift_script.h index 660b2db..b2dfe90 100644 --- a/src/skaterift_script.h +++ b/src/skaterift_script.h @@ -4,3 +4,4 @@ void _skaterift_script_update(void); void _skaterift_script_init(void); void _skaterift_script_marker( const char *marker ); void skaterift_script_write_savedata( vg_msg *sav ); +void skaterift_script_load_savedata( vg_msg *sav ); -- 2.25.1