X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=src%2Fmisc.c;h=522af09b9a8ea807c1ac4595cd4f1751a4666a90;hb=aafa0cb49e7ec8600dad902411de6e76e111c939;hp=50fee6407854469819a691ccb8826943f55fd08a;hpb=ec5c4edd169be8fe8c778cabdfc7ada665629ffd;p=plomrogue diff --git a/src/misc.c b/src/misc.c index 50fee64..522af09 100644 --- a/src/misc.c +++ b/src/misc.c @@ -9,14 +9,19 @@ #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, 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 */ #include "rrand.h" /* for rrand(), rrand_seed() */ #include "rexit.h" /* for exit_err() */ - +#include "wincontrol.h" /* for init_winconfs(), init_wins(), free_winconfs(), + * sorted_wintoggle_and_activate() + */ +#include "windows.h" /* for suspend_win() */ extern char * trouble_msg(struct World * w, char * parent, char * child) @@ -95,6 +100,42 @@ extern void check_tempfile(char * path, struct World * w) +extern void save_interface_conf(struct World * world) +{ + save_keybindings(world, "config/keybindings_global", &world->kb_global); + save_keybindings(world, "config/keybindings_wingeom", &world->kb_wingeom); + save_keybindings(world, "config/keybindings_winkeys", &world->kb_winkeys); + save_win_configs(world); +} + + + +extern void load_interface_conf(struct World * world) +{ + init_keybindings(world, "config/keybindings_global", &world->kb_global); + init_keybindings(world, "config/keybindings_wingeom", &world->kb_wingeom); + init_keybindings(world, "config/keybindings_winkeys", &world->kb_winkeys); + init_winconfs(world); + init_wins(world); + sorted_wintoggle_and_activate(world); +} + + + +extern void unload_interface_conf(struct World * world) +{ + free_keybindings(world->kb_global.kbs); + free_keybindings(world->kb_wingeom.kbs); + free_keybindings(world->kb_winkeys.kbs); + while (0 != world->wmeta->active) + { + suspend_win(world->wmeta, world->wmeta->active); + } + free_winconfs(world); +} + + + extern void update_log(struct World * world, char * text) { char * f_name = "update_log()"; @@ -176,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); + } } } @@ -190,28 +234,44 @@ 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;