diff --git a/src/drawiso.c b/src/drawiso.c index fb24313..5c12be2 100644 --- a/src/drawiso.c +++ b/src/drawiso.c @@ -8,111 +8,111 @@ extern bopti_image_t img_2; extern bopti_image_t img_3; extern bopti_image_t img_3; -void draw_map_at(int map[], int posx, int posy, int width) { - int j = 0; - int x = 0; - for(int i=0; i < width; i++) { - switch(map[i]) { - case 1: - draw_iso(x,j,posx,posy,&img_1); - break; - case 2: - draw_iso(x,j,posx,posy,&img_2); - break; - case 3: - draw_from_bottom(x,j,posx,posy,&img_3,16); - break; - case 9: - draw_iso(x,j,posx,posy,&img_3); - break; - } - x++; - if(!(i%level_width) && i != 0) { j++; x = 0; } - } - dupdate(); +void draw_map_at(tile_t map[], int posx, int posy, int width) { + int j = 0; + int x = 0; + for(int i=0; i < width; i++) { + switch(map[i]) { + case 1: + draw_iso(x,j,posx,posy,&img_1); + break; + case 2: + draw_iso(x,j,posx,posy,&img_2); + break; + case 3: + draw_from_bottom(x,j,posx,posy,&img_3,16); + break; + case 9: + draw_iso(x,j,posx,posy,&img_3); + break; + } + x++; + if(!(i%level_width) && i != 0) { j++; x = 0; } + } + dupdate(); } -void draw_map_player(int map[], int indx, int indy, int taillemap) { - int j = 0; - int x = 0; +void draw_map_player(tile_t map[], int indx, int indy, int taillemap) { + int j = 0; + int x = 0; - int coomap = indx + indy*level_width; - int beginmap = coomap - player_view - level_width*player_view; + int coomap = indx + indy*level_width; + int beginmap = coomap - player_view - level_width*player_view; - int beginline = coomap - player_view * level_width - coomap%level_width; + int beginline = coomap - player_view * level_width - coomap%level_width; - if(beginmap < 0) { - beginmap = indx - player_view; - if(beginmap < 0) beginmap = 0; - } + if(beginmap < 0) { + beginmap = indx - player_view; + if(beginmap < 0) beginmap = 0; + } - if((coomap - player_view)%level_width > coomap%level_width) { - if(beginline > 0) { - beginmap = beginline; - } else { - beginmap = 0; - } - } + if((coomap - player_view)%level_width > coomap%level_width) { + if(beginline > 0) { + beginmap = beginline; + } else { + beginmap = 0; + } + } int next = indx + player_view + beginmap/level_width * level_width; int endline = beginmap+level_width-beginmap%level_width-1; - if(next > endline) next = endline; + if(next > endline) next = endline; - if(next < 0) { - next = indx + player_view; - } + if(next < 0) { + next = indx + player_view; + } - int indypro = indy + player_view; - if(indypro > taillemap/level_width-1) { - indypro = taillemap/level_width-1; - } - int endmap = next%level_width + level_width*indypro; + int indypro = indy + player_view; + if(indypro > taillemap/level_width-1) { + indypro = taillemap/level_width-1; + } + int endmap = next%level_width + level_width*indypro; - int ecart = next - beginmap; - int xcentre = 0, ycentre = 0; - - for(int i = beginmap; i <= endmap; i++) { - x++; - if(i == coomap) {xcentre = x-1; ycentre = j; break;} - if(i == beginmap + ecart + j * level_width) { - j++; - x=0; - i = beginmap + j*level_width-1; - } - } - - j=0; - x=4-xcentre; - for(int i = beginmap; i <= endmap; i++) { - int y = j + (2-ycentre); - switch(map[i]) { - case 1: - draw_iso(x,y,150,60,&img_1); - break; - case 2: - draw_iso(x,y,150,60,&img_2); - break; - case 3: - draw_from_bottom(x,y,150,60,&img_3,16); - break; - case 9: - draw_iso(x,y,150,60,&img_3); - break; - } - x++; - if(i==beginmap+ecart+j*level_width) { - j++; - x=4-xcentre; - i = beginmap + j*level_width-1; - } - } + int ecart = next - beginmap; + int xcentre = 0, ycentre = 0; + + for(int i = beginmap; i <= endmap; i++) { + x++; + if(i == coomap) {xcentre = x-1; ycentre = j; break;} + if(i == beginmap + ecart + j * level_width) { + j++; + x=0; + i = beginmap + j*level_width-1; + } + } + + j=0; + x=4-xcentre; + for(int i = beginmap; i <= endmap; i++) { + int y = j + (2-ycentre); + switch(map[i]) { + case 1: + draw_iso(x,y,150,60,&img_1); + break; + case 2: + draw_iso(x,y,150,60,&img_2); + break; + case 3: + draw_from_bottom(x,y,150,60,&img_3,16); + break; + case 9: + draw_iso(x,y,150,60,&img_3); + break; + } + x++; + if(i==beginmap+ecart+j*level_width) { + j++; + x=4-xcentre; + i = beginmap + j*level_width-1; + } + } } void draw_iso(int i, int j, int posx, int posy, bopti_image_t *image) { - dimage(posx+(-j*tile+i*tile),posy+((i*tile/2)+(j*tile/2)),image); + dimage(posx+(-j*tile+i*tile),posy+((i*tile/2)+(j*tile/2)),image); } void draw_from_bottom(int i, int j, int posx, int posy, bopti_image_t *image, int height) { - draw_iso(i,j,posx,posy-height,image); + draw_iso(i,j,posx,posy-height,image); } diff --git a/src/drawiso.h b/src/drawiso.h index 6a22df6..a695357 100644 --- a/src/drawiso.h +++ b/src/drawiso.h @@ -1,4 +1,6 @@ -void draw_map_at(int map[], int taillex, int tailley, int width); -void draw_map_player(int map[], int taillex, int tailley, int taillemap); +typedef uint8_t tile_t; + +void draw_map_at(tile_t map[], int taillex, int tailley, int width); +void draw_map_player(tile_t map[], int taillex, int tailley, int taillemap); void draw_iso(int i, int j, int posx, int posy, bopti_image_t *image); void draw_from_bottom(int i, int j, int posx, int posy, bopti_image_t *image, int height); diff --git a/src/main.c b/src/main.c index a0f9d2f..bf9eb69 100644 --- a/src/main.c +++ b/src/main.c @@ -8,37 +8,36 @@ int main(void) { dclear(C_WHITE); - int map[450] = - { 0, 0, 0, 1, 2, 0, 2, 2, 3, 0, 0, 2, 0, 1, 3, 0, 0, 0, 3, 0, 0, 3, 3, 0, 3, 2, 2, 2, 3, 0, 1, 0, 0, 2, 0, 3, 1, 2, 2, 0, 1, 1, 2, 0, 2, 2, 3, 2, 2, 1, 3, 0, 3, 1, 0, 2, 2, 1, 2, 1, 3, 3, 1, 3, 2, 2, 3, 1, 1, 1, 3, 0, 2, 2, 3, 2, 1, 1, 2, 3, 1, 3, 3, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 0, 3, 2, 2, 0, 2, 3, 0, 3, 0, 2, 2, 1, 1, 2, 2, 3, 0, 2, 2, 2, 3, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 1, 3, 2, 0, 2, 2, 2, 0, 2, 2, 3, 3, 0, 1, 1, 0, 2, 0, 1, 0, 2, 2, 2, 3, 0, 3, 1, 3, 3, 0, 3, 0, 0, 0, 3, 0, 1, 0, 0, 1, 3, 3, 1, 2, 1, 0, 1, 3, 3, 3, 0, 0, 0, 1, 3, 3, 0, 2, 1, 3, 1, 0, 2, 1, 2, 3, 0, 1, 2, 0, 1, 0, 2, 0, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 0, 1, 0, 0, 2, 0, 3, 3, 1, 2, 2, 1, 1, 1, 3, 1, 0, 0, 1, 2, 1, 0, 1, 1, 3, 1, 3, 2, 1, 0, 1, 3, 3, 2, 2, 1, 0, 1, 2, 3, 3, 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 1, 3, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 3, 3, 1, 0, 1, 0, 0, 1, 1, 3, 2, 2, 2, 0, 0, 1, 1, 0, 3, 3, 3, 2, 3, 1, 2, 1, 1, 0, 1, 1, 0, 0, 2, 0, 0, 2, 1, 1, 2, 0, 0, 3, 2, 0, 2, 3, 3, 2, 0, 3, 2, 3, 2, 0, 0, 3, 0, 2, 0, 1, 0, 3, 3, 3, 0, 1, 3, 3, 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 1, 0, 3, 1, 1, 3, 2, 0, 0, 2, 1, 0, 1, 0, 3, 0, 1, 1, 3, 3, 0, 1, 2, 2, 3, 0, 1, 1, 1, 0 }; + tile_t map[450] = { 0, 0, 0, 1, 2, 0, 2, 2, 3, 0, 0, 2, 0, 1, 3, 0, 0, 0, 3, 0, 0, 3, 3, 0, 3, 2, 2, 2, 3, 0, 1, 0, 0, 2, 0, 3, 1, 2, 2, 0, 1, 1, 2, 0, 2, 2, 3, 2, 2, 1, 3, 0, 3, 1, 0, 2, 2, 1, 2, 1, 3, 3, 1, 3, 2, 2, 3, 1, 1, 1, 3, 0, 2, 2, 3, 2, 1, 1, 2, 3, 1, 3, 3, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 0, 1, 0, 3, 2, 2, 0, 2, 3, 0, 3, 0, 2, 2, 1, 1, 2, 2, 3, 0, 2, 2, 2, 3, 1, 3, 2, 1, 1, 1, 3, 1, 2, 2, 1, 3, 2, 0, 2, 2, 2, 0, 2, 2, 3, 3, 0, 1, 1, 0, 2, 0, 1, 0, 2, 2, 2, 3, 0, 3, 1, 3, 3, 0, 3, 0, 0, 0, 3, 0, 1, 0, 0, 1, 3, 3, 1, 2, 1, 0, 1, 3, 3, 3, 0, 0, 0, 1, 3, 3, 0, 2, 1, 3, 1, 0, 2, 1, 2, 3, 0, 1, 2, 0, 1, 0, 2, 0, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 0, 1, 0, 0, 2, 0, 3, 3, 1, 2, 2, 1, 1, 1, 3, 1, 0, 0, 1, 2, 1, 0, 1, 1, 3, 1, 3, 2, 1, 0, 1, 3, 3, 2, 2, 1, 0, 1, 2, 3, 3, 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 1, 3, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 3, 3, 3, 3, 2, 1, 1, 1, 1, 3, 3, 1, 0, 1, 0, 0, 1, 1, 3, 2, 2, 2, 0, 0, 1, 1, 0, 3, 3, 3, 2, 3, 1, 2, 1, 1, 0, 1, 1, 0, 0, 2, 0, 0, 2, 1, 1, 2, 0, 0, 3, 2, 0, 2, 3, 3, 2, 0, 3, 2, 3, 2, 0, 0, 3, 0, 2, 0, 1, 0, 3, 3, 3, 0, 1, 3, 3, 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 1, 0, 3, 1, 1, 3, 2, 0, 0, 2, 1, 0, 1, 0, 3, 0, 1, 1, 3, 3, 0, 1, 2, 2, 3, 0, 1, 1, 1, 0 }; - int x = 5; - int y = 2; - - int buffer = 0; - int nbtiles = 400; - while(1) + int x = 5; + int y = 2; + + int buffer = 0; + int nbtiles = 400; + while(1) { - dclear(C_WHITE); - //draw_map_at(map,80,30,50); - draw_map_player(map,x,y,nbtiles); - draw_player(3,1); - dprint(1,1,C_BLACK,"(%d;%d)",x,y); - dprint(1,30,C_BLACK,"%d",map[x+y*level_width]); - dupdate(); + dclear(C_WHITE); + //draw_map_at(map,80,30,50); + draw_map_player(map,x,y,nbtiles); + draw_player(3,1); + dprint(1,1,C_BLACK,"(%d;%d)",x,y); + dprint(1,30,C_BLACK,"%d",map[x+y*level_width]); + dupdate(); pollevent(); - if(keydown(KEY_EXIT)) + if(keydown(KEY_EXIT)) { break; } if(keydown(KEY_RIGHT) && x+1 < level_width && !buffer) x+=1; - if(keydown(KEY_LEFT) && x > 0 && !buffer) x-=1; - if(keydown(KEY_UP) && y > 0 && !buffer) y-=1; - if(keydown(KEY_DOWN) && y+1 < nbtiles/level_width && !buffer) y+=1; - if(keydown_any(KEY_RIGHT,KEY_LEFT,KEY_UP,KEY_DOWN)) { - buffer = 1; - } else { - buffer = 0; - } + if(keydown(KEY_LEFT) && x > 0 && !buffer) x-=1; + if(keydown(KEY_UP) && y > 0 && !buffer) y-=1; + if(keydown(KEY_DOWN) && y+1 < nbtiles/level_width && !buffer) y+=1; + if(keydown_any(KEY_RIGHT,KEY_LEFT,KEY_UP,KEY_DOWN)) { + buffer = 1; + } else { + buffer = 0; + } } - return 0; + return 0; } diff --git a/src/player.c b/src/player.c index fdcd6b5..c722aee 100644 --- a/src/player.c +++ b/src/player.c @@ -6,5 +6,5 @@ extern bopti_image_t img_player; void draw_player(int posx, int posy) { - draw_iso(posx,posy,150,60,&img_player); + draw_iso(posx,posy,150,60,&img_player); }