gotchi-battler-game-logic 1.0.0 → 2.0.1

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 (40) hide show
  1. package/.env.example +1 -0
  2. package/.vscode/settings.json +4 -4
  3. package/Dockerfile +10 -0
  4. package/README.md +49 -49
  5. package/cloudbuild.yaml +27 -0
  6. package/constants/tournamentManagerAbi.json +208 -208
  7. package/game-logic/index.js +6 -5
  8. package/game-logic/v1.4/constants.js +120 -120
  9. package/game-logic/v1.4/index.js +1366 -1353
  10. package/game-logic/v1.5/index.js +8 -8
  11. package/game-logic/v1.6/constants.js +129 -129
  12. package/game-logic/v1.6/index.js +1406 -1402
  13. package/game-logic/v1.7/constants.js +147 -0
  14. package/game-logic/v1.7/helpers.js +605 -0
  15. package/game-logic/v1.7/index.js +796 -0
  16. package/index.js +13 -6
  17. package/package.json +26 -22
  18. package/schemas/team.json +262 -203
  19. package/scripts/balancing/createCSV.js +126 -0
  20. package/scripts/balancing/fixTrainingGotchis.js +260 -0
  21. package/scripts/balancing/processSims.js +230 -0
  22. package/scripts/balancing/sims.js +278 -0
  23. package/scripts/balancing/v1.7/class_combos.js +44 -0
  24. package/scripts/balancing/v1.7/setTeamPositions.js +105 -0
  25. package/scripts/balancing/v1.7/training_gotchis.json +20162 -0
  26. package/scripts/balancing/v1.7/trait_combos.json +10 -0
  27. package/scripts/balancing/v1.7.1/class_combos.js +44 -0
  28. package/scripts/balancing/v1.7.1/setTeamPositions.js +122 -0
  29. package/scripts/balancing/v1.7.1/training_gotchis.json +22402 -0
  30. package/scripts/balancing/v1.7.1/trait_combos.json +10 -0
  31. package/scripts/data/team1.json +213 -200
  32. package/scripts/data/team2.json +200 -200
  33. package/scripts/data/tournaments.json +66 -66
  34. package/scripts/runBattle.js +18 -16
  35. package/scripts/validateBattle.js +70 -64
  36. package/scripts/validateTournament.js +101 -101
  37. package/utils/contracts.js +12 -12
  38. package/utils/errors.js +29 -29
  39. package/utils/transforms.js +88 -47
  40. package/utils/validations.js +39 -39
