Qbasicnews.com

Full Version: sprite graphics phase
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
in my game, copied from vince's tut, the enemy sprite i made phases every time your guy moves. wait &h3da,8 didnt help. any suggestions.
All wait &h3da,8 does is remove flicker when flipping pages.
any othere way to prefent the phase.
buffer the graphics

check out the qbnews FAQ for the buffering tutorials
Especially check this out:

http://faq.qbasicnews.com/?blast=SetVideoSeg

it will help you alot
That example is pretty useless to n00bs Smile Here's one that actually does something:

Code:
DEFINT A-Z
'$DYNAMIC

DECLARE SUB SetVideoSeg (Segment)

DIM Buffer(32006)                  ' An extra 16 bytes are needed so that the image
Buffer(6) = 2560                   ' can be aligned evenly on a segment (the 4 bytes for
Buffer(7) = 200                    ' the x and y sprite size normally throw this off, so we
BufferSeg = VARSEG(Buffer(0)) + 1  ' have to shift everything over 12 bytes

SCREEN 13
SetVideoSeg BufferSeg   ' Draw all the setup stuff on the buffer

DIM SpriteImage(129)
DIM SpriteMask(129)
DIM SaveBackground(129)

' Create the mask
LINE (0, 0)-(15, 15), 255, BF
CIRCLE (8, 8), 7, 0, , , .83
PAINT (8, 8), 0
GET (0, 0)-(15, 15), SpriteMask(0)

' Create the sprite
LINE (0, 0)-(15, 15), 0, BF
CIRCLE (8, 8), 7, 4, , , .83
PAINT (8, 8), 4
CIRCLE (10, 7), 2, 12, , , .83
PAINT (10, 7), 12
GET (0, 0)-(15, 15), SpriteImage(0)

CLS

' Draw some background shiznit on the buffer
FOR x = 0 TO 319
  LINE (x, 0)-(x, 199), x AND 255
NEXT

FOR x = 0 TO 304

  ' Restore old background
  IF x > 0 THEN PUT (x - 1, 92), SaveBackground(0), PSET

  ' Save new background
  GET (x, 92)-(x + 15, 107), SaveBackground(0)

  ' Put sprite while preserving background
  PUT (x, 92), SpriteMask(0), AND
  PUT (x, 92), SpriteImage(0), OR

  ' Copy the buffer to video memory
  SetVideoSeg &HA000
  'WAIT &H3DA, 8  ' Wait for vsync (optional)
  PUT (0, 0), Buffer(6), PSET
  SetVideoSeg BufferSeg

NEXT

SUB SetVideoSeg (Segment) STATIC

  DEF SEG

  IF VideoAddrOff& = 0 THEN   ' First time the sub is called

    ' We need to find the location of b$AddrC, which holds the graphics
    ' offset (b$OffC) and segment (b$SegC). Since b$AddrC is in the default
    ' segment, we can find it by setting it to a certain value, and then
    ' searching for that value.

    SCREEN 13                 ' Set b$SegC to A000 (00A0 in memory)
    PSET (160, 100), 0        ' Set b$OffC to 7DA0 (not needed in the IDE)

    FOR Offset& = 0 TO 32764                 ' Search for b$AddrC, which is
      IF PEEK(Offset&) = &HA0 THEN           ' in the default segment and
        IF PEEK(Offset& + 1) = &H7D THEN     ' should have a value of
          IF PEEK(Offset& + 2) = &H0 THEN    ' A0 7D 00 A0.
            IF PEEK(Offset& + 3) = &HA0 THEN
              VideoAddrOff& = Offset& + 2    ' If we found it, record the
              EXIT FOR                       ' offset of b$SegC and quit
            END IF                           ' looking. (Oddly, changing
          END IF                             ' the b$OffC doesn't seem to
        END IF                               ' do anything, so this is why
      END IF                                 ' this sub only changes b$SegC)
    NEXT

  END IF

  ' Change b$SegC to the specified Segment

  POKE VideoAddrOff&, Segment AND &HFF
  POKE VideoAddrOff& + 1, (Segment AND &HFF00&) \ &H100

