+static badge_sprite const anim_sickle[] = {
+ { 3, 3, (uint8_t const *) "\x8a\x01" },
+ { 3, 3, (uint8_t const *) "\x6a" },
+ { 3, 3, (uint8_t const *) "\xa3" },
+ { 3, 3, (uint8_t const *) "\xac" }
+};
+
+enum {
+ JUMPNRUN_SHOT_EXTENT = 3,
+ JUMPNRUN_SHOT_TICKS_PER_FRAME = 24
+};
+
+static void jumpnrun_shot_despawn(jumpnrun_shot *shot) {
+ shot->inertia.x = FIXED_INT(0);
+}
+
+static void jumpnrun_shot_spawn(jumpnrun_shot *shot, jumpnrun_game_state const *state) {
+ shot->tick = 0;
+ shot->inertia = shot_spawn_inertia;
+
+ if(state->player.anim_direction == BADGE_BLT_MIRRORED) {
+ shot->current_box = rectangle_new((vec2d) { fixed_point_sub(rectangle_left(&state->player.current_box), FIXED_INT(JUMPNRUN_SHOT_EXTENT)), rectangle_top(&state->player.current_box) },
+ (vec2d) { FIXED_INT(JUMPNRUN_SHOT_EXTENT), FIXED_INT(JUMPNRUN_SHOT_EXTENT) });
+ shot->inertia.x = fixed_point_neg(shot->inertia.x);
+ } else {
+ shot->current_box = rectangle_new((vec2d) { rectangle_right(&state->player.current_box), rectangle_top(&state->player.current_box) },
+ (vec2d) { FIXED_INT(JUMPNRUN_SHOT_EXTENT), FIXED_INT(JUMPNRUN_SHOT_EXTENT) });
+ }
+}