Crystals-DSA-Foren

Normale Version: Der HEX-Thread / Spielstandsprobleme
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
Nein, es ist keine Funktion dafür vorhanden.
(29.10.2011, 18:29)Rabenaas schrieb: [ -> ]Mit einer Fotolovestory kann ich aber gerade nicht dienen. ;)
Och menno :(
So macht das doch gar keinen Spaß...
Kvirasim - Wir schreiben das Jahr 17 seiner allergöttlichsten Magnifizienz Kaiser Hal von Gareth.

Arva von Harben hat keine Fackel im Gepäck!
[attachment=2786]
Ein unhaltbarer Zustand. Also wird gespeichert, und Emacs auf den aktuellen Spielstand (namentlich FACKEL.GAM) gehetzt. Vorher werfen wir noch mit M-x hexl-mode den, ja genau, hexl-mode an.
[attachment=2787]
Wir wissen rein zufällig, dass aventurische Wasserschläuche immer die Inventarnummer 0x1E00 haben.
[attachment=2788]
Wir zählen 27 Bytes zurück, und mit C-M-x 41 zaubern wir eine formschöne Fackel ins Gepäck.
[attachment=2789]
Nun trägt die stolze Arva lediglich 490(=0x01EA) Unzen im Gepäck. Wegen der little endian Aufteilung wird daraus EA 01.
[attachment=2790]
Die suchen wir, und addieren 20 Unzen hinzu, machen also FE 01 daraus.
[attachment=2791]
Der Gegenstandscounter kommt direkt nach dem Namen und vor dem Heldentyp (0x03=Kriegerin). Der wird inkrementiert.
[attachment=2792]

Arva ist glücklich über ihre Fackel und der BOFH hoffentlich über die Bilder.
(29.10.2011, 19:30)Rabenaas schrieb: [ -> ]Was passiert, wenn der Gegenstandszähler nicht stimmt?
Das weiß ich auch nicht so genau. Es gibt nur anscheinend ein Problem beim Import von Schick nach Schweif durch ungültige Werte, siehe hier: Importfehler Schicksalsklinge --> Sternenschweif ab Beitrag #188
Vielleicht kann mir ja hier jemand auf die Sprünge helfen: Ich möchte gerne - wie so viele andere - eigene Porträts in Sternenschweif einbauen. Die Überlegung war, dass die Bilder ja IRGENDWO in den Spiel-Dateien vorhanden sein müssen. Also habe ich ein Programm geschrieben, dass alle Schweif-Dateien nach einem von mir angegebenem Muster durchsucht.

Im Detail sollte das folgendermaßen funktionieren:
Ich mache in DOSBox einen Screenshot und schaue mir die oberste Pixelreihe des ersten Zwergenporträts an ("Arbosh"). Daraus erkenne ich dieses Muster in den 32 Pixeln:

0 0 0 0 0 | 0 1 2 2 2 | 2 2 2 1 1 | 1 1 1 1 3 | 3 4 4 4 3 | 3 1 5 0 0 | 0 0

Die Trennstriche sind nur zur optischen Unterteilung da (alle 5 Pixel ein "|"). Das bedeutet: Alle Pixel, die dieselbe Farbe haben, erhalten dieselbe Zahl.

Mein Java-Programm parst nun ALLE Dateien von SCHWEIF und sucht nach diesem Muster. Allerdings erhalte ich keinen Treffer.

Das müsste heißen, dass die Bilder nicht pixelweise gespeichert sind. Aber wie sonst?? Hat hier irgendjemand eine Idee?

P.S.: Ich denke nicht, dass es an einem Fehler meines Programms liegt: In Schicksalsklinge habe ich die Porträts ohne Probleme gefunden.
Code:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

class Program
{
    //Arbosh (DSA 2):
    int[] pattern={0,0,0,0,0,0,1,2,2,2,2,2,2,1,1,1,1,1,1,3,3,4,4,4,3,3,1,5,0,0,0,0};
    
    int[] zeile=new int[pattern.length];

    boolean[][] patternMatrix;
    public static void main(String[] args)
    {
        Program p=new Program();
        p.whenProgramStarts();
    }

    /**
     * Spiegelt das Pattern, wird nicht benutzt, war nur zum ausprobieren
     */
    void reflectPattern(){
        int[] patternCopy=new int[pattern.length];
        for(int i=0;i<pattern.length;i++)
            patternCopy[i]=pattern[i];
        for(int i=0;i<pattern.length;i++)
            pattern[i]=patternCopy[pattern.length-1-i];
    }

    void genPatternMatrix(){
        //maximale Zahl in pattern suchen:
        int max=0;
        for(int i=0;i<pattern.length;i++){
            if(pattern[i]>max){
                max=pattern[i];
            }
        }
        max++;
        patternMatrix=new boolean[max][pattern.length];
        for(int i=0;i<max;i++)
            for(int j=0;j<pattern.length;j++)
                patternMatrix[i][j]=false;
        for(int i=0;i<max;i++){
            for(int j=0;j<pattern.length;j++){
                patternMatrix[i][j]=(pattern[j]==i);
            }
        }
    }

    void shiftAndAppend(int newByte){
        for(int i=0;i<pattern.length-1;i++){
            zeile[i]=zeile[i+1];
        }
        zeile[pattern.length-1]=newByte;
    }

    boolean match(){
        for(int patternCode=0;patternCode<patternMatrix.length;patternCode++){
            int pos=0;
            while(!patternMatrix[patternCode][pos])
                pos++;
            int colorCandidate=zeile[pos];
            for(int index=0;index<patternMatrix[0].length;index++){
                if(patternMatrix[patternCode][index]){
                    if(zeile[index]!=colorCandidate){
                        return false;
                    }
                }else{
                    if(zeile[index]==colorCandidate){
                        return false;
                    }
                }
            }
        }
        return true;
    }

    void checkFile(File f){
        //        System.out.println("Start File "+f.getName());
        if(f.isDirectory()){
            for (File fi : f.listFiles()) {
                checkFile(fi);
            }
        }else{
            long offset=0;
            int currentByte=-1;
            try {
                InputStream is=new FileInputStream(f);
                for(int i=0;i<pattern.length;i++){
                    currentByte=is.read();
                    zeile[i]=currentByte;
                }

                while(currentByte!=-1){
                    boolean matches=match();
                    if(matches){
                        System.out.println("*******************************Treffer: Offset="+offset);
                        printZeile();
                    }
                    currentByte=is.read();
                    offset++;
                    shiftAndAppend(currentByte);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("Ende File "+f.getName());

    }

    void printZeile(){
        for(int i=0;i<zeile.length;i++)
            System.out.print(zeile[i]);
    }

    void whenProgramStarts()
    {
        System.out.println("***********START****************");
        genPatternMatrix();

        File dir;
        
        //CD durchsuchen:
        dir=new File("../../../Spiele/SCHWEIF/");
        checkFile(dir);
        System.out.println("Ende");
    }


}
Die Porträts befinden sich in der Datei CHEADS.NVF im STAR.DAT-Archiv.

1. .NVF Format
2. Sternenschweif .FN/.DAT-Archiv Format

Im Gegensatz zur Schicksalsklinge werden die Porträts nicht mehr unkomprimiert u.a. in der CHR-Datei gespeichert, sondern nur noch der CHEADS.NVF Index. Die Verletzt/Krank Porträts finden sich in der CHEADS2.NVF, mit demselben Index.
Den zwölfen zum Grusse ...
wg. eigene Portraits ... in schick

ich hab mir noch nicht alles in diesem Thread durchlesen können, aber folgendes:
habe mir das programm runtergeladen: DSA1_Portrai_Konverter.zip
( http://www.crystals-dsa-foren.de/showthr...4#pid43334 )

welches mir nach meinem erachten eine rohdaten datei aus einem bild erstellt ...
das erstellen von portraits im format (32x32 indexed) ist kein problem

((habe die exe nach dsa1conv umbenannt weil mir der dateiname schlicht und einfach zu lang war)
Code:
wineconsole cmd, und dann
dsa1conv.exe test.bmp
)
dann öffne ich in emacs die erstellte datei und das savegame bzw. die *.chr im hexl-mode ,
Welchen teil muss ich bearbeiten, damit ich die portrait-daten im savegame bzw. *.chr ersetze ??
bzw wonach muss ich suchen bzw nach welchem offset?
Kann man den veränderten savegame auch nach schweif und riva exportieren?

fragt sich
Shorty

edit: kann mir jemand hex-support geben?
Hallo, bin neu hier...

Gibt's eigentlich die Möglichkeit, z.B. magische Gegenstände bzw. Waffen, die es in den Spielen eigentlich nur 1x gibt, per HexEditor in nem Spielstand an mehrere Helden zu vergeben? Oder würde sowas ein Spiel kaputt machen?
Und kann man solche Gegenstände/Waffen auch in Savegames reinhexen, bevor sie gefunden bzw. erspielt sind?
Sicher gibt's die Möglichkeit. Warum?
Naja, is der Gedanke so fernliegend, dass es Probleme im Spiel geben könnte, wenn man eine magische Waffe vergibt, bevor sie erspielt ist? Beispielsweise wenn man die goldene Wurfaxt reingehext hat, bevor sie im Spiel "freigeschaltet" ist. Könnte ja vllt. spielinterne Verwaltungsprobleme geben...
Wollte nur wissen, ob darüber Erfahrungswerte bestehen, bevor ich das mal ausprobiere und nach stundenlangem zocken feststellen muss, dass es dann durch sowas genau an dieser Stelle im Spiel zum Absturtz kommt...
Ich wüsste nicht, dass das schon mal jemand versucht hätte. Dass es zu Problemen kommt, wenn ein eigentlich einmaliger Gegenstand mehrmals vergeben wird, kann ich mir aber kaum vorstellen. Wie sollte das programmiert sein, damit es abstürzt? Und notfalls könnte man es immer noch wieder weghexen.
[attachment=2735]

Hallo! Ich bräuchte bitte jemanden, der mir den Runenknochen ins Inventar legt. Bin leider einem Bug aufgesessen und muss den Knochen nun zum zweiten Mal bei Umbrik abgeben..
Ich bin leider gerade sehr beschäftigt, könnte mich frühestens in ein paar Tagen drum kümmern. Falls sich bis Sonntag niemand anders findet, könntest du mir eine Erinnerungs-PN senden? Dann hätte ich die nötige Zeit um dir zu helfen.
Hallo joesome,

hier dein Spielstand. Ich habe deinem Jäger den Runenknochen ins Gepäck gehext.

Gruß
Hendrik
(02.03.2012, 16:52)Hendrik schrieb: [ -> ]Hallo joesome,

hier dein Spielstand. Ich habe deinem Jäger den Runenknochen ins Gepäck gehext.

Gruß
Hendrik

Hey Hendrik,

ich danke Dir vielmals!!
Schönes Wochenende


edit: einfach perfekt: Bin mit dem gehexten Knochen zu Umbrik und hab mir das Schreiben für Tiomar geholt. Dann direkt nach Brendhil, bekomme das Kartenstück und treffe direkt im Hafen auf Swafnild, die mir ihr Kartenstück überlässt! So ein Glück... Ich sehe es als Entschädigung für den Kartenbug ;-)
Ein Dank der Hexerei!!
(02.03.2012, 07:21)thEClaw schrieb: [ -> ]Ich bin leider gerade sehr beschäftigt, könnte mich frühestens in ein paar Tagen drum kümmern. Falls sich bis Sonntag niemand anders findet, könntest du mir eine Erinnerungs-PN senden? Dann hätte ich die nötige Zeit um dir zu helfen.

Hallo!

Vielen Dank für dein Angebot! Hendrik hat sich schon drum gekümmert!!

Schönes Wochenende
Hallo,

ich versuche gerade meinen Spielstand von DSA1.06 zur CD Version zu importieren OHNE den Fortschritt etc. zu verlieren. Ich kann den Spielstand zwar mit dem Konverter umwandeln, dann stimmen alle Helden, aber der Fortschritt (Kartenfunde, besiegte Gegener, Kontakte etc.) ist verschwunden.

Kann mir jemand einen TIPP geben, welchen Teil aus dem 1.06 Savegame ich in den 3.02 Spielstand kopieren muss, damit alles da ist? Ich kann auch gerne meinen Spielstand schnell schicken.

Danke im Voraus und schöne Grüße,
Jan
Danke für die ersten 3 Seiten. (mehr hab ich mir jetzt nicht durchgelesen)
War auf dem Totenschiff Unterdeck 3 gefangen. Um da wieder rauszukommen braucht man ein Seil, jedoch wird der 3. Stabzauber vom Magier nicht als dieses erkannt.
Mit meinem begrenzten Wissen und Eurer Hilfe hab ich dann mit dem TinyHexer einen meiner Helden (Pergrimm) manuell gesucht, in den folgenden Bytes seine Araxgifte (38 00) gefunden und eins davon in ein Seil (79 00) gewandelt.
Spiel gestartet, rausgeklettert, wieder abgespeichert und aus der 79 eine 38 gemacht. Tadaa, Eine Etage höher, Inventar (hoffe ich) immer noch integer :)
Auf diesem Wege musste ich mir auch keine Gedanken über Gewicht oder Anzahl machen.
das nächste mal kannst du auch gerne meinen Savegameeditor verwenden (siehe meine Signatur), denn gerade in DSA 1 rumzuhexen ist mitunter nicht gerade einfach, da oftmals viele Teilkopien der Charaktere exitieren und man schnell mal eine falsche Stelle erwischen kann ;)
Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52