Verständnisfrage



  • Hallo,

    ich habe mir mal die Ordner von Crysis und derartig Spiele angeschaut und dabei ist mir aufgefallen, dass einige Dateien mehr als 2 GB groß (z. B. Audio.bla) sind. Aufgrund des Namens schließe ich, dass in dieser Datei die ganzen Audios gespeichert werden und dann im Spiel mit C++ angesprochen wird. Meine Frage ist nun, wie ich meine ganzen Audios in eine Datei speichere damit ich sie dann mit C++ so auslesen kann? Weil ich finde das ziemlich Komfortabel wenn man nur eine Datei ansprechen und in ihr nach der richtigen Audio suchen muss.

    Vielen Dank schonmal!



  • Ganz spontan und einfach würde ich am amfang eine Tabelle mit dem Titel und dem Anfangsbyte reinschreiben und dann später nur in dieser Tabelle suchen und bis zum anfangsbyte durchlaufen.

    Weiß aber nicht wie Profis das machen 🙂

    ... Juhu ich habe endlich eine neue Projektidee XD



  • Eine Möglichkeit sind Virtuelle dateien, man speichert die eigentlichen Dateien hintereinander in einer Großen, dabei kann man auch Komprimieren, dann macht man eine Tabelle was wo ist und bei Bedarf werden die Dateien entkomprimiert und in den RAM geladen, man hat dann die ganze Datei im RAM, in DirectX gibt es zB von den Funktionen zum laden von Texturen auch Varianten die einen Block im RAM als Quelle akzeptieren.



  • aha ok, danke. Wird dann die Musikdatei (z. B. .mp3 Dateien) mit dem Editor geöffnet und dann kopiert und in ihre Datei reinkopiert gekennzeichnet (und evtl. andere Audios hinzufügen) und gespeichert?

    Also zum Beispiel so:

    //Musiktitel 1
    Ðaf-&~¤oE6Â[hªU”ä’_xà*^×ë]¦»Mòi»¥‡ÑôaÂ@Èå”¹f•1ËJ¼MÖt=÷Oê'É@~n+¬¶¬ÄÑ´»j?ÀI^ÿû l‚€ðhÛkI{t‚K‹za	n”£mL%-Ѥ®.hôº•T(î•G¤ÍM5O5¬µ3ýOÉ!yŒ‹Æ
    //Musiktitel 2
    †#_3Æýybÿç3ãýoõ¿ü«þ—ìO1Wœ¼CåÁ"‡úÕF)6ܸ¨Pp‚åÕ\*
    usw.
    


  • Nein, das wäre ja Unsinn.

    Jede Datei besteht ja aus simplen Bytes. Und die werden aneinandergehängt.

    Im simpelsten Falle:
    [Inhalt] + [Bytes von Datei 1] + [Bytes von Datei 2] + [Bytes von Datei 3] + [Bytes von Datei 4]

    Im Inhalt könnte dann folgendes stehen:
    - Anzahl der Dateien
    - Pro Datei: Name, Startadresse, Größe

    Damit kann man sowas schon ganz simpel lösen.

    Das macht man dann auch nicht mit "dem Editor", sondern mit einem dafür entwickelten Programm.
    Ganz simpel und grob gesagt ist das das gleiche, was WinZIP und Konsorten machen (ein wenig mehr machen sie schon, aber grundsätzlich ist es so oder so ähnlich).



  • Genau.
    Im Prinzip kannst du dir das vorstellen wie ein TAR Archiv, oder ein ZIP Archiv ohne Komprimierung.
    Entweder definiert man ein eigenes Archiv-Format und bastelt sich eigene Tools um diese Archive zu verwalten (erstellen, Dateien hinzufügen/löschen etc.), oder man nimmt was fertiges, wie eben z.B. TAR oder ZIP.

    Wenn man was fertiges nehmen möchte, aber nicht will, dass die Dateien z.B. per zip/tar/... entpackt werden können, kann man z.B. einfach die Signatur am Anfang des Archivs sowie ein paar Byte im "Verzeichnis" des Archivs verändern (XOR oder was auch immer).

    Um die Kids aufzuhalten vollkommen ausreichend, und einen echten Hacker hält man auch mit 100% selbstgebastelten Formaten und viel Aufwand nicht lange auf.

    Im Endeffekt ist es ziemlich egal, solche Tools sind keine grosse Arbeit, auch wenn man sie von Null weg selbst entwickelt.

    Um dann aus so einem Archiv z.B. Bilder laden zu können, oder Sounds abspielen zu können, muss man das Archiv-System natürlich noch mit der Bild-Lade-Library oder Sound-Abspiel-Library "zusammenknoten". Das ist je nach verwendeter Library sehr wenig bis mittel viel Aufwand (je nachdem auf welchem Level die API angesiedelt ist, wo man sich einklinken kann).



  • Ach so. Ok Danke, jetzt weiß ich, was ich als nächstes programmiere 👍


  • Mod

    das sind ganz simple zip dateien.


Anmelden zum Antworten