Skip to content

Commit e074b3c

Browse files
committed
Merge branch 'Dev' into dev-fenhl
# Conflicts: # ASM/build/asm_symbols.txt # ASM/build/bundle.o # ASM/build/c_symbols.txt # Goals.py # data/generated/patch_symbols.json # data/generated/rom_patch.txt # data/generated/symbols.json
2 parents 2a4dbf0 + da00d67 commit e074b3c

30 files changed

+14199
-14012
lines changed

ASM/build/asm_symbols.txt

Lines changed: 493 additions & 491 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ASM/build/bundle.o

356 Bytes
Binary file not shown.

ASM/build/c_symbols.txt

Lines changed: 446 additions & 445 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ASM/c/main.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ void before_game_state_update() {
5151
manage_music_changes();
5252
manage_uninvert_yaxis();
5353
display_misc_messages();
54+
#if DEBUG_MODE
55+
manage_debug_inputs();
56+
#endif
5457
}
5558

5659
void after_game_state_update() {

ASM/c/models.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -238,79 +238,79 @@ void item_etcetera_draw(z64_actor_t* actor, z64_game_t* game) {
238238
.flag = 0x0A,
239239
};
240240
override = lookup_override_by_key(key);
241-
} else if (actor->variable == 0x0008 && SHUFFLE_CHEST_GAME) {
241+
} else if (actor->variable == 0x0008 && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
242242
//Chest Game Room 1 Bottom Chest item inside chest
243243
override_key_t key = {
244244
.scene = 0x10,
245245
.type = OVR_CHEST,
246246
.flag = 0x00,
247247
};
248248
override = lookup_override_by_key(key);
249-
} else if (actor->variable == 0x010D && SHUFFLE_CHEST_GAME) {
249+
} else if (actor->variable == 0x010D && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
250250
//Chest Game Room 1 Top Chest item inside chest
251251
override_key_t key = {
252252
.scene = 0x10,
253253
.type = OVR_CHEST,
254254
.flag = 0x01,
255255
};
256256
override = lookup_override_by_key(key);
257-
} else if (actor->variable == 0x0208 && SHUFFLE_CHEST_GAME) {
257+
} else if (actor->variable == 0x0208 && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
258258
//Chest Game Room 2 Bottom Chest item inside chest
259259
override_key_t key = {
260260
.scene = 0x10,
261261
.type = OVR_CHEST,
262262
.flag = 0x02,
263263
};
264264
override = lookup_override_by_key(key);
265-
} else if (actor->variable == 0x030D && SHUFFLE_CHEST_GAME) {
265+
} else if (actor->variable == 0x030D && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
266266
//Chest Game Room 2 Top Chest item inside chest
267267
override_key_t key = {
268268
.scene = 0x10,
269269
.type = OVR_CHEST,
270270
.flag = 0x03,
271271
};
272272
override = lookup_override_by_key(key);
273-
} else if (actor->variable == 0x0409 && SHUFFLE_CHEST_GAME) {
273+
} else if (actor->variable == 0x0409 && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
274274
//Chest Game Room 3 Bottom Chest item inside chest
275275
override_key_t key = {
276276
.scene = 0x10,
277277
.type = OVR_CHEST,
278278
.flag = 0x04,
279279
};
280280
override = lookup_override_by_key(key);
281-
} else if (actor->variable == 0x050D && SHUFFLE_CHEST_GAME) {
281+
} else if (actor->variable == 0x050D && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
282282
//Chest Game Room 3 Top Chest item inside chest
283283
override_key_t key = {
284284
.scene = 0x10,
285285
.type = OVR_CHEST,
286286
.flag = 0x05,
287287
};
288288
override = lookup_override_by_key(key);
289-
} else if (actor->variable == 0x0609 && SHUFFLE_CHEST_GAME) {
289+
} else if (actor->variable == 0x0609 && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
290290
//Chest Game Room 4 Bottom Chest item inside chest
291291
override_key_t key = {
292292
.scene = 0x10,
293293
.type = OVR_CHEST,
294294
.flag = 0x06,
295295
};
296296
override = lookup_override_by_key(key);
297-
} else if (actor->variable == 0x070D && SHUFFLE_CHEST_GAME) {
297+
} else if (actor->variable == 0x070D && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
298298
//Chest Game Room 4 Top Chest item inside chest
299299
override_key_t key = {
300300
.scene = 0x10,
301301
.type = OVR_CHEST,
302302
.flag = 0x07,
303303
};
304304
override = lookup_override_by_key(key);
305-
} else if (actor->variable == 0x080A && SHUFFLE_CHEST_GAME) {
305+
} else if (actor->variable == 0x080A && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
306306
//Chest Game Room 5 Bottom Chest item inside chest
307307
override_key_t key = {
308308
.scene = 0x10,
309309
.type = OVR_CHEST,
310310
.flag = 0x08,
311311
};
312312
override = lookup_override_by_key(key);
313-
} else if (actor->variable == 0x090D && SHUFFLE_CHEST_GAME) {
313+
} else if (actor->variable == 0x090D && (SHUFFLE_CHEST_GAME || CUSTOM_KEY_MODELS)) {
314314
//Chest Game Room 5 Top Chest item inside chest
315315
override_key_t key = {
316316
.scene = 0x10,

ASM/c/models.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include "override.h"
66
#include <stdint.h>
77

8+
extern uint8_t CUSTOM_KEY_MODELS;
9+
810
typedef struct model_t {
911
uint16_t object_id;
1012
uint8_t graphic_id;

ASM/src/config.asm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@ SHUFFLE_SILVER_RUPEES:
209209
.byte 0x00
210210
CFG_DUNGEON_INFO_SILVER_RUPEES:
211211
.byte 0x00
212+
CUSTOM_KEY_MODELS:
213+
.byte 0x00
212214
SHUFFLE_OCARINA_BUTTONS:
213215
.byte 0x00
214216
EPONAS_SONG_NOTES:

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,21 @@
55
* The `Free Reward from Rauru` has a new `Yes (Forced)` option which forces the check to be a dungeon reward even if these are otherwise shuffled.
66
* The `Maps & Compasses` shuffle setting has been split into separate `Maps` and `Compasses` settings.
77
* The Farore's Wind text box now distinguishes between Ganon's Castle and Ganon's Tower.
8-
* New `Water Hop` trick added to advanced logic.
8+
* New `Water Hop` trick and `BotW Cucco Dive` glitch added to advanced logic.
99
* Improve Debug menu with new options.
10+
* Refill items sold as special deals are now less likely to cost more than the "market price" of a repeatable purchase.
11+
* The heart chest texture has been tweaked to display heart icons on the lid rather than triangles.
1012

1113
## Bug fixes
1214
* Fix a potential softlock when talking to Pierre (the upper scarecrow) as child in Lake Hylia.
1315
* Fix a generator failure when a dungeon reward is selected as a random starting item.
1416
* Fix a bug where the starting health capacity in game might be miscalculated when starting with a heart piece.
1517
* Fix the Chicken (child trade quest item) using the same get item text box as the Pocket Cucco (adult trade quest item).
1618
* Fix a vanilla bug where playing the ocarina with vibrato before recording the Scarecrow's Song could prevent Pierre from spawning.
19+
* Fix unshuffled treasure box shop keys showing the wrong item model while inside the chests if `Key Appearance Matches Dungeon` is enabled.
20+
* Add two missing locations: `Ganons Castle MQ Shadow Trial Explosives Wonderitem` and a `Bombable Fairy` in MQ Jabu.
21+
* Improve the error message when a settings string from the wrong randomizer version is imported.
22+
* Fix wrong Goal hints being generated for worlds other than the first in multiworld seeds.
1723

1824
# 9.0
1925

CONTRIBUTING.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ These labels are used to keep track of what still needs to be done for an issue
3737
* **Request changes:** There are parts of the code that you think should be changed, and/or you have questions that need to be clarified.
3838
* **Approve:** You think this PR is ready to go. This label will be removed once a PR has at least one approving review and none requesting changes (or the reviewers who requested changes have gone inactive).
3939
* **Needs Testing:** This label is given to every new PR. Someone (does not have to be a dev team member) should make sure the PR does what it says it does, usually by rolling a seed on the PR branch and either testing relevant parts of the game or checking the generated spoiler log, depending on the nature of the PR. Testing can be done by the PR author, so if you let us know what testing you've done on your PR and/or include screenshots or videos, we may skip adding this label entirely. The extent of testing required depends on how big the PR is; if you're not sure what exactly needs to be tested, ask in the PR thread or on Discord.
40-
* **Under Consideration:** This label is given to every enhancement (new feature) issue/PR. The dev team will decide whether this feature is something we want in the randomizer, usually in one of [our calls](https://wiki.ootrandomizer.com/index.php?title=Dev_team_calls). An issue being accepted doesn't necessarily mean that the dev team will actively work on it though.
40+
* **Under Consideration:** This label is given to every enhancement (new feature) issue/PR. The dev team will decide whether this feature is something we want in the randomizer, usually in one of [our calls](https://wiki.ootrandomizer.com/index.php?title=Dev_team_calls) or a private poll. An issue being accepted doesn't necessarily mean that the dev team will actively work on it though. An enhancement for which a poll is currently open is called “nominated”, and the possible outcomes are called “accepted” (indicated by the label being removed) and “rejected” (with the issue/PR being closed with an explanation). Note that this is independent of code review: an enhancement PR needs to be both accepted and approved to be merged. There are some exceptions where enhancements skip this label:
41+
* Tournament organizers may request features privately to avoid revealing future tournament settings. In this case, the dev team still decides whether to accept or reject the feature, but the label is skipped if the feature has already been accepted at the time a PR is opened.
42+
* If a PR is made for an issue that has already been accepted, the PR is accepted as well.
43+
* Glitches and tricks added to advanced logic by @dotzo or @shirosoluna are preaccepted.
4144
* **Waiting for Author:** This label is given to PRs when changes were requested, e.g. in a code review. It's also given to bug reports when we need more info from the reporter.
4245
* **Waiting for Maintainers:** We need to do something to progress this issue/PR, e.g. make a decision on which way a new feature should work.
4346
* **Waiting for Release:** This PR is otherwise ready to be merged, but we are currently in feature freeze (and this is an enhancement PR) or full freeze, and so we're waiting until after the upcoming release to merge it. See the [Release cycle](#release-cycle) section for details.
@@ -78,4 +81,6 @@ Regular releases of the randomizer roughly follow this schedule:
7881
* Full freeze also lasts at least one week and may take longer if beta tester activity is low.
7982
* If no critical issues are found during beta testing, the release is published and any PRs labelled “waiting for release” are merged to start off the next release cycle.
8083

84+
The current state of the release cycle is pinned in the #dev-public-talk Discord channel.
85+
8186
There may also be hotfix releases which bypass this procedure, e.g. in case of a severe bug that wasn't caught in beta testing or in case of changes to racing presets.

Goals.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,13 @@ def update_goal_items(spoiler: Spoiler) -> None:
249249
woth_locations = list(required_locations['way of the hero'])
250250
del required_locations['way of the hero']
251251

252+
# Update category and goal weights that have required locations
253+
for category_name, goals in required_locations.items():
254+
for goal_name, goal_worlds in goals.items():
255+
for world_id, locations in goal_worlds.items():
256+
worlds[world_id].goal_categories[category_name].weight = 1
257+
worlds[world_id].goal_categories[category_name].get_goal(goal_name).weight = 1
258+
252259
# Generate location requirements for each WOTH location
253260
requirements_by_world = {}
254261
requirements = search_required_locations(woth_locations, woth_locations, worlds)
@@ -370,8 +377,7 @@ def search_goals(categories: dict[str, GoalCategory], reachable_goals: ValidGoal
370377
else:
371378
location_weights = (location, 1, 1)
372379
required_locations[category.name][goal.name][world_id].append(location_weights)
373-
goal.weight = 1
374-
category.weight = 1
380+
375381
# Locations added to goal exclusion for future categories
376382
# Main use is to split goals between before/after rainbow bridge
377383
# Requires goal categories to be sorted by priority!

0 commit comments

Comments
 (0)