|
@@ -88,6 +88,10 @@ struct obj {
|
88
|
88
|
int16_t spd_x;
|
89
|
89
|
int16_t spd_y;
|
90
|
90
|
uint8_t travel;
|
|
91
|
+ uint8_t frame;
|
|
92
|
+ uint8_t frame_index;
|
|
93
|
+ uint8_t frame_count;
|
|
94
|
+ uint8_t frame_duration;
|
91
|
95
|
};
|
92
|
96
|
|
93
|
97
|
static struct obj objs[MAX_OBJ];
|
|
@@ -190,6 +194,10 @@ enum OBJ_STATE obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_
|
190
|
194
|
objs[next].spd_x = spd_x;
|
191
|
195
|
objs[next].spd_y = spd_y;
|
192
|
196
|
objs[next].travel = 0;
|
|
197
|
+ objs[next].frame = 0;
|
|
198
|
+ objs[next].frame_index = 0;
|
|
199
|
+ objs[next].frame_count = 1;
|
|
200
|
+ objs[next].frame_duration = 0;
|
193
|
201
|
|
194
|
202
|
return OBJ_ADDED;
|
195
|
203
|
}
|
|
@@ -336,12 +344,27 @@ int16_t obj_do(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score, uint8_t *
|
336
|
344
|
&& (abs(objs[i].off_y - objs[j].off_y) <= SHOT_RANGE)) {
|
337
|
345
|
sample_play_explosion_orbs();
|
338
|
346
|
|
339
|
|
- objs[i].active = 0;
|
340
|
347
|
objs[j].active = 0;
|
341
|
348
|
|
342
|
349
|
obj_cnt[objs[i].sprite]--;
|
343
|
350
|
obj_cnt[objs[j].sprite]--;
|
344
|
351
|
|
|
352
|
+ objs[i].sprite = SPR_EXPL;
|
|
353
|
+ objs[i].travel = 0;
|
|
354
|
+ objs[i].frame = 0;
|
|
355
|
+ objs[i].frame_index = 0;
|
|
356
|
+ objs[i].frame_count = 4;
|
|
357
|
+ objs[i].frame_duration = 4;
|
|
358
|
+ obj_cnt[SPR_EXPL]++;
|
|
359
|
+
|
|
360
|
+ // move explosion to center of orb instead of shot
|
|
361
|
+ objs[i].off_x = objs[j].off_x;
|
|
362
|
+ objs[i].off_y = objs[j].off_y;
|
|
363
|
+
|
|
364
|
+ // also would look kinda cool with shot speed still applied?
|
|
365
|
+ objs[i].spd_x = 0;
|
|
366
|
+ objs[i].spd_y = 0;
|
|
367
|
+
|
345
|
368
|
if (!is_splash) {
|
346
|
369
|
obj_respawn(RESPAWN_DISTANCE);
|
347
|
370
|
}
|
|
@@ -365,7 +388,21 @@ int16_t obj_do(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score, uint8_t *
|
365
|
388
|
continue;
|
366
|
389
|
}
|
367
|
390
|
|
368
|
|
- spr_draw(objs[i].sprite, FLIP_NONE, objs[i].off_x >> POS_SCALE_OBJS, objs[i].off_y >> POS_SCALE_OBJS, 0, hiwater);
|
|
391
|
+ spr_draw(objs[i].sprite, FLIP_NONE, objs[i].off_x >> POS_SCALE_OBJS, objs[i].off_y >> POS_SCALE_OBJS, objs[i].frame_index, hiwater);
|
|
392
|
+
|
|
393
|
+ objs[i].frame++;
|
|
394
|
+ if (objs[i].frame >= objs[i].frame_duration) {
|
|
395
|
+ objs[i].frame = 0;
|
|
396
|
+ objs[i].frame_index++;
|
|
397
|
+ if (objs[i].frame_index >= objs[i].frame_count) {
|
|
398
|
+ objs[i].frame_index = 0;
|
|
399
|
+
|
|
400
|
+ if (objs[i].sprite == SPR_EXPL) {
|
|
401
|
+ objs[i].active = 0;
|
|
402
|
+ obj_cnt[SPR_EXPL]--;
|
|
403
|
+ }
|
|
404
|
+ }
|
|
405
|
+ }
|
369
|
406
|
}
|
370
|
407
|
|
371
|
408
|
return damage;
|