void put_at_defense_frame (struct anim *k) { struct frameset *frameset; play_audio (&sword_defense_audio, NULL, k->id); switch (k->type) { case NO_ANIM: default: break; case KID: select_frame (k, kid_sword_defense_frameset, 0); next_frame (&k->f, &k->f, &k->fo); select_frame (k, kid_sword_defense_frameset, 1); struct anim *ke = get_anim_by_id (k->enemy_id); if (ke->type == KID) { select_xframe (&k->xf, sword_frameset, 11); k->xf.dx = -13; k->xf.dy = +5; } else select_xframe (&k->xf, sword_frameset, 14); k->action = kid_sword_defense; uncollide_back_fight (k); next_frame (&k->f, &k->f, &k->fo); break; case GUARD: case FAT_GUARD: case VIZIER: case SKELETON: case SHADOW: frameset = get_guard_defense_frameset (k->type); select_frame (k, frameset, 0); select_xframe (&k->xf, sword_frameset, 11); k->action = guard_defense; uncollide_back_fight (k); next_frame (&k->f, &k->f, &k->fo); break; } /* if (k->id == 0) */ /* printf ("%s: k->i = %i, k->fo.dx = %i\n", */ /* __func__, k->i, k->fo.dx); */ }
static bool flow (struct anim *g) { if (g->oaction != guard_defense) g->i = -1; struct anim *ke = get_anim_by_id (g->enemy_id); if (g->i == 1) { guard_attack (g); return false; } else if (g->i == 0 && ke && ke->attack_defended == 2 && ke->counter_attacked != 2) { guard_walkb (g); return false; } else if (g->i == 0 && ! (ke && ke->attack_defended == 2)) { guard_vigilant (g); return false; } struct frameset *frameset = get_guard_defense_frameset (g->type); select_frame (g, frameset, g->i + 1); if (g->i == 0) g->j = 11; select_xframe (&g->xf, sword_frameset, g->j); if (g->i == 1) g->xf.b = NULL; if (g->oaction == guard_attack) g->fo.dx += +2; if (g->type == SKELETON) g->xf.dy += -3; if (g->type == SHADOW) g->xf.dy += -2; /* if (g->id == 0) */ /* printf ("guard_defense: g->i = %i, g->fo.dx = %i\n", */ /* g->i, g->fo.dx); */ return true; }