xref: /dragonfly/games/sail/pl_2.c (revision ebde9bc19bf006d3bbd89ddce823825c739499fd)
1 /*        $NetBSD: pl_2.c,v 1.13 2009/03/15 03:33:56 dholland Exp $   */
2 
3 /*
4  * Copyright (c) 1983, 1993
5  *        The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  */
31 
32 #include <sys/cdefs.h>
33 #ifndef lint
34 #if 0
35 static char sccsid[] = "@(#)pl_2.c      8.1 (Berkeley) 5/31/93";
36 #else
37 __RCSID("$NetBSD: pl_2.c,v 1.13 2009/03/15 03:33:56 dholland Exp $");
38 #endif
39 #endif /* not lint */
40 
41 #include <signal.h>
42 #include <unistd.h>
43 #include "display.h"
44 #include "extern.h"
45 #include "player.h"
46 
47 /*ARGSUSED*/
48 void
newturn(int n __unused)49 newturn(int n __unused)
50 {
51           repaired = loaded = fired = changed = 0;
52           movebuf[0] = '\0';
53 
54           alarm(0);
55           if (mf->readyL & R_LOADING) {
56                     if (mf->readyL & R_DOUBLE)
57                               mf->readyL = R_LOADING;
58                     else
59                               mf->readyL = R_LOADED;
60           }
61           if (mf->readyR & R_LOADING) {
62                     if (mf->readyR & R_DOUBLE)
63                               mf->readyR = R_LOADING;
64                     else
65                               mf->readyR = R_LOADED;
66           }
67           if (!hasdriver)
68                     send_ddead();
69 
70           display_hide_prompt();
71           if (Sync() < 0)
72                     leave(LEAVE_SYNC);
73           if (!hasdriver)
74                     leave(LEAVE_DRIVER);
75           display_reshow_prompt();
76 
77           if (turn % 50 == 0)
78                     send_alive();
79           if (mf->FS && (!mc->rig1 || windspeed == 6))
80                     send_fs(ms, 0);
81           if (mf->FS == 1)
82                     send_fs(ms, 2);
83 
84           if (mf->struck)
85                     leave(LEAVE_QUIT);
86           if (mf->captured != 0)
87                     leave(LEAVE_CAPTURED);
88           if (windspeed == 7)
89                     leave(LEAVE_HURRICAN);
90 
91           display_adjust_view();
92           display_redraw();
93 
94           signal(SIGALRM, newturn);
95           alarm(7);
96 }
97 
98 void
play(void)99 play(void)
100 {
101           struct ship *sp;
102 
103           for (;;) {
104                     blockalarm();
105                     display_redraw();
106                     unblockalarm();
107 
108                     switch (sgetch("~ ", (struct ship *)0, 0)) {
109                     case 14: /* ^N */
110                               display_scroll_pagedown();
111                               break;
112                     case 16: /* ^P */
113                               display_scroll_pageup();
114                               break;
115                     case 'm':
116                               acceptmove();
117                               break;
118                     case 's':
119                               acceptsignal();
120                               break;
121                     case 'g':
122                               grapungrap();
123                               break;
124                     case 'u':
125                               unfoulplayer();
126                               break;
127                     case 'v':
128                               Msg("%s", version);
129                               break;
130                     case 'b':
131                               acceptboard();
132                               break;
133                     case 'f':
134                               acceptcombat();
135                               break;
136                     case 'l':
137                               loadplayer();
138                               break;
139                     case 'c':
140                               changesail();
141                               break;
142                     case 'r':
143                               repair();
144                               break;
145                     case 'B':
146                               Msg("'Hands to stations!'");
147                               unboard(ms, ms, 1); /* cancel DBP's */
148                               unboard(ms, ms, 0); /* cancel offense */
149                               break;
150                     case '\f':
151                               centerview();
152                               display_force_full_redraw();
153                               break;
154                     case 'L':
155                               mf->loadL = L_EMPTY;
156                               mf->loadR = L_EMPTY;
157                               mf->readyL = R_EMPTY;
158                               mf->readyR = R_EMPTY;
159                               Msg("Broadsides unloaded");
160                               break;
161                     case 'q':
162                               Msg("Type 'Q' to quit");
163                               break;
164                     case 'Q':
165                               leave(LEAVE_QUIT);
166                               break;
167                     case 'I':
168                               foreachship(sp)
169                                         if (sp != ms)
170                                                   eyeball(sp);
171                               break;
172                     case 'i':
173                               if ((sp = closestenemy(ms, 0, 1)) == NULL)
174                                         Msg("No more ships left.");
175                               else
176                                         eyeball(sp);
177                               break;
178                     case 'C':
179                               centerview();
180                               break;
181                     case 'U':
182                               upview();
183                               break;
184                     case 'D':
185                     case 'N':
186                               downview();
187                               break;
188                     case 'H':
189                               leftview();
190                               break;
191                     case 'J':
192                               rightview();
193                               break;
194                     case 'F':
195                               lookout();
196                               break;
197                     case 'S':
198                               dont_adjust = !dont_adjust;
199                               break;
200                     }
201           }
202 }
203