asynchroner Ressource Loader/Manager für Games

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

asynchroner Ressource Loader/Manager für Games

Beitrag von Thorium »

Hab mir erst überlegt ob ich den bei "Feedback Anwendungen" poste aber da die Dr. Wuro Game Library auch hier bei den Spielen gepostet wurde, poste ich meinen Ressource Manager auch mal einfach hier. Ist ja auch speziell für Games designt.

Als erstes will ich mal erklären was das überhaupt ist. :)
Es handelt sich um eine .dll zur freien Verwendung, die das Managment über Ressourcen wie Grafiken, Sounds und sonstigen Content ungemein vereinfacht und nette Feature bietet. Genannt hab ich das ganze "Thorium Ressource Manager", auch wenn es im Augenblick eher nur ein Loader ist.

Eigentlich habe ich den Manager für ein Spielprojekt von mir entwickelt aber nachdem ich immer mehr Einfälle hatte ihn zu verbessern, denke ich das ihn auch andere gebrauchen können.

Kernpunkt ist das die Ressourcen asynchron geladen werden. Das ermöglicht das Laden der Ressourcen im Hintergrund während der Spieler spielt oder während ein Intro-Video läuft.

Das war auch recht schnell umgesetzt. Das ganze läuft über 2 eigene Threads, einer zum laden von der HDD und der andere zum dekomprimieren der Ressourcen. Das heisst während der erste Thread die nächste Ressource von der HDD liest, ist der zweite schon mit dekomprimieren der vorherrigen Ressource beschäftigt. Dadurch ist das laden extrem schnell. Dabei können vom Programm soviele Ressourcen wie gewünscht angefordert werden, also es muss nicht gewartet werden bis eine fertig geladen ist. Das währe sogar ziemlich ungut, da in diesem Falle das gleichzeitige Laden und Dekomprimieren nicht zum Zuge kommen würde. Das Programm bekommt über einen Callback mitgeteilt wenn die Ressource fertig geladen und dekomprimiert wurde.

Dann dachte ich mir, hey warum nicht mal was neues einbauen: vollautomatischer Multilanguage-Support. Zu diesem Zwecke habe ich ein eigenes Container/Archiv Format entwickelt, dessen Spezifikationen ich offen lege. Das Format unterstützt verschiedene Sprachversionen von ein und der selben Ressource. Das heisst ihr müsst euch keine Gedanken mehr darum machen, welche Datei ihr bei welcher Sprache laded. Darum kümmert sich der Ressource Manager. Ihr müsst nur beim initialisieren einen Sprachcode angeben.

Das zweite Nebenfeature, welches ich eingebaut habe, ist Versionierung der Ressourcen. Man kann Ressourcen, die in einem Container liegen eine Versionsnummer verpassen. Das heisst wenn mehrere Archive mit Ressourcen im Ressourcen-Verzeichnis liegen und diese teilweise gleiche Ressourcen beinhalten, wird automatisch immer die aktuelleste Ressource geladen.

Ausserdem dient das ganze auch als Art Abstraktion des Ressourcenzugriffs. Nutzt ihr meinen Manager braucht ihr euch keine Gedanken mehr darum machen wo und wie die Ressourcen liegen. Aus Performancegründen für ultra-schnellen Zugriff auf die Ressourcen werden alle Container in einem Verzeichnis eurer wahl indiziert. Das heisst alle Informationen ermittelt und die Container "offen gehalten". So kann, wenn eine Ressource angefordert wird, direkt die Ressource aus dem jeweiligen Container geladen werden ohne das noch Header oder Directorys ausgelesen werden müssen. Zudem erfolg die Identifizierung der Ressourcen intern nicht primär über ihren Namen sondern über einen Hash ihres Namens. Dadurch ist der Zugriff wirklich extrem schnell. Viel schneller als wenn man auf eine einzelne Datei auf der HDD zugreift.

Also ihr könnt so viele Container erstellen wie ihr wollt. Der Ressourcen Manager wird die Ressourcen immer finden. So können auch Patches ganz simpel (wie bei vielen kommerziellen Spielen) einfach als eine einzelne Ressourcendatei einfach mit ins Ressourcenverzeichnis gelegt werden. Dank der Versionisierung werden immer nur die neusten Ressourcen indiziert.

