@reldens/game-data-generator 0.19.0 → 0.21.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.
- package/CLAUDE.md +97 -0
- package/README.md +219 -4
- package/package.json +3 -3
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Package Overview
|
|
6
|
+
|
|
7
|
+
**@reldens/game-data-generator** is a game data generation package for Reldens. It provides utilities to generate balanced game data for RPG systems including:
|
|
8
|
+
- Player experience progression curves
|
|
9
|
+
- Monster/NPC experience reward tables
|
|
10
|
+
- Character attributes and stats scaling per level
|
|
11
|
+
- Configurable generation with validation
|
|
12
|
+
- JSON output for easy integration
|
|
13
|
+
|
|
14
|
+
## Key Commands
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Install dependencies
|
|
18
|
+
npm install
|
|
19
|
+
|
|
20
|
+
# Run tests (if configured)
|
|
21
|
+
npm test
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Architecture
|
|
25
|
+
|
|
26
|
+
### Core Classes
|
|
27
|
+
|
|
28
|
+
**GameDataGenerator** (lib/generator/game-data-generator.js):
|
|
29
|
+
- Abstract base class for all generators
|
|
30
|
+
- Handles options validation through validators
|
|
31
|
+
- Manages file output using FileHandler
|
|
32
|
+
- Provides timestamped file naming
|
|
33
|
+
- Core methods: `setReady()`, `setOptions()`, `validate()`, `generate()`
|
|
34
|
+
|
|
35
|
+
**PlayersExperiencePerLevel** (lib/generator/players-experience-per-level.js):
|
|
36
|
+
- Generates player level progression data
|
|
37
|
+
- Calculates experience requirements per level
|
|
38
|
+
- Supports dynamic growth factors
|
|
39
|
+
- Required options: `startExp`, `baseGrowthFactor`, `maxLevel`
|
|
40
|
+
- Optional: `growthIncrease`, `baseGrowthFactorPerLevel`, `jsonFileName`, `generateFolderPath`
|
|
41
|
+
- Output includes: required exp, total exp, growth factor per level
|
|
42
|
+
|
|
43
|
+
**MonstersExperiencePerLevel** (lib/generator/monsters-experience-per-level.js):
|
|
44
|
+
- Generates monster/enemy experience reward tables
|
|
45
|
+
- Supports multiple variations (weak, normal, strong, etc.)
|
|
46
|
+
- Validates experience progression to prevent decreasing values
|
|
47
|
+
- Required options: `levelsExperienceByKey`, `variations`, `decrementProportionPerLevel`
|
|
48
|
+
- Optional: `jsonFileName`, `generateFolderPath`
|
|
49
|
+
- Output includes: exp per kill, kills required, variation factors
|
|
50
|
+
|
|
51
|
+
**AttributesPerLevel** (lib/generator/attributes-per-level.js):
|
|
52
|
+
- Generates character stats/attributes per level
|
|
53
|
+
- Supports multiple entity types with templates
|
|
54
|
+
- Applies scaling factors and variations
|
|
55
|
+
- Required options: `templateBase`, `typeTemplates`, `typesVariations`
|
|
56
|
+
- Optional: `setBaseAsInitialLevel`, `maxLevel`, `typeScaleFactorRandom`, `scaleDivisor`, `levelDivisor`, `jsonFileName`, `generateFolderPath`
|
|
57
|
+
- Output includes: stats by variation and level
|
|
58
|
+
|
|
59
|
+
### Validators
|
|
60
|
+
|
|
61
|
+
**PlayersExperiencePerLevelValidator** (lib/validator/players-experience-per-level-validator.js):
|
|
62
|
+
- Validates `startExp`, `baseGrowthFactor`, `maxLevel` are provided
|
|
63
|
+
|
|
64
|
+
**MonstersExperiencePerLevelValidator** (lib/validator/monsters-experience-per-level-validator.js):
|
|
65
|
+
- Validates `levelsExperienceByKey`, `variations`, `decrementProportionPerLevel` are provided
|
|
66
|
+
|
|
67
|
+
**AttributesPerLevelValidator** (lib/validator/attributes-per-level-validator.js):
|
|
68
|
+
- Validates `templateBase`, `typeTemplates`, `typesVariations` are provided
|
|
69
|
+
|
|
70
|
+
## Usage Pattern
|
|
71
|
+
|
|
72
|
+
```javascript
|
|
73
|
+
const { PlayersExperiencePerLevel } = require('@reldens/game-data-generator');
|
|
74
|
+
|
|
75
|
+
let generator = new PlayersExperiencePerLevel({
|
|
76
|
+
startExp: 100,
|
|
77
|
+
baseGrowthFactor: 1.15,
|
|
78
|
+
maxLevel: 100
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
generator.generate();
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Dependencies
|
|
85
|
+
|
|
86
|
+
- `@reldens/utils`: Provides Logger and sc (Shortcuts) for safe property access
|
|
87
|
+
- `@reldens/server-utils`: Provides FileHandler for file operations
|
|
88
|
+
|
|
89
|
+
## Important Notes
|
|
90
|
+
|
|
91
|
+
- All generators validate options before execution
|
|
92
|
+
- Generated files are timestamped to avoid overwriting
|
|
93
|
+
- Output folder defaults to `generated` in current directory
|
|
94
|
+
- All generators use FileHandler for safe file operations
|
|
95
|
+
- Logging uses Logger from @reldens/utils
|
|
96
|
+
- Property access uses sc.get() for safe defaults
|
|
97
|
+
- Follows Reldens coding standards (no else, Yoda conditions, let over const, etc.)
|
package/README.md
CHANGED
|
@@ -2,18 +2,233 @@
|
|
|
2
2
|
|
|
3
3
|
# Reldens - Game Data Generator
|
|
4
4
|
|
|
5
|
-
A tool to
|
|
5
|
+
A comprehensive tool to generate balanced game data for RPG systems, including player progression, monster rewards, and attribute scaling.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Features
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
- Player experience curve generation with dynamic growth factors
|
|
10
|
+
- Monster/NPC experience reward tables with variations
|
|
11
|
+
- Character attributes and stats scaling per level
|
|
12
|
+
- Configurable templates and variations
|
|
13
|
+
- JSON output for easy integration
|
|
14
|
+
- Validation of all generator options
|
|
15
|
+
- Timestamped output files to prevent overwriting
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @reldens/game-data-generator
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
### PlayersExperiencePerLevel
|
|
26
|
+
|
|
27
|
+
Generates player level progression data with experience requirements.
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
const { PlayersExperiencePerLevel } = require('@reldens/game-data-generator');
|
|
31
|
+
|
|
32
|
+
let generator = new PlayersExperiencePerLevel({
|
|
33
|
+
startExp: 100,
|
|
34
|
+
baseGrowthFactor: 1.15,
|
|
35
|
+
maxLevel: 100,
|
|
36
|
+
growthIncrease: 0.01,
|
|
37
|
+
jsonFileName: 'player-levels.json',
|
|
38
|
+
generateFolderPath: 'generated'
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
generator.generate();
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Required Options:**
|
|
45
|
+
- `startExp`: Experience required to reach level 2 from level 1
|
|
46
|
+
- `baseGrowthFactor`: Initial growth factor per level (e.g., 1.15 = 15% increase)
|
|
47
|
+
- `maxLevel`: Maximum level to calculate
|
|
48
|
+
|
|
49
|
+
**Optional Options:**
|
|
50
|
+
- `growthIncrease`: Increase in growth factor per level (default: 0)
|
|
51
|
+
- `baseGrowthFactorPerLevel`: Object with specific growth factors per level
|
|
52
|
+
- `jsonFileName`: Output filename (default: auto-generated with timestamp)
|
|
53
|
+
- `generateFolderPath`: Output folder path (default: 'generated')
|
|
54
|
+
|
|
55
|
+
**Output Format:**
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"1": {"req": 100, "total": 100, "growthFactor": 1.15},
|
|
59
|
+
"2": {"diff": 15, "req": 115, "total": 215, "growthFactor": 1.16},
|
|
60
|
+
...
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### MonstersExperiencePerLevel
|
|
65
|
+
|
|
66
|
+
Generates monster/enemy experience reward tables with variations.
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
const { MonstersExperiencePerLevel } = require('@reldens/game-data-generator');
|
|
70
|
+
|
|
71
|
+
let generator = new MonstersExperiencePerLevel({
|
|
72
|
+
levelsExperienceByKey: {
|
|
73
|
+
"1": {"req": 100},
|
|
74
|
+
"2": {"req": 115},
|
|
75
|
+
...
|
|
76
|
+
},
|
|
77
|
+
variations: {
|
|
78
|
+
"weak": 0.5,
|
|
79
|
+
"normal": 1.0,
|
|
80
|
+
"strong": 1.5
|
|
81
|
+
},
|
|
82
|
+
decrementProportionPerLevel: {
|
|
83
|
+
"1": 0.1,
|
|
84
|
+
"2": 0.12,
|
|
85
|
+
...
|
|
86
|
+
},
|
|
87
|
+
jsonFileName: 'monster-rewards.json',
|
|
88
|
+
generateFolderPath: 'generated'
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
generator.generate();
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Required Options:**
|
|
95
|
+
- `levelsExperienceByKey`: Object with experience requirements per level
|
|
96
|
+
- `variations`: Object with variation multipliers (e.g., weak, normal, strong)
|
|
97
|
+
- `decrementProportionPerLevel`: Object with decrement proportions per level
|
|
98
|
+
|
|
99
|
+
**Optional Options:**
|
|
100
|
+
- `jsonFileName`: Output filename (default: auto-generated with timestamp)
|
|
101
|
+
- `generateFolderPath`: Output folder path (default: 'generated')
|
|
102
|
+
|
|
103
|
+
**Output Format:**
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"1": {
|
|
107
|
+
"req": 100,
|
|
108
|
+
"weak": {"decrementProportion": 0.1, "randomVariation": 0.5, "exp": 50, "kills": 2},
|
|
109
|
+
"normal": {"decrementProportion": 0.1, "randomVariation": 1.0, "exp": 100, "kills": 1}
|
|
110
|
+
},
|
|
111
|
+
...
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### AttributesPerLevel
|
|
116
|
+
|
|
117
|
+
Generates character stats/attributes per level with type templates and variations.
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
const { AttributesPerLevel } = require('@reldens/game-data-generator');
|
|
121
|
+
|
|
122
|
+
let generator = new AttributesPerLevel({
|
|
123
|
+
templateBase: {
|
|
124
|
+
"hp": 100,
|
|
125
|
+
"mp": 50,
|
|
126
|
+
"atk": 10,
|
|
127
|
+
"def": 8
|
|
128
|
+
},
|
|
129
|
+
typeTemplates: {
|
|
130
|
+
"warrior": {
|
|
131
|
+
"hp": 2.0,
|
|
132
|
+
"atk": 1.5,
|
|
133
|
+
"def": 1.8
|
|
134
|
+
},
|
|
135
|
+
"mage": {
|
|
136
|
+
"mp": 2.5,
|
|
137
|
+
"atk": 1.2,
|
|
138
|
+
"def": 0.8
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
typesVariations: {
|
|
142
|
+
"common": {"min": 0.8, "max": 1.0},
|
|
143
|
+
"rare": {"min": 1.2, "max": 1.5}
|
|
144
|
+
},
|
|
145
|
+
maxLevel: 50,
|
|
146
|
+
setBaseAsInitialLevel: true,
|
|
147
|
+
jsonFileName: 'attributes.json',
|
|
148
|
+
generateFolderPath: 'generated'
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
generator.generate();
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Required Options:**
|
|
155
|
+
- `templateBase`: Base stats object with initial values
|
|
156
|
+
- `typeTemplates`: Object with stat multipliers per entity type
|
|
157
|
+
- `typesVariations`: Object with variation ranges (min/max)
|
|
158
|
+
|
|
159
|
+
**Optional Options:**
|
|
160
|
+
- `setBaseAsInitialLevel`: Use base stats for level 1 (default: false)
|
|
161
|
+
- `maxLevel`: Maximum level to generate (default: 100)
|
|
162
|
+
- `typeScaleFactorRandom`: Random seed for scaling (default: Math.random())
|
|
163
|
+
- `scaleDivisor`: Divisor for scale calculation (default: 10)
|
|
164
|
+
- `levelDivisor`: Divisor for level calculation (default: 10)
|
|
165
|
+
- `jsonFileName`: Output filename (default: auto-generated with timestamp)
|
|
166
|
+
- `generateFolderPath`: Output folder path (default: 'generated')
|
|
167
|
+
|
|
168
|
+
**Output Format:**
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"statsByVariation": {
|
|
172
|
+
"common": {
|
|
173
|
+
"1": {"hp": 100, "mp": 50, "atk": 10, "def": 8},
|
|
174
|
+
"2": {"hp": 112, "mp": 56, "atk": 11, "def": 9},
|
|
175
|
+
...
|
|
176
|
+
},
|
|
177
|
+
"rare": {
|
|
178
|
+
...
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"typeScaleFactorRandom": 0.6234567
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## API Reference
|
|
186
|
+
|
|
187
|
+
### GameDataGenerator (Base Class)
|
|
188
|
+
|
|
189
|
+
Base class for all generators. Not used directly.
|
|
190
|
+
|
|
191
|
+
**Methods:**
|
|
192
|
+
- `setReady(props)`: Initializes generator with options and validates
|
|
193
|
+
- `setOptions(options)`: Sets generator options (implemented by subclasses)
|
|
194
|
+
- `validate()`: Validates options using validator
|
|
195
|
+
- `generate()`: Generates data and saves to file (implemented by subclasses)
|
|
196
|
+
|
|
197
|
+
**Properties:**
|
|
198
|
+
- `currentDate`: Timestamp for file naming
|
|
199
|
+
- `optionsValidator`: Validator instance
|
|
200
|
+
- `fileHandler`: FileHandler from @reldens/server-utils
|
|
201
|
+
- `isReady`: Boolean indicating if generator is ready
|
|
202
|
+
|
|
203
|
+
### Validators
|
|
204
|
+
|
|
205
|
+
Each generator has a corresponding validator that checks required options:
|
|
206
|
+
|
|
207
|
+
- `PlayersExperiencePerLevelValidator`
|
|
208
|
+
- `MonstersExperiencePerLevelValidator`
|
|
209
|
+
- `AttributesPerLevelValidator`
|
|
210
|
+
|
|
211
|
+
All validators have a `validate(options)` method that returns `true` if valid, `false` otherwise.
|
|
212
|
+
|
|
213
|
+
## Dependencies
|
|
214
|
+
|
|
215
|
+
- `@reldens/utils`: Logger and Shortcuts utilities
|
|
216
|
+
- `@reldens/server-utils`: FileHandler for file operations
|
|
217
|
+
|
|
218
|
+
## Output
|
|
219
|
+
|
|
220
|
+
All generators save JSON files to the `generated` folder by default. Files are timestamped to prevent overwriting previous generations.
|
|
221
|
+
|
|
222
|
+
Example output filename: `players-experience-per-level-2025-11-20-14-30-45.json`
|
|
12
223
|
|
|
13
224
|
## Documentation
|
|
14
225
|
|
|
15
226
|
[https://www.reldens.com/documentation/game-data-generator/](https://www.reldens.com/documentation/game-data-generator/)
|
|
16
227
|
|
|
228
|
+
## Need a Feature?
|
|
229
|
+
|
|
230
|
+
[Request a feature here: https://www.reldens.com/features-request](https://www.reldens.com/features-request)
|
|
231
|
+
|
|
17
232
|
---
|
|
18
233
|
|
|
19
234
|
### [Reldens](https://github.com/damian-pastorini/reldens/ "Reldens")
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reldens/game-data-generator",
|
|
3
3
|
"scope": "@reldens",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.21.0",
|
|
5
5
|
"description": "Reldens - Game Data Generator",
|
|
6
6
|
"author": "Damian A. Pastorini",
|
|
7
7
|
"license": "MIT",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"url": "https://github.com/damian-pastorini/game-data-generator/issues"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@reldens/utils": "^0.
|
|
41
|
-
"@reldens/server-utils": "^0.
|
|
40
|
+
"@reldens/utils": "^0.54.0",
|
|
41
|
+
"@reldens/server-utils": "^0.41.0"
|
|
42
42
|
}
|
|
43
43
|
}
|