Autor Wątek: Virtual File System  (Przeczytany 6175 razy)

Offline Anusia2007

  • Użytkownik

# Kwiecień 13, 2007, 00:07:41
Witam,

Zabieram sie za napisanie VFS'a. Ma on umozliwiac dynamiczne zapisywanie, modyfikowanie, oraz odczytywanie roznych plikow z jednego pliku bazowego (pakietowego). I tutaj kilka moich pytan:

1) czy lepiej robic jeden plik bazowy i do niego ladowac wszystko czy moze kilka (jakie sa zalety robienia kilku plikow?) bo widzialam takie rozwiazanie w dommie 3.

2) Jak rozwiazac sprawe zapisywania dynamicznego w srodek bazy. Jesli w srodku bazy bede miala jakis maly plik ktory bede chciala zmodyfikowac i dodac pare bajtow to bede musiala przesuwac caly plik bazowy o te pare bajtow czyli jak np. bedzie zajmowal 100 MB to bede musiala nadpisac tyle. To strasznie dlugo bedzie trwalo. Jak to rozwiazac?
Taki zapis moze byc w grze potrzebny nawet kilka razy na sekunde. Dopuszczam, tez mozliwosc ze cos bedzie sie sciagac z internetu (levele np.) i dynamicznie bedzie musialo sie dopisywac. Wtedy caly czas by byla taka sytuacja.

3) robic obsluge VFSa w oddzielnym watku niz gre czy lepiej w tym samym?

4) jakies specyficzne rzeczy ktore moge napotkac podczas kodowania, jakies porady?

Pozdrawiam.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

bies

  • Gość
# Kwiecień 13, 2007, 00:26:30
Witam,
Zabieram sie za napisanie VFS'a. [Ciach]
Bo ponieważ? Nudzi Ci się? Chcesz mieć fafnasty VFS, tylko taki fanjniusi, milusi, Twój? Nie lepiej poszukać i użyć gotowca. A może zwykły zip wystarczy - nowe poziomy mogą być po prostu nowymi plikami zip (dla C++ patrz np. [1]). A jeśli rzeczywiście nudzi Ci się to rozwiązanie problemu wrzucania czegoś do środka podpatrz w systemie FAT (można by w innym, wydajniejszym - ale czytania źródeł ReiserFS nie polecam).

[1] http://zipios.sourceforge.net/

Offline Anusia2007

  • Użytkownik

# Kwiecień 13, 2007, 00:32:47
Bo ponieważ? Nudzi Ci się? Chcesz mieć fafnasty VFS, tylko taki fanjniusi, milusi, Twój?
Nie. Chce miec wydajny i zeby mial wszystko czego potrzebuje. Jak znasz taki darmowy i z mozliwoscia uzytku w komercyjnych projektach to prosze o link :)

/EDIT
zip oczywiscie odpada -wszystko musi byc szyfrowane lub przynajmniej kodowane moim algorytmem aby raz dwa nie dalo sie tego "unzipowac" pierwszym lepszym gownem.
« Ostatnia zmiana: Kwiecień 13, 2007, 00:37:30 wysłana przez Anusia2007 »

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Kwiecień 13, 2007, 00:44:22
zip oczywiscie odpada -wszystko musi byc szyfrowane lub przynajmniej kodowane moim algorytmem aby raz dwa nie dalo sie tego "unzipowac" pierwszym lepszym gownem.

Na archiwum ZIP można założyć hasło. Nie jest ono zbyt mocne (chociażby w porównaniu do tego, co oferuje RAR), ale w zupełności wystarczy, by nie rozpakowano archiwum "pierwszym lepszym gównem" (swoją drogą, co za plugawe słownictwo w ustach damy :P).

Offline spax

  • Użytkownik

# Kwiecień 13, 2007, 01:20:05
1) czy lepiej robic jeden plik bazowy i do niego ladowac wszystko czy moze kilka (jakie sa zalety robienia kilku plikow?) bo widzialam takie rozwiazanie w dommie 3.

Myślę że sposób wielu plików jest wykorzystywany dla uniknięcia narzutu dynamicznego zapisywania. Czyli zamiast mieć jeden wielgachny plik data.mix i co dodatek go modyfikować. Ma się plik data0.mix a następne dodatki maja data1.mix data2.mix itd.

