1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-06 03:30:23 +00:00
QB64-PE/programs/samples/pete/hgm30e/hgm30e.bas

2896 lines
79 KiB
QBasic

chdir ".\programs\samples\pete\hgm30e"
'HEGEMONY 3.0.e
'Copyright: Akos Ivanyi (21.07.2003)
'-----=====GENERAL GAMEFLOW=====-----
' variables:
' |
' opening:
' |
' choosecontrol:<----O
' / \ |
' human: ai: |
' \ / |
' nextturn:------>O
' (gosubs)
'-----=====THE GAME=====-----
variables:
'------------------------------------------------
DECLARE FUNCTION fixcolor (col AS INTEGER)
DIM rca AS STRING * 1
'$DYNAMIC
DIM pic(32000) AS INTEGER
'$STATIC
DIM control$(9)
DIM c$(9)
DIM name$(9)
DIM land%(9)
DIM sea(9)
DIM navy%(9)
DIM seaarmy%(9)
DIM seamoved%(9)
DIM money&(9)
DIM population&(9)
DIM tax(9)
DIM morale(9)
DIM trust(9)
DIM science(6, 9)
DIM sciencename$(6)
DIM sciencemoney&(6)
DIM ownercolor%(9)
DIM peasant&(9)
DIM fisher&(9)
DIM worker&(9)
DIM merchant&(9)
DIM soldier&(9)
DIM unemployed&(9)
DIM fo%(9)
DIM chu%(9)
DIM uni%(9)
DIM mil%(9)
DIM allfood&(9)
DIM spy%(9)
DIM spycost%(9)
DIM landtrade(9)
DIM value(9)
DIM lostvalue(9)
DIM diplinterest(9)
DIM hate(9)
DIM fear(9)
DIM diplplan(9)
DIM property&(9)
DIM level(9)
DIM bestname$(9)
DIM bestturn(9)
DIM bestcontrol$(9)
DIM bestdate$(9)
DIM dipl%(9, 9)
DIM diplaction%(9, 9)
DIM border%(9, 9)
DIM owner%(15, 15)
DIM original%(15, 15)
DIM terrain%(15, 15)
DIM fort%(15, 15)
DIM church%(15, 15)
DIM university%(15, 15)
DIM mill%(15, 15)
DIM army%(15, 15)
DIM moved%(16, 16)
DIM localmorale(15, 15)
DIM threat(16, 16)
DIM ed%(15, 15)
DIM tername$(9)
DIM foodpot(9)
DIM prodpot(9)
DIM terdefense(9)
DIM tercolor(9)
DIM size%(7)
DIM i AS INTEGER
DIM j AS INTEGER
DIM x AS INTEGER
DIM y AS INTEGER
ownercolor%(0) = 0
ownercolor%(1) = 2
ownercolor%(2) = 4
ownercolor%(3) = 1
ownercolor%(4) = 14
ownercolor%(5) = 8
ownercolor%(6) = 15
ownercolor%(7) = 11
ownercolor%(8) = 13
ownercolor%(9) = 12
sciencename$(1) = "agriculture"
sciencename$(2) = "industry"
sciencename$(3) = "trade"
sciencename$(4) = "sailing"
sciencename$(5) = "military"
sciencename$(6) = "medicine"
size%(1) = 1
size%(2) = 2
size%(3) = 5
size%(4) = 10
size%(5) = 20
size%(6) = 50
size%(7) = 100
tername$(0) = "sea"
tercolor(0) = 1
x = 8
y = 8
BF = 700: mf = 30: sf = 70
bc = 100: mc = 3: sc = 10
bu = 500: mu = 25: su = 250
bm = 200: mm = -20: sm = 180
bn = 200: mn = 20: sn = 180
ba = 150: ma = 30: sa = 75
message$ = "Welcome, Majesty."
opening:
'------------------------------------------------
save% = 1
code% = 1
SCREEN 12
CLS
LOCATE 1, 1
OPEN "motto.txt" FOR INPUT AS #1
WHILE NOT EOF(1)
LINE INPUT #1, text$
PRINT text$
WEND
CLOSE
GOSUB press
CLS
OPEN "hgm.bmp" FOR BINARY AS #1
SEEK #1, 119
FOR i = 299 TO 0 STEP -1
FOR j = 0 TO 399 STEP 2
GET #1, , rca
PSET (j + 120, i + 90), fixcolor(FIX(ASC(rca) / 16))
PSET (j + 121, i + 90), fixcolor(ASC(rca) - FIX(ASC(rca) / 16) * 16)
NEXT j
NEXT i
CLOSE #1
LINE (0, 0)-(639, 479), 2, B
rca = INPUT$(1)
RANDOMIZE TIMER
CLS
GOSUB title
LOCATE 7, 1: PRINT "(Press 'ENTER' for default.)"
LOCATE 6, 1
scen$ = "default.scn"
INPUT "Which scenario do you wish to play"; scen$
IF scen$ = "" THEN scen$ = "default.scn"
LOCATE 9, 1
PRINT "Opening file..."
OPEN scen$ FOR INPUT AS #1
INPUT #1, players%
INPUT #1, player%
INPUT #1, turn%
FOR i = 1 TO 6
INPUT #1, sciencemoney&(i)
NEXT i
FOR i = 1 TO players%
LINE INPUT #1, name$(i)
INPUT #1, control$(i)
INPUT #1, population&(i)
INPUT #1, money&(i)
INPUT #1, navy%(i)
INPUT #1, seaarmy%(i)
INPUT #1, seamoved%(i)
INPUT #1, tax(i)
INPUT #1, trust(i)
FOR j = 1 TO 6
INPUT #1, science(j, i)
NEXT j
FOR j = 1 TO players%
INPUT #1, dipl%(i, j)
NEXT j
FOR j = 1 TO players%
INPUT #1, diplaction%(i, j)
NEXT j
NEXT i
FOR k = 1 TO 9
FOR i = 1 TO 15
FOR j = 1 TO 15
SELECT CASE k
CASE 1
INPUT #1, owner%(i, j)
CASE 2
INPUT #1, original%(i, j)
CASE 3
INPUT #1, terrain%(i, j)
CASE 4
INPUT #1, fort%(i, j)
CASE 5
INPUT #1, church%(i, j)
CASE 6
INPUT #1, university%(i, j)
CASE 7
INPUT #1, mill%(i, j)
CASE 8
INPUT #1, army%(i, j)
CASE 9
INPUT #1, moved%(i, j)
END SELECT
NEXT j
NEXT i
NEXT k
CLOSE
OPEN "terrain.typ" FOR INPUT AS #1
FOR i = 1 TO 9
LINE INPUT #1, tername$(i)
INPUT #1, foodpot(i)
INPUT #1, prodpot(i)
INPUT #1, terdefense(i)
INPUT #1, tercolor(i)
NEXT i
CLOSE
PRINT
GOSUB spy
GOSUB chooseplayer
GOSUB enemydistance
choosecontrol:
'------------------------------------------------
GOSUB countproperties:
active% = 0
human% = 0
FOR i = 1 TO players%
IF land%(i) > 0 THEN active% = active% + 1
IF control$(i) = "human" THEN human% = human% + 1
NEXT i
IF human% = 0 THEN GOTO aicombat
IF active% = 1 THEN GOTO victory
IF land%(player%) = 0 THEN
WHILE land%(player%) = 0
IF player% < players% THEN
player% = player% + 1
ELSE
player% = 1
turn% = turn% + 1
revoltnation = INT(RND * players%) + 1
revoltlevel = RND * RND * 10
END IF
FOR i = 1 TO players%
diplaction%(player%, i) = 0
NEXT i
WEND
END IF
GOSUB spy
IF control$(player%) = "human" THEN
BEEP
IF human% > 1 THEN
CLS
COLOR ownercolor%(player%)
LOCATE player% * 3, player% * 6
PRINT name$(player%); "'s turn!"
BEEP
GOSUB press
CLS
END IF
GOSUB countproperties
GOTO human
ELSE
GOTO ai
END IF
human:
'------------------------------------------------
LOCATE 1, 1
GOSUB title
GOSUB see
GOSUB morale
GOSUB drawmap
LINE (450, 100)-(640, 360), 0, BF
LINE (129 + x * 20, 79 + y * 20)-(151 + x * 20, 101 + y * 20), 0, B
RESTORE eye
FOR i = 1 TO 7
FOR j = 1 TO 12
READ pixel%
IF pixel% < 16 THEN PSET (134 + x * 20 + j, 83 + y * 20 + i), pixel%
NEXT j
NEXT i
LINE (455, 380)-(639, 404), 7, B
LOCATE 5, 29
COLOR ownercolor%(player%)
PRINT name$(player%); "'s turn:"; turn%
COLOR 7
LOCATE 5, 1
PRINT "Empires"
PRINT "-------"
PRINT "i = Information"
PRINT "t = Treasury"
PRINT "s = Science"
PRINT "d = Diplomacy"
PRINT
PRINT "Territories"
PRINT "-----------"
PRINT "Examine: numbers"
PRINT "Move army: arrows"
PRINT "Build:"
PRINT " f = Fort"
PRINT " c = Church"
PRINT " u = University"
PRINT " m = Mills, Mines"
PRINT " Mints..."
PRINT " a = Army"
PRINT " n = Navy"
PRINT "Sell/Destroy:"
PRINT " F, C, U, M, A, N"
PRINT
PRINT "Military unit size: + = increase, - = decrease"
PRINT "E = End turn, g = save Game, h = Help, Q = Quit";
COLOR 14
PRINT " Gold:"; money&(player%); " "
COLOR 7
LOCATE 5, 59
PRINT "Territory info"
LOCATE 6, 59
PRINT "--------------"
LOCATE 7, 59
PRINT "Location:"; x; y; " "
COLOR ownercolor%(owner%(y, x))
IF terrain%(y, x) <> 0 THEN
LOCATE 8, 59
PRINT "Province of..."
LOCATE 9, 61
PRINT name$(owner%(y, x))
LOCATE 10, 59
COLOR ownercolor%(original%(y, x))
PRINT "Original owner:"
LOCATE 11, 61
PRINT name$(original%(y, x))
END IF
LOCATE 12, 59
COLOR tercolor(terrain%(y, x))
PRINT "Terrain: "; tername$(terrain%(y, x))
IF terrain%(y, x) <> 0 THEN
LOCATE 13, 61
PRINT "food:"; foodpot(terrain%(y, x))
LOCATE 14, 61
PRINT "resources:"; prodpot(terrain%(y, x))
LOCATE 15, 61
PRINT "defence bonus:"; terdefense(terrain%(y, x)) * 100; "%"
LOCATE 16, 59
COLOR ownercolor%(owner%(y, x))
PRINT "Forts:";
IF see% = 1 THEN PRINT fort%(y, x)
LOCATE 17, 59
PRINT "Churches:";
IF see% = 1 THEN PRINT church%(y, x)
LOCATE 18, 59
PRINT "Universities:";
IF see% = 1 THEN PRINT university%(y, x)
LOCATE 19, 59
PRINT "Mills, etc.:";
IF see% = 1 THEN PRINT mill%(y, x)
END IF
LOCATE 20, 59
IF owner%(y, x) <> 0 THEN
PRINT "Army:";
IF see% = 1 THEN PRINT army%(y, x)
ELSE
COLOR ownercolor%(player%)
PRINT "Army:"; seaarmy%(player%)
END IF
LOCATE 21, 59
PRINT "Morale:";
IF see% = 1 THEN PRINT INT(localmorale(y, x) * 100 + .5); "% "
LOCATE 22, 59
COLOR ownercolor%(player%)
IF owner%(y, x) = player% THEN
PRINT "Reinforcement:"; moved%(y, x)
ELSEIF owner%(y, x) <> 0 THEN
PRINT "Attackers:"; moved%(y, x)
ELSE
PRINT "Just embarked:"; seamoved%(player%)
END IF
LOCATE 23, 59
IF terrain%(y, x) = 0 THEN
PRINT "Navy:"; navy%(player%); " "
ELSE
PRINT " "
END IF
COLOR 7
LOCATE 25, 59
PRINT message$
LOCATE 27, 20
IF code% > 1 THEN COLOR ownercolor%(player%)
PRINT size%(code%); " "
COLOR 7
k$ = ""
WHILE k$ = ""
k$ = INKEY$
WEND
message$ = " "
SELECT CASE k$
CASE "q"
message$ = "'Q' instead of 'q'. "
CASE "Q"
GOTO bye
CASE "1" TO "9"
IF VAL(k$) < 4 THEN
IF y < 15 THEN y = y + 1
END IF
IF k$ = "1" OR k$ = "4" OR k$ = "7" THEN
IF x > 1 THEN x = x - 1
END IF
IF k$ = "3" OR k$ = "6" OR k$ = "9" THEN
IF x < 15 THEN x = x + 1
END IF
IF VAL(k$) > 6 THEN
IF y > 1 THEN y = y - 1
END IF
CASE CHR$(0) + "H"
IF y > 1 THEN
IF owner%(y, x) = player% AND army%(y, x) >= size%(code%) THEN
IF terrain%(y - 1, x) <> 0 THEN
moved%(y - 1, x) = moved%(y - 1, x) + size%(code%)
army%(y, x) = army%(y, x) - size%(code%)
ELSE
IF seamoved%(player%) + seaarmy%(player%) + size%(code%) <= navy%(player%) THEN
seamoved%(player%) = seamoved%(player%) + size%(code%)
army%(y, x) = army%(y, x) - size%(code%)
ELSE
message$ = "Not enough ships. "
END IF
END IF
ELSEIF terrain%(y, x) = 0 AND terrain%(y - 1, x) <> 0 AND seaarmy%(player%) >= size%(code%) THEN
seaarmy%(player%) = seaarmy%(player%) - size%(code%)
moved%(y - 1, x) = moved%(y - 1, x) + size%(code%)
END IF
END IF
CASE CHR$(0) + "P"
IF y < 15 THEN
IF owner%(y, x) = player% AND army%(y, x) >= size%(code%) THEN
IF terrain%(y + 1, x) <> 0 THEN
moved%(y + 1, x) = moved%(y + 1, x) + size%(code%)
army%(y, x) = army%(y, x) - size%(code%)
ELSE
IF seamoved%(player%) + seaarmy%(player%) + size%(code%) <= navy%(player%) THEN
seamoved%(player%) = seamoved%(player%) + size%(code%)
army%(y, x) = army%(y, x) - size%(code%)
ELSE
message$ = "Not enough ships. "
END IF
END IF
ELSEIF terrain%(y, x) = 0 AND terrain%(y + 1, x) <> 0 AND seaarmy%(player%) >= size%(code%) THEN
seaarmy%(player%) = seaarmy%(player%) - size%(code%)
moved%(y + 1, x) = moved%(y + 1, x) + size%(code%)
END IF
END IF
CASE CHR$(0) + "K"
IF x > 1 THEN
IF owner%(y, x) = player% AND army%(y, x) >= size%(code%) THEN
IF terrain%(y, x - 1) <> 0 THEN
moved%(y, x - 1) = moved%(y, x - 1) + size%(code%)
army%(y, x) = army%(y, x) - size%(code%)
ELSE
IF seamoved%(player%) + seaarmy%(player%) + size%(code%) <= navy%(player%) THEN
seamoved%(player%) = seamoved%(player%) + size%(code%)
army%(y, x) = army%(y, x) - size%(code%)
ELSE
message$ = "Not enough ships. "
END IF
END IF
ELSEIF terrain%(y, x) = 0 AND terrain%(y, x - 1) <> 0 AND seaarmy%(player%) >= size%(code%) THEN
seaarmy%(player%) = seaarmy%(player%) - size%(code%)
moved%(y, x - 1) = moved%(y, x - 1) + size%(code%)
END IF
END IF
CASE CHR$(0) + "M"
IF x < 15 THEN
IF owner%(y, x) = player% AND army%(y, x) >= size%(code%) THEN
IF terrain%(y, x + 1) <> 0 THEN
moved%(y, x + 1) = moved%(y, x + 1) + size%(code%)
army%(y, x) = army%(y, x) - size%(code%)
ELSE
IF seamoved%(player%) + seaarmy%(player%) + size%(code%) <= navy%(player%) THEN
seamoved%(player%) = seamoved%(player%) + size%(code%)
army%(y, x) = army%(y, x) - size%(code%)
ELSE
message$ = "Not enough ships. "
END IF
END IF
ELSEIF terrain%(y, x) = 0 AND terrain%(y, x + 1) <> 0 AND seaarmy%(player%) >= size%(code%) THEN
seaarmy%(player%) = seaarmy%(player%) - size%(code%)
moved%(y, x + 1) = moved%(y, x + 1) + size%(code%)
END IF
END IF
CASE "f"
IF owner%(y, x) = player% THEN
fort%(y, x) = fort%(y, x) + 1
money&(player%) = money&(player%) - BF
message$ = "Cost:" + STR$(BF) + " "
END IF
CASE "c"
IF owner%(y, x) = player% THEN
church%(y, x) = church%(y, x) + 1
money&(player%) = money&(player%) - bc
message$ = "Cost:" + STR$(bc) + " "
END IF
CASE "u"
IF owner%(y, x) = player% THEN
university%(y, x) = university%(y, x) + 1
money&(player%) = money&(player%) - bu
message$ = "Cost:" + STR$(bu) + " "
END IF
CASE "m"
IF owner%(y, x) = player% AND prodpot(terrain%(y, x)) > mill%(y, x) THEN
mill%(y, x) = mill%(y, x) + 1
money&(player%) = money&(player%) - bm
message$ = "Cost:" + STR$(bm) + " "
ELSEIF owner%(y, x) = player% THEN
message$ = "No more resources. "
END IF
CASE "n"
IF owner%(y, x) = 0 THEN
navy%(player%) = navy%(player%) + size%(code%)
money&(player%) = money&(player%) - bn * size%(code%)
message$ = "Cost:" + STR$(bn * size%(code%)) + " "
END IF
CASE "a"
IF owner%(y, x) = player% THEN
GOSUB countproperties
IF soldier&(player%) >= population&(player%) THEN
message$ = "No more people! "
ELSE
moved%(y, x) = moved%(y, x) + size%(code%)
money&(player%) = money&(player%) - ba * size%(code%)
message$ = "Cost:" + STR$(ba * size%(code%)) + " "
END IF
END IF
CASE "F"
IF owner%(y, x) = player% AND fort%(y, x) > 0 THEN
fort%(y, x) = fort%(y, x) - 1
money&(player%) = money&(player%) + sf
message$ = "Income:" + STR$(sf) + " "
END IF
CASE "C"
IF owner%(y, x) = player% AND church%(y, x) > 0 THEN
church%(y, x) = church%(y, x) - 1
money&(player%) = money&(player%) + sc
message$ = "Income:" + STR$(sc) + " "
END IF
CASE "U"
IF owner%(y, x) = player% AND university%(y, x) > 0 THEN
university%(y, x) = university%(y, x) - 1
money&(player%) = money&(player%) + su
message$ = "Income:" + STR$(su) + " "
END IF
CASE "M"
IF owner%(y, x) = player% AND mill%(y, x) > 0 THEN
mill%(y, x) = mill%(y, x) - 1
money&(player%) = money&(player%) + sm
message$ = "Income:" + STR$(sm) + " "
END IF
CASE "N"
IF owner%(y, x) = 0 AND navy%(player%) > 0 THEN
IF seamoved%(player%) + seaarmy%(player%) < navy%(player%) THEN
navy%(player%) = navy%(player%) - 1
money&(player%) = money&(player%) + sn
message$ = "Income:" + STR$(sn) + " "
ELSE
message$ = "Disembark first. "
END IF
END IF
CASE "A"
IF owner%(y, x) = player% AND army%(y, x) > 0 THEN
army%(y, x) = army%(y, x) - 1
money&(player%) = money&(player%) + sa
message$ = "Income:" + STR$(sa) + " "
END IF
CASE "i"
GOSUB info
CASE "s"
GOSUB science
CASE "t"
GOSUB treasury
CASE "d"
GOSUB diplomacy
CASE "E"
GOTO nextturn
CASE "e"
message$ = "'E' instead of 'e'. "
CASE "g"
GOSUB savegame
CASE "h"
GOSUB help
CASE "+"
IF code% < 7 THEN code% = code% + 1
CASE "-"
IF code% > 1 THEN code% = code% - 1
END SELECT
GOTO human
ai:
'------------------------------------------------
IF human% > 0 THEN PRINT name$(player%); "'s turn..."
'-- ai load variables --
OPEN control$(player%) FOR INPUT AS #1
INPUT #1, foodweight
INPUT #1, prodweight
INPUT #1, hateweight
INPUT #1, diplweight
INPUT #1, friendliness
INPUT #1, chance
INPUT #1, trustweight
INPUT #1, remoteweight
INPUT #1, mintrust
INPUT #1, aitrade
INPUT #1, aifriend
INPUT #1, aially
INPUT #1, minmorale
INPUT #1, mintax
FOR i = 1 TO 5
INPUT #1, feardipl(i)
NEXT i
INPUT #1, warmilitary
INPUT #1, peacemilitary
INPUT #1, aibuilding
INPUT #1, aichurch
INPUT #1, aimill
INPUT #1, ainavy
INPUT #1, aiuni
FOR i = 1 TO 6
INPUT #1, aiscience(i)
NEXT i
INPUT #1, landorsea
INPUT #1, planning
INPUT #1, myfactor
INPUT #1, avgfactor
CLOSE
'-- ai tax --
GOSUB countproperties
GOSUB professions
limit = minmorale * (1 - unemployed&(player%) / (population&(player%) + .001))
besttax = 0
FOR try = 1 TO 25
tax(player%) = try / 100
GOSUB morale
IF morale(player%) > limit THEN besttax = try / 100
NEXT try
IF besttax < mintax THEN besttax = mintax
tax(player%) = besttax
GOSUB morale
'-- ai diplomacy --
FOR i = 1 TO players%
value(i) = 0
lostvalue(i) = 0
diplaction%(player%, i) = 0
NEXT i
origvalue = 0
FOR i = 1 TO 15
FOR j = 1 TO 15
value(owner%(i, j)) = value(owner%(i, j)) + foodpot(terrain%(i, j)) * foodweight + prodpot(terrain%(i, j)) * prodweight
IF original%(i, j) = player% THEN
origvalue = origvalue + foodpot(terrain%(i, j)) * foodweight + prodpot(terrain%(i, j)) * prodweight
IF owner%(i, j) <> player% THEN lostvalue(owner%(i, j)) = lostvalue(owner%(i, j)) + foodpot(terrain%(i, j)) * foodweight + prodpot(terrain%(i, j)) * prodweight
END IF
NEXT j
NEXT i
maxvalue = 0
maxcountry = 0
FOR i = 1 TO players%
IF value(i) > maxvalue THEN
maxvalue = value(i)
maxcountry = i
END IF
diplinterest(i) = 0
hate(i) = 0
modifyme = 0
modifytarget = 0
allvalue = 0
enemyvalue = 0
tradevalue = value(player%)
friendvalue = value(player%)
allyvalue = 0
FOR j = 1 TO players%
IF j <> player% AND j <> i THEN diplinterest(i) = diplinterest(i) + (dipl%(player%, j) - 3) * (dipl%(j, i) - 3) / 2 + 3
IF dipl%(player%, j) = 5 THEN modifyme = modifyme + value(j)
IF dipl%(player%, j) = 1 THEN modifyme = modifyme - value(j)
IF dipl%(i, j) = 5 THEN modifytarget = modifytarget + value(j)
IF dipl%(i, j) = 1 THEN modifytarget = modifytarget - value(j)
allvalue = allvalue + value(j)
IF dipl%(player%, j) = 1 THEN enemyvalue = enemyvalue + value(j)
IF dipl%(player%, j) = 3 THEN tradevalue = tradevalue + value(j)
IF dipl%(player%, j) = 4 THEN friendvalue = friendvalue + value(j)
IF dipl%(player%, j) = 5 THEN allyvalue = allyvalue + value(j)
NEXT j
diplinterest(i) = diplinterest(i) / (players% - 2)
IF active% < 3 THEN diplinterest(i) = 2
hate(i) = lostvalue(i) / origvalue
IF dipl%(player%, i) = 4 THEN hate(i) = -lostvalue(i) / origvalue
fear(i) = (value(i) + modifytarget) / (value(player%) + modifyme)
NEXT i
avgvalue = allvalue / players%
target% = 0
min = 999
FOR i = 1 TO players%
diplplan(i) = fear(i) * (1 - hate(i) * hateweight) * (1 + (diplinterest(i) - dipl%(player%, i)) / 10 * diplweight) * (1 - (1 - trust(i)) * trustweight)
IF diplplan(i) < 0 THEN diplplan(i) = 0
IF border%(player%, i) = 0 AND navy%(player%) < soldier&(player%) THEN diplplan(i) = diplplan(i) * soldier&(player%) / (navy%(player%) + .001)
IF border%(player%, i) = 0 THEN diplplan(i) = diplplan(i) * (1 + remoteweight)
diplplan(i) = diplplan(i) * (1 + friendliness) * (1 - chance + RND * 2 * chance) - 1
IF diplplan(i) < min AND i <> player% AND land%(i) > 0 THEN
min = diplplan(i)
target% = i
END IF
NEXT i
overlimit = 0
IF maxvalue > value(player%) * myfactor AND maxvalue > avgvalue * avgfactor THEN
overlimit = 1
IF dipl%(player%, maxcountry) > 2 OR allyvalue > maxvalue / 2 THEN target% = maxcountry
END IF
IF trust(player%) > mintrust THEN diplaction%(player%, target%) = -1
FOR i = 1 TO players%
IF (min > 0 OR money&(player%) < 0 OR enemyvalue > allyvalue) AND (overlimit = 0 OR target% <> i) THEN diplaction%(player%, i) = 1
IF overlimit = 1 AND i <> maxcountry THEN diplaction%(player%, i) = 1
IF dipl%(player%, i) = 2 AND diplaction%(player%, i) > -1 AND diplplan(i) > 0 AND aitrade * (1 - (1 - trust(i)) * trustweight) / (value(player%) / avgvalue) / (tradevalue / avgvalue) * (1 + friendliness) > RND THEN diplaction%(player%, i) = 1
IF dipl%(player%, i) = 3 AND diplaction%(player%, i) > -1 AND diplplan(i) > 0 AND aifriend * (1 - (1 - trust(i)) * trustweight) / (value(player%) / avgvalue) / (friendvalue / avgvalue) * (1 + friendliness) > RND THEN diplaction%(player%, i) = 1
IF dipl%(player%, i) = 4 AND diplaction%(player%, i) > -1 AND diplplan(i) > 0 AND aially * (1 - (1 - trust(i)) * trustweight) / (value(player%) / avgvalue) / (allyvalue / avgvalue) * (1 + friendliness) > RND THEN diplaction%(player%, i) = 1
IF overlimit = 1 AND i = maxcountry AND diplaction%(player%, i) > -1 THEN diplaction%(player%, i) = 0
NEXT i
'-- ai movements --
'- analysing -
seafear = 0
FOR i = 1 TO players%
a = soldier&(player%) / land%(player%) ^ 2 * land%(i) * feardipl(dipl%(player%, i)) * (1 - sea(player%))
IF a > seafear THEN seafear = a
NEXT i
ownmill% = 1
maxrnd = 0
unii = 0
unij = 0
max2rnd = 0
disi = 0
disj = 0
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = player% AND original%(i, j) = player% AND prodpot(terrain%(i, j)) > mill%(i, j) THEN ownmill% = 0
threat(i, j) = 0
coast = 0
a = 1
IF owner%(i, j) = player% THEN
IF i > 1 AND i < 15 AND j > 1 AND j < 15 THEN a = (dipl%(player%, owner%(i - 1, j)) - 1) * (dipl%(player%, owner%(i + 1, j)) - 1) * (dipl%(player%, owner%(i, j - 1)) - 1) * (dipl%(player%, owner%(i, j + 1)) - 1)
IF original%(i, j) <> player% THEN
threat(i, j) = (population&(player%) / (allfood&(player%) + .001) * foodpot(terrain%(i, j)) / 40) * (1 - morale(player%) ^ 2)
IF threat(i, j) < foodpot(terrain%(i, j)) THEN threat(i, j) = foodpot(terrain%(i, j))
IF threat(i, j) < 1 THEN threat(i, j) = 1
END IF
threat(i, j) = threat(i, j) - army%(i, j) * (1 + terdefense(terrain%(i, j)) + fort%(i, j) * .3)
currentrnd = RND
IF original%(i, j) = player% AND currentrnd > maxrnd THEN
maxrnd = currentrnd
unii = i
unij = j
END IF
IF i > 1 THEN
IF owner%(i - 1, j) = 0 THEN
coast = 1
ELSEIF owner%(i - 1, j) <> player% THEN
threat(i, j) = threat(i, j) + army%(i - 1, j) * feardipl(dipl%(player%, owner%(i - 1, j)))
END IF
END IF
IF i < 15 THEN
IF owner%(i + 1, j) = 0 THEN
coast = 1
ELSEIF owner%(i + 1, j) <> player% THEN
threat(i, j) = threat(i, j) + army%(i + 1, j) * feardipl(dipl%(player%, owner%(i + 1, j)))
END IF
END IF
IF j > 1 THEN
IF owner%(i, j - 1) = 0 THEN
coast = 1
ELSEIF owner%(i, j - 1) <> player% THEN
threat(i, j) = threat(i, j) + army%(i, j - 1) * feardipl(dipl%(player%, owner%(i, j - 1)))
END IF
END IF
IF j < 15 THEN
IF owner%(i, j + 1) = 0 THEN
coast = 1
ELSEIF owner%(i, j + 1) <> player% THEN
threat(i, j) = threat(i, j) + army%(i, j + 1) * feardipl(dipl%(player%, owner%(i, j + 1)))
END IF
END IF
IF coast = 1 THEN threat(i, j) = threat(i, j) + seafear
ELSEIF dipl%(owner%(i, j), player%) = 1 THEN
IF i > 1 THEN
current2rnd = RND
IF owner%(i - 1, j) = 0 AND current2rnd > max2rnd THEN
max2rnd = current2rnd
disi = i
disj = j
END IF
END IF
IF i < 15 THEN
current2rnd = RND
IF owner%(i + 1, j) = 0 AND current2rnd > max2rnd THEN
max2rnd = current2rnd
disi = i
disj = j
END IF
END IF
IF j > 1 THEN
current2rnd = RND
IF owner%(i, j - 1) = 0 AND current2rnd > max2rnd THEN
maxrnd = current2rnd
disi = i
disj = j
END IF
END IF
IF j < 15 THEN
current2rnd = RND
IF owner%(i, j + 1) = 0 AND current2rnd > maxrnd THEN
max2rnd = current2rnd
disi = i
disj = j
END IF
END IF
END IF
NEXT j
NEXT i
'- reinforcing and attacking -
maxthreat = 0
threati = 0
threatj = 0
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = player% THEN
IF threat(i, j) > maxthreat THEN
maxthreat = threat(i, j)
threati = i
threatj = j
END IF
END IF
max = 1
coast = 0
a = 0: ' help neighbouring zone
minforce = 9999
minarmy = 9999
B = 0: ' attack enemy
c = 0: ' concentrate forces next to enemy
excess = INT(-threat(i, j) / (1 + terdefense(terrain%(i, j)) + fort%(i, j) * .3)) - 1
IF excess > army%(i, j) THEN excess = army%(i, j)
IF excess >= 1 THEN
IF i > 1 THEN
IF threat(i - 1, j) > max THEN
max = threat(i - 1, j)
a = 1
END IF
force = army%(i - 1, j) * (1 + terdefense(terrain%(i - 1, j)) + fort%(i - 1, j) * .3)
IF dipl%(player%, owner%(i - 1, j)) = 1 AND force < minforce THEN
minforce = force
minarmy = army%(i - 1, j)
B = 1
END IF
IF ed%(i - 1, j) < ed%(i, j) AND owner%(i - 1, j) = player% THEN c = 1
IF owner%(i - 1, j) = 0 THEN coast = 1
END IF
IF i < 15 THEN
IF threat(i + 1, j) > max THEN
max = threat(i + 1, j)
a = 2
END IF
force = army%(i + 1, j) * (1 + terdefense(terrain%(i + 1, j)) + fort%(i + 1, j) * .3)
IF dipl%(player%, owner%(i + 1, j)) = 1 AND force < minforce THEN
minforce = force
minarmy = army%(i + 1, j)
B = 2
END IF
IF ed%(i + 1, j) < ed%(i, j) AND owner%(i + 1, j) = player% THEN c = 2
IF owner%(i + 1, j) = 0 THEN coast = 1
END IF
IF j > 1 THEN
IF threat(i, j - 1) > max THEN
max = threat(i, j - 1)
a = 3
END IF
force = army%(i, j - 1) * (1 + terdefense(terrain%(i, j - 1)) + fort%(i, j - 1) * .3)
IF dipl%(player%, owner%(i, j - 1)) = 1 AND force < minforce THEN
minforce = force
minarmy = army%(i, j - 1)
B = 3
END IF
IF ed%(i, j - 1) < ed%(i, j) AND owner%(i, j - 1) = player% THEN c = 3
IF owner%(i, j - 1) = 0 THEN coast = 1
END IF
IF j < 15 THEN
IF threat(i, j + 1) > max THEN
max = threat(i, j + 1)
a = 4
END IF
force = army%(i, j + 1) * (1 + terdefense(terrain%(i, j + 1)) + fort%(i, j + 1) * .3)
IF dipl%(player%, owner%(i, j + 1)) = 1 AND force < minforce THEN
minforce = force
minarmy = army%(i, j + 1)
B = 4
END IF
IF ed%(i, j + 1) < ed%(i, j) AND owner%(i, j + 1) = player% THEN c = 4
IF owner%(i, j + 1) = 0 THEN coast = 1
END IF
END IF
'first round to help neighbours
d = a
IF max > excess THEN send = excess ELSE send = INT(max)
excess = excess - send
round = 1
movements:
IF send < 1 THEN d = 0
SELECT CASE d
CASE 0
'embark if you don't know where to go
IF round = 2 AND send > 0 AND coast = 1 THEN
emb = navy%(player%) - seaarmy%(player%) - seamoved%(player%)
IF emb > send THEN emb = send
army%(i, j) = army%(i, j) - emb
seamoved%(player%) = seamoved%(player%) + emb
END IF
CASE 1
moved%(i - 1, j) = moved%(i - 1, j) + send
army%(i, j) = army%(i, j) - send
CASE 2
moved%(i + 1, j) = moved%(i + 1, j) + send
army%(i, j) = army%(i, j) - send
CASE 3
moved%(i, j - 1) = moved%(i, j - 1) + send
army%(i, j) = army%(i, j) - send
CASE 4
moved%(i, j + 1) = moved%(i, j + 1) + send
army%(i, j) = army%(i, j) - send
END SELECT
'second round to attack enemy or concentrate forces
round = round + 1
send = excess
d = 0
IF c > 0 THEN d = c
IF B > 0 AND minforce < excess THEN
d = B
send = send + INT(minarmy / (1 + terdefense(terrain%(i, j)) + fort%(i, j) * .3))
END IF
IF send >= 1 AND round = 2 THEN GOTO movements
NEXT j
NEXT i
'- embarking -
landenemy% = 0
seaenemy% = 0
enemyvalue = 0
FOR i = 1 TO players%
IF dipl%(player%, i) = 1 THEN
IF border%(player%, i) > 0 THEN landenemy% = landenemy% + 1
IF border%(i, 0) > 0 AND border%(player%, 0) > 0 THEN seaenemy% = seaenemy% + 1
enemyvalue = enemyvalue + value(i)
END IF
NEXT i
IF allyvalue / (enemyvalue + .01) > RND AND landenemy% = 0 AND seaenemy% > 0 AND sea(player%) * active% > RND THEN
FOR i = 1 TO 15
FOR j = 1 TO 15
emb = 0
IF i > 1 THEN
IF owner%(i - 1, j) = 0 THEN emb = 1
END IF
IF i < 15 THEN
IF owner%(i + 1, j) = 0 THEN emb = 1
END IF
IF j > 1 THEN
IF owner%(i, j - 1) = 0 THEN emb = 1
END IF
IF j < 15 THEN
IF owner%(i, j + 1) = 0 THEN emb = 1
END IF
IF owner%(i, j) = player% AND emb = 1 THEN
emb = navy%(player%) - seaarmy%(player%) - seamoved%(player%)
ELSE
emb = 0
END IF
IF army%(i, j) - 5 < emb THEN emb = army%(i, j) - 5
IF emb > 0 THEN
army%(i, j) = army%(i, j) - emb
seamoved%(player%) = seamoved%(player%) + emb
END IF
NEXT j
NEXT i
END IF
'- disembarking -
IF disi > 0 AND disj > 0 AND seaarmy%(player%) > 5 AND seaarmy%(player%) > soldier&(player%) / land%(player%) * 2 THEN
moved%(disi, disj) = seaarmy%(player%)
seaarmy%(player%) = 0
IF human% > 0 THEN
COLOR ownercolor%(player%)
PRINT name$(player%);
COLOR 7
PRINT " disembarks on"; disj; disi
GOSUB press
END IF
END IF
'-- ai money spending --
IF money&(player%) < -population&(player%) / 3 THEN GOSUB debt
IF money&(player%) > 0 THEN
IF enemyvalue > 0 THEN
spend& = INT(money&(player%) * warmilitary)
ELSE
spend& = INT(money&(player%) * peacemilitary)
END IF
GOSUB military
END IF
IF money&(player%) > 0 THEN
IF aibuilding > RND OR morale(player%) < RND THEN
GOSUB building
ELSE
GOSUB developscience
END IF
END IF
nextturn:
'------------------------------------------------
GOSUB countproperties
GOSUB morale
IF human% > 0 THEN CLS
'-- science --
FOR i = 1 TO 6
aa& = INT(science(i, player%) ^ 3 * 1000)
IF sciencemoney&(i) > aa& THEN sciencemoney&(i) = aa&
IF uni%(player%) / 100 > RND AND population&(player%) > 0 THEN sciencemoney&(i) = sciencemoney&(i) + RND * 1000 * (1 + (uni%(player%) / population&(player%) * 50))
IF population&(player%) < 100 THEN
plus = 0
ELSE
plus = sciencemoney&(i) / 10000 / science(i, player%) ^ 3 * (1 + uni%(player%) / population&(player%) * 50)
END IF
IF plus > .3 THEN plus = .3
science(i, player%) = science(i, player%) + plus
IF control$(player%) = "human" AND plus > 0 THEN
PRINT "Your level of "; sciencename$(i); " has increased by:";
PRINT USING "##.###"; plus
GOSUB press
END IF
NEXT i
'-- war --
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) <> 0 THEN
attack = 0
defend = 0
IF owner%(i, j) = player% THEN
army%(i, j) = army%(i, j) + moved%(i, j)
moved%(i, j) = 0
END IF
rebels% = INT(population&(owner%(i, j)) / (allfood&(owner%(i, j)) + .001) * foodpot(terrain%(i, j)) / 20 * RND * morale(original%(i, j)) ^ 2)
IF owner%(i, j) <> player% AND moved%(i, j) > 0 THEN
attack = attack + moved%(i, j) * science(5, player%) * (.9 + RND / 5)
IF human% > 0 THEN
PRINT
PRINT "Location:"; j; i
COLOR ownercolor%(player%)
PRINT name$(player%);
COLOR 7
PRINT " starts an attack against ";
COLOR ownercolor%(owner%(i, j))
PRINT name$(owner%(i, j));
COLOR 7
PRINT " with"; moved%(i, j); "soldiers."
END IF
IF dipl%(player%, owner%(i, j)) > 1 THEN
IF diplaction%(player%, owner%(i, j)) = -1 AND dipl%(player%, owner%(i, j)) = 2 THEN
IF human% > 0 THEN PRINT "...shortly after a declaration of war."
ELSE
IF human% > 0 THEN PRINT "...WITHOUT A DECLARATION OF WAR! (Diplomatic trust: ";
penalty = -2 * ((dipl%(player%, owner%(i, j)) - 1) ^ 2) - 5
trust(player%) = trust(player%) + penalty / 100 + .05
diplaction%(player%, owner%(i, j)) = -1
dipl%(player%, owner%(i, j)) = 2
dipl%(owner%(i, j), player%) = 2
IF human% > 0 THEN PRINT INT(penalty + .5); "%)"
END IF
END IF
IF human% > 0 THEN
PRINT name$(owner%(i, j)); " defends the territory with"; army%(i, j); "soldiers."
PRINT "Defence bonuses:"; INT(terdefense(terrain%(i, j)) * 100 + .5); "% for terrain,"; fort%(i, j) * 30; "% for forts."
END IF
END IF
GOSUB revolt
IF owner%(i, j) <> original%(i, j) AND RND < (revoltbonus / 5 / players%) AND INT(rebels% * (1 - morale(owner%(i, j)) ^ 2)) > 0 AND attack = 0 THEN
attack = rebels% * science(5, original%(i, j)) * revoltbonus * (1 - morale(owner%(i, j)) ^ 2) * (.9 + RND / 5)
IF human% > 0 THEN
PRINT
PRINT "Location:"; j; i; " ";
COLOR ownercolor%(owner%(i, j))
PRINT name$(owner%(i, j));
COLOR 7
PRINT " (Original owner: ";
COLOR ownercolor%(original%(i, j))
PRINT name$(original%(i, j));
COLOR 7
PRINT ")"
PRINT "A rebellion breakes out in the occupied territory:"; INT(attack + .5); "rebels!"
PRINT name$(owner%(i, j)); " defends with"; army%(i, j); "soldiers."
PRINT "Defence bonuses:"; INT(terdefense(terrain%(i, j)) * 100 + .5); "% for terrain,"; fort%(i, j) * 30; "% for forts."
END IF
END IF
IF attack > 0 THEN
defend = army%(i, j) * science(5, owner%(i, j)) * (1 + terdefense(terrain%(i, j)) + fort%(i, j) * .3) * (.9 + RND / 5) + .001
IF owner%(i, j) = original%(i, j) THEN
defend = defend + rebels%
army%(i, j) = army%(i, j) + rebels%
IF human% > 0 AND rebels% > 0 THEN PRINT "The defender army is reinforced by"; rebels%; "volunteers."
END IF
IF attack > defend THEN
IF moved%(i, j) = 0 THEN
IF allfood&(player%) < 1 THEN allfood&(player%) = foodpot(terrain%(i, j)) * 2
pop% = INT(population&(player%) * foodpot(terrain%(i, j)) / (allfood&(player%) + .001))
IF human% > 0 THEN
PRINT name$(owner%(i, j)); " loses the fight against the rebels.";
COLOR ownercolor%(original%(i, j))
PRINT " The territory is liberated."
COLOR 7
PRINT "Lost population:"; pop%
GOSUB press
END IF
owner%(i, j) = original%(i, j)
population&(player%) = population&(player%) - pop%
population&(owner%(i, j)) = population&(owner%(i, j)) + pop%
army%(i, j) = INT(attack - defend)
ELSE
IF allfood&(owner%(i, j)) < 1 THEN allfood&(owner%(i, j)) = foodpot(terrain%(i, j)) * 2
pop% = INT(population&(owner%(i, j)) * foodpot(terrain%(i, j)) / (allfood&(owner%(i, j)) + .001))
IF human% > 0 THEN
COLOR ownercolor%(player%)
PRINT name$(player%);
COLOR 7
PRINT " wins the battle, and conqueres the territory."
PRINT "Gained population:"; pop%
GOSUB press
END IF
population&(owner%(i, j)) = population&(owner%(i, j)) - pop%
population&(player%) = population&(player%) + pop%
army%(i, j) = INT(moved%(i, j) * (1 - defend / attack))
moved%(i, j) = 0
owner%(i, j) = player%
END IF
ELSE
IF moved%(i, j) = 0 THEN
IF human% > 0 THEN
PRINT "The guarding forces manage to supress the rebellion."
GOSUB press
END IF
army%(i, j) = INT(army%(i, j) * (1 - attack / defend))
ELSE
IF human% > 0 THEN
PRINT "The attacking forces lose the battle."
GOSUB press
END IF
army%(i, j) = INT(army%(i, j) * (1 - attack / defend))
moved%(i, j) = 0
END IF
END IF
IF defend > 1 AND attack > defend / 4 THEN
a = INT(fort%(i, j) / 2 * RND + .5)
fort%(i, j) = fort%(i, j) - a
IF human% > 0 AND a > 0 THEN
PRINT a; "forts are destroyed in the battle."
GOSUB press
END IF
END IF
END IF
END IF
NEXT j
NEXT i
' sea battles
FOR i = 1 TO players%
IF RND > .9 AND dipl%(player%, i) = 1 AND navy%(i) > 0 AND navy%(player%) > 0 THEN
attack = navy%(player%) * science(5, player%) * science(4, player%) * (.9 + RND / 5)
defend = navy%(i) * science(5, i) * science(4, i) * (.9 + RND / 5)
IF attack > defend THEN
navy%(player%) = INT(navy%(player%) * (1 - (defend / attack) ^ 2 / 3))
navy%(i) = INT(navy%(i) * (1 - 1 / 3))
IF human% > 0 THEN
COLOR ownercolor%(player%)
PRINT
PRINT name$(player%);
COLOR 7
PRINT " wins a naval battle against "; name$(i); "."
IF control$(player%) = "human" THEN PRINT "Losses:"; INT(100 * (defend / attack) ^ 2 / 3); "%"
GOSUB press
END IF
ELSE
navy%(i) = INT(navy%(i) * (1 - (attack / defend) ^ 2 / 3))
navy%(player%) = INT(navy%(player%) * (1 - 1 / 3))
IF human% > 0 THEN
PRINT
PRINT name$(player%); " loses a third of her fleet in a naval battle against ";
COLOR ownercolor%(i)
PRINT name$(i); "."
COLOR 7
GOSUB press
END IF
END IF
IF seamoved%(player%) + seaarmy%(player%) > navy%(player%) THEN
seamoved%(player%) = 0
seaarmy%(player%) = navy%(player%)
END IF
IF seamoved%(i) + seaarmy%(i) > navy%(i) THEN
seamoved%(i) = 0
seaarmy%(i) = navy%(i)
END IF
END IF
seaarmy%(i) = seaarmy%(i) + seamoved%(i)
seamoved%(i) = 0
IF seaarmy%(i) > navy%(i) THEN seaarmy%(i) = navy%(i)
NEXT i
'-- diplomacy --
FOR i = 1 TO players%
dipl%(i, i) = 5
IF land%(i) = 0 THEN
FOR j = 1 TO players%
dipl%(i, j) = 2
dipl%(j, i) = 2
dipl%(i, i) = 5
NEXT j
END IF
IF diplaction%(player%, i) = -1 AND dipl%(player%, i) > 1 AND i <> player% THEN
dipl%(player%, i) = dipl%(player%, i) - 1
dipl%(i, player%) = dipl%(player%, i)
diplaction%(player%, i) = 0
diplaction%(i, player%) = 0
trust(player%) = trust(player%) - .05
IF human% > 0 THEN
PRINT
PRINT name$(player%); " spoils her relationship with "; name$(i); " to: ";
SELECT CASE dipl%(player%, i)
CASE 1
PRINT "war!"
CASE 2
PRINT "neutrality."
CASE 3
PRINT "trade."
CASE 4
PRINT "friendship."
END SELECT
GOSUB press
END IF
IF trust(player%) < 0 THEN trust(player%) = 0
IF dipl%(player%, i) = 1 THEN
FOR j = 1 TO players%
IF dipl%(i, j) = 5 AND j <> i AND dipl%(player%, j) > 1 THEN
IF human% > 0 THEN
PRINT name$(j); ", as an ally of "; name$(i); ", declares war to "; name$(player%); "."
GOSUB press
END IF
dipl%(player%, j) = 1
dipl%(j, player%) = 1
END IF
IF dipl%(player%, j) = 5 AND j <> player% AND dipl%(i, j) > 1 THEN
IF human% > 0 THEN
PRINT name$(j); ", as an ally of "; name$(player%); ", declares war to "; name$(i); "."
GOSUB press
END IF
dipl%(i, j) = 1
dipl%(j, i) = 1
END IF
NEXT j
END IF
END IF
prevent = 0
FOR j = 1 TO players%
IF dipl%(player%, j) = 1 AND dipl%(i, j) = 5 THEN prevent = 1
IF dipl%(player%, j) = 5 AND dipl%(i, j) = 1 THEN prevent = 1
NEXT j
IF diplaction%(player%, i) = 1 AND diplaction%(i, player%) = 1 AND prevent = 0 AND dipl%(player%, i) < 5 THEN
dipl%(player%, i) = dipl%(player%, i) + 1
dipl%(i, player%) = dipl%(player%, i)
diplaction%(player%, i) = 0
diplaction%(i, player%) = 0
IF human% > 0 THEN
PRINT
PRINT name$(player%); " and "; name$(i); " improve their relationship to: ";
SELECT CASE dipl%(player%, i)
CASE 2
PRINT "neutrality."
CASE 3
PRINT "trade."
CASE 4
PRINT "friendship."
CASE 5
PRINT "alliance!"
END SELECT
GOSUB press
END IF
IF dipl%(player%, i) = 5 THEN
FOR j = 1 TO players%
IF dipl%(i, j) = 1 AND player% <> i AND dipl%(player%, j) > 1 THEN
IF human% > 0 THEN
PRINT name$(player%); ", as an ally of "; name$(i); ", declares war to "; name$(j); "."
GOSUB press
END IF
dipl%(player%, j) = 1
dipl%(j, player%) = 1
END IF
IF dipl%(player%, j) = 1 AND i <> player% AND dipl%(i, j) > 1 THEN
IF human% > 0 THEN
PRINT name$(i); ", as an ally of "; name$(player%); ", declares war to "; name$(j); "."
GOSUB press
END IF
dipl%(i, j) = 1
dipl%(j, i) = 1
END IF
NEXT j
END IF
END IF
IF dipl%(player%, i) = 1 THEN
FOR j = 1 TO players%
IF dipl%(player%, j) = 5 AND dipl%(i, j) > 1 AND j <> player% THEN
IF human% > 0 THEN
PRINT
PRINT name$(j); ", as an ally of "; name$(player%); ", declares war to "; name$(i); "."
GOSUB press
END IF
dipl%(i, j) = 1
dipl%(j, i) = 1
END IF
IF dipl%(i, j) = 5 AND dipl%(player%, j) > 1 AND j <> i THEN
IF human% > 0 THEN
PRINT
PRINT name$(j); ", as an ally of "; name$(i); ", declares war to "; name$(player%); "."
GOSUB press
END IF
dipl%(player%, j) = 1
dipl%(j, player%) = 1
END IF
NEXT j
END IF
NEXT i
FOR i = 1 TO 15
FOR j = 1 TO 15
IF dipl%(owner%(i, j), original%(i, j)) = 5 AND owner%(i, j) <> original%(i, j) THEN
IF allfood&(owner%(i, j)) < 1 THEN allfood&(owner%(i, j)) = foodpot(terrain%(i, j)) * 2
pop% = INT(population&(owner%(i, j)) * foodpot(terrain%(i, j)) / allfood&(owner%(i, j)))
population&(owner%(i, j)) = population&(owner%(i, j)) - pop%
population&(original%(i, j)) = population&(original%(i, j)) + pop%
popmoney% = INT(pop% * RND * 3)
money&(owner%(i, j)) = money&(owner%(i, j)) + popmoney%
IF human% > 0 THEN
PRINT
PRINT "Location:"; j; i
PRINT name$(owner%(i, j)); " liberates a territory of her ally, ";
COLOR ownercolor%(original%(i, j))
PRINT name$(original%(i, j)); "!"
COLOR 7
PRINT "The grateful population sends "; popmoney%; "golds to "; name$(owner%(i, j)); "."
GOSUB press
END IF
owner%(i, j) = original%(i, j)
END IF
NEXT j
NEXT i
'-- other variables --
IF trust(player%) <= .99 THEN trust(player%) = trust(player%) + .01
GOSUB countproperties
IF control$(player%) = "human" AND landtrade(player%) > land%(player%) THEN
PRINT
PRINT "Thanks to your diplomatic relations with other empires, you can trade on"
PRINT INT(landtrade(player%) / land%(player%) * 100); "% of the area of your own country."
GOSUB press
END IF
FOR i = 1 TO players%
IF dipl%(player%, i) > 2 AND player% <> i THEN
FOR j = 1 TO 6
IF (RND < ((dipl%(player%, i) - 2) ^ 2) * science(3, player%) / 100) AND science(j, player%) < science(j, i) THEN
a = (science(j, i) - science(j, player%)) / 10
science(j, player%) = science(j, player%) + a
IF control$(player%) = "human" THEN
PRINT
PRINT "By copying an invention from "; name$(i); " your "; sciencename$(j); " develops by:";
PRINT USING "##.###"; a
GOSUB press
END IF
END IF
NEXT j
END IF
NEXT i
GOSUB morale
GOSUB professions
i = player%
GOSUB finances
money&(player%) = money&(player%) + total&
IF control$(player%) = "human" AND human% > 0 THEN
PRINT
PRINT "Change in your treasury:"; total&; "gold"
PRINT
GOSUB press
END IF
'-- reproduction --
allfood&(player%) = INT(allfood&(player%) * science(1, player%) + border%(player%, 0) * (1 + sea(player%)) * science(4, player%))
a = allfood&(player%) * 50 / (population&(player%) + .001)
IF a > 2 THEN a = 2
population&(player%) = INT(population&(player%) * (.9 + (a / 10)))
IF control$(player%) = "human" THEN
IF a > 1 THEN
PRINT "Your empire produced enough food for the population to grow by"; INT((a - 1) * 10); "%."
ELSE
PRINT "There is not enough food in your empire."; INT((1 - a) * 10); "% fell victim of starvation!"
END IF
END IF
IF morale(player%) < 1 THEN
population&(player%) = INT(population&(player%) * (1 - (1 - morale(player%)) ^ 2))
IF control$(player%) = "human" THEN
PRINT INT(((1 - morale(player%)) ^ 2) * 100); "% of the population leaves your land because of discontent."
END IF
END IF
epidemic = 0
IF land%(player%) > 0 THEN epidemic = (RND / 10) * (population&(player%) / 250 / land%(player%)) / science(6, player%)
population&(player%) = INT(population&(player%) * (1 - epidemic))
IF control$(player%) = "human" THEN
PRINT "Epidemics have"; INT(epidemic * 100); "% death toll in the country."
GOSUB press
END IF
IF population&(player%) < 0 THEN population&(player%) = 0
IF population&(player%) = 0 THEN
peasant&(player%) = 0
fisher&(player%) = 0
worker&(player%) = 0
merchant&(player%) = 0
soldier&(player%) = 0
unemployed&(player%) = 0
money&(player%) = 0
END IF
'-- human player eliminated --
IF control$(player%) = "human" THEN
IF land%(player%) = 0 THEN
CLS
PRINT "The last remains of your empire are conquered by the enemy,"
PRINT "so the struggle for hegemony continues without you."
control$(player%) = "default.ai"
GOSUB death
GOSUB press
ELSEIF population&(player%) <= 0 THEN
CLS
PRINT "You have run out of population."
PRINT "Hmmm, a rather funny way of political suicide..."
control$(player%) = "default.ai"
population&(player%) = 0
GOSUB death
GOSUB press
ELSEIF morale(player%) < .33 THEN
CLS
PRINT "The discontent masses don't endure your tyranny any more."
PRINT "A great revolution breaks out and sweeps your evil regime away."
PRINT "The new leader begins with a neutral relationship to all empires."
control$(player%) = "default.ai"
GOSUB neutral
GOSUB death
GOSUB press
END IF
ELSE
IF morale(player%) < .33 THEN
COLOR ownercolor%(player%)
IF human% > 0 THEN
PRINT
PRINT "There is a revolution in "; name$(player%); "!"
COLOR 7
PRINT "The new leader begins with a neutral relationship to all empires."
GOSUB beethoven
GOSUB press
END IF
GOSUB neutral
END IF
END IF
human% = 0
FOR i = 1 TO players%
IF control$(i) = "human" THEN human% = human% + 1
NEXT i
FOR i = 1 TO players%
IF land%(i) = 0 THEN
navy%(i) = 0
money&(i) = 0
population&(i) = 0
peasant&(i) = 0
fisher&(i) = 0
worker&(i) = 0
merchant&(i) = 0
soldier&(i) = 0
seaarmy%(i) = 0
unemployed&(i) = 0
ELSE
IF population&(i) <= 0 THEN population&(i) = allfood&(i) * 50
IF population&(i) <= 0 THEN population&(i) = 1
IF soldier&(i) > population&(i) THEN soldier&(i) = population&(i)
END IF
NEXT i
FOR i = 1 TO 6
sciencemoney&(i) = 0
NEXT i
message$ = "Welcome, Majesty."
IF player% < players% THEN
player% = player% + 1
ELSE
player% = 1
turn% = turn% + 1
revoltnation = INT(RND * players%) + 1
revoltlevel = RND * RND * 10
END IF
FOR i = 1 TO players%
diplaction%(player%, i) = 0
NEXT i
GOSUB spy
IF human% > 0 THEN CLS
GOSUB enemydistance
GOTO choosecontrol
'-----=====GOSUBS=====-----
chooseplayer:
FOR i = 1 TO players%
c$(i) = control$(i)
NEXT i
cprefresh:
LOCATE 12, 1
PRINT "Choose control for the empires."
PRINT : PRINT " Empire / Control Best results Turns Date"
LINE (0, 222)-(640, 222), 7
OPEN "bestturn.txt" FOR INPUT AS #1
FOR i = 1 TO players%
PRINT i; "- "; name$(i); SPC(8 - LEN(name$(i)));
IF c$(i) = "human" THEN COLOR 15
PRINT " / "; c$(i); " "
COLOR 7
INPUT #1, bestname$(i)
INPUT #1, bestturn(i)
INPUT #1, bestcontrol$(i)
INPUT #1, bestdate$(i)
LOCATE (14 + i), 37
PRINT bestcontrol$(i)
LOCATE (14 + i), 55
PRINT bestturn(i)
LOCATE (14 + i), 67
PRINT bestdate$(i)
NEXT i
CLOSE
PRINT : PRINT " 0 - Let the game begin!"
PRINT : PRINT "Press a number."
k$ = ""
WHILE k$ = ""
k$ = INKEY$
WEND
k = VAL(k$)
IF k <= players% THEN
IF c$(k) = "human" THEN
c$(k) = control$(k)
IF c$(k) = "human" THEN c$(k) = "default.ai"
ELSE
c$(k) = "human"
END IF
END IF
IF k$ <> "0" THEN GOTO cprefresh
human% = 0
FOR i = 1 TO players%
IF c$(i) = "human" THEN human% = human% + 1
control$(i) = c$(i)
NEXT i
CLS
RETURN
title:
COLOR 4
PRINT "HEGEMONY 3.0.e Copyright: Akos Ivanyi (21.07.2003)"
COLOR 15
PRINT "============== ivanyiakos@hotmail.com"
COLOR 2
PRINT "The Game of the Middle Ages www.angelfire.com/ego/akos"
COLOR 7
LINE (0, 50)-(640, 50), 7
FOR i = 1 TO 15
FOR j = 1 TO 15
LINE (280 + j * 3, i * 3)-(281 + j * 3, 1 + i * 3), ownercolor%(owner%(i, j)), BF
NEXT j
NEXT i
RETURN
countproperties:
allsea% = 0
allship% = 0
FOR i = 0 TO players%
land%(i) = 0
fo%(i) = 0
chu%(i) = 0
uni%(i) = 0
mil%(i) = 0
allfood&(i) = 0
soldier&(i) = 0
sea(i) = 0
FOR j = 0 TO players%
border%(i, j) = 0
NEXT j
allship% = allship% + navy%(i)
NEXT i
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = 0 THEN allsea% = allsea% + 1
land%(owner%(i, j)) = land%(owner%(i, j)) + 1
fo%(owner%(i, j)) = fo%(owner%(i, j)) + fort%(i, j)
chu%(owner%(i, j)) = chu%(owner%(i, j)) + church%(i, j)
uni%(owner%(i, j)) = uni%(owner%(i, j)) + university%(i, j)
mil%(owner%(i, j)) = mil%(owner%(i, j)) + mill%(i, j)
allfood&(owner%(i, j)) = allfood&(owner%(i, j)) + foodpot(terrain%(i, j))
soldier&(owner%(i, j)) = soldier&(owner%(i, j)) + army%(i, j)
soldier&(player%) = soldier&(player%) + moved%(i, j)
FOR k = 0 TO players%
a = 0
IF i > 1 THEN
IF owner%(i - 1, j) = k THEN a = a + 1
END IF
IF i < 15 THEN
IF owner%(i + 1, j) = k THEN a = a + 1
END IF
IF j > 1 THEN
IF owner%(i, j - 1) = k THEN a = a + 1
END IF
IF j < 15 THEN
IF owner%(i, j + 1) = k THEN a = a + 1
END IF
border%(owner%(i, j), k) = border%(owner%(i, j), k) + a
NEXT k
NEXT j
NEXT i
FOR i = 1 TO players%
IF allsea% = 0 OR allship% = 0 THEN
sea(i) = 0
ELSE
sea(i) = navy%(i) / allship%
END IF
soldier&(i) = soldier&(i) + seaarmy%(i) + seamoved%(i)
IF land%(i) = 0 THEN navy%(i) = 0
NEXT i
FOR i = 1 TO players%
landtrade(i) = 0
FOR j = 1 TO players%
IF dipl%(i, j) > 2 THEN
IF border%(i, j) > 0 THEN
landtrade(i) = landtrade(i) + land%(j)
ELSE
landtrade(i) = landtrade(i) + land%(j) * sea(i)
END IF
END IF
NEXT j
NEXT i
RETURN
professions:
FOR i = 1 TO players%
IF land%(i) > 0 THEN
merchant&(i) = INT(population&(i) / 50 * science(3, i) * landtrade(i) / land%(i))
IF merchant&(i) > population&(i) / 5 THEN merchant&(i) = INT(population&(i) / 5)
worker&(i) = INT(population&(i) / 10 * science(2, i))
IF worker&(i) > population&(i) * .5 THEN worker&(i) = INT(population&(i) * .5)
peasant&(i) = INT((population&(i) - soldier&(i) - merchant&(i) - worker&(i)) / (allfood&(i) * science(1, i) + border%(i, 0) * (1 + sea(i)) * science(4, i) + .0001) * allfood&(i) * science(1, i))
IF peasant&(i) > allfood&(i) * science(1, i) * 80 THEN peasant&(i) = INT(allfood&(i) * science(1, i) * 80)
fisher&(i) = INT(population&(i) - soldier&(i) - merchant&(i) - worker&(i) - peasant&(i))
IF fisher&(i) > border%(i, 0) * (1 + sea(i)) * science(4, i) * 25 THEN fisher&(i) = INT(border%(i, 0) * (1 + sea(i)) * science(4, i) * 25)
unemployed&(i) = population&(i) - soldier&(i) - merchant&(i) - worker&(i) - peasant&(i) - fisher&(i)
IF unemployed&(i) < 0 THEN unemployed&(i) = 0
END IF
NEXT i
RETURN
morale:
FOR i = 1 TO players%
morale(i) = 0
NEXT i
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) <> 0 THEN
pop% = INT(population&(owner%(i, j)) * foodpot(terrain%(i, j)) / (allfood&(owner%(i, j)) + .001))
bonus = church%(i, j) * 20 / (pop% + .001)
IF bonus > 1 THEN bonus = 1
localmorale(i, j) = (1 - tax(owner%(i, j)) * 2) * (1 - unemployed&(owner%(i, j)) / (population&(owner%(i, j)) + .001)) * (1 + bonus) * (.5 + trust(owner%(i, j)) / 2)
IF money&(owner%(i, j)) < 0 THEN localmorale(i, j) = localmorale(i, j) + money&(owner%(i, j)) / 10 / (population&(owner%(i, j)) + .001)
IF localmorale(i, j) > 1 THEN localmorale(i, j) = 1
IF original%(i, j) <> owner%(i, j) THEN localmorale(i, j) = localmorale(i, j) - .1
IF localmorale(i, j) < 0 THEN localmorale(i, j) = 0
morale(owner%(i, j)) = morale(owner%(i, j)) + localmorale(i, j)
END IF
NEXT j
NEXT i
FOR i = 1 TO players%
IF land%(i) = 0 THEN morale(i) = 1 ELSE morale(i) = morale(i) / land%(i)
NEXT i
RETURN
science:
sciencerefresh:
CLS
GOSUB title
LOCATE 7, 1
PRINT "Agricult"
PRINT "Industry"
PRINT "Trade"
PRINT "Sailing"
PRINT "Military"
PRINT "Medicine"
FOR i = 1 TO players%
COLOR ownercolor%(i)
a = 1 + i * 8
LOCATE 5, a
PRINT name$(i)
IF spy%(i) > 0 THEN
FOR j = 1 TO 6
LOCATE (6 + j), a
PRINT INT(science(j, i) * 1000) / 1000;
NEXT j
END IF
NEXT i
LOCATE 14, 1
COLOR 14
PRINT "Your money:"; money&(player%); " "
COLOR 7
PRINT
FOR i = 1 TO 6
aa& = INT(science(i, player%) ^ 3 * 1000)
IF sciencemoney&(i) < aa& THEN COLOR 7 ELSE COLOR 4
PRINT "Spent on "; sciencename$(i); ":"; sciencemoney&(i); " ";
LOCATE 15 + i, 30
PRINT i; "= spend 100; "; CHR$(96 + i); " = spend 1000 (max:"; aa&; ") "
NEXT i
LOCATE 28, 1
COLOR 7
PRINT " Agriculture Industry Trade Sailing Military Medicine"
max = 0
FOR i = 1 TO players%
FOR j = 1 TO 6
IF science(j, i) > max THEN max = science(j, i)
NEXT j
NEXT i
FOR i = 1 TO players%
IF spy%(i) > 0 THEN
FOR j = 1 TO 6
LINE (-50 + j * 100 + i * 5, 430)-(-50 + j * 100 + i * 5, 430 - science(j, i) / max * 90), ownercolor%(i)
NEXT j
END IF
NEXT i
k$ = ""
WHILE k$ = ""
k$ = INKEY$
WEND
SELECT CASE k$
CASE "1" TO "6"
sciencemoney&(VAL(k$)) = sciencemoney&(VAL(k$)) + 100
money&(player%) = money&(player%) - 100
CASE "a" TO "f"
sciencemoney&(ASC(k$) - 96) = sciencemoney&(ASC(k$) - 96) + 1000
money&(player%) = money&(player%) - 1000
CASE ELSE
CLS
RETURN
END SELECT
GOTO sciencerefresh
treasury:
treasuryrefresh:
CLS
GOSUB countproperties
GOSUB professions
GOSUB morale
GOSUB title
LOCATE 5, 1
PRINT "FLOW OF"
PRINT "COINS:"
PRINT
PRINT "Peasants"
PRINT "Fishers"
PRINT "Workers"
PRINT "Merchant"
PRINT "Mills..."
PRINT
PRINT "Interest"
PRINT
PRINT "Forts"
PRINT "Churches"
PRINT "Univers."
PRINT "Navy"
PRINT "Army"
PRINT
PRINT "Total"
PRINT
PRINT
PRINT "TREASURY"
PRINT
PRINT
COLOR ownercolor%(player%)
PRINT "Tax rate:"; INT(tax(player%) * 100 + .5); "% Morale:"; INT(morale(player%) * 100 + .5); "% ";
COLOR 7
PRINT "t = reduce tax T = raise tax"
FOR i = 1 TO players%
GOSUB finances
COLOR ownercolor%(i)
a = 1 + i * 8
LOCATE 5, a
PRINT name$(i)
IF spy%(i) > 0 THEN
LOCATE 8, a
PRINT peas&
LOCATE 9, a
PRINT fish&
LOCATE 10, a
PRINT work&
LOCATE 11, a
PRINT merc&
LOCATE 12, a
PRINT mmil&
LOCATE 14, a
PRINT interest&
LOCATE 16, a
PRINT mfor&
LOCATE 17, a
PRINT mchu&
LOCATE 18, a
PRINT muni&
LOCATE 19, a
PRINT mnav&
LOCATE 20, a
PRINT marm&
LOCATE 22, a
PRINT total&
LOCATE 25, a
PRINT money&(i)
END IF
NEXT i
COLOR 7
k$ = ""
WHILE k$ = ""
k$ = INKEY$
WEND
SELECT CASE k$
CASE "t"
tax(player%) = tax(player%) - .01
IF tax(player%) < 0 THEN tax(player%) = 0
CASE "T"
tax(player%) = tax(player%) + .01
IF tax(player%) > 1 THEN tax(player%) = 1
CASE ELSE
CLS
RETURN
END SELECT
GOTO treasuryrefresh
finances:
peas& = INT(peasant&(i) * tax(i) * morale(i) * science(1, i) * 4)
fish& = INT(fisher&(i) * tax(i) * morale(i) * science(4, i) * 4)
work& = INT(worker&(i) * tax(i) * morale(i) * science(2, i) * 8)
merc& = INT(merchant&(i) * tax(i) * morale(i) * science(3, i) * 16)
mmil& = -INT(mil%(i) * science(2, i) * mm)
IF money&(i) > 0 THEN
interest& = INT(money&(i) * .04)
ELSE
interest& = INT(money&(i) * .12)
END IF
mfor& = -INT(fo%(i) * mf)
mchu& = -INT(chu%(i) * mc)
muni& = -INT(uni%(i) * mu)
mnav& = -INT(navy%(i) * mn)
marm& = -INT(soldier&(i) * ma)
total& = peas& + fish& + work& + merc& + mmil& + interest& + mfor& + mchu& + muni& + mnav& + marm&
RETURN
diplomacy:
change% = 1
diplomacyrefresh:
CLS
GOSUB title
GOSUB countproperties
GOSUB spycost
LOCATE 5, 1
PRINT "Diplomatic relations"
PRINT "--------------------"
LOCATE 10, 1
FOR i = 1 TO players%
COLOR ownercolor%(i)
PRINT name$(i)
NEXT i
COLOR ownercolor%(player%)
PRINT
PRINT "Your"
PRINT "attitude"
PRINT
PRINT "Your"
PRINT "Info"
FOR i = 1 TO players%
COLOR ownercolor%(i)
a = 1 + i * 8
LOCATE 7, a
PRINT "("; i; ")"
LOCATE 8, a
PRINT name$(i)
FOR j = 1 TO players%
LOCATE (9 + j), a
SELECT CASE dipl%(i, j)
CASE 1
PRINT "war"
CASE 2
PRINT "neutr."
CASE 3
PRINT "trade"
CASE 4
PRINT "friend"
CASE 5
PRINT "ally"
END SELECT
LOCATE 21, (a + 2)
IF diplaction%(player%, i) = -1 THEN PRINT "-";
IF diplaction%(player%, i) = 0 THEN PRINT "0";
IF diplaction%(player%, i) = 1 THEN PRINT "+";
LOCATE 24, a
IF spy%(i) = 0 THEN PRINT "none"
IF spy%(i) = 1 THEN PRINT "general"
IF spy%(i) = 2 THEN PRINT "full"
NEXT j
NEXT i
COLOR 7
LOCATE 26, 1
PRINT "1-9 = choose target country (currently: ";
COLOR ownercolor%(change%)
PRINT name$(change%);
COLOR 7
PRINT ")"
PRINT "Change attitude: + = positive, - = negative, 0 = neutral"
PRINT "Spying: g = general info ";
SELECT CASE spy%(change%)
CASE 0
PRINT "("; INT(spycost%(change%) / 2); " gold)";
CASE ELSE
PRINT "(you already have)";
END SELECT
PRINT " f = full info ";
SELECT CASE spy%(change%)
CASE 0
PRINT "("; spycost%(change%); " gold)"
CASE 1
PRINT "("; INT(spycost%(change%) / 2); " gold)"
CASE ELSE
PRINT "(you already have)"
END SELECT
k$ = ""
WHILE k$ = ""
k$ = INKEY$
WEND
SELECT CASE k$
CASE "1" TO "9"
change% = VAL(k$)
CASE "+"
diplaction%(player%, change%) = 1
CASE "0"
diplaction%(player%, change%) = 0
CASE "-"
diplaction%(player%, change%) = -1
CASE "g"
IF spy%(change%) = 0 THEN
money&(player%) = money&(player%) - spycost%(change%) / 2
spy%(change%) = 1
END IF
CASE "f"
IF spy%(change%) = 0 THEN
money&(player%) = money&(player%) - spycost%(change%)
ELSEIF spy%(change%) = 1 THEN
money&(player%) = money&(player%) - spycost%(change%) / 2
END IF
spy%(change%) = 2
CASE ELSE
CLS
RETURN
END SELECT
GOTO diplomacyrefresh
spycost:
FOR i = 1 TO players%
spycost%(i) = INT((5 - dipl%(i, player%)) ^ 2 * 10 * land%(i))
NEXT i
RETURN
spy:
FOR i = 1 TO players%
SELECT CASE dipl%(player%, i)
CASE 1 TO 2
spy%(i) = 0
CASE 3 TO 4
spy%(i) = 1
CASE 5
spy%(i) = 2
END SELECT
NEXT i
RETURN
see:
see% = 0
IF spy%(owner%(y, x)) = 2 THEN see% = 1
IF y > 1 THEN
IF owner%(y - 1, x) = player% THEN see% = 1
END IF
IF y < 15 THEN
IF owner%(y + 1, x) = player% THEN see% = 1
END IF
IF x > 1 THEN
IF owner%(y, x - 1) = player% THEN see% = 1
END IF
IF x < 15 THEN
IF owner%(y, x + 1) = player% THEN see% = 1
END IF
IF owner%(y, x) = 0 THEN see% = 0
RETURN
press:
WHILE INKEY$ = "": WEND
RETURN
savegame:
save$ = "save" + RIGHT$(STR$(save%), LEN(STR$(save%)) - 1) + ".scn"
OPEN save$ FOR OUTPUT AS #1
PRINT #1, players%
PRINT #1, player%
PRINT #1, turn%
FOR i = 1 TO 6
PRINT #1, sciencemoney&(i)
NEXT i
FOR i = 1 TO players%
PRINT #1, name$(i)
PRINT #1, control$(i)
PRINT #1, population&(i)
PRINT #1, money&(i)
PRINT #1, navy%(i)
PRINT #1, seaarmy%(i)
PRINT #1, seamoved%(i)
PRINT #1, tax(i)
PRINT #1, trust(i)
FOR j = 1 TO 6
PRINT #1, science(j, i)
NEXT j
FOR j = 1 TO players%
PRINT #1, dipl%(i, j)
NEXT j
FOR j = 1 TO players%
PRINT #1, diplaction%(i, j)
NEXT j
NEXT i
FOR k = 1 TO 9
FOR i = 1 TO 15
FOR j = 1 TO 15
SELECT CASE k
CASE 1
PRINT #1, owner%(i, j);
CASE 2
PRINT #1, original%(i, j);
CASE 3
PRINT #1, terrain%(i, j);
CASE 4
PRINT #1, fort%(i, j);
CASE 5
PRINT #1, church%(i, j);
CASE 6
PRINT #1, university%(i, j);
CASE 7
PRINT #1, mill%(i, j);
CASE 8
PRINT #1, army%(i, j);
CASE 9
PRINT #1, moved%(i, j);
END SELECT
NEXT j
PRINT #1,
NEXT i
NEXT k
CLOSE
message$ = "Saved as: " + save$
save% = save% + 1
RETURN
help:
helprefresh:
CLS
GOSUB title
LOCATE 6, 1
PRINT "HELP"
PRINT "----"
PRINT "1 - About the game"
PRINT "2 - How to play?"
PRINT "3 - Money matters (income, costs, investments)"
PRINT "4 - Professions"
PRINT "5 - Science and development"
PRINT "6 - Diplomacy"
PRINT "7 - Military and war"
PRINT "8 - Other things to know..."
PRINT "9 - Back to the game"
k = 0
WHILE k = 0
k = VAL(INKEY$)
WEND
CLS
SELECT CASE k
CASE 1
help$ = "about.hlp"
CASE 2
help$ = "how.hlp"
CASE 3
help$ = "money.hlp"
CASE 4
help$ = "jobs.hlp"
CASE 5
help$ = "science.hlp"
CASE 6
help$ = "dipl.hlp"
CASE 7
help$ = "military.hlp"
CASE 8
help$ = "other.hlp"
CASE 9
CLS
RETURN
END SELECT
IF k <> 9 THEN
linesmax = 0
OPEN help$ FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, memo$
linesmax = linesmax + 1
LOOP
CLOSE
memo$ = ""
upper = 1: lower = 25
hscroll:
lines = 0
CLS
LOCATE 1, 1
OPEN help$ FOR INPUT AS #1
DO UNTIL EOF(1)
lines = lines + 1
LINE INPUT #1, text$
IF lines >= upper AND lines <= lower THEN PRINT text$
IF lines > lower THEN EXIT DO
LOOP
CLOSE
LOCATE 28, 1
PRINT "Possible keys: Page up, Page down, Arrow up, Arrow down, Escape..."
LINE (0, 420)-(640, 420), ownercolor%(player%)
waitforkey:
nothing = 0
k$ = INKEY$
IF k$ = (CHR$(0) + "H") THEN
IF upper > 1 THEN
upper = upper - 1
lower = lower - 1
GOTO hscroll
END IF
ELSEIF k$ = (CHR$(0) + "P") THEN
IF lower < linesmax THEN
upper = upper + 1
lower = lower + 1
GOTO hscroll
END IF
ELSEIF k$ = (CHR$(0) + CHR$(73)) THEN
upper = upper - 24
lower = lower - 24
IF upper < 1 THEN upper = 1
IF lower < 25 THEN lower = 25
ELSEIF k$ = (CHR$(0) + CHR$(81)) THEN
upper = upper + 24
lower = lower + 24
IF upper > linesmax - 24 THEN upper = linesmax - 24
IF lower > linesmax THEN lower = linesmax
ELSE
nothing = 1
END IF
IF k$ = CHR$(27) THEN
GOTO helprefresh
ELSEIF nothing = 1 THEN
GOTO waitforkey
ELSE
GOTO hscroll
END IF
END IF
GOTO helprefresh
info:
CLS
GOSUB countproperties
GOSUB professions
GOSUB morale
GOSUB title
LOCATE 7, 1
PRINT "Land"
PRINT "Sea"
PRINT "Popul."
PRINT "Money"
PRINT : PRINT "Tax"
PRINT "Morale"
PRINT "Trust"
PRINT : PRINT "Forts"
PRINT "Church"
PRINT "Univer."
PRINT "Mills"
PRINT "Ships"
PRINT : PRINT "Peasant"
PRINT "Fisher"
PRINT "Worker"
PRINT "Merchant"
PRINT "Soldier"
COLOR 8
PRINT "Embarked"
COLOR 7
PRINT "Unempl."
FOR i = 1 TO players%
COLOR ownercolor%(i)
a = 1 + i * 8
LOCATE 5, a
PRINT name$(i)
LOCATE 7, a
PRINT land%(i)
IF spy%(i) > 0 THEN
LOCATE 8, a
PRINT INT(sea(i) * 100 + .5); "%"
LOCATE 9, a
PRINT population&(i)
LOCATE 10, a
PRINT money&(i)
LOCATE 12, a
PRINT INT(tax(i) * 100 + .5); "%"
LOCATE 13, a
PRINT INT(morale(i) * 100 + .5); "%"
END IF
LOCATE 14, a
PRINT INT(trust(i) * 100 + .5); "%"
IF spy%(i) > 0 THEN
LOCATE 16, a
PRINT fo%(i)
LOCATE 17, a
PRINT chu%(i)
LOCATE 18, a
PRINT uni%(i)
LOCATE 19, a
PRINT mil%(i)
LOCATE 20, a
PRINT navy%(i)
LOCATE 22, a
PRINT peasant&(i)
LOCATE 23, a
PRINT fisher&(i)
LOCATE 24, a
PRINT worker&(i)
LOCATE 25, a
PRINT merchant&(i)
LOCATE 26, a
PRINT soldier&(i)
LOCATE 27, a
PRINT seaarmy%(i) + seamoved%(i)
LOCATE 28, a
PRINT unemployed&(i)
END IF
NEXT i
GOSUB press
CLS
RETURN
bye:
CLS
LOCATE 14, 24
PRINT "Would you like to play a new game?"
k$ = INKEY$
WHILE k$ <> "y" AND k$ <> "n"
k$ = INKEY$
WEND
IF k$ = "y" THEN GOTO opening:
CLS
COLOR (RND * 14 + 1)
LOCATE RND * 28 + 1, RND * 74 + 1
PRINT "BYE!"
GOSUB dragnet
SLEEP 1
SYSTEM
END
aicombat:
IF active% = 1 THEN GOTO victory
IF land%(player%) = 0 THEN
WHILE land%(player%) = 0
IF player% < players% THEN
player% = player% + 1
ELSE
player% = 1
turn% = turn% + 1
END IF
WEND
END IF
LINE (30, 400)-(110, 100), 0, BF
LINE (510, 400)-(590, 100), 0, BF
LOCATE 1, 1
GOSUB title
GOSUB drawmap
LOCATE 5, 35
PRINT "AI COMBAT"
LOCATE 6, 25
PRINT "Turn:"; turn%
LOCATE 6, 45
COLOR ownercolor%(player%)
PRINT name$(player%); " "
COLOR 7
maxprop& = 0
maxsc = 0
FOR i = 1 TO players%
property&(i) = fo%(i) * BF + chu%(i) * bc + uni%(i) * bu + mil%(i) * bm + navy%(i) * bn + soldier&(i) * ba + money&(i)
level(i) = 0
FOR j = 1 TO 6
level(i) = level(i) + science(j, i)
NEXT j
level(i) = level(i) / 6
IF property&(i) > maxprop& THEN maxprop& = property&(i)
IF level(i) > maxsc THEN maxsc = level(i)
NEXT i
FOR i = 1 TO players%
LINE (20 + i * 10, 400)-(20 + i * 10, 400 - property&(i) / maxprop& * 300), ownercolor%(i)
LINE (500 + i * 10, 400)-(500 + i * 10, 400 - level(i) / maxsc * 300), ownercolor%(i)
NEXT i
LOCATE 27, 1
PRINT "Value of properties Average science level"
LOCATE 27, 35
PRINT save$
LOCATE 6, 1
PRINT " max ="; maxprop&; "gold "
LOCATE 6, 63
PRINT " max ="; INT(maxsc * 1000) / 1000; " "
LOCATE 28, 21
PRINT "n = next player N = next turn"
LOCATE 29, 21
PRINT "s = save q = quit";
IF turn% < nextturn THEN GOTO ai
k$ = INKEY$
WHILE k$ <> "n" AND k$ <> "N" AND k$ <> "s" AND k$ <> "q"
k$ = INKEY$
WEND
nextturn = 0
IF k$ = "N" THEN nextturn = turn% + 1
IF k$ = "n" OR k$ = "N" THEN GOTO ai
IF k$ = "s" THEN GOSUB savegame
IF k$ = "q" THEN GOTO bye
GOTO aicombat
victory:
FOR i = 1 TO players%
IF land%(i) > 0 THEN winner% = i
NEXT i
CLS
GOSUB title
GOSUB drawmap
LOCATE 14, 4
PRINT "HEGEMONY!!!"
PRINT " -----------"
LOCATE 14, 61
PRINT "HEGEMONY!!!"
LOCATE 15, 61
PRINT "-----------"
LOCATE 5, 1
COLOR 15
PRINT " Eternal glory to the victorious leader of "; name$(winner%); ", the most"
PRINT " magnificent emperor in history, who brought us unity, peace and wealth!"
LOCATE 26, 1
COLOR 8
PRINT " (The vicious oppressor shall burn in the flames of hell forever, for all"
PRINT " the sorrow and misery he caused us!)"
GOSUB organ
GOSUB press
OPEN "bestturn.txt" FOR INPUT AS #1
FOR i = 1 TO players%
INPUT #1, bestname$(i)
INPUT #1, bestturn(i)
INPUT #1, bestcontrol$(i)
INPUT #1, bestdate$(i)
NEXT i
CLOSE
IF bestturn(winner%) >= turn% THEN
bestname$(winner%) = name$(winner%)
bestturn(winner%) = turn%
bestcontrol$(winner%) = control$(winner%)
bestdate$(winner%) = DATE$
OPEN "bestturn.txt" FOR OUTPUT AS #1
FOR i = 1 TO players%
WRITE #1, bestname$(i), bestturn(i), bestcontrol$(i), bestdate$(i)
NEXT i
CLOSE
END IF
GOTO bye
debt:
FOR i = 1 TO players%
diplaction%(player%, i) = 1
NEXT i
money&(player%) = money&(player%) + sn * navy%(player%)
navy%(player%) = 0
IF money&(player%) < 0 THEN
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = player% AND threat(i, j) = (-1) * army%(i, j) * (1 + terdefense(terrain%(i, j)) + fort%(i, j) * .3) THEN
money&(player%) = money&(player%) + sf * fort%(i, j)
fort%(i, j) = 0
END IF
IF owner%(i, j) = player% AND army%(i, j) > 1 THEN
a = INT(army%(i, j) / 10)
IF enemyvalue = 0 THEN a = a * 3
IF a = 0 AND army%(i, j) > 1 THEN a = 1
army%(i, j) = army%(i, j) - a
money&(player%) = money&(player%) + sa * a
END IF
IF owner%(i, j) = player% AND university%(i, j) > 0 THEN
IF original%(i, j) <> player% OR RND < .5 THEN
university%(i, j) = university%(i, j) - 1
money&(player%) = money&(player%) + su
END IF
END IF
NEXT j
NEXT i
END IF
RETURN
military:
i = player%
GOSUB finances
IF total& < 0 THEN RETURN
IF RND > landorsea AND sea(player%) < .6 AND (navy%(player%) < (10 * (1 - landorsea) * soldier&(player%)) OR sea(player%) < (1 / active%)) AND landenemy% = 0 THEN
'sea forces
'effects of a 10000 gold invention: a=navy, b=sailing, c=military
a = 10000 / (bn + planning * mn) * science(4, player%) * science(5, player%)
B = (1 + uni%(player%) / (population&(player%) + .001) * 50) / (science(4, player%) ^ 3) * navy%(player%) * science(5, player%)
c = (1 + uni%(player%) / (population&(player%) + .001) * 50) / (science(5, player%) ^ 3) * navy%(player%) * science(4, player%)
IF a > B AND a > c THEN
d = INT(spend& / bn)
navy%(player%) = navy%(player%) + d
money&(player%) = money&(player%) - d * bn
ELSEIF B > a AND B > c THEN
d = INT(science(4, player%) ^ 3 * 1000)
IF spend& < d THEN d = spend&
sciencemoney&(4) = d
money&(player%) = money&(player%) - d
ELSE
d = INT(science(5, player%) ^ 3 * 1000)
IF spend& < d THEN d = spend&
sciencemoney&(5) = d
money&(player%) = money&(player%) - d
END IF
ELSE
'land forces
'effects of a 10000 gold invention: a=forts, b=soldiers, c=military
a = 10000 / (BF + planning * mf) * .3 * soldier&(player%) * science(5, player%)
B = 10000 / (ba + planning * ma) * (1 + fo%(player%) * .3) * science(5, player%)
c = (1 + uni%(player%) / (population&(player%) + .001) * 50) / (science(5, player%) ^ 3) * (1 + fo%(player%) * .3) * soldier&(player%)
IF c > a AND c > B THEN
'develop military
d = INT(science(5, player%) ^ 3 * 1000)
IF spend& < d THEN d = spend&
sciencemoney&(5) = d
money&(player%) = money&(player%) - d
ELSE
'build forts
FOR i = 1 TO 15
FOR j = 1 TO 15
a = 10000 / (BF + planning * mf) * .3 * army%(i, j)
B = 10000 / (ba + planning * ma) * (1 + fort%(i, j) * .3)
IF a > B AND owner%(i, j) = player% AND threat(i, j) > 0 AND spend& >= BF THEN
fort%(i, j) = fort%(i, j) + 1
money&(player%) = money&(player%) - BF
spend& = spend& - BF
END IF
NEXT j
NEXT i
'build army
IF maxthreat > 0 AND spend& >= ba THEN
IF maxthreat > (spend& / ba) THEN d = INT(spend& / ba) ELSE d = INT(maxthreat)
e& = population&(player%) - soldier&(player%)
IF e& < d THEN d = e&
army%(threati, threatj) = army%(threati, threatj) + d
money&(player%) = money&(player%) - d * ba
spend& = spend& - d * ba
END IF
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = player% AND threat(i, j) > 0 AND spend& >= ba THEN
IF maxthreat > spend& / ba THEN d = INT(spend& / ba) ELSE d = INT(maxthreat)
army%(i, j) = army%(i, j) + d
money&(player%) = money&(player%) - d * ba
spend& = spend& - d * ba
END IF
NEXT j
NEXT i
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = player% AND spend& >= ba THEN
d = INT(spend& / ba / land%(player%)) + 1
army%(i, j) = army%(i, j) + d
money&(player%) = money&(player%) - d * ba
spend& = spend& - d * ba
END IF
NEXT j
NEXT i
END IF
END IF
RETURN
building:
spendchurch& = money&(player%) * aichurch
spendmill& = money&(player%) * aimill
spendnavy& = money&(player%) * ainavy
round = 0
buildmore:
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = player% THEN
IF (ownmill% = 0 AND original%(i, j) = player%) OR ownmill% = 1 THEN
IF mill%(i, j) < prodpot(terrain%(i, j)) AND spendmill& >= bm THEN
mill%(i, j) = mill%(i, j) + 1
spendmill& = spendmill& - bm
money&(player%) = money&(player%) - bm
END IF
END IF
maxmor = .5 + trust(player%) / 2
IF money&(player%) < 0 THEN maxmor = maxmor + money&(player%) / 10 / population&(player%)
IF original%(i, j) <> player% THEN maxmor = maxmor - .1
IF maxmor < 0 THEN maxmor = 0
a = (1 - localmorale(i, j)) * 2
IF original%(i, j) <> player% THEN
IF localmorale(i, j) + .005 < maxmor THEN
a = 1
ELSE
a = 0
END IF
END IF
IF RND < a THEN
IF spendchurch& >= bc THEN
church%(i, j) = church%(i, j) + 1
spendchurch& = spendchurch& - bc
money&(player%) = money&(player%) - bc
END IF
END IF
END IF
NEXT j
NEXT i
round = round + 1
IF (spendmill& > bm OR spendchurch& > bc) AND round < 5 THEN GOTO buildmore
i = player%
GOSUB finances
IF sea(player%) < .6 AND (navy%(player%) < (10 * (1 - landorsea) * soldier&(player%)) OR sea(player%) < (1 / active%)) AND total& > 0 THEN
a = INT(spendnavy& / bn)
navy%(player%) = navy%(player%) + a
money&(player%) = money&(player%) - a * bn
END IF
RETURN
developscience:
IF aiuni > RND THEN
IF unii > 0 AND unij > 0 THEN
a = INT(money&(player%) / bu)
university%(unii, unij) = university%(unii, unij) + a
money&(player%) = money&(player%) - a * bu
END IF
ELSE
FOR i = 1 TO 6
aa& = INT(science(i, player%) ^ 3 * 1000) - sciencemoney&(i)
bb& = INT(money&(player%) * aiscience(i))
IF unemployed&(player%) > 6 AND i = 6 THEN bb& = 0
IF bb& > aa& THEN
sciencemoney&(i) = sciencemoney&(i) + aa&
money&(player%) = money&(player%) - aa&
ELSE
sciencemoney&(i) = sciencemoney&(i) + bb&
money&(player%) = money&(player%) - bb&
END IF
NEXT i
END IF
RETURN
drawmap:
FOR i = 1 TO 15
FOR j = 1 TO 15
LINE (130 + j * 20, 80 + i * 20)-(150 + j * 20, 100 + i * 20), 0, B
LINE (131 + j * 20, 81 + i * 20)-(149 + j * 20, 99 + i * 20), tercolor(terrain%(i, j)), BF
IF owner%(i, j) <> 0 THEN LINE (145 + j * 20, 95 + i * 20)-(150 + j * 20, 100 + i * 20), 0, B
IF owner%(i, j) <> 0 THEN LINE (146 + j * 20, 96 + i * 20)-(150 + j * 20, 100 + i * 20), ownercolor%(owner%(i, j)), BF
NEXT j
NEXT i
RETURN
neutral:
FOR i = 1 TO players%
IF i <> player% THEN
dipl%(player%, i) = 2
dipl%(i, player%) = 2
END IF
NEXT i
IF money&(player%) < 0 THEN
money&(player%) = money&(player%) + sn * navy%(player%)
navy%(player%) = 0
END IF
IF money&(player%) < 0 THEN
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = player% THEN
army%(i, j) = INT(army%(i, j) / 2)
money&(player%) = money&(player%) + sa * army%(i, j)
university%(i, j) = INT(university%(i, j) / 2)
money&(player%) = money&(player%) + su * university%(i, j)
fort%(i, j) = INT(fort%(i, j) / 2)
money&(player%) = money&(player%) + sf * fort%(i, j)
IF church%(i, j) > 5 THEN church%(i, j) = church%(i, j) - 1
money&(player%) = money&(player%) + sc
END IF
NEXT j
NEXT i
END IF
IF money&(player%) < 0 THEN money&(player%) = INT(RND * 1000)
GOSUB countproperties
population&(player%) = allfood&(player%) * 50
RETURN
revolt:
revoltbonus = 1
a = original%(i, j)
IF i > 1 THEN
B = owner%(i - 1, j)
c = original%(i - 1, j)
IF a = c AND B = c THEN revoltbonus = revoltbonus + 1
END IF
IF i < 15 THEN
B = owner%(i + 1, j)
c = original%(i + 1, j)
IF a = c AND B = c THEN revoltbonus = revoltbonus + 1
END IF
IF j > 1 THEN
B = owner%(i, j - 1)
c = original%(i, j - 1)
IF a = c AND B = c THEN revoltbonus = revoltbonus + 1
END IF
IF j < 15 THEN
B = owner%(i, j + 1)
c = original%(i, j + 1)
IF a = c AND B = c THEN revoltbonus = revoltbonus + 1
END IF
IF revoltnation = original%(i, j) THEN revoltbonus = revoltbonus + revoltlevel
RETURN
enemydistance:
FOR i = 1 TO 15
FOR j = 1 TO 15
IF owner%(i, j) = 0 THEN ed%(i, j) = 0 ELSE ed%(i, j) = 99
IF i > 1 THEN
IF owner%(i - 1, j) = 0 AND ed%(i, j) > 1 THEN ed%(i, j) = 1
IF ed%(i, j) > dipl%(owner%(i - 1, j), owner%(i, j)) - 1 AND owner%(i - 1, j) <> 0 AND owner%(i, j) <> 0 THEN ed%(i, j) = dipl%(owner%(i - 1, j), owner%(i, j)) - 1
END IF
IF i < 15 THEN
IF owner%(i + 1, j) = 0 AND ed%(i, j) > 1 THEN ed%(i, j) = 1
IF ed%(i, j) > dipl%(owner%(i + 1, j), owner%(i, j)) - 1 AND owner%(i + 1, j) <> 0 AND owner%(i, j) <> 0 THEN ed%(i, j) = dipl%(owner%(i + 1, j), owner%(i, j)) - 1
END IF
IF j > 1 THEN
IF owner%(i, j - 1) = 0 AND ed%(i, j) > 1 THEN ed%(i, j) = 1
IF ed%(i, j) > dipl%(owner%(i, j - 1), owner%(i, j)) - 1 AND owner%(i, j - 1) <> 0 AND owner%(i, j) <> 0 THEN ed%(i, j) = dipl%(owner%(i, j - 1), owner%(i, j)) - 1
END IF
IF j < 15 THEN
IF owner%(i, j + 1) = 0 AND ed%(i, j) > 1 THEN ed%(i, j) = 1
IF ed%(i, j) > dipl%(owner%(i, j + 1), owner%(i, j)) - 1 AND owner%(i, j + 1) <> 0 AND owner%(i, j) <> 0 THEN ed%(i, j) = dipl%(owner%(i, j + 1), owner%(i, j)) - 1
END IF
NEXT j
NEXT i
FOR k = 1 TO 9
FOR i = 1 TO 15
FOR j = 1 TO 15
IF i > 1 THEN
IF ed%(i - 1, j) + 1 < ed%(i, j) THEN ed%(i, j) = ed%(i - 1, j) + 1
END IF
IF i < 15 THEN
IF ed%(i + 1, j) + 1 < ed%(i, j) THEN ed%(i, j) = ed%(i + 1, j) + 1
END IF
IF j > 1 THEN
IF ed%(i, j - 1) + 1 < ed%(i, j) THEN ed%(i, j) = ed%(i, j - 1) + 1
END IF
IF j < 15 THEN
IF ed%(i, j + 1) + 1 < ed%(i, j) THEN ed%(i, j) = ed%(i, j + 1) + 1
END IF
NEXT j
NEXT i
NEXT k
RETURN
beethoven:
'Beethoven's Fifth
PLAY "T180 o2 P2 P8 L8 GGG L2 E-"
PLAY "P24 P8 L8 FFF L2 D"
RETURN
death:
'Dead March from Saul
PLAY "l8t200mlo1c..p16c.p32cp32c.p8e..dp32d.cp32c.o0bo1c..mn"
RETURN
dragnet:
'Dragnet
PLAY "t255o2l2cl8dd#p8cp8l2f#"
RETURN
organ:
PLAY "T110ML"
PLAY "O2e-16c16e-16g16O3c16e-16d16c16O2b16g16b16O3d16g16f16e-16d16"
IF INKEY$ <> "" THEN RETURN
PLAY "O3e-16c16e-16g16O4c16e-16d16c16d16c16O3b16a16g16f16e-16d16"
IF INKEY$ <> "" THEN RETURN
PLAY "O3e-16c16e-16g16O4c16e-16d16c16O3b16g16b16O4d16g16f16e-16d16"
IF INKEY$ <> "" THEN RETURN
PLAY "O4e-16c16e-16g16O5c16e-16d16c16d16c16O4b16a16g16f16e-16d16"
IF INKEY$ <> "" THEN RETURN
PLAY "O4e-16c16O3g16e-16c16O5c16O4g16e-16a-16O2f16a16O3c16f16a-16"
PLAY "O4c16e-16"
IF INKEY$ <> "" THEN RETURN
PLAY "O4d16O3b-16f16d16O2b-16O4b-16f16d16g16O2e-16g16b-16O3e-16g16b-16"
PLAY "O4d16"
IF INKEY$ <> "" THEN RETURN
PLAY "O4c16O3a16g+16a16O4c16O3a16g+16a16O4e-16c16O3g16a16O4e-16c16O3"
PLAY "g16a16"
IF INKEY$ <> "" THEN RETURN
PLAY "O4d16c16O3f+16a16O4a16c16O3f+16a16O4f+16c16O3d16a16O4c16O3a16"
PLAY "f+16d16"
IF INKEY$ <> "" THEN RETURN
PLAY "O3b-16O1g16b-16O2d16g16b-16a16g16f+16d16f+16a16O3d16c16O2b-16a16"
IF INKEY$ <> "" THEN RETURN
PLAY "O2b-16g16b-16O3d16g16b-16a16g16a16g16f+16e16d16c16O2b-16a16"
IF INKEY$ <> "" THEN RETURN
PLAY "O2b-16g16b-16O3d16g16b-16a16g16f+16d16f+16a16O4d16c16O3b-16a16"
IF INKEY$ <> "" THEN RETURN
PLAY "O3b-16g16b-16O4d16g16b-16a16g16a16g16f+16e16d16c16O3b-16a16"
IF INKEY$ <> "" THEN RETURN
PLAY "O3b-16g16b-16O4d16g16d16O3b-16g16O2f16O4g16d16O3b16g16b16O4d16g16"
IF INKEY$ <> "" THEN RETURN
PLAY "o4c16o3g16o4g16o3g16o4c16o3g16o4g16o3g16b16g16o4f16o3g16b16g16"
IF INKEY$ <> "" THEN RETURN
PLAY "o4f16o3g16"
PLAY "o4e-16c16e-16g16o5c16o4g16e-16c16o2b-16o5c16o4g16e16c16e16g16"
IF INKEY$ <> "" THEN RETURN
PLAY "o5c16"
PLAY "o4f16c16o5c16o4c16f16c16o5c16o4c16e16c16b-16c16e16c16b-16c16"
IF INKEY$ <> "" THEN RETURN
PLAY "o2a-16f16a-16o3c16f16a-16g16f16g16f16e16d16c16o2b-16a-16g16"
IF INKEY$ <> "" THEN RETURN
PLAY "o3a-16f16a-16o4c16f16a-16g16f16g16f16e16d16c16o3b-16a-16g16"
IF INKEY$ <> "" THEN RETURN
PLAY "o3a-16o4f16c16o3a-16f16o4c16o3a-16f16c16a-16f16c16o2a-16o3f16"
PLAY "c16o2a-16"
IF INKEY$ <> "" THEN RETURN
PLAY "o2d-2o4a-16f16e16f16g16f16e16f16"
PLAY "o1b2o5d16o4f16g16a-16g16f16e-16d16"
IF INKEY$ <> "" THEN RETURN
PLAY "o4e-16g16o5c16o4g16b-16a-16g16f16e-4d4"
IF INKEY$ <> "" THEN RETURN
PLAY "o4c16o3g16o4g16o3g16o4c16o3g16o4g16o3g16b16g16o4f16o3g16b16g16"
PLAY "o4g16o3g16"
IF INKEY$ <> "" THEN RETURN
PLAY "o3b-16g16o4e16o3g16b-16g16o4e16o3g16a16o4e-16o5c16o4e-16o3a16"
PLAY "o4e-16o5c16o4e-16"
IF INKEY$ <> "" THEN RETURN
PLAY "o3a-16f16o4d16o3f16a-16f16o4d16o3f16g16o4d-16b-16d-16o3g16o4d-16"
PLAY "b-16d-16"
IF INKEY$ <> "" THEN RETURN
PLAY "o3f+16e-16o4c16o3e-16f+16e-16o4c16o3e-16e-16o4c16o5c16o4c16o3e-16"
IF INKEY$ <> "" THEN RETURN
PLAY "o3e-16o4c16e-16g16o5c16g16e-16c16g16e-16c16o3g16o4f16d16o3b16f16"
IF INKEY$ <> "" THEN RETURN
PLAY "o3e-16c16e-16g16o4c16e-16d16c16d16c16o3b16a16g16f16e-16d16"
IF INKEY$ <> "" THEN RETURN
PLAY "o4e-16c16e-16g16o5c16e-16d16o4b16o5c16o4g16e-16d16c16o3g16e-16d16"
PLAY "o3c16.p4"
RETURN
eye:
DATA 16,16,16,16,00,00,00,00,16,16,16,16
DATA 16,16,00,00,00,15,15,00,00,00,16,16
DATA 16,00,00,15,15,06,06,15,15,00,00,16
DATA 00,00,15,15,06,06,06,06,15,15,00,00
DATA 16,00,00,15,06,06,06,06,15,00,00,16
DATA 16,16,00,00,00,06,06,00,00,00,16,16
DATA 16,16,16,16,00,00,00,00,16,16,16,16
'-----=====END OF GAME=====-----
FUNCTION fixcolor (col AS INTEGER)
SELECT CASE col
CASE 1
fixcolor = 4
CASE 3
fixcolor = 6
CASE 4
fixcolor = 1
CASE 6
fixcolor = 3
CASE 9
fixcolor = 12
CASE 11
fixcolor = 14
CASE 12
fixcolor = 9
CASE 14
fixcolor = 11
CASE ELSE
fixcolor = col
END SELECT
END FUNCTION