13 static void skaterift_write_savedata_thread(void *_
){
14 FILE *fp
= fopen( "save.bkv", "wb" );
16 fwrite( savedata
.buf
, savedata
.len
, 1, fp
);
21 static void skaterift_write_addon_alias( vg_msg
*msg
, const char *key
,
23 if( alias
->workshop_id
)
24 vg_msg_wkvu64( msg
, key
, alias
->workshop_id
);
26 vg_msg_wkvstr( msg
, key
, alias
->foldername
);
29 static void skaterift_write_viewslot( vg_msg
*msg
, const char *key
,
30 enum addon_type type
, u16 cache_id
){
31 if( !cache_id
) return;
33 struct addon_cache
*cache
= &addon_system
.cache
[type
];
34 addon_cache_entry
*entry
= vg_pool_item( &cache
->pool
, cache_id
);
35 addon_reg
*reg
= entry
->reg_ptr
;
38 skaterift_write_addon_alias( msg
, key
, ®
->alias
);
41 static void skaterift_read_addon_alias( vg_msg
*msg
, const char *key
,
45 alias
->foldername
[0] = '\0';
46 alias
->workshop_id
= 0;
49 vg_msg_cmd kv
= vg_msg_seekkv( msg
, key
, 0 );
50 if( kv
.code
== k_vg_msg_kvstring
){
51 vg_strncpy( kv
.value
, alias
->foldername
, sizeof(alias
->foldername
),
52 k_strncpy_allow_cutoff
);
55 alias
->workshop_id
= vg_msg_read_as_u64( &kv
);
58 static void skaterift_write_savedata(void){
59 if( !vg_loader_availible() ) return;
62 sav
.buf
= savedata
.buf
;
63 sav
.max
= sizeof(savedata
.buf
);
65 vg_msg_frame( &sav
, "player" );
67 skaterift_write_viewslot( &sav
, "board", k_addon_type_board
,
68 localplayer
.board_view_slot
);
69 skaterift_write_viewslot( &sav
, "playermodel", k_addon_type_player
,
70 localplayer
.playermodel_view_slot
);
72 vg_msg_end_frame( &sav
);
74 vg_msg_frame( &sav
, "world" );
76 addon_reg
*reg
= world_static
.addon_client
;
77 if( reg
&& (world_static
.active_instance
> 0) ){
78 skaterift_write_addon_alias( &sav
, "alias", ®
->alias
);
79 vg_msg_wkvu32( &sav
, "index", world_static
.active_instance
);
80 vg_msg_wkvnum( &sav
, "position", k_vg_msg_float
|k_vg_msg_32b
, 3,
84 vg_msg_end_frame( &sav
);
86 savedata
.len
= sav
.len
;
87 vg_loader_start( skaterift_write_savedata_thread
, NULL
);
90 static void skaterift_read_savedata(void){
91 FILE *fp
= fopen( "save.bkv", "rb" );
93 savedata
.len
= fread( savedata
.buf
, 1, sizeof(savedata
.buf
), fp
);