|
@@ -33,7 +33,8 @@
|
33
|
33
|
#include "sample.h"
|
34
|
34
|
#include "window.h"
|
35
|
35
|
#include "multiplayer.h"
|
36
|
|
-#include "speed_table.h"
|
|
36
|
+#include "table_speed_shot.h"
|
|
37
|
+#include "table_speed_move.h"
|
37
|
38
|
#include "game.h"
|
38
|
39
|
|
39
|
40
|
#define BAR_OFFSET_X (4 - 80)
|
|
@@ -172,251 +173,62 @@ void game_set_mp_shot(struct mp_shot_state *state) NONBANKED {
|
172
|
173
|
// TODO add shot
|
173
|
174
|
}
|
174
|
175
|
|
175
|
|
-void handle_acceleration(void) BANKED {
|
176
|
|
- switch (rot) {
|
177
|
|
- case ROT_0:
|
178
|
|
- spd_y -= SPEED_INC;
|
179
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
180
|
|
- if (spd_y < -SPEED_MAX_ACC) spd_y = -SPEED_MAX_ACC;
|
181
|
|
- } else {
|
182
|
|
- if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
|
183
|
|
- }
|
184
|
|
- acc |= ACC_Y;
|
185
|
|
- break;
|
186
|
|
-
|
187
|
|
- case ROT_22_5:
|
188
|
|
- spd_y -= SPEED_INC;
|
189
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
190
|
|
- if (spd_y < -SPEED_MAX_ACC_D_HI) spd_y = -SPEED_MAX_ACC_D_HI;
|
191
|
|
- } else {
|
192
|
|
- if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
|
193
|
|
- }
|
194
|
|
- acc |= ACC_Y;
|
195
|
|
- spd_x += SPEED_INC;
|
196
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
197
|
|
- if (spd_x > SPEED_MAX_ACC_D_LO) spd_x = SPEED_MAX_ACC_D_LO;
|
198
|
|
- } else {
|
199
|
|
- if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
|
200
|
|
- }
|
201
|
|
- acc |= ACC_X;
|
202
|
|
- break;
|
203
|
|
-
|
204
|
|
- case ROT_45:
|
205
|
|
- spd_y -= SPEED_INC;
|
206
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
207
|
|
- if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y = -SPEED_MAX_ACC_DIAG;
|
208
|
|
- } else {
|
209
|
|
- if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
|
210
|
|
- }
|
211
|
|
- acc |= ACC_Y;
|
212
|
|
- spd_x += SPEED_INC;
|
213
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
214
|
|
- if (spd_x > SPEED_MAX_ACC_DIAG) spd_x = SPEED_MAX_ACC_DIAG;
|
215
|
|
- } else {
|
216
|
|
- if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
|
217
|
|
- }
|
218
|
|
- acc |= ACC_X;
|
219
|
|
- break;
|
220
|
|
-
|
221
|
|
- case ROT_67_5:
|
222
|
|
- spd_y -= SPEED_INC;
|
223
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
224
|
|
- if (spd_y < -SPEED_MAX_ACC_D_LO) spd_y = -SPEED_MAX_ACC_D_LO;
|
225
|
|
- } else {
|
226
|
|
- if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
|
227
|
|
- }
|
228
|
|
- acc |= ACC_Y;
|
229
|
|
- spd_x += SPEED_INC;
|
230
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
231
|
|
- if (spd_x > SPEED_MAX_ACC_D_HI) spd_x = SPEED_MAX_ACC_D_HI;
|
232
|
|
- } else {
|
233
|
|
- if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
|
234
|
|
- }
|
235
|
|
- acc |= ACC_X;
|
236
|
|
- break;
|
|
176
|
+static void get_max_spd(int16_t *max_spd_x, int16_t *max_spd_y) NONBANKED {
|
|
177
|
+ START_ROM_BANK(BANK(table_speed_move)) {
|
|
178
|
+ *max_spd_x = table_speed_move[(rot * table_speed_move_WIDTH) + 0];
|
|
179
|
+ *max_spd_y = -table_speed_move[(rot * table_speed_move_WIDTH) + 1];
|
|
180
|
+ } END_ROM_BANK;
|
|
181
|
+}
|
237
|
182
|
|
238
|
|
- case ROT_90:
|
239
|
|
- spd_x += SPEED_INC;
|
240
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
241
|
|
- if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
|
242
|
|
- } else {
|
243
|
|
- if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
|
244
|
|
- }
|
245
|
|
- acc |= ACC_X;
|
246
|
|
- break;
|
|
183
|
+static void handle_acceleration(void) BANKED {
|
|
184
|
+ int16_t max_spd_x;
|
|
185
|
+ int16_t max_spd_y;
|
|
186
|
+ get_max_spd(&max_spd_x, &max_spd_y);
|
247
|
187
|
|
248
|
|
- case ROT_112_5:
|
249
|
|
- spd_x += SPEED_INC;
|
250
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
251
|
|
- if (spd_x > SPEED_MAX_ACC_D_HI) spd_x = SPEED_MAX_ACC_D_HI;
|
252
|
|
- } else {
|
253
|
|
- if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
|
254
|
|
- }
|
255
|
|
- acc |= ACC_X;
|
256
|
|
- spd_y += SPEED_INC;
|
257
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
258
|
|
- if (spd_y > SPEED_MAX_ACC_D_LO) spd_y = SPEED_MAX_ACC_D_LO;
|
259
|
|
- } else {
|
260
|
|
- if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
|
261
|
|
- }
|
262
|
|
- acc |= ACC_Y;
|
263
|
|
- break;
|
|
188
|
+ if (conf_get()->debug_flags & DBG_FAST) {
|
|
189
|
+ if (max_spd_x > 0) {
|
|
190
|
+ max_spd_x = SPEED_MAX_DBG;
|
|
191
|
+ } else if (max_spd_x < 0) {
|
|
192
|
+ max_spd_x = -SPEED_MAX_DBG;
|
|
193
|
+ }
|
264
|
194
|
|
265
|
|
- case ROT_135:
|
266
|
|
- spd_x += SPEED_INC;
|
267
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
268
|
|
- if (spd_x > SPEED_MAX_ACC_DIAG) spd_x = SPEED_MAX_ACC_DIAG;
|
269
|
|
- } else {
|
270
|
|
- if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
|
271
|
|
- }
|
272
|
|
- acc |= ACC_X;
|
273
|
|
- spd_y += SPEED_INC;
|
274
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
275
|
|
- if (spd_y > SPEED_MAX_ACC_DIAG) spd_y = SPEED_MAX_ACC_DIAG;
|
276
|
|
- } else {
|
277
|
|
- if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
|
278
|
|
- }
|
279
|
|
- acc |= ACC_Y;
|
280
|
|
- break;
|
|
195
|
+ if (max_spd_y > 0) {
|
|
196
|
+ max_spd_y = SPEED_MAX_DBG;
|
|
197
|
+ } else if (max_spd_y < 0) {
|
|
198
|
+ max_spd_y = -SPEED_MAX_DBG;
|
|
199
|
+ }
|
|
200
|
+ }
|
281
|
201
|
|
282
|
|
- case ROT_157_5:
|
|
202
|
+ if (max_spd_x != 0) {
|
|
203
|
+ if (max_spd_x > 0) {
|
283
|
204
|
spd_x += SPEED_INC;
|
284
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
285
|
|
- if (spd_x > SPEED_MAX_ACC_D_LO) spd_x = SPEED_MAX_ACC_D_LO;
|
286
|
|
- } else {
|
287
|
|
- if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
|
288
|
|
- }
|
289
|
|
- acc |= ACC_X;
|
290
|
|
- spd_y += SPEED_INC;
|
291
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
292
|
|
- if (spd_y > SPEED_MAX_ACC_D_HI) spd_y = SPEED_MAX_ACC_D_HI;
|
293
|
|
- } else {
|
294
|
|
- if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
|
|
205
|
+ if (spd_x > max_spd_x) {
|
|
206
|
+ spd_x = max_spd_x;
|
295
|
207
|
}
|
296
|
|
- acc |= ACC_Y;
|
297
|
|
- break;
|
298
|
|
-
|
299
|
|
- case ROT_180:
|
300
|
|
- spd_y += SPEED_INC;
|
301
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
302
|
|
- if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
|
303
|
|
- } else {
|
304
|
|
- if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
|
305
|
|
- }
|
306
|
|
- acc |= ACC_Y;
|
307
|
|
- break;
|
308
|
|
-
|
309
|
|
- case ROT_202_5:
|
310
|
|
- spd_y += SPEED_INC;
|
311
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
312
|
|
- if (spd_y > SPEED_MAX_ACC_D_HI) spd_y = SPEED_MAX_ACC_D_HI;
|
313
|
|
- } else {
|
314
|
|
- if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
|
315
|
|
- }
|
316
|
|
- acc |= ACC_Y;
|
|
208
|
+ } else {
|
317
|
209
|
spd_x -= SPEED_INC;
|
318
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
319
|
|
- if (spd_x < -SPEED_MAX_ACC_D_LO) spd_x = -SPEED_MAX_ACC_D_LO;
|
320
|
|
- } else {
|
321
|
|
- if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
|
|
210
|
+ if (spd_x < max_spd_x) {
|
|
211
|
+ spd_x = max_spd_x;
|
322
|
212
|
}
|
323
|
|
- acc |= ACC_X;
|
324
|
|
- break;
|
|
213
|
+ }
|
325
|
214
|
|
326
|
|
- case ROT_225:
|
327
|
|
- spd_y += SPEED_INC;
|
328
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
329
|
|
- if (spd_y > SPEED_MAX_ACC_DIAG) spd_y = SPEED_MAX_ACC_DIAG;
|
330
|
|
- } else {
|
331
|
|
- if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
|
332
|
|
- }
|
333
|
|
- acc |= ACC_Y;
|
334
|
|
- spd_x -= SPEED_INC;
|
335
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
336
|
|
- if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x = -SPEED_MAX_ACC_DIAG;
|
337
|
|
- } else {
|
338
|
|
- if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
|
339
|
|
- }
|
340
|
|
- acc |= ACC_X;
|
341
|
|
- break;
|
|
215
|
+ acc |= ACC_X;
|
|
216
|
+ }
|
342
|
217
|
|
343
|
|
- case ROT_247_5:
|
|
218
|
+ if (max_spd_y != 0) {
|
|
219
|
+ if (max_spd_y > 0) {
|
344
|
220
|
spd_y += SPEED_INC;
|
345
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
346
|
|
- if (spd_y > SPEED_MAX_ACC_D_LO) spd_y = SPEED_MAX_ACC_D_LO;
|
347
|
|
- } else {
|
348
|
|
- if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
|
349
|
|
- }
|
350
|
|
- acc |= ACC_Y;
|
351
|
|
- spd_x -= SPEED_INC;
|
352
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
353
|
|
- if (spd_x < -SPEED_MAX_ACC_D_HI) spd_x = -SPEED_MAX_ACC_D_HI;
|
354
|
|
- } else {
|
355
|
|
- if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
|
|
221
|
+ if (spd_y > max_spd_y) {
|
|
222
|
+ spd_y = max_spd_y;
|
356
|
223
|
}
|
357
|
|
- acc |= ACC_X;
|
358
|
|
- break;
|
359
|
|
-
|
360
|
|
- case ROT_270:
|
361
|
|
- spd_x -= SPEED_INC;
|
362
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
363
|
|
- if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
|
364
|
|
- } else {
|
365
|
|
- if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
|
366
|
|
- }
|
367
|
|
- acc |= ACC_X;
|
368
|
|
- break;
|
369
|
|
-
|
370
|
|
- case ROT_292_5:
|
371
|
|
- spd_x -= SPEED_INC;
|
372
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
373
|
|
- if (spd_x < -SPEED_MAX_ACC_D_HI) spd_x = -SPEED_MAX_ACC_D_HI;
|
374
|
|
- } else {
|
375
|
|
- if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
|
376
|
|
- }
|
377
|
|
- acc |= ACC_X;
|
378
|
|
- spd_y -= SPEED_INC;
|
379
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
380
|
|
- if (spd_y < -SPEED_MAX_ACC_D_LO) spd_y = -SPEED_MAX_ACC_D_LO;
|
381
|
|
- } else {
|
382
|
|
- if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
|
383
|
|
- }
|
384
|
|
- acc |= ACC_Y;
|
385
|
|
- break;
|
386
|
|
-
|
387
|
|
- case ROT_315:
|
388
|
|
- spd_x -= SPEED_INC;
|
389
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
390
|
|
- if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x = -SPEED_MAX_ACC_DIAG;
|
391
|
|
- } else {
|
392
|
|
- if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
|
393
|
|
- }
|
394
|
|
- acc |= ACC_X;
|
|
224
|
+ } else {
|
395
|
225
|
spd_y -= SPEED_INC;
|
396
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
397
|
|
- if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y = -SPEED_MAX_ACC_DIAG;
|
398
|
|
- } else {
|
399
|
|
- if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
|
|
226
|
+ if (spd_y < max_spd_y) {
|
|
227
|
+ spd_y = max_spd_y;
|
400
|
228
|
}
|
401
|
|
- acc |= ACC_Y;
|
402
|
|
- break;
|
|
229
|
+ }
|
403
|
230
|
|
404
|
|
- case ROT_337_5:
|
405
|
|
- spd_x -= SPEED_INC;
|
406
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
407
|
|
- if (spd_x < -SPEED_MAX_ACC_D_LO) spd_x = -SPEED_MAX_ACC_D_LO;
|
408
|
|
- } else {
|
409
|
|
- if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
|
410
|
|
- }
|
411
|
|
- acc |= ACC_X;
|
412
|
|
- spd_y -= SPEED_INC;
|
413
|
|
- if (!(conf_get()->debug_flags & DBG_FAST)) {
|
414
|
|
- if (spd_y < -SPEED_MAX_ACC_D_HI) spd_y = -SPEED_MAX_ACC_D_HI;
|
415
|
|
- } else {
|
416
|
|
- if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
|
417
|
|
- }
|
418
|
|
- acc |= ACC_Y;
|
419
|
|
- break;
|
|
231
|
+ acc |= ACC_Y;
|
420
|
232
|
}
|
421
|
233
|
}
|
422
|
234
|
|
|
@@ -518,9 +330,9 @@ int32_t game(enum GAME_MODE mode) NONBANKED {
|
518
|
330
|
if (key_pressed(J_B)) {
|
519
|
331
|
int16_t shot_spd_x;
|
520
|
332
|
int16_t shot_spd_y;
|
521
|
|
- START_ROM_BANK(BANK(speed_table)) {
|
522
|
|
- shot_spd_x = spd_x + speed_table[(rot * speed_table_WIDTH) + 0];
|
523
|
|
- shot_spd_y = spd_y - speed_table[(rot * speed_table_WIDTH) + 1];
|
|
333
|
+ START_ROM_BANK(BANK(table_speed_shot)) {
|
|
334
|
+ shot_spd_x = spd_x + table_speed_shot[(rot * table_speed_shot_WIDTH) + 0];
|
|
335
|
+ shot_spd_y = spd_y - table_speed_shot[(rot * table_speed_shot_WIDTH) + 1];
|
524
|
336
|
} END_ROM_BANK;
|
525
|
337
|
|
526
|
338
|
// TODO ugly hard-coded offsets?!
|