Work in progress update...

This commit is contained in:
Ognjen Milan Robovic 2024-07-01 15:31:28 -04:00
parent fef67ce320
commit 89f33081e4

View File

@ -31,12 +31,21 @@ enum { fighting, blocking, shooting, spellcasting, evoking, trading, healing, lo
enum { warrior, mage, thief, priest, archer, alchemist, warlock, merchant, classes };
static char * point_name [points] = { "HP = ", "MP = ", "SP = ", "XP = " };
static char * attribute_name [attributes] = { "Strength : ", "Dexterity : ", "Agility : ", "Intelligence : " };
static char * skill_name [skills] = { "Fighting", "Blocking", "Shooting", "Spellcasting", "Evoking", "Trading", "Healing", "Lockpicking" };
static char * class_name [classes] = { "Warrior", "Mage", "Thief", "Priest", "Archer", "Alchemist", "Warlock", "Merchant" };
static struct {
char clip, style, colour, symbol;
} const tiles [] = {
{ 1, normal, white, ' ' },
{ 0, bold, grey, '.' },
{ 1, bold, grey, '#' }
{ 1, normal, white, ' ' },
{ 0, bold, grey, '.' },
{ 1, bold, grey, '#' },
{ 1, reverse, blue, '-' },
};
static struct {
@ -87,6 +96,7 @@ static struct termios new_terminal;
static int signal;
static int screen_width;
static int screen_height;
static int screen_side;
static char * screen;
static int level_width;
static int level_height;
@ -135,6 +145,8 @@ static void initialize_screen (void) {
screen = calloc ((unsigned long int) (12 * screen_width * screen_height + 4), sizeof (* screen));
strcpy (screen, "\033[H");
screen_side = 32;
}
static void deinitialize_screen (void) {
@ -180,8 +192,8 @@ static void synchronize_screen (void) {
default: break;
}
player.x = clamp (player.x, 0, (char) level_width);
player.y = clamp (player.y, 0, (char) level_height);
player.x = clamp (player.x, 0, (char) level_width - 1);
player.y = clamp (player.y, 0, (char) level_height - 1);
}
static void generate_level (void) {
@ -203,12 +215,10 @@ static void generate_level (void) {
}
}
for (i = 0; i < height; ++i) {
level [(i + y) * level_width + x] = 2;
level [(i + y) * level_width + x + width - 1] = 2;
level [(i + y) * level_width + x] = level [(i + y) * level_width + x + width - 1] = 2;
}
for (j = 0; j < width; ++j) {
level [y * level_width + j + x] = 2;
level [(y + height - 1) * level_width + j + x] = 2;
level [y * level_width + j + x] = level [(y + height - 1) * level_width + j + x] = 2;
}
}
@ -220,6 +230,14 @@ static void generate_level (void) {
}
}
}
for (i = 0; i < level_height; ++i) {
level [i * level_width] = level [i * level_width + level_width - 1] = 3;
}
for (j = 0; j < level_width; ++j) {
level [j] = level [(level_height - 1) * level_width + j] = 3;
}
}
static void generate_party (void) {
@ -251,7 +269,7 @@ static void generate_party (void) {
}
int main (void) {
int i, x, y;
int i, j, x, y;
srand (time (0));
@ -267,16 +285,38 @@ int main (void) {
}
}
for (y = 0; (y < screen_height) && (y + player.y < level_height - 1); ++y) {
for (x = 0; (x < screen_width) && (x + player.x < level_width - 1); ++x) {
i = (int) level [(y + player.y) * level_width + (x + player.x)];
screen_put (tiles [i].style, tiles [i].colour, tiles [i].symbol, x, y);
for (y = maximum (0, player.y - screen_height / 2); (y < player.y + screen_height / 2) && (y < level_height); ++y) {
for (x = maximum (0, player.x - screen_width / 2); (x < player.x + screen_width / 2) && (x < level_width); ++x) {
i = (int) level [y * level_width + x];
screen_put (tiles [i].style, tiles [i].colour, tiles [i].symbol, screen_width / 2 + x - player.x, screen_height / 2 + y - player.y);
}
}
screen_put (bold, cyan, '@', screen_width / 2, screen_height / 2);
screen_print (bold, grey, "Warrior", screen_width - 24, 0, 24);
//~player.weapon [i] = random (0, 3);
//~player.armour [i] = random (0, 3);
//~for (j = 0; j < points; ++j) {
//~player.point [i] [j] = random (12, 24);
//~}
//~for (j = 0; j < attributes; ++j) {
//~player.attribute [i] [j] = random (1, 4);
//~}
//~player.skill [i] = rand () % skills;
//~player.class [i] = rand () % classes;
for (i = 0; i < members; ++i) {
screen_print (bold, blue, class_name [(int) player.class [i]], screen_width - screen_side, i * (2 + 1 + attributes + 1) + 0, screen_side);
screen_print (bold, white, skill_name [(int) player.skill [i]], screen_width - screen_side, i * (2 + 1 + attributes + 1) + 1, screen_side);
//~for (j = 0; j < points; ++j) {
//~int length = strlen (point_name [player.point [i]]);
//~screen_print (bold, white, point_name [j], screen_width - screen_side, i * (2 + 1 + attributes + 1) + 2 + j, screen_side);
//~screen_print (bold, white, player.point [i], screen_width - screen_side, i * (2 + 1 + attributes) + 2 + j, screen_side);
//~}
//~for (j = 0; j < attributes; ++j) {
//~screen_print (bold, white, attribute_name [j], screen_width - 24, i * (2 + 1 + attributes + 1) + 2 + 1 + j, screen_side);
//~}
screen_print (bold, white, "--------------------------------", screen_width - screen_side, i * (2 + 1 + attributes + 1) + 2 + 1 + attributes, screen_side);
}
synchronize_screen ();
}