Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
George
Anmeldungsdatum: 21.02.2010 Beiträge: 13 Wohnort: Bremen
|
Verfasst am: 15.01.2011, 15:00 Titel: BMP-Bilder vor dem User verstecken |
|
|
Hallo zusammen,
für ein Adventure-Spiel, das ich gerade schreibe bewegt sich der USer durch eine Welt, die mit einer Menge von BMP-Bildern dargestellt wird. Diese werden je nach Spielfortschritt z. B. mit dem BLOAD-Befehl aus einem Unterverzeichnis "data" geladen und auf dem Bildschirm gebracht.
Aber, damit die Spielspannung erhalten bleibt, darf der User die ganzen BMPs auf seinem Rechner natürlich vorher nicht sehen (z. B. über "Arbeitsplatz").
Gibt es eine Möglichkeit, BMP-Dateien zu verschlüsseln, aber so, dass FreeBASIC sie trotzdem laden und verarbeiten kann?
Danke für Hinweise! - Grüße George |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 15.01.2011, 15:22 Titel: |
|
|
Es gibt eine einfache Möglichkeit, die aber unter Umständen sehr viel mehr Platz braucht. Man kann das BIld einfach in DATA-Blöcke umwandeln und mit READ wieder einlesen.
So mache ich es bei meinem Projekt Kirby. Wie die Dateien eingelesen werden, ist im Code mit dabei, das erzeugen der Datazeilen ist genau das Gegenteil dazu.
Die weitaus einfachere Methode wäre es, die Dateiendung der BMPs einfach zu ändern. Damit sind 95% der Benutzer überfordert.  |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 15.01.2011, 15:40 Titel: |
|
|
nen Linuxer wird das aber nicht sonderlich stören, da Linux generell keinen großen Wert auf Dateiendungen legt, und die meisten Dateimanager mit etwas Magie (magic numbers) den Dateityp bestimmen...
wenn du wirklich auf Nummer sicher gehen willst, musst du wohl deine eigene Laderoutine schreiben
abgesehen davon, verwende lieber pngs die sind kleiner und können mehr _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 15.01.2011, 15:50 Titel: |
|
|
95% der Benutzer verwenden kein Linux weil sie eben zu diesen 95% dazugehören. Wenn die Dateiendung unter Windows nicht stimmt, würde es ein Programm zwar vermutlich aufgrund der magic number erkennen, aber dazu müsste man erst auf die Idee kommen, der Dateiendung ein Programm zuzuweisen. Wie gesagt, 95% schaffen das nicht. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 15.01.2011, 17:12 Titel: |
|
|
Ich denke da bleibt eigentlich nur ein 'eigenes' Dateiformat, je nach groesse und Menge ist aber auch MODs Variante nicht zu verachten, ich persoenlich 'bastel' grafiken die ich staendig brauche zu einer funktion um die mir dann einfach den pointer zu den bild zuruck gibt... ist zudem dann auch sehr schnell und erfordert keine 'externen' dateien mehr, praktisch fuer fonts und immer wieder auftauchenden Logos ect... _________________
 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 15.01.2011, 17:51 Titel: |