END SUB
that was a cool example, but i dont get any of it. how would i put that into my program
It should be pretty easy to figure out if you read the comments...but post your code and I (or somebody else) will help you.
Code:
DIM guy(50), guysh(50)
DIM sprite1(50), sprite2(50), sprite3(50)
DIM map1(21, 15)
DIM enemy(100), enemysh(100)
SCREEN 13

guyx = 20
guyy = 8

enemyx = 5
enemyy = 5

FOR y = 1 TO 13
FOR x = 1 TO 15

READ clr
PSET (x, y), clr

NEXT: NEXT
GET (1, 1)-(15, 13), sprite1

FOR y = 1 TO 13
FOR x = 1 TO 15

READ clr
PSET (x, y), clr

NEXT: NEXT
GET (1, 1)-(15, 13), sprite2

FOR y = 1 TO 13
FOR x = 1 TO 15

READ clr
PSET (x, y), clr

NEXT: NEXT
GET (1, 1)-(15, 13), sprite3

CLS
FOR y = 1 TO 15
FOR x = 1 TO 21
READ map1(x, y)
NEXT: NEXT

FOR y = 1 TO 13
FOR x = 1 TO 15

READ clr
PSET (x, y), clr

NEXT: NEXT
GET (1, 1)-(15, 13), guy

FOR y = 1 TO 13
FOR x = 1 TO 15

READ clr
PSET (x, y), clr

NEXT: NEXT
GET (1, 1)-(15, 13), guysh
CLS

FOR y = 1 TO 13
FOR x = 1 TO 15

READ clr
PSET (x, y), clr

NEXT: NEXT
GET (1, 1)-(15, 13), enemy


FOR y = 1 TO 13
FOR x = 1 TO 15

READ clr
PSET (x, y), clr

NEXT: NEXT
GET (1, 1)-(15, 13), enemysh
CLS


FOR y = 1 TO 15
FOR x = 1 TO 21

IF map1(x, y) = 1 THEN PUT (x * 15 - 15, y * 13 - 13), sprite1
IF map1(x, y) = 2 THEN PUT (x * 15 - 15, y * 13 - 13), sprite2
IF map1(x, y) = 3 THEN PUT (x * 15 - 15, y * 13 - 13), sprite3
NEXT: NEXT

PUT (guyx * 15 - 15, guyy * 13 - 13), guysh, AND
PUT (guyx * 15 - 15, guyy * 13 - 13), guy, OR

PUT (enemyx * 15 - 15, enemyy * 13 - 13), enemysh, AND
PUT (enemyx * 15 - 15, enemyy * 13 - 13), enemy, OR

DO
press$ = INKEY$

IF press$ = CHR$(0) + CHR$(75) AND map1(guyx - 1, guyy) <> 3 THEN
IF guyx > 1 THEN guyx = guyx - 1
END IF

IF press$ = CHR$(0) + CHR$(77) AND map1(guyx + 1, guyy) <> 3 THEN
IF guyx < 20 THEN guyx = guyx + 1
END IF

IF press$ = CHR$(0) + CHR$(72) AND map1(guyx, guyy - 1) <> 3 THEN
IF guyy > 1 THEN guyy = guyy - 1
END IF

IF press$ = CHR$(0) + CHR$(80) AND map1(guyx, guyy + 1) <> 3 THEN
IF guyy < 14 THEN guyy = guyy + 1
END IF



IF oldguyx <> guyx OR oldguyy <> guyy THEN
oldguyx = guyx
oldguyy = guyy
FOR y = 1 TO 15
FOR x = 1 TO 21

IF map1(x, y) = 1 THEN PUT (x * 15 - 15, y * 13 - 13), sprite1, PSET
IF map1(x, y) = 2 THEN PUT (x * 15 - 15, y * 13 - 13), sprite2, PSET
IF map1(x, y) = 3 THEN PUT (x * 15 - 15, y * 13 - 13), sprite3, PSET
NEXT: NEXT

PUT (enemyx * 15 - 15, enemyy * 13 - 13), enemysh, AND
PUT (enemyx * 15 - 15, enemyy * 13 - 13), enemy, OR

