Calculate new position instead of updating to it immediately.
Chris Pressey
7 years ago
29 | 29 | |
30 | 30 | word table actor_pos |
31 | 31 | word pos |
32 | word new_pos | |
32 | 33 | |
33 | 34 | word table actor_delta |
34 | 35 | word delta |
50 | 51 | |
51 | 52 | vector dispatch_game_state |
52 | 53 | inputs joy2, button_down, press_fire_msg, dispatch_game_state, save_x, |
53 | actor_pos, pos, actor_delta, delta, | |
54 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
55 | outputs button_down, dispatch_game_state, save_x, | |
56 | actor_pos, pos, actor_delta, delta, | |
54 | actor_pos, pos, new_pos, actor_delta, delta, | |
55 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
56 | outputs button_down, dispatch_game_state, save_x, | |
57 | actor_pos, pos, new_pos, actor_delta, delta, | |
57 | 58 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 |
58 | 59 | trashes a, x, y, c, z, n, v, ptr |
59 | 60 | |
71 | 72 | |
72 | 73 | vector cinv |
73 | 74 | inputs joy2, button_down, press_fire_msg, dispatch_game_state, save_x, |
74 | actor_pos, pos, actor_delta, delta, | |
75 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
76 | outputs button_down, dispatch_game_state, save_x, | |
77 | actor_pos, pos, actor_delta, delta, | |
75 | actor_pos, pos, new_pos, actor_delta, delta, | |
76 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
77 | outputs button_down, dispatch_game_state, save_x, | |
78 | actor_pos, pos, new_pos, actor_delta, delta, | |
78 | 79 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 |
79 | 80 | trashes a, x, y, c, z, n, v, ptr |
80 | 81 | @ 788 |
81 | 82 | |
82 | 83 | vector save_cinv |
83 | 84 | inputs joy2, button_down, press_fire_msg, dispatch_game_state, save_x, |
84 | actor_pos, pos, actor_delta, delta, | |
85 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
86 | outputs button_down, dispatch_game_state, save_x, | |
87 | actor_pos, pos, actor_delta, delta, | |
85 | actor_pos, pos, new_pos, actor_delta, delta, | |
86 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
87 | outputs button_down, dispatch_game_state, save_x, | |
88 | actor_pos, pos, new_pos, actor_delta, delta, | |
88 | 89 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 |
89 | 90 | trashes a, x, y, c, z, n, v, ptr |
90 | 91 | |
179 | 180 | } until z |
180 | 181 | } |
181 | 182 | |
183 | routine calculate_new_position | |
184 | inputs pos, delta | |
185 | outputs new_pos | |
186 | trashes a, c, n, z, v | |
187 | { | |
188 | copy pos, new_pos | |
189 | st off, c | |
190 | add new_pos, delta | |
191 | } | |
192 | ||
193 | // routine compare_new_pos | |
194 | // { | |
195 | // lda >new_position | |
196 | // cmp >compare_target | |
197 | // if beq { | |
198 | // lda <new_position | |
199 | // cmp <compare_target | |
200 | // } else { | |
201 | // } | |
202 | // } | |
203 | ||
204 | routine check_new_position_in_bounds | |
205 | outputs c | |
206 | { | |
207 | // for now, we just assume the new position is in bounds, because we are awesomely lazy | |
208 | st on, c | |
209 | ||
210 | // copy #$07e8 compare_target // just past bottom of screen | |
211 | // jsr compare_new_pos | |
212 | // | |
213 | // if bcs { | |
214 | // clc | |
215 | // } else { | |
216 | // | |
217 | // copy #$0400 compare_target | |
218 | // jsr compare_new_pos | |
219 | // | |
220 | // if bcc { | |
221 | // clc | |
222 | // } else { | |
223 | // sec | |
224 | // } | |
225 | // } | |
226 | } | |
227 | ||
182 | 228 | // ---------------------------------------------------------------- |
183 | 229 | // Actor Logics |
184 | 230 | // ---------------------------------------------------------------- |
185 | 231 | |
186 | 232 | routine player_logic |
187 | 233 | inputs pos, delta, joy2, screen |
188 | outputs pos, delta, screen | |
234 | outputs pos, delta, new_pos, screen | |
189 | 235 | trashes a, x, y, c, z, n, v, ptr |
190 | 236 | { |
191 | 237 | call read_stick |
192 | 238 | |
193 | st off, c | |
194 | add pos, delta | |
195 | ||
196 | copy ^screen, ptr | |
197 | st off, c | |
198 | add ptr, pos | |
199 | ||
200 | ld y, 0 | |
201 | copy 81, [ptr] + y | |
239 | call calculate_new_position | |
240 | call check_new_position_in_bounds | |
241 | ||
242 | if c { | |
243 | copy ^screen, ptr | |
244 | st off, c | |
245 | add ptr, new_pos | |
246 | ld y, 0 | |
247 | ||
248 | // copy [ptr] + y, a | |
249 | // cmp a, 32 | |
250 | // if z { | |
251 | // copy new_pos, pos | |
252 | // copy 81, [ptr] + y | |
253 | // } else { | |
254 | // // copy game_state_game_over, dispatch_game_state | |
255 | // } | |
256 | ||
257 | copy 81, [ptr] + y | |
258 | copy new_pos, pos | |
259 | ||
260 | ld a, 0 // FIXME shouldn't be needed | |
261 | } else { | |
262 | copy ^screen, ptr // FIXME shouldn't be needed | |
263 | ld y, 0 // FIXME shouldn't be needed | |
264 | ld a, 0 // FIXME shouldn't be needed | |
265 | add a, 0 // FIXME shouldn't be needed | |
266 | } | |
202 | 267 | } |
203 | 268 | |
204 | 269 | routine enemy_logic |
218 | 283 | |
219 | 284 | routine game_state_play |
220 | 285 | inputs joy2, button_down, press_fire_msg, dispatch_game_state, save_x, |
221 | actor_pos, pos, actor_delta, delta, | |
222 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
223 | outputs button_down, dispatch_game_state, save_x, | |
224 | actor_pos, pos, actor_delta, delta, | |
286 | actor_pos, pos, new_pos, actor_delta, delta, | |
287 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
288 | outputs button_down, dispatch_game_state, save_x, | |
289 | actor_pos, pos, new_pos, actor_delta, delta, | |
225 | 290 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 |
226 | 291 | trashes a, x, y, c, z, n, v, ptr |
227 | 292 | { |
257 | 322 | |
258 | 323 | routine game_state_title_screen |
259 | 324 | inputs joy2, button_down, press_fire_msg, dispatch_game_state, save_x, |
260 | actor_pos, pos, actor_delta, delta, | |
261 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
262 | outputs button_down, dispatch_game_state, save_x, | |
263 | actor_pos, pos, actor_delta, delta, | |
325 | actor_pos, pos, new_pos, actor_delta, delta, | |
326 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
327 | outputs button_down, dispatch_game_state, save_x, | |
328 | actor_pos, pos, new_pos, actor_delta, delta, | |
264 | 329 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 |
265 | 330 | trashes a, x, y, c, z, n, v, ptr |
266 | 331 | { |
299 | 364 | |
300 | 365 | routine our_cinv |
301 | 366 | inputs joy2, button_down, press_fire_msg, dispatch_game_state, save_x, |
302 | actor_pos, pos, actor_delta, delta, | |
303 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
304 | outputs button_down, dispatch_game_state, save_x, | |
305 | actor_pos, pos, actor_delta, delta, | |
367 | actor_pos, pos, new_pos, actor_delta, delta, | |
368 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 | |
369 | outputs button_down, dispatch_game_state, save_x, | |
370 | actor_pos, pos, new_pos, actor_delta, delta, | |
306 | 371 | screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4 |
307 | 372 | trashes a, x, y, c, z, n, v, ptr |
308 | 373 | { |