Exemple #1
0
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;
        }
    }
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}
Exemple #6
0
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;
}
Exemple #8
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();
}
Exemple #11
0
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);
}
Exemple #12
0
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;
}