|
|
Als kleiner Ausschweifer ein Zitat aus Wikipedia:
http://de.wikipedia.org/wiki/ROT13 hat Folgendes geschrieben: | Der einzige Zweck von ROT13 ist also der, dass der Empfänger einer Nachricht die bewusste Entscheidung treffen muss, den verschlüsselten Abschnitt zu lesen. |
d.h. dasselbe möchtest Du hier ja auch erreichen: Schummeln (Cheaten) lediglich unbequem machen aber nicht verunmöglichen; für letzteres muss der Spieler halt seinen Fleiss ins Code-Studium bzw. Reverse Engineering investieren.
Von dem her reicht eine eigene Bildladeroutine (proprietäres Format kreieren) bereits aus. Tipp: An dieser Stelle würde ich mit den String-Texten genau dasselbe tun! Und als weiteren Tipp: Dialogtexte und Bilder würde ich in Deinem Fall schon als Klartext-Source erstellen, aber eine Make-Datei für den Compilierprozess aufbauen, welcher alle Bilder und Texte in Dein Verschummerungsformat übersetzt, bevor der FBC angeworfen wird (Präprozessor). Also für dieses FB-Projekt speziell eine BUILD.BAT erstellen, weil weitaus mehr als nur eine .BAS in ein .EXE übersetzen nötig ist.
Ansonsten noch ein Artikel von mir zum Thema Adventures:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Abenteuerspiel.html
=> Idealerweise würde ich an Deiner Stelle sogar nur so etwas ähnlich der SCUMM-Engine aufbauen und den eigentlichen Abenteuerspiel-Inhalt in separate Script-Dateien packen. => dann muss Dein BUILD.BAT eigentlich nur diese Inhaltsdateien zusammen mit den Bildern "übersetzen", um daraus eine (hoffentlich signierte) Installer-Datei zu erzeugen.
Übrigens an dieser Stelle noch eine nette Erinnerung aus meiner Commodore 64-Zeit vor über 20 Jahren: Damals hatte ich auch schon Adventures aus Abtipp-Listings von Zeitschriften gespielt (Zeitalter lange vor dem Internet/Online-Netze und wo auch die Heftdiskette erst am Aufkommen war!) und den Code studiert, wenn ich nicht mehr weitergekommen war... ;-)
Spielmethode <Run Stop>, LIST 300-500, ? AA$, M$(5):M3=1:CONT ;-) _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 15.01.2011, 18:43 Titel: |
|
|
wenn du Engine und eigentliches Spiel trennen willst (wie SCUMM), kann ich dir die Skriptsprache Lua ans Herz legen... Die kannst du in dein Programm einbinden, funktioniert prima  _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 15.01.2011, 19:34 Titel: |
|
|
Hallo,
in FreeBASIC gibt es noch eine sehr einfache Möglichkeit, Bilddateien vor neugierigen Blicken des Otto-Normal-Benutzers zu schützen. Wurde ein BMP-Bild in einen Bildpuffer geladen (mittels BLOAD), kann man diesen als "Speicherabbild" in eine Datei speichern (mit der BSAVE-Anweisung). Dazu gibt man bei der BSAVE-Zieldatei eine andere Dateiendung als BMP an (z.B. "BSV"). Dann wird der Bildpuffer nicht als BMP gespeichert, sondern im FreeBASIC-eigenen Grafikpufferformat. Die so gespeicherte Bilddatei kann man mit Paint, IrfanView, der Windows-Bildvorschau usw. nicht anzeigen, sondern nur mit BLOAD in FreeBASIC laden.
=> Code-Beispiel: bloadbsave.zip (1,38 MB)
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
George
Anmeldungsdatum: 21.02.2010 Beiträge: 13 Wohnort: Bremen
|
Verfasst am: 16.01.2011, 00:42 Titel: |
|
|
Danke für die Hinweise!
Der Weg von Sebastian scheint mir am einfachsten für meine Zwecke. Mit den anderen Lösungen bin ich teilweise auch mit meinen Kenntnissen überfordert - obwohl sie bestimmt auch gut für mich wären.
Wenn PNG-Dateien kleiner sind wäre das auch nicht schlecht, da mein Spiel aus etwa 400 Bildern bestehen wird. Kann ich mit den PNG-Dateien genau so arbeiten wie mit den BMP? Also kann ich sie auch über BLOAD laden und mit PUT auf den Bildschirm oder einen Bildpuffer setzen? Und dann auch Teile aus den Bildpuffer auf den Bildschirm platzieren? |
|
Nach oben |
|
 |
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 16.01.2011, 01:50 Titel: |
|
|
Zitat: | Kann ich mit den PNG-Dateien genau so arbeiten wie mit den BMP? Also kann ich sie auch über BLOAD laden und mit PUT auf den Bildschirm oder einen Bildpuffer setzen? |
Nein du brauchst, um PNG-Datein einfach laden zu konnen eine externe Lib.
Man koennte die Bilder auch in die exe mithineincompilieren, ueber das rc script. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 16.01.2011, 14:33 Titel: |
|
|
George hat Folgendes geschrieben: | Kann ich mit den PNG-Dateien genau so arbeiten wie mit den BMP? Also kann ich sie auch über BLOAD laden und mit PUT auf den Bildschirm oder einen Bildpuffer setzen? Und dann auch Teile aus den Bildpuffer auf den Bildschirm platzieren? |
jein. du musst sie mit PLOAD() laden, einem bestimmten befehl aus einer library... das zu benutzen ist aber sehr einfach...
zerstören geht glaube ich auch mit einer anderen funktion, lässt sich aber bis auf die paar anderen namen genauso handhaben
ansonsten erhältst du dann einen imagebuffer, mit dem du arbeiten kannst wie gehabt _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
George
Anmeldungsdatum: 21.02.2010 Beiträge: 13 Wohnort: Bremen
|
Verfasst am: 16.01.2011, 17:42 Titel: |
|
|
Vielen Dank für die Hinweise! - Da gibt es für mich erst mal eine Menge zu lernen und auszuprobieren!
Grüße George |
|
Nach oben |
|
 |
|