-+-+-+-+-+-+-+-+ START OF PART 33 -+-+-+-+-+-+-+-+ X (void) sprintf(out_val, "%s: %6ld", header, num); X put_buffer(out_val, row, column); X`7D X X/* Print number with header at given row, column`09-RAK-`09*/ Xstatic void prt_num(header, num, row, column) Xchar *header; Xint num, row, column; X`7B X vtype out_val; X X (void) sprintf(out_val, "%s: %6d", header, num); X put_buffer(out_val, row, column); X`7D X X/* Print long number at given row, column */ Xstatic void prt_long(num, row, column) Xint32 num; Xint row, column; X`7B X vtype out_val; X X (void) sprintf(out_val, "%6ld", num); X put_buffer(out_val, row, column); X`7D X X/* Print number at given row, column`09-RAK-`09*/ Xstatic void prt_int(num, row, column) Xint num, row, column; X`7B X vtype out_val; X X (void) sprintf(out_val, "%6d", num); X put_buffer(out_val, row, column); X`7D X X X/* Adjustment for wisdom/intelligence`09`09`09`09-JWT-`09*/ Xint stat_adj(stat) Xint stat; X`7B X register int value; X X value = py.stats.use_stat`5Bstat`5D; X if (value > 117) X return(7); X else if (value > 107) X return(6); X else if (value > 87) X return(5); X else if (value > 67) X return(4); X else if (value > 17) X return(3); X else if (value > 14) X return(2); X else if (value > 7) X return(1); X else X return(0); X`7D X X X/* Adjustment for charisma`09`09`09`09-RAK-`09*/ X/* Percent decrease or increase in price of goods`09`09 */ Xint chr_adj() X`7B X register int charisma; X X charisma = py.stats.use_stat`5BA_CHR`5D; X if (charisma > 117) X return(90); X else if (charisma > 107) X return(92); X else if (charisma > 87) X return(94); X else if (charisma > 67) X return(96); X else if (charisma > 18) X return(98); X else X switch(charisma) X `7B X case 18:`09return(100); X case 17:`09return(101); X case 16:`09return(102); X case 15:`09return(103); X case 14:`09return(104); X case 13:`09return(106); X case 12:`09return(108); X case 11:`09return(110); X case 10:`09return(112); X case 9: return(114); X case 8: return(116); X case 7: return(118); X case 6: return(120); X case 5: return(122); X case 4: return(125); X case 3: return(130); X default: return(100); X `7D X`7D X X X/* Returns a character's adjustment to hit points`09 -JWT-`09 */ Xint con_adj() X`7B X register int con; X X con = py.stats.use_stat`5BA_CON`5D; X if (con < 7) X return(con - 7); X else if (con < 17) X return(0); X else if (con == 17) X return(1); X else if (con < 94) X return(2); X else if (con < 117) X return(3); X else X return(4); X`7D X X Xchar *title_string() X`7B X register char *p; X X if (py.misc.lev < 1) X p = "Babe in arms"; X else if (py.misc.lev <= MAX_PLAYER_LEVEL) X p = player_title`5Bpy.misc.pclass`5D`5Bpy.misc.lev-1`5D; X else if (py.misc.male) X p = "**KING**"; X else X p = "**QUEEN**"; X return p; X`7D X X X/* Prints title of character`09`09`09`09-RAK-`09*/ Xvoid prt_title() X`7B X prt_field(title_string(), 4, STAT_COLUMN); X`7D X X X/* Prints level`09`09`09`09`09`09-RAK-`09*/ Xvoid prt_level() X`7B X prt_int((int)py.misc.lev, 13, STAT_COLUMN+6); X`7D X X X/* Prints players current mana points.`09`09 -RAK-`09*/ Xvoid prt_cmana() X`7B X prt_int(py.misc.cmana, 15, STAT_COLUMN+6); X`7D X X X/* Prints Max hit points`09`09`09`09-RAK-`09*/ Xvoid prt_mhp() X`7B X prt_int(py.misc.mhp, 16, STAT_COLUMN+6); X`7D X X X/* Prints players current hit points`09`09`09-RAK-`09*/ Xvoid prt_chp() X`7B X prt_int(py.misc.chp, 17, STAT_COLUMN+6); X`7D X X X/* prints current AC`09`09`09`09`09-RAK-`09*/ Xvoid prt_pac() X`7B X prt_int(py.misc.dis_ac, 19, STAT_COLUMN+6); X`7D X X X/* Prints current gold`09`09`09`09`09-RAK-`09*/ Xvoid prt_gold() X`7B X prt_long(py.misc.au, 20, STAT_COLUMN+6); X`7D X X X/* Prints depth in stat area`09`09`09`09-RAK-`09*/ Xvoid prt_depth() X`7B X vtype depths; X register int depth; X X depth = dun_level*50; X if (depth == 0) X (void) strcpy(depths, "Town level"); X else X (void) sprintf(depths, "%d feet", depth); X prt(depths, 23, 65); X`7D X X X/* Prints status of hunger`09`09`09`09-RAK-`09*/ Xvoid prt_hunger() X`7B X if (PY_WEAK & py.flags.status) X put_buffer("Weak ", 23, 0); X else if (PY_HUNGRY & py.flags.status) X put_buffer("Hungry", 23, 0); X else X put_buffer(&blank_string`5BBLANK_LENGTH-6`5D, 23, 0); X`7D X X X/* Prints Blind status`09`09`09`09`09-RAK-`09*/ Xvoid prt_blind() X`7B X if (PY_BLIND & py.flags.status) X put_buffer("Blind", 23, 7); X else X put_buffer(&blank_string`5BBLANK_LENGTH-5`5D, 23, 7); X`7D X X X/* Prints Confusion status`09`09`09`09-RAK-`09*/ Xvoid prt_confused() X`7B X if (PY_CONFUSED & py.flags.status) X put_buffer("Confused", 23, 13); X else X put_buffer(&blank_string`5BBLANK_LENGTH-8`5D, 23, 13); X`7D X X X/* Prints Fear status`09`09`09`09`09-RAK-`09*/ Xvoid prt_afraid() X`7B X if (PY_FEAR & py.flags.status) X put_buffer("Afraid", 23, 22); X else X put_buffer(&blank_string`5BBLANK_LENGTH-6`5D, 23, 22); X`7D X X X/* Prints Poisoned status`09`09`09`09-RAK-`09*/ Xvoid prt_poisoned() X`7B X if (PY_POISONED & py.flags.status) X put_buffer("Poisoned", 23, 29); X else X put_buffer(&blank_string`5BBLANK_LENGTH-8`5D, 23, 29); X`7D X X X/* Prints Searching, Resting, Paralysis, or 'count' status`09-RAK-`09*/ Xvoid prt_state() X`7B X char tmp`5B16`5D; X#ifdef ATARIST_MWC X int32u holder; X#endif X X#ifdef ATARIST_MWC X py.flags.status &= `7E(holder = PY_REPEAT); X#else X py.flags.status &= `7EPY_REPEAT; X#endif X if (py.flags.paralysis > 1) X put_buffer ("Paralysed", 23, 38); X else if (PY_REST & py.flags.status) X `7B X if (py.flags.rest < 0) X`09(void) strcpy (tmp, "Rest *"); X else if (display_counts) X`09(void) sprintf (tmp, "Rest %-5d", py.flags.rest); X else X`09(void) strcpy (tmp, "Rest"); X put_buffer (tmp, 23, 38); X `7D X else if (command_count > 0) X `7B X if (display_counts) X`09(void) sprintf (tmp, "Repeat %-3d", command_count); X else X`09(void) strcpy (tmp, "Repeat"); X#ifdef ATARIST_MWC X py.flags.status `7C= holder; X#else X py.flags.status `7C= PY_REPEAT; X#endif X put_buffer (tmp, 23, 38); X if (PY_SEARCH & py.flags.status) X`09put_buffer ("Search", 23, 38); X `7D X else if (PY_SEARCH & py.flags.status) X put_buffer("Searching", 23, 38); X else`09`09/* "repeat 999" is 10 characters */ X put_buffer(&blank_string`5BBLANK_LENGTH-10`5D, 23, 38); X`7D X X X/* Prints the speed of a character.`09`09`09-CJS- */ Xvoid prt_speed () X`7B X register int i; X X i = py.flags.speed; X if (PY_SEARCH & py.flags.status) /* Search mode. */ X i--; X if (i > 1) X put_buffer ("Very Slow", 23, 49); X else if (i == 1) X put_buffer ("Slow ", 23, 49); X else if (i == 0) X put_buffer (&blank_string`5BBLANK_LENGTH-9`5D, 23, 49); X else if (i == -1) X put_buffer ("Fast ", 23, 49); X else X put_buffer ("Very Fast", 23, 49); X`7D X X Xvoid prt_study() X`7B X#ifdef ATARIST_MWC X int32u holder; X#endif X X#ifdef ATARIST_MWC X py.flags.status &= `7E(holder = PY_STUDY); X#else X py.flags.status &= `7EPY_STUDY; X#endif X if (py.flags.new_spells == 0) X put_buffer (&blank_string`5BBLANK_LENGTH-5`5D, 23, 59); X else X put_buffer ("Study", 23, 59); X`7D X X X/* Prints winner status on display`09`09`09-RAK-`09*/ Xvoid prt_winner() X`7B X if (noscore & 0x2) X `7B X if (wizard) X`09put_buffer("Is wizard ", 22, 0); X else X`09put_buffer("Was wizard ", 22, 0); X `7D X else if (noscore & 0x1) X put_buffer("Resurrected", 22, 0); X else if (noscore & 0x4) X put_buffer ("Duplicate", 22, 0); X else if (total_winner) X put_buffer("*Winner* ", 22, 0); X`7D X X Xint8u modify_stat (stat, amount) Xint stat; Xint16 amount; X`7B X register int loop, i; X register int8u tmp_stat; X X tmp_stat = py.stats.cur_stat`5Bstat`5D; X loop = (amount < 0 ? -amount : amount); X for (i = 0; i < loop; i++) X `7B X if (amount > 0) X`09`7B X`09 if (tmp_stat < 18) X`09 tmp_stat++; X`09 else if (tmp_stat < 108) X`09 tmp_stat += 10; X`09 else X`09 tmp_stat = 118; X`09`7D X else X`09`7B X`09 if (tmp_stat > 27) X`09 tmp_stat -= 10; X`09 else if (tmp_stat > 18) X`09 tmp_stat = 18; X`09 else if (tmp_stat > 3) X`09 tmp_stat--; X`09`7D X `7D X return tmp_stat; X`7D X X X/* Set the value of the stat which is actually used.`09 -CJS- */ Xvoid set_use_stat(stat) Xint stat; X`7B X#ifdef ATARIST_MWC X int32u holder; X#endif X X py.stats.use_stat`5Bstat`5D = modify_stat (stat, py.stats.mod_stat`5Bstat` V5D); X X if (stat == A_STR) X `7B 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 calc_bonuses(); X `7D X else if (stat == A_DEX) X calc_bonuses(); X else if (stat == A_INT && class`5Bpy.misc.pclass`5D.spell == MAGE) X `7B X calc_spells(A_INT); X calc_mana(A_INT); X `7D X else if (stat == A_WIS && class`5Bpy.misc.pclass`5D.spell == PRIEST) X `7B X calc_spells(A_WIS); X calc_mana(A_WIS); X `7D X else if (stat == A_CON) X calc_hitpoints(); X`7D X X X/* Increases a stat by one randomized level`09`09-RAK-`09*/ Xint inc_stat(stat) Xregister int stat; X`7B X register int tmp_stat, gain; X X tmp_stat = py.stats.cur_stat`5Bstat`5D; X if (tmp_stat < 118) X `7B X if (tmp_stat < 18) X`09tmp_stat++; X else if (tmp_stat < 116) X`09`7B X`09 /* stat increases by 1/6 to 1/3 of difference from max */ X`09 gain = ((118 - tmp_stat)/3 + 1) >> 1; X`09 tmp_stat += randint(gain) + gain; X`09`7D X else X`09tmp_stat++; X X py.stats.cur_stat`5Bstat`5D = tmp_stat; X if (tmp_stat > py.stats.max_stat`5Bstat`5D) X`09py.stats.max_stat`5Bstat`5D = tmp_stat; X set_use_stat (stat); X prt_stat (stat); X return TRUE; X `7D X else X return FALSE; X`7D X X X/* Decreases a stat by one randomized level`09`09-RAK-`09*/ Xint dec_stat(stat) Xregister int stat; X`7B X register int tmp_stat, loss; X X tmp_stat = py.stats.cur_stat`5Bstat`5D; X if (tmp_stat > 3) X `7B X if (tmp_stat < 19) X`09tmp_stat--; X else if (tmp_stat < 117) X`09`7B X`09 loss = (((118 - tmp_stat) >> 1) + 1) >> 1; X`09 tmp_stat += -randint(loss) - loss; X`09 if (tmp_stat < 18) X`09 tmp_stat = 18; X`09`7D X else X`09tmp_stat--; X X py.stats.cur_stat`5Bstat`5D = tmp_stat; X set_use_stat (stat); X prt_stat (stat); X return TRUE; X `7D X else X return FALSE; X`7D X X X/* Restore a stat. Return TRUE only if this actually makes a difference. */ Xint res_stat (stat) Xint stat; X`7B X register int i; X X i = py.stats.max_stat`5Bstat`5D - py.stats.cur_stat`5Bstat`5D; X if (i) X `7B X py.stats.cur_stat`5Bstat`5D += i; X set_use_stat (stat); X prt_stat (stat); X return TRUE; X `7D X return FALSE; X`7D X X/* Boost a stat artificially (by wearing something). If the display argument X is TRUE, then increase is shown on the screen. */ Xvoid bst_stat (stat, amount) Xint stat, amount; X`7B X#ifdef ATARIST_MWC X int32u holder; X#endif X X py.stats.mod_stat`5Bstat`5D += amount; X X set_use_stat (stat); X /* can not call prt_stat() here, may be in store, may be in inven_command V */ X#ifdef ATARIST_MWC X py.flags.status `7C= ((holder = PY_STR) << stat); X#else X py.flags.status `7C= (PY_STR << stat); X#endif X`7D X X X/* Returns a character's adjustment to hit.`09`09 -JWT-`09 */ Xint tohit_adj() X`7B X register int total, stat; X X stat = py.stats.use_stat`5BA_DEX`5D; X if`09 (stat < 4)`09total = -3; X else if (stat < 6)`09total = -2; X else if (stat < 8)`09total = -1; X else if (stat < 16)`09total =`09 0; X else if (stat < 17)`09total =`09 1; X else if (stat < 18)`09total =`09 2; X else if (stat < 69)`09total =`09 3; X else if (stat < 118)`09total =`09 4; X else`09`09`09total =`09 5; X stat = py.stats.use_stat`5BA_STR`5D; X if`09 (stat < 4)`09total -= 3; X else if (stat < 5)`09total -= 2; X else if (stat < 7)`09total -= 1; X else if (stat < 18)`09total -= 0; X else if (stat < 94)`09total += 1; X else if (stat < 109)`09total += 2; X else if (stat < 117)`09total += 3; X else`09`09`09total += 4; X return(total); X`7D X X X/* Returns a character's adjustment to armor class`09 -JWT-`09 */ Xint toac_adj() X`7B X register int stat; X X stat = py.stats.use_stat`5BA_DEX`5D; X if`09 (stat < 4)`09return(-4); X else if (stat == 4)`09return(-3); X else if (stat == 5)`09return(-2); X else if (stat == 6)`09return(-1); X else if (stat < 15)`09return( 0); X else if (stat < 18)`09return( 1); X else if (stat < 59)`09return( 2); X else if (stat < 94)`09return( 3); X else if (stat < 117)`09return( 4); X else`09`09`09return( 5); X`7D X X X/* Returns a character's adjustment to disarm`09`09 -RAK-`09 */ Xint todis_adj() X`7B X register int stat; X X stat = py.stats.use_stat`5BA_DEX`5D; X if`09 (stat < 3)`09return(-8); X else if (stat == 4)`09return(-6); X else if (stat == 5)`09return(-4); X else if (stat == 6)`09return(-2); X else if (stat == 7)`09return(-1); X else if (stat < 13)`09return( 0); X else if (stat < 16)`09return( 1); X else if (stat < 18)`09return( 2); X else if (stat < 59)`09return( 4); X else if (stat < 94)`09return( 5); X else if (stat < 117)`09return( 6); X else`09`09`09return( 8); X`7D X X X/* Returns a character's adjustment to damage`09`09 -JWT-`09 */ Xint todam_adj() X`7B X register int stat; X X stat = py.stats.use_stat`5BA_STR`5D; X if`09 (stat < 4)`09return(-2); X else if (stat < 5)`09return(-1); X else if (stat < 16)`09return( 0); X else if (stat < 17)`09return( 1); X else if (stat < 18)`09return( 2); X else if (stat < 94)`09return( 3); X else if (stat < 109)`09return( 4); +-+-+-+-+-+-+-+- END OF PART 33 +-+-+-+-+-+-+-+-