Für Entwicklungs- und Debuggingzwecke indiziert der Ressource Manager auch alle einzelnen Dateien im Ressourcenverzeichnis. Dabei ersetzen einzelne Dateien mit gleichem Namen wie Ressourcen in Containern diese.
Der Zugriff auf einzelne Dateien ist allerdings generell langsamer und alle Feature wie Komprimierung und multilinguale Ressourcen fallen weg.

Ganz fertig ist das Teil noch nicht aber aber es liegen schon ein kleines Beispiel und ein Tool um ThorReCo Ressource Container/Archive zu bauen bei.

Am wichtigsten neben der ThoriumRessourceManager.dll ist die ThReCoWriter.exe. Dieses Tool baut euch Ressource Container nach den unten genannten Spezifikationen zusammen. Es werden noch nicht alle Feature unterstützt aber multilinguale Ressourcen sowie Versionierung sind drinnen. Das Teil ist nur ein kleines Konsolenprogramm, welches als Parameter den Dateinamen einer Textdatei mit Informationen zu den Ressourcen erwartet. Eine Beispieldatei sammt Beispielressourcen in deutsch und englisch liegt bei. Auch schon ein fertig gebautes ThReCo und eine "make test.trc.bat" mit der ihr ohne die Konsole zu öffnen bauen könnt. Die test.txt sollte selbsterklärend sein, das ist die Beschreibungsdatei für die Ressourcen.

Den ThReCoWriter.exe will ich in nächster Zeit weitestgehend durch ein Total Commander Plugin ersetzen. Dann wirds schön komfortabel, zumindest für Total Commander Nutzer. :wink:

Eine Example.pb ist auch dabei. Wobei die nicht so schön ist. Die Ressourcen kann man natürlich viel schöner über strukturierte Linked Lists handeln und ich habe auch weitestgehend auf Fehlerprüfung verzichtet. Soll ja nur ein kleines übersichtliches Beispiel sein. Es extrahiert 2 Ressourcen aus dem beiliegenden test.trc.

Besonders interessieren würde mich, welche Komprimierungen ihr den gerne hättet. Im Augenblick ist nur JCalG1 (über PB interne Lib) integriert. Das Container Format sieht aber auch schon bzip2 vor. Wird aber noch nicht vom Manager unterstützt. Also was hättet ihr gerne noch an Komprimierungen? Aber denkt drann, es ist für Games, das heisst es geht um Speed. Der Festplattenspeicher ist unerheblich, es geht darum das Laden der Ressourcen zu beschleunigen. Ausserdem sollte die Komprimierung idealerweise als freie DLL verfügbar sein.

So, hier nun erstmal der Download:
Es handelt sich hier um einen Debug-Build, der langsamer ist als der Master-Build und eine Logdatei im Anwendungsverzeichnis erstellt. Die brauche ich, wenn es Probleme gibt.
Thorium Ressource Manager v0.02

Es gibt nur sehr wenige Prozeduren über die das alles gehandelt wird. Also im Prinzip sehr einfach einzubinden die DLL. Ist allerdings etwas komplizierter zu benutzen als einfache linieare Loader.

Hier die Proceduren:

Code: Alles auswählen

ResInitManager(RessourcePath.s, Language.i, CallbackAddr.i)
Initialisiert den Ressource Manager. Hier werden bereits alle Ressourcen automatisch indiziert.

RessourcePath gibt den Pfad des Ressourcenverzeichnises an.

Language ist ein Sprachcode. Sprachcodes gehen von 1-255 und sind im Augenblick noch nicht festgelegt. Was ich aber später aus Kompatiblitätsgründen noch tuen werde. Im Augenblick ist nur drauf zu achten das der Sprachcode im Programm dem Sprachcode in den Ressourcencontainern entspricht. Welche Codes ihr dabei verwendet bleibt erstmal noch euch überlassen.

CallbackAddr ist die Adresse für den Callback der angibt das die Ressourcen geladen wurden.

Code: Alles auswählen

;callback procedure format: ProcedureName(ResIndex.i, Addr.i, Size.i, Error.i)
;Errorcodes: 1 = Could not load ressource from HDD.
;            2 = Could not decompress ressource.
Das ist die Callback-Prozedur, welche ihr der DLL zur Verfügung stellen müsst.

