Re: A86: Tilemaps and Collision Detection


[Prev][Next][Index][Thread]

Re: A86: Tilemaps and Collision Detection




Usually you have a function to do that:

; de = address of tile to check
; returns: carry = tile is solid
CheckSolid:
 ld a,(de)    ; load the tile
 cp SOLID    ; is it clear?
 ccf     ; reverse check
 ret     ; return


> Hrmm...I'll try this. But you use "or a" to check if the tile is clear.
> Does this only work for blank tiles?
>
> -}InFuZeD{
>
> On Sat, 22 Apr 2000 ComAsYuAre@aol.com wrote:
>
> >
> > In a message dated 4/22/00 11:18:16 AM Eastern Daylight Time,
> > zoneti@tinews.net writes:
> >
> > > I was looking at the tilemaps section over at 86 Central and went to
put
> > >  together a little demo for an RPG I'm working on. I needed the guy to
walk
> > >  around and stop if he hit a block. I tried ACZ's routines but
couldn't put
> > >  together a working example of how to use them. The little guy just
walks
> > >  around through the blocks :) He does however stop if you try to go
left at
> > >  the very top or bottom row of the screen as well as stopping if you
try to
> > >  go off the top or bottom of the screen. Can anyone put together an
example
> > >  for me to see how to use these routines? (http://ti86.acz.org).
Thanks.
> >
> > The trick to collision detection is the GetTile subroutine.  For
example:
> >
> > mainloop:
> >   call _getcsc
> >   dec a ;K_DOWN
> >   jr z,move_down
> >   dec a ;K_LEFT
> >   jr z,move_left
> >   dec a ;K_RIGHT
> >   jr z,move_right
> >   dec a ;K_UP
> >   jr z,move_up
> >   ;...
> >
> >
> > move_right:
> >   ld bc,(coords)
> >   inc b   ;increase x
> >   jr move_tile
> >
> > move_left:
> >   ld bc,(coords)
> >   dec b  ;decrease x
> >   jr move_tile
> >
> > move_down:
> >   ld bc,(coords)
> >   inc c  ;increase y
> >   jr move_tile
> >
> > move_up:
> >   ld bc,(coords)
> >   dec c  ;decrease y
> >
> > move_tile:
> >   bit 7,b  ;x>=128 or <0
> >   jr nz,mainloop
> >   ld a,c
> >   cp 64  ;y>=64 or <0
> >   jr nc,mainloop
> >   push bc
> >   call GetTile
> >   pop bc
> >   ld a,(hl)
> >   or a  ;check if a clear tile
> >   jr nz,mainloop
> >   ld (coords),bc  ;save new coords
> >   jr mainloop
> >
> >
> > ----
> > Jonah Cohen
> > <ComAsYuAre@aol.com>
> > http://jonah.ticalc.org
> >
>
>
>




References: