diff --git a/cmd/txttocode/config.go b/cmd/txttocode/config.go index 4b32148..94718bc 100644 --- a/cmd/txttocode/config.go +++ b/cmd/txttocode/config.go @@ -26,6 +26,11 @@ var textFiles = []TextFileDesc{ DestFile: "pkg/data/object/objects.go", Template: templateObjects, }, + { + SourceFile: "cmd/txttocode/txt/lvlwarp.txt", + DestFile: "pkg/data/entrance/entrances.go", + Template: templateEntrances, + }, } type TextFileDesc struct { diff --git a/cmd/txttocode/templates.go b/cmd/txttocode/templates.go index 0d9c2b5..586ddcb 100644 --- a/cmd/txttocode/templates.go +++ b/cmd/txttocode/templates.go @@ -70,3 +70,13 @@ var Desc = map[int]Description{ {{ index $value "*ID" }}: {Name: "{{ $value.Name }}", ID: {{ index $value "*ID" }}, SizeX: {{ $value.SizeX }}, SizeY: {{ $value.SizeY }}, Left: {{ $value.Left }}, Top: {{ $value.Top }}, Width: {{ $value.Width }}, Height: {{ $value.Height }}, Yoffset: {{ $value.Yoffset }}, Xoffset: {{ $value.Xoffset }}, HasCollision: {{ if eq $value.HasCollision0 "1" }}true{{ else }}false{{ end }}}, {{- end }} }` + +const templateEntrances = `// Code generated by cmd/txttocode. DO NOT EDIT. +// source: cmd/txttocode/txt/lvlwarp.txt +package entrance + +var Desc = map[int]Description{ +{{- range $key, $value := . }} + {{ $value.UniqueId }}: {ID: {{ $value.UniqueId }}, Name: "{{ $value.Name }}", SelectX: {{ $value.SelectX }}, SelectY: {{ $value.SelectY }}, SelectDX: {{ $value.SelectDX }}, SelectDY: {{ $value.SelectDY }}, OffsetX: {{ $value.OffsetX }}, OffsetY: {{ $value.OffsetY }}, Direction: "{{ $value.Direction }}"}, +{{- end }} +}` diff --git a/cmd/txttocode/txt/lvlwarp.txt b/cmd/txttocode/txt/lvlwarp.txt new file mode 100644 index 0000000..43c370a --- /dev/null +++ b/cmd/txttocode/txt/lvlwarp.txt @@ -0,0 +1,90 @@ +Name Id SelectX SelectY SelectDX SelectDY ExitWalkX ExitWalkY OffsetX OffsetY LitVersion Tiles NoInteract Direction UniqueId +Act 1 Wilderness to Cave Cliff L 0 -90 -100 90 110 5 0 1 -1 1 2 0 b 0 +Act 1 Wilderness to Cave Cliff R 1 -15 -90 90 110 0 5 3 1 1 2 0 b 1 +Act 1 Wilderness to Cave Floor L 2 -60 -60 85 100 5 0 -1 1 1 2 0 b 2 +Act 1 Wilderness to Cave Floor R 3 -25 -60 85 100 0 5 1 -1 1 2 0 b 3 +Act 1 Cave Up 4 -30 -120 120 150 3 5 2 5 1 2 0 b 4 +Act 1 Cave Down 5 -25 -75 80 100 3 5 1 3 1 2 0 b 5 +Act 1 Graveyard to Crypt 1 6 -90 -110 110 140 5 0 5 0 0 2 0 b 6 +Act 1 Graveyard to Crypt 2 7 -70 -90 90 120 5 0 5 2 0 2 0 b 7 +Act 1 Crypt Up 8 -10 -90 60 110 0 5 5 1 1 2 0 b 8 +Act 1 Crypt Down 9 -30 -90 60 110 5 0 1 1 1 2 0 b 9 +Act 1 Wilderness to Tower 10 -10 -50 150 80 3 5 -4 0 1 2 0 b 10 +Act 1 Tower to Wilderness 11 -50 -130 60 140 5 3 4 -2 0 2 0 b 11 +Act 1 Tower to Crypt 12 -50 -90 80 110 5 0 2 3 1 2 0 b 12 +Act 1 Jail Up 13 -50 -110 110 150 0 5 5 1 1 2 0 b 13 +Act 1 Jail Down 14 -40 -80 210 110 0 5 -1 3 1 2 0 b 14 +Act 1 Cathedral To Catacombs 15 -30 -110 85 130 0 5 3 1 1 2 0 b 15 +Act 1 Catacombs to Cathedral 16 -35 -130 90 150 0 5 7 1 1 2 0 b 16 +Act 1 Catacombs Up 17 -50 -110 110 150 0 5 5 1 1 2 0 b 17 +Act 1 Catacombs Down 18 -60 -80 210 110 0 5 -1 3 1 2 0 b 18 +Act 2 Town to Sewer Trap 19 -10 -10 0 0 5 5 0 0 0 2 1 b 19 +Act 2 Town to Sewer Dock 20 -25 -95 70 130 5 0 -2 0 0 2 0 b 20 +Act 2 Sewer Dock to Town 21 20 -80 65 140 -5 0 10 -2 0 2 0 b 21 +Act 2 Sewer Up 22 -25 -160 100 180 2 5 5 3 1 2 0 b 22 +Act 2 Sewer Down 23 -65 -55 150 110 0 -5 0 0 1 2 0 b 23 +Act 2 Town to Harem 24 -120 -20 150 130 5 0 5 2 0 2 0 b 24 +Act 2 Harem to Town 25 -35 -70 95 130 5 2 0 -2 0 2 0 b 25 +Act 2 Harem Up 1 26 -25 -150 80 180 0 5 4 0 1 2 0 b 26 +Act 2 Harem Up 2 27 -40 -160 80 180 5 0 0 5 1 2 0 b 27 +Act 2 Harem Down 1 28 -20 -40 170 100 -5 5 -3 1 1 2 0 b 28 +Act 2 Harem Down 2 29 -50 -20 160 85 -5 0 -1 -3 1 2 0 b 29 +Act 2 Basement Up 1 30 -25 -100 60 125 0 5 2 0 1 2 0 b 30 +Act 2 Basement Up 2 31 -40 -100 60 125 5 0 0 2 1 2 0 b 31 +Act 2 Basement Down 32 -30 -30 170 90 -5 5 -3 0 1 2 0 b 32 +Act 2 Desert to Tomb L 1 33 -70 -140 80 160 5 0 1 1 0 2 0 b 33 +Act 2 Desert to Tomb L 2 34 -50 -120 90 150 5 0 1 1 0 2 0 b 34 +Act 2 Desert to Tomb R 1 35 -30 -140 80 160 0 5 6 2 0 2 0 b 35 +Act 2 Desert to Tomb R 2 36 0 -140 100 150 0 5 1 2 0 2 0 b 36 +Act 2 Desert to Tomb Viper 37 -30 -140 80 160 0 5 4 1 0 2 0 b 37 +Act 2 Desert to Tomb Tal 1 38 -40 -190 90 210 5 5 0 0 0 2 0 b 38 +Act 2 Desert to Tomb Tal 2 39 -40 -210 50 230 5 0 -1 1 0 2 0 b 39 +Act 2 Desert to Tomb Tal 3 40 -30 -100 60 140 5 0 0 1 0 2 0 b 40 +Act 2 Desert to Tomb Tal 4 41 -90 -140 70 160 5 0 -1 -5 0 2 0 b 41 +Act 2 Desert to Tomb Tal 5 42 -10 -110 60 150 0 5 -2 -3 0 2 0 b 42 +Act 2 Desert to Tomb Tal 6 43 0 -130 90 150 0 5 -1 0 0 2 0 b 43 +Act 2 Desert to Tomb Tal 7 44 -10 -210 70 240 0 5 0 -3 0 2 0 b 44 +Act 2 Tomb Up 45 -30 -115 75 145 0 5 2 0 1 2 0 b 45 +Act 2 Tomb Down 46 -45 -120 85 145 5 0 0 2 1 2 0 b 46 +Act 2 Desert to Lair 47 -10 -60 90 90 5 5 -2 2 1 2 0 b 47 +Act 2 Lair Up 48 -20 -70 80 85 0 5 1 0 1 2 0 b 48 +Act 2 Lair Down 49 -115 -10 160 70 0 -5 -3 -5 1 2 0 b 49 +Act 2 Desert to Sewer Trap 50 -10 -10 0 0 5 5 0 0 0 2 1 b 50 +Act 3 Jungle to Spider 51 -60 -70 70 90 5 0 0 1 0 2 0 b 51 +Act 3 Spider to Jungle 52 10 -100 80 110 0 5 4 1 1 2 0 b 52 +Act 3 Jungle to Dungeon Fort 53 -15 -70 70 110 0 5 0 0 0 2 0 b 53 +Act 3 Jungle to Dungeon Hole 54 -130 -10 170 100 0 -5 -4 -6 0 2 0 b 54 +Act 3 Dungeon Up 55 -10 -100 90 130 0 5 3 1 1 2 0 b 55 +Act 3 Dungeon Down 56 -40 -20 170 100 -5 0 -4 -1 1 2 0 b 56 +Act 3 Kurast to Sewer 57 -60 -40 120 90 0 5 0 0 1 2 0 b 57 +Act 3 Sewer Up L 58 -75 -110 100 150 5 0 1 1 1 2 0 b 58 +Act 3 Sewer Up R 59 -25 -110 100 150 0 5 6 1 1 2 0 b 59 +Act 3 Sewer Down 60 -10 -10 0 0 5 5 0 0 0 2 1 b 60 +Act 3 Kurast to Temple 61 -10 -10 0 0 5 5 0 0 0 2 1 b 61 +Act 3 Temple Up L 62 -50 -110 80 140 5 0 1 2 1 2 0 b 62 +Act 3 Temple Up R 63 -30 -110 80 140 0 5 2 1 1 2 0 b 63 +Act 3 Travincal to Mephisto 64 -10 -10 0 0 5 5 0 0 0 2 1 b 64 +Act 3 Mephisto Up L 65 -65 -150 125 180 5 0 1 0 1 2 0 b 65 +Act 3 Mephisto Up R 66 -60 -150 125 180 0 5 5 1 1 2 0 b 66 +Act 3 Mephisto Down L 67 -65 -150 125 180 5 0 1 0 1 2 0 b 67 +Act 3 Mephisto Down R 68 -60 -150 125 180 0 5 5 1 1 2 0 b 68 +Act 4 Mesa to Lava 69 -60 -40 150 160 -5 0 2 2 0 2 0 b 69 +Act 4 Lava to Mesa 70 -90 -50 160 120 5 2 0 0 0 2 0 b 70 +Expansion +Act 5 Barricade Down Wall L 71 -70 -80 80 100 5 2 2 6 1 4 0 l 71 +Act 5 Barricade Down Wall R 71 -15 -90 70 100 -1 5 6 2 1 4 0 r 72 +Act 5 Barricade Down Floor 72 -20 -120 75 100 5 2 2 2 1 4 0 b 73 +Act 5 Ice Caves Up L 73 -60 -110 90 115 5 2 0 5 1 2 0 l 74 +Act 5 Ice Caves Up R 73 -10 -120 100 120 2 5 5 1 1 2 0 r 75 +Act 5 Ice Caves Down L 74 -60 -110 90 115 5 2 0 5 1 2 0 l 76 +Act 5 Ice Caves Down R 74 -20 -110 90 115 2 5 4 0 1 2 0 r 77 +Act 5 Ice Caves Down Floor 75 -5 -110 80 110 2 5 6 3 1 2 0 b 78 +Act 5 Temple Entrance 76 0 -110 95 100 2 5 2 0 1 2 0 b 79 +Act 5 Temple Down 77 0 -70 140 80 5 2 -2 3 1 2 0 b 80 +Act 5 Temple Up 78 -20 -110 100 110 5 2 3 0 1 2 0 b 81 +Act 5 Mountain Top To Ice 79 -40 -110 0 0 2 5 2 1 0 2 1 b 82 +Act 5 Mountain Top To Baal 80 -20 -110 0 0 2 5 2 1 0 2 1 b 83 +Act 5 Baal Temple Up L 81 -70 -110 95 115 5 2 1 4 1 2 0 l 84 +Act 5 Baal Temple Up R 81 -20 -110 80 115 2 5 4 1 1 2 0 r 85 +Act 5 Baal Temple Down L 82 -70 -110 95 115 5 2 1 4 1 2 0 l 86 +Act 5 Baal Temple Down R 82 -20 -110 80 115 2 5 4 1 1 2 0 r 87 diff --git a/pkg/data/data.go b/pkg/data/data.go index a87e8bb..2028c87 100644 --- a/pkg/data/data.go +++ b/pkg/data/data.go @@ -35,6 +35,7 @@ type Data struct { NPCs NPCs Inventory Inventory Objects Objects + Entrances Entrances AdjacentLevels []Level Rooms []Room OpenMenus OpenMenus diff --git a/pkg/data/entrance/description.go b/pkg/data/entrance/description.go new file mode 100644 index 0000000..bfcdda6 --- /dev/null +++ b/pkg/data/entrance/description.go @@ -0,0 +1,13 @@ +package entrance + +type Description struct { + ID int + Name string + SelectX int + SelectY int + SelectDX int + SelectDY int + OffsetX int + OffsetY int + Direction string +} diff --git a/pkg/data/entrance/entrances.go b/pkg/data/entrance/entrances.go new file mode 100644 index 0000000..7051ef6 --- /dev/null +++ b/pkg/data/entrance/entrances.go @@ -0,0 +1,94 @@ +// Code generated by cmd/txttocode. DO NOT EDIT. +// source: cmd/txttocode/txt/lvlwarp.txt +package entrance + +var Desc = map[int]Description{ + 0: {ID: 0, Name: "Act 1 Wilderness to Cave Cliff L", SelectX: -90, SelectY: -100, SelectDX: 90, SelectDY: 110, OffsetX: 1, OffsetY: -1, Direction: "b"}, + 1: {ID: 1, Name: "Act 1 Wilderness to Cave Cliff R", SelectX: -15, SelectY: -90, SelectDX: 90, SelectDY: 110, OffsetX: 3, OffsetY: 1, Direction: "b"}, + 2: {ID: 2, Name: "Act 1 Wilderness to Cave Floor L", SelectX: -60, SelectY: -60, SelectDX: 85, SelectDY: 100, OffsetX: -1, OffsetY: 1, Direction: "b"}, + 3: {ID: 3, Name: "Act 1 Wilderness to Cave Floor R", SelectX: -25, SelectY: -60, SelectDX: 85, SelectDY: 100, OffsetX: 1, OffsetY: -1, Direction: "b"}, + 4: {ID: 4, Name: "Act 1 Cave Up", SelectX: -30, SelectY: -120, SelectDX: 120, SelectDY: 150, OffsetX: 2, OffsetY: 5, Direction: "b"}, + 5: {ID: 5, Name: "Act 1 Cave Down", SelectX: -25, SelectY: -75, SelectDX: 80, SelectDY: 100, OffsetX: 1, OffsetY: 3, Direction: "b"}, + 6: {ID: 6, Name: "Act 1 Graveyard to Crypt 1", SelectX: -90, SelectY: -110, SelectDX: 110, SelectDY: 140, OffsetX: 5, OffsetY: 0, Direction: "b"}, + 7: {ID: 7, Name: "Act 1 Graveyard to Crypt 2", SelectX: -70, SelectY: -90, SelectDX: 90, SelectDY: 120, OffsetX: 5, OffsetY: 2, Direction: "b"}, + 8: {ID: 8, Name: "Act 1 Crypt Up", SelectX: -10, SelectY: -90, SelectDX: 60, SelectDY: 110, OffsetX: 5, OffsetY: 1, Direction: "b"}, + 9: {ID: 9, Name: "Act 1 Crypt Down", SelectX: -30, SelectY: -90, SelectDX: 60, SelectDY: 110, OffsetX: 1, OffsetY: 1, Direction: "b"}, + 10: {ID: 10, Name: "Act 1 Wilderness to Tower", SelectX: -10, SelectY: -50, SelectDX: 150, SelectDY: 80, OffsetX: -4, OffsetY: 0, Direction: "b"}, + 11: {ID: 11, Name: "Act 1 Tower to Wilderness", SelectX: -50, SelectY: -130, SelectDX: 60, SelectDY: 140, OffsetX: 4, OffsetY: -2, Direction: "b"}, + 12: {ID: 12, Name: "Act 1 Tower to Crypt", SelectX: -50, SelectY: -90, SelectDX: 80, SelectDY: 110, OffsetX: 2, OffsetY: 3, Direction: "b"}, + 13: {ID: 13, Name: "Act 1 Jail Up", SelectX: -50, SelectY: -110, SelectDX: 110, SelectDY: 150, OffsetX: 5, OffsetY: 1, Direction: "b"}, + 14: {ID: 14, Name: "Act 1 Jail Down", SelectX: -40, SelectY: -80, SelectDX: 210, SelectDY: 110, OffsetX: -1, OffsetY: 3, Direction: "b"}, + 15: {ID: 15, Name: "Act 1 Cathedral To Catacombs", SelectX: -30, SelectY: -110, SelectDX: 85, SelectDY: 130, OffsetX: 3, OffsetY: 1, Direction: "b"}, + 16: {ID: 16, Name: "Act 1 Catacombs to Cathedral", SelectX: -35, SelectY: -130, SelectDX: 90, SelectDY: 150, OffsetX: 7, OffsetY: 1, Direction: "b"}, + 17: {ID: 17, Name: "Act 1 Catacombs Up", SelectX: -50, SelectY: -110, SelectDX: 110, SelectDY: 150, OffsetX: 5, OffsetY: 1, Direction: "b"}, + 18: {ID: 18, Name: "Act 1 Catacombs Down", SelectX: -60, SelectY: -80, SelectDX: 210, SelectDY: 110, OffsetX: -1, OffsetY: 3, Direction: "b"}, + 19: {ID: 19, Name: "Act 2 Town to Sewer Trap", SelectX: -10, SelectY: -10, SelectDX: 0, SelectDY: 0, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 20: {ID: 20, Name: "Act 2 Town to Sewer Dock", SelectX: -25, SelectY: -95, SelectDX: 70, SelectDY: 130, OffsetX: -2, OffsetY: 0, Direction: "b"}, + 21: {ID: 21, Name: "Act 2 Sewer Dock to Town", SelectX: 20, SelectY: -80, SelectDX: 65, SelectDY: 140, OffsetX: 10, OffsetY: -2, Direction: "b"}, + 22: {ID: 22, Name: "Act 2 Sewer Up", SelectX: -25, SelectY: -160, SelectDX: 100, SelectDY: 180, OffsetX: 5, OffsetY: 3, Direction: "b"}, + 23: {ID: 23, Name: "Act 2 Sewer Down", SelectX: -65, SelectY: -55, SelectDX: 150, SelectDY: 110, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 24: {ID: 24, Name: "Act 2 Town to Harem", SelectX: -120, SelectY: -20, SelectDX: 150, SelectDY: 130, OffsetX: 5, OffsetY: 2, Direction: "b"}, + 25: {ID: 25, Name: "Act 2 Harem to Town", SelectX: -35, SelectY: -70, SelectDX: 95, SelectDY: 130, OffsetX: 0, OffsetY: -2, Direction: "b"}, + 26: {ID: 26, Name: "Act 2 Harem Up 1", SelectX: -25, SelectY: -150, SelectDX: 80, SelectDY: 180, OffsetX: 4, OffsetY: 0, Direction: "b"}, + 27: {ID: 27, Name: "Act 2 Harem Up 2", SelectX: -40, SelectY: -160, SelectDX: 80, SelectDY: 180, OffsetX: 0, OffsetY: 5, Direction: "b"}, + 28: {ID: 28, Name: "Act 2 Harem Down 1", SelectX: -20, SelectY: -40, SelectDX: 170, SelectDY: 100, OffsetX: -3, OffsetY: 1, Direction: "b"}, + 29: {ID: 29, Name: "Act 2 Harem Down 2", SelectX: -50, SelectY: -20, SelectDX: 160, SelectDY: 85, OffsetX: -1, OffsetY: -3, Direction: "b"}, + 30: {ID: 30, Name: "Act 2 Basement Up 1", SelectX: -25, SelectY: -100, SelectDX: 60, SelectDY: 125, OffsetX: 2, OffsetY: 0, Direction: "b"}, + 31: {ID: 31, Name: "Act 2 Basement Up 2", SelectX: -40, SelectY: -100, SelectDX: 60, SelectDY: 125, OffsetX: 0, OffsetY: 2, Direction: "b"}, + 32: {ID: 32, Name: "Act 2 Basement Down", SelectX: -30, SelectY: -30, SelectDX: 170, SelectDY: 90, OffsetX: -3, OffsetY: 0, Direction: "b"}, + 33: {ID: 33, Name: "Act 2 Desert to Tomb L 1", SelectX: -70, SelectY: -140, SelectDX: 80, SelectDY: 160, OffsetX: 1, OffsetY: 1, Direction: "b"}, + 34: {ID: 34, Name: "Act 2 Desert to Tomb L 2", SelectX: -50, SelectY: -120, SelectDX: 90, SelectDY: 150, OffsetX: 1, OffsetY: 1, Direction: "b"}, + 35: {ID: 35, Name: "Act 2 Desert to Tomb R 1", SelectX: -30, SelectY: -140, SelectDX: 80, SelectDY: 160, OffsetX: 6, OffsetY: 2, Direction: "b"}, + 36: {ID: 36, Name: "Act 2 Desert to Tomb R 2", SelectX: 0, SelectY: -140, SelectDX: 100, SelectDY: 150, OffsetX: 1, OffsetY: 2, Direction: "b"}, + 37: {ID: 37, Name: "Act 2 Desert to Tomb Viper", SelectX: -30, SelectY: -140, SelectDX: 80, SelectDY: 160, OffsetX: 4, OffsetY: 1, Direction: "b"}, + 38: {ID: 38, Name: "Act 2 Desert to Tomb Tal 1", SelectX: -40, SelectY: -190, SelectDX: 90, SelectDY: 210, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 39: {ID: 39, Name: "Act 2 Desert to Tomb Tal 2", SelectX: -40, SelectY: -210, SelectDX: 50, SelectDY: 230, OffsetX: -1, OffsetY: 1, Direction: "b"}, + 40: {ID: 40, Name: "Act 2 Desert to Tomb Tal 3", SelectX: -30, SelectY: -100, SelectDX: 60, SelectDY: 140, OffsetX: 0, OffsetY: 1, Direction: "b"}, + 41: {ID: 41, Name: "Act 2 Desert to Tomb Tal 4", SelectX: -90, SelectY: -140, SelectDX: 70, SelectDY: 160, OffsetX: -1, OffsetY: -5, Direction: "b"}, + 42: {ID: 42, Name: "Act 2 Desert to Tomb Tal 5", SelectX: -10, SelectY: -110, SelectDX: 60, SelectDY: 150, OffsetX: -2, OffsetY: -3, Direction: "b"}, + 43: {ID: 43, Name: "Act 2 Desert to Tomb Tal 6", SelectX: 0, SelectY: -130, SelectDX: 90, SelectDY: 150, OffsetX: -1, OffsetY: 0, Direction: "b"}, + 44: {ID: 44, Name: "Act 2 Desert to Tomb Tal 7", SelectX: -10, SelectY: -210, SelectDX: 70, SelectDY: 240, OffsetX: 0, OffsetY: -3, Direction: "b"}, + 45: {ID: 45, Name: "Act 2 Tomb Up", SelectX: -30, SelectY: -115, SelectDX: 75, SelectDY: 145, OffsetX: 2, OffsetY: 0, Direction: "b"}, + 46: {ID: 46, Name: "Act 2 Tomb Down", SelectX: -45, SelectY: -120, SelectDX: 85, SelectDY: 145, OffsetX: 0, OffsetY: 2, Direction: "b"}, + 47: {ID: 47, Name: "Act 2 Desert to Lair", SelectX: -10, SelectY: -60, SelectDX: 90, SelectDY: 90, OffsetX: -2, OffsetY: 2, Direction: "b"}, + 48: {ID: 48, Name: "Act 2 Lair Up", SelectX: -20, SelectY: -70, SelectDX: 80, SelectDY: 85, OffsetX: 1, OffsetY: 0, Direction: "b"}, + 49: {ID: 49, Name: "Act 2 Lair Down", SelectX: -115, SelectY: -10, SelectDX: 160, SelectDY: 70, OffsetX: -3, OffsetY: -5, Direction: "b"}, + 50: {ID: 50, Name: "Act 2 Desert to Sewer Trap", SelectX: -10, SelectY: -10, SelectDX: 0, SelectDY: 0, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 51: {ID: 51, Name: "Act 3 Jungle to Spider", SelectX: -60, SelectY: -70, SelectDX: 70, SelectDY: 90, OffsetX: 0, OffsetY: 1, Direction: "b"}, + 52: {ID: 52, Name: "Act 3 Spider to Jungle", SelectX: 10, SelectY: -100, SelectDX: 80, SelectDY: 110, OffsetX: 4, OffsetY: 1, Direction: "b"}, + 53: {ID: 53, Name: "Act 3 Jungle to Dungeon Fort", SelectX: -15, SelectY: -70, SelectDX: 70, SelectDY: 110, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 54: {ID: 54, Name: "Act 3 Jungle to Dungeon Hole", SelectX: -130, SelectY: -10, SelectDX: 170, SelectDY: 100, OffsetX: -4, OffsetY: -6, Direction: "b"}, + 55: {ID: 55, Name: "Act 3 Dungeon Up", SelectX: -10, SelectY: -100, SelectDX: 90, SelectDY: 130, OffsetX: 3, OffsetY: 1, Direction: "b"}, + 56: {ID: 56, Name: "Act 3 Dungeon Down", SelectX: -40, SelectY: -20, SelectDX: 170, SelectDY: 100, OffsetX: -4, OffsetY: -1, Direction: "b"}, + 57: {ID: 57, Name: "Act 3 Kurast to Sewer", SelectX: -60, SelectY: -40, SelectDX: 120, SelectDY: 90, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 58: {ID: 58, Name: "Act 3 Sewer Up L", SelectX: -75, SelectY: -110, SelectDX: 100, SelectDY: 150, OffsetX: 1, OffsetY: 1, Direction: "b"}, + 59: {ID: 59, Name: "Act 3 Sewer Up R", SelectX: -25, SelectY: -110, SelectDX: 100, SelectDY: 150, OffsetX: 6, OffsetY: 1, Direction: "b"}, + 60: {ID: 60, Name: "Act 3 Sewer Down", SelectX: -10, SelectY: -10, SelectDX: 0, SelectDY: 0, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 61: {ID: 61, Name: "Act 3 Kurast to Temple", SelectX: -10, SelectY: -10, SelectDX: 0, SelectDY: 0, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 62: {ID: 62, Name: "Act 3 Temple Up L", SelectX: -50, SelectY: -110, SelectDX: 80, SelectDY: 140, OffsetX: 1, OffsetY: 2, Direction: "b"}, + 63: {ID: 63, Name: "Act 3 Temple Up R", SelectX: -30, SelectY: -110, SelectDX: 80, SelectDY: 140, OffsetX: 2, OffsetY: 1, Direction: "b"}, + 64: {ID: 64, Name: "Act 3 Travincal to Mephisto", SelectX: -10, SelectY: -10, SelectDX: 0, SelectDY: 0, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 65: {ID: 65, Name: "Act 3 Mephisto Up L", SelectX: -65, SelectY: -150, SelectDX: 125, SelectDY: 180, OffsetX: 1, OffsetY: 0, Direction: "b"}, + 66: {ID: 66, Name: "Act 3 Mephisto Up R", SelectX: -60, SelectY: -150, SelectDX: 125, SelectDY: 180, OffsetX: 5, OffsetY: 1, Direction: "b"}, + 67: {ID: 67, Name: "Act 3 Mephisto Down L", SelectX: -65, SelectY: -150, SelectDX: 125, SelectDY: 180, OffsetX: 1, OffsetY: 0, Direction: "b"}, + 68: {ID: 68, Name: "Act 3 Mephisto Down R", SelectX: -60, SelectY: -150, SelectDX: 125, SelectDY: 180, OffsetX: 5, OffsetY: 1, Direction: "b"}, + 69: {ID: 69, Name: "Act 4 Mesa to Lava", SelectX: -60, SelectY: -40, SelectDX: 150, SelectDY: 160, OffsetX: 2, OffsetY: 2, Direction: "b"}, + 70: {ID: 70, Name: "Act 4 Lava to Mesa", SelectX: -90, SelectY: -50, SelectDX: 160, SelectDY: 120, OffsetX: 0, OffsetY: 0, Direction: "b"}, + 71: {ID: 71, Name: "Act 5 Barricade Down Wall L", SelectX: -70, SelectY: -80, SelectDX: 80, SelectDY: 100, OffsetX: 2, OffsetY: 6, Direction: "l"}, + 72: {ID: 72, Name: "Act 5 Barricade Down Wall R", SelectX: -15, SelectY: -90, SelectDX: 70, SelectDY: 100, OffsetX: 6, OffsetY: 2, Direction: "r"}, + 73: {ID: 73, Name: "Act 5 Barricade Down Floor", SelectX: -20, SelectY: -120, SelectDX: 75, SelectDY: 100, OffsetX: 2, OffsetY: 2, Direction: "b"}, + 74: {ID: 74, Name: "Act 5 Ice Caves Up L", SelectX: -60, SelectY: -110, SelectDX: 90, SelectDY: 115, OffsetX: 0, OffsetY: 5, Direction: "l"}, + 75: {ID: 75, Name: "Act 5 Ice Caves Up R", SelectX: -10, SelectY: -120, SelectDX: 100, SelectDY: 120, OffsetX: 5, OffsetY: 1, Direction: "r"}, + 76: {ID: 76, Name: "Act 5 Ice Caves Down L", SelectX: -60, SelectY: -110, SelectDX: 90, SelectDY: 115, OffsetX: 0, OffsetY: 5, Direction: "l"}, + 77: {ID: 77, Name: "Act 5 Ice Caves Down R", SelectX: -20, SelectY: -110, SelectDX: 90, SelectDY: 115, OffsetX: 4, OffsetY: 0, Direction: "r"}, + 78: {ID: 78, Name: "Act 5 Ice Caves Down Floor", SelectX: -5, SelectY: -110, SelectDX: 80, SelectDY: 110, OffsetX: 6, OffsetY: 3, Direction: "b"}, + 79: {ID: 79, Name: "Act 5 Temple Entrance", SelectX: 0, SelectY: -110, SelectDX: 95, SelectDY: 100, OffsetX: 2, OffsetY: 0, Direction: "b"}, + 80: {ID: 80, Name: "Act 5 Temple Down", SelectX: 0, SelectY: -70, SelectDX: 140, SelectDY: 80, OffsetX: -2, OffsetY: 3, Direction: "b"}, + 81: {ID: 81, Name: "Act 5 Temple Up", SelectX: -20, SelectY: -110, SelectDX: 100, SelectDY: 110, OffsetX: 3, OffsetY: 0, Direction: "b"}, + 82: {ID: 82, Name: "Act 5 Mountain Top To Ice", SelectX: -40, SelectY: -110, SelectDX: 0, SelectDY: 0, OffsetX: 2, OffsetY: 1, Direction: "b"}, + 83: {ID: 83, Name: "Act 5 Mountain Top To Baal", SelectX: -20, SelectY: -110, SelectDX: 0, SelectDY: 0, OffsetX: 2, OffsetY: 1, Direction: "b"}, + 84: {ID: 84, Name: "Act 5 Baal Temple Up L", SelectX: -70, SelectY: -110, SelectDX: 95, SelectDY: 115, OffsetX: 1, OffsetY: 4, Direction: "l"}, + 85: {ID: 85, Name: "Act 5 Baal Temple Up R", SelectX: -20, SelectY: -110, SelectDX: 80, SelectDY: 115, OffsetX: 4, OffsetY: 1, Direction: "r"}, + 86: {ID: 86, Name: "Act 5 Baal Temple Down L", SelectX: -70, SelectY: -110, SelectDX: 95, SelectDY: 115, OffsetX: 1, OffsetY: 4, Direction: "l"}, + 87: {ID: 87, Name: "Act 5 Baal Temple Down R", SelectX: -20, SelectY: -110, SelectDX: 80, SelectDY: 115, OffsetX: 4, OffsetY: 1, Direction: "r"}, +} diff --git a/pkg/data/entrance/name.go b/pkg/data/entrance/name.go new file mode 100644 index 0000000..1c3444f --- /dev/null +++ b/pkg/data/entrance/name.go @@ -0,0 +1,94 @@ +package entrance + +type Name int + +const ( + A1WildernessToCliffL Name = iota + A1WildernessToCliffR + A1WildernessToFloorL + A1WildernessToFloorR + A1CaveUp + A1CaveDown + A1GraveyardToCrypt1 + A1GraveyardToCrypt2 + A1CryptUp + A1CryptDown + A1WildernessToTower + A1TowertoWilderness + A1TowertoCrypt + A1JailUp + A1JailDown + A1CathedralToCatacombs + A1CatacombstoCathedral + A1CatacombsUp + A1CatacombsDown + A2TowntoSewerTrap + A2TowntoSewerDock + A2SewerDocktoTown + A2SewerUp + A2SewerDown + A2TowntoHarem + A2HaremtoTown + A2HaremUp1 + A2HaremUp2 + A2HaremDown1 + A2HaremDown2 + A2BasementUp1 + A2BasementUp2 + A2BasementDown + A2DeserttoTombL1 + A2DeserttoTombL2 + A2DeserttoTombR1 + A2DeserttoTombR2 + A2DeserttoTombViper + A2DeserttoTombTal1 + A2DeserttoTombTal2 + A2DeserttoTombTal3 + A2DeserttoTombTal4 + A2DeserttoTombTal5 + A2DeserttoTombTal6 + A2DeserttoTombTal7 + A2TombUp + A2TombDown + A2DeserttoLair + A2LairUp + A2LairDown + A2DeserttoSewerTrap + A3JungletoSpider + A3SpidertoJungle + A3JungletoDungeonFort + A3JungletoDungeonHole + A3DungeonUp + A3DungeonDown + A3KurasttoSewer + A3SewerUpL + A3SewerUpR + A3SewerDown + A3KurasttoTemple + A3TempleUpL + A3TempleUpR + A3TravincaltoMephisto + A3MephistoUpL + A3MephistoUpR + A3MephistoDownL + A3MephistoDownR + A4MesatoLava + A4LavatoMesa + A5BarricadeDownWallL + A5BarricadeDownWallR + A5BarricadeDownFloor + A5IceCavesUpL + A5IceCavesUpR + A5IceCavesDownL + A5IceCavesDownR + A5iceCavesDownFloor + A5TempleEntrance + A5TempleDown + A5TempleUp + A5MountainTopToIce + A5MountainTopToBaal + A5BaalTempleUpL + A5BaalTempleUpR + A5BaalTempleDownL + A5BaalTempleDownR +) diff --git a/pkg/data/entrances.go b/pkg/data/entrances.go new file mode 100644 index 0000000..b6c74aa --- /dev/null +++ b/pkg/data/entrances.go @@ -0,0 +1,33 @@ +package data + +import ( + "github.com/hectorgimenez/d2go/pkg/data/entrance" +) + +type Entrance struct { + ID UnitID + entrance.Name + IsHovered bool + Selectable bool + Position Position +} + +type Entrances []Entrance + +func (e Entrances) FindOne(name entrance.Name) (Entrance, bool) { + for _, ent := range e { + if ent.Name == name { + return ent, true + } + } + return Entrance{}, false +} + +func (e Entrances) FindByID(id UnitID) (Entrance, bool) { + for _, ent := range e { + if ent.ID == id { + return ent, true + } + } + return Entrance{}, false +} diff --git a/pkg/memory/game_reader.go b/pkg/memory/game_reader.go index c0e411b..22e7e9c 100644 --- a/pkg/memory/game_reader.go +++ b/pkg/memory/game_reader.go @@ -57,6 +57,7 @@ func (gd *GameReader) GetData() data.Data { PlayerUnit: pu, Inventory: gd.Inventory(rawPlayerUnits, hover), Objects: gd.Objects(pu.Position, hover), + Entrances: gd.Entrances(pu.Position, hover), OpenMenus: gd.openMenus(), Widgets: gd.UpdateWidgets(), Roster: roster, diff --git a/pkg/memory/object.go b/pkg/memory/object.go index 49a423c..0753feb 100644 --- a/pkg/memory/object.go +++ b/pkg/memory/object.go @@ -3,6 +3,7 @@ package memory import ( "sort" + "github.com/hectorgimenez/d2go/pkg/data/entrance" "github.com/hectorgimenez/d2go/pkg/data/mode" "github.com/hectorgimenez/d2go/pkg/data" @@ -97,3 +98,39 @@ func (gd *GameReader) Objects(playerPosition data.Position, hover data.HoverData return objects } +func (gd *GameReader) Entrances(playerPosition data.Position, hover data.HoverData) []data.Entrance { + baseAddr := gd.Process.moduleBaseAddressPtr + gd.offset.UnitTable + (5 * 1024) + unitTableBuffer := gd.Process.ReadBytesFromMemory(baseAddr, 128*8) + + var entrances []data.Entrance + + for i := 0; i < 128; i++ { + entranceOffset := 8 * i + entranceUnitPtr := uintptr(ReadUIntFromBuffer(unitTableBuffer, uint(entranceOffset), Uint64)) + + for entranceUnitPtr > 0 { + + if entranceType := gd.Process.ReadUInt(entranceUnitPtr+0x00, Uint32); entranceType == 5 { + txtFileNo := gd.Process.ReadUInt(entranceUnitPtr+0x04, Uint32) + unitID := gd.Process.ReadUInt(entranceUnitPtr+0x08, Uint32) + + pathPtr := uintptr(gd.Process.ReadUInt(entranceUnitPtr+0x38, Uint64)) + posX := gd.Process.ReadUInt(pathPtr+0x10, Uint16) + posY := gd.Process.ReadUInt(pathPtr+0x14, Uint16) + + entrances = append(entrances, data.Entrance{ + ID: data.UnitID(unitID), + Name: entrance.Name(txtFileNo), + IsHovered: data.UnitID(unitID) == hover.UnitID && hover.UnitType == 5 && hover.IsHovered, + Position: data.Position{ + X: int(posX), + Y: int(posY), + }, + }) + } + entranceUnitPtr = uintptr(gd.Process.ReadUInt(entranceUnitPtr+0x158, Uint64)) + } + } + + return entrances +}