2) Jak rozwiazac sprawe zapisywania dynamicznego w srodek bazy. Jesli w srodku bazy bede miala jakis maly plik ktory bede chciala zmodyfikowac i dodac pare bajtow to bede musiala przesuwac caly plik bazowy o te pare bajtow czyli jak np. bedzie zajmowal 100 MB to bede musiala nadpisac tyle. To strasznie dlugo bedzie trwalo. Jak to rozwiazac?
Taki zapis moze byc w grze potrzebny nawet kilka razy na sekunde. Dopuszczam, tez mozliwosc ze cos bedzie sie sciagac z internetu (levele np.) i dynamicznie bedzie musialo sie dopisywac. Wtedy caly czas by byla taka sytuacja.

Poczytaj sobie jak są skonstruowane prawdziwe systemy plików (bloki, super bloki itp.).
Ale ogólnie moje zdanie jest takie, w grach nie jest potrzebny dynamiczny VFS.

buziaki ;P

bies

  • Gość
# Kwiecień 13, 2007, 02:14:20
Bo ponieważ? Nudzi Ci się? Chcesz mieć fafnasty VFS, tylko taki fanjniusi, milusi, Twój?
Nie. Chce miec wydajny i zeby mial wszystko czego potrzebuje. Jak znasz taki darmowy i z mozliwoscia uzytku w komercyjnych projektach to prosze o link :)
I pewnie jeszcze pod Windows. Cóż, większość ciekawych rzeczy ma POSIX w wymaganiach. Ale jest np. GnomeVFS albo nFS (taki drobiazg z Code Project).

zip oczywiscie odpada -wszystko musi byc szyfrowane lub przynajmniej kodowane moim algorytmem aby raz dwa nie dalo sie tego "unzipowac" pierwszym lepszym gownem.
Hmm, ale szyfrowanie jest albo powyżej FS (szyfrowane pliki) albo poniżej (szyfrowane urządzenie / wolumen). Dopisz sobie filtr do zipios++ (np. używając Crypto++) i po kłopocie. A i tak będzie szybciej niż pisać od nowa. Ale zdajesz sobie sprawę, że szyfrowanie z zaszytym kluczem w programie to pic (patrz AACS).

// edit
A linki to zna google.

// edit^2
Co do wydajności, poszukaj na MSDN ,,File Mapping'' - powinno być szybsze od zwykłego otwarcia pliku.
« Ostatnia zmiana: Kwiecień 13, 2007, 02:19:33 wysłana przez bies »

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Kwiecień 13, 2007, 10:50:51
Mnie też się kiedyś tak bardzo nudziło że chciałem mieć i napisałem swój własny, fajny, milusi VFS :P Bo gdybym szedł tokiem myślenia biesa to po co pisać jakiekolwiek biblioteki, skoro już tyle ich jest w Sieci? Po co pisać silnik, skoro są już gotowe? W ogóle po co pisać gry, skoro są już gotowe??? Nic tylko usiąść i grać!

Teraz jednak nie korzystam ze swojego VFS-a, bo mam wątpliwości czy on w ogóle ma sens. To prawda, że większość gier jakiegoś ma, ale nie wszystkie - bywają gry, które trzymają pliki luzem. Fajnie jest schować wszystko do eleganckiego archiwum, ale ukrywanie plików przez użytkownikiem to nie jest dla mnie argument. To samo dotyczy szyfrowania. Pomyśl, czy to że użytkownik będzie miał utrudniony dostęp do zasobów gry i jakiś jej modyfikacji, zrobienia swojego moda itp. to jest dla twojej produkcji zaleta czy wada?

VFS często wystarczy tylko do odczytu. Taki jest dużo prostszy. Większość gier wczytuje z niego tylko jakieś swoje zasoby, a jeśli już musi coś zapisać to zawsze może to zrobić do normalnych plików. Jeśli chcesz pobierać z Sieci całe nowe paczki z zasobami, może pobieraj po prostu kolejne archiwa swojego VFS-a?

Wykorzystanie gotowego formatu, np. ZIP, to całkiem dobry pomysł. Mam nawet pomysł jak go zabezpieczyć - możnaby zmieniać nagłówek pliku i ewentualnie jakoś modyfikować inne dane (np. negować bitowo wszelkie rozmiary plików) i tak przerobić źródło biblioteki do jego obsługi, żeby obsługiwała ten nowy format.

