Mercurial > hg > early-roguelike
annotate xrogue/chase.c @ 220:f54901b9c39b
XRogue: convert to ANSI-style function declarations.
| author | John "Elwin" Edwards | 
|---|---|
| date | Wed, 02 Mar 2016 21:13:26 -0500 | 
| parents | e6179860cb76 | 
| children | e52a8a7ad4c5 | 
| rev | line source | 
|---|---|
| 133 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 1 /* | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 2 chase.c - Code for one object to chase another | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 3 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 4 XRogue: Expeditions into the Dungeons of Doom | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 5 Copyright (C) 1991 Robert Pietkivitch | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 6 All rights reserved. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 7 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 8 Based on "Advanced Rogue" | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 9 Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka and AT&T | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 10 All rights reserved. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 11 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 12 Based on "Rogue: Exploring the Dungeons of Doom" | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 13 Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 14 All rights reserved. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 15 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 16 See the file LICENSE.TXT for full copyright and licensing information. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 17 */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 18 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 19 #include <ctype.h> | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 20 #include <curses.h> | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 21 #include <limits.h> | 
| 220 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
133diff
changeset | 22 #include <stdlib.h> | 
| 133 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 23 #include "rogue.h" | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 24 | 
| 220 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
133diff
changeset | 25 bool straight_shot(int ery, int erx, int eey, int eex, coord *shooting); | 
| 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
133diff
changeset | 26 | 
| 133 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 27 /* | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 28 * Canblink checks if the monster can teleport (blink). If so, it will | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 29 * try to blink the monster next to the player. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 30 */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 31 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 32 bool | 
| 220 
f54901b9c39b
XRogue: convert to ANSI-style function declarations.
 John "Elwin" Edwards parents: 
133diff
changeset | 33 can_blink(struct thing *tp) | 
| 133 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 34 { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 35 register int y, x, index=9; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 36 coord tryp; /* To hold the coordinates for use in diag_ok */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 37 bool spots[9], found_one=FALSE; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 38 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 39 /* | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 40 * First, can the monster even blink? And if so, there is only a 50% | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 41 * chance that it will do so. And it won't blink if it is running or | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 42 * held. | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 43 */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 44 if (off(*tp, CANBLINK) || (on(*tp, ISHELD)) || | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 45 on(*tp, ISFLEE) || | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 46 tp->t_action == A_FREEZE || | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 47 (rnd(12) < 6)) return(FALSE); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 48 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 49 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 50 /* Initialize the spots as illegal */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 51 do { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 52 spots[--index] = FALSE; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 53 } while (index > 0); | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 54 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 55 /* Find a suitable spot next to the player */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 56 for (y=hero.y-1; y<hero.y+2; y++) | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 57 for (x=hero.x-1; x<hero.x+2; x++, index++) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 58 /* Make sure x coordinate is in range and that we are | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 59 * not at the player's position | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 60 */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 61 if (x<0 || x >= cols || index == 4) continue; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 62 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 63 /* Is it OK to move there? */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 64 if (step_ok(y, x, NOMONST, tp) && | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 65 (!isatrap(mvwinch(cw, y, x)) || | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 66 rnd(10) >= tp->t_stats.s_intel || | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 67 on(*tp, ISFLY))) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 68 /* OK, we can go here. But don't go there if | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 69 * monster can't get at player from there | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 70 */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 71 tryp.y = y; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 72 tryp.x = x; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 73 if (diag_ok(&tryp, &hero, tp)) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 74 spots[index] = TRUE; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 75 found_one = TRUE; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 76 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 77 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 78 } | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 79 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 80 /* If we found one, go to it */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 81 if (found_one) { | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 82 unsigned char rch; /* What's really where the creatures moves to */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 83 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 84 /* Find a legal spot */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 85 while (spots[index=rnd(9)] == FALSE) continue; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 86 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 87 /* Get the coordinates */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 88 y = hero.y + (index/3) - 1; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 89 x = hero.x + (index % 3) - 1; | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 90 | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 91 /* Move the monster from the old space */ | 
| 
e6179860cb76
Import XRogue 8.0 from the Roguelike Restoration Project (r1490)
 John "Elwin" Edwards parents: diff
changeset | 
