junglejourney

changeset 51:3ae72fc13837

Attempted to solve collision detection issues caused by negative number handling.
author David Boddie <david@boddie.org.uk>
date Tue Aug 23 02:02:16 2011 +0200
parents 0d48c3a9f27f
children 8b2af889c2f0
files mapcode.oph
diffstat 1 files changed, 41 insertions(+), 55 deletions(-) [+]
line diff
     1.1 --- a/mapcode.oph	Mon Aug 22 23:45:16 2011 +0200
     1.2 +++ b/mapcode.oph	Tue Aug 23 02:02:16 2011 +0200
     1.3 @@ -2854,21 +2854,22 @@
     1.4          cmp #2                                  ; y - py >= 2 (to miss)
     1.5          bmi projectile_check_collide_x
     1.6  
     1.7 +        jmp projectile_collide_next
     1.8 +
     1.9          projectile_check_collide_y_equal_n:
    1.10          cmp #253                                ; y - py <= -4 (to miss)
    1.11          bpl projectile_check_collide_x
    1.12  
    1.13          jmp projectile_collide_next
    1.14  
    1.15 -        projectile_check_collide_y_greater:         ; Y - py >= 2 (to miss)
    1.16 -        ldy #3                                      ; Y = 6 + y  (coordinates)
    1.17 -        lda ($74),y         ; dy                    ; 6 + y - py >= 2
    1.18 -        sec                                         ; y - py >= -4
    1.19 -        sbc $3309           ; dy - projectile dy
    1.20 -        bpl projectile_collide_next
    1.21 -
    1.22 -        cmp #252
    1.23 -        bmi projectile_check_collide_x
    1.24 +        projectile_check_collide_y_greater:
    1.25 +        lda $3309           ; projectile dy
    1.26 +        cmp #5
    1.27 +        bne projectile_collide_next
    1.28 +        ldy #3
    1.29 +        lda ($74),y         ; projectile dy - dy
    1.30 +        cmp #0
    1.31 +        beq projectile_check_collide_x              ; dpy = 5, dy = 0
    1.32  
    1.33          jmp projectile_collide_next
    1.34  
    1.35 @@ -2900,31 +2901,29 @@
    1.36          lda ($74),y         ; dx
    1.37          sec
    1.38          sbc $330b           ; dx - projectile dx
    1.39 -        bmi projectile_check_collide_destroy
    1.40          cmp #2
    1.41 -        bmi projectile_check_collide_destroy
    1.42 +        bpl projectile_collide_next
    1.43 +        jmp projectile_check_collide_destroy
    1.44 +
    1.45 +        projectile_check_collide_x_greater:         ; X - px >= 2 (to miss)
    1.46 +        ldy #5                                      ; X = 4 + x  (coordinates)
    1.47 +        lda $330b           ; projectile dx         ; 4 + x - px >= 2
    1.48 +        sec                                         ; x - px >= -2
    1.49 +        sbc ($74),y         ; projectile dx - dx
    1.50 +        cmp #3                                      ; px - x > 2 (to hit)
    1.51 +        bpl projectile_check_collide_destroy
    1.52  
    1.53          jmp projectile_collide_next
    1.54  
    1.55 -        projectile_check_collide_x_greater:     ; X - px >= 2 (to miss)
    1.56 -        ldy #5                                  ; X = 4 + x  (coordinates)
    1.57 -        lda ($74),y         ; dx                ; 4 + x - px >= 2
    1.58 -        sec                                     ; x - px >= -2
    1.59 -        sbc $330b           ; dx - projectile dx
    1.60 -        cmp #254
    1.61 -        bpl projectile_collide_next
    1.62 -
    1.63 -        jmp projectile_check_collide_destroy
    1.64 -
    1.65          projectile_check_collide_x_less:        ; PX - x >= 4 (to miss)
    1.66          ldy #5                                  ; PX = 4 + px
    1.67          lda ($74),y         ; dx                ; 4 + px - x >= 4
    1.68          sec                                     ; x - px <= 0
    1.69          sbc $330b           ; dx - projectile dx
    1.70 +        bmi projectile_collide_next
    1.71 +        cmp #1                                  ; x - px >= 1 (to hit)
    1.72          bpl projectile_check_collide_destroy
    1.73  
    1.74 -        jmp projectile_collide_next
    1.75 -
    1.76          projectile_collide_next:
    1.77          clc
    1.78  
    1.79 @@ -2998,11 +2997,10 @@
    1.80          bmi player_check_collide_y_equal_n      ; required to deal with
    1.81                                                  ; negative results
    1.82  
    1.83 -        cmp #2                                  ; dy - dpy >= 6 (to miss)
    1.84 -        bmi player_check_collide_x
    1.85 -
    1.86 -        player_check_collide_y_equal_n:
    1.87 -        cmp #253                                ; dy - dpy <= -4 (to miss)
    1.88 +        jmp player_check_collide_x
    1.89 +
    1.90 +        player_check_collide_y_equal_n:         ; dy - dpy <= -4 (to miss)
    1.91 +        cmp #253                                ; dy - dpy > -3 (to hit)
    1.92          bpl player_check_collide_x
    1.93  
    1.94          jmp player_collide_next
    1.95 @@ -3011,7 +3009,7 @@
    1.96          ldy #3                                  ; DY = 6 + dy  (coordinates)
    1.97          lda ($74),y         ; dy                ; 6 + dy - dpy >= 6
    1.98          sec                                     ; dy - py >= 0
    1.99 -        sbc $3303           ; dy - player dy
   1.100 +        sbc $3303           ; dy - player dy    ; dy - py < 0 (to hit)
   1.101          bmi player_check_collide_x
   1.102  
   1.103          jmp player_collide_next
   1.104 @@ -3040,45 +3038,33 @@
   1.105          jmp player_collide_next
   1.106  
   1.107          player_check_collide_x_equal:
   1.108 -
   1.109          ldy #5
   1.110          lda ($74),y         ; dx
   1.111          sec
   1.112 -        sbc $330b           ; dx - player dx
   1.113 -        bmi player_check_collide_x_equal_n
   1.114 -
   1.115 -        cmp #3
   1.116 -        bmi player_check_collide_destroy
   1.117 +        sbc $3305           ; dx - player dx
   1.118 +        cmp #2                                  ; dx - dpx >= 2 (to miss)
   1.119 +        bpl player_collide_next                 ; dx - dpx < 2 (to hit)
   1.120 +        jmp player_check_collide_destroy
   1.121 +
   1.122 +        player_check_collide_x_greater:
   1.123 +        ldy #5
   1.124 +        lda $3305           ; player dx
   1.125 +        sec
   1.126 +        sbc ($74),y         ; player dx - dx
   1.127 +        cmp #3                                  ; dpx - dx > 2 (to hit)
   1.128 +        bpl player_check_collide_destroy
   1.129  
   1.130          jmp player_collide_next
   1.131  
   1.132 -        player_check_collide_x_equal_n:
   1.133 -        jmp player_check_collide_destroy
   1.134 -
   1.135 -        player_check_collide_x_greater:         ; DX - dpx >= 2 (to miss)
   1.136 -        ldy #5                                  ; DX = 4 + dx  (coordinates)
   1.137 -        lda ($74),y         ; dx                ; 4 + dx - dpx >= 2
   1.138 -        sec                                     ; dx - dpx >= -2
   1.139 -        sbc $3305           ; dx - player dx
   1.140 -        bcc player_check_collide_x_greater_n
   1.141 -
   1.142 -        jmp player_collide_next
   1.143 -
   1.144 -        player_check_collide_x_greater_n:
   1.145 -        cmp #253
   1.146 -        bpl player_collide_next
   1.147 -
   1.148 -        jmp player_check_collide_destroy
   1.149 -
   1.150          player_check_collide_x_less:            ; PX - x >= 4 (to miss)
   1.151          ldy #5                                  ; PX = 4 + px
   1.152          lda ($74),y         ; dx                ; 4 + px - x >= 4
   1.153          sec                                     ; x - px <= 0
   1.154          sbc $3305           ; dx - player dx
   1.155 +        bmi player_collide_next
   1.156 +        cmp #1                                  ; x - px >= 1 (to hit)
   1.157          bpl player_check_collide_destroy
   1.158  
   1.159 -        jmp player_collide_next
   1.160 -
   1.161          player_collide_next:
   1.162          clc
   1.163