ai_unit =
<
  "fire",
  "arm_%"
>;

arm_holder = 
{
  "holder"
};

game_unit -.* <holder_type, HLDR_CAPACITY> # ai_unit =
<
  fire (p_game_unit -&w, p_fire_arm);
  arm_exists -a (p_game_unit, p_fire_arm) -> (ulong);

  game_unit <holder_type, HLDR_CAPACITY> =
  {
    arm <holder_type, HLDR_CAPACITY> # arm_holder =
    {
      holder_type holder[HLDR_CAPACITY];
    };

    arm _;
  };
>;

has_wings -.* <p_unit> = 
<
  fly (p_unit -&w, p_fly_land);
  land (p_unit -&w, p_fly_land);

  fly_land = 
  {
    ...
  };
>;

flying_monster -.+ <holder_type, 
                    HLDR_CAPACITY> # game_unit, 
                                     has_wings <p_game_unit> =
<        
  move (p_game_unit -&w, p_move_rotate);
  rotate (p_game_unit -&w, p_move_rotate);

  RT_* // LEFT, RIGHT;

  move_rotate = 
  {
    ...
  };
>;
