+
+ /* init player position.
+ * - this is overriden by the save state when(if) it loads */
+ ent_spawn *rp = world_find_spawn_by_name( world, "start" );
+ if( !rp ) rp = world_find_closest_spawn( world, (v3f){0.0f,0.0f,0.0f} );
+
+ /* TODO: fallback to searching for a safe location using raycasts */
+ assert(rp);
+ v3_copy( rp->transform.co, world->player_co );
+
+ /* allocate leaderboard buffers */
+ u32 bs = mdl_arrcount(&world->ent_route)*sizeof(struct leaderboard_cache);
+ world->leaderboard_cache = vg_linear_alloc( heap, bs );
+
+ for( u32 i=0; i<mdl_arrcount( &world->ent_route ); i ++ ){
+ struct leaderboard_cache *board = &world->leaderboard_cache[i];
+ board->data = vg_linear_alloc( heap, NETWORK_REQUEST_MAX );
+ board->status = k_request_status_client_error;
+ board->cache_time = 0.0;
+ board->data_len = 0;
+ }
+
+ vg_async_call( async_world_postprocess, world, 0 );
+ vg_async_stall();