Jeśli już byś robił swój VFS z możliwością zapisu, to ja widzę tutaj dwie opcje:

1. Nowe pliki zapisujesz zawsze na końcu VFS powiększając jego plik. Kasowanie polegałoby po prostu na zaznaczaniu pliku jako nieistniejący, przez co powstawałaby w tym miejscu "dziura". To jest proste, ale szybko powiększa rozmiar archiwum i wymaga okresowego porządkowania.
2. Zapewniasz w swoim formacie możliwość fragmentacji plików. Zapisywane pliki upychasz w puste miejsca archiwum kontynuując w następnym pustym miejscu itd., aż zabraknie "dziur" i wtedy dopisujesz na końcu. Tu też przydałaby się okresowa defragmentacja.

Oczywiście można sobie wyobrazić napisanie jakiś bardziej zaawansowanych mechanizmów, jakiegoś podziału na sektory, jakiejś tablicy FAT i innych rozwiązań zaczerpniętych z prawdziwych systemów plików, ale to już trochę harcdore :)

Sprawy bardzo się komplikują jeśli chciałbyś w bibliotece do obsługi swojego VFS zapewnić możliwość otwarcia i czytania/pisania wielu plików z jednego archiwum na raz. Pomyś, czy to jest konieczne.

Offline spax

  • Użytkownik

# Kwiecień 13, 2007, 14:42:56
Dokładnie tak jak mówi st3tc, potem stworzenie, moda może polegać tylko na dodaniu do takiego katalogu roboczego powiedzmy plików z "zasadami gry" a tym samym ich podmianie. I juz mamy inną :)

nara.

Offline Anusia2007

  • Użytkownik

# Kwiecień 14, 2007, 00:36:50
Powiedzcie mi czy jakbym robila VFS'a ktory mialby zarowno odczytywac i zapisywac dane "w locie" w trakcie dzialania gry to lepiej robic na osobnym watku czy tym samym co gra?

Offline Anusia2007

  • Użytkownik

# Kwiecień 14, 2007, 00:53:41
Ale po co Ty chesz modyfikować archiwum VFS-a ?

Bo mi to potrzebne. Nie rozumiesz? Gralas/grales kiedys w second live? Tam podczas zwiedzania swiata doczytywane sa z netu na bierzaco przedmioty i lokacje ktore odwiedzasz a ktorych nie mialas/miales na hd. U mnie tez to bedzie. Zapis i odczyt w czasie dzialania gry sa niezbedne i to nie blad projektowy tylko zalozenia projektu. Przyjmij to jako definicje dziedziny problemowej ;]

Offline spax

  • Użytkownik

# Kwiecień 14, 2007, 00:59:36
W wypadku MMO zabawa archiwami jest kompletnie chybione.
Myśle że w tego typu grach najlepiej jest użyć po prostu normalnego FS'a.

bum.

Offline Goliatus

  • Użytkownik
    • Warsztat - tworzenie gier

# Kwiecień 14, 2007, 01:00:15
Proponuje poczytac o MVCC, które jest rozwiązaniem problemu jednoczesnego odczytu i zapisu oraz równoległego wielokrotnego zapisu.

Offline Anusia2007

  • Użytkownik

# Kwiecień 14, 2007, 01:07:22
W wypadku MMO zabawa archiwami jest kompletnie chybione.
Myśle że w tego typu grach najlepiej jest użyć po prostu normalnego FS'a.

bum.
Dlaczego tak uwazasz? W przypadku gier MMO chyba jeszcze wazniejszym jest aby nie bylo tak latwo wszystkie pliki pootwierac i pozmieniac co sie zapragnie. Przeciez nie zostawie golych otwartych plikow bez najmniejszego zabezpieczenia. Praktycznie zadna gra tak nie robi.

Offline Charibo

  • Redaktor

# Kwiecień 14, 2007, 01:11:00
to jakos je zabezpiecz - zaszyfruj sobie i viola

Offline spax

  • Użytkownik

# Kwiecień 14, 2007, 01:12:49
Ostatnio grałem w gre Trickstar (MMO ofkoz) i wszystkie pliki trzymane były luzem (koszmar przy instalacji...).
Każdy z tych pliczków był szyfrowany osobno, mniej lub bardziej finezyjną metodą :)

bum^2