-+-+-+-+-+-+-+-+ START OF PART 5 -+-+-+-+-+-+-+-+ X`09`7D X break; X case 2: case 6: X mm`5B0`5D = 8; X if (x < 0) X`09`7B X`09 mm`5B1`5D = 9; X`09 mm`5B2`5D = 7; X`09 mm`5B3`5D = 6; X`09 mm`5B4`5D = 4; X`09`7D X else X`09`7B X`09 mm`5B1`5D = 7; X`09 mm`5B2`5D = 9; X`09 mm`5B3`5D = 4; X`09 mm`5B4`5D = 6; X`09`7D X break; X case 4: X mm`5B0`5D = 7; X if (ay > ax) X`09`7B X`09 mm`5B1`5D = 8; X`09 mm`5B2`5D = 4; X`09 mm`5B3`5D = 9; X`09 mm`5B4`5D = 1; X`09`7D X else X`09`7B X`09 mm`5B1`5D = 4; X`09 mm`5B2`5D = 8; X`09 mm`5B3`5D = 1; X`09 mm`5B4`5D = 9; X`09`7D X break; X case 5: case 13: X mm`5B0`5D = 4; X if (y < 0) X`09`7B X`09 mm`5B1`5D = 1; X`09 mm`5B2`5D = 7; X`09 mm`5B3`5D = 2; X`09 mm`5B4`5D = 8; X`09`7D X else X`09`7B X`09 mm`5B1`5D = 7; X`09 mm`5B2`5D = 1; X`09 mm`5B3`5D = 8; X`09 mm`5B4`5D = 2; X`09`7D X break; X case 8: X mm`5B0`5D = 3; X if (ay > ax) X`09`7B X`09 mm`5B1`5D = 2; X`09 mm`5B2`5D = 6; X`09 mm`5B3`5D = 1; X`09 mm`5B4`5D = 9; X`09`7D X else X`09`7B X`09 mm`5B1`5D = 6; X`09 mm`5B2`5D = 2; X`09 mm`5B3`5D = 9; X`09 mm`5B4`5D = 1; X`09`7D X break; X case 10: case 14: X mm`5B0`5D = 2; X if (x < 0) X`09`7B X`09 mm`5B1`5D = 3; X`09 mm`5B2`5D = 1; X`09 mm`5B3`5D = 6; X`09 mm`5B4`5D = 4; X`09`7D X else X`09`7B X`09 mm`5B1`5D = 1; X`09 mm`5B2`5D = 3; X`09 mm`5B3`5D = 4; X`09 mm`5B4`5D = 6; X`09`7D X break; X case 12: X mm`5B0`5D = 1; X if (ay > ax) X`09`7B X`09 mm`5B1`5D = 2; X`09 mm`5B2`5D = 4; X`09 mm`5B3`5D = 3; X`09 mm`5B4`5D = 7; X`09`7D X else X`09`7B X`09 mm`5B1`5D = 4; X`09 mm`5B2`5D = 2; X`09 mm`5B3`5D = 7; X`09 mm`5B4`5D = 3; X`09`7D X break; X `7D X`7D X X X/* Make an attack on the player (chuckle.)`09`09-RAK-`09*/ Xstatic void make_attack(monptr) Xint monptr; X`7B X int attype, adesc, adice, asides; X int i, j, damage, flag, attackn, notice, visible; X int32 gold; X int8u *attstr; X vtype cdesc, tmp_str, ddesc; X register creature_type *r_ptr; X monster_type *m_ptr; X register struct misc *p_ptr; X register struct flags *f_ptr; X register inven_type *i_ptr; X#ifdef ATARIST_MWC X int32u holder; X#endif X X if (death) /* don't beat a dead body! */ X return; X X m_ptr = &m_list`5Bmonptr`5D; X r_ptr = &c_list`5Bm_ptr->mptr`5D; X if (!m_ptr->ml) X (void) strcpy(cdesc, "It "); X else X (void) sprintf(cdesc, "The %s ", r_ptr->name); X /* For "DIED_FROM" string`09 */ X#ifdef ATARIST_MWC X holder = CM_WIN; X if (holder & r_ptr->cmove) X#else X if (CM_WIN & r_ptr->cmove) X#endif X (void) sprintf(ddesc, "The %s", r_ptr->name); X else if (is_a_vowel (r_ptr->name`5B0`5D)) X (void) sprintf(ddesc, "an %s", r_ptr->name); X else X (void) sprintf (ddesc, "a %s", r_ptr->name); X /* End DIED_FROM`09`09 */ X X attackn = 0; X attstr = r_ptr->damage; X while ((*attstr != 0) && !death) X `7B X attype = monster_attacks`5B*attstr`5D.attack_type; X adesc = monster_attacks`5B*attstr`5D.attack_desc; X adice = monster_attacks`5B*attstr`5D.attack_dice; X asides = monster_attacks`5B*attstr`5D.attack_sides; X attstr++; X flag = FALSE; X if ((py.flags.protevil > 0) && (r_ptr->cdefense & CD_EVIL) && X`09 ((py.misc.lev + 1) > r_ptr->level)) X`09`7B X`09 if (m_ptr->ml) X`09 c_recall`5Bm_ptr->mptr`5D.r_cdefense `7C= CD_EVIL; X`09 attype = 99; X`09 adesc = 99; X`09`7D X p_ptr = &py.misc; X switch(attype) X`09`7B X`09case 1:`09 /*Normal attack */ X`09 if (test_hit(60, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 2:`09 /*Lose Strength*/ X`09 if (test_hit(-3, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 3:`09 /*Confusion attack*/ X`09 if (test_hit(10, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 4:`09 /*Fear attack */ X`09 if (test_hit(10, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 5:`09 /*Fire attack */ X`09 if (test_hit(10, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 6:`09 /*Acid attack */ X`09 if (test_hit(0, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 7:`09 /*Cold attack */ X`09 if (test_hit(10, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 8:`09 /*Lightning attack*/ X`09 if (test_hit(10, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 9:`09 /*Corrosion attack*/ X`09 if (test_hit(0, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 10: /*Blindness attack*/ X`09 if (test_hit(2, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 11: /*Paralysis attack*/ X`09 if (test_hit(2, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 12: /*Steal Money */ X`09 if ((test_hit(5, (int)r_ptr->level, 0, (int)py.misc.lev, X`09`09`09CLA_MISC_HIT)) X`09 && (py.misc.au > 0)) X`09 flag = TRUE; X`09 break; X`09case 13: /*Steal Object */ X`09 if ((test_hit(2, (int)r_ptr->level, 0, (int)py.misc.lev, X`09`09`09CLA_MISC_HIT)) X`09 && (inven_ctr > 0)) X`09 flag = TRUE; X`09 break; X`09case 14: /*Poison`09 */ X`09 if (test_hit(5, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 15: /*Lose dexterity*/ X`09 if (test_hit(0, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 16: /*Lose constitution*/ X`09 if (test_hit(0, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 17: /*Lose intelligence*/ X`09 if (test_hit(2, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 18: /*Lose wisdom*/ X`09 if (test_hit(2, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 19: /*Lose experience*/ X`09 if (test_hit(5, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 20: /*Aggravate monsters*/ X`09 flag = TRUE; X`09 break; X`09case 21: /*Disenchant`09 */ X`09 if (test_hit(20, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 22: /*Eat food`09 */ X`09 if (test_hit(5, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 23: /*Eat light`09 */ X`09 if (test_hit(5, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09 CLA_MISC_HIT)) X`09 flag = TRUE; X`09 break; X`09case 24: /*Eat charges`09 */ X`09 if ((test_hit(15, (int)r_ptr->level, 0, p_ptr->pac+p_ptr->ptoac, X`09`09`09CLA_MISC_HIT)) && X`09 (inven_ctr > 0))`09/* check to make sure an object exists */ X`09 flag = TRUE; X`09 break; X`09case 99: X`09 flag = TRUE; X`09 break; X`09default: X`09 break; X`09`7D X if (flag) X`09`7B X`09 /* can not strcat to cdesc because the creature may have X`09 multiple attacks */ X`09 disturb (1, 0); X`09 (void) strcpy(tmp_str, cdesc); X`09 switch(adesc) X`09 `7B X`09 case 1: msg_print(strcat(tmp_str, "hits you.")); break; X`09 case 2: msg_print(strcat(tmp_str, "bites you.")); break; X`09 case 3: msg_print(strcat(tmp_str, "claws you.")); break; X`09 case 4: msg_print(strcat(tmp_str, "stings you.")); break; X`09 case 5: msg_print(strcat(tmp_str, "touches you.")); break; X#if 0 X`09 case 6: msg_print(strcat(tmp_str, "kicks you.")); break; X#endif X`09 case 7: msg_print(strcat(tmp_str, "gazes at you.")); break; X`09 case 8: msg_print(strcat(tmp_str, "breathes on you.")); break; X`09 case 9: msg_print(strcat(tmp_str, "spits on you.")); break; X`09 case 10: msg_print(strcat(tmp_str,"makes a horrible wail."));break; X#if 0 X`09 case 11: msg_print(strcat(tmp_str, "embraces you.")); break; X#endif X`09 case 12: msg_print(strcat(tmp_str, "crawls on you.")); break; X`09 case 13: X`09 msg_print(strcat(tmp_str, "releases a cloud of spores.")); break; X`09 case 14: msg_print(strcat(tmp_str, "begs you for money.")); break; X`09 case 15: msg_print("You've been slimed!"); break; X`09 case 16: msg_print(strcat(tmp_str, "crushes you.")); break; X`09 case 17: msg_print(strcat(tmp_str, "tramples you.")); break; X`09 case 18: msg_print(strcat(tmp_str, "drools on you.")); break; X`09 case 19: X`09 switch(randint(9)) X`09`09`7B X`09`09case 1: msg_print(strcat(tmp_str, "insults you!")); break; X`09`09case 2: X`09`09 msg_print(strcat(tmp_str, "insults your mother!")); break; X`09`09case 3: X`09`09 msg_print(strcat(tmp_str, "gives you the finger!")); break; X`09`09case 4: msg_print(strcat(tmp_str, "humiliates you!")); break; X`09`09case 5: msg_print(strcat(tmp_str, "wets on your leg!")); break; X`09`09case 6: msg_print(strcat(tmp_str, "defiles you!")); break; X`09`09case 7: msg_print(strcat(tmp_str, "dances around you!"));break; X`09`09case 8: X`09`09 msg_print(strcat(tmp_str, "makes obscene gestures!")); break; X`09`09case 9: msg_print(strcat(tmp_str, "moons you!!!")); break; X`09`09`7D X`09 break; X`09 case 99: msg_print(strcat(tmp_str, "is repelled.")); break; X`09 default: break; X`09 `7D X X`09 notice = TRUE; X`09 /* always fail to notice attack if creature invisible, set notice X`09 and visible here since creature may be visible when attacking X`09 and then teleport afterwards (becoming effectively invisible) */ X`09 if (!m_ptr->ml) X`09 `7B X`09 visible = FALSE; X`09 notice = FALSE; X`09 `7D X`09 else X`09 visible = TRUE; X X`09 damage = damroll (adice, asides); X`09 switch(attype) X`09 `7B X`09 case 1: /*Normal attack`09*/ X`09 /* round half-way case down */ X`09 damage -= ((p_ptr->pac+p_ptr->ptoac) * damage) / 200; X`09 take_hit(damage, ddesc); X`09 break; X`09 case 2: /*Lose Strength*/ X`09 take_hit(damage, ddesc); X`09 if (py.flags.sustain_str) X`09`09msg_print("You feel weaker for a moment, but it passes."); X`09 else if (randint(2) == 1) X`09`09`7B X`09`09 msg_print("You feel weaker."); X`09`09 (void) dec_stat (A_STR); X`09`09`7D X`09 else X`09`09notice = FALSE; X`09 break; X`09 case 3: /*Confusion attack*/ X`09 f_ptr = &py.flags; X`09 take_hit(damage, ddesc); X`09 if (randint(2) == 1) X`09`09`7B X`09`09 if (f_ptr->confused < 1) X`09`09 `7B X`09`09 msg_print("You feel confused."); X`09`09 f_ptr->confused += randint((int)r_ptr->level); X`09`09 `7D X`09`09 else X`09`09 notice = FALSE; X`09`09 f_ptr->confused += 3; X`09`09`7D X`09 else X`09`09notice = FALSE; X`09 break; X`09 case 4: /*Fear attack`09*/ X`09 f_ptr = &py.flags; X`09 take_hit(damage, ddesc); X`09 if (player_saves()) X`09`09msg_print("You resist the effects!"); X`09 else if (f_ptr->afraid < 1) X`09`09`7B X`09`09 msg_print("You are suddenly afraid!"); X`09`09 f_ptr->afraid += 3 + randint((int)r_ptr->level); X`09`09`7D X`09 else X`09`09`7B X`09`09 f_ptr->afraid += 3; X`09`09 notice = FALSE; X`09`09`7D X`09 break; X`09 case 5: /*Fire attack`09*/ X`09 msg_print("You are enveloped in flames!"); X`09 fire_dam(damage, ddesc); X`09 break; X`09 case 6: /*Acid attack`09*/ X`09 msg_print("You are covered in acid!"); X`09 acid_dam(damage, ddesc); X`09 break; X`09 case 7: /*Cold attack`09*/ X`09 msg_print("You are covered with frost!"); X`09 cold_dam(damage, ddesc); X`09 break; X`09 case 8: /*Lightning attack*/ X`09 msg_print("Lightning strikes you!"); X`09 light_dam(damage, ddesc); X`09 break; X`09 case 9: /*Corrosion attack*/ X`09 msg_print("A stinging red gas swirls about you."); X`09 corrode_gas(ddesc); X`09 take_hit(damage, ddesc); X`09 break; X`09 case 10:`09/*Blindness attack*/ X`09 f_ptr = &py.flags; X`09 take_hit(damage, ddesc); X`09 if (f_ptr->blind < 1) X`09`09`7B X`09`09 f_ptr->blind += 10 + randint((int)r_ptr->level); X`09`09 msg_print("Your eyes begin to sting."); X`09`09`7D X`09 else X`09`09`7B X`09`09 f_ptr->blind += 5; X`09`09 notice = FALSE; X`09`09`7D X`09 break; X`09 case 11:`09/*Paralysis attack*/ X`09 f_ptr = &py.flags; X`09 take_hit(damage, ddesc); X`09 if (player_saves()) X`09`09msg_print("You resist the effects!"); X`09 else if (f_ptr->paralysis < 1) X`09`09`7B X`09`09 if (f_ptr->free_act) X`09`09 msg_print("You are unaffected."); X`09`09 else X`09`09 `7B X`09`09 f_ptr->paralysis = randint((int)r_ptr->level) + 3; X`09`09 msg_print("You are paralyzed."); X`09`09 `7D X`09`09`7D X`09 else X`09`09notice = FALSE; X`09 break; X`09 case 12:`09/*Steal Money`09 */ X`09 if ((py.flags.paralysis < 1) && X`09`09 (randint(124) < py.stats.use_stat`5BA_DEX`5D)) X`09`09msg_print("You quickly protect your money pouch!"); X`09 else X`09`09`7B X`09`09 gold = (p_ptr->au/10) + randint(25); X`09`09 if (gold > p_ptr->au) X`09`09 p_ptr->au = 0; X`09`09 else X`09`09 p_ptr->au -= gold; X`09`09 msg_print("Your purse feels lighter."); X`09`09 prt_gold(); X`09`09`7D X`09 if (randint(2) == 1) X`09`09`7B X`09`09 msg_print("There is a puff of smoke!"); X`09`09 teleport_away(monptr, MAX_SIGHT); X`09`09`7D X`09 break; +-+-+-+-+-+-+-+- END OF PART 5 +-+-+-+-+-+-+-+-