Mercurial > hg > early-roguelike
annotate rogue3/command.c @ 18:95e2bbb7b6e0
More conflict.  Change log to writelog.
| author | edwarj4 | 
|---|---|
| date | Tue, 10 Nov 2009 23:46:48 +0000 | 
| parents | a731f515575e | 
| children | 24e6beb9e7aa | 
| rev | line source | 
|---|---|
| 0 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 1 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 2 * Read and execute the user commands | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 3 * | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 4 * @(#)command.c 3.45 (Berkeley) 6/15/81 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 5 * | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 6 * Rogue: Exploring the Dungeons of Doom | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 7 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 8 * All rights reserved. | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 9 * | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 10 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 11 */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 12 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 13 #include <stdlib.h> | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 14 #include <ctype.h> | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 15 #include <signal.h> | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 16 #include <string.h> | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 17 #include "curses.h" | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 18 #include "machdep.h" | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 19 #include "rogue.h" | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 20 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 21 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 22 * command: | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 23 * Process the user commands | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 24 */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 25 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 26 void | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 27 command() | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 28 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 29 int ch; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 30 int ntimes = 1; /* Number of player moves */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 31 static int countch, direction, newcount = FALSE; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 32 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 33 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 34 if (on(player, ISHASTE)) ntimes++; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 35 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 36 * Let the daemons start up | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 37 */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 38 do_daemons(BEFORE); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 39 do_fuses(BEFORE); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 40 while (ntimes--) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 41 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 42 look(TRUE); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 43 if (!running) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 44 door_stop = FALSE; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 45 status(); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 46 lastscore = purse; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 47 wmove(cw, hero.y, hero.x); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 48 if (!((running || count) && jump)) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 49 draw(cw); /* Draw screen */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 50 take = 0; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 51 after = TRUE; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 52 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 53 * Read command or continue run | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 54 */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 55 if (wizard) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 56 waswizard = TRUE; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 57 if (!no_command) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 58 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 59 if (running) ch = runch; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 60 else if (count) ch = countch; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 61 else | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 62 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 63 ch = readchar(cw); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 64 if (mpos != 0 && !running) /* Erase message if its there */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 65 msg(""); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 66 } | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 67 } | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 68 else ch = ' '; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 69 if (no_command) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 70 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 71 if (--no_command == 0) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 72 msg("You can move again."); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 73 } | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 74 else | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 75 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 76 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 77 * check for prefixes | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 78 */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 79 if (isdigit(ch)) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 80 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 81 count = 0; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 82 newcount = TRUE; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 83 while (isdigit(ch)) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 84 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 85 count = count * 10 + (ch - '0'); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 86 ch = readchar(cw); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 87 } | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 88 countch = ch; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 89 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 90 * turn off count for commands which don't make sense | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 91 * to repeat | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 92 */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 93 switch (ch) { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 94 case 'h': case 'j': case 'k': case 'l': | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 95 case 'y': case 'u': case 'b': case 'n': | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 96 case 'H': case 'J': case 'K': case 'L': | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 97 case 'Y': case 'U': case 'B': case 'N': | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 98 case 'q': case 'r': case 's': case 'f': | 
| 3 
e551d384f7c6
Rest on '.' instead of ' ', like all the other roguelikes
 edwarj4 parents: 
0diff
changeset | 99 case 't': case 'C': case 'I': case '.': | 
| 0 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 100 case 'z': case 'p': | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 101 break; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 102 default: | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 103 count = 0; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 104 } | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 105 } | 
