Files
2025-05-14 09:16:02 -05:00

1716 lines
44 KiB
C++
Executable File

#include <Windows.h>
#include "string.h"
#include "global.h"
#include "dlgutils.h"
#include "text.h"
#include "town.h"
#include "itemdata.h"
#include "locutils.h"
#include "fields.h"
#include "party.h"
#include "specials.h"
#include "fileio.h"
#include "graphics.h"
#include "townspec.h"
#include "items.h"
#include "exlsound.h"
#include "stdio.h"
#include "dlogtool.h"
#include "newgraph.h"
#include "infodlgs.h"
#include "graphutl.h"
#define NUM_HINTS 30
extern big_tr_type far t_d;
extern short stat_window,overall_mode,dialog_answer;
extern current_town_type far c_town;
extern party_record_type far party;
extern piles_of_stuff_dumping_type *data_store;
extern piles_of_stuff_dumping_type2 *data_store2;
extern talking_record_type far talking;
extern scenario_data_type far scenario;
extern Boolean in_startup_mode,play_sounds,sys_7_avail,give_intro_hint;
extern HWND mainPtr;
extern short display_mode,stat_screen_mode,current_pc;
extern long register_flag;
extern long ed_flag,ed_key;
extern Boolean registered,ed_reg,save_maps,give_delays;
extern pc_record_type far adven[6];
extern location center;
extern HWND text_sbar,item_sbar,shop_sbar;
extern Boolean modeless_exists[18];
extern HWND modeless_dialogs[18] ;
extern pascal Boolean cd_event_filter();
extern Boolean dialog_not_toast;
extern Boolean game_run_before;
extern HPALETTE hpal;
extern far PALETTEENTRY ape[256];
extern HDC main_dc,main_dc2,main_dc3;
extern Boolean cursor_shown;
extern piles_of_stuff_dumping_type3 *data_store3;
extern piles_of_stuff_dumping_type4 *data_store4;
HBITMAP pcs_gworld = NULL;
short sign_mode,person_graphic,store_person_graphic,store_sign_mode;
long num_talk_entries;
char null_string[256] = "";
short store_tip_page_on = 0;
// Talking vars
word_rect_type far store_words[50];
short store_pre_talk_mode,store_personality,store_personality_graphic,shop_identify_cost;
HBITMAP talk_gworld = NULL;
Boolean talk_end_forced;
char far old_str1[256];
char far old_str2[256];
char far one_back1[256];
char far one_back2[256];
extern word_rect_type preset_words[9];
RECT talk_area_rect = {5,5,284,420}, word_place_rect = {7,44,257,372},talk_help_rect = {254,5,272,21};
/**/
char title_string[50];
unsigned char store_monst_type;
short store_m_num;
RECT dummy_rect = {0,0,0,0};
hold_responses far store_resp[83];
short strnum1,strnum2,oldstrnum1,oldstrnum2;
short store_talk_face_pic,cur_town_talk_loaded = -1;
// Shopping vars
// 1 - 499 ... regular items
// 500 alchemy
// 600-620 ... food
// 700+ i - that healing
// 800 + - mage spells
// 900 + - priest spells
// n000 + i - magic store n item i
short far store_shop_items[30];
short far store_shop_costs[30];
// talk_area_rect and talk_help_rect used for this too
short store_shop_min,store_shop_max,store_pre_shop_mode,store_cost_mult;
char far store_store_name[256];
// 0 - whole area, 1 - active area 2 - graphic 3 - item name
// 4 - item cost 5 - item extra str 6 - item help button
extern RECT shopping_rects[8][7];
RECT bottom_help_rects[4] = {{6,356,250,368},{6,374,270,386},{6,386,250,398},{6,398,250,410}};
RECT shop_name_str = {6,44,200,56};
RECT shop_frame = {10,62,269,352};
RECT shop_done_rect = {212,388,275,411}; /**/
extern short store_shop_type;
char far *heal_types[] = {"Heal Damage","Cure Poison","Cure Disease","Cure Paralysis",
"Uncurse Items","Cure Stoned Character","Raise Dead","Resurrection","Cure Dumbfounding"};
short heal_costs[9] = {50,30,80,100,250,500,1000,3000,100};
long cost_mult[7] = {5,7,10,13,16,20,25};
short cur_display_mode;
short terrain_pic[256];
scen_header_type scen_headers[25];
short store_scen_page_on,store_num_scen;
/*
shop_type:
0 - weapon shop
1 - armor shop
2 - misc shop
3 - healer
4 - food
5-9 - magic shop
10 - mage spells
11 - priest spells
12 alchemy
*/
void start_shop_mode(short shop_type,short shop_min,short shop_max,short cost_adj,char *store_name)
{
RECT area_rect;
if (shop_max < shop_min)
shop_max = shop_min; ////
store_cost_mult = cost_adj;
if (store_cost_mult > 6)
store_cost_mult = 6;
store_shop_type = shop_type;
store_shop_min = shop_min;
store_shop_max = shop_max;
area_rect = talk_area_rect;
strcpy((char *) store_store_name,store_name);
OffsetRect(&area_rect, -1 * area_rect.left,-1 * area_rect.top);
if (talk_gworld == NULL)
talk_gworld = CreateCompatibleBitmap(main_dc,area_rect.right,area_rect.bottom);
store_pre_shop_mode = overall_mode;
overall_mode = 21;
stat_screen_mode = 1;
create_clip_region();
set_up_shop_array();
put_background();
draw_shop_graphics(0,area_rect);
put_item_screen(stat_window,0);
give_help(26,27,0);
}
void end_shop_mode()
{
RECT dummy_rect = {0,0,0,0};
ShowScrollBar(shop_sbar,SB_CTL,FALSE);
if (store_pre_shop_mode == 20) {
sprintf((char *)old_str1,"You conclude your business.");
sprintf((char *)old_str2,"");
sprintf((char *)one_back1,"You conclude your business.");
sprintf((char *)one_back2,"");
strnum1 = strnum2 = oldstrnum1 = oldstrnum2 = 0;
place_talk_str((char *)old_str1,"",0,dummy_rect);
}
else {
DisposeGWorld(talk_gworld);
talk_gworld = NULL;
}
overall_mode = store_pre_shop_mode;
create_clip_region();
if (overall_mode == 2)
overall_mode = 1;
if (overall_mode == 1) {
center = c_town.p_loc;
update_explored(center);
}
stat_screen_mode = 0;
put_item_screen(stat_window,0);
put_pc_screen();
refresh_screen(0);
}
void handle_shop_event(POINT p,Boolean right_button)
{
short i,j,get_pc,store_what_picked;
p.x -= 5;
p.y -= 5;
if (PtInRect(&talk_help_rect,p)) {
click_shop_rect(talk_help_rect);
party.help_received[26] = 0;
give_help(26,27,0);
return;
}
if (PtInRect(&shop_done_rect, p)) {
click_shop_rect(shop_done_rect);
end_shop_mode();
return;
}
for (i = 0; i < 8; i++) {
store_what_picked = i + GetScrollPos(shop_sbar,SB_CTL);
if ((PtInRect(&shopping_rects[i][1],p)) && (store_shop_items[store_what_picked] >= 0)) {
click_shop_rect(shopping_rects[i][1]);
handle_sale(store_shop_items[store_what_picked],store_shop_costs[store_what_picked]);
}
if ((PtInRect(&shopping_rects[i][6],p)) && (store_shop_items[store_what_picked] >= 0)
&& (store_shop_type != 3) && (store_shop_type != 4)){
click_shop_rect(shopping_rects[i][6]);
handle_info_request(store_shop_items[store_what_picked]);
}
}
}
void handle_sale(short what_chosen,short cost)
{
item_record_type base_item;
short what_magic_shop,what_magic_shop_item,i,j;
RECT dummy_rect = {0,0,0,0};
switch (what_chosen / 100) {
case 0: case 1: case 2: case 3: case 4:
base_item = get_stored_item(what_chosen);
base_item.item_properties = base_item.item_properties | 1;
//cost = (base_item.charges == 0) ? base_item.value : base_item.value * base_item.charges;
switch (pc_ok_to_buy(current_pc,cost,base_item)) {
case 1: play_sound(-38); give_to_pc(current_pc,base_item,TRUE); break;
case 2: ASB("Can't carry any more items."); break;
case 3: ASB("Not enough cash."); break;
case 4: ASB("Item is too heavy."); break;
case 5: ASB("You own too many of this."); break;
}
break;
case 5:
base_item = store_alchemy(what_chosen - 500);
if (party.alchemy[base_item.item_level] == TRUE)
ASB("You already know that recipe.");
else if (take_gold(cost,FALSE) == FALSE)
ASB("Not enough gold.");
else {
play_sound(62);
ASB("You buy an alchemical recipe.");
party.alchemy[base_item.item_level] = TRUE;
}
break;
case 7:
what_chosen -= 700;
if (take_gold(cost,FALSE) == FALSE)
ASB("Not enough gold.");
else {
ASB("You pay the healer.");
play_sound(68);
switch (what_chosen) {
case 0:
adven[current_pc].cur_health = adven[current_pc].max_health;
break;
case 1:
adven[current_pc].status[2] = 0;
break;
case 2:
adven[current_pc].status[7] = 0; break;
case 3:
adven[current_pc].status[12] = 0; break;
case 4:
for (i = 0; i < 24; i++)
if ((adven[current_pc].equip[i] == TRUE) &&
(is_cursed(adven[current_pc].items[i])))
adven[current_pc].items[i].item_properties =
adven[current_pc].items[i].item_properties & 239;
break;
case 5: case 6: case 7:
adven[current_pc].main_status = 1; break;
case 8:
adven[current_pc].status[9] = 0; break;
}
}
break;
case 8:
base_item = store_mage_spells(what_chosen - 800 - 30);
if ((base_item.item_level < 0) || (base_item.item_level > 61)) {
SysBeep(50); ASB("Error 102: Report this!"); break;}
if (adven[current_pc].mage_spells[base_item.item_level] == TRUE)
ASB("You already have this spell.");
else if (take_gold(cost,FALSE) == FALSE)
ASB("Not enough gold.");
else {
play_sound(62);
ASB("You buy a spell.");
adven[current_pc].mage_spells[base_item.item_level] = TRUE;
give_help(41,0,0);
}
break;
case 9:
base_item = store_priest_spells(what_chosen - 900 - 30);
if ((base_item.item_level < 0) || (base_item.item_level > 61)) {
SysBeep(50); ASB("Error 101: Report this!"); break;}
if (adven[current_pc].priest_spells[base_item.item_level] == TRUE)
ASB("You already have this spell.");
else if (take_gold(cost,FALSE) == FALSE)
ASB("Not enough gold.");
else {
play_sound(62);
ASB("You buy a spell.");
adven[current_pc].priest_spells[base_item.item_level] = TRUE;
give_help(41,0,0);
}
break;
default:
what_magic_shop = (what_chosen / 1000) - 1;
what_magic_shop_item = what_chosen % 1000;
base_item = party.magic_store_items[what_magic_shop][what_magic_shop_item];
base_item.item_properties = base_item.item_properties | 1;
switch (pc_ok_to_buy(current_pc,cost,base_item)) {
case 1: play_sound(-38); give_to_pc(current_pc,base_item,TRUE);
party.magic_store_items[what_magic_shop][what_magic_shop_item].variety = 0;
break;
case 2: ASB("Can't carry any more items."); break;
case 3: ASB("Not enough cash."); break;
case 4: ASB("Item is too heavy."); break;
}
break;
}
set_up_shop_array();
if (overall_mode != 21) {
SysBeep(50);
ASB("Shop error 1. Report This!");
}
draw_shop_graphics(0,dummy_rect);
print_buf();
put_pc_screen();
put_item_screen(stat_window,0);
}
void handle_info_request(short what_chosen)
{
item_record_type base_item;
short what_magic_shop,what_magic_shop_item;
switch (what_chosen / 100) {
case 0: case 1: case 2: case 3: case 4:
base_item = get_stored_item(what_chosen);
base_item.item_properties = base_item.item_properties | 1;
display_pc_item(6,0, base_item,0);
break;
case 5:
display_help(0,0);
break;
case 8:
base_item = store_mage_spells(what_chosen - 800 - 30);
display_spells(0,base_item.item_level,0);
break;
case 9:
base_item = store_priest_spells(what_chosen - 900 - 30);
display_spells(1,base_item.item_level,0);
break;
default:
what_magic_shop = (what_chosen / 1000) - 1;
what_magic_shop_item = what_chosen % 1000;
base_item = party.magic_store_items[what_magic_shop][what_magic_shop_item];
base_item.item_properties = base_item.item_properties | 1;
display_pc_item(6,0, base_item,0);
break;
}
}
void set_up_shop_array()
{
short i,shop_pos = 0;
Boolean cursed_item = FALSE;
item_record_type store_i;
long store_l;
for (i = 0; i < 30; i++)
store_shop_items[i] = -1;
switch (store_shop_type) {
case 0: case 1: case 2:
for (i = store_shop_min; i < store_shop_max + 1; i++) {
store_shop_items[shop_pos] = i;
store_i = get_stored_item(store_shop_items[shop_pos]);
store_shop_costs[shop_pos] = (store_i.charges == 0) ?
store_i.value : store_i.value * store_i.charges;
shop_pos++;
}
break;
case 3:
if (adven[current_pc].cur_health < adven[current_pc].max_health) {
store_shop_items[shop_pos] = 700;
store_shop_costs[shop_pos] = heal_costs[0];
shop_pos++;
}
if (adven[current_pc].status[2] > 0) {
store_shop_items[shop_pos] = 701;
store_shop_costs[shop_pos] = heal_costs[1];
shop_pos++;
}
if (adven[current_pc].status[7] > 0) {
store_shop_items[shop_pos] = 702;
store_shop_costs[shop_pos] = heal_costs[2];
shop_pos++;
}
if (adven[current_pc].status[12] > 0) {
store_shop_items[shop_pos] = 703;
store_shop_costs[shop_pos] = heal_costs[3];
shop_pos++;
}
if (adven[current_pc].status[9] > 0) {
store_shop_items[shop_pos] = 708;
store_shop_costs[shop_pos] = heal_costs[8];
shop_pos++;
}
for (i = 0; i < 24; i++)
if ((adven[current_pc].equip[i] == TRUE) && (is_cursed(adven[current_pc].items[i]) == TRUE))
cursed_item = TRUE;
if (cursed_item) {
store_shop_items[shop_pos] = 704;
store_shop_costs[shop_pos] = heal_costs[4];
shop_pos++;
}
if (adven[current_pc].main_status == 4) {
store_shop_items[shop_pos] = 705;
store_shop_costs[shop_pos] = heal_costs[5];
shop_pos++;
}
if (adven[current_pc].main_status == 2){
store_shop_items[shop_pos] = 706;
store_shop_costs[shop_pos] = heal_costs[6];
shop_pos++;
}
if (adven[current_pc].main_status == 3){
store_shop_items[shop_pos] = 707;
store_shop_costs[shop_pos] = heal_costs[7];
shop_pos++;
}
break;
case 4:
//for (i = store_shop_min; i < store_shop_max + 1; i++) {
// store_shop_items[shop_pos] = 600 + i;
// store_shop_costs[shop_pos] = food_types[i].value;
// shop_pos++;
// }
break;
case 5: case 6: case 7: case 8: case 9:
for (i = 0; i < 10; i++)
if (party.magic_store_items[store_shop_type - 5][i].variety != 0) {
store_shop_items[shop_pos] = (store_shop_type - 4) * 1000 + i;
store_i = party.magic_store_items[store_shop_type - 5][i];
store_shop_costs[shop_pos] = (store_i.charges == 0) ?
store_i.value : store_i.value * store_i.charges;
shop_pos++;
}
break;
case 10:
for (i = store_shop_min; i < store_shop_max + 1; i++)
if (i == minmax(0,31,i)) {
store_i = store_mage_spells(i);
store_shop_costs[shop_pos] = store_i.value;
store_shop_items[shop_pos] = 800 + i + 30;
shop_pos++;
}
break;
case 11:
for (i = store_shop_min; i < store_shop_max + 1; i++)
if (i == minmax(0,31,i)) {
store_i = store_priest_spells(i);
store_shop_costs[shop_pos] = store_i.value;
store_shop_items[shop_pos] = 900 + i + 30;
shop_pos++;
}
break;
case 12:
for (i = store_shop_min; i < store_shop_max + 1; i++)
if (i == minmax(0,19,i)) {
store_i = store_alchemy(i);
store_shop_costs[shop_pos] = store_i.value;
store_shop_items[shop_pos] = 500 + i;
shop_pos++;
}
break;
}
for (i = 0; i < 30; i++)
if (store_shop_items[i] >= 0) {
store_l = store_shop_costs[i];
store_l = (store_l * cost_mult[store_cost_mult]) / 10;
store_shop_costs[i] = (short) store_l;
}
i = max(0,shop_pos - 8);
SetScrollRange(shop_sbar,SB_CTL,0,i,TRUE);
}
void start_talk_mode(short m_num,short personality,unsigned char monst_type,short store_face_pic)////
{
RECT area_rect;
char place_string1[256] = "";
char place_string2[256] = "";
short i,cash;
store_personality = personality;
store_monst_type = monst_type;
store_m_num = m_num;
store_talk_face_pic = store_face_pic; ////
area_rect = talk_area_rect;
OffsetRect(&area_rect, -1 * area_rect.left,-1 * area_rect.top);
talk_gworld = CreateCompatibleBitmap(main_dc,area_rect.right,area_rect.bottom);
// first make sure relevant talk strs are loaded in
if (personality / 10 != cur_town_talk_loaded)
load_town(personality / 10,1,0,NULL);
// load all possible responses
store_responses();
// Dredge up critter's name
sprintf((char *) title_string,"%s:",data_store3->talk_strs[personality % 10]);
store_pre_talk_mode = overall_mode;
overall_mode = 20;
create_clip_region();
talk_end_forced = FALSE;
stat_screen_mode = 1;
// Bring up and place first strings.
sprintf((char *) place_string1,"%s",data_store3->talk_strs[personality % 10 + 10]);
strnum1 = personality % 10 + 10;
strnum2 = 0;
strcpy((char *) old_str1,(char *) place_string1);
strcpy((char *) old_str2,(char *) place_string2);
strcpy((char *) one_back1,(char *) place_string1);
strcpy((char *) one_back2,(char *) place_string2);
place_talk_str((char *) place_string1,(char *) place_string2,0,dummy_rect);
put_item_screen(stat_window,0);
give_help(5,6,0);
}
void end_talk_mode()
{
DisposeGWorld(talk_gworld);
talk_gworld = NULL;
overall_mode = store_pre_talk_mode;
create_clip_region();
if (overall_mode == 2)
overall_mode = 1;
if (overall_mode == 1) {
center = c_town.p_loc;
update_explored(center);
}
stat_screen_mode = 0;
put_item_screen(stat_window,0);
put_pc_screen();
//refresh_screen(0);
redraw_screen(0);
}
void handle_talk_event(POINT p,Boolean right_button)
{
short i,j,force_special = 0,get_pc,s1 = -1,s2 = -1,s3 = -1;
char asked[4];
char place_string1[256] = "";
char place_string2[256] = "";
short a,b,c,d,per1,per2,ttype,which_talk_entry = -1;
char stra[10],strb[10];
long per1l,ttypel,al,bl,cl,dl,per2l;
p.x -= 5;
p.y -= 5;
if (PtInRect(&talk_help_rect,p)) {
party.help_received[5] = 0;
give_help(5,6,0);
return;
}
for (i = 0; i < 9; i++)
if ((PtInRect(&preset_words[i].word_rect,p)) && ((talk_end_forced == FALSE) || (i == 6) || (i == 5))) {
click_talk_rect((char *) old_str1,(char *) old_str2,preset_words[i].word_rect);
switch (i) {
case 0: case 1: case 2: case 7: case 8:
force_special = i + 1;
break;
case 3: case 4:
force_special = i + 1;
//asked[0] = 'p';asked[1] = 'u';asked[2] = 'r';asked[3] = 'c';
break;
case 5: // save
if (strnum1 <= 0) {
SysBeep(20);
return;
}
for (j = 0; j < 120; j++)
if ((party.talk_save[j].personality == store_personality) &&
(party.talk_save[j].str1 == strnum1) &&
(party.talk_save[j].str2 == strnum2)) {
ASB("This is already saved.");
print_buf();
return;
}
for (j = 0; j < 120; j++)
if (party.talk_save[j].personality <= 0) {
give_help(57,0,0);
play_sound(0);
party.talk_save[j].personality = store_personality;
party.talk_save[j].town_num = (unsigned char) c_town.town_num;
party.talk_save[j].str1 = strnum1;
party.talk_save[j].str2 = strnum2;
ASB("Noted in journal.");
j = 200;
}
if (j < 200) {
SysBeep(20);
ASB("No more room in talking journal.");
}
print_buf();
return;
break;
case 6: // quit
end_talk_mode();
return;
break;
default:
for (j = 0; j < 4; j++)
asked[j] = preset_words[i].word[j];
break;
}
i = 100;
}
if (i < 100) {
for (i = 0; i < 50; i++)
if ((PtInRect(&store_words[i].word_rect,p)) && (talk_end_forced == FALSE)) {
click_talk_rect((char *) old_str1,(char *) old_str2,store_words[i].word_rect);
for (j = 0; j < 4; j++)
asked[j] = store_words[i].word[j];
i = 100;
}
}
if (i == 50) // no event
return;
if (force_special == 9) {
get_text_response(1017,place_string1,0);
asked[0] = place_string1[0];
asked[1] = place_string1[1];
asked[2] = place_string1[2];
asked[3] = place_string1[3];
}
if ((asked[0] == 'n') && (asked[1] == 'a') &&(asked[2] == 'm') &&(asked[3] == 'a')) {
force_special = 2;
}
if ((asked[0] == 'l') && (asked[1] == 'o') &&(asked[2] == 'o') &&(asked[3] == 'k')) {
force_special = 1;
}
if (((asked[0] == 'j') && (asked[1] == 'o') &&(asked[2] == 'b')) ||
((asked[0] == 'w') && (asked[1] == 'o') &&(asked[2] == 'r')&&(asked[3] == 'k')) ) {
force_special = 3;
}
if (force_special > 0) {
switch (force_special) {
case 1: case 2: case 3:
get_str(place_string1,120 + ((store_personality - 1) / 10),
((store_personality - 1) % 10) * 3 + 10 + force_special);
sprintf((char *) place_string1,"%s",data_store3->talk_strs[store_personality % 10 + 10 * force_special]);
oldstrnum1 = strnum1; oldstrnum2 = strnum2;
strnum1 = store_personality % 10 + 10 * force_special;
strnum2 = 0;
strcpy((char *) one_back1,(char *) old_str1);
strcpy((char *) one_back2,(char *) old_str2);
strcpy((char *) old_str1,(char *) place_string1);
strcpy((char *) old_str2,(char *) place_string2);
place_talk_str((char *) place_string1,(char *) place_string2,0,dummy_rect);
return;
break;
case 4: // buy button
asked[0] = 'p';asked[1] = 'u';asked[2] = 'r';asked[3] = 'c';
if (scan_for_response(asked) >= 0)
break;
asked[0] = 's';asked[1] = 'a';asked[2] = 'l';asked[3] = 'e';
if (scan_for_response(asked) >= 0)
break;
asked[0] = 'h';asked[1] = 'e';asked[2] = 'a';asked[3] = 'l';
if (scan_for_response(asked) >= 0)
break;
asked[0] = 'i';asked[1] = 'd';asked[2] = 'e';asked[3] = 'n';
if (scan_for_response(asked) >= 0)
break;
asked[0] = 't';asked[1] = 'r';asked[2] = 'a';asked[3] = 'i';
if (scan_for_response(asked) >= 0)
break;
break;
case 5: // sell button
asked[0] = 's';asked[1] = 'e';asked[2] = 'l';asked[3] = 'l';
if (scan_for_response(asked) >= 0)
break;
break;
case 8: // back 1
strnum1 = oldstrnum1; strnum2 = oldstrnum2;
strcpy((char *) place_string1,(char *) one_back1);
strcpy((char *) place_string2,(char *) one_back2);
strcpy((char *) one_back1,(char *) old_str1);
strcpy((char *) one_back2,(char *) old_str2);
strcpy((char *) old_str1,(char *) place_string1);
strcpy((char *) old_str2,(char *) place_string2);
place_talk_str((char *) place_string1,(char *) place_string2,0,dummy_rect);
return;
break;
}
}
which_talk_entry = scan_for_response(asked);
if ((which_talk_entry < 0) || (which_talk_entry > 59)) {
strcpy((char *) one_back1,(char *) old_str1);
strcpy((char *) one_back2,(char *) old_str2);
sprintf((char *) old_str2,"");
sprintf((char *) old_str1,"%s",data_store3->talk_strs[store_personality % 10 + 160]);
if (strlen((char *) old_str1) < 2)
sprintf((char *) old_str1,"You get no response.");
place_talk_str((char *) old_str1,(char *) old_str2,0,dummy_rect);
strnum1 = -1;
return;
}
ttype = talking.talk_nodes[which_talk_entry].type;
a = talking.talk_nodes[which_talk_entry].extras[0];
b = talking.talk_nodes[which_talk_entry].extras[1];
c = talking.talk_nodes[which_talk_entry].extras[2];
d = talking.talk_nodes[which_talk_entry].extras[3];
sprintf((char *) place_string1,"%s",data_store3->talk_strs[40 + which_talk_entry * 2]);
sprintf((char *) place_string2,"%s",data_store3->talk_strs[40 + which_talk_entry * 2 + 1]);
oldstrnum1 = strnum1; oldstrnum2 = strnum2;
strnum1 = 40 + which_talk_entry * 2; strnum2 = 40 + which_talk_entry * 2 + 1;
switch(ttype) {
case 0:
break;
case 1:
if (PSD[a][b] > c) {
strnum1 = strnum2;
strcpy((char *) place_string1,(char *) place_string2);
}
sprintf((char *) place_string2,"");
strnum2 = 0;
break;
case 2:
PSD[a][b] = 1;
break;
case 3:
if (party.gold < a) {
strnum1 = strnum2;
strcpy((char *) place_string1,(char *) place_string2);
}
else {
talk_end_forced = TRUE;
party.gold -= a;
put_pc_screen();
heal_party(30 * b);
restore_sp_party(25 * b);
party.age += 700;
c_town.p_loc.x = c;
c_town.p_loc.y = d;
center = c_town.p_loc;
}
strnum2 = 0;
sprintf((char *) place_string2,"");
break;
case 4:
if (day_reached((unsigned char) a,0) == TRUE) {
strnum1 = strnum2;
strcpy((char *) place_string1,(char *) place_string2);
}
sprintf((char *) place_string2,"");
strnum2 = 0;
break;
case 5:
if (day_reached((unsigned char) a,(unsigned char) b) == TRUE) {
strnum1 = strnum2;
strcpy((char *) place_string1,(char *) place_string2);
}
sprintf((char *) place_string2,"");
strnum2 = 0;
break;
case 6:
if (c_town.town_num != a) {
strnum1 = strnum2;
strcpy((char *) place_string1,(char *) place_string2);
}
sprintf((char *) place_string2,"");
strnum2 = 0;
break;
case 7:
c = minmax(1,30,c);
start_shop_mode(2,b,
b + c - 1,a,(char *)place_string1);
strnum1 = -1;
return;
case 8:
if ((get_pc = char_select_pc(1,0,"Train who?")) < 6) {
strnum1 = -1;
spend_xp(get_pc,1, 0);
}
sprintf((char *) place_string1, "You conclude your training.");
return;
case 9: case 10: case 11:
c = minmax(1,30,c);
start_shop_mode(ttype + 1,b,
b + c - 1,a,(char *)place_string1);
strnum1 = -1;
return;
case 12: //healer
start_shop_mode(3,c_town.monst.dudes[store_m_num].monst_start.extra1,
c_town.monst.dudes[store_m_num].monst_start.extra2,a,(char *)place_string1);
strnum1 = -1;
return;
break;
case 13: // sell weap
strnum1 = -1;
stat_screen_mode = 3;
put_item_screen(stat_window,1);
give_help(42,43,0);
break;
case 14: // sell armor
strnum1 = -1;
stat_screen_mode = 4;
put_item_screen(stat_window,1);
give_help(42,43,0);
break;
case 15: // sell misc
strnum1 = -1;
stat_screen_mode = 5;
put_item_screen(stat_window,1);
give_help(42,43,0);
break;
case 16: case 17: // ident enchant
strnum1 = -1;
stat_screen_mode = (ttype == 16) ? 2 : 6;
shop_identify_cost = a;
put_item_screen(stat_window,1);
give_help(ttype - 16 + 44,0,0);
break;
case 18:
if (party.gold < a) {
strnum1 = strnum2;
strcpy((char *) place_string1,(char *) place_string2);
}
else {
party.gold -= a;
put_pc_screen();
}
sprintf((char *) place_string2,"");
strnum2 = 0;
break;
case 19:
if ((sd_legit(b,c) == TRUE) && (PSD[b][c] == d)) {
sprintf((char *) place_string1, "You've already learned that.");
strnum1 = -1;
}
else if (party.gold < a) {
strnum1 = strnum2;
strcpy((char *) place_string1,(char *) place_string2);
}
else {
party.gold -= a;
put_pc_screen();
if (sd_legit(b,c) == TRUE)
PSD[b][c] = d;
else give_error("Invalid Stuff Done flag called in conversation.","",0);
}
strnum2 = 0;
sprintf((char *) place_string2,"");
break;
case 20:
if (party.gold < a) {
strnum1 = strnum2;
strnum2 = 0;
strcpy((char *) place_string1,(char *) place_string2);
sprintf((char *) place_string2,"");
break;
}
else {
for (i = b; i <= b + c; i++)
if ((i >= 0) && (i < 30) && (party.boats[i].property == TRUE)) {
party.gold -= a;
put_pc_screen();
party.boats[i].property = FALSE;
sprintf((char *) place_string2,"");
strnum2 = 0;
i = 1000;
}
if (i >= 1000)
break;
}
sprintf((char *) place_string1, "There are no boats left.");
sprintf((char *) place_string2,"");
strnum1 = -1;
strnum2 = -1;
break;
case 21:
if (party.gold < a) {
strnum1 = strnum2;
strnum2 = 0;
strcpy((char *) place_string1,(char *) place_string2);
sprintf((char *) place_string2,"");
break;
}
else {
for (i = b; i <= b + c; i++)
if ((i >= 0) && (i < 30) && (party.horses[i].property == TRUE)) {
party.gold -= a;
put_pc_screen();
party.horses[i].property = FALSE;
sprintf((char *) place_string2,"");
strnum2 = 0;
i = 1000;
}
if (i >= 1000)
break;
}
sprintf((char *) place_string1, "There are no horses left.");
sprintf((char *) place_string2,"");
strnum1 = -1;
strnum2 = -1;
break;
case 22:
if (party.spec_items[a] > 0) {
sprintf((char *) place_string1, "You already have it.");
strnum1 = -1;
}
else if (party.gold < b) {
strcpy((char *) place_string1,(char *) place_string2);
strnum1 = strnum2;
}
else {
party.gold -= b;
put_pc_screen();
party.spec_items[a] = 1;
}
strnum2 = 0;
sprintf((char *) place_string2,"");
break;
case 23:
start_shop_mode(5 + b,0,
9,a,(char *)place_string1);
strnum1 = -1;
return;
case 24:
if (party.can_find_town[b] > 0) {
}
else if (party.gold < a) {
strnum1 = strnum2;
strcpy((char *) place_string1,(char *) place_string2);
}
else {
party.gold -= a;
put_pc_screen();
party.can_find_town[b] = 1;
}
strnum2 = 0;
sprintf((char *) place_string2,"");
break;
case 25:
talk_end_forced = TRUE;
break;
case 26:
c_town.monst.dudes[store_m_num].attitude = 1;
c_town.monst.dudes[store_m_num].mobile = 1;
talk_end_forced = TRUE;
break;
case 27:
make_town_hostile();
talk_end_forced = TRUE;
break;
case 28:
c_town.monst.dudes[store_m_num].active = 0;
// Special killing effects
if (sd_legit(c_town.monst.dudes[store_m_num].monst_start.spec1,c_town.monst.dudes[store_m_num].monst_start.spec2) == TRUE)
party.stuff_done[c_town.monst.dudes[store_m_num].monst_start.spec1][c_town.monst.dudes[store_m_num].monst_start.spec2] = 1;
talk_end_forced = TRUE;
break;
case 29: // town special
run_special(7,2,a,c_town.p_loc,&s1,&s2,&s3);
// check s1 & s2 to see if we got diff str, and, if so, munch old strs
if ((s1 >= 0) || (s2 >= 0)) {
strnum1 = -1;
strnum2 = -1;
sprintf((char *) place_string1,"");
sprintf((char *) place_string2,"");
}
get_strs((char *) place_string1,(char *) place_string2,2,s1,s2);
//strnum1 = -1;
//strnum2 = -1;
if (s1 >= 0) strnum1 = 2000 + s1;
if (s2 >= 0) strnum2 = 2000 + s2;
put_pc_screen();
put_item_screen(stat_window,0);
break;
case 30: // scen special
run_special(7,0,a,c_town.p_loc,&s1,&s2,&s3);
// check s1 & s2 to see if we got diff str, and, if so, munch old strs
if ((s1 >= 0) || (s2 >= 0)) {
strnum1 = -1;
strnum2 = -1;
sprintf((char *) place_string1,"");
sprintf((char *) place_string2,"");
}
get_strs((char *) place_string1,(char *) place_string2,0,s1,s2);
//strnum1 = -1;
//strnum2 = -1;
if (s1 >= 0) strnum1 = 3000 + s1;
if (s2 >= 0) strnum2 = 3000 + s2;
put_pc_screen();
put_item_screen(stat_window,0);
break;
}
strcpy((char *) one_back1,(char *) old_str1);
strcpy((char *) one_back2,(char *) old_str2);
strcpy((char *) old_str1,(char *) place_string1);
strcpy((char *) old_str2,(char *) place_string2);
place_talk_str((char *) old_str1,(char *) old_str2,0,dummy_rect);
}
void handle_talk_spec(short ttype,char *place_string1,char *place_string2) ////
{
short s1 = 1, s2 = 0,num_horns = 0, num_items = 0,i,j;
item_record_type store_i;
strnum1 = 1000 + s1;
get_str(place_string1,15,s1);
if (s2 > 0) {
strnum2 = 1000 + s2;
get_str(place_string2,15,s2);
}
print_buf();
put_pc_screen();
}
void store_responses()
{}
void sign_event_filter (short item_hit)
{
dialog_not_toast = FALSE;
}
void do_sign(short town_num, short which_sign, short sign_type,location sign_loc)
//town_num; // Will be 0 - 200 for town, 200 - 290 for outdoors
//short sign_type; // terrain type
{
short item_hit;
char sign_text[256];
location view_loc;
view_loc = (is_out()) ? party.p_loc : c_town.p_loc;
make_cursor_sword();
cd_create_dialog(1014,mainPtr);
store_sign_mode = sign_type;
if (terrain_pic[sign_type] < 1000)
csp(1014,3,terrain_pic[sign_type]);
else csp(1014,3,94);
if (town_num >= 200) {
town_num -= 200;
load_outdoors(town_num % scenario.out_width, town_num / scenario.out_width,party.i_w_c.x,party.i_w_c.y,
1,which_sign + 100,(char *) sign_text);
}
else {
sprintf((char *) sign_text,"%s",data_store->town_strs[120 + which_sign]);
}
csit(1014,2,(char *) sign_text);
while (dialog_not_toast)
ModalDialog();
cd_kill_dialog(1014,0);
}
void give_reg_info_event_filter (short item_hit)
{
short i;
char place_str[256];
switch (item_hit) {
case 1:
dialog_not_toast = FALSE;
break;
}
}
void give_reg_info()
{
long val_for_text;
short i,item_hit;
char place_str[256];
make_cursor_sword();
cd_create_dialog_parent_num(1073,0);
while (dialog_not_toast)
ModalDialog(); cd_kill_dialog(1073,0);
}
void do_registration_event_filter (short item_hit)
{
char get_text[256];
long dummy;
cd_get_text_edit_str(1075,(char *) get_text);
dialog_answer = 0;
sscanf((char *) get_text,"%d",&dialog_answer);
dialog_not_toast = FALSE;
}
void do_registration()
{
short item_hit;
char sign_text[256];
location view_loc;
make_cursor_sword();
cd_create_dialog(1075,mainPtr);
cdsin(1075,7,(short) register_flag);
cd_set_edit_focus();
while (dialog_not_toast)
ModalDialog();
cd_kill_dialog(1075,0);
if (dialog_answer == 1)
SysBeep(30);
if (dialog_answer == (short) init_data(register_flag)) {
play_sound(40);
registered = TRUE;
build_data_file(2);
FCD(1078,0);
//save_prefs();
//check_pref_file();
}
else {
SysBeep(30);
FCD(1077,0);
}
}
Boolean prefs_event_filter (short item_hit)
{
Boolean done_yet = FALSE,did_cancel = FALSE;
short i;
RECT windRECT;
switch (item_hit) {
case 1:
done_yet = TRUE;
dialog_not_toast = FALSE;
break;
case 2:
done_yet = TRUE;
dialog_not_toast = FALSE;
did_cancel = TRUE;
break;
case 50: case 52: case 18: case 20: case 22: case 24: case 27: case 38: case 40: case 43: case 45:
cd_set_led(1099,item_hit,1 - cd_get_led(1099,item_hit));
break;
case 29:
cd_set_led(1099,29,1);
break;
case 32: case 34: case 36: case 47:
cd_set_led(1099,32,(item_hit == 32) ? 1 : 0);
cd_set_led(1099,34,(item_hit == 34) ? 1 : 0);
cd_set_led(1099,36,(item_hit == 36) ? 1 : 0);
cd_set_led(1099,47,(item_hit == 47) ? 1 : 0);
break;
default:
cd_set_led(1099,4 + cur_display_mode,0);
cur_display_mode = item_hit - 4;
cd_set_led(1099,4 + cur_display_mode,1);
break;
}
if (done_yet== TRUE) {
if (did_cancel == FALSE) {
display_mode = cur_display_mode;
party.stuff_done[306][0] = cd_get_led(1099,18);
party.stuff_done[306][1] = cd_get_led(1099,20);
play_sounds = 1 - party.stuff_done[306][1];
party.stuff_done[306][2] = cd_get_led(1099,22);
party.stuff_done[306][3] = cd_get_led(1099,24);
party.stuff_done[306][4] = cd_get_led(1099,27);
party.stuff_done[306][7] = cd_get_led(1099,38);
party.stuff_done[306][8] = cd_get_led(1099,40);
party.stuff_done[306][9] = cd_get_led(1099,43);
party.stuff_done[296][0] = cd_get_led(1099,45);
party.stuff_done[305][6] = cd_get_led(1099,50);
party.stuff_done[305][5] = cd_get_led(1099,52);
if (cd_get_led(1099,32) == 1)
PSD[306][6] = 0;
if (cd_get_led(1099,34) == 1)
PSD[306][6] = 1;
if (cd_get_led(1099,36) == 1)
PSD[306][6] = 2;
if (cd_get_led(1099,47) == 1)
PSD[306][6] = 3;
if (cd_get_led(1099,29) == 1)
for (i = 0; i < 120; i++)
party.help_received[i] = 0;
if (display_mode < 5)
max_window(mainPtr);
else {
GetWindowRect(GetDesktopWindow(),&windRECT);
MoveWindow(mainPtr,(windRECT.right - (588 + 10)) / 2,
(windRECT.bottom - (425 + 52)) / 2 ,
588 + 10,425 + 52,TRUE);
}
}
//play_sounds = 1 - party.stuff_done[306][1];
save_maps = 1 - party.stuff_done[306][0];
give_delays = party.stuff_done[306][2];
build_data_file(2);
}
return FALSE;
}
void pick_preferences()
{
short item_hit;
cur_display_mode = display_mode;
make_cursor_sword();
cd_create_dialog(1099,mainPtr);
cd_set_led(1099,4 + cur_display_mode,1);
cd_set_led(1099,18,(party.stuff_done[306][0] != 0) ? 1 : 0);
cd_set_led(1099,20,(play_sounds == FALSE) ? 1 : 0);
cd_set_led(1099,22,(party.stuff_done[306][2] != 0) ? 1 : 0);
cd_set_led(1099,24,(party.stuff_done[306][3] != 0) ? 1 : 0);
cd_set_led(1099,27,(party.stuff_done[306][4] != 0) ? 1 : 0);
cd_set_led(1099,38,(party.stuff_done[306][7] != 0) ? 1 : 0);
cd_set_led(1099,40,(party.stuff_done[306][8] != 0) ? 1 : 0);
cd_set_led(1099,43,(party.stuff_done[306][9] != 0) ? 1 : 0);
cd_set_led(1099,45,(party.stuff_done[296][0] != 0) ? 1 : 0);
cd_set_led(1099,50,(party.stuff_done[305][6] != 0) ? 1 : 0);
cd_set_led(1099,52,(party.stuff_done[305][5] != 0) ? 1 : 0);
cd_set_flag(1099,3,1);
if (PSD[306][6] == 3)
cd_set_led(1099,47,1);
else cd_set_led(1099,32 + PSD[306][6] * 2,1);
if (party.help_received[55] == 0) {
cd_initial_draw(1099);
give_help(55,0,1099);
}
while (dialog_not_toast)
ModalDialog();
cd_kill_dialog(1099,0);
adjust_window_mode();
}
void put_party_stats()
{
short i;
char pc_str[256];
for (i = 0; i < 6; i++) {
if (adven[i].main_status > 0) {
cd_set_item_text(989,5 + 5 * i,adven[i].name);
cd_activate_item(989,7 + 5 * i,1);
cd_activate_item(989,8 + 5 * i,1);
cd_set_flag(989,6 + 5 * i,96);
cd_activate_item(989,35 + i,1);
cd_activate_item(989,42 + i,1);
csp(989,42 + i,800 + adven[i].which_graphic);
}
else {
cd_set_item_text(989,5 + 5 * i,"Empty.");
cd_activate_item(989,7 + 5 * i,0);
cd_activate_item(989,8 + 5 * i,0);
cd_set_flag(989,6 + 5 * i,98);
cd_activate_item(989,35 + i,0);
cd_activate_item(989,42 + i,0);
}
}
}
void edit_party_event_filter (short item_hit)
{
short i = 0,j = 0,which_pc;
switch (item_hit) {
case 1:
dialog_not_toast = FALSE;
break;
case 41:
party.help_received[22] = 0;
give_help(222,23,989);
return;
case 5: case 10: case 15: case 20: case 25: case 30:
which_pc = (item_hit - 5) / 5;
if (adven[which_pc].main_status == 0) {
//give_help(56,0,989);
//create_pc(which_pc,989);
//cd_initial_draw(989); // extra redraw, just in case
}
else pick_pc_name(which_pc,989);
put_party_stats();
break;
case 7: case 12: case 17: case 22: case 27: case 32:
which_pc = (item_hit - 7) / 5;
pick_race_abil(&adven[which_pc],0,989);
put_party_stats();
break;
case 8: case 13: case 18: case 23: case 28: case 33:
which_pc = (item_hit - 8) / 5;
spend_xp(which_pc,0,989);
put_party_stats();
break;
case 35: case 36: case 37: case 38: case 39: case 40:
which_pc = item_hit - 35;
if (adven[which_pc].main_status <= 0)
break;
if (adven[which_pc].main_status != 0)
pick_pc_graphic(which_pc,1,989);
put_party_stats();
break;
case 6: case 11: case 16: case 21: case 26: case 31:
which_pc = (item_hit - 6) / 5;
if (adven[which_pc].main_status != 0) {
if (FCD(1053,989) == 2)
adven[which_pc].main_status = 0;
put_party_stats();
}
else {
give_help(56,0,989);
create_pc(which_pc,989);
put_party_stats();
cd_initial_draw(989); // extra redraw, just in case
}
break;
// case 7: case 12: case 17: case 22: case 27: case 32:
}
}
void edit_party(short can_create,short can_cancel)
{
short item_hit;
Boolean munch_pc_graphic = FALSE;
make_cursor_sword();
if (pcs_gworld == NULL) {
munch_pc_graphic = TRUE;
pcs_gworld = load_pict(902,main_dc);
}
cd_create_dialog(989,mainPtr);
put_party_stats();
if (party.help_received[22] == 0) {
cd_initial_draw(989);
give_help(22,23,989);
}
while (dialog_not_toast)
ModalDialog();
cd_kill_dialog(989,0);
if (munch_pc_graphic == TRUE) {
DisposeGWorld(pcs_gworld);
pcs_gworld = NULL;
}
if (adven[current_pc].main_status != 1)
current_pc = first_active_pc();
}
void tip_of_day_event_filter (short item_hit)
{
short i;
char place_str[256];
switch (item_hit) {
case 1:
dialog_not_toast = FALSE;
break;
case 5:
store_tip_page_on++;
if (store_tip_page_on == NUM_HINTS)
store_tip_page_on = 0;
get_str(place_str,12,50 + store_tip_page_on);
csit(958,3,(char *) place_str);
break;
case 7:
give_intro_hint = 1 - give_intro_hint;
cd_set_led(958,7,give_intro_hint);
break;
}
}
void tip_of_day()
{
long val_for_text;
short i,item_hit;
char place_str[256];
store_tip_page_on = get_ran(1,0,NUM_HINTS - 1);
make_cursor_sword();
cd_create_dialog_parent_num(958,0);
get_str(place_str,12,50 + store_tip_page_on);
csit(958,3,(char *) place_str);
cd_set_led(958,7,give_intro_hint);
while (dialog_not_toast)
ModalDialog();
cd_kill_dialog(958,0);
build_data_file(2);
}
void max_window(HWND window)
{
RECT main_rect,wind_rect;
short width,height;
cursor_shown = TRUE;
showcursor(TRUE);
GetWindowRect(GetDesktopWindow(),&main_rect);
GetWindowRect(window,&wind_rect);
width = main_rect.right - main_rect.left;
height = main_rect.bottom - main_rect.top;
MoveWindow(window,0,0,width,height,TRUE);
}
void put_scen_info()
{
short i;
char place_str[256];
char *ratings[] = {"G","PG","R","NC-17"};
char *difficulty[] = {"Low","Medium","High","Very High"};
for (i = 0; i < 3; i++)
if (scen_headers[store_scen_page_on * 3 + i].flag1 != 0) {
cd_set_pict(947, 6 + i * 3,1600 + scen_headers[store_scen_page_on * 3 + i].intro_pic);
sprintf((char *) place_str,
"%s v%d.%d.%d - | Difficulty: %s, Rating: %s |%s |%s",
data_store2->scen_header_strs[store_scen_page_on * 3 + i][0],
(short) scen_headers[store_scen_page_on * 3 + i].ver[0],
(short) scen_headers[store_scen_page_on * 3 + i].ver[1],
(short) scen_headers[store_scen_page_on * 3 + i].ver[2],
difficulty[scen_headers[store_scen_page_on * 3 + i].difficulty],
ratings[scen_headers[store_scen_page_on * 3 + i].default_ground],
data_store2->scen_header_strs[store_scen_page_on * 3 + i][1],
data_store2->scen_header_strs[store_scen_page_on * 3 + i][2]);
csit(947,7 + i * 3,(char *) place_str);
cd_activate_item(947,8 + i * 3,1);
}
else {
cd_set_pict(947, 6 + i * 3,950);
csit(947,7 + i * 3,"");
cd_activate_item(947,8 + i * 3,0);
}
}
void pick_a_scen_event_filter (short item_hit)
{
short i;
char place_str[256];
switch (item_hit) {
case 1:
dialog_answer = -1;
dialog_not_toast = FALSE;
break;
case 3: case 4:
if (item_hit == 3) {
if (store_scen_page_on == 0)
store_scen_page_on = (store_num_scen - 1) / 3;
else store_scen_page_on--;
}
else {
if (store_scen_page_on == (store_num_scen - 1) / 3)
store_scen_page_on = 0;
else store_scen_page_on++;
}
put_scen_info();
break;
case 8: case 11: case 14:
dialog_answer = ((item_hit - 8) / 3) + store_scen_page_on * 3;
dialog_not_toast = FALSE;
break;
}
}
short pick_a_scen()
{
long val_for_text;
short i,item_hit;
char place_str[256];
build_scen_headers();
store_num_scen = 0;
for (i = 0; i < 25; i++)
if (scen_headers[i].flag1 != 0)
store_num_scen++;
store_scen_page_on = 0;
if (store_num_scen == 0) {
FCD(868,0);
return -1;
}
make_cursor_sword();
cd_create_dialog_parent_num(947,0);
put_scen_info();
if (store_num_scen <= 3) {
cd_activate_item(947,3,0);
cd_activate_item(947,4,0);
}
while (dialog_not_toast)
ModalDialog();
cd_kill_dialog(947,0);
return dialog_answer;
}
void pick_prefab_scen_event_filter (short item_hit)
{
short i;
char place_str[256];
switch (item_hit) {
case 1:
dialog_answer = -1;
dialog_not_toast = FALSE;
break;
case 6: case 9: case 12:
dialog_answer = ((item_hit - 6) / 3);
dialog_not_toast = FALSE;
break;
}
}
short pick_prefab_scen()
{
long val_for_text;
short i,item_hit;
char place_str[256];
make_cursor_sword();
cd_create_dialog_parent_num(869,0);
cd_activate_item(869,2,0);
while (dialog_not_toast)
ModalDialog();
cd_kill_dialog(869,0);
return dialog_answer;
}
void give_password_filter (short item_hit)
{
char str[256];
short i;
switch (item_hit) {
default:
dialog_not_toast = FALSE;
break;
}
}
Boolean enter_password()
// ignore parent in Mac version
{
short town_strs_hit,i,store_dialog_answer;
char temp_str[256],str2[256];
cd_create_dialog_parent_num(823,0);
cd_set_text_edit_str(823,"");
while (dialog_not_toast)
ModalDialog();
cd_get_text_edit_str(823,(char *) temp_str);
i = wd_to_pwd(temp_str);
cd_kill_dialog(823,0);
return check_p(i);
}
short wd_to_pwd(char *str)
{
char pwd[8] = "aaaaaa";
short i;
long val = 0,pow[6] = {1,10,100,1000,9999,99999};
for (i = 0; i < 6; i++) {
if (str[i] == 0)
i = 6;
else {
if ((str[i] >= 65) && (str[i] <= 90))
pwd[i] = str[i] + 32;
else if ((str[i] >= 48) && (str[i] <= 57))
pwd[i] = str[i] + 49;
else if ((str[i] >= 97) && (str[i] <= 122))
pwd[i] = str[i];
}
}
for (i = 0; i < 6; i++)
val = val + pow[i] * (long) (pwd[i] - 97);
val = val % 30000;
return (short) val;
}