Public feed
#603629
.nolist
#include "includes/ion.inc"
#include "includes/ti83plus.inc"
.list
.org progstart-2
.db $BB,$6D
xor a ;should be "ret" if using Ion libs
jr nc,begin
.db "Jump!",0
playerLoc .equ appsbackupscreen
playerDelta .equ appsbackupscreen+1
score .equ appsbackupscreen+2
cntr .equ appsbackupscreen+4
lvl_cntr .equ appsbackupscreen+5
level .equ appsbackupscreen+6
height .equ appsbackupscreen+7
frame .equ appsbackupscreen+8
rTemp .equ appsbackupscreen+9
begin:
b_call(_grbufclr)
b_call(_runindicoff)
halt
halt
ld hl,0
ld (score),hl
xor a
ld (playerDelta),a
ld (lvl_cntr),a
ld (frame),a
inc a
ld (level),a
ld a,56
ld (height),a
sub 5
ld (playerLoc),a
ld a,96
ld (cntr),a
ld b,12
drawFirst:
push bc
ld a,b
add a,a
add a,a
add a,a
sub 8
ld l,56
ld ix,spr_platform
call orsprite
pop bc
djnz drawFirst
call drawPlayer
call fastCopy
gameLoop:
call drawPlayer
ld a,(frame)
add a,5
cp 40
call z,resFrame
ld (frame),a
ld a,$FE
out (1),a
nop
nop
in a,(1)
bit 3,a
call z,jump
ld a,(playerDelta)
or a
call nz,jumping
ld a,(playerLoc)
add a,5
ld e,a
ld a,9
call pixeltest
jr nz,endFall
ld a,(playerLoc)
inc a
ld (playerLoc),a
endFall:
ld a,(cntr)
dec a
cp 87
call z,newBlock
ld (cntr),a
call scrollscreen
ld a,(height)
ld l,a
ld a,(cntr)
ld ix,spr_platform
call orsprite
call drawPlayer
call fastcopy
jr gameLoop
resFrame:
xor a
ret
newBlock:
ld b,2
call random
or a
jr z,goUp
ld a,(height)
cp 56
jr z,noMove
ld b,a
ld a,(level)
add a,b
ld (height),a
jr noMove
goUp:
ld a,(height)
cp 20
jr z,noMove
ld b,a
ld a,(level)
sub b
ld (height),a
noMove:
ld a,95
ret
jumping:
ld a,(playerLoc)
dec a
dec a
ld (playerLoc),a
ld a,(playerDelta)
dec a
ld (playerDelta),a
ret
jump:
ld a,(playerLoc)
add a,5
ld e,a
ld a,9
call pixeltest
ret z
ld a,15
ld (playerDelta),a
ret
drawPlayer:
ld d,0
ld a,(frame)
ld e,a
ld hl,spr_Player_1
add hl,de
push hl
pop ix
ld a,(playerLoc)
ld l,a
ld a,7
ld b,5
call isprite
ret
scrollScreen:
ld hl,plotsscreen+767
ld b,64
ssLoop:
or a
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
rl (hl)
dec hl
djnz ssLoop
ret
pixelTest:
ld d,$00
ld h,d
ld l,e
add hl,de
add hl,de
add hl,hl
add hl,hl
ld de,plotsscreen
add hl,de
ld b,$00
ld c,a
and %00000111
srl c
srl c
srl c
add hl,bc
ld b,a
inc b
ld a,%00000001
ptLoop:
rrca
djnz ptLoop
and (hl)
or a
ret
;================== Functions exactly like iputsprite, but OR's the sprite instead ==================
orSprite:
ld b,8
ld e,l
ld h,$00
ld d,h
add hl,de
add hl,de
add hl,hl
add hl,hl ;Find the Y displacement offset
ld e,a
and $07 ;Find the bit number
ld c,a
srl e
srl e
srl e
add hl,de ;Find the X displacement offset
ld de,plotsscreen
add hl,de
orSpriteLoop1:
ld d,(ix) ;loads image byte into D
ld e,$00
ld a,c
or a
jr z,orSpriteSkip1
orSpriteLoop2:
srl d ;rotate to give out smooth moving
rr e
dec a
jr nz,orSpriteLoop2
orSpriteSkip1:
ld a,(hl)
or d
ld (hl),a
inc hl
ld a,(hl)
or e
ld (hl),a ;copy to buffer using XOR logic
ld de,$0B
add hl,de
inc ix ;Set for next byte of image
djnz orSpriteLoop1
ret
iSprite:
ld e,l
ld h,$00
ld d,h
add hl,de
add hl,de
add hl,hl
add hl,hl ;Find the Y displacement offset
ld e,a
and $07 ;Find the bit number
ld c,a
srl e
srl e
srl e
add hl,de ;Find the X displacement offset
ld de,plotsscreen
add hl,de
iSpriteLoop1:
ld d,(ix) ;loads image byte into D
ld e,$00
ld a,c
or a
jr z,iSpriteSkip1
iSpriteLoop2:
srl d ;rotate to give out smooth moving
rr e
dec a
jr nz,iSpriteLoop2
iSpriteSkip1:
ld a,(hl)
xor d
ld (hl),a
inc hl
ld a,(hl)
xor e
ld (hl),a ;copy to buffer using XOR logic
ld de,$0B
add hl,de
inc ix ;Set for next byte of image
djnz iSpriteLoop1
ret
fastCopy:
di
exx
ld a,$80 ; 7
out ($10),a ; 11
out ($20),a ; 11 Sets first two bits to zero to slow calc down if 83pse/84xx
ld hl,plotsscreen-12-(-(768)+1) ; 10
ld a,$20 ; 7
ld c,a ; 4
inc hl ; 6 waste
dec hl ; 6 waste
fastCopyAgain:
ld b,64 ; 7
inc c ; 4
ld de,-(12*64)+1 ; 10
out ($10),a ; 11
add hl,de ; 11
ld de,10 ; 10
fastCopyLoop:
add hl,de ; 11
inc hl ; 6 waste
inc hl ; 6 waste
inc de ; 6
ld a,(hl) ; 7
out ($11),a ; 11
dec de ; 6
djnz fastCopyLoop ; 13/8
ld a,c ; 4
cp $2B+1 ; 7
jr nz,fastCopyAgain ; 10/1
exx
ei
ret
random:
push hl
push de
ld hl,(rTemp)
ld a,r
ld d,a
ld e,(hl)
add hl,de
add a,l
xor h
ld (rTemp),hl
sbc hl,hl
ld e,a
ld d,h
randomLoop:
add hl,de
djnz randomLoop
ld a,h
pop de
pop hl
ret
spr_platform:
.db %11111111
.db %10101010
.db %00000000
.db %00000000
.db %00000000
.db %00000000
.db %01010101
.db %11111111
spr_player_1:
.db %01000000
.db %01100000
.db %01000000
.db %01100000
.db %10000000
spr_player_2:
.db %01000000
.db %01100000
.db %01000000
.db %01000000
.db %10100000
spr_player_3:
.db %01000000
.db %01100000
.db %01000000
.db %01000000
.db %01000000
spr_player_4:
.db %01000000
.db %01100000
.db %01000000
.db %01000000
.db %10100000
spr_player_5:
.db %01000000
.db %01100000
.db %01000000
.db %11000000
.db %00100000
spr_player_6:
.db %01000000
.db %01100000
.db %01000000
.db %01000000
.db %10100000
spr_player_7:
.db %01000000
.db %01100000
.db %01000000
.db %01000000
.db %01000000
spr_player_2:
.db %01000000
.db %01100000
.db %01000000
.db %01000000
.db %10100000
.end
.end