mirror of
https://github.com/QB64Official/qb64.git
synced 2024-09-02 00:30:17 +00:00
1739 lines
47 KiB
QBasic
1739 lines
47 KiB
QBasic
CHDIR ".\programs\samples\pete\simpire"
|
|
|
|
' ²±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±²
|
|
' ² Simpire Beta ²
|
|
' ²±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±²
|
|
' By Pyrus, Polarris@worldnet.att.net
|
|
' E-mail me with comments or suggestions.
|
|
'
|
|
' A strategy-type game in QuickBasic.
|
|
'
|
|
' You may will out of string space or memory in Qbasic 1.1,
|
|
' but this does work in Quickbasic 4.5. I would compile it, but
|
|
' it gets alot of errors...
|
|
'
|
|
' Some of the unfinished features in the beta are that
|
|
' you cannot battle another city, you cannot load a custom
|
|
' map yet, and sound has not been added. Also, the gold mine
|
|
' needs it's options programmed. You must go down to the CHDIR
|
|
' command and change it to the directory the program is in.
|
|
' I also need to make the small map update it's self.
|
|
'
|
|
' To gain citizens, build houses and Townhalls. To gain gold,
|
|
' you cut down trees and trade them for gold or by assassinating
|
|
' another city leader. To get more soldiers, you trade gold
|
|
' for them. Use the arror keys to scroll, and S to select menu
|
|
' items.
|
|
|
|
' For speed
|
|
DEFINT A-Z
|
|
' Declare subroutines and functions
|
|
DECLARE SUB printFX (text AS STRING)
|
|
DECLARE SUB menu ()
|
|
DECLARE FUNCTION CheckForVillage! ()
|
|
DECLARE SUB talkwin (text$, text2$, text3$, text4$, text5$, text6$, text7$, text8$, more%)
|
|
DECLARE SUB viewspr (filename$)
|
|
DECLARE SUB loadpal ()
|
|
DECLARE SUB changeanim ()
|
|
DECLARE SUB InitVars ()
|
|
DECLARE SUB LoadTiles ()
|
|
DECLARE SUB LoadWorld ()
|
|
DECLARE SUB ShowMap ()
|
|
DECLARE SUB MoveDown ()
|
|
DECLARE SUB MoveLeft ()
|
|
DECLARE SUB MoveRight ()
|
|
DECLARE SUB MoveUp ()
|
|
DECLARE SUB PutPlayerPic ()
|
|
DECLARE SUB PutTile (Ico, Jco, mapno)
|
|
DECLARE SUB LoadTile (Array())
|
|
DECLARE SUB jfont (a$, C, XCoordinate, YCoordinate, size)
|
|
DECLARE SUB PutCursorPic (cursor%)
|
|
DECLARE SUB Delay (seconds!)
|
|
DEFINT A-Z
|
|
|
|
' Some TYPES
|
|
TYPE WorldDataType
|
|
Rows AS INTEGER
|
|
Cols AS INTEGER
|
|
TopRow AS INTEGER
|
|
TopCol AS INTEGER
|
|
Action AS INTEGER
|
|
AnimCycle AS INTEGER
|
|
Direc AS INTEGER
|
|
PlayerY AS INTEGER
|
|
END TYPE
|
|
|
|
TYPE MapType
|
|
tile AS INTEGER
|
|
WalkOn AS INTEGER
|
|
END TYPE
|
|
|
|
TYPE HUES
|
|
Red AS INTEGER
|
|
grn AS INTEGER
|
|
blu AS INTEGER
|
|
END TYPE
|
|
|
|
|
|
' Define some Constants
|
|
CONST North = 1, South = 2, East = 3, West = 4
|
|
CONST true = -1, false = 0
|
|
|
|
' DIM Some Varibles
|
|
' "640K Ought to be enough for anyone" -Bill Gates'
|
|
DIM SHARED charset(128, 8, 6) 'array for storing font information
|
|
DIM SHARED WorldData AS WorldDataType
|
|
DIM SHARED map(-7 TO 70, -7 TO 62) AS MapType
|
|
DIM ColPal AS STRING * 768
|
|
DIM ColPal2 AS STRING * 768
|
|
DIM NewPal AS STRING * 768
|
|
DIM SHARED fontcolor$
|
|
DIM SHARED gold%
|
|
DIM SHARED wood%
|
|
|
|
|
|
' DIM the tile set
|
|
DIM SHARED ruble(205), stump(205), grass(205), water(205), Tree(205), stone(205), blank(205), ushore(205), dshore(205), lshore(205), rshore(205), tlshore(205), trshore(205), blshore(205), brshore(205), itlshore(205), itrshore(205), iblshore(205), _
|
|
ibrshore(205), cpath(205)
|
|
DIM SHARED farm.topleft(205), farm.topright(205), castle.topleft(205), castle.topright(205), townhall.topleft(205), townhall.topright(205), civil.topleft(205), civil.topright(205)
|
|
DIM SHARED farm.bottomleft(205), farm.bottomright(205), castle.bottomleft(205), castle.bottomright(205), townhall.bottomleft(205), townhall.bottomright(205), civil.bottomleft(205), civil.bottomright(205)
|
|
DIM SHARED goldiconmask(205), goldicon(205)
|
|
DIM SHARED woodiconmask(205), woodicon(205)
|
|
DIM SHARED mine.topleft(205), mine.topright(205), mine.bottomleft(205), mine.bottomright(205)
|
|
DIM SHARED enemy.knight(205), path(205)
|
|
|
|
'DIM the cursor
|
|
DIM SHARED cursor(205), cursor02(205), cursormask(205), cursor02mask(205)
|
|
DIM SHARED woodtext(1050), bricktext(1050), cursor2(205), cursor2mask(205), cursor3mask(305), cursor3(305)
|
|
|
|
' DIM a few other graphics
|
|
DIM SHARED smallmap(9000), woodtextmini(205)
|
|
DIM SHARED person.consultor(805), person.ninja(805), person.other(805), person.snow(805), person.mean(805)
|
|
|
|
' Define some keys
|
|
upkey$ = CHR$(0) + "H"
|
|
downkey$ = CHR$(0) + "P"
|
|
RightKey$ = CHR$(0) + CHR$(77)
|
|
LeftKey$ = CHR$(0) + CHR$(75)
|
|
F1$ = CHR$(0) + CHR$(59)
|
|
F2$ = CHR$(0) + CHR$(60)
|
|
F3$ = CHR$(0) + CHR$(61)
|
|
F4$ = CHR$(0) + CHR$(62)
|
|
F5$ = CHR$(0) + CHR$(63)
|
|
F6$ = CHR$(0) + CHR$(64)
|
|
F7$ = CHR$(0) + CHR$(65)
|
|
F8$ = CHR$(0) + CHR$(66)
|
|
F9$ = CHR$(0) + CHR$(67)
|
|
F10$ = CHR$(0) + CHR$(68)
|
|
F11$ = CHR$(0) + CHR$(69)
|
|
CtrlRight$ = CHR$(0) + CHR$(116)
|
|
CtrlLeft$ = CHR$(0) + CHR$(115)
|
|
enter$ = CHR$(13)
|
|
|
|
' 320x200 with 256 color Resolution
|
|
SCREEN 13
|
|
printFX "By Pyrus"
|
|
PLAY "T160O0L32EF"
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = " " OR x$ = CHR$(13)
|
|
|
|
' Load Custom Palette
|
|
loadpal
|
|
|
|
' Load Custom Font
|
|
OPEN "fontdata.dat" FOR INPUT AS #1
|
|
FOR a = 1 TO 126
|
|
FOR x = 1 TO 8
|
|
FOR y = 1 TO 6
|
|
INPUT #1, B
|
|
charset(a, x, y) = B
|
|
NEXT y
|
|
NEXT x
|
|
NEXT a
|
|
CLOSE
|
|
|
|
' Loads graphic tile set
|
|
CALL LoadTiles
|
|
DIM title(5000)
|
|
DIM titlemask(5000)
|
|
viewspr ("title.spr")
|
|
GET (1, 1)-(119, 39), title
|
|
GET (1, 40)-(119, 79), titlemask
|
|
CLS
|
|
|
|
' intro and title screen
|
|
FOR y = 0 TO 180 STEP 20
|
|
FOR x = 0 TO 300 STEP 20
|
|
PUT (x, y), bricktext, PSET
|
|
NEXT
|
|
NEXT
|
|
|
|
PUT (95, 15), titlemask, AND
|
|
PUT (95, 15), title, OR
|
|
CALL jfont("v1.0", 15, 220, 30, 1)
|
|
|
|
|
|
LINE (95, 50)-(215, 140), 0, BF
|
|
LINE (95, 50)-(215, 140), 112, B
|
|
CALL jfont("Begin Simpire", 2, 117, 65, 1)
|
|
CALL jfont("Load Custom Map", 15, 111, 75, 1)
|
|
CALL jfont("Options", 15, 135, 85, 1)
|
|
CALL jfont("Help", 15, 144, 95, 1)
|
|
CALL jfont("About", 15, 142, 105, 1)
|
|
CALL jfont("Quit to Dos", 15, 124, 115, 1)
|
|
sel = 1
|
|
DIM tempimg(8200)
|
|
|
|
menu:
|
|
|
|
DO
|
|
x$ = INKEY$
|
|
|
|
LOOP UNTIL x$ = upkey$ OR x$ = downkey$ OR x$ = CHR$(13)
|
|
|
|
IF x$ = CHR$(13) THEN
|
|
|
|
IF sel = 6 THEN
|
|
FOR T = 1 TO 84 STEP 4
|
|
Delay .0009
|
|
LINE (0, 0)-(T, 200), 0, BF
|
|
LINE (80, 0)-(80 + T, 200), 0, BF
|
|
LINE (160, 0)-(160 + T, 200), 0, BF
|
|
LINE (240, 0)-(240 + T, 200), 0, BF
|
|
NEXT
|
|
CLS
|
|
END
|
|
END IF
|
|
|
|
|
|
IF sel = 1 THEN GOTO start
|
|
|
|
IF sel = 2 THEN
|
|
GET (30, 50)-(291, 111), tempimg
|
|
LINE (30, 50)-(291, 111), 0, BF
|
|
LINE (30, 50)-(291, 111), 112, B
|
|
FOR x = 1 TO 260 STEP 20
|
|
PUT (30 + x, 51), woodtextmini, PSET
|
|
PUT (30 + x, 71), woodtextmini, PSET
|
|
PUT (30 + x, 91), woodtextmini, PSET
|
|
NEXT
|
|
LINE (40, 60)-(81, 99), 0, BF
|
|
PUT (41, 60), person.snow, PSET
|
|
LINE (40, 60)-(81, 99), 112, B
|
|
LINE (90, 60)-(278, 100), 0, BF
|
|
LINE (90, 60)-(278, 100), 112, B
|
|
CALL jfont("This feature is not ready yet.", 15, 95, 61, 1)
|
|
CALL jfont("", 2, 95, 71, 1)
|
|
CALL jfont("", 2, 95, 81, 1)
|
|
CALL jfont("Press Enter", 15, 95, 91, 1)
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = CHR$(13)
|
|
PUT (30, 50), tempimg, PSET
|
|
ERASE tempimg
|
|
END IF
|
|
|
|
IF sel = 3 THEN
|
|
GET (30, 50)-(291, 111), tempimg
|
|
LINE (30, 50)-(291, 111), 0, BF
|
|
LINE (30, 50)-(291, 111), 112, B
|
|
FOR x = 1 TO 260 STEP 20
|
|
PUT (30 + x, 51), woodtextmini, PSET
|
|
PUT (30 + x, 71), woodtextmini, PSET
|
|
PUT (30 + x, 91), woodtextmini, PSET
|
|
NEXT
|
|
LINE (40, 60)-(81, 99), 0, BF
|
|
PUT (41, 60), person.ninja, PSET
|
|
LINE (40, 60)-(81, 99), 112, B
|
|
LINE (90, 60)-(278, 100), 0, BF
|
|
LINE (90, 60)-(278, 100), 112, B
|
|
CALL jfont("What kind of sound do you want?", 15, 95, 61, 1)
|
|
CALL jfont("I want Adlib Compable.", 2, 95, 71, 1)
|
|
CALL jfont("I want PC Speaker.", 15, 95, 81, 1)
|
|
CALL jfont("Press Enter when done", 15, 95, 91, 1)
|
|
sel = 1
|
|
options:
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = CHR$(13) OR x$ = upkey$ OR x$ = downkey$
|
|
|
|
IF x$ = downkey$ THEN sel = sel + 1
|
|
IF x$ = upkey$ THEN sel = sel + 1
|
|
|
|
IF sel = 3 THEN sel = 1
|
|
IF sel = 0 THEN sel = 2
|
|
|
|
CALL jfont("I want Adlib Compable.", 15, 95, 71, 1)
|
|
CALL jfont("I want PC Speaker.", 15, 95, 81, 1)
|
|
|
|
IF sel = 1 THEN CALL jfont("I want Adlib Compable.", 2, 95, 71, 1)
|
|
IF sel = 2 THEN CALL jfont("I want PC Speaker.", 2, 95, 81, 1)
|
|
|
|
IF x$ = CHR$(13) THEN
|
|
|
|
IF sel = 1 THEN
|
|
CALL talkwin("This feature has not been added yet.", "", "", "", "", "", "", "", 2)
|
|
END IF
|
|
|
|
IF sel = 2 THEN
|
|
CALL talkwin("This feature has not been added yet.", "", "", "", "", "", "", "", 2)
|
|
END IF
|
|
|
|
PUT (30, 50), tempimg, PSET
|
|
ERASE tempimg
|
|
sel = 3
|
|
GOTO donesound
|
|
END IF
|
|
|
|
GOTO options
|
|
|
|
donesound:
|
|
END IF
|
|
|
|
IF sel = 4 THEN
|
|
GET (30, 50)-(291, 111), tempimg
|
|
LINE (30, 50)-(291, 111), 0, BF
|
|
LINE (30, 50)-(291, 111), 112, B
|
|
FOR x = 1 TO 260 STEP 20
|
|
PUT (30 + x, 51), woodtextmini, PSET
|
|
PUT (30 + x, 71), woodtextmini, PSET
|
|
PUT (30 + x, 91), woodtextmini, PSET
|
|
NEXT
|
|
LINE (40, 60)-(81, 99), 0, BF
|
|
PUT (41, 60), person.mean, PSET
|
|
LINE (40, 60)-(81, 99), 112, B
|
|
LINE (90, 60)-(278, 100), 0, BF
|
|
LINE (90, 60)-(278, 100), 112, B
|
|
CALL jfont("How to play.", 15, 95, 61, 1)
|
|
CALL jfont("Arror keys control scrolling.", 2, 95, 71, 1)
|
|
CALL jfont("S controls the menu.", 2, 95, 81, 1)
|
|
CALL jfont("Press Enter", 15, 95, 91, 1)
|
|
sel = 1
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = CHR$(13)
|
|
PUT (30, 50), tempimg, PSET
|
|
ERASE tempimg
|
|
sel = 4
|
|
END IF
|
|
|
|
IF sel = 5 THEN
|
|
GET (30, 50)-(291, 111), tempimg
|
|
LINE (30, 50)-(291, 111), 0, BF
|
|
LINE (30, 50)-(291, 111), 112, B
|
|
FOR x = 1 TO 260 STEP 20
|
|
PUT (30 + x, 51), woodtextmini, PSET
|
|
PUT (30 + x, 71), woodtextmini, PSET
|
|
PUT (30 + x, 91), woodtextmini, PSET
|
|
NEXT
|
|
LINE (40, 60)-(81, 99), 0, BF
|
|
PUT (41, 60), person.other, PSET
|
|
LINE (40, 60)-(81, 99), 112, B
|
|
LINE (90, 60)-(278, 100), 0, BF
|
|
LINE (90, 60)-(278, 100), 112, B
|
|
CALL jfont("Simpire v1.0", 15, 95, 61, 1)
|
|
CALL jfont("By Pyrus of WinterScape", 2, 95, 71, 1)
|
|
CALL jfont("Polarris@worldnet.att.net", 2, 95, 81, 1)
|
|
CALL jfont("Press Enter", 15, 95, 91, 1)
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = CHR$(13)
|
|
PUT (30, 50), tempimg, PSET
|
|
ERASE tempimg
|
|
END IF
|
|
|
|
|
|
|
|
END IF
|
|
|
|
|
|
|
|
|
|
IF x$ = downkey$ THEN sel = sel + 1
|
|
IF x$ = upkey$ THEN sel = sel - 1
|
|
|
|
IF sel = 0 THEN sel = 6
|
|
IF sel = 7 THEN sel = 1
|
|
CALL jfont("Begin Simpire", 15, 117, 65, 1)
|
|
CALL jfont("Load Custom Map", 15, 111, 75, 1)
|
|
CALL jfont("Options", 15, 135, 85, 1)
|
|
CALL jfont("Help", 15, 144, 95, 1)
|
|
CALL jfont("About", 15, 142, 105, 1)
|
|
CALL jfont("Quit to Dos", 15, 124, 115, 1)
|
|
|
|
IF sel = 1 THEN CALL jfont("Begin Simpire", 2, 117, 65, 1)
|
|
IF sel = 2 THEN CALL jfont("Load Custom Map", 2, 111, 75, 1)
|
|
IF sel = 3 THEN CALL jfont("Options", 2, 135, 85, 1)
|
|
IF sel = 4 THEN CALL jfont("Help", 2, 144, 95, 1)
|
|
IF sel = 5 THEN CALL jfont("About", 2, 142, 105, 1)
|
|
IF sel = 6 THEN CALL jfont("Quit to Dos", 2, 124, 115, 1)
|
|
|
|
GOTO menu
|
|
|
|
start:
|
|
' Start Up Subs
|
|
CALL InitVars
|
|
CALL LoadWorld
|
|
CALL menu
|
|
|
|
' A few other im[porrtant varibles
|
|
selct% = 1: menutitle% = 1:
|
|
abletotrade% = 1: gold% = 20: wood% = 20
|
|
|
|
|
|
' Makes the begining main menu
|
|
LINE (5, 60)-(56, 152), 0, BF
|
|
LINE (5, 60)-(56, 152), 112, B
|
|
LINE (5, 72)-(56, 72), 112
|
|
CALL jfont("Menu:", 15, 7, 62, 1)
|
|
CALL jfont("Build", 2, 7, 75, 1)
|
|
CALL jfont("Destroy", 15, 7, 85, 1)
|
|
CALL jfont("Attack", 15, 7, 95, 1)
|
|
CALL jfont("Trade", 15, 7, 105, 1)
|
|
CALL jfont("Status", 15, 7, 115, 1)
|
|
CALL jfont("Quit", 15, 7, 125, 1)
|
|
|
|
' Prints how much gold and wood you have
|
|
COLOR 15
|
|
LOCATE 21, 4: PRINT gold%
|
|
LOCATE 23, 4: PRINT wood%
|
|
|
|
' Show the map
|
|
CALL ShowMap
|
|
CALL PutCursorPic(1)
|
|
|
|
' Startup Message
|
|
startup:
|
|
CALL talkwin("Welcome to this demo of Simpire. Feel free to", "build a city. If you can achieve a population", "of 100 citizens, you will win.", "", "", "", "", "", 2)
|
|
|
|
' Starts the main loop
|
|
again:
|
|
|
|
' Checks if you have reached your goal
|
|
IF poplation% >= 100 THEN
|
|
CALL talkwin("You achieved a population of 100 citizens.", "Very good job.", "", "", "", "", "", "", 2)
|
|
CLS
|
|
END
|
|
END IF
|
|
|
|
' Prints how much gold and wood you have
|
|
LOCATE 21, 4: PRINT gold%
|
|
LOCATE 23, 4: PRINT wood%
|
|
|
|
' Starts a loop that waits for keys
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = "d" OR x$ = "D" OR x$ = "p" OR x$ = "P" OR x$ = "q" OR x$ = "Q" OR x$ = enter$ OR x$ = "s" OR x$ = "S" OR x$ = CHR$(27) OR x$ = CHR$(0) + "H" OR x$ = CHR$(0) + "P" OR x$ = CHR$(0) + "K" OR x$ = CHR$(0) + "M"
|
|
|
|
|
|
' Determines what key you pressed
|
|
|
|
IF x$ = "d" OR x$ = "D" THEN
|
|
|
|
IF destroy% = 0 THEN GOTO nokill
|
|
|
|
IF destroy% = 1 THEN
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 41 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 2
|
|
destroy% = 0:
|
|
GOTO donedes
|
|
END IF
|
|
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 4 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 3
|
|
destroy% = 0: wood% = wood% + 1
|
|
IF wood% >= 99 THEN wood% = 99
|
|
GOTO donedes
|
|
END IF
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 5 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 2:
|
|
destroy% = 0
|
|
END IF
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 18 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 20 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 23 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 25 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 1
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile = 1
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile = 1
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 6).tile = 1
|
|
destroy% = 0
|
|
END IF
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 19 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 21 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 24 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 26 THEN
|
|
map(WorldData.TopCol + 7, WorldData.TopRow + 5).tile = 1
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 1
|
|
map(WorldData.TopCol + 7, WorldData.TopRow + 6).tile = 1
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile = 1
|
|
destroy% = 0
|
|
END IF
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 27 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 29 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 32 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 34 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 4).tile = 1
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 4).tile = 1
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 1
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile = 1
|
|
destroy% = 0
|
|
END IF
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 28 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 30 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 33 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 35 THEN
|
|
map(WorldData.TopCol + 7, WorldData.TopRow + 4).tile = 1
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 4).tile = 1
|
|
map(WorldData.TopCol + 7, WorldData.TopRow + 5).tile = 1
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 1
|
|
destroy% = 0
|
|
END IF
|
|
|
|
END IF
|
|
|
|
donedes:
|
|
CALL ShowMap
|
|
|
|
nokill:
|
|
|
|
END IF
|
|
|
|
IF x$ = "p" OR x$ = "P" THEN
|
|
|
|
IF wantbuild% = 0 THEN GOTO noplace
|
|
IF buildtoplace% = 0 THEN GOTO noplace
|
|
|
|
IF canbuild% = 1 THEN
|
|
|
|
IF gold% >= 5 AND wood% >= 5 THEN
|
|
IF buildtoplace% = 1 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 18
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile = 19
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile = 27
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 6).tile = 28
|
|
CALL ShowMap
|
|
typ% = 1: CALL PutCursorPic(typ%)
|
|
farms% = farms% + 1
|
|
poplation% = poplation% + 1
|
|
wantbuild% = 0
|
|
gold% = gold% - 5
|
|
wood% = wood% - 5
|
|
END IF
|
|
END IF
|
|
|
|
IF gold% >= 15 AND wood% >= 15 THEN
|
|
IF buildtoplace% = 2 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 20
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile = 21
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile = 29
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 6).tile = 30
|
|
CALL ShowMap
|
|
typ% = 1: CALL PutCursorPic(typ%)
|
|
wantbuild% = 0
|
|
gold% = gold% - 15
|
|
wood% = wood% - 15
|
|
castle% = castle% + 1
|
|
soldiers% = soldiers% + 5
|
|
END IF
|
|
END IF
|
|
|
|
IF gold% >= 15 AND wood% >= 15 THEN
|
|
IF buildtoplace% = 3 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 23
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile = 24
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile = 32
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 6).tile = 33
|
|
CALL ShowMap
|
|
typ% = 1: CALL PutCursorPic(typ%)
|
|
wantbuild% = 0
|
|
gold% = gold% - 15
|
|
wood% = wood% - 15
|
|
townhall% = townhall% + 1
|
|
poplation% = poplation% + 10
|
|
END IF
|
|
END IF
|
|
|
|
IF gold% >= 5 AND wood% >= 5 THEN
|
|
IF buildtoplace% = 4 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 25
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile = 26
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile = 34
|
|
map(WorldData.TopCol + 9, WorldData.TopRow + 6).tile = 35
|
|
CALL ShowMap
|
|
typ% = 1: CALL PutCursorPic(typ%)
|
|
wantbuild% = 0
|
|
gold% = gold% - 5
|
|
wood% = wood% - 5
|
|
house% = house% + 1
|
|
poplation% = poplation% + 3
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF gold% >= 1 AND wood% >= 1 THEN
|
|
IF buildtoplace% = 5 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 41
|
|
CALL ShowMap
|
|
typ% = 1: CALL PutCursorPic(typ%)
|
|
wantbuild% = 0
|
|
gold% = gold% - 1
|
|
wood% = wood% - 1
|
|
numofspac% = 0
|
|
END IF
|
|
END IF
|
|
|
|
IF gold% >= 1 AND wood% >= 1 THEN
|
|
IF buildtoplace% = 6 THEN
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 4
|
|
CALL ShowMap
|
|
typ% = 1: CALL PutCursorPic(typ%)
|
|
wantbuild% = 0
|
|
gold% = gold% - 1
|
|
wood% = wood% - 1
|
|
numofspac% = 0
|
|
END IF
|
|
END IF
|
|
|
|
|
|
|
|
|
|
END IF
|
|
|
|
noplace:
|
|
END IF
|
|
|
|
IF x$ = "q" OR x$ = "Q" THEN
|
|
END
|
|
END IF
|
|
|
|
IF x$ = CHR$(0) + "H" THEN
|
|
CALL MoveUp
|
|
END IF
|
|
|
|
IF x$ = CHR$(0) + "P" THEN
|
|
CALL MoveDown
|
|
END IF
|
|
|
|
IF x$ = CHR$(0) + "K" THEN
|
|
CALL MoveLeft
|
|
END IF
|
|
|
|
IF x$ = CHR$(0) + "M" THEN
|
|
CALL MoveRight
|
|
END IF
|
|
|
|
IF x$ = "s" OR x$ = "S" THEN
|
|
selct% = selct% + 1
|
|
|
|
selectmenu:
|
|
IF menutitle% = 1 THEN
|
|
IF selct% = 7 THEN selct% = 1
|
|
CALL jfont("Menu:", 15, 7, 62, 1)
|
|
CALL jfont("Build", 15, 7, 75, 1)
|
|
CALL jfont("Destroy", 15, 7, 85, 1)
|
|
CALL jfont("Attack", 15, 7, 95, 1)
|
|
CALL jfont("Trade", 15, 7, 105, 1)
|
|
CALL jfont("Status", 15, 7, 115, 1)
|
|
CALL jfont("Quit", 15, 7, 125, 1)
|
|
|
|
IF selct% = 1 THEN CALL jfont("Build", 2, 7, 75, 1)
|
|
IF selct% = 2 THEN CALL jfont("Destroy", 2, 7, 85, 1)
|
|
IF selct% = 3 THEN CALL jfont("Attack", 2, 7, 95, 1)
|
|
IF selct% = 4 THEN CALL jfont("Trade", 2, 7, 105, 1)
|
|
IF selct% = 5 THEN CALL jfont("Status", 2, 7, 115, 1)
|
|
IF selct% = 6 THEN CALL jfont("Quit", 2, 7, 125, 1)
|
|
|
|
END IF
|
|
|
|
IF menutitle% = 2 THEN
|
|
IF selct% = 8 THEN selct% = 1
|
|
CALL jfont("Build:", 15, 7, 62, 1)
|
|
CALL jfont("Farm", 15, 7, 75, 1)
|
|
CALL jfont("Castle", 15, 7, 85, 1)
|
|
CALL jfont("Townhall", 15, 7, 95, 1)
|
|
CALL jfont("House", 15, 7, 105, 1)
|
|
CALL jfont("Path", 15, 7, 115, 1)
|
|
CALL jfont("Tree", 15, 7, 125, 1)
|
|
CALL jfont("Exit", 15, 7, 135, 1)
|
|
|
|
IF selct% = 1 THEN CALL jfont("Farm", 2, 7, 75, 1)
|
|
IF selct% = 2 THEN CALL jfont("Castle", 2, 7, 85, 1)
|
|
IF selct% = 3 THEN CALL jfont("Townhall", 2, 7, 95, 1)
|
|
IF selct% = 4 THEN CALL jfont("House", 2, 7, 105, 1)
|
|
IF selct% = 5 THEN CALL jfont("Path", 2, 7, 115, 1)
|
|
IF selct% = 6 THEN CALL jfont("Tree", 2, 7, 125, 1)
|
|
IF selct% = 7 THEN CALL jfont("Exit", 2, 7, 135, 1)
|
|
|
|
END IF
|
|
END IF
|
|
|
|
IF x$ = enter$ THEN
|
|
|
|
IF menutitle% = 1 AND selct% = 1 THEN
|
|
selct% = 0
|
|
menutitle% = 2
|
|
LINE (5, 60)-(56, 152), 0, BF
|
|
LINE (5, 60)-(56, 152), 112, B
|
|
LINE (5, 72)-(56, 72), 112
|
|
GOTO selectmenu:
|
|
END IF
|
|
|
|
IF menutitle% = 1 AND selct% = 6 THEN
|
|
CALL talkwin("Thanks for Playing.", "", "", "", "", "", "", "", 2)
|
|
FOR T = 1 TO 84 STEP 4
|
|
Delay .0009
|
|
LINE (0, 0)-(T, 200), 0, BF
|
|
LINE (80, 0)-(80 + T, 200), 0, BF
|
|
LINE (160, 0)-(160 + T, 200), 0, BF
|
|
LINE (240, 0)-(240 + T, 200), 0, BF
|
|
NEXT
|
|
CLS
|
|
SYSTEM
|
|
END IF
|
|
|
|
|
|
IF menutitle% = 1 AND selct% = 2 THEN
|
|
CALL talkwin("Please select what you want to destory. Then", "press D.", "", "", "", "", "", "", 2)
|
|
destroy% = 1
|
|
END IF
|
|
|
|
IF menutitle% = 1 AND selct% = 5 THEN
|
|
CALL talkwin("Welcome to the status menu.", "", "", "", "", "", "", "", 2)
|
|
LINE (80, 50)-(301, 111), 0, BF
|
|
LINE (80, 50)-(301, 111), 112, B
|
|
FOR x = 1 TO 220 STEP 20
|
|
PUT (80 + x, 51), bricktext, PSET
|
|
PUT (80 + x, 71), bricktext, PSET
|
|
PUT (80 + x, 91), bricktext, PSET
|
|
NEXT
|
|
LINE (90, 55)-(131, 95), 0, BF
|
|
LINE (90, 55)-(131, 96), 112, B
|
|
PUT (91, 56), person.mean, PSET
|
|
|
|
LINE (140, 55)-(290, 95), 0, BF
|
|
LINE (140, 55)-(290, 95), 112, B
|
|
even% = RND * 9 + 1
|
|
|
|
IF even% = 1 AND abletotrade% = 1 THEN
|
|
event1$ = "Snow Fall Blocks Trade."
|
|
event2$ = ""
|
|
LINE (90, 55)-(131, 95), 0, BF
|
|
LINE (90, 55)-(131, 96), 112, B
|
|
PUT (91, 56), person.snow, PSET
|
|
abletotrade% = 0
|
|
END IF
|
|
|
|
IF even% = 2 THEN
|
|
event1$ = "Forigners cut down"
|
|
event2$ = "many trees."
|
|
p% = RND * 40
|
|
FOR I = p% TO p% + 10
|
|
FOR J = p% TO p% + 10
|
|
IF map(J, I).tile = 4 THEN map(J, I).tile = 3
|
|
NEXT
|
|
NEXT
|
|
END IF
|
|
|
|
IF even% = 3 THEN
|
|
event1$ = "You recive 5 gold!"
|
|
event2$ = ""
|
|
gold% = gold% + 5
|
|
IF gold% >= 99 THEN gold% = 99
|
|
END IF
|
|
|
|
IF even% = 4 AND abletotrade% = 0 THEN
|
|
event1$ = "The snowing stops."
|
|
event2$ = ""
|
|
abletotrade% = 1
|
|
GOTO eventss
|
|
END IF
|
|
|
|
IF even% = 4 AND abletotrade% = 1 THEN
|
|
event1$ = "3 new soldiers join"
|
|
event2$ = "your army."
|
|
soldiers% = soldiers% + 3
|
|
IF soldiers% >= 999 THEN soldiers% = 999
|
|
END IF
|
|
|
|
IF even% >= 5 AND even% <= 10 THEN
|
|
event1$ = "No new Events."
|
|
event2$ = ""
|
|
END IF
|
|
|
|
eventss:
|
|
CALL jfont("Important Events:", 15, 145, 56, 1)
|
|
CALL jfont(event1$, 2, 145, 66, 1)
|
|
CALL jfont(event2$, 2, 145, 76, 1)
|
|
CALL jfont("Press Enter", 15, 145, 86, 1)
|
|
sel = 1
|
|
|
|
statusmenu:
|
|
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = CHR$(13)
|
|
|
|
IF x$ = CHR$(13) THEN
|
|
LOCATE 21, 4: PRINT gold%
|
|
LOCATE 23, 4: PRINT wood%
|
|
|
|
LINE (140, 55)-(290, 95), 0, BF
|
|
LINE (140, 55)-(290, 95), 112, B
|
|
|
|
CALL jfont("Population, Soldiers", 15, 145, 56, 1)
|
|
LOCATE 10, 19: PRINT poplation%; ", "; soldiers%
|
|
CALL jfont("Press Enter to Exit", 15, 145, 86, 1)
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = CHR$(13)
|
|
|
|
END IF
|
|
|
|
END IF
|
|
|
|
|
|
|
|
IF menutitle% = 1 AND selct% = 3 THEN
|
|
CALL talkwin("Welcome to the attack menu.", "", "", "", "", "", "", "", 2)
|
|
LINE (80, 50)-(301, 111), 0, BF
|
|
LINE (80, 50)-(301, 111), 112, B
|
|
attmenu:
|
|
FOR x = 1 TO 220 STEP 20
|
|
PUT (80 + x, 51), bricktext, PSET
|
|
PUT (80 + x, 71), bricktext, PSET
|
|
PUT (80 + x, 91), bricktext, PSET
|
|
NEXT
|
|
LINE (90, 55)-(131, 95), 0, BF
|
|
PUT (91, 56), person.other, PSET
|
|
LINE (90, 55)-(131, 95), 112, B
|
|
|
|
|
|
LINE (140, 55)-(290, 95), 0, BF
|
|
LINE (140, 55)-(290, 95), 112, B
|
|
|
|
CALL jfont("How you want to attack?", 15, 145, 56, 1)
|
|
CALL jfont("Battle a city.", 2, 145, 66, 1)
|
|
CALL jfont("Kill a city leader.", 15, 145, 76, 1)
|
|
CALL jfont("Exit attack", 15, 145, 86, 1)
|
|
sel = 1
|
|
|
|
attackmenu:
|
|
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = upkey$ OR x$ = downkey$ OR x$ = CHR$(13) OR x$ = "s" OR x$ = "S"
|
|
|
|
IF x$ = CHR$(13) THEN
|
|
IF sel = 1 THEN
|
|
CALL talkwin("This feature has not been added yet.", "", "", "", "", "", "", "", 2)
|
|
END IF
|
|
IF sel = 3 THEN GOTO exitattack
|
|
IF sel = 2 THEN GOTO assattack
|
|
|
|
END IF
|
|
|
|
IF x$ = upkey$ THEN sel = sel - 1
|
|
IF x$ = downkey$ THEN sel = sel + 1
|
|
IF x$ = "s" OR x$ = "S" THEN sel = sel + 1
|
|
IF sel = 0 THEN sel = 4
|
|
IF sel = 4 THEN sel = 1
|
|
CALL jfont("How you want to attack?", 15, 145, 56, 1)
|
|
CALL jfont("Battle a city.", 15, 145, 66, 1)
|
|
CALL jfont("Kill a city leader.", 15, 145, 76, 1)
|
|
CALL jfont("Exit attack", 15, 145, 86, 1)
|
|
|
|
IF sel = 1 THEN CALL jfont("Battle a city.", 2, 145, 66, 1)
|
|
IF sel = 2 THEN CALL jfont("Kill a city leader.", 2, 145, 76, 1)
|
|
IF sel = 3 THEN CALL jfont("Exit attack", 2, 145, 86, 1)
|
|
GOTO attackmenu
|
|
|
|
assattack:
|
|
LINE (80, 50)-(301, 111), 0, BF
|
|
LINE (80, 50)-(301, 111), 112, B
|
|
|
|
FOR x = 1 TO 220 STEP 20
|
|
PUT (80 + x, 51), bricktext, PSET
|
|
PUT (80 + x, 71), bricktext, PSET
|
|
PUT (80 + x, 91), bricktext, PSET
|
|
NEXT
|
|
LINE (90, 55)-(131, 95), 0, BF
|
|
LINE (90, 55)-(131, 96), 112, B
|
|
PUT (91, 56), person.ninja, PSET
|
|
|
|
LINE (140, 55)-(290, 95), 0, BF
|
|
LINE (140, 55)-(290, 95), 112, B
|
|
|
|
CALL jfont("Are you sure?", 15, 145, 56, 1)
|
|
CALL jfont("Yes.", 2, 145, 66, 1)
|
|
CALL jfont("Exit kill menu", 15, 145, 86, 1)
|
|
sel = 1
|
|
|
|
assmenu:
|
|
LOCATE 21, 4: PRINT gold%
|
|
LOCATE 23, 4: PRINT wood%
|
|
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = upkey$ OR x$ = downkey$ OR x$ = CHR$(13) OR x$ = "s" OR x$ = "S"
|
|
|
|
IF x$ = CHR$(13) THEN
|
|
IF sel = 1 THEN
|
|
kil% = RND * 9 + 1
|
|
|
|
IF kil% <= 4 THEN
|
|
CALL talkwin("You sucsessfully assassinated a city leader.", "You gain 10 gold, 10 wood, and 5 soldires.", "", "", "", "", "", "", 2)
|
|
gold% = gold% + 10
|
|
wood% = wood% + 10
|
|
IF gold% >= 99 THEN gold% = 99
|
|
IF wood% >= 99 THEN wood% = 99
|
|
soldiers% = soldiers% + 5
|
|
END IF
|
|
|
|
IF kil% >= 5 THEN
|
|
CALL talkwin("The assassination was not sucessful. The city", "demands at least 20 gold.", "", "", "", "", "", "", 2)
|
|
gold% = gold% - 20
|
|
IF gold% <= 0 THEN gold% = 0
|
|
END IF
|
|
|
|
|
|
END IF
|
|
|
|
|
|
IF sel = 2 THEN GOTO attmenu
|
|
END IF
|
|
|
|
IF x$ = upkey$ THEN sel = sel - 1
|
|
IF x$ = downkey$ THEN sel = sel + 1
|
|
IF x$ = "s" OR x$ = "S" THEN sel = sel + 1
|
|
IF sel = 0 THEN sel = 2
|
|
IF sel = 3 THEN sel = 1
|
|
CALL jfont("Are you sure?", 15, 145, 56, 1)
|
|
CALL jfont("Yes.", 15, 145, 66, 1)
|
|
CALL jfont("Exit kill menu", 15, 145, 86, 1)
|
|
|
|
IF sel = 1 THEN CALL jfont("Yes.", 2, 145, 66, 1)
|
|
IF sel = 2 THEN CALL jfont("Exit kill menu", 2, 145, 86, 1)
|
|
GOTO assmenu
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exitattack:
|
|
END IF
|
|
|
|
IF menutitle% = 1 AND selct% = 4 AND abletotrade% = 0 THEN
|
|
CALL talkwin("Snowfall blocks trade.", "", "", "", "", "", "", "", 2)
|
|
END IF
|
|
|
|
|
|
IF menutitle% = 1 AND selct% = 4 AND abletotrade% = 1 THEN
|
|
CALL talkwin("Welcome to the trade menu.", "", "", "", "", "", "", "", 2)
|
|
LINE (80, 50)-(301, 111), 0, BF
|
|
LINE (80, 50)-(301, 111), 112, B
|
|
|
|
FOR x = 1 TO 220 STEP 20
|
|
PUT (80 + x, 51), bricktext, PSET
|
|
PUT (80 + x, 71), bricktext, PSET
|
|
PUT (80 + x, 91), bricktext, PSET
|
|
NEXT
|
|
LINE (90, 55)-(131, 95), 0, BF
|
|
LINE (90, 55)-(131, 95), 112, B
|
|
PUT (91, 55), person.consultor, PSET
|
|
|
|
LINE (140, 55)-(290, 95), 0, BF
|
|
LINE (140, 55)-(290, 95), 112, B
|
|
|
|
CALL jfont("What you want to trade?", 15, 145, 56, 1)
|
|
CALL jfont("10 wood for 5 gold.", 2, 145, 66, 1)
|
|
CALL jfont("5 gold for a soldiers.", 15, 145, 76, 1)
|
|
CALL jfont("Exit Trade", 15, 145, 86, 1)
|
|
sel = 1
|
|
|
|
trademenu:
|
|
LOCATE 21, 4: PRINT gold%
|
|
LOCATE 23, 4: PRINT wood%
|
|
|
|
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = upkey$ OR x$ = downkey$ OR x$ = CHR$(13) OR x$ = "s" OR x$ = "S"
|
|
|
|
IF x$ = CHR$(13) THEN
|
|
|
|
IF sel = 3 THEN GOTO exittrade
|
|
|
|
IF sel = 1 THEN
|
|
|
|
IF wood% >= 10 THEN
|
|
wood% = wood% - 10
|
|
gold% = gold% + 5
|
|
IF gold% >= 99 THEN gold% = 99
|
|
CALL talkwin("You traded.", "", "", "", "", "", "", "", 2)
|
|
GOTO donesel2
|
|
END IF
|
|
|
|
IF wood% <= 9 THEN
|
|
CALL talkwin("You dont have enough wood.", "", "", "", "", "", "", "", 2)
|
|
END IF
|
|
donesel2:
|
|
END IF
|
|
|
|
IF sel = 2 THEN
|
|
|
|
IF gold% >= 5 THEN
|
|
gold% = gold% - 5
|
|
soldiers% = soldiers% + 1
|
|
CALL talkwin("You traded.", "", "", "", "", "", "", "", 2)
|
|
GOTO donesel1
|
|
END IF
|
|
|
|
IF gold% <= 4 THEN
|
|
CALL talkwin("You dont have enough gold.", "", "", "", "", "", "", "", 2)
|
|
END IF
|
|
|
|
END IF
|
|
|
|
donesel1:
|
|
|
|
END IF
|
|
|
|
IF x$ = upkey$ THEN sel = sel - 1
|
|
IF x$ = downkey$ THEN sel = sel + 1
|
|
IF x$ = "s" OR x$ = "S" THEN sel = sel + 1
|
|
IF sel = 0 THEN sel = 4
|
|
IF sel = 4 THEN sel = 1
|
|
CALL jfont("What you want to trade?", 15, 145, 56, 1)
|
|
CALL jfont("10 wood for 5 gold.", 15, 145, 66, 1)
|
|
CALL jfont("5 gold for a soldiers.", 15, 145, 76, 1)
|
|
CALL jfont("Exit Trade", 15, 145, 86, 1)
|
|
|
|
IF sel = 1 THEN CALL jfont("10 wood for 5 gold.", 2, 145, 66, 1)
|
|
IF sel = 2 THEN CALL jfont("5 gold for a soldiers.", 2, 145, 76, 1)
|
|
IF sel = 3 THEN CALL jfont("Exit Trade", 2, 145, 86, 1)
|
|
GOTO trademenu
|
|
|
|
exittrade:
|
|
END IF
|
|
|
|
|
|
IF menutitle% = 2 THEN
|
|
|
|
IF selct% = 1 THEN
|
|
IF gold% >= 5 AND wood% >= 5 THEN CALL talkwin("Please select where you want to build a farm.", "Then press P.", "", "", "", "", "", "", 2): buildtoplace% = 1: typ% = 3: CALL PutCursorPic(typ%): wantbuild% = 1
|
|
IF gold% <= 4 OR wood% <= 4 THEN CALL talkwin("You do not have enough gold or wood.", "", "", "", "", "", "", "", 2): wantbuild% = 0
|
|
END IF
|
|
|
|
IF selct% = 2 THEN
|
|
IF gold% >= 15 AND wood% >= 15 THEN CALL talkwin("Please select where you want to build a", "castle. Then press P.", "", "", "", "", "", "", 2): buildtoplace% = 2: typ% = 3: CALL PutCursorPic(typ%): wantbuild% = 1
|
|
IF gold% <= 14 OR wood% <= 14 THEN CALL talkwin("You do not have enough gold or wood.", "", "", "", "", "", "", "", 2): wantbuild% = 0
|
|
|
|
END IF
|
|
|
|
IF selct% = 3 THEN
|
|
IF gold% >= 15 AND wood% >= 15 THEN CALL talkwin("Please select where you want to build a town", "hall. Then press P.", "", "", "", "", "", "", 2): buildtoplace% = 3: typ% = 3: CALL PutCursorPic(typ%): wantbuild% = 1
|
|
IF gold% <= 14 OR wood% <= 14 THEN CALL talkwin("You do not have enough gold or wood.", "", "", "", "", "", "", "", 2): wantbuild% = 0
|
|
END IF
|
|
|
|
IF selct% = 4 THEN
|
|
IF gold% >= 5 AND wood% >= 5 THEN CALL talkwin("Please select where you want to build a house.", "Then press P.", "", "", "", "", "", "", 2): buildtoplace% = 4: typ% = 3: CALL PutCursorPic(typ%): wantbuild% = 1
|
|
IF gold% <= 4 OR wood% <= 4 THEN CALL talkwin("You do not have enough gold or wood.", "", "", "", "", "", "", "", 2): wantbuild% = 0
|
|
END IF
|
|
|
|
IF selct% = 5 THEN
|
|
IF gold% >= 1 AND wood% >= 1 THEN CALL talkwin("Please select where you want to build a path", "segement. Then press P.", "", "", "", "", "", "", 2): buildtoplace% = 5: typ% = 3: CALL PutCursorPic(typ%): wantbuild% = 1: numofspac% = 1
|
|
IF gold% <= 0 OR wood% <= 0 THEN CALL talkwin("You do not have enough gold or wood.", "", "", "", "", "", "", "", 2): wantbuild% = 0
|
|
END IF
|
|
|
|
IF selct% = 6 THEN
|
|
IF gold% >= 1 AND wood% >= 1 THEN CALL talkwin("Please select where you want to plant a Tree.", "Then press P.", "", "", "", "", "", "", 2): buildtoplace% = 6: typ% = 3: CALL PutCursorPic(typ%): wantbuild% = 1: numofspac% = 1
|
|
IF gold% <= 0 OR wood% <= 0 THEN CALL talkwin("You do not have enough gold or wood.", "", "", "", "", "", "", "", 2): wantbuild% = 0
|
|
END IF
|
|
|
|
IF selct% = 7 THEN
|
|
menutitle% = 1
|
|
selct% = 0
|
|
LINE (5, 60)-(56, 152), 0, BF
|
|
LINE (5, 60)-(56, 152), 112, B
|
|
LINE (5, 72)-(56, 72), 112
|
|
CALL jfont("Menu:", 15, 7, 62, 1)
|
|
CALL jfont("Build", 15, 7, 75, 1)
|
|
CALL jfont("Destroy", 15, 7, 85, 1)
|
|
CALL jfont("Attack", 15, 7, 95, 1)
|
|
CALL jfont("Trade", 15, 7, 105, 1)
|
|
CALL jfont("Status", 15, 7, 115, 1)
|
|
CALL jfont("Quit", 15, 7, 125, 1)
|
|
END IF
|
|
|
|
|
|
|
|
|
|
okok:
|
|
END IF
|
|
END IF
|
|
|
|
IF x$ = CHR$(27) THEN
|
|
IF wantbuild% = 1 THEN wantbuild% = 0: GOTO noesx
|
|
IF destroy% = 1 THEN destroy% = 0: GOTO noesx
|
|
|
|
menutitle% = 1
|
|
selct% = 0
|
|
LINE (5, 60)-(56, 152), 0, BF
|
|
LINE (5, 60)-(56, 152), 112, B
|
|
LINE (5, 72)-(56, 72), 112
|
|
CALL jfont("Menu:", 15, 7, 62, 1)
|
|
CALL jfont("Build", 15, 7, 75, 1)
|
|
CALL jfont("Destroy", 15, 7, 85, 1)
|
|
CALL jfont("Attack", 15, 7, 95, 1)
|
|
CALL jfont("Trade", 15, 7, 105, 1)
|
|
CALL jfont("Status", 15, 7, 115, 1)
|
|
CALL jfont("Quit", 15, 7, 125, 1)
|
|
|
|
|
|
noesx:
|
|
END IF
|
|
|
|
CALL ShowMap
|
|
|
|
' Places an appropiate cursor
|
|
|
|
IF destroy% = 1 THEN
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 3 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 2 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 1 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 37 OR map( _
|
|
WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 38 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 39 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 40 THEN
|
|
CALL PutCursorPic(2)
|
|
GOTO donecursor
|
|
END IF
|
|
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile > 2 OR map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile < 1 THEN
|
|
CALL PutCursorPic(3)
|
|
GOTO donecursor
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF wantbuild% = 1 THEN
|
|
|
|
|
|
|
|
IF numofspac% = 1 THEN
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile <= 3 THEN
|
|
CALL PutCursorPic(3)
|
|
canbuild% = 1
|
|
GOTO donecursor
|
|
END IF
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile >= 4 THEN
|
|
CALL PutCursorPic(2)
|
|
canbuild% = 2
|
|
GOTO donecursor
|
|
END IF
|
|
|
|
|
|
END IF
|
|
|
|
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile >= 4 OR map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile >= 4 OR map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile >= 4 OR map(WorldData.TopCol + 9, WorldData.TopRow + 6).tile >= 4 THEN
|
|
CALL PutCursorPic(2)
|
|
canbuild% = 2
|
|
GOTO donecursor
|
|
END IF
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile <= 2 AND map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile <= 2 AND map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile <= 2 AND map(WorldData.TopCol + 9, WorldData.TopRow + 6).tile <= 2 OR _
|
|
map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile <= 3 OR map(WorldData.TopCol + 9, WorldData.TopRow + 5).tile <= 3 OR map(WorldData.TopCol + 8, WorldData.TopRow + 6).tile <= 3 OR map(WorldData.TopCol + 9, WorldData.TopRow + 6).tile <= 3 THEN
|
|
CALL PutCursorPic(3)
|
|
canbuild% = 1
|
|
GOTO donecursor
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF destroy% = 0 AND wantbuild% = 0 THEN CALL PutCursorPic(1)
|
|
|
|
|
|
donecursor:
|
|
' Go to the top of the loop
|
|
GOTO again
|
|
|
|
SUB changeanim
|
|
|
|
' Simple. If they are on animation tile 1, make it 2, or vice versa.
|
|
|
|
IF WorldData.AnimCycle = 1 THEN WorldData.AnimCycle = 2 ELSE IF WorldData.AnimCycle = 2 THEN WorldData.AnimCycle = 1
|
|
|
|
END SUB
|
|
|
|
DEFSNG A-Z
|
|
FUNCTION CheckForVillage
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5).tile = 1 THEN
|
|
CheckForVillage = true
|
|
END IF
|
|
|
|
END FUNCTION
|
|
|
|
SUB Delay (seconds!)
|
|
DEF SEG = 0
|
|
D& = FIX(seconds! * 18.20444444#)
|
|
FOR T& = 0 TO D&
|
|
D% = PEEK(&H46C) AND 255
|
|
DO WHILE D% = (PEEK(&H46C) AND 255)
|
|
LOOP
|
|
NEXT T&
|
|
END SUB
|
|
|
|
DEFINT A-Z
|
|
SUB InitVars
|
|
|
|
' Initalize some variables
|
|
WorldData.TopRow = 5
|
|
WorldData.TopCol = 5
|
|
WorldData.Direc = West
|
|
WorldData.AnimCycle = 1
|
|
WorldData.PlayerY = 94
|
|
END SUB
|
|
|
|
SUB jfont (a$, C, XCoordinate, YCoordinate, size)
|
|
|
|
size = INT(size) 'No decimals allowed!
|
|
IF size > 10 THEN size = 10 'Check and fix invalid size calls
|
|
IF size < 1 THEN size = 1 'likewise for <.
|
|
|
|
YCoordinate = INT(YCoordinate / size) 'Prevent ballooning of YCoordinates
|
|
'that is a result of using
|
|
'size values larger than 1 for size
|
|
|
|
|
|
'Enter 999 as XCoordinate for centered text...
|
|
IF XCoordinate = 999 THEN XCoordinate = 160 - (LEN(a$) * 3 * size)
|
|
|
|
startx = XCoordinate 'set Starting X-Val for character drawing
|
|
|
|
FOR E = 1 TO LEN(a$)
|
|
|
|
B$ = MID$(a$, E, 1) ' read each character of the string
|
|
a = ASC(B$) ' get ASCII values of each character
|
|
|
|
FOR x = 1 TO 8
|
|
|
|
FOR y = 1 TO 6
|
|
|
|
SELECT CASE charset(a, x, y) 'use ASCII value (a) to point
|
|
'to the correct element in
|
|
'the array
|
|
|
|
CASE 0: col = 0 ' Don't draw pixel
|
|
|
|
CASE 1: col = C ' Draw pixel
|
|
|
|
CASE ELSE ' Error!
|
|
CLS
|
|
SCREEN 9
|
|
BEEP
|
|
COLOR 4
|
|
PRINT "Error in FONTDATA.DAT"
|
|
PRINT "Program will now continue, but may exhibit erratic behavior..."
|
|
DO: LOOP UNTIL INKEY$ <> ""
|
|
SCREEN 13
|
|
|
|
END SELECT
|
|
|
|
IF col <> 0 THEN 'Draw a pixel!
|
|
LINE (startx + pixelsright, (x + YCoordinate) * size)-(startx + pixelsright + (size - 1), ((x + YCoordinate) * size) + (size - 1)), col, BF
|
|
END IF
|
|
|
|
startx = startx + size 'Set starting X-value for next pixel
|
|
|
|
NEXT y
|
|
|
|
startx = XCoordinate 'reset startx for next line of pixels
|
|
|
|
NEXT x
|
|
pixelsright = pixelsright + (6 * size) ' add pixels for next character
|
|
|
|
NEXT E
|
|
|
|
END SUB
|
|
|
|
SUB loadpal
|
|
DIM Pal(255) AS HUES 'dim array for palette
|
|
DEF SEG = VARSEG(Pal(0)) 'point to it
|
|
BLOAD "default.pal", 0 'load the goods
|
|
OUT &H3C8, 0 'inform vga
|
|
FOR atrib = 0 TO 255 'entire palette
|
|
OUT &H3C9, Pal(atrib).Red 'send red component
|
|
OUT &H3C9, Pal(atrib).grn 'send grn component
|
|
OUT &H3C9, Pal(atrib).blu 'send blu component
|
|
NEXT atrib 'next attribute
|
|
END SUB
|
|
|
|
SUB LoadTiles
|
|
GET (0, 0)-(19, 19), blank
|
|
|
|
viewspr ("tiles.spr")
|
|
GET (0, 0)-(19, 19), grass
|
|
GET (20, 0)-(39, 19), stone
|
|
GET (40, 0)-(59, 19), water
|
|
GET (60, 0)-(79, 19), Tree
|
|
GET (80, 0)-(99, 19), stump
|
|
GET (100, 0)-(119, 19), ruble
|
|
GET (0, 40)-(19, 59), path
|
|
|
|
|
|
|
|
GET (0, 20)-(19, 39), ushore
|
|
GET (20, 20)-(39, 39), dshore
|
|
GET (40, 20)-(59, 39), lshore
|
|
GET (60, 20)-(79, 39), rshore
|
|
GET (80, 20)-(99, 39), tlshore
|
|
GET (100, 20)-(119, 39), trshore
|
|
GET (120, 20)-(139, 39), blshore
|
|
GET (140, 20)-(159, 39), brshore
|
|
GET (160, 20)-(179, 39), itlshore
|
|
GET (180, 20)-(199, 39), itrshore
|
|
GET (200, 20)-(219, 39), iblshore
|
|
GET (220, 20)-(239, 39), ibrshore
|
|
|
|
GET (0, 40)-(19, 59), cpath
|
|
|
|
GET (0, 60)-(19, 79), farm.topleft
|
|
GET (20, 60)-(39, 79), farm.topright
|
|
GET (40, 60)-(59, 79), castle.topleft
|
|
GET (60, 60)-(79, 79), castle.topright
|
|
GET (100, 60)-(119, 79), townhall.topleft
|
|
GET (120, 60)-(139, 79), townhall.topright
|
|
GET (140, 60)-(159, 79), civil.topleft
|
|
GET (160, 60)-(179, 79), civil.topright
|
|
GET (0, 100)-(19, 119), mine.topleft
|
|
GET (20, 100)-(39, 119), mine.topright
|
|
|
|
GET (0, 80)-(19, 99), farm.bottomleft
|
|
GET (20, 80)-(39, 99), farm.bottomright
|
|
GET (40, 80)-(59, 99), castle.bottomleft
|
|
GET (60, 80)-(79, 99), castle.bottomright
|
|
GET (100, 80)-(119, 99), townhall.bottomleft
|
|
GET (120, 80)-(139, 99), townhall.bottomright
|
|
GET (140, 80)-(159, 99), civil.bottomleft
|
|
GET (160, 80)-(179, 99), civil.bottomright
|
|
GET (0, 120)-(19, 139), mine.bottomleft
|
|
GET (20, 120)-(39, 139), mine.bottomright
|
|
GET (0, 140)-(19, 159), enemy.knight
|
|
|
|
|
|
CLS
|
|
|
|
viewspr ("buttons.spr")
|
|
GET (0, 0)-(19, 19), cursor
|
|
GET (20, 0)-(39, 19), cursor02
|
|
GET (40, 0)-(59, 19), cursormask
|
|
GET (60, 0)-(79, 19), cursor02mask
|
|
GET (0, 20)-(19, 39), cursor2
|
|
GET (60, 20)-(79, 39), cursor2mask
|
|
GET (0, 40)-(19, 59), cursor3
|
|
GET (60, 40)-(79, 59), cursor3mask
|
|
|
|
GET (80, 0)-(99, 19), goldicon
|
|
GET (100, 0)-(119, 19), goldiconmask
|
|
GET (80, 20)-(99, 39), woodicon
|
|
GET (100, 20)-(119, 39), woodiconmask
|
|
|
|
GET (0, 60)-(39, 99), woodtext
|
|
GET (0, 60)-(19, 79), woodtextmini
|
|
|
|
GET (40, 60)-(59, 79), bricktext
|
|
|
|
|
|
GET (0, 100)-(39, 139), person.consultor
|
|
GET (40, 100)-(79, 139), person.ninja
|
|
GET (80, 100)-(119, 139), person.other
|
|
GET (120, 100)-(159, 139), person.snow
|
|
GET (160, 100)-(199, 139), person.mean
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CLS
|
|
END SUB
|
|
|
|
SUB LoadWorld
|
|
|
|
WorldData.Rows = 50
|
|
WorldData.Cols = 50 ' Get the rows and cols to read.
|
|
RANDOMIZE TIMER
|
|
|
|
FOR I = 1 TO WorldData.Rows ' Go through a for loop to
|
|
FOR J = 1 TO WorldData.Cols ' load the world map data.
|
|
|
|
tempnum% = RND * 10
|
|
|
|
|
|
IF tempnum% >= 1 THEN map(J, I).tile = 2
|
|
IF tempnum% <= 1 THEN map(J, I).tile = 4
|
|
|
|
IF tempnum% = 10 THEN
|
|
f% = RND * 5
|
|
IF f% = 5 OR f% = 4 THEN map(J, I).tile = 5
|
|
END IF
|
|
|
|
IF map(J, I).tile = 0 THEN map(J, I).WalkOn = false
|
|
IF map(J, I).tile <> 0 THEN map(J, I).WalkOn = true
|
|
|
|
IF map(J, I).tile = 2 THEN PSET (J, I), 70
|
|
IF map(J, I).tile = 4 THEN PSET (J, I), 65
|
|
IF map(J, I).tile = 36 THEN PSET (J, I), 1
|
|
IF map(J, I).tile <> 2 AND map(J, I).tile <> 4 AND map(J, I).tile <> 36 THEN PSET (J, I), 70
|
|
|
|
NEXT J
|
|
NEXT I
|
|
|
|
|
|
' randomly places mine
|
|
a = RND * 49
|
|
B = RND * 49
|
|
|
|
map(a, B).tile = 37
|
|
map(a + 1, B).tile = 38
|
|
map(a, B + 1).tile = 39
|
|
map(a + 1, B + 1).tile = 40
|
|
PSET (a, B), 14
|
|
|
|
|
|
GET (1, 1)-(49, 50), smallmap
|
|
|
|
|
|
END SUB
|
|
|
|
SUB menu
|
|
PUT (0, 0), woodtext, PSET
|
|
PUT (39, 0), woodtext, PSET
|
|
PUT (0, 40), woodtext, PSET
|
|
PUT (39, 40), woodtext, PSET
|
|
PUT (0, 80), woodtext, PSET
|
|
PUT (39, 80), woodtext, PSET
|
|
PUT (0, 120), woodtext, PSET
|
|
PUT (39, 120), woodtext, PSET
|
|
PUT (0, 160), woodtext, PSET
|
|
PUT (39, 160), woodtext, PSET
|
|
LINE (0, 0)-(60, 199), 112, B
|
|
LINE (5, 5)-(55, 56), 0, BF
|
|
LINE (5, 5)-(55, 56), 112, B
|
|
LINE (24, 155)-(55, 195), 0, BF
|
|
LINE (23, 154)-(56, 196), 112, B
|
|
|
|
PUT (1, 155), goldiconmask, AND
|
|
PUT (1, 155), goldicon, OR
|
|
PUT (1, 175), woodiconmask, AND
|
|
PUT (1, 175), woodicon, OR
|
|
PUT (6, 6), smallmap, PSET
|
|
|
|
END SUB
|
|
|
|
SUB MoveDown
|
|
|
|
WorldData.Direc = South ' Change players direc to south.
|
|
CALL changeanim ' Change player animation state.
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5 + 1).WalkOn = true THEN
|
|
WorldData.TopRow = WorldData.TopRow + 1 ' If the tile below them
|
|
END IF ' (WD.TopRow + 5 + 1) is
|
|
' walkable, move there.
|
|
END SUB
|
|
|
|
SUB MoveLeft
|
|
|
|
WorldData.Direc = West ' Refer to SUB MoveDown.
|
|
CALL changeanim
|
|
|
|
IF map(WorldData.TopCol + 8 - 1, WorldData.TopRow + 5).WalkOn = true THEN
|
|
WorldData.TopCol = WorldData.TopCol - 1
|
|
END IF
|
|
|
|
END SUB
|
|
|
|
SUB MoveRight
|
|
|
|
WorldData.Direc = East ' Refer to SUB MoveDown.
|
|
CALL changeanim
|
|
|
|
IF map(WorldData.TopCol + 8 + 1, WorldData.TopRow + 5).WalkOn = true THEN
|
|
WorldData.TopCol = WorldData.TopCol + 1
|
|
END IF
|
|
|
|
END SUB
|
|
|
|
SUB MoveUp
|
|
|
|
WorldData.Direc = North ' Refer to SUB MoveDown.
|
|
CALL changeanim
|
|
|
|
IF map(WorldData.TopCol + 8, WorldData.TopRow + 5 - 1).WalkOn = true THEN
|
|
WorldData.TopRow = WorldData.TopRow - 1
|
|
END IF
|
|
END SUB
|
|
|
|
SUB printFX (text AS STRING)
|
|
DIM x AS INTEGER, y AS INTEGER
|
|
DIM zoom AS SINGLE, I AS INTEGER, clock AS SINGLE
|
|
DIM xOff AS INTEGER, yOff AS INTEGER
|
|
DIM textLen AS INTEGER, banner AS INTEGER
|
|
limX = 319: limY = 199
|
|
tileSize = 17: pSize = 170
|
|
midX = limX \ 2 - tileSize \ 2: midY = limY \ 2 - tileSize \ 2
|
|
|
|
IF LEFT$(text, 1) = ">" THEN
|
|
text = RIGHT$(text, LEN(text) - 1)
|
|
banner = 40
|
|
END IF
|
|
PALETTE 1, 0
|
|
COLOR 1
|
|
LOCATE 1, 1
|
|
PRINT text
|
|
textLen = LEN(text) * 8 - 3
|
|
DIM pic(textLen, 7) AS INTEGER
|
|
|
|
FOR x = 0 TO textLen
|
|
FOR y = 0 TO 7
|
|
IF POINT(x, y) = 1 THEN pic(x, y) = true
|
|
NEXT
|
|
NEXT
|
|
CLS
|
|
|
|
FOR I = 0 TO 35
|
|
OUT 968, I + palMax + 1
|
|
OUT 969, I + 15
|
|
OUT 969, I + 15
|
|
OUT 969, I + 15
|
|
NEXT
|
|
IF banner > 0 THEN
|
|
FOR I = 0 TO 35
|
|
OUT 968, I + banner + 1
|
|
OUT 969, I + 15
|
|
OUT 969, (I + 1) \ 4
|
|
OUT 969, (I + 1) \ 4
|
|
NEXT
|
|
END IF
|
|
|
|
FOR zoom = .2 TO 3.3 STEP .2
|
|
xOff = midX - (textLen * zoom) \ 2 + zoom
|
|
yOff = midY - (7 * zoom) \ 2 + zoom
|
|
colr = palMax + 1 + zoom * 9 + zoom
|
|
bancol = (banner + 1 + zoom * 9 + zoom) * SGN(banner)
|
|
FOR x = 0 TO textLen
|
|
FOR y = 0 TO 7
|
|
IF pic(x, y) THEN
|
|
LINE (xOff + x * zoom, yOff + y * zoom)-STEP(zoom, zoom), 8, BF
|
|
ELSE
|
|
LINE (xOff + x * zoom, yOff + y * zoom)-STEP(zoom, zoom), bancol, BF
|
|
END IF
|
|
NEXT
|
|
NEXT
|
|
clock = TIMER
|
|
DO UNTIL clock + .001 - TIMER <= 0
|
|
LOOP
|
|
NEXT
|
|
|
|
|
|
|
|
END SUB
|
|
|
|
SUB PutCursorPic (cursor%)
|
|
|
|
IF cursor% = 1 THEN
|
|
IF WorldData.AnimCycle = 1 THEN
|
|
PUT (160, WorldData.PlayerY + 6), cursormask, AND
|
|
PUT (160, WorldData.PlayerY + 6), cursor, OR
|
|
END IF
|
|
|
|
IF WorldData.AnimCycle <> 1 THEN
|
|
PUT (160, WorldData.PlayerY + 6), cursor02mask, AND
|
|
PUT (160, WorldData.PlayerY + 6), cursor02, OR
|
|
END IF
|
|
END IF
|
|
|
|
IF cursor% = 2 THEN
|
|
PUT (160, WorldData.PlayerY + 6), cursor2mask, AND
|
|
PUT (160, WorldData.PlayerY + 6), cursor2, OR
|
|
END IF
|
|
|
|
IF cursor% = 3 THEN
|
|
PUT (160, WorldData.PlayerY + 6), cursor3mask, AND
|
|
PUT (160, WorldData.PlayerY + 6), cursor3, OR
|
|
END IF
|
|
|
|
|
|
|
|
|
|
END SUB
|
|
|
|
SUB PutTile (Ico, Jco, mapno)
|
|
|
|
SELECT CASE mapno
|
|
CASE 0
|
|
PUT (Ico * 20, Jco * 20), blank, PSET
|
|
CASE 1
|
|
PUT (Ico * 20, Jco * 20), ruble, PSET
|
|
CASE 5
|
|
PUT (Ico * 20, Jco * 20), stone, PSET
|
|
CASE 2
|
|
PUT (Ico * 20, Jco * 20), grass, PSET
|
|
CASE 3
|
|
PUT (Ico * 20, Jco * 20), stump, PSET
|
|
CASE 4
|
|
PUT (Ico * 20, Jco * 20), Tree, PSET
|
|
CASE 6
|
|
PUT (Ico * 20, Jco * 20), ushore, PSET
|
|
CASE 7
|
|
PUT (Ico * 20, Jco * 20), dshore, PSET
|
|
CASE 8
|
|
PUT (Ico * 20, Jco * 20), lshore, PSET
|
|
CASE 9
|
|
PUT (Ico * 20, Jco * 20), rshore, PSET
|
|
CASE 10
|
|
PUT (Ico * 20, Jco * 20), tlshore, PSET
|
|
CASE 11
|
|
PUT (Ico * 20, Jco * 20), trshore, PSET
|
|
CASE 12
|
|
PUT (Ico * 20, Jco * 20), blshore, PSET
|
|
CASE 13
|
|
PUT (Ico * 20, Jco * 20), brshore, PSET
|
|
CASE 14
|
|
PUT (Ico * 20, Jco * 20), itlshore, PSET
|
|
CASE 15
|
|
PUT (Ico * 20, Jco * 20), itrshore, PSET
|
|
CASE 16
|
|
PUT (Ico * 20, Jco * 20), iblshore, PSET
|
|
CASE 17
|
|
PUT (Ico * 20, Jco * 20), cpath, PSET
|
|
CASE 18
|
|
PUT (Ico * 20, Jco * 20), farm.topleft, PSET
|
|
CASE 19
|
|
PUT (Ico * 20, Jco * 20), farm.topright, PSET
|
|
CASE 20
|
|
PUT (Ico * 20, Jco * 20), castle.topleft, PSET
|
|
CASE 21
|
|
PUT (Ico * 20, Jco * 20), castle.topright, PSET
|
|
CASE 23
|
|
PUT (Ico * 20, Jco * 20), townhall.topleft, PSET
|
|
CASE 24
|
|
PUT (Ico * 20, Jco * 20), townhall.topright, PSET
|
|
CASE 25
|
|
PUT (Ico * 20, Jco * 20), civil.topleft, PSET
|
|
CASE 26
|
|
PUT (Ico * 20, Jco * 20), civil.topright, PSET
|
|
CASE 27
|
|
PUT (Ico * 20, Jco * 20), farm.bottomleft, PSET
|
|
CASE 28
|
|
PUT (Ico * 20, Jco * 20), farm.bottomright, PSET
|
|
CASE 29
|
|
PUT (Ico * 20, Jco * 20), castle.bottomleft, PSET
|
|
CASE 30
|
|
PUT (Ico * 20, Jco * 20), castle.bottomright, PSET
|
|
CASE 32
|
|
PUT (Ico * 20, Jco * 20), townhall.bottomleft, PSET
|
|
CASE 33
|
|
PUT (Ico * 20, Jco * 20), townhall.bottomright, PSET
|
|
CASE 34
|
|
PUT (Ico * 20, Jco * 20), civil.bottomleft, PSET
|
|
CASE 35
|
|
PUT (Ico * 20, Jco * 20), civil.bottomright, PSET
|
|
CASE 36
|
|
PUT (Ico * 20, Jco * 20), water, PSET
|
|
CASE 37
|
|
PUT (Ico * 20, Jco * 20), mine.topleft, PSET
|
|
CASE 38
|
|
PUT (Ico * 20, Jco * 20), mine.topright, PSET
|
|
CASE 39
|
|
PUT (Ico * 20, Jco * 20), mine.bottomleft, PSET
|
|
CASE 40
|
|
PUT (Ico * 20, Jco * 20), mine.bottomright, PSET
|
|
CASE 41
|
|
PUT (Ico * 20, Jco * 20), path, PSET
|
|
|
|
|
|
END SELECT
|
|
|
|
END SUB
|
|
|
|
SUB ShowMap
|
|
|
|
FOR I = 3 TO 15
|
|
FOR J = 0 TO 9
|
|
PutTile I, J, map(I + WorldData.TopCol, J + WorldData.TopRow).tile
|
|
NEXT J
|
|
NEXT I
|
|
|
|
END SUB
|
|
|
|
SUB talkwin (text$, text2$, text3$, text4$, text5$, text6$, text7$, text8$, more%)
|
|
DIM talkw(9000)
|
|
GET (7, 7)-(284, 54), talkw
|
|
LINE (10, 10)-(280, 50), 0, BF
|
|
LINE (9, 9)-(281, 51), 8, B
|
|
LINE (8, 8)-(282, 52), 7, B
|
|
LINE (7, 7)-(283, 53), 15, B
|
|
CALL jfont(text$, 15, 12, 12, 1)
|
|
CALL jfont(text2$, 15, 12, 20, 1)
|
|
CALL jfont(text3$, 15, 12, 28, 1)
|
|
CALL jfont(text4$, 15, 12, 38, 1)
|
|
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = CHR$(13)
|
|
IF more% = 1 THEN
|
|
LINE (10, 10)-(280, 50), 0, BF
|
|
LINE (9, 9)-(281, 51), 8, B
|
|
LINE (8, 8)-(282, 52), 7, B
|
|
LINE (7, 7)-(283, 53), 15, B
|
|
CALL jfont(text5$, 15, 12, 12, 1)
|
|
CALL jfont(text6$, 15, 12, 20, 1)
|
|
CALL jfont(text7$, 15, 12, 28, 1)
|
|
CALL jfont(text8$, 15, 12, 38, 1)
|
|
|
|
DO
|
|
x$ = INKEY$
|
|
LOOP UNTIL x$ = CHR$(13)
|
|
END IF
|
|
PUT (7, 7), talkw, PSET
|
|
END SUB
|
|
|
|
SUB viewspr (filename$)
|
|
|
|
OPEN filename$ FOR BINARY AS #1
|
|
filesize& = LOF(1)
|
|
CLOSE #1
|
|
|
|
|
|
Bytes = (filesize& - 7) \ 2 - 1 'BSAVE & BLOAD use 7 bytes
|
|
REDIM sprites(Bytes) 'redim the sprite array
|
|
DEF SEG = VARSEG(sprites(0)) 'point to it
|
|
BLOAD filename$, 0 'load the sprite file
|
|
spritewidth = sprites(0) \ 8 'get sprite width
|
|
spriteheight = sprites(1) 'get sprite height
|
|
|
|
|
|
xsprites = 319 \ (spritewidth + 1) 'calc number of sprites across
|
|
xend = spritewidth * (xsprites - 1) + xsprites 'last one
|
|
ElmPerSprite = ((spritewidth * spriteheight) \ 2) + 3 'elements per image
|
|
|
|
|
|
'clear the screen
|
|
|
|
x = 0: y = 0 'first sprite location
|
|
offset = 0 'point to sprite
|
|
|
|
|
|
DO
|
|
PUT (x, y), sprites(offset), PSET 'PUT image
|
|
x = x + spritewidth 'next column
|
|
IF x > xend THEN 'end of row?
|
|
x = 0 'restart
|
|
y = y + spriteheight 'next row
|
|
END IF
|
|
offset = offset + ElmPerSprite 'point to next sprite
|
|
LOOP WHILE offset < Bytes 'do all the images
|
|
|
|
END SUB
|
|
|