int save_ppm(t_rt *rt) { int y; int x; FILE *file; unsigned char col[3]; if (!(file = open_FILE(rt))) return (-1); fprintf(file, "P6\n%d %d\n255\n", WINX, WINY); y = 0; while (y < WINY) { x = 0; while (x < WINX) { bzero(col, 3); col[0] = rt->img->data[(y * WINX * 4) + (x * 4) + 2]; col[1] = rt->img->data[(y * WINX * 4) + (x * 4) + 1]; col[2] = rt->img->data[(y * WINX * 4) + (x * 4)]; fwrite(col, 1, 3, file); x++; } y++; } fclose(file); return (0); }
int get_save_spot() { int i = MAX_SAVE_GAMES, last_free = 0; for (; i > 0;) { char name[20]; sprintf(name, "%ssave%04d.spe", get_save_filename_prefix(), i); FILE *fp = open_FILE(name, "rb"); if (fp) i = 0; else { last_free = i; i--; } fclose(fp); } if (last_free) return last_free; // if there are any slots not created yet... int w = cache.img(save_buts[0])->Size().x; int mx = last_demo_mx - w / 2; if (mx + w + 10 > xres) mx = xres - w - 10; if (mx < 0) mx = 0; Jwindow *l_win = create_num_window(mx, MAX_SAVE_GAMES, MAX_SAVE_LINES, NULL); event ev; int got_level = 0; int quit = 0; do { wm->flush_screen(); wm->get_event(ev); if (ev.type == EV_MESSAGE && ev.message.id >= ID_LOAD_GAME_NUMBER && ev.message.id < ID_LOAD_GAME_PREVIEW) got_level = ev.message.id - ID_LOAD_GAME_NUMBER + 1; if (ev.type == EV_CLOSE_WINDOW && ev.window == l_win) quit = 1; } while (!got_level && !quit); wm->close_window(l_win); the_game->reset_keymap(); return got_level; }
void save_difficulty() { FILE *fp=open_FILE("hardness.lsp","wb"); if (!fp) dprintf("Unable to write to file hardness.lsp\n"); else { fprintf(fp,"(setf difficulty '"); if (DEFINEDP(symbol_value(l_difficulty))) { if (symbol_value(l_difficulty)==l_extreme) fprintf(fp,"extreme)\n"); else if (symbol_value(l_difficulty)==l_hard) fprintf(fp,"hard)\n"); else if (symbol_value(l_difficulty)==l_easy) fprintf(fp,"easy)\n"); else fprintf(fp,"medium)\n"); } else fprintf(fp,"medium)\n"); fclose(fp); } }
void gamma_correct(palette *&pal, int force_menu) { long dg=0,old_dg=0; int abort=0; // see if user has already done this routine LSymbol *gs = LSymbol::Find("darkest_gray"); if(old_pal) { delete pal; pal = old_pal; old_pal = NULL; } if(gs && DEFINEDP(gs->GetValue()) && !force_menu) { dg = lnumber_value(gs->GetValue()); } #ifdef __QNXNTO__ else if (!force_menu) { dg = 36; } #endif // __QNXNTO__ else { if(gs && DEFINEDP(gs->GetValue())) { dg = old_dg = lnumber_value(gs->GetValue()); } // load in a fine gray palette they can chose from palette *gray_pal = pal->copy(); int i = 0; int tc = 32; for(; i < tc; i++) { gray_pal->set(i, i * 4, i * 4, i * 4); } gray_pal->load(); int wm_bc = wm->bright_color(), wm_mc = wm->medium_color(), wm_dc = wm->dark_color(); int br_r = pal->red(wm_bc) + 20; if(br_r > 255) br_r = 255; int br_g = pal->green(wm_bc) + 20; if(br_g > 255) br_g = 255; int br_b = pal->blue(wm_bc) + 20; if(br_b > 255) br_b = 255; int md_r = pal->red(wm_mc) - 20; if(md_r < 0) md_r = 0; int md_g = pal->green(wm_mc) - 20; if(md_g < 0) md_g = 0; int md_b = pal->blue(wm_mc) - 20; if(md_b < 0) md_b = 0; int dr_r = pal->red(wm_dc) - 40; if(dr_r < 0) dr_r = 0; int dr_g = pal->green(wm_dc) - 40; if(dr_g < 0) dr_g = 0; int dr_b = pal->blue(wm_dc) - 40; if(dr_b < 0) dr_b = 0; wm->set_colors(gray_pal->find_closest(br_r, br_g, br_b), gray_pal->find_closest(md_r, md_g, md_b), gray_pal->find_closest(dr_r, dr_g, dr_b)); int sh = wm->font()->Size().y + 35; button *but = new button(5, 5 + sh * 3, ID_GAMMA_OK, cache.img(ok_button), new info_field(35, 10 + sh * 3, ID_NULL, lang_string("gamma_msg"), 0)); gray_picker *gp = new gray_picker(2, 5 + sh, ID_GREEN_PICKER, 0, dg / 4, but); gp->set_pos(dg / 4); Jwindow *gw = wm->CreateWindow(ivec2(xres / 2 - 190, yres / 2 - 90), ivec2(-1), gp); Event ev; wm->flush_screen(); do { do { wm->get_event(ev); } while(ev.type == EV_MOUSE_MOVE && wm->IsPending()); wm->flush_screen(); if(ev.type == EV_CLOSE_WINDOW) abort = 1; if(ev.type == EV_KEY && ev.key == JK_ESC) abort = 1; } while(!abort && (ev.type != EV_MESSAGE || ev.message.id != ID_GAMMA_OK)); dg = ((spicker *)gw->inm->get(ID_GREEN_PICKER))->first_selected() * 4; wm->close_window(gw); wm->flush_screen(); wm->set_colors(wm_bc, wm_mc, wm_dc); delete gray_pal; if(!abort) { char *gammapath; FILE *fp; gammapath = (char *)malloc(strlen(get_save_filename_prefix()) + 10); sprintf(gammapath, "%sgamma.lsp", get_save_filename_prefix()); fp = open_FILE(gammapath, "wb"); if(fp) { fprintf(fp, "(setq darkest_gray %ld)\n", dg); fclose(fp); LSpace *sp = LSpace::Current; LSpace::Current = &LSpace::Perm; LSymbol::FindOrCreate("darkest_gray")->SetNumber(dg); LSpace::Current = sp; } else { dprintf("Unable to write to file gamma.lsp\n"); } free(gammapath); } } if(abort) dg = old_dg; if(dg < 1) dg = 1; else if(dg > 128) dg = 128; double gamma = log(dg / 255.0) / log(16.0 / 255.0); old_pal = pal; pal = new palette; for(int i = 0; i < 256; i++) { uint8_t oldr, oldg, oldb; old_pal->get(i, oldr, oldg, oldb); pal->set(i, (int)(pow(oldr / 255.0, gamma) * 255), (int)(pow(oldg / 255.0, gamma) * 255), (int)(pow(oldb / 255.0, gamma) * 255)); } pal->load(); }