X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/copy_structured?a=blobdiff_plain;f=src%2Fmain.c;h=ce01ee52be2797723c8c2fd9a5a2d7620f4e3ed0;hb=0f12557b88c73f8629ffafc38dc59ab5bd15e687;hp=3d6c0d38f5054db6dcac826b2c871a4ac02841cc;hpb=e4f2a14c7385d99d49cf831cd3fd92234caf71b5;p=plomrogue diff --git a/src/main.c b/src/main.c index 3d6c0d3..ce01ee5 100644 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include "windows.h" #include "draw_wins.h" #include "keybindings.h" @@ -30,7 +32,7 @@ int main (int argc, char *argv[]) { default: exit(EXIT_FAILURE); } } - // Initialize log, player, monsters and items. + // Initialize log, player, monster/item definitions and monsters/items. world.log = calloc(1, sizeof(char)); update_log (&world, " "); struct Player player; @@ -38,37 +40,46 @@ int main (int argc, char *argv[]) { world.player = &player; world.monster = 0; world.item = 0; - struct MonsterDef monster_def_A; - monster_def_A.map_obj_def.id = 1; - monster_def_A.map_obj_def.mapchar = 'a'; - monster_def_A.map_obj_def.desc = "ANT"; - monster_def_A.hitpoints_start = 1; - struct MonsterDef monster_def_B; - monster_def_B.map_obj_def.id = 2; - monster_def_B.map_obj_def.mapchar = 'z'; - monster_def_B.map_obj_def.desc = "ZOMBIE"; - monster_def_B.hitpoints_start = 3; - struct MonsterDef monster_def_C; - monster_def_C.map_obj_def.id = 3; - monster_def_C.map_obj_def.mapchar = 'S'; - monster_def_C.map_obj_def.desc = "SHOGGOTH"; - monster_def_C.hitpoints_start = 9; - world.monster_def = &monster_def_A; - monster_def_A.map_obj_def.next = (struct MapObjDef *) &monster_def_B; - monster_def_B.map_obj_def.next = (struct MapObjDef *) &monster_def_C; - monster_def_C.map_obj_def.next = NULL; - struct ItemDef item_def_A; - item_def_A.map_obj_def.id = 4; - item_def_A.map_obj_def.mapchar = '#'; - struct ItemDef item_def_B; - item_def_B.map_obj_def.id = 5; - item_def_B.map_obj_def.mapchar = '%'; - world.item_def = &item_def_A; - item_def_A.map_obj_def.next = (struct MapObjDef *) &item_def_B; - item_def_B.map_obj_def.next = NULL; + world.item_def = 0; + world.monster_def = 0; + FILE * file = fopen("defs", "r"); + uint16_t linemax; + textfile_sizes (file, &linemax, NULL); + char m_or_i; + struct MapObjDef mod; + struct ItemDef id; + struct MonsterDef md; + struct ItemDef * * p_p_id = &world.item_def; + struct MonsterDef * * p_p_md = &world.monster_def; + char * defline = malloc(linemax); + char * line_p; + while (fgets (defline, linemax, file)) { + mod.next = 0; + mod.id = atoi(defline); + line_p = strchr(defline, ' ') + 1; + m_or_i = * line_p; + mod.mapchar = * (line_p + 2); + if ('i' == m_or_i) + line_p = line_p + 5; + else { + md.hitpoints_start = atoi (line_p + 4); + line_p = strchr (line_p + 4, ' ') + 1; } + mod.desc = calloc (strlen (line_p), sizeof(char)); + memcpy (mod.desc, line_p, strlen(line_p) - 1); + if ('i' == m_or_i) { + id.map_obj_def = mod; + * p_p_id = malloc (sizeof (struct ItemDef)); + * * p_p_id = id; + p_p_id = (struct ItemDef * *) * p_p_id; } + else { + md.map_obj_def = mod; + * p_p_md = malloc (sizeof (struct MonsterDef)); + * * p_p_md = md; + p_p_md = (struct MonsterDef * *) * p_p_md; } } + free(defline); + fclose(file); // For interactive mode, try to load world state from savefile. - FILE * file; if (1 == world.interactive && 0 == access("savefile", F_OK)) { file = fopen("savefile", "r"); world.seed = read_uint32_bigendian(file); @@ -100,15 +111,15 @@ int main (int argc, char *argv[]) { world.map = ↦ if (1 == world.turn) { player.pos = find_passable_pos(&map); - void * foo = build_map_objects (&world, &world.monster, 1, 1 + rrand(0,0) % 27, sizeof(struct Monster), + void * foo = build_map_objects (&world, &world.monster, 0, 1 + rrand(0,0) % 27, sizeof(struct Monster), build_map_objects_monsterdata); - foo = build_map_objects (&world, foo, 2, 1 + rrand(0,0) % 9, sizeof(struct Monster), + foo = build_map_objects (&world, foo, 1, 1 + rrand(0,0) % 9, sizeof(struct Monster), build_map_objects_monsterdata); - build_map_objects (&world, foo, 3, 1 + rrand(0,0) % 3, sizeof(struct Monster), + build_map_objects (&world, foo, 2, 1 + rrand(0,0) % 3, sizeof(struct Monster), build_map_objects_monsterdata); - foo = build_map_objects (&world, &world.item, 4, 1 + rrand(0,0) % 3, sizeof(struct Item), + foo = build_map_objects (&world, &world.item, 3, 1 + rrand(0,0) % 3, sizeof(struct Item), build_map_objects_itemdata); - build_map_objects (&world, foo, 5, 1 + rrand(0,0) % 3, sizeof(struct Item), build_map_objects_itemdata); } + build_map_objects (&world, foo, 4, 1 + rrand(0,0) % 3, sizeof(struct Item), build_map_objects_itemdata); } // Initialize window system and windows. WINDOW * screen = initscr();