Пример #1
0
void give_pc_info_event_filter(short item_hit)
{
	short pc;

	pc = store_pc_num;
	switch (item_hit) {
		case 1: 
			toast_dialog();
			break;
		case 2: 
			do				
				store_pc_num = (store_pc_num == 0) ? 5 : store_pc_num - 1;
				while (univ.party[store_pc_num].main_status != 1);
			display_pc_info();
			break;
		case 3: 
			do 
				store_pc_num = (store_pc_num + 1) % 6;
				while (univ.party[store_pc_num].main_status != 1);
			display_pc_info();
			break;
		case 4:
			display_pc(pc,0,1019);
			break;
		case 5:
			display_pc(pc,1,1019);
			break;
		case 6:
			pick_race_abil(&univ.party[pc],1,1019);
			break;
		case 68:
			display_alchemy();
			break;
		}	

}
Пример #2
0
Boolean handle_menu (short item, HMENU)
{
	short i,j,k;
	Boolean to_return = FALSE;
   item_record_type store_i;


	if ((file_in_mem == FALSE) && ((item == 1) || (item == 3) ||
		(item >= 40)) && (item != 200) && (item != 100)) {
		display_strings(20,5,0,0,"Editing party",57,707,0);
		item = -1;
		}

	switch (item) {
   	case -1: break;
		case 1:
			save_file(0);
			break;
		case 2:
			if (verify_restore_quit(1) == TRUE)
				load_file();
                update_item_menu(item_menus_lock);
			break;
		case 3:
            save_file(1);
            break;
		case 4:
			All_Done = verify_restore_quit(0);
			break;

		case 41:
				edit_gold_or_food(0);
				redraw_screen();

		break;
		case 42:
				edit_gold_or_food(1);
				redraw_screen();
		break;

		case 44:
			if (party.stuff_done[304][0] > 0) {
				FCD(909,0);
				break;
				}
			FCD(901,0);
			leave_town();
			break;

		case 45:
			if (party.stuff_done[304][0] == 0) {
				FCD(911,0);
				break;
				}
			FCD(910,0);
			c_town.p_loc.x = party.stuff_done[304][1];
			c_town.p_loc.y = party.stuff_done[304][2];
			party.stuff_done[304][0] = 0;
			for (i = 0; i < 6; i++)
				if (adven[i].main_status >= 10)
					adven[i].main_status -= 10;
			redraw_screen();
			break;


		case 48:
			display_strings(20,20,0,0,"Editing party",57,707,0);
			for (i = 0; i < 4; i++)
				party.creature_save[i].which_town = 200;
			break;
		case 51: // damage
			display_strings(20,1,0,0,"Editing party",57,715,0);
			for (i = 0; i < 6; i++)
				adven[i].cur_health = adven[i].max_health;
			redraw_screen();
			break;
		case 52: // spell pts
			display_strings(20,2,0,0,"Editing party",57,715,0);
			for (i = 0; i < 6; i++)
				adven[i].cur_sp = adven[i].max_sp;
			redraw_screen();
			break;
		case 53: // raise dead
			display_strings(20,3,0,0,"Editing party",57,715,0);
			for (i = 0; i < 6; i++)
				if ((adven[i].main_status == 2) || (adven[i].main_status == 3) ||
					(adven[i].main_status == 4))
						adven[i].main_status = 1;
			redraw_screen();
			break;
		case 54: // conditions
			display_strings(20,4,0,0,"Editing party",57,715,0);
			for (i = 0; i < 6; i++) {
				adven[i].status[2] = 0;
				if (adven[i].status[3] < 0)
					adven[i].status[3] = 0;
				adven[i].status[6] = 0;
				adven[i].status[7] = 0;
				adven[i].status[9] = 0;
				adven[i].status[11] = 0;
				adven[i].status[12] = 0;
				adven[i].status[13] = 0;
				}
			redraw_screen();
			break;

		case 55:
			if (party_in_scen == FALSE) {
				display_strings(20,25,0,0,"Editing party",57,715,0);
				break;
				}
			if (FCD(912,0) != 1)
				break;
			remove_party_from_scen();
			party.stuff_done[304][0] = 0;
			redraw_screen();
			break;
		case 62:
			 display_alchemy();
			break;
		case 63: // all property
			display_strings(20,6,0,0,"Editing party",57,707,0);
			for (i = 0; i < 30; i++) {
				party.boats[i].property = FALSE;
				party.horses[i].property = FALSE;
				}
			break;
		case 70: // edit day
			edit_day();
			break;
		case 71: // out maps
			if (party_in_scen == FALSE) {
				display_strings(20,25,0,0,"Editing party",57,715,0);
				break;
				}
			display_strings(20,13,0,0,"Editing party",57,715,0);
			for (i = 0; i < 96; i++)
				for (j = 0; j < 96; j++)
					out_e[i][j] = 1;
			for (i = 0; i < 100; i++)
				for (j = 0; j < 6; j++)
					for (k = 0; k < 48; k++)
						o_maps.outdoor_maps[i][j][k] = 255;

			break;
		case 72: // town maps
			if (party_in_scen == FALSE) {
				display_strings(20,25,0,0,"Editing party",57,715,0);
				break;
				}
			display_strings(20,14,0,0,"Editing party",57,715,0);
			for (i = 0; i < 64; i++)
				for (j = 0; j < 64; j++)
					c_town.explored[i][j] = 1;
			for (i = 0; i < 200; i++)
				for (j = 0; j < 8; j++)
					for (k = 0; k < 64; k++)
						town_maps.town_maps[i][j][k] = 255;
			break;
		case 100: // index
			WinHelp(mainPtr,"Blades of Exile.hlp",HELP_CONTENTS,0L);
			break;
		case 200: // about
			FCD(1062,0);
			break;
		default:
			item -= 600;
			store_i = scen_item_list.scen_items[item];
			if(store_i.variety == 3){
		        party.gold += get_ran(1,1,20);
               	redraw_screen();
                break;
            }
			if(store_i.variety == 11){
                party.food += get_ran(1,1,20);
               	redraw_screen();
                break;
            }
			give_to_pc(current_active_pc,store_i,FALSE);
			draw_items(1);
			break;

		}

	return to_return;
}
Пример #3
0
void handle_menu_choice(eMenu item_hit) {
	std::string dialogToShow;
	sf::Event dummyEvent = {sf::Event::KeyPressed};
	short i, choice;
	
	switch(item_hit) {
		case eMenu::NONE: break;
		case eMenu::FILE_OPEN:
			do_load();
			break;
		case eMenu::FILE_SAVE:
			do_save(0);
			break;
		case eMenu::FILE_SAVE_AS:
			do_save(1);
			break;
		case eMenu::FILE_NEW:
			if(overall_mode != MODE_STARTUP) {
				std::string choice = cChoiceDlog("restart-game",{"okay","cancel"}).show();
				if(choice == "cancel")
					return;
				for(i = 0; i < 6; i++)
					univ.party[i].main_status = eMainStatus::ABSENT;
				party_in_memory = false;
				reload_startup();
				overall_mode = MODE_STARTUP;
				draw_startup(0);
			}
			start_new_game();
			draw_startup(0);
			menu_activate();
			break;
		case eMenu::FILE_ABORT:
			if(overall_mode != MODE_STARTUP) {
				std::string choice = cChoiceDlog("abort-game",{"okay","cancel"}).show();
				if (choice=="cancel") return;
				reload_startup();
				overall_mode = MODE_STARTUP;
			}
			party_in_memory = false;
			draw_startup(0);
			menu_activate();
			break;
		case eMenu::PREFS:
			pick_preferences();
			break;
		case eMenu::QUIT:
			if(overall_mode == MODE_STARTUP) {
				if(party_in_memory) {
					std::string choice = cChoiceDlog("quit-confirm-save", {"save","quit","cancel"}).show();
					if(choice == "cancel") break;
					if(choice == "save") {
						fs::path file = nav_put_party();
						if(!file.empty()) break;
						save_party(file, univ);
					}
				}
				All_Done = true;
				break;
			}
			if(overall_mode > MODE_TOWN) {
				std::string choice = cChoiceDlog("quit-confirm-nosave",{"quit","cancel"}).show();
				if(choice == "cancel")
					return;
			}
			else {
				std::string choice = cChoiceDlog("quit-confirm-save",{"quit","save","cancel"}).show();
				if(choice == "cancel")
					break;
				if(choice == "save") {
					if(univ.file.empty()) {
						univ.file = nav_put_party();
						if(univ.file.empty()) break;
					}
					save_party(univ.file, univ);
				}
			}
			All_Done = true;
			break;
		case eMenu::OPTIONS_PC_GRAPHIC:
			choice = char_select_pc(1,"New graphic for who?");
			if(choice < 6)
				pick_pc_graphic(choice,1,nullptr);
			draw_terrain();
			break;
			
		case eMenu::OPTIONS_DELETE_PC:
			if(!prime_time()) {
				ASB("Finish what you're doing first.");
				print_buf();
			}
			else {
				choice = char_select_pc(1,"Delete who?");
				if(choice < 6) {
					std::string confirm = cChoiceDlog("delete-pc-confirm",{"yes","no"}).show();
					if(confirm == "yes")
						kill_pc(univ.party[choice],eMainStatus::ABSENT);
				}
				draw_terrain();
			}
			break;
			
			
		case eMenu::OPTIONS_RENAME_PC:
			choice = char_select_pc(1,"Rename who?");
			if(choice < 6)
				pick_pc_name(choice,nullptr);
			put_pc_screen();
			put_item_screen(stat_window);
			break;
			
			
		case eMenu::OPTIONS_NEW_PC:
			if(!(is_town())) {
				add_string_to_buf("Add PC: Town mode only.");
				print_buf();
				break;
			}
			for(i = 0; i < 6; i++)
				if(univ.party[i].main_status == eMainStatus::ABSENT)
					i = 20;
			if(i == 6) {
				ASB("Add PC: You already have 6 PCs.");
				print_buf();
				break;
			}
			if(univ.town->has_tavern) {
				give_help(56,0);
				create_pc(6,nullptr);
			} else {
				add_string_to_buf("Add PC: You cannot add new characters in this town. Try in the town you started in.", 2);
			}
			print_buf();
			put_pc_screen();
			put_item_screen(stat_window);
			break;
			
		case eMenu::OPTIONS_JOURNAL:
			journal();
			break;
		case eMenu::OPTIONS_TALK_NOTES:
			if(overall_mode == MODE_TALKING) {
				ASB("Talking notes: Can't read while talking.");
				print_buf();
				return;
			}
			talk_notes();
			break;
		case eMenu::OPTIONS_ENCOUNTER_NOTES:
			adventure_notes();
			break;
		case eMenu::OPTIONS_STATS:
			if(overall_mode != MODE_STARTUP)
				print_party_stats();
			break;
		case eMenu::HELP_OUT:
			dialogToShow = "help-outdoor";
			break;
		case eMenu::HELP_TOWN:
			dialogToShow = "help-town";
			break;
		case eMenu::HELP_COMBAT:
			dialogToShow = "help-combat";
			break;
		case eMenu::HELP_BARRIER:
			dialogToShow = "help-fields";
			break;
		case eMenu::HELP_HINTS:
			dialogToShow = "help-hints";
			break;
		case eMenu::HELP_SPELLS:
			dialogToShow = "help-magic";
			break;
		case eMenu::ABOUT:
			dialogToShow = "about-boe";
			break;
		case eMenu::LIBRARY_MAGE:
			display_spells(eSkill::MAGE_SPELLS,100,0);
			break;
		case eMenu::LIBRARY_PRIEST:
			display_spells(eSkill::PRIEST_SPELLS,100,0);
			break;
		case eMenu::LIBRARY_SKILLS:
			display_skills(eSkill::INVALID,0);
			break;
		case eMenu::LIBRARY_ALCHEMY:
			// TODO: Create a dedicated dialog for alchemy info
			display_alchemy();
			break;
		case eMenu::LIBRARY_TIPS:
			tip_of_day();
			break;
		case eMenu::LIBRARY_INTRO:
			dialogToShow = "welcome";
			break;
		case eMenu::ACTIONS_ALCHEMY:
			dummyEvent.key.code = sf::Keyboard::A;
			dummyEvent.key.shift = true;
			handle_keystroke(dummyEvent);
			break;
		case eMenu::ACTIONS_WAIT:
			dummyEvent.key.code = sf::Keyboard::W;
			handle_keystroke(dummyEvent);
			break;
		case eMenu::ACTIONS_AUTOMAP:
			if(!prime_time()) {
				ASB("Finish what you're doing first.");
				print_buf();
			}
			else {
				give_help(62,0);
				display_map();
			}
			make_cursor_sword();
			break;
		case eMenu::HELP_TOC:
			if(fs::is_directory(progDir/"doc"))
				launchURL("file://" + (progDir/"doc/game/Contents.html").string());
			else launchURL("https://blades.calref.net/doc/game/Contents.html");
			break;
		case eMenu::ABOUT_MAGE:
		case eMenu::ABOUT_PRIEST:
			give_help(209,0);
			break;
		case eMenu::ABOUT_MONSTERS:
			give_help(212,0);
			break;
	}
	if(!dialogToShow.empty()) {
		cChoiceDlog dlog(dialogToShow);
		dlog.show();
	}
}