PUT (guyx * 15 - 15, guyy * 13 - 13), guysh, AND
PUT (guyx * 15 - 15, guyy * 13 - 13), guy, OR


END IF



LOOP UNTIL press$ = CHR$(27)


DATA 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
DATA 10,10,10,10,10,10,10,10,10,10,10,02,10,10,10
DATA 10,10,10,10,10,10,10,10,10,10,02,10,10,10,10
DATA 10,10,10,02,10,10,10,02,10,10,02,10,10,10,10
DATA 10,10,10,10,02,10,02,10,10,10,10,10,10,10,10
DATA 02,10,10,10,02,10,02,10,10,10,02,10,10,10,10
DATA 10,02,10,10,02,10,02,10,10,02,10,10,02,10,10
DATA 10,10,02,02,10,02,10,10,10,02,10,02,10,10,10
DATA 10,10,10,10,10,10,10,10,10,02,10,02,10,10,10
DATA 02,02,10,10,02,10,10,10,02,02,02,10,10,10,10
DATA 10,10,02,02,10,10,10,10,10,10,10,10,10,10,10
DATA 10,10,10,10,10,10,02,02,10,10,10,10,10,10,10
DATA 10,10,10,10,10,10,02,10,10,10,10,10,10,10,10


'snow...

DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
DATA 15,15,15,29,29,29,15,15,15,15,15,15,15,15,15
DATA 15,15,29,07,07,07,15,15,15,29,29,15,15,15,15
DATA 15,15,29,07,15,15,15,15,29,07,07,15,15,15,15
DATA 15,29,07,15,15,15,15,29,07,15,15,15,15,15,15
DATA 15,29,15,15,15,15,15,29,07,15,15,15,15,15,15
DATA 15,15,15,15,15,15,29,29,07,15,15,15,15,15,15
DATA 15,15,15,15,15,29,07,07,15,15,15,15,15,15,15
DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
DATA 15,15,15,15,15,15,15,15,15,29,07,15,15,15,15
DATA 15,15,15,15,15,15,15,15,15,15,29,07,07,07,29
DATA 15,15,15,15,15,15,15,15,15,15,15,29,29,29,15

'For the third, floor tiles...

DATA 07,08,08,08,08,08,08,08,08,08,08,08,08,08,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,00,00,00,00,00,00,00,00,00,00,00,00,00,07


DATA 3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,3,3,3,3,3,3
DATA 3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,3,3
DATA 3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,3
DATA 3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,3
DATA 3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,3
DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,3
DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2
DATA 2,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2
DATA 2,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2
DATA 3,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,3
DATA 3,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,3
DATA 3,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3
DATA 3,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3
DATA 3,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,3,3
DATA 3,3,3,3,3,3,3,2,2,2,1,1,1,1,1,3,3,3,3,3,3


'sprite
DATA 00,00,00,00,00,00,04,04,04,04,00,00,00,00,00
DATA 00,00,00,00,00,04,04,04,04,04,04,00,00,00,00
DATA 00,00,00,04,04,66,04,04,04,04,04,66,00,00,00
DATA 00,00,04,00,00,66,66,66,66,66,66,66,00,00,00
DATA 00,00,00,00,00,00,66,00,66,00,66,00,00,00,00
DATA 00,00,00,00,00,00,66,66,66,66,66,00,00,00,00
DATA 00,00,00,00,00,00,00,66,00,66,00,00,00,00,00
DATA 00,00,00,00,00,00,02,02,02,02,02,00,00,00,00
DATA 00,00,00,00,00,02,00,02,02,02,00,02,00,00,00
DATA 00,00,00,00,00,02,00,02,02,02,00,02,00,00,00
DATA 00,00,00,00,00,66,00,02,02,02,00,66,00,00,00
DATA 00,00,00,00,02,00,00,07,00,07,00,00,02,00,00
DATA 00,00,00,00,00,02,02,02,00,02,02,02,00,00,00


'This is the mask for the sprite...

DATA 255,255,255,255,255,255,04,04,04,04,255,255,255,255,255
DATA 255,255,255,255,255,04,04,04,04,04,04,255,255,255,255
DATA 255,255,255,04,04,66,04,04,04,04,04,66,255,255,255
DATA 255,255,04,255,255,66,66,66,66,66,66,66,255,255,255
DATA 255,255,255,255,255,255,66,00,66,00,66,255,255,255,255
DATA 255,255,255,255,255,255,66,66,66,66,66,255,255,255,255
DATA 255,255,255,255,255,255,255,66,00,66,255,255,255,255,255
DATA 255,255,255,255,255,255,02,02,02,02,02,255,255,255,255
DATA 255,255,255,255,255,02,255,02,02,02,255,02,255,255,255
DATA 255,255,255,255,255,02,255,02,02,02,255,02,255,255,255
DATA 255,255,255,255,255,66,255,02,02,02,255,66,255,255,255
DATA 255,255,255,255,02,255,255,07,255,07,255,255,02,255,255
DATA 255,255,255,255,255,02,02,02,255,02,02,02,255,255,255

'enemy

DATA 00,00,00,00,00,00,00,04,04,04,00,00,00,00,00
DATA 00,00,00,00,00,00,04,04,04,04,04,00,00,00,00
DATA 00,00,00,00,00,04,04,04,04,04,04,04,00,00,00
DATA 00,00,00,00,00,04,04,04,04,04,04,04,00,00,00
DATA 00,00,00,00,00,00,66,01,66,01,66,00,00,00,00
DATA 00,00,00,00,00,00,66,66,66,66,66,00,00,00,00
DATA 00,00,00,00,00,00,00,66,04,66,00,00,00,00,00
DATA 00,00,00,00,00,00,02,88,02,25,02,00,00,00,00
DATA 00,00,00,00,00,00,00,27,07,02,00,00,00,00,00
DATA 00,00,00,00,00,00,00,27,27,02,00,00,00,00,00
DATA 00,00,00,00,00,00,00,02,02,02,00,00,00,00,00
DATA 00,00,00,00,00,00,00,07,00,07,00,00,00,00,00
DATA 00,00,00,00,00,02,89,88,00,02,89,02,00,00,00

'enemeysh

DATA 255,255,255,255,255,255,255,004,004,004,255,255,255,255,255
DATA 255,255,255,255,255,255,004,004,004,004,004,255,255,255,255
DATA 255,255,255,255,255,004,004,004,004,004,004,004,255,255,255
DATA 255,255,255,255,255,004,004,004,004,004,004,004,255,255,255
DATA 255,255,255,255,255,255,066,001,066,001,066,255,255,255,255
DATA 255,255,255,255,255,255,066,066,066,066,066,255,255,255,255
DATA 255,255,255,255,255,255,255,066,004,066,255,255,255,255,255
DATA 255,255,255,255,255,255,002,088,002,025,002,255,255,255,255
DATA 255,255,255,255,255,255,255,027,007,002,255,255,255,255,255
DATA 255,255,255,255,255,255,255,027,027,002,255,255,255,255,255
DATA 255,255,255,255,255,255,255,002,002,002,255,255,255,255,255
DATA 255,255,255,255,255,255,255,007,255,007,255,255,255,255,255
DATA 255,255,255,255,255,002,089,088,255,002,089,002,255,255,255
[/code]
Code:
DEFINT A-Z
'$DYNAMIC

DECLARE SUB LoadSprite (SizeX, SizeY, Array())
DECLARE SUB LoadMap (SizeX, SizeY, Array())
DECLARE SUB SetVideoSeg (Segment)

DIM Sprite1(99)
DIM Sprite2(99)
DIM Sprite3(99)
DIM Guy(99)
DIM GuySh(99)
DIM Enemy(99)
DIM EnemySh(99)
DIM Map1(21, 15)

DIM Buffer(32006)                  'an extra 16 bytes are needed so that the image
Buffer(6) = 2560                   'can be aligned evenly on a segment (the 4 bytes for
Buffer(7) = 200                    'the x and y sprite size normally throw this off, so we
BufferSeg = VARSEG(Buffer(0)) + 1  'have to shift everything over 12 bytes

