This repository was archived by the owner on May 21, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest.go
74 lines (59 loc) · 1.53 KB
/
test.go
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import (
"./homm2"
"./serializers"
"encoding/hex"
"fmt"
"github.com/kr/pretty"
"golang.org/x/text/encoding/charmap"
"io/ioutil"
"log"
)
func decode(in string) string {
dst := make([]byte, 4*len(in))
ndst, _, err := charmap.Windows1251.NewDecoder().Transform(dst, []byte(in), true)
if err != nil {
log.Fatal(err)
}
return string(dst[:ndst])
}
func main() {
data, err := ioutil.ReadFile("maps/Map_0001.MP2")
if err != nil {
log.Fatal(err)
}
reader := serializers.NewByteReader(data)
m := &homm2.Map{}
m.Serialize(reader)
// fmt.Printf("%# v\n", m.Map)
fmt.Printf("Bytes left: %d\n", len(data)-reader.Pos())
writer := serializers.NewByteWriter()
m.Serialize(writer)
savedData := writer.Data()
if err := ioutil.WriteFile("maps/TestMap.MP2", savedData, 0644); err != nil {
log.Fatal(err)
}
fmt.Printf("Original length = %d, saved length = %d\n", reader.Pos(), len(savedData))
f := len(data)
if len(savedData) < f {
f = len(savedData)
}
for i := 0; i < f; i++ {
if data[i] != savedData[i] {
fmt.Printf("Diff at pos %d\n", i)
fmt.Println(hex.Dump(data[i-10 : i+100]))
fmt.Println(hex.Dump(savedData[i-10 : i+100]))
break
}
}
for _, rumor := range m.Rumors() {
fmt.Printf("Rumor\n%#v\n\n", decode(rumor.Text))
}
for _, event := range m.Events() {
fmt.Printf("Event\n%#v\n\n", decode(event.Text))
}
for _, obj := range m.MapObjects() {
fmt.Printf("%# v\n\n", pretty.Formatter(obj))
}
fmt.Printf("Name = %s\nDescription = %s\n", decode(m.NameStr()), decode(m.DescriptionStr()))
}