Dictator is a turn-based political strategy simulation in which the player governs a fictional banana republic, managing popularity and military strength across up to eight factions — including the army, peasants, landowners, secret police, guerrillas, and two superpower foreign-aid sources — while secretly diverting treasury funds into a Swiss bank account. Each month, a randomly selected faction presents a request; the player may view financial and political consequences before deciding, with every acceptance or refusal shifting the popularity and strength values stored compactly in a fixed-width string array. The game tracks all faction state in the two-dimensional string array `g$`, encoding popularity, strength, plot status, ally index, name length, and name text as substrings within fixed-column offsets. A separate 49-element string array `d$` encodes every possible decision and news event as a packed record, storing cost deltas, group-effect bytes (offset by ASCII 50), and descriptive text, all parsed at runtime with `CODE` and `VAL`. The final score combines months survived, cumulative popularity, a survival bonus, and a money-grabbing bonus derived from the Swiss account balance.
Program Structure
The program is organized as a main game loop with numbered subroutine blocks, roughly as follows:
| Line range | Purpose |
|---|---|
| 10–210 | Initialization: variable setup, intro BEEP |
| 400–414 | Array initialization: copy group names from h$ into g$ |
| 430–432 | Mark all 49 decision records in d$ as unused ("3") |
| 500–547 | Intro screen with flashing color-cycle title, then initial account/popularity display |
| 600–782 | Main monthly loop: audience selection, request display, advice, decision processing |
| 820–842 | Subroutine: treasury account report (act) |
| 900–944 | Subroutine: bankruptcy handler (bkr) |
| 1000–1060 | Subroutine: advice display (ad) |
| 1400–1452 | Subroutine: plot detection (pl) |
| 1500–1560 | Subroutine: assassination attempt (ass) |
| 1600–1666 | Subroutine: effect transfer — applies decision deltas to faction stats (tran) |
| 1700–1768 | Subroutine: secret police report (pr) |
| 1800–1972 | Subroutine: revolution handler (rev) |
| 1980–2142 | Subroutines: cash advice (cad) and foreign aid (aid) |
| 2500–2806 | Presidential decision menu and dispatcher (dec) |
| 3000–3110 | End-game scoring and restart |
| 7100–7154 | Input subroutines: coy (yes/no prompt) and co (any key) |
| 7300–7305 | Short pause subroutine (ps) |
| 9998–9999 | SAVE block |
Data Encoding in String Arrays
All game state is stored in two string arrays rather than numeric arrays, a common memory-conservation technique. The eight-element array g$ holds one row per faction group. Within each row, fixed character offsets encode: column 1 = popularity (single digit as a character), column 2 = military/economic strength (single digit), column 3 = plot-status UDG character, column 4 = ally-group index for revolution pairing, columns 5–6 = two-digit name-end position, and columns 7 onward = the group’s display name.
The 49-element array d$ encodes every possible decision and news event as a packed record. Column 1 is a use-flag ("3" = available, "*" = spent). Column 2 holds a treasury-cost delta (encoded as CODE - 50), column 3 holds a monthly-cost delta similarly encoded, columns 4–11 hold eight single-byte popularity deltas (one per group, CODE - 50), columns 12–17 hold six strength deltas, and columns 18 onward hold the human-readable decision description. The subroutine at line 1600 (tran) decodes and applies all these deltas in two short FOR loops using CODE t$(a)-50.
Subroutine Dispatch via Arithmetic on Line Numbers
The program uses arithmetic expressions in GO SUB targets to select between closely related subroutines without extra conditional logic. For example, GO SUB act calls the treasury display (line 820), GO SUB act+2 skips to line 822 (bypassing the CLS), and GO SUB act+6 skips further into the subroutine. Similarly, GO SUB tran (line 1600) and GO SUB tran+20 (line 1620) enter the transfer subroutine at different points depending on context. This is a deliberate space-saving idiom, not an error.
Key BASIC Idioms
SGN PIevaluates to1and is used as the start value in everyFORloop, avoiding the literal digit1to save a byte of tokenized storage.NOT PIevaluates to0and is used wherever a zero column or row argument is needed (e.g.,PRINT AT 9, NOT PI), again for token-size economy.VAL "number"inGO TOandGO SUBtargets (e.g.,GO TO VAL "number"— implied via thedec,endlabel pattern) is a well-known memory optimization.PAUSE 0followed byINKEY$at line 7118–7120 is the standard efficient keypress-wait idiom.- String slicing with
TO(open-ended, e.g.,d$(r,18 TO )) efficiently extracts variable-length text from the packed record without knowing its length in advance.
Randomness and Event Selection
The audience/request selection loop (lines 630–646) picks a random starting index r in the range 1–24, then walks forward through d$ looking for the first record still marked "3" (available). If all 24 request records are spent, columns 1 of all 24 are reset to "3" and the scan restarts. This gives an even but non-repeating distribution within each cycle of 24 requests. A separate group index gs is derived from r using integer division: INT ((r-1)/8)+1, mapping requests 1–8 to group 1, 9–16 to group 2, and 17–24 to group 3.
The presidential decision menu (lines 2500–2806) partitions the d$ records into five categories by index ranges stored as string literals (x$, y$) and decoded with VAL: ranges 25–30, 31–33, 34–37, 38–40, and 41–43 correspond to the five menu options. Newsflash events use records 44–49.
Plot and Revolution Mechanics
The plot-detection subroutine (lines 1400–1452) runs each month from month 3 onward. It scans the first three groups (army, peasants, landowners) and checks whether any group’s popularity has fallen at or below the threshold low (a random value 2–4 set each month). If so, it searches for a second group also below low whose combined strength meets or exceeds str (a random threshold 10–12). A qualifying lone group gets its plot-status byte set to a UDG-A character; a pair with sufficient combined strength gets plot-status UDG-R (revolution flag) and the ally index stored in g$(a,4). The assassination subroutine (line 1500) and revolution subroutine (line 1800) check for these flags respectively.
During a revolution (line 1800), the player can attempt escape. If the helicopter decision record (d$(36,1)) has been spent ("*"), escape succeeds unless a 1-in-5 random check fails. Without the helicopter, escape probability depends on the guerrilla group’s strength value (VAL g$(4,2)). If the player opts to fight, the outcome is determined at line 1914 by comparing the revolutionaries’ combined strength x against the sum of the player’s personal strength st, the helper group’s strength, and a random factor of INT (RND*3)-1.
Scoring
The end-game score (lines 3000–3110) sums all eight groups’ popularity values from g$(a,1), halves the total, adds mth*3 for months in office, adds the survival bonus d (10 if alive), and adds INT (sw/10) for Swiss account accumulation. A persistent high-score variable hst survives across restarts because the program loops back to line 200 rather than re-running initialization that would reset it.
Notable Techniques and Anomalies
- The input subroutine at line 7100 contains a structurally shared entry point:
coyat line 7102 prints the'y'=YESprompt and then falls through tocoat line 7110, which prints the key prompt. This dual-entry design saves duplicating the common keypress logic. - Line 7145 branches to line 7105, which does not exist in the listing. This is intentional: on a cleared screen the
INKEY$at line 7120 returns an empty string when no key is held, and a branch to a non-existent line causes execution to continue at the next available line — here line 7118 — effectively creating a wait loop without an explicit target. - The bankruptcy subroutine (line 900) directly mutates
g$(1,1)(army popularity) andg$(6,1)(secret police popularity) by decrementing their stored digit values, with a guard against going below zero using string comparison (>"0"). - At line 1033, the advice display prints a truncated group name using
l$( TO VAL g$(a,5 TO 6)-5), subtracting 5 from the stored name-end index to trim trailing spaces — a compact inline string-length calculation. - The
pcvariable (initialized toNOT PI= 0) is set tomth+2after a crushed revolution (line 1969), acting as a cooldown timer that suppresses plot detection until two months have passed. - The Swiss bank transfer at line 2685 uses
INT (bk/(RND*4+1))to calculate a random fraction of the treasury to siphon, meaning the transfer amount is non-deterministic and can range from roughly one-fifth to the full available balance.
Source Code
10 REM "DICTATOR"
100 BEEP .25,20
200 LET bk=1000:LET mpy=60:LET st=4
210 LET mth= NOT PI:LET sw= NOT PI:LET pc= NOT PI:LET d=10
400 REM Mod Arrays
410 FOR a= SGN PI TO 8
412 LET g$(a, TO 4)=h$(a)
414 NEXT a
430 FOR a= SGN PI TO 49
432 LET d$(a,1)="3":NEXT a
500 REM Intro
502 CLS
506 FOR n=7 TO 1 STEP -1
508 BORDER 6:BEEP .05,n-30:INK n:PRINT AT 10,11;"DICTATOR"
509 FOR o= SGN PI TO 30:NEXT o:NEXT n
510 INK 0
511 PRINT ' TAB 11;l$( TO 8)
512 GO SUB co
514 CLS
547 GO SUB act:GO SUB ps:GO SUB pr
600 REM Requests
601 LET c=1
603 LET low= INT (RND*3)+2
604 LET str= INT (RND*3)+10
610 LET mth=mth+1
612 CLS
613 PRINT AT 12,12;"Month ";mth
614 PRINT TAB 11;"▄▄▄▄▄▄▄▄▄▄"
616 GO SUB ps
617 GO SUB pl
618 IF bk<0 THEN GO SUB bkr
620 IF bk>0 THEN LET bk=bk-mpy
622 CLS
624 PRINT AT 6,8;"An audience"
626 PRINT TAB 8;"▄▄▄▄▄▄▄▄▄▄▄"
630 LET r= INT (RND*24)+1
632 FOR a= SGN PI TO 22
634 IF d$(r,1)="3" THEN GO TO 648
635 LET r=(r- INT (r/24)*24)+1
638 NEXT a
640 FOR a= SGN PI TO 24
642 LET d$(a,1)="3":NEXT a
646 GO TO 630
648 LET d$(r,1)="*"
650 LET gs= INT ((r-1)/8)+1
652 LET t$=g$(gs,7 TO VAL g$(gs,5 TO 6))
656 PRINT AT 9, NOT PI;"A request from ";t$
662 PRINT AT 14, NOT PI;"Will your excellency agree to",,,
664 PRINT d$(r,18 TO );l$
666 GO SUB co
668 CLS
680 GO SUB ad
682 CLS
684 PRINT AT 2,10;"Decision"
686 PRINT TAB 10;"▀▀▀▀▀▀▀▀"
688 PRINT t$;" Request"
690 PRINT AT 6, NOT PI;d$(r,18 TO );l$
694 IF NOT c THEN GO TO 730
695 LET a=0
696 GO SUB cad
698 IF a OR NOT c THEN GO TO 682
722 GO SUB coy
726 IF k$="y" THEN GO TO 755
728 GO TO 740
730 PRINT AT 12,5;"Your answer must be NO"
732 GO SUB ps
734 LET c=1
742 LET x= VAL g$(gs,1)
744 LET y= CODE (d$(r,gs+3))-50
746 LET x=x-y
748 IF x<0 THEN LET x=0
750 LET g$(gs,1)= STR$ x
751 CLS
752 GO TO 766
760 GO SUB act
764 GO SUB tran
766 GO SUB act+2
768 GO SUB pl
770 GO SUB co
775 GO SUB ass
780 GO SUB pr
782 GO TO dec
820 REM Account
821 CLS
822 PRINT AT 8,8;"Treasury report"
824 PRINT l$
826 PRINT AT 12, NOT PI;"The treasury";
828 IF INT bk >=0 THEN PRINT " holds $";
830 IF bk<0 THEN PRINT " owes $";
831 PRINT ABS INT bk;",000 "
832 PRINT AT 14, NOT PI;"Monthly costs are $";mpy;",000 "
838 IF sw>0 THEN PRINT AT 17, NOT PI;"(Swiss acct holds $";sw;",000)"
842 RETURN
900 REM Bankrupt
910 CLS
914 PRINT AT 5,4;"The treasury is bankrupt"
916 PRINT l$,,,,,,
918 PRINT "Your popularity with the",,,
920 PRINT "the army and the secret police",,,
922 PRINT "will drop",,,,
924 PRINT "Your own strength will drop"
930 IF g$(1,1)>"0" THEN LET g$(1,1)= STR$ (VAL g$(1,1)-1)
932 IF g$(6,1)>"0" THEN LET g$(6,1)= STR$ (VAL g$(6,1)-1)
934 IF st>0 THEN LET st=st-1
940 GO SUB pl:GO SUB co:GO SUB pr
944 RETURN
1000 REM Advice
1001 CLS
1004 PRINT AT 12,12;"Advice ?"
1010 GO SUB coy
1012 CLS
1014 IF k$ <>"y" THEN RETURN
1022 PRINT AT 1, NOT PI;d$(r,18 TO );l$,,
1026 PRINT "Your popularity with..",,,
1027 FOR a= SGN PI TO 8
1028 LET x= CODE d$(r,a+3)-50
1029 IF NOT x THEN GO TO 1034
1030 PRINT TAB 2;g$(a,7 TO ); TAB 21;
1031 IF x>0 THEN PRINT "+";
1032 PRINT x
1033 IF gs=a AND r<25 THEN PRINT TAB 2;l$( TO VAL g$(a,5 TO 6)-5)
1034 NEXT a
1036 PRINT '"The strength of...",,,
1038 FOR a= SGN PI TO 6
1039 LET x= CODE d$(r,a+11)-50
1040 IF NOT x THEN GO TO 1048
1041 PRINT " ";g$(a,7 TO ); TAB 21;
1042 IF x>0 THEN PRINT "+";
1044 PRINT x
1048 NEXT a
1050 GO SUB co
1052 CLS
1060 RETURN
1400 REM Plot
1410 IF mth <=2 THEN RETURN
1420 FOR a= SGN PI TO 3
1422 LET g$(a,3 TO 4)="::"
1424 NEXT a
1426 IF mth<pc THEN RETURN
1430 FOR a= SGN PI TO 3
1432 IF VAL g$(a,1)>low THEN GO TO 1450
1436 FOR p= SGN PI TO 6
1438 IF a=p OR VAL g$(p,1)>low THEN GO TO 1441
1440 IF VAL g$(p,2)+ VAL g$(a,2) >=str THEN GO TO 1446
1441 NEXT p
1442 LET g$(a, PI)="[UDG-A]"
1444 GO TO 1450
1446 LET g$(a, PI)="[UDG-R]"
1448 LET g$(a,4)= STR$ p
1450 NEXT a
1452 RETURN
1500 REM Assassin
1505 FOR a= SGN PI TO 3
1510 LET r= INT (RND*3)+1
1514 IF g$(r, PI) <>"[UDG-A]" THEN RETURN
1515 IF g$(r, PI)="[UDG-A]" THEN GO TO 1517
1516 NEXT a
1517 CLS
1520 FOR a= SGN PI TO 15
1522 PRINT AT 10,5;"ASSASSINATION ATTEMPT"
1528 NEXT a
1532 PRINT AT 13, PI;"By one of ";g$(r,6 TO CODE g$(r,5))
1534 GO SUB ps
1536 CLS
1537 IF g$(1, PI)="[UDG-A]" AND g$(2, PI)="[UDG-A]" AND g$(3, PI)="[UDG-A]" THEN GO TO 1546
1540 IF VAL g$(6,1)>low OR VAL g$(6,2)>low OR INT (RND*2) THEN GO TO 1554
1546 PRINT AT 12,10;"You're dead"
1547 LET d=0
1550 GO TO end
1554 PRINT AT 12,13;"Failed"
1556 GO SUB ps
1558 CLS
1560 RETURN
1600 REM Transfer
1610 LET d$(r,1)="*"
1620 LET t$=d$(r,4 TO 11)
1621 FOR a= SGN PI TO 8
1622 IF t$(a)="2" THEN GO TO 1632
1624 LET x= VAL g$(a,1)+(CODE t$(a)-50)
1626 IF x>9 THEN LET x=9
1628 IF x<0 THEN LET x=0
1630 LET g$(a,1)= STR$ x
1632 NEXT a
1638 LET t$=d$(r,12 TO 17)
1640 FOR a= SGN PI TO 6
1642 IF t$(a)="2" THEN GO TO 1652
1644 LET x= VAL g$(a,2)+(CODE t$(a)-50)
1646 IF x>9 THEN LET x=9
1648 IF x<0 THEN LET x=0
1650 LET g$(a,2)= STR$ x
1652 NEXT a
1660 LET bk=bk+cst
1662 LET mpy=mpy-mcst
1664 IF mpy<0 THEN LET mpy=0
1666 RETURN
1700 REM P Report
1704 CLS
1706 PRINT AT 4,2;"Secret police report ($1000)"
1708 PRINT l$
1710 IF bk <=0 OR VAL g$(6,1) <=low OR VAL g$(6,2) <=low THEN GO TO 1764
1713 PRINT AT 14,14;" ? "
1714 GO SUB coy
1715 IF k$ <>"y" THEN RETURN
1718 LET bk=bk-1
1720 CLS
1721 PRINT AT 4,9;"Police report",,,,,
1724 PRINT " P S C"
1725 PRINT " O T A O YOUR STR = ";st
1728 PRINT " P R R N STR FOR R = ";str
1730 PRINT " ▀▀▀▀▀▀▀"
1732 FOR a= SGN PI TO 8
1734 PRINT " ";a;". ";
1736 FOR b= SGN PI TO 4
1738 PRINT g$(a,b);" ";
1740 NEXT b
1756 PRINT " ";g$(a,7 TO )
1758 NEXT a
1760 GO SUB co
1762 RETURN
1764 PRINT AT 14,9;"Not available"
1766 GO SUB ps
1768 RETURN
1800 REM Rev
1802 FOR a= SGN PI TO 3
1804 LET r= INT (RND*3)+1
1805 IF g$(r, PI) <>"[UDG-R]" THEN RETURN
1806 IF g$(r, PI)="[UDG-R]" THEN GO TO 1810
1808 NEXT a
1810 CLS
1814 FOR a= SGN PI TO 15
1816 PRINT AT 6,10; FLASH 1;"REVOLUTION"
1820 NEXT a
1821 PRINT AT 12,8;"Escape attempt ?"
1822 GO SUB coy
1823 CLS
1824 IF k$ <>"y" THEN GO TO 1850
1825 PRINT AT 12,7;"Will you make it ?"
1827 GO SUB ps
1828 CLS
1830 IF k$ <>"y" THEN GO TO 1850
1832 IF d$(36,1)="*" THEN GO TO 1842
1834 IF INT (RND*((VAL g$(4,2)/3)+.4)) THEN GO TO 1839
1836 PRINT AT 12, NOT PI;"The Guerillas didn't catch you."
1837 GO TO end
1839 LET d=0
1840 PRINT AT 12,1;"The Guerillas have killed you."
1841 GO TO end
1842 IF NOT INT (RND*5) THEN GO TO 1845
1843 PRINT AT 12, PI;"You escape by helicopter."
1844 GO TO end
1845 PRINT AT 12, PI;"The helicopter won't start !"
1846 GO SUB ps
1848 CLS
1850 LET x= VAL g$(r,2)+ VAL g$(VAL g$(r,4),2)
1852 PRINT AT 5, NOT PI;g$(r,7 TO VAL g$(r,5 TO 6));" have joined with"
1856 PRINT g$(VAL g$(r,4),7 TO )
1857 PRINT "Their combined strength is ";x,,,
1858 PRINT "Who are you asking for help ?"
1859 PRINT l$,,
1860 LET z=1
1861 FOR a= SGN PI TO 6
1862 IF VAL g$(a,1) <=low THEN GO TO 1868
1864 PRINT TAB 6;a;". ";g$(a,7 TO VAL g$(a,5 TO 6));" ?"
1866 LET z=0
1868 NEXT a
1869 IF z THEN GO TO 1890
1870 GO SUB co
1872 IF k$<"1" OR k$>"6" THEN GO TO 1870
1878 IF VAL g$(VAL k$,1) <=low THEN GO TO 1884
1880 LET h= VAL k$
1883 GO TO 1893
1884 CLS
1885 PRINT AT 12,7;"You must be joking !"
1888 GO TO 1846
1890 PRINT AT 8,5;"You're on your own..."
1892 GO SUB co
1893 CLS
1894 PRINT AT 8, NOT PI;"Your strength = ";st,,,
1895 PRINT AT 10, NOT PI;g$(h,7 TO VAL g$(h,5 TO 6));" Strength is ";g$(h,2)
1896 PRINT AT 12, NOT PI;"The revolutionary's strength is ";x
1898 GO SUB ps
1900 PRINT AT 17,1;"The revolution is in progress."
1902 PRINT l$
1910 GO SUB ps
1912 CLS
1914 IF x <=st+ VAL g$(h,2)+ INT (RND*3)-1 THEN GO TO 1950
1922 PRINT AT 10, PI;"You have been overthrown !"''
1923 PRINT TAB 8;"and LIQUIDATED"
1926 LET d=0
1930 GO TO end
1950 PRINT AT 10,2;"The revolt has been crushed."
1952 PRINT AT 17,2;"Punish the Revolutionaries ?"
1956 GO SUB coy
1958 IF k$ <>"y" THEN GO TO 1968
1964 LET g$(r,2)="0"
1966 LET g$(VAL g$(r,4),2)="0"
1968 LET g$(h,2)="9"
1969 LET pc=mth+2
1970 GO SUB pl
1971 GO SUB pr
1972 RETURN
1980 REM Cash Advice
1990 LET cst=10*(CODE d$(r,2)-50)
1992 LET mcst= CODE d$(r, PI)-50
1994 IF NOT cst AND NOT mcst THEN GO TO 2030
1996 PRINT AT 9,5;"This decision would",,,,,
1998 IF NOT cst THEN GO TO 2014
2002 IF cst>0 THEN PRINT "add to";
2004 IF cst<0 THEN PRINT "take from";
2008 PRINT " the treasury $"; ABS cst;",000",,,
2010 IF NOT mcst THEN GO TO 2020
2012 PRINT "and",,,,
2014 IF mcst<0 THEN PRINT "raise";
2016 IF mcst>0 THEN PRINT "lower";
2018 PRINT " monthly costs by $"; ABS mcst;",000"
2020 IF bk+cst>0 THEN RETURN
2021 IF (cst<0 OR mcst<0) AND (bk+cst<0 OR bk+mcst<0) THEN GO TO 2034
2022 RETURN
2030 PRINT AT 12,7;"No money involved"
2032 RETURN
2034 GO SUB ps
2035 LET c=0
2036 CLS
2037 PRINT AT 5, NOT PI;d$(r,18 TO )
2038 PRINT l$
2039 PRINT AT 10, PI;"The cash for this decision"
2040 PRINT TAB 5;"is not in the treasury",,,,,
2041 PRINT l$
2042 IF d$(38,1)="3" OR d$(39,1)="3" THEN GO TO 2046
2043 GO SUB ps
2044 RETURN
2046 PRINT "You could ask 1. the Russians"
2048 PRINT TAB 14;"2. the Americans for a 'loan'"
2052 GO SUB co
2054 IF k$<"1" OR k$>"2" THEN RETURN
2060 REM Aid
2062 CLS
2066 PRINT AT 4,2;"Application for foreign aid"
2068 PRINT l$
2070 PRINT AT 12,13;"Wait"
2076 GO SUB ps
2088 IF mth< INT (RND*5)+3 THEN GO TO 2138
2100 LET x= VAL k$-1
2112 IF d$(38+x,1)="*" THEN GO TO 2128
2113 IF VAL g$(7+x,1) <=low THEN GO TO 2132
2114 IF NOT x THEN PRINT AT 12, NOT PI;"The Russians";
2115 IF x THEN PRINT AT 12, NOT PI;"The Americans";
2116 PRINT " will let you have "
2118 PRINT AT 14,7; VAL g$(7+x,1)*30;",000 dollars"
2120 LET bk=bk+ VAL g$(7+x,1)*30
2122 IF bk> ABS cst THEN LET c=1
2124 LET d$(38+x,1)="*"
2126 GO TO 2140
2128 PRINT AT 12,2;"Very sorry,no more loans"
2130 GO TO 2140
2132 IF NOT x THEN PRINT AT 12,12;"'NIET'"
2134 IF x THEN PRINT AT 12,12;"'Nuts'"
2136 GO TO 2140
2138 PRINT AT 12,2;"It's too early to give loans."
2140 GO SUB co
2142 RETURN
2500 REM Decision
2510 LET c=1:CLS
2522 PRINT AT PI,5;"Presidential decision",l$
2530 PRINT ''" Try to...."
2534 PRINT '" 1. Please a group"
2536 PRINT '" 2. Please all groups"
2538 PRINT '" 3. Improve your chances"
2540 PRINT '" 4. Raise some cash"
2542 PRINT '" 5. Strengthen a group"
2550 GO SUB co
2552 CLS
2560 IF k$<"1" OR k$>"5" THEN GO TO 2747
2562 IF k$="1" THEN LET x$="25":LET y$="30"
2564 IF k$="2" THEN LET x$="31":LET y$="33"
2566 IF k$="3" THEN LET x$="34":LET y$="37"
2568 IF k$="4" THEN LET x$="38":LET y$="40"
2570 IF k$="5" THEN LET x$="41":LET y$="43"
2572 PRINT AT (20-((VAL y$- VAL x$)*3))*.5, NOT PI;
2574 LET y=1
2576 LET z=1
2578 FOR a= VAL x$ TO VAL y$
2580 IF d$(a,1)="*" THEN GO TO 2592
2582 LET z=0
2584 PRINT y;"."
2588 PRINT d$(a,18 TO ),,
2592 LET y=y+1
2594 NEXT a
2596 IF z THEN GO TO 2600
2597 GO SUB co
2598 GO TO 2620
2600 PRINT AT 12, PI;"All this section used up"
2602 GO SUB ps
2604 GO TO dec
2620 REM DO Dec
2628 IF k$<"0" OR k$>"7" THEN GO TO dec
2630 IF VAL k$<1 OR VAL k$> VAL y$+1- VAL x$ THEN GO TO dec
2634 LET r= VAL x$+ VAL k$-1
2636 IF d$(r,1)="*" THEN GO TO dec
2640 IF r=38 OR r=39 THEN GO TO 2670
2642 IF r=37 THEN GO TO 2680
2644 GO SUB ad
2646 PRINT AT 4, NOT PI;d$(r,18 TO )
2647 PRINT l$
2649 GO SUB cad
2650 IF NOT c THEN GO TO dec
2651 PRINT AT 4, NOT PI;d$(r,18 TO )
2652 GO SUB coy
2653 IF k$ <>"y" THEN GO TO dec
2654 IF r=35 THEN GO TO 2674
2656 GO SUB act
2658 GO SUB tran
2660 GO TO 2740
2670 GO SUB aid
2672 GO TO 2740
2674 LET st=st+2
2675 GO SUB act
2676 GO SUB tran+20
2677 GO TO 2740
2680 CLS
2682 PRINT AT 5, NOT PI;"Transfer to Swiss bank account"
2684 PRINT l$,,,,
2685 LET x= INT (bk/(RND*4+1))
2686 IF x<1 THEN GO TO 2720
2687 PRINT "The treasury held $"; INT bk;",000",,,,,
2690 LET sw=sw+x
2692 LET bk=bk-x
2694 PRINT "$";x;",000 has been transfered"
2702 GO TO 2736
2720 PRINT AT 12,7;"No transfer made"
2736 GO SUB ps
2740 GO SUB act+6
2741 GO SUB pl
2742 GO SUB co
2746 GO SUB pr
2747 GO SUB ass
2748 GO SUB rev
2750 REM News
2760 IF INT (RND*4) THEN GO TO 2806
2764 LET r= INT (RND*6)+44
2768 FOR a= SGN PI TO 6
2770 IF d$(r,1)="3" THEN GO TO 2780
2771 LET r=r+1
2772 IF r=50 THEN LET r=44
2774 NEXT a
2776 GO TO 600
2780 CLS
2781 LET d$(r,1)="*"
2782 FOR a= SGN PI TO 10
2784 PRINT AT 10,11; FLASH 1;"NEWSFLASH"
2790 NEXT a
2792 PRINT AT 14, NOT PI;d$(r,18 TO )
2793 PRINT l$
2796 GO SUB tran
2798 GO SUB pl
2800 GO SUB ad
2804 GO SUB pr
2806 GO TO 600
3000 REM END
3004 GO SUB ps
3020 LET x=0
3026 FOR a= SGN PI TO 8
3028 LET x=x+ VAL g$(a,1)
3030 NEXT a
3035 CLS
3040 PRINT AT PI,4;"Your rating as President"
3042 PRINT l$,,
3048 LET x= INT (x/2)
3050 PRINT "Final popularity - ";x,,,
3054 PRINT ;"Time in office - ";mth*3,,,
3056 LET x=x+mth*3
3058 IF NOT d THEN GO TO 3072
3062 PRINT "For staying alive - ";d,,,
3068 PRINT "For moneygrabbing - "; INT (sw/10),,,
3070 LET x=x+d+ INT (sw/10)
3072 PRINT l$
3074 PRINT "Your total is ";x,,,
3082 IF x>hst THEN LET hst=x
3084 PRINT "Highest yet is ";hst
3086 GO SUB co
3087 CLS
3090 PRINT AT PI,12;"A final"
3092 GO SUB pr+21
3100 CLS
3110 GO TO 200
7100 REM coy
7102 PRINT AT 20,14;"'y'=YES"
7110 REM co
7114 PRINT AT 21, NOT PI;l$
7116 PRINT AT 21,14;"KEY"
7118 PAUSE 0
7120 LET k$= INKEY$
7130 IF k$ <>"" THEN GO TO 7153
7145 GO TO 7105
7153 PRINT AT 21, NOT PI;b$
7154 FOR a= SGN PI TO 25:NEXT a:RETURN
7300 REM PAUSE
7305 FOR a= SGN PI TO 80:NEXT a:RETURN
9998 CLS :SAVE "Dictator" LINE 100:BEEP .2,15
9999 REM VERIFY ""Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
