mam problem z printsoftami z Lego chickena,niestety tego bugu nie usunał. Niektóre napisy w ogóle nie działają  (przy otwieraniu ksrzyń), a inne się nakładają na siebie. zaktualizowałem plik interface.d na podst njanowszej wersji w LEgo dla G2,  niestety błąd pozostaje.
Spoiler
/***********************************\
              INTERFACE
\***********************************/
var int Print_List; //zCList_zCViewText@
//========================================
// Vergangene Zeit seit Systemstart
//========================================
// Danke an Sektenspinner
func int sysGetTime() {
    CALL__cdecl(sysGetTimePtr);
    return CALL_RetValAsInt();
};
//========================================
// Farbhandling
//========================================
func int RGBA(var int r, var int g, var int b, var int a) {
    if(!a){if(!b){if(!g){if(!r){return 1;};};};};
    return ((r&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_RED)
          |((g&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_GREEN)
          |((b&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_BLUE)
          |((a&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_ALPHA);
};
func int ChangeAlpha(var int zCol, var int a) {
    return ((zCol & ~(zCOLOR_CHANNEL<<zCOLOR_SHIFT_ALPHA)) | ((a&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_ALPHA));
};
func int GetAlpha(var int zCol) {
    return (zCol&(zCOLOR_CHANNEL<<zCOLOR_SHIFT_ALPHA))>>zCOLOR_SHIFT_ALPHA;
};
//========================================
// Text generieren
//========================================
func int Print_CreateText(var string text, var string font) {
    var int hndl; hndl = new(zCViewText@);
    var zCViewText txt; txt = get(hndl);
    txt.timed = 0;
    txt.font = Print_GetFontPtr(font);
    txt.color = -1;
    txt.text = text;
    return hndl;
};
func int Print_CreateTextPtr(var string text, var string font) {
    var int ptr; ptr = create(zCViewText@);
    var zCViewText txt; txt = _^(ptr);
    txt.timed = 0;
    txt.font = Print_GetFontPtr(font);
    txt.text = text;
    txt.color = -1;
    return ptr;
};
func int Print_CreateTextPtrColored(var string text, var string font, var int color) {
    var int ptr; ptr = create(zCViewText@);
    var zCViewText txt; txt = _^(ptr);
    txt.timed = 0;
    txt.font = Print_GetFontPtr(font);
    txt.text = text;
    txt.color = color;
    txt.colored = 1;
    return ptr;
};
//========================================
// Text als zCViewText erhalten
//========================================
func zCViewText Print_GetText(var int hndl) {
    get(hndl);
};
func int Print_GetTextPtr(var int hndl) {
    return getPtr(hndl);
};
//========================================
// Text löschen
//========================================
func void Print_DeleteText(var int hndl) {
    if (!Hlp_IsValidHandle(hndl)) { return; };
    var zCView v; v = _^(MEM_Game.array_view[0]);
    var int list; list = _@(v.textLines_data);
    var int offs; offs = List_Contains(list, getPtr(hndl));
    if(offs > 1) {
        List_Delete(list, offs);
    }
    else {
        MEM_Error(ConcatStrings(IntToString(offs), ". Print not found?!"));
    };
    delete(hndl);
};
//========================================
// Screengröße (in Pixeln)
//========================================
var int Print_Ratio; //float
func void _Print_Ratio() {
    Print_Ratio = mkf(Print_Screen[PS_X]);
    Print_Ratio = divf(Print_Ratio, mkf(Print_Screen[PS_Y]));
};
var int Print_Screen[2];
func void Print_GetScreenSize() {
    Print_Screen[PS_X] = STR_ToInt(MEM_GetGothOpt("VIDEO", "zVidResFullscreenX"));
    Print_Screen[PS_Y] = STR_ToInt(MEM_GetGothOpt("VIDEO", "zVidResFullscreenY"));
    _Print_Ratio();
};
//========================================
// Pixel in Virtuelle Koordinaten
//========================================
func int Print_ToVirtual(var int pxl, var int dim) {
    Print_GetScreenSize();
    pxl *= 8192;
    if(dim == PS_X) {
        return pxl / Print_Screen[PS_X];
    }
    else if(dim == PS_Y) {
        return pxl / Print_Screen[PS_Y];
    };
    return pxl / dim;
};
func int Print_ToPixel(var int vrt, var int dim) {
    Print_GetScreenSize();
    if(dim == PS_X) {
        vrt *= Print_Screen[PS_X];
    }
    else if(dim == PS_Y) {
        vrt *= Print_Screen[PS_Y];
    }
    else {
        vrt *= dim;
    };
    return vrt / 8192;
};
func int Print_ToPixelF(var int vrt, var int dim) {
    Print_GetScreenSize();
    if(dim == PS_X) {
        vrt *= Print_Screen[PS_X];
    }
    else if(dim == PS_Y) {
        vrt *= Print_Screen[PS_Y];
    }
    else {
        vrt *= dim;
    };
    return fracf(vrt, PS_VMax);
};
func int Print_ToRatio(var int size, var int dim) {
    if (dim == PS_Y) {
        return roundf(mulf(mkf(size), Print_Ratio));
    } else if (dim == PS_X) {
        return roundf(divf(mkf(size), Print_Ratio));
    };
    return -1;
};
func int Print_ToRadian(var int angle) {
    const int toRadian = 1016003125; // 0.017453292
    mulf(angle, toRadian);
};
func int Print_ToDegree(var int angle) {
    const int toDegree = 1113927393; // 57.29578
    mulf(angle, toDegree);
};
//========================================
// Erweitertes PrintScreen
//========================================
instance zCViewTextPrint(zCViewText) {
    //_vtbl = 8643396; //0x83E344 g2
    _vtbl = 8251988; //dla gothic 1
    inPrintWin = 0;
    timer = 0;
    timed = 0;
    colored = 0;
    color = 0;
};
func void zCViewTextPrint_UnArchiver(var zCViewText this) {
    this._vtbl = PM_LoadInt("vtbl");
    this.posx = PM_LoadInt("posx");
    this.posy = PM_LoadInt("posy");
    this.text = PM_LoadString("text");
    this.font = Print_GetFontPtr(PM_LoadString("fontname"));
    this.timer = PM_LoadInt("timer");
    this.inPrintWin = PM_LoadInt("inPrintWin");
    this.color = PM_LoadInt("color");
    this.timed = PM_LoadInt("timed");
    this.colored = PM_LoadInt("colored");
    var zCView v; v = _^(MEM_Game.array_view[0]);
    if (v.textlines_next) {
        List_Add(v.textlines_next, MEM_InstToPtr(this));
    } else {
        v.textlines_next = List_Create(MEM_InstToPtr(this));
    };
};
func int Print_Ext(var int x, var int y, var string text, var string font, var int color, var int time) {
    if (time == -1) {
        var int h; h = new(zCViewTextPrint);
        var zCViewText txt; txt = get(h);
    } else {
        h = -1;
        txt = _^(create(zCViewTextPrint));
    };
    if(!color) { color = 1; };
    txt.timed = (time != -1);
    if (time != -1) { txt.timer = mkf(time); };
    txt.font = Print_GetFontPtr(font);
    txt.color = color;
    txt.text = text;
    txt.colored = 1;
    txt.posx = x;
    if (x == -1) {
        txt.posx = (PS_VMax - Print_ToVirtual(Print_GetStringWidth(text, font), PS_X)) / 2;
    };
    txt.posy = y;
    if (y == -1) {
        txt.posy = (PS_VMax - Print_ToVirtual(Print_GetFontHeight(font), PS_Y)) / 2;
    };
    var zCView v; v = _^(MEM_Game.array_view[0]);
    if (v.textlines_next) {
        List_Add(v.textlines_next, MEM_InstToPtr(txt));
    } else {
        v.textlines_next = List_Create(MEM_InstToPtr(txt));
    };
    return h;
};
//========================================
// Erweitertes PrintScreen (pixel)
//========================================
func int Print_ExtPxl(var int x, var int y, var string text, var string font, var int color, var int time) {
    Print_Ext(Print_ToVirtual(x, PS_X), Print_ToVirtual(y, PS_Y), text, font, color, time);
};
//========================================
// Textfeld
//========================================
func string Print_LongestLine(var string text, var string font) {
    var int cnt; cnt = STR_SplitCount(text, Print_LineSeperator);
    var int i; i = 0;
    var int max; max = 0;
    var int tmp; tmp = 0;
    var int pos; pos = MEM_StackPos.position;
        if (i >= cnt) {
            return STR_Split(text, Print_LineSeperator, i-1);
        };
        tmp = Print_GetStringWidth(STR_Split(text, Print_LineSeperator, i), font);
        if (tmp > max) {
            max = tmp;
        };
    i+=1;
    MEM_StackPos.position = pos;
};
func int Print_LongestLineLength(var string text, var string font) {
    return Print_GetStringWidth(Print_LongestLine(text, font), font);
};
func int Print_TextField(var int x, var int y, var string text, var string font, var int height) {
    var int cnt; cnt = STR_SplitCount(text, Print_LineSeperator);
    var int i; i = 1;
    var int ptr; ptr = Print_CreateTextPtr(STR_Split(text, Print_LineSeperator, 0), font);
    var zCViewText txt; txt = _^(ptr);
    txt.posx = x;
    txt.posy = y;
    var int list; list = List_Create(Ptr);
    var int pos; pos = MEM_StackPos.position;
    if (i >= cnt) {
        return list;
    };
        ptr = Print_CreateTextPtr(STR_Split(text, Print_LineSeperator, i), font);
        txt = _^(ptr);
        txt.posx = x;
        txt.posy = y+(height*i);
        List_Add(list, ptr);
        i+=1;
    MEM_StackPos.position = pos;
};
func int Print_TextFieldPxl(var int x, var int y, var string text, var string font) {
    return Print_TextField(Print_ToVirtual(x, PS_X), Print_ToVirtual(y, PS_Y), text, font, Print_ToVirtual(Print_GetFontHeight(font), PS_Y));
};
//========================================
// Klasse für PermMem
//========================================
class gCPrintS {
    var int a8_Alpha;    // Anim8(h)
    var int a8_Movement; // Anim8(h)
    var int tv_Text;     // Print(h)
    var int vr_Pos;
    var int vr_Offs;
};
instance gCPrintS@(gCPrintS);
var int gCPrintS_Act;
var int gCPrintS_COff;
func void gCPrintS_Delete(var gCPrintS this) {
    Anim8_Delete(this.a8_Movement);
    Print_DeleteText(this.tv_Text);
};
func void gCPrintS_Alpha(var int h, var int value) {
    var gCPrintS p; p = get(h);
    var zCViewText t; t = get(p.tv_Text);
    t.color = ChangeAlpha(t.color, value);
    if(gCPrintS_COff > p.vr_Offs) {
        p.vr_Pos -= (gCPrintS_COff - p.vr_Offs) * PF_TextHeight;
        Anim8(p.a8_Movement, p.vr_Pos, PF_MoveYTime, A8_SlowEnd);
        p.vr_Offs = gCPrintS_COff;
    };
};
func void gCPrintS_Position(var int h, var int value) {
    var gCPrintS p; p = get(h);
    var zCViewText t; t = get(p.tv_Text);
    t.posY = value;
};
//========================================
// Softprint
//========================================
func void PrintS_Ext(var string txt, var int color) {
    var int h; h = new(gCPrintS@);
    var gCPrintS p; p = get(h);
    var int v;
    v = Anim8_NewExt(1, gCPrintS_Alpha, h, false);
    Anim8_RemoveIfEmpty(v, true);
    Anim8_RemoveDataIfEmpty(v, true);
    Anim8 (v, 255, PF_FadeInTime,  A8_Constant);
    Anim8q(v, 0,   PF_WaitTime,    A8_Wait);
    Anim8q(v, 0,   PF_FadeOutTime, A8_SlowStart);
    p.a8_Alpha = v;
    v = Anim8_NewExt(PF_PrintY, gCPrintS_Position, h, false);
    Anim8 (v, PF_PrintY - PF_TextHeight, PF_MoveYTime, A8_SlowEnd);
    p.a8_Movement = v;
    p.tv_Text = Print_Ext(PF_PrintX, PF_PrintY, txt, PF_Font, color, -1);
    p.vr_Pos = PF_PrintY - PF_TextHeight;
    gCPrintS_COff += 1;
    if(!gCPrintS_Act) {
        gCPrintS_COff = 0;
    };
    gCPrintS_Act += 1;
    p.vr_Offs = gCPrintS_COff;
};
func void AI_PrintS_Ext(var c_npc slf, var string txt, var int color) {
    AI_Function_SI(slf, PrintS_Ext, txt, color);
};
//========================================
// vereinfachter Softprint
//========================================
func void PrintS(var string txt) {
    PrintS_Ext(txt, RGBA(255,255,255,0));
};
func void AI_PrintS(var c_npc slf, var string txt) {
    AI_Function_S(slf, PrintS, txt);
};
//========================================
// PrintScreen fixen
//========================================
func void PrintScreen_Ext(var string txt, var int x, var int y, var string font, var int timeSec) {
    if(x == -1) {
        x = (PS_VMax - Print_ToVirtual(Print_GetStringWidth(txt, font), PS_X)) / 2;
    }
    else {
        x = Print_ToVirtual(x, 100);
    };
    if(y == -1) {
        y = (PS_VMax - Print_ToVirtual(Print_GetFontHeight(font), PS_Y)) / 2;
    }
    else {
        y = Print_ToVirtual(y, 100);
    };
    Print_Ext(x, y, txt, font, COL_White, timeSec * 1000);
};
class PS_Param {
    var string txt;
    var int x;
    var int y;
    var string font;
    var int timesec;
}; instance PS_Param@(PS_Param);
func void AI_PrintScreen_Execute(var int h) {
    var PS_Param p; p = get(h);
    PrintScreen_Ext(p.txt, p.x, p.y, p.font, p.timeSec);
    delete(h);
};
func void AI_PrintScreen(VAR STRING msg, VAR INT posx, VAR INT posy, VAR STRING font, VAR INT timeSec){
	PrintScreen(msg, posx, posy, font, timesec);
};
func void AI_PrintScreen_Ext(var string txt, var int x, var int y, var string font, var int timeSec) {
    var int h; h = New(PS_Param@);
    PS_Param@.txt = txt;
    PS_Param@.x = x;
    PS_Param@.y = y;
    PS_Param@.font = font;
    PS_Param@.timeSec = timeSec;
    AI_Function_I(self, AI_PrintScreen_Execute, h);
};
func void Print_FixPS() {
    var int PS_Ext; PS_Ext = MEM_GetFuncOffset(PrintScreen_Ext);
    var zCPar_Symbol PS; PS = _^(MEM_ReadIntArray(contentSymbolTableAddress, MEM_GetFuncID(PrintScreen)));
    Call_Begin(0);
        Call_IntParam(_@(PS_Ext));
        Call__thiscall(_@(ContentParserAddress), zCParser__DoStack);
    PS.content = Call_Close();
    var int AI_PS_Ext; AI_PS_Ext = MEM_GetFuncOffset(AI_PrintScreen_Ext);
     PS = _^(MEM_ReadIntArray(contentSymbolTableAddress, MEM_GetFuncID(AI_PrintScreen)));
    Call_Begin(0);
        Call_IntParam(_@(AI_PS_Ext));
        Call__thiscall(_@(ContentParserAddress), zCParser__DoStack);
    PS.content = Call_Close();
};