X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fmisc.c;h=aa855cd19c39fbe9416fa5986fe37036da4e5c7b;hb=657d5dbc6d362d7b20693c63b38d8d99f3d2dbbd;hp=e3499c10f7cd4f048a156a695e8cefb95415e712;hpb=e49cd07e79574ba404a0a8fc867344cc630d7794;p=plomrogue diff --git a/src/misc.c b/src/misc.c index e3499c1..aa855cd 100644 --- a/src/misc.c +++ b/src/misc.c @@ -9,8 +9,10 @@ #include "readwrite.h" /* for [read/write]_uint[8/16/32][_bigendian](), * try_fopen(), try_fclose() */ -#include "map_objects.h" /* for struct Monster, write_map_objects(), */ -#include "map_object_actions.h" /* for is_passable(), move_monster() */ +#include "map_objects.h" /* for struct MapObj, get_player(), read_map_objects(), + * write_map_objects() + */ +#include "map_object_actions.h" /* for is_passable(), move_actor() */ #include "map.h" /* for Map struct */ #include "main.h" /* for World struct */ #include "yx_uint16.h" /* for yx_uint16 struct */ @@ -215,12 +217,15 @@ extern void turn_over(struct World * world, char action) } world->turn++; rrand_seed(world->seed * world->turn); - struct Monster * monster; - for (monster = world->monster; + struct MapObj * monster; + for (monster = world->map_objs; monster != 0; - monster = monster->map_obj.next) + monster = monster->next) { - move_monster(world, monster); + if (0 < monster->lifepoints && 0 != monster->id) + { + move_actor(world, monster, rrand() % 5); + } } } @@ -229,28 +234,41 @@ extern void turn_over(struct World * world, char action) extern void save_game(struct World * world) { char * f_name = "save_game()"; - char * err_write = "Trouble in save_game() " - "writing to opened file 'savefile_tmp'."; - char * savefile_tmp = "savefile_tmp"; char * savefile = "savefile"; FILE * file = try_fopen(savefile_tmp, "w", world, f_name); - if ( write_uint32_bigendian(world->seed, file) - || write_uint32_bigendian(world->turn, file) - || write_uint16_bigendian(world->score, file) - || write_uint16_bigendian(world->player->pos.y + 1, file) - || write_uint16_bigendian(world->player->pos.x + 1, file) - || write_uint8(world->player->hitpoints, file) - || write_map_objects(world, world->monster, file) - || write_map_objects(world, world->item, file)) - { - exit_err(1, world, err_write); - } + char line[12]; + sprintf(line, "%d\n", world->seed); + try_fwrite(line, strlen(line), 1, file, world, f_name); + sprintf(line, "%d\n", world->turn); + try_fwrite(line, strlen(line), 1, file, world, f_name); + sprintf(line, "%d\n", world->score); + try_fwrite(line, strlen(line), 1, file, world, f_name); + write_map_objects(world, file); try_fclose_unlink_rename(file, savefile_tmp, savefile, world, f_name); } +extern void load_game(struct World * world) +{ + char * f_name = "load_game2()"; + char * filename = "savefile"; + FILE * file = try_fopen(filename, "r", world, f_name); + uint16_t linemax = get_linemax(file, world, f_name); + char line[linemax + 1]; + try_fgets(line, linemax + 1, file, world, f_name); + world->seed = atoi(line); + try_fgets(line, linemax + 1, file, world, f_name); + world->turn = atoi(line); + try_fgets(line, linemax + 1, file, world, f_name); + world->score = atoi(line); + read_map_objects(world, file, line, linemax); + try_fclose(file, world, f_name); +} + + + extern struct yx_uint16 find_passable_pos(struct Map * map) { struct yx_uint16 pos; @@ -261,3 +279,29 @@ extern struct yx_uint16 find_passable_pos(struct Map * map) } return pos; } + + + +extern void nav_inventory(struct World * world, char dir) +{ + if ('u' == dir) + { + if (world->inventory_select > 0) + { + world->inventory_select--; + } + return; + } + struct MapObj * player = get_player(world); + struct MapObj * owned = player->owns; + if (NULL == owned) + { + return; + } + uint8_t n_owned = 0; + for (; NULL != owned->next; owned = owned->next, n_owned++); + if (world->inventory_select < n_owned) + { + world->inventory_select++; + } +}