You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Oct 28, 2022. It is now read-only.
Copy file name to clipboardexpand all lines: Config/README.md
+77-9
Original file line number
Diff line number
Diff line change
@@ -7,112 +7,148 @@ The order in which these files are loaded is sorted alphabetically. If you requi
7
7
# Documentation
8
8
9
9
## `name`: `string`
10
+
10
11
Sets a name for the configuration file, this name will be shown in the CLI to help users figure out which configuration was used for their ROM.
11
12
12
13
## `rom`: `object`
14
+
13
15
Starts the definition of ROM specific configurations
14
16
15
17
### `rom[].checksum`: `int,int[]`
18
+
16
19
Checksum(s) that will match this specific ROM configuration as hex numbers, i.e. `0x0000001`. If any of these checksums match, it will use this configuration.
17
20
18
21
### `rom[].name`: `string`
22
+
19
23
Name of this ROM configuration, can include information about Endianess, Region, ROM-Type (Extended, Vanilla) to further narrow down which configuration was used. This information is only visible when using the CLI.
20
24
21
25
### `rom[].macro_table_address`: `int`
26
+
22
27
Start of Macro Object Preset Table. This table is used to determine which macro preset id corresponds to which object. If you're unsure about this, it is most likely the same as the default. Check `sm64.vanilla.yml`
23
28
24
29
### `rom[].special_macro_table_address`: `int`
30
+
25
31
Start of Special Macro Object Preset Tabel. This table is sued to determine which special macro preset id corresponds to which object. If you're unsure about this, it is most likely the same as the default. Check `sm64.vanilla.yml`
26
32
27
33
### `rom[].defined_segments[]`
34
+
28
35
This section defines segments that are loaded by default. This varries by region. If you're unsure about this, it is most likely the same as the default. Check `sm64.vanilla.yml`
29
36
30
37
### `rom[].defined_segments[].segment`: `int`
38
+
31
39
Segment ID of the segment that will be auto-loaded in this particular ROM.
Should the addresses defined as `start` and `end` be used to look up the addresses that define the segment, or are the addresses themselves the addresses that define this segment. If `read_addresses` is true, it will read the defined `start` and `end` addresses to determine the start and end.
35
44
36
45
### `rom[].defined_segments[].start`: `int`
46
+
37
47
Start of segment
38
48
39
49
### `rom[].defined_segments[].end`: `int`
50
+
40
51
End of segment
41
52
42
53
## `levels`
54
+
43
55
This will define which levels this ROM contains and also their paintings, if they have one. It is also used to determine which levels have special properties, like `overworld`, `slide` and many others. see [level properties](#level-properties)
44
56
45
57
### `levels[].name`: `string`
58
+
46
59
The name of the level. Displayed as information for the user and to make this file human readable.
47
60
48
61
### `levels[].course_id`: `int`
62
+
49
63
The internal course-id. Not the games course numbers.
50
64
51
65
### `levels[].properties`: `object`
66
+
52
67
Properties that this level contains. These can disable/enable certain functionality, alter rules, ensure order, define the painting for this level and many more. See [level properties](#level-properties).
53
68
54
69
### `levels[].exclude`: `object`
70
+
55
71
Properties that this level **can not** contain. See `levels[].properties`
56
72
57
73
### `levels[].areas[]`
58
-
If a level contains different areas with different properties, those can be defined here as well.
74
+
75
+
If a level contains different areas with different properties, those can be defined here as well.
59
76
60
77
### `levels[].areas[].id`: `int`
78
+
61
79
ID of the area, so it can be identified by the program.
62
80
63
81
### `levels[].areas[].name`: `string`
82
+
64
83
Name of the area, for human readability and user information in the CLI.
65
84
66
85
### `levels[].areas[].properties`
86
+
67
87
Properties that this area contains. These disable/enable certain functionality, alter rules, ensure order, define the painting for this level and many more. See [level properties](#level-properties).
68
88
69
89
### `levels[].areas[].exclude`: `object`
90
+
70
91
Properties that this level **can not** contain. See `levels[].properties`
71
92
72
93
## `object_randomization`
94
+
73
95
Start of nested object definition table. This sections consists of `rules`, defining which rules to enforce for this group, `match`, defining which objects it should match with and `objects`, defining more specific objects or types of objects that need special properties too.
74
96
75
97
### `object_randomization.rules`
98
+
76
99
Which rules to enforce for this object definition group. See [rules](#rules) for a complete list and documentation of rules.
77
100
78
101
### `object_randomization.match`
102
+
79
103
Which objects will match this object definition group. This key is optional and without it, object definition groups can be used to group together multiple objects that should all have the same or similar rules. See [matching](#matching) for a complete list of ways to match different kinds of objects.
80
104
81
105
### `object_randomization.for`: `string[]`
106
+
82
107
You can use this property to "copy" a set of rules here. Use the full name of the object definition group you want to include here.
83
108
84
109
### `object_randomization.objects[]`
110
+
85
111
This allows you to nest more objects. `object_randomization` is the root definition, defining default rules. All rules further down the table will overwrite rules defined closer to the root.
86
112
87
113
# Level Properties
88
114
89
115
## `overworld`: `bool`
116
+
90
117
This will enable this level to be searched for level entries. All levels containing this property will be searched.
91
118
92
119
## `shuffle_warps`: `array`
120
+
93
121
This will enable this level to be searched for specific warps to specific levels, that can be shuffled with other warps. For example to shuffle between only the cap-levels in vanilla.
94
122
95
123
### `shuffle_warps[].to[]`
124
+
96
125
Warps to _which_ levels can be found with this property?
97
126
98
127
### `shuffle_warps[].to[].course_id`: `int`
128
+
99
129
Defines the course-id that should be matched.
100
130
101
131
### `shuffle_warps[].to[].area_id`: `int
132
+
102
133
Defines the area-id that should be matched.
103
134
104
135
### `shuffle_warps[].with[].course_id`: `int`
136
+
105
137
Defines the course-id that it can be shuffled with. The program will select one of the entries in `with`
106
138
107
139
### `shuffle_warps[].with[].area_id`: `int`
108
-
Defines the area-id that it can be shuffled with. It will only match complete sets, so if your `with` entry is
140
+
141
+
Defines the area-id that it can be shuffled with. It will only match complete sets, so if your `with` entry is
142
+
109
143
```yml
110
144
- course_id: 0x01
111
145
area_id: 0x01
112
146
```
147
+
113
148
it will use the whole set of `course_id` and `area_id`
114
149
115
150
## `shuffle_painting`: `object`
151
+
116
152
This will enable painting shuffling. The paintings are hardcoded right now. This will soon be altered to include the texture positions that need to be exchanged. For now, the valid values are:
117
153
118
154
The painting of a level can be defined, if the level can be associated to one. This will allow the randomizer to shuffle the various defined paintings in the game, to either: randomize them unrelated to the current randomized level entries, change them according to the randomized level entries, or fully replace them with a custom painting, if applicable. See [paintings](#paintings)
@@ -130,61 +166,84 @@ The painting of a level can be defined, if the level can be associated to one. T
130
166
- `painting_sl`
131
167
132
168
## `slide`: `bool`
169
+
133
170
This will enable special checks and rules for slide levels, such as:
171
+
134
172
- Spawn must remain about the same height, otherwise you start in the middle of the slide.
135
173
- Coin/Object spawns are less restrictive about slope placement, so it can still be placed on the slide.
136
174
137
175
## `fly_stage`: `bool`
176
+
138
177
This will enable special checks and rules for level with a wing-cap available, or where a wing-cap is your main method of movement.
178
+
139
179
- Spawns can be over death-floor
140
180
141
181
## `disable_water_check`: `bool`
182
+
142
183
Use this in level where water can be changed, to allow the program to place objects underwater.
184
+
143
185
- Disables underwater rules
144
186
145
187
## `requires_key`: `int`
146
-
Defines which "key" is needed for this level, if it were unshuffled. In combination with `key_receive` you can define which levels need to be available before *this* level can be reached.
188
+
189
+
Defines which "key" is needed for this level, if it were unshuffled. In combination with `key_receive` you can define which levels need to be available before _this_ level can be reached.
147
190
148
191
## `key_receive`: `int`
192
+
149
193
Defines that this level will reward the player with a "key" after completion. Can be used to ensure correct order of levels.
150
194
151
195
## `continues_level`: `int`
196
+
152
197
Defines that this level will _continue_ as another level, i.e. bowser and bowser-fight levels. This is to ensure that the exit warps in the _continued_ level are also changed to the same exit warps as the current level. The value passed is the `course_id` of the target level.
153
198
154
199
## `disabled`: `object, bool`
200
+
155
201
The `disabled` as a boolean property disables all randomization properties for this level or area. Includes `object_randomization`, `painting_shuffle` and `entry_shuffle`
156
202
157
203
If an array of properties is defined, only those will be disabled.
158
204
159
205
## `end_game`: `bool`
206
+
160
207
Defines that this marks the end of the game.
161
208
162
209
# Rules
163
210
164
211
## `drop_to_floor`: `bool,string`
212
+
165
213
If set to string `force`, it will `drop_to_floor` even underwater. Otherwise underwater this rule will be ignored, so things float at any height in water.
166
214
167
215
This will set this object to drop down onto floor level when its position will be defined.
168
216
169
217
## `no_floor_required`: `bool`
218
+
170
219
If this property is set, the floor check will be skipped if no floor is found
171
220
172
221
## `max_slope`: `float`
222
+
173
223
Defines the maximum slope allowed. `1.0` is a wall. `0.0` is completely flat floor. A value of `0.0` will ensure only completely flat floors are considered as valid positions.
174
224
175
225
## `min_y`: `int`
226
+
176
227
Minimum absolute `y` coordinate of this object. Useful to limit spawning to be above a certain height. Use Quad64 to look up positions.
177
228
178
229
## `max_y`: `int`
230
+
179
231
Maximum absolute `y` coordinate of this object. Useful to limit spawning to be below a certain height. Use Quad64 to look up positions.
180
232
181
233
## `bounding_box`: `[int, int, int]`
234
+
182
235
Defines a bounding box for this object to check if it might clip into floor/walls. The order is `length` x `width` x `height`
183
236
237
+
## `max_uneven_distance`: `float or int`
238
+
239
+
When using bounding box, a floor check is done for all 4 corners. If the max distance from the objects bounding box and the floor it hit is bigger than this configured value, the position will be rejected.
240
+
184
241
## `spawn_height`: `[int, int]`
242
+
185
243
Defines the minimum and maximum spawn height allowed. The program will select a value between these two. For reference: Triple-Jump height is ~550
186
244
187
245
## `underwater`: `bool,string`
246
+
188
247
Allowed properties: `allowed`, `only`, `never`
189
248
If this property is set to `true` it will be `allowed` - if this property is set to `false` it will be `never`
190
249
`allowed`- Can be both above and underwater
@@ -194,50 +253,59 @@ If this property is set to `true` it will be `allowed` - if this property is set
194
253
# Matching
195
254
196
255
## `[default]`: `int,int[]`
256
+
197
257
If no other properties are necessary, you can directly define the behaviour address this object is supposed to match with. i.e.:
258
+
198
259
```yml
199
260
- match: 0x13002250
200
261
```
201
262
202
263
or to define multiple:
264
+
203
265
```yml
204
266
- match:
205
-
- 0x13002250
206
-
- 0x13002251
267
+
- 0x13002250
268
+
- 0x13002251
207
269
```
208
270
209
271
## `behaviour`: `int,int[]`
272
+
210
273
Can match one or more behaviour script addresses as integers. Same as `[default]`
211
274
212
275
## `source`: `string`
276
+
213
277
Allowed values:
278
+
214
279
- `PLACE_OBJ`spawned with the `0x20` command
215
280
- `MACRO_OBJ`spawned with the `0x39` command
216
281
- `SPECIAL_MACRO_OBJ`spawned with the `0x2E` command
217
282
- `MARIO_SPAWN`marios spawn inside this level via level command `0x2B`
218
283
219
284
## `course_property`: `string`
285
+
220
286
Matches specific property keys from a course.
221
287
See [level properties](#level-properties)
222
288
223
289
## `bparam[n]`: `any`
224
-
This is to match specific behaviour parameters. There is 4 in total from [1-4]. Only `0x20 (PLACE_OBJ)` objects will have all 4. Look up Behaviour Scripts for SM64 to find which behaviour parameters do what.
225
290
291
+
This is to match specific behaviour parameters. There is 4 in total from [1-4]. Only `0x20 (PLACE_OBJ)` objects will have all 4. Look up Behaviour Scripts for SM64 to find which behaviour parameters do what.
226
292
227
293
## Misc. Information
228
294
229
295
#### Debugging Mode
296
+
230
297
Using the Environment variable "SM64R" you can select different debugging modes. The allowed modes are
231
298
232
-
* `PRINT` - Enables more verbose output
233
-
* `PLOT` - Plots level geometries using plot.ly. Install requirements-dev to use.
299
+
-`PRINT`- Enables more verbose output
300
+
-`PLOT`- Plots level geometries using plot.ly. Install requirements-dev to use.
234
301
235
302
#### Positioning of Objects, Bounds, etc.
303
+
236
304
When taking the position from the plot.ly graphs, be sure to convert all positions from the labels like so:
237
305
238
306
in Plotly: `[X, Y, Z]`
239
307
in Config: `[-X, Z, Y]`
240
308
241
309
i.e. when taking the position from `[100, 200, 300]` plot.ly use it in the config as `[-100, 300, 200]`
242
310
243
-
This issue is occouring because plot.ly and sm64 use different conventions for the order and directions of vectors. :shrug:
311
+
This issue is occouring because plot.ly and sm64 use different conventions for the order and directions of vectors. :shrug:
0 commit comments