A.N.A.L.O.G. ISSUE 75 / AUGUST 1989 / PAGE 10
For all of you out there who have always wanted to own it all, here is your chance. Get your checkbook, grab your accountant and get ready for Capital!, a game of high finance where you get to live out your fondest capitalistic dreams. This game is written in 100% machine language; so play is fast and cruel.
Capital! is printed in two listings. Listing 1 is the BASIC data used to create the CAPITAL.OBJ file on your disk. Follow the directions in M/L Editor, found elsewhere in this issue, for typing instructions.
Listings 2 through 7 are the complete commented MAC/65 source code for Capital! They need not be typed in to play the game; they are provided for those readers interested in how the program works or who are learning 6502 assembly.
After you have created the CAPITAL. OB J file just binary load it from DOS to play the game.
To play Capital!, you must first choose your game options. There are only two: a fast or slow game and the number of players (2-4). The Option key is used to toggle between fast and slow. Use the Select key to choose the number of players. Pressing Start begins the game. Any time you wish to restart the game, press System Reset.
A fast game is the default setting. In a fast game, if a player cannot pay a fee or a debt, that person is “quo;broke” and may no longer play. The player’s token is removed from the game, and the player goes to debtor’s prison. In a slow game a player must sell businesses in order to get enough cash to pay his debts. Of course, the player could still go broke in a slow game. The winner is the last player on the board.
One last item: All money in this game is in $1,000 denominations, denoted by a G following the amount.
Each player must enter his name (up to eight characters long). Only the letters A through Z may be used. The Return key is used to end the name, and Delete/Backspace is used to edit.
Symbol | Location | Result |
---|---|---|
$ | Stock Market | You receive $12G ($12,000). |
L | Luck Square | Game goes to the transaction screen. |
H | Hog Hilton | Nothing; it’s a vacation. |
T | Tax Square | You lose 12% of your cash. |
C | Capital Gains Tax | Game goes to the transaction screen. |
This is the game board: a map of the U.S. showing mountain ranges, dice and little squares and circles which represent businesses. Your task is to travel around the U.S. and buy up as many of these as possible, thus making as much money as you can and becoming a true capitalist. Near the bottom of the screen the current player’s name is shown with his token number. You can see the tokens below the dice when the game is first started. The bottom line shows how much cash each player has.
Press Option to start the dice rolling and use Select to stop them. Your token will move automatically around the screen. The name of each business is shown as your token moves by or lands on it. If you land on one of these, the game will take you to the transaction screen (see below). The game waits eight seconds so you can see what happened. If you tire of waiting those eight seconds, just press a key to skip the wait.
If you land on $, H or T, you are not allowed to carry on any transactions on that turn.
The Luck and Capital Gains squares will be discussed at the end of this section. Usually you arrive at this screen because you landed on a property. The top line has the property’s name on it. Below the name is information about the business: purchase price, resale price, improvement level, double status, fee and the owner’s name.
Resale price is the amount you will receive if you sell this property voluntarily. It is between half price and full price. If you are forced to sell a property (slow game) because of insufficient funds, the resale price is half of the purchase price.
The improvement level of each property starts at 0 and may go up to 3. Improving a business costs $10G and increases the purchase price (and hence resale price) by $5G. More importantly, each increase doubles the fee other players must pay you when they land on this business.
Some businesses are “doubles.” If you land on a double, you have the option of buying it and its other half on the same turn. Buying the second half costs one and one-half of the double’s normal purchase price. The reason you want to get doubles is that anyone landing on one double gets charged a fee equal to the sum of both fees!
If the property you landed on is unowned you may purchase it, assuming you have enough cash. Next you may sell a property. Finally, you may improve a property. If you respond “y” to either of the last two options, the game goes to the pick property screen. You may cycle through the properties using the spacebar. Press Return to choose a property. You may exit using the Escape key. The only time you cannot use the Escape key is in a slow game if you are forced to sell. You must sell enough properties to obtain the cash to pay your debts. You may sell and/or improve any property you own, not just the one you landed on.
If another player owns the property you landed on, you are required to buy goods and/or services by paying the player a fee. If you have enough cash, it is automatically deducted from your account. The message “Transaction completed” lets you know this has been done. In the fast game, if you don’t have sufficient funds to pay, you are broke and may no longer play. Your properties are confiscated and will be available for sale to the other players (at half price!).
In the slow game you must sell properties to pay your debts. It is possible to get two “Transaction completed” messages. The first would be for selling a property; the second would be for paying a fee. This message stays on the screen for eight seconds. You may skip the wait by pressing any key.
Luck, as we all know, can be good or bad. If your luck is good, you could win $10G, $15G, or a free improvement for a property. If you don’t have a property to improve, you will get $10G instead. Bad luck results in losing $10G, in one business fee being cut in half, or in having the purchase price (and thus resale price) on a business cut in half.
This is like bad luck—only worse. If you land on this square you lose $45G.
The program functions on a custom GRAPHICS narrow play field screen, an ANTIC 4 map screen and a unique intro screen. This intro screen was produced by using a very long DLL The word “CAPITAL!” was made from ordinary control characters. Examine the source code to see how the letters were shaded.
This game can make friends or enemies for you—hope you can be a good capitalist!
Barry Kolbe is a high school math teacher who uses his Atari in the classroom to demonstrate graphing. Bryan Schappel is currently setting up a new home with his wife Carol.
1000 DATA 255,255,0,48,2,48,76,148,57,64,49,85,75,0,0,0,7658 1010 DATA 0,0,0,0,0,253,245,215,215,21 5,215,245,253,127,95,215,5285 1020 DATA 215,215,215,95,127,253,247,2 23,223,223,223,247,253,127,223,247,374 1030 DATA 247,247,247,223,127,213,213, 215,215,215,215,213,213,87,87,215,6266 1040 DATA 215,215,215,87,87,255,250,23 4,235,235,235,234,250,255,175,175,368 1050 DATA 239,255,239,175,175,85,85,85 ,85,85,85,85,85,85,85,85,4376 1060 DATA 105,105,85,85,85,255,234,238 ,254,254,254,254,250,255,171,187,512 1070 DATA 191,191,191,191,175,255,171, 235,234,234,235,235,171,255,234,235,13 76 1080 DATA 171,171,235,235,234,255,254, 234,235,234,255,234,254,255,191,171,21 29 1090 DATA 255,171,235,171,191,213,223, 223,223,223,223,223,213,87,247,247,966 4 1100 DATA 247,247,247,247,87,255,234,2 35,235,235,235,234,234,255,255,255,342 8 1110 DATA 255,255,239,175,175,95,95,95 ,95,95,95,95,95,245,245,245,2412 1120 DATA 245,245,245,245,245,239,191, 255,251,238,191,254,255,255,255,255,41 84 1130 DATA 255,255,255,255,255,0,255,25 5,255,255,255,255,255,0,0,255,6885 1140 DATA 255,255,255,255,255,0,0,0,25 5,255,255,255,255,0,0,0,8990 1150 DATA 0,255,255,255,255,0,0,0,0,0, 255,255,255,0,0,0,3900 1160 DATA 0,0,0,255,255,0,0,0,0,0,0,0, 255,192,192,240,6178 1170 DATA 240,252,252,255,255,240,240, 240,240,252,252,252,252,3,3,15,4084 1180 DATA 15,63,63,255,255,15,15,15,15 ,63,63,63,63,255,255,252,8580 1190 DATA 252,252,240,240,192,252,252, 252,252,240,240,240,240,255,255,191,36 37 1200 DATA 191,175,47,43,11,191,191,191 ,191,47,47,47,47,255,255,255,1476 1210 DATA 255,255,255,255,170,255,255, 255,255,255,255,170,170,255,255,255,33 40 1220 DATA 255,255,170,170,0,191,191,19 1,191,191,191,191,191,168,168,0,2563 1230 DATA 0,0,0,0,0,254,250,240,240,19 2,192,192,192,207,207,207,6731 1240 DATA 207,207,207,63,63,63,63,63,6 3,255,255,255,255,255,255,255,8144 1250 DATA 255,63,63,63,63,255,255,255, 255,255,255,63,15,240,240,240,7143 1260 DATA 240,240,192,192,0,252,252,25 2,252,252,252,252,252,3,3,3,2611 1270 DATA 3,15,15,15,15,63,63,63,63,25 5,255,255,255,192,192,192,3743 1280 DATA 192,240,240,252,255,3,3,3,3, 15,15,63,255,192,192,192,8071 1290 DATA 192,192,192,192,192,3,3,3,3, 3,3,3,3,0,0,0,4398 1300 DATA 3,3,15,15,63,240,252,255,255 ,252,255,252,252,240,252,252,2065 1310 DATA 252,252,252,252,240,252,240, 192,192,0,0,0,0,252,240,240,2454 1320 DATA 240,192,192,192,192,192,192, 192,192,240,240,252,252,192,192,240,75 6 1330 DATA 240,240,252,252,252,252,252, 252,240,240,240,192,192,252,240,192,25 66 1340 DATA 240,252,252,255,255,192,0,0, 0,192,192,192,192,11,11,11,5614 1350 DATA 11,11,11,15,15,15,15,15,63,6 3,63,255,255,0,0,3,179 1360 DATA 3,3,15,15,63,0,48,188,191,47 ,47,11,11,15,15,15,7285 1370 DATA 207,255,255,255,255,12,60,24 0,255,255,255,255,255,0,0,0,1584 1380 DATA 0,252,240,0,0,255,255,255,25 5,255,240,192,192,240,192,0,6484 1390 DATA 0,0,0,0,0,255,255,255,255,25 5,255,255,252,255,191,191,222 1400 DATA 191,175,47,43,10,63,63,63,63 ,63,63,255,255,252,252,240,3040 1410 DATA 240,252,252,255,255,0,0,0,0, 3,15,63,255,0,3,15,9756 1420 DATA 63,255,255,255,255,0,0,0,0,3 ,15,15,63,240,240,240,7047 1430 DATA 240,192,192,192,192,170,170, 0,0,0,0,0,0,10,10,0,6858 1440 DATA 0,0,0,0,0,2,2,0,0,0,0,0,0,0, 15,14,1915 1450 DATA 8,25,21,0,12,20,22,28,0,4,6, 15,7,5,0,5,2656 1460 DATA 8,14,18,0,7,19,3,0,16,15,21, 19,14,0,31,12,3312 1470 DATA 10,0,23,37,25,69,65,0,41,60, 73,84,0,12,15,38,6472 1480 DATA 17,13,0,18,27,36,37,0,22,51, 11,0,53,48,56,61,6211 1490 DATA 32,0,100,47,42,128,0,0,0,2,2 ,4,0,0,2,2,3140 1500 DATA 128,0,0,0,2,2,128,0,2,2,0,4, 0,0,0,128,4680 1510 DATA 2,2,0,2,2,4,0,2,2,119,1,119, 1,119,1,119,7819 1520 DATA 1,0,11,17,26,0,9,18,27,0,0,0 ,0,5,4,0,2332 1530 DATA 0,0,10,9,0,0,0,0,16,15,0,0,2 0,19,0,0,2416 1540 DATA 0,0,0,0,28,27,0,31,30,0,0,35 ,34,15,13,10,3787 1550 DATA 5,3,1,112,112,112,70,67,53,6 ,48,98,0,32,0,34,7503 1560 DATA 34,34,34,34,34,34,34,34,34,3 4,34,34,34,34,34,34,6184 1570 DATA 2,176,194,227,48,32,70,99,53 ,65,166,52,112,112,112,112,5201 1580 DATA 112,112,70,119,53,112,112,70 ,0,32,112,6,112,6,112,6,9823 1590 DATA 65,207,52,112,112,112,240,66 ,139,53,2,2,2,2,48,6,8810 1600 DATA 112,6,112,6,48,86,143,54,48, 86,164,54,112,112,70,185,5051 1610 DATA 54,112,6,112,112,112,6,86,24 5,54,65,230,52,112,112,80,5740 1620 DATA 68,0,112,4,4,4,4,4,4,4,4,4,4 ,4,4,4,2544 1630 DATA 4,4,4,4,4,4,132,70,99,53,194 ,11,55,160,66,227,4462 1640 DATA 48,65,16,53,64,0,32,96,32,64 ,0,96,0,0,0,0,5470 1650 DATA 0,0,0,0,35,33,48,41,52,33,44 ,1,0,0,0,0,3981 1660 DATA 0,0,244,242,225,238,243,225, 227,244,233,239,238,243,0,0,5824 1670 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1670 1680 DATA 0,0,0,0,0,0,101,110,116,101, 114,0,121,111,117,114,3281 1690 DATA 0,110,97,109,101,115,0,0,0,0 ,0,72,128,128,74,0,9262 1700 DATA 72,128,128,74,0,72,128,128,7 4,0,72,128,74,0,72,128,2144 1710 DATA 74,0,72,128,128,74,0,74,0,0, 0,0,72,0,0,0,5124 1720 DATA 0,0,0,128,200,0,0,0,128,200, 202,128,0,128,200,202,8166 1730 DATA 128,0,0,128,0,0,0,128,0,0,12 8,200,202,128,0,128,3668 1740 DATA 0,0,0,0,128,0,0,0,0,0,0,128, 0,0,0,0,3916 1750 DATA 128,82,82,128,0,128,128,128, 200,0,0,128,0,0,0,128,872 1760 DATA 0,0,128,82,82,128,0,128,0,0, 0,0,128,0,0,0,6338 1770 DATA 0,0,0,128,74,0,0,0,128,0,0,1 28,0,128,0,0,7132 1780 DATA 0,0,0,128,0,0,0,128,0,0,128, 0,0,128,0,128,8564 1790 DATA 74,0,0,0,200,0,0,0,0,0,0,202 ,128,128,200,0,1744 1800 DATA 200,0,0,202,0,200,0,0,0,0,20 2,128,200,0,0,128,2414 1810 DATA 0,0,200,0,0,202,0,202,128,12 8,200,0,79,0,0,0,897 1820 DATA 231,225,237,229,0,239,230,0, 232,233,231,232,0,230,233,238,7438 1830 DATA 225,238,227,229,0,0,0,112,11 4,111,103,114,97,109,109,101,5699 1840 DATA 100,0,98,121,90,0,0,0,0,0,0, 162,178,185,161,174,5215 1850 DATA 0,179,163,168,161,176,176,16 5,172,0,0,0,0,0,0,0,9330 1860 DATA 0,0,0,0,0,0,161,174,164,0,0, 0,0,0,0,0,5855 1870 DATA 0,0,0,0,0,0,0,162,161,178,17 8,185,0,171,175,172,8344 1880 DATA 162,165,0,0,0,0,0,239,240,24 4,233,239,238,0,0,0,7409 1890 DATA 102,97,115,116,0,103,97,109, 101,0,0,51,37,44,37,35,8897 1900 DATA 52,0,0,0,146,0,176,172,161,1 85,165,178,179,0,0,0,4867 1910 DATA 0,35,47,48,57,50,41,39,40,52 ,0,17,25,24,24,0,5602 1920 DATA 0,0,0,0,0,0,98,98,107,0,101, 110,116,101,114,112,3208 1930 DATA 114,105,115,101,115,0,0,0,0, 66,175,176,180,169,175,174,8390 1940 DATA 86,50,47,44,44,0,36,41,35,37 ,0,0,0,66,179,165,177 1950 DATA 172,165,163,180,86,51,52,47, 48,0,36,41,35,37,0,0,7430 1960 DATA 0,0,51,116,111,99,107,0,45,9 7,114,107,101,116,0,36,1901 1970 DATA 105,118,105,100,101,110,100, 115,0,112,97,121,0,121,111,117,4681 1980 DATA 0,4,17,18,39,0,0,0,0,0,41,50 ,51,0,52,97,6352 1990 DATA 120,0,33,117,100,105,116,26, 0,108,111,115,101,0,17,18,364 2000 DATA 5,0,111,102,0,121,111,117,11 4,0,99,97,115,104,0,0,1415 2010 DATA 0,0,0,0,54,97,99,97,116,105, 111,110,0,116,105,109,3909 2020 DATA 101,0,97,116,0,116,104,101,0 ,40,111,103,0,40,105,108,1828 2030 DATA 116,111,110,0,0,0,0,0,102,97 ,115,116,115,108,111,119,3819 2040 DATA 66,82,79,75,69,0,125,32,32,8 0,114,111,112,58,155,32,3062 2050 DATA 80,114,105,99,101,58,32,32,3 2,32,32,32,32,32,32,82,8402 2060 DATA 101,115,97,108,101,58,155,32 ,76,101,118,101,108,58,32,32,2720 2070 DATA 32,32,32,32,32,32,32,68,111, 117,98,108,101,58,155,32,3015 2080 DATA 32,32,70,101,101,58,32,32,32 ,32,32,32,32,32,32,32,7323 2090 DATA 79,119,110,101,114,58,0,89,1 01,115,0,78,111,0,78,111,2155 2100 DATA 110,101,0,66,10,2,212,0,148, 6,0,66,0,196,150,10,1560 2110 DATA 15,0,32,104,97,115,32,119,11 1,110,33,155,80,114,101,115,5301 2120 DATA 115,32,97,32,107,101,121,32, 116,111,32,112,108,97,121,32,3901 2130 DATA 97,103,97,105,110,46,0,32,10 5,115,32,66,114,111,107,101,3722 2140 DATA 33,155,0,32,112,114,111,112, 101,114,116,121,32,91,89,47,4082 2150 DATA 78,93,63,0,155,155,73,109,11 2,114,111,118,101,32,97,0,3692 2160 DATA 155,155,83,101,108,108,32,97 ,0,155,155,66,117,121,32,116,5064 2170 DATA 104,105,115,0,155,155,83,80, 67,61,110,101,120,116,44,32,3746 2180 DATA 82,69,84,61,99,104,111,111,1 15,101,0,44,32,69,83,67,1952 2190 DATA 61,101,120,105,116,0,155,155 ,84,114,97,110,115,97,99,116,6615 2200 DATA 105,111,110,32,112,114,111,9 9,101,115,115,101,100,46,0,155,4758 2210 DATA 155,73,110,115,117,102,102,1 05,99,105,101,110,116,32,102,117,5782 2220 DATA 110,100,115,46,0,155,155,68, 111,117,98,108,101,32,79,112,4899 2230 DATA 116,105,111,110,46,0,155,155 ,65,116,32,77,97,120,105,109,5165 2240 DATA 117,109,32,76,101,118,101,10 8,0,155,155,70,101,101,32,80,4341 2250 DATA 97,121,109,101,110,116,32,82 ,101,113,117,105,114,101,100,46,5164 2260 DATA 0,155,155,65,109,111,117,110 ,116,32,111,119,101,100,32,0,3411 2270 DATA 169,62,141,47,2,169,1,141,11 1,2,162,3,169,0,133,159,4906 2280 DATA 157,8,208,202,16,250,169,3,1 41,29,208,169,128,141,7,212,9682 2290 DATA 162,3,169,120,149,145,189,11 1,57,149,141,202,16,244,162,3,9351 2300 DATA 189,250,61,157,192,2,169,0,1 49,149,202,16,243,169,0,133,8853 2310 DATA 153,169,62,141,47,2,169,1,14 1,111,2,96,96,104,112,120,4846 2320 DATA 173,63,53,240,3,32,238,58,17 3,64,53,240,3,32,4,59,3226 2330 DATA 173,65,53,240,3,32,26,59,173 ,66,53,240,3,32,48,59,2444 2340 DATA 96,216,162,255,154,32,7,75,3 2,132,60,32,41,72,32,35,1218 2350 DATA 57,32,211,58,32,200,70,32,22 7,60,32,70,62,169,16,141,4945 2360 DATA 48,2,169,53,141,49,2,169,48, 141,244,2,32,100,57,162,5309 2370 DATA 4,189,245,61,157,196,2,202,1 6,247,169,0,133,159,133,173,513 2380 DATA 169,142,141,0,2,169,59,141,1 ,2,32,115,57,166,153,189,5966 2390 DATA 63,53,208,3,76,200,58,160,0, 189,120,52,133,130,169,40,7019 2400 DATA 133,131,177,130,240,3,200,20 8,249,132,174,169,20,56,229,174,2894 2410 DATA 74,170,160,19,169,0,153,99,5 3,136,16,250,200,169,59,157,9464 2420 DATA 95,53,169,61,157,97,53,165,1 53,24,105,17,157,96,53,177,6418 2430 DATA 130,240,10,32,70,71,157,99,5 3,232,200,208,242,169,53,157,2177 2440 DATA 100,53,169,48,157,101,53,173 ,31,208,201,3,208,249,32,205,1047 2450 DATA 59,165,153,10,170,189,126,59 ,141,99,58,189,127,59,141,100,8033 2460 DATA 58,189,134,59,141,129,58,189 ,135,59,141,130,58,198,157,32,8240 2470 DATA 70,59,166,153,246,149,181,14 9,201,36,208,4,169,0,149,149,9672 2480 DATA 181,149,168,185,173,61,149,1 41,185,209,61,149,145,32,238,58,650 2490 DATA 32,146,60,166,153,181,149,20 8,12,162,0,32,168,60,169,12,6079 2500 DATA 164,153,32,155,70,32,86,60,3 2,155,62,165,157,208,190,166,269 2510 DATA 153,181,149,160,3,217,116,52 ,240,12,136,16,248,32,97,60,6712 2520 DATA 32,211,58,32,250,72,32,227,6 0,166,153,181,149,240,3,32,8907 2530 DATA 238,60,32,70,62,230,153,165, 153,41,3,133,153,76,176,57,7366 2540 DATA 162,0,138,157,0,132,157,0,13 3,157,0,134,157,0,135,232,7788 2550 DATA 208,241,162,3,157,0,208,136, 16,250,96,162,0,164,145,189,206 2560 DATA 121,61,153,0,132,200,232,224 ,13,208,244,165,141,141,0,208,2534 2570 DATA 96,162,0,164,146,189,134,61, 153,0,133,200,232,224,13,208,1851 2580 DATA 244,165,142,141,1,208,96,162 ,0,164,147,189,147,61,153,0,7950 2590 DATA 134,200,232,224,13,208,244,1 65,143,141,2,208,96,162,0,164,412 2600 DATA 148,189,160,61,153,0,135,200 ,232,224,13,208,244,165,144,141,4025 2610 DATA 3,208,96,164,145,169,0,162,1 2,153,0,132,200,202,16,249,9882 2620 DATA 96,164,146,169,0,162,12,153, 0,133,200,202,16,249,96,164,150 2630 DATA 147,169,0,162,12,153,0,134,2 00,202,16,249,96,164,148,169,1265 2640 DATA 0,162,12,153,0,135,200,202,1 6,249,96,70,59,84,59,98,6364 2650 DATA 59,112,59,238,58,4,59,26,59, 48,59,72,165,159,208,27,5444 2660 DATA 169,36,141,9,212,141,10,212, 169,130,141,24,208,169,218,141,2288 2670 DATA 23,208,169,230,141,25,208,23 0,159,104,64,201,1,208,17,169,158 2680 DATA 162,141,10,212,141,24,208,16 9,0,141,26,208,230,159,104,64,9651 2690 DATA 169,162,141,10,212,141,26,20 8,104,64,169,0,133,157,32,55,6120 2700 DATA 60,162,0,160,0,177,155,157,7 7,113,232,200,192,3,208,245,3480 2710 DATA 162,0,177,155,157,117,113,23 2,200,192,6,208,245,162,0,177,2724 2720 DATA 155,157,157,113,232,200,192, 9,208,245,32,55,60,160,0,162,8834 2730 DATA 5,177,155,157,77,113,232,200 ,192,3,208,245,162,7,177,155,2794 2740 DATA 157,115,113,232,200,192,6,20 8,245,162,5,177,155,157,157,113,2632 2750 DATA 232,200,192,9,208,245,141,31 ,208,32,86,60,173,31,208,201,616 2760 DATA 5,208,151,96,173,10,210,41,7 ,201,6,176,247,170,24,101,8559 2770 DATA 157,133,157,230,157,138,10,1 70,189,55,61,133,155,189,56,61,8622 2780 DATA 133,156,96,169,0,133,20,165, 20,201,6,144,250,96,162,255,1535 2790 DATA 142,252,2,173,252,2,201,255, 208,244,169,0,133,20,133,19,9332 2800 DATA 173,252,2,201,255,208,6,165, 19,201,2,144,243,142,252,2,1062 2810 DATA 96,162,7,169,0,157,0,210,202 ,16,250,141,8,210,96,169,157 2820 DATA 133,141,0,210,169,168,141,1, 210,32,86,60,169,0,141,0,5111 2830 DATA 210,141,1,210,96,189,224,60, 72,133,158,32,227,60,238,46,24 2840 DATA 53,208,3,238,47,53,198,158,3 2,25,72,165,158,208,239,32,9846 2850 DATA 97,60,104,133,158,206,46,53, 32,25,72,173,46,53,201,255,8524 2860 DATA 208,3,206,47,53,198,158,208, 236,32,227,60,96,40,80,120,8692 2870 DATA 169,11,141,46,53,169,55,141, 47,53,96,165,153,170,10,168,7656 2880 DATA 181,149,162,1,201,17,208,47, 185,183,48,133,155,185,184,48,540 2890 DATA 133,156,70,156,102,155,70,15 6,102,155,70,156,102,155,185,183,1656 2900 DATA 48,56,229,155,153,183,48,185 ,184,48,229,156,153,184,48,32,370 2910 DATA 200,70,162,1,76,52,61,232,20 1,11,240,5,201,26,240,1,7927 2920 DATA 96,76,168,60,67,61,76,61,85, 61,94,61,103,61,112,61,3623 2930 DATA 49,49,49,49,50,49,49,49,49,5 0,49,49,49,49,49,49,9609 2940 DATA 49,50,50,49,49,49,50,49,49,4 9,50,50,49,50,49,49,9653 2950 DATA 49,50,49,50,50,49,50,49,50,4 9,50,49,50,50,49,50,9695 2960 DATA 50,49,50,50,49,50,96,224,96, 96,96,240,0,60,60,60,4927 2970 DATA 60,60,60,56,108,12,24,48,124 ,0,60,60,60,60,60,60,694 2980 DATA 126,12,24,12,102,60,0,60,60, 60,60,60,60,27,27,31,9179 2990 DATA 31,3,3,0,60,60,60,60,60,60,1 52,152,144,136,128,120,6848 3000 DATA 112,104,96,88,80,80,72,64,64 ,64,64,64,72,80,88,96,3456 3010 DATA 104,112,120,128,136,136,136, 144,152,160,168,168,168,160,120,136,30 42 3020 DATA 136,136,136,136,136,136,136, 136,136,120,120,120,104,88,72,56,7660 3030 DATA 56,56,56,56,56,56,56,56,56,7 2,88,88,88,88,88,104,3654 3040 DATA 120,120,78,160,244,224,130,2 ,66,122,198,250,74,72,70,68,8864 3050 DATA 66,64,62,60,58,56,232,230,22 8,148,68,244,164,166,168,170,4664 3060 DATA 172,174,176,178,180,182,6,86 ,88,90,92,94,174,254,252,113,2780 3070 DATA 114,114,114,114,114,114,114, 114,114,114,113,113,113,113,113,112,84 77 3080 DATA 112,112,112,112,112,112,112, 112,112,112,113,113,113,113,113,113,83 93 3090 DATA 113,113,113,162,35,189,254,6 1,133,155,189,34,62,133,156,189,1257 3100 DATA 147,48,48,13,208,15,160,0,16 9,57,145,155,200,169,58,145,9491 3110 DATA 155,202,16,225,96,201,1,208, 13,169,45,160,0,145,155,200,9751 3120 DATA 169,46,145,155,208,235,201,2 ,208,13,160,0,169,43,145,155,9525 3130 DATA 200,169,44,145,155,208,218,2 01,3,208,214,160,0,169,41,145,1219 3140 DATA 155,200,169,42,145,155,208,2 01,32,203,62,169,11,141,46,53,7772 3150 DATA 169,49,141,47,53,166,153,181 ,149,10,170,189,235,64,133,155,1813 3160 DATA 189,236,64,133,156,160,0,162 ,10,177,155,240,10,32,70,71,6790 3170 DATA 157,11,49,200,232,208,242,96 ,162,39,169,0,157,11,49,202,9035 3180 DATA 16,250,96,66,97,114,45,66,45 ,81,32,82,97,110,99,104,4761 3190 DATA 0,82,105,110,103,97,100,105, 110,103,32,80,104,111,110,101,6250 3200 DATA 0,67,114,111,115,115,101,121 ,101,32,67,97,98,108,101,32,5003 3210 DATA 84,86,0,79,108,100,101,32,89 ,111,114,107,101,32,84,105,5035 3220 DATA 109,101,115,0,83,112,117,100 ,115,32,80,111,116,97,116,111,6531 3230 DATA 32,70,97,114,109,0,66,108,97 ,99,107,32,71,111,108,100,5141 3240 DATA 32,79,105,108,0,82,101,120,3 2,65,117,116,111,32,67,111,4625 3250 DATA 114,112,46,0,84,104,114,101, 100,98,97,114,101,32,67,108,5185 3260 DATA 111,116,104,105,110,103,0,75 ,111,108,98,101,39,115,32,67,4141 3270 DATA 104,101,101,115,101,0,68,97, 105,115,121,39,115,32,68,97,4505 3280 DATA 105,114,121,0,66,108,97,99,1 07,32,74,97,99,107,39,115,4896 3290 DATA 32,67,97,115,105,110,111,0,6 8,101,97,116,104,32,86,97,4892 3300 DATA 108,108,101,121,32,83,112,97 ,0,65,100,97,109,115,32,65,4090 3310 DATA 112,112,108,101,32,79,114,99 ,104,97,114,100,0,83,111,117,5657 3320 DATA 114,32,71,114,97,112,101,115 ,32,86,105,110,101,121,97,114,6860 3330 DATA 100,0,83,104,111,114,116,32, 67,105,114,99,117,105,116,32,5740 3340 DATA 80,32,38,32,76,0,72,101,97,1 18,121,32,87,97,116,101,5031 3350 DATA 114,32,67,111,109,112,97,110 ,121,0,83,116,121,116,99,104,6689 3360 DATA 39,115,32,67,108,105,110,105 ,99,0,83,99,104,97,112,112,5947 3370 DATA 101,108,39,115,32,83,99,97,1 08,112,101,108,115,0,67,114,5214 3380 DATA 111,115,115,116,114,97,120,3 2,82,97,105,108,119,97,121,0,5657 3390 DATA 68,114,105,112,32,68,114,121 ,32,67,108,101,97,110,101,114,6281 3400 DATA 115,0,74,101,116,115,116,114 ,101,97,109,32,65,105,114,108,6350 3410 DATA 105,110,101,115,0,72,65,76,3 2,67,111,109,112,117,116,101,5930 3420 DATA 114,115,0,83,101,108,109,97, 114,116,32,83,116,111,114,101,6710 3430 DATA 115,0,73,79,85,32,80,101,110 ,110,101,121,115,0,87,105,5198 3440 DATA 108,116,39,115,32,86,101,103 ,101,116,97,98,108,101,115,0,5419 3450 DATA 84,105,116,97,110,105,99,32, 83,104,105,112,112,105,110,103,7119 3460 DATA 0,83,116,101,97,108,32,83,11 6,101,101,108,119,111,114,107,7383 3470 DATA 115,0,83,105,108,105,99,111, 110,32,71,117,108,99,104,0,4850 3480 DATA 68,105,115,97,115,116,114,11 1,117,115,32,73,110,115,117,114,7498 3490 DATA 97,110,99,101,0,84,104,101,3 2,76,117,99,107,32,83,113,4963 3500 DATA 117,97,114,101,0,0,67,97,112 ,105,116,97,108,32,71,97,4769 3510 DATA 105,110,115,32,84,97,120,0,2 16,64,113,64,131,64,56,63,5192 3520 DATA 253,63,237,63,200,64,17,64,4 1,63,72,64,165,64,216,64,6741 3530 DATA 119,63,139,63,86,64,156,63,1 76,63,216,64,35,64,23,63,4916 3540 DATA 214,62,53,64,200,64,228,62,1 01,64,71,63,216,64,90,63,6917 3550 DATA 105,63,148,64,244,62,6,63,21 7,64,179,64,217,63,197,63,9615 3560 DATA 165,163,170,189,75,48,133,17 2,169,0,133,173,189,124,52,208,1648 3570 DATA 1,96,168,185,3,48,197,166,20 8,14,185,75,48,24,101,172,8191 3580 DATA 133,172,165,173,105,0,133,17 3,96,32,41,67,16,1,96,169,4889 3590 DATA 103,160,56,32,125,71,32,186, 65,240,1,96,165,153,10,168,8345 3600 DATA 185,184,48,208,10,185,183,48 ,201,11,176,3,76,225,66,32,7485 3610 DATA 45,66,166,168,48,2,208,1,96, 189,39,48,201,3,144,10,5407 3620 DATA 169,233,160,56,32,125,71,76, 97,60,189,75,48,10,157,75,5745 3630 DATA 48,254,39,48,189,111,48,24,1 05,5,157,111,48,169,10,164,6452 3640 DATA 153,32,178,70,76,208,66,169, 86,160,56,32,125,71,32,102,6218 3650 DATA 71,201,43,208,1,96,201,35,20 8,244,201,0,96,32,51,65,7376 3660 DATA 169,252,160,56,32,125,71,169 ,0,133,171,240,4,169,1,133,8448 3670 DATA 171,165,153,10,168,185,184,4 8,197,173,240,2,176,9,185,183,2576 3680 DATA 48,197,172,144,27,240,25,164 ,153,165,172,32,178,70,169,0,9408 3690 DATA 133,164,165,171,208,7,164,16 6,165,172,32,155,70,76,208,66,455 3700 DATA 169,1,133,164,32,22,74,165,1 39,240,10,32,225,66,32,238,9338 3710 DATA 66,165,168,16,188,104,104,76 ,146,73,165,163,133,167,32,41,8592 3720 DATA 67,16,3,132,168,96,160,0,185 ,3,48,132,163,197,153,208,1199 3730 DATA 77,32,61,74,230,170,165,164, 240,14,169,20,160,57,32,125,8744 3740 DATA 71,165,172,166,173,32,118,71 ,169,135,160,56,32,125,71,165,8946 3750 DATA 164,208,7,169,158,160,56,32, 125,71,198,170,32,102,71,201,9603 3760 DATA 28,208,10,165,164,208,245,16 9,0,133,163,240,8,201,33,240,3285 3770 DATA 13,201,12,208,231,165,163,13 3,168,165,167,133,163,96,164,163,4529 3780 DATA 200,192,36,144,163,160,0,240 ,159,169,124,160,56,32,125,71,9335 3790 DATA 32,186,65,240,1,96,165,153,1 64,163,10,170,189,184,48,208,2646 3800 DATA 10,189,183,48,217,111,48,144 ,37,240,35,165,153,153,3,48,8210 3810 DATA 152,170,254,147,48,185,111,4 8,164,153,32,178,70,169,169,160,2028 3820 DATA 56,32,125,71,32,97,60,169,0, 133,171,133,173,96,169,194,1152 3830 DATA 160,56,32,125,71,32,97,60,16 9,0,96,32,41,67,16,3,1124 3840 DATA 132,168,96,165,164,208,13,16 9,115,160,56,32,125,71,32,186,8477 3850 DATA 65,240,1,96,32,45,66,165,168 ,48,248,208,5,165,164,208,2373 3860 DATA 243,96,170,222,147,48,169,25 5,157,3,48,189,191,48,164,153,2241 3870 DATA 32,155,70,76,208,66,160,35,1 65,153,217,3,48,240,3,136,9205 3880 DATA 16,248,96,166,153,181,149,20 1,32,208,22,169,0,141,123,67,9375 3890 DATA 169,70,141,124,67,169,125,32 ,17,70,169,217,160,64,76,112,8822 3900 DATA 67,174,10,210,224,6,176,219, 189,73,68,141,123,67,189,79,832 3910 DATA 68,141,124,67,169,125,32,17, 70,169,200,160,64,32,222,68,8993 3920 DATA 169,98,160,68,32,125,71,32,2 55,255,76,208,66,169,10,208,1579 3930 DATA 2,169,15,164,153,133,165,32, 155,70,32,158,67,169,117,160,9840 3940 DATA 68,32,125,71,165,165,162,0,7 6,118,71,169,85,160,68,32,7230 3950 DATA 125,71,96,32,183,68,48,213,1 70,189,39,48,201,3,176,205,996 3960 DATA 254,39,48,189,75,48,10,157,7 5,48,134,167,32,158,67,169,8151 3970 DATA 117,160,68,32,125,71,169,164 ,160,68,32,125,71,165,167,10,8155 3980 DATA 170,189,236,64,168,189,235,6 4,76,125,71,32,249,67,169,126,1448 3990 DATA 160,68,32,125,71,169,10,133, 172,162,0,32,118,71,230,171,9651 4000 DATA 32,224,65,104,104,96,169,92, 160,68,76,125,71,32,183,68,7766 4010 DATA 48,217,170,189,75,48,201,2,1 44,209,74,157,75,48,169,136,286 4020 DATA 160,68,72,132,155,32,249,67, 32,21,70,104,164,155,32,125,7604 4030 DATA 71,165,168,10,170,189,236,64 ,168,189,235,64,76,125,71,32,193 4040 DATA 183,68,48,167,170,189,111,48 ,201,2,144,159,74,157,111,48,9230 4050 DATA 169,149,160,68,208,204,222,1 28,0,132,50,166,67,67,68,67,7874 4060 DATA 68,67,71,111,111,100,46,155, 0,66,97,100,46,155,0,155,5811 4070 DATA 155,89,111,117,114,32,108,11 7,99,107,32,119,97,115,32,45,5470 4080 DATA 32,0,89,111,117,32,119,105,1 10,32,0,89,111,117,32,108,4940 4090 DATA 111,115,101,32,0,49,47,50,32 ,82,101,110,116,32,111,110,4805 4100 DATA 155,0,49,47,50,32,86,97,108, 117,101,32,111,110,32,155,5990 4110 DATA 0,97,110,32,105,109,112,114, 111,118,101,109,101,110,116,32,7340 4120 DATA 111,110,155,0,32,41,67,16,1, 96,160,0,162,0,185,3,3577 4130 DATA 48,197,153,208,5,152,157,0,4 1,232,200,192,36,208,239,232,5769 4140 DATA 138,32,6,74,170,189,255,40,1 33,168,96,133,155,132,156,169,3181 4150 DATA 2,32,17,70,160,0,132,174,177 ,155,240,10,9,128,32,17,6227 4160 DATA 70,164,174,200,208,240,169,2 2,76,17,70,63,21,18,58,42,4166 4170 DATA 56,61,57,13,1,5,0,37,35,8,10 ,47,40,62,45,11,8210 4180 DATA 16,46,22,43,23,162,255,142,2 52,2,173,252,2,201,255,240,6254 4190 DATA 249,41,63,201,12,208,3,169,0 ,96,201,52,208,3,169,126,9287 4200 DATA 96,160,25,217,254,68,240,5,1 36,16,248,48,216,152,24,105,621 4210 DATA 65,96,133,155,132,156,160,0, 132,174,169,127,145,155,32,24,9432 4220 DATA 69,162,0,142,31,208,164,174, 201,0,240,35,201,126,208,14,1714 4230 DATA 192,0,240,228,169,0,145,155, 136,145,155,76,75,69,192,8,9394 4240 DATA 176,214,153,51,49,32,70,71,9 ,128,145,155,200,208,201,153,2793 4250 DATA 51,49,145,155,96,169,207,141 ,48,2,169,52,141,49,2,169,7713 4260 DATA 58,141,47,2,160,4,185,32,56, 153,196,2,136,16,247,32,7547 4270 DATA 15,70,169,0,133,130,169,32,1 33,131,162,0,169,251,145,130,2071 4280 DATA 200,138,24,105,209,145,130,2 00,169,253,145,130,152,24,105,18,1054 4290 DATA 168,232,228,138,208,230,160, 0,132,175,165,130,24,105,4,164,477 4300 DATA 131,32,69,69,173,51,49,240,2 39,165,130,24,105,20,133,130,9651 4310 DATA 169,40,133,156,164,175,185,1 20,52,133,155,160,8,185,51,49,9373 4320 DATA 145,155,136,16,248,164,175,2 00,196,138,208,204,96,32,249,67,4679 4330 DATA 169,126,160,68,32,125,71,169 ,45,76,234,67,169,125,201,155,2247 4340 DATA 208,7,169,0,133,128,230,129, 96,201,126,208,12,32,94,70,9034 4350 DATA 32,119,70,169,0,168,145,130, 96,201,125,208,20,160,0,152,246 4360 DATA 153,0,32,153,0,33,153,0,34,2 00,208,244,133,128,133,129,1592 4370 DATA 96,32,70,71,72,32,119,70,160 ,0,104,145,130,166,128,232,939 4380 DATA 224,32,144,4,230,129,162,0,1 34,128,96,165,128,170,5,129,9879 4390 DATA 240,17,202,16,12,162,31,164, 129,208,4,162,0,240,2,198,9682 4400 DATA 129,134,128,96,169,224,133,1 30,169,31,133,131,164,129,165,130,3084 4410 DATA 24,105,32,133,130,144,2,230, 131,136,16,242,165,130,24,101,200 4420 DATA 128,133,130,144,2,230,131,96 ,72,152,10,168,104,24,121,183,9580 4430 DATA 48,153,183,48,185,184,48,101 ,173,153,184,48,76,200,70,133,1351 4440 DATA 160,152,10,168,185,183,48,56 ,229,160,153,183,48,185,184,48,2695 4450 DATA 229,173,153,184,48,160,39,16 9,0,153,227,48,136,16,250,166,2046 4460 DATA 138,189,161,52,170,200,152,2 4,105,17,157,227,48,169,26,157,431 4470 DATA 228,48,134,161,132,162,152,1 0,168,185,184,48,170,185,183,48,2891 4480 DATA 32,25,71,166,161,160,255,200 ,177,243,240,9,32,70,71,157,2333 4490 DATA 229,48,232,208,242,164,138,1 65,161,24,121,158,52,170,164,162,3847 4500 DATA 200,196,138,208,193,96,133,2 12,134,213,5,213,208,9,169,179,4682 4510 DATA 133,243,169,55,133,244,96,32 ,170,217,32,230,216,160,255,200,7798 4520 DATA 177,243,16,251,41,127,145,24 3,200,169,71,145,243,169,0,200,4897 4530 DATA 145,243,96,32,88,71,29,55,53 ,166,136,96,32,88,71,29,5048 4540 DATA 59,53,166,136,96,72,42,42,42 ,42,41,3,134,136,170,104,6434 4550 DATA 41,159,96,162,255,142,252,2, 173,252,2,201,255,240,249,142,8945 4560 DATA 252,2,96,32,25,71,165,243,16 4,244,141,132,71,140,133,71,1947 4570 DATA 173,255,255,240,20,32,17,70, 165,170,208,3,32,25,72,238,9112 4580 DATA 132,71,208,236,238,133,71,20 8,231,96,72,138,72,152,72,169,2906 4590 DATA 192,160,7,162,2,141,24,208,7 3,15,141,23,208,73,15,141,7300 4600 DATA 10,212,202,16,240,24,105,2,1 36,16,232,160,7,169,204,162,1764 4610 DATA 2,141,24,208,73,15,141,23,20 8,73,15,141,10,212,202,16,8267 4620 DATA 240,56,233,2,136,16,232,169, 4,141,23,208,104,168,104,170,1610 4630 DATA 104,64,72,165,159,208,28,169 ,58,141,0,212,169,10,141,23,8625 4640 DATA 208,141,22,208,169,162,141,2 4,208,141,10,212,141,26,208,230,3957 4650 DATA 159,104,64,169,0,141,10,212, 141,26,208,104,64,169,0,133,8888 4660 DATA 77,133,159,76,98,228,72,169, 0,133,20,165,20,240,252,104,2092 4670 DATA 96,134,128,132,129,96,169,7, 162,72,160,16,32,92,228,32,8172 4680 DATA 211,58,169,230,141,48,2,169, 52,141,49,2,169,62,141,47,7166 4690 DATA 2,32,25,72,169,36,141,244,2, 169,157,141,0,2,169,71,7945 4700 DATA 141,1,2,160,4,185,27,56,153, 196,2,136,16,247,169,3,8496 4710 DATA 141,4,212,169,0,133,139,133, 140,169,2,133,138,169,37,32,8801 4720 DATA 215,72,162,0,165,139,10,10,1 68,185,171,55,157,195,54,200,2058 4730 DATA 232,224,4,208,244,165,138,9, 144,141,215,54,32,237,72,74,1219 4740 DATA 144,3,76,191,72,74,144,19,16 9,32,32,215,72,230,138,165,1485 4750 DATA 138,201,5,144,205,169,2,133, 138,208,199,74,144,196,169,16,2804 4760 DATA 32,215,72,165,139,73,1,133,1 39,76,117,72,160,3,169,0,7121 4770 DATA 153,63,53,136,16,250,200,169 ,1,153,63,53,200,196,138,208,3694 4780 DATA 248,76,136,69,141,2,210,169, 164,141,3,210,160,192,202,208,5968 4790 DATA 253,134,77,136,208,248,140,3 ,210,96,173,31,208,168,69,140,3074 4800 DATA 37,140,132,140,201,4,96,169, 229,141,0,2,169,71,141,1,7943 4810 DATA 2,169,36,141,244,2,169,166,1 41,48,2,169,52,141,49,2,6781 4820 DATA 169,61,141,47,2,32,15,70,160 ,4,185,22,56,153,196,2,6210 4830 DATA 136,16,247,169,0,133,170,133 ,164,32,22,74,166,153,181,149,1792 4840 DATA 133,163,168,185,147,48,201,4 ,208,6,32,54,67,76,140,73,7140 4850 DATA 32,61,74,164,163,185,3,48,13 3,166,48,10,197,153,240,57,932 4860 DATA 32,208,65,76,140,73,32,156,6 6,208,46,164,163,185,124,52,966 4870 DATA 240,39,133,163,168,185,3,48, 16,31,185,111,48,72,74,24,5541 4880 DATA 121,111,48,153,111,48,32,61, 74,169,216,160,56,32,125,71,8373 4890 DATA 32,156,66,164,163,104,153,11 1,48,32,238,66,76,92,65,32,7411 4900 DATA 21,70,32,21,70,165,153,72,17 0,222,63,53,168,32,235,74,648 4910 DATA 169,74,160,56,32,125,71,104, 10,168,169,0,153,183,48,153,9518 4920 DATA 184,48,162,35,189,3,48,197,1 53,208,14,169,255,157,3,48,666 4930 DATA 189,191,48,157,111,48,222,14 7,48,202,16,232,32,200,70,32,36 4940 DATA 97,60,162,0,160,3,185,63,53, 240,1,232,136,16,247,224,3213 4950 DATA 2,144,3,76,185,58,32,21,70,1 60,3,185,63,53,208,3,6430 4960 DATA 136,16,248,32,235,74,169,37, 160,56,32,125,71,32,102,71,6987 4970 DATA 76,148,57,133,154,173,10,210 ,41,127,240,249,197,154,240,2,5219 4980 DATA 176,243,96,160,35,185,111,48 ,240,9,74,133,165,32,6,74,7543 4990 DATA 24,101,165,153,191,48,136,16 ,236,165,164,240,12,160,35,185,2985 5000 DATA 111,48,74,153,191,48,136,16, 246,96,230,170,169,185,160,55,4175 5010 DATA 32,125,71,162,7,160,0,32,36, 72,165,163,10,170,189,236,1340 5020 DATA 64,168,189,235,64,32,222,68, 162,8,160,1,32,36,72,162,7439 5030 DATA 0,164,163,185,111,48,32,118, 71,169,24,133,128,162,0,164,9343 5040 DATA 163,185,191,48,32,118,71,164 ,163,185,39,48,9,16,141,72,6945 5050 DATA 32,162,24,160,2,32,36,72,164 ,163,185,124,52,208,10,169,219 5060 DATA 14,160,56,32,125,71,76,163,7 4,169,10,160,56,32,125,71,7150 5070 DATA 162,8,160,3,32,36,72,164,163 ,185,3,48,133,174,185,75,9998 5080 DATA 48,133,165,185,124,52,240,16 ,170,189,3,48,197,174,208,8,1643 5090 DATA 189,75,48,24,101,165,133,165 ,165,165,162,0,32,118,71,169,169 5100 DATA 24,133,128,32,119,70,164,163 ,185,3,48,168,32,235,74,198,1592 5110 DATA 170,162,0,160,4,76,36,72,185 ,120,52,133,155,169,40,133,9690 5120 DATA 156,192,255,208,8,169,17,133 ,155,169,56,133,156,165,155,164,4078 5130 DATA 156,76,125,71,160,35,169,255 ,153,3,48,169,0,153,39,48,7788 5140 DATA 136,16,243,160,115,185,0,52, 153,75,48,136,16,247,160,0,9131 5150 DATA 185,0,224,153,0,36,185,0,225 ,153,0,37,185,0,226,153,372 5160 DATA 0,38,185,0,227,153,0,39,200, 208,229,160,7,169,255,153,5205 5170 DATA 248,37,136,16,250,169,148,13 3,12,169,57,133,13,169,192,141,2020 5180 DATA 14,212,96,0,112,71,115,40,11 1,112,64,66,67,69,71,40,5174 5190 DATA 40,40,40,40,40,40,40,40,40,4 0,40,40,40,40,40,40,630 5200 DATA 40,40,40,40,40,40,40,40,40,4 0,40,40,110,73,40,40,2012 5210 DATA 108,64,63,64,64,63,64,64,64, 66,66,66,67,67,68,68,4220 5220 DATA 68,66,64,67,69,40,40,40,40,4 0,40,40,40,40,40,40,1065 5230 DATA 40,40,40,40,119,64,94,40,109 ,64,64,64,64,64,63,64,4377 5240 DATA 64,64,64,64,64,64,64,64,64,6 4,64,64,76,40,98,113,5058 5250 DATA 68,68,114,40,40,40,40,40,40, 123,67,65,64,115,101,40,4700 5260 DATA 64,64,63,64,64,64,63,63,64,6 4,64,64,64,64,64,64,3946 5270 DATA 64,64,64,64,64,64,64,64,85,1 25,109,100,40,40,40,40,4308 5280 DATA 121,64,64,63,120,40,40,75,64 ,63,64,51,52,57,58,43,3247 5290 DATA 44,43,44,57,58,59,60,57,58,5 7,58,57,58,53,54,64,3044 5300 DATA 107,97,64,64,96,40,40,121,64 ,64,63,76,116,40,40,87,4898 5310 DATA 64,63,64,64,64,64,63,63,63,6 4,64,64,64,64,64,64,3988 5320 DATA 64,64,64,64,64,64,64,64,96,9 7,64,64,103,123,122,64,6845 5330 DATA 64,63,76,40,40,40,40,64,63,6 4,64,43,44,64,63,63,2988 5340 DATA 64,64,64,64,64,64,64,64,64,6 4,64,64,64,43,44,64,3450 5350 DATA 94,95,64,64,64,64,64,64,64,6 4,100,40,40,40,40,64,3246 5360 DATA 63,64,64,64,64,63,64,63,63,6 4,64,64,64,64,64,64,4040 5370 DATA 64,64,64,64,64,64,64,64,64,6 4,64,64,64,64,64,63,4058 5380 DATA 64,64,100,40,40,40,40,64,64, 63,64,43,44,64,63,63,3111 5390 DATA 63,64,64,62,49,49,49,61,62,5 0,49,50,61,43,44,57,2555 5400 DATA 58,43,44,43,44,47,48,64,63,6 4,99,40,40,40,40,64,2678 5410 DATA 64,63,64,64,64,64,64,63,63,6 4,64,62,49,50,49,61,3407 5420 DATA 62,50,49,50,61,64,64,64,64,6 4,64,64,64,64,64,63,3962 5430 DATA 64,64,64,104,40,40,40,83,64, 63,64,57,58,64,64,64,3842 5440 DATA 63,63,64,62,49,49,49,61,62,5 0,49,50,61,64,64,64,3309 5450 DATA 64,64,64,64,63,57,58,64,64,6 4,64,105,40,40,40,79,3789 5460 DATA 64,64,63,64,64,64,64,64,64,6 3,64,64,64,64,64,64,4151 5470 DATA 64,64,64,64,64,64,64,64,64,6 4,64,64,63,64,64,64,4161 5480 DATA 64,64,101,40,40,40,40,126,78 ,64,64,57,58,57,58,53,3863 5490 DATA 54,64,63,64,64,64,64,64,64,6 4,64,64,64,64,64,64,4181 5500 DATA 64,55,56,43,44,43,44,64,64,1 01,40,40,40,40,40,40,2138 5510 DATA 127,78,64,64,64,64,64,64,64, 63,63,64,64,64,64,64,4284 5520 DATA 64,64,64,64,64,64,64,64,64,6 4,64,63,64,64,64,64,4212 5530 DATA 102,40,40,40,40,40,40,40,40, 127,125,125,78,64,64,43,5095 5540 DATA 44,43,44,57,58,57,58,59,60,4 3,44,43,44,57,58,57,2662 5550 DATA 58,57,58,64,64,64,64,64,96,4 0,40,40,40,40,40,40,2320 5560 DATA 40,40,40,40,126,125,78,64,64 ,64,64,63,64,64,64,64,4786 5570 DATA 64,64,64,64,64,64,64,64,64,8 1,81,82,82,82,78,64,5543 5580 DATA 72,40,40,40,40,40,40,40,40,4 0,40,40,40,40,127,125,3717 5590 DATA 125,125,125,79,64,64,64,64,6 4,64,64,64,64,64,64,64,4720 5600 DATA 120,40,40,40,40,40,40,79,64, 72,40,40,40,40,40,40,1968 5610 DATA 40,40,40,40,40,40,40,40,40,4 0,40,126,79,76,78,64,4047 5620 DATA 64,64,64,76,125,125,125,125, 125,40,40,40,40,40,40,126,5699 5630 DATA 78,64,104,40,40,40,40,40,40, 40,40,40,40,40,40,40,1348 5640 DATA 40,40,40,40,126,40,126,78,64 ,64,77,40,40,40,40,40,3279 5650 DATA 40,40,40,40,40,40,40,40,126, 118,117,40,40,40,40,40,3491 5660 DATA 40,40,40,40,40,40,40,40,40,4 0,40,40,40,40,40,127,2492 5670 DATA 78,64,124,40,40,40,40,40,40, 40,40,40,40,40,40,40,1448 5680 DATA 40,127,84,40,40,40,40,40,40, 40,40,40,40,40,40,40,1426 5690 DATA 40,40,40,40,40,40,40,40,127, 78,40,40,40,40,40,40,2293 5700 DATA 40,40,40,40,40,40,40,40,40,4 0,40,40,40,40,40,226,4116 5710 DATA 2,227,2,0,48,0,0,0,0,0,0,0,0 ,0,0,0,6412
;SAVE#D:CAPITAL1.M65 .OPT NOLIST ;------------------------; ; ; ; CAPITAL! ; ; ; ;by: Bryan Schappel ; ;and Barry Kolbe ; ; ; ;(C) 1988 BBK Enterprises; ; ; ;------------------------; ; *= 0 PASS .= PASS+1 .IF PASS=1 .INCLUDE #D:SYSEQU.M65 .ENDIF ; ;Zero Page Equates ; *= $80 XPOS .DS 1 ;'cursor' x,y YPOS .DS 1 ;positions SCR .DS 2 ;ind. scr loc SCR2 .DS 2 SAVEX .DS 1 ;save X XSV1 .DS 1 ;register XSV2 .DS 1 PLAYER .DS 1 MAXP .DS 1 ;max # plyrs SPEED .DS 1 ;game speed CONSAV .DS 1 ;CONSOL save PX0 .DS 4 ;PMG x,y PY0 .DS 4 ;positions PTHP0 .DS 4 ;plyr map pos PNUM .DS 1 ;curr. plyr # RNUM .DS 1 L .DS 2 ;indirect SQRS .DS 1 ;squares to mov SCNT .DS 1 BDL .DS 1 CTMP .DS 1 ;cash tmp save XT .DS 1 ;save x & y YT .DS 1 CPROP .DS 1 ;cur. property DISFLAG .DS 1 ;disaster flag VALUE .DS 1 OWNER .DS 1 ;owner of prop TPROP .DS 1 ;temp prop. # PPROP .DS 1 ;picked property ESCFLAG .DS 1 ;print 'ESC' ? PAUSE? .DS 1 ;print speed RFLAG .DS 1 ;pay to whom? AMOUNT .DS 2 ;amount owed SVY .DS 1 ;save y SVY2 .DS 1 ;register ; ;Other Memory Usage ; GR0MEM = $2000 ;txt scrn RAM MSET = $2400 ;a char. set NAMEBUF = $2800 GRTAB = $2900 BOTLIN = 19 ;txt scrn length PMB = $8000 ;P/M base P0 = $8400 ;player 0 P1 = $8500 ;player 1 P2 = $8600 ;player 2 P3 = $8700 ;player 3 MONEY_CLR = $A2 ;$ line color ; .MACRO PRINT LDA #<%1 LDY #>%1 JSR EPRINT .ENDM ; .MACRO POSITION LDX #<%1 LDY #<%2 JSR POSIT .ENDM ; ;Start of Assembly ; *= $3000 CSET JMP FAKE ; ;Tables for property ownership ;rent, cost and double Xref. ; WHO .DS 36 ;owners IMP .DS 36 ;improvements RENT .DS 36 ;rent COST .DS 36 ;value REFTAB .DS 36 ;shadow table CASH .DS 8 ;players money RANTAB .DS 36 ;selling price MONEY .DS 40 ;money line PRPLIN .DS 40 ;prop. line IBUF .DS 16 ;input buffer ; ;Fetch the character set for ;the Map of the US ; *= $3140 .INCLUDE #D:CAPITAL3.M65 ; ;Initial Table Values ; ;the initial rent values ;must be less than 32 since ;inprovements are done by ;multiplying by 8 (3 ASL's) ; RENTORG .BYTE 0,15,14,8,25,21 .BYTE 0,12,20,22,28,0 .BYTE 4,6,15,7,5,0 .BYTE 5,8,14,18,0,7 .BYTE 19,3,0,16,15,21 .BYTE 19,14,0,31,12,10 ; ;the initial cost of properties ; COSTORG .BYTE 0,23,37,25,69,65 .BYTE 0,41,60,73,84,0 .BYTE 12,15,38,17,13,0 .BYTE 18,27,36,37,0,22 .BYTE 51,11,0,53,48,56 .BYTE 61,32,0,100,47,42 ; ;initial status of each property ;128 =special, like TAX ;0=single,free - 1=single,bought ;2=double,free - 3=double,bought ;4=LUCK, including CAP GAINS ; REFORG .BYTE 128,0,0,0,2,2 .BYTE 4,0,0,2,2,128 .BYTE 0,0,0,2,2,128 .BYTE 0,2,2,0,4,0 .BYTE 0,0,128,2,2,0 .BYTE 2,2,4,0,2,2 .WORD 375,375,375,375 ; ;these are the special squares ;which have scrolling messages ; SPLC .BYTE 0,11,17,26 X9 .BYTE 0,9,18,27 ; ;These cross reference tables ;identify the double properties ;by halves and allow the program ;to find the other half of a ;property. ; XREF .BYTE 0,0,0,0,5,4 .BYTE 0,0,0,10,9,0 .BYTE 0,0,0,16,15,0 .BYTE 0,20,19,0,0,0 .BYTE 0,0,0,28,27,0 .BYTE 31,30,0,0,35,34 ; ;these are used to center the ;info on the money line ; OFFSET .BYTE 15,13,10 XST .BYTE 5,3,1 ; ;Display List (Transactions) ; DLTXT .BYTE $70,$70,$70,$46 .WORD TITLE .BYTE $06,$30,$62 .WORD GR0MEM .BYTE 0,$22,$22,$22,$22,$22 .BYTE $22,$22,$22,$22,$22 .BYTE $22,$22,$22,$22,$22 .BYTE $22,$22,$02,$B0,$C2 .WORD MONEY .BYTE $20,$46 .WORD PLRN .BYTE $41 .WORD DLTXT ; ;Display List (Names) ; NDLIST .BYTE $70,$70,$70,$70,$70 .BYTE $70,$46 .WORD NAMEL .BYTE $70,$70,$46 .WORD GR0MEM .BYTE $70,$06,$70,$06,$70 .BYTE $06,$41 .WORD NDLIST ; ;Display List (Intro) ; IDL .BYTE $70,$70,$70,$F0,$42 .WORD INTL .BYTE $02,$02,$02,$02 .BYTE $30,$06,$70,$06,$70 .BYTE $06,$30,$56 .WORD AND .BYTE $30,$56 .WORD KNAME .BYTE $70,$70,$46 .WORD INTM .BYTE $70,$06,$70,$70,$70 .BYTE $06,$56 .WORD BBK .BYTE $41 .WORD IDL ; ;Display List (US map) ; DL .BYTE $70,$70,$50,$44 .WORD SCRN .BYTE $04,$04,$04,$04,$04 .BYTE $04,$04,$04,$04,$04 .BYTE $04,$04,$04,$04,$04 .BYTE $04,$04,$04,$04,$84 .BYTE $46 .WORD PLRN .BYTE $C2 TWIN .WORD RLMES .BYTE $A0,$42 .WORD MONEY .BYTE $41 .WORD DL ; ;tables to convert ATASCII ;to IC or vice versa ; A2I .BYTE $40,$00,$20,$60 I2A .BYTE $20,$40,$00,$60 ; ;table for which players ;are on the screen 0=off,1=on ; ONBRD .BYTE 0,0,0,0 ; ;screen titles ; TITLE .SBYTE " CAPITAL! " .SBYTE " transactions " PLRN .SBYTE " " .SBYTE " " NAMEL .SBYTE " enter yo" .SBYTE "ur names " ; ;Data for the word CAPITAL! ;on the intro screen. This ;was done with contro chars. ; INTL .BYTE $00,$00,$00,$48,$80 .BYTE $80,$4A,$00,$48,$80 .BYTE $80,$4A,$00,$48,$80 .BYTE $80,$4A,$00,$48,$80 .BYTE $4A,$00,$48,$80,$4A .BYTE $00,$48,$80,$80,$4A .BYTE $00,$4A,$00,$00,$00 .BYTE $00,$48,$00,$00,$00 .BYTE $00,$00,$00,$80,$C8 .BYTE $00,$00,$00,$80,$C8 .BYTE $CA,$80,$00,$80,$C8 .BYTE $CA,$80,$00,$00,$80 .BYTE $00,$00,$00,$80,$00 .BYTE $00,$80,$C8,$CA,$80 .BYTE $00,$80,$00,$00,$00 .BYTE $00,$80,$00,$00,$00 .BYTE $00,$00,$00,$80,$00 .BYTE $00,$00,$00,$80,$52 .BYTE $52,$80,$00,$80,$80 .BYTE $80,$C8,$00,$00,$80 .BYTE $00,$00,$00,$80,$00 .BYTE $00,$80,$52,$52,$80 .BYTE $00,$80,$00,$00,$00 .BYTE $00,$80,$00,$00,$00 .BYTE $00,$00,$00,$80,$4A .BYTE $00,$00,$00,$80,$00 .BYTE $00,$80,$00,$80,$00 .BYTE $00,$00,$00,$00,$80 .BYTE $00,$00,$00,$80,$00 .BYTE $00,$80,$00,$00,$80 .BYTE $00,$80,$4A,$00,$00 .BYTE $00,$C8,$00,$00,$00 .BYTE $00,$00,$00,$CA,$80 .BYTE $80,$C8,$00,$C8,$00 .BYTE $00,$CA,$00,$C8,$00 .BYTE $00,$00,$00,$CA,$80 .BYTE $C8,$00,$00,$80,$00 .BYTE $00,$C8,$00,$00,$CA .BYTE $00,$CA,$80,$80,$C8 .BYTE $00,$4F,$00,$00,$00 ; ;Other Screen Memory ; .SBYTE "game of high fin" .SBYTE "ance" LO .SBYTE " programmed by" .BYTE "Z",0,0,0 .SBYTE " BRYAN SCHAPPEL" .SBYTE " " AND .SBYTE " AND " .SBYTE " " KNAME .SBYTE " BARRY KOLBE" .SBYTE " " INTM .SBYTE " option fast " .SBYTE "game " PLN .SBYTE " SELECT 2 " .SBYTE "PLAYERS " .SBYTE " COPYRIGHT " .SBYTE "1988 " BBK .SBYTE " bbk enterprises" .SBYTE " " ; ;Scrolling Text Messages ; RLMES .SBYTE " OPTION R" .SBYTE "OLL DICE " .SBYTE " SELECT S" .SBYTE "TOP DICE " ; STKMES .SBYTE " Stock Ma" .SBYTE "rket Divid" .SBYTE "ends pay y" .SBYTE "ou $12G " ; TAXMES .SBYTE " IRS Tax " .SBYTE "Audit: los" .SBYTE "e 12% of y" .SBYTE "our cash " ; VACMES .SBYTE " Vacati" .SBYTE "on time at" .SBYTE " the Hog H" .SBYTE "ilton " ; FAST .SBYTE "fast" SLOW .SBYTE "slow" BROKE .BYTE "BROKE",0 ; ;Property Selection Box ; BOX .BYTE 125 .BYTE " Prop:",EOL .BYTE " Price: " .BYTE "Resale:",EOL .BYTE " Level: " .BYTE "Double:",EOL .BYTE " Fee: " .BYTE " Owner:",0 ; YES .BYTE "Yes",0 NO .BYTE "No",0 NA .BYTE "None",0 ; ;colors for various screens ; TCLR .BYTE $42,$0A,$02,$D4,$00 ICLR .BYTE $94,$06,$00,$42,$00 NCLR .BYTE $C4,$96,$0A,$0F,$00 ; ;more messages ; WINNER .BYTE " has won!" .BYTE EOL,"Press a ke" .BYTE "y to play again.",0 DEAD_MES .BYTE " is Broke!",EOL .BYTE 0 YNTXT .BYTE " property [Y/N]?",0 IMP_TXT .BYTE EOL,EOL,"Improve " .BYTE "a",0 SELL_TXT .BYTE EOL,EOL,"Sell a" .BYTE 0 BUY_MESS .BYTE EOL,EOL,"Buy thi" .BYTE "s",0 PICK_MESS .BYTE EOL,EOL,"SPC=ne" .BYTE "xt, RET=choose",0 PICK_REST .BYTE ", ESC=exit",0 TRAN_OK .BYTE EOL,EOL,"Tran" .BYTE "saction processed.",0 NCASH .BYTE EOL,EOL,"Insufficie" .BYTE "nt funds.",0 DOPT .BYTE EOL,EOL,"Double Opti" .BYTE "on.",0 MAX .BYTE EOL,EOL,"At Maximum " .BYTE "Level",0 FEE .BYTE EOL,EOL,"Fee Payment" .BYTE " Required.",0 AMTOWD .BYTE EOL,EOL,"Amount o" .BYTE "wed ",0 ; ;Get the Map Handler Half of ;the game. ; .INCLUDE #D:CAPITAL4.M65 .INCLUDE #D:CAPITAL5.M65 ; ; ;Put a byte to the screen ; CLRSCR LDA #$7D ;clear scn EPUT CMP #EOL ;a CR? BNE TRYDEL PUTCR LDA #0 ;linefeed STA XPOS INC YPOS RTS ; TRYDEL CMP #$7E ;delete? BNE TRYCLR JSR MOVELEFT ;DEL-BCKSP JSR GETSCR ;get scrn loc LDA #0 ;zap char TAY STA (SCR),Y RTS TRYCLR CMP #$7D ;clear? BNE NORMAL LDY #0 TYA ;clear the CLRSC STA GR0MEM,Y ;screen STA GR0MEM+$0100,Y STA GR0MEM+$0200,Y INY BNE CLRSC STA XPOS STA YPOS RTS ; NORMAL JSR ASC2IC ;to INT. code PHA ;save it JSR GETSCR ;get scn loc LDY #0 PLA ;get byte STA (SCR),Y ;on screen ; GORIGHT LDX XPOS ;move 'cursor' INX ;to right CPX #$20 ;at end of BCC EPLEAV ;line? INC YPOS ;yes LDX #0 ;left margin EPLEAV STX XPOS RTS ; MOVELEFT LDA XPOS ;can we TAX ;go left? ORA YPOS BEQ GOLEAV ;no DEX ;yes BPL GOX LDX #31 ;if $FF go LDY YPOS ;up 1 line BNE MVUP ;if not 0 LDX #0 BEQ GOX MVUP DEC YPOS ;up 1 line GOX STX XPOS GOLEAV RTS ;exit ; ;Get Scr Mem Loc of Cursor ; GETSCR LDA #<[GR0MEM-32] STA SCR LDA #>[GR0MEM-32] STA SCR+1 LDY YPOS ;get the GETSC1 LDA SCR ;correct CLC ;row ADC #$20 ;narrow plfld STA SCR BCC GODWN INC SCR+1 GODWN DEY ;at row yet? BPL GETSC1 ;no LDA SCR ;now get the CLC ;column ADC XPOS ;add in x STA SCR ;position BCC GETSCDN INC SCR+1 GETSCDN RTS ; ;Add Money to player cash ; ADD PHA ;save $ TYA ;plyr # ASL A ;x2 TAY PLA ;get $ CLC ADC CASH,Y ;add to STA CASH,Y ;plyr's cash LDA CASH+1,Y ADC AMOUNT+1 ;if >255 STA CASH+1,Y JMP FORMDOL ;show result ; ;Subtract Money from player ; SUB STA CTMP ;save $ TYA ;get plyr # ASL A ;x2 TAY LDA CASH,Y ;get cash SEC ;subt. $ SBC CTMP STA CASH,Y LDA CASH+1,Y SBC AMOUNT+1 ;if $ > 255 STA CASH+1,Y ;fall through ; ;Format MONEY line ; FORMDOL LDY #39 ;zero out LDA #0 ;the line FD1 STA MONEY,Y DEY BPL FD1 LDX MAXP ;max plyrs LDA XST-2,X ;for centering TAX ;info INY ;y was $FF FD2 TYA ;plyr # CLC ADC #$11 ;for screen IC STA MONEY,X ;show it LDA #$1A ; '$' STA MONEY+1,X STX XT ;save x,y STY YT TYA ;plyr # ASL A ;x2 TAY LDA CASH+1,Y ;get his cash TAX ;x=high byte LDA CASH,Y ;a=low JSR FORMNUM ;to ATASCII LDX XT ;position LDY #$FF ;now FD3 INY ;change cash LDA (INBUFF),Y ;to BEQ FD4 ;if '0' done JSR ASC2IC ;internal code STA MONEY+2,X ;show it INX BNE FD3 ;next digit FD4 LDY MAXP ;get offset LDA XT ;to next CLC ;plyr's info ADC OFFSET-2,Y TAX LDY YT INY ;next plyr CPY MAXP ;last one? BNE FD2 ;no RTS ;whew! ; ;Format a number ; FORMNUM STA FR0 ;low byte STX FR0+1 ;hi ORA FR0+1 ;hello! BNE GFP LDA #<BROKE ;if 0 you STA INBUFF ;are 'broke' LDA #>BROKE STA INBUFF+1 RTS GFP JSR IFP ;INT to FP JSR FASC ;FP to ATASCII LDY #$FF FM1 INY ;find last LDA (INBUFF),Y ;inversed BPL FM1 ;digit AND #$7F ;& make it STA (INBUFF),Y ;regular INY ;add a 'G' LDA #'G STA (INBUFF),Y ;and an EOL LDA #0 ;i.e. a 0 INY STA (INBUFF),Y RTS ;done ; ;Convert ASCII to ICODE ; ASC2IC JSR BITER ORA A2I,X LDX XSV2 RTS ; ;Convert ICODE to ASC ; IC2ASC JSR BITER ORA I2A,X LDX XSV2 RTS ; ;Make char an index ; BITER PHA ROL A ROL A ROL A ROL A AND #3 STX XSV2 TAX PLA AND #$9F RTS ; .INCLUDE #D:CAPITAL2.M65 ; *= $7000 ;the screen data for the ;map of the U.S.A. ; .INCLUDE #D:CAPITAL6.M65 *= $02E0 .WORD CSET .END
;SAVE#D:CAPITAL2.M65 ; ;--------------------; ; ; ; CAPITAL! part 2 ; ; ; ;by: Bryan Schappel ; ; ; ;--------------------; ; ;Get a key press ; GETCH LDX #$FF STX CH GETC LDA CH CMP #$FF BEQ GETC STX CH RTS ; ;Print a Number ; PRNUM JSR FORMNUM ;to IC first LDA INBUFF ;fall through LDY INBUFF+1 ; ;Eprint Routine ; EPRINT STA EPL+1 ;A= low byte STY EPL+2 ;Y = hi byte EPL LDA $FFFF ;print until BEQ EPO ;hitting a 0 JSR EPUT ;put it LDA PAUSE? ;fast or slow BNE EPN ;printing? JSR JIFF ;wait a jiff EPN INC EPL+1 ;next byte BNE EPL INC EPL+2 BNE EPL EPO RTS ;exit ; ;Intro DLI ; IDLI PHA ;save all the TXA ;registers PHA TYA PHA LDA #$C0 ;green hue LDY #7 ;dark lum IDLP LDX #2 IDL1 STA COLPF2 ;plyfld 2 EOR #$0F ;switch lum STA COLPF1 ;plyfld 1 EOR #$0F ;swtich back STA WSYNC ;wait sync DEX ;3 lines BPL IDL1 CLC ADC #2 ;increase lum DEY ;8 times BPL IDLP ;more shades LDY #7 ;now start LDA #$CC ;with bright IDL2 LDX #2 ;and shade IDL3 STA COLPF2 EOR #$0F STA COLPF1 EOR #$0F STA WSYNC DEX BPL IDL3 SEC ;bring lum SBC #2 ;down DEY BPL IDL2 LDA #$04 ;gray STA COLPF1 PLA ;restore TAY ;registers PLA TAX PLA RTI ;exit ; ;Text Screen DLI ; TDLI PHA ;save A LDA BDL ;DLI cntr BNE TDL2 LDA #58 ;to narrow STA DMACTL ;plyfld LDA #10 ;white STA COLPF1 STA COLPF0 LDA #MONEY_CLR ;$ line STA COLPF2 STA WSYNC STA COLBK ;& bckgrnd INC BDL PLA ;restore A RTI ;exit TDL2 LDA #0 ;top DLI STA WSYNC STA COLBK ;black bckgnd PLA RTI ; ;Simple VBI to keep DLI'S OK ; VBI LDA #0 STA ATRACT STA BDL ;DLI counter JMP XITVBV ; ;Wait Routine ; JIFF PHA ;wait 1 jiffy LDA #0 STA RTCLOK W1 LDA RTCLOK BEQ W1 PLA RTS ; ;Position Cursor ; POSIT STX XPOS STY YPOS RTS ; ;Intro Routine ; INTRO LDA #7 ;set up Vblank LDX #>VBI LDY #<VBI JSR SETVBV JSR CLRPMG ;erase PMG LDA #<IDL ;install DLIST STA SDLSTL LDA #>IDL STA SDLSTL+1 LDA #62 ;normal plyfd STA SDMCTL JSR JIFF ;wait a jiff LDA #>MSET ;our char STA CHBAS ;set LDA #<IDLI ;install DLI STA VDSLST LDA #>IDLI STA VDSLST+1 LDY #4 ;get intro INTY LDA ICLR,Y ;colors STA COLOR0,Y DEY BPL INTY LDA #3 ;center some STA HSCROL ;text LDA #0 ;0 = fast STA SPEED ;game speed STA CONSAV LDA #2 ;default # STA MAXP ;players LDA #$25 ;make a tone JSR BUZZER INTRL LDX #0 ;get the LDA SPEED ;word 'fast' ASL A ;or 'slow' ASL A TAY RL1 LDA FAST,Y ;put it on STA INTM+10,X ;screen INY INX CPX #4 ;done? BNE RL1 LDA MAXP ;# plyrs ORA #$90 ;in COLOR! STA PLN+10 ;show it JSR CONC ;get CONSOL LSR A ;/2 BCC ST2 JMP INTLV ;START! ; ST2 LSR A ;SELECT? BCC ST3 LDA #$20 ;tone JSR BUZZER INC MAXP ;more plyrs LDA MAXP ;too many? CMP #5 BCC INTRL ;no LDA #2 ;reset to 2 STA MAXP BNE INTRL ;loooooppppp ; ST3 LSR A ;is it OPTION? BCC INTRL ;naw LDA #$10 ;another tone JSR BUZZER LDA SPEED ;change speed EOR #1 STA SPEED JMP INTRL ;loop de loop INTLV LDY #3 ;yea, we start LDA #0 ;zap all TCL STA ONBRD,Y DEY BPL TCL INY ;put 1's for LDA #1 ;those plyrs TCL2 STA ONBRD,Y ;getting INY ;tokens CPY MAXP ;enuf? BNE TCL2 ;yup JMP GETNAMES ;who are they? ; ;Buzzer sound ; BUZZER STA AUDF2 ;doesn't LDA #$A4 ;sound like STA AUDC2 ;a buzzer to me LDY #$C0 ;but ok BZ DEX ;make a sound BNE BZ STX ATRACT DEY BNE BZ STY AUDC2 RTS ; ;Console Checker ; CONC LDA CONSOL ;get button TAY ;i wonder EOR CONSAV ;what this AND CONSAV ;does except STY CONSAV ;waste time CMP #4 RTS ; ;Transaction Processor ; TRANS LDA #<TDLI ;put in DLI STA VDSLST LDA #>TDLI STA VDSLST+1 LDA #>MSET ;our char set STA CHBAS LDA #<DLTXT ;& our display STA SDLSTL ;list LDA #>DLTXT STA SDLSTL+1 LDA #61 ;->narrow<- STA SDMCTL ;plyfld JSR CLRSCR ;clear screen LDY #4 ;get our TC LDA TCLR,Y ;coloring set STA COLOR0,Y DEY BPL TC LDA #0 ;0=fast print STA PAUSE? STA DISFLAG ;no disaster JSR MAKE_RAN ;get selling LDX PNUM ;prices LDA PTHP0,X ;get property STA CPROP ;landed on TAY LDA REFTAB,Y ;what is it? CMP #4 ;LUCK?? BNE GWHO ;no who has it? JSR DO_LUCK ;U Lucky dog! JMP OVER ;skip this GWHO JSR SHOPROP ;show prop info LDY CPROP ;curr prop # LDA WHO,Y ;get owner STA OWNER BMI TRY_BUY ;$FF=no one CMP PNUM ;is it US(ME?) BEQ OVER ;yes JSR PAY_RENT ;Ugh pay rent JMP OVER ;skip buying TRY_BUY JSR BUY_IT ;wanna buy BNE OVER ;a bridge? LDY CPROP ;check for a LDA XREF,Y ;double BEQ OVER ;nope STA CPROP ;save it TAY LDA WHO,Y ;who owns it? BPL OVER ;+ = owned LDA COST,Y ;how much? is PHA ;that double LSR A CLC ;add 1/2 again ADC COST,Y ;as much for STA COST,Y ;doubles JSR SHOPROP ;show prop info PRINT DOPT ;'Doubl option' JSR BUY_IT ;'wanna buy?' LDY CPROP ;location PLA ;restore origin- STA COST,Y ;al cost of prop OVER JSR WANT_SALE ;sell a prop JMP IMPROVE ;improve one? ; ;Handle Player Death ; DEAD JSR PUTCR ;linefeeds JSR PUTCR LDA PNUM ;get plyr # PHA ;save it TAX DEC ONBRD,X ;make 0 to TAY ;remove JSR SHO_NAME ;who was it? PRINT DEAD_MES ;'gone' PLA ;plyr # again ASL A ;x2 TAY ;zap his/her LDA #0 ;cash STA CASH,Y STA CASH+1,Y LDX #35 ;sell props SELL_OFF LDA WHO,X ;back to CMP PNUM ;the bank BNE SELL_DN LDA #$FF ;$FF = free STA WHO,X ;property LDA RANTAB,X ;new cost STA COST,X ;is half price DEC REFTAB,X ;what a SELL_DN DEX ;bargain! BPL SELL_OFF JSR FORMDOL ;show $ line JSR WAITKEY ;pause LDX #0 ;is anyone LDY #3 ;left-if so FNW LDA ONBRD,Y ;s/he is BEQ FNW2 ;the winner INX FNW2 DEY BPL FNW CPX #2 ;LT 2 means BCC SHO_WIN ;a winner JMP NOW ;still going ; ;Show the winner ; SHO_WIN JSR PUTCR ;linefeed LDY #3 SW1 LDA ONBRD,Y ;get plyr's # BNE GWN DEY BPL SW1 GWN JSR SHO_NAME ;winner's name PRINT WINNER ;'wins' JSR GETCH ;get a key JMP FAKE ;restart ; ;Get a RND # between 1 and Acc ; GET_RND STA RNUM ;save A RND LDA RANDOM AND #$7F ;0-127 BEQ RND ;no 0 CMP RNUM ;LT A? BEQ RNDO ;yup BCS RND ;overs RNDO RTS ;done ; ;Make the random property ;value table. Values are bet- ;ween 1/2 and full price. ; MAKE_RAN LDY #35 ;36 props MK1 LDA COST,Y ;if 0 no BEQ NORAN LSR A ;div by 2 STA VALUE ;save it JSR GET_RND ;get rand # CLC ;LT value ADC VALUE ;add to 1/2 NORAN STA RANTAB,Y ;price DEY ;next prop BPL MK1 LDA DISFLAG ;if forced BEQ MKO ;sale,just LDY #35 ;make prices MK2 LDA COST,Y ;1/2 price LSR A STA RANTAB,Y DEY BPL MK2 MKO RTS ; ;Show a Property ; SHOPROP INC PAUSE? ;fast print PRINT BOX ;print POSITION 7,0 ;outline LDA CPROP ;curr. prop ASL A ;get name TAX ;x2 for LDA PRPTAB+1,X ;offset from TAY ;table LDA PRPTAB,X ;A=hi Y=lo JSR INVPROP ;inverse POSITION 8,1 ;name LDX #0 ;X=lo cost LDY CPROP LDA COST,Y ;A = hi JSR PRNUM ;show cost LDA #24 ;move cursor STA XPOS LDX #0 LDY CPROP ;get prop# LDA RANTAB,Y ;sale price SPQ JSR PRNUM ;show it LDY CPROP ;get improve- LDA IMP,Y ;ment level ORA #$10 ;for screen STA GR0MEM+72 ;show it POSITION 24,2 LDY CPROP ;see if doubl LDA XREF,Y BNE SPY ;yes PRINT NO ;no JMP SPO ;skip SPY PRINT YES SPO POSITION 8,3 LDY CPROP ;who owns it LDA WHO,Y STA SVY ;save it LDA RENT,Y ;get 'rent' STA VALUE ;= fee LDA XREF,Y ;double? BEQ SHV ;no TAX ;who owns doubl? LDA WHO,X ;owner CMP SVY ;same as ME? BNE SHV ;no LDA RENT,X ;yes so CLC ;rent is more ADC VALUE STA VALUE SHV LDA VALUE ;show rent LDX #0 ;A=hi,X=lo JSR PRNUM LDA #24 STA XPOS JSR GETSCR ;screen loc LDY CPROP ;prop # LDA WHO,Y ;owner? TAY ;get name JSR SHO_NAME DEC PAUSE? ;slow print LDX #0 ;position LDY #4 ;cursor JMP POSIT ;& exit ; ;Show a player's name ;Y=player # to show ; SHO_NAME LDA X9,Y ;get right STA L ;name LDA #>NAMEBUF ;via offset STA L+1 CPY #$FF ;is it no one? BNE SNM0 ;no someone LDA #<NA ;'none' STA L LDA #>NA STA L+1 SNM0 LDA L ;print name LDY L+1 JMP EPRINT ; ;Initialize game tables ; INITAB LDY #35 ;36 locations IT1 LDA #$FF ;$FF = no STA WHO,Y ;owner LDA #0 ;0 = no STA IMP,Y ;inprovement DEY BPL IT1 LDY #115 ;copy all IT2 LDA RENTORG,Y ;preset STA RENT,Y ;tables to DEY ;working tables BPL IT2 LDY #0 ;download MVSET LDA $E000,Y ;ROM STA MSET,Y ;character LDA $E100,Y ;set STA MSET+256,Y LDA $E200,Y STA MSET+512,Y LDA $E300,Y STA MSET+768,Y INY BNE MVSET LDY #7 ;all this to LDA #$FF ;define a ASET STA MSET+504,Y ;block DEY ;cursor for BPL ASET ;name screen!!! LDA #<FAKE ;SYSTEM RESET STA DOSINI ;restarts LDA #>FAKE ;the game STA DOSINI+1 LDA #$C0 ;enable DLI's STA NMIEN RTS
;SAVE#D:CAPITAL3.M65 ; ;-------------------; ; CAPITAL! ; ; redefined char. ; ; set for the MAP ; ; ; ; by Barry Kolbe ; ; ; ;-------------------; ; ;includes most of a character ;set for ANTIC mode 4. ; .BYTE $00,$00,$00,$00 .BYTE $00,$00,$00,$00 .BYTE $FD,$F5,$D7,$D7 .BYTE $D7,$D7,$F5,$FD .BYTE $7F,$5F,$D7,$D7 .BYTE $D7,$D7,$5F,$7F .BYTE $FD,$F7,$DF,$DF .BYTE $DF,$DF,$F7,$FD .BYTE $7F,$DF,$F7,$F7 .BYTE $F7,$F7,$DF,$7F .BYTE $D5,$D5,$D7,$D7 .BYTE $D7,$D7,$D5,$D5 .BYTE $57,$57,$D7,$D7 .BYTE $D7,$D7,$57,$57 .BYTE $FF,$FA,$EA,$EB .BYTE $EB,$EB,$EA,$FA .BYTE $FF,$AF,$AF,$EF .BYTE $FF,$EF,$AF,$AF .BYTE $55,$55,$55,$55 .BYTE $55,$55,$55,$55 .BYTE $55,$55,$55,$69 .BYTE $69,$55,$55,$55 .BYTE $FF,$EA,$EE,$FE .BYTE $FE,$FE,$FE,$FA .BYTE $FF,$AB,$BB,$BF .BYTE $BF,$BF,$BF,$AF .BYTE $FF,$AB,$EB,$EA .BYTE $EA,$EB,$EB,$AB .BYTE $FF,$EA,$EB,$AB .BYTE $AB,$EB,$EB,$EA .BYTE $FF,$FE,$EA,$EB .BYTE $EA,$FF,$EA,$FE .BYTE $FF,$BF,$AB,$FF .BYTE $AB,$EB,$AB,$BF .BYTE $D5,$DF,$DF,$DF .BYTE $DF,$DF,$DF,$D5 .BYTE $57,$F7,$F7,$F7 .BYTE $F7,$F7,$F7,$57 .BYTE $FF,$EA,$EB,$EB .BYTE $EB,$EB,$EA,$EA .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$EF,$AF,$AF .BYTE $5F,$5F,$5F,$5F .BYTE $5F,$5F,$5F,$5F .BYTE $F5,$F5,$F5,$F5 .BYTE $F5,$F5,$F5,$F5 .BYTE $EF,$BF,$FF,$FB .BYTE $EE,$BF,$FE,$FF .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$FF,$FF,$FF .BYTE $00,$FF,$FF,$FF .BYTE $FF,$FF,$FF,$FF .BYTE $00,$00,$FF,$FF .BYTE $FF,$FF,$FF,$FF .BYTE $00,$00,$00,$FF .BYTE $FF,$FF,$FF,$FF .BYTE $00,$00,$00,$00 .BYTE $FF,$FF,$FF,$FF .BYTE $00,$00,$00,$00 .BYTE $00,$FF,$FF,$FF .BYTE $00,$00,$00,$00 .BYTE $00,$00,$FF,$FF .BYTE $00,$00,$00,$00 .BYTE $00,$00,$00,$FF .BYTE $C0,$C0,$F0,$F0 .BYTE $FC,$FC,$FF,$FF .BYTE $F0,$F0,$F0,$F0 .BYTE $FC,$FC,$FC,$FC .BYTE $03,$03,$0F,$0F .BYTE $3F,$3F,$FF,$FF .BYTE $0F,$0F,$0F,$0F .BYTE $3F,$3F,$3F,$3F .BYTE $FF,$FF,$FC,$FC .BYTE $FC,$F0,$F0,$C0 .BYTE $FC,$FC,$FC,$FC .BYTE $F0,$F0,$F0,$F0 .BYTE $FF,$FF,$BF,$BF .BYTE $AF,$2F,$2B,$0B .BYTE $BF,$BF,$BF,$BF .BYTE $2F,$2F,$2F,$2F .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$FF,$FF,$AA .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$FF,$AA,$AA .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$AA,$AA,$00 .BYTE $BF,$BF,$BF,$BF .BYTE $BF,$BF,$BF,$BF .BYTE $A8,$A8,$00,$00 .BYTE $00,$00,$00,$00 .BYTE $FE,$FA,$F0,$F0 .BYTE $C0,$C0,$C0,$C0 .BYTE $CF,$CF,$CF,$CF .BYTE $CF,$CF,$3F,$3F .BYTE $3F,$3F,$3F,$3F .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$FF,$FF,$FF .BYTE $3F,$3F,$3F,$3F .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$FF,$3F,$0F .BYTE $F0,$F0,$F0,$F0 .BYTE $F0,$C0,$C0,$00 .BYTE $FC,$FC,$FC,$FC .BYTE $FC,$FC,$FC,$FC .BYTE $03,$03,$03,$03 .BYTE $0F,$0F,$0F,$0F .BYTE $3F,$3F,$3F,$3F .BYTE $FF,$FF,$FF,$FF .BYTE $C0,$C0,$C0,$C0 .BYTE $F0,$F0,$FC,$FF .BYTE $03,$03,$03,$03 .BYTE $0F,$0F,$3F,$FF .BYTE $C0,$C0,$C0,$C0 .BYTE $C0,$C0,$C0,$C0 .BYTE $03,$03,$03,$03 .BYTE $03,$03,$03,$03 .BYTE $00,$00,$00,$03 .BYTE $03,$0F,$0F,$3F .BYTE $F0,$FC,$FF,$FF .BYTE $FC,$FF,$FC,$FC .BYTE $F0,$FC,$FC,$FC .BYTE $FC,$FC,$FC,$F0 .BYTE $FC,$F0,$C0,$C0 .BYTE $00,$00,$00,$00 .BYTE $FC,$F0,$F0,$F0 .BYTE $C0,$C0,$C0,$C0 .BYTE $C0,$C0,$C0,$C0 .BYTE $F0,$F0,$FC,$FC .BYTE $C0,$C0,$F0,$F0 .BYTE $F0,$FC,$FC,$FC .BYTE $FC,$FC,$FC,$F0 .BYTE $F0,$F0,$C0,$C0 .BYTE $FC,$F0,$C0,$F0 .BYTE $FC,$FC,$FF,$FF .BYTE $C0,$00,$00,$00 .BYTE $C0,$C0,$C0,$C0 .BYTE $0B,$0B,$0B,$0B .BYTE $0B,$0B,$0F,$0F .BYTE $0F,$0F,$0F,$3F .BYTE $3F,$3F,$FF,$FF .BYTE $00,$00,$03,$03 .BYTE $03,$0F,$0F,$3F .BYTE $00,$30,$BC,$BF .BYTE $2F,$2F,$0B,$0B .BYTE $0F,$0F,$0F,$CF .BYTE $FF,$FF,$FF,$FF .BYTE $0C,$3C,$F0,$FF .BYTE $FF,$FF,$FF,$FF .BYTE $00,$00,$00,$00 .BYTE $FC,$F0,$00,$00 .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$F0,$C0,$C0 .BYTE $F0,$C0,$00,$00 .BYTE $00,$00,$00,$00 .BYTE $FF,$FF,$FF,$FF .BYTE $FF,$FF,$FF,$FC .BYTE $FF,$BF,$BF,$BF .BYTE $AF,$2F,$2B,$0A .BYTE $3F,$3F,$3F,$3F .BYTE $3F,$3F,$FF,$FF .BYTE $FC,$FC,$F0,$F0 .BYTE $FC,$FC,$FF,$FF .BYTE $00,$00,$00,$00 .BYTE $03,$0F,$3F,$FF .BYTE $00,$03,$0F,$3F .BYTE $FF,$FF,$FF,$FF .BYTE $00,$00,$00,$00 .BYTE $03,$0F,$0F,$3F .BYTE $F0,$F0,$F0,$F0 .BYTE $C0,$C0,$C0,$C0 .BYTE $AA,$AA,$00,$00 .BYTE $00,$00,$00,$00 .BYTE $0A,$0A,$00,$00 .BYTE $00,$00,$00,$00 .BYTE $02,$02,$00,$00 .BYTE $00,$00,$00,$00
;SAVE#D:CAPITAL4.M65 ; ;------------------; ; CAPTIAL! ; ; ; ; PMG & U.S.A. MAP ; ; ; ; by: Barry Kolbe ; ; ; ;------------------; ; ;Set up PMG ; SETPMG LDA #$3E ;enable PMG STA SDMCTL LDA #1 ;set priority STA GPRIOR LDX #3 ;set size to 0 LDA #0 STA BDL PLS STA SIZEP0,X DEX BPL PLS LDA #3 STA GRACTL LDA #>PMB ;set PMG base STA PMBASE ; ;Initially put Players (Tokens) ;beneath the DICE ; LDX #3 PPS LDA #$78 ;vertical pos STA PY0,X LDA IXP,X ;initial horz STA PX0,X ;position DEX BPL PPS ; ;Set Token Colors ; LDX #3 PC1 LDA PCLR,X STA PCOLR0,X LDA #0 ;all begin at STA PTHP0,X ;'Stock Market' DEX BPL PC1 LDA #0 ;player 1 STA PNUM ;starts ; RSTPMG LDA #$3E ;reset PMG STA SDMCTL ;for MAP LDA #1 ;screen STA GPRIOR RTS ; ;Initial X Positions of Tokens ; IXP .BYTE $60,$68,$70,$78 ; ;Put P/M on screen ; SHOWPM LDA ONBRD ;is '1' alive? BEQ J1 ;nope JSR DEFP0 ;show '1' J1 LDA ONBRD+1 ;'2' on? BEQ J2 ;etc. JSR DEFP1 J2 LDA ONBRD+2 BEQ J3 JSR DEFP2 J3 LDA ONBRD+3 BEQ J4 JSR DEFP3 J4 RTS ; ;Entry Point While Playing ; FAKE CLD ;clear decimal LDX #$FF ;reset stack TXS JSR INITAB ;redo tables JSR SNDOFF ;init snd JSR INTRO ;show intro JSR SETPMG ;set up PMG JSR CLRPMG ;clear PMG mem JSR FORMDOL ;show $ line JSR RESROL ;DICE mesg JSR SHWPUR ;show 'free' ; ;Entry point of MAP moves ; ENTRY LDA #<DL ;display list STA SDLSTL LDA #>DL STA SDLSTL+1 LDA #>CSET ;char. set STA CHBAS JSR RSTPMG ;reset PMG LDX #4 ;get MAP MC1 LDA MAPCL,X ;colors STA COLOR0,X DEX BPL MC1 LDA #0 ;DLI cntr STA BDL STA AMOUNT+1 ;safety LDA #<DLI ;set up DLI STA VDSLST LDA #>DLI STA VDSLST+1 JSR SHOWPM ;put tokens on ; LDX PNUM ;get plyr # LDA ONBRD,X ;alive? BNE MV1 ;yes JMP NXP ;no do next MV1 LDY #0 ;put plyr name LDA X9,X ;on screen STA SCR LDA #>NAMEBUF STA SCR+1 GNL LDA (SCR),Y ;get length BEQ GNE ;of name INY BNE GNL GNE STY SVY ;save Y LDA #20 ;20 bytes/line SEC ;subt from 20 SBC SVY LSR A ;1/2 TAX ;use as index LDY #19 ;0 out line LDA #0 ;20 bytes GNC STA PLRN,Y DEY BPL GNC INY LDA #59 ;put '[#]' STA PLRN-4,X ;on screen LDA #61 STA PLRN-2,X LDA PNUM ;get plyr # CLC ADC #$11 ;for screen STA PLRN-3,X ;show # GNP LDA (SCR),Y ;next the name BEQ GNU ;done on 0 JSR ASC2IC ;INT code STA PLRN,X ;show char INX INY BNE GNP GNU LDA #53 ;' UP ' STA PLRN+1,X LDA #48 STA PLRN+2,X SCC LDA CONSOL ;wait for CMP #3 ;OPTION BNE SCC JSR ROLDIC ;roll 'em ; ;Move the Tokens ; LDA PNUM ;plyr # ASL A ;x2 for table TAX LDA ETAB,X ;erase table STA EJSR+1 LDA ETAB+1,X STA EJSR+2 LDA DTAB,X ;define table STA DJSR+1 LDA DTAB+1,X STA DJSR+2 ; MAIN DEC SQRS ;# to move EJSR JSR ERSP0 ;erase token LDX PNUM ;plyr # INC PTHP0,X ;next square LDA PTHP0,X ;all the way CMP #36 ;around yet? BNE MOK ;no LDA #0 ;yes reset to 0 STA PTHP0,X MOK LDA PTHP0,X ;find new TAY ;position of LDA PTHX,Y ;token(Player) STA PX0,X LDA PTHY,Y STA PY0,X DJSR JSR DEFP0 ;show token JSR BEEP ;make a sound LDX PNUM ;plyr # LDA PTHP0,X ;see if on $ BNE MKK ;no LDX #0 ;scroll message JSR MESSAG LDA #12 ;add 12G to LDY PNUM ;player JSR ADD MKK JSR WAIT ;wait a little JSR SHWPRP ;show name LDA SQRS ;done moving? BNE MAIN ;no LDX PNUM ;get location LDA PTHP0,X ; ;dont wait on specials ; LDY #3 SCM CMP SPLC,Y ;is it LUCK BEQ NOW ;HILTON, TAX DEY ;CAP GAINS BPL SCM ; ;This is a square that requires ;a transaction, so we remove ;the P/M and call the TRANS ;routine. Then we restore the ;MAP screen display and loop. ; JSR WAITKEY ;wait or key JSR CLRPMG ; remove PMG JSR TRANS ;go to TRANS ; ;NOW is entry spot from T_OK ; NOW JSR RESROL ;reset ROLL DICE LDX PNUM ;plyr # LDA PTHP0,X ;location BEQ COV ;if it is $ JSR CKMES ;other specials? COV JSR SHWPUR ;show name NXP INC PNUM ;next plyr LDA PNUM ;only 0-3 AND #3 STA PNUM ;next person's JMP ENTRY ;move ; ;Clear PMG Memory ; CLRPMG LDX #0 TXA CP1 STA P0,X STA P1,X STA P2,X STA P3,X INX BNE CP1 LDX #3 ;put plyrs off CP2 STA HPOSP0,X ;screen DEY BPL CP2 RTS ; ;Four routines to define ;each of the four players ;vertically & horizontally ; DEFP0 LDX #0 ;define LDY PY0 ;player 0 DF0 LDA P0DEF,X ;vertically STA P0,Y INY INX CPX #13 BNE DF0 ;and set its LDA PX0 ;horizontal STA HPOSP0 ;position RTS ; DEFP1 LDX #0 LDY PY0+1 DF1 LDA P1DEF,X STA P1,Y INY INX CPX #13 BNE DF1 LDA PX0+1 STA HPOSP0+1 RTS ; DEFP2 LDX #0 LDY PY0+2 DF2 LDA P2DEF,X STA P2,Y INY INX CPX #13 BNE DF2 LDA PX0+2 STA HPOSP0+2 RTS ; DEFP3 LDX #0 LDY PY0+3 DF3 LDA P3DEF,X STA P3,Y INY INX CPX #13 BNE DF3 LDA PX0+3 STA HPOSP0+3 RTS ; ;Four routines to erase each ;of the four players ; ERSP0 LDY PY0 ;get vert. LDA #0 ;position LDX #12 ;erase the EP0 STA P0,Y ;13 bytes INY DEX BPL EP0 RTS ; ERSP1 LDY PY0+1 LDA #0 LDX #12 EP1 STA P1,Y INY DEX BPL EP1 RTS ; ERSP2 LDY PY0+2 LDA #0 LDX #12 EP2 STA P2,Y INY DEX BPL EP2 RTS ; ERSP3 LDY PY0+3 LDA #0 LDX #12 EP3 STA P3,Y INY DEX BPL EP3 RTS ; ;Table of Erase Players Routines ; ETAB .WORD ERSP0 .WORD ERSP1 .WORD ERSP2 .WORD ERSP3 ; ; ;Table of Define Player Routines ; DTAB .WORD DEFP0 .WORD DEFP1 .WORD DEFP2 .WORD DEFP3 ; ;Change Character Sets in DLI ; DLI PHA LDA BDL ;which DLI? BNE BL2 ;not 1st LDA #>MSET ;switch to STA CHBASE ;our ROM set STA WSYNC LDA #$82 ;change colors STA COLPF2 ;blue LDA #$DA ;bright green STA COLPF1 LDA #$E6 ;Orng Green STA COLPF3 INC BDL ;next DLI PLA ;routine RTI BL2 CMP #1 ;next DLI? BNE BL3 ;no LDA #MONEY_CLR ;color STA WSYNC ;for $ line STA COLPF2 LDA #0 ;backgrnd STA COLBK ;scan line INC BDL ;next DLI PLA RTI BL3 LDA #MONEY_CLR ;bottom STA WSYNC ;all one STA COLBK ;color PLA RTI ; ;Roll DICE with OPTION ;stop them with SELECT ; ROLDIC LDA #0 ;sqrs=# to move STA SQRS JSR GETRND ;get random # LDX #0 ;now show it LDY #0 ;on DIE # 1 DR1 LDA (L),Y ;move 3 bytes STA DICPOS-$27,X ;to INX ;screen:x is INY ;offset CPY #3 BNE DR1 LDX #0 ;move 3 more DR2 LDA (L),Y ;1 line down STA DICPOS+1,X INX INY CPY #6 BNE DR2 LDX #0 ;& 3 more DR3 LDA (L),Y STA DICPOS+$29,X ;another INX ;line down INY CPY #9 BNE DR3 JSR GETRND ;now do 2nd LDY #0 ;DIE LDX #5 ;move x over DT1 LDA (L),Y STA DICPOS-$27,X INX INY CPY #3 ;3 bytes from BNE DT1 ;dice definition LDX #7 ;table DT2 LDA (L),Y STA DICPOS-1,X INX INY CPY #6 ;3 more BNE DT2 LDX #5 ;next line DT3 LDA (L),Y STA DICPOS+$29,X INX INY CPY #9 BNE DT3 STA CONSOL ;clear CONSOL JSR WAIT LDA CONSOL ;wait for CMP #5 ;SELECT BNE ROLDIC ;keep rollin' RTS ; ;Get Random DICE Throws ; GETRND LDA RANDOM ;only 0-5 AND #7 CMP #6 BCS GETRND TAX ;current throw CLC ADC SQRS ;0-5 STA SQRS INC SQRS ;1-6 TXA ASL A ;x2 for table TAX LDA RTAB,X ;get right STA L ;bytes for LDA RTAB+1,X ;DICE STA L+1 RTS ; ;Wait a few jiffies ; WAIT LDA #0 STA RTCLOK WA LDA RTCLOK CMP #6 BCC WA RTS ; ;Wait for 8 seconds or until ;a key is pressed. ; WAITKEY LDX #$FF ;clear CH STX CH LDA CH ;read keyboard CMP #$FF ;unitl released BNE WAITKEY LDA #0 ;set clock STA RTCLOK STA RTCLOK-1 WK LDA CH ;key pressed? CMP #$FF BNE WTDON ;yes-exit LDA RTCLOK-1 ;no see if CMP #2 ;time is up BCC WK WTDON STX CH ;clear CH RTS ; ;Initialixe Sound Registers ; SNDOFF LDX #7 LDA #0 SN1 STA AUDF1,X DEX BPL SN1 STA $D208 RTS ; ;Make a BEEP sound ; BEEP LDA #$85 STA AUDF1 LDA #$A8 STA AUDF1+1 JSR WAIT LDA #0 STA AUDF1 STA AUDF1+1 RTS ; ;Scroll Messages for Special ;Properties. X = msg # ; MESSAG LDA SCTAB,X ;how far to PHA ;scroll STA SCNT ;save it JSR RESROL ;reset line SC4 INC TWIN ;coarse scroll BNE SC1 INC TWIN+1 SC1 DEC SCNT ;decrease cntr JSR JIFF ;wait a jiffy LDA SCNT ;done yet? BNE SC4 ;no JSR WAITKEY ;wait 8 secs PLA ;amount to STA SCNT ;scroll back SC3 DEC TWIN ;do the back JSR JIFF ;ward scolling LDA TWIN CMP #$FF BNE SC2 DEC TWIN+1 SC2 DEC SCNT ;countdown BNE SC3 ;not done JSR RESROL ;reset line RTS ;exit ; ;Number of bytes to scroll ; SCTAB .BYTE 40,80,120 ; ;reset the ROLL DICE message ; RESROL LDA #<RLMES STA TWIN LDA #>RLMES STA TWIN+1 RTS ; ;Check for Scolling Message ; CKMES LDA PNUM ;plyr # TAX ASL A TAY LDA PTHP0,X ;which prop LDX #1 ;for scroll CMP #17 ;taxes? BNE NTAX ;no LDA CASH,Y ;if taxes STA L ;div cash by LDA CASH+1,Y ;8 and STA L+1 ;subtract LSR L+1 ;from cash ROR L ;if able to LSR L+1 ;otherwise ROR L ;just exit LSR L+1 ROR L ;this is a LDA CASH,Y ;tax break SEC ;for the poor SBC L STA CASH,Y LDA CASH+1,Y SBC L+1 STA CASH+1,Y JSR FORMDOL ;show new $ LDX #1 ;now scroll JMP MJM NTAX INX ;vacation=2 CMP #11 ;HOGG #1 BEQ MJM CMP #26 ;HOGG #2 BEQ MJM RTS ;done MJM JMP MESSAG ;go scroll ; ;Dice Definition Tables ; RTAB .WORD ONE .WORD TWO .WORD TRE .WORD FOR .WORD FIV .WORD SIX ; ONE .SBYTE "QQQQRQQQQ" TWO .SBYTE "RQQQQQQQR" TRE .SBYTE "RQQQRQQQR" FOR .SBYTE "RQRQQQRQR" FIV .SBYTE "RQRQRQRQR" SIX .SBYTE "RQRRQRRQR" ; ;These are the Token Definitions ; P0DEF .BYTE $60,$E0,$60,$60 .BYTE $60,$F0,$00,$3C,$3C .BYTE $3C,$3C,$3C,$3C ; P1DEF .BYTE $38,$6C,$0C,$18 .BYTE $30,$7C,$00,$3C,$3C .BYTE $3C,$3C,$3C,$3C ; P2DEF .BYTE $7E,$0C,$18,$0C .BYTE $66,$3C,$00,$3C,$3C .BYTE $3C,$3C,$3C,$3C ; P3DEF .BYTE $1B,$1B,$1F,$1F .BYTE $03,$03,$00,$3C,$3C .BYTE $3C,$3C,$3C,$3C ; ;These are the Horizontal ;positions of the Players ; PTHX .BYTE $98,$98,$90,$88 .BYTE $80,$78,$70,$68 .BYTE $60,$58,$50,$50 .BYTE $48,$40,$40,$40 .BYTE $40,$40,$48,$50 .BYTE $58,$60,$68,$70 .BYTE $78,$80,$88,$88 .BYTE $88,$90,$98,$A0 .BYTE $A8,$A8,$A8,$A0 ; ;These are the Vertical ;positions of the Players ; PTHY .BYTE $78,$88,$88,$88 .BYTE $88,$88,$88,$88 .BYTE $88,$88,$88,$78 .BYTE $78,$78,$68,$58 .BYTE $48,$38,$38,$38 .BYTE $38,$38,$38,$38 .BYTE $38,$38,$38,$48 .BYTE $58,$58,$58,$58 .BYTE $58,$68,$78,$78 ; ;The MAP colors and the ;TOKEN colors ; MAPCL .BYTE $4E,$A0,$F4,$E0,$82 PCLR .BYTE $02,$42,$7A,$C6 ; ;These are the low and hi bytes ;of the screen position of each ;property square on the MAP ; SCL .BYTE $FA,$4A,$48,$46,$44 .BYTE $42,$40,$3E,$3C,$3A .BYTE $38,$E8,$E6,$E4,$94 .BYTE $44,$F4,$A4,$A6,$A8 .BYTE $AA,$AC,$AE,$B0,$B2 .BYTE $B4,$B6,$06,$56,$58 .BYTE $5A,$5C,$5E,$AE,$FE .BYTE $FC ; SCH .BYTE $71,$72,$72,$72,$72 .BYTE $72,$72,$72,$72,$72 .BYTE $72,$71,$71,$71,$71 .BYTE $71,$70,$70,$70,$70 .BYTE $70,$70,$70,$70,$70 .BYTE $70,$70,$71,$71,$71 .BYTE $71,$71,$71,$71,$71 .BYTE $71 ; ;If a property is bought ;show it with a thicker ;box or circle. Each symbol ;is 2 ANTIC 4 characters wide, ; SHWPUR LDX #35 ;go thru all SHH LDA SCL,X ;36-first STA L ;get its LDA SCH,X ;screen location STA L+1 LDA REFTAB,X ;find out its BMI FJ ;status: special BNE FI LDY #0 ;0=single free LDA #$39 ;left side box STA (L),Y INY LDA #$3A ;right side STA (L),Y ;box FJ DEX ;next property BPL SHH RTS ;done FI CMP #1 ;1=singl,bought BNE FK LDA #$2D ;thick box,left LDY #0 STA (L),Y INY LDA #$2E ;thick,right STA (L),Y BNE FJ FK CMP #2 ;double,free? BNE FL ;no LDY #0 LDA #$2B ;circle STA (L),Y ;left side INY LDA #$2C ;right side STA (L),Y BNE FJ FL CMP #3 ;double,bought BNE FJ LDY #0 LDA #$29 ;thick circle STA (L),Y ;left side INY LDA #$2A ;right side STA (L),Y BNE FJ ; ;Show the Property Name as ;you go by it. ; SHWPRP JSR CLRPRP ;clear line LDA #<PRPLIN ;point to STA TWIN ;line in LDA #>PRPLIN ;display STA TWIN+1 ;list LDX PNUM ;plyr # LDA PTHP0,X ;get prop # ASL A TAX ;x2 for table LDA PRPTAB,X ;get name STA L LDA PRPTAB+1,X STA L+1 LDY #0 LDX #10 ;posit. on SP1 LDA (L),Y ;line,get byte BEQ SP2 ;0=done JSR ASC2IC ;to INT code STA PRPLIN,X ;show it INY INX BNE SP1 SP2 RTS ; ;Clear Property Show Line ; CLRPRP LDX #39 LDA #0 CPL STA PRPLIN,X DEX BPL CPL RTS ; ;The Property Names ; P01 .BYTE "Bar-B-Q Ranch",0 P02 .BYTE "Ringading Phone",0 P03 .BYTE "Crosseye Cable TV",0 P04 .BYTE "Olde Yorke Times",0 P05 .BYTE "Spuds Potato Farm",0 P06 .BYTE "Black Gold Oil",0 P07 .BYTE "Rex Auto Corp.",0 P08 .BYTE "Thredbare Clothing",0 P09 .BYTE "Kolbe's Cheese",0 P10 .BYTE "Daisy's Dairy",0 P11 .BYTE "Black Jack's Casino" .BYTE 0 P12 .BYTE "Death Valley Spa",0 P13 .BYTE "Adams Apple Orchard" .BYTE 0 P14 .BYTE "Sour Grapes Vineyard" .BYTE 0 P15 .BYTE "Short Circuit P & L" .BYTE 0 P16 .BYTE "Heavy Water Company" .BYTE 0 P17 .BYTE "Stytch's Clinic",0 P18 .BYTE "Schappel's Scalpels" .BYTE 0 P19 .BYTE "Crosstrax Railway",0 P20 .BYTE "Drip Dry Cleaners",0 P21 .BYTE "Jetstream Airlines",0 P22 .BYTE "HAL Computers",0 P23 .BYTE "Selmart Stores",0 P24 .BYTE "IOU Penneys",0 P25 .BYTE "Wilt's Vegetables",0 P26 .BYTE "Titanic Shipping",0 P27 .BYTE "Steal Steelworks",0 P28 .BYTE "Silicon Gulch",0 P29 .BYTE "Disastrous Insurance" .BYTE 0 P30 .BYTE "The Luck Square",0 P31 .BYTE 0 P32 .BYTE "Capital Gains Tax",0 ; ;The Look-Up Table for each ;square on the MAP board. ;* marks the doubles ; PRPTAB .WORD P31 ;stock market .WORD P25 ;wilt veg * .WORD P26 ;titanic ship* .WORD P07 ;rex auto .WORD P18 ;schappel * .WORD P17 ;stytches * .WORD P30 ;L (luck) .WORD P19 ;crosstrax rail .WORD P06 ;black gold oil .WORD P22 ;HAL computer * .WORD P28 ;silicon gulch* .WORD P31 ;H (holiday) .WORD P11 ;casino .WORD P12 ;death valley .WORD P23 ;selmart .WORD P13 ;adams apple * .WORD P14 ;sour grapes * .WORD P31 ;T (taxman) .WORD P20 ;drip dry .WORD P05 ;spud potatoes * .WORD P01 ;bbq ranch * .WORD P21 ;jetstream air .WORD P30 ;L (luck) .WORD P02 ;phone co .WORD P24 ;iou pennys .WORD P08 ;threadbare .WORD P31 ;H (holiday) .WORD P09 ;kolbe * .WORD P10 ;daisy * .WORD P27 ;steal steel .WORD P03 ;crosseye TV * .WORD P04 ;olde yorke * .WORD P32 ;C (capital tax) .WORD P29 ;insurance .WORD P16 ;heavy H2O * .WORD P15 ;P&L *
;SAVE#D:CAPITAL5.M65 ; ;--------------------; ; ; ;CAPITAL! Subroutines; ; ; ;by: Bryan Schappel ; ; ; ;--------------------; ; ;Get the Rent of a property ; GET_RENT LDA CPROP ;curr prop TAX ;offset in table LDA RENT,X ;get rent STA AMOUNT ;save LDA #0 ;0 hi byte STA AMOUNT+1 LDA XREF,X ;is this a dbl? BNE GOTD ;YES! RTS ;no. ; GOTD TAY ;half # LDA WHO,Y ;get owner CMP OWNER ;same as landed BNE ROUT ;on? no! LDA RENT,Y ;YES! Make rent CLC ;=half+half ADC AMOUNT STA AMOUNT LDA AMOUNT+1 ADC #0 STA AMOUNT+1 ROUT RTS ;exit ; ;Handle an Improvement ; IMPROVE JSR HAVE_ANY ;own any? BPL IM1 ;YES RTS ;none if - IM1 PRINT IMP_TXT ;'Improve?' JSR GETYN ;Yes/No BEQ GIM ;0 = yes RTS ;out GIM LDA PNUM ;plyr # ASL A ;x2 TAY LDA CASH+1,Y ;see if plyr BNE GIMP ;has $10G LDA CASH,Y ;plus $1G CMP #11 BCS GIMP ;sure JMP NO_CASH ;not enuf GIMP JSR PICK_PROP ;pick a prop LDX PPROP ;picked prop # BMI GOUT ;- = none pick BNE IMP_IT GOUT RTS ;0 = no ; IMP_IT LDA IMP,X ;get cur level CMP #3 ;at max. level? BCC DO_IMP ;no PRINT MAX ;'At max' JMP WAITKEY ;exit DO_IMP LDA RENT,X ;get rent ASL A ;x2 STA RENT,X ;save it INC IMP,X ;inc level LDA COST,X ;add 5 to CLC ;prop cost ADC #5 STA COST,X LDA #10 ;costs $10g LDY PNUM ;to inprove JSR SUB JMP T_OK ;'Trans. comp' ; ;Get a Yes or No ;0= yes <> = no ; GETYN PRINT YNTXT ;'Yes No' GYN JSR GETCH CMP #43 ;a Y BNE TRYN RTS TRYN CMP #$23 ;an N BNE GYN CMP #0 ;force BNE RTS ; ;Make a Player PAY ; PAY_RENT JSR GET_RENT ;get rent PRINT FEE ;print it LDA #0 ;pay to STA RFLAG ;player BEQ JJSS JUST_PAY LDA #1 ;just lose $ STA RFLAG JJSS LDA PNUM ;plyr # ASL A ;x2 TAY LDA CASH+1,Y ;get CASH CMP AMOUNT+1 ;is it enuf? BEQ PALO ;check low BCS PAY_IT ;yes PALO LDA CASH,Y ;enuf low? CMP AMOUNT BCC FORCE ;no,force sell BEQ FORCE ;ditto PAY_IT LDY PNUM ;pay LDA AMOUNT ;this amount JSR SUB LDA #0 ;turn disaster STA DISFLAG ;flag off LDA RFLAG ;just lose if BNE TOK ;<> 0 LDY OWNER ;pay owner LDA AMOUNT ;the amount JSR ADD ;add to owner TOK JMP T_OK ;exit FORCE LDA #1 ;force sale STA DISFLAG ;of props JSR MAKE_RAN ;selling prices LDA SPEED ;fast game=0 BEQ DED JSR NO_CASH ;'No cash' JSR WANT_SALE ;sell props LDA PPROP ;get prop # BPL JJSS ;ok,try pay DED PLA ;no props so PLA ;player dies JMP DEAD ;tell everyone ; ;Pick a Property ; PICK_PROP LDA CPROP ;save curr. STA TPROP ;property # JSR HAVE_ANY ;have any? BPL G_PICK ;yes STY PPROP ;no Y=$FF RTS ;exit G_PICK LDY #0 ;cycle thru PCK1 LDA WHO,Y ;props. who STY CPROP ;owns this one CMP PNUM ;ME? BNE PCKU ;no JSR SHOPROP ;show prop info INC PAUSE? ;1 = fast prnt LDA DISFLAG ;disaster? BEQ PCKQ ;no PRINT AMTOWD ;'Amt owed' LDA AMOUNT ;print amnt LDX AMOUNT+1 JSR PRNUM PCKQ PRINT PICK_MESS ;'pick?' LDA DISFLAG ;if disaster BNE PCKX ;must pick PRINT PICK_REST ;'ESC' PCKX DEC PAUSE? ;slow down PCKK JSR GETCH ;get key CMP #28 ;ESC? BNE NOESC ;no LDA DISFLAG ;yes,but if BNE PCKK ;disaster -no LDA #0 ;if ESC set to STA CPROP ;0 => none BEQ PICK_LV ;leave NOESC CMP #33 ;SPACE? BEQ PCKU ;next one CMP #12 ;RETURN? BNE PCKK ;picked one PICK_LV LDA CPROP ;get picked STA PPROP ;property LDA TPROP ;restore STA CPROP ;cur. prop RTS ; PCKU LDY CPROP ;get prop INY ;next one CPY #36 ;at end? BCC PCK1 ;no-cycle LDY #0 ;reset to 0 BEQ PCK1 ; ;Handle Buying a Property ; BUY_IT PRINT BUY_MESS ;'Buy?' JSR GETYN ;choice BEQ BUY1 ;yes RTS ;don't want to ; BUY1 LDA PNUM ;which plyr LDY CPROP ;cur. prop ASL A ;x2 TAX LDA CASH+1,X ;enuf CASH? BNE BUY_OK ;yes LDA CASH,X ;check low bytes CMP COST,Y BCC NO_CASH ;not enuf BEQ NO_CASH ; " BUY_OK LDA PNUM ;show who STA WHO,Y ;now owns it TYA TAX ;show it has INC REFTAB,X ;been purchased LDA COST,Y ;get price LDY PNUM ;subtract JSR SUB ;from CASH T_OK PRINT TRAN_OK ;'Complted' JSR WAITKEY ;wait 8 secs LDA #0 ;set pay to STA RFLAG ;flag & hi STA AMOUNT+1 ;byte of pay RTS ;amount ; ;Sorry no CASH ; NO_CASH LDA #<NCASH LDY #>NCASH JSR EPRINT JSR WAITKEY ;wait 8 secs LDA #0 RTS ; ;Sell a Property ; WANT_SALE JSR HAVE_ANY ;any? BPL P_SALE ;yes if + STY PPROP ;$FF if - RTS P_SALE LDA DISFLAG ;disaster? BNE GO_SELL ;yes-sell PRINT SELL_TXT ;choice JSR GETYN ;if not forced BEQ GO_SELL ;sell SLV RTS ; GO_SELL JSR PICK_PROP ;pick one LDA PPROP ;picked BMI SLV ;none available BNE SELL_IT ;if $FF. 0 LDA DISFLAG ;=none picked BNE GO_SELL ;forced sell RTS ; SELL_IT TAX ;which prop DEC REFTAB,X ;sell it in LDA #$FF ;table, $FF = STA WHO,X ;no one owns LDA RANTAB,X ;another ; sta cost,X ;way to make LDY PNUM ;the game JSR ADD ;add $ to CASH JMP T_OK ;done ; ;Own any Properties ;Y has propery # or 0 ;+ if prop owned, - if not ; HAVE_ANY LDY #35 ;check list LDA PNUM ;get our # HAV1 CMP WHO,Y ;in table? BEQ HAV2 ;yes DEY BPL HAV1 HAV2 RTS ; ;Handle LUCK locations ; DO_LUCK LDX PNUM ;plyr # LDA PTHP0,X ;cur prop # CMP #32 ;cap gains? BNE DO_RLUK ;no LDA #<CAPGNS ;CG routine STA LJMP+1 LDA #>CAPGNS STA LJMP+2 LDA #$7D ;clear scn JSR EPUT LDA #<P32 ;CG prop name LDY #>P32 JMP DO_CG DO_RLUK LDX RANDOM ;get random CPX #6 ;LUCK BCS DO_LUCK LDA LUCKL,X ;get LUCK STA LJMP+1 ;routine LDA LUCKH,X STA LJMP+2 LDA #$7D ;clear scn JSR EPUT LDA #<P30 ;'LUCK Sq' LDY #>P30 DO_CG JSR INVPROP ;inverse name PRINT YL ;'You lose' LJMP JSR $FFFF ;go to routine JMP T_OK ;done ; ;** Luck Routines ** ; ;Win 10G free (WOW for ME?) ; G1 LDA #10 BNE G2.1 ; ;Win 15G free ; G2 LDA #15 ;give $ G2.1 LDY PNUM ;to whom? STA VALUE JSR ADD ;add to CASH JSR PG ;Luck is 'good' PRINT YW ;'You win' LDA VALUE ;'$nnG' LDX #0 JMP PRNUM ;print & exit PG PRINT GOOD ;print 'good' RTS ; ;Get a FREE Improvement ; G3 JSR GRPROP ;get a prop BMI G1 ;none so TAX ;give $ LDA IMP,X ;get level CMP #3 ;at max? BCS G1 ;yup give $ INC IMP,X ;increase it LDA RENT,X ;get fee ASL A ;x2 STA RENT,X ;save it STX TPROP ;save prop # JSR PG ;'good' PRINT YW ;'You win' PRINT AN_IMP ;'improv..' LDA TPROP ;get prop # ASL A ;x2 TAX ;get name LDA PRPTAB+1,X TAY LDA PRPTAB,X JMP EPRINT ;print & exit ; ;Loose 10G ; B1 JSR PB ;'Bad luck' PRINT YD ;'You lose' LDA #10 ;'$10G' B1A STA AMOUNT ;low amt LDX #0 ;high amt JSR PRNUM ;show it INC RFLAG ;pay to bank JSR JUST_PAY ;take it away PLA ;pull return PLA RTS ;exit ; PB LDA #<BAD ;print 'bad LDY #>BAD ;luck' JMP EPRINT ; ;Cut the Rent(Fee) in half ; B2 JSR GRPROP ;grab prop # BMI B1 ;none TAX LDA RENT,X ;get rent CMP #2 ;don't fall BCC B1 ;below 1 LSR A ;div 2 STA RENT,X ;save it LDA #<HR ;'1/2 value LDY #>HR ;'on improv..' ; SB PHA ;save hi/lo STY L ;of msg JSR PB ;'bad luck' JSR PUTCR ;linefeed PLA ;get msg LDY L JSR EPRINT ;print it LDA PPROP ;picked prop ASL A TAX ;get name LDA PRPTAB+1,X TAY LDA PRPTAB,X JMP EPRINT ;print name ; ;Halve the Value of a Property ; B3 JSR GRPROP ;grab a prop # BMI B1 ;none TAX LDA COST,X ;get price CMP #2 ;not LT 1 BCC B1 LSR A ;div by 2 STA COST,X ;save it LDA #<HV ;'1/2 value' LDY #>HV BNE SB ;print it ; ;Luck address tables ;alternate for randomness ; LUCKL .BYTE <B1,<G1,<B2 .BYTE <G2,<B3,<G3 LUCKH .BYTE >B1,>G1,>B2 .BYTE >G2,>B3,>G3 ; ;Luck Text ; GOOD .BYTE "Good.",EOL,0 BAD .BYTE "Bad.",EOL,0 YL .BYTE EOL,EOL,"Your luck " .BYTE "was - ",0 YW .BYTE "You win ",0 YD .BYTE "You lose ",0 HR .BYTE "1/2 Rent on",EOL,0 HV .BYTE "1/2 Value on ",EOL,0 AN_IMP .BYTE "an improvement " .BYTE "on",EOL,0 ; ;Get a Random Property ;WHO =owners, GRTAB cur player ; GRPROP JSR HAVE_ANY ;any to get? BPL GR2 ;yes indeed RTS ;nawh. ; GR2 LDY #0 ;indx to WHO LDX #0 ;indx to GRTAB GR3 LDA WHO,Y ;who owns it CMP PNUM ;ME? BNE GR4 ;no TYA ;yes,save # STA GRTAB,X INX ;next one GR4 INY CPY #36 ;at end? BNE GR3 ;no INX ;now pick a TXA ;random one JSR GET_RND ;from those TAX ;we've found LDA GRTAB-1,X STA PPROP ;picked prop RTS ; ;Print a Property in Inverse ; INVPROP STA L ;prop name STY L+1 ;address LDA #2 JSR EPUT LDY #0 INV1 STY SVY LDA (L),Y ;get byte BEQ INV2 ;done on 0 ORA #$80 ;inverse JSR EPUT ;show it LDY SVY INY ;next byte BNE INV1 INV2 LDA #22 ;end JMP EPUT ;exit ; ;Get Key Table (A - Z) ; KEY_TAB .BYTE 63,21,18,58,42 .BYTE 56,61,57,13,1 .BYTE 5,0,37,35,8 .BYTE 10,47,40,62,45 .BYTE 11,16,46,22,43,23 ; ;Get a Key for Input ; GET_KEY LDX #$FF ;clear CH STX CH GETK1 LDA CH ;raw code CMP #$FF BEQ GETK1 ;none pressed AND #63 ;no INV or CTRL CMP #12 ;RETURN? BNE TRY7F ;no LDA #0 ;0=RET RTS TRY7F CMP #52 ;delete? BNE SCANT ;no LDA #$7E ;DELETE RTS SCANT LDY #25 ;scan table GETK2 CMP KEY_TAB,Y ;is it? BEQ GETK3 ;YES! DEY BPL GETK2 ;try again BMI GET_KEY ;no match GETK3 TYA ;index CLC ;add 'A' ADC #'A RTS ;out ; ;Input Owner Names ; INPUT STA L ;where in NAME STY L+1 ;BUF to store LDY #0 ;names INP1 STY SVY ;counter LDA #127 ;our BLOCK STA (L),Y ;cursor JSR GET_KEY ;get key LDX #0 ;poke speaker STX CONSOL ;for click LDY SVY ;get Y CMP #0 ;is A =0(RET?) BEQ INDONE ;yes CMP #$7E ;DEL-BK SPC? BNE INEXT ;no CPY #0 ;is Y=0 BEQ INP1 ;yes,no delete LDA #0 ;zap char STA (L),Y DEY ;back up 1 STA (L),Y JMP INP1 ;get input ; INEXT CPY #8 ;end of input? BCS INP1 ;yes STA IBUF,Y ;input buffer JSR ASC2IC ;to INT code ORA #$80 ;inverse for STA (L),Y ;color INY ;next char BNE INP1 ; INDONE STA IBUF,Y ;0 for an STA (L),Y ;EOL & RTS ;exit ; ;Get Player Names ; GETNAMES LDA #<NDLIST ;install STA SDLSTL ;display list LDA #>NDLIST STA SDLSTL+1 LDA #58 ;normal plyfld STA SDMCTL LDY #4 ;screen GNM1 LDA NCLR,Y ;colors STA COLOR0,Y DEY BPL GNM1 JSR CLRSCR ;clear screen ; LDA #<GR0MEM ;get start STA SCR ;of memory LDA #>GR0MEM STA SCR+1 LDX #0 ;plyr # GNM0 LDA #251 ;'[' STA (SCR),Y INY ;scrn position TXA CLC ADC #209 ;plyr # in STA (SCR),Y ;color INY ;next position LDA #253 ;']' STA (SCR),Y TYA ;add 18 onto CLC ;screen position ADC #18 TAY ;now in Y INX ;next plyr CPX MAXP ;at max yet? BNE GNM0 ;no do more LDY #0 ;now get names GNM2 STY SVY2 ;save Y LDA SCR ;move over 4 CLC ;bytes ADC #4 ;A= low byte LDY SCR+1 ;Y = hi JSR INPUT ;get a name LDA IBUF ;get 1st char BEQ GNM2 ;if none try LDA SCR ;again CLC ;add 20 bytes ADC #20 ;to scrn pntr STA SCR LDA #>NAMEBUF ;high byte STA L+1 ;low =0 LDY SVY2 ;keep Y LDA X9,Y ;get place in STA L ;buffer LDY #8 ;move name to GNM3 LDA IBUF,Y ;NAMEBUF STA (L),Y DEY BPL GNM3 ;9 chars total LDY SVY2 ;retrieve Y INY ;next plyr CPY MAXP ;at Max? BNE GNM2 RTS ;YES ; ;Handle Captial Gains Tax ; CAPGNS JSR PB ;'bad LUCK' PRINT YD ;'You lose $45G' LDA #45 JMP B1A ;jmp into BAD
;SAVE#D:CAPITAL6.M65 ; ;------------------; ; CAPITAL! ; ; (c) 1988 ; ; MAP of U.S.A. ; ; By: Barry Kolbe ; ; ; ;------------------; ; ;Map Screen Data ; ;H = Hog Hilton C=Capital Gains ;T = Tax db =double property ;L = LUCK Dicepos = DICE ; ; SCRN .BYTE $28,$6F,$70,$40 .BYTE $42,$43,$45,$47 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$6E,$49,$28 .BYTE $28,$6C,$40,$3F .BYTE $40,$40,$3F,$40 .BYTE $40,$40,$42,$42 .BYTE $42,$43,$43,$44 .BYTE $44,$44,$42,$40 .BYTE $43,$45,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$77,$40,$5E .BYTE $28,$6D,$40,$40 .BYTE $40,$40,$40,$3F .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$4C,$28,$62 .BYTE $71,$44,$44,$72 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$7B,$43 .BYTE $41,$40,$73,$65 .BYTE $28,$40,$40,$3F .BYTE $40,$40,$40,$3F .BYTE $3F,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$55,$7D,$6D .BYTE $64,$28,$28,$28 .BYTE $28,$79,$40,$40 .BYTE $3F,$78,$28,$28 .BYTE $4B,$40,$3F,$40 .BYTE $33,$34,$39,$3A .BYTE $2B,$2C,$2B,$2C ;db .BYTE $39,$3A,$3B,$3C ;L .BYTE $39,$3A,$39,$3A .BYTE $39,$3A,$35,$36 ;H .BYTE $40,$6B,$61,$40 .BYTE $40,$60,$28,$28 .BYTE $79,$40,$40,$3F .BYTE $4C,$74,$28,$28 .BYTE $57,$40,$3F,$40 .BYTE $40,$40,$40,$3F .BYTE $3F,$3F,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$60,$61,$40 .BYTE $40,$67,$7B,$7A .BYTE $40,$40,$3F,$4C .BYTE $28,$28,$28,$28 .BYTE $40,$3F,$40,$40 .BYTE $2B,$2C,$40,$3F ;db .BYTE $3F,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$2B,$2C ;db .BYTE $40,$5E,$5F,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$64 .BYTE $28,$28,$28,$28 .BYTE $40,$3F,$40,$40 .BYTE $40,$40,$3F,$40 .BYTE $3F,$3F,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $3F,$40,$40,$64 .BYTE $28,$28,$28,$28 .BYTE $40,$40,$3F,$40 .BYTE $2B,$2C,$40,$3F ;db .BYTE $3F,$3F,$40,$40 .BYTE $3E,$31,$31,$31 ;H .BYTE $3D,$3E,$32,$31 .BYTE $32,$3D,$2B,$2C ;db .BYTE $39,$3A,$2B,$2C ;db .BYTE $2B,$2C,$2F,$30 ; C .BYTE $40,$3F,$40,$63 .BYTE $28,$28,$28,$28 .BYTE $40,$40,$3F,$40 .BYTE $40,$40,$40,$40 .BYTE $3F,$3F,$40,$40 DICPOS .BYTE $3E,$31,$32,$31 .BYTE $3D,$3E,$32,$31 .BYTE $32,$3D,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $3F,$40,$40,$40 .BYTE $68,$28,$28,$28 .BYTE $53,$40,$3F,$40 .BYTE $39,$3A,$40,$40 .BYTE $40,$3F,$3F,$40 .BYTE $3E,$31,$31,$31 ;H .BYTE $3D,$3E,$32,$31 .BYTE $32,$3D,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$3F,$39,$3A .BYTE $40,$40,$40,$40 .BYTE $69,$28,$28,$28 .BYTE $4F,$40,$40,$3F .BYTE $40,$40,$40,$40 .BYTE $40,$40,$3F,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$3F,$40,$40 .BYTE $40,$40,$40,$65 .BYTE $28,$28,$28,$28 .BYTE $7E,$4E,$40,$40 .BYTE $39,$3A,$39,$3A .BYTE $35,$36,$40,$3F .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$37,$38 .BYTE $2B,$2C,$2B,$2C ;db .BYTE $40,$40,$65,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$7F,$4E,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$3F,$3F .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $3F,$40,$40,$40 .BYTE $40,$66,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$7F,$7D .BYTE $7D,$4E,$40,$40 .BYTE $2B,$2C,$2B,$2C ;db .BYTE $39,$3A,$39,$3A .BYTE $3B,$3C,$2B,$2C ;L .BYTE $2B,$2C,$39,$3A ;db .BYTE $39,$3A,$39,$3A .BYTE $40,$40,$40,$40 .BYTE $40,$60,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$7E,$7D,$4E .BYTE $40,$40,$40,$40 .BYTE $3F,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$51,$51 .BYTE $52,$52,$52,$4E .BYTE $40,$48,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$7F .BYTE $7D,$7D,$7D,$7D .BYTE $4F,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$40,$40,$40 .BYTE $40,$78,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $4F,$40,$48,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $7E,$4F,$4C,$4E .BYTE $40,$40,$40,$40 .BYTE $4C,$7D,$7D,$7D .BYTE $7D,$7D,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $7E,$4E,$40,$68 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$7E,$28,$7E .BYTE $4E,$40,$40,$4D .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$7E,$76,$75 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $7F,$4E,$40,$7C .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$7F,$54 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$7F,$4E,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28 .BYTE $28,$28,$28,$28