BSD 4_3 development
[unix-history] / usr / src / games / monop / morg.c
CommitLineData
ef4e10da
C
1# include "monop.ext"
2
3/*
4 * These routines deal with mortgaging.
5 */
6
7static char *names[MAX_PRP+2],
8 *morg_coms[] = {
9 "quit", /* 0 */
10 "print", /* 1 */
11 "where", /* 2 */
12 "own holdings", /* 3 */
13 "holdings", /* 4 */
14 "shell", /* 5 */
15 "mortgage", /* 6 */
16 "unmortgage", /* 7 */
17 "buy", /* 8 */
18 "sell", /* 9 */
19 "card", /* 10 */
20 "pay", /* 11 */
21 "trade", /* 12 */
22 "resign", /* 13 */
23 "save game", /* 14 */
24 "restore game", /* 15 */
25 0
26 };
27
28static shrt square[MAX_PRP+2];
29
30static int num_good,got_houses;
31
32/*
33 * This routine is the command level response the mortgage command.
34 * it gets the list of mortgageable property and asks which are to
35 * be mortgaged.
36 */
37mortgage() {
38
39 reg int prop;
40
41 for (;;) {
42 if (set_mlist() == 0) {
43 if (got_houses)
44 printf("You can't mortgage property with houses on it.\n");
45 else
46 printf("You don't have any un-mortgaged property.\n");
47 return;
48 }
49 if (num_good == 1) {
50 printf("Your only mortageable property is %s\n",names[0]);
51 if (getyn("Do you want to mortgage it? ") == 0)
52 m(square[0]);
53 return;
54 }
55 prop = getinp("Which property do you want to mortgage? ",names);
56 if (prop == num_good)
57 return;
58 m(square[prop]);
59 notify(cur_p);
60 }
61}
62/*
63 * This routine sets up the list of mortgageable property
64 */
65set_mlist() {
66
67 reg OWN *op;
68
69 num_good = 0;
70 for (op = cur_p->own_list; op; op = op->next)
71 if (!op->sqr->desc->morg)
72 if (op->sqr->type == PRPTY && op->sqr->desc->houses)
73 got_houses++;
74 else {
75 names[num_good] = op->sqr->name;
76 square[num_good++] = sqnum(op->sqr);
77 }
78 names[num_good++] = "done";
79 names[num_good--] = 0;
80 return num_good;
81}
82/*
83 * This routine actually mortgages the property.
84 */
85m(prop)
86reg int prop; {
87
88 reg int price;
89
90 price = board[prop].cost/2;
91 board[prop].desc->morg = TRUE;
92 printf("That got you $%d\n",price);
93 cur_p->money += price;
94}
95/*
96 * This routine is the command level repsponse to the unmortgage
97 * command. It gets the list of mortgaged property and asks which are
98 * to be unmortgaged.
99 */
100unmortgage() {
101
102 reg int prop;
103
104 for (;;) {
105 if (set_umlist() == 0) {
106 printf("You don't have any mortgaged property.\n");
107 return;
108 }
109 if (num_good == 1) {
110 printf("Your only mortaged property is %s\n",names[0]);
111 if (getyn("Do you want to unmortgage it? ") == 0)
112 unm(square[0]);
113 return;
114 }
115 prop = getinp("Which property do you want to unmortgage? ",names);
116 if (prop == num_good)
117 return;
118 unm(square[prop]);
119 }
120}
121/*
122 * This routine sets up the list of mortgaged property
123 */
124set_umlist() {
125
126 reg OWN *op;
127
128 num_good = 0;
129 for (op = cur_p->own_list; op; op = op->next)
130 if (op->sqr->desc->morg) {
131 names[num_good] = op->sqr->name;
132 square[num_good++] = sqnum(op->sqr);
133 }
134 names[num_good++] = "done";
135 names[num_good--] = 0;
136 return num_good;
137}
138/*
139 * This routine actually unmortgages the property
140 */
141unm(prop)
142reg int prop; {
143
144 reg int price;
145
146 price = board[prop].cost/2;
147 board[prop].desc->morg = FALSE;
148 price += price/10;
149 printf("That cost you $%d\n",price);
150 cur_p->money -= price;
151 set_umlist();
152}
153/*
154 * This routine forces the indebted player to fix his
155 * financial woes.
156 */
157force_morg() {
158
159 told_em = fixing = TRUE;
160 while (cur_p->money <= 0)
161 fix_ex(getinp("How are you going to fix it up? ",morg_coms));
162 fixing = FALSE;
163}
164/*
165 * This routine is a special execute for the force_morg routine
166 */
167fix_ex(com_num)
168reg int com_num; {
169
170 told_em = FALSE;
171 (*func[com_num])();
172 notify();
173}