From 61280c9366bc7902a577efff61ad2a7a608346d9 Mon Sep 17 00:00:00 2001 From: xolatile Date: Thu, 23 Nov 2023 16:32:15 -0500 Subject: [PATCH] Forgot what I changed... --- chapter/chapter_5.c | 54 ++++++++++++++++++++++++++++++++++++----------------- chapter/chapter_5.h | 4 ++-- chapter/chapter_6.c | 22 ++++------------------ 3 files changed, 43 insertions(+), 37 deletions(-) diff --git a/chapter/chapter_5.c b/chapter/chapter_5.c index 1addb73..16efec6 100644 --- a/chapter/chapter_5.c +++ b/chapter/chapter_5.c @@ -173,26 +173,46 @@ world_t * game_world (number_t width, number_t height, ...) { return (world); } -procedure_t game_render_attribute (attribute_t * attribute, number_t x, number_t y) { - curses_render_string (" ", COLOUR_CYAN, EFFECT_NORMAL, x + 0, y); - curses_render_string (attribute->name, COLOUR_CYAN, EFFECT_NORMAL, x + 3, y); - - curses_render_string ("[ ", COLOUR_GREY, EFFECT_BOLD, x + 18, y); - curses_render_string (format_to_string (attribute->points->minimum, 0, 10, 4, ' '), COLOUR_RED, EFFECT_NORMAL, x + 20, y); - curses_render_string (format_to_string (attribute->points->current, 0, 10, 4, ' '), COLOUR_WHITE, EFFECT_NORMAL, x + 24, y); - curses_render_string (format_to_string (attribute->points->maximum, 0, 10, 4, ' '), COLOUR_GREEN, EFFECT_NORMAL, x + 28, y); - curses_render_string (" ]", COLOUR_GREY, EFFECT_BOLD, x + 32, y); +procedure_t game_render_attribute (number_t x, number_t y, ...) { + va_list list; + + va_start (list, y); + + for (;; ++y) { + attribute_t * attribute = (attribute_t *) va_arg (list, void *); + + if (attribute != NULL) { + curses_render_string (attribute->name, COLOUR_CYAN, EFFECT_NORMAL, x + 0, y); + curses_render_string ("[ ", COLOUR_GREY, EFFECT_BOLD, x + 18, y); + curses_render_string (format_to_string (attribute->points->minimum, 0, 10, 4, ' '), COLOUR_RED, EFFECT_NORMAL, x + 20, y); + curses_render_string (format_to_string (attribute->points->current, 0, 10, 4, ' '), COLOUR_WHITE, EFFECT_NORMAL, x + 24, y); + curses_render_string (format_to_string (attribute->points->maximum, 0, 10, 4, ' '), COLOUR_GREEN, EFFECT_NORMAL, x + 28, y); + curses_render_string (" ]", COLOUR_GREY, EFFECT_BOLD, x + 32, y); + } else break; + } + + va_end (list); } -procedure_t game_render_skill (skill_t * skill, number_t x, number_t y) { - curses_render_string (" ", COLOUR_CYAN, EFFECT_NORMAL, x + 0, y); - curses_render_string (skill->name, COLOUR_CYAN, EFFECT_NORMAL, x + 3, y); +procedure_t game_render_skill (number_t x, number_t y, ...) { + va_list list; + + va_start (list, y); - curses_render_string ("[ ", COLOUR_GREY, EFFECT_BOLD, x + 18, y); - curses_render_string (format_to_string (skill->points->minimum, 0, 10, 4, ' '), COLOUR_RED, EFFECT_NORMAL, x + 20, y); - curses_render_string (format_to_string (skill->points->current, 0, 10, 4, ' '), COLOUR_WHITE, EFFECT_NORMAL, x + 24, y); - curses_render_string (format_to_string (skill->points->maximum, 0, 10, 4, ' '), COLOUR_GREEN, EFFECT_NORMAL, x + 28, y); - curses_render_string (" ]", COLOUR_GREY, EFFECT_BOLD, x + 32, y); + for (;; ++y) { + skill_t * skill = (skill_t *) va_arg (list, void *); + + if (skill != NULL) { + curses_render_string (skill->name, COLOUR_CYAN, EFFECT_NORMAL, x + 0, y); + curses_render_string ("[ ", COLOUR_GREY, EFFECT_BOLD, x + 18, y); + curses_render_string (format_to_string (skill->points->minimum, 0, 10, 4, ' '), COLOUR_RED, EFFECT_NORMAL, x + 20, y); + curses_render_string (format_to_string (skill->points->current, 0, 10, 4, ' '), COLOUR_WHITE, EFFECT_NORMAL, x + 24, y); + curses_render_string (format_to_string (skill->points->maximum, 0, 10, 4, ' '), COLOUR_GREEN, EFFECT_NORMAL, x + 28, y); + curses_render_string (" ]", COLOUR_GREY, EFFECT_BOLD, x + 32, y); + } else break; + } + + va_end (list); } procedure_t game_render_player (player_t * player) { diff --git a/chapter/chapter_5.h b/chapter/chapter_5.h index f0a88d4..895f248 100644 --- a/chapter/chapter_5.h +++ b/chapter/chapter_5.h @@ -106,8 +106,8 @@ extern player_t * game_player (string_t name, symbol_t * symbol); extern block_t * game_block (string_t name, symbol_t * symbol, number_t collision, number_t override); extern world_t * game_world (number_t width, number_t height, ...); -extern procedure_t game_render_attribute (attribute_t * attribute, number_t x, number_t y); -extern procedure_t game_render_skill (skill_t * skill, number_t x, number_t y); +extern procedure_t game_render_attribute (number_t x, number_t y, ...); +extern procedure_t game_render_skill (number_t x, number_t y, ...); extern procedure_t game_render_player (player_t * player); extern procedure_t game_render_block (block_t * block, number_t x, number_t y); extern procedure_t game_render_world (world_t * world, number_t x, number_t y, number_t width, number_t height); diff --git a/chapter/chapter_6.c b/chapter/chapter_6.c index 3d587c6..fdc9ea4 100644 --- a/chapter/chapter_6.c +++ b/chapter/chapter_6.c @@ -80,32 +80,18 @@ procedure_t play_game (procedure_t) { terminal_show_cursor (FALSE); - number_t game_screen_offset = curses_screen_width - 40; - while (curses_active) { + number_t game_screen_offset = curses_screen_width - 40; + curses_render_background (' ', COLOUR_WHITE, EFFECT_NORMAL); game_render_world (world, 0, 0, game_screen_offset, curses_screen_height); game_render_player (player); - curses_render_string (" Attributes:", COLOUR_WHITE, EFFECT_BOLD, game_screen_offset, 0); - - game_render_attribute (strength, game_screen_offset, 1); - game_render_attribute (edurance, game_screen_offset, 2); - game_render_attribute (wisdom, game_screen_offset, 3); - game_render_attribute (agility, game_screen_offset, 4); - - curses_render_string (" Skills:", COLOUR_WHITE, EFFECT_BOLD, game_screen_offset, 5); + game_render_attribute (game_screen_offset, 1, strength, edurance, wisdom, agility, NULL); - game_render_skill (blades, game_screen_offset, 6); - game_render_skill (axes, game_screen_offset, 7); - game_render_skill (bows, game_screen_offset, 8); - game_render_skill (spears, game_screen_offset, 9); - game_render_skill (puppet_magic, game_screen_offset, 10); - game_render_skill (nature_magic, game_screen_offset, 11); - game_render_skill (rune_magic, game_screen_offset, 12); - game_render_skill (charm_magic, game_screen_offset, 13); + game_render_skill (game_screen_offset, 6, blades, axes, bows, spears, puppet_magic, nature_magic, rune_magic, charm_magic, NULL); switch (curses_character) { case SIGNAL_ARROW_UP: player->y -= 1; limit (& player->y, 0, world->height - 1); break;