package/index.js CHANGED
@@ -1,6 +1,13 @@
1
- // Export the gameLoop function for the current version of the game logic
2
- const versions = require('./game-logic')
3
-
4
- const currentVersion = versions[versions.current]
5
-
6
- module.exports = currentVersion.gameLoop
1
+ // Export the gameLoop function for the current version of the game logic
2
+ const versions = require('./game-logic')
3
+ const currentVersion = versions[versions.current]
4
+
5
+ const teamSchema = require('./schemas/team')
6
+ const { webappTeamToInGameTeam, inGameTeamToWebappTeam } = require('./utils/transforms')
7
+
8
+ module.exports = {
9
+ battle: currentVersion.gameLoop,
10
+ teamSchema,
11
+ webappTeamToInGameTeam,
12
+ inGameTeamToWebappTeam
13
+ }
package/package.json CHANGED
@@ -1,22 +1,26 @@
1
- {
2
- "name": "gotchi-battler-game-logic",
3
- "version": "1.0.0",
4
- "main": "index.js",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
7
- },
8
- "author": "Galaxy Brain Studios",
9
- "description": "The game logic for the Gotchi Battler game",
10
- "repository": {
11
- "type": "git",
12
- "url": "Galaxy-Brain-Studios/gotchi-battler-game-logic"
13
- },
14
- "dependencies": {
15
- "jsonschema": "^1.4.1",
16
- "seedrandom": "^3.0.5"
17
- },
18
- "devDependencies": {
19
- "axios": "^1.7.4",
20
- "ethers": "^5.7.0"
21
- }
22
- }
1
+ {
2
+ "name": "gotchi-battler-game-logic",
3
+ "version": "2.0.1",
4
+ "main": "index.js",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1"
7
+ },
8
+ "author": "Galaxy Brain Studios",
9
+ "description": "The game logic for the Gotchi Battler game",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "Galaxy-Brain-Studios/gotchi-battler-game-logic"
13
+ },
14
+ "dependencies": {
15
+ "seedrandom": "^3.0.5",
16
+ "z-schema": "^6.0.2"
17
+ },
18
+ "devDependencies": {
19
+ "@google-cloud/storage": "^7.13.0",
20
+ "axios": "^1.7.4",
21
+ "axios-retry": "^4.5.0",
22
+ "dotenv": "^16.4.5",
23
+ "ethers": "^5.7.0",
24
+ "json-csv": "^4.0.18"
25
+ }
26
+ }
package/schemas/team.json CHANGED
@@ -1,204 +1,263 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "type": "object",
4
- "properties": {
5
- "formation": {
6
- "type": "object",
7
- "required": ["front", "back"],
8
- "properties": {
9
- "front": {
10
- "type": "array",
11
- "minItems": 5,
12
- "maxItems": 5,
13
- "items": {
14
- "oneOf": [
15
- {
16
- "$ref": "#/definitions/gotchi"
17
- },
18
- {
19
- "type": "null"
20
- }
21
- ]
22
- }
23
- },
24
- "back": {
25
- "type": "array",
26
- "minItems": 5,
27
- "maxItems": 5,
28
- "items": {
29
- "oneOf": [
30
- {
31
- "$ref": "#/definitions/gotchi"
32
- },
33
- {
34
- "type": "null"
35
- }
36
- ]
37
- }
38
- }
39
- }
40
- },
41
- "leader": {
42
- "type": "integer"
43
- },
44
- "name": {
45
- "type": "string"
46
- },
47
- "owner": {
48
- "type": "string",
49
- "pattern": "^0x[a-fA-F0-9]{40}$"
50
- }
51
- },
52
- "required": ["formation", "leader", "name", "owner"],
53
- "additionalProperties": false,
54
- "definitions": {
55
- "gotchi": {
56
- "type": "object",
57
- "properties": {
58
- "id": {
59
- "type": "integer"
60
- },
61
- "snapshotBlock": {
62
- "type": "integer"
63
- },
64
- "onchainId": {
65
- "type": "integer"
66
- },
67
- "name": {
68
- "type": "string"
69
- },
70
- "brs": {
71
- "type": "integer"
72
- },
73
- "nrg": {
74
- "type": "integer"
75
- },
76
- "agg": {
77
- "type": "integer"
78
- },
79
- "spk": {
80
- "type": "integer"
81
- },
82
- "brn": {
83
- "type": "integer"
84
- },
85
- "eyc": {
86
- "type": "integer"
87
- },
88
- "eys": {
89
- "type": "integer"
90
- },
91
- "kinship": {
92
- "type": "integer"
93
- },
94
- "xp": {
95
- "type": "integer"
96
- },
97
- "speed": {
98
- "type": "integer"
99
- },
100
- "health": {
101
- "type": "integer"
102
- },
103
- "crit": {
104
- "type": "integer"
105
- },
106
- "armor": {
107
- "type": "integer"
108
- },
109
- "evade": {
110
- "type": "integer"
111
- },
112
- "resist": {
113
- "type": "integer"
114
- },
115
- "magic": {
116
- "type": "integer"
117
- },
118
- "physical": {
119
- "type": "integer"
120
- },
121
- "accuracy": {
122
- "type": "number"
123
- },
124
- "attack": {
125
- "type": "string",
126
- "enum": ["physical", "magic"]
127
- },
128
- "actionDelay": {
129
- "type": "number"
130
- },
131
- "svgFront": {
132
- "type": "string",
133
- "format": "uri"
134
- },
135
- "svgBack": {
136
- "type": "string",
137
- "format": "uri"
138
- },
139
- "svgLeft": {
140
- "type": "string",
141
- "format": "uri"
142
- },
143
- "svgRight": {
144
- "type": "string",
145
- "format": "uri"
146
- },
147
- "specialId": {
148
- "type": "integer"
149
- },
150
- "special": {
151
- "type": "object",
152
- "properties": {
153
- "id": {
154
- "type": "integer"
155
- },
156
- "class": {
157
- "type": "string"
158
- },
159
- "gotchiClass": {
160
- "type": "string"
161
- },
162
- "name": {
163
- "type": "string"
164
- },
165
- "cooldown": {
166
- "type": "integer"
167
- },
168
- "leaderPassive": {
169
- "type": "string"
170
- }
171
- },
172
- "required": ["id", "name", "cooldown", "leaderPassive"],
173
- "additionalProperties": false
174
- },
175
- "statuses": {
176
- "type": "array",
177
- "items": {
178
- "type": "string"
179
- }
180
- }
181
- },
182
- "additionalProperties": false,
183
- "required": [
184
- "id",
185
- "name",
186
- "speed",
187
- "health",
188
- "crit",
189
- "armor",
190
- "evade",
191
- "resist",
192
- "magic",
193
- "physical",
194
- "accuracy",
195
- "svgFront",
196
- "svgBack",
197
- "svgLeft",
198
- "svgRight",
199
- "specialId",
200
- "special"
201
- ]
202
- }
203
- }
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "formation": {
5
+ "type": "object",
6
+ "required": ["front", "back"],
7
+ "properties": {
8
+ "front": {
9
+ "type": "array",
10
+ "minItems": 5,
11
+ "maxItems": 5,
12
+ "items": {
13
+ "oneOf": [
14
+ {
15
+ "$ref": "#/definitions/gotchi"
16
+ },
17
+ {
18
+ "type": "null"
19
+ }
20
+ ]
21
+ }
22
+ },
23
+ "back": {
24
+ "type": "array",
25
+ "minItems": 5,
26
+ "maxItems": 5,
27
+ "items": {
28
+ "oneOf": [
29
+ {
30
+ "$ref": "#/definitions/gotchi"
31
+ },
32
+ {
33
+ "type": "null"
34
+ }
35
+ ]
36
+ }
37
+ }
38
+ }
39
+ },
40
+ "leader": {
41
+ "type": "integer"
42
+ },
43
+ "name": {
44
+ "type": "string"
45
+ },
46
+ "owner": {
47
+ "type": "string",
48
+ "pattern": "^0x[a-fA-F0-9]{40}$"
49
+ }
50
+ },
51
+ "required": ["formation", "leader", "name", "owner"],
52
+ "additionalProperties": false,
53
+ "definitions": {
54
+ "gotchi": {
55
+ "type": "object",
56
+ "properties": {
57
+ "id": {
58
+ "type": "integer"
59
+ },
60
+ "snapshotBlock": {
61
+ "type": "integer"
62
+ },
63
+ "onchainId": {
64
+ "type": "integer"
65
+ },
66
+ "name": {
67
+ "type": "string"
68
+ },
69
+ "brs": {
70
+ "type": "integer"
71
+ },
72
+ "nrg": {
73
+ "type": "integer"
74
+ },
75
+ "agg": {
76
+ "type": "integer"
77
+ },
78
+ "spk": {
79
+ "type": "integer"
80
+ },
81
+ "brn": {
82
+ "type": "integer"
83
+ },
84
+ "eyc": {
85
+ "type": "integer"
86
+ },
87
+ "eys": {
88
+ "type": "integer"
89
+ },
90
+ "kinship": {
91
+ "type": "integer"
92
+ },
93
+ "xp": {
94
+ "type": "integer"
95
+ },
96
+ "speed": {
97
+ "type": "integer"
98
+ },
99
+ "health": {
100
+ "type": "integer"
101
+ },
102
+ "crit": {
103
+ "type": "integer"
104
+ },
105
+ "armor": {
106
+ "type": "integer"
107
+ },
108
+ "evade": {
109
+ "type": "integer"
110
+ },
111
+ "resist": {
112
+ "type": "integer"
113
+ },
114
+ "magic": {
115
+ "type": "integer"
116
+ },
117
+ "physical": {
118
+ "type": "integer"
119
+ },
120
+ "accuracy": {
121
+ "type": "number"
122
+ },
123
+ "attack": {
124
+ "type": "string",
125
+ "enum": ["physical", "magic"]
126
+ },
127
+ "actionDelay": {
128
+ "type": "number"
129
+ },
130
+ "svgFront": {
131
+ "type": "string",
132
+ "format": "uri"
133
+ },
134
+ "svgBack": {
135
+ "type": "string",
136
+ "format": "uri"
137
+ },
138
+ "svgLeft": {
139
+ "type": "string",
140
+ "format": "uri"
141
+ },
142
+ "svgRight": {
143
+ "type": "string",
144
+ "format": "uri"
145
+ },
146
+ "specialId": {
147
+ "type": "integer"
148
+ },
149
+ "special": {
150
+ "type": "object",
151
+ "properties": {
152
+ "id": {
153
+ "type": "integer"
154
+ },
155
+ "class": {
156
+ "type": "string"
157
+ },
158
+ "gotchiClass": {
159
+ "type": "string"
160
+ },
161
+ "name": {
162
+ "type": "string"
163
+ },
164
+ "cooldown": {
165
+ "type": "integer"
166
+ },
167
+ "leaderPassive": {
168
+ "type": "string"
169
+ }
170
+ },
171
+ "required": ["id", "name", "cooldown", "leaderPassive"],
172
+ "additionalProperties": false
173
+ },
174
+ "itemId": {
175
+ "type": ["integer", "null"]
176
+ },
177
+ "item": {
178
+ "type": ["object", "null"],
179
+ "properties": {
180
+ "id": {
181
+ "type": "integer"
182
+ },
183
+ "name": {
184
+ "type": "string"
185
+ },
186
+ "description": {
187
+ "type": "string"
188
+ },
189
+ "image": {
190
+ "type": "string",
191
+ "format": "uri"
192
+ },
193
+ "rarity": {
194
+ "type": "string",
195
+ "enum": ["common", "uncommon", "rare", "legendary", "mythical", "godlike"]
196
+ },
197
+ "cost": {
198
+ "type": "number"
199
+ },
200
+ "stat": {
201
+ "type": "string",
202
+ "enum": ["speed", "health", "crit", "armor", "evade", "resist", "magic", "physical", "accuracy"]
203
+ },
204
+ "statValue": {
205
+ "type": "integer"
206
+ },
207
+ "createdAt": {
208
+ "type": "string"
209
+ },
210
+ "updatedAt": {
211
+ "type": "string"
212
+ }
213
+ },
214
+ "required": ["id", "name", "description", "image", "rarity", "cost", "stat", "statValue"],
215
+ "example": {
216
+ "id": 1,
217
+ "name": "Speed +",
218
+ "description": "Increase speed by 1",
219
+ "image": "https://gotchibattler.com/apple-touch-icon.png",
220
+ "rarity": "common",
221
+ "cost": 0.2,
222
+ "stat": "speed",
223
+ "statValue": 1,
224
+ "createdAt": "2022-02-22T22:22:22Z",
225
+ "updatedAt": "2022-02-22T22:22:22Z"
226
+ }
227
+ },
228
+ "statuses": {
229
+ "type": "array",
230
+ "items": {
231
+ "type": "string"
232
+ }
233
+ },
234
+ "createdAt": {
235
+ "type": "string"
236
+ },
237
+ "updatedAt": {
238
+ "type": "string"
239
+ }
240
+ },
241
+ "additionalProperties": false,
242
+ "required": [
243
+ "id",
244
+ "name",
245
+ "speed",
246
+ "health",
247
+ "crit",
248
+ "armor",
249
+ "evade",
250
+ "resist",
251
+ "magic",
252
+ "physical",
253
+ "accuracy",
254
+ "svgFront",
255
+ "svgBack",
256
+ "svgLeft",
257
+ "svgRight",
258
+ "specialId",
259
+ "special"
260
+ ]
261
+ }
262
+ }
204
263
  }