Enable MQ Dungeons in Randomizer (#1828)

* Refactor GetCheckFromActor, WIP currently broken

* Fixes build errors via forward declarations and emplace vs insert.

* Removes some unnecessary code.

* Fixes non-windows build errors.

* Fixes Deku Scrubs outside of grottos.

* Fixes DMC Deku Scrub Grotto Center

* Fixes Ruto Blue Warp

* Fix issue identifying blue warp rando checks

* Move identifyCow to randomizer.cpp

* Various updates to vanilla check objects

* Identify MQ checks in check object table

* Adjustments to how multimap is used and initialized

* Convert u16 in check object table to s16

* Fix a few issues with MQ checks

* Fix issue with TWO_ACTOR_PARAMS macro

* Fixes some scrubs and cows appearing as identical.

* Fixes known gossip stone issues (ToT, DC)

* Fixes Dampe's Gravedigging tour rcObject

* Fix crash on locations tab

* Enable master quest dungeons in rando

Co-authored-by: Christopher Leggett <chris@leggett.dev>
This commit is contained in:
Garrett Cox 2022-10-21 20:43:37 -05:00 committed by GitHub
commit 1db4e9303e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 1197 additions and 2583 deletions

View file

@ -1,9 +1,12 @@
#pragma once
#include "randomizerTypes.h"
#include <string>
#include <vector>
#include <map>
// Forward Declarations to avoid duplicate definition issues
enum ActorID : int;
enum SceneID : int;
// Check types based on main settings
typedef enum {
RCTYPE_STANDARD, // Base set of rando checks
@ -64,11 +67,20 @@ typedef enum {
RCAREA_INVALID
} RandomizerCheckArea;
#define TWO_ACTOR_PARAMS(a, b) (abs(a) << 16) | abs(b)
#define RC_OBJECT(rc, rc_v_or_mq, rc_type, rc_area, actor_id, scene_id, actor_params, og_item_id, rc_shortname, rc_spoilername) \
{ rc, {rc, rc_v_or_mq, rc_type, rc_area, actor_id, scene_id, actor_params, og_item_id, false, rc_shortname, rc_spoilername} }
typedef struct {
RandomizerCheck rc;
RandomizerCheckVanillaOrMQ vOrMQ;
RandomizerCheckType rcType;
RandomizerCheckArea rcArea;
ActorID actorId;
SceneID sceneId;
int32_t actorParams;
GetItemID ogItemId;
bool visibleInImgui;
std::string rcShortName;
std::string rcSpoilerName;
@ -78,6 +90,7 @@ namespace RandomizerCheckObjects {
bool AreaIsDungeon(RandomizerCheckArea area);
bool AreaIsOverworld(RandomizerCheckArea area);
std::string GetRCAreaName(RandomizerCheckArea area);
std::map<RandomizerCheckArea, std::vector<RandomizerCheckObject>> GetAllRCObjects();
std::map<RandomizerCheck, RandomizerCheckObject> GetAllRCObjects();
std::map<RandomizerCheckArea, std::map<RandomizerCheck, RandomizerCheckObject>> GetAllRCObjectsByArea();
void UpdateImGuiVisibility();
}