gotchi-battler-game-logic 2.0.7 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.vscode/settings.json +4 -4
  2. package/Dockerfile +9 -9
  3. package/README.md +49 -49
  4. package/cloudbuild.yaml +27 -27
  5. package/constants/tournamentManagerAbi.json +208 -208
  6. package/game-logic/index.js +7 -6
  7. package/game-logic/v1.4/constants.js +114 -114
  8. package/game-logic/v1.4/index.js +1366 -1366
  9. package/game-logic/v1.6/constants.js +123 -123
  10. package/game-logic/v1.6/index.js +1406 -1406
  11. package/game-logic/v1.7/constants.js +142 -140
  12. package/game-logic/v1.7/helpers.js +610 -593
  13. package/game-logic/v1.7/index.js +802 -795
  14. package/game-logic/v1.8/constants.js +135 -0
  15. package/game-logic/v1.8/helpers.js +628 -0
  16. package/game-logic/v1.8/index.js +826 -0
  17. package/index.js +12 -12
  18. package/package.json +26 -26
  19. package/schemas/team.json +349 -343
  20. package/scripts/balancing/createCSV.js +126 -126
  21. package/scripts/balancing/createTrainingGotchis.js +267 -0
  22. package/scripts/balancing/extractOnchainTraits.js +61 -0
  23. package/scripts/balancing/fixTrainingGotchis.js +155 -259
  24. package/scripts/balancing/processSims.js +229 -229
  25. package/scripts/balancing/sims.js +278 -278
  26. package/scripts/balancing/v1.7/class_combos.js +43 -43
  27. package/scripts/balancing/v1.7/mapGotchi.js +119 -0
  28. package/scripts/balancing/v1.7/setTeamPositions.js +105 -105
  29. package/scripts/balancing/v1.7/training_gotchis.json +20161 -20161
  30. package/scripts/balancing/v1.7/training_gotchis_traits.json +520 -0
  31. package/scripts/balancing/v1.7/trait_combos.json +9 -9
  32. package/scripts/balancing/v1.7.1/class_combos.js +43 -43
  33. package/scripts/balancing/v1.7.1/mapGotchi.js +119 -0
  34. package/scripts/balancing/v1.7.1/setTeamPositions.js +122 -122
  35. package/scripts/balancing/v1.7.1/training_gotchis.json +22401 -22401
  36. package/scripts/balancing/v1.7.1/training_gotchis_traits.json +520 -0
  37. package/scripts/balancing/v1.7.1/trait_combos.json +9 -9
  38. package/scripts/balancing/v1.7.2/class_combos.js +44 -0
  39. package/scripts/balancing/v1.7.2/mapGotchi.js +157 -0
  40. package/scripts/balancing/v1.7.2/setTeamPositions.js +122 -0
  41. package/scripts/balancing/v1.7.2/training_gotchis.json +22402 -0
  42. package/scripts/balancing/v1.7.2/training_gotchis_traits.json +520 -0
  43. package/scripts/balancing/v1.7.2/trait_combos.json +10 -0
  44. package/scripts/balancing/v1.7.3/class_combos.js +44 -0
  45. package/scripts/balancing/v1.7.3/mapGotchi.js +164 -0
  46. package/scripts/balancing/v1.7.3/setTeamPositions.js +122 -0
  47. package/scripts/balancing/v1.7.3/training_gotchis.json +22402 -0
  48. package/scripts/balancing/v1.7.3/training_gotchis_traits.json +37 -0
  49. package/scripts/balancing/v1.7.3/trait_combos.json +10 -0
  50. package/scripts/data/team1.json +213 -213
  51. package/scripts/data/team2.json +200 -200
  52. package/scripts/data/tournaments.json +71 -66
  53. package/scripts/{runBattle.js → runLocalBattle.js} +18 -18
  54. package/scripts/runRealBattle.js +52 -0
  55. package/scripts/simRealBattle.js +121 -0
  56. package/scripts/validateBattle.js +83 -70
  57. package/scripts/validateTournament.js +101 -101
  58. package/utils/contracts.js +12 -12
  59. package/utils/errors.js +29 -29
  60. package/utils/mapGotchi.js +119 -0
  61. package/utils/transforms.js +89 -88
  62. package/utils/validations.js +39 -39
  63. package/debug.log +0 -2
  64. package/game-logic/v1.6/debug.log +0 -1
  65. package/game-logic/v1.7/debug.log +0 -3
  66. package/scripts/data/debug.log +0 -2
  67. package/scripts/debug.log +0 -1
