.nolist #include "ion.inc" .list .org progstart-2 .db $BB,$6D ret jr nc, TitleScreen .db "TI-Sk8brd",0 TitleScreen: call DrawTitle ld hl, HighScoreStr ld de, 56*256+40 ld (pencol), de bcall(_vputs) ld hl, (HighScore+1) bcall(_setxxxxop2) bcall(_op2toop1) ld a, 5 bcall(_dispop1a) xor a TitleChoices: ld de, 20*256+8 ld (pencol), de cp 0 jr nz, TitleCoices2 set textinverse, (iy+textflags) TitleCoices2: ld hl, FreeSkateStr bcall(_vputs) res textinverse, (iy+textflags) ld de, 28*256+8 ld (pencol), de cp 1 jr nz, TitleChoices3 set textinverse, (iy+textflags) TitleChoices3: bcall(_vputs) res textinverse, (iy+textflags) ld de, 36*256+8 ld (pencol), de cp 2 jr nz, TitleChoices4 set textinverse, (iy+textflags) TitleChoices4: bcall(_vputs) res textinverse, (iy+textflags) ld de, 44*256+8 ld (pencol), de cp 3 jr nz, TitleChoices5 set textinverse, (iy+textflags) TitleChoices5: bcall(_vputs) res textinverse, (iy+textflags) MenuGetKey: push af bcall(_getcsc) cp 01h jr z, MenuDown cp 04h jr z, MenuUp cp 36h jr z, MenuSelect cp 09h jr z, MenuSelect pop af jr MenuGetKey MenuUp: pop af dec a and 00000011b jp TitleChoices MenuDown: pop af inc a and 00000011b jp TitleChoices MenuSelect: pop af cp 0 jr z, Start cp 1 jr z, BeginTrnmt cp 2 jp z, Controls jp Done BeginTrnmt: call DrawTitle ld de, 28*256+10 ld (pencol), de ld hl, TrnmtIntro1 bcall(_vputs) ld de, 36*256+11 ld (pencol), de ld hl, TrnmtIntro2 bcall(_vputs) ld de, 44*256+30 ld (pencol), de ld hl, TrnmtIntro3 bcall(_vputs) call WaitKey ld a, 1 Start: ld (GameType), a xor a ld b, 23 ld hl, x LoadLoop: ld (hl), a inc hl djnz LoadLoop ld a, 20 ld (y), a ld hl, 100*16 ld (Timer), hl DrawMap: bcall(_grbufclr) ld de, map1 ld l, 0 ld h, l DrawMapLoop: ld a, (de) sla a sla a sla a ld c, a ld b, 0 ld ix, tiles add ix, bc push hl push de ld b, 8 ld a, h call ionputsprite pop de pop hl inc de ld a, h add a, 8 ld h, a cp 96 jr nz, DrawMapLoop ld h, 0 ld a, l add a, 8 ld l, a cp 64 jr nz, DrawMapLoop ld ix, Title ld l, 0 ld a, 16 ld bc, 11*256+8 call ionlargesprite DrawPlayer: DrawPower: ld hl, PowerBar ld de, plotsscreen+709 ld bc, 3 ldir dec de ld a, (de) or 00000001b ld (de), a ld hl, PowerBar ld de, plotsscreen+721 ld bc, 3 ldir dec de ld a, (de) or 00000001b ld (de), a call DrawPlayer2 call ionfastcopy call DrawPlayer2 ld hl, (score) bcall(_setxxxxop2) bcall(_op2toop1) ld de, 57*256+67 ld (pencol), de ld a, 5 bcall(_dispop1a) ld a, (GameType) cp 1 jr nz, Pause ld hl, (Timer) dec hl ld (Timer), hl srl h rr l srl h rr l srl h rr l srl h rr l ld a, l bcall(_setxxop1) ld de, 57*256+50 ld (pencol), de ld a, 3 bcall(_dispop1a) ld hl, (timer) ld a, h or l jp z, FlashScreen jr Pause2 Pause: halt Pause2: halt halt halt ld a, (Crash) cp 0 jp z, CheckRDive inc a ld (Crash), a cp 20 jp z, CrashDone add a, 2 ld c, a sra a inc a ld b, a CrashPauseLoop: halt djnz CrashPauseLoop ld b, 0 ld hl, DiveTableY add hl, bc ld a, (hl) ld (y), a ld hl, DiveTableX ld a, (x) cp 48 jr nc, CrashLeft add hl, bc ld a, (hl) ld (x), a ld a, 192 ld (angle), a jp DrawPlayer CrashDone: ld a, (GameType) cp 0 jp z, Start jp TitleScreen CrashLeft: ld hl, 42 sbc hl, bc ld c, l ld b, h ld hl, DiveTableX add hl, bc ld a, (hl) ld (x), a ld a, 216 ld (angle), a jp DrawPlayer CheckRDive: ld a, (Fall) cp 0 jp nz, Fall2 ld a, (Rdive) cp 0 jr z, CheckLDive ld c, a ld b, 0 inc a ld (Rdive), a cp 41 jp nc, Jump ld hl, DiveTableY add hl, bc ld a, (hl) ld (y), a ld hl, DiveTableX add hl, bc ld a, (hl) ld (x), a ld hl, DiveTable2 add hl, bc ld a, (hl) ld (angle), a jr InputH CheckLDive: ld a, (Fall) cp 0 jp nz, Fall2 ld a, (LDive) cp 0 jp z, GetKey dec a ld (LDive), a cp 62 jp c, Jump dec a ld c, 59 sub c ld c, a ld b, 0 ld hl, DiveTableY add hl, bc ld a, (hl) ld (y), a ld hl, DiveTableX add hl, bc ld a, (hl) ld (x), a ld hl, 41 sbc hl, bc ld c, l ld b, h ld hl, DiveTable2 add hl, bc ld a, (hl) ld (angle), a InputH: ld b, $BF call DirectInput bit 6, a jp z, TitleScreen bit 5, a jr z, IncPower ld a, (Power) cp 0 call nz, DecPower jp DrawPlayer IncPower: ld a, (Power) cp 19 jp z, DrawPlayer inc a ld (Power), a ld hl, PowerBar srl (hl) set 7, (hl) inc hl rr (hl) inc hl rr (hl) jp DrawPlayer GetKey: ld b, $BF call DirectInput bit 6, a jp z, TitleScreen ld a, $FE out (1), a in a, (1) bit 1, a ; [(left)] jr z, MoveLeft bit 2, a ; [(right)] jr z, MoveRight jp DrawPlayer MoveRight: xor a ld (dir), a ld a, (x) inc a ld (x), a cp 8 jp z, StartDive jp DrawPlayer MoveLeft: ld a, 1 ld (dir), a ld a, (x) cp 0 jp z, DrawPlayer dec a ld (x), a jp DrawPlayer StartDive: ld a, 1 ld (Rdive), a jp DrawPlayer Jump: ld a, (Power) cp 0 jp z, StartFall ld b, a ld a, 19 sub b ld e, a ld d, 0 ld hl, JumpTable add hl, de ld a, (hl) ld e, a ld a, (y) add a, e ld (y), a ld a, b call DecPower ld a, (JumpCnt) inc a ld (JumpCnt), a jr TrickH StartFall: ld a, (dir) xor 00000001b ld (dir), a ld a, 1 ld (Fall), a ld a, (angle) ld b, a ld a, 192 sub b cp 192 call z, ResAngle0 ld (angle), a jp DrawPlayer Fall2: ld a, (JumpCnt) ld b, a ld a, (FallCnt) cp b jp z, ClearFall inc a ld (FallCnt), a ld b, a ld a, 20 sub b ld c, a ld b, 0 ld hl, JumpTable add hl, bc ld a, (hl) ld b, a ld a, (y) sub b ld (y), a TrickH: ld b, $FE call DirectInput bit 1, a call z, Spinner bit 2, a call z, Spinner bit 3, a jr z, FrontFlip bit 0, a jr z, BackFlip TrickRet: ld a, (Power) cp 0 jr z, TrickRet2 ld b, a ld a, $BF out (1), a in a, (1) bit 5, a ld a, b call z, DecPower TrickRet2: ld a, $DF out (1), a in a, (1) bit 7, a jp z, Grab jp ResGrab Spinner: ld d, a ld a, (SpinCnt) inc a ld (SpinCnt), a srl a ld a, d ret c ld a, (TempScore) add a, 2 ld (TempScore), a ld a, (dir) add a, 2 ld c, a cp 4 call nc, DirMod ld (dir), a ld a, d ret FrontFlip: ld a, (x) cp 48 jr nc, FFR ld a, (dir) and 00000001b cp 0 jr nz, FrontFlip2 jr BackFlip2 FFR: ld a, (dir) and 00000001b cp 0 jr nz, BackFlip2 FrontFlip2: ld a, (angle) add a, 24 cp 192 call z, ResAngle0 ld (angle), a ld a, (TempScore) add a, 3 ld (TempScore), a jr TrickRet BackFlip: ld a, (x) cp 48 jr nc, BFR ld a, (dir) and 00000001b cp 0 jr z, FrontFlip2 jr BackFlip2 BFR: ld a, (dir) and 00000001b cp 0 jr nz, FrontFlip2 BackFlip2: ld a, (angle) sub 24 cp -24 call z, ResAngle168 ld (angle), a ld a, (TempScore) add a, 3 ld (TempScore), a jp TrickRet Grab: ld a, (TempScore) add a, 2 ld (TempScore), a ld a, (dir) cp 2 jp nc, DrawPlayer add a, 4 ld (dir), a jp DrawPlayer ResGrab: ld a, (dir) cp 4 jp c, DrawPlayer sub 4 ld (dir), a jp DrawPlayer ClearFall: ld a, (dir) cp 2 jp nc, StartCrash ld a, (x) cp 48 ld a, (dir) jr c, CheckFallLeft cp 1 jr z, CheckFall2 CheckFall3: ; } If Player and Direction aren't aligned ld a, (angle) ; dec a ; cp 142 ; jr c, StartCrash ld a, (dir) xor 00000001b ld (dir), a jr FinishChecks CheckFall2: ld a, (angle) cp 70 jr nc, StartCrash FinishChecks: ld a, (TempScore) cp 150 call nc, NewStar ld hl, score add a, (hl) ld (hl), a ld a, 0 inc hl adc a, (hl) ld (hl), a inc hl ld b, 5 FCLL: ld (hl), 0 inc hl djnz FCLL ld a, (x) cp 48 jr c, ClearL ClearR: ld hl, RDive ld (hl), 0 inc hl ld (hl), 100 jp DrawPlayer ClearL: ld hl, RDive ld (hl), 3 inc hl ld (hl), 0 jp DrawPlayer CheckFallLeft: cp 1 jp z, CheckFall3 jp CheckFall2 NewStar: push af ld l, 14 ld a, (stars) inc a ld (stars), a sla a sla a sla a add a, 24 ld ix, star ld b, 4 call ionputsprite pop af add a, 50 ret StartCrash: xor a ld (TempScore), a ld a, 5 ld (dir), a ld hl, stars ld (hl), 0 inc hl ld (hl), 1 inc hl ld a, (hl) cp 1 call z, CheckScore jp DrawPlayer MultAngle: ld c, a sla a add a, c sla a sla a sla a sla a ld l, a ld h, 0 add hl, hl add hl, hl ret ResAngle0: xor a ret ResAngle168: ld a, 168 ret DirMod: cp 6 jr nc, DirMod2 ld a, (angle) ld b, a ld a, 192 sub b cp 192 call z, ResAngle0 ld (angle), a ld a, c xor 00000101b ret DirMod2: sub 4 ret DecPower: dec a ld (Power), a ld hl, PowerBar+2 rl (hl) res 0, (hl) dec hl rl (hl) dec hl rl (hl) ret DrawTitle: bcall(_grbufclr) ld l, 0 ld a, 16 ld bc, 11*256+8 ld ix, Title call ionlargesprite ld a, 1 ld l, 0 ld bc, 12*256+2 ld ix, Player+24 call ionlargesprite ld ix, Player+1008 ld l, 1 ld a, 83 ld bc, 12*256+2 call ionlargesprite ld ix, tiles+26 ld l, 12 xor a ld bc, 1*256+12 call ionlargesprite call ionfastcopy ld de, 16*256+64 ld (pencol), de ld hl, Author bcall(_vputs) ret Controls: call DrawTitle ld de, 20*256+8 ld (pencol), de ld hl, SecondStr bcall(_vputs) ld de, 28*256+8 ld (pencol), de bcall(_vputs) ld de, 36*256+8 ld (pencol), de bcall(_vputs) ld de, 44*256+8 ld (pencol), de bcall(_vputs) call WaitKey jp TitleScreen WaitKey: bcall(_getcsc) cp 0 jr z, WaitKey ret FlashScreen: ld b, 8 FlashScreen2: push bc ld hl, plotsscreen ld bc, 768 FlashLoop: ld a, (hl) xor 11111111b ld (hl), a inc hl dec bc ld a, c cp 0 jr nz, FlashLoop ld a, b cp 0 jr nz, FlashLoop bcall(_grbufcpy) ld b, 10 Delay: halt djnz Delay pop bc djnz FlashScreen2 call CheckScore jp TitleScreen CheckScore: ld hl, (HighScore+1) ld c, l ld b, h ld hl, (Score) sbc hl, bc ret c NewHigh: add hl, bc ld (HighScore+1), hl ret DirectInput: ei ld a, $FF out (1), a ld a, b out (1), a in a, (1) ret DrawPlayer2: ld a, (dir) call MultAngle ld a, (angle) ld c, a ld b, 0 add hl, bc ld c, l ld b, h ld ix, player add ix, bc ld a, (y) ld l, a ld a, (x) ld bc, 12*256+2 call ionlargesprite Done: ret #include "sk8data.z80" .end END