Mercurial > hg > early-roguelike
annotate rogue5/fight.c @ 76:ad2cb9a07aaa
arogue5: fix player's typed responses getting put at the wrong place.
Some sections of code that prompt the user for a string of input were
calling get_str() with cw (the player-visible screen containing the
map), which caused whatever the player typed to get printed starting at
cw's idea of the cursor position, which was usually the Rogue's @-sign.
This corrupted the map.
The problem has been fixed by passing msgw (the message line at the top
of the screen) to get_str(), so the player's typing appears where msgw
thinks the cursor should be, which is in the sensible place right after
the prompt.  Some other get_str() invocations which used hw or stdscr
have been left unmodified.
| author | John "Elwin" Edwards <elwin@sdf.org> | 
|---|---|
| date | Sat, 08 Sep 2012 22:05:05 -0700 | 
| parents | f502bf60e6e4 | 
| children | e7aab31362af | 
| rev | line source | 
|---|---|
| 
33
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
2 * All the fighting gets done here | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
3 * | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
4 * @(#)fight.c 4.67 (Berkeley) 09/06/83 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
5 * | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
6 * Rogue: Exploring the Dungeons of Doom | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
7 * Copyright (C) 1980-1983, 1985, 1999 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
8 * All rights reserved. | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
9 * | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
10 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
11 */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
12 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
13 #include <stdlib.h> | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
14 #include <curses.h> | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
15 #include <string.h> | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
16 #include <ctype.h> | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
17 #include "rogue.h" | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
18 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
19 #define EQSTR(a, b) (strcmp(a, b) == 0) | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
20 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
21 static const char *h_names[] = { /* strings for hitting */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
22 " scored an excellent hit on ", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
23 " hit ", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
24 " have injured ", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
25 " swing and hit ", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
26 " scored an excellent hit on ", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
27 " hit ", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
28 " has injured ", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
29 " swings and hits " | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
30 }; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
31 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
32 static const char *m_names[] = { /* strings for missing */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
33 " miss", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
34 " swing and miss", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
35 " barely miss", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
36 " don't hit", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
37 " misses", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
38 " swings and misses", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
39 " barely misses", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
40 " doesn't hit", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
41 }; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
42 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
43 /* | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
44 * adjustments to hit probabilities due to strength | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
45 */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
46 static int str_plus[] = { | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
47 -7, -6, -5, -4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
48 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
49 }; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
50 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
51 /* | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
52 * adjustments to damage done due to strength | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
53 */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
54 static int add_dam[] = { | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
55 -7, -6, -5, -4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
56 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
57 }; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
58 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
59 /* | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
60 * fight: | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
61 * The player attacks the monster. | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
62 */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
63 int | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
64 fight(const coord *mp, const THING *weap, int thrown) | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
65 { | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
66 THING *tp; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
67 int did_hit = TRUE; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
68 const char *mname; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
69 int ch; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
70 | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
71 /* | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
72 * Find the monster we want to fight | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
73 */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
74 if ((tp = moat(mp->y, mp->x)) == NULL) | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
75 { | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
76 #ifdef MASTER | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
77 debug("Fight what @ %d,%d", mp->y, mp->x); | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
78 #endif | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
79 return FALSE; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
80 } | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
81 /* | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
82 * Since we are fighting, things are not quiet so no healing takes | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
83 * place. | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
84 */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
85 count = 0; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
86 quiet = 0; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
87 runto(mp); | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
88 /* | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
89 * Let him know it was really a xeroc (if it was one). | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
90 */ | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
91 ch = '\0'; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
92 if (tp->t_type == 'X' && tp->t_disguise != 'X' && !on(player, ISBLIND)) | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
93 { | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
94 tp->t_disguise = 'X'; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
95 if (on(player, ISHALU)) { | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
96 ch = rnd(26) + 'A'; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
97 mvaddch(tp->t_pos.y, tp->t_pos.x, ch); | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
98 } | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
99 msg(choose_str("heavy! That's a nasty critter!", | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
100 "wait! That's a xeroc!")); | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
101 if (!thrown) | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
102 return FALSE; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
103 } | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
104 mname = set_mname(tp); | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
105 did_hit = FALSE; | 
| 
 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
106 has_hit = (terse && !to_death); | 