ResIndex ist praktisch Handle auf die Ressource, den bekommt ihr wenn ihr die Ressource anfordert und könnt ihn hier verwenden um zu identifiezieren welche Ressource geladen wurde.

Addr ist die Speicheradresse an die die Ressource geladen wurde.

Size ist die Größe der Ressource im Speicher.

Wollt ihr eine Ressource wieder freigeben einfach den Speicher mittels PB's FreeMemory freigeben.

Code: Alles auswählen

ResLoad(ResName.s)
Hiermit fordert ihr eine Ressource an.
Der Rückgabewert ist der ResIndex, den ihr im Callback prüfen könnt.

Code: Alles auswählen

ResChangeLang(Language.i)
Hiermit ändert ihr die Sprache obwohl der Manager schon initialisiert ist. Ist nicht nötig wenn ihr die Sprache im Spielverlauf nicht ändern wollt.
Tut ihr dies aber werden alle Ressourcen neu indiziert. Wichtig! Alle ResIndex Handles werden damit ungültig. Führt einen Sprachwechsel nur durch wenn der Manager gerade nicht beschäftigt ist, also keine Ressourcen läd. Die bereits geladenen Ressourcen bleiben selbstverständlich gültig.

Code: Alles auswählen

ResGetLastError()
Gibt den Fehlercode des letzten aufgetretenen Fehlers zurück.
Tritt ein Fehler auf gibt eine Prozedur 0 zurück. Ist eine Prozedur erfolgreich gibt sie einen Rückgabewert oder 1 zurück.

Die Fehlercodes sind wie folgt:

Code: Alles auswählen


#ResError_NoAccessFile             = 1  ;kein Zugriff auf Datei
#ResError_WrongOrDmgArchiv         = 2  ;Archiv ist kein ThReCo oder beschädigt
#ResError_UnsupArchivFormat        = 3  ;nicht unterstütztes Archivformat
#ResError_UnsupArchivFotmatVersion = 4  ;nicht unterstütze Version des Archivformats
#ResError_UnsupCompInArchiv        = 5  ;nicht unterstützte Kompression wird im Archiv genutzt
#ResError_ArchivIsBig              = 6  ;Archiv ist größer als 2GB und dies wird nicht unterstützt
#ResError_ArchivIsHuge             = 7  ;Archiv ist größer als 4GB und dies wird nicht unterstützt
#ResError_UnsupDirComp             = 8  ;Directory des Archivs ist mit nicht unterstützter Kompression komprimiert
#ResError_AllocMem                 = 9  ;Speicher konnte nicht alloziert werden
#ResError_ReadFile                 = 10 ;konnte Datei nicht auslesen
#ResError_Decomp                   = 11 ;konnte nicht dekomprimieren
#ResError_NoAccessDir              = 12 ;kein Zugriff auf Verzeichnis
#ResError_OutOfIndex               = 13 ;ausserhalb des gültigen Bereichs
#ResError_ResNotFound              = 14 ;Ressource konnte nicht gefunden werden
Das wars schon an Prozeduren. Mehr ist nicht nötig, alles andere läuft intern ab, bzw muss beim erstellen der Ressourcen Container bereits geregelt werden. :mrgreen:

Zum Abschluß noch das eigene Containerformat ich habe es ThReCo (Thorium Ressource Container) genannt. Dateitypenendung: .trc

Das Format ist noch nicht Final. Es kann passieren das ich noch Änderungen vornehme ohne den Versionszähler des Formats zu erhöhen. Erst wenn ich die Final veröffentliche ist auf die Formatspezifikation 100% verlass.

Auch enthält die Formatspezifikation bereits Dinge die noch nicht unterstützt werden, z.b. bzip2 Komprimierung oder Big- und Huge-File support für Container größer 2GB bzw größer 4GB.

Ich habe die Datentypen einfach in Byteanzahl angegeben. Ist finde ich einfach damit rummzurechnen. Es handelt sich immer um unsignt Ganzzahlen. Esseiden bei der Signatur und dem Ressourcennamen.

Code: Alles auswählen

