static void read_scores(void) { ALLEGRO_PATH *fn = userResourcePath(); if (al_make_directory(al_path_cstr(fn, ALLEGRO_NATIVE_PATH_SEP))) { al_set_path_filename(fn, "scores.cfg"); ALLEGRO_CONFIG *cfg = al_load_config_file(al_path_cstr(fn, ALLEGRO_NATIVE_PATH_SEP)); if (cfg) { for (int i = 0; i < NUM_SCORES; i++) { char name[] = {'n', (char)('0'+i), '\0'}; char score[] = {'s', (char)('0'+i), '\0'}; const char *v; v = al_get_config_value(cfg, "scores", name); if (v && strlen(v) <= 3) { strcpy(highScores[i].name, v); } v = al_get_config_value(cfg, "scores", score); if (v) { highScores[i].score = atoi(v); } } al_destroy_config(cfg); } } al_destroy_path(fn); }
void DeinitConfig(void) { ALLEGRO_PATH *path = al_get_standard_path(ALLEGRO_USER_SETTINGS_PATH); ALLEGRO_PATH *data = al_create_path("SuperDerpy.ini"); al_make_directory(al_path_cstr(path, ALLEGRO_NATIVE_PATH_SEP)); al_join_paths(path, data); al_save_config_file(al_path_cstr(path, ALLEGRO_NATIVE_PATH_SEP), config); al_destroy_path(path); al_destroy_path(data); al_destroy_config(config); }
SYMBOL_EXPORT void DeinitConfig(struct Game* game) { const ALLEGRO_FILE_INTERFACE* iface = al_get_new_file_interface(); al_set_standard_file_interface(); ALLEGRO_PATH* path = al_get_standard_path(ALLEGRO_USER_SETTINGS_PATH); ALLEGRO_PATH* data = al_create_path("SuperDerpy.ini"); al_make_directory(al_path_cstr(path, ALLEGRO_NATIVE_PATH_SEP)); al_join_paths(path, data); al_save_config_file(al_path_cstr(path, ALLEGRO_NATIVE_PATH_SEP), game->_priv.config); al_destroy_path(path); al_destroy_path(data); al_destroy_config(game->_priv.config); al_set_new_file_interface(iface); }
bool ScreenPlay::scan_save_files() { //reduntant finction? if(gms == nullptr) gms = new GameSave(); savefiles.clear(); std::string dum; int a = 0; ALLEGRO_FS_ENTRY* dir = al_create_fs_entry("saves/"); if(al_open_directory(dir) == false) { al_make_directory("saves/"); } if(al_open_directory(dir)) { ALLEGRO_FS_ENTRY* file; while(file = al_read_directory(dir)) { dum = al_get_fs_entry_name(file); if( al_get_fs_entry_mode(file) == ALLEGRO_FILEMODE_ISDIR || dum.substr(dum.size()-4,4) != ".sav") { continue; } gms->Load(dum); savefiles.push_back(dum); scba->AddText(5, a * 100 +10, gms->Get_player_name(), al_map_rgb(255,215,0), &n_font); scba->AddButton("resources/fonts/Calibri.ttf", 400, a * 100 + 60, 75, 30, "Load", al_map_rgb(0,0,139)); scba->AddRectangle(1,a * 100 , 500, 100, 2, al_map_rgb(10,10,10)); scba->AddText(10, a * 100 + 60, "Mission: " + std::to_string(gms->Get_mission_number()), al_map_rgb(255,255,250), &m_font); a++; gms->Save(); } al_destroy_fs_entry(file); } al_destroy_fs_entry(dir); return true; }
void BMemory_Save (void) { FILE * f; BMemory_Verify_Usage(); switch (g_machine.mapper) { case MAPPER_Standard: if (sms.SRAM_Pages == 0) return; break; case MAPPER_93c46: break; default: return; } if (!al_filename_exists(g_env.Paths.SavegameDirectory)) al_make_directory(g_env.Paths.SavegameDirectory); f = fopen(g_env.Paths.BatteryBackedMemoryFile, "wb"); switch (g_machine.mapper) { case MAPPER_Standard: BMemory_SRAM_Save (f); break; case MAPPER_93c46: BMemory_93c46_Save (f); break; } if (f) fclose (f); }
ScreenPlay::ScreenPlay(Button *ext_b) : but(ext_b) { n_font = al_load_font("resources/fonts/Asimov.otf",40,0); m_font = al_load_font("resources/fonts/Calibri.ttf",30,0); std::string bnames[SCREENPLAY_NMB] = {"Back", "New game", "OK"}; int bpoz[SCREENPLAY_NMB][4] = { {1300, global::dHeight -70, 120, 50}, {(global::dWidth-120)/2, global::dHeight -70, 120, 50}, {(global::dWidth-120)/2, (global::dHeight-50)/2 +45, 120, 50} }; for(int a = 0;a < SCREENPLAY_NMB;a++) { buttons.push_back(new Button("resources/fonts/Calibri.ttf", bpoz[a][0], bpoz[a][1], bpoz[a][0] + bpoz[a][2],bpoz[a][1] + bpoz[a][3], bnames[a], al_map_rgb(0,0,128))); } buttons[OK]->Active(false); buttons[OK]->Print_active(false); scba = new ScrollableArea(((float)global::dWidth - 500.0f)/2.0f ,100, 500 ,global::dHeight-200); scba->background_col = al_map_rgba(50,50,50,120); //graphic background trash zemak_bitmpa = al_load_bitmap("resources/graphics/zemiacik.png"); if(zemak_bitmpa == nullptr) { error_message("Could not load image : resources/graphics/zemiacik.png"); } std::mt19937 generator(std::chrono::system_clock::now().time_since_epoch().count()); std::uniform_int_distribution<int> distribution(1,5); std::uniform_real_distribution<float> change(-10, 10); std::uniform_int_distribution<int> width(0,global::dWidth - ZEMIAK_SIZE); std::uniform_int_distribution<int> height(0,global::dHeight-ZEMIAK_SIZE); number_of_zemaky = distribution(generator); zemaky = new float[number_of_zemaky*4]; for(int a = 0;a < number_of_zemaky*4;a+=4) { zemaky[a] = width(generator); zemaky[a+1] = height(generator); zemaky[a+2] = round(change(generator)); zemaky[a+3] = round(change(generator)); } //------------------------------------------ //Saves loading gms = new GameSave(); std::string dum; int a = 0; ALLEGRO_FS_ENTRY* dir = al_create_fs_entry("saves/"); if(al_open_directory(dir) == false) { al_make_directory("saves/"); } if(al_open_directory(dir)) { ALLEGRO_FS_ENTRY* file; while(file = al_read_directory(dir)) { dum = al_get_fs_entry_name(file); if( al_get_fs_entry_mode(file) == ALLEGRO_FILEMODE_ISDIR || dum.substr(dum.size()-4,4) != ".sav") { continue; } gms->Load(dum); savefiles.push_back(dum); scba->AddText(5, a * 100 +10, gms->Get_player_name(), al_map_rgb(255,215,0), &n_font); scba->AddButton("resources/fonts/Calibri.ttf", 400, a * 100 + 60, 75, 30, "Load", al_map_rgb(0,0,139)); scba->AddRectangle(1,a * 100 , 500, 100, 2, al_map_rgb(10,10,10)); scba->AddText(10, a * 100 + 60, "Mission: " + std::to_string(gms->Get_mission_number()), al_map_rgb(255,255,250), &m_font); a++; gms->Save(); } al_destroy_fs_entry(file); } al_destroy_fs_entry(dir); }
GAME * game_init () { if (!al_init ()) { fprintf (stderr, "Failed to initialize Allegro.\n"); return NULL; } if (!al_init_image_addon ()) { fprintf (stderr, "Failed to initialize image addon.\n"); return NULL; } if (!al_install_keyboard ()) { fprintf (stderr, "Failed to install keyboard.\n"); return NULL; } al_init_font_addon (); if (!al_init_ttf_addon ()) { fprintf (stderr, "Failed to initialize ttf addon.\n"); return NULL; } if (!al_init_primitives_addon ()) { fprintf (stderr, "Failed to initialize primitives addon.\n"); return NULL; } GAME *game = al_malloc (sizeof (GAME)); if (!game) return NULL; srand (time (NULL)); game->running = true; game->paused = false; game->fullscreen = 1; game->windowed = 1; game->rrate = 60; game->suggest_vsync = 1; game->force_vsync = 0; game->current_npc = NULL; game->screen = screen_new (); char *filename; const char *str; filename = get_resource_path_str ("data/game.ini"); ALLEGRO_CONFIG *game_config = al_load_config_file (filename); al_free (filename); str = al_get_config_value (game_config, "", "org"); al_set_org_name (str); str = al_get_config_value (game_config, "", "app"); al_set_app_name (str); ALLEGRO_PATH *settpath = al_get_standard_path (ALLEGRO_USER_SETTINGS_PATH); ALLEGRO_PATH *gcpath = al_clone_path (settpath); al_set_path_filename (gcpath, "general.ini"); const char * gcpath_str = al_path_cstr (gcpath, ALLEGRO_NATIVE_PATH_SEP); ALLEGRO_CONFIG *gconfig = al_load_config_file (gcpath_str); if (!gconfig) { gconfig = al_create_config (); al_make_directory (al_path_cstr (settpath, ALLEGRO_NATIVE_PATH_SEP)); set_config_i (gconfig, "display", "width", game->screen.width); set_config_i (gconfig, "display", "height", game->screen.height); set_config_i (gconfig, "display", "fullscreen", game->fullscreen); set_config_i (gconfig, "display", "windowed", game->windowed); set_config_i (gconfig, "display", "refreshrate", game->rrate); set_config_i (gconfig, "display", "suggest_vsync", game->suggest_vsync); set_config_i (gconfig, "display", "force_vsync", game->force_vsync); } else { get_config_i (gconfig, "display", "width", &game->screen.width); get_config_i (gconfig, "display", "height", &game->screen.height); get_config_i (gconfig, "display", "fullscreen", &game->fullscreen); get_config_i (gconfig, "display", "windowed", &game->windowed); get_config_i (gconfig, "display", "refreshrate", &game->rrate); get_config_i (gconfig, "display", "suggest_vsync", &game->suggest_vsync); get_config_i (gconfig, "display", "force_vsync", &game->force_vsync); } al_save_config_file (gcpath_str, gconfig); al_destroy_path (settpath); al_destroy_path (gcpath); al_destroy_config (gconfig); int flags = 0; if (game->fullscreen == game->windowed) flags |= ALLEGRO_FULLSCREEN_WINDOW; else if (game->fullscreen) flags |= ALLEGRO_FULLSCREEN; else flags |= ALLEGRO_WINDOWED; al_set_new_display_option (ALLEGRO_VSYNC, game->suggest_vsync, ALLEGRO_SUGGEST); al_set_new_display_option (ALLEGRO_DEPTH_SIZE, 8, ALLEGRO_SUGGEST); al_set_new_display_flags (flags); al_set_new_display_refresh_rate (game->rrate); game->display = al_create_display (game->screen.width, game->screen.height); if (!game->display) { fprintf (stderr, "Failed to create display.\n"); al_free (game); return NULL; } al_set_new_bitmap_flags (ALLEGRO_VIDEO_BITMAP); game->timer = al_create_timer (1.0 / FPS); if (!game->timer) { fprintf (stderr, "Failed to create timer.\n"); al_free (game); return NULL; } game->screen.width = al_get_display_width (game->display); game->screen.height = al_get_display_height (game->display); screen_update_size (&game->screen, game->screen.width, game->screen.height); game->rrate = al_get_display_refresh_rate (game->display); game->event_queue = al_create_event_queue (); if (!game->event_queue) { fprintf (stderr, "Failed to create event queue.\n"); al_free (game); return NULL; } al_register_event_source (game->event_queue, al_get_display_event_source (game->display)); al_register_event_source (game->event_queue, al_get_timer_event_source (game->timer)); al_set_render_state (ALLEGRO_ALPHA_FUNCTION, ALLEGRO_RENDER_EQUAL); al_set_render_state (ALLEGRO_ALPHA_TEST_VALUE, 1); filename = get_resource_path_str ("data/sprites.ini"); game->sprites = sprite_load_sprites (filename); al_free (filename); filename = get_resource_path_str ("data/scenes.ini"); game->scenes = scene_load_file (filename); scene_load_scenes (game->scenes, game->sprites); al_free (filename); str = al_get_config_value (game_config, "", "scene"); game->current_scene = scene_get (game->scenes, str); str = al_get_config_value (game_config, "", "actor"); game->current_actor = sprite_new_actor (game->sprites, str); str = al_get_config_value (game_config, "", "portal"); SCENE_PORTAL *portal = scene_get_portal (game->scenes, str); al_destroy_config (game_config); filename = get_resource_path_str ("data/ui.ini"); game->ui = ui_load_file (filename); al_free (filename); sprite_center (game->current_actor, &portal->position); screen_center (&game->screen, portal->position, game->current_scene->map); return game; }
/* Methods * */ static int allua_make_directory(lua_State * L) { const char *path = luaL_checkstring(L, 1); lua_pushboolean(L, al_make_directory(path)); return 1; }