|
|
@@ -106,7 +106,6 @@ generator_t * game_generator (generate_t function) { |
|
|
|
attribute_t * game_attribute (string_t name, bundle_t * points, ...) { |
|
|
|
attribute_t * attribute; |
|
|
|
va_list list; |
|
|
|
number_t action; |
|
|
|
|
|
|
|
attribute = memorize ((number_t) sizeof (* attribute)); |
|
|
|
|
|
|
@@ -117,7 +116,7 @@ attribute_t * game_attribute (string_t name, bundle_t * points, ...) { |
|
|
|
va_start (list, points); |
|
|
|
|
|
|
|
for (;;) { |
|
|
|
action = (number_t) va_arg (list, int); |
|
|
|
number_t action = (number_t) va_arg (list, int); |
|
|
|
|
|
|
|
if (action > 0) { |
|
|
|
attribute->positive_count += 1; |
|
|
@@ -138,7 +137,6 @@ attribute_t * game_attribute (string_t name, bundle_t * points, ...) { |
|
|
|
skill_t * game_skill (string_t name, bundle_t * points, ...) { |
|
|
|
skill_t * skill; |
|
|
|
va_list list; |
|
|
|
number_t action; |
|
|
|
|
|
|
|
skill = memorize ((number_t) sizeof (* skill)); |
|
|
|
|
|
|
@@ -149,7 +147,7 @@ skill_t * game_skill (string_t name, bundle_t * points, ...) { |
|
|
|
va_start (list, points); |
|
|
|
|
|
|
|
for (;;) { |
|
|
|
action = (number_t) va_arg (list, int); |
|
|
|
number_t action = (number_t) va_arg (list, int); |
|
|
|
|
|
|
|
if (action > 0) { |
|
|
|
skill->positive_count += 1; |
|
|
@@ -228,45 +226,6 @@ world_t * game_world (number_t width, number_t height, ...) { |
|
|
|
return (world); |
|
|
|
} |
|
|
|
|
|
|
|
menu_t * game_menu (string_t text, /*number_t width, number_t height, number_t x, number_t y, number_t reorient, number_t override, */...) { |
|
|
|
menu_t * menu; |
|
|
|
va_list list; |
|
|
|
menu_t * item; |
|
|
|
|
|
|
|
menu = memorize ((number_t) sizeof (* menu)); |
|
|
|
|
|
|
|
string_copy ((menu->text = memorize (string_length (text) + 1)), text); |
|
|
|
|
|
|
|
menu->scroll = 0; |
|
|
|
menu->item_count = 0; |
|
|
|
menu->items = NULL; |
|
|
|
|
|
|
|
//~menu->width = width; |
|
|
|
//~menu->height = height; |
|
|
|
//~menu->x = x; |
|
|
|
//~menu->y = y; |
|
|
|
//~menu->reorient = reorient; |
|
|
|
//~menu->override = override; |
|
|
|
|
|
|
|
//~va_start (list, override); |
|
|
|
va_start (list, text); |
|
|
|
|
|
|
|
for (;;) { |
|
|
|
item = (menu_t *) va_arg (list, void *); |
|
|
|
|
|
|
|
if (item != NULL) { |
|
|
|
menu->item_count += 1; |
|
|
|
//~menu->items = memorize ((number_t) sizeof (item)); |
|
|
|
menu->items = memorize ((number_t) sizeof (* menu->items)); |
|
|
|
menu->items [menu->item_count - 1] = item; |
|
|
|
} else break; |
|
|
|
} |
|
|
|
|
|
|
|
va_end (list); |
|
|
|
|
|
|
|
return (menu); |
|
|
|
} |
|
|
|
|
|
|
|
procedure_t game_render_attribute (attribute_t * attribute, number_t x, number_t y) { |
|
|
|
curses_render_string (attribute->name, COLOUR_CYAN, EFFECT_NORMAL, x, y); |
|
|
|
|
|
|
@@ -305,31 +264,6 @@ procedure_t game_render_world (world_t * world, number_t x, number_t y, number_t |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
procedure_t game_render_menu (menu_t * menu, number_t x, number_t y) { |
|
|
|
number_t item; |
|
|
|
|
|
|
|
curses_render_string (menu->text, 1, 1, x, y); |
|
|
|
|
|
|
|
y += 1; |
|
|
|
|
|
|
|
if (menu->item_count == 0) { |
|
|
|
return; |
|
|
|
} else { |
|
|
|
game_render_menu (menu->items [0], x, y); |
|
|
|
//~for (item = 0; item != menu->item_count - 1; ++item) { |
|
|
|
//~game_render_menu (menu->items [item], x, y + item); |
|
|
|
//~} |
|
|
|
} |
|
|
|
|
|
|
|
//~if (menu->item_count == 0) { |
|
|
|
//~curses_render_string (menu->text, 1, 1, x, y); |
|
|
|
//~} else { |
|
|
|
//~for (item = 0; item != menu->item_count; ++item) { |
|
|
|
//~game_render_menu (menu->items [item], x, y + item); |
|
|
|
//~} |
|
|
|
//~} |
|
|
|
} |
|
|
|
|
|
|
|
procedure_t play_game (procedure_t) { |
|
|
|
generator_t * full_fill = game_generator (generate_full_fill_function); |
|
|
|
generator_t * rectangle_fill = game_generator (generate_rectangle_fill_function); |
|
|
@@ -360,49 +294,33 @@ procedure_t play_game (procedure_t) { |
|
|
|
rectangle_line, 5, 9, 2, 4, stone_wall, |
|
|
|
0); |
|
|
|
|
|
|
|
//~menu_t * main_menu = game_menu ("Main Menu", 40, 20, 50, 10, FALSE, FALSE, GAME_MENU_ITEM_BUTTON, |
|
|
|
//~GAME_MENU_ITEM_BUTTON, |
|
|
|
//~GAME_MENU_ITEM_BUTTON, |
|
|
|
//~0); |
|
|
|
|
|
|
|
menu_t * menu_play = game_menu ("> Play", NULL); |
|
|
|
menu_t * menu_options = game_menu ("> Options", NULL); |
|
|
|
menu_t * menu_exit = game_menu ("> Exit", NULL); |
|
|
|
|
|
|
|
menu_t * menu_main = game_menu ("Main Menu", menu_play, |
|
|
|
menu_options, |
|
|
|
menu_exit, |
|
|
|
NULL); |
|
|
|
|
|
|
|
curses_configure (); |
|
|
|
|
|
|
|
while (curses_active) { |
|
|
|
curses_render_background (' ', COLOUR_WHITE, EFFECT_NORMAL); |
|
|
|
|
|
|
|
curses_render_string ("Attributes:", COLOUR_WHITE, EFFECT_BOLD, 0, 0); |
|
|
|
curses_render_string ("Attributes:", COLOUR_WHITE, EFFECT_BOLD, 80, 0); |
|
|
|
|
|
|
|
game_render_attribute (strength, 2, 1); |
|
|
|
game_render_attribute (edurance, 2, 2); |
|
|
|
game_render_attribute (wisdom, 2, 3); |
|
|
|
game_render_attribute (agility, 2, 4); |
|
|
|
game_render_attribute (strength, 82, 1); |
|
|
|
game_render_attribute (edurance, 82, 2); |
|
|
|
game_render_attribute (wisdom, 82, 3); |
|
|
|
game_render_attribute (agility, 82, 4); |
|
|
|
|
|
|
|
curses_render_string ("Skills:", COLOUR_WHITE, EFFECT_BOLD, 0, 5); |
|
|
|
curses_render_string ("Skills:", COLOUR_WHITE, EFFECT_BOLD, 80, 5); |
|
|
|
|
|
|
|
game_render_skill (blades, 2, 6); |
|
|
|
game_render_skill (axes, 2, 7); |
|
|
|
game_render_skill (bows, 2, 8); |
|
|
|
game_render_skill (spears, 2, 9); |
|
|
|
game_render_skill (puppet_magic, 2, 10); |
|
|
|
game_render_skill (nature_magic, 2, 11); |
|
|
|
game_render_skill (rune_magic, 2, 12); |
|
|
|
game_render_skill (charm_magic, 2, 13); |
|
|
|
game_render_skill (blades, 82, 6); |
|
|
|
game_render_skill (axes, 82, 7); |
|
|
|
game_render_skill (bows, 82, 8); |
|
|
|
game_render_skill (spears, 82, 9); |
|
|
|
game_render_skill (puppet_magic, 82, 10); |
|
|
|
game_render_skill (nature_magic, 82, 11); |
|
|
|
game_render_skill (rune_magic, 82, 12); |
|
|
|
game_render_skill (charm_magic, 82, 13); |
|
|
|
|
|
|
|
game_render_world (world, 40, 0, curses_screen_width, curses_screen_height); |
|
|
|
game_render_world (world, 0, 0, curses_screen_width, curses_screen_height); |
|
|
|
|
|
|
|
game_render_player (player); |
|
|
|
|
|
|
|
game_render_menu (menu_main, 120, 0); |
|
|
|
|
|
|
|
switch (curses_character) { |
|
|
|
case SIGNAL_ARROW_UP: player->y -= 1; limit (& player->y, 0, world->height - 1); break; |
|
|
|
case SIGNAL_ARROW_DOWN: player->y += 1; limit (& player->y, 0, world->height - 1); break; |
|
|
|