;ThorReCo (Thorium Ressource Container) format structure
;------
;header
;------
;8 byte signature = ThorReCo
;1 byte format version = 1
;1 byte used compressions (flags)
;1 byte flags
;2 byte alignment
;1 byte compression of directory
;2 byte compressed size of directory    (4 byte on huge file)
;2 byte uncompressed size of directory  (4 byte on huge file)
;4 byte offset of directory             (8 byte on huge file)
;---------
;directory
;---------
;2 byte count of ressources             (4 byte on huge file)
;x byte ressource entries
;---------------
;ressource entry
;---------------
;1 byte lengh descriptor for ressource name
;x byte ressource name
;2 byte version of ressource
;1 byte compression
;1 byte count of language entries
;x byte language entries
;--------------
;language entry
;--------------
;1 byte language
;4 byte compressed size of ressource    (8 byte on huge file)
;4 byte uncompressed size of ressource  (8 byte on huge file)
;4 byte offset of ressource             (8 byte on huge file)
;
;------------
;header flags
;------------
;bit0 = ressource versioning
;bit1 = multilingual
;bit2 = big file (file > 2GB)
;bit3 = huge file (file > 4GB)
;bit4 = unused
;bit5 = unused
;bit6 = unused
;bit7 = unused
;
;-----------------------
;compression enumaration
;-----------------------
;00 = none (uncompressed)
;01 = JCalG1
;02 = bzip2
;03 = BriefLZ
;04 = zlib
;
;-----------------
;compression flags
;-----------------
;bit0 = JCalG1
;bit1 = bzip2
;bit2 = BriefLZ
;bit3 = zlib
;bit4 = unused
;bit5 = unused
;bit6 = unused
;bit7 = unused
So, jetzt hab ich viel geschrieben. *schwitz*
Hoffe auf Feedback. :)
Zuletzt geändert von Thorium am 18.08.2009 22:31, insgesamt 4-mal geändert.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Da ich kein Gamer bin und lt. Deiner Aussage irgendwie noch keine
Resourcen erstellt werden können, weiß ich nicht so genau was es da zu
testen gibt :wink:

Aber ohne meinen Senf geht garnichts :mrgreen:
Als Packformat würde ich BriefLZ (http://www.ibsensoftware.com/download.html)
hinzufügen, ist eine statische Lib, packt nicht so gut wie jCalg, aber dafür
um ein vielfaches schneller.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Gut BriefLZ kommt rein, sieht gut aus. :)

Nun ist das Teil testbar. Habe das ZIP-Archiv aktuallisiert.
Es befinden sich nun diverse Dateien darin.

Am wichtigsten neben der ThoriumRessourceManager.dll ist die ThReCoWriter.exe. Dieses Tool baut euch Ressource Container nach den oben genannten Spezifikationen zusammen. Es werden noch nicht alle Feature unterstützt aber multilinguale Ressourcen sowie Versionierung sind drinnen. Das Teil ist nur ein kleines Konsolenprogramm, welches als Parameter den Dateinamen einer Textdatei mit Informationen zu den Ressourcen erwartet. Eine Beispieldatei sammt Beispielressourcen in deutsch und englisch liegt bei. Auch schon ein fertig gebautes ThReCo und eine "make test.trc.bat" mit der ihr ohne die Konsole zu öffnen bauen könnt. Die test.txt sollte selbsterklärend sein, das ist die Beschreibungsdatei für die Ressourcen.

Den ThReCoWriter.exe will ich in nächster Zeit weitestgehend durch ein Total Commander Plugin ersetzen. Dann wirds schön komfortabel, zumindest für Total Commander Nutzer. :wink:

Eine Example.pb ist auch dabei. Wobei die nicht so schön ist. Die Ressourcen kann man natürlich viel schöner über strukturierte Linked Lists handeln und ich habe auch weitestgehend auf Fehlerprüfung verzichtet. Soll ja nur ein kleines übersichtliches Beispiel sein. Es extrahiert 2 Ressourcen aus dem beiliegenden test.trc.

Für Fragen stehen dieser Thread und ich natürlich bereit.

Hoffe ich hab die Leute nicht mir dem riesen Text abgeschreckt. :freak: :mrgreen:
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
coder
Beiträge: 204
Registriert: 25.09.2005 17:53
Computerausstattung: Intel Core2Quad Q8200 @ 2.33GHz
ASUS P5Q3, 2GB DDR3-1066 RAM, ATi Raedeon HD 4850
Wohnort: Deutschland
Kontaktdaten:

