void enemy_tick_fly_straight_and_dip(struct jumpnrun_enemy *self, struct jumpnrun_game_state *state, struct jumpnrun_level *lv, struct jumpnrun_tile_range const *visible_tiles, vec2d *player_inertia_mod) { if(fixed_point_lt(fixed_point_abs(fixed_point_sub(enemy_pos_hitbox(self).x, state->player.base.hitbox.pos.x)), FIXED_INT(20))) { self->base.flags |= JUMPNRUN_ENEMY_EVENT_TRIGGER1; } if(self->base.flags & JUMPNRUN_ENEMY_EVENT_TRIGGER1) { self->base.inertia.y = fixed_point_add(fixed_point_add(self->base.inertia.y, fixed_point_div(self->type->spawn_inertia.y, FIXED_INT(3))), fixed_point_mul(FIXED_POINT(0, 5), fixed_point_sub(self->spawn_pos.y, enemy_pos_hitbox(self).y))); } else { self->base.inertia.y = FIXED_INT(0); } enemy_tick_common(self, state, lv, visible_tiles, player_inertia_mod); enemy_animation_advance(self); }
void enemy_tick_swing_up_and_down(struct jumpnrun_enemy *self, struct jumpnrun_game_state *state, struct jumpnrun_level *lv, struct jumpnrun_tile_range const *visible_tiles, vec2d *player_inertia_mod) { enemy_tick_common(self, state, lv, visible_tiles, player_inertia_mod); self->base.inertia.y = fixed_point_add(fixed_point_add(self->base.inertia.y, fixed_point_div(self->type->spawn_inertia.y, FIXED_INT(3))), fixed_point_mul(FIXED_POINT(0, 5), fixed_point_sub(self->spawn_pos.y, enemy_pos_display(self).y))); enemy_animation_advance(self); }
int main(void) { int i = 0; for (fixed32 value = SIN_TABLE_BEGIN; value <= SIN_TABLE_END; value += SIN_TABLE_STEP, i++) { fixed32 sin = sin_table[i]; fixed32 cos = cos_table[i]; fixed32 sinx2 = fixed_point_mult(sin, sin); fixed32 cosx2 = fixed_point_mult(cos, cos); fixed32 one = fixed_point_add(sinx2, cosx2); printf("%d %x => sin: %x cos: %x sin**2: %x cos**2: %x one: %x\n", i, value, sin, cos, sinx2, cosx2, one); } }