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