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
