Spiele Übersetzung und die leidige Suche nach den Pointern!

  • Hallo ihr lieben ich wusste jetzt nicht so genau, wo ich meine Frage zu Orden sollte, daher habe ich es jetzt einfach mal in diesem Bereich getan.


    Ich habe folgende fragen, ich versuche zusammen mit einem Freund ein Spiel zu übersetzen ins deutsche, es handelt sich um dieses Spiel Metal Warriors für das SNES (Metal Warriors - Wikipedia)


    Die Texte im Spiel kann man mit SnesEdit leicht finden und sind nicht komprimiert, dass heißt erst mal es ist nicht so kompliziert sein müsste. Ich habe auch schon eine Tbl. erstellt und die Buchstaben und zahlen sind den jeweiligen Hex wert zugeordnet.


    Ich blicke halt nicht so wirklich durch mit der Findung des Pointers, also ich habe es versucht nach dem Video-Tutorial vorzugehen und denke das der Ansatz nicht so verkehrt ist, aber ich habe einige fragen.


    1. Kann es mehrere Pointer geben für den selben Text? Es ist nämlich so, wenn ich mit Notepad++ den Vermutlichen Pointer finde dann zeigt er mir die Selbe Hex Adresse an verschieden Stellen an.


    2. Woran kann man erkennen ob es 2 byte oder 3 byte Pointer sind und wie kann man das dann notfalls ändern?


    3. Gibt es eine gute Erklärung auf Deutsch wo es ausführlich erklärt wird mit den Pointern?


    Wie gesagt es ist noch ziemlich am Anfang das Projekt und möchte mich da gemeinsam mit einem Freund daran wagen, aufgrund des Zeitmangels wird es noch etwas länger dauern, bis da was gescheites dabei rauskommt, aber ich bräuchte wahrscheinlich dann irgendwann die Hilfe wegen Umlaute und aufgrund der deutschen Übersetzung die neu Zuordnung auf einen freien Platz des Speichers usw.


    Ich hoffe ihr könnt mir mit Rat und Tat zu Seite stehen


    Ich wünsche euch einen wunderschönen Sonntag und schöne Pfingsten!


    Grüße aus Berlin (Law36)

  • Ich wünsche einen schönen Guten Morgen!


    Ich möchte eine kleine Info schon mal geben nach Stundenlangen suchen und ausprobieren und der Orientierung durch das YouTube Video, bin ich wohl auf den passenden Pointer gestoßen. Ich habe es auch in Kruptar eingefügt und wollte mal den Text Testhalber übersetzen bekomme aber folgende Fehlermeldung, wenn ich es dann Inserten möchte

    [Group1]: Not enough space for 95 ($5F) bytes.' , was soll es mir sagen diese Info, wahrscheinlich muss ich irgendwie freien Speicher finden für den Text?


    Vielleicht kann mir jemand sagen was ich als nächstes machen müsste, aber zumindest, weiß ich schon mal wo die Pointer mehr oder weniger liegen, aber so wie es ausschaut muss ich es wohl immer Einzeln suchen.

  • Grüße,


    das heißt der Text den du einfügen willst ist größer als Platz vorhanden. Am Anfang kannst du einfach 1:1 Testen den Originaltext wieder einzufügen, wenn das klappt dann kannst du weiter probieren.


    Gruß


    red

  • Ich Grüße dich Red,


    ich hatte jetzt den ursprünglichen Text wieder eingefügt und wollte es Starten, aber leider geht es trotzdem nicht, schon merkwürdig.




    Hier mal ein Beispiel


    mal eine andere Frage ich habe das mit der Differenz bei SnesEdit nicht gemacht, kann das eventuell damit zu tun haben oder gibt es auch Roms wo das nicht gebraucht wird Beispiel mit dem -8000 usw.?

  • Ich habe mal eine Frage was sind in Kruptar die String Terminators und die CLRF Codes vllt kann mich mal jemand aufklären.... was das ungefähr sein soll und was man dort einfügen müsste?


    Ich hoffe es kann mir jemand beantworten in meinem vorherigen Post habe ich ein Bild gepostet und er sagt mir das der Speicher wohl nicht ausreicht usw. Die frage ist muss der Speicher vorher zugewiesen werden an einer bestimmten Position Vermutung da wo der Text liegt? und muss man das dann bei Kruptar in "Text Insert Range" vorher eingefügt werden?


    Ich hoffe das mir da jemand eine Erklärung geben kann, ansonsten komme ich nicht weiter voran.


    Ich bedanke mich schon mal für eure Hilfestellung und Beratung!


    Ich Wünsche euch einen schönen sonnigen Sonntag!

  • Ich habe es einfach mal ausprobiert und habe mal unter den Punkt "TEXT INSERT RANGE" den Bereich zugewiesen wo der Text enthalten ist.


    Ich habe dann den Text etwas umgeändert, aber darauf geachtet das die bytes usw. eingehalten werden, aber leider kommt beim Starten des ersten Levels nicht der Text.


    Ich habe mal ein Bild hinzugefügt vielleicht weiß jemand eine Idee


  • Ich habe gestern noch etwas rumprobiert und habe es zumindest hinbekommen das der Text endlich angezeigt und auch dargestellt wird.


    Ich weiß auch zumindest denke ich es, wo sich weitere Pointer befinden meine frage ist kann man bei Kruptar den gesamten Bereich festlegen oder muss ich das jetzt für alle einzelnen Dialoge den Pointer neu bestimmen?


    eine andere Frage ist wo kann ich erkennen ob noch freier Speicher im Rom ist um eventuell die Deutschen Dialoge neu zuzuordnen?

    zumindest habe ich einige Bereiche gefunden wo nur 00 steht.


    Ich habe so viele Fragen gestellt in den letzten Tagen die leider unbeantwortet geblieben sind, was ich persönlich sehr Schade finde, scheinbar ist die Community in Sommerpause und hat dadurch wenig zeit.


    Ich wünsche euch an dieser Stelle eine schöne sonnige Woche!


    Beste Grüße Law36

  • Ich habe so viele Fragen gestellt in den letzten Tagen die leider unbeantwortet geblieben sind, was ich persönlich sehr Schade finde, scheinbar ist die Community in Sommerpause und hat dadurch wenig zeit.

    Guten Morgen Law36,


    viele im Forum sind berufstätig und/oder haben auch schon Familie. Da bleibt leider manchmal vieles auf der Strecke. Viele sind auch nicht jeden Tag hier oder haben schlicht gesagt weniger Ahnung - so wie ich ... Es ist aber sicherlich nicht so, dass niemand Interesse an deinem Projekt bzw. Problemen hat. Hinzu kommt, dass wohl kaum jemand das Spiel kennt und noch weniger die Bedienung von Kruptar. Hier muss ich ehrlich zugeben, dass selbst ich gescheitert bin, weil man Null Infos hat, wie etwas dort hinterlegt werden muss. Es sind also viele Faktoren, die hier mit reinfließen. Ich würde gerne helfen, aber mein Wissen ist leider sehr beschränkt. Manchmal braucht es etwas Geduld, aber ich bin zuversichtlich, dass das bald alles bei dir klappt, nachdem du schon so weit gekommen bist.

    Deep into that darkness peering,
    long I stood there,
    wondering, fearing, doubting,
    dreaming dreams
    no mortal ever dared to dream before.


    Edgar Allan Poe

  • Ja, Kruptar kann da manchmal etwas leidig sein. So spontan kann ich leider auch nicht sagen, woran das bei dir liegt, dazu fehlen mir die Hintergrund Informationen. Wenn mir so etwas passiert nehme ich immer einen Hex-Editor und Lunar Adress hinzu und schaue nach, wohin der Pointer wirklich zeigt, bzw auf was Kruptar den abhändert.

    Dazu im Ordnermenü links auf deinen Texteintrag klicken, dann siehst du bei pnSrcPtrPos die Adresse, wo dein Pointer liegt und bei pnDestPtPos, wo Kruptar deinen Pointer hinschreibt. Im Normalfall sollten die gleich sein. Dann öffnest du dein Spiel im Hex-Editor und schaust, was du an der Stelle stehen hast. Hast du beim Inserten alles richtig gemacht, sollte dein Pointer zu der Adresse führen, die du auch bei Kruptar hinterlegt hast. Sollte da etwas anderes stehen, hängt davon ab, was du stehen hast, um mit dem nächsten Schritt weiter zu machen.


  • Also, nun mal der Reihe nach ;) Ich hab mich jetzt auch mal mit dem ROM beschäftigt.


    Also erstes folgende Grundausstattung ;)


    -SNES Edit

    -HXe

    -Kruptar

    -Lunar Adress

    -Notepad++

    -Snes9x Debugger 1.51 ep10r2


    Ich habe mal eine Frage was sind in Kruptar die String Terminators und die CLRF Codes vllt kann mich mal jemand aufklären.... was das ungefähr sein soll und was man dort einfügen müsste?


    Ich hoffe es kann mir jemand beantworten in meinem vorherigen Post habe ich ein Bild gepostet und er sagt mir das der Speicher wohl nicht ausreicht usw. Die frage ist muss der Speicher vorher zugewiesen werden an einer bestimmten Position Vermutung da wo der Text liegt? und muss man das dann bei Kruptar in "Text Insert Range" vorher eingefügt werden?

    String Terminators sind unter anderem Hexwerte wie FF die einen DIalog beenden können.

    CLRF Codes sind Hexwerte für einen Zeilenumbruch oder eine Pause im Dialog usw.



    Wenn du in Kruptar eine Gruppe machst, hast du "Text Insert Range" - Hier legst du fest wo und von welcher Anfangsstelle zu Endstelle er einfügen darf. Das solltest du tun für einen Pointer oder Block von Pointern, damit du nichts überschreibst. In deinem Fall für den Satz "Locate Agent Marise..." wäre der Bereich: 001ADBB-001ADF3


    Ja es geht schon etwas eher los, nämlich bei 01ADBB / Hier lädst er bereits schon ein paar Hexwerte: 00 05 01 07 Dann gehts los mit dem L von Locate.


    Um ehrlich zu sein, das sieht aber auch echt kacke aus in dem Rom ;)


    Wie kommst du jetzt auf einen Pointer, sofern es überhaupt welche gibt und das nicht alles hardcoded ist.


    Also, wir wissen das der Satz bei 1ADBF anfängt, das mit den vorherigen Bytes habe ich auch erst gesehen nach diesem Schritt.


    Öffne Lunar Adress: Geht auf Auto-Detect-Type und wähle deine ROM. Unten bei "PC FIle Adress" haust du die Adresse 1ADBF rein. Dann kommt drüben bei SNES LoRom die Adresse 03ADBF raus, richtig?


    Öffne Snes9x und starte dein Spiel, mach nach dem Starten und noch VOR (gant wichtig) via Shift + F1 oder F2 ein Savestate / Laden dann nur via F1. Bitte unten so einstellen wie bei mir. Lade den Savegabe und mach den Hacken bei "Logging - CPU" bis der Typ erscheint der den Satz anwirft mit Locate Marisa... Dann kannst du wieder den Hacken rausnehmen. und via Pause auf Pause machen im Spiel.


    Schau unter dem Ordner Logs vom Emu, da sollte dein Log sein, öffne diesen nun mit Notepad++. Suche hier nun nach ADBF. Wieso nicht nach 03:ADBF machen wir nicht, da viel ROMs die Lorom Adressen unterschiedlich aus legen, wirst du gleich sehen! ;)



    Du solltest das hier irgendwann finden. Wenn nicht, dann mach den Log einfach etwas eher bevor der Typ den Satz sagt.



    Wie du siehsts, gibt es oberhalb von dem gefunden noch ein beo andere LDA [$2C] [$83:ADXX Werte. Scroll mal hoch. Beginnt also bei ADBC, wie ich es oben sagte.

    Wenn du bei A: den Wert ADBC verfolgst nach oben, siehst du das dieser von LDA ($2E),y[$83:A990] A:0FDB geladen wird.



    Geh in SNES Edit. Drücke auf "G" und gib ein 1A990. Drücke dann F5 für Pointeransicht, Einmal auf F8 -Differenz 0 ... Was siehst du?


    Gruß


    red

  • Ich wünsche euch allen einen Schönen guten Abend!


    Ich möchte mich erstmal bedanken mit der Rückmeldung und es war auch nicht Böse gemeint mit der Sommerpause sondern sollte als Scherz gedacht sein. Schließlich haben wir ja jetzt schönes Wetter und die Maßnahmen werden so langsam wieder gelockert, da ist man dann froh draußen sein zu können :)

    Um ehrlich zu sein, das sieht aber auch echt kacke aus in dem Rom

    Da Stimme ich dir vollkommen zu :D


    Ich danke dir Red für die kleine Einführung und der Verdeutlichung.


    Ich finde es voll spannend und es macht auch total spaß sich da einzuarbeiten, aber man erkennt schon wie umfangreich es ist und was für eine Arbeit daraus entsteht.



    Ich sehe zumindest das nach dem Drücken auf F5 die Position 0010208 angezeigt wird^^, aber müsste er nicht auf den Text verweisen oder soll ich dann dorthin springen?


    Irgendwie stehe ich auf dem Schlauch.


    Ich werde mich mal morgen damit weiter beschäftigen und mal sehen, was passiert, wenn man da ein wenig rumspielt.:)


    Ich wünsche einen schönen Abend!


    Gruß


    Law36 (Ich muss die Zahl los werden, bin keine 36 mehr ;():D

  • Ich seh das Problem.


    schließe mal snesedit und mach hxd auf. lade die rom, und entferne die ersten 200 Bytes. die Rom hat noch einen header.


    öffne dann wieder snes edit. dann sollte es richtig sein;)


    gruß

    red

  • Ich wünsche einen schönen guten Morgen!


    Das wusste ich gar nicht das man diese 200 Bytes entfernen musste, mir kam es schon merkwürdig vor, aber habe mir nichts dabei gedacht.


    Ich habe es jetzt getan und es entfernt hoffe das ich es richtig entfernt habe, aber zumindest zeigt er mir jetzt ein Text an.


    Beispiel


    Ich hoffe das es jetzt so richtig ist!


    Jetzt verstehe ich es auch warum der Textanfang bei der Position 1ADBB bzw. der Text bei 1ADBF oben bei der Einführung gewesen ist. :)


    Ich gehe mal davon aus das ich jetzt bei der Pointer Ansicht in SNESEdit auf den Text springen müsste bzw. dort zu der Position wo er sich befindet oder?

  • Das ist richtig. Der Satz auf dem du bist ist ja mitten im Text, wenn du etwas hochscrollst, fängt der Textblock ja mit 1AB20 an <05><01><07>GOOD JOB...


    Wenn du auf die 05 gehst und dann "P" drückst, dann sucht er den Pointer, welchen du bei 01A8FE findest.


    Jeder Satz endet bzw macht einen Zeilenumbruch mit <5D> davor. Entweder es folgt dann eine 00, was hier unser Terminatorbyte ist ( in Kruptar String Terminator) bzw FF für den Zeilenumbruch. Sofern du deine Tabelle in Snesedit final erstellt hast, also auch Satzzeichen usw, dann kann du wenn du in Kruptar auf Table 1 gehen,, und dann Load from File, genau die Tabelle laden, die snesedit erstellt hat.


    Snes Edit legt ja immer einen Ordner an, wenn du ein ROM lädst, dort findest du die Tbl datei.


    In Kruptar hab ich mir das reingeladen, wie oben beschrieben. Wir löschen dann aus "Characters" den Wert FF und 00 raus. Gehen bei String Terminator rein, rechte Maustaste -> Add Item. Mit F2 kannst du es bearbeiten und machst dort noch kein 00 steht und bei CLRF Codes das gleiche, und dort machst du F2 und trägst FF ein.



    Soweit sogut,


    Geh unten auf List1 und rechte Maustaste, Add Item.


    Stells so ein.


    Klick auf List 1 mit rechter MT und drück auf "Add Pointers". Gib das ein: h001a8FE


    Das hier sollte bei rauskommen:




    Da die Pointer nicht alle hintereinander stehen, hast du ein wenig fleißarbeit vor dir. Geh zu jedem Dialog nach einem <5D><00> und drücke auf den ersten Byte danach, das ist in der Regen 05 auf "P". So bekommst du alle Pointer raus, dann einfach die Adresse die gefunden wird, genau wie oben in dem Format bei Add Pointers eintragen.


    Gruß


    red

  • Ich danke dir Red, mal eine Frage bei Kruptar der Punkt ptReference da muss ja der Wert eingetragen werden an welcher Position sich der Text befindet in diesem Fall wäre es ja 1AB20 und dann dementsprechend unter den Punkt ADD P. die Adresse eingeben komischerweise muss ich bei mir h0018AFD eingeben.


    Das ist die Tabelle zwar noch nicht perfekt aber zumindest ein Anfang



    Hier habe ich die ptReference eingetragen wo der Text enthalten ist. (GOOD JOB...)



    und bei dem letzten Bild so sieht es bei mir aus und habe h001A8FD eingetragen, weil er erst dort komischerweise den Text anzeigt.



    Vielleicht hat sich irgendwo ein Fehler eingeschlichen oder habe ein Byte zu viel entfernt...


    Ich muss also die Pointer für alle Dialoge einzeln zuordnen so wie es aussieht , dass wird ein Spaß werden, aber gut dadurch lernt man auch mit den Programmen um zugehen.

  • Nein, bei Pt Reference bei List 1 kommt die Adresse rein, wo der Pointer im Block sich befindet. In unserem Fall 10000. Als du die 200bytes weggemacht hattest, standen da meist 0 drin? Nicht das wir jetzt vom ROM was weggemacht haben ;)


    Das würde erklären wieso wir auf einmal 200 bytes weiter oben landen.


    Gruß


    red

  • Ich hatte als ich den Hexeditor geöffnet habe und die ROM geladen habe auch den Bereich am Anfang wo werte waren diese auch mit gelöscht ^^ ich glaube Mittlerweile das ich diese hätte lassen müssen...


    Das was markiert ist hatte ich alles gelöscht vermute mal das war ein wenig zu viel....:D


    Wo kann ich denn eigentlich sehen das ich die 200 Byte gelöscht habe bzw. wo zählt er es denn?

    Ich hatte mich nämlich orientiert an die Länge wo 200 steht unten bei dem Hexeditor und dann es sofort gelöscht.



    Ich vermute mal, dass das 200 Byte entsprechen müsste bin mir aber nicht 100% sicher.

  • Ich habe das Programm benutzt und dann sieht die Rom dementsprechend so aus



    Ich hoffe das ist so richtig, was das Programm gemacht hat?


    Aber Komischerweise scheint es das selbe Problem zu sein ich bin dann zu den ersten Punkt gegangen und habe dann Taste P gedrückt um den Pointer zu sehen er mir mehrere P an nehme dann den ersten das ist 1a8c0 und muss dann selber zu den Punkt hin 1a8fe hin ich gehe mal davon aus das ich dann noch die Differenz bestimmen muss?



    Ich weiß nicht woran es liegt bzw. vielleicht ist auch alles richtig nur das ich mich so Doof anstelle aber es ist schon merkwürdig

    Nein, bei Pt Reference bei List 1 kommt die Adresse rein, wo der Pointer im Block sich befindet. In unserem Fall 10000. Als du die 200bytes weggemacht hattest, standen da meist 0 drin? Nicht das wir jetzt vom ROM was weggemacht haben ;)


    Das würde erklären wieso wir auf einmal 200 bytes weiter oben landen.

    Es ist komisch wenn ich unter PtREference 10000 zehntausend eingebe und dann unter addPointer und dann h001a8fe dann zeigt er leider kein Text irgendwo muss ein Fehler sein schon Komisch.


    Sorry für diese schwierige Angelegenheit!

  • Ich glaube das ich das Problem gefunden habe.


    Ich hatte in Kruptar noch die Verknüpfung zur alten ROM gehabt wo noch der Header enthalten gewesen ist.

    Jetzt zeigt er es richtig an auch wenn bei PtReference 10000 steht, na Mensch endlich geschafft....


    Ich danke dir Red für deine Unterstützung und Hilfestellung! :)