LZ: Problem with programming...
[Prev][Next][Index][Thread]
LZ: Problem with programming...
Okay, I've tinkered and have no idea as to why the following doesn't
work. PLEASE HELP! It's a Usgard program.
; REQUIRED LIBRARIES: SPRITLIB (11)
.include "usgard.h"
.include "spritlib.h"
Current = TEXT_MEM
DrawMapX = TEXT_MEM+1
DrawMapY = TEXT_MEM+2
TempMapX = TEXT_MEM+3
.org 0
.db "Map Example",0
ld hl, VIDEO_MEM
LIB_CALL_(SPRITLIB, SET_DEST) ; set Sprite Destination to Video
Mem
call CLEARLCD
ld a, 128
ld (Current), a ; we need to loop 16x8 = 128
times
ld a, 0
ld (DrawMapX), a ; we currently are on 0, 0
ld (DrawMapY), a
DrawMapLoop:
; the following code determines at what screen position to draw the
sprite
; and stores it into BC
ld a, (DrawMapX)
ld h, 8
ld l, a
call MUL_HL
ld b, l
ld a, b
ld (TempMapX), a
ld a, (DrawMapY)
ld h, 8
ld l, a
call MUL_HL
ld a, 64
sub l
ld c, a
ld a, (TempMapX)
ld b, a
; the following loads the sprite coordinates into HL so it can be
displayed
ld hl, &MapA
ld a, (Current)
ld d, a
ld a, 128
sub d
ld d, 0
ld e, a
add hl, de
ld a, (hl) ; get what the map says the value is (0,
1, 2)
ld hl, &SpriteTable
add a, a
ld d, 0
ld e, a
add hl, de ; get from the sprite table where exactly
call LD_HL_MHL ; the sprite is in our program
ld de, (PROGRAM_ADDR) ; add PROGRAM_ADDR
add hl, de
ld a, 1 ; set mode to DISPLAY
LIB_CALL_(SPRITLIB,NASRWARP) ; draw the sprite
ld a, (DrawMapX)
inc a
cp 16
call z, &UpdateMapY ; increase Y pointer if necessary
ld (DrawMapX), a ; increase X pointer
ld a, (Current)
ld b, a
dec a
ld (Current), a ; do what is necessary.
djnz DrawMapLoop
Endit:
call OTH_PAUSE
ret
UpdateMapY:
ld a, (DrawMapY)
inc a
ld (DrawMapY), a
ld a, 0
ret
SpriteTable:
.dw SpriteA, SpriteB, SpriteC
SpriteA:
.db 1,1,8
.db %00000000
.db %00000000
.db %00000000
.db %00000000
.db %00000000
.db %00000000
.db %00000000
.db %00000000
SpriteB: ; brick type 1
.db 1,1,8
.db %11111111
.db %10000001
.db %11111111
.db %00010000
.db %11111111
.db %10000001
.db %11111111
.db %00010000
SpriteC: ; closed chest
.db 1,1,8
.db %00000000
.db %00000000
.db %00000000
.db %01111100
.db %10001010
.db %11111110
.db %10001010
.db %11111110
MapA:
.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; blocks $00 - $0F
.db 1,0,0,0,0,1,0,0,0,0,2,0,0,0,0,1 ; blocks $10 - $1F
.db 1,0,0,2,0,1,0,0,0,0,0,0,0,0,0,1 ; blocks $20 - $2F
.db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ; blocks $30 - $3F
.db 1,0,0,0,0,1,0,0,0,0,0,0,2,0,0,1 ; blocks $40 - $4F
.db 1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1 ; blocks $50 - $5F
.db 1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,1 ; blocks $60 - $6F
.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; blocks $70 - $7F
.end
Follow-Ups: