You saw the $D01E routines and know that with comparison with software collision the $D01E method is not as handy unless you do something like a simple dodge type of game. Now let us say you were making proper shoot 'em ups, etc, then a software collision would be much better to use.
Depending on the area size of your sprites, this nifty piece of code can calculate the collision areas for the sprites. To be able to use this, you would need to create some labels and values.
COLLISIONX1 = $02 (or wherever you want it) COLLISIONX2 = $03 COLLISIONY1 = $04 COLLISIONY2 = $05 XSIZE1 = $06 ;The area of the drawn sprite on the left XSIZE2 = $0C ;The area of the drawn sprite on the right YSIZE1 = $0C ;The area of the drawn sprite at the top YSIZE2 = $18 ;The area of the drawn sprite at the bottom
Now we write a routine to calculate the collision routine
LDA SPRITEX SEC SBC #XSIZE1 STA COLLISIONX1 CLC ADC #XSIZE2 STA COLLISIONX2 LDA SPRITEY SEC SBC #YSIZE1 STA COLLISIONY1 CLC ADC #YSIZE2 STA COLLISIONY2
Now for the main collision detection
LDA ENEMYSPRITEX CMP COLLISIONX1 BCC NOTHIT CMP COLLISIONX2 BCS NOTHIT LDA ENEMYSPRITEY CMP COLLISIONY1 BCC NOTHIT CMP COLLISIONY2 BCS NOTHIT HIT INC $D020 JMP HIT NOTHIT RTS
Yes, once again this source uses the flashy border loop if a collision is made. This can easily be changed if you want to change the routine in your game.