[#211] Re: Dewelopment gry Sołtys

@Don_Adan, post #210

Póki co na tym pliku działa. W 8 bajcie jest wartość $00 00 00 05. W 16 bajcie druga wartość jest identyczna. Później przetestuję na innym pliku. Jeśli masz rację to zmienię kod. Odczyt bajt po bajcie i zmiana endiana to nie problem pod BB bo użyję wstawki asm. Tak będzie najkrócej i najprościej.
[#212] Re: Dewelopment gry Sołtys

@tukinem, post #211

Pisalem, zebys stworzyl wiekszy plik testowy.
W tym masz tylko 5 bajtowe dane.
Nawet plik o dlugosci 257 bajtow juz Ci pokaze ze te longwordy to sa LE a nie BE.
[#213] Re: Dewelopment gry Sołtys

@tukinem, post #211

Format nagłówków lha jest ogólnie dostępny w sieci.
[#214] Re: Dewelopment gry Sołtys

@Don_Adan, post #212

Masz rację. To był zbieg okoliczności, że takie wartości wyszły.

Później to poprawię na spokojnie.

; tryb testowy
#TEST = 0

Function .l ReadSize{adres.l}
    MOVE.l  D0,A0          ;-----odczyt
    SUBA.l  #1,A0          ;     z
    MOVE.b  (A0),D0        ;     nieparzystego
    ROL.l   #8,D0          ;     bajtu
    MOVE.b  1(A0),D0       ;    /
    ROL.l   #8,D0          ;   /
    MOVE.b  2(A0),D0       ;  /
    ROL.l   #8,D0          ; /
    MOVE.b  3(A0),D0       ;/

    ROL.w   #8,D0          ; zamiana
    SWAP.w  D0             ;
    ROL.w   #8,D0          ; endiana

    AsmExit
End Function


NEWTYPE .fileOnDisk
  _size.l     ; rozmiar
  _data.l     ; wskaznik
  _name.s     ; nazwa pliku
End NEWTYPE

DEFTYPE .fileOnDisk src,fts
DEFTYPE .l offset


; ZMIENNE:
; src         zmienna pliku odczytanego
; fts         zmienna pliku do zapisu
; offset      pozycja odczytu w pamieci

;--------------------------------------------------------------

; nalezy uruchomic z dwoma parametrami
; BBSplit <PLIK> <KATALOG_WYJSCIOWY>
CNIF #TEST=0
  If NumPars<>2 Then End
CEND

;--------------------------------------------------------------

; wczytanie pliku

CNIF #TEST=0
  src\_name  = Par$(1)
  DEST$=Par$(2)
CELSE
  src\_name = "DH1:Unpacked/arc.lha"
  DEST$="RAM:"
CEND
src\_size  = FileSize(src\_name)
src\_data= AllocMem_(src\_size,0)
BLoad src\_name,src\_data

;--------------------------------------------------------------
offset = 8

; PETLA ZAPISU
  While offset<src\_size
    fts\_size = ReadSize{src\_data+offset}

; NAZWA PLIKU DO ZAPISU
    offset+14
    a$ = ""
    While Peek.b(src\_data+offset)<>0
      a$=a$+Chr$(Peek.b(src\_data+offset))
      offset+1
    Wend
    a$ = UnLeft$(a$,3)                      ; usuwam 3 ostatnie znaki
    fts\_name = a$

; KOPIOWANIE DANYCH
    fts\_data = AllocMem_(fts\_size,0)

    offset+2
    CopyMem_ src\_data+offset , fts\_data , fts\_size
    offset+fts\_size+8

    BSave DEST$+fts\_name , fts\_data , fts\_size
    FreeMem_ fts\_data,fts\_size

  Wend

FreeMem_ src\_data,src\_size
End


Ostatnia aktualizacja: 11.01.2025 18:30:46 przez tukinem
[#215] Re: Dewelopment gry Sołtys

@tukinem, post #214

Jak patrze na ta funkcje to ona bardzo zle wyglada.
Albo nie rozumiem jak dziala BB2, albo to jest do czegos innego.
Jesli to robota Hexa to powinien sie poprawic, to jest duzo wolniejsze niz to co podalem.
Po co to?
SUBA.l  #1,A0

Jakbys przyjal, ze dzialasz wszedzie na bajtach i tylko na bajtach to mialbys prosto.
Takie formaty jak lha obsluguje sie bajt po bajcie.
Uzywajac move.b (A0)+
Ale moze BB2 tego nie potrafi.
[#216] Re: Dewelopment gry Sołtys

@cholok, post #213

Zapodaj linka, Tukinem, bedzie mial latwiej.
[#217] Re: Dewelopment gry Sołtys

@Don_Adan, post #215

Nie. Hex mi tylko dał sposób na zmianę endianów, czyli 3 ostatnie linijki funkcji.

Oczywiście BB obsługuje move.b (A0)+.

SUBA jest po to, że wcześniejszy kod, który podałem odczytywał long z 8 bajtu. Teraz trzeba odczytać z siódmego, dlatego do tamtego kodu dodałem tylko adres z offsetem aktualnym jako adres, a w funkcji obniżam go o 1, bo tutaj long odczytujemy z 7 bajtu.

W tej funkcji dobrze wiesz, że odczytuję sobie ręcznie kolejno 4 bajty przesuwając bity w D0. Następnie zmieniam endian w D0 i funkcja zwraca podaną wartość.

Przetestowałem i działa.

EDIT:
Przetestowałem z CLI i jest ok. Plik exe to 10 kB.

Ostatnia aktualizacja: 11.01.2025 18:58:31 przez tukinem
[#218] Re: Dewelopment gry Sołtys

@tukinem, post #217

Ale w takim razie robisz podwojne rolowanie.
Czyli najmniej zmieniasz na Amigowy endian.
A kod Hexa zamienia go na PC-towy endian.
Kod Hexa jest zbedny.
[#219] Re: Dewelopment gry Sołtys

@Don_Adan, post #218

Odczytuję bajt po bajcie a potem zmieniam endian. Jeśli nie zmienię to otrzymam wartość $05000000 i wywali guru a 3 ostatnie linijki prawidłowo zmieniają go na $00000005.
[#220] Re: Dewelopment gry Sołtys

@tukinem, post #219

Tak, ale jakbys od razu obracal bajty w prawo tak jak podalem, a nie w lewo to bys nie musial, uzywac kodu Hexa.

Ostatnia aktualizacja: 11.01.2025 19:12:43 przez Don_Adan
[#221] Re: Dewelopment gry Sołtys

@Don_Adan, post #210

Plik z Sołtysa się wywala, tylko nie wiem czemu.

To o czym mówisz, to masz rację, bo jeszcze odczytuję cały long poprzez Peek.l w kodzie. Tylko, że ja to testuję na 020, więc nie powinno się wywalić. Podejrzewam, że nazwy podkatalogów psują działanie.

Oto plik spakowanego Sołtysa bez kompresji:


Jest katalog "DAT" lecz nie ma już nazwy pierwszego pliku. Moim zdaniem powinno być "DAT/plik", tu mamy natomiast "1.DAT" następnie jakiś "m.A..." i dopiero katalog "DAT".

To chyba zły pomysł aby babrać się z tym w basicu.
[#222] Re: Dewelopment gry Sołtys

@tukinem, post #221

Bo musisz stworzyc wersje archiwum bez podkatalogow.
Chyba, ze poprawisz swoj program.
Czym innym jest sama nazwa pliku a czym innym jest sciezka z nazwa pliku.
Byc moze wystarczy, ze zalozysz te podkatalogi to zadziala.
No i pisalem, ze dlugosc stringu jest w lha podana, a Ty tam zerujesz jakies bajty w archiwum.
Zadnych zmian we wczytanym archiwum nie powinno sie robic.
Czyscisz bajty, ktore sa uzywane przez nastepny plik.
Ewentualnie czyscisz bajty za wczytanym archiwum.
Jak rozwiazales problem konca pliku/archiwum?
Skad program wie, ze to juz jest ostatni plik w archiwum?
[#223] Re: Dewelopment gry Sołtys

@tukinem, post #221

No i ktory longword wziales jako wielkosc pliku do zapisu?
Bo z tego co widze to powinienes brac spod offsetu 11, a nie spod 7.

Ostatnia aktualizacja: 11.01.2025 20:19:20 przez Don_Adan
[#224] Re: Dewelopment gry Sołtys

@Don_Adan, post #223

W danych archiwum nic nie zmieniam. Jeśli przyjrzysz się mojemu kodowi, to zmienna src to źródło czy lha. Zmienna fts to dane docelowe. Nazwałem fts jako skrót od File To Save. Usuwam 3 bajty w zmiennej A$ która służy do odczytu nazwy pliku do zapisu. To taka podręczna zmienna do której ładuję kolejne bajty ze źródła aż do bajtu 0. Potem usuwam 3 ostatnie bajty z tej podręcznej zmiennej, bo one są zbędne.

Myślałem że tam pliki w podkatalogach to będą zapisane jako: "DAT/1.DAT". Pytałem wcześniej czy nazwa pliku ma gdzieś podaną długość w bajtach.

Faktycznie rozmiar wziąłem z 7 bajtu a nie 11.
[#225] Re: Dewelopment gry Sołtys

@tukinem, post #224

Nie. Katalog musi istniec jesli chcesz zapisac w nim plik.
Jesli katalog nie istnieje to musi zostac utworzony najpierw.
Przynajmniej tak to pamietam.
Zreszta mozesz pod BB2 podac jakas nazwe pliku z nieistniejacym katalogiem i sprawdzic, czy cos Ci sie zapisze.
[#226] Re: Dewelopment gry Sołtys

@Don_Adan, post #225

No i niby skad bierzesz nazwe 1.DAT a nie 1.DATm ? Musisz inaczej do tego podejsc.
[#227] Re: Dewelopment gry Sołtys

@Don_Adan, post #226

No i niby skad bierzesz nazwe 1.DAT a nie 1.DATm ? Musisz inaczej do tego podejsc.

No właśnie skąd? :) Jest gdzieś podana długość nazwy pliku? Długość samych danych jest. Właśnie problem stanowią katalogi, ale i na to jest rozwiązanie. Wszystkie pliki w sołtysie mają swoje rozszerzenia, więc musiałbym stworzyć LHA niekompresowane bez struktury katalogów. Po wczytaniu nazwy pliku sprawdzałbym 4 ostatnie znaki i kolejno sprawdzał:
".EXE" - katalog główny
"INFO" - katalog główny
".MOD" - katalog MUS
".IFF" - katalog SFX
".LNG" - katalog LNG
reszta - katalog DAT

Co do Twojego pytania odnośnie size czy odczytuję 7 bajt czy 11, to nie ma znaczenia bo on nie jest kompresowany.

Pytałem, czy gdzieś można odczytać z pliku długość w bajtach nazwy pliku/katalogu?
[#228] Re: Dewelopment gry Sołtys

@Don_Adan, post #226

Odczytując nazwę odczytuję bajt po bajcie aż do napotkania bajtu =$0. W moim przypadku to:
1.DATm.A

Następnie usuwam 3 ostatnie pobrane bajty o czym pisałem i otrzymuję 1.DAT :)


a usuwam dlatego 3 bajty, bo odczytuję z endiana PC-towego więc końcowy bajt 0 mam 3 bajty za daleko.

Tylko zastanówmy się czy to ma sens. Plik exe z Blitz Basic to 10 kB teraz. LHA to 75 kB więc różnica nieznaczna.

Ostatnia aktualizacja: 11.01.2025 21:44:31 przez tukinem
[#229] Re: Dewelopment gry Sołtys

@tukinem, post #228

Zle to robisz.
Dlugosc nazwy pliku to jest bajt przed nazwa pliku. $05, 1.DAT
Sens to ma, bo zyskujsz co najmniej 60 KB miejsca na dyskietce.

Edycja, No i pewnie czegos nowego sie nauczysz.

Ostatnia aktualizacja: 11.01.2025 21:57:02 przez Don_Adan
[#230] Re: Dewelopment gry Sołtys

@tukinem, post #227

Ma znaczenie czy spod offsetu 7 czy spod 11.

$0000FA0C
$0000FA00
Po prostu bedziesz plik ze smieciami na koncu zapisywal.

Za bardzo kombinujesz.
Amigowy Installer potrafi zakladac katalogi.
Albo sam zaloz katalog tym Spliterem.
A potem zapisuj plik.
[#231] Re: Dewelopment gry Sołtys

@Don_Adan, post #230

Użytkownik wybierze w installerze katalog gdzie ma być gra.

Installer stworzy podkatalog "SOLTYS" i w nim podkatalogi "DAT", "MUS", "LNG" i "SFX", więc będą stworzone.

Z kombinowaniem masz rację. Więc powoli na spokojnie chyba od nowa napiszę ten program rozpakowujący. Chociaż strukturę sobie fajną stworzyłem. Tylko sposób odczytywania danych musiałbym zmienić.

No to w takim razie tu jest jakiś rodzaj kompresji?
[#232] Re: Dewelopment gry Sołtys

@tukinem, post #231

Nie ma kompresji, ale dlaczego ta wielkosc jest wieksza to nie wiem.

Tutaj sa opisy naglowka lha.

link


link
[#233] Re: Dewelopment gry Sołtys

@Don_Adan, post #232

Kurcze to nie na moją głowę.

Spakowałem teraz te same pliki ale w podkatalogu KATALOG1 i oto wynik:


Każdy plik ma teraz nazwę pliku, po niej jest katalog, w którym się znajduje, a następnie dopiero jest jego treść. Nie mogę tu odczytać długości nazwy podkatalogu. To mnie przerasta takie parsowanie kodu.

Jak z plikami .tmx od Tileda (edytora map) sobie poradziłem, tak tutaj ręce mi opadają same. No i jeszcze endian dochodzi do tego.
[#234] Re: Dewelopment gry Sołtys

@tukinem, post #233

Pierwszy bajt jest wazny:

Bytes: $0000: 24 - Length of header (known as "LEN", not including this
and the next byte). If it is zero, we are at the end
of the file.
$23 czyli (wtym przypadku) na 35+2 bajcie (offset) czyli na 37 bajcie jest dlugosc nazwy pliku (bajt).
Jutro wiecej info, o ile sam nie rozkminisz.
[#235] Re: Dewelopment gry Sołtys

@Don_Adan, post #234

Długość nazwy pliku umiem odczytać. Chodzi o to, że jeśli plik jest w podkatalogu, to po jego nazwie, a przed jego danymi jest nazwa podkatalogu. U mnie to "KATALOG1" czyli 8 znaków. Skoro dane LHA informują nas o długości nazwy pliku, to powinny też informować o długości nazwy podkatalogu. Nigdzie tu nie ma bajtu $08.
[#236] Re: Dewelopment gry Sołtys

@tukinem, post #235

Zrob tak.
Zaloz katalogi DAT, DATA, DATA1.
Skopiuj do nich 1 plik, byle taki sam.
Zrob 3 archiwa niespakowane.
Porownaj je i zobacz, gdzie i jak jest zapisana dlugosc katalogu.

Edycja, mozesz jeszcze spakowac ten sam plik, ale bez zadnego katalogu.
Bedzie wtedy wiadomo, gdzie jest zapisywane czy dany gry jest w katalogu czy tez nie.

Ostatnia aktualizacja: 12.01.2025 07:12:29 przez Don_Adan
[#237] Re: Dewelopment gry Sołtys

@Don_Adan, post #236

Stworzyłem plik tekstowy i pokopiowałem go kolejno do 5 katalogów:
DAT, DATA, DATA01,DATA1 i DATA_1. Oto, co zawiera plik lha:
[#238] Re: Dewelopment gry Sołtys

@tukinem, post #237

Napisałem własny program do wyświetlania na bazie tego z filemastera. Tu jest to ładniej pokazane:


Może coś pomoże. Są przerwy pomiędzy bajtami i nie wyjeżdża poza rozmiar pliku.
[#239] Re: Dewelopment gry Sołtys

@tukinem, post #238

02 przed nazwą katalogu to nie jest to, czego szukasz?
[#240] Re: Dewelopment gry Sołtys

@tukinem, post #237

chcialem 3 archiwa, a nie 1, tak sie bardzo niewygodnie porownuje jak sie nie ma dostepu do komputera
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem