.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