Das ist Script ist zwar recht umständlich geschrieben, aber soweit ich das sehe gibt es bereits die Buchstaben 'ä', 'ü' usw. Nur das 'ß' fehlt, kann man ja noch hinzufügen. Einfach in Zeile 507 in dem riesigen irrsinnigen Case-Statement ein
Code:
when 'ß'
      value = 97
einfügen (wtf? warum nimmt man dafür keinen Hash ;__ und MAX_CHARS auf 101 setzen.

Das eigentliche Problem, warum es nicht funktioniert: Ruby 1.8 arbeitet nur auf Bytestrings und nicht auf Kodierungen. Darum kann man nicht auf einzelne Zeichen eines Strings zugreifen, sondern nur auf einzelne Bytes. Für einen Amerikaner ist das ziemlich uninteressant, weil die Buchstaben des englischen Alphabets in einem Byte kodiert sind. Nun sind aber alle Strings im Maker in UTF-8 kodiert. Und deutsche Umlaute haben in UTF-8 die Länge 2 Bytes. Darum schlägt das Script fehl, wenn es nur einzelne Bytes abfragt.
Es gibt da aber einen Trick: Reguläre Ausdrücke können in Ruby mit UTF-8 Kodierung umgehen. Mit ihnen lassen sich Bytestrings in einzelne Charakter-Arrays zerlegen.

Da wäre einmal die Methode text_size. Korrigiert sieht sie so aus:
Code:
def text_size(str)
    chars = str.scan(/./) # wandle Bytestring in Char-Array um
    if self.font.text_type == 0
      ExtraFont.add_bitmap_text_pos(self.font.bitmap_name)
      bitmap_pos = ExtraFont.get_bitmap_text_pos(self.font.bitmap_name)
      width = 0
      font_size = self.font.bitmap_size / 100
      height = bitmap_pos.height * font_size
      chars.each do |char|
        src_rect = ExtraFont.get_char_rect(char, self.font.bitmap_name)
        dw = src_rect.width * font_size
        width += dw + 1
      end
      if width > 0
        width -= 1
      end
      return Rect.new(0, 0, width, height)
    else
      normal_text_size(str)
    end
  end
Und dann die Methode draw_bitmap_text:

Code:
def draw_bitmap_text(x, y, width, height, text, align=0)
    ExtraFont.add_bitmap_text_pos(self.font.bitmap_name)
    bitmap_pos = ExtraFont.get_bitmap_text_pos(self.font.bitmap_name)
    src_bitmap = bitmap_pos.fBitmap.clone
    drawx = 0
    font_size = self.font.bitmap_size / 100
    font_hue = self.font.bitmap_hue
    dh = bitmap_pos.height * font_size
    b_height = bitmap_pos.border_height * font_size
    max_dw = bitmap_pos.max_char_width * font_size
    dum_width = [max_dw * text.size, 32].max
    dum_height = [dh, 32].max
    dummy = Bitmap.new(dum_width, dum_height)
    src_bitmap.hue_change(font_hue) if font_hue != 0
    #Go through each char in string and draw the letter from the bitmap
    chars = text.scan(/./)
    chars.each do |char|
      src_rect = ExtraFont.get_char_rect(char, self.font.bitmap_name)
      w = src_rect.width
      h = src_rect.height
      dw = w * font_size
      dest_rect = Rect.new(drawx, 0, dw, dh)
      dummy.stretch_blt(dest_rect, src_bitmap, src_rect)
      drawx += dw
    end
    #If went beyond the width then strech it to the smaller width.
    if drawx - 1 >= width
      dest_rect = Rect.new(x, y+(height/2)-(b_height/2), width, dummy.height)
      src_rect = Rect.new(0, 0, drawx, dum_height)
      self.stretch_blt(dest_rect, dummy, src_rect)
    else
      posy = y+(height/2)-(b_height/2)
      src_rect = Rect.new(0, 0, drawx, dum_height)
      if align == 0    #left
        posx = x
      elsif align == 1 #center
        posx = x + (width - src_rect.width) / 2
      else             #right
        posx = x + (width - src_rect.width)
      end
      self.blt(posx, posy, dummy, src_rect)
    end
    dummy.dispose
  end
Die Originalmethoden durch die korrigierten ersetzen. Hoffentlich reicht das aus, damit das Script Umlaute erkennt.