|
@@ -49,6 +49,10 @@ enum ACCELERATION {
|
49
|
49
|
#define SPEED_MAX 16
|
50
|
50
|
#define SHOT_SPEED 8
|
51
|
51
|
|
|
52
|
+#define BAR_OFFSET_X (4 - 80)
|
|
53
|
+#define HEALTH_OFFSET_Y -16
|
|
54
|
+#define POWER_OFFSET_Y 16
|
|
55
|
+
|
52
|
56
|
static void splash(void) {
|
53
|
57
|
disable_interrupts();
|
54
|
58
|
DISPLAY_OFF;
|
|
@@ -77,6 +81,34 @@ static void splash(void) {
|
77
|
81
|
}
|
78
|
82
|
}
|
79
|
83
|
|
|
84
|
+static void status(uint8_t health, uint8_t power, uint8_t *hiwater) {
|
|
85
|
+ if (health > 0) {
|
|
86
|
+ switch (health >> 6) {
|
|
87
|
+ case 3:
|
|
88
|
+ spr_draw(SPR_HEALTH, FLIP_X, BAR_OFFSET_X, HEALTH_OFFSET_Y - 24, hiwater);
|
|
89
|
+ case 2:
|
|
90
|
+ spr_draw(SPR_HEALTH, FLIP_X, BAR_OFFSET_X, HEALTH_OFFSET_Y - 16, hiwater);
|
|
91
|
+ case 1:
|
|
92
|
+ spr_draw(SPR_HEALTH, FLIP_X, BAR_OFFSET_X, HEALTH_OFFSET_Y - 8, hiwater);
|
|
93
|
+ case 0:
|
|
94
|
+ spr_draw(SPR_HEALTH, FLIP_X, BAR_OFFSET_X, HEALTH_OFFSET_Y - 0, hiwater);
|
|
95
|
+ }
|
|
96
|
+ }
|
|
97
|
+
|
|
98
|
+ if (power > 0) {
|
|
99
|
+ switch (power >> 6) {
|
|
100
|
+ case 3:
|
|
101
|
+ spr_draw(SPR_POWER, FLIP_X, BAR_OFFSET_X, POWER_OFFSET_Y + 0, hiwater);
|
|
102
|
+ case 2:
|
|
103
|
+ spr_draw(SPR_POWER, FLIP_X, BAR_OFFSET_X, POWER_OFFSET_Y + 8, hiwater);
|
|
104
|
+ case 1:
|
|
105
|
+ spr_draw(SPR_POWER, FLIP_X, BAR_OFFSET_X, POWER_OFFSET_Y + 16, hiwater);
|
|
106
|
+ case 0:
|
|
107
|
+ spr_draw(SPR_POWER, FLIP_X, BAR_OFFSET_X, POWER_OFFSET_Y + 24, hiwater);
|
|
108
|
+ }
|
|
109
|
+ }
|
|
110
|
+}
|
|
111
|
+
|
80
|
112
|
static void game(void) {
|
81
|
113
|
disable_interrupts();
|
82
|
114
|
DISPLAY_OFF;
|
|
@@ -94,6 +126,8 @@ static void game(void) {
|
94
|
126
|
enum SPRITE_ROT rot = 0;
|
95
|
127
|
enum ACCELERATION prev_acc = 0xFF; // so we draw the ship on the first frame
|
96
|
128
|
uint8_t ship_hiwater = 0;
|
|
129
|
+ uint8_t health = 0xFF;
|
|
130
|
+ uint8_t power = 0xFF;
|
97
|
131
|
|
98
|
132
|
obj_init();
|
99
|
133
|
|
|
@@ -114,7 +148,8 @@ static void game(void) {
|
114
|
148
|
acc |= ACC_R;
|
115
|
149
|
}
|
116
|
150
|
|
117
|
|
- if (KEY_DOWN(J_A)) {
|
|
151
|
+ if (KEY_DOWN(J_A) && (power > 0)) {
|
|
152
|
+ power--;
|
118
|
153
|
switch (rot) {
|
119
|
154
|
case ROT_0:
|
120
|
155
|
SpdY -= SPEED_INC;
|
|
@@ -143,6 +178,8 @@ static void game(void) {
|
143
|
178
|
default:
|
144
|
179
|
break;
|
145
|
180
|
}
|
|
181
|
+ } else if (!KEY_DOWN(J_A) && (power < 0xFF)) {
|
|
182
|
+ power++;
|
146
|
183
|
}
|
147
|
184
|
|
148
|
185
|
if (KEY_PRESSED(J_B)) {
|
|
@@ -188,15 +225,7 @@ static void game(void) {
|
188
|
225
|
}
|
189
|
226
|
|
190
|
227
|
obj_draw(SpdX, SpdY, &hiwater);
|
191
|
|
-
|
192
|
|
- spr_draw(SPR_HEALTH, FLIP_NONE, -80 + 8, -32, &hiwater);
|
193
|
|
- spr_draw(SPR_HEALTH, FLIP_NONE, -80 + 8, -24, &hiwater);
|
194
|
|
- spr_draw(SPR_HEALTH, FLIP_NONE, -80 + 8, -16, &hiwater);
|
195
|
|
- spr_draw(SPR_HEALTH, FLIP_NONE, -80 + 8, -8, &hiwater);
|
196
|
|
- spr_draw(SPR_POWER, FLIP_NONE, -80 + 8, 32, &hiwater);
|
197
|
|
- spr_draw(SPR_POWER, FLIP_NONE, -80 + 8, 24, &hiwater);
|
198
|
|
- spr_draw(SPR_POWER, FLIP_NONE, -80 + 8, 16, &hiwater);
|
199
|
|
- spr_draw(SPR_POWER, FLIP_NONE, -80 + 8, 8, &hiwater);
|
|
228
|
+ status(health, power, &hiwater);
|
200
|
229
|
|
201
|
230
|
hide_sprites_range(hiwater, MAX_HARDWARE_SPRITES);
|
202
|
231
|
|