mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-20 09:04:43 +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.
1739 lines
45 KiB
QBasic
1739 lines
45 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
|
|
|