A83: A Little Help Plz


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

A83: A Little Help Plz




  Hey could somebody help figure out why in the hell this program
isn't working correctly??  I believe I know what is happening but I
can't figure out where, ecxept for that its in the crash routine. 
Here's what I'm doing.  I basically have a map like this.
1,1,1,1,1,1,1,1,1,1,1,1
1,0,0,0,0,0,0,0,0,0,0,1
1,0,0,0,0,0,0,0,0,0,0,1
1,0,0,0,0,0,0,0,0,0,0,1
1,0,0,0,0,0,0,0,0,0,0,1
1,0,0,0,0,2,0,0,0,0,0,1
1,0,0,0,0,0,0,0,0,0,0,1
1,1,1,1,1,1,1,1,1,1,1,1
   I have the place where you are stored in "coor" then I run through
some checks to find which direction you are going and then add or
subtract to move the "coor" on the map.  This is where you will be. 
Then I check to see if there is anything besides a 0 there and if
there is, it doesn't move you.  Seems simple but does want to work for
some reason.
   You start out on the 2nd row, 2nd col so I say you arre at 14 
(this is what you will add).  If you press down then it adds 12 to say
you are moving to 26.  It adds 26 - 1 (If you think about it, 1 should
be 0) to the map location and looks at what is there.  Then ect...
  I can't figure out what I am doing wrong but I know it is in the
crash detection because otherwise it works fine.

Jimmy




Here's the CODE!!!



.NOLIST
#define equ .equ
#define EQU .equ
#define END .end
#define	x	8265h
#define	y	8266h
#define	dir	8267h
#define	coor	8268h
#include "ti83asm.inc"
#include "tokens.inc"
.LIST
.org 9327h

	ccf	
	jr	prog_start
	.dw	$0000
	.dw	description
Description:
	.db "This Game by Jimmy Conner",0	
prog_start:
	call	_clrLCDFull 	
	call	_runIndicOff 	
	call	_grbufclr 	
	call	draw
	call	_grbufcpy_v
	jp	startup
draw:
	ld	hl, database
	dec	hl
	xor	a
	ld	(x), a 	
	ld	(y), a
nextcol:
	inc	hl
	ld	a, (hl)
	cp	0
	call	z, loadblank
	cp	1
	call	z, loadmountain
	cp	2
	call	z, loadhouse
	push	hl
	ld	a, (y)
	ld	e, a
	ld	a, (x)
	call	sprxor
	pop	hl
	ld	a, (x)
	add	a, 8
	ld	(x), a
	cp	96
	jp	nz, nextcol
nextrow:
	xor	a
	ld	(x), a
	ld	a, (y)
	add	a, 8
	ld	(y), a
	cp	64
	jp	nz, nextcol
	ret
loadblank:
	ld	bc, blank
	ret
loadmountain:
	ld	bc, Mountain
	ret
loadhouse:
	ld	bc, house
	ret
delay:
	ld 	bc, 0FFFFh		; Delay length->bc
delayLoop:
	dec	bc			; bc-1->bc
	ld 	a, b			; Find where it is at
	or 	c			; ''     ''   ' '   '
	jr	nz, delayLoop		; If not done reloop
	ret				; Return the call
startup:

	ld	a, 14
	ld	(coor), a
	ld	a, 8 		;Initial X & Y coords of mouse.
	ld	(x), a 	
	ld 	a, 8
	ld	(y), a

moveloop:
	call	delay
	call	delay
	call	putmse 		;Call putmse
	call	_grbufcpy_v
	jp	getky
getky: 				;routine getkey
	ld	a, 0ffh
	out	(1), a
	ld	a, 0feh
	out	(1), a
	in	a, (1)
	cp	253 		;If key Left. NOTE: I didn't bother
	jp	z, left 		;Goto Left	     with key equates.
	cp	251 		;If key right...
	jp	z, right 		;Goto Right
	cp	254 		;If key Up...
	jp	z, up 		;Goto up
	cp	247 		;If key down...
	jp	z, down 		;Goto Down
	ld	a, 0ffh
	out	(1), a 
	ld	a, 0fdh
	out	(1), a
	in	a, (1)
	cp	191 		;If the key clear...
	jp	z, quit 		;...quit.
	jp	getky 		;Repeat.

left:
	call	putmse
	xor	a
	ld	(dir), a
	ld	a, (x) 	;Load XCoord Variable into A
	add	a, -8		;Decrease A
	cp	-8
	jp	z, moveloop
	call	crashdetection
	ld	(x), a 	;Load back into mse_x
	ld	a, (coor)
	dec	a
	ld	(coor), a
	jp	moveloop 	;goto moveloop
up: 
	call	putmse
	ld	a, 1
	ld	(dir), a
	ld	a, (y) 	;Load YCoord Variable into A
	add	a, 8 		;Increase A
	cp	64
	jp	z, moveloop
	call	crashdetection
	ld	(y), a 	;Load back into mse_y
	ld	a, (coor)
	add	a, -12
	ld	(coor), a
	jp	moveloop 	;goto moveloop