SCREEN 13
SetVideoSeg BufferSeg   'Draw all the setup stuff on the buffer

LoadSprite 15, 13, Sprite1()
LoadSprite 15, 13, Sprite2()
LoadSprite 15, 13, Sprite3()
LoadSprite 15, 13, Guy()
LoadSprite 15, 13, GuySh()
LoadSprite 15, 13, Enemy()
LoadSprite 15, 13, EnemySh()
LoadMap 21, 15, Map1()

GuyX = 20
GuyY = 8
EnemyX = 5
EnemyY = 5

CLS
DO

  IF OldGuyX <> GuyX OR OldGuyY <> GuyY THEN
    OldGuyX = GuyX
    OldGuyY = GuyY

    FOR y = 1 TO 15
      FOR x = 1 TO 21
        IF Map1(x, y) = 1 THEN PUT (x * 15 - 15, y * 13 - 13), Sprite1(0), PSET
        IF Map1(x, y) = 2 THEN PUT (x * 15 - 15, y * 13 - 13), Sprite2(0), PSET
        IF Map1(x, y) = 3 THEN PUT (x * 15 - 15, y * 13 - 13), Sprite3(0), PSET
      NEXT
    NEXT

    PUT (GuyX * 15 - 15, GuyY * 13 - 13), GuySh(0), AND
    PUT (GuyX * 15 - 15, GuyY * 13 - 13), Guy(0), OR
    PUT (EnemyX * 15 - 15, EnemyY * 13 - 13), EnemySh(0), AND
    PUT (EnemyX * 15 - 15, EnemyY * 13 - 13), Enemy(0), OR

    'Copy the buffer to video memory
    SetVideoSeg &HA000
    'WAIT &H3DA, 8  'Wait for vsync (optional)
    PUT (0, 0), Buffer(6), PSET
    SetVideoSeg BufferSeg

  END IF

  Press$ = INKEY$
  IF Press$ = CHR$(0) + CHR$(75) AND Map1(GuyX - 1, GuyY) <> 3 THEN
    IF GuyX > 1 THEN GuyX = GuyX - 1
  ELSEIF Press$ = CHR$(0) + CHR$(77) AND Map1(GuyX + 1, GuyY) <> 3 THEN
    IF GuyX < 20 THEN GuyX = GuyX + 1
  ELSEIF Press$ = CHR$(0) + CHR$(72) AND Map1(GuyX, GuyY - 1) <> 3 THEN
    IF GuyY > 1 THEN GuyY = GuyY - 1
  ELSEIF Press$ = CHR$(0) + CHR$(80) AND Map1(GuyX, GuyY + 1) <> 3 THEN
    IF GuyY < 14 THEN GuyY = GuyY + 1
  END IF

LOOP UNTIL Press$ = CHR$(27)


'Sprite1
DATA 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
DATA 10,10,10,10,10,10,10,10,10,10,10,02,10,10,10
DATA 10,10,10,10,10,10,10,10,10,10,02,10,10,10,10
DATA 10,10,10,02,10,10,10,02,10,10,02,10,10,10,10
DATA 10,10,10,10,02,10,02,10,10,10,10,10,10,10,10
DATA 02,10,10,10,02,10,02,10,10,10,02,10,10,10,10
DATA 10,02,10,10,02,10,02,10,10,02,10,10,02,10,10
DATA 10,10,02,02,10,02,10,10,10,02,10,02,10,10,10
DATA 10,10,10,10,10,10,10,10,10,02,10,02,10,10,10
DATA 02,02,10,10,02,10,10,10,02,02,02,10,10,10,10
DATA 10,10,02,02,10,10,10,10,10,10,10,10,10,10,10
DATA 10,10,10,10,10,10,02,02,10,10,10,10,10,10,10
DATA 10,10,10,10,10,10,02,10,10,10,10,10,10,10,10

