git @ Cat's Eye Technologies SixtyPical / 42c7e30
Calculate new position instead of updating to it immediately. Chris Pressey 7 years ago
1 changed file(s) with 99 addition(s) and 34 deletion(s). Raw diff Collapse all Expand all
2929
3030 word table actor_pos
3131 word pos
32 word new_pos
3233
3334 word table actor_delta
3435 word delta
5051
5152 vector dispatch_game_state
5253 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,
5758 screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4
5859 trashes a, x, y, c, z, n, v, ptr
5960
7172
7273 vector cinv
7374 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,
7879 screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4
7980 trashes a, x, y, c, z, n, v, ptr
8081 @ 788
8182
8283 vector save_cinv
8384 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,
8889 screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4
8990 trashes a, x, y, c, z, n, v, ptr
9091
179180 } until z
180181 }
181182
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
182228 // ----------------------------------------------------------------
183229 // Actor Logics
184230 // ----------------------------------------------------------------
185231
186232 routine player_logic
187233 inputs pos, delta, joy2, screen
188 outputs pos, delta, screen
234 outputs pos, delta, new_pos, screen
189235 trashes a, x, y, c, z, n, v, ptr
190236 {
191237 call read_stick
192238
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 }
202267 }
203268
204269 routine enemy_logic
218283
219284 routine game_state_play
220285 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,
225290 screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4
226291 trashes a, x, y, c, z, n, v, ptr
227292 {
257322
258323 routine game_state_title_screen
259324 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,
264329 screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4
265330 trashes a, x, y, c, z, n, v, ptr
266331 {
299364
300365 routine our_cinv
301366 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,
306371 screen, screen1, screen2, screen3, screen4, colormap1, colormap2, colormap3, colormap4
307372 trashes a, x, y, c, z, n, v, ptr
308373 {