Incbin 'auslagern' ?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

PhillipK

Betreff: Incbin 'auslagern' ?

BeitragMi, Jul 06, 2011 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Community =)

Ich bin grade dabei, mir einen Kleinen Editor zu schreiben.
Da ich schon öfters gesehen habe, das ressourcen(bilder etc) in eine exe 'eincompiled' wurden, habe ich mich auf die suche gemacht.

Mir ist der befehl Incbin unter die fittiche gekommen - klappt auch wunderbar!
Nur leider ist mein vorhaben ein wenig anders.
Mein editor soll eine ressourcen datei mit Angaben zur Frameanzahl etc mit beipacken, sodass ich alles gesammelt an einem Ort habe, finde ich einfach übersichtlicher.
Ich würde allerdings auch gerne funktionen wie Compress() nutzen, um meine Bilder kleiner zu machen und einzuspeisen.. Und hier kommt meine frage.

Da ich keine ahnung habe, wie Incbin genau funktioniert, noch was ich mit IncBinPtr anfangen kann - ist es möglich, bilder ausgelagert einzuspeisen?
Meine grobe vorstellung:
Bild laden, informationen laden & einstellen, das ganze als batzen irgendwo speichern.
Ich möchte keine 100mb große exe produzieren, weil ich alles einbinde.. Dazu sollen Thematisch sortierte Datein herhalten, auslesen ist erstmal egal.

Mir fällt grade etwas ein, in einem anderen spiel habe ich mal die Archive durchforstet und strings gefunden, aus welchen die Bilder ausgelesen werden (temporär in einem ordner erstellt und von dort geöffnet) - sowas möchte ich vermeiden! Es sind meine grafiken, die soll mir keiner klauen Wink

Also:

Ist es möglich, bilder als string oder ähnliches "einzubinden", und sie zusammen mit anderen Informationen (breite,höhe,framezahl, name, etc etc etc) wieder auszulesen, OHNE das sie temporär irgendwo erstellt werden? Am liebsten so Komfortabel wie Incbin, aber mir ist alles recht, solang es keine 10ms für 100x100 pixel braucht =)

Xeres

Moderator

BeitragMi, Jul 06, 2011 12:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum brauchst du die Daten, wenn die Bilder in der Exe eingebunden sind? Wären das nicht alles konstante, bekannte Werte?
Du könntest dein eigenes Packet-Format schreiben: Alle Ressourcen hintereinander in eine Datei Packen und mit Compress zippen.
Das deine Bilder sicher vor Diebstahl sind, ist aber in jedem Fall eine Illusion: Was du anzeigst, was im Speicher liegt, kann man auslesen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

PhillipK

BeitragMi, Jul 06, 2011 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Tja, aber ich kann es 80% der Usern schwerer machen Smile Wenn es im speicher liegt, ist es für jeden zugänglich, der ein wenig ahnung hat. Soweit ists mir klar.

Aber ich möchte keinen "gfx\blabla.png" krams beilegen, sondern eine einzelne datei, die meine ressourcen verwaltet.
Der nutzen ist fraglich, mir gehts in erster linie ums lernen.

In einem anderen Projekt schreibe ich grade einen Blockeditor, welcher 3D modelle mit Texturen verbindet, einstellungen speichert etc etc und bei laufzeit eine änderung ermöglicht, indem diese Datei einfach "erneuert" wird.
(das ganze ist soweit sinnvoll, da es ein netzwerkspiel ist und es nichtmehr mal eben in 1 sek gestartet ist, nur weil man 2 pixel geändert hat.)

Darum kam ich grade bei einem Spassprojekt auf die idee, alles gesammelt beizufügen.

Allerdings kommt mir da IncBin nicht sehr gelegen. Wenn ich das richtig gesehen habe, wird der Dateitype + Inhalt + 'Pfad\name.endung' in die exe Roh eingebunden.

Wenn es nicht anders geht, schade. Aber mir würds schon reichen, wenn ich diesen Part aus einem String aufrufen kann (dh den eingebundenen block aus einem TStream in einen String / Byte[] lesen und von dort mit "Incbin::"+string auslesen. Andersfalls werde ich mich dran setzen und die pixmaps + sonstige informationen roh einspeichern und später neue TPixmap objekte daraus bauen .. Sad )

Xeres

Moderator

BeitragMi, Jul 06, 2011 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe nicht ganz, was Incbin mit deinem Vorhaben zu tun hat... Du kannst die ein Pack-Programm schreiben was die Ressourcen lädt und alles komprimiert/verschlüsselt in eine Datei speichert. Davon sollte es auch schon ein paar Programme im Forum geben.
Ob du dann diese Datei mit Incbin einbinden willst oder nicht, ist relativ gleich.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

