|
Post by abokys on Mar 28, 2010 5:45:25 GMT -5
Hello! Here I bring them a very, very simple cam example based on Mairtrus engine, but simplified. I hope that this program will help in your projects ;-). Good bye!
PD: I am not going to specify details in the basic concepts, but if you have a qüestion, ask me.
PD 2: the grafics are too poor, but, this is an example.
Program:
main: Dim Map(199,27) as Integer ' you must put your own parameters pallettes paleta,0,0,15 loadtiles avion,8,256 'there is the player graphics settextplane SCROLL_A setgfxplane SCROLL_B setscrollplane SCROLL_B
loadtiles fondo,347,264 'there we load the map graphics pallettes mappal,1,0,16' and his pal
reload mapa For Y=0 to 27 For X=0 to 199 readint Map(X,Y) Next X Next Y
For Y=0 to 27 For X=0 to 40 DrawTile Map(X,Y)+pallette(1)+264,X,Y Next X Next Y
fly=addsprite(2,2) propsprite fly,256,0 x1=130 controles: do sleep 1 movesprite fly,x1,180 j=joypad() if j.3 then gosub derecha if j.2 then gosub izquierda locate 1,15:print x1 if x1=<130 then x1=130 if x1>=430 then x1=430 loop derecha:
propsprite fly,256,0:x1=x1+1 if x1>=280 and xcam=<1278 then x1=280:XCam=xcam+2 gosub Dibujarpantalla return izquierda:
propsprite fly,260,0:x1=x1-1 if x1<=280 and xcam>0 then x1=280:xcam=xcam-2 gosub Dibujarpantalla return
Dibujarpantalla: XTile=XCam>>3 if XTile<>XTileOld then if XTile>XTileOld then T=XTile+40 else T=XTile-1 end if X=T [and] 63 k=pallette(1)+264 For Y=0 to 27 DrawTile Map(T,Y)+k,X,Y Next Y XTileOld=XTile end if scroll2 LEFT,XCam-2 locate 1,25:print xcam return
fondo: datafile graf.bin,bin '----there is the place of your map graphics
mappal: DATAINT $0000,$0EEA,$06A8,$0000,$0266,$0C60,$0EEE,$00A0 DATAINT $04A2,$006E,$00EE,$02EE,$0000,$0000,$0000,$0000
mapa: datafile gh.bin,bin'---you must put here the bin file of your map avion: DATALONG $00000000 ' Tile: 0 DATALONG $00000000 DATALONG $FFFF0000 DATALONG $F33F0000 DATALONG $F33F0000 DATALONG $F33FFFFF DATALONG $F3333333 DATALONG $F3333333 DATALONG $0F333333 ' Tile: 1 DATALONG $00F33333 DATALONG $000F3333 DATALONG $0000FFFF DATALONG $00000000 DATALONG $00000000 DATALONG $00000000 DATALONG $00000000 DATALONG $00000000 ' Tile: 2 DATALONG $0BB00000 DATALONG $0B2F0000 DATALONG $9DDFF000 DATALONG $9DFFEF00 DATALONG $FFFFFFF1 DATALONG $333333F1 DATALONG $3F33F3F1 DATALONG $3F33F3FF ' Tile: 3 DATALONG $3F33F3F1 DATALONG $3F33F3F1 DATALONG $FF33FFF1 DATALONG $0F33F000 DATALONG $00FF0000 DATALONG $00000000 DATALONG $00000000
DATALONG $00000000 ' Tile: 0 DATALONG $0000BB00 DATALONG $00002B00 DATALONG $000EDD90 DATALONG $10EEDD90 DATALONG $10FFFFFF DATALONG $1F333333 DATALONG $1F3F3333 DATALONG $9F3F3333 ' Tile: 1 DATALONG $9F3F3333 DATALONG $1F3F3333 DATALONG $1F3F3333 DATALONG $10FF3333 DATALONG $100F3333 DATALONG $0000F33F DATALONG $00000FF0
DATALONG $00000000 ' Tile: 2 DATALONG $00000000 DATALONG $0000FFFF DATALONG $0000F33F DATALONG $0000F33F DATALONG $FFFFF33F DATALONG $3333333F DATALONG $F333333F
DATALONG $F33333F0 ' Tile: 3 DATALONG $F3333F00 DATALONG $F333F000 DATALONG $F33F0000 DATALONG $FFF00000 DATALONG $F0000000 DATALONG $00000000 DATALONG $00000000
paleta:
DATAINT $0626,$00EE,$0E0E,$000E,$0EE0,$00E0,$0E00,$0888 ' Pallette: 0 DATAINT $0CCC,$0088,$0808,$0008,$0880,$0080,$0800,$0000
I hope this results useful!
|
|
|
Post by TheMVRules on Mar 28, 2010 10:57:16 GMT -5
Haven't you learned to use the Code feature. Select the "#" symbol at "Add Tags", then past your code between the added text "Code". It makes it easier to copy that code.
|
|
|
Post by Alex Khan on Mar 30, 2010 1:26:24 GMT -5
It makes it easier to copy that code. I'm hurt absolutely hurt that you have not taken the time out to help me with my code. When are you going to use your greater wisdom and programming experience to help a 'Child' like me navigate through this Dark And Scary block of Bex programming? Do you know I check Devster Forums every one hour hoping for a reply from you?
|
|
|
Post by TheMVRules on Mar 30, 2010 4:03:50 GMT -5
Damn, I've got to add those lines everytime, Why not use the code brackets. And I am not better than anyone else here. Also, I cannot help alltime, because my BEX computer lacks Internet and I have to use USB sticks, so I can't respond very quickly, Then I forget things easily.
|
|
|
Post by Alex Khan on Mar 30, 2010 5:28:55 GMT -5
No problem I will upload Bex file.
|
|
|
Post by ScroGer on Mar 30, 2010 5:32:40 GMT -5
when you give us code use the code tags...The one that looks like # in the "add tags" area is the one otherwise your code is useless to us
|
|
|
Post by abokys on Mar 30, 2010 5:42:55 GMT -5
Sorry, but I didn't know how to use this feature, i'm newbie yet.....
main:
Dim Map(199,27) as Integer ' you must put your own parameters pallettes paleta,0,0,15 loadtiles avion,8,256 'there is the player graphics
settextplane SCROLL_A setgfxplane SCROLL_B setscrollplane SCROLL_B
loadtiles fondo,347,264 'there we load the map graphics pallettes mappal,1,0,16' and his pal
reload mapa For Y=0 to 27 For X=0 to 199 readint Map(X,Y) Next X Next Y
For Y=0 to 27 For X=0 to 40 DrawTile Map(X,Y)+pallette(1)+264,X,Y Next X Next Y
fly=addsprite(2,2) propsprite fly,256,0 x1=130
controles:
do sleep 1 movesprite fly,x1,180 j=joypad() if j.3 then gosub derecha if j.2 then gosub izquierda locate 1,15:print x1 if x1=<130 then x1=130 if x1>=430 then x1=430 loop
derecha:
propsprite fly,256,0:x1=x1+1 if x1>=280 and xcam=<1278 then x1=280:XCam=xcam+2 gosub Dibujarpantalla return
izquierda:
propsprite fly,260,0:x1=x1-1 if x1<=280 and xcam>0 then x1=280:xcam=xcam-2 gosub Dibujarpantalla return
Dibujarpantalla:
XTile=XCam>>3 if XTile<>XTileOld then if XTile>XTileOld then T=XTile+40 else T=XTile-1 end if X=T [and] 63 k=pallette(1)+264 For Y=0 to 27 DrawTile Map(T,Y)+k,X,Y Next Y XTileOld=XTile end if scroll2 LEFT,XCam-2 locate 1,25:print xcam return
fondo:
datafile graf.bin,bin '----there is the place of your map graphics
mappal:
DATAINT $0000,$0EEA,$06A8,$0000,$0266,$0C60,$0EEE,$00A0 DATAINT $04A2,$006E,$00EE,$02EE,$0000,$0000,$0000,$0000
mapa:
datafile gh.bin,bin'---you must put here the bin file of your map
avion:
DATALONG $00000000 ' Tile: 0 DATALONG $00000000 DATALONG $FFFF0000 DATALONG $F33F0000 DATALONG $F33F0000 DATALONG $F33FFFFF DATALONG $F3333333 DATALONG $F3333333 DATALONG $0F333333 ' Tile: 1 DATALONG $00F33333 DATALONG $000F3333 DATALONG $0000FFFF DATALONG $00000000 DATALONG $00000000 DATALONG $00000000 DATALONG $00000000
DATALONG $00000000 ' Tile: 2 DATALONG $0BB00000 DATALONG $0B2F0000 DATALONG $9DDFF000 DATALONG $9DFFEF00 DATALONG $FFFFFFF1 DATALONG $333333F1 DATALONG $3F33F3F1
DATALONG $3F33F3FF ' Tile: 3 DATALONG $3F33F3F1 DATALONG $3F33F3F1 DATALONG $FF33FFF1 DATALONG $0F33F000 DATALONG $00FF0000 DATALONG $00000000 DATALONG $00000000
DATALONG $00000000 ' Tile: 0 DATALONG $0000BB00 DATALONG $00002B00 DATALONG $000EDD90 DATALONG $10EEDD90 DATALONG $10FFFFFF DATALONG $1F333333 DATALONG $1F3F3333
DATALONG $9F3F3333 ' Tile: 1 DATALONG $9F3F3333 DATALONG $1F3F3333 DATALONG $1F3F3333 DATALONG $10FF3333 DATALONG $100F3333 DATALONG $0000F33F DATALONG $00000FF0
DATALONG $00000000 ' Tile: 2 DATALONG $00000000 DATALONG $0000FFFF DATALONG $0000F33F DATALONG $0000F33F DATALONG $FFFFF33F DATALONG $3333333F DATALONG $F333333F
DATALONG $F33333F0 ' Tile: 3 DATALONG $F3333F00 DATALONG $F333F000 DATALONG $F33F0000 DATALONG $FFF00000 DATALONG $F0000000 DATALONG $00000000 DATALONG $00000000
paleta:
DATAINT $0626,$00EE,$0E0E,$000E,$0EE0,$00E0,$0E00,$0888 ' Pallette: 0 DATAINT $0CCC,$0088,$0808,$0008,$0880,$0080,$0800,$0000
P.D: Sorry for the late response, usually in weekend i'm not conected
|
|
|
Post by ScroGer on Mar 30, 2010 6:14:45 GMT -5
Im not sure what you're doing wrong but the problem Im having is when I copy your cod into BEX IDE, theres no spaces in front of any of the code..This is a problem
Did you copy the code directly from the source code in the IDE then place it into the code tag?
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Mar 30, 2010 11:40:41 GMT -5
Nice example for beginners on the concept behind scrolling maps abokys! Personally I always add "overdraw" ( the ability to move your camera beyond the map's limits ), since it makes debugging easier. Attached is a quick rom to illustrate what I mean .. the map is procedurally generated ( 2048x2048 pixels ) since I was too lazy to construct a handcrafted map Attachments:
|
|
|
Post by TheMVRules on Mar 30, 2010 12:07:39 GMT -5
It might be the browser.
|
|
|
Post by memorydump on Mar 30, 2010 19:17:01 GMT -5
Nice example for beginners on the concept behind scrolling maps abokys! Personally I always add "overdraw" ( the ability to move your camera beyond the map's limits ), since it makes debugging easier. Attached is a quick rom to illustrate what I mean .. the map is procedurally generated ( 2048x2048 pixels ) since I was too lazy to construct a handcrafted map Wow, that's the quickest scrolling example I've seen so far. Does it use lots of ASM though, or is it actually BEX code?
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Mar 31, 2010 6:49:53 GMT -5
It's all basic ( highly unoptimized even ), I didn't use a single line of assembly. It works with speeds up to 16 pixels per frame, although it would be a piece of cake allowing it to go beyond that .. but not even Sonic scrolls that fast
|
|
|
Post by abokys on Mar 31, 2010 11:34:16 GMT -5
Im not sure what you're doing wrong but the problem Im having is when I copy your cod into BEX IDE, theres no spaces in front of any of the code..This is a problem Did you copy the code directly from the source code in the IDE then place it into the code tag? I edit the code with the spaces, I hope that now work fine!
|
|
|
Post by abokys on Mar 31, 2010 11:38:48 GMT -5
Nice example for beginners on the concept behind scrolling maps abokys! Personally I always add "overdraw" ( the ability to move your camera beyond the map's limits ), since it makes debugging easier. Attached is a quick rom to illustrate what I mean .. the map is procedurally generated ( 2048x2048 pixels ) since I was too lazy to construct a handcrafted map Wow! your code is speedy! I will try overdraw functions in the future projects. But with this example I think that is perfect for begginers.
|
|
zenac
Moldy Popcorn
Posts: 41
|
Post by zenac on Aug 10, 2013 19:30:51 GMT -5
main:
Dim Map(199,27) as Integer ' you must put your own parameters pallettes paleta,0,0,15 loadtiles avion,8,256 'there is the player graphics
settextplane SCROLL_A setgfxplane SCROLL_B setscrollplane SCROLL_B
loadtiles fondo,347,264 'there we load the map graphics pallettes mappal,1,0,16' and his pal
reload mapa For Y=0 to 27 For X=0 to 199 readint Map(X,Y) Next X Next Y
For Y=0 to 27 For X=0 to 40 DrawTile Map(X,Y)+pallette(1)+264,X,Y Next X Next Y
fly=addsprite(2,2) propsprite fly,256,0 x1=130
controles:
do sleep 1 movesprite fly,x1,180 j=joypad() if j.3 then gosub derecha if j.2 then gosub izquierda locate 1,15:print x1 if x1=<130 then x1=130 if x1>=430 then x1=430 loop
derecha:
propsprite fly,256,0:x1=x1+1 if x1>=280 and xcam=<1278 then x1=280:XCam=xcam+2 gosub Dibujarpantalla return
izquierda:
propsprite fly,260,0:x1=x1-1 if x1<=280 and xcam>0 then x1=280:xcam=xcam-2 gosub Dibujarpantalla return
Dibujarpantalla:
XTile=XCam>>3 if XTile<>XTileOld then if XTile>XTileOld then T=XTile+40 else T=XTile-1 end if X=T [and] 63 k=pallette(1)+264 For Y=0 to 27 DrawTile Map(T,Y)+k,X,Y Next Y XTileOld=XTile end if scroll2 LEFT,XCam-2 locate 1,25:print xcam return
fondo:
datafile graf.bin,bin '----there is the place of your map graphics
mappal:
DATAINT $0000,$0EEA,$06A8,$0000,$0266,$0C60,$0EEE,$00A0 DATAINT $04A2,$006E,$00EE,$02EE,$0000,$0000,$0000,$0000
mapa:
datafile gh.bin,bin'---you must put here the bin file of your map
avion:
DATALONG $00000000 ' Tile: 0 DATALONG $00000000 DATALONG $FFFF0000 DATALONG $F33F0000 DATALONG $F33F0000 DATALONG $F33FFFFF DATALONG $F3333333 DATALONG $F3333333 DATALONG $0F333333 ' Tile: 1 DATALONG $00F33333 DATALONG $000F3333 DATALONG $0000FFFF DATALONG $00000000 DATALONG $00000000 DATALONG $00000000 DATALONG $00000000
DATALONG $00000000 ' Tile: 2 DATALONG $0BB00000 DATALONG $0B2F0000 DATALONG $9DDFF000 DATALONG $9DFFEF00 DATALONG $FFFFFFF1 DATALONG $333333F1 DATALONG $3F33F3F1
DATALONG $3F33F3FF ' Tile: 3 DATALONG $3F33F3F1 DATALONG $3F33F3F1 DATALONG $FF33FFF1 DATALONG $0F33F000 DATALONG $00FF0000 DATALONG $00000000 DATALONG $00000000
DATALONG $00000000 ' Tile: 0 DATALONG $0000BB00 DATALONG $00002B00 DATALONG $000EDD90 DATALONG $10EEDD90 DATALONG $10FFFFFF DATALONG $1F333333 DATALONG $1F3F3333
DATALONG $9F3F3333 ' Tile: 1 DATALONG $9F3F3333 DATALONG $1F3F3333 DATALONG $1F3F3333 DATALONG $10FF3333 DATALONG $100F3333 DATALONG $0000F33F DATALONG $00000FF0
DATALONG $00000000 ' Tile: 2 DATALONG $00000000 DATALONG $0000FFFF DATALONG $0000F33F DATALONG $0000F33F DATALONG $FFFFF33F DATALONG $3333333F DATALONG $F333333F
DATALONG $F33333F0 ' Tile: 3 DATALONG $F3333F00 DATALONG $F333F000 DATALONG $F33F0000 DATALONG $FFF00000 DATALONG $F0000000 DATALONG $00000000 DATALONG $00000000
paleta:
DATAINT $0626,$00EE,$0E0E,$000E,$0EE0,$00E0,$0E00,$0888 ' Pallette: 0 DATAINT $0CCC,$0088,$0808,$0008,$0880,$0080,$0800,$0000
I'm trying to change the code to use the camera also up and down. But my code doesn't work. Please, could anybody help me? Below is my code... I use a image with 200x56 tiles.
main:
Dim Map(199,55) as Integer ' you must put your own parameters pallettes paleta,0,0,15 loadtiles avion,8,256 'there is the player graphics
settextplane SCROLL_A setgfxplane SCROLL_B setscrollplane SCROLL_B
loadtiles fondo,617,264 'there we load the map graphics (HERE I HAVE CHANGED THE SECOND PARAMETER) pallettes mappal,1,0,16' and his pal
reload mapa For Y=0 to 55 For X=0 to 199 readint Map(X,Y) Next X Next Y
For Y=0 to 27 For X=0 to 40 DrawTile Map(X,Y)+pallette(1)+264,X,Y Next X Next Y
fly=addsprite(2,2) propsprite fly,256,0 x1=130 y1=130
controles:
do sleep 1 movesprite fly,x1,y1 j=joypad() if j.3 then gosub derecha if j.2 then gosub izquierda if j.1 then gosub bajo if j.0 then gosub arriba locate 1,15:print x1 if x1=<130 then x1=130 if x1>=430 then x1=430 if y1=<130 then y1=130 if y1>=334 then y1=334 loop
derecha:
propsprite fly,256,0:x1=x1+1 if x1>=280 and xcam=<1278 then x1=280:XCam=xcam+1 gosub Dibujarpantalla return
izquierda:
propsprite fly,260,0:x1=x1-1 if x1<=280 and xcam>0 then x1=280:xcam=xcam-1 gosub Dibujarpantalla return
bajo:
propsprite fly,256,0:y1=y1+1 if y1>=232 and ycam=<222 then y1=232:yCam=ycam+1 gosub Dibujarpantalla2 return
arriba:
propsprite fly,260,0:y1=y1-1 if y1<=232 and ycam>0 then y1=232:ycam=ycam-1 gosub Dibujarpantalla2 return
Dibujarpantalla:
XTile=XCam>>3 if XTile<>XTileOld then if XTile>XTileOld then T=XTile+40 else T=XTile-1 end if X=T [and] 63 k=pallette(1)+264 For Y=0 to 27 DrawTile Map(T,Y)+k,X,Y Next Y XTileOld=XTile end if scroll2 LEFT,XCam-1 locate 1,25:print xcam return
Dibujarpantalla2:
yTile=yCam>>3 if yTile<>yTileOld then if yTile>yTileOld then u=yTile+28 else u=yTile-1 end if y=u [and] 63 k=pallette(1)+264 For x=0 to 39 DrawTile Map(x,u)+k,X,Y Next x yTileOld=yTile end if scroll2 UP,yCam-1 locate 1,35:print ycam return
fondo:
datafile graf2.bin,bin '----there is the place of your map graphics
mappal: DATAINT $026E,$026E,$002A,$0020,$0000,$026C,$006E,$0006 DATAINT $026A,$0002,$0246,$004E,$004C,$0242,$006C,$00EE mapa:
datafile gh2.bin,bin'---you must put here the bin file of your map
avion:
DATALONG $00000000 ' Tile: 0 DATALONG $00000000 DATALONG $FFFF0000 DATALONG $F33F0000 DATALONG $F33F0000 DATALONG $F33FFFFF DATALONG $F3333333 DATALONG $F3333333 DATALONG $0F333333 ' Tile: 1 DATALONG $00F33333 DATALONG $000F3333 DATALONG $0000FFFF DATALONG $00000000 DATALONG $00000000 DATALONG $00000000 DATALONG $00000000
DATALONG $00000000 ' Tile: 2 DATALONG $0BB00000 DATALONG $0B2F0000 DATALONG $9DDFF000 DATALONG $9DFFEF00 DATALONG $FFFFFFF1 DATALONG $333333F1 DATALONG $3F33F3F1
DATALONG $3F33F3FF ' Tile: 3 DATALONG $3F33F3F1 DATALONG $3F33F3F1 DATALONG $FF33FFF1 DATALONG $0F33F000 DATALONG $00FF0000 DATALONG $00000000 DATALONG $00000000
DATALONG $00000000 ' Tile: 0 DATALONG $0000BB00 DATALONG $00002B00 DATALONG $000EDD90 DATALONG $10EEDD90 DATALONG $10FFFFFF DATALONG $1F333333 DATALONG $1F3F3333
DATALONG $9F3F3333 ' Tile: 1 DATALONG $9F3F3333 DATALONG $1F3F3333 DATALONG $1F3F3333 DATALONG $10FF3333 DATALONG $100F3333 DATALONG $0000F33F DATALONG $00000FF0
DATALONG $00000000 ' Tile: 2 DATALONG $00000000 DATALONG $0000FFFF DATALONG $0000F33F DATALONG $0000F33F DATALONG $FFFFF33F DATALONG $3333333F DATALONG $F333333F
DATALONG $F33333F0 ' Tile: 3 DATALONG $F3333F00 DATALONG $F333F000 DATALONG $F33F0000 DATALONG $FFF00000 DATALONG $F0000000 DATALONG $00000000 DATALONG $00000000
paleta:
DATAINT $0626,$00EE,$0E0E,$000E,$0EE0,$00E0,$0E00,$0888 ' Pallette: 0 DATAINT $0CCC,$0088,$0808,$0008,$0880,$0080,$0800,$0000
|
|