1 /*        $NetBSD: init_field.c,v 1.13 2024/07/05 19:28:36 andvar Exp $         */
2 
3 /*
4  * Copyright (c) 1980, 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[] = "@(#)init_field.c          8.1 (Berkeley) 5/31/93";
36 #else
37 __RCSID("$NetBSD: init_field.c,v 1.13 2024/07/05 19:28:36 andvar Exp $");
38 #endif
39 #endif /* not lint */
40 
41 #include <curses.h>
42 #include "robots.h"
43 
44 static int telx = 0;
45 static int tely = 0;
46 
47 /*
48  * init_field:
49  *        Lay down the initial pattern which is constant across all levels,
50  *        and initialize all the global variables.
51  */
52 void
init_field(void)53 init_field(void)
54 {
55           int i;
56           static bool first = true;
57           static const char *const desc[] = {
58                                         "Directions:",
59                                         "",
60                                         "y k u",
61                                         " \\|/",
62                                         "h- -l",
63                                         " /|\\",
64                                         "b j n",
65                                         "",
66                                         "Commands:",
67                                         "",
68                                         "w:  wait for end",
69                                         "t:  teleport",
70                                         "q:  quit",
71                                         "^L: redraw screen",
72                                         "",
73                                         "Legend:",
74                                         "",
75                                         "+:  robot",
76                                         "*:  junk heap",
77                                         "@:  you",
78                                         "",
79                                         "Score: 0",
80                                         NULL
81           };
82 
83           Dead = false;
84           Waiting = false;
85           Score = 0;
86 
87           erase();
88           move(0, 0);
89           addch('+');
90           for (i = 1; i < Y_FIELDSIZE; i++) {
91                     move(i, 0);
92                     addch('|');
93           }
94           move(Y_FIELDSIZE, 0);
95           addch('+');
96           for (i = 1; i < X_FIELDSIZE; i++)
97                     addch('-');
98           addch('+');
99           if (first)
100                     refresh();
101           move(0, 1);
102           for (i = 1; i < X_FIELDSIZE; i++)
103                     addch('-');
104           addch('+');
105           for (i = 1; i < Y_FIELDSIZE; i++) {
106                     move(i, X_FIELDSIZE);
107                     addch('|');
108           }
109           if (first)
110                     refresh();
111           for (i = 0; desc[i] != NULL; i++) {
112                     move(i, X_FIELDSIZE + 2);
113                     addstr(desc[i]);
114           }
115           telx = X_FIELDSIZE + 2;
116           tely = i;
117           if (first)
118                     refresh();
119           first = false;
120 #ifdef FANCY
121           if (Pattern_roll)
122                     Next_move = &Move_list[-1];
123 #endif
124 }
125 
126 void
telmsg(int on)127 telmsg(int on)
128 {
129           move(tely, telx);
130           addstr(on ? "Teleport!" : "         ");
131 }
132