Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Bomberman 3000 images broken!
#1
When I run this in QB 4.5 with DQB 1.71, it works fine. The images show up fine. After compiled, when I run the .exe file, it shows the breakable (nonsolid) bricks as all fucked up, and across the screen all weird! Anyone know what I did wrong?

Code:
DECLARE SUB DrawSolidBricks (brick() AS INTEGER, floor() AS INTEGER)
DECLARE SUB DrawBricks (brick() AS INTEGER)
'$INCLUDE: 'dqb2\directqb.bi'
CONST MANRIGHT = -1, MANDOWN = 0, MANLEFT = 1, MANUP = 2
CONST layerBG = 1, layerItems = 2, layerCombo = 3, layerBOOM = 4

DIM SHARED adjX%, adjY%
adjX% = 24
adjY% = 12

RANDOMIZE TIMER
CLS

SLEEP 3

TYPE playertype
    x AS INTEGER
    y AS INTEGER
    dir AS INTEGER
    walking AS INTEGER
END TYPE

TYPE bombtype
    x AS INTEGER
    y AS INTEGER
    dir AS INTEGER
    timeleft AS SINGLE
END TYPE

TYPE itemtype
    x AS INTEGER
    y AS INTEGER
    addseg AS INTEGER
    addoff AS INTEGER
END TYPE

TYPE bricktype
    x AS INTEGER
    y AS INTEGER
    addseg AS INTEGER
    addoff AS INTEGER
END TYPE

IF DQBinit(4, 0, 256) THEN DQBclose: PRINT DQBerror$: END
DQBinstallKeyboard

DQBinitVGA
DQBpaint layerBG, 0, 0, 198

DQBsetCollideMethod 1

DIM man AS playertype
DIM SHARED items(0) AS itemtype
DIM SHARED numitems%
DIM SHARED speed%

DIM player(2322) AS INTEGER
DIM solidbrick(258) AS INTEGER
DIM brick(258) AS INTEGER
DIM bomb(258) AS INTEGER
DIM floor(258) AS INTEGER

DEF SEG = VARSEG(player(0))
BLOAD "images/bomber.put", VARPTR(player(0))
DEF SEG = VARSEG(solidbrick(0))
BLOAD "images/solid.put", VARPTR(solidbrick(0))
DEF SEG = VARSEG(brick(0))
BLOAD "images/brick.put", VARPTR(solidbrick(0))
DEF SEG = VARSEG(bomb(0))
BLOAD "images/bomb.put", VARPTR(spikes(0))
DEF SEG = VARSEG(floor(0))
BLOAD "images/floor.put", VARPTR(solidbrick(0))
DEF SEG

numitems% = 1
speed% = 1

DrawSolidBricks solidbrick(), floor()
DrawBricks brick()

items(0).x = 16 * 2
items(0).y = 16 * 7
items(0).addseg = VARSEG(spikes(0))
items(0).addoff = VARPTR(spikes(0))

man.dir = MANRIGHT
man.x = 16 + adjX%
man.y = 16 + adjY%

t! = TIMER

DO
    WAIT &H3DA, 8

    DQBcopyLayer layerBG, layerCombo
    DQBcopyTransLayer layerItems, layerCombo

    man.walking = 0
    IF DQBkey(1) THEN EXIT DO
    IF DQBkey(75) AND man.x > 0 THEN
        man.x = man.x - speed%
        man.dir = MANLEFT
        man.walking = 1
    END IF
    IF DQBkey(77) AND man.x < 303 THEN
        man.x = man.x + speed%
        man.dir = MANRIGHT
        man.walking = 1
    END IF
    IF DQBkey(72) AND man.y < 303 THEN
        man.y = man.y - speed%
        man.dir = MANUP
        man.walking = 1
    END IF
    IF DQBkey(80) AND man.y > 0 THEN
        man.y = man.y + speed%
        man.dir = MANDOWN
        man.walking = 1
    END IF

    WAIT &H3DA, 8, 8
    DQBmPut layerCombo, man.x, man.y, VARSEG(player(130 * (ABS(man.dir) * 3 + walkingstate%))), VARPTR(player(130 * (ABS(man.dir) * 3 + walkingstate%))), ABS(man.dir = MANRIGHT)

    DQBprint layerCombo, "So far, you can't do shit. But it's a", 0, 0, 2
    DQBprint layerCombo, "good engine so far, I think =)", 0, 190, 2

    DQBcopyLayer layerCombo, VIDEO

    IF man.walking = 1 THEN
        IF TIMER - t! >= .25 THEN
            IF walkingstate% = 1 THEN
                walkingstate% = 2
            ELSE
                walkingstate% = 1
            END IF
            t! = TIMER
        END IF
    ELSE
        walkingstate% = 0
    END IF
LOOP

DQBremoveKeyboard
DQBclose

REM $DYNAMIC
SUB DrawBricks (brick() AS INTEGER)
    FOR y = 2 TO 8
        FOR x = 2 TO 14
            doit = INT(RND * 8)
            IF y AND 1 THEN
                IF doit THEN DQBput layerItems, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
            ELSEIF x AND 1 THEN
                IF doit THEN DQBput layerItems, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
            END IF
        NEXT x
    NEXT y

    FOR y = 3 TO 7
        doit = INT(RND * 8)
        IF doit THEN DQBput layerItems, 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
        IF doit THEN DQBput layerItems, 15 * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
    NEXT y

    FOR x = 3 TO 13
        doit = INT(RND * 8)
        IF doit THEN DQBput layerItems, x * 16 + adjX%, (1 * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
        IF doit THEN DQBput layerItems, x * 16 + adjX%, (9 * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
    NEXT x
END SUB

SUB DrawSolidBricks (brick() AS INTEGER, floor() AS INTEGER)
    FOR i = 0 TO 10
        DQBput layerBG, 256 + adjX%, (i * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
        DQBput layerBG, 0 + adjX%, (i * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
    NEXT i

    FOR i = 1 TO 15
        DQBput layerBG, i * 16 + adjX%, adjY%, VARSEG(brick(0)), VARPTR(brick(0))
        DQBput layerBG, i * 16 + adjX%, 160 + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
    NEXT i

    FOR y = 2 TO 8 STEP 2
        FOR x = 2 TO 15 STEP 2
            DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
            DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
        NEXT x
    NEXT y

    FOR y = 1 TO 9 STEP 2
        FOR x = 1 TO 15 STEP 1
            DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(floor(0)), VARPTR(floor(0))
            DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(floor(0)), VARPTR(floor(0))
        NEXT x
    NEXT y

    FOR y = 2 TO 8 STEP 2
        FOR x = 1 TO 15 STEP 2
            DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(floor(0)), VARPTR(floor(0))
            DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(floor(0)), VARPTR(floor(0))
        NEXT x
    NEXT y
END SUB
earn.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)