I am programming my game SoulQuest, and I need a faster collision checking routine.
Code:
In case you missed the collision code, it's in every key if statement:
Code:
Code:
//Matrix for Tile Map
[[1,1,1,1,1,1,1,1,1,1,1,1][1,7,8,8,8,8,19,12,8,8,9,1][1,5,0,0,0,0,0,10,0,0,6,1][1,7,8,8,8,8,8,14,8,8,9,1][1,5,0,0,0,0,0,0,0,18,6,1][1,5,38,0,0,0,0,0,0,17,6,1][1,2,3,3,3,3,3,3,3,3,4,1][1,1,1,1,1,1,1,1,1,1,1,1->[A]
//List for tile ids that you cannot pass through
{1,15,16,17,18,19,20,24,25,26,27,28,29,30,31,32,33,34,37,39,40,41,42,43,50,51,52,60,61,62,63,66,67,~1->L1
//Pic for character sprites
identity(0,"SQthetaPIC",6,8,1
//Pic for tiles
identity(0,"SQthetaPIC",6,7,10
//Init sprite coords
5->X:5->Y
DrawTileMap(0,0,0,8,12,0,12,0,8,10,0
DrawSprite(8(X-1),8(Y-1),1,16,1,0,0,3,0
//Main Loop
While Ans!=54
GetKey(
While Ans=0
GetKey(
End
//If down key is pressed
If Ans=1:Then
DrawTileMap(0,0,0,12,8,0,12,0,8,10,0
1->A
[A](Y+1,X->B
Repeat B=L1(A) or L1(A)=-1
A+1->A
End
Y+(C=-1->Y
DrawSprite(8(X-1),8(Y-1),1,16,1,0,0,0,0
End
//If left key is pressed
If Ans=2:Then
DrawTileMap(0,0,0,12,8,0,12,0,8,10,0
1->A
[A](Y,X-1->B
Repeat B=L1(A) or L1(A)=-1
A+1->A
End
X-(C=-1->X
DrawSprite(8(X-1),8(Y-1),1,16,1,1,0,0,1
End
//If right key is pressed
If Ans=3:Then
DrawTileMap(0,0,0,8,12,0,12,0,8,10,0
1->A
[A](Y,X+1->B
Repeat B=L1(A) or L1(A)=-1
A+1->A
End
X+(C=-1->X
DrawSprite(8(X-1),8(Y-1),1,16,1,1,0,0,0
End
If Ans=4:Then
DrawTileMap(0,0,0,12,8,0,12,0,8,10,0
Y-(C=~1->Y
DrawSprite(8(X-1),8(Y-1),1,16,1,2,0,0,0
End
End
In case you missed the collision code, it's in every key if statement:
Code:
1->A //Init dim of L1
[A](Y+1/-1,X+1/-1->B //The tile in which is ahead of the direction you are going (for example, If you are going down, it's [A](Y+1,X) (Also a pre-evalution optimization)
Repeat B=L1(A) or L1(A)=-1 //Repeat until the tile id equals a non-passable tile id or -1 (which represents a passable tile if the tile id from the matrix doesn't match up)
A+1->A //Scroll through the list with increasing A
End
X/Y +/- (L1(A)=-1->X/Y //Increments/decrements sprites position if tile's id is passable