/**************************************************************
 * Returns 0 on success and -1 if not enough rooms are provided.
 * ALL_ROOMS_SIZE must be the size of allRooms array.
 * Assumes each name in allRooms array is unique.
 *************************************************************/
int makeRooms(char* allRooms[], int ALL_ROOMS_SIZE, char* directory, 
			  char* chosenRooms[], int CHOSEN_ROOMS_SIZE ) {
	if (ALL_ROOMS_SIZE < CHOSEN_ROOMS_SIZE) {
		return -1;
	}
	
	chooseRooms( allRooms, ALL_ROOMS_SIZE, chosenRooms, CHOSEN_ROOMS_SIZE );
	// chosenRooms array is now filled with unique room names
	
	// add the first line to all the files
	makeRoomFiles( chosenRooms, directory ); 
	
	// add connections to all the files
	int connections;
	int MIN_CONNECTIONS = 3;
	int MAX_CONNECTIONS = 6;
	int i;
	for ( i = 0; i < CHOSEN_ROOMS_SIZE; ++i ) {
		connections = randInRange(MIN_CONNECTIONS, MAX_CONNECTIONS);
		initRoom(i, chosenRooms, connections, directory);
	}

	// add the last line to all the files
	addRoomTypes( chosenRooms, directory ); 
	
	return 0;	
}
예제 #2
0
파일: io.c 프로젝트: Almamu/portalDS
void writeMapEditor(editorRoom_struct* er, const char* str)
{
	if(!er)return;

	FILE* f=fopen(str,"wb+");
	// if(!f)return;

	mapHeader_struct h=blankHeader;
	writeHeader(&h,f);

	room_struct r;
	lightingData_struct* ld=&r.lightingData;
	initRoom(&r, 0, 0, vect(0,0,0));

	rectangleList_struct sludgeList;
	r.rectangles=generateOptimizedRectangles(er->blockArray, &sludgeList);
	generateLightsFromEntities();
	// generateLightmaps(&r, ld);
	generateVertexLighting(&r, ld);

	h.dataPosition=ftell(f);
		u8* compressed=compressBlockArray(er->blockArray, &h.dataSize);	// decompress(compressed, er->blockArray, RLE);
		if(!compressed){return;} //TEMP : clean up first !
		NOGBA("DATASIZE %d",h.dataSize);
		fwrite(compressed,sizeof(u8),h.dataSize*2,f);
		free(compressed);

	h.rectanglesPosition=ftell(f);
		writeRectangleList(&r.rectangles, f);

	h.lightPosition=ftell(f);
		writeLightingData(ld, f);

	h.entityPosition=ftell(f);
		writeEntities(f);

	h.sludgePosition=ftell(f);
		writeRectangleList(&sludgeList, f);

	writeHeader(&h,f);

	//empty sludgelist here
	while(sludgeList.num)popRectangle(&sludgeList);

	freeRoom(&r);
	fclose(f);
}
예제 #3
0
static void initRooms() {

   Room *room;  /* actual room object */
   GList *parsedRoomList = g_hash_table_get_values(roomParsedTable);
   GList *curParsedRoom = parsedRoomList;

   /* iterate through each value in the rooms parsed table */
   while (NULL != curParsedRoom) {

      /* build the room structure and index it by name */
      room = initRoom((RoomParsed *)curParsedRoom->data);
      g_hash_table_insert(g_rooms, (char *)dstrview(room->name), room);

      curParsedRoom = curParsedRoom->next;
   }

   connectRooms();

   g_list_free(parsedRoomList);
   return;
}
예제 #4
0
/***************************************************************************
 * initGame
 * Parameter: GameData - the struct to initialize
 * Description: This function initializes the given GameData object.
 * This is used to create the rooms. This will call the function
 * generatePath to create paths between rooms.
 ***************************************************************************/
