From df22998c1264b6444a3b4d1839784714cbe0a7b7 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Sun, 11 Aug 2024 13:16:47 +0200 Subject: [PATCH] Inputs test --- dino.asm | 21 ++ dino.lab | 103 +++---- dino.lst | 795 ++++++++++++++++++++++++++++--------------------------- dino.xex | Bin 5064 -> 5096 bytes 4 files changed, 482 insertions(+), 437 deletions(-) diff --git a/dino.asm b/dino.asm index cdbf3c4..f5d2afa 100644 --- a/dino.asm +++ b/dino.asm @@ -92,6 +92,7 @@ FirstSTART EndLoop jsr WorldShift jsr WorldToScreen + jsr CheckJoy ldx #5 ; position lda DinoState ora DinoWalkPhase ; shape @@ -319,6 +320,26 @@ DinoLoop rts .endp ;----------------------------------------------- +.proc CheckJoy + lda STICK0 + and #%00000010 ; down + beq Down + lda STICK0 + and #%00000001 ; up + beq Up + ; no change state (temporary set to 0) + lda #0 + sta DinoState + rts +Up lda #4 + sta DinoState + rts +Down + lda #2 + sta DinoState + rts +.endp +;----------------------------------------------- .proc SetStart jsr ClearWorld lda #0 diff --git a/dino.lab b/dino.lab index fd6803a..c36117f 100644 --- a/dino.lab +++ b/dino.lab @@ -597,53 +597,56 @@ FFFD 0000 @KBCODE 00 3825 WORLDTABLE 00 3865 FIRSTSTART 00 38AA ENDLOOP -00 3924 GENERATECHARSETS -00 3926 GENERATECHARSETS.COPYLOOP -00 394E CLEARWORLD -00 3952 CLEARWORLD.0@ -00 3959 CLEARSCREEN -00 395D CLEARSCREEN.CLEARLOOP -00 3970 WORLDTOSCREEN -00 3977 WORLDTOSCREEN.TOSCREENLOOP -00 3980 WORLDTOSCREEN.NOTHINGTODRAW -00 3989 WORLDSHIFT -00 398B WORLDSHIFT.SHIFT -00 39A5 WORLDSHIFT.1@ -00 39AF WORLDSHIFT.INSERTOBJECT -00 39C3 WORLDSHIFT.NOINSERT -00 39C4 ANIMATEBIRDS -00 39C6 ANIMATEBIRDS.2@ -00 39D8 ANIMATEBIRDS.NOBIRD -00 39E2 SHOWOBJECT -00 39EE SHOWOBJECT.OBJECTLOOP -00 39F5 SHOWOBJECT.3@ -00 3A07 SHOWOBJECT.4@ -00 3A19 SHOWOBJECT.5@ -00 3A2B SHOWOBJECT.6@ -00 3A3D SHOWDINO -00 3A49 SHOWDINO.DINOLOOP -00 3A50 SHOWDINO.7@ -00 3A62 SHOWDINO.8@ -00 3A74 SHOWDINO.9@ -00 3A86 SHOWDINO.10@ -00 3A98 SETSTART -00 3AA4 SETGAMESCREEN -00 3AB9 DINO_RUN_0 -00 3ACD DINO_RUN_1 -00 3AE1 DINO_RUN_2 -00 3AF5 DINO_CROUCH_1 -00 3B09 DINO_CROUCH_2 -00 3B1D DINOSHAPESTABLEL -00 3B22 DINOSHAPESTABLEH -00 3B27 GROUND_0 -00 3B2F BIRD_0 -00 3B37 BIRD_1 -00 3B3F BIRD_2 -00 3B47 BIRD_0A -00 3B4F BIRD_1A -00 3B57 BIRD_2A -00 3B5F CACTUS_0 -00 3B67 SHAPESTABLEL -00 3B70 SHAPESTABLEH -00 3B79 DIFF_OBJECT_GAP -00 3B89 DIFF_LEVEL +00 3927 GENERATECHARSETS +00 3929 GENERATECHARSETS.COPYLOOP +00 3951 CLEARWORLD +00 3955 CLEARWORLD.0@ +00 395C CLEARSCREEN +00 3960 CLEARSCREEN.CLEARLOOP +00 3973 WORLDTOSCREEN +00 397A WORLDTOSCREEN.TOSCREENLOOP +00 3983 WORLDTOSCREEN.NOTHINGTODRAW +00 398C WORLDSHIFT +00 398E WORLDSHIFT.SHIFT +00 39A8 WORLDSHIFT.1@ +00 39B2 WORLDSHIFT.INSERTOBJECT +00 39C6 WORLDSHIFT.NOINSERT +00 39C7 ANIMATEBIRDS +00 39C9 ANIMATEBIRDS.2@ +00 39DB ANIMATEBIRDS.NOBIRD +00 39E5 SHOWOBJECT +00 39F1 SHOWOBJECT.OBJECTLOOP +00 39F8 SHOWOBJECT.3@ +00 3A0A SHOWOBJECT.4@ +00 3A1C SHOWOBJECT.5@ +00 3A2E SHOWOBJECT.6@ +00 3A40 SHOWDINO +00 3A4C SHOWDINO.DINOLOOP +00 3A53 SHOWDINO.7@ +00 3A65 SHOWDINO.8@ +00 3A77 SHOWDINO.9@ +00 3A89 SHOWDINO.10@ +00 3A9B CHECKJOY +00 3AAE CHECKJOY.UP +00 3AB3 CHECKJOY.DOWN +00 3AB8 SETSTART +00 3AC4 SETGAMESCREEN +00 3AD9 DINO_RUN_0 +00 3AED DINO_RUN_1 +00 3B01 DINO_RUN_2 +00 3B15 DINO_CROUCH_1 +00 3B29 DINO_CROUCH_2 +00 3B3D DINOSHAPESTABLEL +00 3B42 DINOSHAPESTABLEH +00 3B47 GROUND_0 +00 3B4F BIRD_0 +00 3B57 BIRD_1 +00 3B5F BIRD_2 +00 3B67 BIRD_0A +00 3B6F BIRD_1A +00 3B77 BIRD_2A +00 3B7F CACTUS_0 +00 3B87 SHAPESTABLEL +00 3B90 SHAPESTABLEH +00 3B99 DIFF_OBJECT_GAP +00 3BA9 DIFF_LEVEL diff --git a/dino.lst b/dino.lst index b21eec0..ed1d83e 100644 --- a/dino.lst +++ b/dino.lst @@ -970,7 +970,7 @@ Source: dino.asm 45 = 3000 .ds $100*SCR_HEIGHT 46 ; display list 47 3800 GameDL - 48 3800-3B88> 70 70 70 70 + :10 .byte SKIP8 ; empty lines + 48 3800-3BA8> 70 70 70 70 + :10 .byte SKIP8 ; empty lines 49 50 .rept SCR_HEIGHT, # 51 .BYTE MODE2+LMS+SCH @@ -1011,10 +1011,10 @@ Source: dino.asm 60 3825 00 00 00 00 00 00 + :WORLD_LENGTH .byte 0 ; ground 61 ;--------------------------------------------------- 62 3865 FirstSTART - 63 3865 20 24 39 jsr GenerateCharsets - 64 3868 20 98 3A jsr SetStart - 65 386B 20 A4 3A jsr SetGameScreen - 66 386E A9 00 8D 89 3B mva #0 diff_level + 63 3865 20 27 39 jsr GenerateCharsets + 64 3868 20 B8 3A jsr SetStart + 65 386B 20 C4 3A jsr SetGameScreen + 66 386E A9 00 8D A9 3B mva #0 diff_level 67 68 ; test only (some object in the world) 69 3873 A9 01 lda #1 ;bird0 @@ -1026,427 +1026,448 @@ Source: dino.asm 75 ; 76 3882 A2 05 ldx #5 ; position 77 3884 A0 00 ldy #0 ; shape - 78 3886 20 3D 3A jsr ShowDino + 78 3886 20 40 3A jsr ShowDino 79 3889 A2 0A ldx #10 ; position 80 388B A0 01 ldy #1 ; shape - 81 388D 20 3D 3A jsr ShowDino + 81 388D 20 40 3A jsr ShowDino 82 3890 A2 0F ldx #15 ; position 83 3892 A0 02 ldy #2 ; shape - 84 3894 20 3D 3A jsr ShowDino + 84 3894 20 40 3A jsr ShowDino 85 3897 A2 14 ldx #20 ; position 86 3899 A0 03 ldy #3 ; shape - 87 389B 20 3D 3A jsr ShowDino + 87 389B 20 40 3A jsr ShowDino 88 389E A2 19 ldx #25 ; position 89 38A0 A0 04 ldy #4 ; shape - 90 38A2 20 3D 3A jsr ShowDino + 90 38A2 20 40 3A jsr ShowDino 91 38A5 A9 50 8D 20 37 mva #$50 screen+$700+32 92 38AA EndLoop - 93 38AA 20 89 39 jsr WorldShift - 94 38AD 20 70 39 jsr WorldToScreen - 95 38B0 A2 05 ldx #5 ; position - 96 38B2 A5 84 lda DinoState - 97 38B4 05 83 ora DinoWalkPhase ; shape - 98 38B6 A8 tay - 99 38B7 20 3D 3A jsr ShowDino - 100 38BA waitRTC ; or waitRTC ? + 93 38AA 20 8C 39 jsr WorldShift + 94 38AD 20 73 39 jsr WorldToScreen + 95 38B0 20 9B 3A jsr CheckJoy + 96 38B3 A2 05 ldx #5 ; position + 97 38B5 A5 84 lda DinoState + 98 38B7 05 83 ora DinoWalkPhase ; shape + 99 38B9 A8 tay + 100 38BA 20 40 3A jsr ShowDino + 101 38BD waitRTC ; or waitRTC ? Macro: WAITRTC [Source: MACRO.ASM] - 1 38BA A5 14 lda RTCLOK+2 - 2 38BC C5 14 ?wa cmp RTCLOK+2 - 3 38BE F0 FC beq ?wa + 1 38BD A5 14 lda RTCLOK+2 + 2 38BF C5 14 ?wa cmp RTCLOK+2 + 3 38C1 F0 FC beq ?wa Source: dino.asm - 101 ;key - 102 38C0 A9 24 8D F4 02 mva #>font2 chbas - 103 38C5 waitRTC ; or waitRTC ? + 102 ;key + 103 38C3 A9 24 8D F4 02 mva #>font2 chbas + 104 38C8 waitRTC ; or waitRTC ? Macro: WAITRTC [Source: MACRO.ASM] - 1 38C5 A5 14 lda RTCLOK+2 - 2 38C7 C5 14 ?wa cmp RTCLOK+2 - 3 38C9 F0 FC beq ?wa + 1 38C8 A5 14 lda RTCLOK+2 + 2 38CA C5 14 ?wa cmp RTCLOK+2 + 3 38CC F0 FC beq ?wa Source: dino.asm - 104 38CB A9 03 8D 04 D4 mva #3 hscrol - 105 38D0 waitRTC ; or waitRTC ? + 105 38CE A9 03 8D 04 D4 mva #3 hscrol + 106 38D3 waitRTC ; or waitRTC ? Macro: WAITRTC [Source: MACRO.ASM] - 1 38D0 A5 14 lda RTCLOK+2 - 2 38D2 C5 14 ?wa cmp RTCLOK+2 - 3 38D4 F0 FC beq ?wa + 1 38D3 A5 14 lda RTCLOK+2 + 2 38D5 C5 14 ?wa cmp RTCLOK+2 + 3 38D7 F0 FC beq ?wa Source: dino.asm - 106 ;key - 107 38D6 A9 28 8D F4 02 mva #>font3 chbas - 108 38DB waitRTC ; or waitRTC ? + 107 ;key + 108 38D9 A9 28 8D F4 02 mva #>font3 chbas + 109 38DE waitRTC ; or waitRTC ? Macro: WAITRTC [Source: MACRO.ASM] - 1 38DB A5 14 lda RTCLOK+2 - 2 38DD C5 14 ?wa cmp RTCLOK+2 - 3 38DF F0 FC beq ?wa + 1 38DE A5 14 lda RTCLOK+2 + 2 38E0 C5 14 ?wa cmp RTCLOK+2 + 3 38E2 F0 FC beq ?wa Source: dino.asm - 109 38E1 A9 02 8D 04 D4 mva #2 hscrol - 110 38E6 waitRTC ; or waitRTC ? + 110 38E4 A9 02 8D 04 D4 mva #2 hscrol + 111 38E9 waitRTC ; or waitRTC ? Macro: WAITRTC [Source: MACRO.ASM] - 1 38E6 A5 14 lda RTCLOK+2 - 2 38E8 C5 14 ?wa cmp RTCLOK+2 - 3 38EA F0 FC beq ?wa + 1 38E9 A5 14 lda RTCLOK+2 + 2 38EB C5 14 ?wa cmp RTCLOK+2 + 3 38ED F0 FC beq ?wa Source: dino.asm - 111 ;key - 112 38EC A9 2C 8D F4 02 mva #>font4 chbas - 113 38F1 waitRTC ; or waitRTC ? + 112 ;key + 113 38EF A9 2C 8D F4 02 mva #>font4 chbas + 114 38F4 waitRTC ; or waitRTC ? Macro: WAITRTC [Source: MACRO.ASM] - 1 38F1 A5 14 lda RTCLOK+2 - 2 38F3 C5 14 ?wa cmp RTCLOK+2 - 3 38F5 F0 FC beq ?wa + 1 38F4 A5 14 lda RTCLOK+2 + 2 38F6 C5 14 ?wa cmp RTCLOK+2 + 3 38F8 F0 FC beq ?wa Source: dino.asm - 114 38F7 A9 01 8D 04 D4 mva #1 hscrol - 115 38FC waitRTC ; or waitRTC ? + 115 38FA A9 01 8D 04 D4 mva #1 hscrol + 116 38FF waitRTC ; or waitRTC ? Macro: WAITRTC [Source: MACRO.ASM] - 1 38FC A5 14 lda RTCLOK+2 - 2 38FE C5 14 ?wa cmp RTCLOK+2 - 3 3900 F0 FC beq ?wa + 1 38FF A5 14 lda RTCLOK+2 + 2 3901 C5 14 ?wa cmp RTCLOK+2 + 3 3903 F0 FC beq ?wa Source: dino.asm - 116 ;key - 117 3902 20 C4 39 jsr AnimateBirds - 118 3905 A9 20 8D F4 02 mva #>font1 chbas - 119 390A waitRTC ; or waitRTC ? + 117 ;key + 118 3905 20 C7 39 jsr AnimateBirds + 119 3908 A9 20 8D F4 02 mva #>font1 chbas + 120 390D waitRTC ; or waitRTC ? Macro: WAITRTC [Source: MACRO.ASM] - 1 390A A5 14 lda RTCLOK+2 - 2 390C C5 14 ?wa cmp RTCLOK+2 - 3 390E F0 FC beq ?wa + 1 390D A5 14 lda RTCLOK+2 + 2 390F C5 14 ?wa cmp RTCLOK+2 + 3 3911 F0 FC beq ?wa Source: dino.asm - 120 3910 A9 04 8D 04 D4 mva #4 hscrol - 121 3915 4C AA 38 jmp EndLoop - 122 3918 halt + 121 3913 A9 04 8D 04 D4 mva #4 hscrol + 122 3918 4C AA 38 jmp EndLoop + 123 391B halt Macro: HALT [Source: MACRO.ASM] - 1 3918 ?stop - 2 3918 AD 0A D2 lda RANDOM - 3 391B 29 05 and #$05 - 4 391D 8D 1A D0 sta COLBAK - 5 3920 4C 18 39 jmp ?stop + 1 391B ?stop + 2 391B AD 0A D2 lda RANDOM + 3 391E 29 05 and #$05 + 4 3920 8D 1A D0 sta COLBAK + 5 3923 4C 1B 39 jmp ?stop Source: dino.asm - 123 3923 60 rts - 124 - 125 ;----------------------------------------------- - 126 ; Generation of character sets 2,3 and 4 of 1 - 127 ; By copying and horizontal shift dino - 128 ;----------------------------------------------- - 129 3924 .proc GenerateCharsets - 130 ; copy charset 1 to 2,3 and 4 (but not dino chars) - 131 3924 A0 00 ldy #0 - 132 3926 CopyLoop - 133 3926 B9 00 20 lda font1,y - 134 3929 99 00 24 sta font2,y - 135 392C 99 00 28 sta font3,y - 136 392F 99 00 2C sta font4,y - 137 3932 B9 00 22 lda font1+$200,y - 138 3935 99 00 26 sta font2+$200,y - 139 3938 99 00 2A sta font3+$200,y - 140 393B 99 00 2E sta font4+$200,y - 141 393E B9 00 23 lda font1+$300,y - 142 3941 99 00 27 sta font2+$300,y - 143 3944 99 00 2B sta font3+$300,y - 144 3947 99 00 2F sta font4+$300,y - 145 394A C8 iny - 146 394B D0 D9 bne CopyLoop - 147 - 148 394D 60 rts - 149 .endp - 150 ;----------------------------------------------- - 151 394E .proc ClearWorld - 152 394E A0 3F ldy #WORLD_LENGTH-1 ; world size - 153 3950 A9 00 lda #0 ; ground - 154 3952 99 25 38 @ sta WorldTable,y - 155 3955 88 dey - 156 3956 10 FA bpl @- - 157 3958 60 rts - 158 .endp - 159 3959 .proc ClearScreen - 160 3959 A0 40 ldy #WORLD_LENGTH ; TODO: shouldn't be -1? - 161 395B A9 00 lda #0 - 162 395D ClearLoop - 163 395D 99 00 37 sta screen+$700,y - 164 3960 99 00 36 sta screen+$600,y - 165 3963 99 00 35 sta screen+$500,y - 166 3966 99 00 34 sta screen+$400,y - 167 3969 99 00 33 sta screen+$300,y - 168 396C 88 dey - 169 396D 10 EE bpl ClearLoop - 170 396F 60 rts - 171 .endp - 172 ;----------------------------------------------- - 173 3970 .proc WorldToScreen - 174 3970 20 59 39 jsr ClearScreen - 175 3973 A2 00 ldx #0 ; start position - 176 3975 86 82 stx temp_b - 177 3977 ToScreenLoop - 178 3977 BD 25 38 lda WorldTable,x - 179 397A 30 04 bmi NothingToDraw - 180 397C A8 tay - 181 397D 20 E2 39 jsr ShowObject - 182 3980 NothingToDraw - 183 3980 E6 82 inc temp_b - 184 3982 A6 82 ldx temp_b - 185 3984 E0 40 cpx #WORLD_LENGTH - 186 3986 D0 EF bne ToScreenLoop - 187 3988 60 rts - 188 .endp - 189 ;----------------------------------------------- - 190 3989 .proc WorldShift - 191 3989 A0 00 ldy #0 - 192 398B Shift - 193 398B B9 26 38 lda WorldTable+1,y - 194 398E 99 25 38 sta WorldTable,y - 195 3991 C8 iny - 196 3992 C0 3F cpy #WORLD_LENGTH-1 - 197 3994 D0 F5 bne Shift - 198 3996 A9 00 lda #0 ;ground - 199 3998 99 25 38 sta WorldTable,y - 200 ; now we can insert random object to world end - 201 - 202 ; check if there is enough of the gap between obstacles - 203 - 204 ; get the gap for the given difficulty level - 205 399B AE 89 3B ldx diff_level - 206 399E A9 40 lda #WORLD_LENGTH - 207 39A0 38 sec - 208 39A1 FD 79 3B sbc diff_object_gap,x - 209 39A4 AA tax - 210 - 211 ; is there a gap? - 212 @ - 213 39A5 BD 25 38 lda WorldTable,x - 214 39A8 D0 19 bne noInsert - 215 39AA E8 inx - 216 39AB E0 40 cpx #WORLD_LENGTH - 217 39AD D0 F6 bne @- - 218 ;all zeroes - 219 39AF insertObject - 220 39AF AD 0A D2 lda RANDOM - 221 39B2 29 01 and #%00000001 ; insert 50/50 - 222 39B4 F0 0D beq noInsert - 223 39B6 A9 06 8D 63 38 mva #6 WorldTable+WORLD_LENGTH-2 - 224 39BB A9 86 8D 64 38 mva #6+$80 WorldTable+WORLD_LENGTH-1 - 225 39C0 EE 89 3B inc diff_level - 226 + 124 3926 60 rts + 125 + 126 ;----------------------------------------------- + 127 ; Generation of character sets 2,3 and 4 of 1 + 128 ; By copying and horizontal shift dino + 129 ;----------------------------------------------- + 130 3927 .proc GenerateCharsets + 131 ; copy charset 1 to 2,3 and 4 (but not dino chars) + 132 3927 A0 00 ldy #0 + 133 3929 CopyLoop + 134 3929 B9 00 20 lda font1,y + 135 392C 99 00 24 sta font2,y + 136 392F 99 00 28 sta font3,y + 137 3932 99 00 2C sta font4,y + 138 3935 B9 00 22 lda font1+$200,y + 139 3938 99 00 26 sta font2+$200,y + 140 393B 99 00 2A sta font3+$200,y + 141 393E 99 00 2E sta font4+$200,y + 142 3941 B9 00 23 lda font1+$300,y + 143 3944 99 00 27 sta font2+$300,y + 144 3947 99 00 2B sta font3+$300,y + 145 394A 99 00 2F sta font4+$300,y + 146 394D C8 iny + 147 394E D0 D9 bne CopyLoop + 148 + 149 3950 60 rts + 150 .endp + 151 ;----------------------------------------------- + 152 3951 .proc ClearWorld + 153 3951 A0 3F ldy #WORLD_LENGTH-1 ; world size + 154 3953 A9 00 lda #0 ; ground + 155 3955 99 25 38 @ sta WorldTable,y + 156 3958 88 dey + 157 3959 10 FA bpl @- + 158 395B 60 rts + 159 .endp + 160 395C .proc ClearScreen + 161 395C A0 40 ldy #WORLD_LENGTH ; TODO: shouldn't be -1? + 162 395E A9 00 lda #0 + 163 3960 ClearLoop + 164 3960 99 00 37 sta screen+$700,y + 165 3963 99 00 36 sta screen+$600,y + 166 3966 99 00 35 sta screen+$500,y + 167 3969 99 00 34 sta screen+$400,y + 168 396C 99 00 33 sta screen+$300,y + 169 396F 88 dey + 170 3970 10 EE bpl ClearLoop + 171 3972 60 rts + 172 .endp + 173 ;----------------------------------------------- + 174 3973 .proc WorldToScreen + 175 3973 20 5C 39 jsr ClearScreen + 176 3976 A2 00 ldx #0 ; start position + 177 3978 86 82 stx temp_b + 178 397A ToScreenLoop + 179 397A BD 25 38 lda WorldTable,x + 180 397D 30 04 bmi NothingToDraw + 181 397F A8 tay + 182 3980 20 E5 39 jsr ShowObject + 183 3983 NothingToDraw + 184 3983 E6 82 inc temp_b + 185 3985 A6 82 ldx temp_b + 186 3987 E0 40 cpx #WORLD_LENGTH + 187 3989 D0 EF bne ToScreenLoop + 188 398B 60 rts + 189 .endp + 190 ;----------------------------------------------- + 191 398C .proc WorldShift + 192 398C A0 00 ldy #0 + 193 398E Shift + 194 398E B9 26 38 lda WorldTable+1,y + 195 3991 99 25 38 sta WorldTable,y + 196 3994 C8 iny + 197 3995 C0 3F cpy #WORLD_LENGTH-1 + 198 3997 D0 F5 bne Shift + 199 3999 A9 00 lda #0 ;ground + 200 399B 99 25 38 sta WorldTable,y + 201 ; now we can insert random object to world end + 202 + 203 ; check if there is enough of the gap between obstacles + 204 + 205 ; get the gap for the given difficulty level + 206 399E AE A9 3B ldx diff_level + 207 39A1 A9 40 lda #WORLD_LENGTH + 208 39A3 38 sec + 209 39A4 FD 99 3B sbc diff_object_gap,x + 210 39A7 AA tax + 211 + 212 ; is there a gap? + 213 @ + 214 39A8 BD 25 38 lda WorldTable,x + 215 39AB D0 19 bne noInsert + 216 39AD E8 inx + 217 39AE E0 40 cpx #WORLD_LENGTH + 218 39B0 D0 F6 bne @- + 219 ;all zeroes + 220 39B2 insertObject + 221 39B2 AD 0A D2 lda RANDOM + 222 39B5 29 01 and #%00000001 ; insert 50/50 + 223 39B7 F0 0D beq noInsert + 224 39B9 A9 06 8D 63 38 mva #6 WorldTable+WORLD_LENGTH-2 + 225 39BE A9 86 8D 64 38 mva #6+$80 WorldTable+WORLD_LENGTH-1 + 226 39C3 EE A9 3B inc diff_level 227 228 - 229 39C3 noInsert - 230 39C3 60 rts - 231 .endp - 232 ;----------------------------------------------- - 233 39C4 .proc AnimateBirds - 234 39C4 A0 40 ldy #WORLD_LENGTH - 235 39C6 B9 25 38 @ lda WorldTable,y - 236 39C9 AA tax - 237 39CA 29 7F and #%01111111 - 238 39CC F0 0A beq NoBird - 239 39CE C9 08 cmp #8 ; first cactus - 240 39D0 B0 06 bcs NoBird - 241 ; then animate bird - 242 39D2 8A txa - 243 39D3 49 01 eor #%0000001 - 244 39D5 99 25 38 sta WorldTable,y - 245 39D8 NoBird - 246 39D8 88 dey - 247 39D9 10 EB bpl @- - 248 39DB A5 83 lda DinoWalkPhase - 249 39DD 49 01 eor #%00000001 - 250 39DF 85 83 sta DinoWalkPhase - 251 39E1 60 rts - 252 .endp - 253 ;----------------------------------------------- - 254 ; Show Object on screen - 255 ; X - y position - 256 ; Y - shape nr - 257 ;----------------------------------------------- - 258 39E2 .proc ShowObject - 259 39E2 B9 67 3B lda ShapesTableL,y - 260 39E5 85 80 sta temp_w - 261 39E7 B9 70 3B lda ShapesTableH,y - 262 39EA 85 81 sta temp_w+1 - 263 39EC A0 00 ldy #0 - 264 39EE ObjectLoop - 265 39EE B1 80 lda (temp_w),y - 266 39F0 30 03 bmi @+ - 267 39F2 9D 00 34 sta screen+$400,x - 268 39F5 18 A5 80 69 02 85 + @ adw temp_w #2 - 269 3A00 B1 80 lda (temp_w),y - 270 3A02 30 03 bmi @+ - 271 3A04 9D 00 35 sta screen+$500,x - 272 3A07 18 A5 80 69 02 85 + @ adw temp_w #2 - 273 3A12 B1 80 lda (temp_w),y - 274 3A14 30 03 bmi @+ - 275 3A16 9D 00 36 sta screen+$600,x - 276 3A19 18 A5 80 69 02 85 + @ adw temp_w #2 - 277 3A24 B1 80 lda (temp_w),y - 278 3A26 30 03 bmi @+ - 279 3A28 9D 00 37 sta screen+$700,x - 280 3A2B 38 A5 80 E9 06 85 + @ sbw temp_w #6 - 281 3A36 E8 inx - 282 3A37 C8 iny - 283 3A38 C0 02 cpy #2 ; object width - 284 3A3A D0 B2 bne ObjectLoop - 285 3A3C 60 rts - 286 .endp - 287 ;----------------------------------------------- - 288 ; Show Dino on screen (test) - 289 ; X - y position - 290 ; Y - shape nr - 291 ;----------------------------------------------- - 292 3A3D .proc ShowDino - 293 3A3D B9 1D 3B lda DinoShapesTableL,y - 294 3A40 85 80 sta temp_w - 295 3A42 B9 22 3B lda DinoShapesTableH,y - 296 3A45 85 81 sta temp_w+1 - 297 3A47 A0 00 ldy #0 - 298 3A49 DinoLoop - 299 3A49 B1 80 lda (temp_w),y - 300 3A4B 30 03 bmi @+ - 301 3A4D 9D 00 34 sta screen+$400,x - 302 3A50 18 A5 80 69 05 85 + @ adw temp_w #5 - 303 3A5B B1 80 lda (temp_w),y - 304 3A5D 30 03 bmi @+ - 305 3A5F 9D 00 35 sta screen+$500,x - 306 3A62 18 A5 80 69 05 85 + @ adw temp_w #5 - 307 3A6D B1 80 lda (temp_w),y - 308 3A6F 30 03 bmi @+ - 309 3A71 9D 00 36 sta screen+$600,x - 310 3A74 18 A5 80 69 05 85 + @ adw temp_w #5 - 311 3A7F B1 80 lda (temp_w),y - 312 3A81 30 03 bmi @+ - 313 3A83 9D 00 37 sta screen+$700,x - 314 3A86 38 A5 80 E9 0F 85 + @ sbw temp_w #15 - 315 3A91 E8 inx - 316 3A92 C8 iny - 317 3A93 C0 05 cpy #5 ; dino width - 318 3A95 D0 B2 bne DinoLoop - 319 3A97 60 rts - 320 .endp - 321 ;----------------------------------------------- - 322 3A98 .proc SetStart - 323 3A98 20 4E 39 jsr ClearWorld - 324 3A9B A9 00 lda #0 - 325 3A9D 85 83 sta DinoWalkPhase - 326 3A9F A9 00 lda #0 - 327 3AA1 85 84 sta DinoState - 328 3AA3 60 rts - 329 .endp - 330 ;----------------------------------------------- - 331 3AA4 .proc SetGameScreen - 332 3AA4 A9 00 8D 30 02 A9 + mwa #GameDL dlptrs - 333 3AAE A9 3E lda #%00111110 ; normal screen width, DL on, P/M on - 334 3AB0 8D 2F 02 sta dmactls - 335 3AB3 A9 20 8D F4 02 mva #>font1 chbas - 336 3AB8 60 rts - 337 .endp - 338 ;-------------------------------------------------- - 339 3AB9 icl 'artwork/shapes.asm' + 229 + 230 39C6 noInsert + 231 39C6 60 rts + 232 .endp + 233 ;----------------------------------------------- + 234 39C7 .proc AnimateBirds + 235 39C7 A0 40 ldy #WORLD_LENGTH + 236 39C9 B9 25 38 @ lda WorldTable,y + 237 39CC AA tax + 238 39CD 29 7F and #%01111111 + 239 39CF F0 0A beq NoBird + 240 39D1 C9 08 cmp #8 ; first cactus + 241 39D3 B0 06 bcs NoBird + 242 ; then animate bird + 243 39D5 8A txa + 244 39D6 49 01 eor #%0000001 + 245 39D8 99 25 38 sta WorldTable,y + 246 39DB NoBird + 247 39DB 88 dey + 248 39DC 10 EB bpl @- + 249 39DE A5 83 lda DinoWalkPhase + 250 39E0 49 01 eor #%00000001 + 251 39E2 85 83 sta DinoWalkPhase + 252 39E4 60 rts + 253 .endp + 254 ;----------------------------------------------- + 255 ; Show Object on screen + 256 ; X - y position + 257 ; Y - shape nr + 258 ;----------------------------------------------- + 259 39E5 .proc ShowObject + 260 39E5 B9 87 3B lda ShapesTableL,y + 261 39E8 85 80 sta temp_w + 262 39EA B9 90 3B lda ShapesTableH,y + 263 39ED 85 81 sta temp_w+1 + 264 39EF A0 00 ldy #0 + 265 39F1 ObjectLoop + 266 39F1 B1 80 lda (temp_w),y + 267 39F3 30 03 bmi @+ + 268 39F5 9D 00 34 sta screen+$400,x + 269 39F8 18 A5 80 69 02 85 + @ adw temp_w #2 + 270 3A03 B1 80 lda (temp_w),y + 271 3A05 30 03 bmi @+ + 272 3A07 9D 00 35 sta screen+$500,x + 273 3A0A 18 A5 80 69 02 85 + @ adw temp_w #2 + 274 3A15 B1 80 lda (temp_w),y + 275 3A17 30 03 bmi @+ + 276 3A19 9D 00 36 sta screen+$600,x + 277 3A1C 18 A5 80 69 02 85 + @ adw temp_w #2 + 278 3A27 B1 80 lda (temp_w),y + 279 3A29 30 03 bmi @+ + 280 3A2B 9D 00 37 sta screen+$700,x + 281 3A2E 38 A5 80 E9 06 85 + @ sbw temp_w #6 + 282 3A39 E8 inx + 283 3A3A C8 iny + 284 3A3B C0 02 cpy #2 ; object width + 285 3A3D D0 B2 bne ObjectLoop + 286 3A3F 60 rts + 287 .endp + 288 ;----------------------------------------------- + 289 ; Show Dino on screen (test) + 290 ; X - y position + 291 ; Y - shape nr + 292 ;----------------------------------------------- + 293 3A40 .proc ShowDino + 294 3A40 B9 3D 3B lda DinoShapesTableL,y + 295 3A43 85 80 sta temp_w + 296 3A45 B9 42 3B lda DinoShapesTableH,y + 297 3A48 85 81 sta temp_w+1 + 298 3A4A A0 00 ldy #0 + 299 3A4C DinoLoop + 300 3A4C B1 80 lda (temp_w),y + 301 3A4E 30 03 bmi @+ + 302 3A50 9D 00 34 sta screen+$400,x + 303 3A53 18 A5 80 69 05 85 + @ adw temp_w #5 + 304 3A5E B1 80 lda (temp_w),y + 305 3A60 30 03 bmi @+ + 306 3A62 9D 00 35 sta screen+$500,x + 307 3A65 18 A5 80 69 05 85 + @ adw temp_w #5 + 308 3A70 B1 80 lda (temp_w),y + 309 3A72 30 03 bmi @+ + 310 3A74 9D 00 36 sta screen+$600,x + 311 3A77 18 A5 80 69 05 85 + @ adw temp_w #5 + 312 3A82 B1 80 lda (temp_w),y + 313 3A84 30 03 bmi @+ + 314 3A86 9D 00 37 sta screen+$700,x + 315 3A89 38 A5 80 E9 0F 85 + @ sbw temp_w #15 + 316 3A94 E8 inx + 317 3A95 C8 iny + 318 3A96 C0 05 cpy #5 ; dino width + 319 3A98 D0 B2 bne DinoLoop + 320 3A9A 60 rts + 321 .endp + 322 ;----------------------------------------------- + 323 3A9B .proc CheckJoy + 324 3A9B AD 78 02 lda STICK0 + 325 3A9E 29 02 and #%00000010 ; down + 326 3AA0 F0 11 beq Down + 327 3AA2 AD 78 02 lda STICK0 + 328 3AA5 29 01 and #%00000001 ; up + 329 3AA7 F0 05 beq Up + 330 ; no change state (temporary set to 0) + 331 3AA9 A9 00 lda #0 + 332 3AAB 85 84 sta DinoState + 333 3AAD 60 rts + 334 3AAE A9 04 Up lda #4 + 335 3AB0 85 84 sta DinoState + 336 3AB2 60 rts + 337 3AB3 Down + 338 3AB3 A9 02 lda #2 + 339 3AB5 85 84 sta DinoState + 340 3AB7 60 rts + 341 .endp + 342 ;----------------------------------------------- + 343 3AB8 .proc SetStart + 344 3AB8 20 51 39 jsr ClearWorld + 345 3ABB A9 00 lda #0 + 346 3ABD 85 83 sta DinoWalkPhase + 347 3ABF A9 00 lda #0 + 348 3AC1 85 84 sta DinoState + 349 3AC3 60 rts + 350 .endp + 351 ;----------------------------------------------- + 352 3AC4 .proc SetGameScreen + 353 3AC4 A9 00 8D 30 02 A9 + mwa #GameDL dlptrs + 354 3ACE A9 3E lda #%00111110 ; normal screen width, DL on, P/M on + 355 3AD0 8D 2F 02 sta dmactls + 356 3AD3 A9 20 8D F4 02 mva #>font1 chbas + 357 3AD8 60 rts + 358 .endp + 359 ;-------------------------------------------------- + 360 3AD9 icl 'artwork/shapes.asm' Source: shapes.asm 1 ; @com.wudsn.ide.asm.mainsourcefile=dino.asm 2 3 .IF *>0 ;this is a trick that prevents compiling this file alone 4 5 ; dno run - 6 3AB9 dino_run_0 ; anly '0' jumps - 7 3AB9 FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. .' - 8 3ABE 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## .' - 9 3AC3 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## ..' - 10 3AC8 22 26 2A FF FF .by $22, $26, $2a, $ff, $ff ; '## ..' - 11 3ACD dino_run_1 - 12 3ACD FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. .' - 13 3AD2 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## .' - 14 3AD7 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## ..' - 15 3ADC 2D 2E 2F FF FF .by $2d, $2e, $2f, $ff, $ff ; '## ..' - 16 3AE1 dino_run_2 - 17 3AE1 FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. .' - 18 3AE6 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## .' - 19 3AEB 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## ..' - 20 3AF0 30 31 32 FF FF .by $30, $31, $32, $ff, $ff ; '## ..' - 21 3AF5 dino_crouch_1 - 22 3AF5 FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff ; '.....' - 23 3AFA FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff ; '.....' - 24 3AFF 33 34 35 36 37 .by $33, $34, $35, $36, $37 ; '#### ' - 25 3B04 38 39 3A 3B 3C .by $38, $39, $3a, $3b, $3c ; '#### ' - 26 3B09 dino_crouch_2 - 27 3B09 FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff ; '.....' - 28 3B0E FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff ; '.....' - 29 3B13 33 34 35 36 37 .by $33, $34, $35, $36, $37 ; '#### ' - 30 3B18 3D 3E 3F 3B 3C .by $3d, $3e, $3f, $3b, $3c ; '#### ' - 31 3B1D DinoShapesTableL - 32 3B1D CD .by dino_run_1 - 39 3B23 3A .by >dino_run_2 - 40 3B24 3A .by >dino_crouch_1 - 41 3B25 3B .by >dino_crouch_2 - 42 3B26 3A .by >dino_run_0 ; jump + 6 3AD9 dino_run_0 ; anly '0' jumps + 7 3AD9 FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. .' + 8 3ADE 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## .' + 9 3AE3 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## ..' + 10 3AE8 22 26 2A FF FF .by $22, $26, $2a, $ff, $ff ; '## ..' + 11 3AED dino_run_1 + 12 3AED FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. .' + 13 3AF2 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## .' + 14 3AF7 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## ..' + 15 3AFC 2D 2E 2F FF FF .by $2d, $2e, $2f, $ff, $ff ; '## ..' + 16 3B01 dino_run_2 + 17 3B01 FF 23 27 2B FF .by $ff, $23, $27, $2b, $ff ; '. .' + 18 3B06 20 24 28 2C FF .by $20, $24, $28, $2c, $ff ; ' ## .' + 19 3B0B 21 25 29 FF FF .by $21, $25, $29, $ff, $ff ; '## ..' + 20 3B10 30 31 32 FF FF .by $30, $31, $32, $ff, $ff ; '## ..' + 21 3B15 dino_crouch_1 + 22 3B15 FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff ; '.....' + 23 3B1A FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff ; '.....' + 24 3B1F 33 34 35 36 37 .by $33, $34, $35, $36, $37 ; '#### ' + 25 3B24 38 39 3A 3B 3C .by $38, $39, $3a, $3b, $3c ; '#### ' + 26 3B29 dino_crouch_2 + 27 3B29 FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff ; '.....' + 28 3B2E FF FF FF FF FF .by $ff, $ff, $ff, $ff, $ff ; '.....' + 29 3B33 33 34 35 36 37 .by $33, $34, $35, $36, $37 ; '#### ' + 30 3B38 3D 3E 3F 3B 3C .by $3d, $3e, $3f, $3b, $3c ; '#### ' + 31 3B3D DinoShapesTableL + 32 3B3D ED .by dino_run_1 + 39 3B43 3B .by >dino_run_2 + 40 3B44 3B .by >dino_crouch_1 + 41 3B45 3B .by >dino_crouch_2 + 42 3B46 3A .by >dino_run_0 ; jump 43 ; other objects - 44 3B27 ground_0 - 45 3B27 FF FF .by $ff, $ff ; '..' - 46 3B29 FF FF .by $ff, $ff ; '..' - 47 3B2B FF FF .by $ff, $ff ; '..' - 48 3B2D 52 52 .by $52, $52 ; '##' - 49 3B2F bird_0 - 50 3B2F FF FF .by $ff, $ff ; '..' - 51 3B31 FF FF .by $ff, $ff ; '..' - 52 3B33 40 41 .by $40, $41 ; '##' - 53 3B35 52 52 .by $52, $52 ; '##' - 54 3B37 bird_1 - 55 3B37 FF FF .by $ff, $ff ; '..' - 56 3B39 40 41 .by $40, $41 ; '##' - 57 3B3B FF FF .by $ff, $ff ; '..' - 58 3B3D 52 52 .by $52, $52 ; '##' - 59 3B3F bird_2 - 60 3B3F 40 41 .by $40, $41 ; '##' - 61 3B41 FF FF .by $ff, $ff ; '..' - 62 3B43 FF FF .by $ff, $ff ; ''.' - 63 3B45 52 52 .by $52, $52 ; '##' - 64 3B47 bird_0a - 65 3B47 FF FF .by $ff, $ff ; '..' - 66 3B49 FF FF .by $ff, $ff ; '..' - 67 3B4B 42 43 .by $42, $43 ; '##' - 68 3B4D 52 52 .by $52, $52 ; '##' - 69 3B4F bird_1a - 70 3B4F FF FF .by $ff, $ff ; '..' - 71 3B51 42 43 .by $42, $43 ; '##' - 72 3B53 FF FF .by $ff, $ff ; '..' - 73 3B55 52 52 .by $52, $52 ; '##' - 74 3B57 bird_2a - 75 3B57 42 43 .by $42, $43 ; '##' - 76 3B59 FF FF .by $ff, $ff ; '..' - 77 3B5B FF FF .by $ff, $ff ; ''.' - 78 3B5D 52 52 .by $52, $52 ; '##' - 79 3B5F cactus_0 - 80 3B5F FF FF .by $ff, $ff ; '..' - 81 3B61 54 54 .by $54, $54 ; '##' - 82 3B63 54 54 .by $54, $54 ; '##' - 83 3B65 52 52 .by $52, $52 ; '##' + 44 3B47 ground_0 + 45 3B47 FF FF .by $ff, $ff ; '..' + 46 3B49 FF FF .by $ff, $ff ; '..' + 47 3B4B FF FF .by $ff, $ff ; '..' + 48 3B4D 52 52 .by $52, $52 ; '##' + 49 3B4F bird_0 + 50 3B4F FF FF .by $ff, $ff ; '..' + 51 3B51 FF FF .by $ff, $ff ; '..' + 52 3B53 40 41 .by $40, $41 ; '##' + 53 3B55 52 52 .by $52, $52 ; '##' + 54 3B57 bird_1 + 55 3B57 FF FF .by $ff, $ff ; '..' + 56 3B59 40 41 .by $40, $41 ; '##' + 57 3B5B FF FF .by $ff, $ff ; '..' + 58 3B5D 52 52 .by $52, $52 ; '##' + 59 3B5F bird_2 + 60 3B5F 40 41 .by $40, $41 ; '##' + 61 3B61 FF FF .by $ff, $ff ; '..' + 62 3B63 FF FF .by $ff, $ff ; ''.' + 63 3B65 52 52 .by $52, $52 ; '##' + 64 3B67 bird_0a + 65 3B67 FF FF .by $ff, $ff ; '..' + 66 3B69 FF FF .by $ff, $ff ; '..' + 67 3B6B 42 43 .by $42, $43 ; '##' + 68 3B6D 52 52 .by $52, $52 ; '##' + 69 3B6F bird_1a + 70 3B6F FF FF .by $ff, $ff ; '..' + 71 3B71 42 43 .by $42, $43 ; '##' + 72 3B73 FF FF .by $ff, $ff ; '..' + 73 3B75 52 52 .by $52, $52 ; '##' + 74 3B77 bird_2a + 75 3B77 42 43 .by $42, $43 ; '##' + 76 3B79 FF FF .by $ff, $ff ; '..' + 77 3B7B FF FF .by $ff, $ff ; ''.' + 78 3B7D 52 52 .by $52, $52 ; '##' + 79 3B7F cactus_0 + 80 3B7F FF FF .by $ff, $ff ; '..' + 81 3B81 54 54 .by $54, $54 ; '##' + 82 3B83 54 54 .by $54, $54 ; '##' + 83 3B85 52 52 .by $52, $52 ; '##' 84 - 85 3B67 ShapesTableL - 86 3B67 27 .by ground_0 - 97 3B71 3B .by >ground_0 - 98 3B72 3B .by >bird_0 - 99 3B73 3B .by >bird_0a - 100 3B74 3B .by >bird_1 - 101 3B75 3B .by >bird_1a - 102 3B76 3B .by >bird_2 - 103 3B77 3B .by >bird_2a - 104 3B78 3B .by >cactus_0 - 105 3B79 diff_object_gap ; min distance between obstacles by difficulty level - 106 3B79 14 13 12 11 10 0F + :DIFF_LEVELS .by 20-# + 85 3B87 ShapesTableL + 86 3B87 47 .by ground_0 + 97 3B91 3B .by >ground_0 + 98 3B92 3B .by >bird_0 + 99 3B93 3B .by >bird_0a + 100 3B94 3B .by >bird_1 + 101 3B95 3B .by >bird_1a + 102 3B96 3B .by >bird_2 + 103 3B97 3B .by >bird_2a + 104 3B98 3B .by >cactus_0 + 105 3B99 diff_object_gap ; min distance between obstacles by difficulty level + 106 3B99 14 13 12 11 10 0F + :DIFF_LEVELS .by 20-# 107 ;----------vars---------- - 108 = 3B89 diff_level .ds 1 + 108 = 3BA9 diff_level .ds 1 109 110 111 .endif ; .IF *>0 - 340 ;-------------------------------------------------- - 341 - 342 02E0-02E1> 65 38 run FirstSTART + 361 ;-------------------------------------------------- + 362 + 363 02E0-02E1> 65 38 run FirstSTART diff --git a/dino.xex b/dino.xex index e8423230df77d4bc4646eff3bd36a01ca4eb0d8c..6ffe2a776c1684be2999a10e4a5d9f12cd7503a9 100644 GIT binary patch delta 238 zcmX@1{z83&xd7ve$rb|XVd|C&JFFCrSgmB}U1`0Nu~*+>B}=cR#mbgmD~m;}3m6m} ztQK)CU<6V83z$HZ$O2{%CAokFNUaR$RWMiRu~aCwRG4kGh;?ZTYx4>PhsmD=ycmy9 zwiT3Rl%5S+8CD8QtX4Agc3Q7w?A5ne$O0wxe8vVa*xNiJXkQY!;`70eYnEfoqZ7qKpFVQpTaU_1G%fEVMD$qs_D zj1rUM1pWCUEf+DgHSJZkFko4s@M!XGL0NX7T@Dt1D<|Ia(e*|3