2020-02-11 11:44:37 +01:00
|
|
|
#include <gint/display.h>
|
2020-02-19 10:41:15 +01:00
|
|
|
#include "draw.h"
|
2020-02-11 11:44:37 +01:00
|
|
|
|
2020-02-15 12:34:57 +01:00
|
|
|
#define PLAYER_SIDES 11
|
2020-02-11 11:44:37 +01:00
|
|
|
#define BG_COLOR 0
|
2020-02-13 09:12:34 +01:00
|
|
|
#define LEVEL_WIDTH 28
|
|
|
|
#define DRAW_OFFSET_Y -24
|
|
|
|
#define DRAW_OFFSET_X -27
|
2020-02-11 11:44:37 +01:00
|
|
|
|
2020-02-12 10:47:12 +01:00
|
|
|
extern image_t img_player; //player texture, 12x12
|
2020-02-18 11:48:02 +01:00
|
|
|
extern image_t img_ground; //ground texture, 16x16
|
|
|
|
extern image_t img_spike; //spike texture, 16x16
|
|
|
|
extern image_t img_ice; //ice texture, 16x8
|
|
|
|
extern image_t img_glue; //glue texture, 16x8
|
|
|
|
extern image_t img_jitem; //jump item texture, 16x16
|
2020-02-20 12:22:38 +01:00
|
|
|
extern image_t img_coin; //coin item texture, 16x16
|
2020-02-18 11:48:02 +01:00
|
|
|
//animated textures
|
2020-02-18 11:49:59 +01:00
|
|
|
extern image_t img_elevator1, img_elevator2, img_elevator3, img_elevator4;
|
|
|
|
extern image_t img_elevator5, img_elevator6, img_elevator7, img_elevator8;
|
|
|
|
extern image_t img_elevator9, img_elevator10, img_elevator11, img_elevator12;
|
|
|
|
extern image_t img_elevator13, img_elevator14, img_elevator15, img_elevator16;
|
2020-02-19 10:41:15 +01:00
|
|
|
const image_t * ani_elevator[16] = {&img_elevator1, &img_elevator2,
|
|
|
|
&img_elevator3, &img_elevator4, &img_elevator5, &img_elevator6,
|
|
|
|
&img_elevator7, &img_elevator8, &img_elevator9, &img_elevator10,
|
|
|
|
&img_elevator11, &img_elevator12, &img_elevator13, &img_elevator14,
|
|
|
|
&img_elevator15, &img_elevator16};
|
2020-02-11 11:44:37 +01:00
|
|
|
|
|
|
|
void draw_player(int old_x, int old_y, int x, int y)
|
|
|
|
{
|
|
|
|
if (old_x != x || old_y != y)
|
|
|
|
{
|
2020-02-15 12:34:57 +01:00
|
|
|
drect(old_x + DRAW_OFFSET_X, old_y + DRAW_OFFSET_Y,
|
|
|
|
(old_x + PLAYER_SIDES) + DRAW_OFFSET_X,
|
|
|
|
(old_y + PLAYER_SIDES) + DRAW_OFFSET_Y, BG_COLOR);
|
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_player);
|
2020-02-11 11:44:37 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-20 12:22:38 +01:00
|
|
|
void draw_level(char level[], char upgrades[], char erase_coin)
|
2020-02-11 11:44:37 +01:00
|
|
|
{
|
2020-02-13 09:12:34 +01:00
|
|
|
dclear(BG_COLOR);
|
2020-02-11 11:44:37 +01:00
|
|
|
unsigned int i = 0;
|
|
|
|
unsigned int x = 0;
|
|
|
|
unsigned int y = 0;
|
2020-02-18 11:48:02 +01:00
|
|
|
while (i != LEVEL_WIDTH*16)
|
2020-02-11 11:44:37 +01:00
|
|
|
{
|
|
|
|
switch (level[i])
|
|
|
|
{
|
|
|
|
case '0':
|
2020-02-15 12:34:57 +01:00
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
|
2020-02-11 11:44:37 +01:00
|
|
|
break;
|
2020-02-12 13:33:41 +01:00
|
|
|
case 'v':
|
2020-02-15 12:34:57 +01:00
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_spike);
|
2020-02-12 13:33:41 +01:00
|
|
|
break;
|
2020-02-17 15:47:02 +01:00
|
|
|
case '~':
|
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
|
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ice);
|
|
|
|
break;
|
2020-02-17 16:10:41 +01:00
|
|
|
case '#':
|
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_ground);
|
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_glue);
|
|
|
|
break;
|
2020-02-20 12:22:38 +01:00
|
|
|
case 'j':
|
|
|
|
if (upgrades[0]) erase_tile(x, y, level);
|
|
|
|
break;
|
|
|
|
case 'c':
|
|
|
|
if (erase_coin) erase_tile(x, y, level);
|
|
|
|
break;
|
2020-02-18 11:48:02 +01:00
|
|
|
}
|
|
|
|
x += 16;
|
|
|
|
if (x == 16*LEVEL_WIDTH)
|
|
|
|
{
|
|
|
|
x = 0;
|
|
|
|
y += 16;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void draw_level_anims(char level[], char upgrades[], unsigned int step)
|
|
|
|
{
|
|
|
|
unsigned int i = 0;
|
|
|
|
unsigned int x = 0;
|
|
|
|
unsigned int y = 0;
|
|
|
|
while (i != LEVEL_WIDTH*16)
|
|
|
|
{
|
|
|
|
switch (level[i])
|
|
|
|
{
|
|
|
|
case '^':
|
2020-02-18 13:12:40 +01:00
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, ani_elevator[(step/2)%16]);
|
2020-02-18 11:48:02 +01:00
|
|
|
break;
|
2020-02-13 10:43:45 +01:00
|
|
|
case 'j':
|
2020-02-18 11:48:02 +01:00
|
|
|
{
|
2020-02-18 13:12:40 +01:00
|
|
|
unsigned int buffer = (step/20)%4 - 1;
|
2020-02-18 11:48:02 +01:00
|
|
|
if (buffer == 2) buffer = 0;
|
|
|
|
drect(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, x + 15 + DRAW_OFFSET_X,
|
|
|
|
y + 15 + DRAW_OFFSET_Y, BG_COLOR);
|
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y + buffer, &img_jitem);
|
|
|
|
}
|
2020-02-20 12:22:38 +01:00
|
|
|
break;
|
|
|
|
case 'c':
|
|
|
|
{
|
|
|
|
unsigned int buffer = (step/20)%4 - 1;
|
|
|
|
if (buffer == 2) buffer = 0;
|
|
|
|
drect(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, x + 15 + DRAW_OFFSET_X,
|
|
|
|
y + 15 + DRAW_OFFSET_Y, BG_COLOR);
|
|
|
|
dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y + buffer, &img_coin);
|
|
|
|
}
|
2020-02-17 15:47:02 +01:00
|
|
|
break;
|
2020-02-11 11:44:37 +01:00
|
|
|
}
|
2020-02-15 12:34:57 +01:00
|
|
|
x += 16;
|
|
|
|
if (x == 16*LEVEL_WIDTH)
|
2020-02-11 11:44:37 +01:00
|
|
|
{
|
|
|
|
x = 0;
|
2020-02-15 12:34:57 +01:00
|
|
|
y += 16;
|
2020-02-11 11:44:37 +01:00
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
2020-02-13 10:43:45 +01:00
|
|
|
|
|
|
|
void erase_tile(int x, int y, char level[])
|
|
|
|
{
|
2020-02-15 12:34:57 +01:00
|
|
|
x = (int)(x/16);
|
|
|
|
y = (int)(y/16);
|
2020-02-13 10:43:45 +01:00
|
|
|
level[x + y * 28] = '.';
|
|
|
|
x *= 16;
|
|
|
|
y *= 16;
|
|
|
|
drect(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y,
|
|
|
|
x + 15 + DRAW_OFFSET_X,
|
|
|
|
y + 15 + DRAW_OFFSET_Y, BG_COLOR);
|
|
|
|
}
|
2020-02-13 15:59:37 +01:00
|
|
|
|
|
|
|
void draw_upgrade_message(char item)
|
|
|
|
{
|
|
|
|
switch (item)
|
|
|
|
{
|
|
|
|
case 'j':
|
|
|
|
{
|
|
|
|
extern image_t img_jitem_popup;
|
2020-02-20 12:22:38 +01:00
|
|
|
dimage(112 + DRAW_OFFSET_X, 88 + DRAW_OFFSET_Y, &img_jitem_popup);
|
2020-02-13 15:59:37 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-02-18 12:38:12 +01:00
|
|
|
|
2020-02-19 10:51:07 +01:00
|
|
|
void draw_timer(unsigned int step)
|
2020-02-18 12:38:12 +01:00
|
|
|
{
|
2020-02-19 10:51:07 +01:00
|
|
|
dprint(0, 0, C_WHITE, C_BLACK, "%u.%02u", step/60, step%60);
|
2020-02-18 12:38:12 +01:00
|
|
|
}
|