void initGame( GameData* data )
{
    char* roomNames[10];
    // insert names into array
    roomNames[0] = "Holy Ground";
    roomNames[1] = "Far Thunder";
    roomNames[2] = "Spiral";
    roomNames[3] = "Great Seal";
    roomNames[4] = "Nothingness";
    roomNames[5] = "Touchstone";
    roomNames[6] = "Twin Hills";
    roomNames[7] = "Fertile Land";
    roomNames[8] = "Melody";
    roomNames[9] = "Remnant";

    // shuffle arrays for randomization
    int n;
    n = sizeof( roomNames ) / sizeof( roomNames[0] );
    shuffle( roomNames, n );
    //init the current Room
    data->currentRoom = malloc( sizeof( Room ) );
    //create the rooms (random name)
    int i;

    for( i = 0; i < MAX_ROOMS; i++ )
    {
        data->rooms[i] = malloc( sizeof( Room ) );
        initRoom( data->rooms[i], roomNames[i] );
    }

    //setup the start and end rooms
    data->rooms[0]->type = start_room;
    data->rooms[MAX_ROOMS - 1]->type = end_room;
    //set up the game first position
    data->currentRoom = data->rooms[0];
    data->endRoom = data->rooms[MAX_ROOMS - 1];
    //make a winning path
    generatePaths( data );
    data->steps = 0;
}
예제 #5
0
파일: bf1.c 프로젝트: heypnus/xkx2001
void init()
{
  // must have this line
  initRoom();
}
예제 #6
0
//Member Functions
Renderer::Renderer(int width, int height)
			: frameCount(0),
			  splash(false),
			  paused(false)
{
	AUX_RGBImageRec* textureImage[4];
	
	score = 0;
	orbsCaptured = 0;
	orbsReleased = 0;
	w = width;
	h = height;
	initRoom();

	glEnable(GL_DEPTH_TEST | GL_POLYGON_SMOOTH);
	glEnable(GL_CULL_FACE);						//enable culling
	glCullFace(GL_BACK);						//cull back facing polys
	glShadeModel(GL_SMOOTH);					//enable smooth shading
	glClearColor(0,0,0,1);						//black background
	glClearDepth(1);							//depth buffer setup
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glDepthFunc(GL_LEQUAL);
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
	glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(75, (GLfloat)w/(GLfloat)h, 0.1, 200);

	glMatrixMode(GL_MODELVIEW);

	//init textures
	if(textured){
		glGenTextures(4, &textureID[0]);
		
		//load textures into main memory
		textureImage[0] = auxDIBImageLoad("tex/bricks.bmp");
		textureImage[1] = auxDIBImageLoad("tex/sky.bmp");
		textureImage[2] = auxDIBImageLoad("tex/grass.bmp");
		textureImage[3] = auxDIBImageLoad("tex/splash.bmp");

		for(int i = 0; i < 4; i++){
			if(textureImage[i]){
				if(textureImage[i]->data){
					glBindTexture(GL_TEXTURE_2D, textureID[i]);
					               
					glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT);
					glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT);
					glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
					glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);

					//load into texture memory
					glTexImage2D(GL_TEXTURE_2D,
									0,						//mipmap level
									GL_RGB,
									textureImage[i]->sizeX,
									textureImage[i]->sizeY,
									0,						//border pixels
									GL_RGB,					//pixel format
									GL_UNSIGNED_BYTE,
									textureImage[i]->data);
					 
					//free main memory
					free(textureImage[i]->data);
				}
				free(textureImage[i]);
			}
		}
	}

	//init lighting
	if(lighting){
		glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
		glLightModelfv(GL_LIGHT_MODEL_AMBIENT, globalAmbient);
		
		glLightfv(GL_LIGHT1, GL_POSITION, light1Position);
		glLightfv(GL_LIGHT1, GL_DIFFUSE, light1Diffuse);
		glLightfv(GL_LIGHT1, GL_SPECULAR, light1Specular);
		glLightfv(GL_LIGHT1, GL_AMBIENT, light1Ambient);
		
		glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 9.0);
		glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0.6);
		glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.05);
		glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.0);
		glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0);
		
		glEnable(GL_LIGHT1);
	}
}
예제 #7
0
int main( int argc, char *argv[] ) {
  char *font="tilesense/libtcod/fonts/courier12x12_aa_tc.png";
  int nb_char_horiz=0,nb_char_vertic=0;
  int font_flags=TCOD_FONT_TYPE_GREYSCALE|TCOD_FONT_LAYOUT_TCOD;
	TCOD_console_set_custom_font(font,font_flags,nb_char_horiz,nb_char_vertic);
	TCOD_console_init_root(80,40,"salamandeRL",false);
	
  Map room = initRoom();
  Object player = initPlayer(room);
  object_sense(player);
  
  TCOD_sys_set_fps(30);

  float elapsed = 0;
  char finished = 0;
	TCOD_key_t key = {TCODK_NONE,0};
	TCOD_console_set_foreground_color(NULL,TCOD_white);
	do {
	  key = TCOD_console_check_for_keypress(TCOD_KEY_PRESSED);
    if(key.vk != TCODK_NONE) {
      TCOD_console_clear(NULL);
    }
		
		TCOD_console_print_right(NULL,79,26,TCOD_BKGND_NONE,"last frame : %3d ms (%3d fps)", (int)(TCOD_sys_get_last_frame_length()*1000), TCOD_sys_get_fps());
		TCOD_console_print_right(NULL,79,27,TCOD_BKGND_NONE,"elapsed : %8dms %4.2fs", TCOD_sys_elapsed_milli(),TCOD_sys_elapsed_seconds());
		TCOD_console_print_left(NULL,0,27,TCOD_BKGND_NONE,"other stat stuff can go here");
		//map
    drawmap(room, player);
    TCOD_console_print_left(NULL, 
      object_position(player).x*2, object_position(player).y, 
      TCOD_BKGND_NONE,"@");
		//divider
		TCOD_console_print_left(NULL,0,28,TCOD_BKGND_NONE,
		  "--------------------------------------------------------------------------------"
		);
	  //text display
    TCOD_console_print_left(NULL,2,29,TCOD_BKGND_NONE,"we'll probably put text down here.");
		
		/* update the game screen */
		TCOD_console_flush();

    if(key.vk == TCODK_RIGHT) {
      map_turn_object(room, "@", 1);
    } else if(key.vk == TCODK_LEFT) {
      map_turn_object(room, "@", -1);
    } else if(key.vk == TCODK_CHAR) {
      switch(key.c) {
        case 'w':
          map_move_object(room, "@", (mapVec){0, -1, 0});
          break;
        case 'a':
          map_move_object(room, "@", (mapVec){-1, 0, 0});
          break;
        case 's':
          map_move_object(room, "@", (mapVec){0, 1, 0});
          break;
        case 'd':
          map_move_object(room, "@", (mapVec){1, 0, 0});
          break;
        case 'q':
          finished = 1;
          break;
        //next, handle chomping
        default:
          break;
  		}
    }

	} while (!finished && !TCOD_console_is_window_closed());
	return 0;
}