JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=b7dd06e4a5a25a1767c17c093fcebdc5Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Material "verstecken"
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 31.05.2007, 22:14    Titel: Material "verstecken" Antworten mit Zitat

Hi Smile
Ein Projekt braucht ja immer viele Bilder: Texturen, Sprites, etc. und Sounddateien.
Ich möchte aber nicht, das jeder frei auf diese zugreifen kann. ist es möglich die dateien in eigene "verschlüsselte / geänderte" formate zu packen, bzw. mehrere dateien in eine zu packen?

Also theoretisch habe ich mir überlegt:
Inhalt einer Datei auslesen (z.B. PNG) und in eine andere datei schreiben (z.B. moo.dat). Dann die nächste datei auslesen und in der moo.dat anhängen. Wenn man jetzt die werte kennt, welche Datei an welcher position liegt (bitweise auslesen), könnte man die dateien dann verwenden, ohne die erst wieder als .png zwischenspeichern zu müssen?

also a) wäre sowas überhaupt möglich?
b) wenn ja, wie würde man die dateien wieder einbinden? z.b. möchte LoadSurfaceFromFile ja den Dateinamen und nicht den Dateiinhalt.


Hmm klingt evt. verrückt, aber hmm es soll ja nicht jeder die Spielfigur ändern können oder meine Sounddateien für andere Dinge benutzen können. Rolling Eyes
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt


Zuletzt bearbeitet von Asto am 03.06.2007, 10:49, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 31.05.2007, 22:24    Titel: Antworten mit Zitat

Die Benutzer werden eigentlich immer einen weg finden an deine Daten zu kommen, aber dennoch gibt es einige Schutzmechanismen, dsa einfachste wird wohl sein die Daten in eine verschlüsselte ZIP datei zu lagern und bei Bedarf auszulesen.

Alternativ wäre es auch möglich sich für jede Resource ein eigenes Format zu überlegen.

Was du da vorschlägst ist möglich und zum auslesen ohne direkte Pfadangabe sollte D3DX sogar auch einiges mitliefern, zb um direkt aus den Speicher zu lesen, etc, evtl wäre das etwas.

Dennoch würde ich dir einen Blick auf zLib empfehlen, dies ist die Bibliothek für einfaches ZIP daten codieren/decodieren.

Zitat:
Hmm klingt evt. verrückt, aber hmm es soll ja nicht jeder die Spielfigur ändern können oder meine Sounddateien für andere Dinge benutzen können.


Was spricht denn dagegen, selbst für Doom1/2 gab es damals schon MODS und das glaube ohne richtigen mod support Wink
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 31.05.2007, 22:45    Titel: Antworten mit Zitat

Also einmal kannst du ja per Lizens dabei schreiben, das man die Inhalte nicht verändern darf. Rein rechtlich dürfte das sowieso per Urheberrecht gelten, aber man kann in einer Textdatei ja noch einmal darauf zugreifen.

Dann stellt sich mir noch die Frage, wer Sachen überhaupt klauen will. Ich meine, Sounds beschafft man sich eben zu 80% irgendwoher (kaum einernimmt eigene auf) und wenn man die bei nem Soundportal schon runterlädt, dann können die ja auch ruhig andere weiterbenutzten.

Eine einfache Möglichkeit ist halt, den Dateien komische Namen zu geben, so dass keiner weiß, ob das jetzt ein Sound oder ein Bild oder was weiß ich was ist. Das hilft auch schon ein wenig.

Alles weiter geht halt fast nur noch, wenn du keine fertige Lade-libs mehr nimmst. Aus einem Archiv zu laden ist sehr beliebt, man kann zip nehmen, aber es gibt unzählige andere Typen (wie z.B. das von dir angesprochene). Man kann aber auch einfach den Header von den Dateien verändern, so dass jedes Normale Programm nicht mehr weiß, dass es sich beispielsweise um eine png-Datei handelt. Das macht das simple kopieren auch schwerer.

Wahrscheinlich am besten ist es wohl, alles in einem verschlüsselten Archiv zu haben, und den Schlüssel irgendwo im Programm zusammen zu bauen. Also so, dass man ihm beim reverse Enginiering nicht direkt im Programm sehen kann. Sondern einfach möglichst kryptische zusammenrechnerreien. Wenn man das geschickt macht, dürfte es für jeden Cracker sau schwer sein, da noch ranzukommen.

