Post by Deleted on Jul 20, 2015 9:31:40 GMT -5
I've always ran into this problem with collision maps and BEX. The logic seems correct but I always get sketchy results at the boundaries. In this case my collision map is 32x32 big. Each block, sprite or empty space is 2x2 tiles each.
Right now I don't care that the character moves half-way into the bricks. My main concern is that the collision map fails usually at the borders. The "Bam!" text is close to the borders and you can move there is see the bad behavior.
Any idea what's going on?
Right now I don't care that the character moves half-way into the bricks. My main concern is that the collision map fails usually at the borders. The "Bam!" text is close to the borders and you can move there is see the bad behavior.
Any idea what's going on?
dim colmap(32,32) as integer
const #false = 0
const #true = 1
const #farwest = 128
const #farnorth = 128
const #farsouth = 336
const #fareast = 432
pallettes palExport0,0,0,16
loadtiles smiley_tiles,4,256
loadtiles brick_tiles,4,260
smiley_id=addsprite(2,2)
propsprite smiley_id,256,0
brick_id=addsprite(2,2)
propsprite brick_id,260,0
print "Bam!"
palExport0:
DATAINT $0000,$0EEE,$0A88,$0000,$002E,$02AE,$00EE,$04E0 ' Palette:
DATAINT $0E82,$0E06,$024A,$0EAE,$0EE6,$0082,$0E22,$0E0E
init:
camera_x = 280
camera_y = 234
for i=0 to 32
drawbrick rnd(32), rnd(32)
next
goto main
main:
read_joystick
counter = counter%256 + 1
on vblank gosub drawscreen:
enable interrupt vblank
locate 1,1
sleep 1
print smiley_x, smiley_y
goto main
drawscreen:
lastx = camera_x : lasty = camera_y
if up_pressed > 0 then camera_y = (camera_y - 1)%512
if down_pressed > 0 then camera_y = (camera_y + 1)%512
if left_pressed > 0 then camera_x = (camera_x - 1)%512
if right_pressed > 0 then camera_x = (camera_x + 1)%512
if colmap(((camera_x/16)+10)%32,((camera_y/16)+7))%32 = 1 then camera_x = lastx : camera_y = lasty
SCROLL2 LEFT, camera_x
SCROLL2 UP, camera_y
movesprite smiley_id,280,232
return
DECLARE SUB drawbrick(tilex as integer, tiley as integer)
colmap(tilex, tiley) = 1
DRAWTILESINC 260, (tilex*2), (tiley*2), 2, 2
END SUB
DECLARE SUB read_joystick()
joystick_state=JOYPAD()
IF joystick_state.0 THEN up_pressed = up_pressed + 1 ELSE up_pressed = #false
IF joystick_state.1 THEN down_pressed = down_pressed + 1 ELSE down_pressed = #false
IF joystick_state.2 THEN left_pressed = left_pressed + 1 ELSE left_pressed = #false
IF joystick_state.3 THEN right_pressed = right_pressed + 1 ELSE right_pressed = #false
IF joystick_state.4 THEN b_pressed = b_pressed + 1 ELSE b_pressed = #false
IF joystick_state.5 THEN c_pressed = c_pressed + 1 ELSE c_pressed = #false
IF joystick_state.6 THEN a_pressed = a_pressed + 1 ELSE a_pressed = #false
IF joystick_state.7 THEN start_pressed = start_pressed + 1 ELSE start_pressed = #false
END SUB
smiley_tiles:
DATALONG $777777BB ' Tile #0
DATALONG $777777BB
DATALONG $77BB77BB
DATALONG $77BB77BB
DATALONG $77BB77BB
DATALONG $77BB77BB
DATALONG $7777BBBB
DATALONG $7777BBBB
DATALONG $777777BB ' Tile #1
DATALONG $777777BB
DATALONG $7777BBBB
DATALONG $7777BBBB
DATALONG $77BBBB77
DATALONG $77BBBB77
DATALONG $77777777
DATALONG $77777777
DATALONG $BB777777 ' Tile #2
DATALONG $BB777777
DATALONG $BB777777
DATALONG $BB777777
DATALONG $BB77BB77
DATALONG $BB77BB77
DATALONG $BBBB7777
DATALONG $BBBB7777
DATALONG $BB777777 ' Tile #3
DATALONG $BB777777
DATALONG $BB777777
DATALONG $BB777777
DATALONG $77BB7777
DATALONG $77BB7777
DATALONG $77BBBB77
DATALONG $77BBBB77
brick_tiles:
DATALONG $11001111 ' Tile #0
DATALONG $10220111
DATALONG $10320111
DATALONG $11001111
DATALONG $11111011
DATALONG $11110201
DATALONG $11111011
DATALONG $11111111
DATALONG $11001111 ' Tile #0
DATALONG $10220111
DATALONG $10320111
DATALONG $11001111
DATALONG $11111011
DATALONG $11110201
DATALONG $11111011
DATALONG $11111111
DATALONG $11001111 ' Tile #0
DATALONG $10220111
DATALONG $10320111
DATALONG $11001111
DATALONG $11111011
DATALONG $11110201
DATALONG $11111011
DATALONG $11111111
DATALONG $11001111 ' Tile #0
DATALONG $10220111
DATALONG $10320111
DATALONG $11001111
DATALONG $11111011
DATALONG $11110201
DATALONG $11111011
DATALONG $11111111