Two kinds of actor. We now need vector tables!
Cat's Eye Technologies
8 years ago
29 | 29 | reserve byte[16] actor_pos_lo |
30 | 30 | |
31 | 31 | reserve vector dispatch_state |
32 | ||
33 | reserve byte[18] press_fire_msg: "PRESS FIRE TO PLAY" | |
32 | reserve vector dispatch_logic | |
33 | ||
34 | reserve byte[18] press_fire_msg: "PRESS`FIRE`TO`PLAY" | |
34 | 35 | |
35 | 36 | routine calculate_new_position outputs (new_position) { |
36 | 37 | clc |
141 | 142 | lda #$04 |
142 | 143 | sta actor_pos_hi, y |
143 | 144 | tya |
145 | clc | |
146 | asl .a | |
147 | asl .a | |
144 | 148 | sta actor_pos_lo, y |
145 | 149 | iny |
146 | 150 | cpy #8 |
166 | 170 | jmp (save_cinv) |
167 | 171 | } |
168 | 172 | |
173 | routine logic_player { | |
174 | jsr read_stick | |
175 | jsr calculate_new_position | |
176 | jsr check_new_position_in_bounds | |
177 | if bcs { | |
178 | lda #32 | |
179 | ldy #0 | |
180 | sta (position), y | |
181 | copy new_position position | |
182 | lda #81 | |
183 | ldy #0 | |
184 | sta (position), y | |
185 | } else { } | |
186 | } | |
187 | ||
188 | routine logic_obstacle { | |
189 | lda #0 | |
190 | sta >delta | |
191 | lda #1 | |
192 | sta <delta | |
193 | jsr calculate_new_position | |
194 | jsr check_new_position_in_bounds | |
195 | if bcs { | |
196 | lda #32 | |
197 | ldy #0 | |
198 | sta (position), y | |
199 | copy new_position position | |
200 | lda #82 | |
201 | ldy #0 | |
202 | sta (position), y | |
203 | } else { } | |
204 | } | |
205 | ||
206 | routine indirect_jsr_logic { | |
207 | jmp (dispatch_logic) | |
208 | } | |
209 | ||
169 | 210 | routine state_play_game { |
170 | 211 | reserve byte save_x |
171 | 212 | ldx #0 |
177 | 218 | lda actor_pos_lo, x |
178 | 219 | sta <position |
179 | 220 | |
180 | jsr read_stick | |
181 | jsr calculate_new_position | |
182 | jsr check_new_position_in_bounds | |
183 | if bcs { | |
184 | lda #32 | |
185 | ldy #0 | |
186 | sta (position), y | |
187 | copy new_position position | |
188 | lda #81 | |
189 | ldy #0 | |
190 | sta (position), y | |
191 | } else { } | |
221 | cpx #0 | |
222 | if beq { | |
223 | copy routine logic_player to dispatch_logic | |
224 | } else { | |
225 | copy routine logic_obstacle to dispatch_logic | |
226 | } | |
227 | jsr indirect_jsr_logic | |
192 | 228 | |
193 | 229 | ldx save_x |
194 | 230 | lda >position |