--- title: "Dictator" id: 71021 type: "computer_media" slug: "dictator" url: "http://localhost/computer_media/dictator/" markdown_url: "http://localhost/computer_media/dictator.md" published_at: "2026-08-26T01:23:29+00:00" modified_at: "2026-08-26T01:26:38+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/08/Dictator.png" alt: "Dictator screen" excerpt: "Survive as long as you can by juggling faction loyalties, raiding the treasury into a Swiss account, and dodging assassination attempts in this tense political management simulation." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" genre: - name: "Game" slug: "game" taxonomy: "genre" url: "http://localhost/type/game/" media_type: "Program" download_url: "https://archive.org/download/timex-sinclair-software-archive/Dictator%20%28198x%29%28-%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "Dictator (198x)(-)(TS2068)(US)(Program).tap" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/08/Dictator.png" alt: "Dictator screen" media_type_tags: "Game" --- # Dictator 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 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. ## 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 mthlow 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 "" ```