atarionline.pl MadPascal - modyfikacja znaków a texout - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorwojtas76
    • CommentTime9 Nov 2020 zmieniony
     
    Zmodyfikowałem sobie zestaw znaków (na przykładzie z mp/samples/games/wolves.pas) działający w gr0, czyli w skrócie:

    var
    topMem : word;
    CHBAS : byte absolute $2F4;
    RAMTOP : byte absolute $6A;
    _znak : array[0..6] of byte = (..)
    begin
    InitGraph(0);
    topMem := RAMTOP - 8;
    topMem := topMem * 256;
    CHBAS := topMem div 256;
    move(pointer(57344), pointer(topMem), 1023);
    move(_znak, pointer(topMem+103*8), sizeOf(_znak));
    end.


    ..ale już po zmianie na tryb graficzny gr8 (initgraph(8)) lub VBXE (SetGraphMode(4)) poprzez odpowiednio canvas.textout/texout wyświetlany jest standardowy znak z romu..Co robię nie tak..
    • 2: CommentAuthortebe
    • CommentTime9 Nov 2020 zmieniony
     
    zmień TCanvas.Create w Graphics.pas na
    procedure TCanvas.Create;
    var br: TBrushBitmap = ($ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff);
    begin

    base:=dpeek(88);

    move(pointer(peek(756) shl 8), fdata, 1024);

    brush.bitmap:=@br;

    TCanvas.FontInitialize;

    end;


    wykonaj Create po zmianie zestawu znaków
    • 3:
       
      CommentAuthorMq
    • CommentTime9 Nov 2020 zmieniony
     
    Pamiętam, że w Basicu było tak, że jak się zmieniało tryb graficzny, to zawsze trzeba było od nowa ustawić adres zestawu znaków. Może w Mad Pascalu po prostu też tak trzeba robić. Nie jest to kwestia OS-a? Nie wiem, bo ostatnio już na dzień dobry wyłączam OS, a z drugiej strony mam nawyk, że ustawiam font po zmianie trybu graficznego.
    • 4: CommentAuthorwojtas76
    • CommentTime9 Nov 2020
     
    Dzięki za odpowiedź narazie mam komp zajęty więc nie sprawdzę.. ok ale tak czy inaczej próbowałem zmienić fonty: gr0/zmiana/writeln('Ąą') działa, potem zmiana np gr8 font systemowy, ale też gr8/zmiana fontu no i też font systemowy.. z canvas nie wątpię że zadziała - skoro Tebe napisał :) ale pytanie co z VBXE.. bo canvas (chyba) vbxe nie dotyczy
    • 5: CommentAuthortebe
    • CommentTime9 Nov 2020
     
    z VBXE (S2) musisz zapewne zmienić fonty przed wywołaniem trybu VBXE
    • 6: CommentAuthorwojtas76
    • CommentTime9 Nov 2020
     
    ok czyli przed SetGraphMode(4)? No ale to robiłem...
    • 7: CommentAuthorwojtas76
    • CommentTime22 Nov 2020
     
    Trochę po przewie niestety.. W GR8 po zmianie znaków jest ok, ale niestety pojawiają się krzaki...
    Co do VBXE pomimo różnych prób zero efektu.. Można prosić o ponowne przyjrzenie się... ;) pozdrawiam
    • 8: CommentAuthortebe
    • CommentTime23 Nov 2020
     
    krzaki? może obszar pamięci dla GR8 nachodzi na pamięć zestawu znakowego

    w załączniku kody operacji dla S2: (VBXE), XIO 111 albo XIO 112 ?
    • 9: CommentAuthorwojtas76
    • CommentTime23 Nov 2020
     
    Kapłem się... zmieniłem topmem zresztą trochę widać że te krzaczki jakby trochę literki przypominają.. muszą trochę obczaić te obliczenia bo pewnie dla vbxe też się to zmieni.. xio.. trochę poczytałem więc coś dziś potestuje dzięki pozdrawiam
    • 10:
       
      CommentAuthorKaz
    • CommentTime23 Nov 2020 zmieniony
     

    Mq:

    Pamiętam, że w Basicu było tak, że jak się zmieniało tryb graficzny, to zawsze trzeba było od nowa ustawić adres zestawu znaków.


    I nie tylko to, bo komenda GRAPHICS resetowała więcej rzeczy. Dokładny opis tej komendy oczywiście u Zientary, w "Mapa pamięci":
    • 11: CommentAuthorwojtas76
    • CommentTime29 Nov 2020
     
    Pewnie już zaczynam przynudzać z tymi znakami.. ;) Ale pojawił mi się kolejny kłopotek.. Przy wyświetleniu tekstu przez canvas.textout w Gr.8 pojawia się szczelina między dwoma znakami znakami oraz szerokość 2 znaków jest zbliżona do 3. Widać że "Uuu" jest skondensowane w porównaniu do wyświetlania w Gr.0 co widać na załączonym obrazku.. Co można na to poradzić, aby w Gr.8 wyglądało to jak w Gr.0. Pozdrawiam.
    • 12: CommentAuthortebe
    • CommentTime30 Nov 2020 zmieniony
     
    używasz własnego zestawu znaków? masz wyłączony OS? zmieniasz zestawu znaków?

    starszy bajt zestawu znaków musi być zapisany w komórce 756, przed wywołaniem 'canvas.create' wtedy zestaw znaków przepisywany jest do
    bufora i wyliczane są szerokości znaków oraz znaki są przesuwane

    procedure FontInitialize odpowiada za wyliczenie szerokości znaków i ich przesunięcie