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

!arm_holder = 
{
  "holder"
};

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

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

    arm _;
  };
>;

!has_wings <p_unit> = 
<
  void fly (p_unit -&w, p_fly_land);
  void land (p_unit -&w, p_fly_land);

  fly_land = 
  {
    ...
  };
>;

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

  RT_* // LEFT, RIGHT;

  move_rotate = 
  {
    ...
  };
>;