it somewhat works

This commit is contained in:
ehn-pkalinowski
2021-06-18 00:25:06 -04:00
parent bf73484950
commit afc0924eba
5 changed files with 1873 additions and 0 deletions
+16
View File
@@ -1,2 +1,18 @@
# feudal-economy
Rework of old BASIC game for Atari 8-bit
I got so hooked on an old game called "Feudal Economy" that I used to play with my friends when I was a kid.
Holy crap, when I started to look at the code I crashed, spaghetti code turbo power, but it's not the programmer's fault, it's hard to do otherwise in basic...
Anyway, I rewrote the code to tbxl_parser of the great dmsc (https://github.com/dmsc/tbxl-parser) and with a benedictine effort I unspaghetti'ed code and deobfuscated most of the variables and procedures.
Unfortunately I didn't do without adding a bunch of bugs.
The current version is worse than the original, because I threw away most of the error handling. But in most cases it is possible to continue by typing CONT 2 times.
Second step - fixing the errors, getting the "quality" of the original, but not orthodoxly :]
Third step - rewriting to madpascal or something, this is already a task close to trivial from the current code form.
Step four - game server and support via fujinet,
BIN
View File
Binary file not shown.
+1482
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
+375
View File
@@ -0,0 +1,375 @@
1 REM modified 061485 by Bruce Ramsey 411 N 61st, Seattle, WA 98103
8 REM Æ=# of players;Å=player;Ù±=year Ç=$/grain,ı=demand;×=weather; Ì=land price;ñ=customs revenue
9 REM Ó±=sales tax rev.;ɱ=income tax rev.;Ê=net justice revenue
10 REM Á¨Å©=# of markets;ͨũ=# of mer chants (5 per market):Ĩũ=# of woollen mills:Өũ=# of serfs
11 REM ¨ũ=palace pts:Ψũ=nobles(RND 1-2/B(E));èũ=cathedral pts.
12 REM Ѩũ=# of clergymen(RND 1-6 per cath.point;˨ũ=cash;̨ũ=land Шũ=troops(paid $3/turn)
13 REM Ǩũ=customs duty;Ȩũ=sales tx ɨũ=income tax;ʨũ=justice Ԩũ=victory pts.(15 to win)
14 REM Ϩũ=you will die by this date (1440-1455);Ҩũ=grain reserves ÄӨũ 0=alive,1=dead;֨ũ=sex
15 REM Ô¤=titles;פ=weather & harvest; Τ=names;ʤ=level of justice; ÍԨũare you already sup.ruler?
16 REM ըũ=status pts.:cathedral pt. adds 1;palace,0.5;mill,0.25; market,0.1;ÌШũ=land prices
80 CLR :READ N1,N2,N3,N4,N5,N6,N7,N10,N100,KEY,DELAY
82 DATA 1,2,3,4,5,6,7,10,100,764,12000
100 DIM N$(49),T$(215),W$(34),L(N7),P(N7),C(N6),D(N6),A(N6),B(N6),S(N6),A$(23),K(N6),N1(30),N2(30),LP(N6)
110 DIM MT(N6),G(N6),V(N7),H(N6),I(N6),J(N6),O(N6),R(N6),T(N7),U(N6),N(N6),Q(N6),M(N6),J$(12),DS(N6):Y1=1400
120 FOR A=N1 TO 30:N1(A)=LEN(T$)+N1:READ A$:N2(A)=LEN(T$)+LEN(A$):T$(LEN(T$)+N1)=A$:NEXT A
200 GRAPHICS N0:SETCOLOR N2,N0,N2:POKE 82,N4:POKE 83,39:POKE 752,N1:POSITION 9,9
210 GOSUB 23000:POKE 82,N2
212 GOSUB KEY+N2:IF V=84 THEN 22000
215 IF V<>78 THEN 212
300 ? "}":POSITION N7,8:? "PODAJ LICZBE GRACZY (1-6)?":GOSUB KEY+N2:F=V:IF F<49 OR F>54 THEN 300
302 F=VAL(CHR$(F))
308 N$=" ":N$(43,49)="PEPPONE"
310 FOR A=N1 TO F
315 A(A)=N0:B(A)=N0:C(A)=N0:D(A)=N0:DS(A)=N0
318 POKE 752,N0:? "}":POSITION 9,N5:? "IMIE GRACZA ";A;"?":POSITION 12,8:? "
";:? "";:? "";:INPUT A$
322 POKE 752,N1:IF LEN(A$)>N7 THEN A$=A$(N1,N7)
330 ? :N$(A*N7-N6,A*N7-N5+LEN(A$))=A$:? "} ";N$(A*N7-N6,A*N7-N7+LEN(A$));" to mezczyzna czy kobieta?";:V(A)=N0
331 GOSUB KEY+N2:IF V=75 THEN V(A)=15
334 IF V<>75 AND V<>77 THEN 331
400 G(A)=25:H(A)=N10:I(A)=N5:J(A)=N2:O(A)=1440+INT(RND(N0)*15):K(A)=1000:L(A)=10000:R(A)=5000:T(A)=N1:U(A)=N1:N(A)=N4
410 P(A)=25:Q(A)=N5:M(A)=25:S(A)=2000:LP(A)=N2:NEXT A
550 ? "} PODAJ POZIOM GRY (0-9)":GOSUB KEY+N2:U=V:IF U<48 OR U>57 THEN 550
560 U(N0)=VAL(CHR$(U))+N6
600 E=E+N1:IF T(E)=-N1 THEN E=E+N1
620 AX=N0:FOR A=N1 TO N6:IF T(A)>N0 THEN AX=N1:NEXT A:IF AX=N0 THEN 11000
630 IF E>F THEN E=N0:Y1=Y1+N1:GOTO 600
640 IF Y1>O(E) THEN 600
650 IF Y1=O(E) OR L(E)<1001 THEN 1100
660 GOSUB 2000:GOSUB 2600:GOSUB 3000:GOSUB 5000
666 GOSUB 6000:GOSUB 7000
670 IF K(E)>N0 THEN K(E)=INT(K(E)*1.1)
675 GOTO 600
764 ? "ÎÁÃɤÎÉÊ ÄÏ×ÏÌÎÙ ËÌÁ×ÉÓÚ"
766 CLOSE #N1:OPEN #1,N4,N0,"K:":BK=PEEK(16):IF BK>127 THEN BK=BK-128:POKE 16,BK:POKE 53774,BK
768 GET #N1,V:CLOSE #N1:RETURN
1000 POKE 82,2:GOSUB 1001:F1=N1:GOTO 1005
1001 GRAPHICS N0:SETCOLOR N2,N0,N2:POKE 752,N1:? :? :? "WASALE":? :? "WOJOWNICY":? :? "KLER":? :? "KUPCY"
1002 ? :? "PODDANI":? :? "ZIEMIA":? :? "SKARB":? :? "KRAMY":? :? "MLYNY":RETURN
1005 Z1=N1:FOR A=F1 TO F:POSITION N4+Z1*9,N1:? N$(A*N7-N6,A*N7):POSITION N5+Z1*9,N2:? N(A):POSITION N5+Z1*9,N4
1006 ? P(A):POSITION N5+Z1*9,N6:? Q(A):POSITION N5+Z1*9,8:? M(A):POSITION N5+Z1*9,N10:? S(A):K(A)=INT(K(A))
1007 POSITION N5+Z1*9,12:? L(A):POSITION N5+Z1*9,14:? K(A):POSITION N5+Z1*9,16:? A(A):POSITION N5+Z1*9,18:? D(A)
1008 Z1=Z1+N1:IF A=N3 AND F>N3 THEN F1=N4:GOSUB KEY:GOSUB 1001:GOTO 1005
1009 NEXT A
1010 ? :GOSUB KEY:RETURN
1100 GRAPHICS N0:SETCOLOR N2,N3,N2:? :? "FATALNE WIE$CI":? :GOSUB 15000:? " zeszedl $miertelnie":T(E)=-N1
1103 IF L(E)<1001 THEN ? "podczas powstania":GOTO 1190
1104 IF A=71 THEN ? "podczas zamieszek glodowych":A=N0:GOTO 1190
1110 Y=INT(RND(N0)*N6+N1):IF Y1>1455 THEN ? "ze staro$ci w R.P. ";Y1:GOTO 1190
1120 IF Y=N1 THEN ? "podczas zarazy"
1160 IF Y=N2 THEN ? "na tyfus"
1170 IF Y=N3 THEN ? "na ospe"
1180 IF Y=N4 THEN ? "na czerwonke"
1182 IF Y=N5 THEN ? "przez zamordowanie"
1185 IF Y=N6 THEN ? "przez zatrucie"
1190 ? :GOSUB KEY:GOSUB 5000:GOSUB 1000:GOTO 600
1300 I1=INT(I1):RETURN
1310 C1=INT(C1):RETURN
1320 S1=INT(S1):RETURN
1330 K(E)=INT(K(E)):RETURN
1500 POKE 752,N1:Z=INT(RND(N0)*A+N1)*S(E)/N100:Z1=INT(Z):? Z1;" poddanych sie urodzilo":S(E)=S(E)+Z1:RETURN
1510 Z=INT(RND(N0)*A+N1)*S(E)/N100:Z1=INT(Z):? Z1;" poddanych zmarlo":IF Z1>S(E)*0.3 THEN DS(E)=N1:GOSUB DELAY:A=7
1512 ? :S(E)=S(E)-Z1:RETURN
2000 POKE 82,N1:IF DS(E)=N1 THEN 600
2005 W=(INT(RND(N0)*N5+N1)+INT(RND(N0)*N6+N1))/N2:W=INT(W):W$=""
2009 ON W GOTO 2010,2020,2030,2040,2050
2010 W$="SUSZA GROZI GLOD":GOTO 2100
2020 W$="ZLA POGODA-LICHE ZBIORY":GOTO 2100
2030 W$="NORMALNA POGODA-PRZECIETNE ZBIORY":GOTO 2100
2040 W$="DOBRA POGODA-B.DOBRE ZBIORY":GOTO 2100
2050 W$="WSPANIALA POGODA-$WIETNE ZBIORY"
2100 R=INT(RND(N0)*25+N1):V=(R(E)*R)/N100:R(E)=R(E)-V:REM òáôó åáô Ò¥
2140 X=L(E):Y=(S(E)-D(E)*N100)*N5:IF Y<N0 THEN Y=N0:REM óõâôòáãô ±°° óåòæó æòïí èáòöåóô æïò åáãè íéìì
2150 IF Y<X THEN X=Y:REM õóáâìå ìáîä
2160 Y=R(E)*N2:IF Y<X THEN X=Y:REM ðåîáìôù éæ óååä¼°®µªìáîä
2170 Y=W-0.5:H1=X*Y:R(E)=R(E)+H1-INT(X/N2):REM èáòöåóô½÷åáôèåòªìáîä ÷éôè ìáâïò áîä óååä óõððïòô»óõâôòáãô óååä
2180 D1=N(E)*N100+Q(E)*40+M(E)*30+P(E)*N10+S(E)*N5:REM îïâìåó åáô íïòå ôèáî óåòæó
2182 L=(N3*W+INT(RND(N0)*N6+N1)+INT(RND(N0)*N6+N1)+N10)/N10
2190 IF H1<N1 THEN Y=N2:GOTO 2210
2200 Y=D1/H1:IF Y>N2 THEN Y=N2
2210 IF Y<0.8 THEN Y=0.8
2220 L=L*Y:L=INT(L*N10)/N10:REM ìáîä ðòéãå½²äéãå¬÷åáôèåò»ðòïðïòôéïî ïæ çòáéî ðõòãèáóåä òáéóåó ìáîä ðòéãå
2222 IF L>LP(E)+0.8 THEN L=LP(E)+0.8:REM íáø áíô ìáîä ðòéãå ãáî òéóå½°®¸
2224 IF L<LP(E)-0.5 THEN L=LP(E)-0.5:REM íáø áíô ìáîä ðòéãå ãáî æáìì½°®µ
2226 LP(E)=L:REM óôïòå ðìáùåò Å§ó ìáîä ðòéãå
2230 Z=N6-W
2240 G=(Z*N3+INT(RND(N0)*N5+N1)+INT(RND(N0)*N5+N1))/N5*Y*20:G=INT(G*N4):RETURN
2300 R(E)=INT(R(E)):H1=INT(H1):? "Szczury zjadly ";R;"% twego ziarna ":? :? W$:? " Zbierasz ";H1;" korcow"
2340 ? "ZIEMIA ";L(E);" hektarow":POSITION 20,8:SD=INT(L(E)/N2):IF SD>R(E)-D1 THEN SD=R(E)-D1:IF SD<N0 THEN SD=N0
2342 ? "NASIONA ";SD;" (";INT(N100*SD/(L(E)/N2));"%)"
2344 FOR V=N1 TO 37:? "";:NEXT V:?
2350 ? "ZAPAS ZAP. NA CENA CENA SKARB":? "ZIARNA ZIARNO ZIARNA ZIEMI"
2360 Z9=PEEK(84):? R(E)-SD:POSITION 9,Z9:? D1:POSITION 17,Z9:? G:POSITION 24,Z9:? L:POSITION 31,Z9:? K(E)
2365 ? "Korce Korce Tys.K Hektar Dukaty "
2390 RETURN
2400 J$="":J=INT((J(E)*300-500)*T(E)):IF J(E)=N1 THEN J$=" LAGODNE"
2410 IF J(E)=N2 THEN J$="UMIARKOWANE"
2420 IF J(E)=N3 THEN J$=" SUROWE"
2430 IF J(E)=N4 THEN J$="DRAKONSKIE"
2440 Y=150-G(E)-H(E)-I(E):IF Y<N1 THEN Y=N1:REM ùïõ çåô ðïéîôó éæ ùïõò ³ ôáø òáôåó áää õð ôï ìåóó ôèáî µ°
2480 C1=(N(E)*180+Q(E)*75+M(E)*20)*(Y/N100)+U(E)*N100:REM ôáøáâìå ôòáäå½Îïâìåó¬ ãìåòçù¬ íåòãèáîôó¬ ðïéîôó¬ ôáø¼µ°
2490 S1=(N(E)*50+M(E)*25+U(E)*N10)*(Y/N100)*(N5-J(E))/N2:REM ôáøáâìå òåôáéì óáìåó½îïâìåó¬íåòãè¬ðïéîôó¬ôáø¼µ°¬ÊÕÓÔÉÃÅ
2500 I1=N(E)*250+U(E)*20+(N10*J(E)*M(E))*(Y/N100):REM ÔÁØÁÂÌÅ ÉÎÃÏÍŽîïâìåó¬ ðïéîôó¬ íåòãèáîôóªêõóôéãå 
2510 C1=C1*G(E)/N100:IF C1<32760 THEN GOSUB 1310
2520 S1=S1*H(E)/N100:IF S1<32760 THEN GOSUB 1320
2530 I1=I1*I(E)/N100:IF I1<32760 THEN GOSUB 1300
2540 ? "Twoje Dochody ";J+C1+S1+I1;" dukatow":? :? " CLO SPRZEDAZ KUPNO PRAWO "
2545 Z9=PEEK(84):POSITION N3,Z9:? G(E);"%":POSITION 12,Z9:? H(E);"%":POSITION 20,Z9:? I(E);"%":POSITION 27,Z9:? J$
2550 ? :Z9=PEEK(84):POSITION N2,Z9:? C1:POSITION 11,Z9:? S1:POSITION 19,Z9:? I1:POSITION 27,Z9:? J;" DUK.":RETURN
2600 GRAPHICS N0:SETCOLOR N2,N0,N2:? :GOSUB 15000:POSITION 27,N1:? " Rok ";Y1:? :GOSUB 2300:POKE 752,N1
2610 ? "":?
2620 ? "<1> Kupno ziarna <3> Kupno ziemi":? :? "<2> Sprzedaz ziarna <4> Sprzedaz ziemi":?
2621 ? " <RETURN> kontynuacja"
2622 POKE KEY,255:GOSUB KEY+N2:I1=V:IF I1=155 THEN 4000
2624 IF I1<49 OR I1>52 THEN 2622
2625 I1=VAL(CHR$(I1)):IF I1=N0 THEN RETURN
2660 ON I1 GOTO 2700,2750,2800,2850
2700 ? "œILE ZIARNA I NASION ËÕÐÕÊÅÓÚ ";:GOSUB 9000
2705 K(E)=K(E)-(I1*G/1000):R(E)=R(E)+I1
2720 POSITION N2,7:? "œœœœœœœœœœœœœœœœœ";:GOSUB 2340:GOTO 2610
2750 ? "œILE ZIARNA I NASION ÓÐÒÚÅÄÁÊÅÓÚ";:GOSUB 9000
2760 IF I1>R(E) THEN ? "œTYLE NIE POSIADASZý":GOSUB DELAY:GOTO 2720
2770 K(E)=K(E)+(I1*G/1000):R(E)=R(E)-I1:GOTO 2720
2800 ? "œILE HEKTAROW ËÕÐÕÊÅÓÚ";:GOSUB 9000:L(E)=L(E)+I1:K(E)=K(E)-(I1*L):GOTO 2720
2850 ? "œILE HEKTAROW ÓÐÒÚÅÄÁÊÅÓÚ";:GOSUB 9000
2852 IF I1>L(E)-5000 THEN ? "œMUSISZ TRZYMAC CO NAJMNIEJ 5000 HEKTAROW!ý":GOSUB DELAY:GOTO 2720
2870 L(E)=L(E)-I1:K(E)=K(E)+(I1*L):GOTO 2720
3000 POKE 82,N2:? "}":POKE 752,N1:GOSUB 15000:? :GOSUB 11100:? :GOSUB 2400:? :? " "
3002 ? :? "<1> Clo <2> Podatek od sprzedazy"
3003 ? :? "<3> Podatek od kupna <4> Prawo "
3004 ? :? " <RETURN> kontynuacja"
3005 GOSUB KEY+N2:I=V:IF I=155 THEN GOSUB 3200:RETURN
3006 IF I<49 OR I>52 THEN 3005
3008 I=VAL(CHR$(I))
3010 POSITION N2,13:? "œœœœœœœœœœ";:POKE 752,N0
3060 ON I GOTO 3070,3110,3140,3170
3070 TRAP 3010:? "NOWE CLO (0 to 100)";:INPUT I:TRAP 40000:I=INT(I):IF I>N100 OR I<N0 THEN I=N1:? "ý":GOTO 3010
3100 G(E)=I:GOTO 3000
3110 TRAP 3010:? "NOWY POD.SPRZ.(0 to 50)";:INPUT I:I=INT(I):TRAP 40000:IF I>50 OR I<N0 THEN I=N2:? "}":GOTO 3010
3130 H(E)=I:GOTO 3000
3140 TRAP 3010:? "NOWY POD.KUPNA (0 to 25)";:INPUT I:I=INT(I):TRAP 40000:IF I<N0 OR I>25 THEN I=N3:? "}":GOTO 3010
3160 I(E)=I:GOTO 3000
3170 POKE 752,N1:? "    ÐÒÁ×Ï   ":?
3171 ? " <1> Lagodne":?
3172 ? " <2> Umiarkowane":?
3173 ? " <3> Surowe":?
3174 ? " <4> Drakonskie"
3179 GOSUB KEY+N2:I=V:IF I<49 OR I>52 THEN 3179
3190 J(E)=VAL(CHR$(I)):GOTO 3000
3200 K(E)=K(E)+C1+S1+I1+J
3220 IF K(E)<(-10000*T(E)) THEN GOTO 8000
3230 RETURN
4000 TRAP 4008:? "œIle ziarna dajesz dla ludzi?":? "™ÒÅÔ dajesz tyle,jakie zap. ";
4002 POKE 752,N0:INPUT G1:GOTO 4016
4008 G1=D1
4016 POKE 752,N1:TRAP 40000:IF G1<=R(E) THEN 4040
4032 ? "œœBRAKUJE CI ";G1-INT(R(E));" KORCOW !ý":GOSUB DELAY:GOSUB DELAY:GOTO 2720
4040 R(E)=R(E)-G1:POKE 82,N2:? "}":GOSUB 15000:? ", ";Y1:? :Z=G1/D1-1:IF Z>N0 THEN Z=Z/N2
4050 IF Z>0.25 THEN Z=Z/N10+0.25
4060 Z1=50-G(E)-H(E)-I(E):IF Z1<N0 THEN Z1=Z1*J(E)
4070 Z1=Z1/N10:IF Z1>N0 THEN Z1=Z1+N3-J(E)
4080 Z=Z+(Z1/N10):IF Z>0.5 THEN Z=0.5
4100 IF G1<(D1-1) THEN 4500
4110 IF S(E)<N0 THEN S(E)=N0
4111 A=N7:? :GOSUB 1500:A=N3:GOSUB 1510
4130 IF (G(E)+H(E))<35 THEN M(E)=M(E)+INT(RND(N0)*N4+N1):REM éæ óáìåó«ãõóôïíó ôáøòáôåó¼³µ¥¬ áää ±­´ åøôòá íåòãèáîôó¯ôõòî
4140 IF I(E)<INT(RND(N0)*20+N1) THEN N(E)=N(E)+INT(RND(N0)*N2):Q(E)=Q(E)+INT(RND(N0)*N3)
4142 REM éæ éîãïíåôáø òáôå ìåóó ôèáî á òáîäïí îõíâåò ±­²° ôèåî áää °­± îïâìåó¬ °­² ãìåòçù
4190 IF G1<(D1*1.3) THEN 4300
4200 Z1=S(E)/1000:Z=(G1-D1)/D1*N10:Z=Z*Z1*INT(RND(N0)*25+N1)+INT(RND(N0)*20+N1):IF Z>32000 THEN Z=32000
4230 Z1=Z:Z=INT(RND(N0)*Z1+INT(Z1/N5)):? Z;" przybylo do twego lenna":? :S(E)=S(E)+Z
4250 Z1=Z/N5:Z=INT(RND(N0)*Z1+N1):IF Z>50 THEN Z=50
4260 M(E)=M(E)+Z:N(E)=N(E)+N1:Q(E)=Q(E)+N2:REM íéçòáôéïî áääó ± îïâì嬠² ãìåòçù¬ õð ôï µ° íåòãèáîôó¨°­²°¥ ïæ îå÷ óåòæó©
4300 IF J(E)<N3 THEN 4900
4310 J1=S(E)/N100*(J(E)-N2)*(J(E)-N2):J1=INT(RND(N0)*J1+N1):S(E)=S(E)-J1:? J1;" poddanych zbieglo":? :GOTO 4900
4500 X=(D1-G1)/D1*N100-9:V=X:IF X>65 THEN X=65
4510 IF X<N0 THEN X=N0:V=N0
4520 A=N3:GOSUB 1500:A=V+8:GOSUB 1510:GOTO 4300
4900 IF K(E)<N0 THEN K(E)=INT(K(E)*1.5):? "Lichwiarze domagaja sie zwrotu ";ABS(INT(K(E)/N3));" dukatow":?
4902 Z=11-INT(H(E)/N10):A=INT((S(E)-500+300*D(E))/1000):FOR V=N1 TO N10:IF A(E)>A*V THEN Z=Z-N1:REM íáòçéîó
4905 NEXT V:Z1=Z/100*A(E)*1000:K(E)=K(E)+Z:IF Z1>N0 THEN ? "Kramy przyniosly ";Z1;" dukatow (";Z;"%)"
4910 IF S(E)<32766 THEN S1=S(E):GOSUB 1320:S(E)=S1
4920 Z=180-G(E)*N2-J(E)*N10-I(E):IF Z<N0 OR S(E)/N100<D(E) THEN Z=N0
4925 Z=D(E)*(Z+INT(RND(N0)*Z+N1))
4927 IF Z>N0 THEN K(E)=K(E)+Z:? "Mlyny przyniosly ";Z;" dukatow (";INT((Z/D(E))/20);"%)"
4930 P(E)=INT(P(E)):Z=P(E)*N3:? :? P(E);" Wojownikow kosztuje ";Z;" dukatow":? :? :K(E)=K(E)-Z
4940 IF (L(E)/1000)>P(E) THEN 8100:REM ÃÈÅÃË ÄÅÆÅÎÓÅÓ
4950 IF (L(E)/500)<P(E) THEN 4980
4960 FOR A=N1 TO F:IF A=E THEN 4975
4970 IF P(A)>(P(E)*N2) THEN 8100
4975 NEXT A
4980 ? :? :GOSUB KEY:RETURN
5000 GRAPHICS N7:SETCOLOR N4,11,N5:SETCOLOR N2,E-N1,N2:CC=N3
5010 LL=L(E)/1000:IF LL<N10 THEN X=N100:Y=45:GOTO 5100
5020 IF LL<20 THEN X=N100:Y=45-(LL-N10):GOTO 5100
5030 IF LL<30 THEN X=80:Y=45-(LL-20):GOTO 5100
5040 IF LL<40 THEN X=60:Y=45-(LL-30):GOTO 5100
5050 IF LL<50 THEN X=40:Y=45-(LL-40):GOTO 5100
5060 IF LL<60 THEN X=N5:Y=45-(LL-50):GOTO 5100
5070 X=N5:Y=N3
5100 Y=INT(Y):X=INT(X):COLOR CC:PLOT X,Y:DRAWTO 159,Y:REM äòá÷ âïõîäáòéåó
5110 PLOT X,Y:DRAWTO X,79
5120 IF P(E)-N5<L(E)/1000 THEN 5160
5130 FOR A=X+N1 TO X+N6:FOR B=Y+N1 TO Y+9:PLOT A,B:NEXT B:NEXT A:FOR Z=X TO X+N6 STEP N2:PLOT Z,Y-N1:NEXT Z:REM óéíðìå ôï÷åò
5140 IF P(E)/N2<L(E)/1000 THEN 5160
5150 FOR A=X+N7 TO X+N10:FOR B=Y+N1 TO Y+9:PLOT A,B:NEXT B:NEXT A:PLOT X+8,Y-N1:PLOT X+N10,Y-N1
5153 COLOR N0:PLOT X+N3,Y+N2:PLOT X+N7,Y+N4:COLOR CC:PLOT X+N1,Y-N1:PLOT X+9,Y-N1:PLOT X,Y-N2:PLOT X+N2,Y-N2
5154 PLOT X+8,Y-N2:PLOT X+N10,Y-N2:REM 2-turret tower
5160 Z=C(E)+N1:COLOR CC:IF Z>15 THEN Z=15:REM ãáôèåäòáì ðïéîôó
5170 ON Z GOTO 5250,5245,5240,5230,5220,5208,5206,5204,5202,5200,5198,5196,5194,5192,5190,5180
5180 PLOT 120,50:DRAWTO 138,50:COLOR N0:PLOT 127,50:PLOT 131,50:COLOR CC
5190 FOR A=120 TO 124:FOR B=40 TO 41:PLOT A,B:NEXT B:NEXT A
5192 FOR A=120 TO 124:FOR B=42 TO 43:PLOT A,B:NEXT B:NEXT A
5194 FOR A=120 TO 124:FOR B=44 TO 45:PLOT A,B:NEXT B:NEXT A:COLOR N0:PLOT 122,44:PLOT 122,45:COLOR CC
5196 FOR A=120 TO 124:FOR B=46 TO 47:PLOT A,B:NEXT B:NEXT A
5198 FOR A=120 TO 124:FOR B=48 TO 49:PLOT A,B:NEXT B:NEXT A
5200 FOR A=134 TO 138:FOR B=40 TO 41:PLOT A,B:NEXT B:NEXT A
5202 FOR A=134 TO 138:FOR B=42 TO 43:PLOT A,B:NEXT B:NEXT A
5204 FOR A=134 TO 138:FOR B=44 TO 45:PLOT A,B:NEXT B:NEXT A:COLOR N0:PLOT 136,44:PLOT 136,45:COLOR CC
5206 FOR A=134 TO 138:FOR B=46 TO 47:PLOT A,B:NEXT B:NEXT A
5208 FOR A=134 TO 138:FOR B=48 TO 49:PLOT A,B:NEXT B:NEXT A
5220 FOR B=36 TO 41:PLOT 129,B:NEXT B:PLOT 128,38:PLOT 130,38
5230 FOR A=127 TO 131:FOR B=42 TO 44:PLOT A,B:NEXT B:NEXT A:COLOR N0:PLOT 127,42:PLOT 131,42:COLOR CC
5240 FOR A=125 TO 133:FOR B=45 TO 46:PLOT A,B:NEXT B:NEXT A
5245 FOR A=125 TO 133:FOR B=47 TO 49:PLOT A,B:NEXT B:NEXT A:COLOR N0:PLOT 127,49:PLOT 131,49:COLOR CC
5250 Z=B(E):IF Z=N0 THEN 5300:REM  ÐÁÌÁÃÅ ÐÏÉÎÔÓ 
5255 COLOR CC:IF Z>12 THEN Z=13:PLOT 94,52:PLOT 110,52
5258 IF Z>11 THEN PLOT 93,53:PLOT 95,53:PLOT 109,53:PLOT 111,53:PLOT 94,52:PLOT 110,52
5260 IF Z>N10 THEN COLOR N0:PLOT 101,53:PLOT 103,52:COLOR CC
5262 IF Z>9 THEN PLOT 101,50:PLOT 103,50:PLOT 102,49
5265 IF Z>8 THEN FOR A=N100 TO 104:FOR B=51 TO 53:PLOT A,B:NEXT B:NEXT A
5270 FOR A=102-Z TO 102+Z:FOR B=54 TO 56:PLOT A,B:NEXT B:NEXT A
5280 FOR A=103-Z TO 101+Z STEP N2:COLOR N0:PLOT A,55:NEXT A:PLOT 102,56:COLOR CC
5300 Z=S(E)-D(E)*N100:IF Z<N1 THEN Z=N1
5305 Z=Z*N5/L(E)*N10+N1:IF Z>N10 THEN Z=N10
5310 Z=(Z/N10)*(77-Y):Z=INT(79-Z):REM ìïãáôå æáòíåò ¦ ðìï÷º ôèå èéçèåò ôèå íïòå ìáâïò¯ìáîä
5320 FOR A=145 TO 153:PLOT A,Z:NEXT A:COLOR N0:PLOT 148,Z:PLOT 149,Z:PLOT 151,Z
5330 COLOR CC:FOR A=145 TO 153 STEP N2:PLOT A,Z+N1:NEXT A:PLOT 144,Z-N1:PLOT 153,Z-N1
5400 Z=A(E)*N2:IF Z=N0 THEN 5500
5410 IF Z>154-X THEN Z=154-X
5420 FOR A=X TO X+Z STEP N2:PLOT A,60:PLOT A+N1,60:PLOT A+N1,61:PLOT A+N1,62:NEXT A:REM draw market stalls
5500 Z=D(E):IF Z=N0 THEN 5600
5510 IF Z>153-X THEN Z=153-X
5525 FOR B=76 TO 78:PLOT 153-Z,B:DRAWTO 155,B:NEXT B
5530 COLOR N0:FOR A=155-Z TO 153 STEP N2:PLOT A,77:NEXT A:REM  äòá÷ íéììó 
5600 COLOR CC
5900 ? :? "ROK :";Y1;" ";:GOSUB 15000
5910 ? :GOSUB KEY:GRAPHICS N0:SETCOLOR N2,N0,N2:RETURN
6000 POKE 82,5:CLOSE #N1:GRAPHICS N0:SETCOLOR N2,N0,N3:POKE 752,N1:? :GOSUB 15000:?
6002 FOR V=N1 TO 28:? "-";:NEXT V:? :? K(E);" Dukatow":? :?
6004 ? "MOZLIWO$CI, ROK ";Y1:? "
"
6010 ? "<1> Kram 1000"
6020 ? "<2> Mlyn 2000"
6030 ? "<3> Rozbudowa Zamku 3000"
6040 ? "<4> Rozbudowa Katedry 5000"
6050 ? "<5> 20 Wojownikow 500":?
6055 ? "<6> Stan posiadania 100"
6057 ? "<7> Mapa 100"
6058 ? "<8> Samobojstwo":? "<9> Zapisanie stanu gry na TM":? ""
6072 ? :? "™ÒÅÔÕÒÎ kontynuacja";
6082 GOSUB KEY+N2:I=V:IF I=155 THEN RETURN
6084 IF I<49 OR I>57 THEN 6082
6085 I=VAL(CHR$(I))
6093 IF I>N0 AND I<N6 THEN 6107
6094 IF I=9 THEN 21000
6100 IF I=N6 THEN GOSUB 1000:K(E)=K(E)-N100:GOTO 6000
6102 IF I=N7 THEN GOSUB 5000:K(E)=K(E)-N100:GOTO 6000
6104 IF I=8 THEN ? "œPodaj pierwsza litere imienia";:OPEN #N1,N4,N0,"K:":GET #N1,X:CLOSE #N1:POKE KEY,255
6105 IF N$(E*N7-N6,E*N7-N6)=CHR$(X) THEN DS(E)=N1:GOTO 2000
6106 GOTO 6000
6107 ? "œIle jednostek nr. ";I;"?";
6108 GOSUB KEY+N2:ZZ=V:IF ZZ<48 OR ZZ>57 THEN 6108
6109 ZZ=VAL(CHR$(ZZ)):IF ZZ=N0 THEN 6000
6110 FOR IJ=N1 TO ZZ:ON I GOTO 6200,6120,6300,6400,6500
6120 D(E)=D(E)+N1:K(E)=K(E)-2000:U(E)=U(E)+0.25:GOTO 6505
6200 A(E)=A(E)+N1:M(E)=M(E)+N5:K(E)=K(E)-1000:U(E)=U(E)+0.1:GOTO 6505
6300 B(E)=B(E)+N1:N(E)=N(E)+INT(RND(N0)*N2+N1):K(E)=K(E)-3000:U(E)=U(E)+0.5:GOTO 6505
6400 C(E)=C(E)+N1:Q(E)=Q(E)+INT(RND(0)*N6+N1):K(E)=K(E)-5000:U(E)=U(E)+N1:GOTO 6505
6500 P(E)=P(E)+20:S(E)=S(E)-20:K(E)=K(E)-500:GOTO 6505
6505 NEXT IJ
6506 GOTO 6000
7000 Z=N0:A=A(E):GOSUB 7500:A=B(E):GOSUB 7500:A=C(E)*N2:GOSUB 7500:A=D(E):GOSUB 7500:A=K(E)/5000:GOSUB 7500:A=L(E)/4000
7010 GOSUB 7500:A=M(E)/40:GOSUB 7500:A=N(E):GOSUB 7500:A=P(E)/20:GOSUB 7500:A=Q(E)/N10:GOSUB 7500:A=S(E)/1000:GOSUB 7500
7020 A=U(E)/N5:GOSUB 7500:REM åîïõçè ðïéîôó ôï ÷éî¿
7130 A=Z/U(0)-J(E):A=INT(A):IF A>15 THEN A=15:REM áäêõóô æïò äéææéãõìôù¬êõóôéãå
7140 IF (Y1+N2)=O(E) THEN T(E)=T(E)+N1
7145 IF A<N1 THEN A=N1
7150 IF T(E)-N1>A THEN RETURN
7160 T(E)=A:IF MT(E)=N1 THEN 7490
7165 IF T(E)>=15 THEN 7600
7490 RETURN
7500 IF A>25 THEN A=25
7530 A=INT(A):Z=Z+A:RETURN
7600 GRAPHICS N7:MT(E)=N1:? "* ";:GOSUB 15000:? " POSTANOWIENIA!":GOSUB 5010:GOSUB 1000:GOTO 11000
8000 GRAPHICS N0:GOSUB 15000:? " JEST BANKRUTEM!":? :? "Kredytorzy zablokowali":? " twoje aktywa!":? :GOSUB KEY
8002 A(E)=N0:R(E)=N(E)*N100+Q(E)*40+M(E)*30+P(E)*N10+S(E)*N5+2000:B(E)=N0:C(E)=N0:D(E)=N0:L(E)=6000:U(E)=N1
8005 K(E)=N100:T(E)=T(E)-N2:M(E)=25:N(E)=N5:Q(E)=N5:P(E)=P(E)/N2:RETURN
8100 Z=N0:FOR A=N1 TO F:IF A=E THEN 8200:REM ÷áò
8110 IF P(A)<P(E) THEN 8200
8130 IF P(A)<(1.2*(L(A)/1000)) THEN 8200
8140 IF P(A)>P(Z) THEN Z=A:REM äåæéîå éîöáäåò
8200 NEXT A
8205 IF Z=N0 THEN Z=N7:A=INT(RND(N0)*9000+1001):GOTO 8220:REM ¢Ðåððïîå¢
8210 A=INT((P(Z)-P(E)))*50:IF A>L(E)-1000 THEN A=L(E)-1000
8220 IF A<1000 THEN A=1000
8230 GOSUB 16000:? "najechal i zajal ";A:? "hektarow ziemi!":L(Z)=L(Z)+A:L(E)=L(E)-A:Z=INT(RND(N0)*40*(A/1000))
8233 IF Z>P(E)-15 THEN Z=P(E)-15:IF Z<N0 THEN Z=N0
8240 GOSUB 15000:? " stracil ";Z;" wojownikow!":P(E)=P(E)-Z:? :GOSUB KEY:RETURN
9000 POKE 752,N0:TRAP 9007:INPUT I1:TRAP 40000:IF I1<1 OR I1>250000 OR I<>INT(I) THEN 9007
9005 POKE 752,N1:RETURN
9007 POKE 752,N1:? "ý";:POP :GOTO 2720
11000 ? "œChcesz grac dalej?";:GOSUB KEY+N2:IF V=78 THEN DS(E)=N1:RETURN
11002 IF V<>84 THEN ? "œ";:GOTO 11000
11003 GOTO 6000
11100 ? "Rok ";Y1;" Ziemia ";L(E);" hektarow":RETURN
12000 FOR DEL=N10 TO N100:NEXT DEL:RETURN
15000 X=N0:TRAP 15002:? T$(N1(T(E)+V(E)),N2(T(E)+V(E)));" ";
15002 ? N$(E*N7-N6+X,E*N7-N6+X);:X=X+N1:IF N$(E*N7-N6+X,E*N7-N6+X)<>" " AND X<N7 THEN 15002
15004 TRAP 40000:RETURN
16000 ? T$(N1(Z)+V(Z),N2(Z)+V(Z));" ";N$(Z*N7-N6,Z*N7):RETURN
20000 DATA SIR,BARON,COUNT,MARQUIS,LORD,DUKE,ARCHDUKE,GRAND DUKE,PRINCE,KING,EMPEROR,SHOGUN
20010 DATA DEMI-GOD,GOD,SUPREME RULER
20100 DATA MADAM,BARONESS,COUNTESS,MARQUISE,LADY,DUCHESS,ARCHDUCHESS,GRAND DUCHESS,PRINCESS
20110 DATA QUEEN,EMPRESS,SAINT,DEMI-GODESS,GODESS,SUPREME RULER
20200 DATA SANTA PARAVIA ,FIUMACCIO ,TORRICELLA ,VENIZIA ,MOLINETTO ,FONTANILE
20300 FOR A=N1 TO 30
20310 ? T$(N1(A),N2(A))
20320 NEXT A
21000 TRAP 21010:OPEN #N1,N4,N0,"C:":CLOSE #N1
21004 GOSUB KEY+N2:IF V=78 THEN 6000
21006 IF V<>89 THEN POKE KEY,255:GOTO 21004