void view_init() { sidebar_width=platform_lowres?3*SIDEBAR_WIDTH_MAX/4:SIDEBAR_WIDTH_MAX; font_std=d_font_load("res/FreeMonoBold.ttf", platform_lowres?8:12, 512, 512); mouse_tilesheet=d_render_tilesheet_load("res/mouse.png", 16, 16, DARNIT_PFORMAT_RGB5A1); mouse_target_tilesheet=d_render_tilesheet_load("res/target.png", 32, 32, DARNIT_PFORMAT_RGB5A1); //Menu background int scale=config.plasma==0?1:(1<<(5-config.plasma)); view_background_w=platform.screen_w/scale; view_background_h=platform.screen_h/scale; view_background_ts=d_render_tilesheet_new(1, 1, view_background_w, view_background_h, DARNIT_PFORMAT_RGB5A1); view_background_tile=d_render_tile_new(1, view_background_ts); view_background_pixbuf=malloc(view_background_w*view_background_h*sizeof(unsigned int)); d_render_tilesheet_scale_algorithm(view_background_ts, DARNIT_SCALE_LINEAR); d_render_tile_move(view_background_tile, 0, 0, 0); d_render_tile_tilesheet_coord_set(view_background_tile, 0, 0, 0, view_background_w, view_background_h); d_render_tile_size_set(view_background_tile, 0, platform.screen_w, platform.screen_h); view_background_update(0); menu_init(); lobby_init(); game_view_init(); gameover_init(); chat_init(); gamestate_pane[GAME_STATE_MENU]=&panelist_menu_sidebar; gamestate_pane[GAME_STATE_CREDITS]=&panelist_credits; gamestate_pane[GAME_STATE_CONNECTING]=&panelist_multiplayer_connecting; gamestate_pane[GAME_STATE_LOBBY]=&panelist_lobby_players; gamestate_pane[GAME_STATE_GAME]=&panelist_game_sidebar; gamestate_pane[GAME_STATE_GAME_MENU]=&panelist_game_menu; gamestate_pane[GAME_STATE_GAME_OVER]=&panelist_gameover_sidebar; gamestate_pane[GAME_STATE_QUIT]=NULL; map=NULL; }
int game_client_init(const char *file_name) { char *back_name = "", *grad_name = ""; int i; coins = 0; status = GAME_NONE; game_client_free(file_name); /* Load SOL data. */ if (!game_base_load(file_name)) return (gd.state = 0); if (!sol_load_vary(&gd.vary, &game_base)) { game_base_free(NULL); return (gd.state = 0); } if (!sol_load_draw(&gd.draw, &gd.vary, config_get_d(CONFIG_SHADOW))) { sol_free_vary(&gd.vary); game_base_free(NULL); return (gd.state = 0); } gd.state = 1; /* Initialize game state. */ game_tilt_init(&gd.tilt); game_view_init(&gd.view); gd.jump_e = 1; gd.jump_b = 0; gd.jump_dt = 0.0f; gd.goal_e = 0; gd.goal_k = 0.0f; /* Initialize interpolation. */ game_lerp_init(&gl, &gd); /* Initialize fade. */ gd.fade_k = 1.0f; gd.fade_d = -2.0f; /* Load level info. */ version.x = 0; version.y = 0; for (i = 0; i < gd.vary.base->dc; i++) { char *k = gd.vary.base->av + gd.vary.base->dv[i].ai; char *v = gd.vary.base->av + gd.vary.base->dv[i].aj; if (strcmp(k, "back") == 0) back_name = v; if (strcmp(k, "grad") == 0) grad_name = v; if (strcmp(k, "version") == 0) sscanf(v, "%d.%d", &version.x, &version.y); } /* * If the version of the loaded map is 1, assume we have a version * match with the server. In this way 1.5.0 replays don't trigger * bogus map compatibility warnings. Post-1.5.0 replays will have * CMD_MAP override this. */ game_compat_map = version.x == 1; /* Initialize particles. */ part_reset(); /* Initialize command state. */ cmd_state_init(&cs); /* Initialize background. */ back_init(grad_name); sol_load_full(&gd.back, back_name, 0); /* Initialize lighting. */ light_reset(); return gd.state; }