Dictator

Date: 198x
Type: Program
Platform(s): TS 2068
Tags: Game

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 rangePurpose
10–210Initialization: variable setup, intro BEEP
400–414Array initialization: copy group names from h$ into g$
430–432Mark all 49 decision records in d$ as unused ("3")
500–547Intro screen with flashing color-cycle title, then initial account/popularity display
600–782Main monthly loop: audience selection, request display, advice, decision processing
820–842Subroutine: treasury account report (act)
900–944Subroutine: bankruptcy handler (bkr)
1000–1060Subroutine: advice display (ad)
1400–1452Subroutine: plot detection (pl)
1500–1560Subroutine: assassination attempt (ass)
1600–1666Subroutine: effect transfer — applies decision deltas to faction stats (tran)
1700–1768Subroutine: secret police report (pr)
1800–1972Subroutine: revolution handler (rev)
1980–2142Subroutines: cash advice (cad) and foreign aid (aid)
2500–2806Presidential decision menu and dispatcher (dec)
3000–3110End-game scoring and restart
7100–7154Input subroutines: coy (yes/no prompt) and co (any key)
7300–7305Short pause subroutine (ps)
9998–9999SAVE 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 PI evaluates to 1 and is used as the start value in every FOR loop, avoiding the literal digit 1 to save a byte of tokenized storage.
  • NOT PI evaluates to 0 and 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" in GO TO and GO SUB targets (e.g., GO TO VAL "number" — implied via the dec, end label pattern) is a well-known memory optimization.
  • PAUSE 0 followed by INKEY$ 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: coy at line 7102 prints the 'y'=YES prompt and then falls through to co at 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) and g$(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 pc variable (initialized to NOT PI = 0) is set to mth+2 after 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.

Image Gallery

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.