/** * Start actually playing a game, either by loading a savefile or creating * a new character */ static void start_game(bool new_game) { /* Player will be resuscitated if living in the savefile */ player->is_dead = TRUE; /* Try loading */ if (file_exists(savefile) && !savefile_load(savefile, arg_wizard)) quit("Broken savefile"); /* No living character loaded */ if (player->is_dead || new_game) { character_generated = FALSE; textui_do_birth(); } /* Tell the UI we've started. */ event_signal(EVENT_LEAVE_INIT); event_signal(EVENT_ENTER_GAME); event_signal(EVENT_ENTER_WORLD); /* Save not required yet. */ player->upkeep->autosave = FALSE; /* Enter the level, generating a new one if needed */ if (!character_dungeon) cave_generate(&cave, player); on_new_level(); }
int test_drop_eat(void *state) { int num = 0; /* Load the saved game */ eq(savefile_load("Test1", FALSE), TRUE); num = player->upkeep->inven[0]->number; cmdq_push(CMD_WALK); cmd_set_arg_direction(cmdq_peek(), "direction", 4); run_game_loop(); cmdq_push(CMD_DROP); cmd_set_arg_item(cmdq_peek(), "item", player->upkeep->inven[0]); cmd_set_arg_number(cmdq_peek(), "quantity", player->upkeep->inven[0]->number); run_game_loop(); eq(square_object(cave, player->py, player->px)->number, num); cmdq_push(CMD_EAT); cmd_set_arg_item(cmdq_peek(), "item", square_object(cave, player->py, player->px)); run_game_loop(); if (num > 1) { eq(square_object(cave, player->py, player->px)->number, num - 1); } else { eq(square_object(cave, player->py, player->px), NULL); } ok; }
int test_stairs1(void *state) { /* Load the saved game */ eq(savefile_load("Test1", FALSE), TRUE); cmdq_push(CMD_GO_DOWN); run_game_loop(); eq(player->depth, 1); ok; }
int test_loadgame(void *state) { /* Try loading the just-saved game */ eq(savefile_load("Test1", FALSE), TRUE); eq(player->is_dead, FALSE); noteq(cave, NULL); eq(player->chp, player->mhp); eq(player->food, PY_FOOD_FULL - 1); ok; }
int test_stairs2(void *state) { /* Load the saved game */ eq(savefile_load("Test1", FALSE), TRUE); cmdq_push(CMD_WALK); cmd_set_arg_direction(cmdq_peek(), "direction", 4); run_game_loop(); cmdq_push(CMD_WALK); cmd_set_arg_direction(cmdq_peek(), "direction", 6); run_game_loop(); cmdq_push(CMD_GO_DOWN); run_game_loop(); eq(player->depth, 1); ok; }
int test_drop_pickup(void *state) { /* Load the saved game */ eq(savefile_load("Test1", FALSE), TRUE); cmdq_push(CMD_WALK); cmd_set_arg_direction(cmdq_peek(), "direction", 4); run_game_loop(); if (player->upkeep->inven[0]->number > 1) { cmdq_push(CMD_DROP); cmd_set_arg_item(cmdq_peek(), "item", player->upkeep->inven[0]); cmd_set_arg_number(cmdq_peek(), "quantity", 1); run_game_loop(); eq(square_object(cave, player->py, player->px)->number, 1); cmdq_push(CMD_AUTOPICKUP); run_game_loop(); } eq(square_object(cave, player->py, player->px), NULL); ok; }