Beitrag von coder »

Top Project! :allright:
Ich hoffe du machst weiter!

Was ich mir noch wünschen würde, wäre eine einfache Verschlüsselung,
aber das ist nicht so wichtig.

Ansonsten ist das wirklich ein sehr schickes Ding! :allright:

mfg coder
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

coder hat geschrieben: Ich hoffe du machst weiter!
Auf jeden Fall, ich brauch das ja für mein eigenes Spiel. Ich hab jetzt erstmal 2 Wochen Urlaub, fahre eine Woche in die Niederlande auf eine private LAN-Party wo ein paar Leute hinkommen, die ich bis jetzt nur aus Chats und Foren kenne. Wird bestimmt lustig. Die zweite Woche werd ich mich zuhause einschließen, Internet und Telefon abklemmen, von Pizza leben und eine erste Techdemo meines Spiels hinbekommen. Paralell dazu wird der Ressource Manager auch weiterentwickelt, da der in der Techdemo schein einwandfrei laufen soll.
coder hat geschrieben: Was ich mir noch wünschen würde, wäre eine einfache Verschlüsselung,
aber das ist nicht so wichtig.
Wäre leicht einzubauen aber ich glaube nicht an Verschlüsslungen in Games. Das ist immer knackbar, weil der Schlüssel logischerweise im Spiel enthalten sein muss. Bestes Beispiel ist Blizzard, die mit dem MoPaQ (MPQ) Format alles erdenkliche Versucht haben ein Read-Only Ressourcencontainer zu erschaffen. Das Format unterstützt Verschlüsslung und es werden sogar keine Dateinamen gespeichert. Nur Hashes der Dateinamen. Der Hashalgo ist ein eigens von Blizzard entwickelter Algo, der so gut sein soll das er als inreversibel gild. (wie MD5). Natürlich hat Blizzard die Formatspezifikationen nie veröffentlicht. Trotsdem gibts heute einige MoPaQ-Editoren von Moddern und viel Mods für Blizzardspiele. Hat alles nix geholfen. :mrgreen:

Von daher stelle ich eine Verschlüsslung generell bei Gameressourcen in Frage. Zumal die Performance natürlich darunter leided.
coder hat geschrieben: Ansonsten ist das wirklich ein sehr schickes Ding! :allright:
Vielen dank, freut mich zu höhren. :)
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
coder
Beiträge: 204
Registriert: 25.09.2005 17:53
Computerausstattung: Intel Core2Quad Q8200 @ 2.33GHz
ASUS P5Q3, 2GB DDR3-1066 RAM, ATi Raedeon HD 4850
Wohnort: Deutschland
Kontaktdaten:

Beitrag von coder »

Jo hast auch wieder recht...

Ich wünsch dir noch viel Spaß auf der Lan..

mfg coder
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Benutzeravatar
coder
Beiträge: 204
Registriert: 25.09.2005 17:53
Computerausstattung: Intel Core2Quad Q8200 @ 2.33GHz
ASUS P5Q3, 2GB DDR3-1066 RAM, ATi Raedeon HD 4850
Wohnort: Deutschland
Kontaktdaten:

Beitrag von coder »

Mir ist noch was eigefallen:

Könnte man z.B. ein zweites Verzeichnis angeben, wo Ressoucendatein für Modifikationen liegen anzugeben?
Und ist es möglich, das man für eine Datei mehrere Sprackvarianten in verschiedenen Ressourcendatein packt? (Ich hoffe du verstehst mich :freak: )

und sry für doppelpost...

mfg coder
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

coder hat geschrieben: Könnte man z.B. ein zweites Verzeichnis angeben, wo Ressoucendatein für Modifikationen liegen anzugeben?
Mehrere Verzeichnise könnte ich einbauen, ist im Augenblick noch nicht drinnen.
coder hat geschrieben: Und ist es möglich, das man für eine Datei mehrere Sprackvarianten in verschiedenen Ressourcendatein packt? (Ich hoffe du verstehst mich :freak: )
Ich denke ich verstehe was du meinst. ^^
Ich hab das noch nicht explizit getestet muss aber funktionieren. Du kannst die Ressourcen aufteilen wie du willst, der Loader findet immer die passende Sprache und Version.