PhillipK

BeitragMi, Jul 06, 2011 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Chrm. Mein fehler.

Ich habe mich an Incbin festgefressen, weil es die erste möglichkeit war, die ich gefunden habe.

Packprogramm - klingt nach einem Schritt in die richtige richtung.
Entscheident für mich ist, das die datei in keiner form irgendwo "rekonstruiert" wird, zb in einer Tmp datei gebastelt und von dort geladen.
Sie soll einzig und ausschließlich intern direkt aus einem string oder ähnlichem erstellt werden.

Wie gesagt, wenn das nicht geht, werde ich wohl die komplette pixmap auslesen + packen :<

Midimaster

BeitragMi, Jul 06, 2011 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hole dir das Modul Koriolis.Zipstream:

http://www.koriolis-fx.com/for...topic=15.0

Du musst dich dort als User anmelden, um die Download-Links in den Beiträgen zu sehen!

Es ist eine Erweiterung der Streams auf ZIP-Dateien. Ich arbeite damit schon seit langen sehr zufriedenstellend. Es ist sehr praktisch weil man jederzeit zwischen Daten aus einem DatenOrdner, der ZIP-Datei und sogar jederzeit zu einer mit INCBIN eingebundenen ZIP-Datei wechseln kann. Das Koriolis-Zipstream kennt nämlich keine neuen Befehle, sondern klinkt sich einfach in alle bestehende Datei-Aktionen ein.

das kannst Du damit machen:

Du hältst Daten in einem DatenOrdner bereit.
Du erstellst eine ZIP-Datei aus den Daten. Das ZIP darf dabei auch Unterverzeichnisse enthalten.
Du läßt dieses ZIP auf der Platte oder bindest es in ein INCBIN ein.


BlitzMax: [AUSKLAPPEN]
SuperStrict   
Import koriolis.zipstream

' nur wenn Du möchtest:
Incbin "DATEN.ZIP"


'Das ist alles, was du zur Einbindung machen musst:

DatenPfad = "Daten\"
'oder alternativ:
DatenPfad="ZIP::DATEN.ZIP//"
'oder alternativ:
DatenPfad="ZIP::Incbin::DATEN.ZIP//"

' alles weitere sieht ganz normal aus:

Bild:TImage = LoadImage( DatenPfad + "Bild.png")
Font:TimageFont = LoadImageFont(DatenPfad + "arial.ttf", 13)



Auf die eigentlichen Dateibefehle hat es wie du siehst, keinerlei Auswirkungen! Du kannst die gezippten Dateien auch mit ReadFile() ansprechen. Nur speichern geht natürlich nicht! Also kein WriteFile() oder OpenFile()
 

PhillipK

BeitragMi, Jul 06, 2011 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, Midimaster!
Das klingt nach einem weiteren Ansatz.
Allerdings sind sie dann wieder so schön aufm präsentierteller.. Mh =) Ich werde es mir mal anschauen, vllt kann ich mit dem ansatz ja eine erweiterung schreiben. Smile

Gehe ich recht in der annahme, das incbin die datei 1zu1 in die exe integriert und ein paar bytes zusätzlich zur Identifizierung braucht?

Midimaster

BeitragMi, Jul 06, 2011 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
da is' nix aufm "Präsentierteller", weil Du ja die ZIP-Daten mir Passwort schützen kannst. Allerdings habe ich jetzt beim 2.Durchlesen deines Beitrages herausgelesen, dass du diese Dateien zur Laufzeit ändern willst? Das ginge natürlich weder mit INCBIN noch mit ZIP

DaysShadow

BeitragMi, Jul 06, 2011 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Bastel dir halt ein Containerformat und verschlüssle es, hab ich mir auch schon gemacht.
Musst dir halt Streams usw. anschauen.
Blessed is the mind too small for doubt

Xeres

Moderator

BeitragMi, Jul 06, 2011 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax kann Bilder usw. aus einer Bank laden - du kannst deine Ressourcen alle als eine Reihe Bytes komprimieren & verschlüsseln ohne temporäre Dateien zu erstellen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

PhillipK

BeitragMi, Jul 06, 2011 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Huch, bei laufzeit ändern?

Nein, das wollte ich nicht ausdrücken!