'Sprite2 (snow...)
DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
DATA 15,15,15,29,29,29,15,15,15,15,15,15,15,15,15
DATA 15,15,29,07,07,07,15,15,15,29,29,15,15,15,15
DATA 15,15,29,07,15,15,15,15,29,07,07,15,15,15,15
DATA 15,29,07,15,15,15,15,29,07,15,15,15,15,15,15
DATA 15,29,15,15,15,15,15,29,07,15,15,15,15,15,15
DATA 15,15,15,15,15,15,29,29,07,15,15,15,15,15,15
DATA 15,15,15,15,15,29,07,07,15,15,15,15,15,15,15
DATA 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
DATA 15,15,15,15,15,15,15,15,15,29,07,15,15,15,15
DATA 15,15,15,15,15,15,15,15,15,15,29,07,07,07,29
DATA 15,15,15,15,15,15,15,15,15,15,15,29,29,29,15

'Sprite3 (For the third, floor tiles...)
DATA 07,08,08,08,08,08,08,08,08,08,08,08,08,08,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,07,07,07,07,07,07,07,07,07,07,07,07,07,00
DATA 08,00,00,00,00,00,00,00,00,00,00,00,00,00,07

'Guy
DATA 00,00,00,00,00,00,04,04,04,04,00,00,00,00,00
DATA 00,00,00,00,00,04,04,04,04,04,04,00,00,00,00
DATA 00,00,00,04,04,66,04,04,04,04,04,66,00,00,00
DATA 00,00,04,00,00,66,66,66,66,66,66,66,00,00,00
DATA 00,00,00,00,00,00,66,00,66,00,66,00,00,00,00
DATA 00,00,00,00,00,00,66,66,66,66,66,00,00,00,00
DATA 00,00,00,00,00,00,00,66,00,66,00,00,00,00,00
DATA 00,00,00,00,00,00,02,02,02,02,02,00,00,00,00
DATA 00,00,00,00,00,02,00,02,02,02,00,02,00,00,00
DATA 00,00,00,00,00,02,00,02,02,02,00,02,00,00,00
DATA 00,00,00,00,00,66,00,02,02,02,00,66,00,00,00
DATA 00,00,00,00,02,00,00,07,00,07,00,00,02,00,00
DATA 00,00,00,00,00,02,02,02,00,02,02,02,00,00,00


'GuySh (This is the mask for the sprite...)
DATA 255,255,255,255,255,255,04,04,04,04,255,255,255,255,255
DATA 255,255,255,255,255,04,04,04,04,04,04,255,255,255,255
DATA 255,255,255,04,04,66,04,04,04,04,04,66,255,255,255
DATA 255,255,04,255,255,66,66,66,66,66,66,66,255,255,255
DATA 255,255,255,255,255,255,66,00,66,00,66,255,255,255,255
DATA 255,255,255,255,255,255,66,66,66,66,66,255,255,255,255
DATA 255,255,255,255,255,255,255,66,00,66,255,255,255,255,255
DATA 255,255,255,255,255,255,02,02,02,02,02,255,255,255,255
DATA 255,255,255,255,255,02,255,02,02,02,255,02,255,255,255
DATA 255,255,255,255,255,02,255,02,02,02,255,02,255,255,255
DATA 255,255,255,255,255,66,255,02,02,02,255,66,255,255,255
DATA 255,255,255,255,02,255,255,07,255,07,255,255,02,255,255
DATA 255,255,255,255,255,02,02,02,255,02,02,02,255,255,255

'Enemy
DATA 00,00,00,00,00,00,00,04,04,04,00,00,00,00,00
DATA 00,00,00,00,00,00,04,04,04,04,04,00,00,00,00
DATA 00,00,00,00,00,04,04,04,04,04,04,04,00,00,00
DATA 00,00,00,00,00,04,04,04,04,04,04,04,00,00,00
DATA 00,00,00,00,00,00,66,01,66,01,66,00,00,00,00
DATA 00,00,00,00,00,00,66,66,66,66,66,00,00,00,00
DATA 00,00,00,00,00,00,00,66,04,66,00,00,00,00,00
DATA 00,00,00,00,00,00,02,88,02,25,02,00,00,00,00
DATA 00,00,00,00,00,00,00,27,07,02,00,00,00,00,00
DATA 00,00,00,00,00,00,00,27,27,02,00,00,00,00,00
DATA 00,00,00,00,00,00,00,02,02,02,00,00,00,00,00
DATA 00,00,00,00,00,00,00,07,00,07,00,00,00,00,00
DATA 00,00,00,00,00,02,89,88,00,02,89,02,00,00,00