@@ -1,201 +1,201 @@
1
- {
2
- "formation": {
3
- "front": [
4
- null,
5
- {
6
- "id": 539,
7
- "snapshotBlock": 59673035,
8
- "onchainId": 13681,
9
- "name": "Artemis",
10
- "brs": 851,
11
- "nrg": -11,
12
- "agg": -2,
13
- "spk": 86,
14
- "brn": 110,
15
- "eyc": 1,
16
- "eys": 0,
17
- "kinship": 1663,
18
- "xp": 2745,
19
- "speed": 100,
20
- "health": 1370,
21
- "crit": 0,
22
- "armor": 104,
23
- "evade": 11,
24
- "resist": 0,
25
- "magic": 518,
26
- "physical": 213,
27
- "accuracy": 99.5,
28
- "attack": "magic",
29
- "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/9f4def373cf431294f0b84f41d44f01b37672083a8b7b50d3ce0d95228fc5d9f.png",
30
- "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/34c3252ba2f0f42a8b729d3bd63d1f4da0127638f8fa182a6a4dc4d21613c559.png",
31
- "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/92600bb5938b211f40d0def5878df8543f67cd9b05afd80a284a5ef4c348fc18.png",
32
- "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/6bb67fb53ac8400770f788af79e7495f00f7fa584d30d3e08f1407a18f58f5e3.png",
33
- "specialId": 7,
34
- "special": {
35
- "id": 7,
36
- "class": "Mage",
37
- "name": "Thunder",
38
- "cooldown": 2,
39
- "leaderPassive": "Channel the coven"
40
- }
41
- },
42
- null,
43
- {
44
- "id": 540,
45
- "snapshotBlock": 59673035,
46
- "onchainId": 16676,
47
- "name": "Renna",
48
- "brs": 706,
49
- "nrg": 4,
50
- "agg": 1,
51
- "spk": -10,
52
- "brn": 100,
53
- "eyc": 97,
54
- "eys": 12,
55
- "kinship": 2017,
56
- "xp": 3465,
57
- "speed": 100,
58
- "health": 1082,
59
- "crit": 0,
60
- "armor": 98,
61
- "evade": 0,
62
- "resist": 60,
63
- "magic": 432,
64
- "physical": 177,
65
- "accuracy": 93,
66
- "attack": "magic",
67
- "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/3e2ab7f51c68b9f6d840112acf85e43cdd4482d6928d036a0d25ed9d4d7fd8cb.png",
68
- "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/70a7da02ab9172152ccef9210f87c6cd55b326a0c9e84f8f2bbe8f6c3ccb4417.png",
69
- "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/991830ed19232f1c9a677dbe4ced307af9918f89bf140476a7036a5c529fd956.png",
70
- "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/0b897d90ee01a77aff97a80cdf75a179b53ec5f51cd151e6dfa5380e6e25357d.png",
71
- "specialId": 6,
72
- "special": {
73
- "id": 6,
74
- "class": "Healer",
75
- "name": "Blessing",
76
- "cooldown": 0,
77
- "leaderPassive": "Cleansing Aura"
78
- }
79
- },
80
- null
81
- ],
82
- "back": [
83
- {
84
- "id": 536,
85
- "snapshotBlock": 59673035,
86
- "onchainId": 15560,
87
- "name": "Czar",
88
- "brs": 823,
89
- "nrg": 103,
90
- "agg": 108,
91
- "spk": 17,
92
- "brn": -27,
93
- "eyc": 0,
94
- "eys": 0,
95
- "kinship": 2121,
96
- "xp": 4350,
97
- "speed": 154,
98
- "health": 617,
99
- "crit": 30,
100
- "armor": 0,
101
- "evade": 0,
102
- "resist": 33,
103
- "magic": 206,
104
- "physical": 591,
105
- "accuracy": 100,
106
- "attack": "physical",
107
- "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/314f74e7dc6c347aeb88e7a3ce1ea582154f857b59d407dbab7ec35926b3b978.png",
108
- "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/dbf15d1c3b74baefaa42ce5ec5de868a1ac8ebd0e38553f8b37de7763014614c.png",
109
- "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/6832d15ef8e784d36306a5ef14ae5d80c716a609e5bb48607964d0280dba6ad9.png",
110
- "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/6e9d00e3947134dbca37c97dddb0f5f02a8a8c35417ad88f0ba6202e82b25d0d.png",
111
- "specialId": 8,
112
- "special": {
113
- "id": 8,
114
- "class": "Troll",
115
- "name": "Devestating Smash",
116
- "cooldown": 2,
117
- "leaderPassive": "Clan momentum"
118
- }
119
- },
120
- null,
121
- {
122
- "id": 537,
123
- "snapshotBlock": 59673035,
124
- "onchainId": 474,
125
- "name": "Titan",
126
- "brs": 740,
127
- "nrg": 107,
128
- "agg": 100,
129
- "spk": 107,
130
- "brn": 107,
131
- "eyc": 91,
132
- "eys": 92,
133
- "kinship": 2295,
134
- "xp": 3380,
135
- "speed": 158,
136
- "health": 555,
137
- "crit": 26,
138
- "armor": 0,
139
- "evade": 17,
140
- "resist": 0,
141
- "magic": 475,
142
- "physical": 185,
143
- "accuracy": 92.5,
144
- "attack": "magic",
145
- "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/c44da0ac4057817671968dc80027c7262f679a51b5c0fffa468d56d990d10795.png",
146
- "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/8f8e6e9f7ec7e3e11c0591014108885a20057f49ec009dc4980190c1b4bdcfb0.png",
147
- "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/a7a485f674cc6c5b4f22271408688a18ba985f743e7ec4794f208cb50d2fdc26.png",
148
- "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/aa0d6349e760625cdd34781f683dd316649630b39fa7ad829e8b862efad31a78.png",
149
- "specialId": 5,
150
- "special": {
151
- "id": 5,
152
- "class": "Cursed",
153
- "name": "Curse",
154
- "cooldown": 0,
155
- "leaderPassive": "Spread the fear"
156
- }
157
- },
158
- null,
159
- {
160
- "id": 538,
161
- "snapshotBlock": 59673035,
162
- "onchainId": 2270,
163
- "name": "Caesar",
164
- "brs": 750,
165
- "nrg": 97,
166
- "agg": 101,
167
- "spk": 98,
168
- "brn": 120,
169
- "eyc": 1,
170
- "eys": 85,
171
- "kinship": 2511,
172
- "xp": 4905,
173
- "speed": 148,
174
- "health": 563,
175
- "crit": 26,
176
- "armor": 0,
177
- "evade": 15,
178
- "resist": 0,
179
- "magic": 543,
180
- "physical": 188,
181
- "accuracy": 92.5,
182
- "attack": "magic",
183
- "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/6f733ca8e041965680bbd482a82d669c3d45d8e73bbcc105f367937d62b4604b.png",
184
- "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/ce74959c2b5ff03e74568389a2068e4a14a8d6b9969c247b3bbe804bac2ab4d4.png",
185
- "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/2c8a0e22e9af7be4c2232d7596f9a0ee1b2d1df0e114def431f6c7809e2d2629.png",
186
- "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/fc3e90aefb6f8d8c9bf846b94358619aa495d6c14da096f17e24a7634c2270f4.png",
187
- "specialId": 7,
188
- "special": {
189
- "id": 7,
190
- "class": "Mage",
191
- "name": "Thunder",
192
- "cooldown": 2,
193
- "leaderPassive": "Channel the coven"
194
- }
195
- }
196
- ]
197
- },
198
- "leader": 537,
199
- "name": "Wagdiddly",
200
- "owner": "0xd281f988242c900d67ff2aafabe683b8004ee778"
1
+ {
2
+ "formation": {
3
+ "front": [
4
+ null,
5
+ {
6
+ "id": 539,
7
+ "snapshotBlock": 59673035,
8
+ "onchainId": 13681,
9
+ "name": "Artemis",
10
+ "brs": 851,
11
+ "nrg": -11,
12
+ "agg": -2,
13
+ "spk": 86,
14
+ "brn": 110,
15
+ "eyc": 1,
16
+ "eys": 0,
17
+ "kinship": 1663,
18
+ "xp": 2745,
19
+ "speed": 100,
20
+ "health": 1370,
21
+ "crit": 0,
22
+ "armor": 104,
23
+ "evade": 11,
24
+ "resist": 0,
25
+ "magic": 518,
26
+ "physical": 213,
27
+ "accuracy": 99.5,
28
+ "attack": "magic",
29
+ "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/9f4def373cf431294f0b84f41d44f01b37672083a8b7b50d3ce0d95228fc5d9f.png",
30
+ "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/34c3252ba2f0f42a8b729d3bd63d1f4da0127638f8fa182a6a4dc4d21613c559.png",
31
+ "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/92600bb5938b211f40d0def5878df8543f67cd9b05afd80a284a5ef4c348fc18.png",
32
+ "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/6bb67fb53ac8400770f788af79e7495f00f7fa584d30d3e08f1407a18f58f5e3.png",
33
+ "specialId": 7,
34
+ "special": {
35
+ "id": 7,
36
+ "class": "Mage",
37
+ "name": "Thunder",
38
+ "cooldown": 2,
39
+ "leaderPassive": "Channel the coven"
40
+ }
41
+ },
42
+ null,
43
+ {
44
+ "id": 540,
45
+ "snapshotBlock": 59673035,
46
+ "onchainId": 16676,
47
+ "name": "Renna",
48
+ "brs": 706,
49
+ "nrg": 4,
50
+ "agg": 1,
51
+ "spk": -10,
52
+ "brn": 100,
53
+ "eyc": 97,
54
+ "eys": 12,
55
+ "kinship": 2017,
56
+ "xp": 3465,
57
+ "speed": 100,
58
+ "health": 1082,
59
+ "crit": 0,
60
+ "armor": 98,
61
+ "evade": 0,
62
+ "resist": 60,
63
+ "magic": 432,
64
+ "physical": 177,
65
+ "accuracy": 93,
66
+ "attack": "magic",
67
+ "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/3e2ab7f51c68b9f6d840112acf85e43cdd4482d6928d036a0d25ed9d4d7fd8cb.png",
68
+ "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/70a7da02ab9172152ccef9210f87c6cd55b326a0c9e84f8f2bbe8f6c3ccb4417.png",
69
+ "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/991830ed19232f1c9a677dbe4ced307af9918f89bf140476a7036a5c529fd956.png",
70
+ "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/0b897d90ee01a77aff97a80cdf75a179b53ec5f51cd151e6dfa5380e6e25357d.png",
71
+ "specialId": 6,
72
+ "special": {
73
+ "id": 6,
74
+ "class": "Healer",
75
+ "name": "Blessing",
76
+ "cooldown": 0,
77
+ "leaderPassive": "Cleansing Aura"
78
+ }
79
+ },
80
+ null
81
+ ],
82
+ "back": [
83
+ {
84
+ "id": 536,
85
+ "snapshotBlock": 59673035,
86
+ "onchainId": 15560,
87
+ "name": "Czar",
88
+ "brs": 823,
89
+ "nrg": 103,
90
+ "agg": 108,
91
+ "spk": 17,
92
+ "brn": -27,
93
+ "eyc": 0,
94
+ "eys": 0,
95
+ "kinship": 2121,
96
+ "xp": 4350,
97
+ "speed": 154,
98
+ "health": 617,
99
+ "crit": 30,
100
+ "armor": 0,
101
+ "evade": 0,
102
+ "resist": 33,
103
+ "magic": 206,
104
+ "physical": 591,
105
+ "accuracy": 100,
106
+ "attack": "physical",
107
+ "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/314f74e7dc6c347aeb88e7a3ce1ea582154f857b59d407dbab7ec35926b3b978.png",
108
+ "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/dbf15d1c3b74baefaa42ce5ec5de868a1ac8ebd0e38553f8b37de7763014614c.png",
109
+ "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/6832d15ef8e784d36306a5ef14ae5d80c716a609e5bb48607964d0280dba6ad9.png",
110
+ "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/6e9d00e3947134dbca37c97dddb0f5f02a8a8c35417ad88f0ba6202e82b25d0d.png",
111
+ "specialId": 8,
112
+ "special": {
113
+ "id": 8,
114
+ "class": "Troll",
115
+ "name": "Devestating Smash",
116
+ "cooldown": 2,
117
+ "leaderPassive": "Clan momentum"
118
+ }
119
+ },
120
+ null,
121
+ {
122
+ "id": 537,
123
+ "snapshotBlock": 59673035,
124
+ "onchainId": 474,
125
+ "name": "Titan",
126
+ "brs": 740,
127
+ "nrg": 107,
128
+ "agg": 100,
129
+ "spk": 107,
130
+ "brn": 107,
131
+ "eyc": 91,
132
+ "eys": 92,
133
+ "kinship": 2295,
134
+ "xp": 3380,
135
+ "speed": 158,
136
+ "health": 555,
137
+ "crit": 26,
138
+ "armor": 0,
139
+ "evade": 17,
140
+ "resist": 0,
141
+ "magic": 475,
142
+ "physical": 185,
143
+ "accuracy": 92.5,
144
+ "attack": "magic",
145
+ "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/c44da0ac4057817671968dc80027c7262f679a51b5c0fffa468d56d990d10795.png",
146
+ "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/8f8e6e9f7ec7e3e11c0591014108885a20057f49ec009dc4980190c1b4bdcfb0.png",
147
+ "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/a7a485f674cc6c5b4f22271408688a18ba985f743e7ec4794f208cb50d2fdc26.png",
148
+ "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/aa0d6349e760625cdd34781f683dd316649630b39fa7ad829e8b862efad31a78.png",
149
+ "specialId": 5,
150
+ "special": {
151
+ "id": 5,
152
+ "class": "Cursed",
153
+ "name": "Curse",
154
+ "cooldown": 0,
155
+ "leaderPassive": "Spread the fear"
156
+ }
157
+ },
158
+ null,
159
+ {
160
+ "id": 538,
161
+ "snapshotBlock": 59673035,
162
+ "onchainId": 2270,
163
+ "name": "Caesar",
164
+ "brs": 750,
165
+ "nrg": 97,
166
+ "agg": 101,
167
+ "spk": 98,
168
+ "brn": 120,
169
+ "eyc": 1,
170
+ "eys": 85,
171
+ "kinship": 2511,
172
+ "xp": 4905,
173
+ "speed": 148,
174
+ "health": 563,
175
+ "crit": 26,
176
+ "armor": 0,
177
+ "evade": 15,
178
+ "resist": 0,
179
+ "magic": 543,
180
+ "physical": 188,
181
+ "accuracy": 92.5,
182
+ "attack": "magic",
183
+ "svgFront": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/6f733ca8e041965680bbd482a82d669c3d45d8e73bbcc105f367937d62b4604b.png",
184
+ "svgBack": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/ce74959c2b5ff03e74568389a2068e4a14a8d6b9969c247b3bbe804bac2ab4d4.png",
185
+ "svgLeft": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/2c8a0e22e9af7be4c2232d7596f9a0ee1b2d1df0e114def431f6c7809e2d2629.png",
186
+ "svgRight": "https://storage.googleapis.com/gotchi-battler-live_gotchis/onchain/fc3e90aefb6f8d8c9bf846b94358619aa495d6c14da096f17e24a7634c2270f4.png",
187
+ "specialId": 7,
188
+ "special": {
189
+ "id": 7,
190
+ "class": "Mage",
191
+ "name": "Thunder",
192
+ "cooldown": 2,
193
+ "leaderPassive": "Channel the coven"
194
+ }
195
+ }
196
+ ]
197
+ },
198
+ "leader": 537,
199
+ "name": "Wagdiddly",
200
+ "owner": "0xd281f988242c900d67ff2aafabe683b8004ee778"
201
201
  }
@@ -1,67 +1,72 @@
1
- [
2
- {
3
- "id": 1,
4
- "name": "Test Tournament 1",
5
- "gameLogicVersion": "v1.5"
6
- },
7
- {
8
- "id": 2,
9
- "name": "Test Tournament 2",
10
- "gameLogicVersion": "v1.5"
11
- },
12
- {
13
- "id": 4,
14
- "name": "1000 DAI Bounty Tournament",
15
- "gameLogicVersion": "v1.5"
16
- },
17
- {
18
- "id": 5,
19
- "name": "2000 DAI Bounty Tournament",
20
- "gameLogicVersion": "v1.5"
21
- },
22
- {
23
- "id": 7,
24
- "name": "10k GHST Rarity Farming Tournament",
25
- "gameLogicVersion": "v1.5"
26
- },
27
- {
28
- "id": 8,
29
- "name": "30k GHST Rarity Farming Tournament",
30
- "gameLogicVersion": "v1.5"
31
- },
32
- {
33
- "id": 9,
34
- "name": "60k GHST Rarity Farming Tournament",
35
- "gameLogicVersion": "v1.5"
36
- },
37
- {
38
- "id": 10,
39
- "name": "Test Tournament 3",
40
- "gameLogicVersion": "v1.5"
41
- },
42
- {
43
- "id": 11,
44
- "name": "1000 DAI Bounty Tournament",
45
- "gameLogicVersion": "v1.4"
46
- },
47
- {
48
- "id": 12,
49
- "name": "1000 DAI Bounty Tournament",
50
- "gameLogicVersion": "v1.5"
51
- },
52
- {
53
- "id": 13,
54
- "name": "RF8 10K GHST Tournament",
55
- "gameLogicVersion": "v1.5"
56
- },
57
- {
58
- "id": 14,
59
- "name": "RF8 40K GHST Tournament",
60
- "gameLogicVersion": "v1.6"
61
- },
62
- {
63
- "id": 15,
64
- "name": "RF8 100K GHST Tournament",
65
- "gameLogicVersion": "v1.6"
66
- }
1
+ [
2
+ {
3
+ "id": 1,
4
+ "name": "Test Tournament 1",
5
+ "gameLogicVersion": "v1.5"
6
+ },
7
+ {
8
+ "id": 2,
9
+ "name": "Test Tournament 2",
10
+ "gameLogicVersion": "v1.5"
11
+ },
12
+ {
13
+ "id": 4,
14
+ "name": "1000 DAI Bounty Tournament",
15
+ "gameLogicVersion": "v1.5"
16
+ },
17
+ {
18
+ "id": 5,
19
+ "name": "2000 DAI Bounty Tournament",
20
+ "gameLogicVersion": "v1.5"
21
+ },
22
+ {
23
+ "id": 7,
24
+ "name": "10k GHST Rarity Farming Tournament",
25
+ "gameLogicVersion": "v1.5"
26
+ },
27
+ {
28
+ "id": 8,
29
+ "name": "30k GHST Rarity Farming Tournament",
30
+ "gameLogicVersion": "v1.5"
31
+ },
32
+ {
33
+ "id": 9,
34
+ "name": "60k GHST Rarity Farming Tournament",
35
+ "gameLogicVersion": "v1.5"
36
+ },
37
+ {
38
+ "id": 10,
39
+ "name": "Test Tournament 3",
40
+ "gameLogicVersion": "v1.5"
41
+ },
42
+ {
43
+ "id": 11,
44
+ "name": "1000 DAI Bounty Tournament",
45
+ "gameLogicVersion": "v1.4"
46
+ },
47
+ {
48
+ "id": 12,
49
+ "name": "1000 DAI Bounty Tournament",
50
+ "gameLogicVersion": "v1.5"
51
+ },
52
+ {
53
+ "id": 13,
54
+ "name": "RF8 10K GHST Tournament",
55
+ "gameLogicVersion": "v1.5"
56
+ },
57
+ {
58
+ "id": 14,
59
+ "name": "RF8 40K GHST Tournament",
60
+ "gameLogicVersion": "v1.6"
61
+ },
62
+ {
63
+ "id": 15,
64
+ "name": "RF8 100K GHST Tournament",
65
+ "gameLogicVersion": "v1.6"
66
+ },
67
+ {
68
+ "id": 18,
69
+ "name": "RF9 100K GHST Tournament 1",
70
+ "gameLogicVersion": "v1.7"
71
+ }
67
72
  ]
@@ -1,18 +1,18 @@
1
- const fs = require('fs')
2
- const path = require('path')
3
- const { battle } = require('..')
4
-
5
- // Edit these json files to test different battles
6
- // NOTE: Only the in-game stats (speed, health, crit etc..) are used in the game logic
7
- const team1 = require('./data/team1.json')
8
- const team2 = require('./data/team2.json')
9
-
10
- const results = battle(team1, team2, "82807311112923564712218359337695919195403960526804010606215202651499586140469")
11
-
12
- const timestamp = new Date().getTime()
13
- const resultsFilename = `results-${timestamp}.json`
14
- fs.writeFileSync(path.join(__dirname, 'output', resultsFilename), JSON.stringify(results, null, '\t'))
15
-
16
- console.log(`Results written to ${path.join(__dirname, 'output', resultsFilename)}`)
17
-
18
- // node scripts/runBattle.js
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+ const { battle } = require('..')
4
+
5
+ // Edit these json files to test different battles
6
+ // NOTE: Only the in-game stats (speed, health, crit etc..) are used in the game logic
7
+ const team1 = require('./data/team1.json')
8
+ const team2 = require('./data/team2.json')
9
+
10
+ const results = battle(team1, team2, "82807311112923564712218359337695919195403960526804010606215202651499586140469", true)
11
+
12
+ const timestamp = new Date().getTime()
13
+ const resultsFilename = `results-${timestamp}.json`
14
+ fs.writeFileSync(path.join(__dirname, 'output', resultsFilename), JSON.stringify(results, null, '\t'))
15
+
16
+ console.log(`Results written to ${path.join(__dirname, 'output', resultsFilename)}`)
17
+
18
+ // node scripts/runLocalBattle.js
@@ -0,0 +1,52 @@
1
+ const axios = require('axios')
2
+ const axiosRetry = require('axios-retry').default
3
+ axiosRetry(axios, {
4
+ retries: 3,
5
+ retryDelay: axiosRetry.exponentialDelay
6
+ })
7
+ const fs = require('fs')
8
+ const path = require('path')
9
+
10
+ const { webappTeamToInGameTeam } = require('../utils/transforms')
11
+ const { battle } = require('..')
12
+
13
+ const main = async (battleId) => {
14
+
15
+ const battleRes = await axios.get(`https://gotchi-battler-backend-blmom6tkla-ew.a.run.app/api/v1/battles/${battleId}`)
16
+
17
+ if (!battleRes || !battleRes.data || !battleRes.data.seed || !battleRes.data.team1 || !battleRes.data.team2) {
18
+ console.error('Battle not found')
19
+ return
20
+ }
21
+
22
+ const seed = battleRes.data.seed
23
+
24
+ // Transform the logs to in-game teams
25
+ const team1 = webappTeamToInGameTeam(battleRes.data.team1Snapshot || battleRes.data.team1)
26
+ const team2 = webappTeamToInGameTeam(battleRes.data.team2Snapshot || battleRes.data.team2)
27
+
28
+ // Run the game loop
29
+ const logs = await battle(team1, team2, seed, true)
30
+
31
+ // Write the logs to a file
32
+ fs.writeFileSync(path.join(__dirname, 'output', `${battleId}.json`), JSON.stringify(logs, null, '\t'))
33
+
34
+ return logs
35
+ }
36
+
37
+ module.exports = main
38
+
39
+ // node scripts/runRealBattle.js 19566507-bafe-4a97-a5ee-0926ac9efcd8
40
+ if (require.main === module) {
41
+ const battleId = process.argv[2]
42
+
43
+ main(battleId)
44
+ .then(() => {
45
+ console.log('Done')
46
+ process.exit(0)
47
+ })
48
+ .catch((error) => {
49
+ console.error('Error: ', error)
50
+ process.exit(1)
51
+ })
52
+ }