|
@@ -22,6 +22,7 @@
|
22
|
22
|
#include <rand.h>
|
23
|
23
|
#include <stdint.h>
|
24
|
24
|
|
|
25
|
+#include "banks.h"
|
25
|
26
|
#include "config.h"
|
26
|
27
|
#include "maps.h"
|
27
|
28
|
#include "obj.h"
|
|
@@ -32,6 +33,7 @@
|
32
|
33
|
#include "sample.h"
|
33
|
34
|
#include "window.h"
|
34
|
35
|
#include "multiplayer.h"
|
|
36
|
+#include "speed_table.h"
|
35
|
37
|
#include "game.h"
|
36
|
38
|
|
37
|
39
|
#define BAR_OFFSET_X (4 - 80)
|
|
@@ -514,120 +516,94 @@ int32_t game(enum GAME_MODE mode) NONBANKED {
|
514
|
516
|
}
|
515
|
517
|
|
516
|
518
|
if (key_pressed(J_B)) {
|
|
519
|
+ int16_t shot_spd_x;
|
|
520
|
+ 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];
|
|
524
|
+ } END_ROM_BANK;
|
|
525
|
+
|
|
526
|
+ // TODO ugly hard-coded offsets?!
|
517
|
527
|
int16_t shot_pos_x = 0, shot_pos_y = 0;
|
518
|
|
- int16_t shot_spd_x = 0, shot_spd_y = 0;
|
519
|
|
-
|
520
|
528
|
switch (rot) {
|
521
|
529
|
case ROT_0:
|
522
|
530
|
shot_pos_x = 0;
|
523
|
531
|
shot_pos_y = -SHIP_OFF;
|
524
|
|
- shot_spd_x = spd_x;
|
525
|
|
- shot_spd_y = spd_y - SHOT_SPEED;
|
526
|
532
|
break;
|
527
|
533
|
|
528
|
534
|
case ROT_22_5:
|
529
|
535
|
shot_pos_x = SHIP_OFF / 2 - 1;
|
530
|
536
|
shot_pos_y = -SHIP_OFF / 2 - 4;
|
531
|
|
- shot_spd_x = spd_x + SHOT_SPEED_D_LO;
|
532
|
|
- shot_spd_y = spd_y - SHOT_SPEED_D_HI;
|
533
|
537
|
break;
|
534
|
538
|
|
535
|
539
|
case ROT_45:
|
536
|
540
|
shot_pos_x = SHIP_OFF / 2 + 3;
|
537
|
541
|
shot_pos_y = -SHIP_OFF / 2 - 2;
|
538
|
|
- shot_spd_x = spd_x + SHOT_SPEED_DIAG;
|
539
|
|
- shot_spd_y = spd_y - SHOT_SPEED_DIAG;
|
540
|
542
|
break;
|
541
|
543
|
|
542
|
544
|
case ROT_67_5:
|
543
|
545
|
shot_pos_x = SHIP_OFF / 2 + 5;
|
544
|
546
|
shot_pos_y = -SHIP_OFF / 2 + 2;
|
545
|
|
- shot_spd_x = spd_x + SHOT_SPEED_D_HI;
|
546
|
|
- shot_spd_y = spd_y - SHOT_SPEED_D_LO;
|
547
|
547
|
break;
|
548
|
548
|
|
549
|
549
|
case ROT_90:
|
550
|
550
|
shot_pos_x = SHIP_OFF;
|
551
|
551
|
shot_pos_y = 0;
|
552
|
|
- shot_spd_x = spd_x + SHOT_SPEED;
|
553
|
|
- shot_spd_y = spd_y;
|
554
|
552
|
break;
|
555
|
553
|
|
556
|
554
|
case ROT_112_5:
|
557
|
555
|
shot_pos_x = SHIP_OFF / 2 + 5;
|
558
|
556
|
shot_pos_y = SHIP_OFF / 2 + 0;
|
559
|
|
- shot_spd_x = spd_x + SHOT_SPEED_D_HI;
|
560
|
|
- shot_spd_y = spd_y + SHOT_SPEED_D_LO;
|
561
|
557
|
break;
|
562
|
558
|
|
563
|
559
|
case ROT_135:
|
564
|
560
|
shot_pos_x = SHIP_OFF / 2 + 3;
|
565
|
561
|
shot_pos_y = SHIP_OFF / 2 + 2;
|
566
|
|
- shot_spd_x = spd_x + SHOT_SPEED_DIAG;
|
567
|
|
- shot_spd_y = spd_y + SHOT_SPEED_DIAG;
|
568
|
562
|
break;
|
569
|
563
|
|
570
|
564
|
case ROT_157_5:
|
571
|
565
|
shot_pos_x = SHIP_OFF / 2 + 1;
|
572
|
566
|
shot_pos_y = SHIP_OFF / 2 + 4;
|
573
|
|
- shot_spd_x = spd_x + SHOT_SPEED_D_LO;
|
574
|
|
- shot_spd_y = spd_y + SHOT_SPEED_D_HI;
|
575
|
567
|
break;
|
576
|
568
|
|
577
|
569
|
case ROT_180:
|
578
|
570
|
shot_pos_x = 0;
|
579
|
571
|
shot_pos_y = SHIP_OFF;
|
580
|
|
- shot_spd_x = spd_x;
|
581
|
|
- shot_spd_y = spd_y + SHOT_SPEED;
|
582
|
572
|
break;
|
583
|
573
|
|
584
|
574
|
case ROT_202_5:
|
585
|
575
|
shot_pos_x = -SHIP_OFF / 2 + 2;
|
586
|
576
|
shot_pos_y = SHIP_OFF / 2 + 3;
|
587
|
|
- shot_spd_x = spd_x - SHOT_SPEED_D_LO;
|
588
|
|
- shot_spd_y = spd_y + SHOT_SPEED_D_HI;
|
589
|
577
|
break;
|
590
|
578
|
|
591
|
579
|
case ROT_225:
|
592
|
580
|
shot_pos_x = -SHIP_OFF / 2 - 3;
|
593
|
581
|
shot_pos_y = SHIP_OFF / 2 + 2;
|
594
|
|
- shot_spd_x = spd_x - SHOT_SPEED_DIAG;
|
595
|
|
- shot_spd_y = spd_y + SHOT_SPEED_DIAG;
|
596
|
582
|
break;
|
597
|
583
|
|
598
|
584
|
case ROT_247_5:
|
599
|
585
|
shot_pos_x = -SHIP_OFF / 2 - 5;
|
600
|
586
|
shot_pos_y = SHIP_OFF / 2 - 1;
|
601
|
|
- shot_spd_x = spd_x - SHOT_SPEED_D_HI;
|
602
|
|
- shot_spd_y = spd_y + SHOT_SPEED_D_LO;
|
603
|
587
|
break;
|
604
|
588
|
|
605
|
589
|
case ROT_270:
|
606
|
590
|
shot_pos_x = -SHIP_OFF;
|
607
|
591
|
shot_pos_y = 0;
|
608
|
|
- shot_spd_x = spd_x - SHOT_SPEED;
|
609
|
|
- shot_spd_y = spd_y;
|
610
|
592
|
break;
|
611
|
593
|
|
612
|
594
|
case ROT_292_5:
|
613
|
595
|
shot_pos_x = -SHIP_OFF / 2 - 2;
|
614
|
596
|
shot_pos_y = -SHIP_OFF / 2 + 2;
|
615
|
|
- shot_spd_x = spd_x - SHOT_SPEED_D_HI;
|
616
|
|
- shot_spd_y = spd_y - SHOT_SPEED_D_LO;
|
617
|
597
|
break;
|
618
|
598
|
|
619
|
599
|
case ROT_315:
|
620
|
600
|
shot_pos_x = -SHIP_OFF / 2 - 3;
|
621
|
601
|
shot_pos_y = -SHIP_OFF / 2 - 2;
|
622
|
|
- shot_spd_x = spd_x - SHOT_SPEED_DIAG;
|
623
|
|
- shot_spd_y = spd_y - SHOT_SPEED_DIAG;
|
624
|
602
|
break;
|
625
|
603
|
|
626
|
604
|
case ROT_337_5:
|
627
|
605
|
shot_pos_x = -SHIP_OFF / 2 + 1;
|
628
|
606
|
shot_pos_y = -SHIP_OFF / 2 - 4;
|
629
|
|
- shot_spd_x = spd_x - SHOT_SPEED_D_LO;
|
630
|
|
- shot_spd_y = spd_y - SHOT_SPEED_D_HI;
|
631
|
607
|
break;
|
632
|
608
|
}
|
633
|
609
|
|