From 16e5be960f2d48c01705aab04b85cf8e27cb212d Mon Sep 17 00:00:00 2001 From: Pecusx Date: Mon, 12 Aug 2024 15:20:21 +0200 Subject: [PATCH] Left game ready! --- dino.asm | 277 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- dino.xex | Bin 6003 -> 6694 bytes 2 files changed, 275 insertions(+), 2 deletions(-) diff --git a/dino.asm b/dino.asm index 429974c..07eeccb 100644 --- a/dino.asm +++ b/dino.asm @@ -12,6 +12,7 @@ swap_table=$0600 ; table for swap bytes in left characters :) ; Zpage variables .zpvar temp_w .word = $80 .zpvar temp_b .byte + .zpvar temp_b2 .byte .zpvar DinoWalkPhase .byte .zpvar DinoState .byte ; 0/1 - walk, 2/3 - crouch, 4... - jump .zpvar JumpPhase .byte @@ -85,15 +86,19 @@ FirstSTART jsr FadeColors NewGame jsr SetStart -EndLoop jsr GameR key jsr HiScoreR + jsr SetStart + jsr GameL + key + jsr HiScoreL jmp NewGame rts ;----------------------------------------------- .proc GameR +EndLoopR ;lda #$32 ;sta COLBAK jsr WorldToScreen @@ -117,11 +122,41 @@ EndLoop mva #>font1 chbas waitRTC ; or waitRTC ? mva #4 hscrol - jmp EndLoop + jmp EndLoopR EndGame rts .endp ;----------------------------------------------- +.proc GameL +EndLoopL + ;lda #$32 + ;sta COLBAK + jsr WorldToScreenL + jsr ShowDinoL + lda Hit + bne EndGameL + ;lda #$5f + ;sta COLBAK + jsr CheckJoy + mva #>font2l chbas + waitRTC ; or waitRTC ? + mva #2 hscrol + mva #>font3l chbas + waitRTC ; or waitRTC ? + mva #3 hscrol + jsr WorldShift ; better place (flickering) + mva #>font4l chbas + waitRTC ; or waitRTC ? + mva #4 hscrol + jsr Animate + mva #>font1l chbas + waitRTC ; or waitRTC ? + mva #1 hscrol + jmp EndLoopL +EndGameL + rts +.endp +;----------------------------------------------- ; Generation of character sets 2,3 and 4 of 1 ; By copying and horizontal shift dino ;----------------------------------------------- @@ -256,6 +291,27 @@ NothingToDraw rts .endp ;----------------------------------------------- +.proc WorldToScreenL + jsr ClearScreen + ldx #0 ; start position (world) + stx temp_b + lda #40 ; start position (screen) + sta temp_b2 +ToScreenLoop + lda WorldTable,x + bmi NothingToDraw + tay + ldx temp_b2 + jsr ShowObjectL +NothingToDraw + dec temp_b2 + inc temp_b + ldx temp_b + cpx #WORLD_LENGTH + bne ToScreenLoop + rts +.endp +;----------------------------------------------- .proc WorldShift jsr ScoreUp ldy #0 @@ -402,6 +458,39 @@ ObjectLoop rts .endp ;----------------------------------------------- +; Show Object on screen (left) +; X - y position +; Y - shape nr +;----------------------------------------------- +.proc ShowObjectL + lda ShapesTableL,y + sta temp_w + lda ShapesTableH,y + sta temp_w+1 + ldy #1 ; object widrh-1 +ObjectLoop + lda (temp_w),y + bmi @+ + sta screen+$400,x +@ adw temp_w #2 + lda (temp_w),y + bmi @+ + sta screen+$500,x +@ adw temp_w #2 + lda (temp_w),y + bmi @+ + sta screen+$600,x +@ adw temp_w #2 + lda (temp_w),y + bmi @+ + sta screen+$700,x +@ sbw temp_w #6 + inx + dey + bpl ObjectLoop + rts +.endp +;----------------------------------------------- ; Show Dino on screen and check collisions ;----------------------------------------------- .proc ShowDino @@ -591,6 +680,190 @@ DinoLoop4 rts .endp ;----------------------------------------------- +; Show Dino (left) on screen and check collisions +;----------------------------------------------- +.proc ShowDinoL + ldx #36 ; position + lda DinoState + ora DinoWalkPhase ; shape + tay + lda DinoShapesTableL,y + sta temp_w + lda DinoShapesTableH,y + sta temp_w+1 + cpy #4 ; jump + beq Jump + cpy #5 ; jump + beq Jump + ldy #4 ;dino width-1 +DinoLoop + lda (temp_w),y + bmi @+ + lda screen+$500,x + beq NotHit0b + lda #$5b ; hit mark + sta Hit + bne Hit0b +NotHit0b + lda (temp_w),y +Hit0b + sta screen+$500,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + lda screen+$600,x + beq NotHit0c + lda #$5b ; hit mark + sta Hit + bne Hit0c +NotHit0c + lda (temp_w),y +Hit0c + sta screen+$600,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + sta screen+$700,x +@ sbw temp_w #10 + inx + dey + bpl DinoLoop + rts +Jump + ldy JumpPhase + lda DinoJumpTr,y + cmp #2 + jeq jPhase2 + cmp #3 + jeq jPhase3 + cmp #4 + jeq jPhase4 +jPhase1 + ldy #4 ; dinowidth-1 +DinoLoop1 + lda (temp_w),y + bmi @+ + lda screen+$400,x ; check obstacle + beq NotHit1a + lda #$5b ; make hit mark + sta Hit + bne Hit1a +NotHit1a + lda (temp_w),y +Hit1a + sta screen+$400,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + lda screen+$500,x ; check obstacle + beq NotHit1b + lda #$5b ; make hit mark + sta Hit + bne Hit1b +NotHit1b + lda (temp_w),y +Hit1b + sta screen+$500,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + lda screen+$600,x ; check obstacle + beq NotHit1c + lda #$5b ; make hit mark + sta Hit + bne Hit1c +NotHit1c + lda (temp_w),y +Hit1c + sta screen+$600,x +@ sbw temp_w #10 + inx + dey + bpl DinoLoop1 + rts +jPhase2 + ldy #4 ; dino width-1 +DinoLoop2 + lda (temp_w),y + bmi @+ + sta screen+$300,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + lda screen+$400,x ; check obstacle + beq NotHit2a + lda #$5b ; make hit mark + sta Hit + bne Hit2a +NotHit2a + lda (temp_w),y +Hit2a + sta screen+$400,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + lda screen+$500,x ; check obstacle + beq NotHit2b + lda #$5b ; make hit mark + sta Hit + bne Hit2b +NotHit2b + lda (temp_w),y +Hit2b + sta screen+$500,x +@ sbw temp_w #10 + inx + dey + bpl DinoLoop2 + rts +jPhase3 + ldy #4 ; dinowidth-1 +DinoLoop3 + lda (temp_w),y + bmi @+ + sta screen+$200,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + sta screen+$300,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + lda screen+$400,x ; check obstacle + beq NotHit3a + lda #$5b ; make hit mark + sta Hit + bne Hit3a +NotHit3a + lda (temp_w),y +Hit3a + sta screen+$400,x +@ sbw temp_w #10 + inx + dey + bpl DinoLoop3 + rts +jPhase4 + ldy #4 ; dino width-1 +DinoLoop4 + lda (temp_w),y + bmi @+ + sta screen+$100,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + sta screen+$200,x +@ adw temp_w #5 + lda (temp_w),y + bmi @+ + sta screen+$300,x +@ sbw temp_w #10 + inx + dey + bpl DinoLoop4 + rts +.endp +;----------------------------------------------- .proc CheckJoy lda DinoState cmp #4 ; jump state diff --git a/dino.xex b/dino.xex index f8dc91bdd3b653a4513a93b87641fc0a62bd097e..f455955a61b1b577425d4e923d3300bc006018d3 100644 GIT binary patch delta 942 zcmeyYx6EXNh5*ycz{y$yQ@tBK6&?gA91Kuk3{bf2;jxzgk|xWCpJ3|3&kO}cu!NQ; zhD2e2&s>iLg*Gn*9iOG`7km^>_)q>QpjdyvYo$)_7pA2mM@2sTS;^STaz(+_d!+(G zhy^I*a~Y_0zL&y(U#QlVCI|&gKm{u;5PW8k89-xg5JDg`K*ky%gg`d=XnAh75@cr# z&-7Zv(AKm!#KVAPg+hh*v!-QD4;(JMPf&nJtkh_221&B5Sk|m?+51>CRKe>61y=6` z3_C+TW`=m2IADL_>q-V7Yu&5Bl@1nvZv{>+7gAw*6*zgWP^5B;Cu3{N($}tVwP6C&vqp%t z8$^2YW?>!Gww&qX5K7pY)6HX7*I@C7U+I#yMyLtst95~z!dz%F+52fMi2A7&boi!BMc7!p2i z7E2pma?LqC;SQ!UC4bv0zUCy&?rO169!)kfLoO1~6$CROy`{X(mx~whn<~ z2}@fiJBq5ywI-}&X>A3?al%R_U^FYlc>y^st*yPU0$bZRw}~1u@~{Xi8Gij52m}EE zlMjm(IQaO4BVyy?#h5(b9|70zJsYZgH3c7v@e0~akz6!fMJl67G(q#GY6HHzBnW2#9>oeCQ zK|#z*!O44R+XWv5QQyg2f{GgYUMqEazc4KoIV$qu&q~H#mMaQdyjCh8gjj$=J_|fH zuM%WuH2dkfh@q`%Z-|Eh%L;|(UeB7AH9c^+@IFDI#A^Y=&QOn;As#0V*kAa%k^#tC zXYRk!!Q!vF|6~qf6()24$$G+(%FUjPt<6hYPO@C!U)p+-{R8u})`XP|t*xys2|GFc zTN`#t_)lIX9IUa3b!iK0^NO9len7FweyxoMSU$uaVEquefMH{Ufxun{*AHwfqg&f1 z2a3rtwoNV&Q`I?ffc3(vge9#zE&NY1eJDA}e1X}g%Lix^v(Ggjm^K%vw*6pj5Y0NG zmOvvQBCVp{K=wt^2&SbilfQ_o%e5q|WNB>yIWb`+6VR0k?>vE==GK;8bN|-1&6W~| zj68t}`E^cCeqb=UOtQdX=FEjVS03DW^5V^hFF*cdgvh{1e-U9JK>>a~ULI~PP7Zc9 YRttZ7e?}%|78YhE#s^FfnWlIE0QE7r(f|Me