|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)morg.c 5.2 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: # include "monop.ext"
23:
24: /*
25: * These routines deal with mortgaging.
26: */
27:
28: static char *names[MAX_PRP+2],
29: *morg_coms[] = {
30: "quit", /* 0 */
31: "print", /* 1 */
32: "where", /* 2 */
33: "own holdings", /* 3 */
34: "holdings", /* 4 */
35: "shell", /* 5 */
36: "mortgage", /* 6 */
37: "unmortgage", /* 7 */
38: "buy", /* 8 */
39: "sell", /* 9 */
40: "card", /* 10 */
41: "pay", /* 11 */
42: "trade", /* 12 */
43: "resign", /* 13 */
44: "save game", /* 14 */
45: "restore game", /* 15 */
46: 0
47: };
48:
49: static shrt square[MAX_PRP+2];
50:
51: static int num_good,got_houses;
52:
53: /*
54: * This routine is the command level response the mortgage command.
55: * it gets the list of mortgageable property and asks which are to
56: * be mortgaged.
57: */
58: mortgage() {
59:
60: reg int prop;
61:
62: for (;;) {
63: if (set_mlist() == 0) {
64: if (got_houses)
65: printf("You can't mortgage property with houses on it.\n");
66: else
67: printf("You don't have any un-mortgaged property.\n");
68: return;
69: }
70: if (num_good == 1) {
71: printf("Your only mortageable property is %s\n",names[0]);
72: if (getyn("Do you want to mortgage it? ") == 0)
73: m(square[0]);
74: return;
75: }
76: prop = getinp("Which property do you want to mortgage? ",names);
77: if (prop == num_good)
78: return;
79: m(square[prop]);
80: notify(cur_p);
81: }
82: }
83: /*
84: * This routine sets up the list of mortgageable property
85: */
86: set_mlist() {
87:
88: reg OWN *op;
89:
90: num_good = 0;
91: for (op = cur_p->own_list; op; op = op->next)
92: if (!op->sqr->desc->morg)
93: if (op->sqr->type == PRPTY && op->sqr->desc->houses)
94: got_houses++;
95: else {
96: names[num_good] = op->sqr->name;
97: square[num_good++] = sqnum(op->sqr);
98: }
99: names[num_good++] = "done";
100: names[num_good--] = 0;
101: return num_good;
102: }
103: /*
104: * This routine actually mortgages the property.
105: */
106: m(prop)
107: reg int prop; {
108:
109: reg int price;
110:
111: price = board[prop].cost/2;
112: board[prop].desc->morg = TRUE;
113: printf("That got you $%d\n",price);
114: cur_p->money += price;
115: }
116: /*
117: * This routine is the command level repsponse to the unmortgage
118: * command. It gets the list of mortgaged property and asks which are
119: * to be unmortgaged.
120: */
121: unmortgage() {
122:
123: reg int prop;
124:
125: for (;;) {
126: if (set_umlist() == 0) {
127: printf("You don't have any mortgaged property.\n");
128: return;
129: }
130: if (num_good == 1) {
131: printf("Your only mortaged property is %s\n",names[0]);
132: if (getyn("Do you want to unmortgage it? ") == 0)
133: unm(square[0]);
134: return;
135: }
136: prop = getinp("Which property do you want to unmortgage? ",names);
137: if (prop == num_good)
138: return;
139: unm(square[prop]);
140: }
141: }
142: /*
143: * This routine sets up the list of mortgaged property
144: */
145: set_umlist() {
146:
147: reg OWN *op;
148:
149: num_good = 0;
150: for (op = cur_p->own_list; op; op = op->next)
151: if (op->sqr->desc->morg) {
152: names[num_good] = op->sqr->name;
153: square[num_good++] = sqnum(op->sqr);
154: }
155: names[num_good++] = "done";
156: names[num_good--] = 0;
157: return num_good;
158: }
159: /*
160: * This routine actually unmortgages the property
161: */
162: unm(prop)
163: reg int prop; {
164:
165: reg int price;
166:
167: price = board[prop].cost/2;
168: board[prop].desc->morg = FALSE;
169: price += price/10;
170: printf("That cost you $%d\n",price);
171: cur_p->money -= price;
172: set_umlist();
173: }
174: /*
175: * This routine forces the indebted player to fix his
176: * financial woes.
177: */
178: force_morg() {
179:
180: told_em = fixing = TRUE;
181: while (cur_p->money <= 0)
182: fix_ex(getinp("How are you going to fix it up? ",morg_coms));
183: fixing = FALSE;
184: }
185: /*
186: * This routine is a special execute for the force_morg routine
187: */
188: fix_ex(com_num)
189: reg int com_num; {
190:
191: told_em = FALSE;
192: (*func[com_num])();
193: notify();
194: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.