Closed Bhaloc closed 7 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.
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))
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.
@Bhaloc @Nihlo @Darktobas
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
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. :)
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.
Super :)
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...
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.
Kampagne ist vollständig übersetzt. Über folgenden Link kannst du sie abrufen: https://github.com/Darktobas/HoMM3-German/blob/master/H4Fact_german.h3c
Dankeschön für die Mühe. Habe sie hinzugefügt. :)
Hello there, i just want to say that this awesome Translation needs an update. Iwould love to help,but how?