Das 'Datenpaket' soll von einer art Editor geschnürrt werden und später für mein Programm als ressourcenquelle diehnen. Änderbare sachen wie Optionen etc werden natürlich nicht mit eingeschnürrt Smile

Danke für den Tipp mit den Bank's! Das klingt auch brauchbar Smile Smile
Das würde mir auch die möglichkeit des Verschlüsselns bringen - gleich mal drüberschauen!

Midimaster

BeitragMi, Jul 06, 2011 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
aber was spricht dann gegen die in einer ZIP-Datei gesammelten und mit INCBIN eingebunden Daten? Für mich hört sich das geradezu ideal für dein Projekt an!

- Die Daten sind in einer gemeinsamen Datei zusammengefasst.
- sie sind dort sogar platzsparend komprimiert.
- sie sind in die EXE eingebunden

- trotzdem musst du nicht für jede Datei eine eigene INCBIN-Zeile schreiben
- durch das Passwort lassen sie sich auch nicht von außen öffnen.
- Bilder werden auch in eine HEX-Editor nicht erkannt.

- während der Programmierung kannst du einfach mit den einzelnen Rohdaten auf der Platte arbeiten. Das reduziert die Compiler/Linker-Zeit
- in der Fertigversion sind die Daten direkt in die EXE gelinkt. Dazu muss nur eine einzige Zeile im Code geändert werden und alle Ladeaktion greifen auf die INCBIN-ZIP zu!

Im Prinzip ist das nichts anderes als in Banks gepackte Daten. Aber Du musst eben nix entwickeln, um die Daten auszulesen. Und nix um Sie zu einem Paket zu schnüren. Einfach in den ZIP-Ordner werfen...
 

PhillipK

BeitragMi, Jul 06, 2011 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Es spricht nichts dagegen Smile
Zip finde ich persönlich sogar ziemlich gut.
Allerdings habe ich keine möglichkeit, die Zip datei zu verschlüsseln oder sonstwie. Passwort hin oder her, ich bin paranoid =)

Und direkt per incbin möchte ich höchstens ein paar Icons einbinden. Größere Grafiksammlungen (stichwort: Isometrische map + Teile als png's) gehören meiner meinung nach nicht in eine Exe.
Ich würde ziemlich misstrauisch werden, wenn mir jemand eine >10mb exe unterschieben will, mit einem kleinen spiel was selbst programmiert ist Smile

BladeRunner

Moderator

BeitragMi, Jul 06, 2011 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab lieber eine 10mB-exe als einen Ordner voll diversen .paks etc. Es ist ja wohl klar dass die Medias irgendwo sein müssen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Midimaster

BeitragMi, Jul 06, 2011 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ich gehe sogar inzwischen den Weg, dass ich ALLES in eine solche INCBIN-ZIP packe...auch Dateien die später eigentlich in das User-Verzeichnis des Kunden müssen. Beim ersten Start werden die aus der INCBIN-ZIP dorthin kopiert.

10MB stellen dabei noch keine besondere Größe dar und wirken beim User glaube ich ziemlich normal. Beim Firefox ist z.B. einer der DLLs 13MB groß, die meisten Anwendungen wie Audacity so zwischen 5MB und 10MB.

Ok, 100MB wären etwas ungewöhnlich, aber bei den 4GB Arbeitspeicher heutzutage auch keine Thema mehr...

Xeres

Moderator

BeitragMi, Jul 06, 2011 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem Spiel würde ich die Ressourcen nicht unbedingt vom User verstecken; kann ja vorkommen, das jemand ein Grafikpack machen möchte... Solang es nicht wegen einem Onlinehighscore unfair wäre, haben die Leute u.U. noch mehr Spaß wenn sie etwas herumtweaken können.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

PhillipK

BeitragDo, Jul 07, 2011 8:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Och grafikpacks sollten auch so machbar sein Wink
Dazu schmeiß ich einfach mein Blend file und nen Rohling bei, beim start wird der unterordner /mods/Tilesets/ durchsucht und evtl eingelesen *g*

Naja, gewissermaßen haben hier alle recht.
Aber meine nachforschungen zielen auf unser Hauptprojekt, welches eine ähnliche landschaft wie Minecraft bietet, allerdings mit einem anderen Spielprinzip.
Sollte jemand an unsere Modell-daten rankommen, könnte er es einfach cracken. Da das ganze über einen Server läuft, wäre das weniger schön.
Und nochmehr anti-cheat abfrage einbauen, wäre schon wahnsinn <.< Ich frage mich, ob mein Serversystem überhaupt noch für die angestrebten User-mengen ausreicht :<

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group