rem **************************************************************** rem * rem * Collision Prevention with Partial Collision Detection. rem * rem * Example program by Duane Alan Hahn (Random Terrain) using rem * hints, tips, code snippets, and more from AtariAge members rem * such as batari, SeaGtGruff, RevEng, Robert M, Nukey Shay, rem * Atarius Maximus, jrok, supercat, GroovyBee, and bogax. rem * rem * Sprite provided by RevEng. rem * rem **************************************************************** rem * rem * Instructions: rem * rem * Use the joystick to move the sprite. rem * rem **************************************************************** set kernel_options no_blank_lines dim _Counter = a dim _Temp7 = b dim _Temp8 = c COLUPF = $FC COLUBK = 0 player0x = 77 : player0y = 68 playfield: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X..............................X X..............................X X..............................X X.....X..XXXXXX..XXXXX..XX.....X X.....X........................X X.....X........................X X..............................X X..............................X X..............................X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX end player0: %11100000 %01100000 %01100111 %00100110 %00100110 %00011000 %00111100 %10100100 %10011001 %01111101 %11100111 %11011011 %00111100 %00100100 %00111100 %00011000 end rem **************************************************************** rem **************************************************************** rem * rem * Main Loop rem * rem ` __Main_Loop COLUP0 = $9C _Counter = _Counter + 1 if _Counter{4} then REFP0 = 8 rem **************************************************************** rem * rem * Joy0 Up rem * rem ` if !joy0up then goto __Skip_Joy0_Up temp3 = ((player0x-15)/4) temp5 = temp3 + 1 temp6 = ((player0y-9)/8)-1 if !pfread(temp5,temp6) then if !pfread(temp3,temp6) then goto __Skip_to_Move_Up goto __Skip_Joy0_Up __Skip_to_Move_Up player0y = player0y - 1 if !collision(playfield,player0) then goto __Skip_Joy0_Up temp5 = (temp3*4)+16 if player0x > temp5 then player0x = player0x - 1 : goto __Skip_Joy0_Up player0x = player0x + 1 __Skip_Joy0_Up rem **************************************************************** rem * rem * Joy0 Down rem * rem ` if !joy0down then goto __Skip_Joy0_Down temp3 = ((player0x-15)/4) temp5 = temp3 + 1 temp6 = ((player0y-7)/8)+1 if !pfread(temp5,temp6) then if !pfread(temp3,temp6) then goto __Skip_to_Move_Down goto __Skip_Joy0_Down __Skip_to_Move_Down player0y = player0y + 1 if !collision(playfield,player0) then goto __Skip_Joy0_Down temp5 = (temp3*4)+16 if player0x > temp5 then player0x = player0x - 1 : goto __Skip_Joy0_Down player0x = player0x + 1 __Skip_Joy0_Down rem **************************************************************** rem * rem * Joy0 Left rem * rem ` if !joy0left then goto __Skip_Joy0_Left temp5 = ((player0x-14)/4)-1 temp3 = (player0y-8)/8 temp6 = (player0y-1)/8 _Temp7 = (player0y-16)/8 _Temp8 = (player0y-9)/8 if pfread(temp5,temp3) then goto __Skip_Joy0_Left if pfread(temp5,temp6) then goto __Skip_Joy0_Left if pfread(temp5,_Temp7) then goto __Skip_Joy0_Left if pfread(temp5,_Temp8) then goto __Skip_Joy0_Left player0x = player0x - 1 __Skip_Joy0_Left rem **************************************************************** rem * rem * Joy0 Right rem * rem ` if !joy0right then goto __Skip_Joy0_Right temp5=((player0x-13)/4)+1 temp3 = (player0y-8)/8 temp6 = (player0y-1)/8 _Temp7 = (player0y-16)/8 _Temp8 = (player0y-9)/8 if pfread(temp5,temp3) then goto __Skip_Joy0_Right if pfread(temp5,temp6) then goto __Skip_Joy0_Right if pfread(temp5,_Temp7) then goto __Skip_Joy0_Right if pfread(temp5,_Temp8) then goto __Skip_Joy0_Right player0x = player0x + 1 __Skip_Joy0_Right drawscreen goto __Main_Loop