Letztendlich kann man aber bestimmt auch Grafik- und Soundbuffer der Hardware direkt auslesen, oder einfach Bildschirmfotos machen und sound aufnehmen. So gesehen kann man es nur extrem schwer und Aufwändig machen, aber nicht verhindern.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 31.05.2007, 23:01    Titel: Antworten mit Zitat

vielen dank für die anregungen Smile

nun ich möchte auch nicht alles 100%ig schützen, das geht ja sowieso so gut wie garnicht. es geht mir im prinzip einfach darum, das nicht jeder an meine grafiken ran kommt, die ich mühevoll erstellt habe, wie die spielfiguren, gegner, etc. Smile

Da finde ich das mit dem zippen eine gute idee, nur bremst das ordentlich, wenn man die immer entpacken muss oder?

wie würde das mit dem header manipulieren gehen? einfach die dateien mit falschem header per c++ speichern und mein script, "weiss" dann was für einen richtigen header die hatte?
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt


Zuletzt bearbeitet von Asto am 03.06.2007, 10:49, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 01.06.2007, 07:16    Titel: Antworten mit Zitat

Link

So. Damit kann man zip-Archive laden, allerdings nur UNKOMPRIMIERTE. Im Prinzip muss man also nur an die richtige Leseposition springen und kann ab da beinahe genau wie sonst seine Dateien laden. Der Vorteil ist, du kannst jedes Normale zip-Programm zum erstellen benutzen, musst halt nur "ohne Kompression" auswählen.
Wenn du jetzt, mit einem Hex-Editor, oder sonstwie, den Header manipulierst, wird kaum ein zip-Programm das Archiv mehr erkennen und öffnen können. Somit weiß man net so genau, ob es wirklich nur eine zip-Datei ist, oder ein eigenes Archivformat (nenn die Datei dann eben Data.dat") und deine Dateien sind relativ sicher.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 01.06.2007, 09:54    Titel: Antworten mit Zitat

Wenn man die Daten ( sagen wir mal ein jpg-Bild) damit ausliest erhält man ja ein char-Buffer wo die Datei dann drinliegt. Gibt es dann eigentlich auch eine Methode eine Textur direkt von diesem Buffer zu laden oder muss man erst den Buffer auf die Festplatte speichern und dann per CreateTextureFromFile() die Graphik wieder von der Platte laden ?
Wär sonst ein bisshen viel Hin- und Hergeschiebe Confused
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 01.06.2007, 10:05    Titel: Antworten mit Zitat

Wieso? Man bekommt einen void-Zeiger, denn du dann casten kannst.
Oder du verwendest einfach D3DXCreateTextureFromFileInMemory,
übergibst den Zeiger und die Größe der Textur und bekommst einen Zeiger auf die Textur.


Zuletzt bearbeitet von Maxim am 01.06.2007, 10:11, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 01.06.2007, 10:07    Titel: Antworten mit Zitat

Maxim hat Folgendes geschrieben:
Oder du verwendest einfach D3DXCreateTextureFromFileInMemory,
übergibst den Zeiger und die Größe der Textur und bekommst deine einen Zeiger auf die Textur.
Danke Maxim danach hab ich gesucht Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 01.06.2007, 12:47    Titel: Antworten mit Zitat

Vielen lieben dank Jonathan Smile

Da hab ich ja mal was zu tun Very Happy

Und Otscho: Danke für die Frage, die stellte ich mir auch *g*
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 10:45    Titel: Antworten mit Zitat

hmm ich habe nun zeit gefunden
http://www.scherfgen-software.net/index.php?action=tutorials&topic=zip
auszuprobieren, aber irgendwie klappt das nicht.

ich arbeite zum testen mit einer konsolenanwendung, und will nur einfach schauen, ob das laden funktionierte oder nicht.

Kopf:
CPP:
#include <iostream>
#include "stdio.h"
#include "windows.h"
using namespace std;

hier folgt der code, wie auf der oben erwähnten homepage angegeben

CPP:
void main(void)
{
 int moo;

    if(NULL == LoadZipObject("BFIRE.zip", "BFIRE.wav"))
      cout << "Fehler.";
   else
      cout << "Erfolgreich.";

   cin >> moo;
}


BFIRE.zip enthält nur die Datei BFIRE.wav
Komprimierung in WinRAR auf Speichern gestellt, also eigentlich keine!?

Die Ausgabe des Programms ist immer "Fehler." Crying or Very sad

Wenn ich den rückgabewert von der Funktion LoadZipObject direkt ausgeben lasse, bekomme ich immer 00000000 Neutral

Den Punkt "Strukturmitglieder ausrichten" auf der obigen Seite habe ich auch so vollstreckt. Sad
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 11:22    Titel: Antworten mit Zitat

hast du den debuger verwendet? an welcher stelle bekommst du genau null in der funktion?

oft liegt es daran, dass die datei gar nicht geöffnet wird Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 13:15    Titel: Antworten mit Zitat

Debuggen... Danke für den Tipp! Da muss ich mich erst als PHP-Coder dran gewöhnen Wink

Ja, er konnte die Datei nicht öffnen.

Habe erst fopen() durch fopen_s ersetzt, da er meinte fopen wäre veraltet, aber gleiches Resultat, war auch nur ne "formale" Änderrung.

Dann habe ich den Absoluten Pfad zur Datei angegeben und es geht... o.O

Zumindest kommt "Erfolgreich."
Ob die die "Datei" dann verwenden kann, muss sich noch herausstellen Wink

Aber das Problem lag daran: die zip datei muss im gleichen ordner wie die exe liegen, also hier in Debug/

Komisch nur, das man Grafiken für Sprites etc. nicht unter Debug packen muss, sondern nur wenn man die Release-Version kompiliert o.O

----------------------

Aber ich habe dann noch Fragen: Wink
Auf der obigen Page kann man folgendes lesen:
Zitat:
"Strukturmitglieder ausrichten"
Würde man die oben gezeigte Funktion in einem normalen Visual C++-Projekt laufen lassen, dann käme man leider nicht sehr weit. Das liegt an einer Optimierung durch den Compiler, der es gerne sieht, wenn die Elemente einer Struktur auf 8 Bytes ausgerichtet sind. In unserem Fall ist das aber tödlich, denn große Teile der gelesenen Daten (beim Lesen des Zip-Headers) würden dann direkt "ins Nirwana" gelesen. Teile der Daten würden dann im Speicher zwischen zwei Variablen landen - in einem Speicherbereich, der gar nicht genutzt wird.
Darum muss hier die Compiler-Einstellung "Strukturmitglieder auf 2 Bytes ausrichten" aktiviert werden. In Visual C++ 6 geht das so: Projekt è Einstellungen è C/C++ è Code Generation è Struct-Element-Ausrichtung è 2 Byte.
Es gibt auch spezielle #pragma-Befehle, die man um die betroffenen Codestellen herum legen kann, um nicht die Ausrichtung im gesamten Programm zu verändern (was Performance kosten könnte).

Das muss ich auch machen, damit es läuft.
Nur: Wo ist genau da der Unterschied mit 2 und 8 Bytes? Kann es probleme geben, wenn ich es global auf 2 stelle? Sollte ich lieber mit #pragma arbeiten? wenn ja: wie wäre der befehl?
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 13:26    Titel: Antworten mit Zitat

die relativen pfade beziehen sich immer auf die exe. wenn du aus VC++ deine projekt startest, dann bezieht sich alles auf dein arbeitesverzeichnis, welches standardmäßig, dass projektverzeichnis ist. also wenn du aus vc++ aus startest, dann wird deine exe praktisch in deinem projektverzeichnis gestartet und nicht in Debug.

das alles ist viel einfaches als es sich anhört.
tipp: bei "linker einstellungen" des projekts den pfad zu der ersteugzter exe von "Release/xxx.exe" auf "xxx.exe" bzw. "Debug/xxx.exe" auf "xxx_debug.exe" ändern und dann hast keine probleme mehr.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Asto
JLI'ler


Alter: 37
Anmeldedatum: 30.05.2007
Beiträge: 114
Wohnort: Dortmund
Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 13:29    Titel: Antworten mit Zitat

vielen dank für den tipp, keine überflüssigen unterverz. mehr *gg*

@ pragma:
ist es das:
http://msdn2.microsoft.com/en-us/library/2e70t5y1(VS.71).aspx ? (link tuts auch mit url net :/)
möchte ja nix "kaputt" machen :X
_________________
"A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Maxim
Senior JLI'ler



Anmeldedatum: 28.03.2004
Beiträge: 249

Medaillen: Keine

BeitragVerfasst am: 04.06.2007, 13:32    Titel: Antworten mit Zitat

ja, das ist es.
fand ich informativ: http://www.c-plusplus.de/forum/viewtopic-var-p-is-160599.html
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum