void gamestate(GAMESTATE state) { DARNIT_KEYS k; switch(_gamestate) { case GAMESTATE_GAME: if(state!=GAMESTATE_PAUSE) map_cleanup(); case GAMESTATE_MENU: d_keymapping_set(game_keymap); break; default: break; } switch(state) { case GAMESTATE_MENU: if(platform.platform&DARNIT_PLATFORM_HANDHELD) d_keymapping_set(menu_keymap_handheld); else d_keymapping_set(menu_keymap_desktop); break; case GAMESTATE_GAME: memset(&k, 0xFF, sizeof(DARNIT_KEYS)); d_keys_set(k); if(_gamestate==GAMESTATE_PAUSE) break; _gamestate=state; map_load(0); score = 0; break; case GAMESTATE_HIGHSCORE: case GAMESTATE_INSTRUCTIONS: case GAMESTATE_GAMEOVER: case GAMESTATE_PAUSE: memset(&k, 0xFF, sizeof(DARNIT_KEYS)); d_keys_set(k); break; default: break; } _gamestate=state; }
void downStairUseCallback(struct item_use_t* data){ if(data == NULL || data->item == NULL){ quit("Error: Cannot access NULL Stair"); } //If there's no map to go down to, make a new one. if(data->item->go_to_map == NULL){ data->item->go_to_map = map_new(); //map initialization map_init(data->item->go_to_map, map_get_width(cur_map), map_get_height(cur_map), map_get_max_item_height(cur_map), map_get_dlevel(cur_map) + 1); //Map draw int px, py; creature_get_coord(player, &px, &py); map_draw_random_rooms(data->item->go_to_map, px, py); map_cleanup(data->item->go_to_map); map_draw_borders(data->item->go_to_map); //Move player map_remove_creature(cur_map, player); map_add_creature(data->item->go_to_map, player); //Place stairs map_place_up_stair(data->item->go_to_map, px, py, cur_map); map_place_down_stair_randomly(data->item->go_to_map); //Spawners map_place_spawners(data->item->go_to_map); } else{ //Just move player if the map exists map_remove_creature(cur_map, player); map_add_creature(data->item->go_to_map, player); } //Make the actual change of map cur_map = data->item->go_to_map; }