-+-+-+-+-+-+-+-+ START OF PART 34 -+-+-+-+-+-+-+-+ X else if (stat < 117)`09return( 5); X else`09`09`09return( 6); X`7D X X X/* Prints character-screen info`09`09`09`09-RAK-`09*/ Xvoid prt_stat_block() X`7B X register int32u status; X register struct misc *m_ptr; X register int i; X X m_ptr = &py.misc; X prt_field(race`5Bpy.misc.prace`5D.trace,`09 2, STAT_COLUMN); X prt_field(class`5Bpy.misc.pclass`5D.title, 3, STAT_COLUMN); X prt_field(title_string(),`09`09 4, STAT_COLUMN); X for (i = 0; i < 6; i++) X prt_stat (i); X prt_num ("LEV ", (int)m_ptr->lev, 13, STAT_COLUMN); X prt_lnum("EXP ", m_ptr->exp,`09 14, STAT_COLUMN); X prt_num ("MANA", m_ptr->cmana,`09 15, STAT_COLUMN); X prt_num ("MHP ", m_ptr->mhp,`09 16, STAT_COLUMN); X prt_num ("CHP ", m_ptr->chp,`09 17, STAT_COLUMN); X prt_num ("AC ", m_ptr->dis_ac, 19, STAT_COLUMN); X prt_lnum("GOLD", m_ptr->au,`09 20, STAT_COLUMN); X prt_winner(); X status = py.flags.status; X if ((PY_HUNGRY`7CPY_WEAK) & status) X prt_hunger(); X if (PY_BLIND & status) X prt_blind(); X if (PY_CONFUSED & status) X prt_confused(); X if (PY_FEAR & status) X prt_afraid(); X if (PY_POISONED & status) X prt_poisoned(); X if ((PY_SEARCH`7CPY_REST) & status) X prt_state (); X /* if speed non zero, print it, modify speed if Searching */ X if (py.flags.speed - ((PY_SEARCH & status) >> 8) != 0) X prt_speed (); X /* display the study field */ X prt_study(); X`7D X X X/* Draws entire screen`09`09`09`09`09-RAK-`09*/ Xvoid draw_cave() X`7B X clear_screen (); X prt_stat_block(); X prt_map(); X prt_depth(); X`7D X X X/* Prints the following information on the screen.`09-JWT-`09*/ Xvoid put_character() X`7B X register struct misc *m_ptr; X X m_ptr = &py.misc; X clear_screen (); X put_buffer ("Name :", 2, 1); X put_buffer ("Race :", 3, 1); X put_buffer ("Sex :", 4, 1); X put_buffer ("Class :", 5, 1); X if (character_generated) X `7B X put_buffer (m_ptr->name, 2, 15); X put_buffer (race`5Bm_ptr->prace`5D.trace, 3, 15); X put_buffer ((m_ptr->male ? "Male" : "Female"), 4, 15); X put_buffer (class`5Bm_ptr->pclass`5D.title, 5, 15); X `7D X`7D X X X/* Prints the following information on the screen.`09-JWT-`09*/ Xvoid put_stats() X`7B X register struct misc *m_ptr; X register int i; X vtype buf; X X m_ptr = &py.misc; X for (i = 0; i < 6; i++) X `7B X cnv_stat (py.stats.use_stat`5Bi`5D, buf); X put_buffer (stat_names`5Bi`5D, 2+i, 61); X put_buffer (buf, 2+i, 66); X if (py.stats.max_stat`5Bi`5D > py.stats.cur_stat`5Bi`5D) X`09`7B X`09 cnv_stat (py.stats.max_stat`5Bi`5D, buf); X`09 put_buffer (buf, 2+i, 73); X`09`7D X `7D X prt_num("+ To Hit ", m_ptr->dis_th, 9, 1); X prt_num("+ To Damage ", m_ptr->dis_td, 10, 1); X prt_num("+ To AC ", m_ptr->dis_tac, 11, 1); X prt_num(" Total AC ", m_ptr->dis_ac, 12, 1); X`7D X X X/* Returns a rating of x depending on y`09`09`09-JWT-`09*/ Xchar *likert(x, y) Xint x, y; X`7B X switch((x/y)) X `7B X case -3: case -2: case -1: return("Very Bad"); X case 0: case 1:`09`09 return("Bad"); X case 2:`09`09`09 return("Poor"); X case 3: case 4:`09`09 return("Fair"); X case 5:`09`09`09 return("Good"); X case 6:`09`09`09 return("Very Good"); X case 7: case 8:`09`09 return("Excellent"); X default:`09`09`09 return("Superb"); X `7D X`7D X X X/* Prints age, height, weight, and SC`09`09`09-JWT-`09*/ Xvoid put_misc1() X`7B X register struct misc *m_ptr; X X m_ptr = &py.misc; X prt_num("Age ", (int)m_ptr->age, 2, 38); X prt_num("Height ", (int)m_ptr->ht, 3, 38); X prt_num("Weight ", (int)m_ptr->wt, 4, 38); X prt_num("Social Class ", (int)m_ptr->sc, 5, 38); X`7D X X X/* Prints the following information on the screen.`09-JWT-`09*/ Xvoid put_misc2() X`7B X register struct misc *m_ptr; X X m_ptr = &py.misc; X prt_num("Level ", (int)m_ptr->lev, 9, 29); X prt_lnum("Experience ", m_ptr->exp, 10, 29); X prt_lnum("Max Exp ", m_ptr->max_exp, 11, 29); X if (m_ptr->lev == MAX_PLAYER_LEVEL) X prt ("Exp to Adv.: ******", 12, 29); X else X prt_lnum("Exp to Adv.", (int32)(player_exp`5Bm_ptr->lev-1`5D X`09`09`09`09 * m_ptr->expfact / 100), 12, 29); X prt_lnum("Gold ", m_ptr->au, 13, 29); X prt_num("Max Hit Points ", m_ptr->mhp, 9, 52); X prt_num("Cur Hit Points ", m_ptr->chp, 10, 52); X prt_num("Max Mana ", m_ptr->mana, 11, 52); X prt_num("Cur Mana ", m_ptr->cmana, 12, 52); X`7D X X X/* Prints ratings on certain abilities`09`09`09-RAK-`09*/ Xvoid put_misc3() X`7B X int xbth, xbthb, xfos, xsrh, xstl, xdis, xsave, xdev; X vtype xinfra; X register struct misc *p_ptr; X X clear_from(14); X p_ptr = &py.misc; X xbth`09= p_ptr->bth + p_ptr->ptohit*BTH_PLUS_ADJ X + (class_level_adj`5Bp_ptr->pclass`5D`5BCLA_BTH`5D * p_ptr->lev); X xbthb = p_ptr->bthb + p_ptr->ptohit*BTH_PLUS_ADJ X + (class_level_adj`5Bp_ptr->pclass`5D`5BCLA_BTHB`5D * p_ptr->lev); X /* this results in a range from 0 to 29 */ X xfos`09= 40 - p_ptr->fos; X if (xfos < 0)`09 xfos = 0; X xsrh`09= p_ptr->srh; X /* this results in a range from 0 to 9 */ X xstl`09= p_ptr->stl + 1; X xdis`09= p_ptr->disarm + 2*todis_adj() + stat_adj(A_INT) X + (class_level_adj`5Bp_ptr->pclass`5D`5BCLA_DISARM`5D * p_ptr->lev / 3); X xsave = p_ptr->save + stat_adj(A_WIS) X + (class_level_adj`5Bp_ptr->pclass`5D`5BCLA_SAVE`5D * p_ptr->lev / 3); X xdev`09= p_ptr->save + stat_adj(A_INT) X + (class_level_adj`5Bp_ptr->pclass`5D`5BCLA_DEVICE`5D * p_ptr->lev / 3); X X (void) sprintf(xinfra, "%d feet", py.flags.see_infra*10); X X put_buffer ("(Miscellaneous Abilities)", 15, 25); X put_buffer ("Fighting :", 16, 1); X put_buffer (likert (xbth, 12), 16, 15); X put_buffer ("Bows/Throw :", 17, 1); X put_buffer (likert (xbthb, 12), 17, 15); X put_buffer ("Saving Throw:", 18, 1); X put_buffer (likert (xsave, 6), 18, 15); X X put_buffer ("Stealth :", 16, 28); X put_buffer (likert (xstl, 1), 16, 42); X put_buffer ("Disarming :", 17, 28); X put_buffer (likert (xdis, 8), 17, 42); X put_buffer ("Magic Device:", 18, 28); X put_buffer (likert (xdev, 6), 18, 42); X X put_buffer ("Perception :", 16, 55); X put_buffer (likert (xfos, 3), 16, 69); X put_buffer ("Searching :", 17, 55); X put_buffer (likert (xsrh, 6), 17, 69); X put_buffer ("Infra-Vision:", 18, 55); X put_buffer (xinfra, 18, 69); X`7D X X X/* Used to display the character on the screen.`09`09-RAK-`09*/ Xvoid display_char() X`7B X put_character(); X put_misc1(); X put_stats(); X put_misc2(); X put_misc3(); X`7D X X X/* Gets a name for the character`09`09`09-JWT-`09*/ Xvoid get_name() X`7B X prt("Enter your player's name `5Bpress when finished`5D", 21, 2) V; X put_buffer (&blank_string`5BBLANK_LENGTH-23`5D, 2, 15); X#if defined(MAC) `7C`7C defined(AMIGA) X /* Force player to give a name, would be nice to get name from chooser X (STR -16096), but that name might be too long */ X while (!get_string(py.misc.name, 2, 15, 23) `7C`7C py.misc.name`5B0`5D == V 0); X#else X if (!get_string(py.misc.name, 2, 15, 23) `7C`7C py.misc.name`5B0`5D == 0) X `7B X user_name (py.misc.name); X put_buffer (py.misc.name, 2, 15); X `7D X#endif X clear_from (20); X#ifdef MAC X /* Use the new name to set save file default name. */ X initsavedefaults(); X#endif X`7D X X X/* Changes the name of the character`09`09`09-JWT-`09*/ Xvoid change_name() X`7B X register char c; X register int flag; X#ifndef MAC X vtype temp; X#endif X X flag = FALSE; X display_char(); X do X `7B X prt( "ile character description. hange character name.", 21, 2); X c = inkey(); X switch(c) X`09`7B X`09case 'c': X`09 get_name(); X`09 flag = TRUE; X`09 break; X`09case 'f': X#ifdef MAC X`09 /* On mac, file_character() gets filename with std file dialog. */ X`09 if (file_character ()) X`09 flag = TRUE; X#else X`09 prt ("File name:", 0, 0); X`09 if (get_string (temp, 0, 10, 60) && temp`5B0`5D) X`09 if (file_character (temp)) X`09 flag = TRUE; X#endif X`09 break; X`09case ESCAPE: case ' ': X`09case '\n': case '\r': X`09 flag = TRUE; X`09 break; X`09default: X`09 bell (); X`09 break; X`09`7D X `7D X while (!flag); X`7D X X X/* Destroy an item in the inventory`09`09`09-RAK-`09*/ Xvoid inven_destroy(item_val) Xint item_val; X`7B X register int j; X register inven_type *i_ptr; X#ifdef ATARIST_MWC X int32u holder; X#endif X X i_ptr = &inventory`5Bitem_val`5D; X if ((i_ptr->number > 1) && (i_ptr->subval <= ITEM_SINGLE_STACK_MAX)) X `7B X i_ptr->number--; X inven_weight -= i_ptr->weight; X `7D X else X `7B X inven_weight -= i_ptr->weight*i_ptr->number; X for (j = item_val; j < inven_ctr-1; j++) X`09inventory`5Bj`5D = inventory`5Bj+1`5D; X invcopy(&inventory`5Binven_ctr-1`5D, OBJ_NOTHING); X inven_ctr--; X `7D X#ifdef ATARIST_MWC X py.flags.status `7C= (holder = PY_STR_WGT); X#else X py.flags.status `7C= PY_STR_WGT; X#endif X`7D X X X/* Copies the object in the second argument over the first argument. X However, the second always gets a number of one except for ammo etc. */ Xvoid take_one_item (s_ptr, i_ptr) Xregister inven_type *s_ptr, *i_ptr; X`7B X *s_ptr = *i_ptr; X if ((s_ptr->number > 1) && (s_ptr->subval >= ITEM_SINGLE_STACK_MIN) X && (s_ptr->subval <= ITEM_SINGLE_STACK_MAX)) X s_ptr->number = 1; X`7D X X X/* Drops an item from inventory to given location`09-RAK-`09*/ Xvoid inven_drop(item_val, drop_all) Xregister int item_val, drop_all; X`7B X int i; X register inven_type *i_ptr; X vtype prt2; X bigvtype prt1; X#ifdef ATARIST_MWC X int32u holder; X#endif X X if (cave`5Bchar_row`5D`5Bchar_col`5D.tptr != 0) X (void) delete_object(char_row, char_col); X i = popt (); X i_ptr = &inventory`5Bitem_val`5D; X t_list`5Bi`5D = *i_ptr; X cave`5Bchar_row`5D`5Bchar_col`5D.tptr = i; X X if (item_val >= INVEN_WIELD) X takeoff (item_val, -1); X else X `7B X if (drop_all `7C`7C i_ptr->number == 1) X`09`7B X`09 inven_weight -= i_ptr->weight*i_ptr->number; X`09 inven_ctr--; X`09 while (item_val < inven_ctr) X`09 `7B X`09 inventory`5Bitem_val`5D = inventory`5Bitem_val+1`5D; X`09 item_val++; X`09 `7D X`09 invcopy(&inventory`5Binven_ctr`5D, OBJ_NOTHING); X`09`7D X else X`09`7B X`09 t_list`5Bi`5D.number = 1; X`09 inven_weight -= i_ptr->weight; X`09 i_ptr->number--; X`09`7D X objdes (prt1, &t_list`5Bi`5D, TRUE); X (void) sprintf (prt2, "Dropped %s", prt1); X msg_print (prt2); X `7D X#ifdef ATARIST_MWC X py.flags.status `7C= (holder = PY_STR_WGT); X#else X py.flags.status `7C= PY_STR_WGT; X#endif X`7D X X X/* Destroys a type of item on a given percent chance`09-RAK-`09*/ Xint inven_damage(typ, perc) Xint (*typ)(); Xregister int perc; X`7B X register int i, j; X X j = 0; X for (i = 0; i < inven_ctr; i++) X if ((*typ)(&inventory`5Bi`5D) && (randint(100) < perc)) X `7B X`09inven_destroy(i); X`09j++; X `7D X return(j); X`7D X X X/* Computes current weight limit`09`09`09-RAK-`09*/ Xint weight_limit() X`7B X register int weight_cap; X X weight_cap = py.stats.use_stat`5BA_STR`5D * PLAYER_WEIGHT_CAP + py.misc.wt V; X if (weight_cap > 3000) weight_cap = 3000; X return(weight_cap); X`7D X X X/* this code must be identical to the inven_carry() code below */ Xint inven_check_num (t_ptr) Xregister inven_type *t_ptr; X`7B X register int i; X X if (inven_ctr < INVEN_WIELD) X return TRUE; X else if (t_ptr->subval >= ITEM_SINGLE_STACK_MIN) X for (i = 0; i < inven_ctr; i++) X if (inventory`5Bi`5D.tval == t_ptr->tval && X`09 inventory`5Bi`5D.subval == t_ptr->subval && X`09 /* make sure the number field doesn't overflow */ X`09 ((int)inventory`5Bi`5D.number + (int)t_ptr->number < 256) && X`09 /* they always stack (subval < 192), or else they have same p1 */ X`09 ((t_ptr->subval < ITEM_GROUP_MIN) `7C`7C (inventory`5Bi`5D.p1 == t_ptr- V>p1)) X`09 /* only stack if both or neither are identified */ X`09 && (known1_p(&inventory`5Bi`5D) == known1_p(t_ptr))) X`09return TRUE; X return FALSE; X`7D X X/* return FALSE if picking up an object would change the players speed */ Xint inven_check_weight(i_ptr) Xregister inven_type *i_ptr; X`7B X register int i, new_inven_weight; X X i = weight_limit(); X new_inven_weight = i_ptr->number*i_ptr->weight + inven_weight; X if (i < new_inven_weight) X i = new_inven_weight / (i + 1); X else X i = 0; X X if (pack_heavy != i) X return FALSE; X else X return TRUE; X`7D X X X/* Are we strong enough for the current pack and weapon? -CJS-`09 */ Xvoid check_strength() X`7B X register int i; X register inven_type *i_ptr; X#ifdef ATARIST_MWC X int32u holder; X#endif X X i_ptr = &inventory`5BINVEN_WIELD`5D; X if (i_ptr->tval != TV_NOTHING X && (py.stats.use_stat`5BA_STR`5D*15 < i_ptr->weight)) X `7B X if (weapon_heavy == FALSE) X`09`7B X`09 msg_print("You have trouble wielding such a heavy weapon."); X`09 weapon_heavy = TRUE; X`09 calc_bonuses(); X`09`7D X `7D X else if (weapon_heavy == TRUE) X `7B X weapon_heavy = FALSE; X if (i_ptr->tval != TV_NOTHING) X`09msg_print("You are strong enough to wield your weapon."); X calc_bonuses(); X `7D X i = weight_limit(); X if (i < inven_weight) X i = inven_weight / (i+1); X else X i = 0; X if (pack_heavy != i) X `7B X if (pack_heavy < i) X`09msg_print("Your pack is so heavy that it slows you down."); X else X`09msg_print("You move more easily under the weight of your pack."); X change_speed(i - pack_heavy); X pack_heavy = i; X `7D X#ifdef ATARIST_MWC X py.flags.status &= `7E(holder = PY_STR_WGT); X#else X py.flags.status &= `7EPY_STR_WGT; X#endif X`7D X X X/* Add an item to players inventory. Return the`09*/ X/* item position for a description if needed.`09 -RAK- */ X/* this code must be identical to the inven_check_num() code above */ Xint inven_carry(i_ptr) Xregister inven_type *i_ptr; X`7B X register int locn, i; X register int typ, subt; +-+-+-+-+-+-+-+- END OF PART 34 +-+-+-+-+-+-+-+-