atarionline.pl Action! - co robie źle ? - 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: CommentAuthortatko74
      • CommentTime12 Apr 2024 14:04
       
      Witam
      Bawie sie Action!'em i przy zabawie z tablicami coś mi nie gra.
      Może ktoś podopowie o co chodzi - gdzie bład - w programie - w moim myśleniu ?

      kod:
      MODULE
      BYTE mx=[10]
      BYTE my=[5]
      BYTE ARRAY tablica(1000)

      PROC generator()
      BYTE test,px,py
      Graphics(0)
      PrintE ("")
      PrintE ("gen")
      for py=1 to my
      do
      print("# ")
      for px=1 to mx
      do
      test=rand(2)
      tablica(py*px)=test
      printb (tablica(py*px))
      print(",")
      od
      printE(" #")
      od
      PrintE ("koniec")

      PrintE ("poka")
      for py=1 to my
      do
      print("# ")
      for px=1 to mx
      do
      printb (tablica(py*px))
      print(",")
      od
      printE(" #")
      od
      PrintE ("koniec")
      RETURN


      a efekt na skrinie - jak widać "przelecenie" po raz drugi tablicy pokazuje inne wartości =/
      • 2:
         
        CommentAuthorjhusak
      • CommentTime12 Apr 2024 15:04
       
      Tam chyba jest jakiś błąd z indeksami tablicy, spróbuj wyliczyć indeks wcześniej do zmiennej i podaj zmienną jako indeks.
      • 3:
         
        CommentAuthorGeorge
      • CommentTime12 Apr 2024 17:04
       
      py*px nie omiata całej 50 elementowej tablicy.
      Bo na przykład 2 * 3 = 3 * 2
      Do elementu 6 wchodzisz dwa razy i ustawiasz losowo.
      Wyświetlasz w innym miejscu niż wynika z indeksu.

      Drugie wyświetlenie wyświetla indeks 6 w tych samych dwóch miejscach na ekranie, ale z drugą wylosowaną wartością, pierwsze wyświetlenie wyświetla obie losowe wartości.

      poszedłbym po pierwsze w indeksowanie od zera, a następnie indeksował: py*10+px, ale to pierwsze nie jest konieczne, tylko chyba wygodniej poźniej na ekranie znaleźć wartość.
      • 4:
         
        CommentAuthorjhusak
      • CommentTime12 Apr 2024 18:04 zmieniony
       
      A, jasne. Lampka mię się nie zaświeciła z tym powtarzaniem indeksów :D

      Poza tym tu chodzi o ćwiczenie chyba, a nie o część programu, bo sobie nie wyobrażam tak pokrętnej logiki przy kodowaniu czegokolwiek :)

      Ale nie przejmuj się tatko74 - to norma przy zabawie. Coś miało zająć 5 minut, a zajmuje godzinę, bo błąd się schował w miejscu, gdzie go nie podejrzewamy :)
      • 5:
         
        CommentAuthorGeorge
      • CommentTime12 Apr 2024 18:04
       
      No niby tak można adresować ekran, ale mnożenie na Atari zbyt drogie :)
      • 6: CommentAuthortatko74
      • CommentTime12 Apr 2024 20:04
       
      Sprawdzę inne metody :)
      Dziś już wjechał płyn złocisty więc czas na zadumę XD i złote przeboje :)
      Ale - może czegoś nie doczytałem - a Action nie można zdefiniować tablicy dwuwymiarowej ?
      • 7:
         
        CommentAuthorGeorge
      • CommentTime15 Apr 2024 00:04 zmieniony
       
      Nie.
      Ale możesz sobie zrobić
      CARD ARRAY addrs
      , gdzie będziesz przechowywać adresy innych tablic.
      • 8: CommentAuthortatko74
      • CommentTime15 Apr 2024 10:04
       
      Hej
      Dzięki za odpowiedzi
      Finalnie wygląda to tak jak poniżej
      To nie jest żaden konkretny projekt, a wyłącznie moje zabawy z Action!, próby "z czym to się je" :)
      Teraz działa jak oczekiwałem. Troche irytujące jest że nie moge użyć funkcji jako argumentu - no chyba że czegoś nie wiem.
      Np.:
      test=rand(3)
      SETIT(px,py,test)

      nie potrzebna zmienna - bo mogło by być
      SETIT(px,py,rand(3))


      Efekt zmagań z Action!
      MODULE
      BYTE mx=[32]
      BYTE my=[9]
      BYTE ARRAY tablica(1000)

      BYTE FUNC GETIT(BYTE x,y)
      RETURN(tablica(y*mx+x))

      PROC SETIT(BYTE x,y,c)
      tablica(y*mx+x)=c
      RETURN

      PROC GEN()
      BYTE test,px,py
      PrintE ("gen")
      for py=0 to my-1
      do
      for px=0 to mx-1
      do
      test=rand(3)
      SETIT(px,py,test)
      od
      od
      RETURN

      PROC POKA()
      BYTE test,px,py
      PrintE ("poka")
      for py=0 to my-1
      do
      for px=0 to mx-1
      do
      test=GETIT(px,py)
      printb (test)
      od
      printE(" ")
      od
      RETURN

      PROC MAIN()
      Graphics(0)
      GEN()
      POKA()
      RETURN
      • 9:
         
        CommentAuthorjhusak
      • CommentTime15 Apr 2024 12:04 zmieniony
       
      Trzeba mieć na uwadze, że Action! nie ma prawie żadnych optymalizacji, jednocześnie generując maksymalnie znośny kod przy tych założeniach.
      To właściwie jest TRANSLATOR i tak został zaprojektowany.

      Więc, jeśli piszesz:
      a=2+3*5, to zostanie wygenerowany kod 3*5 (skok pod A000, gdzie jest procka mnożenia), potem add #2 i sta a. Normalne kompilatory widzą to jako stałą 17.

      Jednocześnie zamieniając tablica(y*mx+x) na GET/SETIT dodajesz w najgłębszej pętli mnóstwo (kilkadziesiąt bajtów) kodu przekazującego sobie dane. Chociaż pierwsze 3 bajty argumentów są przekazywane w rejestrach A,X,Y, a reszta przez rejestry na stronie zerowej.
      • 10: CommentAuthortatko74
      • CommentTime15 Apr 2024 12:04
       
      Hej
      Jestem świadom tego potworka - znaczy jakie zamieszanie jest 'w tle'.
      Ale to tylko zabawa - a ja się bawię Action! - i nie chciał bym tej zabawy zaczynać od... asamblera :)
      Sądzę iż jakakolwiek próba zastąpienia tego mnożenia pewnie tak by się zakończyła.
      Co do dodatkowych funkcji i procedur - jestem świadom iż taki kod generuję więcej skoków,zmiennych itd., ale jak pisałem wyżej - sprawdzam jak się tego używa. Zwłaszcza że ze mnie d... nie programista XD.
      • 11:
         
        CommentAuthorjhusak
      • CommentTime15 Apr 2024 12:04
       
      Eeee, tam. Dobrze sobie radzisz :)
      • 12:
         
        CommentAuthoramarok
      • CommentTime15 Apr 2024 16:04
       
      @tatko74. Jakiś czas temu bawiłem się Action! i popełniłem kilka prostych programików. Można znaleźć je tutaj: ->link<-

      Troche irytujące jest że nie moge użyć funkcji jako argumentu - no chyba że czegoś nie wiem.

      Da się to w jakiś sposób obejść, jak w każdym języku. Możesz zobaczyć przykłady w poniższych zadaniach gdzie funkcje lub procedury są przekazywane jako argumenty do procedur w roli funktorów czy predykatów:
      - Repeat ->link<-
      - Rate counter ->link<-
      - Sort using custom comparator ->link<-
      • 13: CommentAuthortatko74
      • CommentTime16 Apr 2024 07:04
       
      @amarok - jestem pod wrażeniem - i dzięki za linka - nie omieszkam tam zaglądać :)
      • 14: CommentAuthorCuzz
      • CommentTime21 Apr 2024 01:04
       
      ja się na tym nie znam ale z tego co wiem jeśli action rozumie pseudo asembler matematyczny ale ze wsparciem węwnetrznej architerktury procesora co przybliża to do gier typu river raid draconus to da się normalnie zrobić coś na poważnie, jest tylko mały problem, trzeba mieć pomysł na gre, a to wymaga talentu artystycznego, i tu trzeba już szanować programistę. Mój talent się kończy na pokemonach. Jednego tylko nie rozumiem jak wy robicie te gry zespołowo, dla mnie to zong, musicie sie dobrze znać. ja próbowałem kodować ekspresjami, to żałosne. Moge się pochwalić, że znalazłem sposób na pisanie nowych gier. Robie to w altirze, która sie wiesza, ale kod sie wykonuje. Pojawia się nowy pliczek. To chyba windows próbuje blokować. Czarny ekran, a potem system sie na chwile wyłącza, to chyba TPM słynne. Mnie to nie obchodzi , bo to zwykłe hobby. A co do action , powinni to dać do podstawówek bo jest prostszy od c++. Nie uwierzycie jakie to żałosne próbować coś debugować, po prostu coś pisze a engine gry dalej ten sam, serio trzeba od początku, inaczej albo kod sie rozlezie, albo engine sam go wyrzuci albo zabezpieczenia. W action jest inaczej to wszystko jest twoje co piszesz, masz nad tym pełną kontrole, to nic że to matematyka a nie logika. Jest tego pewien plus bo ma sie antica, mozna wygenerować wiele ciekawych efektów w prosty sposób. A jeśli chodzi o pozycjonowanie grafiki jest to proste i jeśli sie to potrafi w action to na prawde mozna juz prawie wszystko. jesli wprowadziłem kogoś w bład to sorry ale ja w nim nie programuje, wlasciwie to komputer to skomplikowana maszyna nawet 8-bitowce nie są proste . nie sugerujcie sie .
      • 15: CommentAuthortatko74
      • CommentTime15 May 2024 09:05 zmieniony
       
      W Action nie działa odliczanie wstecz w pętli FOR ?

      BYTE i 
      Put(125)
      PrintE ("1do10")
      for i=1 to 10 step 1
      do
      PrintF ("%I,",i)
      od
      PrintE ("")
      PrintE ("10do1")
      for i=10 to 1 step -1 ; tu po prostu nic sie nie dzieje :/
      do
      PrintF ("%I,",i)
      od
      PrintE ("")
      • 16:
         
        CommentAuthorjhusak
      • CommentTime15 May 2024 11:05 zmieniony
       
      Instrukcja nic nie mówi o wartościach parametrów FOR.
      Natomiast FOR I=10 TO 10 STEP -1 DO PrintBE(I) OD

      wypisuje:
      10
      9
      8
      7
      6
      5
      4
      3
      2
      1
      0

      Wiem, gupie.

      Podobnie, jak za -1 podamy 255 czy 65535.

      Ale nie używał bym tego tak.
      • 17: CommentAuthortatko74
      • CommentTime15 May 2024 12:05
       
      No fakt - i to zawsze "do zera" :/
      W instrukcji też to zauważyłem - a raczej nie zauważyłem :)
      Poradzimy sobie inaczej... ;)
      Skoro @jhusak cię tu złapałem :)
      Poradziłeś sobie jakoś z tym komunikatem "adler32 does not match" w atari800 ?
      • 18:
         
        CommentAuthorjhusak
      • CommentTime15 May 2024 13:05 zmieniony
       
      jeszcze nie kompilowałem nowych źródeł. Zawsze to robię, jak coś rozpoczynam, a teraz raczej kończę :)

      A nie - w starych też jest ten problem. Aby go ominąć, musiałem nagrywać wielokrotnie skrypt, aż zadziałał. Trzeba też było robić długie, dużo dłuższe pauzy.
      • 19: CommentAuthortatko74
      • CommentTime24 May 2024 13:05
       
      Dlaczego to kończy się zwiechą ? :/
      Jak wprowadzać znaki bezpośrednio do pamięci - bez "print" ?

      PROC MAIN()
      BYTE i,continue
      CARD scrmem

      GRAPHICS(1)
      scrmem=peekc(88)

      for i=0 to 255
      do
      poke(scrmem+i,i)
      od

      RETURN
      • 20:
         
        CommentAuthorjhusak
      • CommentTime24 May 2024 14:05 zmieniony
       
      Dobrze robisz, a to nie zwiecha, tylko zapętlenie pętli for. Jak chcesz, żeby się nie zapętlało, to wpisz "to 254" albo zamień typ "i" na card.

      To dość częsta przypadłość kompilatorów, bo standardowo przy takim rodzaju pętli porównanie na końcu jest <=, więc w tym przypadku zawsze prawdziwe dla każdego i. Dlatego w asm się to pisze z pominięciem jednego porównania, np.

      ; petla 0-255 w asm
      ldx #0
      label
      zrób cośtam
      inx
      bne label



      Tak naprawdę jest to pętla "repeat until"

      No i do takich zastosowań nie musisz pisać "proc main()" i "return"

      BYTE i
      byte pointer scrmem

      GRAPHICS(1)
      scrmem=peekc(88)

      for i=0 to 255
      do
      scrmem^=i
      scrmem==+1
      od
      ; do od


      Tu troszkę bardziej zaawansowane podejście, a i krótsze w kompilacji :)
      • 21:
         
        CommentAuthorPeri Noid
      • CommentTime24 May 2024 15:05 zmieniony
       
      Czyli twoje, @jhusak, też się zapętli? ;-)
      • 22:
         
        CommentAuthorjhusak
      • CommentTime24 May 2024 18:05
       
      Oczywiście, ale zapełni cały ekran i widać, gdzie się zapętliło :)
      • 23: CommentAuthortebe
      • CommentTime24 May 2024 19:05
       
      w MP się nie zapętli, nawet dla typu BYTE
      • 24: CommentAuthortatko74
      • CommentTime31 May 2024 15:05
       
      I znowu ja :/

      Chce się pobawić definiowaniem swoich znaków.
      Na początek test - kopiowanie znaków i ich aktywacja - coś jak zwykle nie tak :/

      BYTE i,continue,setnew
      CARD chset,setadr


      GRAPHICS(0)

      setnew=peek(106)-4
      poke(106,setnew) ;obniżenie gornej granicy ram

      chset=57344 ;adres org tablicy znakow
      setadr=setnew*256 ;adres nowej tablicy znakow
      MOVEBLOCK(chset,setadr,1024) ;kopiowanie tablicy znakow na nowe miejsce

      poke(756,setnew) ;wskazanie nowego adresu znakow

      for i=0 to 120
      do
      printf("%C",i)
      od

      continue = GetD(7)


      Co znów nie tak ? XD
      • 25:
         
        CommentAuthorjhusak
      • CommentTime31 May 2024 21:05
       
      W złym miejscu Graphics i odwrotnie parametry do moveblock.

      BYTE i,continue,setnew
      CARD chset,setadr

      setnew=peek(106)-4
      poke(106,setnew) ;obniżenie gornej granicy ram
      GRAPHICS(0)
      chset=57344 ;adres org tablicy znakow
      setadr=setnew*256 ;adres nowej tablicy znakow
      MOVEBLOCK(SETADR,CHSET,1024) ;kopiowanie tablicy znakow na nowe miejsce

      poke(756,setnew) ;wskazanie nowego adresu znakow

      for i=0 to 120
      do
      printf("%C",i)
      od

      continue = GetD(7)
      • 26: CommentAuthortatko74
      • CommentTime1 Jun 2024 07:06
       
      Wielkie dzięki
      Zamiast spojrzeć do podręcznika, przyjąłem że "co","gdzie","ile", a tu "gdzie","co","ile" XD
      • 27:
         
        CommentAuthorKaz
      • CommentTime1 Jun 2024 08:06
       
      a z którego podręcznika korzystasz (tudzież "nie korzystasz")? :)
      Bo mamy nowszą wersje w Bibliotece Atarowca, polecam.
      • 28:
         
        CommentAuthorKaz
      • CommentTime1 Jun 2024 09:06 zmieniony
       
      To miałem na myśli:
      ->link<-

      Tam nawet jesteś wspomniany :)
      • 29: CommentAuthorlzd
      • CommentTime1 Jun 2024 09:06
       

      Kaz:

      Bo mamy nowszą wersje w Bibliotece Atarowca, polecam.

      Chyba najlepsze opracowanie Action!, jakie widziałem. Brakuje tylko klikalnego spisu treści. Może autor dodałby taki albo udostępnił plik źródłowy, tobym poprawił.
      • 30:
         
        CommentAuthorKaz
      • CommentTime1 Jun 2024 10:06
       
      Napisałem do autora.
      • 31: CommentAuthortatko74
      • CommentTime1 Jun 2024 10:06
       
      LOL !
      Nawet ładniejsze niż moje :)
      Pozdrawiam Krzysztofa :)
      A co do klikania po spisie - to było by fajnie - próbowałem, ale coś mi się rozjeżdżało więc zrezygnowałem.
      • 32: CommentAuthortatko74
      • CommentTime7 Jun 2024 09:06 zmieniony
       
      I znów :)

      Chciałem wyczyścić pamięć ekranu bez używania Graphics.
      Pomyślałem o Zero i ew. SetBlock
      Niestety obie procedurki powodują "czarny ekran" i tyle
      Mimo że w kodzie coś się dalej dzieje to już tego nie widać
      Pomaga tylko reset :/
      SetBlock(scrmem,scrmem+199,0)
      Zero(scrmem,scrmem+199)


      199 bo chodzi konkretnie o Gr.2

      Oczywiście "scrmem" to efekt scrmem=peekc(88)


      !!!!!!!!!!!!!!!!!!!!!!!!!!
      Jak zwykle moja skucha - drugim parametrem nie jest adres końcowy tylko rozmiar XD
      Przepraszam za zawracanie gitary
      • 33:
         
        CommentAuthorjhusak
      • CommentTime7 Jun 2024 12:06
       
      Świetnie, że to rozkminiasz - bo te procedurki to jakieś pokłosie wczesnych unixów czy innych, a tam są zdefiniowane parametry w jakiś logiczny sposób (na zasadzie niezbędnego minimum).

      Tak więc jeśli chcesz wypełnić pamięć, masz kilka sposobów określania parametrów, ale najsensowniejszy z nich to:
      parametr 1 - adres
      parametr 2 - długość
      ew. parametr 3 - wartość.

      Przy przepisywaniu są dwie konwencje: adres docelowy, adres źródłowy parametry, oraz odwrotnie, źródłowy docelowy i parametry.

      Człowiek dowiaduje się tego na początku, a potem używa już kalki.

      Potem jaki piszesz kod zgodnie z tymi kalkami, to jest on przejrzystszy dla osób trzecich.

      Więc próbuj i się dowiaduj! :) To jest niesamowita satysfakcja coś zakodować i to działa :)
      • 34: CommentAuthortatko74
      • CommentTime24 Jun 2024 12:06 zmieniony
       
      I znowu XD

      Tym razem z innej beczki - kompilacja
      Pisze sobie coś, kompiluje, zapisuje (w"h1:test.xex").
      Pod monitorem, zaraz po kompilacji, się wykonuje prawidłowo.

      Próbuje odpalić bezpośrednio xex (próbowałem w atari800 i Altirra) i owszem, się wykonuje ale tylko raz (mimo wew. pętli "DO..OD") i wywala do selftestu.
      Poniżej przykładowy trywialny programik.

      INCLUDE "H6:SYS.ACT"

      PROC test()
      BYTE i

      FOR i=0 to 10
      DO
      printE("test")
      OD
      RETURN

      PROC MAIN()
      BYTE continue
      DO
      test()
      continue = GetD(7)
      IF continue=27 THEN EXIT FI
      OD
      RETURN


      Edit:
      Jak zrobiłem tak z programikiem podmieniającym znaki to selftest miał już pozmieniane :)
      • 35:
         
        CommentAuthorjhusak
      • CommentTime24 Jun 2024 16:06
       
      Nie pamiętam, czy DO OD nie jest po prostu { i } albo begin end w pascalu. Trzeba by to okrasić jakimś whilem czy czymś... (to wydaje mi się fałszywy trop, zwłaszcza, że działa pod monitorem)

      Druga sprawa, to możesz czytać z zamkniętego kanału ( normalnie #7 jest chyba zamknięty) i kod Ci się wywala. Ale to z pamięci piszę.

      Spróbuj przed OD i DO go zamknąć i otworzyć do odczytu urządzenie K:
      • 36: CommentAuthortatko74
      • CommentTime24 Jun 2024 17:06 zmieniony
       
      I to jest to - potwierdzone :)
      Dzięki :)
      I napisali ludzie inteligentni :

      "Można tego kanału użyć w programie do pobrania znaków z K:, ale należy pamiętać, że jest on już otwarty"

      Czyli pod monitorem jest otwarty ciągle - a samodzielnie już trzeba pamiętać by go otworzyć :)

      edit:
      dla potomnych, tak powinna wyglądać proc. MAIN

      PROC MAIN()
      BYTE continue
      Close (7)
      Open (7,"K:",4,0)
      DO
      test()
      continue = GetD(7)
      IF continue=27 THEN EXIT FI
      OD
      Close (7)
      RETURN
      • 37: CommentAuthortatko74
      • CommentTime25 Jun 2024 14:06
       
      I znów - nowy dzień , nowe wyzwania :)

      To działa
      BYTE ARRAY blank = [1 1 1 1 1 1 ]
      CARD blkmem
      blkmem = peekc(@blank)
      printCE(blkmem)


      A to nie działa?
      BYTE ARRAY blank(100)
      CARD blkmem
      blkmem = peekc(@blank)
      printCE(blkmem)


      błąd 17
      • 38: CommentAuthortatko74
      • CommentTime26 Jun 2024 14:06
       
      podbijam
      • 39:
         
        CommentAuthorjhusak
      • CommentTime26 Jun 2024 16:06
       
      Z jakiegoś powodu nie działa... Bad Expression Format. przy podstawianiu peekc. Nie wiem, jak bardzo BAD.

      Nie wiem też, co chcesz osiągnąć. Bo tablica to jej adres. tablica(4) np. to wartość spod komórki liczona od adresu tablicy + 4.

      Więc blkmem=peekc(adres adresu tablicy) ... hm..

      Ja bym napisał blkmem=blank, ale też nie działa, error 9 - No a constant.
      • 40: CommentAuthortatko74
      • CommentTime26 Jun 2024 17:06 zmieniony
       
      Teoretycznie powinno działać blkmem=@blank - ale też nie działa
      A przy którychś zabawach mi to działało - z tablicą o określonej wielkości (2500 byte)- miałem PlanAdr=peekc(@plan) i ok.

      Chce uzuskać adres początkowy tablicy by mógł ją np. wyzerować ZERO(adr,size) lub przenieść zawartość MoveBlock(src,adr,size).
      • 41: CommentAuthortatko74
      • CommentTime26 Jun 2024 18:06
       
      A żeby było zabawniej - to działa :
      MODULE
      BYTE ARRAY plan(500)
      BYTE ARRAY test(500)
      CARD PlanAdr
      CARD TestAdr

      PlanAdr=peekc(@plan)
      TestAdr=peekc(@test)
      printcE(PlanAdr)
      printcE(TestAdr)
      • 42: CommentAuthortatko74
      • CommentTime26 Jun 2024 18:06 zmieniony
       
      A teraz hicior

      Pobawiłem się XD i zacząłem szukać na ślepo

      Jeśli zadeklarowana tablica nie ma "wypełnienia" danymi przy deklaracji (np. BYTE ARRAY blank = [1 2 3]), a określoną wielkość i jest ona mniejsza niż 257 (np. BYTE ARRAY blank(256)) to powyższy kod wywala bład ! Ale wystarczy że ma zadeklarowane 257 lub więcej i wszystko gra !
      Przy takich rozmiarach działa też wersja PlanAdr=@plan, jak podręcznik przykazał.

      Czary ...

      Ktoś umie to wytłumaczyć ?
      • 43: CommentAuthortebe
      • CommentTime26 Jun 2024 19:06
       
      napisz do autorów Action!
      • 44: CommentAuthortatko74
      • CommentTime26 Jun 2024 19:06
       
      No chyba marne szanse na patch'a XD
      • 45:
         
        CommentAuthorpirx
      • CommentTime26 Jun 2024 20:06
       
      oj tam, bo bys jakis struktur danych uzywac. jest jedna struktura danych, pamiec od 0000 do ffff.
      • 46: CommentAuthortatko74
      • CommentTime26 Jun 2024 21:06
       
      A się Was chłopaki dowcip z wieczora trzyma XD
      • 47:
         
        CommentAuthorjhusak
      • CommentTime27 Jun 2024 08:06 zmieniony
       
      Dobrze by było (jeśli nie jest jeszcze) dopisać do listy błędów Action!.
      Poza tym ten magiczny "MODULE" pewnie zmienia postać rzeczy. Nigdy nie rozumiałem, po co to jest i co to robi.
      • 48: CommentAuthortatko74
      • CommentTime27 Jun 2024 08:06
       
      A jest gdzieś taka lista ?
      • 49:
         
        CommentAuthorjhusak
      • CommentTime27 Jun 2024 10:06 zmieniony
       
      ->link<-
      I nie ma tam twojego błędu.
      • 50: CommentAuthortatko74
      • CommentTime27 Jun 2024 10:06 zmieniony
       
      Eeeeee po angielsku .... nie podejme się XD
      Ale nie widziałem tej miejscówki - więc i tak dziękuje :)