mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-28 05:17:49 +00:00
9ee89d6ff4
These tests use a variety of sample code (with some of the larger files removed, so they are not complete!) and verifies that they all compile successfully.
2895 lines
76 KiB
QBasic
2895 lines
76 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
|
|
|