03-03-2005, 05:52 AM
im using a bmp loader for the first time(z!re wrote it)
my problem is this
when i load the grass tile it puts a 16*16 black tile so can you tell me what is wrong with it?
my problem is this
when i load the grass tile it puts a 16*16 black tile so can you tell me what is wrong with it?
Code:
DEFINT A-Z
DECLARE SUB LoadBMP (DestSeg%, SegxRes%, SegyRes%, File$, sX%, sY%, SwitchPal%, Trans%)
DECLARE SUB loadsprites ()
DIM SHARED grass(129) AS INTEGER
DIM SHARED wall(129) AS INTEGER
DIM SHARED water(129) AS INTEGER
DIM SHARED grassflag(129) AS INTEGER
DIM SHARED guy(129) AS INTEGER
DIM SHARED guymask(129) AS INTEGER
DIM SHARED map1(20, 12) AS INTEGER
DIM SHARED map2(20, 12) AS INTEGER
DIM SHARED map3(20, 12) AS INTEGER
TYPE BMPHeaderType
ID AS STRING * 2
Size AS LONG
RSV1 AS INTEGER
RSV2 AS INTEGER
offset AS LONG
HORZ AS LONG
WID AS LONG
HEI AS LONG
PLANES AS INTEGER
BPP AS INTEGER
COMPRESSION AS LONG
IMAGESIZE AS LONG
xRes AS LONG
yRes AS LONG
CLRUSED AS LONG
CLRIMPORT AS LONG
Pal AS STRING * 1024
END TYPE
CLS : SCREEN 13
'Load the BMP
LoadBMP &HA000, 320, 200, "grass.bmp", 0, 0, 1, -1
CLS
GET (0, 0)-(15, 15), grass
SCREEN 13
guyx = 4 'x,y corrdinates for sprite
guyy = 5
loadsprites 'loading sub
FOR y = 1 TO 12 'drawing map
FOR x = 1 TO 20
IF map1(x, y) = 1 THEN PUT (x * 16 - 16, y * 16 - 16), grass, PSET
IF map1(x, y) = 2 THEN PUT (x * 16 - 16, y * 16 - 16), wall, PSET
IF map1(x, y) = 3 THEN PUT (x * 16 - 16, y * 16 - 16), water, PSET
IF map1(x, y) = 4 THEN PUT (x * 16 - 16, y * 16 - 16), grassflag, PSET
NEXT x: NEXT y
PUT (guyx * 16 - 16, guyy * 16 - 16), guymask, AND 'placing guy and
PUT (guyx * 16 - 16, guyy * 16 - 16), guy, OR 'the mask
'*****************************************************************
DO 'main loop
a$ = INKEY$
IF a$ = "w" AND map1(guyx, guyy - 1) <> 2 THEN 'movement
IF map1(guyx, guyy - 1) <> 3 THEN
guyy = guyy - 1
END IF
END IF
IF a$ = "s" AND map1(guyx, guyy + 1) <> 2 THEN '"
IF map1(guyx, guyy + 1) <> 3 THEN
guyy = guyy + 1
END IF
END IF
IF a$ = "a" AND map1(guyx - 1, guyy) <> 2 THEN '"
IF map1(guyx - 1, guyy) <> 3 THEN
guyx = guyx - 1
END IF
END IF
IF a$ = "d" AND map1(guyx + 1, guyy) <> 2 THEN '"
IF map1(guyx + 1, guyy) <> 3 THEN
guyx = guyx + 1
END IF
END IF
IF map1(guyx, guyy) = 4 THEN GOTO map2 'collision
'with portal
IF oldguyx <> guyx OR oldguyy <> guyy THEN
oldguyy = guyy
oldguyx = guyx
FOR y = 1 TO 12
FOR x = 1 TO 20
IF map1(x, y) = 1 THEN PUT (x * 16 - 16, y * 16 - 16), grass, PSET
IF map1(x, y) = 2 THEN PUT (x * 16 - 16, y * 16 - 16), wall, PSET
IF map1(x, y) = 3 THEN PUT (x * 16 - 16, y * 16 - 16), water, PSET
IF map1(x, y) = 4 THEN PUT (x * 16 - 16, y * 16 - 16), grassflag, PSET
NEXT x: NEXT y
PUT (guyx * 16 - 16, guyy * 16 - 16), guymask, AND
PUT (guyx * 16 - 16, guyy * 16 - 16), guy, OR
END IF
LOOP UNTIL a$ = "q"
IF a$ = "q" THEN END
map2: 'map2
guyy = 7
guyx = 1
CLS
FOR y = 1 TO 12
FOR x = 1 TO 20
IF map2(x, y) = 1 THEN PUT (x * 16 - 16, y * 16 - 16), grass, PSET
IF map2(x, y) = 2 THEN PUT (x * 16 - 16, y * 16 - 16), wall, PSET
IF map2(x, y) = 3 THEN PUT (x * 16 - 16, y * 16 - 16), water, PSET
IF map2(x, y) = 4 THEN PUT (x * 16 - 16, y * 16 - 16), grassflag, PSET
NEXT x: NEXT y
PUT (guyx * 16 - 16, guyy * 16 - 16), guymask, AND
PUT (guyx * 16 - 16, guyy * 16 - 16), guy, OR
DO
a$ = INKEY$
IF a$ = "w" AND map2(guyx, guyy - 1) <> 2 THEN
IF map2(guyx, guyy - 1) <> 3 THEN
guyy = guyy - 1
END IF
END IF
IF a$ = "s" AND map2(guyx, guyy + 1) <> 2 THEN
IF map2(guyx, guyy + 1) <> 3 THEN
guyy = guyy + 1
END IF
END IF
IF a$ = "a" AND map2(guyx - 1, guyy) <> 2 THEN
IF map2(guyx - 1, guyy) <> 3 THEN
guyx = guyx - 1
END IF
END IF
IF a$ = "d" AND map2(guyx + 1, guyy) <> 2 THEN
IF map2(guyx + 1, guyy) <> 3 THEN
guyx = guyx + 1
END IF
END IF
IF map2(guyx, guyy) = 4 THEN GOTO map3
IF oldguyx <> guyx OR oldguyy <> guyy THEN
oldguyy = guyy
oldguyx = guyx
FOR y = 1 TO 12
FOR x = 1 TO 20
IF map2(x, y) = 1 THEN PUT (x * 16 - 16, y * 16 - 16), grass, PSET
IF map2(x, y) = 2 THEN PUT (x * 16 - 16, y * 16 - 16), wall, PSET
IF map2(x, y) = 3 THEN PUT (x * 16 - 16, y * 16 - 16), water, PSET
IF map2(x, y) = 4 THEN PUT (x * 16 - 16, y * 16 - 16), grassflag, PSET
NEXT x: NEXT y
PUT (guyx * 16 - 16, guyy * 16 - 16), guymask, AND
PUT (guyx * 16 - 16, guyy * 16 - 16), guy, OR
END IF
LOOP UNTIL a$ = "q"
map3:
guyy = 1
guyx = 17
CLS
FOR y = 1 TO 12
FOR x = 1 TO 20
IF map3(x, y) = 1 THEN PUT (x * 16 - 16, y * 16 - 16), grass, PSET
IF map3(x, y) = 2 THEN PUT (x * 16 - 16, y * 16 - 16), wall, PSET
IF map3(x, y) = 3 THEN PUT (x * 16 - 16, y * 16 - 16), water, PSET
IF map3(x, y) = 4 THEN PUT (x * 16 - 16, y * 16 - 16), grassflag, PSET
NEXT x: NEXT y
PUT (guyx * 16 - 16, guyy * 16 - 16), guymask, AND
PUT (guyx * 16 - 16, guyy * 16 - 16), guy, OR
DO
a$ = INKEY$
IF a$ = "w" AND map3(guyx, guyy - 1) <> 2 THEN
IF map3(guyx, guyy - 1) <> 3 THEN
guyy = guyy - 1
END IF
END IF
IF a$ = "s" AND map3(guyx, guyy + 1) <> 2 THEN
IF map3(guyx, guyy + 1) <> 3 THEN
guyy = guyy + 1
END IF
END IF
IF a$ = "a" AND map3(guyx - 1, guyy) <> 2 THEN
IF map3(guyx - 1, guyy) <> 3 THEN
guyx = guyx - 1
END IF
END IF
IF a$ = "d" AND map3(guyx + 1, guyy) <> 2 THEN
IF map3(guyx + 1, guyy) <> 3 THEN
guyx = guyx + 1
END IF
END IF
IF oldguyx <> guyx OR oldguyy <> guyy THEN
oldguyy = guyy
oldguyx = guyx
FOR y = 1 TO 12
FOR x = 1 TO 20
IF map3(x, y) = 1 THEN PUT (x * 16 - 16, y * 16 - 16), grass, PSET
IF map3(x, y) = 2 THEN PUT (x * 16 - 16, y * 16 - 16), wall, PSET
IF map3(x, y) = 3 THEN PUT (x * 16 - 16, y * 16 - 16), water, PSET
IF map3(x, y) = 4 THEN PUT (x * 16 - 16, y * 16 - 16), grassflag, PSET
NEXT x: NEXT y
PUT (guyx * 16 - 16, guyy * 16 - 16), guymask, AND
PUT (guyx * 16 - 16, guyy * 16 - 16), guy, OR
END IF
LOOP UNTIL a$ = "q"
'wall
DATA 07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07
DATA 07,08,08,08,08,08,08,08,08,08,08,08,08,08,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,07,07,07,07,07,07,07,07,07,07,07,07,08,07
DATA 07,08,08,08,08,08,08,08,08,08,08,08,08,08,08,07
DATA 07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07
'water
DATA 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01
DATA 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01
DATA 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01
DATA 01,09,01,01,09,01,01,09,01,01,01,01,01,01,01,01
DATA 01,01,09,09,01,01,01,01,01,01,01,01,01,01,01,01
DATA 01,01,01,01,01,01,01,01,01,09,01,01,01,09,01,01
DATA 01,01,01,01,01,01,01,01,01,01,09,09,09,01,01,01
DATA 01,01,01,01,09,01,09,01,09,01,01,01,01,01,01,01
DATA 01,01,01,01,01,01,01,09,01,01,01,01,01,01,01,01
DATA 09,01,01,01,01,01,01,01,01,01,01,01,01,09,01,01
DATA 01,01,01,01,01,01,01,01,09,01,01,09,01,01,01,01
DATA 01,01,01,09,01,01,01,01,01,09,09,01,01,01,01,01
DATA 01,01,01,01,09,09,09,01,01,01,01,01,01,01,01,01
DATA 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01
DATA 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01
DATA 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01
'grassflag
DATA 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02
DATA 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02
DATA 02,02,10,02,02,02,02,02,10,02,02,02,02,10,02,02
DATA 02,02,02,10,02,02,02,10,10,02,02,02,10,02,02,02
DATA 02,02,02,10,02,10,02,10,10,02,02,10,02,02,02,02
DATA 10,02,02,02,10,10,02,10,02,02,10,10,02,02,02,02
DATA 02,10,02,02,10,10,02,02,02,02,02,10,02,02,02,02
DATA 02,10,02,02,02,02,02,02,02,10,02,02,02,02,10,02
DATA 02,02,10,02,02,02,02,02,10,10,02,02,02,10,02,02
DATA 02,10,02,02,02,02,10,02,02,02,02,02,02,10,02,02
DATA 02,10,10,10,02,10,10,02,02,02,02,02,10,02,02,02
DATA 02,02,10,10,02,02,02,10,02,02,02,02,02,02,02,02
DATA 02,02,02,02,02,02,02,02,10,02,02,02,02,02,10,02
DATA 10,02,02,02,02,02,02,02,02,02,02,02,02,10,02,02
DATA 02,10,10,02,02,02,02,02,02,02,02,02,02,02,02,02
DATA 02,02,10,02,02,02,02,02,02,02,02,02,02,02,02,02
'guy
DATA 0,0,0,5,5,5,5,5,5,5,5,5,5,5,0,0
DATA 0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,0
DATA 0,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5
DATA 0,5,5,6,6,6,6,5,5,5,5,6,5,0,5,5
DATA 0,0,5,6,6,0,6,6,6,0,6,6,5,5,0,0
DATA 0,0,0,6,6,0,6,6,6,0,6,6,0,0,0,0
DATA 0,0,0,0,6,6,6,6,6,6,6,0,0,0,0,0
DATA 0,0,4,4,4,6,6,6,6,6,4,6,0,0,0,0
DATA 0,4,4,4,4,4,4,4,4,4,4,6,6,0,0,0
DATA 6,6,6,4,4,4,4,4,4,4,6,6,6,6,0,0
DATA 6,6,6,0,4,4,4,4,4,4,6,6,6,6,0,0
DATA 6,6,6,0,1,4,4,4,4,4,4,6,6,0,0,0
DATA 0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0
DATA 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0
DATA 0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
'guymask
DATA 255,255,255,5,5,5,5,5,5,5,5,5,5,5,255,255
DATA 255,255,5,5,5,5,5,5,5,5,5,5,5,5,5,255
DATA 255,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5
DATA 255,5,5,6,6,6,6,5,5,5,5,6,5,255,5,5
DATA 255,255,5,6,6,0,6,6,6,0,6,6,5,5,255,255
DATA 255,255,255,6,6,0,6,6,6,0,6,6,255,255,255,255
DATA 255,255,255,255,6,6,6,6,6,6,6,255,255,255,255,255
DATA 255,255,4,4,4,6,6,6,6,6,4,6,255,255,255,255
DATA 255,4,4,4,4,4,4,4,4,4,4,6,6,255,255,255
DATA 6,6,6,4,4,4,4,4,4,4,6,6,6,6,255,255
DATA 6,6,6,255,4,4,4,4,4,4,6,6,6,6,255,255
DATA 6,6,6,255,1,4,4,4,4,4,4,6,6,255,255,255
DATA 255,255,255,255,1,1,1,1,1,1,1,1,1,255,255,255
DATA 255,255,255,255,1,1,1,1,1,1,1,1,255,255,255,255
DATA 255,255,255,255,255,1,1,1,1,255,255,255,255,255,255,255
DATA 255,255,255,255,255,0,0,0,0,255,255,255,255,255,255,255
'map1
DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
DATA 2,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3,3,3,3,2
DATA 2,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3,3,3,3,2
DATA 2,1,1,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3
DATA 2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3
DATA 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
DATA 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4
DATA 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2
DATA 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3
DATA 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3
DATA 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,3,3,3
DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
'map2
DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
DATA 2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,2
DATA 2,3,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
DATA 2,3,3,3,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2
DATA 2,3,3,3,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2
DATA 2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2
DATA 1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2
DATA 2,2,2,2,2,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2
DATA 2,3,3,3,2,1,1,1,1,1,1,2,1,2,1,1,1,1,1,2
DATA 2,3,3,3,2,1,1,1,1,1,1,2,1,2,1,1,1,1,1,2
DATA 2,3,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2
'map 3
DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2
DATA 2,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,2,1,2
DATA 2,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,2,1,2
DATA 2,3,3,3,3,3,3,1,2,2,2,2,2,2,2,2,2,2,1,2
DATA 2,3,3,3,3,3,3,1,2,1,1,1,1,1,1,1,1,1,1,2
DATA 2,3,3,3,3,3,1,1,2,1,1,1,1,1,1,1,1,1,1,2
DATA 2,3,3,3,3,3,1,1,2,1,1,1,1,1,1,1,1,1,1,2
DATA 2,2,2,2,2,3,1,1,2,2,2,2,1,1,1,1,1,1,1,2
DATA 2,3,3,3,2,3,3,1,1,1,1,2,1,2,1,1,1,1,1,2
DATA 2,3,3,3,2,3,1,1,1,1,1,2,1,2,1,1,1,1,1,2
DATA 2,3,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
DATA 2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,4,2,2,2
SUB LoadBMP (DestSeg%, SegxRes%, SegyRes%, File$, sX, sY, SwitchPal%, Trans%)
DIM bmp AS BMPHeaderType
f% = FREEFILE
OPEN File$ FOR BINARY AS #f%
GET #f%, , bmp
IF SwitchPal% THEN
pall$ = bmp.Pal
IF LEN(pall$) = 1024 THEN
OUT &H3C8, 0
FOR I% = 1 TO 1024 STEP 4
b% = ASC(MID$(pall$, I%, 1)) \ 4
g% = ASC(MID$(pall$, I% + 1, 1)) \ 4
r% = ASC(MID$(pall$, I% + 2, 1)) \ 4
OUT &H3C9, r%
OUT &H3C9, g%
OUT &H3C9, b%
NEXT I%
END IF
END IF
Byte$ = SPACE$(bmp.WID)
DEF SEG = DestSeg%
wide% = bmp.WID - 1
Hite% = bmp.HEI - 1
offs& = LOC(f) + 1
FOR y% = Hite% TO 0 STEP -1
IF sY + y >= 0 AND sY + y < SegyRes THEN
GET #f%, offs&, Byte$
FOR x% = 0 TO wide%
IF sX + x >= 0 AND sX + x < SegxRes THEN
c% = ASC(MID$(Byte$, x% + 1, 1))
IF c% <> Trans% THEN
POKE (sX% + x%) + (sY% + y%) * (SegxRes + 0&), c%
END IF
END IF
NEXT x%
END IF
IF (bmp.WID AND 3) THEN
offs& = offs& + bmp.WID + 4 - (bmp.WID AND 3)
ELSE
offs& = offs& + bmp.WID
END IF
NEXT y%
CLOSE #f
DEF SEG
END SUB
DEFSNG A-Z
SUB loadsprites
FOR y = 1 TO 16
FOR x = 1 TO 16
READ pixel
PSET (x, y), pixel
NEXT x
NEXT y
GET (1, 1)-(16, 16), wall
FOR y = 1 TO 16
FOR x = 1 TO 16
READ pixel
PSET (x, y), pixel
NEXT x: NEXT y
GET (1, 1)-(16, 16), water
FOR y = 1 TO 16
FOR x = 1 TO 16
READ pixel
PSET (x, y), pixel
NEXT x: NEXT y
GET (1, 1)-(16, 16), grassflag
FOR y = 1 TO 16
FOR x = 1 TO 16
READ pixel
PSET (x, y), pixel
NEXT x: NEXT y
GET (1, 1)-(16, 16), guy
FOR y = 1 TO 16
FOR x = 1 TO 16
READ pixel
PSET (x, y), pixel
NEXT x: NEXT y
GET (1, 1)-(16, 16), guymask
FOR y = 1 TO 12
FOR x = 1 TO 20
READ map1(x, y)
NEXT x: NEXT y
FOR y = 1 TO 12
FOR x = 1 TO 20
READ map2(x, y)
NEXT x: NEXT y
FOR y = 1 TO 12
FOR x = 1 TO 20
READ map3(x, y)
NEXT x: NEXT y
END SUB