'EnemeySh
DATA 255,255,255,255,255,255,255,004,004,004,255,255,255,255,255
DATA 255,255,255,255,255,255,004,004,004,004,004,255,255,255,255
DATA 255,255,255,255,255,004,004,004,004,004,004,004,255,255,255
DATA 255,255,255,255,255,004,004,004,004,004,004,004,255,255,255
DATA 255,255,255,255,255,255,066,001,066,001,066,255,255,255,255
DATA 255,255,255,255,255,255,066,066,066,066,066,255,255,255,255
DATA 255,255,255,255,255,255,255,066,004,066,255,255,255,255,255
DATA 255,255,255,255,255,255,002,088,002,025,002,255,255,255,255
DATA 255,255,255,255,255,255,255,027,007,002,255,255,255,255,255
DATA 255,255,255,255,255,255,255,027,027,002,255,255,255,255,255
DATA 255,255,255,255,255,255,255,002,002,002,255,255,255,255,255
DATA 255,255,255,255,255,255,255,007,255,007,255,255,255,255,255
DATA 255,255,255,255,255,002,089,088,255,002,089,002,255,255,255

'Map
DATA 3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,3,3,3,3,3,3
DATA 3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,3,3
DATA 3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,3
DATA 3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,3
DATA 3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,3
DATA 3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,3
DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2
DATA 2,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2
DATA 2,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2
DATA 3,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,3
DATA 3,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,3
DATA 3,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3
DATA 3,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3
DATA 3,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,3,3
DATA 3,3,3,3,3,3,3,2,2,2,1,1,1,1,1,3,3,3,3,3,3


SUB LoadMap (SizeX, SizeY, Array())

  FOR y = 1 TO SizeY
    FOR x = 1 TO SizeX
      READ Array(x, y)
    NEXT
  NEXT

END SUB

SUB LoadSprite (SizeX, SizeY, Array())

  FOR y = 1 TO SizeY
    FOR x = 1 TO SizeX
      READ clr
      PSET (x, y), clr
    NEXT
  NEXT
  GET (1, 1)-(15, 13), Array(0)

END SUB

SUB SetVideoSeg (Segment) STATIC

  DEF SEG

  IF VideoAddrOff& = 0 THEN   ' First time the sub is called

    ' We need to find the location of b$AddrC, which holds the graphics
    ' offset (b$OffC) and segment (b$SegC). Since b$AddrC is in the default
    ' segment, we can find it by setting it to a certain value, and then
    ' searching for that value.

    SCREEN 13                 ' Set b$SegC to A000 (00A0 in memory)
    PSET (160, 100), 0        ' Set b$OffC to 7DA0 (not needed in the IDE)

    FOR Offset& = 0 TO 32764                 ' Search for b$AddrC, which is
      IF PEEK(Offset&) = &HA0 THEN           ' in the default segment and
        IF PEEK(Offset& + 1) = &H7D THEN     ' should have a value of
          IF PEEK(Offset& + 2) = &H0 THEN    ' A0 7D 00 A0.
            IF PEEK(Offset& + 3) = &HA0 THEN
              VideoAddrOff& = Offset& + 2    ' If we found it, record the
              EXIT FOR                       ' offset of b$SegC and quit
            END IF                           ' looking. (Oddly, changing
          END IF                             ' the b$OffC doesn't seem to
        END IF                               ' do anything, so this is why
      END IF                                 ' this sub only changes b$SegC)
    NEXT

  END IF

  ' Change b$SegC to the specified Segment

  POKE VideoAddrOff&, Segment AND &HFF
  POKE VideoAddrOff& + 1, (Segment AND &HFF00&) \ &H100

END SUB
Pages: 1 2