Zum verdeutlichen:
Du hast den Ressourcencontainer Res01.trc da packst du die Ressource "gametexts.txt" rein, gibst der den Sprachcode 1.

Wenn du nun den Ressource Manager initialisierst mit dem Sprachcode 1 wird er diese Ressource indizieren (für die spätere Verwendung vormerken). Initialisierst du den Ressource Manager mit dem Sprachcode 2 wird er trotzdem diese Ressource indizieren, da er keine mit passendem Sprachcode findet. Findet der Ressource Manager keine passende Sprachversion einer Ressource indiziert er die erste. Später will ich da noch eine Indizierung per Sprachähnlichkeit einbauen.

Nun entscheidest du dich später noch Englisch anzubieten. Also macht du einen weiteren Ressourcen Container z.b. Res02.trc in den du die Ressource mit gleichem Namen aber mit Sprachcode 2 reinpackst. Die wirfst du dann einfach in das Ressourcenverzeichnis. Initialisierst du den Ressource Manager nun mit Sprachcode 2 wird er automatisch die neue Ressource in Res02.trc finden und indizieren. Initialisierst du mit Sprachcode 1 so findet er die Ressource im alten Res01.trc.

Also es ist so das es unerheblich ist wieviele Container du hast und wie du die Ressourcen aufteilst. Du kannst auch gleiche Ressourcen mit unterschiedlichen Sprachversionen auf mehrere Container aufteilen, wenn du das willst. Also sowas wie German.trc und English.trc zum modularen verteilen von Sprachversionen ist absolut kein Problem.

Der Ressource Manager behandelt alle Ressource Container so als wäre nur ein einziger vorhanden. 8)

Das war auch eine meiner Zielsetzungen. Ich will z.b. ein Level auch auf mehrere Container aufteilen können, damit ich das Dateilimit von 2GB (aus Kompatiblitätsgründen) einfach umgehen kann.

Edit:
Noch etwas was vieleicht nicht so ganz klar ist: Ressourcennamen sind im engeren Sinne keine Dateinamen. Also du kannst Ressourcen nennen wie du lust hast, inklusive Sonderzeichen, die in Dateinamen nicht gültig sind. Ich empfehle aber sich an die Dateinamenskonventionen zu halten. Ist aber kein Muss!
Groß- und Kleinschreibung wird ignoriert aber keine führenden und abschließenden Leerzeichen!
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
coder
Beiträge: 204
Registriert: 25.09.2005 17:53
Computerausstattung: Intel Core2Quad Q8200 @ 2.33GHz
ASUS P5Q3, 2GB DDR3-1066 RAM, ATi Raedeon HD 4850
Wohnort: Deutschland
Kontaktdaten:

Beitrag von coder »

Thorium hat geschrieben: Mehrere Verzeichnise könnte ich einbauen, ist im Augenblick noch nicht drinnen.
Wer schick wenn du das noch einbaust..
Thorium hat geschrieben: Der Ressource Manager behandelt alle Ressource Container so als wäre nur ein einziger vorhanden. 8)
cool :allright:
Thorium hat geschrieben: Edit:
Noch etwas was vieleicht nicht so ganz klar ist: Ressourcennamen sind im engeren Sinne keine Dateinamen. Also du kannst Ressourcen nennen wie du lust hast, inklusive Sonderzeichen, die in Dateinamen nicht gültig sind. Ich empfehle aber sich an die Dateinamenskonventionen zu halten. Ist aber kein Muss!
Groß- und Kleinschreibung wird ignoriert aber keine führenden und abschließenden Leerzeichen!
Das ist gut zu wissen!

mfg coder
Windows 7 x64 | PureBasic 4.60 4.50 4.02
Ja verdammt, meine Eltern wohnen immer noch bei mir!
Benutzeravatar
Dostej
Beiträge: 529
Registriert: 01.10.2004 10:02
Kontaktdaten:

Beitrag von Dostej »

Cooles Projekt

Legtst DU die Sourcen irgendwann mal offen (PBOSL?)

Das wäre von daher gut, wenn Du mal keine Lust mehr hast, kann das Projekt weitergeführt werden.Ist für mich zumindest immer ein Kriterium, wenn ich mir überlege, ob ich solche Zusätze in mein SPiel einbauen soll...
Antworten