diff --git a/arenaEngine.c b/arenaEngine.c index b0e0546..77fbf31 100644 --- a/arenaEngine.c +++ b/arenaEngine.c @@ -107,6 +107,7 @@ ARENA_H_TILE* createHTile(ARENA_H_TILE* prevHTile) { if (prevHTile == NULL) { tile_h = calloc(1,sizeof(ARENA_H_TILE)); //Using calloc because of resetting all memory allocated to 0 tile_h->type_id = 0; + //tile_h->type_id = random_lim(5); //tile_h->playerOnTile = NULL; tile_h->nextRow = NULL; tile_h->nextColumn = NULL; @@ -114,6 +115,7 @@ ARENA_H_TILE* createHTile(ARENA_H_TILE* prevHTile) { tile_h = calloc(1,sizeof(ARENA_H_TILE)); prevHTile->nextRow = tile_h; tile_h->type_id = 0; + //tile_h->type_id = random_lim(5); //tile_h->playerOnTile = NULL; tile_h->nextRow = NULL; tile_h->nextColumn = NULL; @@ -129,6 +131,7 @@ ARENA_W_TILE* createWTile(ARENA_H_TILE* prevHTile, ARENA_W_TILE* prevWTile) { tile_w = calloc(1,sizeof(ARENA_W_TILE)); prevHTile->nextColumn = tile_w; tile_w->type_id = 0; + //tile_w->type_id = random_lim(5); //tile_w->playerOnTile = NULL; tile_w->nextColumn = NULL; @@ -137,6 +140,7 @@ ARENA_W_TILE* createWTile(ARENA_H_TILE* prevHTile, ARENA_W_TILE* prevWTile) { tile_w = calloc(1,sizeof(ARENA_W_TILE)); prevWTile->nextColumn = tile_w; tile_w->type_id = 0; + //tile_w->type_id = random_lim(5); //tile_w->playerOnTile = NULL; tile_w->nextColumn = NULL; } @@ -144,18 +148,20 @@ ARENA_W_TILE* createWTile(ARENA_H_TILE* prevHTile, ARENA_W_TILE* prevWTile) { return NULL; } -int setTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y, int new_id) { +int setTileTypeID(ARENA_H_TILE* arena, int x, int y, int new_id) { int i; + //x=coord_x-1; + //y=coord_y-1; - if (coord_x > A_WIDTH || coord_y > A_HEIGHT) return -1; + if (x > A_WIDTH || y > A_HEIGHT || x < 0 || y < 0) return -1; - if (coord_y == 0) { + if (y == 0) { ARENA_H_TILE* tile_h = NULL; tile_h = arena; - if (coord_x != 0) { - for (i=0;inextRow; + if (x != 0) { + for (i=0;inextRow; } } @@ -167,15 +173,15 @@ int setTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y, int new_id) { ARENA_H_TILE* tile_h = NULL; tile_h = arena; - if (coord_x != 0) { - for (i=0;inextRow; } } tile_w = tile_h->nextColumn; - if (coord_y != 0) { - for (i=0;inextColumn; } } @@ -196,7 +202,7 @@ ARENA_H_TILE* genNewArena(int size_h, int size_w) { /* * Generate flatgrass arena */ - for(i=0;i=3;i++) { - for (j=-3;j>=3;j++) { - if (random_lim(101) < 50) { + for (i=-2;i<=1;i++) { + for (j=-1;j<=3;j++) { + if (random_lim(101) < 65) { if ((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) { - if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, ROCK)!=0) addLogCritical("Rock failed to add on arena."); + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, ROCK)!=0) addLogCritical("Rock failed to add on arena."); else z++; + } + } + } + } + } + + /* + * Generate some tree area on grass + */ + for (z=1; z <= A_WIDTH * A_HEIGHT * TREE_GEN_RATE/100; z++) { + rand_x = random_lim(A_WIDTH+1)-1; + rand_y = random_lim(A_HEIGHT+1)-1; + + for (i=-2;i<=2;i++) { + for (j=-2;j<=2;j++) { + if (random_lim(101) < 65) { + if (((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) && getTileTypeID(arenaOrigin, rand_x+i, rand_y+j) == GRASS) { + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, TREE)!=0) addLogCritical("Tree failed to add on arena."); else z++; + } + } + } + } + } + + /* + * Generate some gold area on rock + */ + for (z=1; z <= A_WIDTH * A_HEIGHT * GOLD_GEN_RATE/100; z++) { + rand_x = random_lim(A_WIDTH+1)-1; + rand_y = random_lim(A_HEIGHT+1)-1; + + if (((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) && getTileTypeID(arenaOrigin, rand_x+i, rand_y+j) == ROCK) { + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, GOLD)!=0) addLogCritical("Tree failed to add on arena."); else z++; + } + } + + /* + * Generate some water area on grass + */ + for (z=1; z <= A_WIDTH * A_HEIGHT * WATER_GEN_RATE/100; z++) { + rand_x = random_lim(A_WIDTH+1)-1; + rand_y = random_lim(A_HEIGHT+1)-1; + + for (i=-3;i<=3;i++) { + for (j=-3;j<=3;j++) { + if (i >= -1 && j >= -1 && i <= 1 && j <= 1) { + if ((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) { + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, WATER)!=0) addLogCritical("Tree failed to add on arena."); else z++; + } + } else if (i < -1 && j < -1 && i > 1 && j > 1) { + if (random_lim(101) < 60) { + if ((rand_x + i >= 0 && rand_x + i <= A_WIDTH) || (rand_y + i <= 0 && rand_y + i <= A_HEIGHT)) { + if(setTileTypeID(arenaOrigin, rand_x+i, rand_y+j, WATER)!=0) addLogCritical("Tree failed to add on arena."); else z++; + } } } } @@ -270,8 +330,10 @@ void deleteArena(ARENA_H_TILE* arena) { int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y) { int type_id = -1; int i; + //coord_x=x-1; + //coord_y=y-1; - if (coord_x > A_WIDTH || coord_y > A_HEIGHT) return -1; + if (coord_x > A_WIDTH || coord_y > A_HEIGHT || coord_x < 0 || coord_y < 0) return -1; if (coord_y == 0) { ARENA_H_TILE* tile_h = NULL; @@ -279,7 +341,7 @@ int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y) { tile_h = arena; if (coord_x != 0) { for (i=0;inextRow; + tile_h = tile_h->nextRow; } } @@ -308,8 +370,7 @@ int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y) { return type_id; } -SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id) { - SDL_Surface *t_surface = NULL; +int isGroundTile(TILE *t_list, int id) { TILE *tmp_tile = NULL; int i=0; @@ -319,9 +380,20 @@ SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id) { i++; } - t_surface = tmp_tile->texture; + return tmp_tile->isGround; +} - return t_surface; +SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id) { + TILE *tmp_tile = NULL; + int i=0; + + tmp_tile = t_list; + while (inextTile; + i++; + } + + return tmp_tile->texture; } int isPlayerAdjacent(PLAYER* p1, PLAYER* p2) { @@ -332,8 +404,12 @@ int isPlayerAdjacent(PLAYER* p1, PLAYER* p2) { return adjPlayer; } -int isMoveCorrect(int coord_x, int coord_y, int direction) { - if (!((coord_x <= 0 && direction == LEFT) || (coord_y <= 0 && direction == UP) || (coord_x >= A_HEIGHT && direction == RIGHT) || (coord_y >= A_WIDTH && direction == DOWN))) return 1; +int isMoveCorrect(ARENA_H_TILE* arena, TILE *t_list, int coord_x, int coord_y, int direction) { + if (!((coord_x <= 0 && direction == LEFT) || (coord_y <= 0 && direction == UP) || (coord_x >= A_HEIGHT && direction == RIGHT) || (coord_y >= A_WIDTH && direction == DOWN))) { + if (isGroundTile(t_list,getTileTypeID(arena,coord_x,coord_y))) { + return 1; + } + } return 0; } diff --git a/arenaEngine.h b/arenaEngine.h index 666f523..7d5de0a 100644 --- a/arenaEngine.h +++ b/arenaEngine.h @@ -71,9 +71,10 @@ void deleteArena(ARENA_H_TILE* arena); //Status functions int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y); +int isGroundTile(TILE *t_list, int id); SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id); int isPlayerAdjacent(PLAYER* p1, PLAYER* p2); -int isMoveCorrect(int coord_x, int coord_y, int direction); +int isMoveCorrect(ARENA_H_TILE* arena, TILE *t_list, int coord_x, int coord_y, int direction); int getRelativeDirection(SDL_Rect pos1, SDL_Rect pos2); #endif diff --git a/data/tile_tree.png b/data/tile_tree.png index eab6e46..2009133 100644 Binary files a/data/tile_tree.png and b/data/tile_tree.png differ diff --git a/main.c b/main.c index b497d21..c416d31 100644 --- a/main.c +++ b/main.c @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) { */ addLogInfo("Create SDL windows instance..."); - SDL_Window* gameWindows = SDL_CreateWindow("Arena Survival Tournament - alpha 0.2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOWS_WIDTH, WINDOWS_HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN); + SDL_Window* gameWindows = SDL_CreateWindow("Arena Survival Tournament - alpha 0.2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOWS_WIDTH, WINDOWS_HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS); addLogInfo("Creating new arena..."); ARENA_H_TILE* arena = NULL; @@ -76,7 +76,7 @@ int main(int argc, char *argv[]) { displayArena(arena, gameWindows, tile_ressources, A_HEIGHT, A_WIDTH, TILE_SIZE); - SDL_Delay(5000); + SDL_Delay(10000); deleteArena(arena); addLogInfo("Cleared arena."); diff --git a/main.h b/main.h index f03d230..2e9cdf2 100644 --- a/main.h +++ b/main.h @@ -1,8 +1,8 @@ #ifndef MAIN_H_ #define MAIN_H_ -#define A_WIDTH 30 -#define A_HEIGHT 30 +#define A_WIDTH 20 +#define A_HEIGHT 20 #define TILE_SIZE 32 #define WINDOWS_WIDTH TILE_SIZE * A_WIDTH @@ -11,8 +11,8 @@ /* * Generator tiles spawn rate (in percent) */ -#define ROCK_GEN_RATE 25 -#define TREE_GEN_RATE 35 +#define ROCK_GEN_RATE 30 +#define TREE_GEN_RATE 25 #define WATER_GEN_RATE 20 #define GOLD_GEN_RATE 10