The player kicks or whips the steed */
| 399 | |
| 400 | /* The player kicks or whips the steed */ |
| 401 | void |
| 402 | kick_steed(void) |
| 403 | { |
| 404 | char He[BUFSZ]; /* monverbself() appends to the "He"/"She"/"It" value */ |
| 405 | if (!u.usteed) |
| 406 | return; |
| 407 | |
| 408 | /* [ALI] Various effects of kicking sleeping/paralyzed steeds */ |
| 409 | if (helpless(u.usteed)) { |
| 410 | /* We assume a message has just been output of the form |
| 411 | * "You kick <steed>." |
| 412 | */ |
| 413 | Strcpy(He, mhe(u.usteed)); |
| 414 | *He = highc(*He); |
| 415 | if ((u.usteed->mcanmove || u.usteed->mfrozen) && !rn2(2)) { |
| 416 | if (u.usteed->mcanmove) |
| 417 | u.usteed->msleeping = 0; |
| 418 | else if (u.usteed->mfrozen > 2) |
| 419 | u.usteed->mfrozen -= 2; |
| 420 | else { |
| 421 | u.usteed->mfrozen = 0; |
| 422 | u.usteed->mcanmove = 1; |
| 423 | } |
| 424 | if (helpless(u.usteed)) |
| 425 | pline("%s stirs.", He); |
| 426 | else |
| 427 | /* if hallucinating, might yield "He rouses herself" or |
| 428 | "She rouses himself" */ |
| 429 | pline("%s!", monverbself(u.usteed, He, "rouse", (char *) 0)); |
| 430 | } else |
| 431 | pline("%s does not respond.", He); |
| 432 | return; |
| 433 | } |
| 434 | |
| 435 | /* Make the steed less tame and check if it resists */ |
| 436 | if (u.usteed->mtame) |
| 437 | u.usteed->mtame--; |
| 438 | if (!u.usteed->mtame && u.usteed->mleashed) |
| 439 | m_unleash(u.usteed, TRUE); |
| 440 | if (!u.usteed->mtame |
| 441 | || (u.ulevel + u.usteed->mtame < rnd(MAXULEV / 2 + 5))) { |
| 442 | newsym(u.usteed->mx, u.usteed->my); |
| 443 | dismount_steed(DISMOUNT_THROWN); |
| 444 | return; |
| 445 | } |
| 446 | |
| 447 | pline("%s gallops!", Monnam(u.usteed)); |
| 448 | u.ugallop += rn1(20, 30); |
| 449 | return; |
| 450 | } |
| 451 | |
| 452 | /* |
| 453 | * Try to find a dismount point adjacent to the steed's location. |