heroesiiifan / HoMM3-German

Deutsche Übersetzung zu HoMM3 (VCMI, HD mod und HotA)
11 stars 2 forks source link

HotA 1.7.0 Update #6

Closed Bhaloc closed 7 months ago

Bhaloc commented 8 months ago

Hello there, i just want to say that this awesome Translation needs an update. Iwould love to help,but how?

heroesiiifan commented 8 months ago

Hey,

would be great. But the biggest Problem with the new HotA-Version is that they used a new .dat format. HotA editor.exe isn't working anymore. Until we found a solution for this we're only able to translate the new maps and campaigns.

heroesiiifan commented 8 months ago

Update: I was able to replace the tool with a python script. This script can also read the "new" format. And convert it to json and back.

new_dat.json old_dat.json old_dat_ger.json

I think in the next days I can proceed.

import struct
import json

def extractDat(filename, encoding="cp1252"):
    fh = open(filename, "rb")

    data = []

    assert struct.unpack("4s", fh.read(4))[0] == b'HDAT'
    assert struct.unpack("i", fh.read(4))[0] == 2

    count = struct.unpack("i", fh.read(4))[0]

    for _ in range(count):
        tmp = {}
        strlen = struct.unpack("i", fh.read(4))[0]
        tmp["name"] = struct.unpack(str(strlen) + "s", fh.read(strlen))[0].decode(encoding)
        strlen = struct.unpack("i", fh.read(4))[0]
        tmp["foldername"] = struct.unpack(str(strlen) + "s", fh.read(strlen))[0].decode(encoding)
        assert struct.unpack("i", fh.read(4))[0] == 9
        tmp["data"] = {}
        for i in range(9):
            strlen = struct.unpack("i", fh.read(4))[0]
            tmp["data"][i] = struct.unpack(str(strlen) + "s", fh.read(strlen))[0].decode(encoding)
        if struct.unpack("?", fh.read(1))[0] == True:
            strlen = struct.unpack("i", fh.read(4))[0]
            tmp["data"][9] = ''.join(struct.pack("B", x).hex() for x in struct.unpack(str(strlen) + "s", fh.read(strlen))[0])
        strlen = struct.unpack("i", fh.read(4))[0]
        tmp["data"][10] = [struct.unpack("i", fh.read(4))[0] for _ in range(strlen)]

        data.append(tmp)

    return data

dat = json.dumps(extractDat("old.dat"), indent=2)
print(dat)
dat = json.dumps(extractDat("new.dat"), indent=2)
print(dat)
import struct
import json

def createDat(filename, data, encoding="cp1252"):
    fh = open(filename, "wb")

    fh.write(struct.pack("4s", b'HDAT'))
    fh.write(struct.pack("i", 2))
    fh.write(struct.pack("i", len(data)))

    for i in range(len(data)):
        fh.write(struct.pack("i", len(data[i]["name"])))
        fh.write(struct.pack(str(len(data[i]["name"])) + "s", str(data[i]["name"]).encode(encoding)))
        fh.write(struct.pack("i", len(data[i]["foldername"])))
        fh.write(struct.pack(str(len(data[i]["foldername"])) + "s", str(data[i]["foldername"]).encode(encoding)))
        fh.write(struct.pack("i", 9))
        for j in range(9):
            fh.write(struct.pack("i", len(data[i]["data"][str(j)])))
            fh.write(struct.pack(str(len(data[i]["data"][str(j)])) + "s", str(data[i]["data"][str(j)]).encode(encoding)))
        fh.write(struct.pack("?", "9" in data[i]["data"]))
        if "9" in data[i]["data"]:
            tmp = bytes.fromhex(data[i]["data"]["9"])
            fh.write(struct.pack("i", len(tmp)))
            fh.write(struct.pack(str(len(tmp)) + "s", tmp))
        fh.write(struct.pack("i", len(data[i]["data"]["10"])))
        for j in range(len(data[i]["data"]["10"])):
            fh.write(struct.pack("i", data[i]["data"]["10"][j]))

createDat("new_edit.dat", json.loads(dat))
heroesiiifan commented 8 months ago

Technisch passt nun alles. Ich brauche aber Unterstützung.

Zu übersetzen wären: https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/0401.translated https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/0402.translated https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/0403.translated https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/0404.translated https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/0405.translated https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/0406.translated https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/0407.translated https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/0408.translated https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/campaign/txt/H4Fact.translated

Einfach mit einem Texteditor (am besten Notepad++) bearbeiten. Als Kodierung ANSI auswählen. Teilweise wurde auch russischer Text vergessen zu übersetzen. Den kann man mit der kodierung "Windows-1251" sichtbar machen (und ihn z.B. mit DeepL übersetzen). Nur Nachricht und Text übersetzen - Name im englischen belassen.

Des weiteren fehlt bei https://github.com/heroesiiifan/HoMM3-German/blob/master/additional_files/hota/dat_translation/german.json noch einiges.

heroesiiifan commented 8 months ago

@Bhaloc @Nihlo @Darktobas

Darktobas commented 8 months ago

Ich bin dabei. Ich würde mich aber direkt an der Kampagne vergreifen und diese direkt übersetzen, wenn es ok ist. Endlich steht der Kampagnen-Editor zur Verfügung. Es sei denn, es spricht was dagegen

heroesiiifan commented 8 months ago

Ich bin dabei. Ich würde mich aber direkt an der Kampagne vergreifen und diese direkt übersetzen, wenn es ok ist. Endlich steht der Kampagnen-Editor zur Verfügung. Es sei denn, es spricht was dagegen

Super. Ja, klar - gerne. :)

Darktobas commented 8 months ago

Ich bin dabei. Ich würde mich aber direkt an der Kampagne vergreifen und diese direkt übersetzen, wenn es ok ist. Endlich steht der Kampagnen-Editor zur Verfügung. Es sei denn, es spricht was dagegen

Super. Ja, klar - gerne. :)

Kleiner Zwischenstand: Die ersten 3 Karten sind fertig.

heroesiiifan commented 8 months ago

Super :)

heroesiiifan commented 7 months ago

Die neuen Texte von HotA selber sind nun auch übersetzt. Vielleicht nicht ganz optimal (habe z.T. mit Übersetzungstools gearbeitet). Aber man kann ja später noch verbessern...

Darktobas commented 7 months ago

So, aktuell bin ich mit 1-3 und 5 durch. Karte 4 ist mit den ganzen Abenteuerobjekten ein Alptraum, aber ich zieh durch... Mit dem Kampagnen-Editor hatte ich auch zu kämpfen. Dieser unterstützt keine Umlaute (ä, ö, ü und ß). Aber mit dem Kampagnen Tool kriege ich auch das hin. Die Chronicles kann man nun mit den richtigen Portraits auch anpassen, da habe ich mal was getestet. Dass kommt danach. Zu verbessern gibt es immer etwas, das stimmt. Ich arbeite auch mit Deepl und (muss) will das alles Korrekturlesen und anpassen.

Darktobas commented 7 months ago

Kampagne ist vollständig übersetzt. Über folgenden Link kannst du sie abrufen: https://github.com/Darktobas/HoMM3-German/blob/master/H4Fact_german.h3c

heroesiiifan commented 7 months ago

Dankeschön für die Mühe. Habe sie hinzugefügt. :)