right:          
	call putmse 
	ld	a, 2
	ld	(dir), a
	ld	a, (x) 	;Load XCoord Variable into A
	add	a, 8 		;Increase A
	cp	96
	jp	z, moveloop
	call	crashdetection
	ld	(x), a 	;Load back into mse_x
	ld	a, (coor)
	inc	a
	ld	(coor), a
	jp	moveloop 	;goto moveloop
down:          
	call	putmse
	ld	a, 3
	ld	(dir), a
	ld	a, (y) 	;Load YCoord Variable into A
	add	a, -8
	cp	-8
	jp	z, moveloop
	call	crashdetection
	ld	(y), a 	;Load back into mse_y
	ld	a, (coor)
	add	a, 12
	ld	(coor), a
	jp	moveloop 	;goto moveloop



===========  Bug Some Where In Here ==============

crashdetection:
	push	af
	ld	a, (coor)
	ld	c, a
	ld	a, (dir) ; Direction you are going
	cp      0
	call	z, checkleft
	cp	1
	call	z, checkup
	cp	2
	call	z, checkright
	cp	3
	call	z, checkdown
	ld	hl, database ; My Map
	xor	b
	add	hl, bc
	ld	a, (hl)      ; New Location
	cp	1
	jp	z, moveloop
	cp	2
	jp	z, moveloop
	pop	af
	ret

checkleft:
	dec	c
	ret
checkup:
	ld	a, -12
	add	a, c
	ld	c, a
	ret
checkright:
	inc	c
	ret
checkdown:
	ld	a, 12
	add	a, c
	ld	c, a
	ret

putmse:
	ld	a, (y)
	ld	e, a
	ld	a, (x)
	ld	bc, man 	;Load sprite name to bc
	call	SPRXOR 	;Call movax' Sprite Routine 
	ret

quit:
	call	_clrLCDFull
	call	_grbufclr
	ret

man:		
 	.db %11111111
 	.db %11111111
 	.db %11111111
 	.db %11111111
 	.db %11111111
 	.db %11111111
 	.db %11111111
 	.db %11111111


Blank:
 	.db %00000000
 	.db %00000000
 	.db %00000000
	.db %00000000
 	.db %00000000
 	.db %00000000
 	.db %00000000
 	.db %00000000
House:
 	.db %00011000
 	.db %00100100
 	.db %01000010
	.db %10000001
 	.db %10011001
 	.db %10011001
 	.db %10011001
 	.db %11111111
Mountain:
 	.db %00100000
 	.db %01010000
 	.db %10001000
	.db %00000101
 	.db %01000010
 	.db %10100100
 	.db %00011001
 	.db %00010010


database:
 	.db	1,1,1,1,1,1,1,1,1,1,1,1
 	.db 	1,0,0,0,0,0,0,0,0,0,0,1
 	.db 	1,0,0,0,0,0,0,0,0,0,0,1
 	.db 	1,0,0,0,0,0,0,0,0,0,0,1
 	.db 	1,0,0,0,0,0,0,0,0,0,0,1
 	.db 	1,0,0,0,0,2,0,0,0,0,0,1
 	.db 	1,0,0,0,0,0,0,0,0,0,0,1
 	.db	1,1,1,1,1,1,1,1,1,1,1,1





; Xor 8x8 sprite þ a=x, e=y, bc=sprite address
SPRXOR:
        push    bc              ; Save sprite address

;====   Calculate the address in graphbuf   ====

        ld      hl,0            ; Do y*12
        ld      d,0
        add     hl,de
        add     hl,de
        add     hl,de

        add     hl,hl
        add     hl,hl

        ld      d,0             ; Do x/8
        ld      e,a
        srl     e
        srl     e
        srl     e
        add     hl,de

        ld      de,8e29h
        add     hl,de           ; Add address to graphbuf

        ld      b,00000111b     ; Get the remainder of x/8
        and     b
        cp      0               ; Is this sprite aligned to 8*n,y?
        jp      z,ALIGN


;====   Non aligned sprite blit starts here   ====

        pop     ix              ; ix->sprite
        ld      d,a             ; d=how many bits to shift each line

        ld      e,8             ; Line loop
LILOP:  ld      b,(ix+0)        ; Get sprite data

        ld      c,0             ; Shift loop
        push    de
SHLOP:  srl     b
        rr      c
        dec     d
        jp      nz,SHLOP
        pop     de

        ld      a,b             ; Write line to graphbuf
        xor     (hl)
        ld      (hl),a

        inc     hl
        ld      a,c
        xor     (hl)
        ld      (hl),a

        ld      bc,11           ; Calculate next line address
        add     hl,bc
        inc     ix              ; Inc spritepointer

        dec     e
        jp      nz,LILOP        ; Next line

        jp      DONE1


;====   Aligned sprite blit starts here   ====

ALIGN:                          ; Blit an aligned sprite to graphbuf
        pop     de              ; de->sprite

        ld      b,8
ALOP1:  ld      a,(de)
        xor     (hl)
        ld      (hl),a
        inc     de
        push    bc
        ld      bc,12
        add     hl,bc
        pop     bc
        djnz    ALOP1

DONE1:
        ret

;  »»»»»»»»»»»»»»»»»»»»»»»»»»»»» END SPRITE ROUNTINE
««««««««««««««««««««««««««««««««««««

.end
END





_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com