junglejourney
changeset 50:0d48c3a9f27f
Added a test program to check the behaviour of comparisons.
| author | David Boddie <david@boddie.org.uk> |
|---|---|
| date | Mon Aug 22 23:45:16 2011 +0200 |
| parents | 249c89334020 |
| children | 3ae72fc13837 |
| files | TESTINEQ build.py mapcode.oph |
| diffstat | 3 files changed, 213 insertions(+), 10 deletions(-) [+] |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/TESTINEQ Mon Aug 22 23:45:16 2011 +0200 1.3 @@ -0,0 +1,43 @@ 1.4 +AUTO 1.5 +FOR T%=0 TO 2 STEP 2 1.6 +P%=&1900 1.7 +[OPT T% 1.8 + 1.9 +LDA &70 1.10 +SEC 1.11 +SBC #3 1.12 +BMI neg 1.13 + 1.14 +CMP #2 1.15 +BMI zero_one 1.16 + 1.17 +LDA #0 1.18 +STA &71 1.19 +RTS 1.20 + 1.21 +.zero_one 1.22 +LDA #1 1.23 +STA &71 1.24 +RTS 1.25 + 1.26 +.neg 1.27 +CMP #254 1.28 +BPL minus_two_plus 1.29 + 1.30 +LDA #2 1.31 +STA &71 1.32 +RTS 1.33 + 1.34 +.minus_two_plus 1.35 +LDA #3 1.36 +STA &71 1.37 +RTS 1.38 + 1.39 +] 1.40 +NEXT 1.41 + 1.42 +FOR A%=0 TO 6 1.43 +?&70=A% 1.44 +CALL &1900 1.45 +PRINT ?&70-3, ?&71 1.46 +NEXT
2.1 --- a/build.py Mon Aug 22 01:33:52 2011 +0200 2.2 +++ b/build.py Mon Aug 22 23:45:16 2011 +0200 2.3 @@ -142,10 +142,7 @@ 2.4 2.5 files.append(("LOADER", 0xffff0e00, 0xffff802b, t)) 2.6 2.7 - t = read_basic("TESTSPRITES") 2.8 - t = t.replace("{plot0}", "%X" % addresses[-3] 2.9 - ).replace("{key_input}", "%X" % addresses[-1] 2.10 - ).replace("{plot1}", "%X" % addresses[-2]) 2.11 + t = read_basic("TESTINEQ") 2.12 files.append(("TEST", 0xffff0e00, 0xffff802b, t)) 2.13 2.14 u = UEFfile.UEFfile(creator = 'build.py '+version)
3.1 --- a/mapcode.oph Mon Aug 22 01:33:52 2011 +0200 3.2 +++ b/mapcode.oph Mon Aug 22 23:45:16 2011 +0200 3.3 @@ -2791,6 +2791,9 @@ 3.4 jmp move_characters_loop 3.5 3.6 move_characters_exit: 3.7 + 3.8 + jsr player_collide 3.9 + 3.10 clc 3.11 rts 3.12 3.13 @@ -2893,9 +2896,15 @@ 3.14 jmp projectile_collide_next 3.15 3.16 projectile_check_collide_x_equal: 3.17 - 3.18 - ; A collision has occurred (enemies occupy the whole width of a tile). 3.19 - jmp projectile_check_collide_destroy 3.20 + ldy #5 3.21 + lda ($74),y ; dx 3.22 + sec 3.23 + sbc $330b ; dx - projectile dx 3.24 + bmi projectile_check_collide_destroy 3.25 + cmp #2 3.26 + bmi projectile_check_collide_destroy 3.27 + 3.28 + jmp projectile_collide_next 3.29 3.30 projectile_check_collide_x_greater: ; X - px >= 2 (to miss) 3.31 ldy #5 ; X = 4 + x (coordinates) 3.32 @@ -2912,9 +2921,9 @@ 3.33 lda ($74),y ; dx ; 4 + px - x >= 4 3.34 sec ; x - px <= 0 3.35 sbc $330b ; dx - projectile dx 3.36 - bmi projectile_collide_next 3.37 - 3.38 - jmp projectile_check_collide_destroy 3.39 + bpl projectile_check_collide_destroy 3.40 + 3.41 + jmp projectile_collide_next 3.42 3.43 projectile_collide_next: 3.44 clc 3.45 @@ -2951,6 +2960,160 @@ 3.46 clc 3.47 rts 3.48 3.49 +player_collide: 3.50 + 3.51 + lda #$0c ; set the character address 3.52 + sta $74 3.53 + lda #$33 3.54 + sta $75 3.55 + 3.56 + player_collide_loop: 3.57 + 3.58 + ldy #0 3.59 + lda ($74),y ; type 3.60 + cmp #4 3.61 + bpl player_collide_check 3.62 + 3.63 + jmp player_collide_next 3.64 + 3.65 + player_collide_check: 3.66 + 3.67 + ldy #2 3.68 + lda ($74),y ; y 3.69 + sec 3.70 + sbc $3302 ; y - player y 3.71 + beq player_check_collide_y_equal 3.72 + cmp #1 3.73 + beq player_check_collide_y_greater 3.74 + cmp #255 3.75 + beq player_check_collide_y_less 3.76 + 3.77 + jmp player_collide_next 3.78 + 3.79 + player_check_collide_y_equal: 3.80 + ldy #3 3.81 + lda ($74),y ; dy 3.82 + sec 3.83 + sbc $3303 ; dy - player dy ; this appears to be 3.84 + bmi player_check_collide_y_equal_n ; required to deal with 3.85 + ; negative results 3.86 + 3.87 + cmp #2 ; dy - dpy >= 6 (to miss) 3.88 + bmi player_check_collide_x 3.89 + 3.90 + player_check_collide_y_equal_n: 3.91 + cmp #253 ; dy - dpy <= -4 (to miss) 3.92 + bpl player_check_collide_x 3.93 + 3.94 + jmp player_collide_next 3.95 + 3.96 + player_check_collide_y_greater: ; DY - dpy >= 6 (to miss) 3.97 + ldy #3 ; DY = 6 + dy (coordinates) 3.98 + lda ($74),y ; dy ; 6 + dy - dpy >= 6 3.99 + sec ; dy - py >= 0 3.100 + sbc $3303 ; dy - player dy 3.101 + bmi player_check_collide_x 3.102 + 3.103 + jmp player_collide_next 3.104 + 3.105 + player_check_collide_y_less: ; DPY - dy >= 4 (to miss) 3.106 + ldy #3 ; DPY = 6 + dpy 3.107 + lda ($74),y ; dy ; 6 + dpy - dy >= 4 3.108 + sec ; dy - dpy <= 2 3.109 + sbc $3303 ; dy - player dy 3.110 + cmp #3 3.111 + bpl player_check_collide_x 3.112 + 3.113 + jmp player_collide_next 3.114 + 3.115 + player_check_collide_x: 3.116 + ldy #4 3.117 + lda ($74),y ; x 3.118 + sec 3.119 + sbc $3304 ; x - player x 3.120 + beq player_check_collide_x_equal 3.121 + cmp #1 3.122 + beq player_check_collide_x_greater 3.123 + cmp #255 3.124 + beq player_check_collide_x_less 3.125 + 3.126 + jmp player_collide_next 3.127 + 3.128 + player_check_collide_x_equal: 3.129 + 3.130 + ldy #5 3.131 + lda ($74),y ; dx 3.132 + sec 3.133 + sbc $330b ; dx - player dx 3.134 + bmi player_check_collide_x_equal_n 3.135 + 3.136 + cmp #3 3.137 + bmi player_check_collide_destroy 3.138 + 3.139 + jmp player_collide_next 3.140 + 3.141 + player_check_collide_x_equal_n: 3.142 + jmp player_check_collide_destroy 3.143 + 3.144 + player_check_collide_x_greater: ; DX - dpx >= 2 (to miss) 3.145 + ldy #5 ; DX = 4 + dx (coordinates) 3.146 + lda ($74),y ; dx ; 4 + dx - dpx >= 2 3.147 + sec ; dx - dpx >= -2 3.148 + sbc $3305 ; dx - player dx 3.149 + bcc player_check_collide_x_greater_n 3.150 + 3.151 + jmp player_collide_next 3.152 + 3.153 + player_check_collide_x_greater_n: 3.154 + cmp #253 3.155 + bpl player_collide_next 3.156 + 3.157 + jmp player_check_collide_destroy 3.158 + 3.159 + player_check_collide_x_less: ; PX - x >= 4 (to miss) 3.160 + ldy #5 ; PX = 4 + px 3.161 + lda ($74),y ; dx ; 4 + px - x >= 4 3.162 + sec ; x - px <= 0 3.163 + sbc $3305 ; dx - player dx 3.164 + bpl player_check_collide_destroy 3.165 + 3.166 + jmp player_collide_next 3.167 + 3.168 + player_collide_next: 3.169 + clc 3.170 + 3.171 + ; Examine the next character. 3.172 + lda $74 3.173 + adc #6 3.174 + 3.175 + cmp #$24 3.176 + bpl player_collide_exit 3.177 + sta $74 3.178 + jmp player_collide_loop 3.179 + 3.180 + player_check_collide_destroy: 3.181 + 3.182 + ; Unplot the enemy and replace it with an explosion. 3.183 + 3.184 + jsr unplot_character 3.185 + 3.186 + lda #3 ; explosion 3.187 + ldy #0 3.188 + sta ($74),y 3.189 + 3.190 + lda #8 3.191 + ldy #1 3.192 + sta ($74),y 3.193 + 3.194 + jsr plot_character 3.195 + 3.196 + sec ; set the carry flag to inform the caller that the player 3.197 + rts ; should be destroyed 3.198 + 3.199 + player_collide_exit: 3.200 + clc 3.201 + rts 3.202 + 3.203 set_palette: 3.204 ; $70=logical colour 3.205 ; $71=physical colour
