diff --git a/JTMM.g3a b/JTMM.g3a index ddf132e..c543f4e 100644 Binary files a/JTMM.g3a and b/JTMM.g3a differ diff --git a/include/draw.h b/include/draw.h index 19f85dc..1f6ce7b 100644 --- a/include/draw.h +++ b/include/draw.h @@ -1,3 +1,6 @@ +#include + +void draw_anim(int x, int y, image_t *image, int step); void draw_player(int x, int y); void draw_level(char level[], unsigned int step, char polarity, int *start_x, int *start_y, int tp_positions[]); diff --git a/src/draw.c b/src/draw.c index 2966a64..48e3502 100644 --- a/src/draw.c +++ b/src/draw.c @@ -7,7 +7,7 @@ #define DRAW_OFFSET_Y -24 #define DRAW_OFFSET_X -27 -extern image_t img_player; //player texture, 12x12 +extern image_t img_player; //player texture, 12x12 (NOT ANIMATED) extern image_t img_solid_0; //solid texture, 16x16 extern image_t img_solid_1; //solid texture, 16x16 extern image_t img_spike; //spike texture, 16x16 @@ -20,10 +20,15 @@ extern image_t img_red_dot; //off red bloc texture, 16x16 extern image_t img_exit; //exit texture, 16x16 extern image_t img_water; //water texture, 16x16 extern image_t img_semi_solid; //semi solid texture, 16x16 -//animated textures (elevator) extern image_t img_teleporter_0; //teleporter 0 texture, 16x16 extern image_t img_teleporter_1; //teleporter 1 texture, 16x16 -extern image_t img_elevator; +extern image_t img_elevator; //elevator texture, 16x16 + +void draw_anim(int x, int y, image_t *image, int step) +{ + dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, image, + ((step / 2) % (image->width / 16)) * 16, 0, 16, 16, DIMAGE_NONE); +} void draw_player(int x, int y) { @@ -33,9 +38,6 @@ void draw_player(int x, int y) void draw_level(char level[], unsigned int step, char polarity, int *start_x, int *start_y, int tp_positions[]) { - int const img_elevator_frame_count = img_elevator.width / 16; - int const img_teleporter_0_frame_count = img_teleporter_0.width / 16; - int const img_teleporter_1_frame_count = img_teleporter_1.width / 16; dclear(BG_COLOR); unsigned int i = 0; unsigned int x = 0; @@ -45,57 +47,54 @@ int *start_y, int tp_positions[]) switch (level[i]) { case '0': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0); + draw_anim(x, y, &img_solid_0, step); break; case '1': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_1); + draw_anim(x, y, &img_solid_1, step); break; case 'r': - if (!polarity) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_red); - else dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_red_dot); + if (!polarity) draw_anim(x, y, &img_red, step); + else draw_anim(x, y, &img_red_dot, step); break; case 'b': - if (polarity) dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_blue); - else dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_blue_dot); + if (polarity) draw_anim(x, y, &img_blue, step); + else draw_anim(x, y, &img_blue_dot, step); break; case 'v': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_spike); + draw_anim(x, y, &img_spike, step); break; case '*': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_bouncer); + draw_anim(x, y, &img_bouncer, step); break; case '~': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_solid_0); - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ice); + draw_anim(x, y, &img_solid_0, step); + draw_anim(x, y, &img_ice, step); break; case '/': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_semi_solid); + draw_anim(x, y, &img_semi_solid, step); break; case '^': - dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_elevator, - ((step / 2) % img_elevator_frame_count) * 16, 0, 16, 16, DIMAGE_NONE); - break; + draw_anim(x, y, &img_elevator, step); + break; case 'S': erase_tile(x, y, level); *start_x = x + 2; *start_y = y + 4; break; case 'E': - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_exit); + draw_anim(x, y, &img_exit, step); break; case 'w': //water - dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_water); + draw_anim(x, y, &img_water, step); break; case 't': //teleporter 0 - dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_teleporter_0, - (step % img_teleporter_0_frame_count) * 16, 0, 16, 16, DIMAGE_NONE); - tp_positions[0] = x + 2; + draw_anim(x, y, &img_teleporter_0, step); + tp_positions[0] = x + 2; tp_positions[1] = y + 2; break; case 'T': //teleporter 1 - dsubimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_teleporter_1, - (step % img_teleporter_1_frame_count) * 16, 0, 16, 16, DIMAGE_NONE); - tp_positions[2] = x + 2; + draw_anim(x, y, &img_teleporter_1, step); + tp_positions[2] = x + 2; tp_positions[3] = y + 2; break; }