Mercurial > hg > early-roguelike
comparison rogue4/fight.c @ 225:4f6e056438eb
Merge the GCC5 and build fix branches.
author | John "Elwin" Edwards |
---|---|
date | Wed, 02 Mar 2016 21:28:34 -0500 |
parents | 1b73a8641b37 |
children | 0990adf580ee |
comparison
equal
deleted
inserted
replaced
224:4d0f53998e8a | 225:4f6e056438eb |
---|---|
8 * All rights reserved. | 8 * All rights reserved. |
9 * | 9 * |
10 * See the file LICENSE.TXT for full copyright and licensing information. | 10 * See the file LICENSE.TXT for full copyright and licensing information. |
11 */ | 11 */ |
12 | 12 |
13 #include <stdlib.h> | |
13 #include <curses.h> | 14 #include <curses.h> |
14 #include <ctype.h> | 15 #include <ctype.h> |
15 #include <string.h> | 16 #include <string.h> |
16 #include "rogue.h" | 17 #include "rogue.h" |
17 | 18 |
18 long e_levels[] = { | 19 long e_levels[] = { |
19 10L,20L,40L,80L,160L,320L,640L,1280L,2560L,5120L,10240L,20480L, | 20 10L,20L,40L,80L,160L,320L,640L,1280L,2560L,5120L,10240L,20480L, |
20 40920L, 81920L, 163840L, 327680L, 655360L, 1310720L, 2621440L, 0L | 21 40920L, 81920L, 163840L, 327680L, 655360L, 1310720L, 2621440L, 0L |
21 }; | 22 }; |
22 | 23 |
24 bool roll_em(THING *thatt, THING *thdef, THING *weap, bool hurl); | |
25 void hit(char *er, char *ee); | |
26 void miss(char *er, char *ee); | |
27 int str_plus(str_t str); | |
28 int add_dam(str_t str); | |
29 void thunk(THING *weap, const char *mname); | |
30 void bounce(THING *weap, const char *mname); | |
31 | |
23 /* | 32 /* |
24 * fight: | 33 * fight: |
25 * The player attacks the monster. | 34 * The player attacks the monster. |
26 */ | 35 */ |
27 fight(mp, mn, weap, thrown) | 36 bool |
28 register coord *mp; | 37 fight(coord *mp, char mn, THING *weap, bool thrown) |
29 char mn; | |
30 register THING *weap; | |
31 bool thrown; | |
32 { | 38 { |
33 register THING *tp; | 39 register THING *tp; |
34 register bool did_hit = TRUE; | 40 register bool did_hit = TRUE; |
35 register const char *mname; | 41 register const char *mname; |
36 | 42 |
94 | 100 |
95 /* | 101 /* |
96 * attack: | 102 * attack: |
97 * The monster attacks the player | 103 * The monster attacks the player |
98 */ | 104 */ |
99 attack(mp) | 105 int |
100 register THING *mp; | 106 attack(THING *mp) |
101 { | 107 { |
102 register const char *mname; | 108 register const char *mname; |
103 | 109 |
104 /* | 110 /* |
105 * Since this is an attack, stop running and any healing that was | 111 * Since this is an attack, stop running and any healing that was |
293 | 299 |
294 /* | 300 /* |
295 * swing: | 301 * swing: |
296 * Returns true if the swing hits | 302 * Returns true if the swing hits |
297 */ | 303 */ |
298 swing(at_lvl, op_arm, wplus) | 304 bool |
299 int at_lvl, op_arm, wplus; | 305 swing(int at_lvl, int op_arm, int wplus) |
300 { | 306 { |
301 register int res = rnd(20); | 307 register int res = rnd(20); |
302 register int need = (20 - at_lvl) - op_arm; | 308 register int need = (20 - at_lvl) - op_arm; |
303 | 309 |
304 return (res + wplus >= need); | 310 return (res + wplus >= need); |
306 | 312 |
307 /* | 313 /* |
308 * check_level: | 314 * check_level: |
309 * Check to see if the guy has gone up a level. | 315 * Check to see if the guy has gone up a level. |
310 */ | 316 */ |
311 check_level() | 317 void |
318 check_level(void) | |
312 { | 319 { |
313 register int i, add, olevel; | 320 register int i, add, olevel; |
314 | 321 |
315 for (i = 0; e_levels[i] != 0; i++) | 322 for (i = 0; e_levels[i] != 0; i++) |
316 if (e_levels[i] > pstats.s_exp) | 323 if (e_levels[i] > pstats.s_exp) |
330 | 337 |
331 /* | 338 /* |
332 * roll_em: | 339 * roll_em: |
333 * Roll several attacks | 340 * Roll several attacks |
334 */ | 341 */ |
335 roll_em(thatt, thdef, weap, hurl) | 342 bool |
336 THING *thatt, *thdef, *weap; | 343 roll_em(THING *thatt, THING *thdef, THING *weap, bool hurl) |
337 bool hurl; | |
338 { | 344 { |
339 register struct stats *att, *def; | 345 register struct stats *att, *def; |
340 register char *cp; | 346 register char *cp; |
341 register int ndice, nsides, def_arm; | 347 register int ndice, nsides, def_arm; |
342 register bool did_hit = FALSE; | 348 register bool did_hit = FALSE; |
438 /* | 444 /* |
439 * prname: | 445 * prname: |
440 * The print name of a combatant | 446 * The print name of a combatant |
441 */ | 447 */ |
442 char * | 448 char * |
443 prname(who, upper) | 449 prname(char *who, bool upper) |
444 register char *who; | |
445 bool upper; | |
446 { | 450 { |
447 static char tbuf[MAXSTR]; | 451 static char tbuf[MAXSTR]; |
448 | 452 |
449 *tbuf = '\0'; | 453 *tbuf = '\0'; |
450 if (who == 0) | 454 if (who == 0) |
463 | 467 |
464 /* | 468 /* |
465 * hit: | 469 * hit: |
466 * Print a message to indicate a succesful hit | 470 * Print a message to indicate a succesful hit |
467 */ | 471 */ |
468 hit(er, ee) | 472 void |
469 register char *er, *ee; | 473 hit(char *er, char *ee) |
470 { | 474 { |
471 register char *s = ""; | 475 register char *s = ""; |
472 | 476 |
473 addmsg(prname(er, TRUE)); | 477 addmsg(prname(er, TRUE)); |
474 if (terse) | 478 if (terse) |
489 | 493 |
490 /* | 494 /* |
491 * miss: | 495 * miss: |
492 * Print a message to indicate a poor swing | 496 * Print a message to indicate a poor swing |
493 */ | 497 */ |
494 miss(er, ee) | 498 void |
495 register char *er, *ee; | 499 miss(char *er, char *ee) |
496 { | 500 { |
497 register char *s = ""; | 501 register char *s = ""; |
498 | 502 |
499 addmsg(prname(er, TRUE)); | 503 addmsg(prname(er, TRUE)); |
500 switch (terse ? 0 : rnd(4)) | 504 switch (terse ? 0 : rnd(4)) |
512 | 516 |
513 /* | 517 /* |
514 * save_throw: | 518 * save_throw: |
515 * See if a creature save against something | 519 * See if a creature save against something |
516 */ | 520 */ |
517 save_throw(which, tp) | 521 bool |
518 int which; | 522 save_throw(int which, THING *tp) |
519 THING *tp; | |
520 { | 523 { |
521 register int need; | 524 register int need; |
522 | 525 |
523 need = 14 + which - tp->t_stats.s_lvl / 2; | 526 need = 14 + which - tp->t_stats.s_lvl / 2; |
524 return (roll(1, 20) >= need); | 527 return (roll(1, 20) >= need); |
526 | 529 |
527 /* | 530 /* |
528 * save: | 531 * save: |
529 * See if he saves against various nasty things | 532 * See if he saves against various nasty things |
530 */ | 533 */ |
531 save(which) | 534 bool |
532 register int which; | 535 save(int which) |
533 { | 536 { |
534 if (which == VS_MAGIC) | 537 if (which == VS_MAGIC) |
535 { | 538 { |
536 if (ISRING(LEFT, R_PROTECT)) | 539 if (ISRING(LEFT, R_PROTECT)) |
537 which -= cur_ring[LEFT]->o_ac; | 540 which -= cur_ring[LEFT]->o_ac; |
543 | 546 |
544 /* | 547 /* |
545 * str_plus: | 548 * str_plus: |
546 * Compute bonus/penalties for strength on the "to hit" roll | 549 * Compute bonus/penalties for strength on the "to hit" roll |
547 */ | 550 */ |
548 str_plus(str) | 551 int |
549 register str_t str; | 552 str_plus(str_t str) |
550 { | 553 { |
551 if (str == 31) | 554 if (str == 31) |
552 return 3; | 555 return 3; |
553 if (str > 20) | 556 if (str > 20) |
554 return 2; | 557 return 2; |
561 | 564 |
562 /* | 565 /* |
563 * add_dam: | 566 * add_dam: |
564 * Compute additional damage done for exceptionally high or low strength | 567 * Compute additional damage done for exceptionally high or low strength |
565 */ | 568 */ |
566 add_dam(str) | 569 int |
567 register str_t str; | 570 add_dam(str_t str) |
568 { | 571 { |
569 if (str == 31) | 572 if (str == 31) |
570 return 6; | 573 return 6; |
571 if (str > 21) | 574 if (str > 21) |
572 return 5; | 575 return 5; |
573 if (str == 21) | 576 if (str == 21) |
585 | 588 |
586 /* | 589 /* |
587 * raise_level: | 590 * raise_level: |
588 * The guy just magically went up a level. | 591 * The guy just magically went up a level. |
589 */ | 592 */ |
590 raise_level() | 593 void |
594 raise_level(void) | |
591 { | 595 { |
592 pstats.s_exp = e_levels[pstats.s_lvl-1] + 1L; | 596 pstats.s_exp = e_levels[pstats.s_lvl-1] + 1L; |
593 check_level(); | 597 check_level(); |
594 } | 598 } |
595 | 599 |
596 /* | 600 /* |
597 * thunk: | 601 * thunk: |
598 * A missile hits a monster | 602 * A missile hits a monster |
599 */ | 603 */ |
600 thunk(weap, mname) | 604 void |
601 register THING *weap; | 605 thunk(THING *weap, const char *mname) |
602 register const char *mname; | |
603 { | 606 { |
604 if (weap->o_type == WEAPON) | 607 if (weap->o_type == WEAPON) |
605 addmsg("the %s hits ", w_names[weap->o_which]); | 608 addmsg("the %s hits ", w_names[weap->o_which]); |
606 else | 609 else |
607 addmsg("you hit "); | 610 addmsg("you hit "); |
613 | 616 |
614 /* | 617 /* |
615 * bounce: | 618 * bounce: |
616 * A missile misses a monster | 619 * A missile misses a monster |
617 */ | 620 */ |
618 bounce(weap, mname) | 621 void |
619 register THING *weap; | 622 bounce(THING *weap, const char *mname) |
620 register const char *mname; | |
621 { | 623 { |
622 if (weap->o_type == WEAPON) | 624 if (weap->o_type == WEAPON) |
623 addmsg("the %s misses ", w_names[weap->o_which]); | 625 addmsg("the %s misses ", w_names[weap->o_which]); |
624 else | 626 else |
625 addmsg("you missed "); | 627 addmsg("you missed "); |
631 | 633 |
632 /* | 634 /* |
633 * remove: | 635 * remove: |
634 * Remove a monster from the screen | 636 * Remove a monster from the screen |
635 */ | 637 */ |
636 remove_monster(mp, tp, waskill) | 638 void |
637 register coord *mp; | 639 remove_monster(coord *mp, THING *tp, bool waskill) |
638 register THING *tp; | |
639 bool waskill; | |
640 { | 640 { |
641 register THING *obj, *nexti; | 641 register THING *obj, *nexti; |
642 | 642 |
643 for (obj = tp->t_pack; obj != NULL; obj = nexti) | 643 for (obj = tp->t_pack; obj != NULL; obj = nexti) |
644 { | 644 { |
658 | 658 |
659 /* | 659 /* |
660 * is_magic: | 660 * is_magic: |
661 * Returns true if an object radiates magic | 661 * Returns true if an object radiates magic |
662 */ | 662 */ |
663 is_magic(obj) | 663 bool |
664 register THING *obj; | 664 is_magic(THING *obj) |
665 { | 665 { |
666 switch (obj->o_type) | 666 switch (obj->o_type) |
667 { | 667 { |
668 case ARMOR: | 668 case ARMOR: |
669 return obj->o_ac != a_class[obj->o_which]; | 669 return obj->o_ac != a_class[obj->o_which]; |
681 | 681 |
682 /* | 682 /* |
683 * killed: | 683 * killed: |
684 * Called to put a monster to death | 684 * Called to put a monster to death |
685 */ | 685 */ |
686 killed(tp, pr) | 686 void |
687 register THING *tp; | 687 killed(THING *tp, bool pr) |
688 bool pr; | |
689 { | 688 { |
690 pstats.s_exp += tp->t_stats.s_exp; | 689 pstats.s_exp += tp->t_stats.s_exp; |
691 /* | 690 /* |
692 * If the monster was a violet fungi, un-hold him | 691 * If the monster was a violet fungi, un-hold him |
693 */ | 692 */ |