+void skaterift_read_main_savedata( savedata_file *file )
+{
+ strcpy( file->path, str_skaterift_main_save );
+ savedata_file_read( file );
+}
+
+int skaterift_autosave( int async )
+{
+ if( async )
+ if( !vg_loader_availible() ) return 0;
+
+ u32 save_files = 2;
+ if( world_static.instances[k_world_purpose_client].status
+ == k_world_status_loaded ){
+ save_files ++;
+ }
+
+ vg_linear_clear( vg_async.buffer );
+ u32 size = sizeof(savedata_group) + sizeof(savedata_file) * save_files;
+
+ savedata_group *group;
+ if( async ){
+ size = vg_align8( size );
+ group = vg_linear_alloc( vg_async.buffer, size );
+ }
+ else
+ group = alloca( size );
+
+ group->file_count = save_files;
+ skaterift_populate_main_savedata( &group->files[0] );
+ skaterift_populate_world_savedata( &group->files[1], k_world_purpose_hub );
+
+ if( world_static.instances[ k_world_purpose_client ].status
+ == k_world_status_loaded ){
+ skaterift_populate_world_savedata( &group->files[2],
+ k_world_purpose_client );
+ }
+
+ if( async )
+ vg_loader_start( (void *)savedata_group_write, group );
+ else
+ savedata_group_write( group );
+
+ return 1;
+}
+
+void skaterift_autosave_synchronous(void)
+{
+ skaterift_autosave(0);
+}
+
+void skaterift_autosave_update(void)
+{
+ if( vg.time - last_autosave > 20.0 ){
+ if( skaterift_autosave(1) ){
+ last_autosave = vg.time;
+ }
+ }
+}