static u8* mFont_Get_MarkTex_p(int mark_type) {
  static u8* tex_p_array[mFont_MARKTYPE_TOTAL] = {
    FONT_nes_tex_jyouge,
    FONT_nes_tex_sayuu,
    FONT_nes_tex_cursor,
    FONT_nes_tex_next,
    FONT_nes_tex_choice
  };

  if (0 <= mark_type && mark_type < mFont_MARKTYPE_TOTAL && tex_p_array[mark_type] != NULL) {
    return tex_p_array[mark_type];
  }

  return NULL;
}

static int mFont_Get_MarkTex_sizeW(int mark_type) {
  static int size_array[mFont_MARKTYPE_TOTAL] = { 16, 16, 16, 16, 16 };

  if (0 <= mark_type && mark_type < mFont_MARKTYPE_TOTAL && size_array[mark_type] != 0) {
    return size_array[mark_type];
  }

  return 0;
}

static int mFont_Get_MarkTex_sizeH(int mark_type) {
  static int size_array[mFont_MARKTYPE_TOTAL] = { 16, 16, 16, 16, 16 };

  if (0 <= mark_type && mark_type < mFont_MARKTYPE_TOTAL && size_array[mark_type] != 0) {
    return size_array[mark_type];
  }

  return 0;
}

extern f32 mFont_SetMarkChar(
  GAME* game,
  u8 mark_type,
  f32 x, f32 y,
  int r, int g, int b, int a,
  int revert_flag,
  f32 scale_x, f32 scale_y,
  int mode
) {
  f32 next_x = x;

  if ((int)mark_type < mFont_MARKTYPE_TOTAL) {
    u8* tex = mFont_Get_MarkTex_p(mark_type);
    int w = mFont_Get_MarkTex_sizeW(mark_type);
    int h = mFont_Get_MarkTex_sizeH(mark_type);
    GRAPH* graph = game->graph;
    Gfx* gfx = GRAPH_ALLOC_TYPE(graph, Gfx, 9);

    if (tex != NULL && w != 0 && h != 0 && gfx != NULL) {
      mFont_SetMode(graph, mode);
      mFont_SetPrimColor(graph, r, g, b, a, mode);
      mFont_SetCombineMode(graph, revert_flag, mode);

      OPEN_DISP(graph);

      if (mode == 1) {
        gSPDisplayList(NOW_FONT_DISP++, gfx);
      }
      else {
        gSPDisplayList(NOW_POLY_OPA_DISP++, gfx);
      }

      CLOSE_DISP(graph);

      gDPLoadTextureTile_4b_Dolphin(
        gfx++,
        tex,
        G_IM_FMT_I,
        w, (h + 3)
      );

      gSPEndDisplayList(gfx);
      next_x = mFont_SetVertexRectangle(game, x, y, w, h, scale_x, scale_y, mode);
    }
  }

  return next_x;
}
