void video_ResetData(void) { int i; printf("[status] reset video data\n"); for(i = 0; i < game->players; i++) { PlayerVisual *pV = gPlayerVisuals + i; { char name[32]; sprintf(name, "model_diffuse_%d", i); scripting_GetGlobal(name, NULL); scripting_GetFloatArrayResult(pV->pColorDiffuse, 4); sprintf(name, "model_specular_%d", i); scripting_GetGlobal(name, NULL); scripting_GetFloatArrayResult(pV->pColorSpecular, 4); sprintf(name, "trail_diffuse_%d", i); scripting_GetGlobal(name, NULL); scripting_GetFloatArrayResult(pV->pColorAlpha, 4); } if(game->player[i].ai->active != AI_NONE) { pV->impact_radius = 0.0; pV->exp_radius = 0; } else { pV->exp_radius = EXP_RADIUS_MAX; } } }
video_level* video_CreateLevel(void) { video_level *l; l = malloc( sizeof(video_level) ); scripting_GetGlobal("level", NULL); // get scalability flag scripting_GetValue("scalable"); scripting_GetIntegerResult(& l->scalable); scripting_GetValue("geometry"); // get floor & arena meshes scripting_GetValue("floor"); l->floor = loadMesh(); level_LoadShader(& l->floor_shader); scripting_Pop(); // floor scripting_GetValue("arena"); l->arena = loadMesh(); level_LoadShader(& l->arena_shader); scripting_Pop(); // arena scripting_Pop(); // geometry scripting_Pop(); // level; return l; }
video_level* video_CreateLevel(void) { video_level *l; int iPos = scripting_StackGuardStart(); l = malloc( sizeof(video_level) ); memset(l, 0, sizeof(video_level)); scripting_GetGlobal("level", NULL); nebu_assert(!scripting_IsNil()); // get floor & arena meshes scripting_GetValue("floor"); nebu_assert(!scripting_IsNil()); loadModel(&l->floor, &gpTokenCurrentFloor); level_LoadShader(& l->floor_shader); scripting_Pop(); // floor scripting_GetValue("arena"); if(!scripting_IsNil()) { loadModel(&l->arena, &gpTokenCurrentLevel); level_LoadShader(& l->arena_shader); } scripting_Pop(); // arena scripting_Pop(); // level; scripting_StackGuardEnd(iPos); return l; }
void initConfiguration(int argc, const char *argv[]) { /* load some more defaults from config file */ runScript(PATH_SCRIPTS, "config.lua"); runScript(PATH_SCRIPTS, "artpack.lua"); /* go for .gltronrc (or whatever is defined in RC_NAME) */ { char *path; path = getPossiblePath(PATH_PREFERENCES, RC_NAME); if (path != NULL) { if (fileExists(path)) { printf("[status] loading settings from %s\n", path); scripting_RunFile(path); } else { printf("[error] cannot load %s from %s\n", RC_NAME, path); } free(path); } else { printf("[fatal] can't get valid pref path for %s\n", RC_NAME); exit(1); // something is seriously wrong } } if(!isSetting("version") || getSettingf("version") < 0.70f) { /* load some more defaults from config file */ runScript(PATH_SCRIPTS, "config.lua"); runScript(PATH_SCRIPTS, "artpack.lua"); printf("[warning] old config file found, overriding using defaults\n"); } // check if config is valid scripting_GetGlobal("save_completed", NULL); if(scripting_IsNilResult()) { runScript(PATH_SCRIPTS, "config.lua"); runScript(PATH_SCRIPTS, "artpack.lua"); printf("[warning] defunct config file found, overriding using defaults\n"); } setSettingf("version", 0.70f); /* parse any comandline switches overrinding the loaded settings */ parse_args(argc, argv); /* sanity check some settings */ checkSettings(); /* intialize the settings cache, remember to do that everytime you change something */ updateSettingsCache(); }
float getVideoSettingf(const char *name) { float value; if( scripting_GetGlobal("video", "settings", name, NULL) ) { /* does not exit, return default */ fprintf(stderr, "error accessing setting '%s'!\n", name); assert(0); return 0; } if( scripting_GetFloatResult(&value) ) { fprintf(stderr, "error reading setting '%s'!\n", name); assert(0); return 0; } return value; }
void Sound_reloadTrack(void) { char *song; char *path; scripting_GetGlobal("settings", "current_track", NULL); scripting_GetStringResult(&song); fprintf(stderr, "[sound] loading song %s\n", song); path = getPath( PATH_MUSIC, song ); scripting_StringResult_Free(song); if(path == NULL) { fprintf(stderr, "[sound] can't find song...exiting\n"); nebu_assert(0); exit(1); // TODO: handle missing song somewhere else } Sound_load(path); Sound_play(); free(path); }
int c_setArtPath(lua_State *l) { char *artpack; scripting_GetGlobal("settings", "current_artpack", NULL); scripting_GetStringResult(&artpack); fprintf(stderr, "[status] loading artpack '%s'\n", artpack); sprintf(art_dir_default, "%s%c%s", "art", SEPARATOR, "default"); sprintf(art_dir_artpack, "%s%c%s", "art", SEPARATOR, artpack); free(artpack); art_dirs[0] = art_dir_artpack; art_dirs[1] = art_dir_default; nebu_FS_SetupPath(PATH_ART, 2, art_dirs); return 0; }
void Sound_reloadTrack(void) { char *song; char *path; scripting_GetGlobal("settings", "current_track", NULL); scripting_GetStringResult(&song); // TODO: fix the song loading free(song); song = "song_revenge_of_cats.it"; fprintf(stderr, "[sound] loading song %s\n", song); path = getPath( PATH_MUSIC, song ); // free(song); if(path == NULL) { fprintf(stderr, "[sound] can't find song...exiting\n"); exit(1); // FIXME: handle missing song somewhere else } Sound_load(path); Sound_play(); free(path); }
void updateSettingsCache(void) { /* cache lua settings that don't change during play */ gSettingsCache.use_stencil = getSettingi("use_stencil"); gSettingsCache.show_scores = getSettingi("show_scores"); gSettingsCache.show_ai_status = getSettingi("show_ai_status"); gSettingsCache.ai_level = getSettingi("ai_level"); gSettingsCache.show_fps = getSettingi("show_fps"); gSettingsCache.show_console = getSettingi("show_console"); gSettingsCache.softwareRendering = getSettingi("softwareRendering"); gSettingsCache.line_spacing = getSettingi("line_spacing"); gSettingsCache.alpha_trails = getSettingi("alpha_trails"); gSettingsCache.antialias_lines = getSettingi("antialias_lines"); gSettingsCache.turn_cycle = getSettingi("turn_cycle"); gSettingsCache.light_cycles = getSettingi("light_cycles"); gSettingsCache.lod = getSettingi("lod"); gSettingsCache.fov = getSettingf("fov"); gSettingsCache.show_floor_texture = getVideoSettingi("show_floor_texture"); gSettingsCache.show_skybox = getVideoSettingi("show_skybox"); gSettingsCache.show_wall = getVideoSettingi("show_wall"); gSettingsCache.stretch_textures = getVideoSettingi("stretch_textures"); gSettingsCache.show_decals = getVideoSettingi("show_decals"); gSettingsCache.show_impact = getSettingi("show_impact"); gSettingsCache.show_glow = getSettingi("show_glow"); gSettingsCache.show_recognizer = getSettingi("show_recognizer"); gSettingsCache.fast_finish = getSettingi("fast_finish"); gSettingsCache.fov = getSettingf("fov"); gSettingsCache.znear = getSettingf("znear"); gSettingsCache.camType = getSettingi("camType"); gSettingsCache.playEffects = getSettingi("playEffects"); gSettingsCache.playMusic = getSettingi("playMusic"); gSettingsCache.map_ratio_w = getSettingf("map_ratio_w"); gSettingsCache.map_ratio_h = getSettingf("map_ratio_h"); scripting_GetGlobal("clear_color", NULL); scripting_GetFloatArrayResult(gSettingsCache.clear_color, 4); }
int isSetting(const char *name) { scripting_GetGlobal("settings", name, NULL); return ! scripting_IsNilResult(); }
void drawMenu(Visual *d) { /* draw Menu pCurrent */ int i; int x, y, size, lineheight; int hsize, vsize; int max_label = 0; int max_data = 0; int nEntries; char pMenuName[200]; int iActiveItem; rasonly(d); #define MENU_TEXT_START_X 0.08 #define MENU_TEXT_START_Y 0.40 #define MENU_WIDTH 0.80 #define MENU_HEIGHT 0.40 #define MENU_TEXT_LINEHEIGHT 1.5 x = (int) (d->vp_w * MENU_TEXT_START_X); y = (int) (d->vp_h * MENU_TEXT_START_Y); /* obtain menu name */ scripting_Run("return Menu.current"); scripting_CopyStringResult(pMenuName, 200); /* obtain some information about the active menu */ scripting_RunFormat("return table.getn( Menu.%s.items )", pMenuName); scripting_GetIntegerResult(&nEntries); /* new stuff: calculate menu dimensions */ for(i = 0; i < nEntries; i++) { int len_label = 0; int len_data = 0; scripting_RunFormat("return string.len( Menu[Menu.%s.items[%d]].caption )", pMenuName, i + 1); scripting_GetIntegerResult(&len_label); len_label += 2; /* add ': ' */ scripting_RunFormat("return GetMenuValueWidth( Menu.%s.items[%d] )", pMenuName, i + 1); scripting_GetIntegerResult(&len_data); if(len_label > max_label) max_label = len_label; if(len_data > max_data) max_data = len_data; } /* adjust size so menu fits into MENU_WIDTH/HEIGHT */ hsize = (int) ((float)d->vp_w * MENU_WIDTH / (float) (max_label + max_data)); vsize = (int) ((float)d->vp_h * MENU_HEIGHT / ( (float)nEntries * MENU_TEXT_LINEHEIGHT)); size = (hsize < vsize) ? hsize : vsize; lineheight = (int)( (float) size * MENU_TEXT_LINEHEIGHT); /* printf("%d %d %d %d %d\n", x, y, size, maxw, pCurrent->nEntries); */ /* draw the entries */ scripting_Run("return Menu.active"); scripting_GetIntegerResult(&iActiveItem); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); for(i = 0; i < nEntries; i++) { if(i == iActiveItem - 1) { float color[4]; float active1[4]; float active2[4]; int j; float t; int time = nebu_Time_GetElapsed() & 4095; t = sinf( time * PI / 2048.0 ) / 2.0f + 0.5f; scripting_GetGlobal("menu_item_active1", NULL); scripting_GetFloatArrayResult(active1, 4); scripting_GetGlobal("menu_item_active2", NULL); scripting_GetFloatArrayResult(active2, 4); for(j = 0; j < 4; j++) { color[j] = t * active1[j] + (1 - t) * active2[j]; } glColor4fv(color); /* fprintf(stderr, "%.2f: %.2f %.2f %.2f\n", t, color[0], color[1], color[2]); */ } else { float color[4]; scripting_GetGlobal("menu_item", NULL); scripting_GetFloatArrayResult(color, 4); glColor4fv(color); } { char line_label[100]; char line_data[100]; scripting_RunFormat("return " "GetMenuValueString( Menu.%s.items[%d] )", pMenuName, i + 1); scripting_CopyStringResult(line_data, sizeof(line_data)); if(line_data[0] != 0) scripting_RunFormat("return " "Menu[Menu.%s.items[%d]].caption .. ': '", pMenuName, i + 1); else scripting_RunFormat("return " "Menu[Menu.%s.items[%d]].caption", pMenuName, i + 1); scripting_CopyStringResult(line_label, sizeof(line_label)); drawText(guiFtx, (float)x, (float)y, (float)size, line_label); drawText(guiFtx, (float)x + max_label * size, (float)y, (float)size, line_data); } /* if(i == pCurrent->iHighlight) drawSoftwareHighlight(x, y, size, ((Menu*)*(pCurrent->pEntries + i))->display.szCaption); */ y -= lineheight; } glDisable(GL_BLEND); }
game_level* game_CreateLevel(void) { int i; game_level* l; l = malloc( sizeof(game_level) ); scripting_GetGlobal("level", NULL); // get scalability flag scripting_GetValue("scalable"); scripting_GetIntegerResult(& l->scalable); // get number of spawnpoints scripting_GetValue("spawn"); scripting_GetArraySize(& l->nSpawnPoints); // copy spawnpoints into vec2's l->spawnPoints = malloc(l->nSpawnPoints * sizeof(game_spawnpoint)); // fixme, use scalability for(i = 0; i < l->nSpawnPoints; i++) { scripting_GetArrayIndex(i + 1); scripting_GetValue("x"); scripting_GetFloatResult(& l->spawnPoints[i].v.v[0]); scripting_GetValue("y"); scripting_GetFloatResult(& l->spawnPoints[i].v.v[1]); scripting_GetValue("dir"); scripting_GetIntegerResult(& l->spawnPoints[i].dir); scripting_Pop(); // index i } scripting_Pop(); // spawn // get number of boundary segments scripting_GetValue("boundary"); scripting_GetArraySize(& l->nBoundaries); // copy boundaries into segments l->boundaries = malloc(l->nBoundaries * sizeof(segment2)); for(i = 0; i < l->nBoundaries; i++) { scripting_GetArrayIndex(i + 1); scripting_GetArrayIndex(1); scripting_GetValue("x"); scripting_GetFloatResult(& l->boundaries[i].vStart.v[0]); scripting_GetValue("y"); scripting_GetFloatResult(& l->boundaries[i].vStart.v[1]); scripting_Pop(); // index 0 scripting_GetArrayIndex(2); { vec2 v; scripting_GetValue("x"); scripting_GetFloatResult(& v.v[0]); scripting_GetValue("y"); scripting_GetFloatResult(& v.v[1]); vec2_Sub(& l->boundaries[i].vDirection, &v, &l->boundaries[i].vStart); } scripting_Pop(); // index 1 scripting_Pop(); // index i } scripting_Pop(); // boundary scripting_Pop(); // level computeBoundingBox(l); return l; }